Revision: 201011
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
child 1 c15f09cdeab3
child 2 2e1adbfc62af
Revision: 201011 Kit: 201015
group/bld.inf
internetradio2.0/actionhandlerinc/iractionhandler.h
internetradio2.0/actionhandlerinc/iractionhandlerdefs.h
internetradio2.0/actionhandlersrc/iractionhandler.cpp
internetradio2.0/activeidleenginc/iractiveidleeng.h
internetradio2.0/activeidleenginc/iractiveidleengnotifyhandler.h
internetradio2.0/activeidleenginc/iractiveidleengpubsub.h
internetradio2.0/activeidleenginc/iractiveidleengpubsubnotifyhandler.h
internetradio2.0/activeidleengsrc/iractiveidleeng.cpp
internetradio2.0/activeidleengsrc/iractiveidleengpubsub.cpp
internetradio2.0/activeidleinc/iractiveidle.h
internetradio2.0/activeidleinc/iractiveidlestatedetector.h
internetradio2.0/activeidleinc/irplugincontentmodel.h
internetradio2.0/activeidlesrc/iractiveidle.cpp
internetradio2.0/activeidlesrc/iractiveidlemain.cpp
internetradio2.0/activeidlesrc/iractiveidlestatedetector.cpp
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle.css
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle.dtd
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle.xml
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_dat.dat
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_dat_reversed.dat
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_loc.dat
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_reversed.css
internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_reversed.xml
internetradio2.0/activeidlethemes/themes/ActiveIdle/iractiveidle.mif
internetradio2.0/activeidlethemes/themes/ActiveIdle/qsn_fr_popup_sub_mask_icon.svg
internetradio2.0/activeidlethemes/themes/ActiveIdle/vractiveidle.mif
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle.css
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle.dtd
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle.xml
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_dat.dat
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_loc.dat
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_reversed.css
internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_reversed.xml
internetradio2.0/activeidlethemes/themes/ClassicIdle/irclassicidle.mif
internetradio2.0/activeidlethemes/themes/ClassicIdle/vrclassicidle.mif
internetradio2.0/activeidlethemes/themes/iractiveidlemif.bat
internetradio2.0/aif/qgn_menu_irradio.svg
internetradio2.0/bmarm/iractiveidleengineu.def
internetradio2.0/bmarm/ircachemgmtu.def
internetradio2.0/bmarm/ircommandchannelu.def
internetradio2.0/bmarm/irdataprovideru.def
internetradio2.0/bmarm/irdatastructuresu.def
internetradio2.0/bmarm/irfavoritesdbu.def
internetradio2.0/bmarm/irgeneralsettings200u.def
internetradio2.0/bmarm/irlogutility.def
internetradio2.0/bmarm/irmcpplugin100u.def
internetradio2.0/bmarm/irnetworkcontrolleru.def
internetradio2.0/bmarm/irsessionlogu.def
internetradio2.0/bmarm/irsettingsu.def
internetradio2.0/bmarm/irsettingsviewu.def
internetradio2.0/bmarm/irsonghistoryu.def
internetradio2.0/bmarm/irstreamsourceu.def
internetradio2.0/bmarm/iruicontrolsu.def
internetradio2.0/bmarm/irxmlparseru.def
internetradio2.0/bmarm/isdsclientinterfaceu.def
internetradio2.0/bwinscw/iractiveidleengineu.def
internetradio2.0/bwinscw/ircachemgmtu.def
internetradio2.0/bwinscw/ircommandchannelu.def
internetradio2.0/bwinscw/irdataprovideru.def
internetradio2.0/bwinscw/irdatastructuresu.def
internetradio2.0/bwinscw/irfavoritesdbu.def
internetradio2.0/bwinscw/irgeneralsettings200u.def
internetradio2.0/bwinscw/irlogutility.def
internetradio2.0/bwinscw/irmcpplugin100u.def
internetradio2.0/bwinscw/irnetworkcontrolleru.def
internetradio2.0/bwinscw/irsessionlogu.def
internetradio2.0/bwinscw/irsettingsu.def
internetradio2.0/bwinscw/irsettingsviewu.def
internetradio2.0/bwinscw/irsonghistoryu.def
internetradio2.0/bwinscw/irstreamsourceu.def
internetradio2.0/bwinscw/iruicontrolsu.def
internetradio2.0/bwinscw/irxmlparseru.def
internetradio2.0/bwinscw/isdsclientinterfaceu.def
internetradio2.0/cachemgmtinc/ircachecleanup.h
internetradio2.0/cachemgmtinc/ircachemgmt.h
internetradio2.0/cachemgmtinc/ircacheobserver.h
internetradio2.0/cachemgmtsrc/ircachecleanup.cpp
internetradio2.0/cachemgmtsrc/ircachemgmt.cpp
internetradio2.0/cenrep/2000b499.txt
internetradio2.0/cenrep/cenrep_keys.pm
internetradio2.0/cenrep/cenrep_keys_syntax_checker.pl
internetradio2.0/cenrep/cenrep_start.ini
internetradio2.0/cenrep/excel_support.pm
internetradio2.0/cenrep/gather_cenrep_to_storable.pl
internetradio2.0/cenrep/generate_cenrep_inifile.pl
internetradio2.0/cenrep/keys_internetradio.xls
internetradio2.0/cenrep/readme.txt
internetradio2.0/commandchannelinc/ircontrolparams.h
internetradio2.0/commandchannelinc/irctrlcmdobserver.h
internetradio2.0/commandchannelinc/irctrlcommand.h
internetradio2.0/commandchannelsrc/irctrlcmdobserver.cpp
internetradio2.0/dataproviderinc/irdataprovider.h
internetradio2.0/dataproviderinc/irdataproviderconstants.h
internetradio2.0/dataproviderinc/irdataproviderobserver.h
internetradio2.0/dataproviderinc/irdataprovidertimer.h
internetradio2.0/dataproviderinc/irhttpdataprovider.h
internetradio2.0/dataproviderinc/irhttpdataproviderobserver.h
internetradio2.0/dataproviderinc/irhttppost.h
internetradio2.0/dataproviderinc/irhttprequestdata.h
internetradio2.0/dataproviderinc/irlogodownloadengine.h
internetradio2.0/dataproviderinc/mlogodownloadobserver.h
internetradio2.0/dataprovidersrc/irdataprovider.cpp
internetradio2.0/dataprovidersrc/irdataprovidertimer.cpp
internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp
internetradio2.0/dataprovidersrc/irhttppost.cpp
internetradio2.0/dataprovidersrc/irlogodownloadengine.cpp
internetradio2.0/datastructuresinc/iradvertisement.h
internetradio2.0/datastructuresinc/irbrowsecatagoryitems.h
internetradio2.0/datastructuresinc/irbrowsechannelitems.h
internetradio2.0/datastructuresinc/irchannelserverurl.h
internetradio2.0/datastructuresinc/irisdspreset.h
internetradio2.0/datastructuresinc/irlastplayedsongs.h
internetradio2.0/datastructuresinc/irotaupdate.h
internetradio2.0/datastructuressrc/iradvertisement.cpp
internetradio2.0/datastructuressrc/irbrowsecatagoryitems.cpp
internetradio2.0/datastructuressrc/irbrowsechannelitems.cpp
internetradio2.0/datastructuressrc/irchannelserverurl.cpp
internetradio2.0/datastructuressrc/irisdspreset.cpp
internetradio2.0/datastructuressrc/irlastplayedsongs.cpp
internetradio2.0/datastructuressrc/irotaupdate.cpp
internetradio2.0/favoritesdbinc/irfavoritesdb.h
internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp
internetradio2.0/filerecognizerinc/irrecognizer.h
internetradio2.0/filerecognizersrc/irrecognizer.cpp
internetradio2.0/generalsettingsinc/irgeneralsettingsview.h
internetradio2.0/generalsettingssrc/irgeneralsettingsimplementationtable.cpp
internetradio2.0/generalsettingssrc/irgeneralsettingsview.cpp
internetradio2.0/group/backup_registration.xml
internetradio2.0/group/bld.inf
internetradio2.0/group/bld_loc.bat
internetradio2.0/group/copyradiothemes.bat
internetradio2.0/group/iconlist.txt
internetradio2.0/group/installradiothemes.bat
internetradio2.0/group/internetradio.mmp
internetradio2.0/group/internetradio_aif.mk
internetradio2.0/group/internetradioconfigurationflags.hrh
internetradio2.0/group/internetradioedwinskin.mk
internetradio2.0/group/internetradioiconsskin.mk
internetradio2.0/group/iractionhandler.mmp
internetradio2.0/group/iractiveidle.mmp
internetradio2.0/group/iractiveidleengine.mmp
internetradio2.0/group/ircachemgmt.mmp
internetradio2.0/group/ircommandchannel.mmp
internetradio2.0/group/irdataprovider.mmp
internetradio2.0/group/irdatastructures.mmp
internetradio2.0/group/irfavoritesdb.mmp
internetradio2.0/group/irgeneralsettings.mmp
internetradio2.0/group/irmcpplugin.mmp
internetradio2.0/group/irmediaengine.mmp
internetradio2.0/group/irnetworkcontroller.mmp
internetradio2.0/group/irrecognizer.mmp
internetradio2.0/group/irrfsplugin.mmp
internetradio2.0/group/irsessionlog.mmp
internetradio2.0/group/irsettings.mmp
internetradio2.0/group/irsettingsview.mmp
internetradio2.0/group/irsonghistory.mmp
internetradio2.0/group/irstreamsource.mmp
internetradio2.0/group/irxmlparser.mmp
internetradio2.0/group/isdsclient.mmp
internetradio2.0/group/presetplugin.mmp
internetradio2.0/help/iraap.hlp
internetradio2.0/help/iraap.hlp.hrh
internetradio2.0/help/iraap_hlp.pdf
internetradio2.0/help/irapp_hlp.helpsource.htm
internetradio2.0/include/ircmdlineparams.h
internetradio2.0/include/irconnectionroamingobserver.h
internetradio2.0/include/irdebug.h
internetradio2.0/include/irinternalcrkeys.h
internetradio2.0/include/irpubsubkeys.h
internetradio2.0/install/cenrep.pkg
internetradio2.0/install/internetradiostub.pkg
internetradio2.0/install/ir_package.pkg
internetradio2.0/install/ir_package_deb.pkg
internetradio2.0/install/irapp.key
internetradio2.0/isdsclientinc/irlanguagemapper.h
internetradio2.0/isdsclientinc/isdsclientdll.h
internetradio2.0/isdsclientinc/misdsresponseobserver.h
internetradio2.0/isdsclientsrc/irisdsclient.cpp
internetradio2.0/isdsclientsrc/irlanguagemapper.cpp
internetradio2.0/mbm/qgn_indi_ai_music_play.svg
internetradio2.0/mbm/qgn_indi_ai_music_stop.svg
internetradio2.0/mbm/qgn_indi_fmradio_tb_listen.svg
internetradio2.0/mbm/qgn_indi_fmradio_tb_listen_white.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_addstation.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_addstation_white.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_addtofav.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_addtofav_white.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_findnshop.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_findnshop_white.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_history.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_history_white.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_saveall.svg
internetradio2.0/mbm/qgn_indi_irradio_tb_saveall_white.svg
internetradio2.0/mbm/qgn_indi_tb_copy.svg
internetradio2.0/mbm/qgn_indi_tb_copy_white.svg
internetradio2.0/mbm/qgn_indi_tb_details.svg
internetradio2.0/mbm/qgn_indi_tb_details_white.svg
internetradio2.0/mbm/qgn_indi_tb_find.svg
internetradio2.0/mbm/qgn_indi_tb_find_white.svg
internetradio2.0/mbm/qgn_indi_tb_next.svg
internetradio2.0/mbm/qgn_indi_tb_next_white.svg
internetradio2.0/mbm/qgn_indi_tb_paste.svg
internetradio2.0/mbm/qgn_indi_tb_paste_white.svg
internetradio2.0/mbm/qgn_indi_tb_play.svg
internetradio2.0/mbm/qgn_indi_tb_play_white.svg
internetradio2.0/mbm/qgn_indi_tb_previous.svg
internetradio2.0/mbm/qgn_indi_tb_previous_white.svg
internetradio2.0/mbm/qgn_indi_tb_stop.svg
internetradio2.0/mbm/qgn_indi_tb_stop_white.svg
internetradio2.0/mbm/qgn_ir_transparent.svg
internetradio2.0/mbm/qgn_menu_irradio.svg
internetradio2.0/mbm/qgn_prop_ir_list_play.svg
internetradio2.0/mbm/qgn_prop_ir_list_stopped.svg
internetradio2.0/mbm/qgn_prop_set_apps_ir.svg
internetradio2.0/mcpplugininc/irmcpplugin.h
internetradio2.0/mcpplugininc/mcpplugin.h
internetradio2.0/mcpplugininc/mcppluginobserver.h
internetradio2.0/mcpplugininc/mcppluginuids.hrh
internetradio2.0/mcppluginsrc/irmcpplugin.cpp
internetradio2.0/mediaengineinc/iraacplayer.h
internetradio2.0/mediaengineinc/iraacplayerlocal.h
internetradio2.0/mediaengineinc/irbuffercontainer.h
internetradio2.0/mediaengineinc/irbuffercontainer.inl
internetradio2.0/mediaengineinc/irmediaenginebuffer.h
internetradio2.0/mediaengineinc/irmediaenginedef.h
internetradio2.0/mediaengineinc/irmediaengineinterface.h
internetradio2.0/mediaengineinc/irmediaengineinterface.inl
internetradio2.0/mediaengineinc/irmp3player.h
internetradio2.0/mediaengineinc/irmp3playerlocal.h
internetradio2.0/mediaengineinc/irtestingaudioplayer.h
internetradio2.0/mediaenginesrc/iraacplayer.cpp
internetradio2.0/mediaenginesrc/irbuffercontainer.cpp
internetradio2.0/mediaenginesrc/irmediaengineproxy.cpp
internetradio2.0/mediaenginesrc/irmp3player.cpp
internetradio2.0/mediaenginesrc/irtestingaudioplayer.cpp
internetradio2.0/networkcontrollerinc/iractivenetworkobserver.h
internetradio2.0/networkcontrollerinc/irdatatransferobserver.h
internetradio2.0/networkcontrollerinc/irdatatransfertracker.h
internetradio2.0/networkcontrollerinc/irfilteredapreader.h
internetradio2.0/networkcontrollerinc/irnetworkcontroller.h
internetradio2.0/networkcontrollerinc/irnetworkcontrollerobserver.h
internetradio2.0/networkcontrollerinc/irnetworkobserver.h
internetradio2.0/networkcontrollersrc/irdatatransfertracker.cpp
internetradio2.0/networkcontrollersrc/irfilteredapreader.cpp
internetradio2.0/networkcontrollersrc/irnetworkcontroller.cpp
internetradio2.0/networkcontrollersrc/irnetworkobserver.cpp
internetradio2.0/presetplugininc/irchannelserverurlimpl.h
internetradio2.0/presetplugininc/irpreset.h
internetradio2.0/presetplugininc/irpresetimpl.h
internetradio2.0/presetpluginsrc/irchannelserverurlimpl.cpp
internetradio2.0/presetpluginsrc/irpresetimpl.cpp
internetradio2.0/presetpluginsrc/irpresetpluginproxy.cpp
internetradio2.0/resources/01/internetradio_01.loc
internetradio2.0/resources/01/internetradioai_01.dtd
internetradio2.0/resources/01/terms_01.html
internetradio2.0/resources/02/internetradio_02.loc
internetradio2.0/resources/02/internetradioai_02.dtd
internetradio2.0/resources/02/terms_02.html
internetradio2.0/resources/03/internetradio_03.loc
internetradio2.0/resources/03/internetradioai_03.dtd
internetradio2.0/resources/03/terms_03.html
internetradio2.0/resources/04/internetradio_04.loc
internetradio2.0/resources/04/internetradioai_04.dtd
internetradio2.0/resources/04/terms_04.html
internetradio2.0/resources/05/internetradio_05.loc
internetradio2.0/resources/05/internetradioai_05.dtd
internetradio2.0/resources/05/terms_05.html
internetradio2.0/resources/06/internetradio_06.loc
internetradio2.0/resources/06/internetradioai_06.dtd
internetradio2.0/resources/06/terms_06.html
internetradio2.0/resources/07/internetradio_07.loc
internetradio2.0/resources/07/internetradioai_07.dtd
internetradio2.0/resources/07/terms_07.html
internetradio2.0/resources/08/internetradio_08.loc
internetradio2.0/resources/08/internetradioai_08.dtd
internetradio2.0/resources/08/terms_08.html
internetradio2.0/resources/09/internetradio_09.loc
internetradio2.0/resources/09/internetradioai_09.dtd
internetradio2.0/resources/09/terms_09.html
internetradio2.0/resources/10/internetradio_10.loc
internetradio2.0/resources/10/internetradioai_10.dtd
internetradio2.0/resources/10/terms_10.html
internetradio2.0/resources/102/internetradio_102.loc
internetradio2.0/resources/103/internetradio_103.loc
internetradio2.0/resources/129/internetradio_129.loc
internetradio2.0/resources/13/internetradio_13.loc
internetradio2.0/resources/13/internetradioai_13.dtd
internetradio2.0/resources/13/terms_13.html
internetradio2.0/resources/14/internetradio_14.loc
internetradio2.0/resources/14/internetradioai_14.dtd
internetradio2.0/resources/14/terms_14.html
internetradio2.0/resources/15/internetradio_15.loc
internetradio2.0/resources/15/internetradioai_15.dtd
internetradio2.0/resources/15/terms_15.html
internetradio2.0/resources/157/internetradio_157.loc
internetradio2.0/resources/158/internetradio_158.loc
internetradio2.0/resources/159/internetradio_159.loc
internetradio2.0/resources/16/internetradio_16.loc
internetradio2.0/resources/16/internetradioai_16.dtd
internetradio2.0/resources/16/terms_16.html
internetradio2.0/resources/160/internetradio_160.loc
internetradio2.0/resources/161/internetradio_161.loc
internetradio2.0/resources/17/internetradio_17.loc
internetradio2.0/resources/17/internetradioai_17.dtd
internetradio2.0/resources/17/terms_17.html
internetradio2.0/resources/18/internetradio_18.loc
internetradio2.0/resources/18/internetradioai_18.dtd
internetradio2.0/resources/18/terms_18.html
internetradio2.0/resources/2000b4a2.rss
internetradio2.0/resources/2000b4a8.rss
internetradio2.0/resources/2000b4a9.rss
internetradio2.0/resources/2000b4aa.rss
internetradio2.0/resources/2000b4ab.rss
internetradio2.0/resources/2000b4ac.rss
internetradio2.0/resources/2001a930.rss
internetradio2.0/resources/2001a961.rss
internetradio2.0/resources/2001a962.rss
internetradio2.0/resources/230/internetradio_230.loc
internetradio2.0/resources/25/internetradio_25.loc
internetradio2.0/resources/25/internetradioai_25.dtd
internetradio2.0/resources/25/terms_25.html
internetradio2.0/resources/26/internetradio_26.loc
internetradio2.0/resources/26/internetradioai_26.dtd
internetradio2.0/resources/26/terms_26.html
internetradio2.0/resources/27/internetradio_27.loc
internetradio2.0/resources/27/internetradioai_27.dtd
internetradio2.0/resources/27/terms_27.html
internetradio2.0/resources/28/internetradio_28.loc
internetradio2.0/resources/28/internetradioai_28.dtd
internetradio2.0/resources/28/terms_28.html
internetradio2.0/resources/29/internetradio_29.loc
internetradio2.0/resources/29/internetradioai_29.dtd
internetradio2.0/resources/29/terms_29.html
internetradio2.0/resources/30/internetradio_30.loc
internetradio2.0/resources/30/internetradioai_30.dtd
internetradio2.0/resources/30/terms_30.html
internetradio2.0/resources/31/internetradio_31.loc
internetradio2.0/resources/31/internetradioai_31.dtd
internetradio2.0/resources/31/terms_31.html
internetradio2.0/resources/32/internetradio_32.loc
internetradio2.0/resources/32/internetradioai_32.dtd
internetradio2.0/resources/32/terms_32.html
internetradio2.0/resources/326/internetradio_326.loc
internetradio2.0/resources/326/internetradioai_326.dtd
internetradio2.0/resources/327/internetradio_327.loc
internetradio2.0/resources/327/internetradioai_327.dtd
internetradio2.0/resources/33/internetradio_33.loc
internetradio2.0/resources/33/internetradioai_33.dtd
internetradio2.0/resources/33/terms_33.html
internetradio2.0/resources/37/internetradio_37.loc
internetradio2.0/resources/37/internetradioai_37.dtd
internetradio2.0/resources/37/terms_37.html
internetradio2.0/resources/39/internetradio_39.loc
internetradio2.0/resources/39/internetradioai_39.dtd
internetradio2.0/resources/39/terms_39.html
internetradio2.0/resources/401/internetradio_401.loc
internetradio2.0/resources/401/internetradioai_401.dtd
internetradio2.0/resources/401/terms_401.html
internetradio2.0/resources/402/internetradio_402.loc
internetradio2.0/resources/402/internetradioai_402.dtd
internetradio2.0/resources/402/terms_402.html
internetradio2.0/resources/42/internetradio_42.loc
internetradio2.0/resources/42/internetradioai_42.dtd
internetradio2.0/resources/42/terms_42.html
internetradio2.0/resources/44/internetradio_44.loc
internetradio2.0/resources/44/internetradioai_44.dtd
internetradio2.0/resources/44/terms_44.html
internetradio2.0/resources/45/internetradio_45.loc
internetradio2.0/resources/45/internetradioai_45.dtd
internetradio2.0/resources/45/terms_45.html
internetradio2.0/resources/49/internetradio_49.loc
internetradio2.0/resources/49/internetradioai_49.dtd
internetradio2.0/resources/49/terms_49.html
internetradio2.0/resources/50/internetradio_50.loc
internetradio2.0/resources/50/internetradioai_50.dtd
internetradio2.0/resources/50/terms_50.html
internetradio2.0/resources/51/internetradio_51.loc
internetradio2.0/resources/51/internetradioai_51.dtd
internetradio2.0/resources/51/terms_51.html
internetradio2.0/resources/54/internetradio_54.loc
internetradio2.0/resources/54/internetradioai_54.dtd
internetradio2.0/resources/54/terms_54.html
internetradio2.0/resources/57/internetradio_57.loc
internetradio2.0/resources/57/internetradioai_57.dtd
internetradio2.0/resources/57/terms_57.html
internetradio2.0/resources/59/internetradio_59.loc
internetradio2.0/resources/59/internetradioai_59.dtd
internetradio2.0/resources/59/terms_59.html
internetradio2.0/resources/67/internetradio_67.loc
internetradio2.0/resources/67/internetradioai_67.dtd
internetradio2.0/resources/67/terms_67.html
internetradio2.0/resources/68/internetradio_68.loc
internetradio2.0/resources/68/internetradioai_68.dtd
internetradio2.0/resources/68/terms_68.html
internetradio2.0/resources/70/internetradio_70.loc
internetradio2.0/resources/70/internetradioai_70.dtd
internetradio2.0/resources/70/terms_70.html
internetradio2.0/resources/76/internetradio_76.loc
internetradio2.0/resources/76/internetradioai_76.dtd
internetradio2.0/resources/76/terms_76.html
internetradio2.0/resources/78/internetradio_78.loc
internetradio2.0/resources/78/internetradioai_78.dtd
internetradio2.0/resources/78/terms_78.html
internetradio2.0/resources/79/internetradio_79.loc
internetradio2.0/resources/79/internetradioai_79.dtd
internetradio2.0/resources/79/terms_79.html
internetradio2.0/resources/83/internetradio_83.loc
internetradio2.0/resources/83/internetradioai_83.dtd
internetradio2.0/resources/83/terms_83.html
internetradio2.0/resources/93/internetradio_93.loc
internetradio2.0/resources/93/internetradioai_93.dtd
internetradio2.0/resources/93/terms_93.html
internetradio2.0/resources/94/internetradio_94.loc
internetradio2.0/resources/94/internetradioai_94.dtd
internetradio2.0/resources/94/terms_94.html
internetradio2.0/resources/96/internetradio_96.loc
internetradio2.0/resources/96/internetradioai_96.dtd
internetradio2.0/resources/96/terms_96.html
internetradio2.0/resources/internetradio.loc
internetradio2.0/resources/internetradio.rh
internetradio2.0/resources/internetradio.rss
internetradio2.0/resources/internetradio_reg.rss
internetradio2.0/resources/internetradioai.dtd
internetradio2.0/resources/internetradioterms.loc
internetradio2.0/resources/ir.hrh
internetradio2.0/resources/iractionhandler.hrh
internetradio2.0/resources/iractiveidle.rss
internetradio2.0/resources/irgeneralsettings.hrh
internetradio2.0/resources/irgeneralsettings.rss
internetradio2.0/resources/irmcpplugin.hrh
internetradio2.0/resources/irmcpplugin.rss
internetradio2.0/resources/irsettings.rss
internetradio2.0/resources/vraudioutils.hrh
internetradio2.0/rfsplugininc/irrfsplugin.h
internetradio2.0/rfspluginsrc/irrfsplugin.cpp
internetradio2.0/rfspluginsrc/irrfspluginproxy.cpp
internetradio2.0/rom/internetradio.iby
internetradio2.0/rom/internetradio_backup.iby
internetradio2.0/rom/internetradioresources.iby
internetradio2.0/rom/internetradioresources_backup.iby
internetradio2.0/rom/internetradiosettings.iby
internetradio2.0/sessionloginc/irdbstatusobserver.h
internetradio2.0/sessionloginc/irnmslogdb.h
internetradio2.0/sessionloginc/irnmslogger.h
internetradio2.0/sessionloginc/irphoneinfo.h
internetradio2.0/sessionloginc/irreportsettings.h
internetradio2.0/sessionloginc/irsessiondb.h
internetradio2.0/sessionloginc/irsessionlogger.h
internetradio2.0/sessionloginc/irsessionloggerutility.h
internetradio2.0/sessionloginc/irsessionparams.h
internetradio2.0/sessionloginc/mirphoneinfoobserver.h
internetradio2.0/sessionloginc/mirsessionobserver.h
internetradio2.0/sessionlogsrc/irnmslogdb.cpp
internetradio2.0/sessionlogsrc/irnmslogger.cpp
internetradio2.0/sessionlogsrc/irphoneinfo.cpp
internetradio2.0/sessionlogsrc/irsessiondb.cpp
internetradio2.0/sessionlogsrc/irsessionlogger.cpp
internetradio2.0/sessionlogsrc/irsessionloggerutility.cpp
internetradio2.0/settingsinc/ircodecmanager.h
internetradio2.0/settingsinc/irsettings.h
internetradio2.0/settingsinc/irsettingsutility.h
internetradio2.0/settingssrc/ircodecmanager.cpp
internetradio2.0/settingssrc/irsettings.cpp
internetradio2.0/settingsviewinc/ircommonsettingscontainer.h
internetradio2.0/settingsviewinc/irsettingsviewbase.h
internetradio2.0/settingsviewsrc/ircommonsettingscontainer.cpp
internetradio2.0/settingsviewsrc/irsettingsviewbase.cpp
internetradio2.0/songhistoryinc/irsonghistorydb.h
internetradio2.0/songhistoryinc/irsonghistoryengine.h
internetradio2.0/songhistoryinc/irsonghistoryengpubsub.h
internetradio2.0/songhistoryinc/irsonghistoryengpubsubnotifyhandler.h
internetradio2.0/songhistoryinc/irsonghistoryinfo.h
internetradio2.0/songhistorysrc/irsonghistorydb.cpp
internetradio2.0/songhistorysrc/irsonghistoryengine.cpp
internetradio2.0/songhistorysrc/irsonghistoryengpubsub.cpp
internetradio2.0/songhistorysrc/irsonghistoryinfo.cpp
internetradio2.0/streamsourceinc/irasfplayer.h
internetradio2.0/streamsourceinc/iricyflowinitiator.h
internetradio2.0/streamsourceinc/iricyflowreader.h
internetradio2.0/streamsourceinc/irmetadata.h
internetradio2.0/streamsourceinc/irmetadata.inl
internetradio2.0/streamsourceinc/irnetworkbuffer.h
internetradio2.0/streamsourceinc/irnetworkbuffer.inl
internetradio2.0/streamsourceinc/irsocketopener.h
internetradio2.0/streamsourceinc/irsockettimeouttimer.h
internetradio2.0/streamsourceinc/irstationconnection.h
internetradio2.0/streamsourceinc/irstationdataobserver.h
internetradio2.0/streamsourceinc/irstreamsource.h
internetradio2.0/streamsourceinc/irstreamsourceerrors.h
internetradio2.0/streamsourceinc/irstreamsourceliterals.h
internetradio2.0/streamsourceinc/irstreamsourceobserver.h
internetradio2.0/streamsourcesrc/irasfplayer.cpp
internetradio2.0/streamsourcesrc/iricyflowinitiator.cpp
internetradio2.0/streamsourcesrc/iricyflowreader.cpp
internetradio2.0/streamsourcesrc/irnetworkbuffer.cpp
internetradio2.0/streamsourcesrc/irsocketopener.cpp
internetradio2.0/streamsourcesrc/irsockettimeouttimer.cpp
internetradio2.0/streamsourcesrc/irstationconnection.cpp
internetradio2.0/streamsourcesrc/irstreamsource.cpp
internetradio2.0/uicontrolsinc/iradvertisinglistbox.h
internetradio2.0/uicontrolsinc/iriconloader.h
internetradio2.0/uicontrolsinc/irimageconverter.h
internetradio2.0/uicontrolsinc/irimageconverterimpl.h
internetradio2.0/uicontrolsinc/irimageconverterobserver.h
internetradio2.0/uicontrolsinc/irlayoututils.h
internetradio2.0/uicontrolsinc/irmarqueeclet.h
internetradio2.0/uicontrolsinc/irstationinformationdata.h
internetradio2.0/uicontrolsinc/irstationinformationdisplay.h
internetradio2.0/uicontrolsinc/irstationlogocontrol.h
internetradio2.0/uicontrolsinc/irstationlogocontrolobserver.h
internetradio2.0/uicontrolsinc/irstationlogodata.h
internetradio2.0/uicontrolssrc/iradvertisinglistbox.cpp
internetradio2.0/uicontrolssrc/iriconloader.cpp
internetradio2.0/uicontrolssrc/irimageconverter.cpp
internetradio2.0/uicontrolssrc/irimageconverterimpl.cpp
internetradio2.0/uicontrolssrc/irlayoututils.cpp
internetradio2.0/uicontrolssrc/irmarqueeclet.cpp
internetradio2.0/uicontrolssrc/irstationinformationdata.cpp
internetradio2.0/uicontrolssrc/irstationinformationdisplay.cpp
internetradio2.0/uicontrolssrc/irstationlogocontrol.cpp
internetradio2.0/uicontrolssrc/irstationlogodata.cpp
internetradio2.0/uiinc/iraccessoryobserver.h
internetradio2.0/uiinc/iraddmanuallystationcontainer.h
internetradio2.0/uiinc/iraddmanuallystationview.h
internetradio2.0/uiinc/iralarmobserver.h
internetradio2.0/uiinc/irapplication.h
internetradio2.0/uiinc/iraudioroutingobserver.h
internetradio2.0/uiinc/irautomatedbitrateselection.h
internetradio2.0/uiinc/irbacksteppingservicewrapper.h
internetradio2.0/uiinc/irbaseview.h
internetradio2.0/uiinc/irbat.h
internetradio2.0/uiinc/irbsserviceconstants.h
internetradio2.0/uiinc/ircategoryview.h
internetradio2.0/uiinc/ircategoryviewcontainer.h
internetradio2.0/uiinc/irchangeobserver.h
internetradio2.0/uiinc/ircommon.h
internetradio2.0/uiinc/ircontroleventobserver.h
internetradio2.0/uiinc/ircostwarningcontainer.h
internetradio2.0/uiinc/ircostwarningview.h
internetradio2.0/uiinc/irdelayedactionobserver.h
internetradio2.0/uiinc/irdialoglauncher.h
internetradio2.0/uiinc/irdiskspacesession.h
internetradio2.0/uiinc/irdiskspacewatcher.h
internetradio2.0/uiinc/irdiskspacewatcherobserver.h
internetradio2.0/uiinc/irdocument.h
internetradio2.0/uiinc/irfilteredmodel.h
internetradio2.0/uiinc/irfirsttimecontainer.h
internetradio2.0/uiinc/irfirsttimeview.h
internetradio2.0/uiinc/irheadseteventobserver.h
internetradio2.0/uiinc/irhistory.h
internetradio2.0/uiinc/irhistorylistcontainer.h
internetradio2.0/uiinc/irhistorylistview.h
internetradio2.0/uiinc/irisdswrapper.h
internetradio2.0/uiinc/irmaincontainer.h
internetradio2.0/uiinc/irmainview.h
internetradio2.0/uiinc/irmediaclient.h
internetradio2.0/uiinc/irmessageobserver.h
internetradio2.0/uiinc/irnowplayingview.h
internetradio2.0/uiinc/irnowplayingviewcontainer.h
internetradio2.0/uiinc/irnowplayingwrapper.h
internetradio2.0/uiinc/irnwinfoobserver.h
internetradio2.0/uiinc/irplscontainer.h
internetradio2.0/uiinc/irplsplaylist.h
internetradio2.0/uiinc/irplsplaylistitem.h
internetradio2.0/uiinc/irplsview.h
internetradio2.0/uiinc/irpropertyobserver.h
internetradio2.0/uiinc/irpropertyobserver2.h
internetradio2.0/uiinc/irpubsub.h
internetradio2.0/uiinc/irradioidle.h
internetradio2.0/uiinc/irsearchresultsview.h
internetradio2.0/uiinc/irsearchresultsviewcontainer.h
internetradio2.0/uiinc/irsettingscontainer.h
internetradio2.0/uiinc/irsettingsview.h
internetradio2.0/uiinc/irstationdirectorycontainer.h
internetradio2.0/uiinc/irstationdirectoryview.h
internetradio2.0/uiinc/irstationinfocontainer.h
internetradio2.0/uiinc/irstationinfopicture.h
internetradio2.0/uiinc/irstationinfoview.h
internetradio2.0/uiinc/irstationsview.h
internetradio2.0/uiinc/irstationsviewcontainer.h
internetradio2.0/uiinc/irsystemeventcollector.h
internetradio2.0/uiinc/irsystemeventdetector.h
internetradio2.0/uiinc/irsystemeventdetectorobserver.h
internetradio2.0/uiinc/irsystemeventobserver.h
internetradio2.0/uiinc/irtopstationsview.h
internetradio2.0/uiinc/irui.h
internetradio2.0/uiinc/irviewstack.h
internetradio2.0/uiinc/mirlistboxarray.h
internetradio2.0/uiinc/msyncpresetobserver.h
internetradio2.0/uiinc/mviewsresponseanderrorobserver.h
internetradio2.0/uiinc/uinotifyhandler.h
internetradio2.0/uisrc/ir.cpp
internetradio2.0/uisrc/iraccessoryobserver.cpp
internetradio2.0/uisrc/iraddmanuallystationcontainer.cpp
internetradio2.0/uisrc/iraddmanuallystationview.cpp
internetradio2.0/uisrc/iralarmobserver.cpp
internetradio2.0/uisrc/irapplication.cpp
internetradio2.0/uisrc/irbacksteppingservicewrapper.cpp
internetradio2.0/uisrc/irbaseview.cpp
internetradio2.0/uisrc/ircategoryview.cpp
internetradio2.0/uisrc/ircategoryviewcontainer.cpp
internetradio2.0/uisrc/irchangeobserver.cpp
internetradio2.0/uisrc/ircontroleventobserver.cpp
internetradio2.0/uisrc/ircostwarningcontainer.cpp
internetradio2.0/uisrc/ircostwarningview.cpp
internetradio2.0/uisrc/irdialoglauncher.cpp
internetradio2.0/uisrc/irdiskspacesession.cpp
internetradio2.0/uisrc/irdiskspacewatcher.cpp
internetradio2.0/uisrc/irdocument.cpp
internetradio2.0/uisrc/irfilteredmodel.cpp
internetradio2.0/uisrc/irfirsttimecontainer.cpp
internetradio2.0/uisrc/irfirsttimeview.cpp
internetradio2.0/uisrc/irhistory.cpp
internetradio2.0/uisrc/irhistorylistcontainer.cpp
internetradio2.0/uisrc/irhistorylistview.cpp
internetradio2.0/uisrc/irisdswrapper.cpp
internetradio2.0/uisrc/irmaincontainer.cpp
internetradio2.0/uisrc/irmainview.cpp
internetradio2.0/uisrc/irmediaclient.cpp
internetradio2.0/uisrc/irmessageobserver.cpp
internetradio2.0/uisrc/irnowplayingview.cpp
internetradio2.0/uisrc/irnowplayingviewcontainer.cpp
internetradio2.0/uisrc/irnowplayingwrapper.cpp
internetradio2.0/uisrc/irnwinfoobserver.cpp
internetradio2.0/uisrc/irplscontainer.cpp
internetradio2.0/uisrc/irplsplaylist.cpp
internetradio2.0/uisrc/irplsplaylistitem.cpp
internetradio2.0/uisrc/irplsview.cpp
internetradio2.0/uisrc/irpropertyobserver.cpp
internetradio2.0/uisrc/irpropertyobserver2.cpp
internetradio2.0/uisrc/irpubsub.cpp
internetradio2.0/uisrc/irradioidle.cpp
internetradio2.0/uisrc/irsearchresultsview.cpp
internetradio2.0/uisrc/irsearchresultsviewcontainer.cpp
internetradio2.0/uisrc/irsettingscontainer.cpp
internetradio2.0/uisrc/irsettingsview.cpp
internetradio2.0/uisrc/irstationdirectorycontainer.cpp
internetradio2.0/uisrc/irstationdirectoryview.cpp
internetradio2.0/uisrc/irstationinfocontainer.cpp
internetradio2.0/uisrc/irstationinfopicture.cpp
internetradio2.0/uisrc/irstationinfoview.cpp
internetradio2.0/uisrc/irstationsview.cpp
internetradio2.0/uisrc/irstationsviewcontainer.cpp
internetradio2.0/uisrc/irsystemeventcollector.cpp
internetradio2.0/uisrc/irsystemeventdetector.cpp
internetradio2.0/uisrc/irtopstationsview.cpp
internetradio2.0/uisrc/irui.cpp
internetradio2.0/uisrc/irviewstack.cpp
internetradio2.0/uisrc/mirlistboxarray.cpp
internetradio2.0/xmlparserinc/irparserobserver.h
internetradio2.0/xmlparserinc/irxmlcontenthandler.h
internetradio2.0/xmlparserinc/irxmlelements.h
internetradio2.0/xmlparsersrc/irxmlcontenthandler.cpp
internetradio2.0/xmlparsersrc/irxmlelements.cpp
layers.sysdef.xml
presetserver/bwins/psclient100u.def
presetserver/clientinc/pspresetinterface.h
presetserver/clientinc/pspresetnotifier.h
presetserver/clientinc/psserv.h
presetserver/clientinc/psserv.inl
presetserver/clientinc/psservnotifier.h
presetserver/clientinc/psservsession.h
presetserver/clientinc/pstransaction.h
presetserver/clientsrc/Pspresetinterface.cpp
presetserver/clientsrc/Pspresetnotifier.cpp
presetserver/clientsrc/Psserv.cpp
presetserver/clientsrc/Psservnotifier.cpp
presetserver/clientsrc/Psservsession.cpp
presetserver/clientsrc/Pstransaction.cpp
presetserver/eabi/psclient100u.def
presetserver/group/backup_registration.xml
presetserver/group/bld.inf
presetserver/group/psclient.mmp
presetserver/group/psrfsplugin.mmp
presetserver/group/psserver.mmp
presetserver/include/pscommon.h
presetserver/include/psdebug.h
presetserver/include/psutils.h
presetserver/include/psutils.inl
presetserver/resources/10282bb2.rss
presetserver/rfsplugininc/psrfsplugin.h
presetserver/rfspluginsrc/Psrfsplugin.cpp
presetserver/rfspluginsrc/Psrfspluginproxy.cpp
presetserver/rom/presetserver.iby
presetserver/serverinc/psdatabase.h
presetserver/serverinc/psdatabasecleanup.h
presetserver/serverinc/pspendingpreset.h
presetserver/serverinc/pspresetobserver.h
presetserver/serverinc/pspropertyobserver.h
presetserver/serverinc/psscheduler.h
presetserver/serverinc/psserver.h
presetserver/serverinc/pssession.h
presetserver/serverinc/psshutdown.h
presetserver/serversrc/Psdatabase.cpp
presetserver/serversrc/Psdatabasecleanup.cpp
presetserver/serversrc/Pspendingpreset.cpp
presetserver/serversrc/Pspropertyobserver.cpp
presetserver/serversrc/Psscheduler.cpp
presetserver/serversrc/Psserver.cpp
presetserver/serversrc/Pssession.cpp
presetserver/serversrc/Psshutdown.cpp
presetserver/sis/presetserver_default/package_Inc4_Inc3.pkg
presetserver/sis/presetserver_default/package_Inc5.pkg
presetserver/sis/presetserver_default/package_Inc6.pkg
presetserver/sis/presetserver_default/stub.pkg
qtinternetradio/all.pro
qtinternetradio/bwins/irqdiskspacewatcheru.def
qtinternetradio/bwins/irqfavoritesu.def
qtinternetradio/bwins/irqisdsclientu.def
qtinternetradio/bwins/irqloggeru.def
qtinternetradio/bwins/irqmediaplayeru.def
qtinternetradio/bwins/irqmusicshopu.def
qtinternetradio/bwins/irqnetworkcontrolleru.def
qtinternetradio/bwins/irqnwkinfoobserveru.def
qtinternetradio/bwins/irqsettingsu.def
qtinternetradio/bwins/irqsonghistoryu.def
qtinternetradio/bwins/irqstationexporteru.def
qtinternetradio/bwins/irqstatisticsreportu.def
qtinternetradio/bwins/irqutilityu.def
qtinternetradio/common.pri
qtinternetradio/eabi/irqdiskspacewatcheru.def
qtinternetradio/eabi/irqfavoritesu.def
qtinternetradio/eabi/irqisdsclientu.def
qtinternetradio/eabi/irqloggeru.def
qtinternetradio/eabi/irqmediaplayeru.def
qtinternetradio/eabi/irqmusicshopu.def
qtinternetradio/eabi/irqnetworkcontrolleru.def
qtinternetradio/eabi/irqnwkinfoobserveru.def
qtinternetradio/eabi/irqsettingsu.def
qtinternetradio/eabi/irqsonghistoryu.def
qtinternetradio/eabi/irqstationexporteru.def
qtinternetradio/eabi/irqstatisticsreportu.def
qtinternetradio/eabi/irqutilityu.def
qtinternetradio/install/hb_armv5_urel.pkg
qtinternetradio/install/ir1_qt_libs_armv5_udeb.pkg
qtinternetradio/install/ir2_orbitinput_armv5_udeb.pkg
qtinternetradio/install/ir3_qtinternetradio_armv5_udeb.pkg
qtinternetradio/install/ir3_qtinternetradio_armv5_urel.pkg
qtinternetradio/install/qt_libs_armv5_urel.pkg
qtinternetradio/install/rd-key.pem
qtinternetradio/install/rd.cer
qtinternetradio/install/readme.txt
qtinternetradio/irqcommon/inc/irqenums.h
qtinternetradio/irqcommon/inc/irqevent.h
qtinternetradio/irqcommon/inc/irqisdsdatastructure.h
qtinternetradio/irqcommon/inc/irqutility.h
qtinternetradio/irqcommon/inc/irviewdefinitions.h
qtinternetradio/irqcommon/irqcommon.pro
qtinternetradio/irqcommon/src/irqisdsdatastructure.cpp
qtinternetradio/irqcommon/src/irqutility.cpp
qtinternetradio/irqdiskspacewatcher/inc/irqdiskspaceobserver.h
qtinternetradio/irqdiskspacewatcher/inc/irqdiskspaceobserverinterface.h
qtinternetradio/irqdiskspacewatcher/inc/irqdiskspacewatcher.h
qtinternetradio/irqdiskspacewatcher/irqdiskspacewatcher.pro
qtinternetradio/irqdiskspacewatcher/src/irqdiskspaceobserver.cpp
qtinternetradio/irqdiskspacewatcher/src/irqdiskspacewatcher.cpp
qtinternetradio/irqfavoritesdb/inc/irqfavoritesdb.h
qtinternetradio/irqfavoritesdb/irqfavoritesdb.pro
qtinternetradio/irqfavoritesdb/src/irqfavoritesdb.cpp
qtinternetradio/irqisdsclient/inc/irqisdsclient.h
qtinternetradio/irqisdsclient/inc/irqisdsclientimpl.h
qtinternetradio/irqisdsclient/irqisdsclient.pro
qtinternetradio/irqisdsclient/src/irqisdscientimpl.cpp
qtinternetradio/irqisdsclient/src/irqisdsclient.cpp
qtinternetradio/irqlogger/inc/irqlogger.h
qtinternetradio/irqlogger/inc/irqloggerexport.h
qtinternetradio/irqlogger/irqlogger.pro
qtinternetradio/irqlogger/src/irqlogger.cpp
qtinternetradio/irqmediaplayer/inc/irqmediaplayer.h
qtinternetradio/irqmediaplayer/inc/irqmetadata.h
qtinternetradio/irqmediaplayer/inc/irqmetadata.inl
qtinternetradio/irqmediaplayer/inc/irqmmfadapter.h
qtinternetradio/irqmediaplayer/inc/irqphononadapter.h
qtinternetradio/irqmediaplayer/inc/irqplayeradapterinterface.h
qtinternetradio/irqmediaplayer/irqmediaplayer.pro
qtinternetradio/irqmediaplayer/src/irqmediaplayer.cpp
qtinternetradio/irqmediaplayer/src/irqmmfadapter.cpp
qtinternetradio/irqmediaplayer/src/irqphononadapter.cpp
qtinternetradio/irqmusicshop/inc/irqmusicshop.h
qtinternetradio/irqmusicshop/irqmusicshop.pro
qtinternetradio/irqmusicshop/src/irqmusicshop.cpp
qtinternetradio/irqnetworkcontroller/inc/irqnetworkcontroller.h
qtinternetradio/irqnetworkcontroller/inc/irqnetworkcontrollerbody.h
qtinternetradio/irqnetworkcontroller/irqnetworkcontroller.pro
qtinternetradio/irqnetworkcontroller/src/irqnetworkcontroller.cpp
qtinternetradio/irqnetworkcontroller/src/irqnetworkcontrollerbody.cpp
qtinternetradio/irqnwkinfoobserver/inc/irqnwkinfoobserver.h
qtinternetradio/irqnwkinfoobserver/inc/irqnwkinfoobserverimpl.h
qtinternetradio/irqnwkinfoobserver/inc/irqnwkobserverinterface.h
qtinternetradio/irqnwkinfoobserver/irqnwkinfoobserver.pro
qtinternetradio/irqnwkinfoobserver/src/irqnwkinfoobserver.cpp
qtinternetradio/irqnwkinfoobserver/src/irqnwkinfoobserverimpl.cpp
qtinternetradio/irqsettings/inc/irqsettings.h
qtinternetradio/irqsettings/irqsettings.pro
qtinternetradio/irqsettings/src/irqsettings.cpp
qtinternetradio/irqsonghistory/inc/irqsonghistoryengine.h
qtinternetradio/irqsonghistory/inc/irqsonghistoryinfo.h
qtinternetradio/irqsonghistory/irqsonghistory.pro
qtinternetradio/irqsonghistory/src/irqsonghistoryengine.cpp
qtinternetradio/irqsonghistory/src/irqsonghistoryinfo.cpp
qtinternetradio/irqstationexporter/inc/irqstationexporter.h
qtinternetradio/irqstationexporter/irqstationexporter.pro
qtinternetradio/irqstationexporter/src/irqstationexporter.cpp
qtinternetradio/irqstatisticsreport/inc/irqreportsender.h
qtinternetradio/irqstatisticsreport/inc/irqstatisticsreporter.h
qtinternetradio/irqstatisticsreport/irqstatisticsreport.pro
qtinternetradio/irqstatisticsreport/src/irqreportsender.cpp
qtinternetradio/irqstatisticsreport/src/irqstatisticsreporter.cpp
qtinternetradio/rom/internetradio_binaries.txt
qtinternetradio/rom/qtinternetradio.iby
qtinternetradio/rom/qtinternetradio_binaries.txt
qtinternetradio/rom/qtinternetradio_resources.iby
qtinternetradio/rom/readme.txt
qtinternetradio/ui/inc/irabstractlistviewbase.h
qtinternetradio/ui/inc/irabstractviewmanager.h
qtinternetradio/ui/inc/irapplication.h
qtinternetradio/ui/inc/irbannerlabel.h
qtinternetradio/ui/inc/irbaseview.h
qtinternetradio/ui/inc/ircategorymodel.h
qtinternetradio/ui/inc/ircategoryview.h
qtinternetradio/ui/inc/irchannelmodel.h
qtinternetradio/ui/inc/ircombobox.h
qtinternetradio/ui/inc/irdocumentloader.h
qtinternetradio/ui/inc/irfavoritesmodel.h
qtinternetradio/ui/inc/irfavoritesview.h
qtinternetradio/ui/inc/irhistorymodel.h
qtinternetradio/ui/inc/irhistoryview.h
qtinternetradio/ui/inc/irlastplayedstationinfo.h
qtinternetradio/ui/inc/irlineeditor.h
qtinternetradio/ui/inc/irmainmodel.h
qtinternetradio/ui/inc/irmainview.h
qtinternetradio/ui/inc/irmediakeyobserver.h
qtinternetradio/ui/inc/irmemorycollector.h
qtinternetradio/ui/inc/irnowplayingcontainer.h
qtinternetradio/ui/inc/irnowplayingview.h
qtinternetradio/ui/inc/iropenwebaddressview.h
qtinternetradio/ui/inc/irplaycontroller.h
qtinternetradio/ui/inc/irplsmodel.h
qtinternetradio/ui/inc/irplsview.h
qtinternetradio/ui/inc/irsearchchannelsview.h
qtinternetradio/ui/inc/irsearchcriteriadb.h
qtinternetradio/ui/inc/irsettingsview.h
qtinternetradio/ui/inc/irsonghistorymodel.h
qtinternetradio/ui/inc/irsonghistoryview.h
qtinternetradio/ui/inc/irstationdetailscontainer.h
qtinternetradio/ui/inc/irstationsview.h
qtinternetradio/ui/inc/irsymbianapplication.h
qtinternetradio/ui/inc/irsymbianappui.h
qtinternetradio/ui/inc/irsymbiandocument.h
qtinternetradio/ui/inc/iruidefines.h
qtinternetradio/ui/inc/irviewmanager.h
qtinternetradio/ui/resources/albumart.jpg
qtinternetradio/ui/resources/default_cd.png
qtinternetradio/ui/resources/default_cd1.png
qtinternetradio/ui/resources/effect/effects_item_select.fxml
qtinternetradio/ui/resources/effect/effects_item_select_end.fxml
qtinternetradio/ui/resources/effect/view_flip_hide.fxml
qtinternetradio/ui/resources/effect/view_flip_show.fxml
qtinternetradio/ui/resources/effect/viewchangeeffects_hide.fxml
qtinternetradio/ui/resources/effect/viewchangeeffects_show.fxml
qtinternetradio/ui/resources/favorites.png
qtinternetradio/ui/resources/flip.png
qtinternetradio/ui/resources/genres.png
qtinternetradio/ui/resources/history.png
qtinternetradio/ui/resources/icon_earphone.png
qtinternetradio/ui/resources/icon_favorite.png
qtinternetradio/ui/resources/icon_loudspeaker.png
qtinternetradio/ui/resources/icon_musicshop_disable.png
qtinternetradio/ui/resources/icon_musicshop_enable.png
qtinternetradio/ui/resources/icon_pause.png
qtinternetradio/ui/resources/icon_play.png
qtinternetradio/ui/resources/icon_songhistory.png
qtinternetradio/ui/resources/icon_stationdefault.png
qtinternetradio/ui/resources/icon_stop.png
qtinternetradio/ui/resources/irqradio.svg
qtinternetradio/ui/resources/irui.qrc
qtinternetradio/ui/resources/ovi.jpg
qtinternetradio/ui/resources/pagecurl_big.png
qtinternetradio/ui/resources/search.png
qtinternetradio/ui/resources/stations.png
qtinternetradio/ui/resources/volume.png
qtinternetradio/ui/src/irabstractlistviewbase.cpp
qtinternetradio/ui/src/irabstractviewmanager.cpp
qtinternetradio/ui/src/irapplication.cpp
qtinternetradio/ui/src/irbannerlabel.cpp
qtinternetradio/ui/src/irbaseview.cpp
qtinternetradio/ui/src/ircategorymodel.cpp
qtinternetradio/ui/src/ircategoryview.cpp
qtinternetradio/ui/src/irchannelmodel.cpp
qtinternetradio/ui/src/ircombobox.cpp
qtinternetradio/ui/src/irdocumentloader.cpp
qtinternetradio/ui/src/irfavoritesmodel.cpp
qtinternetradio/ui/src/irfavoritesview.cpp
qtinternetradio/ui/src/irhistorymodel.cpp
qtinternetradio/ui/src/irhistoryview.cpp
qtinternetradio/ui/src/irlastplayedstationinfo.cpp
qtinternetradio/ui/src/irlineeditor.cpp
qtinternetradio/ui/src/irmainmodel.cpp
qtinternetradio/ui/src/irmainview.cpp
qtinternetradio/ui/src/irmediakeyobserver.cpp
qtinternetradio/ui/src/irmemorycollector.cpp
qtinternetradio/ui/src/irnowplayingcontainer.cpp
qtinternetradio/ui/src/irnowplayingview.cpp
qtinternetradio/ui/src/iropenwebaddressview.cpp
qtinternetradio/ui/src/irplaycontroller.cpp
qtinternetradio/ui/src/irplsmodel.cpp
qtinternetradio/ui/src/irplsview.cpp
qtinternetradio/ui/src/irsearchchannelsview.cpp
qtinternetradio/ui/src/irsearchcriteriadb.cpp
qtinternetradio/ui/src/irsettingsview.cpp
qtinternetradio/ui/src/irsonghistorymodel.cpp
qtinternetradio/ui/src/irsonghistoryview.cpp
qtinternetradio/ui/src/irstationdetailscontainer.cpp
qtinternetradio/ui/src/irstationsview.cpp
qtinternetradio/ui/src/irsymbianapplication.cpp
qtinternetradio/ui/src/irsymbianappui.cpp
qtinternetradio/ui/src/irsymbiandocument.cpp
qtinternetradio/ui/src/irviewmanager.cpp
qtinternetradio/ui/src/main.cpp
qtinternetradio/ui/ui.pro
sysdef_1_5_1.dtd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009-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:  Build information file for project InternetRadio
+*
+*/
+
+#include "../presetserver/group/bld.inf"
+#include "../internetradio2.0/group/bld.inf"
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/actionhandlerinc/iractionhandler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2008-2008 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:  Action handler providing LIW based API for external use.
+*
+*/
+
+
+#ifndef IRACTIONHANDLER_H
+#define IRACTIONHANDLER_H
+
+#include <ahplugin.h>
+
+/**
+ * Action handler provides LIW -based interface for external use (e.g. Homescreen) 
+ * 
+ * The action handler communicates with IR via IR's Publish & Subscribe API.
+ * 
+ */
+NONSHARABLE_CLASS( CIRActionHandler ) : public CAHPlugin
+    {
+public:
+    /**
+     * Two-phased constructor. 
+     */
+    static CIRActionHandler* NewL();
+
+    /**
+     * Destructor
+     */
+    ~CIRActionHandler();
+    
+    // From base class CAHPlugin
+    TInt ExecuteActionL( const CLiwMap* aMap );
+    
+private:
+    /**
+     * C++ constructor.
+     */
+    CIRActionHandler();
+    
+    /**
+     * Second phase constructor.
+     */
+    void ConstructL();
+    
+private:
+     
+    /**
+     * Mutes VRA.
+     */
+    void Stop();
+    
+    /**
+     * Unmutes VRA.
+     */
+    void Play();
+    
+     /**
+     * Invokes VRA to go to now playing view.
+     */
+    void StartToNowPlayingL();
+    
+    /**
+     * Extracts the value of the given mapname to given string.
+     * Reserves memory to argument aString.
+     * 
+     * @param aMap The map containing the mapname-string pairs.
+     * @param aString Descriptor where the value is extracted.
+     * @param aMapName The searched map name. 
+     */
+    TInt ExtractStringL( const CLiwMap* aMap, RBuf& aString, const TDesC8& aMapName );
+    };
+
+#endif /* IRACTIONHANDLER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/actionhandlerinc/iractionhandlerdefs.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008-2008 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:  This file contains LIW string definitions for IRActionHandler.
+*
+*/
+
+
+#ifndef IRACTIONHANDLERDEFS_H
+#define IRACTIONHANDLERDEFS_H
+
+#include <e32base.h>
+
+// map keys
+_LIT8( KIRCommand, "command" );
+
+// map values
+_LIT( KIRCommandValueStop, "stop" );
+_LIT( KIRCommandValuePlay, "play" );
+_LIT( KIRCommandValueStartNowPlaying, "startnowplaying" );
+
+#endif /* IRACTIONHANDLERDEFS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/actionhandlersrc/iractionhandler.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2008-2008 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 <e32cmn.h>
+#include <e32property.h>
+#include <e32std.h>
+#include <w32std.h>
+#include <implementationproxy.h>
+#include <liwvariant.h>
+#include "irdebug.h"
+#include <apgtask.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+
+
+#include "iractionhandler.h"
+#include "iractionhandler.hrh"
+#include "iractionhandlerdefs.h"
+#include "irpubsubkeys.h"
+
+_LIT8( KIRSpace, " " );
+_LIT8( KIRCommandLineActionHandler, "-a" );
+_LIT8( KIRCommandLineActionHandlerCommandStartNowPlayingView, "startnowplaying" );
+
+// ---------------------------------------------------------
+// CIRActionHandler::NewL
+// ---------------------------------------------------------
+//
+CIRActionHandler* CIRActionHandler::NewL()
+    {
+    CIRActionHandler* self = new ( ELeave ) CIRActionHandler(); 
+    CleanupStack::PushL( self );
+    
+    self->ConstructL();
+    
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CIRActionHandler::~CIRActionHandler
+// ---------------------------------------------------------
+//
+CIRActionHandler::~CIRActionHandler()
+    {
+    }
+
+// ---------------------------------------------------------
+// CIRActionHandler::CIRActionHandler
+// ---------------------------------------------------------
+//
+CIRActionHandler:: CIRActionHandler()
+    {
+    
+    }
+    
+// ---------------------------------------------------------
+// CIRActionHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CIRActionHandler::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------
+// CIRActionHandler::ExecuteActionL
+// ---------------------------------------------------------
+//
+TInt CIRActionHandler::ExecuteActionL( const CLiwMap* aMap )
+    {
+    IRRDEBUG2("InternetRadio -- CIRActionHandler::ExecuteActionL Entering", KNullDesC);
+
+    TInt retValue( KErrNone );
+    RBuf command;
+    CleanupClosePushL( command );
+    
+	retValue  = ExtractStringL( aMap, command, KIRCommand);    
+    
+    if  (retValue== KErrNone )
+        {
+        if ( !command.CompareF( KIRCommandValueStop) )
+            {
+            Stop();
+            }
+        else if ( !command.CompareF( KIRCommandValuePlay ) )
+            {
+            Play();
+            }
+
+        else if ( !command.CompareF( KIRCommandValueStartNowPlaying ) )
+            {
+            StartToNowPlayingL();
+            }
+        else
+            {
+            retValue = KErrNotSupported;
+            }
+        }
+    CleanupStack::PopAndDestroy( &command );
+    IRRDEBUG2("InternetRadio -- CIRActionHandler::ExecuteActionL exiting", KNullDesC);
+    return retValue;
+    }
+
+
+
+// ---------------------------------------------------------
+// CIRActionHandler::Mute
+// ---------------------------------------------------------
+//
+void CIRActionHandler::Stop()
+    {
+    IRRDEBUG2("CIRActionHandler::Stop entering", KNullDesC);
+      
+   	TInt err = RProperty::Set(KUidActiveInternetRadioApp, KIRPSControlSetPlayState, EIRStateStop );
+   	
+    IRRDEBUG2("CIRActionHandler::Stop exiting err =%d", err);
+	
+    }
+
+// ---------------------------------------------------------
+// CIRActionHandler::Unmute
+// ---------------------------------------------------------
+//
+void CIRActionHandler::Play()
+    {
+    IRRDEBUG2("CIRActionHandler::Play entering", KNullDesC);
+
+    TInt err = RProperty::Set(KUidActiveInternetRadioApp, KIRPSControlSetPlayState, EIRStatePlay);	
+  	
+    IRRDEBUG2("CIRActionHandler::Play exiting err=%d", err);
+
+    }
+
+
+
+// ---------------------------------------------------------
+// CIRActionHandler::StartToNowPlayingL
+// ---------------------------------------------------------
+//
+void CIRActionHandler::StartToNowPlayingL()
+    {
+    
+    IRRDEBUG2("CIRActionHandler::StartToNowPlayingL entering", KNullDesC);
+
+    RWsSession wsSession;
+                
+    User::LeaveIfError(wsSession.Connect() );
+    TApaTaskList taskList( wsSession );
+
+    TApaTask irTask = taskList.FindApp(KUidActiveInternetRadioApp);
+   
+   
+    IRRDEBUG2("CIRActionHandler::StartToNowPlayingL irTask.Exists()=%d", irTask.Exists());
+
+    TPtrC8 actionHandlerCmdId( KIRCommandLineActionHandler );
+    TPtrC8 spacePtr( KIRSpace );
+    
+    TPtrC8 startNowPlayingCmdvalue(
+    KIRCommandLineActionHandlerCommandStartNowPlayingView );
+
+    HBufC8* buf = HBufC8::NewLC(actionHandlerCmdId.Length()
+    			 + spacePtr.Length() + startNowPlayingCmdvalue.Length());
+    TPtr8 tail( buf->Des() );
+       
+    tail.Append( actionHandlerCmdId );
+    tail.Append( spacePtr );
+    tail.Append( startNowPlayingCmdvalue );
+
+    if ( !irTask.Exists() )
+        {
+        IRRDEBUG2("CIRActionHandler::StartToNowPlayingL !irTask.Exists", KNullDesC);
+
+        RApaLsSession apaSession;
+        CleanupClosePushL( apaSession );
+           
+        User::LeaveIfError( apaSession.Connect() );
+        User::LeaveIfError( apaSession.GetAllApps() );
+       
+        TApaAppInfo appInfo;
+        User::LeaveIfError( apaSession.GetAppInfo( appInfo, KUidActiveInternetRadioApp ) );
+
+      
+           
+        CApaCommandLine* internetRadioApplicationStartParams = CApaCommandLine::NewLC();
+        internetRadioApplicationStartParams->SetExecutableNameL( appInfo.iFullName );
+        // Start the application to the foreground
+        internetRadioApplicationStartParams->SetCommandL( EApaCommandRun );
+        internetRadioApplicationStartParams->SetTailEndL( tail );
+       
+        User::LeaveIfError( apaSession.StartApp( *internetRadioApplicationStartParams ) );
+    
+        IRRDEBUG2("CIRActionHandler::StartToNowPlayingL StartApp", KNullDesC);
+
+        CleanupStack::PopAndDestroy( internetRadioApplicationStartParams );
+        CleanupStack::PopAndDestroy( &apaSession );
+        }
+    else
+        {
+        IRRDEBUG2("CIRActionHandler::StartToNowPlayingL SendMessage", KNullDesC);
+
+        User::LeaveIfError( irTask.SendMessage( KUidActiveInternetRadioApp , tail ) );
+
+        }
+    CleanupStack::PopAndDestroy( buf );
+    wsSession.Close();
+
+    IRRDEBUG2("InternetRadio -- CIRActionHandler::StartToNowPlayingL exiting", KNullDesC);
+
+    }
+
+// ---------------------------------------------------------
+// CIRActionHandler::ExtractStringLC
+// ---------------------------------------------------------
+//
+TInt CIRActionHandler::ExtractStringL( const CLiwMap* aMap, RBuf& aString,
+										 const TDesC8& aMapName)
+    {
+    IRRDEBUG2("InternetRadio -- CIRActionHandler::ExtractStringL entering", KNullDesC);
+
+    TInt err( KErrNotFound );
+    TLiwVariant variant;
+    variant.PushL();
+    TPtrC tempString( KNullDesC );    
+    if ( aMap->FindL( aMapName, variant ) )
+        {
+        variant.Get( tempString );
+        aString.Close();
+        aString.CreateL( tempString );
+        err = KErrNone;
+        }
+    CleanupStack::PopAndDestroy( &variant );    
+    IRRDEBUG2("InternetRadio -- CIRActionHandler::ExtractStringL exiting", KNullDesC);
+   
+    return err;
+
+    }
+
+/** Provides a key-value pair table, that is used to identify the correct construction function for the requested interface. */
+const TImplementationProxy KIRActionHandlerImplementationTable[] =
+    {
+    /*lint -save -e611 (Warning -- Suspicious cast)*/
+    IMPLEMENTATION_PROXY_ENTRY( KIRActionHandlerImplementationUid, CIRActionHandler::NewL )
+    /*lint -restore*/
+    };
+
+const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount );
+
+// ---------------------------------------------------------------------------
+// Returns the implementations provided by this ECOM plugin DLL.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    IRRDEBUG2("InternetRadio -- CIRActionHandler::ImplementationGroupProxy", KNullDesC);
+
+    aTableCount = sizeof( KIRActionHandlerImplementationTable ) / sizeof( TImplementationProxy );
+    return KIRActionHandlerImplementationTable;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleenginc/iractiveidleeng.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+#ifndef IRACTIVEIDLEENG_H
+#define IRACTIVEIDLEENG_H
+
+#include "iractiveidleengpubsubnotifyhandler.h"
+
+class CIRActiveIdleEngPubSub;
+class MIRActiveIdleEngNotifyHandler;
+
+/**
+* Engine component for Internet Radio Active Idle plugin.
+*
+* This class is responsible for listening to relevant P&S keys and notifying the UI code whenever the listened keys change.
+* The actual listening is done by multiple CIRActiveIdleStatusObserver objects.
+*/
+NONSHARABLE_CLASS(CIRActiveIdleEng) : public CBase, 
+	public MIRActiveIdleEngPubSubNotifyHandler
+    {
+    public:
+        
+        /**
+        * Static constructor.
+        * @param    aObserver   The observer to be notified of the changes in the keys.
+        * @return   The newly created CIRActiveIdleEng object.
+        */
+    IMPORT_C static CIRActiveIdleEng* NewL( 
+    	MIRActiveIdleEngNotifyHandler& aObserver );
+        
+        /**
+        * Destructor.
+        */
+        IMPORT_C ~CIRActiveIdleEng();
+        
+        /**
+        * Construction finalizer.
+        * Must be called after CIRActiveIdleEng::NewL. 
+        */
+        IMPORT_C void SecondConstructL();
+        
+    protected: // From MIRActiveIdleStatusObserver
+        /**
+    * Invoked when an error occurred while retrieving the new 
+    * value of the key.
+    * @param    aCategory   The category of the key that changed.
+    * @param    aKey        The key that changed.
+    * @param    aError      The error code.
+        */
+    void HandlePropertyChangeErrorL( const TUid& aCategory, TUint aKey, 
+    	TInt aError );
+        
+        /**
+    * Invoked when the listened key is changed.
+    * @param    aCategory   The category of the key that changed.
+    * @param    aKey        The key that changed.
+    * @param    aText       The new value of the key.
+        */
+    void HandlePropertyChangeL( const TUid& aCategory, TUint aKey,
+    	const TDesC8& aText );
+        
+        /**
+    * Invoked when the listened key is changed.
+    * @param    aCategory   The category of the key that changed.
+    * @param    aKey        The key that changed.
+    * @param    aValue      The new value of the key.
+        */
+    void HandlePropertyChangeL( const TUid& aCategory, TUint aKey, 
+    	TInt aValue );
+
+	private:
+    
+        /**
+        * Constructor.
+    * @param    aObserver   The observer to be notified of the changes 
+    * in the keys.
+        */
+        CIRActiveIdleEng( MIRActiveIdleEngNotifyHandler& aObserver );
+    
+        /**
+        * Second-phase constructor.
+        */
+        void ConstructL();        
+        
+    protected:
+    
+        /** The observer to be notified of the changes in the listened keys. */
+        MIRActiveIdleEngNotifyHandler& iObserver;
+        /** Array of status observers. */
+        RPointerArray<CIRActiveIdleEngPubSub> iPropertyObserverArray;
+        
+        TInt		iVolume;
+
+    };
+
+#endif//IRACTIVEIDLEENG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleenginc/iractiveidleengnotifyhandler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRACTIVEIDLEENGNOTIFYHANDLER_H
+#define IRACTIVEIDLEENGNOTIFYHANDLER_H
+
+#include "irpubsubkeys.h"
+
+class CIRMetaData;
+
+/**
+* Observer interface for CIRActiveIdleEng.
+* The observer is notified about the changes in relevant keys through this interface.
+*/
+NONSHARABLE_CLASS(MIRActiveIdleEngNotifyHandler)
+    {
+
+public:
+        
+    /**
+    * Invoked when a new channel has been tuned into.
+    */
+    virtual void HandleChannelChangeL() = 0;
+    
+    /**
+    * Invoked when a new channel has been tuned into.
+    * @param    aVolume       The index of the volume level.
+    */
+    virtual void HandleVolumeChangeL( TInt aVolume ) = 0;
+    
+    /**
+    * Invoked when a new channel has been tuned into.
+    */
+    virtual void HandlePlayStopL( TIRStopPlayState aState ) = 0;
+    
+   /**
+    * Invoked when the application's running state has changed.
+    * @param    aRunningState   The new running state.
+    */
+    virtual void HandleApplicationRunningStateChangeL( 
+    			TIRPSApplicationRunningState aRunningState ) = 0;
+
+    /**
+     * Invoked when meta data is received.
+     *
+     * @param   aMetaData       The meta data that was received.
+     */
+    virtual void HandleMetaDataReceivedL( const CIRMetaData& aMetaData ) = 0;
+
+     /**
+     * Invoked when buffering starts or stops 
+     *
+     * @param   aValue  The state of buffering
+     */
+    virtual void HandleBufferingStateL(TIRBufferingState aState) = 0;
+
+    };
+
+#endif//IRACTIVEIDLEENGNOTIFYHANDLER_H
+           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleenginc/iractiveidleengpubsub.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+#ifndef IRACTIVEIDLEENGPUBSUB_H
+#define IRACTIVEIDLEENGPUBSUB_H
+
+#include <e32base.h>
+#include <e32property.h>
+
+class MIRActiveIdleEngPubSubNotifyHandler;
+
+#define KMAXLENGTH 256
+
+/**
+* Listens to one specified Publish & Subscribe key, notifying the observer whenever that key is changed.
+*/
+NONSHARABLE_CLASS(CIRActiveIdleEngPubSub) : public CActive
+    {
+    public:
+        
+        /**
+        * Static constructor.
+        * @param    aObserver   The observer to be notified of the changes in the listened key.
+        * @param    aCategory   The category of the key.
+        * @param    aKey        The key to listen to.
+        */
+    static CIRActiveIdleEngPubSub* NewL( MIRActiveIdleEngPubSubNotifyHandler& 
+    		aObserver, const TUid& aCategory, TUint aKey , 
+    		const RProperty::TType aPropertyType  );
+        
+        /**
+        * Destructor.
+        */
+        ~CIRActiveIdleEngPubSub();
+        
+        /**
+        * Construction finalizer.
+        * Subscribes the object to listen to the specified key.
+        */
+       	void SecondConstructL();
+        
+    protected: // From CActive
+
+        /**
+    *void RunL()
+    *The function is called by the active scheduler
+    *when a request completion event occurs,
+        */
+        void RunL();
+        
+        /**
+    *void DoCancel()
+    *Invoked when the active object is cancelled.
+        */
+        void DoCancel();
+        
+    private:
+
+        /**
+        * Constructor.    
+        * @param    aObserver   The observer to be notified of the changes in the listened key.
+        * @param    aCategory   The category of the key.
+        * @param    aKey        The key to listen to.
+        */
+    CIRActiveIdleEngPubSub( MIRActiveIdleEngPubSubNotifyHandler& aObserver, 
+    	const TUid& aCategory, TUint aKey, const RProperty::TType aPropertyType );
+        
+        /**
+        * Second-phase constructor.
+        */
+        void ConstructL();
+		
+    protected:
+
+        /** Handle to the property. */
+        RProperty iProperty;
+        RProperty::TType iPropertyType;
+        /** The observer to be notified of the changes in the listened key. */
+        MIRActiveIdleEngPubSubNotifyHandler& iObserver;
+        /** The category of the key to listen to. */
+        TUid iCategory;
+        /** The key to listen to. */
+        TUint iKey;
+        /** The cached value of the key. */
+        mutable TBuf8<KMAXLENGTH> iText;
+        TInt iValue;
+    };
+
+#endif//IRACTIVEIDLEENGPUBSUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleenginc/iractiveidleengpubsubnotifyhandler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRACTIVEIDLEENGPUBSUBNOTIFYHANDLER_H
+#define IRACTIVEIDLEENGPUBSUBNOTIFYHANDLER_H
+
+#include <e32cmn.h>
+
+/**
+* Observer interface for CIRActiveIdleEngPubSub.
+* The observer is notified whenever the listened key is changed. If there was an error in getting the new value of the key,
+* the observer will be notified of it as well.
+*/
+NONSHARABLE_CLASS(MIRActiveIdleEngPubSubNotifyHandler)
+    {
+    public:
+
+        /**
+        * Invoked when the listened key is changed.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aValue      The new value of the key.
+        */
+    virtual void HandlePropertyChangeL( const TUid& aCategory, TUint aKey,
+    	 TInt aValue ) = 0;
+        
+        /**
+        * Invoked when the listened key is changed.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aText       The new value of the key.
+        */
+    virtual void HandlePropertyChangeL( const TUid& aCategory, TUint aKey,
+    	 const TDesC8& aText ) = 0;
+        
+        /**
+        * Invoked when an error occurred while retrieving the new value of the key.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aError      The error code.
+        */
+    virtual void HandlePropertyChangeErrorL( const TUid& aCategory,
+     TUint aKey, TInt aError ) = 0;
+    };
+
+#endif//IR_ACTIVEIDLEENGPUBSUBNOTIFYHANDLER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleengsrc/iractiveidleeng.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irmetadata.h"
+#include "irpubsubkeys.h"
+
+#include "iractiveidleeng.h"
+#include "iractiveidleengnotifyhandler.h"
+#include "iractiveidleengpubsub.h"
+#include "irdebug.h"
+
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::CIRActiveIdleEng
+// Default Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdleEng::CIRActiveIdleEng( MIRActiveIdleEngNotifyHandler& aObserver )
+    : iObserver( aObserver )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::ConstructL
+// Second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEng::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEng::ConstructL" );	
+    //Subscriber for application running state 
+    User::LeaveIfError(iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSDataApplicationRunning , 
+    	RProperty::EInt) ) );
+    //Subsciber for meta data
+    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSMetaData, 
+    	RProperty::ELargeText)));
+    //Subsciber for the volume level 
+    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSVolume , 
+    	RProperty::EInt) ) );
+    //Subsciber for the key KIRPSPlayStop at stop state
+    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSPlayStop ,
+    	RProperty::EInt) ) );
+    //Subsciber for the channel name
+     User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSDataChannel, 
+    	RProperty::ELargeText) ) );
+    //Subscriber for favourite channel preset index 
+    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSPresetIndex ,
+    	RProperty::EInt) ) );
+    
+    //Subscriber for favourite channel preset index 
+    User::LeaveIfError( iPropertyObserverArray.Append( CIRActiveIdleEngPubSub::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSBufferingState ,
+    	RProperty::EInt) ) );
+    IRLOG_DEBUG( "CIRActiveIdleEng::ConstructL - Exiting." );	
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::SecondConstructL()
+// Finalizes the construction of the object
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRActiveIdleEng::SecondConstructL()
+	{
+	
+	IRLOG_DEBUG( "CIRActiveIdleEng::SecondConstructL" );
+	for ( TInt i = 0; i < iPropertyObserverArray.Count(); i++ )
+		{
+		iPropertyObserverArray[i]->SecondConstructL();	
+		}
+	IRLOG_DEBUG( "CIRActiveIdleEng::SecondConstructL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::NewL
+// Static constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRActiveIdleEng* CIRActiveIdleEng::NewL( 
+	MIRActiveIdleEngNotifyHandler& aObserver )
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEng::NewL" );
+    CIRActiveIdleEng* self = new ( ELeave ) CIRActiveIdleEng( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRActiveIdleEng::NewL - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::~CIRActiveIdleEng()
+// standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRActiveIdleEng::~CIRActiveIdleEng()
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEng::~CIRActiveIdleEng" );
+    iPropertyObserverArray.ResetAndDestroy();
+    iPropertyObserverArray.Close();
+    IRLOG_DEBUG( "CIRActiveIdleEng::~CIRActiveIdleEng - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::HandlePropertyChangeL
+// Invoked when any listened P&S key is changed.
+// ---------------------------------------------------------------------------
+void CIRActiveIdleEng::HandlePropertyChangeL( const TUid& aCategory,
+											TUint aKey,const TDesC8& aText ) 
+	{
+	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL" );
+	if ( aCategory == KUidActiveInternetRadioApp )
+		{
+		if( aKey == KIRPSDataChannel )
+			{
+			iObserver.HandleChannelChangeL();
+			}
+		else if( aKey == KIRPSMetaData )
+			{
+			CIRMetaData* metaData = CIRMetaData::NewL( aText );
+			CleanupStack::PushL( metaData );
+			iObserver.HandleMetaDataReceivedL( *metaData );
+			CleanupStack::PopAndDestroy( metaData );
+			}
+		else
+			{
+			// To avoid PC lint error
+			}
+		}
+	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::HandlePropertyChangeL
+// Invoked when any listened P&S key is changed.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEng::HandlePropertyChangeL( 
+	const TUid& aCategory, TUint aKey, TInt aValue )
+	{
+	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL" );
+	if ( aCategory == KUidActiveInternetRadioApp )
+		{
+		if( aKey == KIRPSDataApplicationRunning)
+			{
+			iObserver.HandleApplicationRunningStateChangeL( 
+				static_cast<TIRPSApplicationRunningState>( aValue ) );				
+			}
+		else if( aKey == KIRPSVolume)
+			{
+			iObserver.HandleVolumeChangeL( aValue );
+			}
+		else if( aKey == KIRPSPlayStop)
+			{
+			iObserver.HandlePlayStopL( static_cast<TIRStopPlayState>( aValue ) );
+			}	   
+		else if( aKey == KIRPSBufferingState)
+			{
+			IRRDEBUG2("CIRActiveIdleEng::HandlePropertyChangeL KIRPSBufferingState=%d ",aValue);
+			iObserver.HandleBufferingStateL(static_cast<TIRBufferingState>(aValue));
+			}	   
+		else
+			{
+			// To avoid PC lint error
+			}
+		}
+	IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEng::HandlePropertyChangeErrorL
+// Invoked when an error has occured while fetching the new value of any listened P&S key.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEng::HandlePropertyChangeErrorL( const TUid& /*aCategory*/,
+	TUint /*aKey*/, TInt aError )
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeErrorL" );
+    if (aError < 0)
+    	{
+    	HandlePropertyChangeL(KUidActiveInternetRadioApp, 
+    		KIRPSDataApplicationRunning, EIRPSApplicationClosing);
+    	}
+    IRLOG_DEBUG( "CIRActiveIdleEng::HandlePropertyChangeErrorL" );
+    }
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleengsrc/iractiveidleengpubsub.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "iractiveidleengpubsub.h"
+#include "iractiveidleengpubsubnotifyhandler.h"
+#include "irdebug.h"
+
+// ==================== MEMBER FUNCTIONS ===================
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::CIRActiveIdleEngPubSub
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdleEngPubSub::CIRActiveIdleEngPubSub(
+	MIRActiveIdleEngPubSubNotifyHandler& aObserver, const TUid& aCategory, 
+	TUint aKey , const RProperty::TType aPropertyType): CActive( CActive::
+	EPriorityStandard ),  iPropertyType(aPropertyType),iObserver( aObserver ), 
+	iCategory( aCategory ), iKey( aKey )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::ConstructL
+// Second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEngPubSub::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::ConstructL" );	
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::ConstructL - Exiting." );	
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::SecondConstructL()
+// Finalizes the construction of this object.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEngPubSub::SecondConstructL()
+	{
+	IRLOG_DEBUG( "CIRActiveIdleEngPubSub::SecondConstructL" );	
+	if(!IsActive())	
+		{
+	    iProperty.Subscribe( iStatus );
+	    SetActive();	
+		}
+
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::SecondConstructL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::NewL
+// Static constructor.
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdleEngPubSub* CIRActiveIdleEngPubSub::NewL( 
+	MIRActiveIdleEngPubSubNotifyHandler& aObserver, const TUid& aCategory, 
+	TUint aKey, const RProperty::TType aPropertyType  )
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::NewL" );	
+    CIRActiveIdleEngPubSub* self = new ( ELeave ) CIRActiveIdleEngPubSub( 
+    							aObserver, aCategory, aKey, aPropertyType );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::NewL - Exiting." );	
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::~CIRActiveIdleEngPubSub()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdleEngPubSub::~CIRActiveIdleEngPubSub()
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::~CIRActiveIdleEngPubSub" );	
+    Cancel();
+    iProperty.Close();
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::~CIRActiveIdleEngPubSub - Exiting." );	
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::DoCancel()
+// Invoked when the active object is cancelled.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEngPubSub::DoCancel()
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::DoCancel" );	
+    iProperty.Cancel();
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::DoCancel - Exiting." );	
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdleEngPubSub::RunL()
+// The function is called by the active scheduler when a request completion event occurs,
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleEngPubSub::RunL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::RunL" );	
+
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TInt err(KErrNone);
+    switch (iPropertyType)
+        {
+        // Subscribes the property of interger type 
+        case RProperty::EInt:
+	        {
+	        err = iProperty.Get( iValue );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, iValue );
+             	}
+	        break;
+	        }
+	    // Subscribes the property of text type 
+	    case RProperty::ELargeText:
+	        {
+	        err = iProperty.Get( iText );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, iText );
+             	}
+	        break;
+	        }
+	    default:
+	        {
+	        break;
+	        }
+        }
+    
+    if (err)
+    	{
+        iObserver.HandlePropertyChangeErrorL(iCategory, iKey, err);
+    	}
+	
+    IRLOG_DEBUG( "CIRActiveIdleEngPubSub::RunL - Exiting." );	
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleinc/iractiveidle.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2006-2007 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:  The content publisher for Internet Radio Active Idle plugin
+*
+*/
+
+
+#ifndef IRACTIVEIDLE_H
+#define IRACTIVEIDLE_H
+
+#include <aicontentpublisher.h>
+#include <aieventhandlerextension.h>
+#include <aipropertyextension.h>
+
+#include "iractiveidleengnotifyhandler.h"
+
+class CIRActiveIdleEng;
+class CIRActiveIdleStateDetector;
+class CIRMetaData;
+class MAiContentItemIterator;
+class MAiContentObserver;
+
+#define KMAXLENGTH 256
+
+/**
+ *  Internet Radio Active Idle plugin
+ *
+ *  @lib iractiveidle.lib
+ */
+class CIRActiveIdle : public CAiContentPublisher, 
+                      public MAiPropertyExtension,
+                      public MAiEventHandlerExtension,
+                      public MIRActiveIdleEngNotifyHandler
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CIRActiveIdle* NewL();
+
+    /**
+     * Destructor.
+     */
+    /*lint -save -e1509 (Warning -- base class destructor for class 'MAiPropertyExtension' is not virtual -- Effective C++ #14)
+                        (Warning -- base class destructor for class 'MAiEventHandlerExtension' is not virtual -- Effective C++ #14)*/
+    virtual ~CIRActiveIdle();
+    /*lint -restore*/
+
+	// from base class CAiContentPublisher
+	/**
+     *void Resume( TAiTransitionReason aReason )
+     *To actively publish data to observers. 
+     *@param aReason Defines set of reasons for plug-in state change.
+     */
+    void Resume( TAiTransitionReason aReason );
+    
+    /**
+     *void Suspend( TAiTransitionReason aReason )
+     *Cancels outstanding asynchronous operations
+     *@param aReason Defines set of reasons for plug-in state change.
+     */
+    void Suspend( TAiTransitionReason aReason );
+    
+    /**
+     *void Stop( TAiTransitionReason aReason )
+     *Frees all memory and CPU resources and close all open files.
+     *@param aReason Defines set of reasons for plug-in state change.
+     */
+    void Stop( TAiTransitionReason aReason );
+    
+    /**
+     *void SubscribeL( MAiContentObserver& aObserver )
+     *Adds the content observer / subscriber to plug-in.
+     *@param aObserver The observer to be notified of the changes in the keys.
+     */
+    void SubscribeL( MAiContentObserver& aObserver );
+    
+    /**
+     *void ConfigureL( RAiSettingsItemArray& aSettings )
+     *Configures the plug-in.
+     *@param aSettings setting items defined in the UI definition.
+     *This plugin takes ownership of the MAiPluginSettings objects 
+     *in the array.
+     */
+    void ConfigureL( RAiSettingsItemArray& aSettings );
+    
+    /**
+     *TAny* Extension( TUid aUid )
+     *Returns interface extension.
+     *@param aUid 
+     *@return Returns pointer to extension type
+     */
+    TAny* Extension( TUid aUid );
+
+	// from base class MAiPropertyExtension
+	/**
+     *TAny* GetPropertyL( TInt aProperty )
+     *Reads a plugin property.
+     *@param aProperty identification of property.
+     *@return Pointer to property value
+     */
+    TAny* GetPropertyL( TInt aProperty );
+    
+    /**
+     *void SetPropertyL( TInt aProperty, TAny* aValue )
+     *Sets a plugin property
+     *@param aProperty  identification of property.
+     *@param aValue contains pointer to property value.
+     */
+    void SetPropertyL( TInt aProperty, TAny* aValue );
+
+	// from base class MAiEventHandlerExtension
+	/**
+     *void HandleEvent( TInt aEvent, const TDesC& aParam )
+     *Sets a plugin property
+     *@param aEvent unique identifier of event from plug-in content model.
+     *@param aParam Parameters associated with event
+     */
+    void HandleEvent( TInt aEvent, const TDesC& aParam );
+
+// from base class MIRActiveIdleEngNotifyHandler
+
+    void HandleChannelChangeL();
+    void HandleMetaDataReceivedL( const CIRMetaData& aMetaData );
+    void HandleVolumeChangeL( const TInt aVolume );
+    void HandlePlayStopL( TIRStopPlayState aState );
+    void HandleApplicationRunningStateChangeL(  const TIRPSApplicationRunningState aRunningState );
+    void HandleBufferingStateL(TIRBufferingState aState );
+    
+   private:
+
+    /**
+     * Constructor.
+     */
+    CIRActiveIdle();
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Initialize resource file for loading resources.
+     */
+    void InitializeResourceLoadingL();
+
+    /**
+     * Loads the required resources.
+     */
+    void LoadResourcesL();
+
+    /**
+     * Cleans all data fields from plugin.
+     */
+    void Clean();
+
+    /**
+     * Starts an application.
+     * @param aUid The uid value of the application
+     * @param aCommandLine The command line (if any) to be passed to the process
+     */
+    void StartApplicationL( const TUid& aUid, const TDesC8& aCommandLine );
+
+private: // data
+
+    /** IR's Active Idle engine. */
+    CIRActiveIdleEng*                   iEngine;
+
+    /** 
+     * Detects Internet Radio process termination
+     * Owned.
+     */
+    CIRActiveIdleStateDetector*         iIRTerminationDetector;
+    
+    /**
+     * Current meta data information.
+     * Owned.
+     */
+    CIRMetaData*                        iMetaData;
+     
+    /** Observers that are informed about changes state or new content available. */
+    RPointerArray<MAiContentObserver>   iObservers;
+    /** */
+    TAiPublisherInfo                    iInfo;
+    /** */
+    MAiContentItemIterator*             iContent;
+    /** */
+    MAiContentItemIterator*             iResources;
+    /** */
+    MAiContentItemIterator*             iEvents;
+    
+    /** Active Idle's resource offset. */
+    TInt                                iActiveIdleResourceOffset;
+    /** Internet Radio application running state */
+    TIRPSApplicationRunningState        iRunningState;
+    
+ 	// Meta data info
+    TBuf 	<KMAXLENGTH> iChannelName;
+    TInt 	iPresetIndex;
+    
+    //Application volume level
+    enum TIRPSVolumeLevel
+    	{
+    	EVolumeLevel0 = 0,
+	    EVolumeLevel1,      
+	    EVolumeLevel2,   
+	    EVolumeLevel3,   
+	    EVolumeLevel4,   
+	    EVolumeLevel5,   
+	    EVolumeLevel6,   
+	    EVolumeLevel7,   
+	    EVolumeLevel8,   
+	    EVolumeLevel9,   
+	    EVolumeLevel10                    
+	    };
+    
+    TInt                                iLastSetVolume;
+    };
+
+#endif // IRACTIVEIDLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleinc/iractiveidlestatedetector.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2007-2008 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 of CIRActiveIdleStateDetector.
+*
+*/
+
+
+#ifndef CIRACTIVEIDLESTATEDETECTOR_H
+#define CIRACTIVEIDLESTATEDETECTOR_H
+
+#include <e32base.h>
+
+class MIRActiveIdleEngNotifyHandler;
+
+/**
+ *  Class for detecting application running state.
+ */
+NONSHARABLE_CLASS(CIRActiveIdleStateDetector) : public CActive
+    {
+
+public:
+    
+    /**
+     * C++ default constructor.
+	 * @param sStateObserver    Observer for running state change
+     */
+    CIRActiveIdleStateDetector( MIRActiveIdleEngNotifyHandler& aStateObserver );
+
+    /**
+     * Destructor.
+     */
+    ~CIRActiveIdleStateDetector();
+
+    /**
+     * Requests notification for termination of Internet Radio
+     */
+    void StartListeningL();
+
+protected: 
+
+// from base class CActive
+    void RunL();
+    void DoCancel();
+
+private: // data
+
+	/** Observer for running state change */
+	MIRActiveIdleEngNotifyHandler&  iStateObserver;
+	/** The process to be observed */
+	RProcess                        iProcess;
+    
+    };
+
+#endif // CIRACTIVEIDLESTATEDETECTOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidleinc/irplugincontentmodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+#ifndef IRPLUGINCONTENTMODEL_H
+#define IRPLUGINCONTENTMODEL_H
+
+#include <aicontentmodel.h>
+
+// Plug-in Implementation UID.
+const TInt KImplUidIRPlugin = 0x2000B4A7; 
+const TUid KUidIRPlugin = { KImplUidIRPlugin };
+
+// ================================= CONTENT ===================================
+
+/**
+ * Content Ids
+ */
+enum TAiIRContentIds
+    {
+    EAiIRContentVolume,
+    EAiIRContentOneLineInfoCaption, // Full page idle
+    EAiIRContentAppIcon,
+    EAiIRContentPresetCaption,
+    EAiIRContentArtistCaption,
+    EAiIRContentTrackCaption
+    };
+
+/**
+ * Content that the plugin will publish
+ */
+const TAiContentItem KAiIRContent[] =
+    {
+    { EAiIRContentVolume,             	L"Volume",       KAiContentTypeText },
+    { EAiIRContentOneLineInfoCaption,   L"OneLineInfo",  KAiContentTypeText },
+    { EAiIRContentAppIcon,              L"AppIcon",       KAiContentTypeBitmap },
+    { EAiIRContentPresetCaption,        L"Preset",       KAiContentTypeText },
+    { EAiIRContentArtistCaption,        L"Artist",       KAiContentTypeText },
+    { EAiIRContentTrackCaption,   		L"Track",        KAiContentTypeText }
+    };
+
+
+// ================================ RESOURCES ==================================
+
+/**
+ * Resource Ids
+ */
+enum TAiIRPluginResourceIds
+    {
+    EAiIRResourceVol0,
+    EAiIRResourceVol1,
+    EAiIRResourceVol2,
+    EAiIRResourceVol3,
+    EAiIRResourceVol4,
+    EAiIRResourceVol5,
+    EAiIRResourceVol6,
+    EAiIRResourceVol7,
+    EAiIRResourceVol8,
+    EAiIRResourceVol9,
+    EAiIRResourceVol10,
+    EAiIRResourceIRPlayingIcon,
+    EAiIRResourceIRStoppedIcon
+    };
+
+/**
+ * Resources that the plugin will publish
+ */
+const TAiContentItem KAiIRResources[] =
+    {
+    //UI resources that represents volume levels
+    { EAiIRResourceVol0,            L"Vol0",            KAiContentTypeText },
+    { EAiIRResourceVol1,            L"Vol1",            KAiContentTypeText },
+    { EAiIRResourceVol2,            L"Vol2",            KAiContentTypeText },
+    { EAiIRResourceVol3,            L"Vol3",            KAiContentTypeText },
+    { EAiIRResourceVol4,            L"Vol4",            KAiContentTypeText },
+    { EAiIRResourceVol5,            L"Vol5",            KAiContentTypeText },
+    { EAiIRResourceVol6,            L"Vol6",            KAiContentTypeText },
+    { EAiIRResourceVol7,            L"Vol7",            KAiContentTypeText },
+    { EAiIRResourceVol8,            L"Vol8",            KAiContentTypeText },
+    { EAiIRResourceVol9,            L"Vol9",            KAiContentTypeText },
+    { EAiIRResourceVol10,           L"Vol10",           KAiContentTypeText },
+    { EAiIRResourceIRPlayingIcon,   L"IRPlaying",       KAiContentTypeBitmap },
+    { EAiIRResourceIRStoppedIcon,   L"IRStopped",       KAiContentTypeBitmap }
+    };
+
+
+// ============================ SERVICES (Events) ==============================
+
+/**
+ * Event Ids.
+ */
+enum TAiIREventIds
+    {
+    EAiIREventVolInc,
+    EAiIREventVolDec,
+    EAiIREventLaunchRadio
+    };
+
+/**
+ * Services that the plugin can perform
+ */
+const TAiContentItem KAiIREvents[] =
+    {
+    { EAiIREventVolInc,      L"VolInc", "" },
+    { EAiIREventVolDec,      L"VolDec", "" },
+    { EAiIREventLaunchRadio, L"LaunchRadio", "" }
+    };
+
+
+#endif // IRPLUGINCONTENTMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlesrc/iractiveidle.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,873 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <aicontentobserver.h>
+#include <aiutility.h>
+#include <aknutils.h>
+#include <apgcli.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+#include <e32property.h>
+#include <stringloader.h>
+#include <iractiveidle.rsg>
+#include <features.hrh>
+#include <eikenv.h> 
+#include <apgtask.h>
+#include "irmetadata.h"
+#include "irpubsubkeys.h"
+#include "ir.hrh"
+#include "iractiveidle.h"
+#include "iractiveidleeng.h"
+#include "iractiveidlestatedetector.h"
+#include "irdebug.h"
+#include "irplugincontentmodel.h"
+
+
+
+#include <eikenv.h>
+
+const TInt KIRMinVolumeLevel = 0;
+const TInt KIRMaxVolumeLevel  = 10;
+const TInt KIRPublishIndex = 1; // Always 1 in this plugin
+const TInt KIRActiveIdleGranularity = 3;
+
+_LIT( KIRActiveIdleResourceFileName, "iractiveidle.rsc" ); /** Filename of the Internet Radio Active Idle resource file. */
+_LIT( KIRPluginName, "iRAPP Plugin");
+_LIT(KSeparatorDot,". ");
+//_LIT(KSeparatorHyphen," - ")
+//_LIT(KSeparatorColon," : ")
+_LIT8( KIRSpace, " " );
+_LIT8( KIRCommandLineActiveIdle, "-a" );
+_LIT8( KIRCommandLineActiveIdleCommandStartNowPlayingView, "startnowplaying" );
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::CIRActiveIdle()
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdle::CIRActiveIdle()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::ConstructL()
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::ConstructL" );
+    InitializeResourceLoadingL();
+    iInfo.iUid = KUidIRPlugin;
+    iInfo.iName.Copy( KIRPluginName );
+    iContent = AiUtility::CreateContentItemArrayIteratorL( KAiIRContent );
+    iResources = AiUtility::CreateContentItemArrayIteratorL( KAiIRResources );
+    iEvents  = AiUtility::CreateContentItemArrayIteratorL( KAiIREvents );
+    iMetaData = CIRMetaData::NewL();
+    iRunningState = EIRPSApplicationUninitialized;
+    IRLOG_DEBUG( "CIRActiveIdle::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::NewL()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdle* CIRActiveIdle::NewL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::NewL" );
+    CIRActiveIdle* self = new( ELeave ) CIRActiveIdle;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRActiveIdle::NewL - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::~CIRActiveIdle()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdle::~CIRActiveIdle()
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::~CIRActiveIdle" );
+    if ( iActiveIdleResourceOffset > 0 )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iActiveIdleResourceOffset );
+        }
+    iObservers.Close();
+    Release( iContent );
+    Release( iResources );
+    Release( iEvents );
+
+    delete iMetaData;
+    delete iIRTerminationDetector;
+    delete iEngine;
+    IRLOG_DEBUG( "CIRActiveIdle::~CIRActiveIdle - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::InitializeResourceLoadingL()
+// Initialize resource file for loading resources.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::InitializeResourceLoadingL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::InitializeResourceLoadingL" );
+
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    RFs fs( coeEnv->FsSession() );
+    TFileName fileName; 
+    TFileName baseResource;
+    TFindFile finder( fs );
+    TLanguage language( ELangNone );
+    
+    TParsePtrC parse( KIRActiveIdleResourceFileName );
+    _LIT( resourceFileWildExt, ".r*" );
+
+    // Make sure to find all resource files, not only .rsc files as it may be so
+    // that there is only .r01, .r02, etc. files available
+    fileName.Copy( parse.Name() );
+    fileName.Append( resourceFileWildExt );
+
+    // TFindFile applies search order that is from 
+    // drive Y to A, then Z
+    CDir* entries = NULL;
+    TInt err = finder.FindWildByDir( fileName , KDC_RESOURCE_FILES_DIR, entries );
+    delete entries;
+    entries = NULL;
+    TBool found = EFalse;
+    while ( !found && err == KErrNone )
+        {
+        // Found file
+        fileName.Zero();
+        TParsePtrC foundPath( finder.File() );
+        fileName.Copy( foundPath.DriveAndPath() );
+        fileName.Append( KIRActiveIdleResourceFileName );
+        BaflUtils::NearestLanguageFile( fs, fileName, language );
+        if ( language != ELangNone && BaflUtils::FileExists( fs, fileName ) )
+            {
+            found = ETrue;
+            iActiveIdleResourceOffset = coeEnv->AddResourceFileL( fileName );
+            }
+        else
+            {
+            if ( language == ELangNone &&
+                 !baseResource.Compare( KNullDesC ) &&
+                 BaflUtils::FileExists( fs, fileName ) )
+                {
+                baseResource.Copy( fileName );
+                }
+            err = finder.FindWild( entries );
+            delete entries;
+            entries = NULL;
+            }
+        }
+
+    if ( !found && baseResource.Compare( KNullDesC ) )
+        {
+        // If we found *.rsc then better to use that than nothing
+        if ( BaflUtils::FileExists( fs, baseResource ) )
+            {
+            iActiveIdleResourceOffset = coeEnv->AddResourceFileL( baseResource );
+            }
+        }
+
+
+
+    IRLOG_DEBUG( "CIRActiveIdle::InitializeResourceLoadingL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::LoadResourcesL()
+// Loads the required resources
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::LoadResourcesL()
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::LoadResourcesL" );
+
+    if ( !iIRTerminationDetector )
+        {
+        iIRTerminationDetector = new (ELeave) CIRActiveIdleStateDetector( *this );
+        }
+
+    if ( !iEngine )
+        {
+        iEngine = CIRActiveIdleEng::NewL( *this );
+        iEngine->SecondConstructL();
+        }
+    IRLOG_DEBUG( "CIRActiveIdle::LoadResourcesL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::Resume()
+// Now it is allowed to actively publish data to observers.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::Resume( TAiTransitionReason /*aReason*/ )
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::Resume" );
+    TRAP_IGNORE( LoadResourcesL() )
+    IRLOG_DEBUG( "CIRActiveIdle::Resume - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::Suspend()
+// Not allowed to consume CPU resources, e.g MUST stop each timer,
+// cancel outstanding asynchronous operations, etc.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::Suspend( TAiTransitionReason /*aReason*/ )
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::Suspend" );
+
+    if ( iIRTerminationDetector )
+        {
+        iIRTerminationDetector->Cancel();
+        }
+
+    delete iEngine;
+    iEngine = NULL;
+    IRLOG_DEBUG( "CIRActiveIdle::Suspend - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::Stop
+// Must free all memory and CPU resources and close all open files.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::Stop( TAiTransitionReason /*aReason*/ )
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::Stop" );
+    delete iIRTerminationDetector;
+    iIRTerminationDetector = NULL;
+    delete iEngine;
+    iEngine = NULL;
+    IRLOG_DEBUG( "CIRActiveIdle::Stop - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::SubscribeL
+// Adds the content observer / subscriber to plug-in.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::SubscribeL( MAiContentObserver& aObserver )
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::SubscribeL" );
+    iObservers.AppendL( &aObserver );
+    IRLOG_DEBUG( "CIRActiveIdle::SubscribeL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::ConfigureL
+// Configures the plug-in.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::ConfigureL( RAiSettingsItemArray& /*aSettings*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::Extension
+// Returns interface extension. In S60 3.2 only event & property extensions
+// are supported.
+// ---------------------------------------------------------------------------
+//
+TAny* CIRActiveIdle::Extension( TUid aUid )
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::Extension" );
+    TAny* ret = NULL;
+    if ( aUid == KExtensionUidProperty )
+    	{
+        ret = static_cast<MAiPropertyExtension*>( this );
+    	}
+    else if ( aUid == KExtensionUidEventHandler )
+    	{
+        ret = static_cast<MAiEventHandlerExtension*>( this );
+    	}
+    else
+        {
+        ret = NULL;
+        }
+    IRLOG_DEBUG( "CIRActiveIdle::Extension - Exiting." );
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// CIRActiveIdle::GetPropertyL
+// Reads a plugin property.
+// ----------------------------------------------------------------------------
+//
+TAny* CIRActiveIdle::GetPropertyL( TInt aProperty )
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::GetPropertyL" );
+    switch ( aProperty )
+    	{
+    	case EAiPublisherInfo:
+            return &iInfo;
+
+    	case EAiPublisherContent:
+            return static_cast<MAiContentItemIterator*>( iContent );
+
+    	case EAiPublisherResources:
+            return static_cast<MAiContentItemIterator*>( iResources );
+
+    	case EAiPublisherEvents:
+            return static_cast<MAiContentItemIterator*>( iEvents );
+
+    	default:
+    	    break;
+    	}
+    User::Leave( KErrNotSupported );
+    IRLOG_DEBUG( "CIRActiveIdle::GetPropertyL - Exiting." );
+    return NULL;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRActiveIdle::SetPropertyL
+// Sets a plugin property
+// ----------------------------------------------------------------------------
+//
+void CIRActiveIdle::SetPropertyL( TInt aProperty, TAny* aValue )
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::SetPropertyL" );
+    if ( aValue )
+    	{
+        switch ( aProperty )
+        	{
+        	case EAiPublisherInfo:
+            	{
+            	const TAiPublisherInfo* info =
+                    static_cast<const TAiPublisherInfo*>( aValue );
+            	iInfo.iUid.iUid = info->iUid.iUid;
+            	iInfo.iName.Copy( info->iName );
+                break;
+            	}
+        	default:
+                break;
+        	}
+    	}
+    else
+    	{
+    	User::Leave(KErrGeneral);
+    	}
+    IRLOG_DEBUG( "CIRActiveIdle::SetPropertyL - Exiting." );
+	}
+
+// ----------------------------------------------------------------------------
+// CIRActiveIdle::HandleEvent
+// Invoked by the framework when plug-in must handle an event
+// ----------------------------------------------------------------------------
+//
+void CIRActiveIdle::HandleEvent( TInt aEvent, const TDesC& /*aParam*/ )
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::HandleEvent" );
+	switch ( aEvent )
+    	{
+       	case EAiIREventVolInc:
+       	    break;
+       	case EAiIREventVolDec:
+       	    break;
+       	case EAiIREventLaunchRadio:
+    	    {
+    	    TRAP_IGNORE( StartApplicationL( KUidActiveInternetRadioApp,
+    	    								 KNullDesC8 ) )
+    	    break;
+    	    }
+    	default:
+            break;
+    	}
+    IRLOG_DEBUG( "CIRActiveIdle::HandleEvent - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::Clean
+// Cleans all data fields from the plugin
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::Clean()
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::Clean" );
+    for ( TInt i = 0; i < iObservers.Count(); i++ )
+    	{
+        MAiContentObserver* observer = iObservers[i];
+        observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+        observer->Clean( *this, EAiIRContentVolume, KIRPublishIndex );
+        observer->Clean( *this, EAiIRContentOneLineInfoCaption, KIRPublishIndex );
+        observer->Clean( *this, EAiIRContentAppIcon, KIRPublishIndex );
+        observer->Clean( *this, EAiIRContentPresetCaption, KIRPublishIndex );
+        observer->Clean( *this, EAiIRContentArtistCaption, KIRPublishIndex );
+        observer->Clean( *this, EAiIRContentTrackCaption, KIRPublishIndex );
+        observer->Commit( reinterpret_cast<TInt32>( this ) );
+    	}
+    IRLOG_DEBUG( "CIRActiveIdle::Clean - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::StartApplicationL
+// Launches an application.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::StartApplicationL( const TUid& aUid, const TDesC8& aCommandLine )
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::StartApplicationL" );
+	
+	TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
+	TApaTask task = taskList.FindApp( KUidActiveInternetRadioApp );
+	
+//   _LIT8(KNull,"")	
+	if ( task.Exists() )
+		{
+		
+		TPtrC8 activeIdleCmdId( KIRCommandLineActiveIdle );
+    	TPtrC8 spacePtr( KIRSpace );
+    
+		TPtrC8 startNowPlayingCmdvalue(
+	    KIRCommandLineActiveIdleCommandStartNowPlayingView );
+
+	    HBufC8* buf = HBufC8::NewLC(activeIdleCmdId.Length()
+	    			 + spacePtr.Length() + startNowPlayingCmdvalue.Length());
+	    TPtr8 tail( buf->Des() );
+	    
+	       
+	    tail.Append( activeIdleCmdId );
+	    tail.Append( spacePtr );
+	    tail.Append( startNowPlayingCmdvalue );
+	    task.SendMessage(KUidActiveInternetRadioApp,tail);
+        task.BringToForeground();
+        
+        CleanupStack::PopAndDestroy( buf );
+		
+		}
+	else
+		{
+		RApaLsSession apaSession;
+	    CleanupClosePushL( apaSession );
+
+	    User::LeaveIfError( apaSession.Connect() );
+	    User::LeaveIfError( apaSession.GetAllApps() );
+
+	    TApaAppInfo appInfo;
+	    User::LeaveIfError( apaSession.GetAppInfo( appInfo, aUid ) );
+
+		CApaCommandLine* startParams = CApaCommandLine::NewLC();
+		startParams->SetExecutableNameL( appInfo.iFullName );
+		startParams->SetCommandL( EApaCommandRun );
+		startParams->SetTailEndL( aCommandLine );
+		User::LeaveIfError( apaSession.StartApp( *startParams ) );
+		CleanupStack::PopAndDestroy( 2, &apaSession );
+		}	
+	IRLOG_DEBUG( "CIRActiveIdle::StartApplicationL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandleChannelChangeL
+// Handles channel change
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::HandleChannelChangeL()
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::HandleChannelChangeL" );
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannel,
+					 iChannelName );
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+					 iPresetIndex);
+
+	IRLOG_DEBUG3( "CIRActiveIdle::HandleChannelChangeL - iChannelName=%S, iPresetIndex=%d", &iChannelName, iPresetIndex );
+
+	HBufC* stringholder = NULL;
+	
+
+	CDesCArray* array = new (ELeave) CDesCArrayFlat(KIRActiveIdleGranularity);
+	CleanupStack::PushL( array );
+	
+	MDesCArray* list = STATIC_CAST(MDesCArray*,array);
+
+	CArrayFix<TInt>* presetCounts = new (ELeave) CArrayFixFlat<TInt>( 2 );
+	CleanupStack::PushL( presetCounts );
+	CEikonEnv* env = CEikonEnv::Static();      
+	if(iPresetIndex != 0)
+		{
+		 if(iMetaData->Artist() == KNullDesC && iMetaData->Song() == KNullDesC)
+			 {
+             array->AppendL( iChannelName );
+             presetCounts->AppendL( iPresetIndex );
+			 stringholder = StringLoader::LoadLC( R_IRAPP_ACTIVEIDLE_NOSTATIONDATA,*list,
+													 *presetCounts ,env );
+			 }
+		 else
+			 {
+			array->AppendL( iMetaData->Artist() ); //First string
+		    array->AppendL( iMetaData->Song() );
+		    array->AppendL( iChannelName );
+			presetCounts->AppendL( iPresetIndex );
+			stringholder = StringLoader::LoadLC( R_IRAPP_ACTIVEIDLE_STATIONDATA,*list,
+													 *presetCounts ,env );
+			 }
+			
+		}
+	else
+		{
+			array->AppendL( iMetaData->Artist() ); //First string
+		    array->AppendL( iMetaData->Song() );
+		    array->AppendL( iChannelName );
+	        stringholder = StringLoader::LoadLC( R_IRAPP_AI_NOINDEX_STATIONDATA,*list);
+		}
+	
+
+    for ( TInt i = 0; i < iObservers.Count(); i++ )
+		{
+	    MAiContentObserver* observer = iObservers[i];
+
+	    observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+
+	    observer->Publish( *this, EAiIRContentOneLineInfoCaption, *stringholder,
+	    					 KIRPublishIndex );
+	    observer->Commit( reinterpret_cast<TInt32>( this ) );
+		}
+
+	CleanupStack::PopAndDestroy(stringholder);
+	CleanupStack::PopAndDestroy( presetCounts );
+
+	// Pop and delete strings array
+	CleanupStack::PopAndDestroy();
+	IRLOG_DEBUG( "CIRActiveIdle::HandleChannelChangeL - Exiting." );	IRLOG_DEBUG( "CIRActiveIdle::HandleChannelChangeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandleMetaDataReceivedL
+// Handles meta data changes
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::HandleMetaDataReceivedL( const CIRMetaData& aMetaData )
+    {
+	IRLOG_DEBUG( "CIRActiveIdle::HandleMetaDataReceivedL" );
+	iMetaData->SetL( aMetaData );
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannel,
+					 iChannelName );
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+					 iPresetIndex);
+
+	IRLOG_DEBUG3( "CIRActiveIdle::HandleChannelChangeL - iChannelName=%S, iPresetIndex=%d", &iChannelName, iPresetIndex );
+
+	HBufC* stringholder = NULL;
+
+	CDesCArray* array = new (ELeave) CDesCArrayFlat(KIRActiveIdleGranularity);
+	CleanupStack::PushL( array );
+	
+	MDesCArray* list = STATIC_CAST(MDesCArray*,array);
+
+	CArrayFix<TInt>* presetCounts = new (ELeave) CArrayFixFlat<TInt>( 2 );
+	CleanupStack::PushL( presetCounts );
+	CEikonEnv* env = CEikonEnv::Static();      
+	if(iPresetIndex != 0)
+		{
+		 if(iMetaData->Artist() == KNullDesC && iMetaData->Song() == KNullDesC)
+			 {
+             array->AppendL( iChannelName );
+             presetCounts->AppendL( iPresetIndex );
+			 stringholder = StringLoader::LoadLC( R_IRAPP_ACTIVEIDLE_NOSTATIONDATA,*list,
+													 *presetCounts ,env );
+			 }
+		 else
+			 {
+			array->AppendL( iMetaData->Artist() ); //First string
+		    array->AppendL( iMetaData->Song() );
+		    array->AppendL( iChannelName );
+			presetCounts->AppendL( iPresetIndex );
+			stringholder = StringLoader::LoadLC( R_IRAPP_ACTIVEIDLE_STATIONDATA,*list,
+													 *presetCounts ,env );
+			 }
+			
+		}
+	else
+		{
+			array->AppendL( iMetaData->Artist() ); //First string
+		    array->AppendL( iMetaData->Song() );
+		    array->AppendL( iChannelName );
+	        stringholder = StringLoader::LoadLC( R_IRAPP_AI_NOINDEX_STATIONDATA,*list);
+		}
+	
+
+    for ( TInt i = 0; i < iObservers.Count(); i++ )
+		{
+	    MAiContentObserver* observer = iObservers[i];
+
+	    observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+
+	    observer->Publish( *this, EAiIRContentOneLineInfoCaption, *stringholder,
+	    					 KIRPublishIndex );
+
+	    observer->Commit( reinterpret_cast<TInt32>( this ) );
+		}
+
+	CleanupStack::PopAndDestroy(stringholder);
+	CleanupStack::PopAndDestroy( presetCounts );
+
+	// Pop and delete strings array
+	CleanupStack::PopAndDestroy();
+		
+    IRLOG_DEBUG( "CIRActiveIdle::HandleMetaDataReceivedL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandlePlayStopL
+// Handles data change in Stop State
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::HandlePlayStopL( TIRStopPlayState aState )
+	{
+	IRLOG_DEBUG( "CIRActiveIdle::HandlePlayStopL" );
+	RProperty::Get( KUidActiveInternetRadioApp, KIRPSDataChannel, iChannelName );
+	RProperty::Get(KUidActiveInternetRadioApp, KIRPSPresetIndex, iPresetIndex);
+    HBufC* oneLineInfoCaption = NULL;
+	HBufC* presetCaption = NULL;
+
+	// Checks if the channel is in favourites and if it is displays
+	// the channel name with the preset index.
+	if ( iPresetIndex == 0 )
+        {
+        oneLineInfoCaption = iChannelName.AllocLC();
+        presetCaption = iChannelName.AllocLC();
+        }
+	else
+        {
+        TBuf<KMAXLENGTH> oneLineInfoBuffer;
+        oneLineInfoBuffer.AppendNum(iPresetIndex);
+        oneLineInfoBuffer.Append(KSeparatorDot);
+	    oneLineInfoBuffer.Append(iChannelName);
+	    oneLineInfoBuffer.Trim();
+	    oneLineInfoCaption = oneLineInfoBuffer.AllocLC();
+        TBuf<KMAXLENGTH> presetBuffer;
+	    presetBuffer.AppendNum(iPresetIndex);
+	    presetBuffer.Append(KSeparatorDot);
+	    presetBuffer.Append(iChannelName);
+	    presetBuffer.Trim();
+   	    presetCaption = presetBuffer.AllocLC();
+        }
+
+	
+	
+    if ( aState != EIRStateUninitialized )
+        {
+    	for ( TInt i = 0; i < iObservers.Count(); i++ )
+    		{
+            MAiContentObserver* observer = iObservers[i];
+
+            observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+
+            observer->Publish( *this, EAiIRContentPresetCaption, *presetCaption,
+            					KIRPublishIndex );
+
+            if ( aState == EIRStatePlay )
+                {
+    	        observer->Publish( *this, EAiIRContentAppIcon, EAiIRResourceIRPlayingIcon,
+    	        					KIRPublishIndex );
+                }
+            else
+                {
+    	        observer->Publish( *this, EAiIRContentAppIcon, EAiIRResourceIRStoppedIcon,
+    	        					KIRPublishIndex );
+     	        observer->Publish( *this, EAiIRContentOneLineInfoCaption, *oneLineInfoCaption,
+     	        					KIRPublishIndex );
+                }
+
+            observer->Commit( reinterpret_cast<TInt32>( this ) );
+    		}
+        }
+
+	CleanupStack::PopAndDestroy( presetCaption );
+	CleanupStack::PopAndDestroy( oneLineInfoCaption );
+	IRLOG_DEBUG( "CIRActiveIdle::HandlePlayStopL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandleVolumeChangeL
+// Handles volume change
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::HandleVolumeChangeL( const TInt aVolume )
+	  {
+	IRLOG_DEBUG( "CIRActiveIdle::HandleVolumeChangeL" );
+	if ( aVolume >= KIRMinVolumeLevel && aVolume <= KIRMaxVolumeLevel )
+	    {
+        TInt resourceId( EAiIRResourceVol1 );
+    	switch ( aVolume )
+    	    {
+    	    case EVolumeLevel0:
+    	        {
+    	        resourceId = EAiIRResourceVol0;
+    	        break;
+    	        }
+    	    case EVolumeLevel1:
+    	        {
+    	        resourceId = EAiIRResourceVol1;
+    	        break;
+    	        }
+    	    case EVolumeLevel2:
+    	        {
+    	        resourceId = EAiIRResourceVol2;
+    	        break;
+    	        }
+    	    case EVolumeLevel3:
+    	        {
+    	        resourceId = EAiIRResourceVol3;
+    	        break;
+    	        }
+    	    case EVolumeLevel4:
+    	        {
+    	        resourceId = EAiIRResourceVol4;
+    	        break;
+    	        }
+    	    case EVolumeLevel5:
+    	        {
+    	        resourceId = EAiIRResourceVol5;
+    	        break;
+    	        }
+    	    case EVolumeLevel6:
+    	        {
+    	        resourceId = EAiIRResourceVol6;
+    	        break;
+    	        }
+    	    case EVolumeLevel7:
+    	        {
+    	        resourceId = EAiIRResourceVol7;
+    	        break;
+    	        }
+    	    case EVolumeLevel8:
+    	        {
+    	        resourceId = EAiIRResourceVol8;
+    	        break;
+    	        }
+    	    case EVolumeLevel9:
+    	        {
+    	        resourceId = EAiIRResourceVol9;
+    	        break;
+    	        }
+    	    case EVolumeLevel10:
+    	        {
+    	        resourceId = EAiIRResourceVol10;
+    	        break;
+    	        }
+    	    default:
+    	        break;
+    	    }
+        for ( TInt i = 0; i < iObservers.Count(); i++ )
+        	{
+            MAiContentObserver* observer = iObservers[i];
+            //Initiates content publishing transaction.
+            observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+            //Informs that content identified by reference resourceId must be
+            //published to UI control identified by selector
+     	    //EAiIRContentVolume
+    		observer->Publish( *this, EAiIRContentVolume, resourceId, KIRPublishIndex );
+    	    //Requests framework that content publishing transaction must be
+    	    //finalized and content should be rendered to the screen.
+    	    //Displays the volume level onto the Active Idle content area.
+        	observer->Commit( reinterpret_cast<TInt32>( this ) );
+        	}
+	    }
+	else
+		{
+		User::Leave(KErrGeneral);
+		}
+    IRLOG_DEBUG( "CIRActiveIdle::HandleVolumeChangeL - Exiting." );
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandleApplicationRunningStateChangeL
+// Handles changes in Internet Radio application running state.
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdle::HandleApplicationRunningStateChangeL(
+        const TIRPSApplicationRunningState aRunningState )
+    {
+    IRLOG_DEBUG( "CIRActiveIdle::HandleApplicationRunningStateChangeL" );
+    if ( iRunningState != aRunningState )
+        {
+        switch ( aRunningState )
+            {
+            case EIRPSApplicationUninitialized:
+                {
+                break;
+                }
+            //called when application starts
+            case EIRPSApplicationRunning:
+                {
+                for ( TInt i = 0; i < iObservers.Count(); i++ )
+                    {
+                    MAiContentObserver* observer = iObservers[i];
+                    //Initiates content publishing transaction.
+                    observer->StartTransaction(reinterpret_cast<TInt32>(
+                                                 this ) );
+                    //Invoked by the plug-in to inform that content identified
+                    //by reference EAiIRResourceIRStoppedIcon must be published
+                    //to UI crtl identified by selector EAiIRContentAppIcon.
+                    // Full Page Idle: shows IR icon.
+                    // Navigation Bar Idle: updates title text and switches correct layout.
+                    // App has just started, publish initially to stopped state.
+                    observer->Publish( *this, EAiIRContentAppIcon, EAiIRResourceIRStoppedIcon,
+                    					 KIRPublishIndex );
+                    observer->Publish( *this, EAiIRContentOneLineInfoCaption,KNullDesC,
+                    					KIRPublishIndex );
+
+                    observer->Commit( reinterpret_cast<TInt32>( this ) );
+                    }
+
+                if ( iIRTerminationDetector )
+                    {
+                    iIRTerminationDetector->StartListeningL();
+                    }
+                break;
+                }
+            // called when the application exits
+            case EIRPSApplicationClosing:
+                {
+                Clean();
+                break;
+                }
+            default:
+                break;
+            }
+        iRunningState = aRunningState;
+        }
+    IRLOG_DEBUG( "CIRActiveIdle::HandleApplicationRunningStateChangeL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandleBufferingStateL
+// Handles changes in Internet Radio buffering state
+// ---------------------------------------------------------------------------
+//
+
+void CIRActiveIdle::HandleBufferingStateL(TIRBufferingState aState )
+	{
+		if (EIRStateBufferingStart == aState)
+		{
+		    // do nothing, just remove build warning
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlesrc/iractiveidlemain.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <implementationproxy.h>
+
+#include "iractiveidle.h"
+
+/** Provides a key-value pair table, that is used to identify the correct construction function for the requested interface. */
+const TImplementationProxy KIRActiveIdleImplementationTable[] =
+	{
+    /*lint -save -e611 (Warning -- Suspicious cast)*/
+    IMPLEMENTATION_PROXY_ENTRY( 0x2000B4A7, CIRActiveIdle::NewL )
+    /*lint -restore*/
+	};
+
+const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount );
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ---------------------------------------------------------------------------
+// Returns the implementations provided by this ECOM plugin DLL.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+	{
+	aTableCount = sizeof( KIRActiveIdleImplementationTable ) / 
+							sizeof( TImplementationProxy );
+	return KIRActiveIdleImplementationTable;
+	}
+
+// ================= MEMBER FUNCTIONS =======================
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlesrc/iractiveidlestatedetector.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2007-2008 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:  Source file of CIRActiveIdleStateDetector
+*
+*/
+
+
+#include "irdebug.h"
+#include <apgtask.h>
+#include <eikenv.h>
+
+#include "iractiveidlestatedetector.h"
+#include "iractiveidleengnotifyhandler.h"
+#include "ircommon.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdleStateDetector::CIRActiveIdleStateDetector(MIRActiveIdleEngNotifyHandler& 
+	aStateObserver):CActive(CActive::EPriorityStandard),iStateObserver(aStateObserver)
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRActiveIdleStateDetector::~CIRActiveIdleStateDetector()
+    {
+	Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Starts listening
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleStateDetector::StartListeningL()
+    {
+    IRLOG_DEBUG("CIRActiveIdleStateDetector::StartListeningL.");
+	if ( !IsActive() )
+	    {
+    	TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
+    	TApaTask task = taskList.FindApp( KUidInternetRadioApp );
+    		
+    	if ( task.Exists() )
+    		{
+    		TThreadId threadId = task.ThreadId();
+    		RThread thread;
+    		User::LeaveIfError( thread.Open( threadId ) );
+    		CleanupClosePushL( thread );
+    		User::LeaveIfError( thread.Process( iProcess ) );
+    		CleanupStack::PopAndDestroy();
+            IRLOG_INFO("CIRActiveIdleStateDetector::StartListeningL - Logon.");
+        	iProcess.Logon( iStatus );
+        	SetActive();	
+    		}
+		else
+		    {
+            IRLOG_INFO("CIRActiveIdleStateDetector::StartListeningL  - sending EIRPSApplicationClosing.");
+	        iStateObserver.HandleApplicationRunningStateChangeL( EIRPSApplicationClosing );
+		    }
+	    }
+    IRLOG_DEBUG("CVRActiveIdleStateDetector::StartListeningL - Exiting.");	    
+    }
+
+// ---------------------------------------------------------------------------
+// Implements cancellation of an outstanding request
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleStateDetector::DoCancel()
+    {
+    IRLOG_DEBUG("CIRActiveIdleStateDetector::DoCancel");
+	iProcess.LogonCancel( iStatus );
+	iProcess.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Handles request completion event
+// ---------------------------------------------------------------------------
+//
+void CIRActiveIdleStateDetector::RunL()
+    {
+    IRLOG_INFO2("CIRActiveIdleStateDetector::RunL (%d) sending EIRPSApplicationClosing", iStatus.Int());
+	iProcess.Close();
+	// Internet Radio has been closed
+	iStateObserver.HandleApplicationRunningStateChangeL( EIRPSApplicationClosing );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle.css	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1041 @@
+* {
+	nav-index: none;
+}
+
+/* Hide arabic triggers. Only class="western" are shown */
+trigger.arabic {
+   display: none;
+}
+view { /* main_idle_act2_pane */
+	display: block; 
+	position: static; 	
+	width: 100%;
+	height: 100%;
+	direction: ltr;
+	block-progression: lr;
+	background-image: wallpaper;
+}
+
+menuitem#SK2{
+	_s60-longtap: true;
+}
+/**************************************
+	NAVI BAR
+***************************************/
+
+box#pluginIconArea { /* popup_ai2_link_window */
+	display: block; 
+	visibility: visible;
+	position: absolute; 	
+	width: 7.25u;	
+	height: 28.75u;	
+	left: 1.0u;	
+	top: 1.5u;		
+	padding-left: 0.85u;	
+	padding-right: 0.65u;	
+	padding-top: 1.00u;	
+	padding-bottom: 1.00u;
+	
+	block-progression: tb;
+	background-color:"SKIN(268458534 8448)";
+	z-index: 1;
+}
+
+
+image.pluginAreaIcon { /* grid_ai2_link_window_g1 */
+	display: block; 
+	visibility: visible;
+	position: static; 
+	width: 5.75u;
+	/*height: 20%;*/	/* with NewsTicker */
+	height: 5.75u;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	block-progression: tb;
+	z-index: 1;
+}
+
+image.pluginAreaIcon:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5136)";
+}
+
+image#shortcutPluginIcon {
+    nav-index: 1;
+/* Block with flag '__NEWSTICKER' skipped. */
+}
+image#organizerPluginIcon {
+    nav-index: 2;
+}
+image#musicPlayerPluginIcon {
+    nav-index: 3;
+}
+image#radioPluginIcon {
+    nav-index: 4;
+}
+image#personalizationPluginIcon {
+    nav-index: 5;
+/* Block with flag '__NEWSTICKER' skipped. */
+}
+
+
+/**************************************
+	SAT AREA
+***************************************/
+
+box#SATPluginContainer {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 9.75u;
+	top: 1.0u;
+	width: auto;
+	height: 4.0u;
+	background-image: auto;
+}
+
+text.satText	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 4.0u;
+	left: auto;
+	margin-right: 1.0u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;         /* TODO: check */
+	text-align: right;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+image.satIcon	{
+	display: block;
+	visibility: visible;
+	position: static;
+	top: 0.25u;
+	left: auto;
+	margin-right: 1.0u;
+	width: 3.5u;
+	height: 3.5u;
+}
+
+
+/**************************************
+	PLUGIN AREA
+***************************************/
+
+box#pluginContainerArea { /* popup_ai2_data_window */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;	
+	height: auto;
+	left: 10.0u;		
+	top: 1.5u;	
+	margin-right: 1.0u;
+	margin-bottom: 1.5u;
+	/*padding-left: 
+	padding-right:*/
+	block-progression: tb;
+	z-index: 0;
+}
+
+
+/*********
+	GENERAL
+**********/
+
+box.pluginContainer { /*  popup_ai2_data_window  */
+	display: none;
+	visibility: visible;
+	position: static;
+	width: 100%;
+	height: 100%;
+	block-progression: tb;
+	background-color:"SKIN(268458534 8448)";
+	z-index: 1;
+}
+
+/* There seems to be a bug in the animation system that doesn't start
+the animation correctly. This is to go around it. */
+
+box#shortcutPluginAnimationFixButton { 
+	display: none;
+	visibility: hidden;
+	width: 0%;
+	height: 0%;
+}
+
+button.fakeButton { 
+	display: none;
+	visibility: hidden;
+	width: 0%;
+	height: 0%;
+}
+
+text.titleText{ /* heading_ai2_ gene_pane */
+	display: block;
+	visibility: visible;
+	position: static;
+	block-progression: lr;
+	width: auto;
+	height: 14.4%;	
+	padding-left: 1.2u;
+	padding-right: 1.1u;
+	margin-left: 0.7u;
+	margin-right: 0.9u;
+	padding-bottom: 0.5u;
+	border-bottom-width: thin;
+	border-bottom-style: dotted;
+	border-bottom-color: auto;
+	nav-index: auto;
+	font-family: EAknLogicalFontPrimaryFont; 
+	font-size: 4.0u; 
+	color: "SKIN(268458534 13056 19)";
+}
+
+text.titleText:focus{
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+	color: "SKIN(268458534 13056 9)";
+}
+
+text.genericButtonText { /* ai2_gene_pane_t1 */
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	padding-left: 1.0u;
+	padding-right: 1.0u;
+	margin-left: 0.7u;
+	margin-right: 0.9u;
+	padding-bottom: 0.6u;
+	padding-top: -0.3u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;        
+	color: "SKIN(268458534 13056 19)";
+	nav-index: auto;  
+ 	border-top-width: thin;
+	border-top-style: dotted;
+	border-top-color: auto;
+}
+
+text.genericButtonText:focus{
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+
+/************************
+	SHORTCUT PLUGIN AREA 
+*************************/
+
+image#shortcutPluginIcon { _s60-initial-focus: 1; }
+
+
+/************************
+	CALENDAR PLUGIN AREA 
+*************************/
+box#organizerPluginContainer { /*  popup_ai2_data_window  */
+	display: none;
+	visibility: visible;
+	position: static;
+	width: 100%;
+	height: 100%;
+	block-progression: tb;
+	background-color:"SKIN(268458534 8448)";
+	z-index: 1;
+}
+/* Organiser items are buttons because they contain 1-2 textelements
+   and an image element */
+button.organizerButton { /* ai2_gene_pane */
+	display: none;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 13.5%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	nav-index: auto;  
+ 	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+}
+
+button.organizerButtonLastPosition { /* ai2_gene_pane */
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 12.5%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	margin-bottom: 0.65u;
+	nav-index: auto;  
+ 	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+}
+
+button.organizerButton:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+	
+}
+
+button.organizerButtonLastPosition:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+button#eventButton4 { 	display: none; 	nav-index: none; }
+button#eventButton5 { 	display: none; 	nav-index: none; }
+button#eventButton6 { 	display: none; 	nav-index: none; }
+
+image.eventIcon { /* ai2_gene_pane_g2 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 0.75u;	
+	left: 1.25u;	
+	width: 4.0u;	
+	height: 4.0u;	
+}
+
+text.eventText1 { /* ai2_gene_pane_t1  */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4.0u;
+	left: 6.25u;
+	right: 1.0u;
+	/*top: 0.75u;*/
+	top: 6%;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+text.eventText2 { /* ai2_gene_pane_t1  */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4.0u;
+	/*top: 4.5u;	*/
+	top: auto;
+	bottom: 8%;
+	left: 6.25u;
+	right: 1.0u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+/*********************
+	PLAYER PLUGIN AREA 
+**********************/
+
+box#volumeIndicator { /* ai2_mp_volume_pane */
+	display: none;
+	visibility: visible;
+	position: absolute;
+	block-progression: lr;
+	top: 15.5%;
+	width: auto;
+	height: 14%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;	
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+
+}
+
+
+box#volumeIndicator:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+
+}
+
+
+
+image#musicPlayerVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 1.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#musicPlayerVolumeDownIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 1.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#musicPlayerSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#musicPlayerSpeakerIconHighlight { 
+	display: block;
+	visibility: hidden;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#musicPlayerSpeakerMutedIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#musicPlayerSpeakerMutedIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+/*
+image#musicPlayerVolumeIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 9.5u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+*/
+
+volumecontrol#musicPlayerVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 9.5u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+slider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#musicPlayerVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 30.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#musicPlayerVolumeUpIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 30.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+/*image#musicPlayerInactiveVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 30.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	z-index: 11;
+}
+
+image#musicPlayerInactiveVolumeUpIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 30.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	z-index: 10;
+}*/
+
+
+/* Replaces volume control and playback info when player is inactive */
+box#playerInActive	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+}
+
+
+text#musicPlayerInActive	{
+	display: block;
+	visibility: visible;
+	position: static;
+	text-align: center;
+	margin-top: auto;
+	margin-bottom: 45.0%;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;	*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+box#infoArea {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: auto;
+	top: 29.5%;
+	margin-left: 1.1u;
+	margin-right: 1.1u;
+	border-top-width: 0.4%;
+	border-top-style: dotted;
+	border-top-color: auto;	
+}
+
+/* A box around the artist and track name */
+/* the idea here is to display max 6 rows (max-line-amount). */
+/* The track has higher display-prio so it will be displayed first. */
+/* The track will get all the lines (max 6) it needs in order to display its name */
+/* Whats left of the 6 lines from track name will be used for artist */
+box#trackAndArtist{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	/* For landscape orientation. This way we get the */
+	/* last line out of sight */	
+	height: 100%;
+	margin-bottom: 10.5u;	
+}
+
+box#artistLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: adaptive;
+	_s60-display-priority: 11;
+}
+
+
+box#trackLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: adaptive;
+	_s60-display-priority: 10;
+
+}
+
+
+box#durationLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: 2.0u;
+}
+
+
+image.playerStatusIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: 3.5u;
+	height: 3.5u;
+	left: 1.3u;
+	/*right: auto;*/
+	top: 1.0u;
+}
+
+text#time{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4.0u;
+	left: 7.5u;
+	right: 1.00u;
+	top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	margin-left: 1.0u;
+	margin-right: 1.0u;
+	margin-top: 0.25u;
+}
+
+text.playerTextLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: adaptive;
+
+	margin-left: 1.0u;
+	margin-right: 2.75u;
+	margin-top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;	*/
+	color: "SKIN(268458534 13056 19)";	
+	text-overflow-mode: wrap;
+	max-line-amount: 6;
+}
+
+
+/*********************
+	VISUAL/INTERNET RADIO PLUGIN AREA 
+**********************/
+
+button.radioTitleButton { /* heading_ai2_ gene_pane */
+	display: block;
+	visibility: visible;
+	position: static;
+	block-progression: lr;
+	width: auto;
+	height: 14.4%;	
+	padding-left: 1.2u;
+	padding-right: 1.1u;
+	margin-left: 0.7u;
+	margin-right: 0.9u;
+	padding-bottom: 0.5u;
+	border-bottom-width: thin;
+	border-bottom-style: dotted;
+	border-bottom-color: auto;
+	nav-index: auto;
+}
+
+button.radioTitleButton:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+text.radioTitleText { /* heading_ai2_gene_pane_t1 */
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	font-family: EAknLogicalFontPrimaryFont; 
+	font-size: 4.0u;      
+	color: "SKIN(268458534 13056 19)";
+}
+
+/* Invisible icon that is used to switch correct layout */
+image.invisibleRadioTitleIcon {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 0.25u;
+	top: 0.25u;
+	width: 4.0u;
+	height: 4.0u;
+}
+
+box#radioVolumeIndicator {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	block-progression: lr;
+	top: 15.5%;
+	width: auto;
+	height: 14%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;	
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+
+}
+
+
+box#radioVolumeIndicator:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+
+}
+
+
+
+image#radioVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 1.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#radioVolumeDownIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 1.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#radioSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#radioSpeakerIconHighlight { 
+	display: block;
+	visibility: hidden;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#radioSpeakerMutedIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+image#radioSpeakerMutedIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 4.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+
+}
+
+
+volumecontrol#radioVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 9.5u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+slider#radioSlider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#radioVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 30.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#radioVolumeUpIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 30.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+
+
+/* Replaces volume control and playback info when radio is inactive */
+box#radioInactive	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+}
+
+
+text#radioInactiveText	{
+	display: block;
+	visibility: visible;
+	position: static;
+	text-align: center;
+	margin-top: auto;
+	margin-bottom: 45.0%;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+box#visualRadioInfoArea {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: auto;
+	top: 29.5%;
+	margin-left: 1.1u;
+	margin-right: 1.1u;
+	border-top-width: 0.4%;
+	border-top-style: dotted;
+	border-top-color: auto;	
+}
+
+
+box#visualRadioNameLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 0.25u;
+	block-progression: lr;
+}
+
+
+box#visualRadioLocationLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 0.25u;
+}
+
+
+box#visualRadioFrequencyLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 0.25u;
+	margin-bottom: auto;
+}
+
+
+text#visualRadioNumberTextLine {
+	width: 4.0u;
+	height:	4.0u;
+	left: 2.75u;
+	top: 0.25u;
+	font-weight: bold;
+	text-align: right;
+}
+
+
+text#visualRadioNameTextLine {
+	font-weight: bold;
+}
+
+
+text.visualRadioTextLine {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height:	4.0u;
+	left: 9.0u;
+	right: 1.75u;
+	top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";	
+	text-overflow-mode: wrap;
+	max-line-amount: 1;
+}
+
+
+box#inetRadioInfoArea {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: auto;
+	top: 29.5%;
+	margin-left: 1.1u;
+	margin-right: 1.1u;
+	border-top-width: 0.4%;
+	border-top-style: dotted;
+	border-top-color: auto;	
+}
+
+
+box#inetRadioPresetLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 2.0u;
+}
+
+
+box#inetRadioArtistLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+}
+
+
+box#inetRadioTrackLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+}
+
+
+text.inetRadioTextLine {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height:	4.0u;
+	left: 2.75u;
+	right: 1.75u;
+	top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";	
+	text-overflow-mode: wrap;
+	max-line-amount: 1;
+}
+
+
+text#inetRadioPresetTextLine {
+	font-weight: bold;
+}
+
+
+/****************************
+	PERSONALIZATION PLUGIN AREA 
+*****************************/
+
+/* Defined in "General" definitions */
+
+
+/*********************************
+	WRAPPER BOX FOR SAT & NEWSTICKER
+**********************************/
+
+box#SATAndNewstickerBox {
+	display: block;
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 0;
+}
+
+/* Block with flag '__NEWSTICKER' skipped. */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "ActiveIdle.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+<!--
+qtn_ai_skin_iconbar.attributes
+qtn_ai_skin_iconbar.layout "list_single_graphic_pane_t1"
+qtn_ai_skin_iconbar.release "3.2"
+qtn_ai_skin_iconbar.description "Title of the theme"
+qtn_ai_skin_iconbar.parents "Theme selection view"
+-->
+<!ENTITY qtn_ai_skin_iconbar "Navigation bar">
+
+<!-- Static UI strings -->
+
+<!--
+qtn_ai_shorts_title.attributes
+qtn_ai_shorts_title.layout "heading_ai2_gene_pane_t1"
+qtn_ai_shorts_title.release "3.2"
+qtn_ai_shorts_title.description "Title of shortcut plugin"
+qtn_ai_shorts_title.grammar "Use shortcuts to launch applications."
+qtn_ai_shorts_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_shorts_title "Shortcuts">
+
+<!--
+qtn_ai_cal_title.attributes
+qtn_ai_cal_title.layout "heading_ai2_gene_pane_t1"
+qtn_ai_cal_title.release "3.2"
+qtn_ai_cal_title.description "Title of calendar plugin"
+qtn_ai_cal_title.grammar "Mark your important notes in calendar."
+qtn_ai_cal_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_cal_title "Calendar">
+
+<!--
+qtn_ai_player_title.attributes
+qtn_ai_player_title.layout "heading_ai2_gene_pane_t1"
+qtn_ai_player_title.release "3.2"
+qtn_ai_player_title.description "Title of music player plugin"
+qtn_ai_player_title.parents "heading_ai2_gene_pane"
+qtn_ai_player_title
+-->
+<!ENTITY qtn_ai_player_title "Music player">
+
+<!--
+qtn_ai_radio_title.attributes
+qtn_ai_radio_title.layout "heading_ai2_gene_pane_t1"
+qtn_ai_radio_title.release "3.2"
+qtn_ai_radio_title.description "Title of FM-radio plugin"
+qtn_ai_radio_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_radio_title "FM Radio">
+
+<!--
+qtn_ai_pers_title.attributes
+qtn_ai_pers_title.layout "heading_ai2_gene_pane_t1"
+qtn_ai_pers_title.release "3.2"
+qtn_ai_pers_title.description "Title of personalization plugin"
+qtn_ai_pers_title.grammar "Personalization is a mighty tool for making your phone unique."
+qtn_ai_pers_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_pers_title "Personalization">
+
+<!--
+qtn_ai_nt_title.attributes
+qtn_ai_nt_title.layout "heading_ai2_gene_pane_t1"
+qtn_ai_nt_title.release "3.2"
+qtn_ai_nt_title.description "Title of news ticker plugin"
+qtn_ai_nt_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_nt_title "News ticker">
+
+
+<!-- Text resources for dynamic UI strings -->
+
+<!-- Shortcut plug-in text resources -->
+
+<!--
+shortcut_EmptyCaption.attributes
+shortcut_EmptyCaption.layout "list_ai2_gene_pane_t1"
+shortcut_EmptyCaption.release "3.2"
+shortcut_EmptyCaption.description "Empty shortcut"
+shortcut_EmptyCaption.parents "list_ai2_gene_pane"
+-->
+<!ENTITY shortcut_EmptyCaption " ">
+
+<!--
+qtn_set_idle_skey_new_msg.attributes
+qtn_set_idle_skey_new_msg.layout "list_ai2_gene_pane_t1"
+qtn_set_idle_skey_new_msg.release "3.2"
+qtn_set_idle_skey_new_msg.description "New message shortcut"
+qtn_set_idle_skey_new_msg.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_set_idle_skey_new_msg "New message">
+
+<!--
+qtn_set_idle_skeys_email_editor.attributes
+qtn_set_idle_skeys_email_editor.layout "list_ai2_gene_pane_t1"
+qtn_set_idle_skeys_email_editor.release "3.2"
+qtn_set_idle_skeys_email_editor.description "New e-mail shortcut"
+qtn_set_idle_skeys_email_editor.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_set_idle_skeys_email_editor "New e-mail">
+
+<!--
+qtn_apps_syncml_mail_gs.attributes
+qtn_apps_syncml_mail_gs.layout "list_ai2_gene_pane_t1"
+qtn_apps_syncml_mail_gs.release "3.2"
+qtn_apps_syncml_mail_gs.description "New SyncML mail shortcut"
+qtn_apps_syncml_mail_gs.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_apps_syncml_mail_gs "New SyncML mail">
+
+<!--
+qtn_apps_mmspostcard_gs.attributes
+qtn_apps_mmspostcard_gs.layout "list_ai2_gene_pane_t1"
+qtn_apps_mmspostcard_gs.release "3.2"
+qtn_apps_mmspostcard_gs.description "New MMS postcard shortcut"
+qtn_apps_mmspostcard_gs.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_apps_mmspostcard_gs "New MMS Postcard">
+
+<!--
+qtn_apps_audio_msg_gs.attributes
+qtn_apps_audio_msg_gs.layout "list_ai2_gene_pane_t1"
+qtn_apps_audio_msg_gs.release "3.2"
+qtn_apps_audio_msg_gs.description "New audio message shortcut"
+qtn_apps_audio_msg_gs.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_apps_audio_msg_gs "New Audio msg">
+
+<!--
+qtn_set_idle_skey_select_msg_type.attributes
+qtn_set_idle_skey_select_msg_type.layout "list_ai2_gene_pane_t1"
+qtn_set_idle_skey_select_msg_type.release "3.2"
+qtn_set_idle_skey_select_msg_type.description "Select message type shortcut"
+qtn_set_idle_skey_select_msg_type.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_set_idle_skey_select_msg_type "Select msg type">
+
+<!--
+qtn_apps_idle_skin_gs.attributes
+qtn_apps_idle_skin_gs.layout "list_single_large_graphic_pane_t1_cp2"
+qtn_apps_idle_skin_gs.release "3.2"
+qtn_apps_idle_skin_gs.description "Change theme shortcut"
+qtn_apps_idle_skin_gs.parents "list_single_large_graphic_pane"
+-->
+<!ENTITY qtn_apps_idle_skin_gs "Change idle theme">
+
+<!--
+qtn_idle_skey_new_msg.attributes
+qtn_idle_skey_new_msg.layout "control_pane_t2"
+qtn_idle_skey_new_msg.release "3.2"
+qtn_idle_skey_new_msg.description "New message shortcut"
+qtn_idle_skey_new_msg.parents "control_pane"
+-->
+<!ENTITY qtn_idle_skey_new_msg "New msg.">
+
+<!--
+qtn_apps_email_skey.attributes
+qtn_apps_email_skey.layout "control_pane_t2"
+qtn_apps_email_skey.release "3.2"
+qtn_apps_email_skey.description "New e-mail shortcut"
+qtn_apps_email_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_email_skey "New mail">
+
+<!--
+qtn_apps_syncml_mail_skey.attributes
+qtn_apps_syncml_mail_skey.layout "control_pane_t2"
+qtn_apps_syncml_mail_skey.release "3.2"
+qtn_apps_syncml_mail_skey.description "New SyncML mail shortcut"
+qtn_apps_syncml_mail_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_syncml_mail_skey "New sync.mail">
+
+<!--
+qtn_apps_mmspostcard_skey.attributes
+qtn_apps_mmspostcard_skey.layout "control_pane_t2"
+qtn_apps_mmspostcard_skey.release "3.2"
+qtn_apps_mmspostcard_skey.description "New MMS postcard shortcut"
+qtn_apps_mmspostcard_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_mmspostcard_skey "New postcard">
+
+<!--
+qtn_apps_audio_msg_skey.attributes
+qtn_apps_audio_msg_skey.layout "control_pane_t2"
+qtn_apps_audio_msg_skey.release "3.2"
+qtn_apps_audio_msg_skey.description "New audio message shortcut"
+qtn_apps_audio_msg_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_audio_msg_skey "New audiomsg">
+
+<!--
+qtn_apps_idle_skin_skey.attributes
+qtn_apps_idle_skin_skey.layout "control_pane_t2"
+qtn_apps_idle_skin_skey.release "3.2"
+qtn_apps_idle_skin_skey.description "Change theme shortcut"
+qtn_apps_idle_skin_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_idle_skin_skey "Idle theme">
+
+
+<!-- Personalization plug-in text resources -->
+
+<!--
+qtn_ai_pers_all_profiles.attributes
+qtn_ai_pers_all_profiles.layout "list_ai2_gene_pane_t1"
+qtn_ai_pers_all_profiles.release "3.2"
+qtn_ai_pers_all_profiles.description "Open profiles application shortcut"
+qtn_ai_pers_all_profiles.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_pers_all_profiles "All profiles">
+
+<!--
+qtn_ai_pers_change_theme.attributes
+qtn_ai_pers_change_theme.layout "list_ai2_gene_pane_t1"
+qtn_ai_pers_change_theme.release "3.2"
+qtn_ai_pers_change_theme.description "Open personalization application shortcut"
+qtn_ai_pers_change_theme.grammar "Use themes to personalize your phone."
+qtn_ai_pers_change_theme.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_pers_change_theme "Themes">
+
+<!--
+qtn_ai_pers_change_wallpaper.attributes
+qtn_ai_pers_change_wallpaper.layout "list_ai2_gene_pane_t1"
+qtn_ai_pers_change_wallpaper.release "3.2"
+qtn_ai_pers_change_wallpaper.description "Open wallpaper view in personalization application shortcut"
+qtn_ai_pers_change_wallpaper.grammar "Set cool wallpaper to color up your phone."
+qtn_ai_pers_change_wallpaper.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_pers_change_wallpaper "Wallpaper">
+
+<!--
+qtn_apps_sd_list.attributes
+qtn_apps_sd_list.layout "list_single_large_graphic_pane_t1_cp2"
+qtn_apps_sd_list.release "3.2"
+qtn_apps_sd_list.description "Open speed dial application shortcut"
+qtn_apps_sd_list.parents "list_single_large_graphic_pane"
+-->
+<!ENTITY qtn_apps_sd_list "Speed dial">
+
+<!--
+qtn_ai_pers_change_sc.attributes
+qtn_ai_pers_change_sc.layout "list_ai2_gene_pane_t1"
+qtn_ai_pers_change_sc.release "3.2"
+qtn_ai_pers_change_sc.description "Open shortcuts view in general settings shortcut"
+qtn_ai_pers_change_sc.grammar "Use shortcuts to launch applications."
+qtn_ai_pers_change_sc.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_pers_change_sc "Shortcuts">
+
+<!--
+text_softkey_back.attributes
+text_softkey_back.layout "control_pane_t2"
+text_softkey_back.release "3.2"
+text_softkey_back.description "Back text for SK2"
+text_softkey_back.grammar "Click back to return to previous view."
+text_softkey_back.parents "control_pane"
+-->
+<!ENTITY text_softkey_back "Back">
+
+<!-- Middle soft key text resources -->
+
+<!--
+qtn_msk_select.attributes
+qtn_msk_select.layout "control_pane_t3/opt3"
+qtn_msk_select.release "3.2"
+qtn_msk_select.description "Select text for MSK"
+qtn_msk_select.grammar "Click select for previewing content."
+qtn_msk_select.parents "control_pane"
+-->
+<!ENTITY qtn_msk_select "Select">
+
+<!--
+qtn_msk_open.attributes
+qtn_msk_open.layout "control_pane_t3/opt3"
+qtn_msk_open.release "3.2"
+qtn_msk_open.description "Open text for MSK"
+qtn_msk_open.grammar "Click open for opening content."
+qtn_msk_open.parents "control_pane"
+-->
+<!ENTITY qtn_msk_open "Open">
+
+
+<!-- Organizer plug-in text resources -->
+
+<!--
+qtn_ai_cale_no_event_today_short.attributes
+qtn_ai_cale_no_event_today_short.layout "ai2_gene_pane_t1"
+qtn_ai_cale_no_event_today_short.release "3.2"
+qtn_ai_cale_no_event_today_short.description "No events for today"
+qtn_ai_cale_no_event_today_short.parents "ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_cale_no_event_today_short "No events for today">
+
+<!--
+qtn_ai_cale_no_more_ev_td_short.attributes
+qtn_ai_cale_no_more_ev_td_short.layout "ai2_gene_pane_t1"
+qtn_ai_cale_no_more_ev_td_short.release "3.2"
+qtn_ai_cale_no_more_ev_td_short.description "No more events for today"
+qtn_ai_cale_no_more_ev_td_short.parents "ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_cale_no_more_ev_td_short "No more events for Today">
+
+<!--
+qtn_ai_player_no_tracks.attributes
+qtn_ai_player_no_tracks.layout "ai2_gene_pane"
+qtn_ai_player_no_tracks.release "3.2"
+qtn_ai_player_no_tracks.description "[No tracks playing]"
+qtn_ai_player_no_tracks.parents "ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_player_no_tracks "[No tracks playing]">
+
+<!--
+qtn_vr_ai_radiolauncher.attributes
+qtn_vr_ai_radiolauncher.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_vr_ai_radiolauncher.release "3.2"
+qtn_vr_ai_radiolauncher.description "Radio Launcher title in Active Idle 2"
+qtn_vr_ai_radiolauncher.parents "heading_ai2_gene_pane"
+qtn_vr_ai_radiolauncher
+-->
+<!ENTITY qtn_vr_ai_radiolauncher "Radio">
+
+<!--
+qtn_vr_ai_vradio_title.attributes
+qtn_vr_ai_vradio_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_vr_ai_vradio_title.release "3.2"
+qtn_vr_ai_vradio_title.description "Visual Radio title in Active Idle 2"
+qtn_vr_ai_vradio_title.parents "heading_ai2_gene_pane"
+qtn_vr_ai_vradio_title
+-->
+<!ENTITY qtn_vr_ai_vradio_title "Visual Radio">
+
+<!--
+qtn_vr_ai_radio_not_active.attributes
+qtn_vr_ai_radio_not_active.layout "ai2_gene_pane"
+qtn_vr_ai_radio_not_active.release "3.2"
+qtn_vr_ai_radio_not_active.description "Text in content area when radio not active"
+qtn_vr_ai_radio_not_active.parents "ai2_gene_pane"
+-->
+<!ENTITY qtn_vr_ai_radio_not_active "Radio not active">
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet Radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,2902 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xmluiml SYSTEM "ActiveIdle.dtd">
+<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
+
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+  <!--Application events -->
+  <actions>
+    <action>
+      <trigger name="startup"/>
+      <trigger name="uidefinitionmodificationend"/>
+      <event name="READY"/>
+    </action>
+    <action>
+      <trigger name="shutdown"/>
+      <event name="DOWN"/>
+    </action>
+    <action>
+      <trigger name="uidefinitionmodificationstart"/>
+      <event name="NEW_UI"/>
+    </action>
+    <action>
+      <trigger name="screendevicechange"/>
+      <event name="LAYOUT"/>
+    </action>
+  </actions>
+
+
+  <!-- Views -->
+  <views>
+
+    <!--###########################
+        #####   AI plug-ins   #####
+        ###########################-->
+    <property class="ContentSource" name="Shortcut" value="0x102750FA" load_ordinal="1"/>
+    <property class="ContentSource" name="Organizer" value="0x102750FE" load_ordinal="2"/>
+    <property class="ContentSource" name="MusicPlayer" value="0x10207B73" load_ordinal="3"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+    <property class="ContentSource" name="Profile" value="0x10275101" load_ordinal="5"/>
+    <property class="ContentSource" name="SAT" value="0x102078EB" load_ordinal="6"/>
+    <property class="ContentSource" name="VisualRadio" value="0x10208A89" load_ordinal="7"/>
+    <property class="ContentSource" name="InetRadio" value="0x2000B4A7" load_ordinal="8"/>
+
+
+    <!--###################################
+        ###  Plug-in specific settings  ###
+        ###################################-->
+
+    <!--###################################
+        ###  Shortcut plug-in settings   ##
+        ###################################-->
+    <!-- Always visible shortcuts -->
+    <!-- Shortcut #1, Messaging -->
+    <!-- NOTE: these indexes start from 1 -->
+    <property class="Settings/Shortcut" name="0x00000001" value="localapp:0x100058C5"/>
+    <!-- Shortcut #2, Phonebook -->
+    <property class="Settings/Shortcut" name="0x00000002" value="localapp:0x101F4CCE"/>
+    <!-- Shortcut #3, Clock -->
+    <property class="Settings/Shortcut" name="0x00000003" value="localapp:0x10005903"/>
+    <!-- Shortcut #4, Media Gallery 2 -->
+    <property class="Settings/Shortcut" name="0x00000004" value="localapp:0x101F8599"/>
+    <!-- Shortcut #5, Browser -->
+    <property class="Settings/Shortcut" name="0x00000005" value="localapp:0x10008D39"/>
+    <!-- Shortcut #6, Change theme -->
+    <property class="Settings/Shortcut" name="0x00000006" value="localapp:0x10005A32?view=0x102750A7"/>
+
+    <!-- NOTE! Shortcut settings are used also in Personalization UI (see settings below). -->
+
+    <!-- Optionally visible shortcuts -->
+    <!-- Soft key #1, Applications -->
+    <property class="Settings/Shortcut" name="0x01000100" value="localapp:0x101F4CD2"/>
+    <!-- Soft key #2, Contacts -->
+    <property class="Settings/Shortcut" name="0x01000101" value="localapp:0x101F4CCE"/>
+
+
+    <!--###################################
+        ###  Organizer plug-in settings  ##
+        ###################################-->
+    <!--  Item count and size settings -->
+    <!--        Total line count  -->
+    <property class="Settings/Organizer" name="0x01" value="6"/>
+    <!--        Timed item line count -->
+    <property class="Settings/Organizer" name="0x02" value="2"/>
+    <!--        Non Timed item line count -->
+    <property class="Settings/Organizer" name="0x03" value="1"/>
+    <!--        Line count reserved for non timed items -->
+    <property class="Settings/Organizer" name="0x04" value="2"/>
+        <!-- Publish end time for upcoming timed items -->
+    <property class="Settings/Organizer" name="0x05" value="0"/>
+        <!-- Use alternate publishing for upcoming and ongoing items -->
+    <property class="Settings/Organizer" name="0x06" value="0"/>
+        <!-- Open event to viewer 0 / editor 1 -->
+    <property class="Settings/Organizer" name="0x07" value="0"/>
+
+
+    <!-- Main view -->
+
+    <view id="ActiveIdleView">
+      <actions>
+        <action id="KeyEnd">
+          <trigger name="keyevent">
+            <property name="scancode" value="197"/>
+            <property name="eventtype" value="1"/>
+          </trigger>
+          <event name="system/setfocus">
+            <property name="id" value="shortcutPluginIcon"/>
+          </event>
+          <event name="system/set">
+            <property name="id" value="SATAndNewstickerBox"/>
+            <property name="name" value="display"/>
+            <property name="value" value="block"/>
+            <property name="type" value="string"/>
+          </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+          <event name="system/set">
+            <property name="id" value="shortcutPluginContainer"/>
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+          </event>
+          <event name="system/set">
+            <property name="id" value="organizerPluginContainer"/>
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+          </event>
+          <event name="system/set">
+            <property name="id" value="playerPluginContainer"/>
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+          </event>
+          <event name="system/set">
+            <property name="id" value="radioPluginContainer"/>
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+          </event>
+          <event name="system/set">
+            <property name="id" value="personalizationPluginContainer"/>
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+          </event>
+        </action>
+      </actions>
+
+      <!--################################
+        ####    Plug-in icon bar    ####
+        ################################-->
+
+      <box id="pluginIconArea" focusable="false" backgroundmask="qsn_fr_popup_sub_mask_icon.svg">
+
+        <!-- Shortcut plug-in
+          ##################-->
+
+        <image id="shortcutPluginIcon" path="SKIN(270501603 6186)" class="pluginAreaIcon" focusable="true" stylusstates="2">
+          <actions>
+            <!-- Get focus -> Hide SAT & NT, show plug-in content -->
+            <action>
+              <trigger name="gainfocus"/>
+              <trigger name="stylus">
+                <property name="stylusstate" value="1"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_select;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            <!-- Arrow left -> Hide plug-in content -->
+            <action>
+              <trigger name="down"/>
+              <trigger name="stylus">
+                <property name="stylusstate" value="2"/>
+              </trigger>              
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+            </action>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+
+            <!-- Click Select key or tap icon -->
+            <!--action>
+              <trigger name="activate"/>
+              <trigger name="stylus">
+                <property name="doubleclicked" value="up"/>
+              </trigger>
+              <event name="ui/focusgained(shortcutPluginContainer,SATAndNewstickerBox)"/>
+            </action-->
+            <action>
+              <trigger name="activate"/>
+              <trigger class="western" name="up"/>
+              <trigger class="arabic" name="down"/> 
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name="system/setfocus">
+                <property name="id" value="shortcutPluginAnimationFixButton"/>
+              </event>
+              <event name="system/setfocus">
+                <property name="id" value="shortcutButton1"/>         
+              </event>
+
+            </action>
+            <!-- Select text to MSK label -->
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+          </actions>
+        </image>
+
+        <!-- Organizer plug-in
+           #################-->
+
+        <image id="organizerPluginIcon" path="SKIN(270501046 268458241)" class="pluginAreaIcon" focusable="true" stylusstates="2">
+          <actions>
+            <!-- Show plug-in content -->
+            <action>
+              <trigger name="gainfocus"/>
+              <trigger name="stylus">
+                <property name="stylusstate" value="1"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_select;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            <!-- Hide plug-in content -->
+            <action>
+              <trigger class="western" name="down"/>
+              <trigger class="arabic" name="up"/> 
+              <trigger name="stylus">
+                <property name="stylusstate" value="2"/>
+              </trigger>                            
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>    
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+            </action>
+
+            <!-- Move focus to plug-in content -->
+            <!--action>
+              <trigger name="activate"/>
+              <trigger name="stylus">
+                <property name="doubleclicked" value="up"/>
+              </trigger>
+              <event name="ui/focusgained(organizerPluginContainer,SATAndNewstickerBox)"/>
+            </action-->
+            
+            <action>
+              <trigger name="activate"/>
+              <trigger class="western" name="up"/>
+              <trigger class="arabic" name="down"/> 
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name="system/setfocus">
+                <property name="id" value="organizerTitle"/>
+              </event>
+            </action>
+
+            <!-- Select text to MSK label -->
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+          </actions>
+        </image>
+
+        <!-- Music player plug-in
+           ####################-->
+
+        <image id="musicPlayerPluginIcon" path="SKIN(270501046 270561987)" class="pluginAreaIcon" focusable="true" stylusstates="2">
+          <actions>
+
+            <!-- Show plug-in content -->
+            <action>
+              <trigger name="gainfocus"/>
+              <trigger name="stylus">
+                <property name="stylusstate" value="1"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_select;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            <!-- Hide plug-in content -->
+            <action>
+              <trigger class="western" name="down"/>
+              <trigger class="arabic" name="up"/> 
+              <trigger name="stylus">
+                <property name="stylusstate" value="2"/>
+              </trigger>                            
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>      
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+            </action>
+
+            <!-- Move focus to plug-in content -->
+            <!--action>
+              <trigger name="activate"/>
+              <trigger name="stylus">
+                <property name="doubleclicked" value="up"/>
+              </trigger>
+              <event name="ui/focusgained(playerPluginContainer,SATAndNewstickerBox)"/>
+            </action-->
+            
+            <action>
+              <trigger name="activate"/>
+              <trigger class="western" name="up"/>
+              <trigger class="arabic" name="down"/> 
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name="system/setfocus">
+                <property name="id" value="playerTitle"/>
+              </event>
+            </action>
+          
+            <!-- Select text to MSK label -->
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+          </actions>
+        </image>
+
+
+        <!-- Visual/Internet Radio plug-in
+           ####################-->
+
+        <image id="radioPluginIcon" path="iractiveidle.mif#0" class="pluginAreaIcon" focusable="true" stylusstates="2">
+          <actions>
+
+            <!-- Show plug-in content -->
+            <action>
+              <trigger name="gainfocus"/>
+              <trigger name="stylus">
+                <property name="stylusstate" value="1"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_select;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            <!-- Hide plug-in content -->
+            <action>
+              <trigger class="western" name="down"/>
+              <trigger class="arabic" name="up"/> 
+              <trigger name="stylus">
+                <property name="stylusstate" value="2"/>
+              </trigger>                            
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>      
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+            </action>
+
+            <!-- Move focus to plug-in content -->
+            <!--action>
+              <trigger name="activate"/>
+              <trigger name="stylus">
+                <property name="doubleclicked" value="up"/>
+              </trigger>
+              <event name="ui/focusgained(playerPluginContainer,SATAndNewstickerBox)"/>
+            </action-->
+            
+            <action>
+              <trigger name="activate"/>
+              <trigger class="western" name="up"/>
+              <trigger class="arabic" name="down"/> 
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name="system/setfocus">
+                <property name="id" value="radioTitle"/>
+              </event>
+            </action>
+          
+            <!-- Select text to MSK label -->
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+          </actions>
+        </image>
+
+        <!-- Personalization plug-in
+             ####################### -->
+
+        <image id="personalizationPluginIcon" path="SKIN(270501046 268458546)" class="pluginAreaIcon" focusable="true" stylusstates="2">
+          <actions>
+            <!-- Show plug-in content -->
+            <action>
+              <trigger name="gainfocus"/>
+              <trigger name="stylus">
+                <property name="stylusstate" value="1"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="shortcutPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="organizerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="playerPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="radioPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_select;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            <!-- Hide plug-in content -->
+            <action>
+              <trigger class="western" name="down"/>
+              <trigger class="arabic" name="up"/> 
+              <trigger name="stylus">
+                <property name="stylusstate" value="2"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+            </action>
+
+            <!-- Move focus to plug-in content -->
+            <!--action>
+              <trigger name="activate"/>
+              <trigger name="stylus">
+                <property name="doubleclicked" value="up"/>
+              </trigger>
+              <event name="ui/focusgained(personalizationPluginContainer,SATAndNewstickerBox)"/>
+            </action-->
+          
+            <action>
+              <trigger name="activate"/>
+              <trigger class="western" name="up"/>
+              <trigger class="arabic" name="down"/> 
+              <event name="system/set">
+                <property name="id" value="personalizationPluginContainer"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+              <event name="system/set">
+                <property name="id" value="SATAndNewstickerBox"/>
+                <property name="name" value="display"/>
+                <property name="value" value="none"/>
+                <property name="type" value="string"/>
+              </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <event name="system/setfocus">
+                <property name="id" value="personalizationPluginTitle"/>
+              </event>
+            </action>
+      
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+
+            <!-- Select text to MSK label -->
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+          </actions>
+        </image>
+
+      </box>
+
+      <!-- Container area for the plugin content for the following plugins:
+            Shortcuts, Organizer, Player, Personalization -->
+      <box id="pluginContainerArea" focusable="false">
+
+        <!--#################################
+          #####    Shortcut plugin    #####
+          #################################-->
+        <box id="shortcutPluginContainer" class="pluginContainer" focusable="false" backgroundmask="qsn_fr_popup_sub_mask_icon.svg">
+          <!-- fake button to go around a bug in the animation system. Button is hidden. -->
+          <button id="shortcutPluginAnimationFixButton" class="fakeButton" focusable="true" />
+          <!-- Plugin title -->
+
+            <text id="shortcutTitleText" class="titleText" focusable="true">&qtn_ai_shorts_title;
+            <actions>
+              <action>
+                <trigger name="stylus"/>
+                <trigger name="activate"/>
+                <event name="Shortcut/ShowSettings"/>
+              </action>
+
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+        </text>
+
+          <!-- Shortcut items -->
+          <!-- Shortcuts are not locked. I.e. they are dynamically published by the shortcut plug-in. -->
+
+          <!-- #1 -->
+          <text id="shortcutButton1" class="genericButtonText" focusable="true">
+            <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000001"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByIndex(0x00000001)"/>
+                <!-- Messaging -->
+              </action>
+
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+            
+          </text>
+
+          <!-- #2 -->
+          <text id="shortcutButton2" class="genericButtonText" focusable="true">
+            <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000002"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByIndex(0x00000002)"/>
+                <!-- Contacts -->
+              </action>
+
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- #3 -->
+          <text id="shortcutButton3" class="genericButtonText" focusable="true">
+          <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000003"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByIndex(0x00000003)"/>
+                <!-- Clock -->
+              </action>
+
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- #4 -->
+          <text id="shortcutButton4" class="genericButtonText" focusable="true">
+            <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000004"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByIndex(0x00000004)"/>
+              </action>
+        
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+      </text>
+
+          <!-- #5 -->
+          <text id="shortcutButton5" class="genericButtonText" focusable="true">
+            <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000005"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByIndex(0x00000005)"/>
+              </action>
+         
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+      </text>
+          <!-- #6 -->
+          <text id="shortcutButton6" class="genericButtonText" focusable="true">
+            <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000006"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByIndex(0x00000006)"/>
+              </action>
+                         
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="shortcutPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="shortcutPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- UI resources -->
+          <desc id="Shortcut/EmptyCaption">&shortcut_EmptyCaption;</desc>
+          <desc id="Shortcut/BackCaption">&text_softkey_back;</desc>
+          <desc id="Shortcut/NewMessageCaption">&qtn_set_idle_skey_new_msg;</desc>
+          <desc id="Shortcut/NewEmailCaption">&qtn_set_idle_skeys_email_editor;</desc>
+          <desc id="Shortcut/NewSyncMLMailCaption">&qtn_apps_syncml_mail_gs;</desc>
+          <desc id="Shortcut/NewPostcardCaption">&qtn_apps_mmspostcard_gs;</desc>
+          <desc id="Shortcut/NewAudioMsgCaption">&qtn_apps_audio_msg_gs;</desc>
+          <desc id="Shortcut/SelectMsgTypeCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+          <desc id="Shortcut/ChangeThemeCaption">&qtn_apps_idle_skin_gs;</desc>
+          <desc id="Shortcut/NewMessageShortCaption">&qtn_idle_skey_new_msg;</desc>
+          <desc id="Shortcut/NewEmailShortCaption">&qtn_apps_email_skey;</desc>
+          <desc id="Shortcut/NewSyncMLMailShortCaption">&qtn_apps_syncml_mail_skey;</desc>
+          <desc id="Shortcut/NewPostcardShortCaption">&qtn_apps_mmspostcard_skey;</desc>
+          <desc id="Shortcut/NewAudioMsgShortCaption">&qtn_apps_audio_msg_skey;</desc>
+          <desc id="Shortcut/SelectMsgTypeShortCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+          <desc id="Shortcut/ChangeThemeShortCaption">&qtn_apps_idle_skin_skey;</desc>
+
+        </box>
+
+
+        <!--###############################
+          ####   Organizer plugin    ####
+          ###############################-->
+        <box id="organizerPluginContainer" class="pluginContainer" focusable="false" backgroundmask="qsn_fr_popup_sub_mask_icon.svg">
+          <!-- there is a fake button in the shortcut plugin area. It is
+          used to go around a bug in the animation system. It reserves a little space,
+          so this is to fix that space in this plugin -->
+          <button id="organizeFakeButton" class="fakeButton" focusable="true" />
+
+          <!-- Organizer title -->
+
+            <text id="organizerTitle" class="titleText" focusable="true">&qtn_ai_cal_title;
+            <actions>
+              <action>
+                <trigger name="stylus"/>
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(0)"/>
+              </action>
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- #1 -->
+          <button id="eventButton1" class="organizerButton" focusable="true">
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(1)"/>
+              </action>
+              
+          <!-- for setting the correct colour group for texts -->
+          <!-- all the other elements are done using text elements -->
+          <!-- organiser item is done using 1-2 texts and 1 image element-->
+          <!-- so it needs to be done using buttons and these triggers -->
+           <action>
+          <trigger name="gainfocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText1_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+           <event name="system/set">
+                  <property name="id" value="Organizer/eventText1_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText1_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText1_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>      
+        </action>               
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+              <action>
+                <trigger name="losevisualisation"/>
+                <event name="system/setfocus">
+                  <property name="id" value="organizerTitle"/>
+                </event>
+              </action>
+            </actions>
+            <image id="Organizer/eventIcon1" class="eventIcon" focusable="false">
+              <property class="Organizer/EventIcon" name="ordinal" value="0x01"/>
+            </image>
+            <text id="Organizer/eventText1_1" class="eventText1" focusable="false">
+              <property class="Organizer/Event1stLine" name="ordinal" value="0x01"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton1" value="display: none;"/>
+              <property class="policy/emptyContent" name="eventButton1" value="nav-index: none;"/>
+              <property class="policy/Content" name="eventButton1" value="display: block;"/>
+              <property class="policy/Content" name="eventButton1" value="nav-index: auto;"/>
+            </text>
+            <text id="Organizer/eventText1_2" class="eventText2" focusable="false">
+              <property class="Organizer/Event2ndLine" name="ordinal" value="0x01"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+              <property class="policy/emptyContent" name="Organizer/eventText1_2" value="display: none;"/>
+              <property class="policy/Content" name="Organizer/eventText1_2" value="display: block;"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton1" value="height: 13.3%;"/>
+              <property class="policy/Content" name="eventButton1" value="height: 27.22%;"/>
+            </text>
+          </button>
+
+          <!-- #2 -->
+          <button id="eventButton2" class="organizerButton" focusable="true">
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(2)"/>
+              </action>
+              
+           <!-- for setting the correct colour group for texts -->
+           <action>
+          <trigger name="gainfocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText2_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+           <event name="system/set">
+                  <property name="id" value="Organizer/eventText2_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText2_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText2_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>      
+        </action>             
+
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+              <action>
+                <trigger name="losevisualisation"/>
+                <event name="system/setfocus">
+                  <property name="id" value="organizerTitle"/>
+                </event>
+              </action>
+            </actions>
+            <image id="Organizer/eventIcon2" class="eventIcon" focusable="false">
+              <!--  path="qgn_indi_cdr_birthday.svg" -->
+              <property class="Organizer/EventIcon" name="ordinal" value="0x02"/>
+            </image>
+            <text id="Organizer/eventText2_1" class="eventText1" focusable="false">
+              <property class="Organizer/Event1stLine" name="ordinal" value="0x02"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton2" value="display: none;"/>
+              <property class="policy/emptyContent" name="eventButton2" value="nav-index: none;"/>
+              <property class="policy/Content" name="eventButton2" value="display: block;"/>
+              <property class="policy/Content" name="eventButton2" value="nav-index: auto;"/>
+            </text>
+            <text id="Organizer/eventText2_2" class="eventText2" focusable="false">
+              <property class="Organizer/Event2ndLine" name="ordinal" value="0x02"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+              <property class="policy/emptyContent" name="Organizer/eventText2_2" value="display: none;"/>
+              <property class="policy/Content" name="Organizer/eventText2_2" value="display: block;"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton2" value="height: 13.3%;"/>
+              <property class="policy/Content" name="eventButton2" value="height: 27.22%;"/>
+            </text>
+          </button>
+
+          <!-- #3 -->
+          <button id="eventButton3" class="organizerButton" focusable="true">
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                                              
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(3)"/>
+              </action>
+              
+          <!-- for setting the correct colour group for texts -->
+         <action>
+          <trigger name="gainfocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText3_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+           <event name="system/set">
+                  <property name="id" value="Organizer/eventText3_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText3_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText3_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>      
+        </action>           
+              
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+              <action>
+                <trigger name="losevisualisation"/>
+                <event name="system/setfocus">
+                  <property name="id" value="organizerTitle"/>
+                </event>
+              </action>
+            </actions>
+            <image id="Organizer/eventIcon3" class="eventIcon" focusable="false">
+              <!--  path="qgn_indi_cdr_todo.svg" -->
+              <property class="Organizer/EventIcon" name="ordinal" value="0x03"/>
+            </image>
+            <text id="Organizer/eventText3_1" class="eventText1" focusable="false">
+              <property class="Organizer/Event1stLine" name="ordinal" value="0x03"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton3" value="display: none;"/>
+              <property class="policy/emptyContent" name="eventButton3" value="nav-index: none;"/>
+              <property class="policy/Content" name="eventButton3" value="display: block;"/>
+              <property class="policy/Content" name="eventButton3" value="nav-index: auto;"/>
+            </text>
+            <text id="Organizer/eventText3_2" class="eventText2" focusable="false">
+              <property class="Organizer/Event2ndLine" name="ordinal" value="0x03"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+              <property class="policy/emptyContent" name="Organizer/eventText3_2" value="display: none;"/>
+              <property class="policy/Content" name="Organizer/eventText3_2" value="display: block;"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton3" value="height: 13.3%;"/>
+              <property class="policy/Content" name="eventButton3" value="height: 27.22%;"/>
+            </text>
+          </button>
+
+          <!-- #4 -->
+          <button id="eventButton4" class="organizerButton" focusable="true">
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(4)"/>
+              </action>
+              
+         <!-- for setting the correct colour group for texts -->
+          <action>
+          <trigger name="gainfocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText4_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+           <event name="system/set">
+                  <property name="id" value="Organizer/eventText4_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText4_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText4_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>      
+        </action>               
+
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/>  <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+              <action>
+                <trigger name="losevisualisation"/>
+                <event name="system/setfocus">
+                  <property name="id" value="organizerTitle"/>
+                </event>
+              </action>
+            </actions>
+            <image id="Organizer/eventIcon4" class="eventIcon" focusable="false">
+              <property class="Organizer/EventIcon" name="ordinal" value="0x04"/>
+            </image>
+            <text id="Organizer/eventText4_1" class="eventText1" focusable="false">
+              <property class="Organizer/Event1stLine" name="ordinal" value="0x04"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton4" value="display: none;"/>
+              <property class="policy/emptyContent" name="eventButton4" value="nav-index: none;"/>
+              <property class="policy/Content" name="eventButton4" value="display: block;"/>
+              <property class="policy/Content" name="eventButton4" value="nav-index: auto;"/>
+            </text>
+            <text id="Organizer/eventText4_2" class="eventText2" focusable="false">
+              <property class="Organizer/Event2ndLine" name="ordinal" value="0x04"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+              <property class="policy/emptyContent" name="Organizer/eventText4_2" value="display: none;"/>
+              <property class="policy/Content" name="Organizer/eventText4_2" value="display: block;"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton4" value="height: 13.3%;"/>
+              <property class="policy/Content" name="eventButton4" value="height: 27.22%;"/>
+            </text>
+          </button>
+
+          <!-- #5 -->
+          <button id="eventButton5" class="organizerButton" focusable="true">
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(5)"/>
+              </action>
+
+          <!-- for setting the correct colour group for texts -->
+          <action>
+          <trigger name="gainfocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText5_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+           <event name="system/set">
+                  <property name="id" value="Organizer/eventText5_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText5_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText5_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>      
+        </action>              
+              
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/>  <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+              <action>
+                <trigger name="losevisualisation"/>
+                <event name="system/setfocus">
+                  <property name="id" value="organizerTitle"/>
+                </event>
+              </action>
+            </actions>
+            <image id="Organizer/eventIcon5" class="eventIcon" focusable="false">
+              <property class="Organizer/EventIcon" name="ordinal" value="0x05"/>
+            </image>
+            <text id="Organizer/eventText5_1" class="eventText1" focusable="false">
+              <property class="Organizer/Event1stLine" name="ordinal" value="0x05"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton5" value="display: none;"/>
+              <property class="policy/emptyContent" name="eventButton5" value="nav-index: none;"/>
+              <property class="policy/Content" name="eventButton5" value="display: block;"/>
+              <property class="policy/Content" name="eventButton5" value="nav-index: auto;"/>
+            </text>
+            <text id="Organizer/eventText5_2" class="eventText2" focusable="false">
+              <property class="Organizer/Event2ndLine" name="ordinal" value="0x05"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+              <property class="policy/emptyContent" name="Organizer/eventText5_2" value="display: none;"/>
+              <property class="policy/Content" name="Organizer/eventText5_2" value="display: block;"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton5" value="height: 13.3%;"/>
+              <property class="policy/Content" name="eventButton5" value="height: 27.22%;"/>
+            </text>
+          </button>
+
+          <!-- #6 -->
+          <button id="eventButton6" class="organizerButton" focusable="true">
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Organizer/ItemSelected(6)"/>
+              </action>
+              
+          <!-- for setting the correct colour group for texts -->
+           <action>
+          <trigger name="gainfocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText6_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+           <event name="system/set">
+                  <property name="id" value="Organizer/eventText6_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText6_1"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+             <event name="system/set">
+                  <property name="id" value="Organizer/eventText6_2"/>
+                  <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>      
+        </action>              
+              
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/>  <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="organizerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="organizerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+              <action>
+                <trigger name="losevisualisation"/>
+                <event name="system/setfocus">
+                  <property name="id" value="organizerTitle"/>
+                </event>
+              </action>
+            </actions>
+            <image id="Organizer/eventIcon6" class="eventIcon" focusable="false">
+              <property class="Organizer/EventIcon" name="ordinal" value="0x06"/>
+            </image>
+            <text id="Organizer/eventText6_1" class="eventText1" focusable="false">
+              <property class="Organizer/Event1stLine" name="ordinal" value="0x06"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton6" value="display: none;"/>
+              <property class="policy/emptyContent" name="eventButton6" value="nav-index: none;"/>
+              <property class="policy/Content" name="eventButton6" value="display: block;"/>
+              <property class="policy/Content" name="eventButton6" value="nav-index: auto;"/>
+            </text>
+            <text id="Organizer/eventText6_2" class="eventText2" focusable="false">
+              <property class="Organizer/Event2ndLine" name="ordinal" value="0x06"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+              <property class="policy/emptyContent" name="Organizer/eventText6_2" value="display: none;"/>
+              <property class="policy/Content" name="Organizer/eventText6_2" value="display: block;"/>
+              <!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+              <property class="policy/emptyContent" name="eventButton6" value="height: 13.3%;"/>
+              <property class="policy/Content" name="eventButton6" value="height: 27.22%;"/>
+            </text>
+          </button>
+
+          <!-- UI resources -->
+          <desc id="Organizer/NoEventsForToday">&qtn_ai_cale_no_event_today_short;</desc>
+          <desc id="Organizer/NoMoreEventsForToday">&qtn_ai_cale_no_more_ev_td_short;</desc>
+        </box>
+
+
+        <!--##############################
+          ####    Player plugin     ####
+          ##############################-->
+        <box id="playerPluginContainer" class="pluginContainer" focusable="false" backgroundmask="qsn_fr_popup_sub_mask_icon.svg">
+          <!-- there is a fake button in the shortcut plugin area. It is
+          used to go around a bug in the animation system. It reserves a little space,
+          so this is to fix that space in this plugin -->
+<!--<button id="playerFakeButton" class="fakeButton" focusable="true" />-->
+
+          
+            <text id="playerTitle" class="titleText" focusable="true">&qtn_ai_player_title;
+            <actions>
+
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="MusicPlayer/Library"/>
+              </action>
+         
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="musicPlayerPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="playerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+
+              <action>
+                <trigger name="right"/>
+                <trigger name="left"/>
+                <event name="system/set">
+                  <property name="id" value="playerPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+
+          </text>
+
+          <box id="playerInActive" focusable="false">
+            <text id="musicPlayerInActive" focusable="false">
+              &qtn_ai_player_no_tracks;
+            </text>
+          </box>
+
+          <box id="volumeIndicator" focusable="true">
+      
+        <!-- normal version -->
+            <image id="musicPlayerVolumeDownIcon" path="SKIN(270501603 6419 19)" focusable="false" />
+        <!-- Highlighted version -->            
+            <image id="musicPlayerVolumeDownIconHighlight" path="SKIN(270501603 6419 9)" focusable="false">
+
+              <!-- TODO: Check if image can contain actions -->
+              <actions>
+                <action>
+                  <trigger name="stylus"/>
+                  <trigger name="activate"/>
+                  <event name="MusicPlayer/VolDec"/>
+                  <event name="system/setfocus">
+                    <property name="id" value="volumeIndicator"/>
+                  </event>
+                </action>
+
+              </actions>
+            </image>
+
+            <!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+            <!-- normal version -->
+            <image id="musicPlayerSpeakerIcon" path="SKIN(270501603 4332 19)" focusable="false"/>
+            <image id="musicPlayerSpeakerMutedIcon" path="SKIN(270501603 4334 19)" focusable="false"/>
+        <!-- Highlighted version -->
+           <image id="musicPlayerSpeakerIconHighlight" path="SKIN(270501603 4332 9)" focusable="false"/>
+           <image id="musicPlayerSpeakerMutedIconHighlight" path="SKIN(270501603 4334 9)" focusable="false"/>
+
+
+      <volumecontrol id="musicPlayerVolumeIcon" focusable="false">
+        <actions>
+         <action>
+           <trigger name="stylus"/>
+           <trigger name="stylus">
+             <property name="clicked" value="down"/>
+           </trigger>                  
+           <trigger name="stylus">
+             <property name="doubleclicked" value="up"/>
+           </trigger>                  
+           <event name="MusicPlayer/VolSet(slider::volume)"/>
+           <event name="system/setfocus">
+           <property name="id" value="volumeIndicator"/>
+           </event>
+         </action>
+        </actions>
+        <slider id="volslider">
+          <property class="MusicPlayer/Volume"/>
+          <!-- Normal versions of the icons -->
+          <property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if (MusicPlayer/Vol0) display:block"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol0) display:none"/> 
+          <property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol0, MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol10) display:none"/>
+          
+          <!-- Highlighted versions of the icons -->              
+          <property class="policy/Resource" name="musicPlayerSpeakerMutedIconHighlight" value="if (MusicPlayer/Vol0) display:block"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerMutedIconHighlight" value="if !(MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerIconHighlight" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerIconHighlight" value="if (MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerVolumeDownIconHighlight" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerVolumeDownIconHighlight" value="if (MusicPlayer/Vol0) display:none"/>              
+          <property class="policy/Resource" name="musicPlayerVolumeUpIconHighlight" value="if (MusicPlayer/Vol0, MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerVolumeUpIconHighlight" value="if (MusicPlayer/Vol10) display:none"/>
+        </slider>
+       </volumecontrol>
+
+        <!-- normal version -->
+            <image id="musicPlayerVolumeUpIcon" path="SKIN(270501603 6421 19)" focusable="false" />
+          <!-- Highlighted version -->       
+            <image id="musicPlayerVolumeUpIconHighlight" path="SKIN(270501603 6421 9)" focusable="false">
+                    
+             <!-- TODO: Check if image can contain actions -->
+              <actions>
+                <action>
+                  <trigger name="stylus"/>
+                  <trigger name="activate"/>
+                  <event name="MusicPlayer/VolInc"/>
+                  <event name="system/setfocus">
+                    <property name="id" value="volumeIndicator"/>
+                  </event>
+                </action>
+              </actions>
+            </image>
+            <actions>
+              <action>
+                <trigger name="left"/>
+                <event name="system/setfocus">
+                  <property name="id" value="playerTitle"/>
+                </event>
+              </action>
+
+              <action>
+                <trigger name="up"/>
+                <event name="MusicPlayer/VolInc">
+                </event>
+              </action>
+
+              <action>
+                <trigger name="down"/>
+                <event name="MusicPlayer/VolDec">
+                </event>
+              </action>
+
+            <action>
+              <trigger name="losevisualisation"/>
+              <event name="system/setfocus">
+                <property name="id" value="playerTitle"/>
+              </event>
+            </action>
+            
+            <action>
+              <trigger name="gainfocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value=""/>
+                <property name="type" value="attribute"/>
+              </event>
+              
+      
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeDownIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeDownIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- speaker icons -->
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerMutedIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerMutedIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- volume up icons -->
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeUpIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeUpIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+            </action>
+
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+              
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeDownIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeDownIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- speaker icons -->
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerMutedIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerSpeakerMutedIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- volume up icons -->
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeUpIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="musicPlayerVolumeUpIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+            </action>           
+         
+          </actions>
+
+          </box>
+
+          <box id="infoArea" focusable="false">
+            <box id="trackAndArtist" focusable="false">
+              <box id="trackLine" focusable="false">
+                <text id="trackLine1" class="playerTextLine" focusable="false">
+                  <property class="MusicPlayer/Title"/>
+                </text>
+              </box>            
+              <box id="artistLine" focusable="false">
+                <text id="artistLine1" class="playerTextLine" focusable="false">
+                  <property class="MusicPlayer/Artist"/>
+                </text>
+              </box>
+            </box>
+
+            <box id="durationLine" focusable="false">
+              <text id="time" focusable="false">
+                <property class="MusicPlayer/Duration"/>
+              </text>
+
+              <image id="statusIcon" class="playerStatusIcon" focusable="true">
+                <property class="MusicPlayer/Status"/>
+                <property class="policy/Content" name="volumeIndicator" value="display: block;"/>
+                <property class="policy/Content" name="infoArea" value="display: block;"/>
+                <property class="policy/Content" name="playerInActive" value="display: none;"/>
+                <property class="policy/emptyContent" name="playerInActive" value="display: block;"/>
+                <property class="policy/emptyContent" name="volumeIndicator" value="display: none;"/>
+                <property class="policy/emptyContent" name="infoArea" value="display: none;"/>
+              </image>
+            </box>
+          </box>
+          
+          <!-- Image resources -->
+          <desc id="MusicPlayer/PauseIcon" path="SKIN(270501603 5182)"/>
+          <desc id="MusicPlayer/PlayIcon" path="SKIN(270501603 5184)"/>
+          <desc id="MusicPlayer/Vol0">0</desc>
+          <desc id="MusicPlayer/Vol1">1</desc>
+          <desc id="MusicPlayer/Vol2">2</desc>
+          <desc id="MusicPlayer/Vol3">3</desc>
+          <desc id="MusicPlayer/Vol4">4</desc>
+          <desc id="MusicPlayer/Vol5">5</desc>
+          <desc id="MusicPlayer/Vol6">6</desc>
+          <desc id="MusicPlayer/Vol7">7</desc>
+          <desc id="MusicPlayer/Vol8">8</desc>
+          <desc id="MusicPlayer/Vol9">9</desc>
+          <desc id="MusicPlayer/Vol10">10</desc>
+          
+        </box>
+
+				
+        <!--##############################
+          #### Visual/Internet Radio plugin ####
+          ##############################-->
+        <box id="radioPluginContainer" class="pluginContainer" focusable="false" backgroundmask="qsn_fr_popup_sub_mask_icon.svg">
+          <button id="radioTitle" class="radioTitleButton" focusable="true">
+            <image id="invisibleTitleStatus" class="invisibleRadioTitleIcon" focusable="false">
+              <property class="VisualRadio/AppIcon" name="priority" value="0"/>
+              <property class="InetRadio/AppIcon" name="priority" value="1"/>
+
+              <property class="policy/emptyContent" name="radioTitleString" value="display: block;"/>
+              <property class="policy/Resource" name="radioTitleString" value="if (VisualRadio/VRPlaying, VisualRadio/VRInactive, InetRadio/IRPlaying, InetRadio/IRStopped) display:none"/>
+
+              <property class="policy/emptyContent" name="visualRadioTitleString" value="display: none;"/>
+              <property class="policy/Resource" name="visualRadioTitleString" value="if (InetRadio/IRPlaying, InetRadio/IRStopped) display:none"/>
+              <property class="policy/Resource" name="visualRadioTitleString" value="if (VisualRadio/VRPlaying, VisualRadio/VRInactive) display:block"/>
+
+              <property class="policy/emptyContent" name="inetRadioTitleString" value="display: none;"/>
+              <property class="policy/Resource" name="inetRadioTitleString" value="if (VisualRadio/VRPlaying, VisualRadio/VRInactive) display:none"/>
+              <property class="policy/Resource" name="inetRadioTitleString" value="if (InetRadio/IRPlaying, InetRadio/IRStopped) display:block"/>
+
+              <property class="policy/emptyContent" name="radioVolumeIndicator" value="display: none;"/>
+              <property class="policy/Resource" name="radioVolumeIndicator" value="if (VisualRadio/VRInactive, InetRadio/IRStopped) display:none"/>
+              <property class="policy/Resource" name="radioVolumeIndicator" value="if (VisualRadio/VRPlaying, InetRadio/IRPlaying) display:block"/>
+
+              <property class="policy/emptyContent" name="radioInactive" value="display: block;"/>
+              <property class="policy/Resource" name="radioInactive" value="if (VisualRadio/VRInactive, InetRadio/IRStopped) display:block"/>
+              <property class="policy/Resource" name="radioInactive" value="if (VisualRadio/VRPlaying, InetRadio/IRPlaying) display:none"/>
+
+              <property class="policy/emptyContent" name="visualRadioInfoArea" value="display: none;"/>
+              <property class="policy/Resource" name="visualRadioInfoArea" value="if (VisualRadio/VRInactive, InetRadio/IRPlaying, InetRadio/IRStopped) display:none"/>
+              <property class="policy/Resource" name="visualRadioInfoArea" value="if (VisualRadio/VRPlaying) display:block"/>
+
+              <property class="policy/emptyContent" name="inetRadioInfoArea" value="display: none;"/>
+              <property class="policy/Resource" name="inetRadioInfoArea" value="if (InetRadio/IRStopped, VisualRadio/VRPlaying, VisualRadio/VRInactive) display:none"/>
+              <property class="policy/Resource" name="inetRadioInfoArea" value="if (InetRadio/IRPlaying) display:block"/>
+            </image>
+            <text id="radioTitleString" class="radioTitleText" focusable="false">&qtn_vr_ai_radiolauncher;</text>
+            <text id="visualRadioTitleString" class="radioTitleText" focusable="false">&qtn_vr_ai_vradio_title;</text>
+            <text id="inetRadioTitleString" class="radioTitleText" focusable="false">&qtn_ir_ai_irapp_title;</text>
+
+            <actions>
+
+              <action>
+                <trigger name="gainfocus" />
+                <event name="system/set">
+                  <property name="id" value="radioTitleString"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="visualRadioTitleString"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="inetRadioTitleString"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 9)"/>
+                  <property name="type" value="string"/>
+                </event>
+              </action>
+
+              <action>
+                <trigger name="losefocus" />
+                <event name="system/set">
+                  <property name="id" value="radioTitleString"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="visualRadioTitleString"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="inetRadioTitleString"/>
+                  <property name="name" value="color"/>
+                  <property name="value" value="SKIN(268458534 13056 19)"/>
+                  <property name="type" value="string"/>
+                </event>
+              </action>
+
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="VisualRadio/LaunchRadio"/>
+				<event name="InetRadio/LaunchRadio"/>
+                <!-- Always let Visual Radio plug-in handle the launch event. It will start Radio Launcher. -->
+              </action>
+         
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="radioPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="radioPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+
+              <action>
+                <trigger name="right"/>
+                <trigger name="left"/>
+                <event name="system/set">
+                  <property name="id" value="radioPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+
+          </button>
+
+          <box id="radioInactive" focusable="false">
+            <text id="radioInactiveText" focusable="false">&qtn_vr_ai_radio_not_active;</text>
+          </box>
+
+          <box id="radioVolumeIndicator" focusable="true">
+      
+        <!-- normal version -->
+            <image id="radioVolumeDownIcon" path="SKIN(270501603 6419 19)" focusable="false"/>
+        <!-- Highlighted version -->            
+            <image id="radioVolumeDownIconHighlight" path="SKIN(270501603 6419 9)" focusable="false">
+
+              <!-- TODO: Check if image can contain actions -->
+              <actions>
+                <action>
+                  <trigger name="stylus"/>
+                  <trigger name="activate"/>
+                  <event name="VisualRadio/VolDec"/>
+                  <event name="InetRadio/VolDec"/>
+                  <event name="system/setfocus">
+                    <property name="id" value="radioVolumeIndicator"/>
+                  </event>
+                </action>
+
+              </actions>
+            </image>
+
+            <!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+            <!-- normal version -->
+            <image id="radioSpeakerIcon" path="SKIN(270501603 4332 19)" focusable="false"/>
+            <image id="radioSpeakerMutedIcon" path="SKIN(270501603 4334 19)" focusable="false"/>
+            <!-- Highlighted version -->
+            <image id="radioSpeakerIconHighlight" path="SKIN(270501603 4332 9)" focusable="false"/>
+            <image id="radioSpeakerMutedIconHighlight" path="SKIN(270501603 4334 9)" focusable="false"/>
+
+
+            <volumecontrol id="radioVolumeIcon" focusable="false">
+              <actions>
+                <action>
+                  <trigger name="stylus"/>
+                  <trigger name="stylus">
+                    <property name="clicked" value="down"/>
+                  </trigger>                  
+                  <trigger name="stylus">
+                    <property name="doubleclicked" value="up"/>
+                  </trigger>                  
+                  <event name="VisualRadio/VolSet(radioSlider::volume)"/>
+                  <event name="InetRadio/VolSet(radioSlider::volume)"/>
+                  <event name="system/setfocus">
+                    <property name="id" value="radioVolumeIndicator"/>
+                  </event>
+                </action>
+              </actions>
+              <slider id="radioSlider">
+                <property class="VisualRadio/Volume" name="priority" value="0"/>
+                <property class="InetRadio/Volume" name="priority" value="1"/>
+                <!-- Normal versions of the icons -->
+                <property class="policy/Resource" name="radioSpeakerMutedIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+                <property class="policy/Resource" name="radioSpeakerMutedIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+                <property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+                <property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+                <property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+                <property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+                <property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol0, VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, InetRadio/Vol0, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9 ) display:block"/>
+                <property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+
+                <!-- Highlighted versions of the icons -->              
+                <property class="policy/Resource" name="radioSpeakerMutedIconHighlight" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+                <property class="policy/Resource" name="radioSpeakerMutedIconHighlight" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+                <property class="policy/Resource" name="radioSpeakerIconHighlight" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+                <property class="policy/Resource" name="radioSpeakerIconHighlight" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+                <property class="policy/Resource" name="radioVolumeDownIconHighlight" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+                <property class="policy/Resource" name="radioVolumeDownIconHighlight" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+                <property class="policy/Resource" name="radioVolumeUpIconHighlight" value="if (VisualRadio/Vol0, VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, InetRadio/Vol0, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9 ) display:block"/>
+                <property class="policy/Resource" name="radioVolumeUpIconHighlight" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+              </slider>
+            </volumecontrol>
+
+            <!-- normal version -->
+            <image id="radioVolumeUpIcon" path="SKIN(270501603 6421 19)" focusable="false"/>
+            <!-- Highlighted version -->       
+            <image id="radioVolumeUpIconHighlight" path="SKIN(270501603 6421 9)" focusable="false">
+                    
+             <!-- TODO: Check if image can contain actions -->
+              <actions>
+                <action>
+                  <trigger name="stylus"/>
+                  <trigger name="activate"/>
+                  <event name="VisualRadio/VolInc"/>
+                  <event name="InetRadio/VolInc"/>
+                  <event name="system/setfocus">
+                    <property name="id" value="radioVolumeIndicator"/>
+                  </event>
+                </action>
+              </actions>
+            </image>
+            <actions>
+              <action>
+                <trigger name="left"/>
+                <event name="system/setfocus">
+                  <property name="id" value="radioTitle"/>
+                </event>
+              </action>
+
+              <action>
+                <trigger name="up"/>
+                <event name="VisualRadio/VolInc"/>
+                <event name="InetRadio/VolInc"/>
+              </action>
+
+              <action>
+                <trigger name="down"/>
+                <event name="VisualRadio/VolDec"/>
+                <event name="InetRadio/VolDec"/>
+              </action>
+
+            <action>
+              <trigger name="losevisualisation"/>
+              <event name="system/setfocus">
+                <property name="id" value="radioTitle"/>
+              </event>
+            </action>
+            
+            <action>
+              <trigger name="gainfocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value=""/>
+                <property name="type" value="attribute"/>
+              </event>
+              
+      
+              <event name="system/set">
+                  <property name="id" value="radioVolumeDownIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioVolumeDownIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- speaker icons -->
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerMutedIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerMutedIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- volume up icons -->
+              <event name="system/set">
+                  <property name="id" value="radioVolumeUpIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioVolumeUpIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+            </action>
+
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+              
+              <event name="system/set">
+                  <property name="id" value="radioVolumeDownIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioVolumeDownIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- speaker icons -->
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerMutedIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioSpeakerMutedIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+          <!-- volume up icons -->
+              <event name="system/set">
+                  <property name="id" value="radioVolumeUpIcon"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="visible"/>
+                  <property name="type" value="string"/>
+               </event>
+              <event name="system/set">
+                  <property name="id" value="radioVolumeUpIconHighlight"/>
+                  <property name="name" value="visibility"/>
+                  <property name="value" value="hidden"/>
+                  <property name="type" value="string"/>
+               </event>
+            </action>           
+         
+          </actions>
+
+          </box>
+
+          <box id="visualRadioInfoArea" focusable="false">
+            <box id="visualRadioNameLine" focusable="false">
+              <text id="visualRadioNumberTextLine" class="visualRadioTextLine" focusable="false">
+                 <property class="VisualRadio/Number"/>
+              </text>
+              <text id="visualRadioNameTextLine" class="visualRadioTextLine" focusable="false">
+                <property class="VisualRadio/Name"/>
+              </text>
+            </box>
+            <box id="visualRadioLocationLine" focusable="false">
+              <text id="visualRadioLocationTextLine" class="visualRadioTextLine" focusable="false">
+                <property class="VisualRadio/Location"/>
+              </text>
+            </box>
+            <box id="visualRadioFrequencyLine" focusable="false">
+              <text id="visualRadioFrequencyTextLine" class="visualRadioTextLine" focusable="false">
+                <property class="VisualRadio/Frequency"/>
+              </text>
+            </box>
+          </box>
+
+          <box id="inetRadioInfoArea" focusable="false">
+            <box id="inetRadioPresetLine" focusable="false">
+              <text id="inetRadioPresetTextLine" class="inetRadioTextLine" focusable="false">
+                <property class="InetRadio/Preset"/> 
+              </text> 
+            </box>
+            <box id="inetRadioArtistLine" focusable="false">
+              <text id="inetRadioArtistTextLine" class="inetRadioTextLine" focusable="false">
+                <property class="InetRadio/Artist"/>
+              </text>
+            </box>
+            <box id="inetRadioTrackLine" focusable="false">
+              <text id="inetRadioTrackTextLine" class="inetRadioTextLine" focusable="false">
+                <property class="InetRadio/Track"/>
+              </text>
+            </box>
+          </box>
+          
+          <!-- Image resources -->
+          <desc id="VisualRadio/Vol0">0</desc>
+          <desc id="VisualRadio/Vol1">1</desc>
+          <desc id="VisualRadio/Vol2">2</desc>
+          <desc id="VisualRadio/Vol3">3</desc>
+          <desc id="VisualRadio/Vol4">4</desc>
+          <desc id="VisualRadio/Vol5">5</desc>
+          <desc id="VisualRadio/Vol6">6</desc>
+          <desc id="VisualRadio/Vol7">7</desc>
+          <desc id="VisualRadio/Vol8">8</desc>
+          <desc id="VisualRadio/Vol9">9</desc>
+          <desc id="VisualRadio/Vol10">10</desc>
+          <!-- The following icons are not displayed, they just indicate which layout to use -->
+          <desc id="VisualRadio/VRPlaying" path="SKIN(270501603 5184)"/>
+          <desc id="VisualRadio/VRInactive" path="SKIN(270501603 5182)"/>
+
+          <desc id="InetRadio/Vol0">0</desc>
+          <desc id="InetRadio/Vol1">1</desc>
+          <desc id="InetRadio/Vol2">2</desc>
+          <desc id="InetRadio/Vol3">3</desc>
+          <desc id="InetRadio/Vol4">4</desc>
+          <desc id="InetRadio/Vol5">5</desc>
+          <desc id="InetRadio/Vol6">6</desc>
+          <desc id="InetRadio/Vol7">7</desc>
+          <desc id="InetRadio/Vol8">8</desc>
+          <desc id="InetRadio/Vol9">9</desc>
+          <desc id="InetRadio/Vol10">10</desc>
+          <!-- The following icons are not displayed, they just indicate which layout to use -->
+          <desc id="InetRadio/IRPlaying" path="SKIN(270501603 5184)"/>
+          <desc id="InetRadio/IRStopped" path="SKIN(270501603 5182)"/>
+        </box>
+
+				
+        <!--########################################
+            #####    Personalization plugin    #####
+            ########################################-->
+        <box id="personalizationPluginContainer" class="pluginContainer" focusable="false" backgroundmask="qsn_fr_popup_sub_mask_icon.svg">
+          <!-- there is a fake button in the shortcut plugin area. It is
+          used to go around a bug in the animation system. It reserves a little space,
+          so this is to fix that space in this plugin -->
+          <button id="personalizationFakeButton"  class="fakeButton" focusable="true" />
+          <!-- Plugin title -->
+
+            <text id="personalizationPluginTitle" class="titleText" focusable="true">&qtn_ai_pers_title;
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Shortcut/LaunchByValue(localapp:0x100058EC?view=0x10207252)"/><!-- GS app, prsln plugin -->
+              </action>
+          
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+
+          <!-- #1 -->
+          <text id="personalizationButton1" class="genericButtonText" focusable="true">
+           <property class="Profile/SwapProfileName"/>
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <event name="Profile/SwapProfile(1)"/>
+              </action>
+
+        <!-- for setting the correct colour group for texts -->
+        
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+
+            <action>
+              <trigger name="gainfocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_select;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            <action>
+              <trigger name="losefocus"/>
+              <event name ="system/set">
+                <property name="id" value="MSK"/>
+                <property name="name" value="label"/>
+                <property name="value" value="&qtn_msk_open;"/>
+                <property name="type" value="attribute"/>
+              </event>
+            </action>
+
+            </actions>
+          </text>
+
+          <!-- #2 -->
+          <text id="personalizationButton2" class="genericButtonText" focusable="true">
+          &qtn_ai_pers_all_profiles;
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <!-- TODO: Open profile application main view -->
+                <event name="Shortcut/LaunchByValue(localapp:0x100058F8)"/> <!-- Profileapp uid -->
+              </action>
+
+        <!-- for setting the correct colour group for texts -->
+                                    
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- #3 -->
+          <text id="personalizationButton3" class="genericButtonText" focusable="true">
+          &qtn_ai_pers_change_theme;
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <!-- Opens the main view of Personalization application -->
+                <event name="Shortcut/LaunchByValue(localapp:0x10005A32?view=0x102750AA)"/>
+              </action>
+
+        <!-- for setting the correct colour group for texts -->
+         
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- #4 -->
+          <text id="personalizationButton4" class="genericButtonText" focusable="true">
+          &qtn_ai_pers_change_wallpaper;
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <!-- Opens Wallpaper changing state in Personalization application -->
+                <event name="Shortcut/LaunchByValue(localapp:0x10005A32?view=3)"/>
+              </action>
+
+        <!-- for setting the correct colour group for texts -->                          
+              
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+
+          <!-- #5 -->
+          <text id="personalizationButton5" class="genericButtonText" focusable="true">
+          &qtn_apps_sd_list;
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <!-- Open speed dial application shortcut -->
+                <event name="Shortcut/LaunchByValue(localapp:0x1000590A)"/>
+              </action>
+              
+        <!-- for setting the correct colour group for texts -->
+           
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+
+          </text>
+
+          <!-- #6 -->
+          <text id="personalizationButton6" class="genericButtonText" focusable="true">
+          &qtn_ai_pers_change_sc;
+            <actions>
+              <action>
+                <trigger name="stylus">
+                  <property name="eventtype" value="up" />
+                </trigger>                              
+                <trigger name="activate"/>
+                <!-- Open shortcuts view in general settings -->
+                <event name="Shortcut/ShowSettings"/>
+              </action>
+              
+        <!-- for setting the correct colour group for texts -->
+         
+              <action>
+                <trigger class="western" name="down"/>
+                <trigger class="arabic" name="up"/> 
+                <!-- joystick left -->
+                <event name="system/setfocus">
+                  <property name="id" value="personalizationPluginIcon"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="personalizationPluginContainer"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="none"/>
+                  <property name="type" value="string"/>
+                </event>
+                <event name="system/set">
+                  <property name="id" value="SATAndNewstickerBox"/>
+                  <property name="name" value="display"/>
+                  <property name="value" value="block"/>
+                  <property name="type" value="string"/>
+                </event>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </action>
+            </actions>
+          </text>
+        </box>
+
+      </box>  <!-- end of pluginContainerArea -->
+
+      <!--############################
+         #####   SAT plugin     #####
+        ############################-->
+      <box id="SATAndNewstickerBox" focusable="false">
+          
+        <box id="SATPluginContainer" focusable="false">
+          <text id="SatIdleModeText" class="satText" focusable="false">
+            <property class="SAT/SatIdleModeText"/>
+            <!--  emptyContent/Content policies defined for the SAT plug-in box -->
+            <property class="policy/emptyContent" name="SATPluginContainer" value="display: none;"/>
+            <property class="policy/Content" name="SATPluginContainer" value="display: block;"/>
+            <property class="policy/Content" name="SatIdleModeIcon" value="display: block;"/>
+          </text>
+          <image id="SatIdleModeIcon" class="satIcon" focusable="false">
+            <property class="SAT/SatIdleModeIcon"/>
+<!--            <property class="policy/Content" name="SatIdleModeText" value="margin-right: 5.5u;"/>
+            <property class="policy/emptyContent" name="SatIdleModeText" value="margin-right: 1.0u;"/>
+-->           <property class="policy/emptyContent" name="SatIdleModeIcon" value="width: 0u"/>
+              <property class="policy/emptyContent" name="SatIdleModeIcon" value="height: 0u;"/>
+              <property class="policy/Content" name="SatIdleModeIcon" value="width: 3.5u"/>
+              <property class="policy/Content" name="SatIdleModeIcon" value="height: 3.5u;"/>
+          </image>
+        </box>
+
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+      </box>
+
+      <!--#################################################
+          ####     Menubar with soft key shortcuts     ####
+          #################################################-->
+      <menubar>
+        <menuitem id="SK1" label="">
+          <!-- ordinal value is the same as in the default settings -->
+          <property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000100"/>
+          <actions>
+            <action>
+              <trigger name="stylus"/>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x01000100)"/>
+            </action>
+          </actions>
+        </menuitem>
+        <menuitem id="SK2" label="">
+          <property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000101"/>
+          <actions>
+            <action>
+              <trigger name="stylus"/>
+              <!-- if using both activate and hold for same SK active trigger need to be specified like this (2 = keyup) otherwise hold will not work -->
+              <trigger name="activate"><property name="eventtype" value="2"/></trigger>
+              <event name="Shortcut/LaunchByIndex(0x01000101)"/>
+            </action>
+            <action>
+              <trigger name="hold"/>
+              <event name="Shortcut/LaunchByValue(localapp:0x10281867)"/>
+            </action>
+          </actions>
+        </menuitem>
+        <menuitem id="MSK" label="&qtn_msk_select;">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="clicked" value="down"/>
+              </trigger>
+              <event name="system/set">
+                <property name="id" value="msk_text"/>
+                <property name="name" value="display"/>
+                <property name="value" value="block"/>
+                <property name="type" value="string"/>
+              </event>
+            </action>
+          </actions>
+        </menuitem>       
+      </menubar>
+    </view>
+  </views>
+
+</xmluiml>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_dat.dat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<data>
+	<AppUid>102750F0</AppUid>
+	<Provideruid>101FB657</Provideruid>
+	<ThemeUid>1028186D</ThemeUid>
+	<ThemeStatus>ThemeStatusLicenceeDefault</ThemeStatus>
+	<ThemeFullName>Navigation bar</ThemeFullName>
+	<ThemeShortName>AI</ThemeShortName>
+	<ThemeVersion>1.0</ThemeVersion>
+	<FileXML>ActiveIdle.xml</FileXML>
+	<FileCSS>ActiveIdle.css</FileCSS>
+	<FileResource>qsn_fr_popup_sub_mask_icon.svg</FileResource>
+
+	<FileResource CacheType="CacheNone">iractiveidle.mif</FileResource>
+
+	<LanguageSpecific Language="01">
+		<FileDTD>ActiveIdle.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName><!-- Note: the name is not an entity reference. So no "&" or" ;" -->
+	</LanguageSpecific>
+</data>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_dat_reversed.dat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<data>
+	<AppUid>102750F0</AppUid>
+	<Provideruid>101FB657</Provideruid>
+	<ThemeUid>1028186D</ThemeUid>
+	<ThemeStatus>ThemeStatusLicenceeDefault</ThemeStatus>
+	<ThemeFullName>Navigation bar</ThemeFullName>
+	<ThemeShortName>AI</ThemeShortName>
+	<ThemeVersion>1.0</ThemeVersion>
+	<FileXML>ActiveIdle.xml</FileXML>
+	<FileCSS>ActiveIdle_reversed.css</FileCSS>
+	
+	<FileResource CacheType="CacheNone">iractiveidle.mif</FileResource>
+
+	<LanguageSpecific Language="01">
+		<FileDTD>ActiveIdle.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName><!-- Note: the name is not an entity reference. So no "&" or" ;" -->
+	</LanguageSpecific>
+</data>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_loc.dat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,247 @@
+<?xml version="1.0"?>
+<data>
+	<AppUid>102750F0</AppUid>
+	<Provideruid>101FB657</Provideruid>
+	<ThemeUid>1028186D</ThemeUid>
+	<ThemeStatus>ThemeStatusLicenceeDefault</ThemeStatus>
+	<ThemeFullName>Navigation bar</ThemeFullName>
+	<ThemeShortName>AI</ThemeShortName>
+	<ThemeVersion>1.0</ThemeVersion>
+	<FileXML>ActiveIdle.xml</FileXML>
+	<FileCSS>ActiveIdle.css</FileCSS>
+	
+	<FileResource CacheType="CacheNone">iractiveidle.mif</FileResource>
+	
+	<LanguageSpecific Language="01">
+		<FileDTD>ActiveIdle_01.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="02">
+		<FileDTD>ActiveIdle_02.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="03">
+		<FileDTD>ActiveIdle_03.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="04">
+		<FileDTD>ActiveIdle_04.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="05">
+		<FileDTD>ActiveIdle_05.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="06">
+		<FileDTD>ActiveIdle_06.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="07">
+		<FileDTD>ActiveIdle_07.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="08">
+		<FileDTD>ActiveIdle_08.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="09">
+		<FileDTD>ActiveIdle_09.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="10">
+		<FileDTD>ActiveIdle_10.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="13">
+		<FileDTD>ActiveIdle_13.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="14">
+		<FileDTD>ActiveIdle_14.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="15">
+		<FileDTD>ActiveIdle_15.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="16">
+		<FileDTD>ActiveIdle_16.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="17">
+		<FileDTD>ActiveIdle_17.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="18">
+		<FileDTD>ActiveIdle_18.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="25">
+		<FileDTD>ActiveIdle_25.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="26">
+		<FileDTD>ActiveIdle_26.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="27">
+		<FileDTD>ActiveIdle_27.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="28">
+		<FileDTD>ActiveIdle_28.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="29">
+		<FileDTD>ActiveIdle_29.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="30">
+		<FileDTD>ActiveIdle_30.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="31">
+		<FileDTD>ActiveIdle_31.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="32">
+		<FileDTD>ActiveIdle_32.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="33">
+		<FileDTD>ActiveIdle_33.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="37">
+		<FileDTD>ActiveIdle_37.dtd</FileDTD>
+		<FileCSS>ActiveIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="39">
+		<FileDTD>ActiveIdle_39.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="42">
+		<FileDTD>ActiveIdle_42.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="44">
+		<FileDTD>ActiveIdle_44.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="45">
+		<FileDTD>ActiveIdle_45.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="49">
+		<FileDTD>ActiveIdle_49.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="50">
+		<FileDTD>ActiveIdle_50.dtd</FileDTD>
+		<FileCSS>ActiveIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="51">
+		<FileDTD>ActiveIdle_51.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="54">
+		<FileDTD>ActiveIdle_54.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="57">
+		<FileDTD>ActiveIdle_57.dtd</FileDTD>
+		<FileCSS>ActiveIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="58">
+		<FileDTD>ActiveIdle_58.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="59">
+		<FileDTD>ActiveIdle_59.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="67">
+		<FileDTD>ActiveIdle_67.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="68">
+		<FileDTD>ActiveIdle_68.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="70">
+		<FileDTD>ActiveIdle_70.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="76">
+		<FileDTD>ActiveIdle_76.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="78">
+		<FileDTD>ActiveIdle_78.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="79">
+		<FileDTD>ActiveIdle_79.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="83">
+		<FileDTD>ActiveIdle_83.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="93">
+		<FileDTD>ActiveIdle_93.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="94">
+		<FileDTD>ActiveIdle_94.dtd</FileDTD>
+		<FileCSS>ActiveIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="96">
+		<FileDTD>ActiveIdle_96.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="129">
+		<FileDTD>ActiveIdle_129.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="157">
+		<FileDTD>ActiveIdle_157.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="158">
+		<FileDTD>ActiveIdle_158.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="159">
+		<FileDTD>ActiveIdle_159.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="160">
+		<FileDTD>ActiveIdle_160.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="161">
+		<FileDTD>ActiveIdle_161.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="326">
+		<FileDTD>ActiveIdle_326.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="327">
+		<FileDTD>ActiveIdle_327.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="401">
+		<FileDTD>ActiveIdle_401.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="402">
+		<FileDTD>ActiveIdle_402.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_iconbar</ThemeFullName>
+	</LanguageSpecific>
+</data>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_reversed.css	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1059 @@
+* {
+	nav-index: none;
+}
+/* Hide western triggers. Only class="arabic" are shown */
+trigger.western {
+   display: none;
+}
+
+view { /* main_idle_act2_pane */
+	display: block; 
+	position: static; 	
+	width: 100%;
+	height: 100%;
+	direction: rtl;
+	block-progression: lr;
+	background-image: wallpaper;
+}
+
+menuitem#SK2{
+	_s60-longtap: true;
+}
+/**************************************
+	NAVI BAR
+***************************************/
+
+box#pluginIconArea { /* popup_ai2_link_window */
+	display: block; 
+	visibility: visible;
+	position: absolute; 	
+	width: 7.25u;	
+	height: 28.75u;	
+	right: 1.0u;	
+	top: 1.5u;		
+	padding-left: 0.85u;	
+	padding-right: 0.65u;	
+	padding-top: 1.00u;	
+	padding-bottom: 1.00u;
+	block-progression: tb;
+	direction: ltr;
+	background-color:"SKIN(268458534 8448)";
+	z-index: 1;
+}
+
+
+image.pluginAreaIcon { /* grid_ai2_link_window_g1 */
+	display: block; 
+	visibility: visible;
+	position: static; 
+	width: 5.75u;
+	/*height: 20%;*/	/* with NewsTicker */
+	height: 5.75u;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	block-progression: tb;
+	z-index: 1;
+}
+
+image.pluginAreaIcon:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5136)";
+}
+
+image#shortcutPluginIcon {
+    nav-index: 1;
+/* Block with flag '__NEWSTICKER' skipped. */
+}
+image#organizerPluginIcon {
+    nav-index: 2;
+}
+image#musicPlayerPluginIcon {
+    nav-index: 3;
+}
+image#radioPluginIcon {
+    nav-index: 4;
+}
+image#personalizationPluginIcon {
+    nav-index: 5;
+/* Block with flag '__NEWSTICKER' skipped. */
+}
+
+/**************************************
+	SAT AREA
+***************************************/
+
+box#SATPluginContainer {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: auto;
+	margin-left: 1.0u;
+/* left: 100%; */
+/*	right: 9.75u; */
+	margin-right: 9.75u;
+	top: 1.0u;
+	width: auto;
+	height: 4.0u;
+	background-image: auto;
+	direction: rtl;
+	block-progression: rl;
+}
+
+text.satText	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 4.0u;
+	left: auto;
+	margin-left: 1.0u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;         /* TODO: check */
+	text-align: left;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+image.satIcon	{
+	display: block;
+	visibility: visible;
+	position: static;
+	top: 0.25u;
+   /*left: auto;*/
+   right: auto;
+/*margin-left: 1.0u;*/
+	width: 3.5u;
+	height: 3.5u;
+}
+
+/**************************************
+	PLUGIN AREA
+***************************************/
+
+box#pluginContainerArea { /* popup_ai2_data_window */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;	
+	height: auto;	
+	left: 4.5u;
+	right: 4.5u;
+	top: 1.5u;
+	margin-left: 1.0u;
+	margin-right: 1.80u;
+	margin-bottom: 1.5u;
+	/*padding-left: 
+	padding-right:*/
+	block-progression: lr;
+	direction: ltr;
+	z-index: 0;
+}
+
+
+/*********
+	GENERAL
+**********/
+
+box.pluginContainer { /*  popup_ai2_data_window  */
+	display: none;
+	visibility: visible;
+	position: static;
+	width: 100%;
+	height: 100%;
+	block-progression: tb;
+	background-color:"SKIN(268458534 8448)";
+	z-index: 1;
+}
+/* There seems to be a bug in the animation system that doesn't start
+the animation correctly. This is to go around it. */
+
+box#shortcutPluginAnimationFixButton { 
+	display: none;
+	visibility: hidden;
+	width: 0%;
+	height: 0%;
+}
+
+button.fakeButton { 
+	display: none;
+	visibility: hidden;
+	width: 0%;
+	height: 0%;
+}
+
+text.titleText{ /* heading_ai2_ gene_pane */
+	display: block;
+	visibility: visible;
+	position: static;
+	block-progression: lr;
+	width: auto;
+	height: 14.4%;	
+	padding-left: 1.2u;
+	padding-right: 1.1u;
+	margin-left: 0.7u;
+	margin-right: 0.9u;
+	padding-bottom: 0.5u;
+	border-bottom-width: thin;
+	border-bottom-style: dotted;
+	border-bottom-color: auto;
+	nav-index: auto;
+	font-family: EAknLogicalFontPrimaryFont; 
+	font-size: 4.0u;      
+	text-align: right;
+	color: "SKIN(268458534 13056 19)";
+}
+
+text.titleText:focus{
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+	color: "SKIN(268458534 13056 9)";
+}
+
+text.genericButtonText { /* ai2_gene_pane_t1 */
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	padding-left: 1.0u;
+	padding-right: 1.0u;
+	margin-right: 0.9u;
+	margin-left: 0.7u;
+	padding-bottom: 0.6u;
+	padding-top: -0.3u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;        
+	color: "SKIN(268458534 13056 19)";
+	nav-index: auto;  
+ 	border-top-width: thin;
+	border-top-style: dotted;
+	border-top-color: auto;
+	text-align: right;
+}
+
+
+text.genericButtonText:focus{
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+
+/************************
+	SHORTCUT PLUGIN AREA 
+*************************/
+
+image#shortcutPluginIcon { _s60-initial-focus: 1; }
+
+
+/************************
+	CALENDAR PLUGIN AREA 
+*************************/
+box#organizerPluginContainer { /*  popup_ai2_data_window  */
+	display: none;
+	visibility: visible;
+	position: static;
+	width: 100%;
+	height: 100%;
+	block-progression: tb;
+	background-color:"SKIN(268458534 8448)";
+	z-index: 1;
+}
+/* Organiser items are buttons because they contain 1-2 textelements
+   and an image element */
+button.organizerButton { /* ai2_gene_pane */
+	display: none;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 13.5%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	nav-index: auto;  
+ 	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+}
+
+button.organizerButtonLastPosition { /* ai2_gene_pane */
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 12.5%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	margin-bottom: 0.65u;
+	nav-index: auto;  
+ 	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+}
+
+button.organizerButton:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+button.organizerButtonLastPosition:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+
+button#eventButton4 { 	display: none; 	nav-index: none; }
+button#eventButton5 { 	display: none; 	nav-index: none; }
+button#eventButton6 { 	display: none; 	nav-index: none; }
+
+image.eventIcon { /* ai2_gene_pane_g2 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 0.75u;
+	right: 5.25u;
+	left: 100%;
+	width: 4.0u;
+	height: 4.0u;
+}
+
+text.eventText1 { /* ai2_gene_pane_t1  */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4.0u;
+	left: 5.5u;
+	right: 3.0u;
+	/*top: 0.75u;*/
+	top: 6%;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	text-align: right;
+	
+}
+
+
+text.eventText2 { /* ai2_gene_pane_t1  */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4.0u;
+	/*top: 4.5u;	*/
+	top: auto;
+	bottom: 6%;
+	left: 5.5u;
+	right: 3.0u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	text-align: right;
+}
+
+/*********************
+	PLAYER PLUGIN AREA 
+**********************/
+
+box#volumeIndicator { /* ai2_mp_volume_pane */
+	display: none;
+	visibility: visible;
+	position: absolute;
+	block-progression: rl;
+	top: 15.5%;
+	width: auto;
+	height: 14%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;	
+/*left: auto;*/
+	/*padding-left: 30%;*/
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+}
+
+
+box#volumeIndicator:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+
+
+image#musicPlayerVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 31.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+image#musicPlayerVolumeDownIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 31.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+
+
+image#musicPlayerSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+image#musicPlayerSpeakerIconHighlight { 
+	display: block;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#musicPlayerSpeakerMutedIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+image#musicPlayerSpeakerMutedIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+/*
+image#musicPlayerVolumeIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 23.5u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+*/
+
+volumecontrol#musicPlayerVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 23.5u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+
+slider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#musicPlayerVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 2.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#musicPlayerVolumeUpIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 2.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+/*image#musicPlayerInactiveVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 2.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}*/
+
+
+/* Replaces volume control and playback info when player is inactive */
+box#playerInActive	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+}
+
+
+text#musicPlayerInActive	{
+	display: block;
+	visibility: visible;
+	position: static;
+	text-align: center;
+	margin-top: auto;
+	margin-bottom: 45.0%;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;	*/
+	color: "SKIN(268458534 13056 19)";	
+}
+
+
+box#infoArea {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: auto;
+	top: 29.5%;
+	margin-left: 1.1u;
+	margin-right: 1.1u;
+	border-top-width: 0.4%;
+	border-top-style: dotted;
+	border-top-color: auto;	
+}
+
+/* A box around the artist and track name */
+/* the idea here is to display max 6 rows (max-line-amount). */
+/* The track has higher display-prio so it will be displayed first. */
+/* The track will get all the lines (max 6) it needs in order to display its name */
+/* Whats left of the 6 lines from track name will be used for artist */
+box#trackAndArtist{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	/* For landscape orientation. This way we get the */
+	/* last line out of sight */	
+	height: 100%;
+	margin-bottom: 10.5u;	
+}
+
+box#artistLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: adaptive;
+	_s60-display-priority: 11;
+}
+
+
+box#trackLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: adaptive;
+	_s60-display-priority: 10;
+}
+
+
+box#durationLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: 2.0u;
+}
+
+
+image.playerStatusIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: 3.5u;
+	height: 3.5u;
+	left: 100%;
+	right: 4.3u;
+	top: 1.0u;
+}
+
+text#time{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: 100%;
+	height: 4.0u;
+	left: 1.75u;
+	right: 7.75u;
+	top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	margin-left: 1.0u;
+	margin-right: 1.0u;
+	margin-top: 0.25u;
+	text-align: right;		
+}
+
+text.playerTextLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	width: 100%;
+	margin-left: 3.5u;
+	height: adaptive;
+	margin-left: 1.0u;
+	margin-right: 1.5u;
+	margin-top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	text-overflow-mode: wrap;
+	max-line-amount: 6;	 
+	text-align: right;
+}
+
+
+/*********************
+	VISUAL/INTERNET RADIO PLUGIN AREA 
+**********************/
+
+button.radioTitleButton { /* heading_ai2_ gene_pane */
+	display: block;
+	visibility: visible;
+	position: static;
+	block-progression: lr;
+	width: auto;
+	height: 14.4%;	
+	padding-left: 1.2u;
+	padding-right: 1.1u;
+	margin-left: 0.7u;
+	margin-right: 0.9u;
+	padding-bottom: 0.5u;
+	border-bottom-width: thin;
+	border-bottom-style: dotted;
+	border-bottom-color: auto;
+	nav-index: auto;
+}
+
+button.radioTitleButton:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+text.radioTitleText { /* heading_ai2_gene_pane_t1 */
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	font-family: EAknLogicalFontPrimaryFont; 
+	font-size: 4.0u;      
+	color: "SKIN(268458534 13056 19)";
+	text-align: right;
+}
+
+/* Invisible icon that is used to switch correct layout */
+image.invisibleRadioTitleIcon {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 4.25u;
+	top: 0.25u;
+	width: 4.0u;
+	height: 4.0u;
+}
+
+box#radioVolumeIndicator {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	block-progression: rl;
+	top: 15.5%;
+	width: auto;
+	height: 14%;
+	margin-left: 0.75u;
+	margin-right: 0.75u;	
+/*left: auto;*/
+	/*padding-left: 30%;*/
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+}
+
+
+box#radioVolumeIndicator:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+
+
+
+image#radioVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 31.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+image#radioVolumeDownIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 31.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+
+
+image#radioSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+image#radioSpeakerIconHighlight { 
+	display: block;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#radioSpeakerMutedIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+image#radioSpeakerMutedIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 28.5u;
+	width: 4u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+
+volumecontrol#radioVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 23.5u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+
+slider#radioSlider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#radioVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 100%;
+	right: 2.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+image#radioVolumeUpIconHighlight { 
+	display: none;
+	visibility: hidden;
+	position: absolute;
+	left: 100%;
+	right: 2.5u;
+	width: 1.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+
+
+/* Replaces volume control and playback info when radio is inactive */
+box#radioInactive	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: auto;
+	margin-left: 0.75u;
+	margin-right: 0.75u;
+	border-top-width: 0.5%;
+	border-top-style: dotted;
+	border-top-color: auto;
+	nav-index: auto;
+}
+
+
+text#radioInactiveText	{
+	display: block;
+	visibility: visible;
+	position: static;
+	text-align: center;
+	margin-top: auto;
+	margin-bottom: 45.0%;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";	
+}
+
+
+box#visualRadioInfoArea {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: auto;
+	top: 29.5%;
+	margin-left: 1.1u;
+	margin-right: 1.1u;
+	border-top-width: 0.4%;
+	border-top-style: dotted;
+	border-top-color: auto;	
+}
+
+
+box#visualRadioNameLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 0.25u;
+	block-progression: lr;
+}
+
+
+box#visualRadioLocationLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 0.25u;
+}
+
+
+box#visualRadioFrequencyLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 0.25u;
+	margin-bottom: auto;
+}
+
+
+text#visualRadioNumberTextLine {
+	width: 4.0u;
+	height:	4.0u;
+	left: 100%;
+	right: 6.75u;
+	top: 0.25u;
+	font-weight: bold;
+	text-align: left;
+}
+
+
+text#visualRadioNameTextLine {
+	font-weight: bold;
+}
+
+
+text.visualRadioTextLine {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height:	4.0u;
+	left: 9.0u;
+	right: 3.75u;
+	top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+	text-overflow-mode: wrap;
+	max-line-amount: 1;	 
+	text-align: right;
+}
+
+
+box#inetRadioInfoArea {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: auto;
+	top: 29.5%;
+	margin-left: 1.1u;
+	margin-right: 1.1u;
+	border-top-width: 0.4%;
+	border-top-style: dotted;
+	border-top-color: auto;	
+}
+
+
+box#inetRadioPresetLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+	margin-top: 2.0u;
+}
+
+
+box#inetRadioArtistLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+}
+
+
+box#inetRadioTrackLine {
+	display: block;
+	visibility: visible;
+	position: static;
+	height: 4.5u;
+}
+
+
+text.inetRadioTextLine {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: 100%;
+	height:	4.0u;
+	left: 1.75u;
+	right: 2.75u;
+	top: 0.25u;
+	font-family: EAknLogicalFontSecondaryFont; 
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+	text-overflow-mode: wrap;
+	max-line-amount: 1;	 
+	text-align: right;
+}
+
+
+text#inetRadioPresetTextLine {
+	font-weight: bold;
+}
+
+
+/****************************
+	PERSONALIZATION PLUGIN AREA 
+*****************************/
+
+/* Defined in "General" definitions */
+
+
+/*********************************
+	WRAPPER BOX FOR SAT & NEWSTICKER
+**********************************/
+
+box#SATAndNewstickerBox {
+	display: block;
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 0;
+}
+
+/* Block with flag '__NEWSTICKER' skipped. */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/activeidle_reversed.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,2259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xmluiml SYSTEM "ActiveIdle.dtd">
+<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
+
+	<!--Application events -->
+	<actions>
+		<action>
+			<trigger name="startup"/>
+			<trigger name="uidefinitionmodificationend"/>
+			<event name="READY"/>
+		</action>
+		<action>
+			<trigger name="shutdown"/>
+			<event name="DOWN"/>
+		</action>
+		<action>
+			<trigger name="uidefinitionmodificationstart"/>
+			<event name="NEW_UI"/>
+		</action>
+		<action>
+			<trigger name="screendevicechange"/>
+			<event name="LAYOUT"/>
+		</action>
+	</actions>
+
+
+	<!-- Views -->
+	<views>
+
+		<!--###########################
+		    #####   AI plug-ins   #####
+		    ###########################-->
+		<property class="ContentSource" name="Shortcut" value="0x102750FA" load_ordinal="1"/>
+		<property class="ContentSource" name="Organizer" value="0x102750FE" load_ordinal="2"/>
+		<property class="ContentSource" name="MusicPlayer" value="0x10207B73" load_ordinal="3"/>
+		<property class="ContentSource" name="Profile" value="0x10275101" load_ordinal="5"/>
+		<property class="ContentSource" name="SAT" value="0x102078EB" load_ordinal="6"/>
+		<property class="ContentSource" name="VisualRadio" value="0x10208A89" load_ordinal="7"/>
+		<property class="ContentSource" name="InetRadio" value="0x2000B4A7" load_ordinal="8"/>
+
+
+		<!--###################################
+		    ###  Plug-in specific settings  ###
+		    ###################################-->
+
+		<!--###################################
+		    ###  Shortcut plug-in settings   ##
+		    ###################################-->
+		<!-- Always visible shortcuts -->
+		<!-- Shortcut #1, Messaging -->
+		<!-- NOTE: these indexes start from 1 -->
+		<property class="Settings/Shortcut" name="0x00000001" value="localapp:0x100058C5"/>
+		<!-- Shortcut #2, Phonebook -->
+		<property class="Settings/Shortcut" name="0x00000002" value="localapp:0x101F4CCE"/>
+		<!-- Shortcut #3, Clock -->
+		<property class="Settings/Shortcut" name="0x00000003" value="localapp:0x10005903"/>
+		<!-- Shortcut #4, Media Gallery 2 -->
+		<property class="Settings/Shortcut" name="0x00000004" value="localapp:0x101F8599"/>
+		<!-- Shortcut #5, Browser -->
+		<property class="Settings/Shortcut" name="0x00000005" value="localapp:0x10008D39"/>
+		<!-- Shortcut #6, Change theme -->
+		<property class="Settings/Shortcut" name="0x00000006" value="localapp:0x10005A32?view=0x102750A7"/>
+
+		<!-- NOTE! Shortcut settings are used also in Personalization UI (see settings below). -->
+
+		<!-- Optionally visible shortcuts -->
+		<!-- Soft key #1, Applications -->
+		<property class="Settings/Shortcut" name="0x01000100" value="localapp:0x101F4CD2"/>
+		<!-- Soft key #2, Contacts -->
+		<property class="Settings/Shortcut" name="0x01000101" value="localapp:0x101F4CCE"/>
+
+
+		<!--###################################
+		    ###  Organizer plug-in settings  ##
+		    ###################################-->
+		<!--	Item count and size settings -->
+		<!--        Total line count	-->
+		<property class="Settings/Organizer" name="0x01" value="6"/>
+		<!--        Timed item line count	-->
+		<property class="Settings/Organizer" name="0x02" value="2"/>
+		<!--        Non Timed item line count	-->
+		<property class="Settings/Organizer" name="0x03" value="1"/>
+		<!--        Line count reserved for non timed items	-->
+		<property class="Settings/Organizer" name="0x04" value="2"/>
+        <!-- Publish end time for upcoming timed items -->
+		<property class="Settings/Organizer" name="0x05" value="0"/>
+        <!-- Use alternate publishing for upcoming and ongoing items -->
+		<property class="Settings/Organizer" name="0x06" value="0"/>
+
+
+		<!-- Main view -->
+
+		<view id="ActiveIdleView">
+			<actions>
+				<action id="KeyEnd">
+					<trigger name="keyevent">
+						<property name="scancode" value="197"/>
+						<property name="eventtype" value="1"/>
+					</trigger>
+					<event name="system/setfocus">
+						<property name="id" value="shortcutPluginIcon"/>
+					</event>
+					<event name="system/set">
+						<property name="id" value="SATAndNewstickerBox"/>
+						<property name="name" value="display"/>
+						<property name="value" value="block"/>
+						<property name="type" value="string"/>
+					</event>
+					<event name="system/set">
+						<property name="id" value="shortcutPluginContainer"/>
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+					</event>
+					<event name="system/set">
+						<property name="id" value="organizerPluginContainer"/>
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+					</event>
+					<event name="system/set">
+						<property name="id" value="playerPluginContainer"/>
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+					</event>
+					<event name="system/set">
+						<property name="id" value="radioPluginContainer"/>
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+					</event>
+					<event name="system/set">
+						<property name="id" value="personalizationPluginContainer"/>
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+					</event>
+				</action>
+			</actions>
+
+			<!--################################
+				####    Plug-in icon bar    ####
+				################################-->
+
+			<box id="pluginIconArea" focusable="false">
+
+				<!-- Shortcut plug-in
+					##################-->
+
+				<image id="shortcutPluginIcon" path="SKIN(270501603 6186)" class="pluginAreaIcon" focusable="true">
+					<actions>
+						<!-- Get focus -> Hide SAT & NT, show plug-in content -->
+						<action>
+							<trigger name="gainfocus"/>
+							<trigger name="stylus"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_select;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<!-- Arrow left -> Hide plug-in content -->
+						<action>
+							<trigger name="down"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+						</action>
+
+						<!-- Click Select key or tap icon -->
+						<!--action>
+							<trigger name="activate"/>
+							<trigger name="stylus">
+								<property name="doubleclicked" value="up"/>
+							</trigger>
+							<event name="ui/focusgained(shortcutPluginContainer,SATAndNewstickerBox)"/>
+						</action-->
+						<action>
+							<trigger name="activate"/>
+							<trigger name="down"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/setfocus">
+								<property name="id" value="shortcutPluginAnimationFixButton"/>
+							</event>
+							<event name="system/setfocus">
+								<property name="id" value="shortcutButton1"/>
+							</event>
+						</action>
+						<!-- Select text to MSK label -->
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+					</actions>
+				</image>
+
+				<!-- Organizer plug-in
+					 #################-->
+
+				<image id="organizerPluginIcon" path="SKIN(270501046 268458241)" class="pluginAreaIcon" focusable="true">
+					<actions>
+						<!-- Show plug-in content -->
+						<action>
+							<trigger name="gainfocus"/>
+							<trigger name="stylus"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_select;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<!-- Hide plug-in content -->
+						<action>
+							<trigger name="up"/>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>		
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+						</action>
+
+						<!-- Move focus to plug-in content -->
+						<!--action>
+							<trigger name="activate"/>
+							<trigger name="stylus">
+								<property name="doubleclicked" value="up"/>
+							</trigger>
+							<event name="ui/focusgained(organizerPluginContainer,SATAndNewstickerBox)"/>
+						</action-->
+						
+						<action>
+							<trigger name="activate"/>
+							<trigger name="down"/>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/setfocus">
+								<property name="id" value="organizerTitle"/>
+							</event>
+						</action>
+
+						<!-- Select text to MSK label -->
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+					</actions>
+				</image>
+
+				<!-- Music player plug-in
+					 ####################-->
+
+				<image id="musicPlayerPluginIcon" path="SKIN(270501046 270561987)" class="pluginAreaIcon" focusable="true">
+					<actions>
+
+						<!-- Show plug-in content -->
+						<action>
+							<trigger name="gainfocus"/>
+							<trigger name="stylus"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_select;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<!-- Hide plug-in content -->
+						<action>
+							<trigger name="up"/>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>			
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+						</action>
+
+						<!-- Move focus to plug-in content -->
+						<!--action>
+							<trigger name="activate"/>
+							<trigger name="stylus">
+								<property name="doubleclicked" value="up"/>
+							</trigger>
+							<event name="ui/focusgained(playerPluginContainer,SATAndNewstickerBox)"/>
+						</action-->
+						
+						<action>
+							<trigger name="activate"/>
+							<trigger name="down"/>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/setfocus">
+								<property name="id" value="playerTitle"/>
+							</event>
+						</action>
+					
+						<!-- Select text to MSK label -->
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+					</actions>
+				</image>
+
+
+				<!-- Visual/Internet Radio plug-in
+					 ####################-->
+
+				<image id="radioPluginIcon" path="iractiveidle.mif#0" class="pluginAreaIcon" focusable="true">
+					<actions>
+
+						<!-- Show plug-in content -->
+						<action>
+							<trigger name="gainfocus"/>
+							<trigger name="stylus"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_select;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<!-- Hide plug-in content -->
+						<action>
+							<trigger name="up"/>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>			
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+						</action>
+
+						<!-- Move focus to plug-in content -->
+						<!--action>
+							<trigger name="activate"/>
+							<trigger name="stylus">
+								<property name="doubleclicked" value="up"/>
+							</trigger>
+							<event name="ui/focusgained(playerPluginContainer,SATAndNewstickerBox)"/>
+						</action-->
+						
+						<action>
+							<trigger name="activate"/>
+							<trigger name="down"/>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/setfocus">
+								<property name="id" value="radioTitle"/>
+							</event>
+						</action>
+					
+						<!-- Select text to MSK label -->
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+					</actions>
+				</image>
+
+				<!-- Personalization plug-in
+					 	 ####################### -->
+
+				<image id="personalizationPluginIcon" path="SKIN(270501046 268458546)" class="pluginAreaIcon" focusable="true">
+					<actions>
+						<!-- Show plug-in content -->
+						<action>
+							<trigger name="gainfocus"/>
+							<trigger name="stylus"/>
+							<event name="system/set">
+								<property name="id" value="shortcutPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="organizerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="playerPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="radioPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_select;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<!-- Hide plug-in content -->
+						<action>
+							<trigger name="up"/>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+						</action>
+
+						<!-- Move focus to plug-in content -->
+						<!--action>
+							<trigger name="activate"/>
+							<trigger name="stylus">
+								<property name="doubleclicked" value="up"/>
+							</trigger>
+							<event name="ui/focusgained(personalizationPluginContainer,SATAndNewstickerBox)"/>
+						</action-->
+					
+						<action>
+							<trigger name="activate"/>
+							<trigger name="down"/>
+							<event name="system/set">
+								<property name="id" value="personalizationPluginContainer"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/set">
+								<property name="id" value="SATAndNewstickerBox"/>
+								<property name="name" value="display"/>
+								<property name="value" value="none"/>
+								<property name="type" value="string"/>
+							</event>
+							<event name="system/setfocus">
+								<property name="id" value="personalizationPluginTitle"/>
+							</event>
+						</action>
+			
+
+						<!-- Select text to MSK label -->
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+					</actions>
+				</image>
+
+			</box>
+
+			<!-- Container area for the plugin content for the following plugins:
+						Shortcuts, Organizer, Player, Personalization -->
+			<box id="pluginContainerArea" focusable="false">
+
+				<!--#################################
+					#####    Shortcut plugin    #####
+					#################################-->
+				<box id="shortcutPluginContainer" class="pluginContainer" focusable="false">
+					<!-- fake button to go around a bug in the animation system. Button is hidden. -->
+					<button id="shortcutPluginAnimationFixButton" class="fakeButton" focusable="true" />
+					<!-- Plugin title -->
+					<button id="shortcutPluginTitle" class="pluginTitle" focusable="true">
+						<text id="shortcutTitleText" class="titleText" focusable="false">&qtn_ai_shorts_title;</text>
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/ShowSettings"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+					</button>
+
+					<!-- Shortcut items -->
+					<!-- Shortcuts are not locked. I.e. they are dynamically published by the shortcut plug-in. -->
+
+					<!-- #1 -->
+					<button id="shortcutButton1" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByIndex(0x00000001)"/>
+								<!-- Messaging -->
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="shortcutText1" class="genericButtonText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000001"/>
+						</text>
+					</button>
+
+					<!-- #2 -->
+					<button id="shortcutButton2" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByIndex(0x00000002)"/>
+								<!-- Contacts -->
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="shortcutText2" class="genericButtonText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000002"/>
+						</text>
+					</button>
+
+					<!-- #3 -->
+					<button id="shortcutButton3" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByIndex(0x00000003)"/>
+								<!-- Clock -->
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="shortcutText3" class="genericButtonText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000003"/>
+						</text>
+					</button>
+
+					<!-- #4 -->
+					<button id="shortcutButton4" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByIndex(0x00000004)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="shortcutText4" class="genericButtonText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000004"/>
+						</text>
+					</button>
+
+					<!-- #5 -->
+					<button id="shortcutButton5" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByIndex(0x00000005)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="shortcutText5" class="genericButtonText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000005"/>
+						</text>
+					</button>
+
+					<!-- #6 -->
+					<button id="shortcutButton6" class="genericButtonLastPosition" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByIndex(0x00000006)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="shortcutPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="shortcutPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="shortcutText6" class="genericButtonText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000006"/>
+						</text>
+					</button>
+
+					<!-- UI resources -->
+					<desc id="Shortcut/EmptyCaption">&shortcut_EmptyCaption;</desc>
+					<desc id="Shortcut/BackCaption">&text_softkey_back;</desc>
+					<desc id="Shortcut/NewMessageCaption">&qtn_set_idle_skey_new_msg;</desc>
+					<desc id="Shortcut/NewEmailCaption">&qtn_set_idle_skeys_email_editor;</desc>
+					<desc id="Shortcut/NewSyncMLMailCaption">&qtn_apps_syncml_mail_gs;</desc>
+					<desc id="Shortcut/NewPostcardCaption">&qtn_apps_mmspostcard_gs;</desc>
+					<desc id="Shortcut/NewAudioMsgCaption">&qtn_apps_audio_msg_gs;</desc>
+					<desc id="Shortcut/SelectMsgTypeCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+					<desc id="Shortcut/ChangeThemeCaption">&qtn_apps_idle_skin_gs;</desc>
+					<desc id="Shortcut/NewMessageShortCaption">&qtn_idle_skey_new_msg;</desc>
+					<desc id="Shortcut/NewEmailShortCaption">&qtn_apps_email_skey;</desc>
+					<desc id="Shortcut/NewSyncMLMailShortCaption">&qtn_apps_syncml_mail_skey;</desc>
+					<desc id="Shortcut/NewPostcardShortCaption">&qtn_apps_mmspostcard_skey;</desc>
+					<desc id="Shortcut/NewAudioMsgShortCaption">&qtn_apps_audio_msg_skey;</desc>
+					<desc id="Shortcut/SelectMsgTypeShortCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+					<desc id="Shortcut/ChangeThemeShortCaption">&qtn_apps_idle_skin_skey;</desc>
+
+				</box>
+
+
+				<!--###############################
+					####   Organizer plugin    ####
+					###############################-->
+				<box id="organizerPluginContainer" class="pluginContainer" focusable="false">
+					<!-- there is a fake button in the shortcut plugin area. It is
+					used to go around a bug in the animation system. It reserves a little space,
+					so this is to fix that space in this plugin -->
+					<button id="organizeFakeButton" class="fakeButton" focusable="true" />
+
+					<!-- Organizer title -->
+					<button id="organizerTitle" class="pluginTitle" focusable="true">
+						<text id="organizerTitleText" class="titleText" focusable="false">&qtn_ai_cal_title;</text>
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(0)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+					</button>
+
+					<!-- #1 -->
+					<button id="eventButton1" class="organizerButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(1)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="organizerTitle"/>
+								</event>
+							</action>
+						</actions>
+						<image id="Organizer/eventIcon1" class="eventIcon" focusable="false">
+							<property class="Organizer/EventIcon" name="ordinal" value="0x01"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event icon -->
+							<!-- If the image is empty, the left side of the first text line will take the space of the image. -->
+							<property class="policy/emptyContent" name="Organizer/eventIcon1" value="display: none;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText1_1" value="left: 0.75u;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText1_2" value="left: 0.75u;"/>
+							<!-- If the image is non-empty, the left side of the first text line will be on the right side of the image. -->
+							<property class="policy/Content" name="Organizer/eventIcon1" value="display: block;"/>
+							<property class="policy/Content" name="Organizer/eventText1_1" value="left: 5.5u;"/>
+							<property class="policy/Content" name="Organizer/eventText1_2" value="left: 5.5u;"/>
+						</image>
+						<text id="Organizer/eventText1_1" class="eventText1" focusable="false">
+							<property class="Organizer/Event1stLine" name="ordinal" value="0x01"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton1" value="display: none;"/>
+							<property class="policy/emptyContent" name="eventButton1" value="nav-index: none;"/>
+							<property class="policy/Content" name="eventButton1" value="display: block;"/>
+							<property class="policy/Content" name="eventButton1" value="nav-index: auto;"/>
+						</text>
+						<text id="Organizer/eventText1_2" class="eventText2" focusable="false">
+							<property class="Organizer/Event2ndLine" name="ordinal" value="0x01"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+							<property class="policy/emptyContent" name="Organizer/eventText1_2" value="display: none;"/>
+							<property class="policy/Content" name="Organizer/eventText1_2" value="display: block;"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton1" value="height: 13.5%;"/>
+							<property class="policy/Content" name="eventButton1" value="height: 27.0%;"/>
+						</text>
+					</button>
+
+					<!-- #2 -->
+					<button id="eventButton2" class="organizerButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(2)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="organizerTitle"/>
+								</event>
+							</action>
+						</actions>
+						<image id="Organizer/eventIcon2" class="eventIcon" focusable="false">
+							<!--  path="qgn_indi_cdr_birthday.svg" -->
+							<property class="Organizer/EventIcon" name="ordinal" value="0x02"/>
+							<!-- If the image is empty, the left side of the first text line will take the space of the image. -->
+							<property class="policy/emptyContent" name="Organizer/eventIcon2" value="display: none;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText2_1" value="left: 0.75u;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText2_2" value="left: 0.75u;"/>
+							<!-- If the image is non-empty, the left side of the first text line will be on the right side of the image. -->
+							<property class="policy/Content" name="Organizer/eventIcon2" value="display: block;"/>
+							<property class="policy/Content" name="Organizer/eventText2_1" value="left: 5.5u;"/>
+							<property class="policy/Content" name="Organizer/eventText2_2" value="left: 5.5u;"/>
+						</image>
+						<text id="Organizer/eventText2_1" class="eventText1" focusable="false">
+							<property class="Organizer/Event1stLine" name="ordinal" value="0x02"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton2" value="display: none;"/>
+							<property class="policy/emptyContent" name="eventButton2" value="nav-index: none;"/>
+							<property class="policy/Content" name="eventButton2" value="display: block;"/>
+							<property class="policy/Content" name="eventButton2" value="nav-index: auto;"/>
+						</text>
+						<text id="Organizer/eventText2_2" class="eventText2" focusable="false">
+							<property class="Organizer/Event2ndLine" name="ordinal" value="0x02"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+							<property class="policy/emptyContent" name="Organizer/eventText2_2" value="display: none;"/>
+							<property class="policy/Content" name="Organizer/eventText2_2" value="display: block;"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton2" value="height: 13.5%;"/>
+							<property class="policy/Content" name="eventButton2" value="height: 27.0%;"/>
+						</text>
+					</button>
+
+					<!-- #3 -->
+					<button id="eventButton3" class="organizerButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(3)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="organizerTitle"/>
+								</event>
+							</action>
+						</actions>
+						<image id="Organizer/eventIcon3" class="eventIcon" focusable="false">
+							<!--  path="qgn_indi_cdr_todo.svg" -->
+							<property class="Organizer/EventIcon" name="ordinal" value="0x03"/>
+							<!-- If the image is empty, the left side of the first text line will take the space of the image. -->
+							<property class="policy/emptyContent" name="Organizer/eventIcon3" value="display: none;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText3_1" value="left: 0.75u;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText3_2" value="left: 0.75u;"/>
+							<!-- If the image is non-empty, the left side of the first text line will be on the right side of the image. -->
+							<property class="policy/Content" name="Organizer/eventIcon3" value="display: block;"/>
+							<property class="policy/Content" name="Organizer/eventText3_1" value="left: 5.5u;"/>
+							<property class="policy/Content" name="Organizer/eventText3_2" value="left: 5.5u;"/>
+						</image>
+						<text id="Organizer/eventText3_1" class="eventText1" focusable="false">
+							<property class="Organizer/Event1stLine" name="ordinal" value="0x03"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton3" value="display: none;"/>
+							<property class="policy/emptyContent" name="eventButton3" value="nav-index: none;"/>
+							<property class="policy/Content" name="eventButton3" value="display: block;"/>
+							<property class="policy/Content" name="eventButton3" value="nav-index: auto;"/>
+						</text>
+						<text id="Organizer/eventText3_2" class="eventText2" focusable="false">
+							<property class="Organizer/Event2ndLine" name="ordinal" value="0x03"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+							<property class="policy/emptyContent" name="Organizer/eventText3_2" value="display: none;"/>
+							<property class="policy/Content" name="Organizer/eventText3_2" value="display: block;"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton3" value="height: 13.5%;"/>
+							<property class="policy/Content" name="eventButton3" value="height: 27.0%;"/>
+						</text>
+					</button>
+
+					<!-- #4 -->
+					<button id="eventButton4" class="organizerButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(4)"/>
+							</action>
+							<action>
+								<trigger name="up"/> <!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="organizerTitle"/>
+								</event>
+							</action>
+						</actions>
+						<image id="Organizer/eventIcon4" class="eventIcon" focusable="false">
+							<property class="Organizer/EventIcon" name="ordinal" value="0x04"/>
+							<!-- If the image is empty, the left side of the first text line will take the space of the image. -->
+							<property class="policy/emptyContent" name="Organizer/eventIcon4" value="display: none;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText4_1" value="left: 0.75u;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText4_2" value="left: 0.75u;"/>
+							<!-- If the image is non-empty, the left side of the first text line will be on the right side of the image. -->
+							<property class="policy/Content" name="Organizer/eventIcon4" value="display: block;"/>
+							<property class="policy/Content" name="Organizer/eventText4_1" value="left: 5.5u;"/>
+							<property class="policy/Content" name="Organizer/eventText4_2" value="left: 5.5u;"/>
+						</image>
+						<text id="Organizer/eventText4_1" class="eventText1" focusable="false">
+							<property class="Organizer/Event1stLine" name="ordinal" value="0x04"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton4" value="display: none;"/>
+							<property class="policy/emptyContent" name="eventButton4" value="nav-index: none;"/>
+							<property class="policy/Content" name="eventButton4" value="display: block;"/>
+							<property class="policy/Content" name="eventButton4" value="nav-index: auto;"/>
+						</text>
+						<text id="Organizer/eventText4_2" class="eventText2" focusable="false">
+							<property class="Organizer/Event2ndLine" name="ordinal" value="0x04"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+							<property class="policy/emptyContent" name="Organizer/eventText4_2" value="display: none;"/>
+							<property class="policy/Content" name="Organizer/eventText4_2" value="display: block;"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton4" value="height: 13.5%;"/>
+							<property class="policy/Content" name="eventButton4" value="height: 27.0%;"/>
+						</text>
+					</button>
+
+					<!-- #5 -->
+					<button id="eventButton5" class="organizerButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(5)"/>
+							</action>
+							<action>
+								<trigger name="up"/> <!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="organizerTitle"/>
+								</event>
+							</action>
+						</actions>
+						<image id="Organizer/eventIcon5" class="eventIcon" focusable="false">
+							<property class="Organizer/EventIcon" name="ordinal" value="0x05"/>
+							<!-- If the image is empty, the left side of the first text line will take the space of the image. -->
+							<property class="policy/emptyContent" name="Organizer/eventIcon5" value="display: none;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText5_1" value="left: 0.75u;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText5_2" value="left: 0.75u;"/>
+							<!-- If the image is non-empty, the left side of the first text line will be on the right side of the image. -->
+							<property class="policy/Content" name="Organizer/eventIcon5" value="display: block;"/>
+							<property class="policy/Content" name="Organizer/eventText5_1" value="left: 5.5u;"/>
+							<property class="policy/Content" name="Organizer/eventText5_2" value="left: 5.5u;"/>
+						</image>
+						<text id="Organizer/eventText5_1" class="eventText1" focusable="false">
+							<property class="Organizer/Event1stLine" name="ordinal" value="0x05"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton5" value="display: none;"/>
+							<property class="policy/emptyContent" name="eventButton5" value="nav-index: none;"/>
+							<property class="policy/Content" name="eventButton5" value="display: block;"/>
+							<property class="policy/Content" name="eventButton5" value="nav-index: auto;"/>
+						</text>
+						<text id="Organizer/eventText5_2" class="eventText2" focusable="false">
+							<property class="Organizer/Event2ndLine" name="ordinal" value="0x05"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+							<property class="policy/emptyContent" name="Organizer/eventText5_2" value="display: none;"/>
+							<property class="policy/Content" name="Organizer/eventText5_2" value="display: block;"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton5" value="height: 13.5%;"/>
+							<property class="policy/Content" name="eventButton5" value="height: 27.0%;"/>
+						</text>
+					</button>
+
+					<!-- #6 -->
+					<button id="eventButton6" class="organizerButtonLastPosition" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Organizer/ItemSelected(6)"/>
+							</action>
+							<action>
+								<trigger name="up"/> <!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="organizerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="organizerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="organizerTitle"/>
+								</event>
+							</action>
+						</actions>
+						<image id="Organizer/eventIcon6" class="eventIcon" focusable="false">
+							<property class="Organizer/EventIcon" name="ordinal" value="0x06"/>
+							<!-- If the image is empty, the left side of the first text line will take the space of the image. -->
+							<property class="policy/emptyContent" name="Organizer/eventIcon6" value="display: none;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText6_1" value="left: 0.75u;"/>
+							<property class="policy/emptyContent" name="Organizer/eventText6_2" value="left: 0.75u;"/>
+							<!-- If the image is non-empty, the left side of the first text line will be on the right side of the image. -->
+							<property class="policy/Content" name="Organizer/eventIcon6" value="display: block;"/>
+							<property class="policy/Content" name="Organizer/eventText6_1" value="left: 5.5u;"/>
+							<property class="policy/Content" name="Organizer/eventText6_2" value="left: 5.5u;"/>
+						</image>
+						<text id="Organizer/eventText6_1" class="eventText1" focusable="false">
+							<property class="Organizer/Event1stLine" name="ordinal" value="0x06"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton6" value="display: none;"/>
+							<property class="policy/emptyContent" name="eventButton6" value="nav-index: none;"/>
+							<property class="policy/Content" name="eventButton6" value="display: block;"/>
+							<property class="policy/Content" name="eventButton6" value="nav-index: auto;"/>
+						</text>
+						<text id="Organizer/eventText6_2" class="eventText2" focusable="false">
+							<property class="Organizer/Event2ndLine" name="ordinal" value="0x06"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the second event row -->
+							<property class="policy/emptyContent" name="Organizer/eventText6_2" value="display: none;"/>
+							<property class="policy/Content" name="Organizer/eventText6_2" value="display: block;"/>
+							<!-- emptyContent/nonEmptyContent policies defined for the calendar event box -->
+							<property class="policy/emptyContent" name="eventButton6" value="height: 12.5%;"/>
+							<property class="policy/Content" name="eventButton6" value="height: 27.0%;"/>
+						</text>
+					</button>
+
+					<!-- UI resources -->
+					<desc id="Organizer/NoEventsForToday">&qtn_ai_cale_no_event_today_short;</desc>
+					<desc id="Organizer/NoMoreEventsForToday">&qtn_ai_cale_no_more_ev_td_short;</desc>
+				</box>
+
+
+				<!--##############################
+					####    Player plugin     ####
+					##############################-->
+				<box id="playerPluginContainer" class="pluginContainer" focusable="false">
+					<!-- there is a fake button in the shortcut plugin area. It is
+					used to go around a bug in the animation system. It reserves a little space,
+					so this is to fix that space in this plugin -->
+					<button id="playerFakeButton" class="fakeButton" focusable="true" />
+					<button id="playerTitle" class="pluginTitle" focusable="true">
+						<text id="playerTitleText" class="titleText" focusable="false">&qtn_ai_player_title;</text>
+
+						<actions>
+
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="MusicPlayer/Library"/>
+							</action>
+
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="musicPlayerPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="playerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+
+							<action>
+								<trigger name="right"/>
+								<trigger name="left"/>
+								<event name="system/set">
+									<property name="id" value="playerPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+
+					</button>
+
+					<box id="playerInActive" focusable="false">
+						<text id="musicPlayerInActive" focusable="false">
+							&qtn_ai_player_no_tracks;
+						</text>
+					</box>
+					<!-- for faking the border in arabic layout -->
+					<box id="volumeIndicator" focusable="true">
+
+						<image id="musicPlayerInactiveVolumeDownIcon" path="SKIN(270501603 6420)" focusable="true"/>
+						<image id="musicPlayerVolumeDownIcon" path="SKIN(270501603 6419)" focusable="true">
+							<!-- TODO: Check if image can contain actions -->
+							<actions>
+								<action>
+									<trigger name="stylus"/>
+									<trigger name="activate"/>
+									<event name="MusicPlayer/VolDec"/>
+									<event name="system/setfocus">
+										<property name="id" value="volumeIndicator"/>
+									</event>
+								</action>
+
+							</actions>
+						</image>
+
+						<!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+						<image id="musicPlayerSpeakerIcon" path="SKIN(270501603 4332)" focusable="false"/>
+						<image id="musicPlayerSpeakerMutedIcon" path="SKIN(270501603 4334)" focusable="false"/>
+
+						<image id="musicPlayerVolumeIcon" focusable="false">
+							<property class="MusicPlayer/Volume"/>
+							<property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if (MusicPlayer/Vol0) display:block"/>
+							<property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+							<property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+							<property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol0) display:none"/>
+
+							<property class="policy/Resource" name="musicPlayerInactiveVolumeDownIcon" value="if (MusicPlayer/Vol0) display:block"/>
+							<property class="policy/Resource" name="musicPlayerInactiveVolumeDownIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+							<property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+							<property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol0) display:none"/>
+							<property class="policy/Resource" name="musicPlayerInactiveVolumeUpIcon" value="if (MusicPlayer/Vol10) display:block"/>
+							<property class="policy/Resource" name="musicPlayerInactiveVolumeUpIcon" value="if !(MusicPlayer/Vol10) display:none"/>
+							<property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol0, MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9 ) display:block"/>
+							<property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol10) display:none"/>
+						</image>
+
+						<image id="musicPlayerInactiveVolumeUpIcon" path="SKIN(270501603 6422)" focusable="true"/>
+						<image id="musicPlayerVolumeUpIcon" path="SKIN(270501603 6421)" focusable="true">
+							<!-- TODO: Check if image can contain actions -->
+							<actions>
+								<action>
+									<trigger name="stylus"/>
+									<trigger name="activate"/>
+									<event name="MusicPlayer/VolInc"/>
+									<event name="system/setfocus">
+										<property name="id" value="volumeIndicator"/>
+									</event>
+								</action>
+							</actions>
+						</image>
+						<actions>
+							<action>
+								<trigger name="left"/>
+								<event name="system/setfocus">
+									<property name="id" value="playerTitle"/>
+								</event>
+							</action>
+
+							<action>
+								<trigger name="up"/>
+								<event name="MusicPlayer/VolInc">
+								</event>
+							</action>
+
+							<action>
+								<trigger name="down"/>
+								<event name="MusicPlayer/VolDec">
+								</event>
+							</action>
+
+						<action>
+							<trigger name="losevisualisation"/>
+							<event name="system/setfocus">
+								<property name="id" value="playerTitle"/>
+							</event>
+						</action>
+						
+						<action>
+							<trigger name="gainfocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value=""/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>						
+						
+					</actions>
+
+					</box>
+
+					<box id="infoArea" focusable="false">
+						<box id="artistLine" focusable="false">
+							<text id="artistLine1" class="playerTextLine" focusable="false">
+								<property class="MusicPlayer/Artist"/>
+							</text>
+						</box>
+						<box id="trackLine" focusable="false">
+							<text id="trackLine1" class="playerTextLine" focusable="false">
+								<property class="MusicPlayer/Title"/>
+							</text>
+						</box>
+						<box id="durationLine" focusable="false">
+							<text id="time" class="playerTextLine" focusable="false">
+								<property class="MusicPlayer/Duration"/>
+							</text>
+						
+							<image id="statusIcon" class="playerStatusIcon" focusable="true">
+								<property class="MusicPlayer/Status"/>
+								<property class="policy/Content" name="volumeIndicator" value="display: block;"/>
+								<property class="policy/Content" name="infoArea" value="display: block;"/>
+								<property class="policy/Content" name="playerInActive" value="display: none;"/>
+								<property class="policy/emptyContent" name="playerInActive" value="display: block;"/>
+								<property class="policy/emptyContent" name="volumeIndicator" value="display: none;"/>
+								<property class="policy/emptyContent" name="infoArea" value="display: none;"/>
+							</image>
+
+							
+						</box>
+					</box>
+				<!-- Image resources -->
+				<desc id="MusicPlayer/PauseIcon" path="SKIN(270501603 5182)"/>
+				<desc id="MusicPlayer/PlayIcon" path="SKIN(270501603 5184)"/>
+				<desc id="MusicPlayer/Vol0" path="SKIN(270501603 6403)"/>
+				<desc id="MusicPlayer/Vol1" path="SKIN(270501603 6404)"/>
+				<desc id="MusicPlayer/Vol2" path="SKIN(270501603 6406)"/>
+				<desc id="MusicPlayer/Vol3" path="SKIN(270501603 6407)"/>
+				<desc id="MusicPlayer/Vol4" path="SKIN(270501603 6408)"/>
+				<desc id="MusicPlayer/Vol5" path="SKIN(270501603 6409)"/>
+				<desc id="MusicPlayer/Vol6" path="SKIN(270501603 6410)"/>
+				<desc id="MusicPlayer/Vol7" path="SKIN(270501603 6411)"/>
+				<desc id="MusicPlayer/Vol8" path="SKIN(270501603 6412)"/>
+				<desc id="MusicPlayer/Vol9" path="SKIN(270501603 6413)"/>
+				<desc id="MusicPlayer/Vol10" path="SKIN(270501603 6405)"/>
+				</box>
+
+				
+				<!--##############################
+					####    Visual/Internet Radio plugin     ####
+					##############################-->
+				<box id="radioPluginContainer" class="pluginContainer" focusable="false">
+					<!-- there is a fake button in the shortcut plugin area. It is
+					used to go around a bug in the animation system. It reserves a little space,
+					so this is to fix that space in this plugin -->
+					<button id="radioFakeButton" class="fakeButton" focusable="true" />
+					<button id="radioTitle" class="pluginTitle" focusable="true">
+						<image id="invisibleTitleStatus" class="invisibleRadioTitleIcon" focusable="false">
+                            <property class="VisualRadio/AppIcon" name="priority" value="0"/>
+                            <property class="InetRadio/AppIcon" name="priority" value="1"/>
+
+							<property class="policy/emptyContent" name="radioTitleText" value="display: block;"/>
+							<property class="policy/Resource" name="radioTitleText" value="if (VisualRadio/VRPlaying, VisualRadio/VRInactive, InetRadio/IRPlaying, InetRadio/IRStopped) display:none"/>
+
+							<property class="policy/emptyContent" name="visualRadioTitleText" value="display: none;"/>
+							<property class="policy/Resource" name="visualRadioTitleText" value="if (InetRadio/IRPlaying, InetRadio/IRStopped) display:none"/>
+							<property class="policy/Resource" name="visualRadioTitleText" value="if (VisualRadio/VRPlaying, VisualRadio/VRInactive) display:block"/>
+
+							<property class="policy/emptyContent" name="inetRadioTitleText" value="display: none;"/>
+							<property class="policy/Resource" name="inetRadioTitleText" value="if (VisualRadio/VRPlaying, VisualRadio/VRInactive) display:none"/>
+							<property class="policy/Resource" name="inetRadioTitleText" value="if (InetRadio/IRPlaying, InetRadio/IRStopped) display:block"/>
+
+							<property class="policy/emptyContent" name="radioVolumeIndicator" value="display: none;"/>
+							<property class="policy/Resource" name="radioVolumeIndicator" value="if (VisualRadio/VRInactive, InetRadio/IRStopped) display:none"/>
+							<property class="policy/Resource" name="radioVolumeIndicator" value="if (VisualRadio/VRPlaying, InetRadio/IRPlaying) display:block"/>
+
+							<property class="policy/emptyContent" name="radioInactive" value="display: block;"/>
+							<property class="policy/Resource" name="radioInactive" value="if (VisualRadio/VRInactive, InetRadio/IRStopped) display:block"/>
+							<property class="policy/Resource" name="radioInactive" value="if (VisualRadio/VRPlaying, InetRadio/IRPlaying) display:none"/>
+
+							<property class="policy/emptyContent" name="visualRadioInfoArea" value="display: none;"/>
+							<property class="policy/Resource" name="visualRadioInfoArea" value="if (VisualRadio/VRInactive, InetRadio/IRPlaying, InetRadio/IRStopped) display:none"/>
+							<property class="policy/Resource" name="visualRadioInfoArea" value="if (VisualRadio/VRPlaying) display:block"/>
+
+							<property class="policy/emptyContent" name="inetRadioInfoArea" value="display: none;"/>
+							<property class="policy/Resource" name="inetRadioInfoArea" value="if (InetRadio/IRStopped, VisualRadio/VRPlaying, VisualRadio/VRInactive) display:none"/>
+							<property class="policy/Resource" name="inetRadioInfoArea" value="if (InetRadio/IRPlaying) display:block"/>
+						</image>
+						<text id="radioTitleText" class="titleText" focusable="false">&qtn_vr_ai_radiolauncher;</text>
+						<text id="visualRadioTitleText" class="titleText" focusable="false">&qtn_vr_ai_vradio_title;</text>
+						<text id="inetRadioTitleText" class="titleText" focusable="false">&qtn_ir_ai_irapp_title;</text>
+
+						<actions>
+
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="VisualRadio/LaunchRadio"/>
+								<!-- Always let Visual Radio plug-in handle the launch event. It will start Radio Launcher. -->
+							</action>
+
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="radioPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="radioPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+
+							<action>
+								<trigger name="right"/>
+								<trigger name="left"/>
+								<event name="system/set">
+									<property name="id" value="radioPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+
+					</button>
+
+					<box id="radioInactive" focusable="false">
+						<text id="radioInactiveText" focusable="false">&qtn_vr_ai_radio_not_active;</text>
+					</box>
+
+					<box id="radioVolumeIndicator" focusable="true">
+
+						<image id="radioInactiveVolumeDownIcon" path="SKIN(270501603 6420)" focusable="true"/>
+						<image id="radioVolumeDownIcon" path="SKIN(270501603 6419)" focusable="true">
+							<!-- TODO: Check if image can contain actions -->
+							<actions>
+								<action>
+									<trigger name="stylus"/>
+									<trigger name="activate"/>
+									<event name="VisualRadio/VolDec"/>
+									<event name="InetRadio/VolDec"/>
+									<event name="system/setfocus">
+										<property name="id" value="radioVolumeIndicator"/>
+									</event>
+								</action>
+
+							</actions>
+						</image>
+
+						<!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+						<image id="radioSpeakerIcon" path="SKIN(270501603 4332)" focusable="false"/>
+						<image id="radioSpeakerMutedIcon" path="SKIN(270501603 4334)" focusable="false"/>
+
+						<image id="radioVolumeIcon" focusable="false">
+							<property class="VisualRadio/Volume" name="priority" value="0"/>
+							<property class="InetRadio/Volume" name="priority" value="1"/>
+							<property class="policy/Resource" name="radioSpeakerMutedIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+							<property class="policy/Resource" name="radioSpeakerMutedIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+							<property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+							<property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+
+							<property class="policy/Resource" name="radioInactiveVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+							<property class="policy/Resource" name="radioInactiveVolumeDownIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+							<property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+							<property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+							<property class="policy/Resource" name="radioInactiveVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:block"/>
+							<property class="policy/Resource" name="radioInactiveVolumeUpIcon" value="if !(VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+							<property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol0, VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, InetRadio/Vol0, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9 ) display:block"/>
+							<property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+						</image>
+
+						<image id="radioInactiveVolumeUpIcon" path="SKIN(270501603 6422)" focusable="true"/>
+						<image id="radioVolumeUpIcon" path="SKIN(270501603 6421)" focusable="true">
+							<!-- TODO: Check if image can contain actions -->
+							<actions>
+								<action>
+									<trigger name="stylus"/>
+									<trigger name="activate"/>
+									<event name="VisualRadio/VolInc"/>
+									<event name="InetRadio/VolInc"/>
+									<event name="system/setfocus">
+										<property name="id" value="radioVolumeIndicator"/>
+									</event>
+								</action>
+							</actions>
+						</image>
+						<actions>
+							<action>
+								<trigger name="left"/>
+								<event name="system/setfocus">
+									<property name="id" value="radioTitle"/>
+								</event>
+							</action>
+
+							<action>
+								<trigger name="up"/>
+								<event name="VisualRadio/VolInc"/>
+								<event name="InetRadio/VolInc"/>
+							</action>
+
+							<action>
+								<trigger name="down"/>
+								<event name="VisualRadio/VolDec"/>
+								<event name="InetRadio/VolDec"/>
+							</action>
+
+							<action>
+								<trigger name="losevisualisation"/>
+								<event name="system/setfocus">
+									<property name="id" value="radioTitle"/>
+								</event>
+							</action>
+						
+							<action>
+								<trigger name="gainfocus"/>
+								<event name ="system/set">
+									<property name="id" value="MSK"/>
+									<property name="name" value="label"/>
+									<property name="value" value=""/>
+									<property name="type" value="attribute"/>
+								</event>
+							</action>
+
+							<action>
+								<trigger name="losefocus"/>
+								<event name ="system/set">
+									<property name="id" value="MSK"/>
+									<property name="name" value="label"/>
+									<property name="value" value="&qtn_msk_open;"/>
+									<property name="type" value="attribute"/>
+								</event>
+							</action>						
+							
+						</actions>
+
+					</box>
+
+					<box id="visualRadioInfoArea" focusable="false">
+						<box id="visualRadioNameLine" focusable="false">
+							<text id="visualRadioNumberTextLine" class="visualRadioTextLine" focusable="false">
+								<property class="VisualRadio/Number"/>
+							</text>
+							<text id="visualRadioNameTextLine" class="visualRadioTextLine" focusable="false">
+								<property class="VisualRadio/Name"/>
+							</text>
+						</box>
+						<box id="visualRadioLocationLine" focusable="false">
+							<text id="visualRadioLocationTextLine" class="visualRadioTextLine" focusable="false">
+								<property class="VisualRadio/Location"/>
+							</text>
+						</box>
+						<box id="visualRadioFrequencyLine" focusable="false">
+							<text id="visualRadioFrequencyTextLine" class="visualRadioTextLine" focusable="false">
+								<property class="VisualRadio/Frequency"/>
+							</text>
+						</box>
+					</box>
+
+					<box id="inetRadioInfoArea" focusable="false">
+												
+						<box id="inetRadioPresetLine" focusable="false">
+							<text id="inetRadioPresetTextLine" class="inetRadioTextLine" focusable="false">
+								<property class="InetRadio/Preset"/> 
+							</text> 
+						</box>
+						<box id="inetRadioArtistLine" focusable="false">
+							<text id="inetRadioArtistTextLine" class="inetRadioTextLine" focusable="false">
+								 <property class="InetRadio/Artist"/>
+							</text>
+						</box>
+						<box id="inetRadioTrackLine" focusable="false">
+							<text id="inetRadioTrackTextLine" class="inetRadioTextLine" focusable="false">
+								 <property class="InetRadio/Track"/>
+							</text>
+						</box>
+					</box>
+
+					<!-- Image resources -->
+					<desc id="VisualRadio/Vol0" path="SKIN(270501603 6403)"/>
+					<desc id="VisualRadio/Vol1" path="SKIN(270501603 6404)"/>
+					<desc id="VisualRadio/Vol2" path="SKIN(270501603 6406)"/>
+					<desc id="VisualRadio/Vol3" path="SKIN(270501603 6407)"/>
+					<desc id="VisualRadio/Vol4" path="SKIN(270501603 6408)"/>
+					<desc id="VisualRadio/Vol5" path="SKIN(270501603 6409)"/>
+					<desc id="VisualRadio/Vol6" path="SKIN(270501603 6410)"/>
+					<desc id="VisualRadio/Vol7" path="SKIN(270501603 6411)"/>
+					<desc id="VisualRadio/Vol8" path="SKIN(270501603 6412)"/>
+					<desc id="VisualRadio/Vol9" path="SKIN(270501603 6413)"/>
+					<desc id="VisualRadio/Vol10" path="SKIN(270501603 6405)"/>
+					<!-- The following icons are not displayed, they just indicate which layout to use -->
+					<desc id="VisualRadio/VRPlaying" path="SKIN(270501603 5184)"/>
+					<desc id="VisualRadio/VRInactive" path="SKIN(270501603 5182)"/>
+
+					<desc id="InetRadio/Vol0" path="SKIN(270501603 6403)"/>
+					<desc id="InetRadio/Vol1" path="SKIN(270501603 6404)"/>
+					<desc id="InetRadio/Vol2" path="SKIN(270501603 6406)"/>
+					<desc id="InetRadio/Vol3" path="SKIN(270501603 6407)"/>
+					<desc id="InetRadio/Vol4" path="SKIN(270501603 6408)"/>
+					<desc id="InetRadio/Vol5" path="SKIN(270501603 6409)"/>
+					<desc id="InetRadio/Vol6" path="SKIN(270501603 6410)"/>
+					<desc id="InetRadio/Vol7" path="SKIN(270501603 6411)"/>
+					<desc id="InetRadio/Vol8" path="SKIN(270501603 6412)"/>
+					<desc id="InetRadio/Vol9" path="SKIN(270501603 6413)"/>
+					<desc id="InetRadio/Vol10" path="SKIN(270501603 6405)"/>
+                    <!-- The following icons are not displayed, they just indicate which layout to use -->
+                    <desc id="InetRadio/IRPlaying" path="SKIN(270501603 5184)"/>
+                    <desc id="InetRadio/IRStopped" path="SKIN(270501603 5182)"/>
+				</box>
+
+				
+				<!--########################################
+						#####    Personalization plugin    #####
+						########################################-->
+				<box id="personalizationPluginContainer" class="pluginContainer" focusable="false">
+					<!-- there is a fake button in the shortcut plugin area. It is
+					used to go around a bug in the animation system. It reserves a little space,
+					so this is to fix that space in this plugin -->
+					<button id="personalizationFakeButton"  class="fakeButton" focusable="true" />
+					<!-- Plugin title -->
+					<button id="personalizationPluginTitle" class="pluginTitle" focusable="true">
+						<text id="personalizationTitleText" class="titleText" focusable="false">&qtn_ai_pers_title;</text>
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Shortcut/LaunchByValue(localapp:0x100058EC?view=0x10207252)"/><!-- GS app, prsln plugin -->
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+					</button>
+
+
+					<!-- #1 -->
+					<button id="personalizationButton1" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<event name="Profile/SwapProfile(1)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+
+						<action>
+							<trigger name="gainfocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_select;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						<action>
+							<trigger name="losefocus"/>
+							<event name ="system/set">
+						 		<property name="id" value="MSK"/>
+						 		<property name="name" value="label"/>
+						 		<property name="value" value="&qtn_msk_open;"/>
+						 		<property name="type" value="attribute"/>
+							</event>
+						</action>
+
+						</actions>
+						<text id="personalizationText1" class="genericButtonText" focusable="false">
+							<property class="Profile/SwapProfileName"/>
+						</text>
+					</button>
+
+					<!-- #2 -->
+					<button id="personalizationButton2" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<!-- TODO: Open profile application main view -->
+								<event name="Shortcut/LaunchByValue(localapp:0x100058F8)"/> <!-- Profileapp uid -->
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="personalizationText2" class="genericButtonText" focusable="false">
+							&qtn_ai_pers_all_profiles;
+						</text>
+					</button>
+
+					<!-- #3 -->
+					<button id="personalizationButton3" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<!-- Opens the main view of Personalization application -->								
+								<event name="Shortcut/LaunchByValue(localapp:0x10005A32?view=0x102750AA)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="personalizationText3" class="genericButtonText" focusable="false">
+							&qtn_ai_pers_change_theme;
+						</text>
+					</button>
+
+					<!-- #4 -->
+					<button id="personalizationButton4" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<!-- Opens Wallpaper changing state in Personalization application -->
+								<event name="Shortcut/LaunchByValue(localapp:0x10005A32?view=2)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="personalizationText4" class="genericButtonText" focusable="false">
+							&qtn_ai_pers_change_wallpaper;
+						</text>
+					</button>
+
+					<!-- #5 -->
+					<button id="personalizationButton5" class="genericButton" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<!-- Open speed dial application shortcut -->
+								<event name="Shortcut/LaunchByValue(localapp:0x1000590A)"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="personalizationText5" class="genericButtonText" focusable="false">
+							&qtn_apps_sd_list;
+						</text>
+					</button>
+
+					<!-- #6 -->
+					<button id="personalizationButton6" class="genericButtonLastPosition" focusable="true">
+						<actions>
+							<action>
+								<trigger name="stylus"/>
+								<trigger name="activate"/>
+								<!-- Open shortcuts view in general settings -->
+								<event name="Shortcut/ShowSettings"/>
+							</action>
+							<action>
+								<trigger name="up"/>
+								<!-- joystick left -->
+								<event name="system/setfocus">
+									<property name="id" value="personalizationPluginIcon"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="personalizationPluginContainer"/>
+									<property name="name" value="display"/>
+									<property name="value" value="none"/>
+									<property name="type" value="string"/>
+								</event>
+								<event name="system/set">
+									<property name="id" value="SATAndNewstickerBox"/>
+									<property name="name" value="display"/>
+									<property name="value" value="block"/>
+									<property name="type" value="string"/>
+								</event>
+							</action>
+						</actions>
+						<text id="personalizationText6" class="genericButtonText" focusable="false">
+							&qtn_ai_pers_change_sc;
+						</text>
+					</button>
+				</box>
+
+			</box>	<!-- end of pluginContainerArea -->
+
+			<!--############################
+				 #####   SAT plugin     #####
+				############################-->
+			<box id="SATAndNewstickerBox" focusable="false">
+	        
+				<box id="SATPluginContainer" focusable="false">
+					<text id="SatIdleModeText" class="satText" focusable="false">
+						<property class="SAT/SatIdleModeText"/>
+						<!--  emptyContent/Content policies defined for the SAT plug-in box -->
+						<property class="policy/emptyContent" name="SATPluginContainer" value="display: none;"/>
+						<property class="policy/Content" name="SATPluginContainer" value="display: block;"/>
+						<property class="policy/Content" name="SatIdleModeIcon" value="display: block;"/>
+					</text>
+					<image id="SatIdleModeIcon" class="satIcon" focusable="false">
+						<property class="SAT/SatIdleModeIcon"/>
+						<property class="policy/Content" name="SatIdleModeText" value="margin-left: 4.0u;"/>
+						<property class="policy/emptyContent" name="SatIdleModeText" value="margin-left: 1.0u;"/>
+					</image>
+				</box>
+
+			</box>
+
+			<!--#################################################
+			    ####     Menubar with soft key shortcuts     ####
+			    #################################################-->
+			<menubar>
+				<menuitem id="SK1" label="">
+					<!-- ordinal value is the same as in the default settings -->
+					<property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000100"/>
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x01000100)"/>
+						</action>
+					</actions>
+				</menuitem>
+				<menuitem id="SK2" label="">
+					<property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000101"/>
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<!-- if using both activate and hold for same SK active trigger need to be specified like this (2 = keyup) otherwise hold will not work -->
+							<trigger name="activate"><property name="eventtype" value="2"/></trigger>
+							<event name="Shortcut/LaunchByIndex(0x01000101)"/>
+						</action>
+						<action>
+							<trigger name="hold"/>
+							<event name="Shortcut/LaunchByValue(localapp:0x10281867)"/>
+						</action>
+					</actions>
+				</menuitem>
+				<menuitem id="MSK" label="&qtn_msk_select;">
+					<actions>
+   					<action>
+							<trigger name="stylus">
+								<property name="clicked" value="down"/>
+							</trigger>
+							<event name="system/set">
+								<property name="id" value="msk_text"/>
+								<property name="name" value="display"/>
+								<property name="value" value="block"/>
+								<property name="type" value="string"/>
+							</event>
+						</action>
+					</actions>
+				</menuitem>				
+			</menubar>
+		</view>
+	</views>
+
+</xmluiml>
Binary file internetradio2.0/activeidlethemes/themes/ActiveIdle/iractiveidle.mif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ActiveIdle/qsn_fr_popup_sub_mask_icon.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg width="180" height="223" viewBox="0 0 180 223">
+<linearGradient id="_2" gradientUnits="userSpaceOnUse" x1="90" y1="212.79" x2="90" y2="7.79">
+<stop stop-color="#5F5F5F" offset="0"/>
+<stop stop-color="#FFFFFF" offset="1"/>
+</linearGradient>
+<rect fill="url(#_2)" width="180" height="223"/>
+</svg>
\ No newline at end of file
Binary file internetradio2.0/activeidlethemes/themes/ActiveIdle/vractiveidle.mif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle.css	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,563 @@
+
+/* What's this? */
+* {
+	nav-index: none;
+}
+
+/*******
+	VIEW
+********/
+
+view {
+	display: block; 
+	position: static; 	
+	width: 100%;
+	height: 100%;
+	direction: ltr;
+	block-progression: tb;
+	background-image: wallpaper;
+}
+
+menuitem#Shortcut_SK2{
+	_s60-longtap: true;
+}
+/**************************************
+	GENERAL DEFINITIONS FOR PLUGIN BOXES
+***************************************/
+
+box.pluginContainerBox { /* main_idle_act_pane */
+	position: static; 
+	border-top-width: 0.25u;
+	border-top-style: dotted;    /* linestyle of the box */
+	border-top-color: black;
+	width: auto;
+	nav-index: none;
+}
+/* everything else but the NT is inside this box */
+box#mainBox{
+	position: static;
+	width: auto;
+/* Block with flag '__NEWSTICKER' skipped. */
+	height: 100%;
+	nav-index: none;
+}
+
+/* settings for the pluginContainerBox during focus */
+box.pluginContainerBox:focus {
+  /*background-color: "SKIN(268458534 8448)"; *//* see S60_3_1_Reference_Icons_1.3.doc */
+	background-color: "SKIN(268458534 5120 9)";
+ }
+
+
+/************************
+	SHORTCUT PLUGIN AREA 
+*************************/
+
+/* box where the actual plugin information is shown */
+box#shortcutPluginContainer { /* ai_links_pane*/
+	margin-top: 0.5u;
+	height: 7.5u;
+	padding-left:  2u;
+	padding-right: 2u;
+	padding-top: /*0.7%;*/ 0.5u;
+	
+	block-progression: lr;
+}
+
+
+button.shortcutButton { /* cell_ai_link_pane */
+	width: auto;
+	height: 7u;
+	nav-index: auto;
+}
+
+
+button.shortcutButton:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5136)";
+}
+
+/* What's this ? */
+button#shortcutButton1 {  
+	_s60-initial-focus: 100; 
+}
+
+
+image.shortcutIcon { 
+	width: 7u;
+	height: 7u;
+	margin-left: auto;
+	margin-right: auto;
+	_s60-aspect-ratio: preserve;
+}
+
+
+/*
+	Border-style ja -width täytyy olla määriteltynä vaikka käytetään skinistä tulevaa LAF:ia (bg-image:auto;). 
+	Skini koostuu kahdesta osasta ja border-width määrittää myös skiniborderin.
+*/
+tooltip.shortcutTooltip { /* popup_ai_links_title_window */
+	width: 10.0u; /* any fixed lenghts works here if the owerflow is set to both tooltip and text inside it */
+/*height: 4.9u;*/
+	height: 5.5u;
+	border-style: solid; 
+	border-width: 5px; 
+	_s60-start-delay: 1000000;
+	_s60-display-time: 1000000;
+	background-color:"SKIN(268458534 8480)";	/* TODO: check */
+	overflow: visible;
+}
+
+
+text.shortcutTooltipText { /* popup_ai_links_title_window_t1 */
+	position: static;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	width: 100%;
+	height: 85%;
+	text-align: center;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	overflow: visible;
+	padding-right: 1u;
+	padding-left: 1u;
+	/*padding-top: 1u;*/
+	padding-bottom: 1u;
+}
+
+
+/*********************
+	PLAYER PLUGIN AREA 
+**********************/
+
+box#playerPlugin:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+box#playerPlugin{
+	height:5u;
+	display: none;
+	nav-index: none;
+	block-progression: lr;
+}
+
+image#playerStatusIcon {
+	display: block;
+	visibility: visible;
+	position: static;
+	top: 0.3u;
+	margin-left: 1.25u;
+	margin-top: 0.75u;
+	width: 3.5u;
+	height: 3.5u;
+}
+
+text#playerTitleText {
+	display: none;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 4u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	margin-left: 0.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+text#playerDurationText {
+	display: block;
+	visibility: visible;
+	position: static;
+	width: 11u;
+	margin-right: 0.75u;
+	text-align:right;
+	height: 4.0u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+/*********************
+	PLAYER VOLUME CONTROLL
+**********************/
+box#mpVolume {
+	display: none;
+	width: 40u;
+	height: 6u;	
+	position: absolute;
+	z-index: 2;
+	left: 5u;
+	top: 4.0u;
+	background-color:"SKIN(268458534 8480)";
+}
+
+image#musicPlayerVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerInactiveVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerSpeakerMutedIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 1.00u;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+/* 
+image#musicPlayerVolumeIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 10u;
+	width: 20u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+
+*/
+
+volumecontrol#musicPlayerVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 10.0u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+
+slider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+	
+}
+
+image#musicPlayerVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerInactiveVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+
+/*********************
+	VISUAL/INTERNET RADIO PLUGIN AREA 
+**********************/
+
+box#radioPlugin:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+box#radioPlugin{
+	height:5u;
+	display: none;
+	nav-index: none;
+	block-progression: lr;
+}
+
+image#radioStatusIcon {
+	display: block;
+	visibility: visible;
+	position: static;
+	top: 0.3u;
+	margin-left: 1.25u;
+	margin-top: 0.75u;
+	width: 3.5u;
+	height: 3.5u;
+}
+
+text#radioTitleText {
+	display: none;
+	visibility: visible;
+	position: static;
+	width: auto;
+	height: 4u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	margin-left: 0.5u;
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+
+/*********************
+	VISUAL/INTERNETRADIO VOLUME CONTROL
+**********************/
+box#radioVolume {
+	display: none;
+	width: 40u;
+	height: 6u;	
+	position: absolute;
+	z-index: 2;
+	left: 5u;
+	top: 4.0u;
+	background-color:"SKIN(268458534 8480)";
+}
+
+image#radioVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#radioInactiveVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#radioSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+image#radioSpeakerMutedIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 1.00u;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+volumecontrol#radioVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 10.0u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+
+slider#radioSlider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#radioVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#radioInactiveVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+
+/******************
+	SAT PLUGIN AREA 
+*******************/
+
+box#SATPluginContainer {
+	display: none;  /*block;*/
+	nav-index: none; /* SAT is not focusable */
+	height: 5u;
+	position: static;
+	/*block-progression: lr;*/
+	direction: rtl;
+	block-progression: rl;
+}
+
+
+image.satIcon	{
+	display: block;
+	visibility: visible;
+	position: static;
+	margin-top: 0.25u;
+	margin-left: 0.7u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+text.satText	{
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;	
+	top: 0.25u;
+	margin-top: 0.25u;
+	margin-right: 1.0u;
+	margin-left: 0.55u;
+	height: 4.25u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;         /* TODO: check */
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+
+/************************
+	CALENDAR PLUGIN AREA 
+*************************/
+
+box#calendarPluginContainer:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+box#calendarPluginContainer {
+	display: block;
+	height: adaptive;
+	padding-bottom: 1u;
+}
+
+
+button.calendarEntryBox {
+	display: none;
+	visibility: visible;
+	height: auto;
+}
+
+
+image.calendarEntryIcon { /* ai_gene_pane_1_g1 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 0.5u;
+	left: 0.7u;
+	width: 4u;
+	height: 4u;
+}
+
+text.calendarEntryText1 { /* ai_gene_pane_1_t1 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;	
+	top: 0.0u;
+	left: 5.75u;
+	right: 0.9u;
+	height: 4.25u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+text.calendarEntryText2 { /* ai_gene_pane_2_t1 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;	
+	top: 4.25u;
+	left: 5.75u;
+	right: 0.9u;
+	height: 4.25u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+/* priorities for calendar buttons, the lower we go, the less priority the button has --> if it does not fit on the screen it will be dropped*/
+/* please note that the priority ID must be unique for each element defined --> do not use it via class element */
+button#calendarEntryBox1{ _s60-display-priority: 21; }
+button#calendarEntryBox2{ _s60-display-priority: 22; }
+button#calendarEntryBox3{ _s60-display-priority: 23; }
+button#calendarEntryBox4{ _s60-display-priority: 24; }
+button#calendarEntryBox5{ _s60-display-priority: 25; }
+button#calendarEntryBox6{ _s60-display-priority: 26; }
+button#calendarEntryBox7{ _s60-display-priority: 27; }
+button#calendarEntryBox8{ _s60-display-priority: 28; }
+
+/* Block with flag '__NEWSTICKER' skipped. */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "ClassicIdle.dtd">
+<PartOf  : "Active Idle 2">
+
+<FileDescription: "<Description of file>">
+<FileVersion    : "<Version>">
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+<!--
+qtn_ai_skin_full_page.attributes
+qtn_ai_skin_full_page.layout "list_single_graphic_pane_t1"
+qtn_ai_skin_full_page.release "3.2"
+qtn_ai_skin_full_page.description "Title of the theme"
+qtn_ai_skin_full_page.parents "list_single_graphic_pane"
+-->
+<!ENTITY qtn_ai_skin_full_page "Full Page">
+
+<!--
+shortcut_EmptyCaption.attributes
+shortcut_EmptyCaption.layout "list_ai2_gene_pane_t1"
+shortcut_EmptyCaption.release "3.2"
+shortcut_EmptyCaption.description "Empty shortcut"
+shortcut_EmptyCaption.parents "list_ai2_gene_pane"
+-->
+<!ENTITY shortcut_EmptyCaption " ">
+
+<!--
+qtn_set_idle_skey_new_msg.attributes
+qtn_set_idle_skey_new_msg.layout "list_ai2_gene_pane_t1"
+qtn_set_idle_skey_new_msg.release "3.2"
+qtn_set_idle_skey_new_msg.description "New message shortcut"
+qtn_set_idle_skey_new_msg.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_set_idle_skey_new_msg "New message">
+
+<!--
+qtn_set_idle_skeys_email_editor.attributes
+qtn_set_idle_skeys_email_editor.layout "list_ai2_gene_pane_t1"
+qtn_set_idle_skeys_email_editor.release "3.2"
+qtn_set_idle_skeys_email_editor.description "New e-mail shortcut"
+qtn_set_idle_skeys_email_editor.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_set_idle_skeys_email_editor "New e-mail">
+
+<!--
+qtn_apps_syncml_mail_gs.attributes
+qtn_apps_syncml_mail_gs.layout "list_ai2_gene_pane_t1"
+qtn_apps_syncml_mail_gs.release "3.2"
+qtn_apps_syncml_mail_gs.description "New SyncML mail shortcut"
+qtn_apps_syncml_mail_gs.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_apps_syncml_mail_gs "New SyncML mail">
+
+<!--
+qtn_apps_mmspostcard_gs.attributes
+qtn_apps_mmspostcard_gs.layout "list_ai2_gene_pane_t1"
+qtn_apps_mmspostcard_gs.release "3.2"
+qtn_apps_mmspostcard_gs.description "New MMS postcard shortcut"
+qtn_apps_mmspostcard_gs.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_apps_mmspostcard_gs "New MMS Postcard">
+
+<!--
+qtn_apps_audio_msg_gs.attributes
+qtn_apps_audio_msg_gs.layout "list_ai2_gene_pane_t1"
+qtn_apps_audio_msg_gs.release "3.2"
+qtn_apps_audio_msg_gs.description "New audio message shortcut"
+qtn_apps_audio_msg_gs.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_apps_audio_msg_gs "New Audio msg">
+
+<!--
+qtn_set_idle_skey_select_msg_type.attributes
+qtn_set_idle_skey_select_msg_type.layout "list_ai2_gene_pane_t1"
+qtn_set_idle_skey_select_msg_type.release "3.2"
+qtn_set_idle_skey_select_msg_type.description "Select message type shortcut"
+qtn_set_idle_skey_select_msg_type.parents "list_ai2_gene_pane"
+-->
+<!ENTITY qtn_set_idle_skey_select_msg_type "Select msg type">
+
+<!--
+qtn_apps_idle_skin_gs.attributes
+qtn_apps_idle_skin_gs.layout "list_single_large_graphic_pane_t1_cp2"
+qtn_apps_idle_skin_gs.release "3.2"
+qtn_apps_idle_skin_gs.description "Change theme shortcut"
+qtn_apps_idle_skin_gs.parents "list_single_large_graphic_pane_cp2"
+-->
+<!ENTITY qtn_apps_idle_skin_gs  "Change idle theme">
+
+<!--
+qtn_idle_skey_new_msg.attributes
+qtn_idle_skey_new_msg.layout "control_pane_t2"
+qtn_idle_skey_new_msg.release "3.2"
+qtn_idle_skey_new_msg.description "New message shortcut"
+qtn_idle_skey_new_msg.parents "control_pane"
+-->
+<!ENTITY qtn_idle_skey_new_msg  "New msg.">
+
+<!--
+qtn_apps_email_skey.attributes
+qtn_apps_email_skey.layout "control_pane_t2"
+qtn_apps_email_skey.release "3.2"
+qtn_apps_email_skey.description "New e-mail shortcut"
+qtn_apps_email_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_email_skey  "New mail">
+
+<!--
+qtn_apps_syncml_mail_skey.attributes
+qtn_apps_syncml_mail_skey.layout "control_pane_t2"
+qtn_apps_syncml_mail_skey.release "3.2"
+qtn_apps_syncml_mail_skey.description "New SyncML mail shortcut"
+qtn_apps_syncml_mail_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_syncml_mail_skey  "New sync.mail">
+
+<!--
+qtn_apps_mmspostcard_skey.attributes
+qtn_apps_mmspostcard_skey.layout "control_pane_t2"
+qtn_apps_mmspostcard_skey.release "3.2"
+qtn_apps_mmspostcard_skey.description "New MMS postcard shortcut"
+qtn_apps_mmspostcard_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_mmspostcard_skey  "New postcard">
+
+<!--
+qtn_apps_audio_msg_skey.attributes
+qtn_apps_audio_msg_skey.layout "control_pane_t2"
+qtn_apps_audio_msg_skey.release "3.2"
+qtn_apps_audio_msg_skey.description "New audio message shortcut"
+qtn_apps_audio_msg_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_audio_msg_skey  "New audiomsg">
+
+<!--
+qtn_apps_idle_skin_skey.attributes
+qtn_apps_idle_skin_skey.layout "control_pane_t2"
+qtn_apps_idle_skin_skey.release "3.2"
+qtn_apps_idle_skin_skey.description "Change theme shortcut"
+qtn_apps_idle_skin_skey.parents "control_pane"
+-->
+<!ENTITY qtn_apps_idle_skin_skey  "Idle theme">
+
+<!--
+text_softkey_back.attributes
+text_softkey_back.layout "control_pane_t2"
+text_softkey_back.release "3.2"
+text_softkey_back.description "Back text for SK2"
+text_softkey_back.parents "control_pane"
+-->
+<!ENTITY text_softkey_back  "Back">
+
+<!--
+qtn_msk_select.attributes
+qtn_msk_select.layout "control_pane_t3/opt3"
+qtn_msk_select.release "3.2"
+qtn_msk_select.description "Select text for MSK"
+qtn_msk_select.parents "control_pane"
+-->
+<!ENTITY qtn_msk_select  "Select">
+
+<!--
+qtn_msk_open.attributes
+qtn_msk_open.layout "control_pane_t3/opt3"
+qtn_msk_open.release "3.2"
+qtn_msk_open.description "Open text for MSK"
+qtn_msk_open.parents "control_pane"
+-->
+<!ENTITY qtn_msk_open  "Open">
+
+<!--
+qtn_ai_cale_no_event_today.attributes
+qtn_ai_cale_no_event_today.layout "ai2_gene_pane_t1"
+qtn_ai_cale_no_event_today.release "3.2"
+qtn_ai_cale_no_event_today.description "String for no more calendar events for today"
+qtn_ai_cale_no_event_today.parents "ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_cale_no_event_today  "No calendar events for today">
+
+<!--
+qtn_ai_cale_no_more_ev_td.attributes
+qtn_ai_cale_no_more_ev_td.layout "ai2_gene_pane_t1"
+qtn_ai_cale_no_more_ev_td.release "3.2"
+qtn_ai_cale_no_more_ev_td.description "String for no more events for today"
+qtn_ai_cale_no_more_ev_td.parents "ai2_gene_pane"
+-->
+<!ENTITY qtn_ai_cale_no_more_ev_td  "No more events for Today">
+
+<!-- End of File-->
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1386 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xmluiml SYSTEM "ClassicIdle.dtd">
+<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
+
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+
+  <!--Application events -->
+  <actions>
+    <action>
+      <trigger name="startup"/>
+      <trigger name="uidefinitionmodificationend"/>
+      <event name="READY"/>
+    </action>
+    <action>
+      <trigger name="shutdown"/>
+      <event name="DOWN"/>
+    </action>
+    <action>
+      <trigger name="uidefinitionmodificationstart"/>
+      <event name="NEW_UI"/>
+    </action>
+    <action>
+      <trigger name="screendevicechange"/>
+      <event name="LAYOUT"/>
+    </action>
+  </actions>
+
+  <!-- UI resources for Shortcut plugin -->
+  <desc id="Shortcut/EmptyCaption">&shortcut_EmptyCaption;</desc>
+  <desc id="Shortcut/BackCaption">&text_softkey_back;</desc>
+  <desc id="Shortcut/NewMessageCaption">&qtn_set_idle_skey_new_msg;</desc>
+  <desc id="Shortcut/NewEmailCaption">&qtn_set_idle_skeys_email_editor;</desc>
+  <desc id="Shortcut/NewSyncMLMailCaption">&qtn_apps_syncml_mail_gs;</desc>
+  <desc id="Shortcut/NewPostcardCaption">&qtn_apps_mmspostcard_gs;</desc>
+  <desc id="Shortcut/NewAudioMsgCaption">&qtn_apps_audio_msg_gs;</desc>
+  <desc id="Shortcut/SelectMsgTypeCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+  <desc id="Shortcut/ChangeThemeCaption">&qtn_apps_idle_skin_gs;</desc>
+  <desc id="Shortcut/NewMessageShortCaption">&qtn_idle_skey_new_msg;</desc>
+  <desc id="Shortcut/NewEmailShortCaption">&qtn_apps_email_skey;</desc>
+  <desc id="Shortcut/NewSyncMLMailShortCaption">&qtn_apps_syncml_mail_skey;</desc>
+  <desc id="Shortcut/NewPostcardShortCaption">&qtn_apps_mmspostcard_skey;</desc>
+  <desc id="Shortcut/NewAudioMsgShortCaption">&qtn_apps_audio_msg_skey;</desc>
+  <desc id="Shortcut/SelectMsgTypeShortCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+  <desc id="Shortcut/ChangeThemeShortCaption">&qtn_apps_idle_skin_skey;</desc>
+
+  <!-- UI resources for MP plugin -->
+  <desc id="MusicPlayer/PauseIcon" path="SKIN(270501603 5182)"/>
+  <desc id="MusicPlayer/PlayIcon" path="SKIN(270501603 5184)"/>
+
+  <desc id="MusicPlayer/Vol0">0</desc>
+  <desc id="MusicPlayer/Vol1">1</desc>
+  <desc id="MusicPlayer/Vol2">2</desc>
+  <desc id="MusicPlayer/Vol3">3</desc>
+  <desc id="MusicPlayer/Vol4">4</desc>
+  <desc id="MusicPlayer/Vol5">5</desc>
+  <desc id="MusicPlayer/Vol6">6</desc>
+  <desc id="MusicPlayer/Vol7">7</desc>
+  <desc id="MusicPlayer/Vol8">8</desc>
+  <desc id="MusicPlayer/Vol9">9</desc>
+  <desc id="MusicPlayer/Vol10">10</desc>
+	
+  <!-- UI resources for Visual/Internet radio plugin -->
+  <desc id="VisualRadio/Vol0">0</desc>
+  <desc id="VisualRadio/Vol1">1</desc>
+  <desc id="VisualRadio/Vol2">2</desc>
+  <desc id="VisualRadio/Vol3">3</desc>
+  <desc id="VisualRadio/Vol4">4</desc>
+  <desc id="VisualRadio/Vol5">5</desc>
+  <desc id="VisualRadio/Vol6">6</desc>
+  <desc id="VisualRadio/Vol7">7</desc>
+  <desc id="VisualRadio/Vol8">8</desc>
+  <desc id="VisualRadio/Vol9">9</desc>
+  <desc id="VisualRadio/Vol10">10</desc>
+  <desc id="VisualRadio/VRPlaying" path="vrclassicidle.mif#0"/>
+  <desc id="VisualRadio/VRInactive" path="vrclassicidle.mif#0"/> <!-- Same icon -->
+
+  <desc id="InetRadio/Vol0">0</desc>
+  <desc id="InetRadio/Vol1">1</desc>
+  <desc id="InetRadio/Vol2">2</desc>
+  <desc id="InetRadio/Vol3">3</desc>
+  <desc id="InetRadio/Vol4">4</desc>
+  <desc id="InetRadio/Vol5">5</desc>
+  <desc id="InetRadio/Vol6">6</desc>
+  <desc id="InetRadio/Vol7">7</desc>
+  <desc id="InetRadio/Vol8">8</desc>
+  <desc id="InetRadio/Vol9">9</desc>
+  <desc id="InetRadio/Vol10">10</desc>
+  <desc id="InetRadio/IRPlaying" path="irclassicidle.mif#0"/>
+  <desc id="InetRadio/IRStopped" path="irclassicidle.mif#2"/>
+
+  <!-- UI resources for Organizer -->
+  <desc id="Organizer/NoEventsForToday">&qtn_ai_cale_no_event_today;</desc>
+  <desc id="Organizer/NoMoreEventsForToday">&qtn_ai_cale_no_more_ev_td;</desc>
+  <desc id="Organizer/IconAnniv" path="SKIN(268458241 2)"/>
+  <desc id="Organizer/IconAppt" path="SKIN(268458241 4)"/>
+  <desc id="Organizer/IconMemo" path="SKIN(268458241 6)"/>
+  <desc id="Organizer/IconTodo" path="SKIN(270501603 5126)"/>
+  <desc id="Organizer/IconMeetAccepted" path="SKIN(270501603 5508)"/>
+  <desc id="Organizer/IconMeetNotAnswered" path="SKIN(270501603 5511)"/>
+  <desc id="Organizer/IconMeetTentative" path="SKIN(270501603 5514)"/>
+  
+  <!-- Views -->
+  <views>
+
+    <!--################################
+        ####         AI plug-ins    ####
+        ################################-->
+    <property class="ContentSource" name="Shortcut" value="0x102750FA" load_ordinal="1"/>
+    <property class="ContentSource" name="Organizer" value="0x102750FE" load_ordinal="2"/>
+    <property class="ContentSource" name="MusicPlayer" value="0x10207B73" load_ordinal="3"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+    <property class="ContentSource" name="SAT" value="0x102078EB" load_ordinal="5"/>
+    <property class="ContentSource" name="VisualRadio" value="0x10208A89" load_ordinal="6"/>
+    <property class="ContentSource" name="InetRadio" value="0x2000B4A7" load_ordinal="7"/>
+
+    <!--###################################
+        ### Plug-in specific settings   ###
+        ###################################-->
+
+    <!--################################
+        ## Shortcut plug-in settings  ##
+        ################################-->
+
+    <!-- Always visible shortcuts -->
+    <!-- NOTE: these indexes start from 1 -->
+    <!-- Shortcut #1, Messaging -->
+    <property class="Settings/Shortcut" name="0x00000001" value="localapp:0x100058C5"/>
+    <!-- Shortcut #2, Phonebook -->
+    <property class="Settings/Shortcut" name="0x00000002" value="localapp:0x101F4CCE"/>
+    <!-- Shortcut #3, Clock -->
+    <property class="Settings/Shortcut" name="0x00000003" value="localapp:0x10005903"/>
+    <!-- Shortcut #4, Media Gallery 2 -->
+    <property class="Settings/Shortcut" name="0x00000004" value="localapp:0x101F8599"/>
+    <!-- Shortcut #5, Browser -->
+    <property class="Settings/Shortcut" name="0x00000005" value="localapp:0x10008D39"/>
+    <!-- Shortcut #6, Change theme -->
+    <property class="Settings/Shortcut" name="0x00000006" value="localapp:0x10005A32?view=0x102750A7"/>
+
+    <!-- Optionally visible shortcuts -->
+    <!-- Soft key #1, Applications -->
+    <property class="Settings/Shortcut" name="0x01000100" value="localapp:0x101F4CD2"/>
+    <!-- Soft key #2, Contacts -->
+    <property class="Settings/Shortcut" name="0x01000101" value="localapp:0x101F4CCE"/>
+
+
+    <!-- #################################
+         ## Organizer plug-in settings  ##
+         ################################# -->
+
+    <!-- Item count and size settings -->
+    <!-- Total line count -->
+    <property class="Settings/Organizer" name="0x01" value="8"/>
+
+    <!-- Timed item line count -->
+    <property class="Settings/Organizer" name="0x02" value="2"/>
+
+    <!-- Non Timed item line count -->
+    <property class="Settings/Organizer" name="0x03" value="1"/>
+
+    <!-- Line count reserved for non timed items -->
+    <property class="Settings/Organizer" name="0x04" value="0"/>
+
+    <!-- Publish end time for upcoming timed items -->
+    <property class="Settings/Organizer" name="0x05" value="1"/>
+
+    <!-- Use alternate publishing for upcoming and ongoing items -->
+    <property class="Settings/Organizer" name="0x06" value="1"/>
+
+    <!-- Open event to viewer 0 / editor 1 -->
+    <property class="Settings/Organizer" name="0x07" value="0"/>
+
+    <!-- Main view -->
+
+    <view id="ActiveIdleView">
+
+      <!-- move focus to 1st SC if END key is pressed -->
+      <actions>
+        <action id="KeyEnd">
+          <trigger name="keyevent">
+            <property name="scancode" value="197"/><!-- End key -->
+            <property name="eventtype" value="1"/>
+          </trigger>
+        <!-- switch the tooltip temporary OFF because we do not want to see it when ENDKEY -->
+        <event name ="system/set">
+          <property name="name" value="display"/>
+          <property name="value" value="none"/>
+          <property name="type" value="string"/>
+          <property name="id" value="shortcutTooltip1"/>
+        </event>          
+          <event name="system/setfocus">
+            <property name="id" value="shortcutButton1"/>
+          </event>
+        <!-- ENDKEY is handled we can turn the tooltip back ON. We could do this also in SC1 and with loseFocus event, but that is very slow and  overloading -->
+        <event name ="system/set">
+          <property name="name" value="display"/>
+          <property name="value" value="block"/>
+          <property name="type" value="string"/>
+          <property name="id" value="shortcutTooltip1"/>
+        </event>
+        </action>
+<!--
+        <action id="FocusToIdle">
+          <trigger name="gainfocus">
+            </trigger>
+          <event name="system/setfocus">
+            <property name="id" value="shortcutButton1"/>
+          </event>
+        </action>
+-->
+
+
+<![CDATA[       <action><!-- This functionality is not yet required so it is left out in reference themes in rel. 3.2 -->
+          <trigger name="keyevent">
+            <property name="scancode" value="19"/><!-- Edit key -->
+          </trigger>
+          <event name="Shortcut/LaunchByValue(localapp:0x10005907)"/><!-- Notepad -->
+        </action>]]>
+      </actions>
+
+    <!--#######################################################################
+        #####      MainBox. Everything but the NT is inside this box      #####
+        #######################################################################-->
+    <box id="mainBox" focusable="false">
+    <!--#####################################
+        #####      Shortcut plugin      #####
+        #####################################-->
+      <box id="shortcutPluginContainer" class="pluginContainerBox" focusable="false">
+<!--
+        <actions>
+          <action>
+            <trigger name="gainfocus"/>
+              <event name="system/setfocus">
+                <property name="id" value="shortcutButton1"/>
+              </event>
+          </action>
+        </actions>
+-->
+        <!-- Shortcut items -->
+
+        <!-- #1 -->
+        <button id="shortcutButton1" class="shortcutButton" focusable="true">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x00000001)"/>
+            </action>
+            <action>
+            <trigger name="up"/><!-- joystick up -->
+              <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+                <property name="id" value="calendarPluginContainer"/>
+              </event>
+            </action>
+            <action>
+              <trigger name="down"/><!-- joystick down -->
+              <event name="system/setfocus">
+                <property name="id" value="playerPlugin"/>
+                <property name="id" value="radioPlugin"/>
+                <property name="id" value="calendarPluginContainer"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </event>
+            </action>
+          </actions>
+          <image id="Shortcut_shortcutIcon1" class="shortcutIcon" focusable="false">
+            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000001"/>
+          </image>
+          <tooltip id="shortcutTooltip1" class="shortcutTooltip" focusable="false">
+            <text id="Shortcut_shortcutTooltipText1" class="shortcutTooltipText" focusable="false">
+              <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000001"/>
+            </text>
+          </tooltip>
+        </button>
+
+        <!-- #2 -->
+        <button id="shortcutButton2" class="shortcutButton" focusable="true">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x00000002)"/>
+            </action>
+            <action>
+            <trigger name="up"/><!-- joystick up -->
+              <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+                <property name="id" value="calendarPluginContainer"/>
+              </event>
+            </action>
+            <action>
+              <trigger name="down"/><!-- joystick down -->
+                <event name="system/setfocus">
+                <property name="id" value="playerPlugin"/>
+                <property name="id" value="radioPlugin"/>
+                <property name="id" value="calendarPluginContainer"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </event>
+            </action>
+          </actions>
+          <image id="Shortcut_shortcutIcon2" class="shortcutIcon" focusable="false">
+            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000002"/>
+          </image>
+          <tooltip id="Shortcut_shortcutTooltip2" class="shortcutTooltip" focusable="false">
+            <text id="Shortcut_shortcutTooltipText2" class="shortcutTooltipText" focusable="false">
+              <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000002"/>
+            </text>
+          </tooltip>
+        </button>
+
+        <!-- #3 -->
+        <button id="shortcutButton3" class="shortcutButton" focusable="true">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x00000003)"/>
+            </action>
+            <action>
+            <trigger name="up"/><!-- joystick up -->
+              <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+                <property name="id" value="calendarPluginContainer"/>
+              </event>
+            </action>
+            <action>
+              <trigger name="down"/><!-- joystick down -->
+              <event name="system/setfocus">
+                <property name="id" value="playerPlugin"/>
+                <property name="id" value="radioPlugin"/>
+                <property name="id" value="calendarPluginContainer"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </event>
+            </action>
+          </actions>
+          <image id="Shortcut_shortcutIcon3" class="shortcutIcon" focusable="false">
+            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000003"/>
+          </image>
+          <tooltip id="shortcutTooltip3" class="shortcutTooltip" focusable="false">
+            <text id="Shortcut_shortcutTooltipText3" class="shortcutTooltipText" focusable="false">
+              <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000003"/>
+            </text>
+          </tooltip>
+        </button>
+
+        <!-- #4 -->
+        <button id="shortcutButton4" class="shortcutButton" focusable="true">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x00000004)"/>
+            </action>
+            <action>
+            <trigger name="up"/><!-- joystick up -->
+              <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+                <property name="id" value="calendarPluginContainer"/>
+              </event>
+            </action>
+            <action>
+              <trigger name="down"/><!-- joystick down -->
+              <event name="system/setfocus">
+                <property name="id" value="playerPlugin"/>
+                <property name="id" value="radioPlugin"/>
+                <property name="id" value="calendarPluginContainer"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </event>
+            </action>
+          </actions>
+          <image id="Shortcut_shortcutIcon4" class="shortcutIcon" focusable="false">
+            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000004"/>
+          </image>
+          <tooltip id="Shortcut_shortcutTooltip4" class="shortcutTooltip" focusable="false">
+            <text id="Shortcut_shortcutTooltipText4" class="shortcutTooltipText" focusable="false">
+              <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000004"/>
+            </text>
+          </tooltip>
+        </button>
+
+        <!-- #5 -->
+        <button id="shortcutButton5" class="shortcutButton" focusable="true">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x00000005)"/>
+            </action>
+            <action>
+            <trigger name="up"/><!-- joystick up -->
+              <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+                <property name="id" value="calendarPluginContainer"/>
+              </event>
+            </action>
+            <action>
+              <trigger name="down"/><!-- joystick down -->
+              <event name="system/setfocus">
+                <property name="id" value="playerPlugin"/>
+                <property name="id" value="radioPlugin"/>
+                <property name="id" value="calendarPluginContainer"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </event>
+            </action>
+          </actions>
+          <image id="Shortcut_shortcutIcon5" class="shortcutIcon" focusable="false">
+              <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000005"/>
+          </image>
+          <tooltip id="shortcutTooltip5" class="shortcutTooltip" focusable="false">
+            <text id="Shortcut_shortcutTooltipText5" class="shortcutTooltipText" focusable="false">
+              <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000005"/>
+            </text>
+          </tooltip>
+        </button>
+
+        <!-- #6 -->
+        <button id="shortcutButton6" class="shortcutButton" focusable="true">
+          <actions>
+            <action>
+              <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x00000006)"/>
+            </action>
+            <action>
+            <trigger name="up"/><!-- joystick up -->
+              <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+                <property name="id" value="calendarPluginContainer"/>
+              </event>
+            </action>
+            <action>
+              <trigger name="down"/><!-- joystick down -->
+              <event name="system/setfocus">
+                <property name="id" value="playerPlugin"/>
+                <property name="id" value="radioPlugin"/>
+                <property name="id" value="calendarPluginContainer"/>
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              </event>
+            </action>
+          </actions>
+          <image id="Shortcut_shortcutIcon6" class="shortcutIcon" focusable="false">
+              <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000006"/>
+          </image>
+          <tooltip id="shortcutTooltip6" class="shortcutTooltip" focusable="false">
+            <text id="Shortcut_shortcutTooltipText6" class="shortcutTooltipText" focusable="false">
+              <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000006"/>
+            </text>
+          </tooltip>
+        </button>
+      </box>
+      
+    <!--#######################################
+        #####          SAT plugin         #####
+        #######################################-->
+
+      <box id="SATPluginContainer" class="pluginContainerBox" focusable="false">
+
+<!--      
+      <actions>
+          <action>
+            <trigger name="stylus"/>
+            <trigger name="activate"/>
+            <event name="SAT/LaunchSatapp"/>
+          </action>
+
+          <action>
+            <trigger name="losevisualisation"/>
+              <event name="system/setfocus">
+              <property name="id" value="shortcutButton1"/>
+              </event>
+          </action>
+          
+          <action>
+            <trigger name="gainfocus"/>
+            <event name ="system/set">
+              <property name="id" value="MSK"/>
+              <property name="name" value="label"/>
+              <property name="value" value=""/>
+              <property name="type" value="attribute"/>
+            </event>
+          </action>
+
+          <action>
+            <trigger name="losefocus"/>
+            <event name ="system/set">
+              <property name="id" value="MSK"/>
+              <property name="name" value="label"/>
+              <property name="value" value="&qtn_msk_open;"/>
+              <property name="type" value="attribute"/>
+            </event>
+          </action>
+
+          <action>
+          <trigger name="left"/>
+            <event name="system/setfocus">
+            <property name="id" value="calendarPluginContainer"/>
+            </event>
+          </action>
+
+          <action>
+            <trigger name="right"/>
+            <event name="system/setfocus">
+            <property name="id" value="shortcutButton1"/>
+            </event>
+          </action>
+
+      </actions>
+-->
+      
+        <text id="SatIdleModeText" class="satText" focusable="false">
+          <property class="SAT/SatIdleModeText"/>
+          <property class="policy/emptyContent" name="SATPluginContainer" value="display: none;"/>
+          <property class="policy/emptyContent" name="mpVolume" value="top: 4u;"/> <!-- we are not active reset MP pop-up to it's original location -->
+          <property class="policy/emptyContent" name="radioVolume" value="top: 4u;"/> <!-- we are not active reset radio pop-up to it's original location -->
+          <property class="policy/Content" name="SATPluginContainer" value="display: block;"/>
+          <property class="policy/Content" name="SatIdleModeIcon" value="display: block;"/>
+          <property class="policy/Content" name="mpVolume" value="top: 9u;"/> <!-- in case MP is active we need to adjust its pop-up location from here -->
+          <property class="policy/Content" name="radioVolume" value="top: 9u;"/> <!-- in case radio is active we need to adjust its pop-up location from here -->
+        </text>
+      <image id="SatIdleModeIcon" class="satIcon" focusable="false">
+          <property class="SAT/SatIdleModeIcon"/>
+<!--          <property class="policy/Content" name="SatIdleModeText" value="margin-left: 5.25u;"/>
+          <property class="policy/emptyContent" name="SatIdleModeText" value="margin-left: 1.0u;"/>-->
+          <property class="policy/Content" name="SatIdleModeIcon" value="width: 4.0u;"/>
+          <property class="policy/Content" name="SatIdleModeIcon" value="height: 4.0u;"/>
+          <property class="policy/emptyContent" name="SatIdleModeIcon" value="width: 0u;"/>
+          <property class="policy/emptyContent" name="SatIdleModeIcon" value="height: 0u;"/>
+        </image>
+    </box> <!-- SAT plugin -->
+
+    <!--########################################
+        #####         Player plugin         ####
+        ########################################-->
+    <box id="playerPlugin" class="pluginContainerBox" focusable="true">
+      <actions>
+      
+        <action>
+          <!-- if focused and box is hidden move focus to SC1 -->
+          <trigger name="losevisualisation"/>
+          <event name="system/setfocus">
+            <property name="id" value="shortcutButton1"/>
+          </event>
+        </action>
+
+      <action>
+        <trigger name="gainfocus" />
+          <event name="system/set">
+                <property name="id" value="playerTitleText"/>
+                <property name="name" value="color"/>
+                <property name="value" value="SKIN(268458534 13056 9)"/>
+                <property name="type" value="string"/>
+         </event>         
+        <event name="system/set">
+                <property name="id" value="playerDurationText"/>
+                <property name="name" value="color"/>
+                <property name="value" value="SKIN(268458534 13056 9)"/>
+                <property name="type" value="string"/>
+         </event>
+      </action>
+      
+      <action>
+        <trigger name="losefocus" />
+           <event name="system/set">
+                <property name="id" value="playerTitleText"/>
+                <property name="name" value="color"/>
+                <property name="value" value="SKIN(268458534 13056 19)"/>
+                <property name="type" value="string"/>
+            </event>           
+           <event name="system/set">
+                <property name="id" value="playerDurationText"/>
+                <property name="name" value="color"/>
+                <property name="value" value="SKIN(268458534 13056 19)"/>
+                <property name="type" value="string"/>
+            </event>
+      </action>              
+
+        
+        <action>
+          <!-- when focused show the volume controll pop-up -->
+          <trigger name="gainfocus"/>
+          <event name ="system/set">
+            <property name="name" value="display"/>
+            <property name="value" value="block"/>
+            <property name="type" value="string"/>
+            <property name="id" value="mpVolume"/>
+          </event>
+        </action>
+
+        <action>
+          <!-- when focus is lost hide the volume controll pop-up -->
+          <trigger name="losefocus"/>
+          <event name="system/set">
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+            <property name="id" value="mpVolume"/>
+          </event>
+        </action>
+
+        <action>
+          <!-- when clicked activate the Music Library -->
+          <trigger name="stylus"/>
+          <trigger name="activate"/>
+          <event name="MusicPlayer/Library"/>
+        </action>
+
+        <action>
+          <!-- decrease volume -->
+          <trigger name="down"/>
+          <event name="MusicPlayer/VolDec"/>
+        </action>
+
+        <action>
+          <!-- increase volume -->
+          <trigger name="up"/>
+          <event name="MusicPlayer/VolInc"/>
+        </action>
+        
+        <!-- navigation out from the box -->
+        <action>
+          <!-- joystick up -->
+          <trigger name="left"/>
+          <event name="system/setfocus">
+            <property name="id" value="shortcutButton1"/>
+          </event>
+        </action>
+          
+        <action>
+          <!-- joystick down -->
+          <trigger name="right"/>
+          <event name="system/setfocus">
+            <property name="id" value="radioPlugin"/>
+            <property name="id" value="calendarPluginContainer"/> <!-- no need to add NT after calendar because calendar is static, allways visible -->
+          </event>
+        </action>
+
+      </actions>
+
+      <image id="playerStatusIcon" focusable="false">
+        <property class="MusicPlayer/Status"/>
+        <property class="policy/emptyContent" name="playerPlugin" value="display:none"/>
+        <property class="policy/Content" name="playerPlugin" value="display:block"/>
+      </image>
+
+      <text id="playerTitleText" focusable="true">
+        <property class="MusicPlayer/Title"/>
+        <property class="policy/Content" name="playerTitleText" value="display: block;"/>
+      </text>
+
+      <text id="playerDurationText" focusable="true">
+        <property class="MusicPlayer/ElapsedTime"/>
+      </text>
+    </box> <!-- playerPlugin-->
+
+    <!--######################################
+        ####       Volume Controll for music player       ####
+        ######################################-->
+    <box id="mpVolume" focusable="false">
+
+      <image id="musicPlayerVolumeDownIcon" path="SKIN(270501603 6419 9)" focusable="false"/>
+  
+      <!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+      <image id="musicPlayerSpeakerIcon" path="SKIN(270501603 4332 9)" focusable="false"/>
+      <image id="musicPlayerSpeakerMutedIcon" path="SKIN(270501603 4334 9)" focusable="false"/>
+      
+      <image id="musicPlayerVolumeUpIcon" path="SKIN(270501603 6421 9)" focusable="false"/>
+
+      <volumecontrol id="musicPlayerVolumeIcon" focusable="false">
+        <actions>
+         <action>
+           <trigger name="stylus"/>
+           <trigger name="stylus">
+             <property name="clicked" value="down"/>
+           </trigger>                  
+           <trigger name="stylus">
+             <property name="doubleclicked" value="up"/>
+           </trigger>                  
+           <event name="MusicPlayer/VolSet(slider::volume)"/>
+           <event name="system/setfocus">
+           <property name="id" value="volumeIndicator"/>
+           </event>
+         </action>
+        </actions>
+        <slider id="volslider">
+          <property class="MusicPlayer/Volume"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if (MusicPlayer/Vol0) display:block"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol0) display:none"/>
+
+          <property class="policy/Resource" name="musicPlayerInactiveVolumeDownIcon" value="if (MusicPlayer/Vol0) display:block"/>
+          <property class="policy/Resource" name="musicPlayerInactiveVolumeDownIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol0) display:none"/>
+          <property class="policy/Resource" name="musicPlayerInactiveVolumeUpIcon" value="if (MusicPlayer/Vol10) display:block"/>
+          <property class="policy/Resource" name="musicPlayerInactiveVolumeUpIcon" value="if !(MusicPlayer/Vol10) display:none"/>
+          <property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol0, MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9 ) display:block"/>
+          <property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol10) display:none"/>
+        </slider>
+       </volumecontrol>
+
+    </box> <!-- mpVolume -->
+
+	
+    <!--########################################
+        ##### Visual/Internet radio plugin  ####
+        ########################################-->
+    <box id="radioPlugin" class="pluginContainerBox" focusable="true">
+      <actions>
+      
+        <action>
+          <!-- if focused and box is hidden move focus to SC1 -->
+          <trigger name="losevisualisation"/>
+          <event name="system/setfocus">
+            <property name="id" value="shortcutButton1"/>
+          </event>
+        </action>
+
+      <action>
+        <trigger name="gainfocus" />
+          <event name="system/set">
+                <property name="id" value="radioTitleText"/>
+                <property name="name" value="color"/>
+                <property name="value" value="SKIN(268458534 13056 9)"/>
+                <property name="type" value="string"/>
+         </event>
+      </action>
+      
+      <action>
+        <trigger name="losefocus" />
+           <event name="system/set">
+                <property name="id" value="radioTitleText"/>
+                <property name="name" value="color"/>
+                <property name="value" value="SKIN(268458534 13056 19)"/>
+                <property name="type" value="string"/>
+            </event>
+      </action>              
+
+        
+        <action>
+          <!-- when focused show the volume controll pop-up -->
+          <trigger name="gainfocus"/>
+          <event name ="system/set">
+            <property name="name" value="display"/>
+            <property name="value" value="block"/>
+            <property name="type" value="string"/>
+            <property name="id" value="radioVolume"/>
+          </event>
+        </action>
+
+        <action>
+          <!-- when focus is lost hide the volume controll pop-up -->
+          <trigger name="losefocus"/>
+          <event name="system/set">
+            <property name="name" value="display"/>
+            <property name="value" value="none"/>
+            <property name="type" value="string"/>
+            <property name="id" value="radioVolume"/>
+          </event>
+        </action>
+
+        <action>
+          <!-- when clicked activate the radio -->
+          <trigger name="stylus"/>
+          <trigger name="activate"/>
+          <event name="VisualRadio/LaunchRadio"/>
+		  <event name="InetRadio/LaunchRadio"/>
+          <!-- Always let Visual Radio plug-in handle the launch event. It will start Radio Launcher. -->
+        </action>
+
+        <action>
+          <!-- decrease volume -->
+          <trigger name="down"/>
+          <event name="VisualRadio/VolDec"/>
+          <event name="InetRadio/VolDec"/>
+        </action>
+
+        <action>
+          <!-- increase volume -->
+          <trigger name="up"/>
+          <event name="VisualRadio/VolInc"/>
+          <event name="InetRadio/VolInc"/>
+        </action>
+        
+        <!-- navigation out from the box -->
+        <action>
+          <!-- joystick up -->
+          <trigger name="left"/>
+          <event name="system/setfocus">
+            <property name="id" value="playerPlugin"/>
+            <property name="id" value="shortcutButton1"/>
+          </event>
+        </action>
+          
+        <action>
+          <!-- joystick down -->
+          <trigger name="right"/>
+          <event name="system/setfocus">
+            <property name="id" value="calendarPluginContainer"/> <!-- no need to add NT after calendar because calendar is static, allways visible -->
+          </event>
+        </action>
+
+      </actions>
+
+      <image id="radioStatusIcon" focusable="false">
+        <property class="VisualRadio/AppIcon" name="priority" value="0"/>
+        <property class="InetRadio/AppIcon" name="priority" value="1"/>
+        <property class="policy/emptyContent" name="radioPlugin" value="display:none"/>
+        <property class="policy/emptyContent" name="radioVolume" value="visibility: visible"/>
+        <property class="policy/Content" name="radioPlugin" value="display:block"/>
+        <property class="policy/Resource" name="radioVolume" value="if (VisualRadio/VRInactive, InetRadio/IRStopped) visibility:hidden"/>
+        <property class="policy/Resource" name="radioVolume" value="if (VisualRadio/VRPlaying, InetRadio/IRPlaying) visibility: visible"/>
+      </image>
+
+      <text id="radioTitleText" focusable="true">
+        <property class="VisualRadio/OneLineInfo" name="priority" value="0"/>
+        <property class="InetRadio/OneLineInfo" name="priority" value="1"/>
+        <property class="policy/Content" name="radioTitleText" value="display: block;"/>
+      </text>
+
+    </box> <!-- radioPlugin-->
+
+    <!--######################################
+        #### Volume Control for Visual/Internet Radio ####
+        ######################################-->
+    <box id="radioVolume" focusable="false">
+
+      <image id="radioVolumeDownIcon" path="SKIN(270501603 6419 9)" focusable="false"/>
+  
+      <!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+      <image id="radioSpeakerIcon" path="SKIN(270501603 4332 9)" focusable="false"/>
+      <image id="radioSpeakerMutedIcon" path="SKIN(270501603 4334 9)" focusable="false"/>
+      
+      <image id="radioVolumeUpIcon" path="SKIN(270501603 6421 9)" focusable="false"/>
+
+      <volumecontrol id="radioVolumeIcon" focusable="false">
+        <actions>
+         <action>
+           <trigger name="stylus"/>
+           <trigger name="stylus">
+             <property name="clicked" value="down"/>
+           </trigger>                  
+           <trigger name="stylus">
+             <property name="doubleclicked" value="up"/>
+           </trigger>                  
+           <event name="VisualRadio/VolSet(radioSlider::volume)"/>
+           <event name="InetRadio/VolSet(radioSlider::volume)"/>
+           <event name="system/setfocus">
+           <property name="id" value="volumeIndicator"/>
+           </event>
+         </action>
+        </actions>
+        <slider id="radioSlider">
+          <property class="VisualRadio/Volume" name="priority" value="0"/>
+          <property class="InetRadio/Volume" name="priority" value="1"/>
+          <property class="policy/Resource" name="radioSpeakerMutedIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+          <property class="policy/Resource" name="radioSpeakerMutedIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+          <property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+
+          <property class="policy/Resource" name="radioInactiveVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+          <property class="policy/Resource" name="radioInactiveVolumeDownIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+          <property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+          <property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+          <property class="policy/Resource" name="radioInactiveVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:block"/>
+          <property class="policy/Resource" name="radioInactiveVolumeUpIcon" value="if !(VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+          <property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol0, VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, InetRadio/Vol0, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9 ) display:block"/>
+          <property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+        </slider>
+       </volumecontrol>
+
+    </box> <!-- radioVolume -->
+
+
+
+
+    <!--######################################
+        ####       Organizer plugin       ####
+        ######################################-->
+      <box id="calendarPluginContainer" class="pluginContainerBox" focusable="true">
+        <actions>
+          <action>
+            <!-- activate organizer -->
+            <trigger name="stylus">
+                <property name="eventtype" value="up" />
+              </trigger>            
+            <trigger name="activate"/>
+            <event name="Organizer/ItemSelected(0)"/>
+          </action>
+
+        <!-- for setting the correct colour group for texts -->
+           <action>
+          <trigger name="gainfocus" />
+           <event name="system/set">
+            <property name="id" value="calendarEntryText1_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+        </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText1_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText2_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText2_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText3_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText3_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText4_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText4_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText5_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText5_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText6_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText6_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText7_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText7_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText8_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>
+        <event name="system/set">
+            <property name="id" value="calendarEntryText8_2"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 9)"/>
+            <property name="type" value="string"/>
+          </event>  
+                    
+        </action>
+        
+        <action>
+          <trigger name="losefocus" />
+     <event name="system/set">
+            <property name="id" value="calendarEntryText1_1"/>
+            <property name="name" value="color"/>
+            <property name="value" value="SKIN(268458534 13056 19)"/>
+            <property name="type" value="string"/>
+      </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText1_2"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText2_1"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText2_2"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText3_1"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText3_2"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText4_1"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText4_2"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText5_1"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+          <property name="id" value="calendarEntryText5_2"/>
+          <property name="name" value="color"/>
+          <property name="value" value="SKIN(268458534 13056 19)"/>
+          <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+         <property name="id" value="calendarEntryText6_1"/>
+         <property name="name" value="color"/>
+         <property name="value" value="SKIN(268458534 13056 19)"/>
+         <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+         <property name="id" value="calendarEntryText6_2"/>
+         <property name="name" value="color"/>
+         <property name="value" value="SKIN(268458534 13056 19)"/>
+         <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+         <property name="id" value="calendarEntryText7_1"/>
+         <property name="name" value="color"/>
+         <property name="value" value="SKIN(268458534 13056 19)"/>
+         <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+         <property name="id" value="calendarEntryText7_2"/>
+         <property name="name" value="color"/>
+         <property name="value" value="SKIN(268458534 13056 19)"/>
+         <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+         <property name="id" value="calendarEntryText8_1"/>
+         <property name="name" value="color"/>
+         <property name="value" value="SKIN(268458534 13056 19)"/>
+         <property name="type" value="string"/>
+    </event>
+    <event name="system/set">
+         <property name="id" value="calendarEntryText8_2"/>
+         <property name="name" value="color"/>
+         <property name="value" value="SKIN(268458534 13056 19)"/>
+         <property name="type" value="string"/>
+    </event>
+                      
+        </action>      
+
+          <action>
+            <!-- joystick up -->
+            <trigger name="left"/>
+            <event name="system/setfocus">
+              <property name="id" value="radioPlugin"/>
+              <property name="id" value="playerPlugin"/>			  
+              <property name="id" value="shortcutButton1"/>
+            </event>
+          </action>
+
+          <action>
+            <!-- joystick down -->
+            <trigger name="right"/>
+            <event name="system/setfocus">
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+              <property name="id" value="shortcutButton1"/>
+            </event>
+          </action>
+        </actions>
+
+        <!-- #1 -->
+        <button id="calendarEntryBox1" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon1" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x01"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon1" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon1" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText1_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x01"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarPluginContainer" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox1" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox1" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarPluginContainer" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox1" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox1" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText1_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x01"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText1_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox1" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText1_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox1" value="height: 9.0u;"/>
+          </text>
+        </button>
+
+        <!-- #2 -->
+        <button id="calendarEntryBox2" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon2" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x02"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon2" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon2" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText2_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x02"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox2" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox2" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText2_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x02"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText2_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox2" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText2_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox2" value="height: 9.0u;"/>
+          </text>
+        </button>
+
+        <!-- #3 -->
+        <button id="calendarEntryBox3" class="calendarEntryBox" focusable="false">
+          <property name="calendarEntryBox3" value="background-color: red;"/>
+          <image id="calendarEntryIcon3" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x03"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon3" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon3" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText3_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x03"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox3" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox3" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox3" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox3" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText3_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x03"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText3_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox3" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText3_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox3" value="height: 9.0u;"/>
+          </text>
+        </button>
+
+        <!-- #4 -->
+        <button id="calendarEntryBox4" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon4" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x04"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon4" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon4" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText4_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x04"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox4" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox4" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox4" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox4" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText4_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x04"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText4_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox4" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText4_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox4" value="height: 9.0u;"/>
+          </text>
+        </button>
+
+        <!-- #5 -->
+        <button id="calendarEntryBox5" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon5" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x05"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon5" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon5" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText5_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x05"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox5" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox5" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox5" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox5" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText5_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x05"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText5_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox5" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText5_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox5" value="height: 9.0u;"/>
+          </text>
+        </button>
+
+        <!-- #6 -->
+        <button id="calendarEntryBox6" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon6" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x06"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon6" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon6" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText6_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x06"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox6" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox6" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox6" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox6" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText6_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x06"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText6_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox6" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText6_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox6" value="height: 9.0u;"/>
+          </text>
+        </button>
+        
+        <!-- #7 -->
+        <button id="calendarEntryBox7" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon7" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x07"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon7" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon7" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText7_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x07"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox7" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox7" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox7" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox7" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText7_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x07"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText7_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox7" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText7_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox7" value="height: 9.0u;"/>
+          </text>
+        </button>
+
+        <!-- #8 -->
+        <button id="calendarEntryBox8" class="calendarEntryBox" focusable="false">
+          <image id="calendarEntryIcon8" class="calendarEntryIcon" focusable="false">
+            <property class="Organizer/EventIcon" name="ordinal" value="0x08"/>
+            <!-- If there is no image, the left side of the first text line will take the space of the image. -->
+            <property class="policy/emptyContent" name="calendarEntryIcon8" value="display: none;"/>
+            <!-- If image exists, left side of the first text line will be on the right side of the image. -->
+            <property class="policy/Content" name="calendarEntryIcon8" value="display: block;"/>
+          </image>
+          <text id="calendarEntryText8_1" class="calendarEntryText1" focusable="false">
+            <property class="Organizer/Event1stLine" name="ordinal" value="0x08"/>
+            <!-- If there is no text, the entry box is not shown at all -->
+            <property class="policy/emptyContent" name="calendarEntryBox8" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox8" value="nav-index: none;"/>
+            <property class="policy/Content" name="calendarEntryBox8" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox8" value="nav-index: auto;"/>
+          </text>
+          <text id="calendarEntryText8_2" class="calendarEntryText2" focusable="false">
+            <property class="Organizer/Event2ndLine" name="ordinal" value="0x08"/>
+            <!-- If there is no second text line, decrease the height of the box -->
+            <property class="policy/emptyContent" name="calendarEntryText8_2" value="display: none;"/>
+            <property class="policy/emptyContent" name="calendarEntryBox8" value="height: 4.5u;"/>
+            <property class="policy/Content" name="calendarEntryText8_2" value="display: block;"/>
+            <property class="policy/Content" name="calendarEntryBox8" value="height: 9.0u;"/>
+          </text>
+        </button>
+      </box>
+    </box> <!-- end MainBox -->
+
+<!-- Block with flag '__NEWSTICKER' skipped. -->
+
+      <!--#################################################
+          ####     Menubar with soft key shortcuts     ####
+          #################################################-->
+      <menubar>
+        <menuitem id="Shortcut_SK1" label="">
+          <!-- ordinal value is the same as in the default settings -->
+          <property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000100"/>
+          <actions>
+            <action>
+              <trigger name="stylus"/>
+              <trigger name="activate"/>
+              <event name="Shortcut/LaunchByIndex(0x01000100)"/>
+            </action>
+          </actions>
+        </menuitem>
+        <menuitem id="Shortcut_SK2" label="">
+          <property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000101"/>
+          <actions>
+            <action>
+              <trigger name="stylus"/>
+              <!-- if using both activate and hold for same SK active trigger need to be specified 
+                  like this (2 = keyup) otherwise hold will not work -->
+              <trigger name="activate">
+                <property name="eventtype" value="2"/>
+              </trigger>
+              <event name="Shortcut/LaunchByIndex(0x01000101)"/>
+            </action>
+            <action>
+              <trigger name="hold"/>
+              <event name="Shortcut/LaunchByValue(localapp:0x10281867)"/>
+            </action>
+          </actions>
+        </menuitem>
+        <menuitem id="MSK" label="&qtn_msk_open;"/>
+      </menubar>
+    </view>
+  </views>
+
+</xmluiml>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_dat.dat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<data>
+	<AppUid>102750F0</AppUid>
+	<Provideruid>101FB657</Provideruid>
+	<ThemeUid>1028186B</ThemeUid>
+	<ThemeStatus>ThemeStatusLicenceeRestorable</ThemeStatus>
+	<ThemeFullName>Full Page</ThemeFullName>
+	<ThemeShortName>CI</ThemeShortName>
+	<ThemeVersion>1.0</ThemeVersion>
+	<FileXML>ClassicIdle.xml</FileXML>
+	<FileCSS>ClassicIdle.css</FileCSS>
+	
+	<FileResource CacheType="CacheNone">vrclassicidle.mif</FileResource>
+	<FileResource CacheType="CacheNone">irclassicidle.mif</FileResource>
+
+	<LanguageSpecific Language="1">
+		<FileDTD>ClassicIdle.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName><!-- Note: the name is not an entity reference. So no "&" or" ;" -->
+	</LanguageSpecific>
+</data>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_loc.dat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,240 @@
+<?xml version="1.0"?>
+<data>
+	<AppUid>102750F0</AppUid>
+	<Provideruid>101FB657</Provideruid>
+	<ThemeUid>1028186B</ThemeUid>
+	<ThemeStatus>ThemeStatusLicenceeRestorable</ThemeStatus>
+	<ThemeFullName>Full Page</ThemeFullName>
+	<ThemeShortName>CI</ThemeShortName>
+	<ThemeVersion>1.0</ThemeVersion>
+	<FileXML>ClassicIdle.xml</FileXML>
+	<FileCSS>ClassicIdle.css</FileCSS>
+	
+	<FileResource CacheType="CacheNone">vrclassicidle.mif</FileResource>
+	<FileResource CacheType="CacheNone">irclassicidle.mif</FileResource>
+
+	<LanguageSpecific Language="01">
+		<FileDTD>ClassicIdle_01.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="02">
+		<FileDTD>ClassicIdle_02.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="03">
+		<FileDTD>ClassicIdle_03.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="04">
+		<FileDTD>ClassicIdle_04.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="05">
+		<FileDTD>ClassicIdle_05.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="06">
+		<FileDTD>ClassicIdle_06.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="07">
+		<FileDTD>ClassicIdle_07.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="08">
+		<FileDTD>ClassicIdle_08.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="09">
+		<FileDTD>ClassicIdle_09.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="10">
+		<FileDTD>ClassicIdle_10.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="13">
+		<FileDTD>ClassicIdle_13.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="14">
+		<FileDTD>ClassicIdle_14.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="15">
+		<FileDTD>ClassicIdle_15.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="16">
+		<FileDTD>ClassicIdle_16.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="17">
+		<FileDTD>ClassicIdle_17.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="18">
+		<FileDTD>ClassicIdle_18.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="25">
+		<FileDTD>ClassicIdle_25.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="26">
+		<FileDTD>ClassicIdle_26.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="27">
+		<FileDTD>ClassicIdle_27.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="28">
+		<FileDTD>ClassicIdle_28.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="29">
+		<FileDTD>ClassicIdle_29.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="30">
+		<FileDTD>ClassicIdle_30.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="31">
+		<FileDTD>ClassicIdle_31.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="32">
+		<FileDTD>ClassicIdle_32.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="33">
+		<FileDTD>ClassicIdle_33.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="37">
+		<FileDTD>ClassicIdle_37.dtd</FileDTD>
+		<FileCSS>ClassicIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="39">
+		<FileDTD>ClassicIdle_39.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="42">
+		<FileDTD>ClassicIdle_42.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="44">
+		<FileDTD>ClassicIdle_44.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="45">
+		<FileDTD>ClassicIdle_45.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="49">
+		<FileDTD>ClassicIdle_49.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="50">
+		<FileDTD>ClassicIdle_50.dtd</FileDTD>
+		<FileCSS>ClassicIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="51">
+		<FileDTD>ClassicIdle_51.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="54">
+		<FileDTD>ClassicIdle_54.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="57">
+		<FileDTD>ClassicIdle_57.dtd</FileDTD>
+		<FileCSS>ClassicIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="58">
+		<FileDTD>ClassicIdle_58.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="59">
+		<FileDTD>ClassicIdle_59.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="67">
+		<FileDTD>ClassicIdle_67.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="68">
+		<FileDTD>ClassicIdle_68.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="70">
+		<FileDTD>ClassicIdle_70.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="76">
+		<FileDTD>ClassicIdle_76.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="78">
+		<FileDTD>ClassicIdle_78.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="79">
+		<FileDTD>ClassicIdle_79.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="83">
+		<FileDTD>ClassicIdle_83.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="93">
+		<FileDTD>ClassicIdle_93.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="94">
+		<FileDTD>ClassicIdle_94.dtd</FileDTD>
+		<FileCSS>ClassicIdle_reversed.css</FileCSS>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="96">
+		<FileDTD>ClassicIdle_96.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="157">
+		<FileDTD>ClassicIdle_157.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="158">
+		<FileDTD>ClassicIdle_158.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="159">
+		<FileDTD>ClassicIdle_159.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="160">
+		<FileDTD>ClassicIdle_160.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="161">
+		<FileDTD>ClassicIdle_161.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="326">
+		<FileDTD>ClassicIdle_326.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="401">
+		<FileDTD>ClassicIdle_401.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+	<LanguageSpecific Language="402">
+		<FileDTD>ClassicIdle_402.dtd</FileDTD>
+		<ThemeFullName localization="Localizable">qtn_ai_skin_full_page</ThemeFullName>
+	</LanguageSpecific>
+</data>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_reversed.css	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,616 @@
+
+/* What's this? */
+* {
+	nav-index: none;
+}
+
+/*******
+	VIEW
+********/
+
+view {
+	display: block; 
+	position: static; 	
+	width: 100%;
+	height: 100%;
+	direction: ltr;
+	block-progression: tb;
+	background-image: wallpaper;
+}
+
+menuitem#Shortcut_SK2{
+	_s60-longtap: true;
+}
+
+/**************************************
+	GENERAL DEFINITIONS FOR PLUGIN BOXES
+***************************************/
+
+box.pluginContainerBox { /* main_idle_act_pane */
+	position: static; 
+	border-top-width: 0.25u;
+	border-top-style: dotted;    /* linestyle of the box */
+	border-top-color: black;
+	width: auto;
+	nav-index: none;
+}
+
+/* everything else but the NT is inside this box */
+box#mainBox{
+	position: static;
+	width: auto;
+/* Block with flag '__NEWSTICKER' skipped. */
+	height: 100%;
+	nav-index: none;
+}
+
+
+/* settings for the pluginContainerBox during focus */
+box.pluginContainerBox:focus {
+  /*background-color: "SKIN(268458534 8448)"; *//* see S60_3_1_Reference_Icons_1.3.doc */
+	background-color: "SKIN(268458534 5120 9)";
+ }
+
+
+/************************
+	SHORTCUT PLUGIN AREA 
+*************************/
+
+/* box where the actual plugin information is shown */
+box#shortcutPluginContainer { /* ai_links_pane*/
+	margin-top: 0.5u;
+	height: 7.5u;
+	padding-left:  2u;
+	padding-right: 2u;
+	padding-top: /*0.7%;*/ 0.5u;
+/*padding-bottom: 0.25u;*/
+	
+	/* Reverse the shortcuts in the reverse layout */
+	block-progression: rl;
+	direction: rtl;
+}
+
+
+button.shortcutButton { /* cell_ai_link_pane */
+	width: auto;
+	height: 7u;
+	nav-index: auto;
+}
+
+
+button.shortcutButton:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5136)";
+}
+
+/* What's this ? */
+button#shortcutButton1 {  
+	_s60-initial-focus: 100; 
+}
+
+
+image.shortcutIcon { 
+	width: 7u;
+	height: 7u;
+	margin-left: auto;
+	margin-right: auto;
+	_s60-aspect-ratio: preserve;
+}
+
+
+/*
+	Border-style ja -width täytyy olla määriteltynä vaikka käytetään skinistä tulevaa LAF:ia (bg-image:auto;). 
+	Skini koostuu kahdesta osasta ja border-width määrittää myös skiniborderin.
+*/
+tooltip.shortcutTooltip { /* popup_ai_links_title_window */
+	width: 10u; /* any fixed lenghts works here if the owerflow is set to both tooltip and text inside it */
+/*height: 4.9u;*/
+	height: 5.5u;
+	border-style: solid; 
+	border-width: 5px; 
+	_s60-start-delay: 1000000;
+	_s60-display-time: 1000000;
+	background-color:"SKIN(268458534 8480)";	/* TODO: check */
+	overflow: visible;
+}
+
+
+text.shortcutTooltipText { /* popup_ai_links_title_window_t1 */
+	position: static;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	width: 100%;
+	height: 85%;
+	text-align: center;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	overflow: visible;
+	padding-right: 1u;
+	padding-left: 1u;
+	/*padding-top: 1u;*/
+	padding-bottom: 1u;
+}
+
+
+/*********************
+	PLAYER PLUGIN AREA 
+**********************/
+
+box#playerPlugin:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+box#playerPlugin{
+	height:5u;
+	display: none;
+	nav-index: none;
+	block-progression: lr;
+}
+
+image#playerStatusIcon {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	margin-top: 0.75u;
+	margin-right: 0.75u;
+	left: 100%;
+	right: 4u;
+	width: 3.5u;
+	height: 3.5u;
+}
+
+text#playerTitleText {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	margin-right: 5.0u;
+	margin-left: 11.0u;
+	text-align: right;
+}
+
+text#playerTitleText:passivefocus {
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+}
+
+
+text#playerDurationText {
+	display: block;
+	visibility: visible;
+	position: static;
+	width: 11u;
+	margin-left: 0.75u;
+	text-align:left;
+	height: 4u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+text#playerDurationText:passivefocus {
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+}
+
+/*********************
+	PLAYER VOLUME CONTROLL
+**********************/
+box#mpVolume {
+	display: none;
+	width: 40u;
+	height: 6u;	
+	position: absolute;
+	z-index: 2;
+	left: 5u;
+	top: 4.0u;
+	background-color:"SKIN(268458534 8480)";
+}
+
+image#musicPlayerVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerInactiveVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerSpeakerMutedIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 1.00u;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+/* 
+image#musicPlayerVolumeIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 10u;
+	width: 20u;
+	height: 4u;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+*/
+
+
+volumecontrol#musicPlayerVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 10.0u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+slider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#musicPlayerVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#musicPlayerInactiveVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+
+/*********************
+	VISUAL/INTERNET RADIO PLUGIN AREA 
+**********************/
+
+box#radioPlugin:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+box#radioPlugin{
+	height:5u;
+	display: none;
+	nav-index: none;
+	block-progression: lr;
+}
+
+image#radioStatusIcon {
+	display: block;
+	visibility: visible;
+	position: absolute;
+	margin-top: 0.75u;
+	margin-right: 0.75u;
+	left: 100%;
+	right: 4u;
+	width: 3.5u;
+	height: 3.5u;
+}
+
+text#radioTitleText {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	width: auto;
+	height: 4u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	color: "SKIN(268458534 13056 19)";
+	margin-right: 5.0u;
+	margin-left: 11.0u;
+	text-align: right;
+}
+
+text#radioTitleText:passivefocus {
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+}
+
+/*********************
+	VISUAL/INTERNETRADIO VOLUME CONTROL
+**********************/
+box#radioVolume {
+	display: none;
+	width: 40u;
+	height: 6u;	
+	position: absolute;
+	z-index: 2;
+	left: 5u;
+	top: 4.0u;
+	background-color:"SKIN(268458534 8480)";
+}
+
+image#radioVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#radioInactiveVolumeDownIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#radioSpeakerIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+image#radioSpeakerMutedIcon { 
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 1.00u;
+	left: 5.u;
+	width: 4.0u;	
+	height: 4.0u;
+}
+
+
+volumecontrol#radioVolumeIcon	{
+	display: block;
+	visibility: visible;
+	position: absolute;
+	left: 10.0u;
+	width: 20.0u;
+	height: 4.0u;
+	margin-top: auto;
+	margin-bottom: auto;
+	focusable: true;	
+	direction: ltr;
+	block-progression: lr;
+}
+
+slider#radioSlider	{
+	focusable: false;
+	value: 5;
+	minrange: 0;	
+	maxrange: 10;	
+	z-index: 0;
+}
+
+image#radioVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+image#radioInactiveVolumeUpIcon { 
+	display: none;
+	visibility: visible;
+	position: absolute;
+	margin-top: auto;
+	margin-bottom: auto;
+	left: auto;
+	right: 2.0u;
+	width: 1.0u;	
+	height: 4.0u;
+}
+
+/* Invisible icon that is used to control volume popup visibility */
+image.invisibleRadioIcon {
+	display: none;
+	visibility: visible;
+	position: absolute;
+	left: 0.25u;
+	top: 0.25u;
+	width: 4.0u;
+	height: 4.0u;
+}
+
+/******************
+	SAT PLUGIN AREA 
+*******************/
+
+
+
+box#SATPluginContainer {
+	display: none;  /*block;*/
+	nav-index: none; /* SAT is not focusable */
+	height: 5u;	
+	width: auto;
+/*	direction: rtl;
+	block-progression: rl;*/
+	block-progression: lr;
+}
+
+
+image.satIcon {
+	display: block;
+	visibility: visible;
+	position: static;
+	margin-top: 0.25u;
+	left: auto;
+	margin-right: 0.7u;
+	width: 4.0u;
+	height: 4.0u;
+}
+
+text.satText {
+	display: block;
+	visibility: visible;
+	position: static;
+	width: auto;
+	text-align: right;
+	margin-top: 0.25u;		
+	margin-right: 0.555u;
+	height: 4.25u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;         /* TODO: check */
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+
+
+/************************
+	CALENDAR PLUGIN AREA 
+*************************/
+
+box#calendarPluginContainer:focus {
+	background-image: "SKIN(268458534 24576)";
+	background-color: "SKIN(268458534 5120 9)";
+}
+box#calendarPluginContainer {
+	display: block;
+	height: adaptive;
+	padding-bottom: 1u;
+}
+
+
+button.calendarEntryBox {
+	display: none;
+	visibility: visible;
+	height: auto;
+}
+
+
+image.calendarEntryIcon { /* ai_gene_pane_1_g1 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	top: 0.5u;
+/*left: 0.7u;*/
+   left: 100%;
+   right: 4.7u;
+	width: 4u;
+	height: 4u;
+}
+
+text.calendarEntryText1 { /* ai_gene_pane_1_t1 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;	
+	top: 0.0u;
+/*	left: 5.75u; */
+/*	right: 0.9u; */
+	left: 0.9u;
+	right: 2.5u;
+	height: 4.25u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+	text-align: right;
+}
+text.calendarEntryText1:passivefocus { 
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+}
+
+text.calendarEntryText2 { /* ai_gene_pane_2_t1 */
+	display: block;
+	visibility: visible;
+	position: absolute;
+	width: auto;	
+	top: 4.25u;
+/*	left: 5.75u; */
+/*	right: 0.9u; */
+	left: 0.9u;
+	margin-right: 5.25u;
+	height: 4.25u;
+	font-family: EAknLogicalFontSecondaryFont;
+	font-size: 3.5u;
+	text-align: right;
+	/*color: auto;*/
+	color: "SKIN(268458534 13056 19)";
+}
+
+text.calendarEntryText2:passivefocus { 
+	/*color: EAknsCIQsnTextColorsCG10;*/
+	color: "SKIN(268458534 13056 9)";
+}
+
+/* priorities for calendar buttons, the lower we go, the less priority the button has --> if it does not fit on the screen it will be dropped*/
+/* please note that the priority ID must be unique for each element defined --> do not use it via class element */
+button#calendarEntryBox1{ _s60-display-priority: 21; }
+button#calendarEntryBox2{ _s60-display-priority: 22; }
+button#calendarEntryBox3{ _s60-display-priority: 23; }
+button#calendarEntryBox4{ _s60-display-priority: 24; }
+button#calendarEntryBox5{ _s60-display-priority: 25; }
+button#calendarEntryBox6{ _s60-display-priority: 26; }
+button#calendarEntryBox7{ _s60-display-priority: 27; }
+button#calendarEntryBox8{ _s60-display-priority: 28; }
+
+/* Block with flag '__NEWSTICKER' skipped. */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/ClassicIdle/classicidle_reversed.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1084 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xmluiml SYSTEM "ClassicIdle.dtd">
+<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
+
+ 
+	<!--Application events -->
+	<actions>
+		<action>
+			<trigger name="startup"/>
+			<trigger name="uidefinitionmodificationend"/>
+			<event name="READY"/>
+		</action>
+		<action>
+			<trigger name="shutdown"/>
+			<event name="DOWN"/>
+		</action>
+		<action>
+			<trigger name="uidefinitionmodificationstart"/>
+			<event name="NEW_UI"/>
+		</action>
+		<action>
+			<trigger name="screendevicechange"/>
+			<event name="LAYOUT"/>
+		</action>
+	</actions>
+
+	<!-- UI resources for Shortcut plugin -->
+    <desc id="Shortcut/EmptyCaption">&shortcut_EmptyCaption;</desc>
+    <desc id="Shortcut/BackCaption">&text_softkey_back;</desc>
+    <desc id="Shortcut/NewMessageCaption">&qtn_set_idle_skey_new_msg;</desc>
+    <desc id="Shortcut/NewEmailCaption">&qtn_set_idle_skeys_email_editor;</desc>
+    <desc id="Shortcut/NewSyncMLMailCaption">&qtn_apps_syncml_mail_gs;</desc>
+    <desc id="Shortcut/NewPostcardCaption">&qtn_apps_mmspostcard_gs;</desc>
+    <desc id="Shortcut/NewAudioMsgCaption">&qtn_apps_audio_msg_gs;</desc>
+    <desc id="Shortcut/SelectMsgTypeCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+    <desc id="Shortcut/ChangeThemeCaption">&qtn_apps_idle_skin_gs;</desc>
+    <desc id="Shortcut/NewMessageShortCaption">&qtn_idle_skey_new_msg;</desc>
+    <desc id="Shortcut/NewEmailShortCaption">&qtn_apps_email_skey;</desc>
+    <desc id="Shortcut/NewSyncMLMailShortCaption">&qtn_apps_syncml_mail_skey;</desc>
+    <desc id="Shortcut/NewPostcardShortCaption">&qtn_apps_mmspostcard_skey;</desc>
+    <desc id="Shortcut/NewAudioMsgShortCaption">&qtn_apps_audio_msg_skey;</desc>
+    <desc id="Shortcut/SelectMsgTypeShortCaption">&qtn_set_idle_skey_select_msg_type;</desc>
+    <desc id="Shortcut/ChangeThemeShortCaption">&qtn_apps_idle_skin_skey;</desc>
+
+	<!-- UI resources for MP plugin -->
+	<desc id="MusicPlayer/PauseIcon" path="SKIN(270501603 5182)"/>
+	<desc id="MusicPlayer/PlayIcon" path="SKIN(270501603 5184)"/>
+
+	<desc id="MusicPlayer/Vol0" path="SKIN(270501603 6414)"/>
+	<desc id="MusicPlayer/Vol1" path="SKIN(270501603 6337)"/>
+	<desc id="MusicPlayer/Vol2" path="SKIN(270501603 6339)"/>
+	<desc id="MusicPlayer/Vol3" path="SKIN(270501603 6340)"/>
+	<desc id="MusicPlayer/Vol4" path="SKIN(270501603 6341)"/>
+	<desc id="MusicPlayer/Vol5" path="SKIN(270501603 6342)"/>
+	<desc id="MusicPlayer/Vol6" path="SKIN(270501603 6343)"/>
+	<desc id="MusicPlayer/Vol7" path="SKIN(270501603 6344)"/>
+	<desc id="MusicPlayer/Vol8" path="SKIN(270501603 6345)"/>
+	<desc id="MusicPlayer/Vol9" path="SKIN(270501603 6346)"/>
+	<desc id="MusicPlayer/Vol10" path="SKIN(270501603 6338)"/>
+	
+	<!-- UI resources for Visual/Internet radio plugin -->
+	<desc id="VisualRadio/Vol0" path="SKIN(270501603 6414)"/>
+	<desc id="VisualRadio/Vol1" path="SKIN(270501603 6337)"/>
+	<desc id="VisualRadio/Vol2" path="SKIN(270501603 6339)"/>
+	<desc id="VisualRadio/Vol3" path="SKIN(270501603 6340)"/>
+	<desc id="VisualRadio/Vol4" path="SKIN(270501603 6341)"/>
+	<desc id="VisualRadio/Vol5" path="SKIN(270501603 6342)"/>
+	<desc id="VisualRadio/Vol6" path="SKIN(270501603 6343)"/>
+	<desc id="VisualRadio/Vol7" path="SKIN(270501603 6344)"/>
+	<desc id="VisualRadio/Vol8" path="SKIN(270501603 6345)"/>
+	<desc id="VisualRadio/Vol9" path="SKIN(270501603 6346)"/>
+	<desc id="VisualRadio/Vol10" path="SKIN(270501603 6338)"/>
+	<desc id="VisualRadio/VisualRadioIcon" path="vrclassicidle.mif#0"/>
+    <!-- The following icons are not displayed, they just indicate whether volume popup is visible or not -->
+    <desc id="VisualRadio/VisualRadioPlaying" path="SKIN(270501603 5184)"/>
+    <desc id="VisualRadio/VisualRadioInactive" path="SKIN(270501603 5182)"/>
+
+	<desc id="InetRadio/Vol0" path="SKIN(270501603 6414)"/>
+	<desc id="InetRadio/Vol1" path="SKIN(270501603 6337)"/>
+	<desc id="InetRadio/Vol2" path="SKIN(270501603 6339)"/>
+	<desc id="InetRadio/Vol3" path="SKIN(270501603 6340)"/>
+	<desc id="InetRadio/Vol4" path="SKIN(270501603 6341)"/>
+	<desc id="InetRadio/Vol5" path="SKIN(270501603 6342)"/>
+	<desc id="InetRadio/Vol6" path="SKIN(270501603 6343)"/>
+	<desc id="InetRadio/Vol7" path="SKIN(270501603 6344)"/>
+	<desc id="InetRadio/Vol8" path="SKIN(270501603 6345)"/>
+	<desc id="InetRadio/Vol9" path="SKIN(270501603 6346)"/>
+	<desc id="InetRadio/Vol10" path="SKIN(270501603 6338)"/>
+	<desc id="InetRadio/IRPlayingIcon" path="irclassicidle.mif#0"/>
+	<desc id="InetRadio/IRStoppedIcon" path="irclassicidle.mif#2"/>
+
+	<!-- UI resources for Organizer -->
+	<desc id="Organizer/NoEventsForToday">&qtn_ai_cale_no_event_today;</desc>
+	<desc id="Organizer/NoMoreEventsForToday">&qtn_ai_cale_no_more_ev_td;</desc>
+	<desc id="Organizer/IconAnniv" path="SKIN(268458241 2)"/>
+	<desc id="Organizer/IconAppt" path="SKIN(268458241 4)"/>
+	<desc id="Organizer/IconMemo" path="SKIN(268458241 6)"/>
+	<desc id="Organizer/IconTodo" path="SKIN(270501603 5126)"/>
+	<desc id="Organizer/IconMeetAccepted" path="SKIN(270501603 5508)"/>
+	<desc id="Organizer/IconMeetNotAnswered" path="SKIN(270501603 5511)"/>
+	<desc id="Organizer/IconMeetTentative" path="SKIN(270501603 5514)"/>
+	
+	<!-- Views -->
+	<views>
+
+		<!--################################
+		    ####         AI plug-ins    ####
+		    ################################-->
+		<property class="ContentSource" name="Shortcut" value="0x102750FA" load_ordinal="1"/>
+		<property class="ContentSource" name="Organizer" value="0x102750FE" load_ordinal="2"/>
+		<property class="ContentSource" name="MusicPlayer" value="0x10207B73" load_ordinal="3"/>
+		<property class="ContentSource" name="SAT" value="0x102078EB" load_ordinal="5"/>
+		<property class="ContentSource" name="VisualRadio" value="0x10208A89" load_ordinal="6"/>
+		<property class="ContentSource" name="InetRadio" value="0x2000B4A7" load_ordinal="7"/>
+
+		<!--###################################
+		    ### Plug-in specific settings   ###
+		    ###################################-->
+
+		<!--################################
+		    ## Shortcut plug-in settings  ##
+		    ################################-->
+
+		<!-- Always visible shortcuts -->
+		<!-- NOTE: these indexes start from 1 -->
+		<!-- Shortcut #1, Messaging -->
+		<property class="Settings/Shortcut" name="0x00000001" value="localapp:0x100058C5"/>
+		<!-- Shortcut #2, Phonebook -->
+		<property class="Settings/Shortcut" name="0x00000002" value="localapp:0x101F4CCE"/>
+		<!-- Shortcut #3, Clock -->
+		<property class="Settings/Shortcut" name="0x00000003" value="localapp:0x10005903"/>
+		<!-- Shortcut #4, Media Gallery 2 -->
+		<property class="Settings/Shortcut" name="0x00000004" value="localapp:0x101F8599"/>
+		<!-- Shortcut #5, Browser -->
+		<property class="Settings/Shortcut" name="0x00000005" value="localapp:0x10008D39"/>
+		<!-- Shortcut #6, Change theme -->
+		<property class="Settings/Shortcut" name="0x00000006" value="localapp:0x10005A32?view=0x102750A7"/>
+
+		<!-- Optionally visible shortcuts -->
+		<!-- Soft key #1, Applications -->
+		<property class="Settings/Shortcut" name="0x01000100" value="localapp:0x101F4CD2"/>
+		<!-- Soft key #2, Contacts -->
+		<property class="Settings/Shortcut" name="0x01000101" value="localapp:0x101F4CCE"/>
+
+
+		<!-- #################################
+		     ## Organizer plug-in settings  ##
+		     ################################# -->
+
+		<!-- Item count and size settings -->
+    <!-- Total line count -->
+		<property class="Settings/Organizer" name="0x01" value="8"/>
+
+    <!-- Timed item line count -->
+		<property class="Settings/Organizer" name="0x02" value="2"/>
+
+    <!-- Non Timed item line count -->
+		<property class="Settings/Organizer" name="0x03" value="1"/>
+
+    <!-- Line count reserved for non timed items -->
+		<property class="Settings/Organizer" name="0x04" value="0"/>
+
+    <!-- Publish end time for upcoming timed items -->
+		<property class="Settings/Organizer" name="0x05" value="1"/>
+
+    <!-- Use alternate publishing for upcoming and ongoing items -->
+		<property class="Settings/Organizer" name="0x06" value="1"/>
+
+		<!-- Main view -->
+
+		<view id="ActiveIdleView">
+
+			<!-- move focus to 1st SC if END key is pressed -->
+			<actions>
+				<action id="KeyEnd">
+				  <trigger name="keyevent">
+					  <property name="scancode" value="197"/><!-- End key -->
+					  <property name="eventtype" value="1"/>
+				  </trigger>
+				<!-- switch the tooltip temporary OFF because we do not want to see it when ENDKEY -->
+				<event name ="system/set">
+					<property name="name" value="display"/>
+					<property name="value" value="none"/>
+					<property name="type" value="string"/>
+					<property name="id" value="shortcutTooltip1"/>
+				</event>				  
+					<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+					</event>
+				<!-- ENDKEY is handled we can turn the tooltip back ON. We could do this also in SC1 and with loseFocus event, but that is very slow and  overloading -->
+				<event name ="system/set">
+					<property name="name" value="display"/>
+					<property name="value" value="block"/>
+					<property name="type" value="string"/>
+					<property name="id" value="shortcutTooltip1"/>
+					</event>
+				</action>
+<!--
+				<action id="FocusToIdle">
+				  <trigger name="gainfocus">
+					  </trigger>
+					<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+					</event>
+				</action>
+-->
+
+
+<![CDATA[				<action><!-- This functionality is not yet required so it is left out in reference themes in rel. 3.2 -->
+					<trigger name="keyevent">
+					  <property name="scancode" value="19"/><!-- Edit key -->
+					</trigger>
+					<event name="Shortcut/LaunchByValue(localapp:0x10005907)"/><!-- Notepad -->
+				</action>]]>
+			</actions>
+
+		<!--#####################################
+		    #####      Shortcut plugin      #####
+		    #####################################-->
+			<box id="shortcutPluginContainer" class="pluginContainerBox" focusable="false">
+<!--
+				<actions>
+					<action>
+						<trigger name="gainfocus"/>
+							<event name="system/setfocus">
+								<property name="id" value="shortcutButton1"/>
+							</event>
+					</action>
+				</actions>
+-->
+				<!-- Shortcut items -->
+				<!-- reversed order -->
+				<!-- #6 -->
+				<button id="shortcutButton6" class="shortcutButton" focusable="true">
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x00000006)"/>
+						</action>
+						<action>
+						<trigger name="up"/><!-- joystick up -->
+							<event name="system/setfocus">
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+						<action>
+							<trigger name="down"/><!-- joystick down -->
+							<event name="system/setfocus">
+								<property name="id" value="playerPlugin"/>
+								<property name="id" value="radioPlugin"/>
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+					</actions>
+					<image id="Shortcut_shortcutIcon6" class="shortcutIcon" focusable="false">
+						<property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000006"/>
+					</image>
+					<tooltip id="shortcutTooltip6" class="shortcutTooltip" focusable="false">
+						<text id="Shortcut_shortcutTooltipText6" class="shortcutTooltipText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000006"/>
+						</text>
+					</tooltip>
+				</button>
+
+				<!-- #5 -->
+				<button id="shortcutButton5" class="shortcutButton" focusable="true">
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x00000005)"/>
+						</action>
+						<action>
+						<trigger name="up"/><!-- joystick up -->
+							<event name="system/setfocus">
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+						<action>
+							<trigger name="down"/><!-- joystick down -->
+								<event name="system/setfocus">
+								<property name="id" value="playerPlugin"/>
+								<property name="id" value="radioPlugin"/>
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+					</actions>
+					<image id="Shortcut_shortcutIcon5" class="shortcutIcon" focusable="false">
+						<property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000005"/>
+					</image>
+					<tooltip id="Shortcut_shortcutTooltip5" class="shortcutTooltip" focusable="false">
+						<text id="Shortcut_shortcutTooltipText5" class="shortcutTooltipText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000005"/>
+						</text>
+					</tooltip>
+				</button>
+
+				<!-- #4 -->
+				<button id="shortcutButton4" class="shortcutButton" focusable="true">
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x00000004)"/>
+						</action>
+						<action>
+						<trigger name="up"/><!-- joystick up -->
+							<event name="system/setfocus">
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+						<action>
+							<trigger name="down"/><!-- joystick down -->
+							<event name="system/setfocus">
+								<property name="id" value="playerPlugin"/>
+								<property name="id" value="radioPlugin"/>
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+					</actions>
+					<image id="Shortcut_shortcutIcon4" class="shortcutIcon" focusable="false">
+						<property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000004"/>
+					</image>
+					<tooltip id="shortcutTooltip4" class="shortcutTooltip" focusable="false">
+						<text id="Shortcut_shortcutTooltipText4" class="shortcutTooltipText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000004"/>
+						</text>
+					</tooltip>
+				</button>
+
+				<!-- #3 -->
+				<button id="shortcutButton3" class="shortcutButton" focusable="true">
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x00000003)"/>
+						</action>
+						<action>
+						<trigger name="up"/><!-- joystick up -->
+							<event name="system/setfocus">
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+						<action>
+							<trigger name="down"/><!-- joystick down -->
+							<event name="system/setfocus">
+								<property name="id" value="playerPlugin"/>
+								<property name="id" value="radioPlugin"/>
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+					</actions>
+				 	<image id="Shortcut_shortcutIcon3" class="shortcutIcon" focusable="false">
+						<property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000003"/>
+					</image>
+					<tooltip id="Shortcut_shortcutTooltip3" class="shortcutTooltip" focusable="false">
+						<text id="Shortcut_shortcutTooltipText3" class="shortcutTooltipText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000003"/>
+						</text>
+					</tooltip>
+				</button>
+
+				<!-- #2 -->
+				<button id="shortcutButton2" class="shortcutButton" focusable="true">
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x00000002)"/>
+						</action>
+						<action>
+						<trigger name="up"/><!-- joystick up -->
+							<event name="system/setfocus">
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+						<action>
+							<trigger name="down"/><!-- joystick down -->
+							<event name="system/setfocus">
+								<property name="id" value="playerPlugin"/>
+								<property name="id" value="radioPlugin"/>
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+					</actions>
+					<image id="Shortcut_shortcutIcon2" class="shortcutIcon" focusable="false">
+							<property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000002"/>
+					</image>
+					<tooltip id="shortcutTooltip2" class="shortcutTooltip" focusable="false">
+						<text id="Shortcut_shortcutTooltipText2" class="shortcutTooltipText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000002"/>
+						</text>
+					</tooltip>
+				</button>
+
+				<!-- #1 -->
+				<button id="shortcutButton1" class="shortcutButton" focusable="true">
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x00000001)"/>
+						</action>
+						<action>
+						<trigger name="up"/><!-- joystick up -->
+							<event name="system/setfocus">
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+						<action>
+							<trigger name="down"/><!-- joystick down -->
+							<event name="system/setfocus">
+								<property name="id" value="playerPlugin"/>
+								<property name="id" value="radioPlugin"/>
+								<property name="id" value="calendarPluginContainer"/>
+							</event>
+						</action>
+					</actions>
+					<image id="Shortcut_shortcutIcon1" class="shortcutIcon" focusable="false">
+							<property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000001"/>
+					</image>
+					<tooltip id="shortcutTooltip1" class="shortcutTooltip" focusable="false">
+						<text id="Shortcut_shortcutTooltipText1" class="shortcutTooltipText" focusable="false">
+							<property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000001"/>
+						</text>
+					</tooltip>
+				</button>
+		</box>
+		<!--#######################################
+		    #####          SAT plugin         #####
+		    #######################################-->
+
+			<box id="SATPluginContainer" class="pluginContainerBox" focusable="false">
+
+<!--			
+			<actions>
+					<action>
+						<trigger name="stylus"/>
+						<trigger name="activate"/>
+						<event name="SAT/LaunchSatapp"/>
+					</action>
+
+					<action>
+						<trigger name="losevisualisation"/>
+							<event name="system/setfocus">
+							<property name="id" value="shortcutButton1"/>
+							</event>
+					</action>
+					
+					<action>
+						<trigger name="gainfocus"/>
+						<event name ="system/set">
+					 		<property name="id" value="MSK"/>
+					 		<property name="name" value="label"/>
+					 		<property name="value" value=""/>
+					 		<property name="type" value="attribute"/>
+						</event>
+					</action>
+
+					<action>
+						<trigger name="losefocus"/>
+						<event name ="system/set">
+					 		<property name="id" value="MSK"/>
+					 		<property name="name" value="label"/>
+					 		<property name="value" value="&qtn_msk_open;"/>
+					 		<property name="type" value="attribute"/>
+						</event>
+					</action>
+
+					<action>
+					<trigger name="left"/>
+						<event name="system/setfocus">
+						<property name="id" value="calendarPluginContainer"/>
+						</event>
+					</action>
+
+					<action>
+						<trigger name="right"/>
+						<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+						</event>
+					</action>
+
+			</actions>
+-->
+				<text id="SatIdleModeText" class="satText" focusable="false">
+					<property class="SAT/SatIdleModeText"/>
+					<property class="policy/emptyContent" name="SATPluginContainer" value="display: none;"/>
+					<property class="policy/emptyContent" name="mpVolume" value="top: 4u;"/> <!-- we are not active reset MP pop-up to it's original location -->
+					<property class="policy/emptyContent" name="radioVolume" value="top: 4u;"/> <!-- we are not active reset radio pop-up to it's original location -->
+					<property class="policy/Content" name="SATPluginContainer" value="display: block;"/>
+					<property class="policy/Content" name="SatIdleModeIcon" value="display: block;"/>
+					<property class="policy/Content" name="mpVolume" value="top: 9u;"/> <!-- in case MP is active we need to adjust its pop-up location from here -->
+					<property class="policy/Content" name="radioVolume" value="top: 9u;"/> <!-- in case radio is active we need to adjust its pop-up location from here -->
+				</text>
+				<image id="SatIdleModeIcon" class="satIcon" focusable="false">
+					<property class="SAT/SatIdleModeIcon"/>
+					<property class="policy/Content" name="SatIdleModeText" value="margin-right: 6.0u;"/>
+					<property class="policy/emptyContent" name="SatIdleModeText" value="margin-right: 1.0u;"/>
+				</image>
+		</box> <!-- SAT plugin -->
+
+		<!--########################################
+		    #####         Player plugin         ####
+		    ########################################-->
+		<box id="playerPlugin" class="pluginContainerBox" focusable="true">
+			<actions>
+			
+				<action>
+					<!-- if focused and box is hidden move focus to SC1 -->
+					<trigger name="losevisualisation"/>
+					<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+					</event>
+				</action>
+
+				<action>
+					<!-- when focused show the volume controll pop-up -->
+					<trigger name="gainfocus"/>
+					<event name ="system/set">
+						<property name="name" value="display"/>
+						<property name="value" value="block"/>
+						<property name="type" value="string"/>
+						<property name="id" value="mpVolume"/>
+					</event>
+				</action>
+
+				<action>
+					<!-- when focus is lost hide the volume controll pop-up -->
+					<trigger name="losefocus"/>
+					<event name="system/set">
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+						<property name="id" value="mpVolume"/>
+					</event>
+				</action>
+
+				<action>
+					<!-- when clicked activate the Music Library -->
+					<trigger name="stylus"/>
+					<trigger name="activate"/>
+					<event name="MusicPlayer/Library"/>
+				</action>
+
+				<action>
+					<!-- decrease volume -->
+					<trigger name="down"/>
+					<event name="MusicPlayer/VolDec"/>
+				</action>
+
+				<action>
+					<!-- increase volume -->
+					<trigger name="up"/>
+					<event name="MusicPlayer/VolInc"/>
+				</action>
+				
+				<!-- navigation out from the box -->
+				<action>
+					<!-- joystick up -->
+					<trigger name="left"/>
+					<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+					</event>
+				</action>
+					
+				<action>
+					<!-- joystick down -->
+					<trigger name="right"/>
+					<event name="system/setfocus">
+						<property name="id" value="calendarPluginContainer"/> <!-- no need to add NT after calendar because calendar is static, allways visible -->
+					</event>
+				</action>
+
+			</actions>
+
+			<image id="playerStatusIcon" focusable="false">
+				<property class="MusicPlayer/Status"/>
+				<property class="policy/emptyContent" name="playerPlugin" value="display:none"/>
+				<property class="policy/Content" name="playerPlugin" value="display:block"/>
+			</image>
+
+			<text id="playerTitleText" focusable="false">
+				<property class="MusicPlayer/Title"/>
+				<property class="policy/Content" name="playerTitleText" value="display: block;"/>
+			</text>
+
+			<text id="playerDurationText" focusable="false">
+				<property class="MusicPlayer/ElapsedTime"/>
+			</text>
+		</box> <!-- playerPlugin-->
+
+		<!--######################################
+		    ####       Volume Controll for music player       ####
+		    ######################################-->
+		<box id="mpVolume" focusable="false">
+
+			<image id="musicPlayerInactiveVolumeDownIcon" path="SKIN(270501603 6420)" focusable="false"/>
+			<image id="musicPlayerVolumeDownIcon" path="SKIN(270501603 6419)" focusable="false"/>
+			
+			<!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+			<image id="musicPlayerSpeakerIcon" path="SKIN(270501603 4332)" focusable="false"/>
+			<image id="musicPlayerSpeakerMutedIcon" path="SKIN(270501603 4334)" focusable="false"/>
+			
+			<image id="musicPlayerInactiveVolumeUpIcon" path="SKIN(270501603 6422)" focusable="false"/>
+			<image id="musicPlayerVolumeUpIcon" path="SKIN(270501603 6421)" focusable="false"/>
+
+			<image id="musicPlayerVolumeIcon" focusable="false">
+				<property class="MusicPlayer/Volume"/>
+				<property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if (MusicPlayer/Vol0) display:block"/>
+				<property class="policy/Resource" name="musicPlayerSpeakerMutedIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+				<property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+				<property class="policy/Resource" name="musicPlayerSpeakerIcon" value="if (MusicPlayer/Vol0) display:none"/>
+
+				<property class="policy/Resource" name="musicPlayerInactiveVolumeDownIcon" value="if (MusicPlayer/Vol0) display:block"/>
+				<property class="policy/Resource" name="musicPlayerInactiveVolumeDownIcon" value="if !(MusicPlayer/Vol0) display:none"/>
+				<property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9, MusicPlayer/Vol10 ) display:block"/>
+				<property class="policy/Resource" name="musicPlayerVolumeDownIcon" value="if (MusicPlayer/Vol0) display:none"/>
+				<property class="policy/Resource" name="musicPlayerInactiveVolumeUpIcon" value="if (MusicPlayer/Vol10) display:block"/>
+				<property class="policy/Resource" name="musicPlayerInactiveVolumeUpIcon" value="if !(MusicPlayer/Vol10) display:none"/>
+				<property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol0, MusicPlayer/Vol1, MusicPlayer/Vol2, MusicPlayer/Vol3, MusicPlayer/Vol4, MusicPlayer/Vol5, MusicPlayer/Vol6, MusicPlayer/Vol7, MusicPlayer/Vol8, MusicPlayer/Vol9 ) display:block"/>
+				<property class="policy/Resource" name="musicPlayerVolumeUpIcon" value="if (MusicPlayer/Vol10) display:none"/>
+			</image>
+		</box> <!-- mpVolume -->
+
+	
+		<!--########################################
+		    #####         Visual/Internet radio plugin         ####
+		    ########################################-->
+		<box id="radioPlugin" class="pluginContainerBox" focusable="true">
+			<actions>
+			
+				<action>
+					<!-- if focused and box is hidden move focus to SC1 -->
+					<trigger name="losevisualisation"/>
+					<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+					</event>
+				</action>
+
+				<action>
+					<!-- when focused show the volume control pop-up -->
+					<trigger name="gainfocus"/>
+					<event name ="system/set">
+						<property name="name" value="display"/>
+						<property name="value" value="block"/>
+						<property name="type" value="string"/>
+						<property name="id" value="radioVolume"/>
+					</event>
+				</action>
+
+				<action>
+					<!-- when focus is lost hide the volume control pop-up -->
+					<trigger name="losefocus"/>
+					<event name="system/set">
+						<property name="name" value="display"/>
+						<property name="value" value="none"/>
+						<property name="type" value="string"/>
+						<property name="id" value="radioVolume"/>
+					</event>
+				</action>
+
+				<action>
+					<!-- when clicked activate the radio -->
+					<trigger name="stylus"/>
+					<trigger name="activate"/>
+					<event name="VisualRadio/LaunchRadio"/>
+					<!-- Always let Visual Radio plug-in handle the launch event. It will start Radio Launcher. -->
+				</action>
+
+				<action>
+					<!-- decrease volume -->
+					<trigger name="down"/>
+					<event name="VisualRadio/VolDec"/>
+					<event name="InetRadio/VolDec"/>
+				</action>
+
+				<action>
+					<!-- increase volume -->
+					<trigger name="up"/>
+					<event name="VisualRadio/VolInc"/>
+					<event name="InetRadio/VolInc"/>
+				</action>
+				
+				<!-- navigation out from the box -->
+				<action>
+					<!-- joystick up -->
+					<trigger name="left"/>
+					<event name="system/setfocus">
+						<property name="id" value="shortcutButton1"/>
+					</event>
+				</action>
+					
+				<action>
+					<!-- joystick down -->
+					<trigger name="right"/>
+					<event name="system/setfocus">
+						<property name="id" value="calendarPluginContainer"/> <!-- no need to add NT after calendar because calendar is static, allways visible -->
+					</event>
+				</action>
+
+			</actions>
+
+			<image id="radioStatusIcon" focusable="false">
+				<property class="VisualRadio/OneLineIcon" name="priority" value="0"/>
+				<property class="InetRadio/OneLineIcon" name="priority" value="1"/>
+				<property class="policy/emptyContent" name="radioPlugin" value="display:none"/>
+				<property class="policy/Content" name="radioPlugin" value="display:block"/>
+			</image>
+
+			<text id="radioTitleText" focusable="false">
+				<property class="VisualRadio/OneLineInfo" name="priority" value="0"/>
+				<property class="InetRadio/OneLineInfo" name="priority" value="1"/>
+				<property class="policy/Content" name="radioTitleText" value="display: block;"/>
+			</text>
+
+		</box> <!-- radioPlugin-->
+
+		<!--######################################
+		    ####       Volume Control for Visual/Internet Radio       ####
+		    ######################################-->
+		<box id="radioVolume" focusable="false">
+
+			<image id="radioInactiveVolumeDownIcon" path="SKIN(270501603 6420)" focusable="false"/>
+			<image id="radioVolumeDownIcon" path="SKIN(270501603 6419)" focusable="false"/>
+			
+			<!-- NOTE! Either speaker icon or muted speaker icon is visible, not both. See policy in volume control below. -->
+			<image id="radioSpeakerIcon" path="SKIN(270501603 4332)" focusable="false"/>
+			<image id="radioSpeakerMutedIcon" path="SKIN(270501603 4334)" focusable="false"/>
+			
+			<image id="radioInactiveVolumeUpIcon" path="SKIN(270501603 6422)" focusable="false"/>
+			<image id="radioVolumeUpIcon" path="SKIN(270501603 6421)" focusable="false"/>
+
+			<image id="radioVolumeIcon" focusable="false">
+				<property class="VisualRadio/Volume" name="priority" value="0"/>
+				<property class="InetRadio/Volume" name="priority" value="1"/>
+				<property class="policy/Resource" name="radioSpeakerMutedIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+				<property class="policy/Resource" name="radioSpeakerMutedIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+				<property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+				<property class="policy/Resource" name="radioSpeakerIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+
+				<property class="policy/Resource" name="radioInactiveVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:block"/>
+				<property class="policy/Resource" name="radioInactiveVolumeDownIcon" value="if !(VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+				<property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, VisualRadio/Vol10, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9, InetRadio/Vol10 ) display:block"/>
+				<property class="policy/Resource" name="radioVolumeDownIcon" value="if (VisualRadio/Vol0, InetRadio/Vol0) display:none"/>
+				<property class="policy/Resource" name="radioInactiveVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:block"/>
+				<property class="policy/Resource" name="radioInactiveVolumeUpIcon" value="if !(VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+				<property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol0, VisualRadio/Vol1, VisualRadio/Vol2, VisualRadio/Vol3, VisualRadio/Vol4, VisualRadio/Vol5, VisualRadio/Vol6, VisualRadio/Vol7, VisualRadio/Vol8, VisualRadio/Vol9, InetRadio/Vol0, InetRadio/Vol1, InetRadio/Vol2, InetRadio/Vol3, InetRadio/Vol4, InetRadio/Vol5, InetRadio/Vol6, InetRadio/Vol7, InetRadio/Vol8, InetRadio/Vol9 ) display:block"/>
+				<property class="policy/Resource" name="radioVolumeUpIcon" value="if (VisualRadio/Vol10, InetRadio/Vol10) display:none"/>
+			</image>
+            
+            <image id="invisibleVRImage" class="invisibleRadioIcon" focusable="false">
+                <property class="VisualRadio/TitleIcon" name="priority" value="0"/>
+                <property class="policy/emptyContent" name="radioVolume" value="visibility: visible"/>
+                <property class="policy/Resource" name="radioVolume" value="if (VisualRadio/VisualRadioInactive) visibility:hidden"/>
+                <property class="policy/Resource" name="radioVolume" value="if (VisualRadio/VisualRadioPlaying) visibility: visible"/>
+            </image>
+         
+		</box> <!-- radioVolume -->
+
+
+		<!--######################################
+		    ####       Organizer plugin       ####
+		    ######################################-->
+			<box id="calendarPluginContainer" class="pluginContainerBox" focusable="true">
+				<actions>
+					<action>
+						<!-- activate organizer -->
+						<trigger name="stylus"/>
+						<trigger name="activate"/>
+						<event name="Organizer/ItemSelected(0)"/>
+					</action>
+
+					<action>
+						<!-- joystick up -->
+						<trigger name="left"/>
+						<event name="system/setfocus">
+							<property name="id" value="playerPlugin"/>
+							<property name="id" value="radioPlugin"/>
+							<property name="id" value="shortcutButton1"/>
+						</event>
+					</action>
+
+					<action>
+						<!-- joystick down -->
+						<trigger name="right"/>
+						<event name="system/setfocus">
+							<property name="id" value="shortcutButton1"/>
+						</event>
+					</action>
+				</actions>
+
+				<!-- #1 -->
+				<button id="calendarEntryBox1" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon1" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x01"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon1" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText1_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText1_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon1" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText1_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText1_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText1_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x01"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarPluginContainer" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox1" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox1" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarPluginContainer" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox1" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox1" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText1_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x01"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText1_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox1" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText1_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox1" value="height: 8.5u;"/>
+					</text>
+				</button>
+
+				<!-- #2 -->
+				<button id="calendarEntryBox2" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon2" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x02"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText2_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText2_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText2_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText2_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText2_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x02"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox2" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox2" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText2_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x02"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText2_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox2" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText2_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox2" value="height: 8.5u;"/>
+					</text>
+				</button>
+
+				<!-- #3 -->
+				<button id="calendarEntryBox3" class="calendarEntryBox" focusable="true">
+					<property name="calendarEntryBox3" value="background-color: red;"/>
+					<image id="calendarEntryIcon3" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x03"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon3" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText3_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText3_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon3" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText3_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText3_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText3_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x03"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox3" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox3" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox3" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox3" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText3_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x03"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText3_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox3" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText3_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox3" value="height: 8.5u;"/>
+					</text>
+				</button>
+
+				<!-- #4 -->
+				<button id="calendarEntryBox4" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon4" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x04"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon4" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText4_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText4_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon4" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText4_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText4_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText4_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x04"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox4" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox4" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox4" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox4" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText4_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x04"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText4_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox4" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText4_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox4" value="height: 8.5u;"/>
+					</text>
+				</button>
+
+				<!-- #5 -->
+				<button id="calendarEntryBox5" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon5" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x05"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon5" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText5_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText5_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon5" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText5_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText5_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText5_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x05"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox5" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox5" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox5" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox5" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText5_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x05"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText5_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox5" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText5_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox5" value="height: 8.5u;"/>
+					</text>
+				</button>
+
+				<!-- #6 -->
+				<button id="calendarEntryBox6" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon6" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x06"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon6" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText6_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText6_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon6" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText6_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText6_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText6_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x06"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox6" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox6" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox6" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox6" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText6_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x06"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText6_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox6" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText6_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox6" value="height: 8.5u;"/>
+					</text>
+				</button>
+				
+				<!-- #7 -->
+				<button id="calendarEntryBox7" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon7" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x07"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon7" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText7_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText7_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon7" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText7_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText7_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText7_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x07"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox7" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox7" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox7" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox7" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText7_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x07"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText7_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox7" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText7_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox7" value="height: 8.5u;"/>
+					</text>
+				</button>
+
+				<!-- #8 -->
+				<button id="calendarEntryBox8" class="calendarEntryBox" focusable="true">
+					<image id="calendarEntryIcon8" class="calendarEntryIcon" focusable="false">
+						<property class="Organizer/EventIcon" name="ordinal" value="0x08"/>
+						<!-- If there is no image, the left side of the first text line will take the space of the image. -->
+						<property class="policy/emptyContent" name="calendarEntryIcon8" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryText8_1" value="left: 0.7u;"/>
+						<property class="policy/emptyContent" name="calendarEntryText8_2" value="left: 0.7u;"/>
+						<!-- If image exists, left side of the first text line will be on the right side of the image. -->
+						<property class="policy/Content" name="calendarEntryIcon8" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryText8_1" value="left: 5.75u;"/>
+						<property class="policy/Content" name="calendarEntryText8_2" value="left: 5.75u;"/>
+					</image>
+					<text id="calendarEntryText8_1" class="calendarEntryText1" focusable="false">
+						<property class="Organizer/Event1stLine" name="ordinal" value="0x08"/>
+						<!-- If there is no text, the entry box is not shown at all -->
+						<property class="policy/emptyContent" name="calendarEntryBox8" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox8" value="nav-index: none;"/>
+						<property class="policy/Content" name="calendarEntryBox8" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox8" value="nav-index: auto;"/>
+					</text>
+					<text id="calendarEntryText8_2" class="calendarEntryText2" focusable="false">
+						<property class="Organizer/Event2ndLine" name="ordinal" value="0x08"/>
+						<!-- If there is no second text line, decrease the height of the box -->
+						<property class="policy/emptyContent" name="calendarEntryText8_2" value="display: none;"/>
+						<property class="policy/emptyContent" name="calendarEntryBox8" value="height: 4.25u;"/>
+						<property class="policy/Content" name="calendarEntryText8_2" value="display: block;"/>
+						<property class="policy/Content" name="calendarEntryBox8" value="height: 8.5u;"/>
+					</text>
+				</button>
+			</box>
+
+
+
+			<!--#################################################
+			    ####     Menubar with soft key shortcuts     ####
+			    #################################################-->
+			<menubar>
+				<menuitem id="Shortcut_SK1" label="">
+					<!-- ordinal value is the same as in the default settings -->
+					<property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000100"/>
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<trigger name="activate"/>
+							<event name="Shortcut/LaunchByIndex(0x01000100)"/>
+						</action>
+					</actions>
+				</menuitem>
+				<menuitem id="Shortcut_SK2" label="">
+					<property class="Shortcut/ShortcutShortCaption" name="ordinal" value="0x01000101"/>
+					<actions>
+						<action>
+							<trigger name="stylus"/>
+							<!-- if using both activate and hold for same SK active trigger need to be specified like this (2 = keyup) otherwise hold will not work -->
+							<trigger name="activate"><property name="eventtype" value="2"/></trigger>
+							<event name="Shortcut/LaunchByIndex(0x01000101)"/>
+						</action>
+						<action>
+							<trigger name="hold"/>
+							<event name="Shortcut/LaunchByValue(localapp:0x10281867)"/>
+						</action>
+					</actions>
+				</menuitem>
+				<menuitem id="MSK" label="&qtn_msk_open;"/>
+			</menubar>
+		</view>
+	</views>
+
+</xmluiml>
Binary file internetradio2.0/activeidlethemes/themes/ClassicIdle/irclassicidle.mif has changed
Binary file internetradio2.0/activeidlethemes/themes/ClassicIdle/vrclassicidle.mif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/activeidlethemes/themes/iractiveidlemif.bat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,18 @@
+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
+
+mifconv ClassicIdle\irclassicidle.mif /c8,8 ..\..\mbm\qgn_indi_ai_music_play.svg /c8,8 ..\..\mbm\qgn_indi_ai_music_stop.svg
+mifconv ActiveIdle\iractiveidle.mif /c8,8 ..\..\mbm\qgn_indi_ai_music_play.svg /c8,8 ..\..\mbm\qgn_indi_ai_music_stop.svg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/aif/qgn_menu_irradio.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 44 44">
+<g>
+<g>
+<g>
+<path d="M33.216,16.98c-1.104,0-2,0.896-2,2v12.941c0,1.104,0.896,2,2,2h3.451c1.104,0,2-0.896,2-2V18.98c0-1.104-0.896-2-2-2       H33.216z"/>
+</g>
+<g>
+<path d="M7.333,16.98c-1.104,0-2,0.896-2,2v12.941c0,1.104,0.896,2,2,2h3.451c1.104,0,2-0.896,2-2V18.98c0-1.104-0.896-2-2-2       H7.333z"/>
+</g>
+<g>
+<path d="M8.196,25.45c0,3.688,1.436,7.155,4.043,9.763c2.607,2.606,6.073,4.042,9.76,4.042c7.611,0,13.804-6.192,13.804-13.805       c0-7.611-6.192-13.803-13.804-13.803C14.388,11.647,8.196,17.839,8.196,25.45z"/>
+</g>
+<circle fill="#635E54" cx="22" cy="25.45" r="12.941"/>
+<path fill="#AAA096" d="M11.571,31.533l21.557-10.778c-1.836-4.334-6.133-7.382-11.128-7.382      c-6.66,0-12.079,5.418-12.079,12.078C9.921,27.668,10.525,29.745,11.571,31.533z"/>
+<g>
+<path fill="#4F4A44" d="M18.567,13.336h-1.084c-0.516,0.193-1.021,0.41-1.503,0.664v1.063c0,0,0,0.862-0.863,0.862       s-1.727,0-1.727,0s-0.047,0-0.114-0.012c-2.199,2.014-3.699,4.77-4.098,7.878c0.434,0.435,0.763,0.764,0.763,0.764       s-0.862,0.86,0,1.725c0.863,0.862,4.314,4.313,4.314,4.313s-0.863,0.863,0,1.726c0.803,0.802,1.726,1.727,1.726,1.727v2.858       c1.319,0.695,2.772,1.161,4.313,1.364v-0.771c0.863,0,1.725-0.864,1.725-1.727v-4.313c0-0.762-0.913-1.726-1.725-1.726       s-1.726,0-1.726,0s-0.337-0.337-0.863-0.862c-0.526-0.527-1.225-0.504-1.725,0c-0.5,0.501-0.863,0.862-0.863,0.862       l-1.726-1.726c0.427-0.427,0.46-1.249,0-1.709c-0.46-0.461-0.861-0.88-0.861-0.88c-0.446-0.444-0.446-1.282,0-1.726       c0.442-0.444,1.279-0.444,1.724,0l0.863,0.865v1.725c0,0.431,0.863,0.431,0.863,0v-1.725l1.725-2.589c0,0,0,0,0.863,0       c0.862,0,1.726-0.864,1.726-1.727c0-0.861-0.863-1.726-1.726-1.726c-0.806,0-0.431,0-0.863,0s-0.432-0.864,0-0.864       s1.725,0,1.725,0s-0.001,0,0.863,0.864c0.432,0.433,1.294,0.431,1.726,0c0.431-0.432,0.429-1.294,0-1.726       C21.949,16.719,18.567,13.336,18.567,13.336z M34.676,22.826h-1.442l-1.726,1.728c0,0-1.725,0-2.587,0       c-0.863,0-1.727,0.86-1.727,1.725v2.588c0,0.825,0.921,1.725,1.727,1.725c0,0.009,0.862,0,0.862,0s0,0.863,0,1.726       c0,0.863,0.863,0.863,0.863,0.863v1.883c2.631-2.369,4.295-5.791,4.295-9.612C34.941,24.554,34.848,23.674,34.676,22.826z        M28.921,23.688c0.862,0,0.862-0.862,0.862-0.862v-1.722c0,0,0.005-0.866,0.864-0.866h2.586c0,0,0,0.863,0.863,0.863       c0.027,0,0.052,0,0.079,0c-1.28-3.587-4.092-6.436-7.658-7.765h-0.187l-1.725,1.726v2.591l0.696,0.696       c0.222,0.224,0.641,0.224,0.862,0c0.223-0.222,0.223-0.641,0-0.863l-0.255-0.254c-0.452-0.453,0-0.875,0-0.875       s0.421-0.433,0.854,0c0.431,0.432,0.86,0.867,0.86,0.867s-1.754,1.756-2.154,2.153c-0.399,0.401,0,0.864,0,0.864l0.861,0.863       c0,0,0,0.861,0,1.722c0,0.862,0.863,0.862,0.863,0.862S28.058,23.688,28.921,23.688z"/>
+<path fill="#FFFDFC" d="M18.288,13.057c-1.161,0.346-2.251,0.857-3.251,1.495c-0.087,0.229-0.285,0.474-0.717,0.501       c-3.171,2.345-5.239,6.097-5.257,10.342c0.005,0.006,0.009,0.013,0.016,0.02c0.862,0.863,4.313,4.313,4.313,4.313       s-0.861,0.863,0,1.725c0.803,0.803,1.726,1.728,1.726,1.728v3.217c1.301,0.82,2.754,1.423,4.313,1.738V36.63       c0.863,0,1.726-0.862,1.726-1.725v-4.314c0-0.765-0.913-1.727-1.726-1.727c-0.813,0-1.725,0-1.725,0s-0.337-0.336-0.862-0.861       c-0.526-0.527-1.225-0.502-1.726,0c-0.5,0.501-0.863,0.861-0.863,0.861L12.53,27.14c0.425-0.427,0.458-1.248,0-1.709       c-0.461-0.46-0.864-0.879-0.864-0.879c-0.444-0.446-0.444-1.282,0-1.726c0.443-0.445,1.281-0.445,1.725,0l0.863,0.862v1.726       c0,0.431,0.863,0.431,0.863,0v-1.726l1.726-2.589c0,0,0,0,0.862,0c0.863,0,1.725-0.861,1.725-1.724       c0-0.864-0.862-1.727-1.725-1.727c-0.806,0-0.432,0-0.862,0c-0.432,0-0.432-0.862,0-0.862c0.431,0,1.725,0,1.725,0       s-0.002-0.001,0.862,0.862c0.431,0.432,1.295,0.432,1.726,0c0.431-0.431,0.43-1.296,0-1.725       C21.105,15.873,19.258,14.027,18.288,13.057z M34.891,24.443c-0.088-0.143-0.093-0.299-0.035-0.446       c-0.078-0.695-0.218-1.374-0.403-2.033h-2.081l-1.725,1.725c0,0-1.726,0-2.589,0s-1.727,0.863-1.727,1.726v2.588       c0,0.824,0.922,1.726,1.727,1.726c0,0.008,0.863,0,0.863,0s0,0.863,0,1.725c0,0.863,0.862,0.863,0.862,0.863v3.459       c3.128-2.362,5.158-6.102,5.158-10.324C34.941,25.111,34.916,24.777,34.891,24.443z M28.058,22.826       c0.863,0,0.863-0.862,0.863-0.862v-1.723c0,0,0.004-0.867,0.864-0.867h2.586c0,0,0,0.864,0.862,0.864c0.206,0,0.411,0,0.607,0       c-1.606-3.645-4.843-6.396-8.785-7.351l-1.313,1.311v2.591l0.696,0.695c0.224,0.222,0.641,0.222,0.863,0       c0.222-0.22,0.222-0.639,0-0.861l-0.255-0.255c-0.453-0.453,0-0.875,0-0.875s0.422-0.434,0.853,0       c0.431,0.433,0.861,0.867,0.861,0.867s-1.756,1.755-2.155,2.154c-0.399,0.4,0,0.863,0,0.863l0.863,0.864c0,0,0,0.858,0,1.723       c0,0.862,0.861,0.862,0.861,0.862S27.194,22.826,28.058,22.826z"/>
+</g>
+<path fill="#4F4A44" d="M32.756,18.252c-0.241,0.153-0.403,0.421-0.403,0.728v12.941c0,0.307,0.162,0.574,0.403,0.728      c1.38-2.059,2.186-4.534,2.186-7.199C34.941,22.786,34.136,20.311,32.756,18.252z"/>
+<path fill="#4F4A44" d="M11.245,32.649c0.241-0.153,0.402-0.421,0.402-0.728V18.98c0-0.307-0.161-0.574-0.402-0.728      c-1.38,2.058-2.186,4.533-2.186,7.197C9.059,28.115,9.865,30.591,11.245,32.649z"/>
+<path d="M22,4.313L22,4.313L22,4.313c-11.155,0-19.412,4.399-19.412,14.667c0,6.284,0.062,8.442,2.588,10.353h3.02v-5.607h-3.02      c0,0-0.062-0.831-0.062-2.218c0-9.298,7.224-13.496,16.885-13.496v0c9.661,0,16.885,4.198,16.885,13.496      c0,1.388-0.062,2.218-0.062,2.218h-3.02v5.607h3.02c2.527-1.911,2.589-6.532,2.589-10.353C41.412,8.713,33.154,4.313,22,4.313z"/>
+<g>
+<path fill="#D9D9D9" d="M3.451,18.98L3.451,18.98c0,6.094,0.102,7.905,2.045,9.49c0.349,0,1.087,0,1.837,0       c0-1.011,0-2.872,0-3.883c-0.88,0-2.996,0-2.996,0l-0.021-0.799l-0.064-2.282c0-8.991,6.635-14.359,17.748-14.359       c11.113,0,17.748,5.369,17.748,14.359l-0.088,3.12l-0.837-0.04c0,0-1.276,0-2.156,0c0,1.011,0,2.872,0,3.883       c0.737,0,1.435,0,1.806,0c2.059-1.809,2.076-6.225,2.076-9.49C40.549,6.97,28.928,5.176,22,5.176S3.451,6.97,3.451,18.98z"/>
+</g>
+<rect x="7.333" y="18.98" fill="#6EC3FF" width="3.451" height="12.941"/>
+<polygon fill="#2882C8" points="9.921,18.98 9.921,31.059 7.333,31.059 7.333,31.922 10.784,31.922 10.784,18.98 "/>
+<rect x="33.216" y="18.98" fill="#6EC3FF" width="3.451" height="12.941"/>
+<polygon fill="#2882C8" points="35.804,18.98 35.804,31.059 33.216,31.059 33.216,31.922 36.667,31.922 36.667,18.98 "/>
+<path d="M22,4.314L22,4.314L22,4.314c-11.57,0-17.605,4.866-18.549,12.078h4.745C9.47,10.775,13.634,8.602,22,8.585l0,0v0.001      c8.367,0.016,12.53,2.189,13.803,7.806h4.745C39.604,9.18,33.569,4.314,22,4.314z"/>
+<rect fill="none" width="44" height="44"/>
+<g>
+<path fill="#595959" d="M3.854,15.529c1.169,0,2.892,0,3.681,0c1.522-5.439,5.893-7.79,14.463-7.807       c8.574,0.017,12.945,2.368,14.466,7.807c0.789,0,2.511,0,3.681,0C38.075,6.571,27.988,5.176,22,5.176       C16.012,5.176,5.925,6.571,3.854,15.529z"/>
+</g>
+<rect x="36.667" y="24.588" fill="#8A8A8A" width="0.862" height="3.883"/>
+<path fill="#383838" d="M40.176,15.529h-1.614c0.125,0.281,0.237,0.57,0.343,0.863h1.438      C40.295,16.097,40.24,15.81,40.176,15.529z"/>
+<path fill="#383838" d="M3.657,16.392h1.438c0.105-0.293,0.218-0.582,0.342-0.863H3.824C3.76,15.81,3.705,16.097,3.657,16.392z"/>
+<rect x="6.471" y="24.588" fill="#8A8A8A" width="0.863" height="3.883"/>
+<path fill="#8A8A8A" d="M22,5.176c-5.988,0-16.075,1.395-18.146,10.353c0.069-0.297,0.15-0.582,0.235-0.863h2.828      c1.797-5.374,6.461-7.79,15.079-7.807c1.701,0.003,3.243,0.104,4.644,0.298l2.47-1.234C26.583,5.348,24.051,5.176,22,5.176z       M21.999,7.723c1.155,0.002,2.224,0.053,3.23,0.142l0.009-0.004"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/iractiveidleengineu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN16CIRActiveIdleEng16SecondConstructLEv @ 1 NONAME
+	_ZN16CIRActiveIdleEng4NewLER29MIRActiveIdleEngNotifyHandler @ 2 NONAME
+	_ZN16CIRActiveIdleEngD0Ev @ 3 NONAME
+	_ZN16CIRActiveIdleEngD1Ev @ 4 NONAME
+	_ZN16CIRActiveIdleEngD2Ev @ 5 NONAME
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/ircachemgmtu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,15 @@
+EXPORTS
+	_ZN12CIRCacheMgmt10CacheLogoLERK6TDesC8RK7TDesC16RK19CIRHttpResponseData @ 1 NONAME
+	_ZN12CIRCacheMgmt11CheckCacheLEiRK7TDesC16iRi @ 2 NONAME
+	_ZN12CIRCacheMgmt12AddObserverLEP16MIRCacheObserver @ 3 NONAME
+	_ZN12CIRCacheMgmt13CacheOtaInfoLERK12CIROTAUpdateRK7TDesC16RK19CIRHttpResponseData @ 4 NONAME
+	_ZN12CIRCacheMgmt14RemoveObserverEP16MIRCacheObserver @ 5 NONAME
+	_ZN12CIRCacheMgmt14RemoveOtaInfoLEv @ 6 NONAME
+	_ZN12CIRCacheMgmt16CachePresetItemLER13CArrayPtrFlatI13CIRIsdsPresetERK7TDesC16RK19CIRHttpResponseData @ 7 NONAME
+	_ZN12CIRCacheMgmt18CacheChannelItemsLER13CArrayPtrFlatI21CIRBrowseChannelItemsERK7TDesC16RK19CIRHttpResponseData @ 8 NONAME
+	_ZN12CIRCacheMgmt18UpdateTrustPeriodLEiRK7TDesC16R19CIRHttpResponseData @ 9 NONAME
+	_ZN12CIRCacheMgmt19CacheCategoryItemsLER13CArrayPtrFlatI22CIRBrowseCatagoryItemsERK7TDesC16RK19CIRHttpResponseData @ 10 NONAME
+	_ZN12CIRCacheMgmt5OpenLER16MIRCacheObserver @ 11 NONAME
+	_ZTI12CIRCacheMgmt @ 12 NONAME ; #<TI>#
+	_ZTV12CIRCacheMgmt @ 13 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/ircommandchannelu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,9 @@
+EXPORTS
+	_ZN18CIRCtrlCmdObserver11FetchVolumeEv @ 1 NONAME
+	_ZN18CIRCtrlCmdObserver11SentRequestE18TIRControlCommmandi @ 2 NONAME
+	_ZN18CIRCtrlCmdObserver13FilltheBufferER5TDes8 @ 3 NONAME
+	_ZN18CIRCtrlCmdObserver14AudioFadeInOutER18TIRControlCommmandi @ 4 NONAME
+	_ZN18CIRCtrlCmdObserver14DoAudioFadeOutEv @ 5 NONAME
+	_ZN18CIRCtrlCmdObserver4NewLEP18MIRCtrlCmdObserverP13MIRStreamFill @ 6 NONAME
+	_ZN18CIRCtrlCmdObserver5NewLCEP18MIRCtrlCmdObserverP13MIRStreamFill @ 7 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irdataprovideru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,24 @@
+EXPORTS
+	_ZN15CIRDataProvider16ReleaseResourcesEv @ 1 NONAME
+	_ZN15CIRDataProvider19GetHttpDataProviderEv @ 2 NONAME
+	_ZN15CIRDataProvider19IRHttpCancelRequestEv @ 3 NONAME
+	_ZN15CIRDataProvider19IRHttpIssueRequestLER18CIRHttpRequestData @ 4 NONAME
+	_ZN15CIRDataProvider4NewLER23MIRDataProviderObserver @ 5 NONAME
+	_ZN15CIRDataProvider4NewLER23MIRDataProviderObserverRK7TDesC16 @ 6 NONAME
+	_ZN19CIRHttpDataProvider21GetLogoDownloadEngineEv @ 7 NONAME
+	_ZN21CIRLogoDownloadEngine12SendRequestLEP13CIRIsdsPresetP21MLogoDownloadObserveriii @ 8 NONAME
+	_ZN21CIRLogoDownloadEngine12SendRequestLEP13CIRIsdsPresetii @ 9 NONAME
+	_ZN21CIRLogoDownloadEngine13GetCacheLogoLERK7TDesC16Ri @ 10 NONAME
+	_ZN21CIRLogoDownloadEngine13SendCacheLogoEv @ 11 NONAME
+	_ZN21CIRLogoDownloadEngine13isLogoCachedLEP13CIRIsdsPresetii @ 12 NONAME
+	_ZN21CIRLogoDownloadEngine16SetFavDbInstanceEP14CIRFavoritesDb @ 13 NONAME
+	_ZN21CIRLogoDownloadEngine17CancelTransactionEv @ 14 NONAME
+	_ZN21CIRLogoDownloadEngine19SendPresetWithLogoLEv @ 15 NONAME
+	_ZN21CIRLogoDownloadEngine4NewLEv @ 16 NONAME
+	_ZN21CIRLogoDownloadEngineD0Ev @ 17 NONAME
+	_ZN21CIRLogoDownloadEngineD1Ev @ 18 NONAME
+	_ZN21CIRLogoDownloadEngineD2Ev @ 19 NONAME
+	_ZNK21CIRLogoDownloadEngine9IsRunningEv @ 20 NONAME
+	_ZTI21CIRLogoDownloadEngine @ 21 NONAME
+	_ZTV21CIRLogoDownloadEngine @ 22 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irdatastructuresu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,135 @@
+EXPORTS
+	_ZN12CIROTAUpdate10ConstructLEv @ 1  NONAME
+	_ZN12CIROTAUpdate10SetVersionERK7TDesC16 @ 2  NONAME
+	_ZN12CIROTAUpdate12InternalizeLER11RReadStream @ 3  NONAME
+	_ZN12CIROTAUpdate15SetUpdateMethodERK7TDesC16 @ 4  NONAME
+	_ZN12CIROTAUpdate17SetUpdateIntervalERK7TDesC16 @ 5  NONAME
+	_ZN12CIROTAUpdate4NewLEv @ 6  NONAME
+	_ZN12CIROTAUpdate5NewLCEv @ 7  NONAME
+	_ZN12CIROTAUpdate9SetOTAUrlERK7TDesC16 @ 8  NONAME
+	_ZN13CIRIsdsPreset10SetGenreIdERK7TDesC16 @ 9  NONAME
+	_ZN13CIRIsdsPreset11SetLangCodeERK7TDesC16 @ 10  NONAME
+	_ZN13CIRIsdsPreset11SetLangInfoERK7TDesC16S2_ @ 11  NONAME
+	_ZN13CIRIsdsPreset11SetLogoDataERK6TDesC8 @ 12  NONAME
+	_ZN13CIRIsdsPreset11SetUrlCountEi @ 13  NONAME
+	_ZN13CIRIsdsPreset11SetUrlCountEv @ 14  NONAME
+	_ZN13CIRIsdsPreset12ExternalizeLER12RWriteStream @ 15  NONAME
+	_ZN13CIRIsdsPreset12InternalizeLER11RReadStream @ 16  NONAME
+	_ZN13CIRIsdsPreset12SetGenreInfoERK7TDesC16S2_ @ 17  NONAME
+	_ZN13CIRIsdsPreset12SetGenreNameERK7TDesC16 @ 18  NONAME
+	_ZN13CIRIsdsPreset12SetShortDescERK7TDesC16 @ 19  NONAME
+	_ZN13CIRIsdsPreset14SetChannelTypeEi @ 20  NONAME
+	_ZN13CIRIsdsPreset14SetCountryCodeERK7TDesC16 @ 21  NONAME
+	_ZN13CIRIsdsPreset14SetCountryInfoERK7TDesC16S2_ @ 22  NONAME
+	_ZN13CIRIsdsPreset14SetCountryNameERK7TDesC16 @ 23  NONAME
+	_ZN13CIRIsdsPreset14SetDescriptionERK7TDesC16 @ 24  NONAME
+	_ZN13CIRIsdsPreset17GetUrlForBitrateLEi @ 25  NONAME
+	_ZN13CIRIsdsPreset18GetChannelBitrateLEi @ 26  NONAME
+	_ZN13CIRIsdsPreset19SetAdvertisementUrlERK7TDesC16 @ 27  NONAME
+	_ZN13CIRIsdsPreset19SetLastModifiedTimeERK7TDesC16 @ 28  NONAME
+	_ZN13CIRIsdsPreset19SetMusicStoreStatusERK7TDesC16 @ 29  NONAME
+	_ZN13CIRIsdsPreset21SetAdvertisementInUseERK7TDesC16 @ 30  NONAME
+	_ZN13CIRIsdsPreset22GetExactUrlForBitrateLEi @ 31  NONAME
+	_ZN13CIRIsdsPreset4NewLEv @ 32  NONAME
+	_ZN13CIRIsdsPreset5NewLCEv @ 33  NONAME
+	_ZN13CIRIsdsPreset5SetIdERK7TDesC16 @ 34  NONAME
+	_ZN13CIRIsdsPreset5SetIdEi @ 35  NONAME
+	_ZN13CIRIsdsPreset6GetUrlEi @ 36  NONAME
+	_ZN13CIRIsdsPreset7SetLangERK7TDesC16 @ 37  NONAME
+	_ZN13CIRIsdsPreset7SetNameERK7TDesC16 @ 38  NONAME
+	_ZN13CIRIsdsPreset7SetUrlLERK7TDesC16 @ 39  NONAME
+	_ZN13CIRIsdsPreset7SetUrlLERK7TDesC16S2_S2_ @ 40  NONAME
+	_ZN13CIRIsdsPreset7SetUrlLERK7TDesC16S2_i @ 41  NONAME
+	_ZN13CIRIsdsPreset8SetIndexEi @ 42  NONAME
+	_ZN13CIRIsdsPreset9SetImgUrlERK7TDesC16 @ 43  NONAME
+	_ZN13CIRIsdsPreset9SetUniqIdEm @ 44  NONAME
+	_ZN13CIRIsdsPresetC1Ev @ 45  NONAME
+	_ZN13CIRIsdsPresetC2Ev @ 46  NONAME
+	_ZN13CIRIsdsPresetaSERKS_ @ 47  NONAME
+	_ZN16CIRAdvertisement11SetAdvInUseERK7TDesC16 @ 48  NONAME
+	_ZN16CIRAdvertisement14SetVisibleTimeERK7TDesC16 @ 49  NONAME
+	_ZN16CIRAdvertisement4NewLEv @ 50  NONAME
+	_ZN16CIRAdvertisement5NewLCEv @ 51  NONAME
+	_ZN16CIRAdvertisement6SetURLERK7TDesC16 @ 52  NONAME
+	_ZN16CIRAdvertisement8SetUsageERK7TDesC16 @ 53  NONAME
+	_ZN18CIRLastPlayedSongs11GetSongNameEv @ 54  NONAME
+	_ZN18CIRLastPlayedSongs11SetSongNameERK7TDesC16 @ 55  NONAME
+	_ZN18CIRLastPlayedSongs12ExternalizeLER12RWriteStream @ 56  NONAME
+	_ZN18CIRLastPlayedSongs12InternalizeLER11RReadStream @ 57  NONAME
+	_ZN18CIRLastPlayedSongs13GetArtistNameEv @ 58  NONAME
+	_ZN18CIRLastPlayedSongs13SetArtistNameERK7TDesC16 @ 59  NONAME
+	_ZN18CIRLastPlayedSongs4NewLEv @ 60  NONAME
+	_ZN18CIRLastPlayedSongs5NewLCEv @ 61  NONAME
+	_ZN18CIRLastPlayedSongsaSERKS_ @ 62  NONAME
+	_ZN19CIRChannelServerUrl10SetBitRateEi @ 63  NONAME
+	_ZN19CIRChannelServerUrl12ExternalizeLER12RWriteStream @ 64  NONAME
+	_ZN19CIRChannelServerUrl12InternalizeLER11RReadStream @ 65  NONAME
+	_ZN19CIRChannelServerUrl12SetServerUrlERK7TDesC16 @ 66  NONAME
+	_ZN19CIRChannelServerUrl13SetServerNameERK7TDesC16 @ 67  NONAME
+	_ZN19CIRChannelServerUrl4NewLEv @ 68  NONAME
+	_ZN19CIRChannelServerUrl5NewLCEv @ 69  NONAME
+	_ZN19CIRChannelServerUrlaSERKS_ @ 70  NONAME
+	_ZN21CIRBrowseChannelItems10SetBitrateERK7TDesC16 @ 71  NONAME
+	_ZN21CIRBrowseChannelItems10SetBitrateERK7TDesC16S2_ @ 72  NONAME
+	_ZN21CIRBrowseChannelItems10SetBitrateERK7TDesC16S2_S2_ @ 73  NONAME
+	_ZN21CIRBrowseChannelItems11SetImageUrlERK7TDesC16 @ 74  NONAME
+	_ZN21CIRBrowseChannelItems12InternalizeLER11RReadStream @ 75  NONAME
+	_ZN21CIRBrowseChannelItems12SetBannerUrlERK7TDesC16 @ 76  NONAME
+	_ZN21CIRBrowseChannelItems16SetGetOperationLERK7TDesC16 @ 77  NONAME
+	_ZN21CIRBrowseChannelItems18SetClickThroughUrlERK7TDesC16 @ 78  NONAME
+	_ZN21CIRBrowseChannelItems4NewLEv @ 79  NONAME
+	_ZN21CIRBrowseChannelItems5NewLCEv @ 80  NONAME
+	_ZN21CIRBrowseChannelItems7SetSizeERK7TDesC16 @ 81  NONAME
+	_ZN21CIRBrowseChannelItems8SetTextLERK7TDesC16S2_S2_ @ 82  NONAME
+	_ZN22CIRBrowseCatagoryItems12InternalizeLER11RReadStream @ 83  NONAME
+	_ZN22CIRBrowseCatagoryItems12SetBannerUrlERK7TDesC16 @ 84  NONAME
+	_ZN22CIRBrowseCatagoryItems15SetGetOperationERK7TDesC16 @ 85  NONAME
+	_ZN22CIRBrowseCatagoryItems18SetClickThroughUrlERK7TDesC16 @ 86  NONAME
+	_ZN22CIRBrowseCatagoryItems4NewLEv @ 87  NONAME
+	_ZN22CIRBrowseCatagoryItems5NewLCEv @ 88  NONAME
+	_ZN22CIRBrowseCatagoryItems7SetSizeERK7TDesC16 @ 89  NONAME
+	_ZN22CIRBrowseCatagoryItems8SetTextLERK7TDesC16S2_ @ 90  NONAME
+	_ZNK12CIROTAUpdate12ExternalizeLER12RWriteStream @ 91  NONAME
+	_ZNK13CIRIsdsPreset10GetGenreIdEv @ 92  NONAME
+	_ZNK13CIRIsdsPreset11GetLangNameEv @ 93  NONAME
+	_ZNK13CIRIsdsPreset11GetLogoDataEv @ 94  NONAME
+	_ZNK13CIRIsdsPreset11GetUrlCountEv @ 95  NONAME
+	_ZNK13CIRIsdsPreset12GetCountryIdEv @ 96  NONAME
+	_ZNK13CIRIsdsPreset12GetGenreNameEv @ 97  NONAME
+	_ZNK13CIRIsdsPreset14GetChannelTypeEv @ 98  NONAME
+	_ZNK13CIRIsdsPreset14GetCountryNameEv @ 99  NONAME
+	_ZNK13CIRIsdsPreset14GetDescriptionEv @ 100  NONAME
+	_ZNK13CIRIsdsPreset16GetChannelUrlAtLEi @ 101  NONAME
+	_ZNK13CIRIsdsPreset19GetAdvertisementUrlEv @ 102  NONAME
+	_ZNK13CIRIsdsPreset19GetLastModifiedTimeEv @ 103  NONAME
+	_ZNK13CIRIsdsPreset19GetMusicStoreStatusEv @ 104  NONAME
+	_ZNK13CIRIsdsPreset19GetShortDescriptionEv @ 105  NONAME
+	_ZNK13CIRIsdsPreset20GetAvailableBitratesER6RArrayIiE @ 106  NONAME
+	_ZNK13CIRIsdsPreset21GetAdvertisementInUseEv @ 107  NONAME
+	_ZNK13CIRIsdsPreset5GetIdEv @ 108  NONAME
+	_ZNK13CIRIsdsPreset6UniqIdEv @ 109  NONAME
+	_ZNK13CIRIsdsPreset7GetNameEv @ 110  NONAME
+	_ZNK13CIRIsdsPreset8GetIndexEv @ 111  NONAME
+	_ZNK13CIRIsdsPreset9GetImgUrlEv @ 112  NONAME
+	_ZNK13CIRIsdsPreset9GetLangIdEv @ 113  NONAME
+	_ZNK16CIRAdvertisement10ConstructLEv @ 114  NONAME
+	_ZNK19CIRChannelServerUrl10GetBitRateEv @ 115  NONAME
+	_ZNK19CIRChannelServerUrl12GetServerUrlEv @ 116  NONAME
+	_ZNK19CIRChannelServerUrl13GetServerNameEv @ 117  NONAME
+	_ZNK21CIRBrowseChannelItems12ExternalizeLER12RWriteStream @ 118  NONAME
+	_ZNK22CIRBrowseCatagoryItems12ExternalizeLER12RWriteStream @ 119  NONAME
+	_ZTI12CIROTAUpdate @ 120  NONAME ; #<TI>#
+	_ZTI13CIRIsdsPreset @ 121  NONAME ; #<TI>#
+	_ZTI16CIRAdvertisement @ 122  NONAME ; #<TI>#
+	_ZTI18CIRLastPlayedSongs @ 123  NONAME ; #<TI>#
+	_ZTI19CIRChannelServerUrl @ 124  NONAME ; #<TI>#
+	_ZTI21CIRBrowseChannelItems @ 125  NONAME ; #<TI>#
+	_ZTI22CIRBrowseCatagoryItems @ 126  NONAME ; #<TI>#
+	_ZTV12CIROTAUpdate @ 127  NONAME ; #<VT>#
+	_ZTV13CIRIsdsPreset @ 128  NONAME ; #<VT>#
+	_ZTV16CIRAdvertisement @ 129  NONAME ; #<VT>#
+	_ZTV18CIRLastPlayedSongs @ 130  NONAME ; #<VT>#
+	_ZTV19CIRChannelServerUrl @ 131  NONAME ; #<VT>#
+	_ZTV21CIRBrowseChannelItems @ 132  NONAME ; #<VT>#
+	_ZTV22CIRBrowseCatagoryItems @ 133  NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irfavoritesdbu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,27 @@
+EXPORTS
+	_ZN14CIRFavoritesDb10AddPresetLER13CIRIsdsPresetRii @ 1  NONAME
+	_ZN14CIRFavoritesDb10AddPresetLERK7TDesC16S2_Rii @ 2  NONAME
+	_ZN14CIRFavoritesDb10PresetByIdEi @ 3  NONAME
+	_ZN14CIRFavoritesDb11AddObserverERK17MPSPresetObserver @ 4  NONAME
+	_ZN14CIRFavoritesDb12GetAllPresetEv @ 5  NONAME
+	_ZN14CIRFavoritesDb12SearchPresetEii @ 6  NONAME
+	_ZN14CIRFavoritesDb13DeletePresetLEi @ 7  NONAME
+	_ZN14CIRFavoritesDb13GetMoveStatusEv @ 8  NONAME
+	_ZN14CIRFavoritesDb13GetNextPresetEi @ 9  NONAME
+	_ZN14CIRFavoritesDb13PresetByIndexEi @ 10  NONAME
+	_ZN14CIRFavoritesDb13SetMoveStatusEi @ 11  NONAME
+	_ZN14CIRFavoritesDb14MaxPresetCountEv @ 12  NONAME
+	_ZN14CIRFavoritesDb14RemoveObserverERK17MPSPresetObserver @ 13  NONAME
+	_ZN14CIRFavoritesDb14ReplacePresetLER13CIRIsdsPreset @ 14  NONAME
+	_ZN14CIRFavoritesDb16SwapPresetsInDbLEiiii @ 15  NONAME
+	_ZN14CIRFavoritesDb17GetPreviousPresetEi @ 16  NONAME
+	_ZN14CIRFavoritesDb20HandlePresetChangedLEi4TUidN17MPSPresetObserver9TPSReasonE @ 17  NONAME
+	_ZN14CIRFavoritesDb22MakePresetUserDefinedLEii @ 18  NONAME
+	_ZN14CIRFavoritesDb25ReplaceUserDefinedPresetLER13CIRIsdsPreset @ 19  NONAME
+	_ZN14CIRFavoritesDb4NewLEv @ 20  NONAME
+	_ZNK14CIRFavoritesDb16EmptyPresetCountEv @ 21  NONAME
+	_ZNK14CIRFavoritesDb7PresetsEv @ 22  NONAME
+	_ZThn4_N14CIRFavoritesDb20HandlePresetChangedLEi4TUidN17MPSPresetObserver9TPSReasonE @ 23  NONAME ; #<thunk>#
+	_ZN14CIRFavoritesDb19GetAllSortedPresetsEv @ 24  NONAME
+	_ZN14CIRFavoritesDb20IncreasePlayedTimesLERK13CIRIsdsPreset @ 25  NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irgeneralsettings200u.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z24ImplementationGroupProxyRi @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irlogutility.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1 @@
+EXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irmcpplugin100u.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z24ImplementationGroupProxyRi @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irnetworkcontrolleru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,29 @@
+EXPORTS
+	_ZN18CIRNetworkObserver4NewLEP20CIRNetworkController @ 1  NONAME
+	_ZN20CIRNetworkController13IsOfflineModeEv @ 2 NONAME
+	_ZN20CIRNetworkController15GetIRConnectionEv @ 3 NONAME
+	_ZN20CIRNetworkController15GetUAProfStringEv @ 4 NONAME
+	_ZN20CIRNetworkController16CancelConnectingEv @ 5 NONAME
+	_ZN20CIRNetworkController16GetWapProfStringEv @ 6 NONAME
+	_ZN20CIRNetworkController17GetIRSocketServerEv @ 7 NONAME
+	_ZN20CIRNetworkController18ChooseAccessPointLEi @ 8 NONAME
+	_ZN20CIRNetworkController19DataTransferTrackerEv @ 9 NONAME
+	_ZN20CIRNetworkController21ResetConnectionStatusEv @ 10 NONAME
+	_ZN20CIRNetworkController22InitializeHttpSessionLERK12RHTTPSessionN22MIRDataTransferTracker19TIRTransferCategoryE @ 11 NONAME
+	_ZN20CIRNetworkController23IsHandingOverConnectionEv @ 12 NONAME
+	_ZN20CIRNetworkController23LogoDataTransferTrackerEv @ 13 NONAME
+	_ZN20CIRNetworkController27DeleteActiveNetworkObserverER24MIRActiveNetworkObserver @ 14 NONAME
+	_ZN20CIRNetworkController29NotifyActiveNetworkObserversLE15TIRNetworkEvent @ 15 NONAME
+	_ZN20CIRNetworkController30RegisterActiveNetworkObserverLER24MIRActiveNetworkObserver @ 16 NONAME
+	_ZN20CIRNetworkController32RegisterLogoDataTransferTrackerLER12RHTTPSession @ 17 NONAME
+	_ZN20CIRNetworkController5CloseEv @ 18 NONAME
+	_ZN20CIRNetworkController5OpenLEP20MIRNetworkController @ 19 NONAME
+	_ZNK20CIRNetworkController13GetBearerListEv @ 20 NONAME
+	_ZNK20CIRNetworkController14GetNetworkListEv @ 21 NONAME
+	_ZNK20CIRNetworkController15IsWlanSupportedEv @ 22 NONAME
+	_ZNK20CIRNetworkController16GetNetworkStatusEv @ 23 NONAME
+	_ZNK20CIRNetworkController18GetAccessPointListEv @ 24 NONAME
+	_ZNK20CIRNetworkController22IdentifyConnectionTypeEv @ 25 NONAME
+	_ZNK20CIRNetworkController8GetIAPIdERm @ 26 NONAME
+	_ZNK20CIRNetworkController9GetApListEv @ 27 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irsessionlogu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,28 @@
+EXPORTS
+	_ZN18CIRReportGenerator10ReportSentEv @ 1  NONAME
+	_ZN18CIRReportGenerator11SessionEndLEi @ 2  NONAME
+	_ZN18CIRReportGenerator12LogSongRecogEv @ 3  NONAME
+	_ZN18CIRReportGenerator13UpdateNmsTypeERK7TDesC16 @ 4  NONAME
+	_ZN18CIRReportGenerator14NmsLogStartedLEv @ 5  NONAME
+	_ZN18CIRReportGenerator15LogServerResultERK7TDesC169TResponse @ 6  NONAME
+	_ZN18CIRReportGenerator15SessionStartedLEv @ 7  NONAME
+	_ZN18CIRReportGenerator15UpdateChannelIDEi @ 8  NONAME
+	_ZN18CIRReportGenerator16HandleStopEventsEi @ 9  NONAME
+	_ZN18CIRReportGenerator16MarkSessionStartEv @ 10  NONAME
+	_ZN18CIRReportGenerator17WriteNmsLogtoXmlLEv @ 11  NONAME
+	_ZN18CIRReportGenerator18UpdateHomeOperatorEi @ 12  NONAME
+	_ZN18CIRReportGenerator18UpdateNmsChannelIDEi @ 13  NONAME
+	_ZN18CIRReportGenerator18UpdateTerminatedByE18TTerminationStatus @ 14  NONAME
+	_ZN18CIRReportGenerator19SetDbStatusObserserEP22MIRLogDbStatusObserver @ 15  NONAME
+	_ZN18CIRReportGenerator19UpdateConnectedFromE14TConnectedFrom @ 16  NONAME
+	_ZN18CIRReportGenerator20UpdateConnectionTypeERK7TDesC16 @ 17  NONAME
+	_ZN18CIRReportGenerator20UpdateCurrentNetworkEi @ 18  NONAME
+	_ZN18CIRReportGenerator21UpdateNmsHomeOperatorEi @ 19  NONAME
+	_ZN18CIRReportGenerator22ReStorePreviousSessionEv @ 20  NONAME
+	_ZN18CIRReportGenerator23ReponseFromISDSObtainedEv @ 21  NONAME
+	_ZN18CIRReportGenerator23UpdateNmsCurrentNetworkEi @ 22  NONAME
+	_ZN18CIRReportGenerator26UpdateCurrentBrowseNetworkEi @ 23  NONAME
+	_ZN18CIRReportGenerator5OpenLEv @ 24  NONAME
+	_ZN18CIRReportGenerator9BrowseUrlERK7TDesC16i @ 25  NONAME
+	_ZN18CIRReportGenerator9LogBrowseERK6TDesC8i @ 26  NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irsettingsu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,73 @@
+EXPORTS
+	_ZN11CIRSettings11SetTimeOutLEi @ 1 NONAME
+	_ZN11CIRSettings12SetBearerIdLEm @ 2 NONAME
+	_ZN11CIRSettings13GetStereoModeEv @ 3 NONAME
+	_ZN11CIRSettings13SetNetworkIdLEm @ 4 NONAME
+	_ZN11CIRSettings14MaxPresetCountEv @ 5 NONAME
+	_ZN11CIRSettings14SetStereoModeLEi @ 6 NONAME
+	_ZN11CIRSettings15IsFlagIfAnyFavLEv @ 7 NONAME
+	_ZN11CIRSettings15SetISDSBaseUrlLERK7TDesC16 @ 8 NONAME
+	_ZN11CIRSettings16SetFlagIfAnyFavLEv @ 9 NONAME
+	_ZN11CIRSettings16SetIrappVersionLERK7TDesC16 @ 10 NONAME
+	_ZN11CIRSettings16SetLogRunningNoLEv @ 11 NONAME
+	_ZN11CIRSettings16SetSubscriberIdLERK4TBufILi15EE @ 12 NONAME
+	_ZN11CIRSettings17SetDestinationIdLEm @ 13 NONAME
+	_ZN11CIRSettings17SetSilencePeriodLEj @ 14 NONAME
+	_ZN11CIRSettings17SetVolumeSettingLEi @ 15 NONAME
+	_ZN11CIRSettings18GetStickyViewFlagLEv @ 16 NONAME
+	_ZN11CIRSettings18IsFlagCostWarningLEv @ 17 NONAME
+	_ZN11CIRSettings18IsUpdateAvailableLEv @ 18 NONAME
+	_ZN11CIRSettings18SetMaxPresetCountLEi @ 19 NONAME
+	_ZN11CIRSettings18SetStartingViewIdLEm @ 20 NONAME
+	_ZN11CIRSettings18SetStickyViewFlagLEi @ 21 NONAME
+	_ZN11CIRSettings18SetTimeCorrectionLEi @ 22 NONAME
+	_ZN11CIRSettings19SetFlagCostWarningLEv @ 23 NONAME
+	_ZN11CIRSettings19SetSongHisotryShowLEi @ 24 NONAME
+	_ZN11CIRSettings19SetUpdateAvailableLEv @ 25 NONAME
+	_ZN11CIRSettings20Set3GBitrateQualityLEi @ 26 NONAME
+	_ZN11CIRSettings20SetPreferredQualityLEi @ 27 NONAME
+	_ZN11CIRSettings21ReSetFlagCostWarningLEv @ 28 NONAME
+	_ZN11CIRSettings21ReSetUpdateAvailableLEv @ 29 NONAME
+	_ZN11CIRSettings21SetManuallyAddedChIdLEv @ 30 NONAME
+	_ZN11CIRSettings22SetDisplayAccessPointLEv @ 31 NONAME
+	_ZN11CIRSettings22SetGPRSBitrateQualityLEi @ 32 NONAME
+	_ZN11CIRSettings22SetSilencePeriodStartLERK7TDesC16 @ 33 NONAME
+	_ZN11CIRSettings22SetWiFiBitrateQualityLEi @ 34 NONAME
+	_ZN11CIRSettings23SetUserSavedApSettingsLEmmm @ 35 NONAME
+	_ZN11CIRSettings24ReSetDisplayAccessPointLEv @ 36 NONAME
+	_ZN11CIRSettings24SetUserDefinedSelectionLEm @ 37 NONAME
+	_ZN11CIRSettings25IsFlagTermsAndConditionsLEv @ 38 NONAME
+	_ZN11CIRSettings25SetStartingViewParameterLEm @ 39 NONAME
+	_ZN11CIRSettings26SetFlagTermsAndConditionsLEv @ 40 NONAME
+	_ZN11CIRSettings28ReSetFlagTermsAndConditionsLEv @ 41 NONAME
+	_ZN11CIRSettings5OpenLEv @ 42 NONAME
+	_ZN11CIRSettings8SetApIdLEm @ 43 NONAME
+	_ZN11CIRSettings8SetIRIDLERK7TDesC16 @ 44 NONAME
+	_ZNK11CIRSettings10GetTimeOutEv @ 45 NONAME
+	_ZNK11CIRSettings11PrivatePathEv @ 46 NONAME
+	_ZNK11CIRSettings12GetBearerIdLEv @ 47 NONAME
+	_ZNK11CIRSettings13GetNetworkIdLEv @ 48 NONAME
+	_ZNK11CIRSettings13SubscriberIdLEv @ 49 NONAME
+	_ZNK11CIRSettings14TimeCorrectionEv @ 50 NONAME
+	_ZNK11CIRSettings15GetISDSBaseUrlLEv @ 51 NONAME
+	_ZNK11CIRSettings15GetLogRunningNoEv @ 52 NONAME
+	_ZNK11CIRSettings16GetIrappVersionLEv @ 53 NONAME
+	_ZNK11CIRSettings16GetVolumeSettingEv @ 54 NONAME
+	_ZNK11CIRSettings17GetDestinationIdLEv @ 55 NONAME
+	_ZNK11CIRSettings17GetSilencePeriodLEv @ 56 NONAME
+	_ZNK11CIRSettings18GetSongHistoryShowEv @ 57 NONAME
+	_ZNK11CIRSettings18GetStartingViewIdLEv @ 58 NONAME
+	_ZNK11CIRSettings19DisplayAccessPointLEv @ 59 NONAME
+	_ZNK11CIRSettings19Get3GBitrateQualityEv @ 60 NONAME
+	_ZNK11CIRSettings19GetPreferredQualityEv @ 61 NONAME
+	_ZNK11CIRSettings20GetManuallyAddedChIdEv @ 62 NONAME
+	_ZNK11CIRSettings21GetGPRSBitrateQualityEv @ 63 NONAME
+	_ZNK11CIRSettings21GetWiFiBitrateQualityEv @ 64 NONAME
+	_ZNK11CIRSettings22GetSilencePeriodStartLEv @ 65 NONAME
+	_ZNK11CIRSettings23GetUserSavedApSettingsLERmS0_S0_ @ 66 NONAME
+	_ZNK11CIRSettings24GetUserDefinedSelectionLEv @ 67 NONAME
+	_ZNK11CIRSettings25GetStartingViewParameterLEv @ 68 NONAME
+	_ZNK11CIRSettings8GetApIdLEv @ 69 NONAME
+	_ZNK11CIRSettings8GetIRIDLEv @ 70 NONAME
+	_ZN11CIRSettings17GetGlobalAdvFlagLEv @ 71 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irsettingsviewu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+EXPORTS
+	_ZN19CIRSettingsViewBase11DoActivateLERK10TVwsViewId4TUidRK6TDesC8 @ 1 NONAME
+	_ZN19CIRSettingsViewBase12DoDeactivateEv @ 2 NONAME
+	_ZN19CIRSettingsViewBase13ResolveDriveLERK3RFsR4TBufILi256EE @ 3 NONAME
+	_ZN19CIRSettingsViewBase14BaseConstructLEv @ 4 NONAME
+	_ZN19CIRSettingsViewBase14HandleCommandLEi @ 5 NONAME
+	_ZN19CIRSettingsViewBase14LoadResourcesLER19RConeResourceLoaderRK7TDesC16 @ 6 NONAME
+	_ZN19CIRSettingsViewBase22HandleForegroundEventLEi @ 7 NONAME
+	_ZN19CIRSettingsViewBase9SetTitleLEi @ 8 NONAME
+	_ZN19CIRSettingsViewBaseC2Ev @ 9 NONAME
+	_ZN19CIRSettingsViewBaseD0Ev @ 10 NONAME
+	_ZN19CIRSettingsViewBaseD1Ev @ 11 NONAME
+	_ZN19CIRSettingsViewBaseD2Ev @ 12 NONAME
+	_ZN26CIRCommonSettingsContainer11SizeChangedEv @ 13 NONAME
+	_ZN26CIRCommonSettingsContainer14BaseConstructLEv @ 14 NONAME
+	_ZN26CIRCommonSettingsContainer18CreateSettingItemLEi @ 15 NONAME
+	_ZN26CIRCommonSettingsContainer4NewLEv @ 16 NONAME
+	_ZN26CIRCommonSettingsContainer9EditItemLEii @ 17 NONAME
+	_ZN26CIRCommonSettingsContainerC1Ev @ 18 NONAME
+	_ZN26CIRCommonSettingsContainerC2Ev @ 19 NONAME
+	_ZN26CIRCommonSettingsContainerD0Ev @ 20 NONAME
+	_ZN26CIRCommonSettingsContainerD1Ev @ 21 NONAME
+	_ZN26CIRCommonSettingsContainerD2Ev @ 22 NONAME
+	_ZNK19CIRSettingsViewBase11GetCaptionLER6TDes16 @ 23 NONAME
+	_ZNK26CIRCommonSettingsContainer14GetHelpContextER15TCoeHelpContext @ 24 NONAME
+	_ZTI19CIRSettingsViewBase @ 25 NONAME
+	_ZTI26CIRCommonSettingsContainer @ 26 NONAME
+	_ZTV19CIRSettingsViewBase @ 27 NONAME
+	_ZTV26CIRCommonSettingsContainer @ 28 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irsonghistoryu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+EXPORTS
+	_ZN18CIRSongHistoryInfo14SetHistoryInfoER6RBuf16S1_S1_S1_iiiS1_S1_S1_ @ 1 NONAME
+	_ZN18CIRSongHistoryInfo4NewLEv @ 2 NONAME
+	_ZN18CIRSongHistoryInfo5NewLCEv @ 3 NONAME
+	_ZN18CIRSongHistoryInfoD0Ev @ 4 NONAME
+	_ZN18CIRSongHistoryInfoD1Ev @ 5 NONAME
+	_ZN18CIRSongHistoryInfoD2Ev @ 6 NONAME
+	_ZN20CIRSongHistoryEngine11SyncHistoryEi @ 7 NONAME
+	_ZN20CIRSongHistoryEngine14GetAllHistoryLER13RPointerArrayI18CIRSongHistoryInfoE @ 8 NONAME
+	_ZN20CIRSongHistoryEngine15ClearAllHistoryEv @ 9 NONAME
+	_ZN20CIRSongHistoryEngine15GetHistoryCountEv @ 10 NONAME
+	_ZN20CIRSongHistoryEngine19UpdateSongHistoryDbEiRK7TDesC16S2_S2_ @ 11 NONAME
+	_ZN20CIRSongHistoryEngine23HandleMetaDataReceivedLERK11CIRMetaData @ 12 NONAME
+	_ZN20CIRSongHistoryEngine4NewLER27MSongHistoryUINotifyHandler @ 13 NONAME
+	_ZN20CIRSongHistoryEngine5NewLCER27MSongHistoryUINotifyHandler @ 14 NONAME
+	_ZN20CIRSongHistoryEngineD0Ev @ 15 NONAME
+	_ZN20CIRSongHistoryEngineD1Ev @ 16 NONAME
+	_ZN20CIRSongHistoryEngineD2Ev @ 17 NONAME
+	_ZNK18CIRSongHistoryInfo10GetBitrateEv @ 18 NONAME
+	_ZNK18CIRSongHistoryInfo11GetImageUrlEv @ 19 NONAME
+	_ZNK18CIRSongHistoryInfo11GetSongInfoEv @ 20 NONAME
+	_ZNK18CIRSongHistoryInfo12GetChannelIdEv @ 21 NONAME
+	_ZNK18CIRSongHistoryInfo12GetStreamUrlEv @ 22 NONAME
+	_ZNK18CIRSongHistoryInfo13GetArtistInfoEv @ 23 NONAME
+	_ZNK18CIRSongHistoryInfo14GetChannelDescEv @ 24 NONAME
+	_ZNK18CIRSongHistoryInfo14GetChannelNameEv @ 25 NONAME
+	_ZNK18CIRSongHistoryInfo14GetChannelTypeEv @ 26 NONAME
+	_ZNK18CIRSongHistoryInfo21GetChannelMusicStatusEv @ 27 NONAME
+ 	_ZN20CIRSongHistoryEngine16DeleteOneHistoryEi @ 28 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irstreamsourceu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,17 @@
+EXPORTS
+	_ZN12CIRAsfPlayer16DetectAsfChannelERK7TDesC16 @ 1 NONAME
+	_ZN12CIRAsfPlayer4NewLER23MIRStreamSourceObserverR18MIRCtrlCmdObserver @ 2 NONAME
+	_ZN12CIRAsfPlayer4PlayEv @ 3 NONAME
+	_ZN12CIRAsfPlayer4StopEv @ 4 NONAME
+	_ZN12CIRAsfPlayer5PlayLERK7TDesC16 @ 5 NONAME
+	_ZN12CIRAsfPlayer9SetVolumeEi @ 6 NONAME
+	_ZN15CIRStreamSource10ReconnectLERK7TDesC16 @ 7 NONAME
+	_ZN15CIRStreamSource12ContentTypeLEv @ 8 NONAME
+	_ZN15CIRStreamSource13CancelRequestEv @ 9 NONAME
+	_ZN15CIRStreamSource13FilltheBufferER5TDes8 @ 10 NONAME
+	_ZN15CIRStreamSource16ConnectToServerLERK7TDesC16 @ 11 NONAME
+	_ZN15CIRStreamSource4NewLER23MIRStreamSourceObserver @ 12 NONAME
+	_ZNK12CIRAsfPlayer6VolumeEv @ 13 NONAME
+	_ZNK12CIRAsfPlayer9MaxVolumeEv @ 14 NONAME
+	_ZThn4_N15CIRStreamSource13FilltheBufferER5TDes8 @ 15 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/iruicontrolsu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1 @@
+EXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/irxmlparseru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN20CIRXMLContentHandler4NewLER17MIRParserObserverR16MIRCacheObserver @ 1 NONAME
+	_ZN20CIRXMLContentHandler9ParseXmlLERK7TDesC16S2_RK19CIRHttpResponseData @ 2 NONAME
+	_ZTI20CIRXMLContentHandler @ 3 NONAME ; #<TI>#
+	_ZTV20CIRXMLContentHandler @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bmarm/isdsclientinterfaceu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,18 @@
+EXPORTS
+	_ZN13CIRIsdsClient10IRGetIRIDLEv @ 1 NONAME
+	_ZN13CIRIsdsClient11IRISDSPostLER4TBufILi256EE @ 2 NONAME
+	_ZN13CIRIsdsClient11SyncPresetLEiRK7TDesC16 @ 3 NONAME
+	_ZN13CIRIsdsClient13GetOtaStatusLERi @ 4 NONAME
+	_ZN13CIRIsdsClient13IRISDSSearchLERK7TDesC16 @ 5 NONAME
+	_ZN13CIRIsdsClient13PurgeOtaInfoLEv @ 6 NONAME
+	_ZN13CIRIsdsClient15GetDataProviderEv @ 7 NONAME
+	_ZN13CIRIsdsClient16ReleaseResourcesEv @ 8 NONAME
+	_ZN13CIRIsdsClient18IRISDSMultiSearchLERK7TDesC16S2_S2_S2_ @ 9 NONAME
+	_ZN13CIRIsdsClient19GetMultiplePresetsLERK6RArrayIiERi @ 10 NONAME
+	_ZN13CIRIsdsClient19IRISDSCancelRequestEv @ 11 NONAME
+	_ZN13CIRIsdsClient21IRIsdsClientIntefaceLENS_25TIRIsdsclientInterfaceIDsE @ 12 NONAME
+	_ZN13CIRIsdsClient21IRIsdsClientIntefaceLEjNS_23TIRIsdsClientInterfacesEi @ 13 NONAME
+	_ZN13CIRIsdsClient22IRIsdsIsChannelCachedLEj @ 14 NONAME
+	_ZN13CIRIsdsClient23IRIsdsIsCategoryCachedLENS_25TIRIsdsclientInterfaceIDsE @ 15 NONAME
+	_ZN13CIRIsdsClient4NewLER21MIsdsResponseObserverRK7TDesC16 @ 16 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/iractiveidleengineu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,5 @@
+EXPORTS
+	??1CIRActiveIdleEng@@UAE@XZ @ 1 NONAME ; CIRActiveIdleEng::~CIRActiveIdleEng(void)
+	?NewL@CIRActiveIdleEng@@SAPAV1@AAVMIRActiveIdleEngNotifyHandler@@@Z @ 2 NONAME ; class CIRActiveIdleEng * CIRActiveIdleEng::NewL(class MIRActiveIdleEngNotifyHandler &)
+	?SecondConstructL@CIRActiveIdleEng@@QAEXXZ @ 3 NONAME ; void CIRActiveIdleEng::SecondConstructL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/ircachemgmtu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+EXPORTS
+	?AddObserverL@CIRCacheMgmt@@QAEXPAVMIRCacheObserver@@@Z @ 1 NONAME ; void CIRCacheMgmt::AddObserverL(class MIRCacheObserver *)
+	?CacheCategoryItemsL@CIRCacheMgmt@@QAEXAAV?$CArrayPtrFlat@VCIRBrowseCatagoryItems@@@@ABVTDesC16@@ABVCIRHttpResponseData@@@Z @ 2 NONAME ; void CIRCacheMgmt::CacheCategoryItemsL(class CArrayPtrFlat<class CIRBrowseCatagoryItems> &, class TDesC16 const &, class CIRHttpResponseData const &)
+	?CacheChannelItemsL@CIRCacheMgmt@@QAEXAAV?$CArrayPtrFlat@VCIRBrowseChannelItems@@@@ABVTDesC16@@ABVCIRHttpResponseData@@@Z @ 3 NONAME ; void CIRCacheMgmt::CacheChannelItemsL(class CArrayPtrFlat<class CIRBrowseChannelItems> &, class TDesC16 const &, class CIRHttpResponseData const &)
+	?CacheLogoL@CIRCacheMgmt@@QAEXABVTDesC8@@ABVTDesC16@@ABVCIRHttpResponseData@@@Z @ 4 NONAME ; void CIRCacheMgmt::CacheLogoL(class TDesC8 const &, class TDesC16 const &, class CIRHttpResponseData const &)
+	?CacheOtaInfoL@CIRCacheMgmt@@QAEXABVCIROTAUpdate@@ABVTDesC16@@ABVCIRHttpResponseData@@@Z @ 5 NONAME ; void CIRCacheMgmt::CacheOtaInfoL(class CIROTAUpdate const &, class TDesC16 const &, class CIRHttpResponseData const &)
+	?CachePresetItemL@CIRCacheMgmt@@QAEXAAV?$CArrayPtrFlat@VCIRIsdsPreset@@@@ABVTDesC16@@ABVCIRHttpResponseData@@@Z @ 6 NONAME ; void CIRCacheMgmt::CachePresetItemL(class CArrayPtrFlat<class CIRIsdsPreset> &, class TDesC16 const &, class CIRHttpResponseData const &)
+	?CheckCacheL@CIRCacheMgmt@@QAEXHABVTDesC16@@HAAH@Z @ 7 NONAME ; void CIRCacheMgmt::CheckCacheL(int, class TDesC16 const &, int, int &)
+	?OpenL@CIRCacheMgmt@@SAPAV1@AAVMIRCacheObserver@@@Z @ 8 NONAME ; class CIRCacheMgmt * CIRCacheMgmt::OpenL(class MIRCacheObserver &)
+	?RemoveObserver@CIRCacheMgmt@@QAEXPAVMIRCacheObserver@@@Z @ 9 NONAME ; void CIRCacheMgmt::RemoveObserver(class MIRCacheObserver *)
+	?RemoveOtaInfoL@CIRCacheMgmt@@QAEXXZ @ 10 NONAME ; void CIRCacheMgmt::RemoveOtaInfoL(void)
+	?UpdateTrustPeriodL@CIRCacheMgmt@@QAEXHABVTDesC16@@AAVCIRHttpResponseData@@@Z @ 11 NONAME ; void CIRCacheMgmt::UpdateTrustPeriodL(int, class TDesC16 const &, class CIRHttpResponseData &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/ircommandchannelu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,9 @@
+EXPORTS
+	?AudioFadeInOut@CIRCtrlCmdObserver@@QAEXAAW4TIRControlCommmand@@H@Z @ 1 NONAME ; void CIRCtrlCmdObserver::AudioFadeInOut(enum TIRControlCommmand &, int)
+	?DoAudioFadeOut@CIRCtrlCmdObserver@@QAEXXZ @ 2 NONAME ; void CIRCtrlCmdObserver::DoAudioFadeOut(void)
+	?FetchVolume@CIRCtrlCmdObserver@@QAEHXZ @ 3 NONAME ; int CIRCtrlCmdObserver::FetchVolume(void)
+	?FilltheBuffer@CIRCtrlCmdObserver@@QAEXAAVTDes8@@@Z @ 4 NONAME ; void CIRCtrlCmdObserver::FilltheBuffer(class TDes8 &)
+	?NewL@CIRCtrlCmdObserver@@SAPAV1@PAVMIRCtrlCmdObserver@@PAVMIRStreamFill@@@Z @ 5 NONAME ; class CIRCtrlCmdObserver * CIRCtrlCmdObserver::NewL(class MIRCtrlCmdObserver *, class MIRStreamFill *)
+	?NewLC@CIRCtrlCmdObserver@@SAPAV1@PAVMIRCtrlCmdObserver@@PAVMIRStreamFill@@@Z @ 6 NONAME ; class CIRCtrlCmdObserver * CIRCtrlCmdObserver::NewLC(class MIRCtrlCmdObserver *, class MIRStreamFill *)
+	?SentRequest@CIRCtrlCmdObserver@@QAEXW4TIRControlCommmand@@H@Z @ 7 NONAME ; void CIRCtrlCmdObserver::SentRequest(enum TIRControlCommmand, int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irdataprovideru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,21 @@
+EXPORTS
+	??1CIRLogoDownloadEngine@@UAE@XZ @ 1  NONAME ; CIRLogoDownloadEngine::~CIRLogoDownloadEngine(void)
+	?CancelTransaction@CIRLogoDownloadEngine@@QAEXXZ @ 2  NONAME ; void CIRLogoDownloadEngine::CancelTransaction(void)
+	?GetCacheLogoL@CIRLogoDownloadEngine@@QAEXABVTDesC16@@AAH@Z @ 3  NONAME ; void CIRLogoDownloadEngine::GetCacheLogoL(class TDesC16 const &, int &)
+	?GetHttpDataProvider@CIRDataProvider@@QAEPAVCIRHttpDataProvider@@XZ @ 4  NONAME ; class CIRHttpDataProvider * CIRDataProvider::GetHttpDataProvider(void)
+	?GetLogoDownloadEngine@CIRHttpDataProvider@@QAEPAVCIRLogoDownloadEngine@@XZ @ 5  NONAME ; class CIRLogoDownloadEngine * CIRHttpDataProvider::GetLogoDownloadEngine(void)
+	?IRHttpCancelRequest@CIRDataProvider@@QAEXXZ @ 6  NONAME ; void CIRDataProvider::IRHttpCancelRequest(void)
+	?IRHttpIssueRequestL@CIRDataProvider@@QAEXAAVCIRHttpRequestData@@@Z @ 7  NONAME ; void CIRDataProvider::IRHttpIssueRequestL(class CIRHttpRequestData &)
+	?IsRunning@CIRLogoDownloadEngine@@QBEHXZ @ 8  NONAME ; int CIRLogoDownloadEngine::IsRunning(void) const
+	?NewL@CIRDataProvider@@SAPAV1@AAVMIRDataProviderObserver@@@Z @ 9  NONAME ; class CIRDataProvider * CIRDataProvider::NewL(class MIRDataProviderObserver &)
+	?NewL@CIRDataProvider@@SAPAV1@AAVMIRDataProviderObserver@@ABVTDesC16@@@Z @ 10  NONAME ; class CIRDataProvider * CIRDataProvider::NewL(class MIRDataProviderObserver &, class TDesC16 const &)
+	?NewL@CIRLogoDownloadEngine@@SAPAV1@XZ @ 11  NONAME ; class CIRLogoDownloadEngine * CIRLogoDownloadEngine::NewL(void)
+	?ReleaseResources@CIRDataProvider@@QAEXXZ @ 12  NONAME ; void CIRDataProvider::ReleaseResources(void)
+	?SendCacheLogo@CIRLogoDownloadEngine@@QAEAAVTDesC8@@XZ @ 13  NONAME ; class TDesC8 & CIRLogoDownloadEngine::SendCacheLogo(void)
+	?SendPresetWithLogoL@CIRLogoDownloadEngine@@QAEXXZ @ 14  NONAME ; void CIRLogoDownloadEngine::SendPresetWithLogoL(void)
+	?SendRequestL@CIRLogoDownloadEngine@@QAEXPAVCIRIsdsPreset@@HH@Z @ 15  NONAME ; void CIRLogoDownloadEngine::SendRequestL(class CIRIsdsPreset *, int, int)
+	?SendRequestL@CIRLogoDownloadEngine@@QAEXPAVCIRIsdsPreset@@PAVMLogoDownloadObserver@@HHH@Z @ 16  NONAME ; void CIRLogoDownloadEngine::SendRequestL(class CIRIsdsPreset *, class MLogoDownloadObserver *, int, int, int)
+	?SetFavDbInstance@CIRLogoDownloadEngine@@QAEXPAVCIRFavoritesDb@@@Z @ 17  NONAME ; void CIRLogoDownloadEngine::SetFavDbInstance(class CIRFavoritesDb *)
+	?isLogoCachedL@CIRLogoDownloadEngine@@QAEHPAVCIRIsdsPreset@@HH@Z @ 18  NONAME ; int CIRLogoDownloadEngine::isLogoCachedL(class CIRIsdsPreset *, int, int)
+	_E32Dll=__E32Dll	; Entry point for emulation
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irdatastructuresu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,121 @@
+EXPORTS
+	??0CIRIsdsPreset@@QAE@XZ @ 1  NONAME ; CIRIsdsPreset::CIRIsdsPreset(void)
+	??4CIRChannelServerUrl@@QAEAAV0@ABV0@@Z @ 2  NONAME ; class CIRChannelServerUrl & CIRChannelServerUrl::operator=(class CIRChannelServerUrl const &)
+	??4CIRIsdsPreset@@QAEAAV0@ABV0@@Z @ 3  NONAME ; class CIRIsdsPreset & CIRIsdsPreset::operator=(class CIRIsdsPreset const &)
+	??4CIRLastPlayedSongs@@QAEAAV0@ABV0@@Z @ 4  NONAME ; class CIRLastPlayedSongs & CIRLastPlayedSongs::operator=(class CIRLastPlayedSongs const &)
+	?ConstructL@CIRAdvertisement@@QBEXXZ @ 5  NONAME ; void CIRAdvertisement::ConstructL(void) const
+	?ConstructL@CIROTAUpdate@@QAEXXZ @ 6  NONAME ; void CIROTAUpdate::ConstructL(void)
+	?ExternalizeL@CIRBrowseCatagoryItems@@QBEXAAVRWriteStream@@@Z @ 7  NONAME ; void CIRBrowseCatagoryItems::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@CIRBrowseChannelItems@@QBEXAAVRWriteStream@@@Z @ 8  NONAME ; void CIRBrowseChannelItems::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@CIRChannelServerUrl@@QAEXAAVRWriteStream@@@Z @ 9  NONAME ; void CIRChannelServerUrl::ExternalizeL(class RWriteStream &)
+	?ExternalizeL@CIRIsdsPreset@@QAEXAAVRWriteStream@@@Z @ 10  NONAME ; void CIRIsdsPreset::ExternalizeL(class RWriteStream &)
+	?ExternalizeL@CIRLastPlayedSongs@@QAEXAAVRWriteStream@@@Z @ 11  NONAME ; void CIRLastPlayedSongs::ExternalizeL(class RWriteStream &)
+	?ExternalizeL@CIROTAUpdate@@QBEXAAVRWriteStream@@@Z @ 12  NONAME ; void CIROTAUpdate::ExternalizeL(class RWriteStream &) const
+	?GetAdvertisementInUse@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 13  NONAME ; class TDesC16 const & CIRIsdsPreset::GetAdvertisementInUse(void) const
+	?GetAdvertisementUrl@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 14  NONAME ; class TDesC16 const & CIRIsdsPreset::GetAdvertisementUrl(void) const
+	?GetArtistName@CIRLastPlayedSongs@@QAEAAVTDesC16@@XZ @ 15  NONAME ; class TDesC16 & CIRLastPlayedSongs::GetArtistName(void)
+	?GetAvailableBitrates@CIRIsdsPreset@@QBEHAAV?$RArray@H@@@Z @ 16  NONAME ; int CIRIsdsPreset::GetAvailableBitrates(class RArray<int> &) const
+	?GetBitRate@CIRChannelServerUrl@@QBEHXZ @ 17  NONAME ; int CIRChannelServerUrl::GetBitRate(void) const
+	?GetChannelBitrateL@CIRIsdsPreset@@QAEHH@Z @ 18  NONAME ; int CIRIsdsPreset::GetChannelBitrateL(int)
+	?GetChannelType@CIRIsdsPreset@@QBEHXZ @ 19  NONAME ; int CIRIsdsPreset::GetChannelType(void) const
+	?GetChannelUrlAtL@CIRIsdsPreset@@QBEABVTDesC16@@H@Z @ 20  NONAME ; class TDesC16 const & CIRIsdsPreset::GetChannelUrlAtL(int) const
+	?GetCountryId@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 21  NONAME ; class TDesC16 const & CIRIsdsPreset::GetCountryId(void) const
+	?GetCountryName@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 22  NONAME ; class TDesC16 const & CIRIsdsPreset::GetCountryName(void) const
+	?GetDescription@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 23  NONAME ; class TDesC16 const & CIRIsdsPreset::GetDescription(void) const
+	?GetExactUrlForBitrateL@CIRIsdsPreset@@QAEPAVCDesC16ArrayFlat@@H@Z @ 24  NONAME ; class CDesC16ArrayFlat * CIRIsdsPreset::GetExactUrlForBitrateL(int)
+	?GetGenreId@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 25  NONAME ; class TDesC16 const & CIRIsdsPreset::GetGenreId(void) const
+	?GetGenreName@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 26  NONAME ; class TDesC16 const & CIRIsdsPreset::GetGenreName(void) const
+	?GetId@CIRIsdsPreset@@QBEHXZ @ 27  NONAME ; int CIRIsdsPreset::GetId(void) const
+	?GetImgUrl@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 28  NONAME ; class TDesC16 const & CIRIsdsPreset::GetImgUrl(void) const
+	?GetIndex@CIRIsdsPreset@@QBEHXZ @ 29  NONAME ; int CIRIsdsPreset::GetIndex(void) const
+	?GetLangId@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 30  NONAME ; class TDesC16 const & CIRIsdsPreset::GetLangId(void) const
+	?GetLangName@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 31  NONAME ; class TDesC16 const & CIRIsdsPreset::GetLangName(void) const
+	?GetLastModifiedTime@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 32  NONAME ; class TDesC16 const & CIRIsdsPreset::GetLastModifiedTime(void) const
+	?GetLogoData@CIRIsdsPreset@@QBEABVTDesC8@@XZ @ 33  NONAME ; class TDesC8 const & CIRIsdsPreset::GetLogoData(void) const
+	?GetMusicStoreStatus@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 34  NONAME ; class TDesC16 const & CIRIsdsPreset::GetMusicStoreStatus(void) const
+	?GetName@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 35  NONAME ; class TDesC16 const & CIRIsdsPreset::GetName(void) const
+	?GetServerName@CIRChannelServerUrl@@QBEABVTDesC16@@XZ @ 36  NONAME ; class TDesC16 const & CIRChannelServerUrl::GetServerName(void) const
+	?GetServerUrl@CIRChannelServerUrl@@QBEABVTDesC16@@XZ @ 37  NONAME ; class TDesC16 const & CIRChannelServerUrl::GetServerUrl(void) const
+	?GetShortDescription@CIRIsdsPreset@@QBEABVTDesC16@@XZ @ 38  NONAME ; class TDesC16 const & CIRIsdsPreset::GetShortDescription(void) const
+	?GetSongName@CIRLastPlayedSongs@@QAEAAVTDesC16@@XZ @ 39  NONAME ; class TDesC16 & CIRLastPlayedSongs::GetSongName(void)
+	?GetUrl@CIRIsdsPreset@@QAEAAVCIRChannelServerUrl@@H@Z @ 40  NONAME ; class CIRChannelServerUrl & CIRIsdsPreset::GetUrl(int)
+	?GetUrlCount@CIRIsdsPreset@@QBEHXZ @ 41  NONAME ; int CIRIsdsPreset::GetUrlCount(void) const
+	?GetUrlForBitrateL@CIRIsdsPreset@@QAEPAVCDesC16ArrayFlat@@H@Z @ 42  NONAME ; class CDesC16ArrayFlat * CIRIsdsPreset::GetUrlForBitrateL(int)
+	?InternalizeL@CIRBrowseCatagoryItems@@QAEXAAVRReadStream@@@Z @ 43  NONAME ; void CIRBrowseCatagoryItems::InternalizeL(class RReadStream &)
+	?InternalizeL@CIRBrowseChannelItems@@QAEXAAVRReadStream@@@Z @ 44  NONAME ; void CIRBrowseChannelItems::InternalizeL(class RReadStream &)
+	?InternalizeL@CIRChannelServerUrl@@QAEXAAVRReadStream@@@Z @ 45  NONAME ; void CIRChannelServerUrl::InternalizeL(class RReadStream &)
+	?InternalizeL@CIRIsdsPreset@@QAEXAAVRReadStream@@@Z @ 46  NONAME ; void CIRIsdsPreset::InternalizeL(class RReadStream &)
+	?InternalizeL@CIRLastPlayedSongs@@QAEXAAVRReadStream@@@Z @ 47  NONAME ; void CIRLastPlayedSongs::InternalizeL(class RReadStream &)
+	?InternalizeL@CIROTAUpdate@@QAEXAAVRReadStream@@@Z @ 48  NONAME ; void CIROTAUpdate::InternalizeL(class RReadStream &)
+	?NewL@CIRAdvertisement@@SAPAV1@XZ @ 49  NONAME ; class CIRAdvertisement * CIRAdvertisement::NewL(void)
+	?NewL@CIRBrowseCatagoryItems@@SAPAV1@XZ @ 50  NONAME ; class CIRBrowseCatagoryItems * CIRBrowseCatagoryItems::NewL(void)
+	?NewL@CIRBrowseChannelItems@@SAPAV1@XZ @ 51  NONAME ; class CIRBrowseChannelItems * CIRBrowseChannelItems::NewL(void)
+	?NewL@CIRChannelServerUrl@@SAPAV1@XZ @ 52  NONAME ; class CIRChannelServerUrl * CIRChannelServerUrl::NewL(void)
+	?NewL@CIRIsdsPreset@@SAPAV1@XZ @ 53  NONAME ; class CIRIsdsPreset * CIRIsdsPreset::NewL(void)
+	?NewL@CIRLastPlayedSongs@@SAPAV1@XZ @ 54  NONAME ; class CIRLastPlayedSongs * CIRLastPlayedSongs::NewL(void)
+	?NewL@CIROTAUpdate@@SAPAV1@XZ @ 55  NONAME ; class CIROTAUpdate * CIROTAUpdate::NewL(void)
+	?NewLC@CIRAdvertisement@@SAPAV1@XZ @ 56  NONAME ; class CIRAdvertisement * CIRAdvertisement::NewLC(void)
+	?NewLC@CIRBrowseCatagoryItems@@SAPAV1@XZ @ 57  NONAME ; class CIRBrowseCatagoryItems * CIRBrowseCatagoryItems::NewLC(void)
+	?NewLC@CIRBrowseChannelItems@@SAPAV1@XZ @ 58  NONAME ; class CIRBrowseChannelItems * CIRBrowseChannelItems::NewLC(void)
+	?NewLC@CIRChannelServerUrl@@SAPAV1@XZ @ 59  NONAME ; class CIRChannelServerUrl * CIRChannelServerUrl::NewLC(void)
+	?NewLC@CIRIsdsPreset@@SAPAV1@XZ @ 60  NONAME ; class CIRIsdsPreset * CIRIsdsPreset::NewLC(void)
+	?NewLC@CIRLastPlayedSongs@@SAPAV1@XZ @ 61  NONAME ; class CIRLastPlayedSongs * CIRLastPlayedSongs::NewLC(void)
+	?NewLC@CIROTAUpdate@@SAPAV1@XZ @ 62  NONAME ; class CIROTAUpdate * CIROTAUpdate::NewLC(void)
+	?SetAdvInUse@CIRAdvertisement@@QAEXABVTDesC16@@@Z @ 63  NONAME ; void CIRAdvertisement::SetAdvInUse(class TDesC16 const &)
+	?SetAdvertisementInUse@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 64  NONAME ; void CIRIsdsPreset::SetAdvertisementInUse(class TDesC16 const &)
+	?SetAdvertisementUrl@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 65  NONAME ; void CIRIsdsPreset::SetAdvertisementUrl(class TDesC16 const &)
+	?SetArtistName@CIRLastPlayedSongs@@QAEXABVTDesC16@@@Z @ 66  NONAME ; void CIRLastPlayedSongs::SetArtistName(class TDesC16 const &)
+	?SetBannerUrl@CIRBrowseCatagoryItems@@QAEXABVTDesC16@@@Z @ 67  NONAME ; void CIRBrowseCatagoryItems::SetBannerUrl(class TDesC16 const &)
+	?SetBannerUrl@CIRBrowseChannelItems@@QAEXABVTDesC16@@@Z @ 68  NONAME ; void CIRBrowseChannelItems::SetBannerUrl(class TDesC16 const &)
+	?SetBitRate@CIRChannelServerUrl@@QAEXH@Z @ 69  NONAME ; void CIRChannelServerUrl::SetBitRate(int)
+	?SetBitrate@CIRBrowseChannelItems@@QAEXABVTDesC16@@00@Z @ 70  NONAME ; void CIRBrowseChannelItems::SetBitrate(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?SetBitrate@CIRBrowseChannelItems@@QAEXABVTDesC16@@0@Z @ 71  NONAME ; void CIRBrowseChannelItems::SetBitrate(class TDesC16 const &, class TDesC16 const &)
+	?SetBitrate@CIRBrowseChannelItems@@QAEXABVTDesC16@@@Z @ 72  NONAME ; void CIRBrowseChannelItems::SetBitrate(class TDesC16 const &)
+	?SetChannelType@CIRIsdsPreset@@QAEXH@Z @ 73  NONAME ; void CIRIsdsPreset::SetChannelType(int)
+	?SetClickThroughUrl@CIRBrowseCatagoryItems@@QAEXABVTDesC16@@@Z @ 74  NONAME ; void CIRBrowseCatagoryItems::SetClickThroughUrl(class TDesC16 const &)
+	?SetClickThroughUrl@CIRBrowseChannelItems@@QAEXABVTDesC16@@@Z @ 75  NONAME ; void CIRBrowseChannelItems::SetClickThroughUrl(class TDesC16 const &)
+	?SetCountryCode@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 76  NONAME ; void CIRIsdsPreset::SetCountryCode(class TDesC16 const &)
+	?SetCountryInfo@CIRIsdsPreset@@QAEXABVTDesC16@@0@Z @ 77  NONAME ; void CIRIsdsPreset::SetCountryInfo(class TDesC16 const &, class TDesC16 const &)
+	?SetCountryName@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 78  NONAME ; void CIRIsdsPreset::SetCountryName(class TDesC16 const &)
+	?SetDescription@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 79  NONAME ; void CIRIsdsPreset::SetDescription(class TDesC16 const &)
+	?SetGenreId@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 80  NONAME ; void CIRIsdsPreset::SetGenreId(class TDesC16 const &)
+	?SetGenreInfo@CIRIsdsPreset@@QAEXABVTDesC16@@0@Z @ 81  NONAME ; void CIRIsdsPreset::SetGenreInfo(class TDesC16 const &, class TDesC16 const &)
+	?SetGenreName@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 82  NONAME ; void CIRIsdsPreset::SetGenreName(class TDesC16 const &)
+	?SetGetOperation@CIRBrowseCatagoryItems@@QAEXABVTDesC16@@@Z @ 83  NONAME ; void CIRBrowseCatagoryItems::SetGetOperation(class TDesC16 const &)
+	?SetGetOperationL@CIRBrowseChannelItems@@QAEXABVTDesC16@@@Z @ 84  NONAME ; void CIRBrowseChannelItems::SetGetOperationL(class TDesC16 const &)
+	?SetId@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 85  NONAME ; void CIRIsdsPreset::SetId(class TDesC16 const &)
+	?SetId@CIRIsdsPreset@@QAEXH@Z @ 86  NONAME ; void CIRIsdsPreset::SetId(int)
+	?SetImageUrl@CIRBrowseChannelItems@@QAEXABVTDesC16@@@Z @ 87  NONAME ; void CIRBrowseChannelItems::SetImageUrl(class TDesC16 const &)
+	?SetImgUrl@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 88  NONAME ; void CIRIsdsPreset::SetImgUrl(class TDesC16 const &)
+	?SetIndex@CIRIsdsPreset@@QAEXH@Z @ 89  NONAME ; void CIRIsdsPreset::SetIndex(int)
+	?SetLang@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 90  NONAME ; void CIRIsdsPreset::SetLang(class TDesC16 const &)
+	?SetLangCode@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 91  NONAME ; void CIRIsdsPreset::SetLangCode(class TDesC16 const &)
+	?SetLangInfo@CIRIsdsPreset@@QAEXABVTDesC16@@0@Z @ 92  NONAME ; void CIRIsdsPreset::SetLangInfo(class TDesC16 const &, class TDesC16 const &)
+	?SetLastModifiedTime@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 93  NONAME ; void CIRIsdsPreset::SetLastModifiedTime(class TDesC16 const &)
+	?SetLogoData@CIRIsdsPreset@@QAEXABVTDesC8@@@Z @ 94  NONAME ; void CIRIsdsPreset::SetLogoData(class TDesC8 const &)
+	?SetMusicStoreStatus@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 95  NONAME ; void CIRIsdsPreset::SetMusicStoreStatus(class TDesC16 const &)
+	?SetName@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 96  NONAME ; void CIRIsdsPreset::SetName(class TDesC16 const &)
+	?SetOTAUrl@CIROTAUpdate@@QAEXABVTDesC16@@@Z @ 97  NONAME ; void CIROTAUpdate::SetOTAUrl(class TDesC16 const &)
+	?SetServerName@CIRChannelServerUrl@@QAEXABVTDesC16@@@Z @ 98  NONAME ; void CIRChannelServerUrl::SetServerName(class TDesC16 const &)
+	?SetServerUrl@CIRChannelServerUrl@@QAEXABVTDesC16@@@Z @ 99  NONAME ; void CIRChannelServerUrl::SetServerUrl(class TDesC16 const &)
+	?SetShortDesc@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 100  NONAME ; void CIRIsdsPreset::SetShortDesc(class TDesC16 const &)
+	?SetSize@CIRBrowseCatagoryItems@@QAEXABVTDesC16@@@Z @ 101  NONAME ; void CIRBrowseCatagoryItems::SetSize(class TDesC16 const &)
+	?SetSize@CIRBrowseChannelItems@@QAEXABVTDesC16@@@Z @ 102  NONAME ; void CIRBrowseChannelItems::SetSize(class TDesC16 const &)
+	?SetSongName@CIRLastPlayedSongs@@QAEXABVTDesC16@@@Z @ 103  NONAME ; void CIRLastPlayedSongs::SetSongName(class TDesC16 const &)
+	?SetTextL@CIRBrowseCatagoryItems@@QAEXABVTDesC16@@0@Z @ 104  NONAME ; void CIRBrowseCatagoryItems::SetTextL(class TDesC16 const &, class TDesC16 const &)
+	?SetTextL@CIRBrowseChannelItems@@QAEXABVTDesC16@@00@Z @ 105  NONAME ; void CIRBrowseChannelItems::SetTextL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?SetURL@CIRAdvertisement@@QAEXABVTDesC16@@@Z @ 106  NONAME ; void CIRAdvertisement::SetURL(class TDesC16 const &)
+	?SetUniqId@CIRIsdsPreset@@QAEXK@Z @ 107  NONAME ; void CIRIsdsPreset::SetUniqId(unsigned long)
+	?SetUpdateInterval@CIROTAUpdate@@QAEXABVTDesC16@@@Z @ 108  NONAME ; void CIROTAUpdate::SetUpdateInterval(class TDesC16 const &)
+	?SetUpdateMethod@CIROTAUpdate@@QAEXABVTDesC16@@@Z @ 109  NONAME ; void CIROTAUpdate::SetUpdateMethod(class TDesC16 const &)
+	?SetUrlCount@CIRIsdsPreset@@QAEXH@Z @ 110  NONAME ; void CIRIsdsPreset::SetUrlCount(int)
+	?SetUrlCount@CIRIsdsPreset@@QAEXXZ @ 111  NONAME ; void CIRIsdsPreset::SetUrlCount(void)
+	?SetUrlL@CIRIsdsPreset@@QAEXABVTDesC16@@00@Z @ 112  NONAME ; void CIRIsdsPreset::SetUrlL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?SetUrlL@CIRIsdsPreset@@QAEXABVTDesC16@@0H@Z @ 113  NONAME ; void CIRIsdsPreset::SetUrlL(class TDesC16 const &, class TDesC16 const &, int)
+	?SetUrlL@CIRIsdsPreset@@QAEXABVTDesC16@@@Z @ 114  NONAME ; void CIRIsdsPreset::SetUrlL(class TDesC16 const &)
+	?SetUsage@CIRAdvertisement@@QAEXABVTDesC16@@@Z @ 115  NONAME ; void CIRAdvertisement::SetUsage(class TDesC16 const &)
+	?SetVersion@CIROTAUpdate@@QAEXABVTDesC16@@@Z @ 116  NONAME ; void CIROTAUpdate::SetVersion(class TDesC16 const &)
+	?SetVisibleTime@CIRAdvertisement@@QAEXABVTDesC16@@@Z @ 117  NONAME ; void CIRAdvertisement::SetVisibleTime(class TDesC16 const &)
+	?UniqId@CIRIsdsPreset@@QBEKXZ @ 118  NONAME ; unsigned long CIRIsdsPreset::UniqId(void) const
+	_E32Dll=__E32Dll	; Entry point for emulation
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irfavoritesdbu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,27 @@
+EXPORTS
+	?AddObserver@CIRFavoritesDb@@QAEHABVMPSPresetObserver@@@Z @ 1  NONAME ; int CIRFavoritesDb::AddObserver(class MPSPresetObserver const &)
+	?AddPresetL@CIRFavoritesDb@@QAEXAAVCIRIsdsPreset@@AAHH@Z @ 2  NONAME ; void CIRFavoritesDb::AddPresetL(class CIRIsdsPreset &, int &, int)
+	?AddPresetL@CIRFavoritesDb@@QAEXABVTDesC16@@0AAHH@Z @ 3  NONAME ; void CIRFavoritesDb::AddPresetL(class TDesC16 const &, class TDesC16 const &, int &, int)
+	?DeletePresetL@CIRFavoritesDb@@QAEXH@Z @ 4  NONAME ; void CIRFavoritesDb::DeletePresetL(int)
+	?EmptyPresetCount@CIRFavoritesDb@@QBEHXZ @ 5  NONAME ; int CIRFavoritesDb::EmptyPresetCount(void) const
+	?GetAllPreset@CIRFavoritesDb@@QAEXXZ @ 6  NONAME ; void CIRFavoritesDb::GetAllPreset(void)
+	?GetMoveStatus@CIRFavoritesDb@@QAEHXZ @ 7  NONAME ; int CIRFavoritesDb::GetMoveStatus(void)
+	?GetNextPreset@CIRFavoritesDb@@QAEHH@Z @ 8  NONAME ; int CIRFavoritesDb::GetNextPreset(int)
+	?GetPreviousPreset@CIRFavoritesDb@@QAEHH@Z @ 9  NONAME ; int CIRFavoritesDb::GetPreviousPreset(int)
+	?HandlePresetChangedL@CIRFavoritesDb@@EAEXHVTUid@@W4TPSReason@MPSPresetObserver@@@Z @ 10  NONAME ; void CIRFavoritesDb::HandlePresetChangedL(int, class TUid, enum MPSPresetObserver::TPSReason)
+	?MakePresetUserDefinedL@CIRFavoritesDb@@QAEXHH@Z @ 11  NONAME ; void CIRFavoritesDb::MakePresetUserDefinedL(int, int)
+	?MaxPresetCount@CIRFavoritesDb@@QAEHXZ @ 12  NONAME ; int CIRFavoritesDb::MaxPresetCount(void)
+	?NewL@CIRFavoritesDb@@SAPAV1@XZ @ 13  NONAME ; class CIRFavoritesDb * CIRFavoritesDb::NewL(void)
+	?PresetById@CIRFavoritesDb@@QAEPAVCIRPreset@@H@Z @ 14  NONAME ; class CIRPreset * CIRFavoritesDb::PresetById(int)
+	?PresetByIndex@CIRFavoritesDb@@QAEPAVCIRPreset@@H@Z @ 15  NONAME ; class CIRPreset * CIRFavoritesDb::PresetByIndex(int)
+	?Presets@CIRFavoritesDb@@QBEABV?$RPointerArray@VCIRPreset@@@@XZ @ 16  NONAME ; class RPointerArray<class CIRPreset> const & CIRFavoritesDb::Presets(void) const
+	?RemoveObserver@CIRFavoritesDb@@QAEXABVMPSPresetObserver@@@Z @ 17  NONAME ; void CIRFavoritesDb::RemoveObserver(class MPSPresetObserver const &)
+	?ReplacePresetL@CIRFavoritesDb@@QAEXAAVCIRIsdsPreset@@@Z @ 18  NONAME ; void CIRFavoritesDb::ReplacePresetL(class CIRIsdsPreset &)
+	?ReplaceUserDefinedPresetL@CIRFavoritesDb@@QAEXAAVCIRIsdsPreset@@@Z @ 19  NONAME ; void CIRFavoritesDb::ReplaceUserDefinedPresetL(class CIRIsdsPreset &)
+	?SearchPreset@CIRFavoritesDb@@QAEHHH@Z @ 20  NONAME ; int CIRFavoritesDb::SearchPreset(int, int)
+	?SetMoveStatus@CIRFavoritesDb@@QAEXH@Z @ 21  NONAME ; void CIRFavoritesDb::SetMoveStatus(int)
+	?SwapPresetsInDbL@CIRFavoritesDb@@QAEXHHHH@Z @ 22  NONAME ; void CIRFavoritesDb::SwapPresetsInDbL(int, int, int, int)
+	?GetAllSortedPresets@CIRFavoritesDb@@QAEABV?$RPointerArray@VCIRPreset@@@@XZ @ 23  NONAME ; class RPointerArray<class CIRPreset> const & CIRFavoritesDb::GetAllSortedPresets(void)
+	?IncreasePlayedTimesL@CIRFavoritesDb@@QAEHABVCIRIsdsPreset@@@Z @ 24  NONAME ; int CIRFavoritesDb::IncreasePlayedTimesL(class CIRIsdsPreset const &)
+	_E32Dll=__E32Dll	; Entry point for emulation
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irgeneralsettings200u.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irlogutility.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	?NewL@IRLogger@@SAPAV1@XZ @ 1 NONAME ; class IRLogger * IRLogger::NewL(void)
+	?NewLC@IRLogger@@SAPAV1@XZ @ 2 NONAME ; class IRLogger * IRLogger::NewLC(void)
+	?Version@IRLogger@@QBE?AVTVersion@@XZ @ 3 NONAME ; class TVersion IRLogger::Version(void) const
+	?write@IRLogger@@SAXABVTDesC16@@0000@Z @ 4 NONAME ; void IRLogger::write(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?write@IRLogger@@SAXABVTDesC16@@0@Z @ 5 NONAME ; void IRLogger::write(class TDesC16 const &, class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irmcpplugin100u.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irnetworkcontrolleru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,29 @@
+EXPORTS
+	?CancelConnecting@CIRNetworkController@@QAEXXZ @ 1  NONAME ; void CIRNetworkController::CancelConnecting(void)
+	?ChooseAccessPointL@CIRNetworkController@@QAEXH@Z @ 2  NONAME ; void CIRNetworkController::ChooseAccessPointL(int)
+	?Close@CIRNetworkController@@QAEXXZ @ 3  NONAME ; void CIRNetworkController::Close(void)
+	?DataTransferTracker@CIRNetworkController@@QAEAAVMIRDataTransferTracker@@XZ @ 4  NONAME ; class MIRDataTransferTracker & CIRNetworkController::DataTransferTracker(void)
+	?DeleteActiveNetworkObserver@CIRNetworkController@@QAEXAAVMIRActiveNetworkObserver@@@Z @ 5  NONAME ; void CIRNetworkController::DeleteActiveNetworkObserver(class MIRActiveNetworkObserver &)
+	?GetAccessPointList@CIRNetworkController@@QBEPBVCDesC16Array@@XZ @ 6  NONAME ; class CDesC16Array const * CIRNetworkController::GetAccessPointList(void) const
+	?GetApList@CIRNetworkController@@QBE?BV?$RArray@K@@XZ @ 7  NONAME ; class RArray<unsigned long> const CIRNetworkController::GetApList(void) const
+	?GetBearerList@CIRNetworkController@@QBE?BV?$RArray@K@@XZ @ 8  NONAME ; class RArray<unsigned long> const CIRNetworkController::GetBearerList(void) const
+	?GetIAPId@CIRNetworkController@@QBEHAAK@Z @ 9  NONAME ; int CIRNetworkController::GetIAPId(unsigned long &) const
+	?GetIRConnection@CIRNetworkController@@QAEAAVRConnection@@XZ @ 10  NONAME ; class RConnection & CIRNetworkController::GetIRConnection(void)
+	?GetIRSocketServer@CIRNetworkController@@QAEAAVRSocketServ@@XZ @ 11  NONAME ; class RSocketServ & CIRNetworkController::GetIRSocketServer(void)
+	?GetNetworkList@CIRNetworkController@@QBE?BV?$RArray@K@@XZ @ 12  NONAME ; class RArray<unsigned long> const CIRNetworkController::GetNetworkList(void) const
+	?GetNetworkStatus@CIRNetworkController@@QBEHXZ @ 13  NONAME ; int CIRNetworkController::GetNetworkStatus(void) const
+	?GetUAProfString@CIRNetworkController@@QAEPAVHBufC8@@XZ @ 14  NONAME ; class HBufC8 * CIRNetworkController::GetUAProfString(void)
+	?GetWapProfString@CIRNetworkController@@QAEPAVHBufC8@@XZ @ 15  NONAME ; class HBufC8 * CIRNetworkController::GetWapProfString(void)
+	?IdentifyConnectionType@CIRNetworkController@@QBE?AW4TIRConnectionType@@XZ @ 16  NONAME ; enum TIRConnectionType CIRNetworkController::IdentifyConnectionType(void) const
+	?InitializeHttpSessionL@CIRNetworkController@@QAEXABVRHTTPSession@@W4TIRTransferCategory@MIRDataTransferTracker@@@Z @ 17  NONAME ; void CIRNetworkController::InitializeHttpSessionL(class RHTTPSession const &, enum MIRDataTransferTracker::TIRTransferCategory)
+	?IsHandingOverConnection@CIRNetworkController@@QAEHXZ @ 18  NONAME ; int CIRNetworkController::IsHandingOverConnection(void)
+	?IsOfflineMode@CIRNetworkController@@QAEHXZ @ 19  NONAME ; int CIRNetworkController::IsOfflineMode(void)
+	?IsWlanSupported@CIRNetworkController@@QBEHXZ @ 20  NONAME ; int CIRNetworkController::IsWlanSupported(void) const
+	?LogoDataTransferTracker@CIRNetworkController@@QAEAAVMIRDataTransferTracker@@XZ @ 21  NONAME ; class MIRDataTransferTracker & CIRNetworkController::LogoDataTransferTracker(void)
+	?NewL@CIRNetworkObserver@@SAPAV1@PAVCIRNetworkController@@@Z @ 22  NONAME ; class CIRNetworkObserver * CIRNetworkObserver::NewL(class CIRNetworkController *)
+	?NotifyActiveNetworkObserversL@CIRNetworkController@@QAEXW4TIRNetworkEvent@@@Z @ 23  NONAME ; void CIRNetworkController::NotifyActiveNetworkObserversL(enum TIRNetworkEvent)
+	?OpenL@CIRNetworkController@@SAPAV1@PAVMIRNetworkController@@@Z @ 24  NONAME ; class CIRNetworkController * CIRNetworkController::OpenL(class MIRNetworkController *)
+	?RegisterActiveNetworkObserverL@CIRNetworkController@@QAEXAAVMIRActiveNetworkObserver@@@Z @ 25  NONAME ; void CIRNetworkController::RegisterActiveNetworkObserverL(class MIRActiveNetworkObserver &)
+	?RegisterLogoDataTransferTrackerL@CIRNetworkController@@QAEXAAVRHTTPSession@@@Z @ 26  NONAME ; void CIRNetworkController::RegisterLogoDataTransferTrackerL(class RHTTPSession &)
+	?ResetConnectionStatus@CIRNetworkController@@QAEXXZ @ 27  NONAME ; void CIRNetworkController::ResetConnectionStatus(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irsessionlogu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,28 @@
+EXPORTS
+	?BrowseUrl@CIRReportGenerator@@QAEXABVTDesC16@@H@Z @ 1  NONAME ; void CIRReportGenerator::BrowseUrl(class TDesC16 const &, int)
+	?HandleStopEvents@CIRReportGenerator@@QAEXH@Z @ 2  NONAME ; void CIRReportGenerator::HandleStopEvents(int)
+	?LogBrowse@CIRReportGenerator@@QAEXABVTDesC8@@H@Z @ 3  NONAME ; void CIRReportGenerator::LogBrowse(class TDesC8 const &, int)
+	?LogServerResult@CIRReportGenerator@@QAEXABVTDesC16@@W4TResponse@@@Z @ 4  NONAME ; void CIRReportGenerator::LogServerResult(class TDesC16 const &, enum TResponse)
+	?LogSongRecog@CIRReportGenerator@@QAEXXZ @ 5  NONAME ; void CIRReportGenerator::LogSongRecog(void)
+	?MarkSessionStart@CIRReportGenerator@@QAEXXZ @ 6  NONAME ; void CIRReportGenerator::MarkSessionStart(void)
+	?NmsLogStartedL@CIRReportGenerator@@QAEXXZ @ 7  NONAME ; void CIRReportGenerator::NmsLogStartedL(void)
+	?OpenL@CIRReportGenerator@@SAPAV1@XZ @ 8  NONAME ; class CIRReportGenerator * CIRReportGenerator::OpenL(void)
+	?ReStorePreviousSession@CIRReportGenerator@@QAEHXZ @ 9  NONAME ; int CIRReportGenerator::ReStorePreviousSession(void)
+	?ReponseFromISDSObtained@CIRReportGenerator@@QAEXXZ @ 10  NONAME ; void CIRReportGenerator::ReponseFromISDSObtained(void)
+	?ReportSent@CIRReportGenerator@@QAEXXZ @ 11  NONAME ; void CIRReportGenerator::ReportSent(void)
+	?SessionEndL@CIRReportGenerator@@QAEXH@Z @ 12  NONAME ; void CIRReportGenerator::SessionEndL(int)
+	?SessionStartedL@CIRReportGenerator@@QAEXXZ @ 13  NONAME ; void CIRReportGenerator::SessionStartedL(void)
+	?SetDbStatusObserser@CIRReportGenerator@@QAEXPAVMIRLogDbStatusObserver@@@Z @ 14  NONAME ; void CIRReportGenerator::SetDbStatusObserser(class MIRLogDbStatusObserver *)
+	?UpdateChannelID@CIRReportGenerator@@QAEXH@Z @ 15  NONAME ; void CIRReportGenerator::UpdateChannelID(int)
+	?UpdateConnectedFrom@CIRReportGenerator@@QAEXW4TConnectedFrom@@@Z @ 16  NONAME ; void CIRReportGenerator::UpdateConnectedFrom(enum TConnectedFrom)
+	?UpdateConnectionType@CIRReportGenerator@@QAEXABVTDesC16@@@Z @ 17  NONAME ; void CIRReportGenerator::UpdateConnectionType(class TDesC16 const &)
+	?UpdateCurrentBrowseNetwork@CIRReportGenerator@@QAEXH@Z @ 18  NONAME ; void CIRReportGenerator::UpdateCurrentBrowseNetwork(int)
+	?UpdateCurrentNetwork@CIRReportGenerator@@QAEXH@Z @ 19  NONAME ; void CIRReportGenerator::UpdateCurrentNetwork(int)
+	?UpdateHomeOperator@CIRReportGenerator@@QAEXH@Z @ 20  NONAME ; void CIRReportGenerator::UpdateHomeOperator(int)
+	?UpdateNmsChannelID@CIRReportGenerator@@QAEXH@Z @ 21  NONAME ; void CIRReportGenerator::UpdateNmsChannelID(int)
+	?UpdateNmsCurrentNetwork@CIRReportGenerator@@QAEXH@Z @ 22  NONAME ; void CIRReportGenerator::UpdateNmsCurrentNetwork(int)
+	?UpdateNmsHomeOperator@CIRReportGenerator@@QAEXH@Z @ 23  NONAME ; void CIRReportGenerator::UpdateNmsHomeOperator(int)
+	?UpdateNmsType@CIRReportGenerator@@QAEXABVTDesC16@@@Z @ 24  NONAME ; void CIRReportGenerator::UpdateNmsType(class TDesC16 const &)
+	?UpdateTerminatedBy@CIRReportGenerator@@QAEXW4TTerminationStatus@@@Z @ 25  NONAME ; void CIRReportGenerator::UpdateTerminatedBy(enum TTerminationStatus)
+	?WriteNmsLogtoXmlL@CIRReportGenerator@@QAEXXZ @ 26  NONAME ; void CIRReportGenerator::WriteNmsLogtoXmlL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irsettingsu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,73 @@
+EXPORTS
+	?DisplayAccessPointL@CIRSettings@@QBEHXZ @ 1  NONAME ; int CIRSettings::DisplayAccessPointL(void) const
+	?Get3GBitrateQuality@CIRSettings@@QBEHXZ @ 2  NONAME ; int CIRSettings::Get3GBitrateQuality(void) const
+	?GetApIdL@CIRSettings@@QBEKXZ @ 3  NONAME ; unsigned long CIRSettings::GetApIdL(void) const
+	?GetBearerIdL@CIRSettings@@QBEKXZ @ 4  NONAME ; unsigned long CIRSettings::GetBearerIdL(void) const
+	?GetDestinationIdL@CIRSettings@@QBEKXZ @ 5  NONAME ; unsigned long CIRSettings::GetDestinationIdL(void) const
+	?GetGPRSBitrateQuality@CIRSettings@@QBEHXZ @ 6  NONAME ; int CIRSettings::GetGPRSBitrateQuality(void) const
+	?GetIRIDL@CIRSettings@@QBEABVTDesC16@@XZ @ 7  NONAME ; class TDesC16 const & CIRSettings::GetIRIDL(void) const
+	?GetISDSBaseUrlL@CIRSettings@@QBEABVTDesC16@@XZ @ 8  NONAME ; class TDesC16 const & CIRSettings::GetISDSBaseUrlL(void) const
+	?GetIrappVersionL@CIRSettings@@QBEABVTDesC16@@XZ @ 9  NONAME ; class TDesC16 const & CIRSettings::GetIrappVersionL(void) const
+	?GetLogRunningNo@CIRSettings@@QBEHXZ @ 10  NONAME ; int CIRSettings::GetLogRunningNo(void) const
+	?GetManuallyAddedChId@CIRSettings@@QBEHXZ @ 11  NONAME ; int CIRSettings::GetManuallyAddedChId(void) const
+	?GetNetworkIdL@CIRSettings@@QBEKXZ @ 12  NONAME ; unsigned long CIRSettings::GetNetworkIdL(void) const
+	?GetPreferredQuality@CIRSettings@@QBEHXZ @ 13  NONAME ; int CIRSettings::GetPreferredQuality(void) const
+	?GetSilencePeriodL@CIRSettings@@QBEIXZ @ 14  NONAME ; unsigned int CIRSettings::GetSilencePeriodL(void) const
+	?GetSilencePeriodStartL@CIRSettings@@QBEABVTDesC16@@XZ @ 15  NONAME ; class TDesC16 const & CIRSettings::GetSilencePeriodStartL(void) const
+	?GetStartingViewIdL@CIRSettings@@QBEKXZ @ 16  NONAME ; unsigned long CIRSettings::GetStartingViewIdL(void) const
+	?GetStartingViewParameterL@CIRSettings@@QBEKXZ @ 17  NONAME ; unsigned long CIRSettings::GetStartingViewParameterL(void) const
+	?GetStereoMode@CIRSettings@@QAEHXZ @ 18  NONAME ; int CIRSettings::GetStereoMode(void)
+	?GetStickyViewFlagL@CIRSettings@@QAEHXZ @ 19  NONAME ; int CIRSettings::GetStickyViewFlagL(void)
+	?GetTimeOut@CIRSettings@@QBEHXZ @ 20  NONAME ; int CIRSettings::GetTimeOut(void) const
+	?GetUserDefinedSelectionL@CIRSettings@@QBEKXZ @ 21  NONAME ; unsigned long CIRSettings::GetUserDefinedSelectionL(void) const
+	?GetUserSavedApSettingsL@CIRSettings@@QBEXAAK00@Z @ 22  NONAME ; void CIRSettings::GetUserSavedApSettingsL(unsigned long &, unsigned long &, unsigned long &) const
+	?GetVolumeSetting@CIRSettings@@QBEHXZ @ 23  NONAME ; int CIRSettings::GetVolumeSetting(void) const
+	?GetWiFiBitrateQuality@CIRSettings@@QBEHXZ @ 24  NONAME ; int CIRSettings::GetWiFiBitrateQuality(void) const
+	?IsFlagCostWarningL@CIRSettings@@QAEHXZ @ 25  NONAME ; int CIRSettings::IsFlagCostWarningL(void)
+	?IsFlagIfAnyFavL@CIRSettings@@QAEHXZ @ 26  NONAME ; int CIRSettings::IsFlagIfAnyFavL(void)
+	?IsFlagTermsAndConditionsL@CIRSettings@@QAEHXZ @ 27  NONAME ; int CIRSettings::IsFlagTermsAndConditionsL(void)
+	?IsUpdateAvailableL@CIRSettings@@QAEHXZ @ 28  NONAME ; int CIRSettings::IsUpdateAvailableL(void)
+	?MaxPresetCount@CIRSettings@@QAEHXZ @ 29  NONAME ; int CIRSettings::MaxPresetCount(void)
+	?OpenL@CIRSettings@@SAPAV1@XZ @ 30  NONAME ; class CIRSettings * CIRSettings::OpenL(void)
+	?PrivatePath@CIRSettings@@QBEABVTDesC16@@XZ @ 31  NONAME ; class TDesC16 const & CIRSettings::PrivatePath(void) const
+	?ReSetDisplayAccessPointL@CIRSettings@@QAEXXZ @ 32  NONAME ; void CIRSettings::ReSetDisplayAccessPointL(void)
+	?ReSetFlagCostWarningL@CIRSettings@@QAEXXZ @ 33  NONAME ; void CIRSettings::ReSetFlagCostWarningL(void)
+	?ReSetFlagTermsAndConditionsL@CIRSettings@@QAEXXZ @ 34  NONAME ; void CIRSettings::ReSetFlagTermsAndConditionsL(void)
+	?ReSetUpdateAvailableL@CIRSettings@@QAEXXZ @ 35  NONAME ; void CIRSettings::ReSetUpdateAvailableL(void)
+	?Set3GBitrateQualityL@CIRSettings@@QAEXH@Z @ 36  NONAME ; void CIRSettings::Set3GBitrateQualityL(int)
+	?SetApIdL@CIRSettings@@QAEXK@Z @ 37  NONAME ; void CIRSettings::SetApIdL(unsigned long)
+	?SetBearerIdL@CIRSettings@@QAEXK@Z @ 38  NONAME ; void CIRSettings::SetBearerIdL(unsigned long)
+	?SetDestinationIdL@CIRSettings@@QAEXK@Z @ 39  NONAME ; void CIRSettings::SetDestinationIdL(unsigned long)
+	?SetDisplayAccessPointL@CIRSettings@@QAEXXZ @ 40  NONAME ; void CIRSettings::SetDisplayAccessPointL(void)
+	?SetFlagCostWarningL@CIRSettings@@QAEXXZ @ 41  NONAME ; void CIRSettings::SetFlagCostWarningL(void)
+	?SetFlagIfAnyFavL@CIRSettings@@QAEXXZ @ 42  NONAME ; void CIRSettings::SetFlagIfAnyFavL(void)
+	?SetFlagTermsAndConditionsL@CIRSettings@@QAEXXZ @ 43  NONAME ; void CIRSettings::SetFlagTermsAndConditionsL(void)
+	?SetGPRSBitrateQualityL@CIRSettings@@QAEXH@Z @ 44  NONAME ; void CIRSettings::SetGPRSBitrateQualityL(int)
+	?SetIRIDL@CIRSettings@@QAEXABVTDesC16@@@Z @ 45  NONAME ; void CIRSettings::SetIRIDL(class TDesC16 const &)
+	?SetISDSBaseUrlL@CIRSettings@@QAEXABVTDesC16@@@Z @ 46  NONAME ; void CIRSettings::SetISDSBaseUrlL(class TDesC16 const &)
+	?SetIrappVersionL@CIRSettings@@QAEXABVTDesC16@@@Z @ 47  NONAME ; void CIRSettings::SetIrappVersionL(class TDesC16 const &)
+	?SetLogRunningNoL@CIRSettings@@QAEXXZ @ 48  NONAME ; void CIRSettings::SetLogRunningNoL(void)
+	?SetManuallyAddedChIdL@CIRSettings@@QAEXXZ @ 49  NONAME ; void CIRSettings::SetManuallyAddedChIdL(void)
+	?SetMaxPresetCountL@CIRSettings@@QAEXH@Z @ 50  NONAME ; void CIRSettings::SetMaxPresetCountL(int)
+	?SetNetworkIdL@CIRSettings@@QAEXK@Z @ 51  NONAME ; void CIRSettings::SetNetworkIdL(unsigned long)
+	?SetPreferredQualityL@CIRSettings@@QAEXH@Z @ 52  NONAME ; void CIRSettings::SetPreferredQualityL(int)
+	?SetSilencePeriodL@CIRSettings@@QAEXI@Z @ 53  NONAME ; void CIRSettings::SetSilencePeriodL(unsigned int)
+	?SetSilencePeriodStartL@CIRSettings@@QAEXABVTDesC16@@@Z @ 54  NONAME ; void CIRSettings::SetSilencePeriodStartL(class TDesC16 const &)
+	?SetStartingViewIdL@CIRSettings@@QAEXK@Z @ 55  NONAME ; void CIRSettings::SetStartingViewIdL(unsigned long)
+	?SetStartingViewParameterL@CIRSettings@@QAEXK@Z @ 56  NONAME ; void CIRSettings::SetStartingViewParameterL(unsigned long)
+	?SetStereoModeL@CIRSettings@@QAEXH@Z @ 57  NONAME ; void CIRSettings::SetStereoModeL(int)
+	?SetStickyViewFlagL@CIRSettings@@QAEXH@Z @ 58  NONAME ; void CIRSettings::SetStickyViewFlagL(int)
+	?SetSubscriberIdL@CIRSettings@@QAEXABV?$TBuf@$0P@@@@Z @ 59  NONAME ; void CIRSettings::SetSubscriberIdL(class TBuf<15> const &)
+	?SetTimeCorrectionL@CIRSettings@@QAEXH@Z @ 60  NONAME ; void CIRSettings::SetTimeCorrectionL(int)
+	?SetTimeOutL@CIRSettings@@QAEXH@Z @ 61  NONAME ; void CIRSettings::SetTimeOutL(int)
+	?SetUpdateAvailableL@CIRSettings@@QAEXXZ @ 62  NONAME ; void CIRSettings::SetUpdateAvailableL(void)
+	?SetUserDefinedSelectionL@CIRSettings@@QAEXK@Z @ 63  NONAME ; void CIRSettings::SetUserDefinedSelectionL(unsigned long)
+	?SetUserSavedApSettingsL@CIRSettings@@QAEXKKK@Z @ 64  NONAME ; void CIRSettings::SetUserSavedApSettingsL(unsigned long, unsigned long, unsigned long)
+	?SetVolumeSettingL@CIRSettings@@QAEXH@Z @ 65  NONAME ; void CIRSettings::SetVolumeSettingL(int)
+	?SetWiFiBitrateQualityL@CIRSettings@@QAEXH@Z @ 66  NONAME ; void CIRSettings::SetWiFiBitrateQualityL(int)
+	?SubscriberIdL@CIRSettings@@QBEABV?$TBuf@$0P@@@XZ @ 67  NONAME ; class TBuf<15> const & CIRSettings::SubscriberIdL(void) const
+	?TimeCorrection@CIRSettings@@QBEHXZ @ 68  NONAME ; int CIRSettings::TimeCorrection(void) const
+	?GetSongHistoryShow@CIRSettings@@QBEHXZ @ 69  NONAME ; int CIRSettings::GetSongHistoryShow(void) const
+	?SetSongHisotryShowL@CIRSettings@@QAEXH@Z @ 70  NONAME ; void CIRSettings::SetSongHisotryShowL(int)
+	?GetGlobalAdvFlagL@CIRSettings@@QAEHXZ @ 71  NONAME ; int CIRSettings::GetGlobalAdvFlagL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irsettingsviewu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,21 @@
+EXPORTS
+	??0CIRCommonSettingsContainer@@IAE@XZ @ 1 NONAME ; CIRCommonSettingsContainer::CIRCommonSettingsContainer(void)
+	??0CIRSettingsViewBase@@IAE@XZ @ 2 NONAME ; CIRSettingsViewBase::CIRSettingsViewBase(void)
+	??1CIRCommonSettingsContainer@@UAE@XZ @ 3 NONAME ; CIRCommonSettingsContainer::~CIRCommonSettingsContainer(void)
+	??1CIRSettingsViewBase@@UAE@XZ @ 4 NONAME ; CIRSettingsViewBase::~CIRSettingsViewBase(void)
+	?BaseConstructL@CIRCommonSettingsContainer@@IAEXXZ @ 5 NONAME ; void CIRCommonSettingsContainer::BaseConstructL(void)
+	?BaseConstructL@CIRSettingsViewBase@@IAEXXZ @ 6 NONAME ; void CIRSettingsViewBase::BaseConstructL(void)
+	?CreateSettingItemL@CIRCommonSettingsContainer@@MAEPAVCAknSettingItem@@H@Z @ 7 NONAME ; class CAknSettingItem * CIRCommonSettingsContainer::CreateSettingItemL(int)
+	?DoActivateL@CIRSettingsViewBase@@MAEXABVTVwsViewId@@VTUid@@ABVTDesC8@@@Z @ 8 NONAME ; void CIRSettingsViewBase::DoActivateL(class TVwsViewId const &, class TUid, class TDesC8 const &)
+	?DoDeactivate@CIRSettingsViewBase@@MAEXXZ @ 9 NONAME ; void CIRSettingsViewBase::DoDeactivate(void)
+	?EditItemL@CIRCommonSettingsContainer@@MAEXHH@Z @ 10 NONAME ; void CIRCommonSettingsContainer::EditItemL(int, int)
+	?GetCaptionL@CIRSettingsViewBase@@MBEXAAVTDes16@@@Z @ 11 NONAME ; void CIRSettingsViewBase::GetCaptionL(class TDes16 &) const
+	?GetHelpContext@CIRCommonSettingsContainer@@MBEXAAVTCoeHelpContext@@@Z @ 12 NONAME ; void CIRCommonSettingsContainer::GetHelpContext(class TCoeHelpContext &) const
+	?HandleCommandL@CIRSettingsViewBase@@MAEXH@Z @ 13 NONAME ; void CIRSettingsViewBase::HandleCommandL(int)
+	?HandleForegroundEventL@CIRSettingsViewBase@@UAEXH@Z @ 14 NONAME ; void CIRSettingsViewBase::HandleForegroundEventL(int)
+	?LoadResourcesL@CIRSettingsViewBase@@IAEXAAVRConeResourceLoader@@ABVTDesC16@@@Z @ 15 NONAME ; void CIRSettingsViewBase::LoadResourcesL(class RConeResourceLoader &, class TDesC16 const &)
+	?NewL@CIRCommonSettingsContainer@@SAPAV1@XZ @ 16 NONAME ; class CIRCommonSettingsContainer * CIRCommonSettingsContainer::NewL(void)
+	?ResolveDriveL@CIRSettingsViewBase@@QAEXABVRFs@@AAV?$TBuf@$0BAA@@@@Z @ 17 NONAME ; void CIRSettingsViewBase::ResolveDriveL(class RFs const &, class TBuf<256> &)
+	?SetTitleL@CIRSettingsViewBase@@QAEXH@Z @ 18 NONAME ; void CIRSettingsViewBase::SetTitleL(int)
+	?SizeChanged@CIRCommonSettingsContainer@@MAEXXZ @ 19 NONAME ; void CIRCommonSettingsContainer::SizeChanged(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irsonghistoryu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,27 @@
+EXPORTS
+	??1CIRSongHistoryEngine@@UAE@XZ @ 1  NONAME ; CIRSongHistoryEngine::~CIRSongHistoryEngine(void)
+	??1CIRSongHistoryInfo@@UAE@XZ @ 2  NONAME ; CIRSongHistoryInfo::~CIRSongHistoryInfo(void)
+	?ClearAllHistory@CIRSongHistoryEngine@@QAEHXZ @ 3  NONAME ; int CIRSongHistoryEngine::ClearAllHistory(void)
+	?GetAllHistoryL@CIRSongHistoryEngine@@QAEXAAV?$RPointerArray@VCIRSongHistoryInfo@@@@@Z @ 4  NONAME ; void CIRSongHistoryEngine::GetAllHistoryL(class RPointerArray<class CIRSongHistoryInfo> &)
+	?GetArtistInfo@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 5  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetArtistInfo(void) const
+	?GetChannelDesc@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 6  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetChannelDesc(void) const
+	?GetChannelId@CIRSongHistoryInfo@@QBEHXZ @ 7  NONAME ; int CIRSongHistoryInfo::GetChannelId(void) const
+	?GetChannelMusicStatus@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 8  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetChannelMusicStatus(void) const
+	?GetChannelName@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 9  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetChannelName(void) const
+	?GetChannelType@CIRSongHistoryInfo@@QBEHXZ @ 10  NONAME ; int CIRSongHistoryInfo::GetChannelType(void) const
+	?GetHistoryCount@CIRSongHistoryEngine@@QAEHXZ @ 11  NONAME ; int CIRSongHistoryEngine::GetHistoryCount(void)
+	?GetSongInfo@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 12  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetSongInfo(void) const
+	?GetStreamUrl@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 13  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetStreamUrl(void) const
+	?HandleMetaDataReceivedL@CIRSongHistoryEngine@@QAEXABVCIRMetaData@@@Z @ 14  NONAME ; void CIRSongHistoryEngine::HandleMetaDataReceivedL(class CIRMetaData const &)
+	?NewL@CIRSongHistoryEngine@@SAPAV1@AAVMSongHistoryUINotifyHandler@@@Z @ 15  NONAME ; class CIRSongHistoryEngine * CIRSongHistoryEngine::NewL(class MSongHistoryUINotifyHandler &)
+	?NewL@CIRSongHistoryInfo@@SAPAV1@XZ @ 16  NONAME ; class CIRSongHistoryInfo * CIRSongHistoryInfo::NewL(void)
+	?NewLC@CIRSongHistoryEngine@@SAPAV1@AAVMSongHistoryUINotifyHandler@@@Z @ 17  NONAME ; class CIRSongHistoryEngine * CIRSongHistoryEngine::NewLC(class MSongHistoryUINotifyHandler &)
+	?NewLC@CIRSongHistoryInfo@@SAPAV1@XZ @ 18  NONAME ; class CIRSongHistoryInfo * CIRSongHistoryInfo::NewLC(void)
+	?SyncHistory@CIRSongHistoryEngine@@QAEHH@Z @ 19  NONAME ; int CIRSongHistoryEngine::SyncHistory(int)
+	?UpdateSongHistoryDb@CIRSongHistoryEngine@@QAEXHABVTDesC16@@00@Z @ 20  NONAME ; void CIRSongHistoryEngine::UpdateSongHistoryDb(int, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?GetBitrate@CIRSongHistoryInfo@@QBEHXZ @ 21  NONAME ; int CIRSongHistoryInfo::GetBitrate(void) const
+	?GetImageUrl@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 22  NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetImageUrl(void) const
+	?SetHistoryInfo@CIRSongHistoryInfo@@QAEXAAVRBuf16@@000HHH000@Z @ 23  NONAME ; void CIRSongHistoryInfo::SetHistoryInfo(class RBuf16 &, class RBuf16 &, class RBuf16 &, class RBuf16 &, int, int, int, class RBuf16 &, class RBuf16 &, class RBuf16 &)
+ 	?DeleteOneHistory@CIRSongHistoryEngine@@QAEHH@Z @ 24  NONAME ; int CIRSongHistoryEngine::DeleteOneHistory(int)
+	_E32Dll=__E32Dll	; Entry point for emulation
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irstreamsourceu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,17 @@
+EXPORTS
+	?CancelRequest@CIRStreamSource@@QAEXXZ @ 1 NONAME ; void CIRStreamSource::CancelRequest(void)
+	?ConnectToServerL@CIRStreamSource@@QAEXABVTDesC16@@@Z @ 2 NONAME ; void CIRStreamSource::ConnectToServerL(class TDesC16 const &)
+	?ContentTypeL@CIRStreamSource@@QAEABVTDesC8@@XZ @ 3 NONAME ; class TDesC8 const & CIRStreamSource::ContentTypeL(void)
+	?FilltheBuffer@CIRStreamSource@@UAEXAAVTDes8@@@Z @ 4 NONAME ; void CIRStreamSource::FilltheBuffer(class TDes8 &)
+	?NewL@CIRStreamSource@@SAPAV1@AAVMIRStreamSourceObserver@@@Z @ 5 NONAME ; class CIRStreamSource * CIRStreamSource::NewL(class MIRStreamSourceObserver &)
+	?ReconnectL@CIRStreamSource@@QAEXABVTDesC16@@@Z @ 6 NONAME ; void CIRStreamSource::ReconnectL(class TDesC16 const &)
+	?DetectAsfChannel@CIRAsfPlayer@@SAHABVTDesC16@@@Z @ 7 NONAME ; int CIRAsfPlayer::DetectAsfChannel(class TDesC16 const &)
+	?MaxVolume@CIRAsfPlayer@@QBEHXZ @ 8 NONAME ; int CIRAsfPlayer::MaxVolume(void) const
+	?NewL@CIRAsfPlayer@@SAPAV1@AAVMIRStreamSourceObserver@@AAVMIRCtrlCmdObserver@@@Z @ 9 NONAME ; class CIRAsfPlayer * CIRAsfPlayer::NewL(class MIRStreamSourceObserver &, class MIRCtrlCmdObserver &)
+	?NewLC@CIRAsfPlayer@@SAPAV1@AAVMIRStreamSourceObserver@@AAVMIRCtrlCmdObserver@@@Z @ 10 NONAME ; class CIRAsfPlayer * CIRAsfPlayer::NewLC(class MIRStreamSourceObserver &, class MIRCtrlCmdObserver &)
+	?Play@CIRAsfPlayer@@QAEXXZ @ 11 NONAME ; void CIRAsfPlayer::Play(void)
+	?PlayL@CIRAsfPlayer@@QAEXABVTDesC16@@@Z @ 12 NONAME ; void CIRAsfPlayer::PlayL(class TDesC16 const &)
+	?SetVolume@CIRAsfPlayer@@QAEXH@Z @ 13 NONAME ; void CIRAsfPlayer::SetVolume(int)
+	?Stop@CIRAsfPlayer@@QAEXXZ @ 14 NONAME ; void CIRAsfPlayer::Stop(void)
+	?Volume@CIRAsfPlayer@@QBEHXZ @ 15 NONAME ; int CIRAsfPlayer::Volume(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/iruicontrolsu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,55 @@
+EXPORTS
+	??0CIRAPListBox@@QAE@AAVCDesC16ArrayFlat@@@Z @ 1 NONAME ; CIRAPListBox::CIRAPListBox(class CDesC16ArrayFlat &)
+	??0CIRLaf@@QAE@ABVTRect@@@Z @ 2 NONAME ; CIRLaf::CIRLaf(class TRect const &)
+	??0CIRListBox@@QAE@PAVCIRLaf@@@Z @ 3 NONAME ; CIRListBox::CIRListBox(class CIRLaf *)
+	??0CIRSettingListBox@@QAE@PAVCIRLaf@@@Z @ 4 NONAME ; CIRSettingListBox::CIRSettingListBox(class CIRLaf *)
+	??0CIRSettingPopupListBox@@QAE@PAVCIRLaf@@@Z @ 5 NONAME ; CIRSettingPopupListBox::CIRSettingPopupListBox(class CIRLaf *)
+	??0CIconFileProvider@@QAE@XZ @ 6 NONAME ; CIconFileProvider::CIconFileProvider(void)
+	?ChangeColor@CIRStatusControlPane@@QAEXABVTRgb@@@Z @ 7 NONAME ; void CIRStatusControlPane::ChangeColor(class TRgb const &)
+	?ChangePanePosition@CIRStatusControlPane@@QAEXVTPoint@@@Z @ 8 NONAME ; void CIRStatusControlPane::ChangePanePosition(class TPoint)
+	?ChangeResolution@CIRLaf@@QAEXABVTRect@@@Z @ 9 NONAME ; void CIRLaf::ChangeResolution(class TRect const &)
+	?ClearAllFlags@CIRListBox@@QAEXXZ @ 10 NONAME ; void CIRListBox::ClearAllFlags(void)
+	?ConstructL@CIRAPListBox@@QAEXXZ @ 11 NONAME ; void CIRAPListBox::ConstructL(void)
+	?ConstructL@CIRListBox@@QAEXPBVCCoeControl@@@Z @ 12 NONAME ; void CIRListBox::ConstructL(class CCoeControl const *)
+	?ConstructL@CIRSettingListBox@@QAEXPBVCCoeControl@@@Z @ 13 NONAME ; void CIRSettingListBox::ConstructL(class CCoeControl const *)
+	?ConstructL@CIRSettingPopupListBox@@QAEXPBVCCoeControl@@@Z @ 14 NONAME ; void CIRSettingPopupListBox::ConstructL(class CCoeControl const *)
+	?CreateIconL@CIconFileProvider@@QBEPAVCFbsBitmap@@H@Z @ 15 NONAME ; class CFbsBitmap * CIconFileProvider::CreateIconL(int) const
+	?CreateIconL@CIconFileProvider@@QBEPAVCGulIcon@@HH@Z @ 16 NONAME ; class CGulIcon * CIconFileProvider::CreateIconL(int, int) const
+	?CurrentMultiSelectedList@CIRListBox@@QBE?AV?$RArray@H@@XZ @ 17 NONAME ; class RArray<int> CIRListBox::CurrentMultiSelectedList(void) const
+	?CurrentSelectedIndex@CIRAPListBox@@IBEHXZ @ 18 NONAME ; int CIRAPListBox::CurrentSelectedIndex(void) const
+	?CurrentSelectedIndex@CIRListBox@@QBEHXZ @ 19 NONAME ; int CIRListBox::CurrentSelectedIndex(void) const
+	?CurrentSelectedIndex@CIRSettingListBox@@QBEHXZ @ 20 NONAME ; int CIRSettingListBox::CurrentSelectedIndex(void) const
+	?CurrentSelectedIndex@CIRSettingPopupListBox@@QBEHXZ @ 21 NONAME ; int CIRSettingPopupListBox::CurrentSelectedIndex(void) const
+	?DisplayAccessPointLD@CIRAPListBox@@QAEHXZ @ 22 NONAME ; int CIRAPListBox::DisplayAccessPointLD(void)
+	?HandleMultiSelect@CIRListBox@@QAEXW4TIRHandleMultiSelection@1@@Z @ 23 NONAME ; void CIRListBox::HandleMultiSelect(enum CIRListBox::TIRHandleMultiSelection)
+	?LeftOptionText@CIRStatusControlPane@@QBEPBVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const * CIRStatusControlPane::LeftOptionText(void) const
+	?MarkingSelectedIndex@CIRListBox@@QAEXHH@Z @ 25 NONAME ; void CIRListBox::MarkingSelectedIndex(int, int)
+	?MiddleOptionText@CIRStatusControlPane@@QBEPBVTDesC16@@XZ @ 26 NONAME ; class TDesC16 const * CIRStatusControlPane::MiddleOptionText(void) const
+	?NewL@CIRStatusControlPane@@SAPAV1@ABVTRect@@AAVCIRLaf@@@Z @ 27 NONAME ; class CIRStatusControlPane * CIRStatusControlPane::NewL(class TRect const &, class CIRLaf &)
+	?NewL@CIconFileProvider@@SAPAV1@ABVTDesC16@@@Z @ 28 NONAME ; class CIconFileProvider * CIconFileProvider::NewL(class TDesC16 const &)
+	?NewLC@CIRStatusControlPane@@SAPAV1@ABVTRect@@AAVCIRLaf@@@Z @ 29 NONAME ; class CIRStatusControlPane * CIRStatusControlPane::NewLC(class TRect const &, class CIRLaf &)
+	?OfferKeyEventL@CIRAPListBox@@MAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 30 NONAME ; enum TKeyResponse CIRAPListBox::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?OfferKeyEventL@CIRListBox@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 31 NONAME ; enum TKeyResponse CIRListBox::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?OfferKeyEventL@CIRSettingListBox@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 32 NONAME ; enum TKeyResponse CIRSettingListBox::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?OfferKeyEventL@CIRSettingPopupListBox@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 33 NONAME ; enum TKeyResponse CIRSettingPopupListBox::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?OfferKeyEventL@CIRStatusControlPane@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 34 NONAME ; enum TKeyResponse CIRStatusControlPane::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?RightOptionText@CIRStatusControlPane@@QBEPBVTDesC16@@XZ @ 35 NONAME ; class TDesC16 const * CIRStatusControlPane::RightOptionText(void) const
+	?SetCurrentChosenIndex@CIRSettingPopupListBox@@QAEXH@Z @ 36 NONAME ; void CIRSettingPopupListBox::SetCurrentChosenIndex(int)
+	?SetCurrentSelectedIndex@CIRListBox@@QAEXH@Z @ 37 NONAME ; void CIRListBox::SetCurrentSelectedIndex(int)
+	?SetCurrentSelectedIndex@CIRSettingListBox@@QAEXH@Z @ 38 NONAME ; void CIRSettingListBox::SetCurrentSelectedIndex(int)
+	?SetCurrentSelectedIndex@CIRSettingPopupListBox@@QAEXH@Z @ 39 NONAME ; void CIRSettingPopupListBox::SetCurrentSelectedIndex(int)
+	?SetDataArrayL@CIRListBox@@QAEXPBVMDesC16Array@@@Z @ 40 NONAME ; void CIRListBox::SetDataArrayL(class MDesC16Array const *)
+	?SetDataArrayL@CIRSettingListBox@@QAEXPBVMDesC16Array@@@Z @ 41 NONAME ; void CIRSettingListBox::SetDataArrayL(class MDesC16Array const *)
+	?SetDataArrayL@CIRSettingPopupListBox@@QAEXPBVMDesC16Array@@@Z @ 42 NONAME ; void CIRSettingPopupListBox::SetDataArrayL(class MDesC16Array const *)
+	?SetHeaderTextL@CIRStatusControlPane@@QAEXABVTDesC16@@@Z @ 43 NONAME ; void CIRStatusControlPane::SetHeaderTextL(class TDesC16 const &)
+	?SetIconArray@CIRListBox@@QAEXABV?$RPointerArray@VCGulIcon@@@@H@Z @ 44 NONAME ; void CIRListBox::SetIconArray(class RPointerArray<class CGulIcon> const &, int)
+	?SetLSKTextL@CIRStatusControlPane@@QAEXABVTDesC16@@@Z @ 45 NONAME ; void CIRStatusControlPane::SetLSKTextL(class TDesC16 const &)
+	?SetMSKTextL@CIRStatusControlPane@@QAEXABVTDesC16@@@Z @ 46 NONAME ; void CIRStatusControlPane::SetMSKTextL(class TDesC16 const &)
+	?SetRSKTextL@CIRStatusControlPane@@QAEXABVTDesC16@@@Z @ 47 NONAME ; void CIRStatusControlPane::SetRSKTextL(class TDesC16 const &)
+	?SetSettings@CIRListBox@@QAEXHHHH@Z @ 48 NONAME ; void CIRListBox::SetSettings(int, int, int, int)
+	?SetStatusTextL@CIRStatusControlPane@@QAEXABVTDesC16@@000@Z @ 49 NONAME ; void CIRStatusControlPane::SetStatusTextL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?SizeChanged@CIRListBox@@UAEXXZ @ 50 NONAME ; void CIRListBox::SizeChanged(void)
+	?SizeChanged@CIRSettingListBox@@UAEXXZ @ 51 NONAME ; void CIRSettingListBox::SizeChanged(void)
+	?SizeChanged@CIRSettingPopupListBox@@UAEXXZ @ 52 NONAME ; void CIRSettingPopupListBox::SizeChanged(void)
+	?TitleText@CIRStatusControlPane@@QBEPBVTDesC16@@XZ @ 53 NONAME ; class TDesC16 const * CIRStatusControlPane::TitleText(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/irxmlparseru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewL@CIRXMLContentHandler@@SAPAV1@AAVMIRParserObserver@@AAVMIRCacheObserver@@@Z @ 1 NONAME ; class CIRXMLContentHandler * CIRXMLContentHandler::NewL(class MIRParserObserver &, class MIRCacheObserver &)
+	?ParseXmlL@CIRXMLContentHandler@@QAEXABVTDesC16@@0ABVCIRHttpResponseData@@@Z @ 2 NONAME ; void CIRXMLContentHandler::ParseXmlL(class TDesC16 const &, class TDesC16 const &, class CIRHttpResponseData const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/bwinscw/isdsclientinterfaceu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,18 @@
+EXPORTS
+	?GetDataProvider@CIRIsdsClient@@QAEPAVCIRDataProvider@@XZ @ 1 NONAME ; class CIRDataProvider * CIRIsdsClient::GetDataProvider(void)
+	?GetMultiplePresetsL@CIRIsdsClient@@QAEXABV?$RArray@H@@AAH@Z @ 2 NONAME ; void CIRIsdsClient::GetMultiplePresetsL(class RArray<int> const &, int &)
+	?GetOtaStatusL@CIRIsdsClient@@QAEXAAH@Z @ 3 NONAME ; void CIRIsdsClient::GetOtaStatusL(int &)
+	?IRGetIRIDL@CIRIsdsClient@@QAEXXZ @ 4 NONAME ; void CIRIsdsClient::IRGetIRIDL(void)
+	?IRISDSCancelRequest@CIRIsdsClient@@QAEXXZ @ 5 NONAME ; void CIRIsdsClient::IRISDSCancelRequest(void)
+	?IRISDSMultiSearchL@CIRIsdsClient@@QAEXABVTDesC16@@000@Z @ 6 NONAME ; void CIRIsdsClient::IRISDSMultiSearchL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?IRISDSPostL@CIRIsdsClient@@QAEXAAV?$TBuf@$0BAA@@@@Z @ 7 NONAME ; void CIRIsdsClient::IRISDSPostL(class TBuf<256> &)
+	?IRISDSSearchL@CIRIsdsClient@@QAEXABVTDesC16@@@Z @ 8 NONAME ; void CIRIsdsClient::IRISDSSearchL(class TDesC16 const &)
+	?IRIsdsClientIntefaceL@CIRIsdsClient@@QAEHIW4TIRIsdsClientInterfaces@1@H@Z @ 9 NONAME ; int CIRIsdsClient::IRIsdsClientIntefaceL(unsigned int, enum CIRIsdsClient::TIRIsdsClientInterfaces, int)
+	?IRIsdsClientIntefaceL@CIRIsdsClient@@QAEHW4TIRIsdsclientInterfaceIDs@1@@Z @ 10 NONAME ; int CIRIsdsClient::IRIsdsClientIntefaceL(enum CIRIsdsClient::TIRIsdsclientInterfaceIDs)
+	?IRIsdsIsCategoryCachedL@CIRIsdsClient@@QAEHW4TIRIsdsclientInterfaceIDs@1@@Z @ 11 NONAME ; int CIRIsdsClient::IRIsdsIsCategoryCachedL(enum CIRIsdsClient::TIRIsdsclientInterfaceIDs)
+	?IRIsdsIsChannelCachedL@CIRIsdsClient@@QAEHI@Z @ 12 NONAME ; int CIRIsdsClient::IRIsdsIsChannelCachedL(unsigned int)
+	?NewL@CIRIsdsClient@@SAPAV1@AAVMIsdsResponseObserver@@ABVTDesC16@@@Z @ 13 NONAME ; class CIRIsdsClient * CIRIsdsClient::NewL(class MIsdsResponseObserver &, class TDesC16 const &)
+	?PurgeOtaInfoL@CIRIsdsClient@@QAEXXZ @ 14 NONAME ; void CIRIsdsClient::PurgeOtaInfoL(void)
+	?ReleaseResources@CIRIsdsClient@@QAEXXZ @ 15 NONAME ; void CIRIsdsClient::ReleaseResources(void)
+	?SyncPresetL@CIRIsdsClient@@QAEHHABVTDesC16@@@Z @ 16 NONAME ; int CIRIsdsClient::SyncPresetL(int, class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtinc/ircachecleanup.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <e32base.h>
+
+//Max size in Bytes
+const TInt KCacheLimitSize = 8*1024*1024;
+
+class CIRCacheMgmt;
+
+NONSHARABLE_CLASS (CIRCacheCleanup):public CTimer
+	{
+	public:
+
+    /**
+     * Two-phased constructor.
+     * @return  The newly created object.
+     */
+    static CIRCacheCleanup* NewL(CIRCacheMgmt& aCacheDb);
+
+    /**
+     * Destructor.
+     */
+    ~CIRCacheCleanup();
+
+	private:
+
+    /**
+     * Default Constructor.
+     * @param CIRCacheMgmt refrerence
+     */
+    CIRCacheCleanup(CIRCacheMgmt& aCacheDb);
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     *CleanupCacheDbL()
+     * Cleansup routine
+     */
+    void CleanupCacheDbL();
+    
+    /**
+     *CheckStatusL()
+     * CheckStatus of CacheDb and do cleanup if necessary
+     */
+    void CheckStatusL();
+    
+
+    /**
+     * @see CTimer::RunL().
+     */
+    void RunL();
+    
+    /**
+     * GetCleanupInterval().
+     *gets the cleanup routine call interval based on the current cache size.
+     *formula derivation:
+	 *Timeinterval of cleanup (T) is inversely proportional to the cache size(S)
+	 *Minimum time interval for cleanup routine 2 min.
+	 *Maximum time interval for cleanup routine ~35mins.
+	 *timeintervalperbyte = (35-2)*60*1000000/1024*1024
+	 *TimeInterval = timeintervalperbyte*(MaxCacheLimit-CurrentCachesize)
+     */
+     TUint32 GetCleanupInterval();
+     
+	private:
+
+    /** The cache database. */
+    CIRCacheMgmt& iDatabase;
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtinc/ircachemgmt.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+ 
+#ifndef CIRCACHEMGMT_H
+#define CIRCACHEMGMT_H
+
+#include <d32dbms.h>
+
+
+const TInt KMAXHEADER = 255;
+
+class CIRBrowseCatagoryItems;
+class CIRBrowseChannelItems;
+class CIRCacheCleanup;
+class CIRHttpResponseData;
+class CIRIsdsPreset;
+class CIROTAUpdate;
+class CIRSettings;
+class MIRCacheObserver;
+
+class CIRCacheMgmt : public CObject
+  	{
+  	
+public:
+
+	/**
+	*CIRCacheMgmt::OpenL()
+	*Standard two phased construction
+	*calls ConstructL()
+	*@param MIRCacheObserver &
+	*@return CIRCacheMgmt*
+	*/
+	IMPORT_C static CIRCacheMgmt* OpenL(MIRCacheObserver &aObserver);
+
+    /**
+     * Adds a cache observer
+     *
+     * @param aObserver The observer to be added
+     */
+    IMPORT_C void AddObserverL( MIRCacheObserver* aObserver );
+    
+    /**
+    * Removes a cache observer
+    *
+    * @param aObserver The observer to be removed
+    */
+    IMPORT_C void RemoveObserver( MIRCacheObserver* aObserver );
+	
+	/**
+	*CIRCacheMgmt::CheckCache()
+	*API Exposed to Isds Client to check and get the cached items.
+	*@ aType the type of items i.e category,channel or preset. aName is the file name(type,CategoryId,PresetId
+	*@return TInt,1 for a cache hit,0 for cache miss,-1 for invalid cache
+	*
+	*/
+	IMPORT_C void CheckCacheL(TInt aType,const TDesC& aName,TBool aForceGet,TInt& aReturn);
+
+	/**
+	*CIRCacheMgmt::CheckValidity()
+	*Checks the freshness of the cache
+	*@param universal time of file creation
+	*@return TBool 1 if fresh,0 if stale
+	*/ 
+	TBool CheckValidity(const TTime &aCreateTime,TInt aTrustPeriod) const;
+
+	
+	/**
+	*CIRCacheMgmt::CacheCategoryItems()
+	*Caches the category array of data.By externalizing it into a file.
+	*@param aPtrCategory the object array,aName the file name from which the information is to be written
+	*/ 
+	IMPORT_C  void CacheCategoryItemsL(CArrayPtrFlat<CIRBrowseCatagoryItems>& aPtrCategory,
+			const TDesC& aFilePath,const CIRHttpResponseData& aResponseHeaders);
+
+	/**
+	*CIRCacheMgmt::CacheChannelItems()
+	*Caches the channel objects array of data.By externalizing it into a file.
+	*@param aPtrChannel the object array,aName the file name from which the information is to be written
+	*/
+	IMPORT_C  void CacheChannelItemsL(CArrayPtrFlat<CIRBrowseChannelItems>& aPtrChannel,
+		const TDesC& aFilePath,const CIRHttpResponseData& aResponseHeaders);
+
+	/**
+	*CIRCacheMgmt::CachePresetItem()
+	*Caches the preset objects .By externalizing it into a file.
+	*Multiple presets can be cached.
+	*@param aPreset preset object,aName the file name from which the information is to be written
+	*/
+	IMPORT_C  void CachePresetItemL(
+		CArrayPtrFlat<CIRIsdsPreset>& aPtrPresets,
+		const TDesC& aName,const CIRHttpResponseData& aResponseHeaders);
+
+	/**
+	*Function : CIRCacheMgmt::CacheOtaInfoL()
+	* Caches the OTA information  .By externalizing it into a db.
+	*@param aOta otainfo object,aName the file name from which the information is to be written
+	*/
+	IMPORT_C void CacheOtaInfoL(const CIROTAUpdate& aOta,const TDesC& aName,
+								const CIRHttpResponseData& aResponseHeaders);
+								
+								
+	////////////////////////////////////////////////////////////////////////
+	// CacheLogoL() API is added newly for logo cache management          //
+	////////////////////////////////////////////////////////////////////////							
+	/**
+	*CIRCacheMgmt::CacheLogoL()
+	* Caches the logo data for a given logo url.
+	*@param aData --- logo data
+	*@param aUrl  --- logo url
+	*/								
+	IMPORT_C void CacheLogoL(const TDesC8& aData, const TDesC& aUrl,
+	                         const CIRHttpResponseData& aResponseHeaders);
+								
+								
+	/**
+	*CIRCacheMgmt::UpdateTrustPeriodL()
+	*Modifies the Trust period that comes with the 304 Not Modified responces from isds
+	*@ aType the type of items i.e category,channel or preset. aName is the file name(type,CategoryId,PresetId
+	*/		
+	IMPORT_C void UpdateTrustPeriodL(TInt aType, const TDesC& aName,
+						 CIRHttpResponseData& aResponseHeaders);
+
+   	/**
+	*CIRCacheMgmt::RemoveOtaInfoL()	
+	*removes any cached ota response in case it is invalid
+	*/
+	IMPORT_C void RemoveOtaInfoL();
+    
+	/**
+	*CIRCacheMgmt::CheckSizeL()
+	*checks the current size of cache against the max cache limit
+	*/	
+	void CheckSizeL();
+	/**
+	*CIRCacheMgmt::RemoveOldUnusedDataL()
+	*removes all unused data to bring the cache under the max cache size
+	*/	
+	void RemoveOldUnusedDataL();
+	/**
+	*CIRCacheMgmt::CacheSize()
+	*@return the cache size
+	*/	
+	TInt CacheSize();
+private:
+
+	/**
+	*CIRCacheMgmt::CIRCacheMgmt()
+	*Standard C++ constructor
+	*@param MIRCacheObserver &
+	*@return NA
+	*sets the trust period to 24hrs(default)
+	*/
+	CIRCacheMgmt(MIRCacheObserver &aObserver);
+		
+	/**
+	*CIRCacheMgmt::ConstructL()
+	*Standard two phased construction
+	*@param void
+	*@return void
+	*creates the folder paths if nonexistant
+	*/
+	void ConstructL();
+	
+	/**
+	*CIRCacheMgmt::~CIRCacheMgmt()
+	*Standard C++ destructor
+	*@param NA
+	*@return NA
+	*/
+	~CIRCacheMgmt();
+	
+	/**
+	*CIRCacheMgmt::CreateCacheTableL()
+	*Creates the cache table
+	*CacheTable
+	* -----------------------------------------------------------------------------------------------
+	*| RowIndex|DataType|DataId|TrustPeriod|LastModified  |LastAccessed|Created|ItemCount|CachedData|
+	*------------------------------------------------------------------------------------------------
+	*| auto    |TInt    |TDesC |TInt       |TDesC/DateTime|TTime       |Time   |TInt     | Streamed |
+	*|increment|0,1,2 !0| !0   |  !0       |              |            |       |         | Data     |
+	*------------------------------------------------------------------------------------------------
+	*/
+	void CreateCacheTableL();
+		
+	/**
+	*CIRCacheMgmt::CreateCacheIndexL()
+	*creates the indices for cache table
+	*/
+	void CreateCacheIndexL();
+	
+	void FetchCacheIfAvailableL(TInt aType,const TDesC& aId,TBool aForceGet,TInt& aReturnVal);
+	void FetchCachedDataL(TInt aType,TInt aCountItems,RDbView& aCacheView);
+	
+	void CloseDb();
+	TInt OpenCacheDb();
+	TInt CreateDb();
+	void CreateDbConditionalL();		
+	/**	
+	*CIRCacheMgmt::UpdateLastAccessedTime()	
+	*updates the last accessed field to aid in deletion of old data
+	*@param RDbView&,the view for which the update has to be made
+	*/
+	void UpdateLastAccessedTimeL(RDbView &aCacheView);
+	
+public:
+	//!Enumeration for type identification
+	enum TIRTypes
+		{
+		ECatagory = 0,
+		EChannels,
+		EPresets,
+		EOtaInfo,
+		ELogo		//added for logo cache management
+		};
+		
+	//!Enumeration for return types	    
+	enum TIRCacheStatus
+		{
+		ECacheNotValid = -1,
+		ENotCached,
+		ECacheUseable
+		};
+		
+	//! trust period for cache(24hrs by default)
+	TTimeIntervalSeconds iTrustPeriod;
+	
+	// Array of Pointers to PresetClass
+	//used to return an array of cached presets to the UI
+	CArrayPtrFlat<CIRIsdsPreset>* iPtrPreset;
+	
+	//! Array of Pointers to CategoryClass	
+	CArrayPtrFlat<CIRBrowseCatagoryItems>* iPtrCategory;
+	
+	//! Array of Pointers to BrowseCategoryClass
+	CArrayPtrFlat<CIRBrowseChannelItems>* iPtrChannel;
+	
+	//ota info holding object
+	CIROTAUpdate* iOTA;
+	//!Observer class for cache
+	MIRCacheObserver& iCacheObserver;
+	
+	//To store the logo data which is retrieved from the cache
+	RBuf8 iLogoData;
+	
+	//!time stamp string in HTTP format,used if cache is stale
+ 	TTime iLastModified;
+ 	
+ 	//ETag header assaociated witht the logo data
+ 	TBuf8< KMAXHEADER > iETag;
+	
+private:
+	/** 
+     * Array of cache observers
+     */
+    RPointerArray<MIRCacheObserver> iCacheObservers;
+    RDbNamedDatabase iCacheDb;
+    TBool iOpen;
+    //! fileserver session
+	RFs iFsSession;
+	TFileName iDatabaseFileName;
+	//central repository settings handle
+	CIRSettings* iSettings;
+	CIRCacheCleanup* iCleanup;
+	TInt iCacheDbSize;
+	};
+#endif //CIRCACHEMGMT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtinc/ircacheobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef MIRCACHEOBSERVER_H
+#define MIRCACHEOBSERVER_H
+
+#include <e32def.h>
+
+class MIRCacheObserver
+{
+    public:
+ //!General error condition   
+    virtual void CacheError() = 0;
+//! If seeked data not in cache    
+    virtual void CacheFailed() = 0;
+//!If cached data is stale    
+    virtual void CacheInvalid() = 0;
+//!Data is valid and extracted into the structure    
+    virtual void CachedStructureL(TInt aChoice) = 0;
+                    
+};
+
+#endif //MIRCACHEOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtsrc/ircachecleanup.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "ircachecleanup.h"
+#include "ircachemgmt.h"
+#include "irdebug.h"
+
+//Constant decided on the rate of data collection in cache in a high speed connection
+/* const TUint KConstantForCleanupFrequency = KCacheLimitSize*90; */
+//maximum time interval = 2147483648/KCacheLimitSize
+const TUint KIntervalPerByte =2048 ;
+//
+const TInt KMinCleanupInterval = 2*60*1000000;//2 mins
+const TInt KMaxCleanupInterval = 2147483647;//~36 mins for 1MB data
+
+// ---------------------------------------------------------------------------
+//Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+   	CIRCacheCleanup* CIRCacheCleanup::NewL(CIRCacheMgmt& aCacheDb)
+   		{
+   		IRLOG_DEBUG( "CIRCacheCleanup::NewL - Entering" );
+   		CIRCacheCleanup* self = new(ELeave)CIRCacheCleanup(aCacheDb);
+   		CleanupStack::PushL(self);
+   		self->ConstructL();
+   		CleanupStack::Pop(self);
+   		IRLOG_DEBUG( "CIRCacheCleanup::NewL - Exiting" );
+   		return self;
+   		}
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+    CIRCacheCleanup::~CIRCacheCleanup()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::~CIRCacheCleanup - Entering" );
+    	Cancel();
+    	IRLOG_DEBUG( "CIRCacheCleanup::~CIRCacheCleanup - Exiting" );
+    	}
+
+// ---------------------------------------------------------------------------
+//Default Constructor
+// ---------------------------------------------------------------------------
+//
+    CIRCacheCleanup::CIRCacheCleanup(CIRCacheMgmt& aCacheDb):
+    CTimer( CActive::EPriorityLow ), iDatabase( aCacheDb )
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::CIRCacheCleanup - Entering" );
+    	CActiveScheduler::Add( this );
+    	IRLOG_DEBUG( "CIRCacheCleanup::CIRCacheCleanup - Exiting" );
+    	}
+
+// ---------------------------------------------------------------------------
+//Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::ConstructL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::ConstructL - Entering" );
+    	CTimer::ConstructL(); 	
+    	CheckStatusL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::ConstructL - Exiting" );
+    	}
+
+// ---------------------------------------------------------------------------
+//Cleanup CacheDb if necessary
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::CleanupCacheDbL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::CleanupCacheDbL - Entering" );
+    	iDatabase.CheckSizeL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::CleanupCacheDbL - Exiting" );
+    	}
+    
+// ---------------------------------------------------------------------------
+//CheckStatus of CacheDb and do cleanup if necessary
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::CheckStatusL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::CheckStatusL - Entering" );
+    	TTimeIntervalMicroSeconds32  interval(GetCleanupInterval());
+    	After(interval);
+    	CleanupCacheDbL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::CheckStatusL - Exiting" );
+    	}
+    
+// ---------------------------------------------------------------------------
+//  CIRCacheCleanup::RunL().
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::RunL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::RunL - Entering" );
+    	CheckStatusL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::RunL - Exiting" );
+    	}
+    	
+// ---------------------------------------------------------------------------
+//  CIRCacheCleanup::GetCleanupInterval().
+// ---------------------------------------------------------------------------
+//
+TUint32 CIRCacheCleanup::GetCleanupInterval()
+	{
+	IRLOG_DEBUG( "CIRCacheCleanup::GetCleanupInterval - Entering" );
+	//formula derivation:
+	//Timeinterval of cleanup (T) is inversely proportional to the cache size(S)
+	//Minimum time interval for cleanup routine 2 min.
+	//Maximum time interval for cleanup routine ~35mins.
+	//timeintervalperbyte = (35-2)*60*1000000/1024*1024
+	//TimeInterval = timeintervalperbyte*(MaxCacheLimit-CurrentCachesize)
+	
+	TInt interval =KIntervalPerByte * (KCacheLimitSize - iDatabase.CacheSize());
+	//keep the value range bound
+	interval = Max(interval,KMinCleanupInterval);
+	interval = Min(interval,KMaxCleanupInterval);
+	IRLOG_DEBUG( "CIRCacheCleanup::GetCleanupInterval - Exiting" );
+	return interval;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtsrc/ircachemgmt.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1505 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <bautils.h>
+
+#include "irbrowsecatagoryitems.h"
+#include "irbrowsechannelitems.h"
+#include "ircachecleanup.h"
+#include "ircachemgmt.h"
+#include "ircacheobserver.h"
+#include "irdebug.h"
+#include "irhttprequestdata.h"
+#include "irisdspreset.h"
+#include "irotaupdate.h"
+#include "irsettings.h"
+
+//Default trust period value.24 hrs in secs with which the object is to be initialised
+const TInt KDefaultInterval = 24*60*60;
+//granualarity for the arrays
+//the granualarity value is based on superficial observation of the amount of 
+//data recieved for a particular request
+const TInt KBrowseGranualarity = 32;
+const TInt KChannelArrayGranualarity = 32;
+const TInt KPresetGranualarity = 12;
+//http length format length
+// "Sun, 06 Nov 1994 08:49:37 GMT" format
+const TInt KHttpDateLength = 25;
+
+//Max size(critical size) in Bytes(90% of the max size)
+//critical size is the size that triggers cleanup action
+const TInt KCacheCriticalSizeLimit = KCacheLimitSize*9/10;
+
+//No of rows deleted will be one fourth of the total number of rows
+const TInt KPercentRowsDeleted = 4;  
+
+//The indexing size for the column DataId is set to 100 
+const TInt KDataIdIndexSize = 100;
+
+//database file name
+_LIT(KCacheDbFile,"cacheDb.db");
+
+//Table Name CacheTable
+_LIT(KCacheTable,"CacheTable");
+
+//CacheTable columns
+_LIT(KRowIndexCol,     "RowIndex");  
+_LIT(KDataTypeCol,     "DataType");            
+_LIT(KDataIdCol,       "DataId");       
+_LIT(KTrustPeriodCol,  "TrustPeriod");       
+_LIT(KLastModifiedCol, "LastModified"); 
+_LIT(KLastAccessedCol, "LastAccessed"); 
+_LIT(KTimeCreation,    "Created");
+_LIT(KItemCount,       "ItemCount");
+_LIT(KCachedDataCol,   "CachedData");
+_LIT(KETagHeader,      "ETagHeader"); 
+
+//Table Index Names
+_LIT(KRowIndexColIndex,     "IndexRowIndex");  
+_LIT(KDataTypeColIndex,     "IndexDataType");            
+_LIT(KDataIdColIndex,       "IndexDataId");  
+_LIT(KLastAccessedColIndex, "IndexLastAccessed"); 
+_LIT(KTimeCreationIndex,    "IndexCreated");
+//Field Lengths
+
+const TInt KIRObserverArrayGranularity( 2 );
+
+
+// ---------------------------------------------------------------------------
+// Function : OpenL
+// Standard two phased construction
+// calls ConstructL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCacheMgmt* CIRCacheMgmt::OpenL(MIRCacheObserver &aObserver)
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::OpenL - Entering." );
+	CIRCacheMgmt* self = reinterpret_cast<CIRCacheMgmt*>(Dll::Tls());
+	
+	if (self)
+		{
+		User::LeaveIfError(self->Open());
+		}
+    else
+		{
+		self = new (ELeave) CIRCacheMgmt(aObserver);
+		CleanupClosePushL(*self);
+		self->ConstructL();
+		User::LeaveIfError(Dll::SetTls(self));
+		CleanupStack::Pop(self);
+		}
+	IRLOG_DEBUG( "IRCacheMgmt::OpenL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::~CIRCacheMgmt()
+// Standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+CIRCacheMgmt::~CIRCacheMgmt() 
+	{	
+	IRLOG_DEBUG( "IRCacheMgmt::~CIRCacheMgmt - Entering." );
+	//array destruction
+	if (iPtrPreset)
+		{
+		iPtrPreset->ResetAndDestroy();
+        delete iPtrPreset;
+        iPtrPreset = NULL;
+		}
+    if (iPtrCategory)
+        {
+        iPtrCategory->ResetAndDestroy();
+        }
+
+    delete iPtrCategory;
+    iPtrCategory = NULL;
+    if (iPtrChannel)
+        {
+        iPtrChannel->ResetAndDestroy();
+        }
+
+    delete iPtrChannel;
+    iPtrChannel = NULL;
+    if (iSettings)
+        {
+        iSettings->Close();
+        }
+	if(iOTA)
+		{
+		delete iOTA;
+		iOTA = NULL;
+		}
+	iLogoData.Close();		
+    CloseDb();
+    iCacheDb.Close();
+    delete iCleanup;
+    iFsSession.Close();
+    iCacheObservers.Close();
+    Dll::FreeTls();
+    IRLOG_DEBUG( "IRCacheMgmt::~CIRCacheMgmt - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CIRCacheMgmt()
+// Standard C++ constructor
+// sets the trust period to 24hrs(default)
+// ---------------------------------------------------------------------------
+//
+CIRCacheMgmt::CIRCacheMgmt (MIRCacheObserver &aObserver)
+			:iCacheObserver(aObserver),
+			 iCacheObservers( KIRObserverArrayGranularity )
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CIRCacheMgmt - Entering." );
+	//default trust period initially set to 24 hrs
+	//to be fetched from central repository
+	iTrustPeriod = TTimeIntervalSeconds(KDefaultInterval);	
+	IRLOG_DEBUG( "IRCacheMgmt::CIRCacheMgmt - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::ConstructL()
+// Standard two phased construction
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::ConstructL() 
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::ConstructL - Entering." );
+	User::LeaveIfError(iFsSession.Connect());
+	//array construction
+	iPtrPreset = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(
+				KPresetGranualarity);
+    iPtrCategory = new (ELeave) CArrayPtrFlat<CIRBrowseCatagoryItems>(
+    	KBrowseGranualarity);
+	iPtrChannel = new (ELeave) CArrayPtrFlat<CIRBrowseChannelItems>(
+		KChannelArrayGranualarity);
+	iOTA = CIROTAUpdate::NewL();
+	iSettings = CIRSettings::OpenL();
+	iDatabaseFileName = iSettings->PrivatePath();
+	iDatabaseFileName.Append(KCacheDbFile);
+	CreateDbConditionalL();
+	iCleanup = CIRCacheCleanup::NewL(*this);
+	RemoveOtaInfoL();
+	IRLOG_DEBUG( "IRCacheMgmt::ConstructL - Exiting." );
+    }
+    
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CreateDbConditionalL(
+// Creates dbms conditionally(only if not yet created)
+// calls CreateDb()
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::CreateDbConditionalL()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CreateDbConditionalL - Entering." );
+	TInt err=KErrNone;
+	if(!BaflUtils::FileExists(iFsSession, iDatabaseFileName))
+		{
+		err=CreateDb();
+		if(KErrNone != err)
+			{
+			User::Leave(err);	
+			}
+		}
+	IRLOG_DEBUG( "IRCacheMgmt::CreateDbConditionalL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CreateDb()
+// Creates the tables
+// ---------------------------------------------------------------------------
+//
+TInt CIRCacheMgmt::CreateDb()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CreateDb - Entering." );
+	CloseDb();
+	TInt err=iCacheDb.Replace(iFsSession,iDatabaseFileName);
+	if((err!=0))
+		{
+		return err; //unable to create file	
+		}																		
+	TRAP(err,//trap start
+		CreateCacheTableL();
+		CreateCacheIndexL();
+		)//trap end
+		IRLOG_DEBUG( "IRCacheMgmt::CreateDb - Exiting." );
+	return err;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::OpenCacheDb()
+// Opens both the databases 
+// ---------------------------------------------------------------------------
+//
+TInt CIRCacheMgmt::OpenCacheDb()
+	{
+	IRLOG_DEBUG( "CIRCacheMgmt::OpenCacheDb - Entering" );
+	CloseDb();
+	TInt error = KErrNone;
+	if(!BaflUtils::FileExists(iFsSession, iDatabaseFileName))
+	    {
+	    //if file doesn't exist function leaves with error code
+	    //KErrNotFound
+	     return KErrNotFound;
+	    }
+	//try and open the db	
+	error = iCacheDb.Open(iFsSession,iDatabaseFileName);
+	//return if error
+	if(KErrNone != error )
+		{
+		return error;
+		}
+	//check if damaged
+	if( iCacheDb.IsDamaged() )
+		{
+		//if data base is damaged then 
+		//try to recover
+		error = iCacheDb.Recover();
+		return error;
+		}
+				
+	iOpen = ETrue;
+	
+	IRLOG_DEBUG( "CIRCacheMgmt::OpenCacheDb - Exiting." );
+	return KErrNone;
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CloseDb()
+// Closes the database 
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::CloseDb()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CloseDb - Entering." );
+	iCacheDb.Close();
+	iOpen = EFalse;
+	IRLOG_DEBUG( "IRCacheMgmt::CloseDb - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CheckCache()
+// API Exposed to Isds Client to check and get the cached items. 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCacheMgmt::CheckCacheL(TInt aType,const TDesC& aName,
+					TBool aForceGet,TInt& aReturn)   
+	{
+	IRLOG_DEBUG( "CIRCacheMgmt::CheckCacheL - Entering" );
+	//opens the db if not open already
+	if(!iOpen)
+		{
+		TInt error = OpenCacheDb();
+		if(KErrNone != error)
+			{
+			aReturn = ENotCached;
+			return;	
+			}
+		}
+
+    //calls the function FetchCacheIfAvailable() passing the appropriate type and id
+    
+	switch(aType)
+	{
+	case ECatagory:	
+	case EChannels:
+	case EPresets:
+	case EOtaInfo:
+	case ELogo:
+		{
+		TRAP_IGNORE(FetchCacheIfAvailableL(aType,aName,aForceGet,aReturn))
+		break;	
+		}
+		
+	default:
+		{
+	    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+	        {
+	        iCacheObservers[i]->CacheFailed();
+	        }
+		aReturn = ENotCached;
+		break;	
+		}
+	}
+	CloseDb();
+	IRLOG_DEBUG( "CIRCacheMgmt::CheckCacheL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::FetchCacheIfAvailable()
+// Fetches the cache if available 
+// ---------------------------------------------------------------------------
+//
+//generic function to check the validity of the cache	
+void CIRCacheMgmt::FetchCacheIfAvailableL(TInt aType,const TDesC& aId,
+	TBool aForceGet,TInt& aReturnVal)
+	{
+	//Algo****
+	//1.check the cache table for a request type
+	//2.if the query returns a row,check for validity
+	//3.if invalid(stale) do a conditional get
+	//4.if valid use cache
+	IRLOG_DEBUG( "CIRCacheMgmt::FetchCacheIfAvailableL - Entering" );
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = aType AND KDataIdCol=aId
+	_LIT( query, "SELECT * FROM %S WHERE %S = %d AND %S = '%S'" );
+	
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KCacheTable().Length() +
+								    KDataTypeCol().Length() + KDataIdCol().Length() +
+								    KDefaultRealWidth + aId.Length());
+								    
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,aType,&KDataIdCol,&aId);
+	
+	IRLOG_DEBUG2( "CIRCacheMgmt::FetchCacheIfAvailableL - Going to evaluate SQL query: %S", sqlQuery );
+	RDbView cacheView;
+	User::LeaveIfError(cacheView.Prepare(iCacheDb,*sqlQuery));
+	CleanupStack::PopAndDestroy(sqlQuery);
+	CleanupClosePushL(cacheView);
+    User::LeaveIfError( cacheView.EvaluateAll() );
+
+    //if no row match the query there is no cahche available for that particular 
+    //request
+    if(cacheView.IsEmptyL())
+	    {
+	    //Return ENotCached
+	    aReturnVal = ENotCached;
+	    }
+	else
+		{
+		cacheView.FirstL();
+		cacheView.GetL();
+		CDbColSet* columns = cacheView.ColSetL();
+		TTime creationTime = cacheView.ColTime(columns->ColNo( KTimeCreation));
+		TInt cacheValidityTime = cacheView.ColInt(columns->ColNo( KTrustPeriodCol));
+		TInt countItems=cacheView.ColInt(columns->ColNo( KItemCount));
+		IRLOG_DEBUG( "CIRCacheMgmt::FetchCacheIfAvailableL - can check validity." );
+		//check if cache is valid
+		//get it any way if it is "forcedget"
+		if( aForceGet || CheckValidity(creationTime,cacheValidityTime))
+			{
+			//Fetch the cached data
+			//FetchCachedData(type,count,&view )
+			TRAPD(err,FetchCachedDataL(aType,countItems,cacheView));
+			if(err!=KErrNone)
+				{
+				//something goes wrong ,return not cached and fetch new data
+				aReturnVal = ENotCached;
+				}
+			else
+				{
+				//cache usable
+				aReturnVal = ECacheUseable;
+				}
+			}
+		else
+			{
+			iLastModified = cacheView.ColTime(columns->ColNo( KLastModifiedCol));
+			iETag = cacheView.ColDes8(columns->ColNo( KETagHeader ));			
+			aReturnVal = ECacheNotValid;
+			cacheView.Close();
+		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+		        {
+		        iCacheObservers[i]->CacheInvalid();
+		        }
+			}
+	    delete columns;	
+		}
+	CleanupStack::PopAndDestroy(&cacheView);
+	IRLOG_DEBUG( "CIRCacheMgmt::FetchCacheIfAvailableL - Exiting." );
+	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::FetchCachedDataL()
+// fetches the cached data from the table into the cached structures
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::FetchCachedDataL(TInt aType,TInt aCountItems,RDbView& aCacheView)
+	{
+	//Algo****
+	//fetch the data and internalize into appropriate structure
+
+	IRLOG_DEBUG( "CIRCacheMgmt::FetchCachedDataL - Entering" );
+    CDbColSet* columns = aCacheView.ColSetL();
+    TInt columnNo = columns->ColNo( KCachedDataCol );
+    delete columns;
+	switch(aType)
+		{
+		case ECatagory:
+			{
+			//Internalize the category items into the CIRBrowseCatagoryItems array
+	        RDbColReadStream instream;
+	        instream.OpenLC( aCacheView, columnNo );
+			CIRBrowseCatagoryItems* ptr;
+			if (iPtrCategory)
+				{
+				iPtrCategory->ResetAndDestroy();
+				}
+			for(TInt iter=0;iter<aCountItems;iter++)
+				{
+				ptr=CIRBrowseCatagoryItems::NewL();
+				CleanupStack::PushL(ptr);
+				instream>>*ptr;
+			    if (iPtrCategory)
+				    {				
+				    iPtrCategory->AppendL(ptr);
+				    }
+				CleanupStack::Pop(ptr);
+				}
+	        CleanupStack::PopAndDestroy( &instream );
+	        //update the last accessed time
+	        UpdateLastAccessedTimeL(aCacheView);
+	        aCacheView.Close();
+		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+		        {
+		        iCacheObservers[i]->CachedStructureL(ECatagory);
+		        }
+	        break;
+			}
+		case EChannels:
+			{
+			//Internalize the channel items into the CIRBrowseChannelItems array
+	        RDbColReadStream instream;
+	        instream.OpenLC( aCacheView, columnNo );
+	        if (iPtrChannel)
+				{
+				iPtrChannel->ResetAndDestroy();
+				}
+			CIRBrowseChannelItems *ptr;
+			for(TInt iter=0;iter<aCountItems;iter++)
+				{
+				ptr = CIRBrowseChannelItems::NewL();
+				CleanupStack::PushL(ptr);
+				instream>>*ptr;
+	            if (iPtrChannel)
+				    {				
+        		    iPtrChannel->AppendL(ptr);
+	        		}
+				CleanupStack::Pop(ptr);
+				}
+	        CleanupStack::PopAndDestroy( &instream );
+	        //update the last accessed time
+	        UpdateLastAccessedTimeL(aCacheView);
+	        aCacheView.Close();
+		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+		        {
+		        iCacheObservers[i]->CachedStructureL(EChannels);
+		        }
+	        break;
+			}
+		case EPresets:
+			{
+			//Internalize the preset  into the CIRIsdsPreset object
+	        RDbColReadStream instream;
+	        instream.OpenLC( aCacheView, columnNo );
+	        if(iPtrPreset)
+		        {
+		        iPtrPreset->ResetAndDestroy();
+		        }
+		    CIRIsdsPreset *ptr;
+		    for(TInt iter=0;iter<aCountItems;iter++)
+		    	{
+		    	ptr = CIRIsdsPreset::NewL();
+		    	CleanupStack::PushL(ptr);
+		    	instream>>*ptr;
+	            if(iPtrPreset)
+		            {		    	
+		    	    iPtrPreset->AppendL(ptr);
+		            }
+		    	CleanupStack::Pop(ptr);
+		        }
+	        CleanupStack::PopAndDestroy( &instream );
+	        //update the last accessed time
+	        UpdateLastAccessedTimeL(aCacheView);
+	        aCacheView.Close();
+		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+		        {
+		        iCacheObservers[i]->CachedStructureL(EPresets);
+		        }
+	        break;
+			}
+		case EOtaInfo:
+			{
+			//Internalize the ota info into the CIROTAUpdate object
+	        RDbColReadStream instream;
+	        instream.OpenLC( aCacheView, columnNo );
+	        if(iOTA)
+		        {
+		        delete iOTA;
+		        iOTA = NULL;
+		        iOTA = CIROTAUpdate::NewL();
+		        instream>>*iOTA;
+		        }
+		  
+	        CleanupStack::PopAndDestroy( &instream );
+	        //update the last accessed time
+	        UpdateLastAccessedTimeL(aCacheView);
+	        aCacheView.Close();
+		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+		        {
+		        iCacheObservers[i]->CachedStructureL(EOtaInfo);
+		        }
+	        break;
+			}
+		case ELogo:
+			{
+			//get the logo data from the cache
+			TInt logoSize = aCacheView.ColSize(columnNo);
+			iLogoData.Close();
+			iLogoData.Zero();
+			iLogoData.Create(logoSize);
+			
+			RDbColReadStream instream;
+			instream.OpenLC( aCacheView, columnNo );
+			instream.ReadL(iLogoData,aCacheView.ColLength(columnNo));
+			CleanupStack::PopAndDestroy( &instream );
+			//update the last accessed time
+	        UpdateLastAccessedTimeL(aCacheView);
+			aCacheView.Close();
+		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
+		        {
+		        iCacheObservers[i]->CachedStructureL(ELogo);
+		        }
+	        break;
+			}
+		default:
+			{
+	        aCacheView.Close();
+			}
+		}
+	IRLOG_DEBUG( "CIRCacheMgmt::FetchCachedDataL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+//updates the last accessed field to aid in deletion of old unused data
+//
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::UpdateLastAccessedTimeL(RDbView &aCacheView)
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriod - Entering." );
+	//update the last accessed col
+	CDbColSet* columns = aCacheView.ColSetL();
+    TInt updateColNo = columns->ColNo( KLastAccessedCol );
+    delete columns;
+    TTime currentTime;
+	currentTime.UniversalTime();
+    //update the current time value
+	aCacheView.GetL();
+	aCacheView.UpdateL();
+	aCacheView.SetColL(updateColNo,currentTime);
+	aCacheView.PutL();
+	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriod - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CheckValidity()
+// Checks the freshness of the cache
+// ---------------------------------------------------------------------------
+//
+TBool CIRCacheMgmt::CheckValidity(const TTime& aCreateTime,TInt aTrustPeriod) const
+	{
+	//Algo****
+	//1.get the last creation time from the table for the request
+	//2.calculate creation-time + trust-period < current-time *
+	//3.if true the cache is valid
+	//4.else do conditional-get
+	IRLOG_DEBUG( "CIRCacheMgmt::CheckValidity - Entering" );
+	TTimeIntervalSeconds trustPeriod(aTrustPeriod);
+	TTimeIntervalSeconds diff;
+	TTime currentDeviceTime;
+	currentDeviceTime.UniversalTime();
+	currentDeviceTime.SecondsFrom(aCreateTime,diff);
+	//Has the cache expired
+		if(diff<trustPeriod)
+			{
+			IRLOG_DEBUG( "CIRCacheMgmt::CheckValidity - Exiting (1)." );
+			return  ETrue;
+			}
+		//Else return false
+		else
+			{
+			IRLOG_DEBUG( "CIRCacheMgmt::CheckValidity - Exiting (2)." );
+			return	EFalse;	
+			}
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CacheCategoryItemsL()
+// Caches the category array of data.By externalizing it into a file.
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRCacheMgmt::CacheCategoryItemsL(
+					CArrayPtrFlat<CIRBrowseCatagoryItems>& aPtrCategory,
+					const TDesC& aName, const CIRHttpResponseData& aResponseHeaders)
+	{
+	//Algo****
+	//1.check if similar request is cached
+	//2.delete if similar request is already present
+	//3.prepare a view for insertion
+	//4.push in the requested data as serialized data
+	
+	IRLOG_DEBUG( "IRCacheMgmt::CacheCategoryItemsL - Entering" );
+	TInt error = OpenCacheDb();
+	if(KErrNone != error)
+		{
+		//no problems if this function returns here.
+		//normal flow won't get affected.
+		//only a particular request wont get cached
+		return;	
+		}
+	
+	//clear similar data from the cache table before updating it with fresh data
+	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
+	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDataIdCol().Length() +
+									KDefaultRealWidth + aName.Length());
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,ECatagory,&KDataIdCol,&aName);
+	iCacheDb.Begin();
+	//deletes a similar record if it existed.
+	//no problem if it did not exist
+	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
+	CleanupStack::PopAndDestroy(sqlQuery);
+	iCacheDb.Commit();
+	
+	//get the cached data view for preset column to update with fresh data.
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
+	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
+	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDefaultRealWidth);
+	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,ECatagory);
+	
+	RDbView cacheTableView;
+	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
+	CleanupStack::PopAndDestroy(sqlQuery1);
+	CleanupClosePushL(cacheTableView);
+	
+	User::LeaveIfError(cacheTableView.EvaluateAll());
+
+	//prepare insertion values
+	//will go into last accessed aswell as the creation time fields
+	TTime currentTime;
+	currentTime.UniversalTime();
+	TInt countItems=aPtrCategory.Count();
+	TInt maxAge;
+	if(aResponseHeaders.iMaxAge.Length() == 0)
+		{
+		maxAge=iTrustPeriod.Int();
+		}
+	else
+		{
+		TLex8 conv(aResponseHeaders.iMaxAge);
+		conv.Val(maxAge);	
+		maxAge = maxAge * KDefaultInterval;
+		}
+    CDbColSet* columns = cacheTableView.ColSetL();
+    CleanupStack::PushL(columns);
+	//write stream
+	RDbColWriteStream writeStream;
+	//start insertion into the view
+	//insert a new row
+	cacheTableView.InsertL();
+	//set values
+	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), ECatagory);
+	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
+	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
+	cacheTableView.SetColL(columns->ColNo(KItemCount), countItems);
+	//to be set only if available
+	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),aResponseHeaders.iLastModified);
+	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
+	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
+	//open stream
+	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
+	for(TInt iter=0;iter<countItems;iter++)
+		{
+		aPtrCategory[iter]->ExternalizeL(writeStream);
+		}	
+	writeStream.CommitL();
+	CleanupStack::PopAndDestroy(&writeStream);
+	cacheTableView.PutL();
+	CleanupStack::PopAndDestroy(columns);
+	CleanupStack::PopAndDestroy(&cacheTableView);
+	CloseDb();
+	IRLOG_DEBUG( "IRCacheMgmt::CacheCategoryItemsL - Exiting." );
+	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CacheChannelItemsL()
+// Caches the channel objects array of data.By externalizing it into a file..
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRCacheMgmt::CacheChannelItemsL(CArrayPtrFlat<CIRBrowseChannelItems>& aPtrChannel,
+											   const TDesC& aName,const CIRHttpResponseData& aResponseHeaders)
+	{
+	//Algo****
+	//1.check if similar request is cached
+	//2.delete if similar request is already present
+	//3.prepare a view for insertion
+	//4.push in the cached data request as serialized data
+	IRLOG_DEBUG( "CIRCacheMgmt::CacheChannelItemsL - Entering" );
+
+	TInt error = OpenCacheDb();
+	if(KErrNone != error)
+		{
+		//no problems if this function returns here.
+		//normal flow won't get affected.
+		//only a particular request wont get cached
+		return;	
+		}
+	
+	//convert the id information of descriptor to int value for comparision
+	//clear data from the cache table before updating it with fresh data
+	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
+	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDataIdCol().Length() +
+									KDefaultRealWidth + aName.Length());
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EChannels,&KDataIdCol,&aName);
+	iCacheDb.Begin();
+	//deletes a similar record if it existed.
+	//no problem if it did not exist
+	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
+	CleanupStack::PopAndDestroy(sqlQuery);
+	iCacheDb.Commit();
+	
+	//get the cached data view for preset column to update with fresh data.
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
+	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
+	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDefaultRealWidth);
+	RDbView cacheTableView;
+	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,EChannels);	
+	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
+	CleanupStack::PopAndDestroy(sqlQuery1);
+	CleanupClosePushL(cacheTableView);
+	
+	User::LeaveIfError(cacheTableView.EvaluateAll());
+
+	//prepare insertion values
+	//will go into last accessed aswell as the creation time fields
+	TTime currentTime;
+	currentTime.UniversalTime();
+	TInt countItems=aPtrChannel.Count();
+	TInt maxAge;
+	if(aResponseHeaders.iMaxAge.Length() == 0)
+		{
+		maxAge=iTrustPeriod.Int();
+		}
+	else
+		{
+		TLex8 conv(aResponseHeaders.iMaxAge);
+		conv.Val(maxAge);	
+		maxAge = maxAge * KDefaultInterval;
+		}
+	TBuf<KHttpDateLength>lastModified;
+
+    CDbColSet* columns = cacheTableView.ColSetL();
+    CleanupStack::PushL(columns);
+	//write stream
+	RDbColWriteStream writeStream;
+	
+	//start insertion into the view
+	//insert a new row
+	cacheTableView.InsertL();
+	//set values
+	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), EChannels);
+	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
+	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
+	cacheTableView.SetColL(columns->ColNo(KItemCount), countItems);
+	//to be set only if available
+	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),aResponseHeaders.iLastModified);
+	//
+	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
+	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
+	//open stream
+	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
+	for(TInt iter=0;iter<countItems;iter++)
+		{
+		aPtrChannel[iter]->ExternalizeL(writeStream);
+		}	
+	writeStream.CommitL();
+	CleanupStack::PopAndDestroy(&writeStream);
+	cacheTableView.PutL();
+	CleanupStack::PopAndDestroy(columns);
+	CleanupStack::PopAndDestroy(&cacheTableView);
+	CloseDb();
+	IRLOG_DEBUG( "CIRCacheMgmt::CacheChannelItemsL - Exiting." );
+	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CachePresetItemL()
+// Caches the preset object .By externalizing it into a file.
+//multiple presets can be cached at one time
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRCacheMgmt::CachePresetItemL(CArrayPtrFlat<CIRIsdsPreset>& aPtrPresets,
+				const TDesC& aName,const CIRHttpResponseData& aResponseHeaders)
+	{
+	//Algo****
+	//1.check if similar request is cached
+	//2.delete if similar request is already present
+	//3.prepare a view for insertion
+	//4.push in the cached data request as serialized data
+	IRLOG_DEBUG( "CIRCacheMgmt::CachePresetItemL - Entering" );
+
+	TInt error = OpenCacheDb();
+	if(KErrNone != error)
+		{
+		//no problems if this function returns here.
+		//normal flow won't get affected.
+		//only a particular request wont get cached
+		return;	
+		}
+	//convert the id information of descriptor to int value for comparision
+	//clear data from the cache table before updating it with fresh data
+	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
+	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDataIdCol().Length() +
+									KDefaultRealWidth + aName.Length());
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EPresets,&KDataIdCol,&aName);
+	iCacheDb.Begin();
+	//deletes a similar record if it existed.
+	//no problem if it did not exist
+	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
+	CleanupStack::PopAndDestroy(sqlQuery);
+	iCacheDb.Commit();
+	
+	//get the cached data view for preset column to update with fresh data.
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
+	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
+	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDefaultRealWidth);
+	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,EPresets);	
+	RDbView cacheTableView;
+	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
+	CleanupStack::PopAndDestroy(sqlQuery1);
+	CleanupClosePushL(cacheTableView);
+	
+	User::LeaveIfError(cacheTableView.EvaluateAll());
+
+	//prepare insertion values
+	//will go into last accessed aswell as the creation time fields
+	TTime currentTime;
+	currentTime.UniversalTime();
+	
+	TInt maxAge;
+	if(aResponseHeaders.iMaxAge.Length()== 0)
+		{
+		maxAge=iTrustPeriod.Int();
+		}
+	else
+		{
+		TLex8 conv(aResponseHeaders.iMaxAge);
+		conv.Val(maxAge);	
+		maxAge = maxAge * KDefaultInterval;
+		}
+	TBuf<KHttpDateLength>lastModified;
+	//default time set to 24hrs
+	//use iTrustPeriod
+	//type set to EPresets
+	//id set to dataId
+	//last modified time kept null
+	//item count set to 1
+    CDbColSet* columns = cacheTableView.ColSetL();
+    CleanupStack::PushL(columns);
+	//write stream
+	RDbColWriteStream writeStream;
+	TInt countItems;
+	countItems = aPtrPresets.Count();
+	//start insertion into the view
+	//insert a new row
+	cacheTableView.InsertL();
+	//set values
+	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), EPresets);
+	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
+	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
+	cacheTableView.SetColL(columns->ColNo(KItemCount), countItems);
+	//to be set only if available
+	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),
+		aResponseHeaders.iLastModified);
+	//
+	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
+	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
+	//open stream
+	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
+	for(TInt iter=0;iter<countItems;iter++)
+		{
+		aPtrPresets[iter]->ExternalizeL(writeStream);
+		}
+	writeStream.CommitL();
+	CleanupStack::PopAndDestroy(&writeStream);
+	cacheTableView.PutL();
+		
+	CleanupStack::PopAndDestroy(columns);
+	CleanupStack::PopAndDestroy(&cacheTableView);
+	CloseDb();
+	IRLOG_DEBUG( "CIRCacheMgmt::CachePresetItemL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CacheOtaInfoL()
+// Caches the OTA information  .By externalizing it into a db.
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRCacheMgmt::CacheOtaInfoL(const CIROTAUpdate& aOta,const TDesC& aName,
+										const CIRHttpResponseData& aResponseHeaders)
+	{
+	//Algo****
+	//1.check if similar request is cached
+	//2.delete if similar request is already present
+	//3.prepare a view for insertion
+	//4.push in the cached data request as serialized data
+	IRLOG_DEBUG( "CIRCacheMgmt::CacheOtaInfoL - Entering" );
+
+	TInt error = OpenCacheDb();
+	if(KErrNone != error)
+		{
+		//no problems if this function returns here.
+		//normal flow won't get affected.
+		//only a particular request wont get cached
+		return;	
+		}
+	//convert the id information of descriptor to int value for comparision
+	//clear data from the cache table before updating it with fresh data
+	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
+	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDataIdCol().Length() +
+									KDefaultRealWidth + aName.Length());
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EOtaInfo,&KDataIdCol,&aName);
+	User::LeaveIfError(iCacheDb.Begin());
+	//deletes a similar record if it existed.
+	//no problem if it did not exist
+	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
+	CleanupStack::PopAndDestroy(sqlQuery);
+	iCacheDb.Commit();
+	
+	//get the cached data view for preset column to update with fresh data.
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
+	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
+	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDefaultRealWidth);
+	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,EOtaInfo);	
+	RDbView cacheTableView;
+	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
+	CleanupStack::PopAndDestroy(sqlQuery1);
+	CleanupClosePushL(cacheTableView);
+	
+	User::LeaveIfError(cacheTableView.EvaluateAll());
+
+	//prepare insertion values
+	//will go into last accessed aswell as the creation time fields
+	TTime currentTime;
+	currentTime.UniversalTime();
+	
+	TInt maxAge;
+	if(aResponseHeaders.iMaxAge.Length()== 0)
+		{
+		maxAge=iTrustPeriod.Int();
+		}
+	else
+		{
+		TLex8 conv(aResponseHeaders.iMaxAge);
+		conv.Val(maxAge);	
+		maxAge = maxAge * KDefaultInterval;
+		}
+	TBuf<KHttpDateLength>lastModified;
+	//default time set to 24hrs
+	//use iTrustPeriod
+	//type set to EPresets
+	//id set to dataId
+	//last modified time kept null
+	//item count set to 1
+    CDbColSet* columns = cacheTableView.ColSetL();
+    CleanupStack::PushL(columns);
+	//write stream
+	RDbColWriteStream writeStream;
+	//start insertion into the view
+	//insert a new row
+	cacheTableView.InsertL();
+	//set values
+	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), EOtaInfo);
+	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
+	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
+	cacheTableView.SetColL(columns->ColNo(KItemCount), 1);
+	//to be set only if available
+	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),
+		aResponseHeaders.iLastModified);
+	//
+	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
+	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
+	//open stream
+	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
+	aOta.ExternalizeL(writeStream);
+	writeStream.CommitL();
+	CleanupStack::PopAndDestroy(&writeStream);
+	cacheTableView.PutL();
+		
+	CleanupStack::PopAndDestroy(columns);
+	CleanupStack::PopAndDestroy(&cacheTableView);
+	CloseDb();
+	IRLOG_DEBUG( "CIRCacheMgmt::CacheOtaInfoL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CacheLogoL()
+// Caches the logo data  .By externalizing it into a db.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCacheMgmt::CacheLogoL(const TDesC8& aData, const TDesC& aUrl,
+	                         const CIRHttpResponseData& aResponseHeaders)
+	{
+	//Algo****
+	//1.check if similar request is cached
+	//2.delete if similar request is already present
+	//3.prepare a view for insertion
+	//4.push in the cached data request as serialized data
+	IRLOG_DEBUG( "CIRCacheMgmt::CacheLogoL - Entering" );
+	
+	
+	TInt error = OpenCacheDb();
+	if(KErrNone != error)
+		{
+		//no problems if this function returns here.
+		//normal flow won't get affected.
+		//only a particular request wont get cached
+		return;	
+		}
+	//convert the id information of descriptor to int value for comparision
+	//clear data from the cache table before updating it with fresh data
+	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
+	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDataIdCol().Length() +
+									KDefaultRealWidth + aUrl.Length());
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,ELogo,&KDataIdCol,&aUrl);
+	iCacheDb.Begin();
+	//deletes a similar record if it existed.
+	//no problem if it did not exist
+	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
+	CleanupStack::PopAndDestroy(sqlQuery);
+	iCacheDb.Commit();	
+	
+	//get the cached data view for preset column to update with fresh data.
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
+	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
+	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
+									KCacheTable().Length() + KDefaultRealWidth);
+	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,ELogo);	
+	RDbView cacheTableView;
+	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
+	CleanupStack::PopAndDestroy(sqlQuery1);
+	CleanupClosePushL(cacheTableView);
+	
+	User::LeaveIfError(cacheTableView.EvaluateAll());		
+	
+	//prepare insertion values
+	//will go into last accessed aswell as the creation time fields
+	TTime currentTime;
+	currentTime.UniversalTime();
+	
+	TInt maxAge;
+	if(aResponseHeaders.iMaxAge.Length()== 0)
+		{
+		maxAge=iTrustPeriod.Int();
+		}
+	else
+		{
+		TLex8 conv(aResponseHeaders.iMaxAge);
+		conv.Val(maxAge);	
+		maxAge = maxAge * KDefaultInterval;
+		}
+	TBuf<KHttpDateLength>lastModified;
+	//default time set to 24hrs
+	//use iTrustPeriod
+	//type set to ELogo
+	//id set to dataId
+	//last modified time kept null
+	//item count set to 1
+    CDbColSet* columns = cacheTableView.ColSetL();
+    CleanupStack::PushL(columns);
+	//write stream
+	//start insertion into the view
+	//insert a new row
+	cacheTableView.InsertL();
+	//set values
+	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), ELogo);
+	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aUrl);
+	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
+	cacheTableView.SetColL(columns->ColNo(KItemCount), 1);
+	//to be set only if available
+	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),
+		aResponseHeaders.iLastModified);
+	//
+	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
+	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
+	cacheTableView.SetColL(columns->ColNo(KCachedDataCol), aData);
+	
+	cacheTableView.SetColL(columns->ColNo(KETagHeader), 
+	    aResponseHeaders.iETag);
+	
+	cacheTableView.PutL();
+
+		
+	CleanupStack::PopAndDestroy(columns);
+	CleanupStack::PopAndDestroy(&cacheTableView);
+	CloseDb();
+	IRLOG_DEBUG( "CIRCacheMgmt::CacheLogoL - Exiting." );					
+			
+	}
+	
+	
+	
+	
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CreateCacheTableL()
+// creates the cache table
+// ---------------------------------------------------------------------------
+//
+//CacheTable
+// -----------------------------------------------------------------------------------------------------
+//| RowIndex|DataType|DataId|TrustPeriod|LastModified  |LastAccessed|Created|ItemCount|CachedData|
+//------------------------------------------------------------------------------------------------
+//| auto    |TInt    |DesC  |TInt       |TDesC/DateTime|TTime       |Time   |TInt     | Streamed |
+//|increment|0,1,2,NotNull|NotNull|  NotNull  |              |            |       |         | Data     |
+//------------------------------------------------------------------------------------------------------
+void CIRCacheMgmt::CreateCacheTableL()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CreateCacheTableL - Entering." );
+	//the row index column which autoincrements
+	TDbCol rowIndexCol(KRowIndexCol, EDbColInt32);   
+    rowIndexCol.iAttributes = TDbCol::EAutoIncrement;
+    
+    //the datatype column,to identify between 	ECatagory = 0,EChannels=1,EPresets=2
+    TDbCol dataTypeCol(KDataTypeCol, EDbColInt32);
+    dataTypeCol.iAttributes = TDbCol::ENotNull;
+     
+    //the dataID column,to uniquely identify the cached data
+    TDbCol dataId(KDataIdCol, EDbColLongText16);
+    dataId.iAttributes = TDbCol::ENotNull; 
+    
+    //the trust period column to calculate cache validity
+    TDbCol trustPeriodCol(KTrustPeriodCol, EDbColInt32);
+    
+    //the lastmodified column to fetch data conditionally
+    TDbCol lastModifiedCol(KLastModifiedCol, EDbColDateTime);
+
+    
+    //the last accessed column used for table clean-up
+    TDbCol creationTimeCol(KTimeCreation, EDbColDateTime);
+	    
+    //the time of creation saved to calculate the cache validity
+    TDbCol lastAccessedCol(KLastAccessedCol, EDbColDateTime);
+    
+	//the number of items in the data field
+    TDbCol itemCountCol(KItemCount, EDbColInt32);
+    
+    //the data column to store cached data
+    //The column stores a potentially large amount of Unicode text data.
+    TDbCol cachedDataCol(KCachedDataCol, EDbColLongText8);
+    
+    //the ETag header received along with the logo data
+    TDbCol etagHeader(KETagHeader, EDbColText8);
+    
+    //colset
+    CDbColSet* cacheTablerColSet = CDbColSet::NewLC();
+    //populate colset
+	 cacheTablerColSet->AddL(rowIndexCol);
+	 cacheTablerColSet->AddL(dataTypeCol);
+	 cacheTablerColSet->AddL(dataId);
+	 cacheTablerColSet->AddL(trustPeriodCol);
+	 cacheTablerColSet->AddL(lastModifiedCol);
+	 cacheTablerColSet->AddL(creationTimeCol);
+	 cacheTablerColSet->AddL(lastAccessedCol);
+	 cacheTablerColSet->AddL(itemCountCol);
+	 cacheTablerColSet->AddL(cachedDataCol);
+	 cacheTablerColSet->AddL(etagHeader);
+
+    // Create the CacheTable table
+    User::LeaveIfError(iCacheDb.CreateTable(KCacheTable, *cacheTablerColSet));
+    
+    CleanupStack::PopAndDestroy(cacheTablerColSet);	
+    IRLOG_DEBUG( "IRCacheMgmt::CreateCacheTableL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : CIRCacheMgmt::CreateCacheIndexL()
+// creates the indices for cache table
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::CreateCacheIndexL()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CreateCacheIndexL - Entering." );
+	TDbKeyCol rowIndexCol(KRowIndexCol);
+	TDbKeyCol dataTypeCol(KDataTypeCol);
+	TDbKeyCol dataIdCol(KDataIdCol,KDataIdIndexSize);
+	TDbKeyCol timeCreationCol(KTimeCreation);
+	TDbKeyCol lastAccessedCol(KLastAccessedCol);
+	 
+	CDbKey* index;
+	//index on the auto increment row id
+	index = CDbKey::NewLC();   
+	index->AddL(rowIndexCol);
+	User::LeaveIfError(iCacheDb.CreateIndex(KRowIndexColIndex, KCacheTable,
+		 *index));
+	CleanupStack::PopAndDestroy(index);
+	
+	//index on the datatype column
+	index = CDbKey::NewLC();   
+	index->AddL(dataTypeCol);
+	User::LeaveIfError(iCacheDb.CreateIndex(KDataTypeColIndex, KCacheTable, 
+		*index));
+	CleanupStack::PopAndDestroy(index);
+	
+	//index on the data id column
+	index = CDbKey::NewLC();   
+	index->AddL(dataIdCol);
+	User::LeaveIfError(iCacheDb.CreateIndex(KDataIdColIndex, KCacheTable, 
+		*index));
+	CleanupStack::PopAndDestroy(index);
+	
+	//index on the time of record creation column
+	index = CDbKey::NewLC();   
+	index->AddL(timeCreationCol);
+	User::LeaveIfError(iCacheDb.CreateIndex(KTimeCreationIndex, KCacheTable, 
+		*index));
+	CleanupStack::PopAndDestroy(index);
+	
+	//index on the last accessed column
+	index = CDbKey::NewLC();   
+	index->AddL(lastAccessedCol);
+	User::LeaveIfError(iCacheDb.CreateIndex(KLastAccessedColIndex, KCacheTable,
+		 *index));
+	CleanupStack::PopAndDestroy(index);
+	IRLOG_DEBUG( "IRCacheMgmt::CreateCacheIndexL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+//void CIRCacheMgmt::UpdateTrustPeriod()
+//updates the trust period for a not-modified responce
+// ---------------------------------------------------------------------------
+
+//
+EXPORT_C void CIRCacheMgmt::UpdateTrustPeriodL(	TInt aType, const TDesC& aName,
+	CIRHttpResponseData& aResponseHeaders)
+	{	
+	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriodL - Entering" );
+	TInt error = OpenCacheDb();
+	if(KErrNone != error)
+		{
+	    IRLOG_ERROR2( "IRCacheMgmt::UpdateTrustPeriodL - Error while opening cache DB (%d).", error );			
+		//no problems if this function returns here.
+		//normal flow won't get affected.
+		//only a particular request wont get cached
+		return;	
+		}
+
+	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
+	_LIT(query,"SELECT * FROM %S WHERE %S = %d AND %S = '%S'");
+	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KCacheTable().Length() +
+		 KDataIdCol().Length() + KDataTypeCol().Length() + aName.Length()+
+		 KDefaultRealWidth );
+		 
+	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,aType,&KDataIdCol,&aName);
+	//create view
+	RDbView cacheTableView;
+	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery));
+	CleanupStack::PopAndDestroy(sqlQuery);
+	CleanupClosePushL(cacheTableView);
+	
+	User::LeaveIfError(cacheTableView.EvaluateAll());
+	
+	//prepare the update data
+	//will go into last accessed aswell as the creation time fields
+	TTime currentTime;
+	currentTime.UniversalTime();
+	//get the new trust period from the headers
+	TInt maxAge;
+	if(aResponseHeaders.iMaxAge.Length() == 0)
+		{
+		maxAge=iTrustPeriod.Int();
+		}
+	else
+		{
+		TLex8 conv(aResponseHeaders.iMaxAge);
+		conv.Val(maxAge);	
+		maxAge = maxAge * KDefaultInterval;
+		}
+    CDbColSet* columns = cacheTableView.ColSetL();
+    CleanupStack::PushL(columns);
+	cacheTableView.FirstL();
+	if(cacheTableView.AtRow())
+		{
+		cacheTableView.UpdateL();
+		//update values
+		cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
+		cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
+		cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
+		cacheTableView.PutL();
+		}
+
+	CleanupStack::PopAndDestroy(columns);
+	CleanupStack::PopAndDestroy(&cacheTableView);
+	CloseDb();
+	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriod - Exiting." );	
+	}
+	
+// ---------------------------------------------------------------------------
+//  Used to dcontrol the cache table size by compacting and clearing up unused items
+// ---------------------------------------------------------------------------
+//
+ void CIRCacheMgmt::CheckSizeL()
+ 	{
+ 	IRLOG_DEBUG( "IRCacheMgmt::CheckSizeL - Entering." );
+ 	OpenCacheDb();
+ 	RDbDatabase::TSize dbSize = iCacheDb.Size();
+ 	iCacheDbSize = dbSize.iSize;
+ 	TInt size = CacheSize();
+ 	if( size >= KCacheCriticalSizeLimit )
+ 		{
+ 		RemoveOldUnusedDataL();
+ 		OpenCacheDb();
+ 		iCacheDb.Compact();
+ 		//refresh the size information
+ 		dbSize = iCacheDb.Size();
+ 		iCacheDbSize = dbSize.iSize;
+ 		}
+	CloseDb();
+	IRLOG_DEBUG( "IRCacheMgmt::CheckSizeL - Exiting." );
+ 	}
+
+// ---------------------------------------------------------------------------
+// Used to control the cache table size by compacting and clearing up unused items
+// ---------------------------------------------------------------------------
+//
+void CIRCacheMgmt::RemoveOldUnusedDataL()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::RemoveOldUnusedDataL - Entering." );
+	OpenCacheDb();
+	RDbTable cacheTable;
+	//open the table in updatable mode
+	User::LeaveIfError(cacheTable.Open(iCacheDb, KCacheTable, cacheTable.EUpdatable));
+	CleanupClosePushL(cacheTable);
+	cacheTable.Reset();
+	//set index as the last accessed time
+	cacheTable.SetIndex(KLastAccessedCol);
+	//begin transaction
+	iCacheDb.Begin();
+	// no of rows deleted is one fourth of the total number of rows
+	TInt deleteRows = cacheTable.CountL()/KPercentRowsDeleted;
+	TInt inc = 0;
+	//delete incrementally
+	for(cacheTable.FirstL();((inc < deleteRows) && cacheTable.AtRow());inc++)
+		{
+		cacheTable.GetL();
+		cacheTable.DeleteL();
+		cacheTable.NextL();
+		}
+	//commit transaction
+	iCacheDb.Commit();
+	CleanupStack::PopAndDestroy(&cacheTable);
+	CloseDb();
+	IRLOG_DEBUG( "IRCacheMgmt::RemoveOldUnusedDataL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Used to get the cache table size
+// ---------------------------------------------------------------------------
+//
+TInt CIRCacheMgmt::CacheSize()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::CacheSize - Entering." );
+	OpenCacheDb();
+ 	RDbDatabase::TSize dbSize = iCacheDb.Size();
+ 	iCacheDbSize = dbSize.iSize;
+ 	CloseDb();
+ 	IRLOG_DEBUG( "IRCacheMgmt::CacheSize - Exiting." );
+	return iCacheDbSize;
+	}
+// ---------------------------------------------------------------------------
+//remove OTA info from cache if data is not valid any longer
+// ---------------------------------------------------------------------------
+EXPORT_C void CIRCacheMgmt::RemoveOtaInfoL()
+	{
+	IRLOG_DEBUG( "IRCacheMgmt::RemoveOtaInfoL - Entering." );
+	//check if the silence period param is set.
+	//if not set that means the cached ota info if present is not valid.
+	if(iSettings->GetSilencePeriodL() == 0)
+		{
+		TInt error = OpenCacheDb();
+		if(KErrNone != error)
+			{
+			//no problems if this function returns here.
+			//normal flow won't get affected.
+			//only a particular request wont get cached
+			return;	
+			}
+		//clear data from the cache table 
+		//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE 
+		_LIT(query,"DELETE FROM %S WHERE %S = %d");
+		HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
+										KCacheTable().Length() + KDataIdCol().Length());
+		sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EOtaInfo);
+		User::LeaveIfError(iCacheDb.Begin());
+		//no problem if it did not exist
+		iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
+		CleanupStack::PopAndDestroy(sqlQuery);
+		iCacheDb.Commit();
+        CloseDb();
+		}
+	IRLOG_DEBUG( "IRCacheMgmt::RemoveOtaInfoL - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// Adds a cache observer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCacheMgmt::AddObserverL( MIRCacheObserver* aObserver )
+    {
+    IRLOG_DEBUG( "IRCacheMgmt::AddObserverL - Entering." );
+    iCacheObservers.AppendL( aObserver );
+    IRLOG_DEBUG( "IRCacheMgmt::AddObserverL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Removes a cache observer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCacheMgmt::RemoveObserver( MIRCacheObserver* aObserver )
+    {
+    IRLOG_DEBUG( "IRCacheMgmt::RemoveObserver - Entering." );
+    TInt objectIndex = iCacheObservers.Find( aObserver );
+    
+    if ( objectIndex != KErrNotFound )
+        {
+        iCacheObservers.Remove( objectIndex );
+        }
+    IRLOG_DEBUG( "IRCacheMgmt::RemoveObserver - Exiting." );
+    }
+
+
+
+
Binary file internetradio2.0/cenrep/2000b499.txt has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/cenrep_keys.pm	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1755 @@
+#
+# 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:
+#
+###################################################
+###################################################
+# This module contains common helper functions for 
+# handling excel sheets from perl.
+# Version 0.9
+#    - now checking that Int and Real values are really 
+#      numbers
+#    - rfs, cust config and backup are must fields for variant row
+#    - All rows, which have "Comment:" in the uid name are ignored.
+###################################################
+###################################################
+package cenrep_keys;
+
+##########################################
+# Libraries used
+##########################################
+use strict;
+use Win32::OLE qw(in with);
+use Win32::OLE::Const 'Microsoft Excel';
+use Exporter ();     # Needed to make constants available to caller.
+use excel_support;    # opening/closing workbook, etc.. functions.
+
+##########################################
+# Defining all the "global" variables, that we are using.
+##########################################
+use vars qw(
+            @ISA
+            @EXPORT
+            );
+
+@ISA = qw(Exporter); # Inherit from Exporter module (import method needed).
+# Define all the functions defined by this module
+use subs qw(
+	    hasValue
+	    addHash
+	    readCol
+	    readCentrepKeyInfo
+	    checkCentrepKeyInfo
+	    checkCentrepKeySheetName
+	    );
+
+##########################################
+# Define the exports from this module that can be used
+# Outside
+##########################################
+@EXPORT = qw(
+	     &addHash
+	     &readCol
+             &readCentrepKeyInfo
+	     &checkCentrepKeyInfo
+	     &checkCentrepKeySheetName
+             );
+
+
+my $globalMaxColCount = 43;
+my $globalMaxEmptyRowCount = 10;
+
+#######################################
+# Checks that the cell exists and has some value
+#
+# Params: refToWorkSheet,row,column
+#
+# Return: 1 if the cell had some value
+#         0 if the cell did not have a value
+#######################################
+sub hasValue
+{
+    my $refToWorksheet = shift;
+    my $row = shift;
+    my $col = shift;
+
+    if($col < 1)
+    {
+	return 0;
+    }
+    if(defined($$refToWorksheet->Cells( $row, $col  )->{ 'Value' }))
+    {
+	return 1;
+    }
+    if(!(defined($$refToWorksheet->Cells( $row, $col  ))  ||$$refToWorksheet->Cells( $row, $col  )->{ 'Value' }))
+    {
+	print "$row $col\n";
+	print $$refToWorksheet->Name,"\n";
+    }
+    if($$refToWorksheet->Cells( $row, $col  )->{ 'Value' } !~ /^\s*$/)
+    {
+	return 1;
+    }
+
+    return 0;
+}
+
+#######################################
+# Reads a cell value from given worksheet and given place.
+# If the value is empty then initializes teh return value to the
+# given default value
+#
+# Params: refToWorkSheet,row,column,defValue
+#
+# Return: the read value
+#######################################
+sub readCol
+{
+    my $refToWorksheet = shift;
+    my $row = shift;
+    my $col = shift;
+    my $defValue = shift;
+
+    my $retVal = undef;
+    if($col > 0)
+    {
+	$retVal = $$refToWorksheet->Cells( $row, $col  )->{ 'Value' };
+    }
+    if(!defined($retVal) || $retVal =~ /^\s*$/)
+    {
+	$retVal = $defValue;
+    }
+    
+    return $retVal;
+}
+#######################################
+# If there is no given key defined in the given hash, then
+# adds a key to point to a new hash
+#
+# Params: newKey,refToHash,refToHash
+#
+# Return: ref to added hash, or existing hash
+#######################################
+sub addHash
+{
+    my $key = shift;
+    my $refToHash = shift;
+    
+    if(! defined( $$refToHash{$key}))
+    {
+	my %newHash;
+	$$refToHash{$key} = \%newHash;
+    }
+
+    return $$refToHash{$key};
+}
+
+###########################################################################
+#
+###########################################################################
+sub addCapability
+{
+    my $refToRList = shift;
+    my $refToWList = shift;
+    my $capaColumnValue = shift;
+    my $capaName = shift;
+
+    if($capaColumnValue =~ /R/i)
+    {
+	push(@$refToRList,$capaName);
+    }
+    if($capaColumnValue =~ /W/i)
+    {
+	push(@$refToWList,$capaName);
+    }
+}
+
+###########################################################################
+#
+###########################################################################
+sub readIndexes
+{
+   my $refToWorksheet = shift;
+
+   my @retList;
+    
+   push(@retList,getIndexByColName($refToWorksheet,"Uid Name",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Uid Value",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Range From",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Range To",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Key Name",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Key Int",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Shared Data Name",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Removed",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Platform Release",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Variant Name",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Def Value",$globalMaxColCount));
+   my $index = getIndexByColName($refToWorksheet,"Read Only",$globalMaxColCount);
+   if($index  < 0)
+   {
+       $index = getIndexByColName($refToWorksheet,"Read  Only",$globalMaxColCount);
+   }
+   push(@retList,$index);
+   push(@retList,getIndexByColName($refToWorksheet,"Key Type",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Backup",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"RFS",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Cust Config",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"None",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"All",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"All - TCB",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"NetworkServices",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"LocalServices",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"ReadUserData",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"WriteUserData",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Location",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"ReadDeviceData",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"WriteDeviceData",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"ProtServ",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"DRM",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"SwEvent",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"PowerMgmt",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"AllFiles",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"DiskAdmin",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"NetworkControl",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"MultiMediaDD",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"CommDD",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"TCB",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"TrustedUI",$globalMaxColCount));
+
+   push(@retList,getIndexByColName($refToWorksheet,"AlwaysPass",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"UserEnvironment",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"SurroundingsDD",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"SID Read",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"SID Write",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Range From",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Range To",$globalMaxColCount));
+   push(@retList,getIndexByColName($refToWorksheet,"Owner",$globalMaxColCount));
+
+
+   return @retList;
+}
+
+###########################################################################
+# Function that reads all columns from the central repository sheet to the 
+# given hash.
+# The format of the returned hash is:
+#  {
+#  <uid> => 
+#    {
+#    "name" => <uidName>
+#    "uid_specific"  
+#           = > {
+#               <variant>
+#                   => {
+#                      <release> 
+#                          => { 
+#                              "R" => (<capa1ForReading>,<capa2ForReading>)
+#                              "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#                              "RSid" => (<sidForReading>)
+#                              "WSid" => (<sidForWriting>)
+#                              "owner" => <ownerSid>
+#                              "rfs"  => <0/1>
+#                              "backup"  => <0/1>
+#                              }
+#                      }
+#               }
+#    "ranges" 
+#           => {
+#              <rangeFrom> 
+#                => {                  
+#                   "common" => (   # == defined in range row
+#                                "removed" => <release> [optional, only if specified]
+#                                }
+#                   "to" => {
+#                          <rangeTo>
+#                            => {
+#                                <variant>
+#                                    => {
+#                                       <release> 
+#                                            => { 
+#                                               "R" => (<capa1ForReading>,<capa2ForReading>)
+#                                               "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#                                               "RSid" => (<sidForReading>)
+#                                               "WSid" => (<sidForWriting>)
+#                                               "rfs"  => <0/1>
+#                                               "backup"  => <0/1>
+#                                               }
+#                                        }
+#                                }
+#                             }   
+#                      }
+#                   }   
+#              } # ranges end                
+#    "keys" => {
+#              <keyInt> 
+#                   => {
+#                      "common" => (   # == defined in key row
+#                                  "name" => <keyName>
+#                                  "sheetName" => <eexcelSheetName, from which this key was read>
+#                                  "sd-name" => <sharedDataName> [optional, only if specified]
+#                                  "read-only" => <0/1>
+#                                  "key type" => <bin/int/str/bool>
+#                                  "removed" => <release> [optional, only if specified]
+#                                  "owner" => <ownerName>
+#                                  "entity" => <ownerEntity>
+#                                  }
+#                      "release"
+#                           => {
+#                              <variant>  # "default" is special case
+#                                 => {
+#                                    <release> 
+#                                        => { 
+#                                           "R" => (<capa1ForReading>,<capa2ForReading>)
+#                                           "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#                                           "RSid" => (<sidForReading>)
+#                                           "WSid" => (<sidForWriting>)
+#                                           "value" => <value>
+#                                           "rfs"  => <0/1>
+#                                           "backup"  => <0/1>
+#                                            }
+#                                    }
+#                              }
+#                       }
+#                } # keys
+#
+#
+#
+#
+# Params: referenceToWorksheet,refToHash
+#
+# Return: 0 on successfull reading
+#         1 on case, where the worksheet was not OK (for isntance name is 
+#                     not according to specification.
+###########################################################################
+sub readCentrepKeyInfo   
+{
+    my $refToWorksheet = shift;
+    my $refToHash = shift;
+    my $owner = shift;
+    my $entity = shift;
+    my $sheetName = shift;
+   
+    # ----------------------------------------------------------------  
+    # look to header information
+    # ----------------------------------------------------------------  
+    # Uid value
+    # Key name value
+    # Key value
+    # 
+    # 
+    # 
+    # 
+    # 
+    
+    my ($uidNameIndex,$uidValueIndex,$rangeFromIndex,$rangeToIndex,$keyNameValueIndex,$keyIntValueIndex,$sdNameIndex,$removedIndex,$releaseIndex,$variantNameIndex,$valueIndex,$readOnlyIndex,
+	$keyTypeIndex,$backupIndex,$rfsIndex,$custConfigIndex,$capaNoneIndex,$capaAllIndex,$capaAllMinusTcbIndex,$capaNetworkServicesIndex,
+	$capaLocalServicesIndex,$capaReadUserDataIndex,$capaWriteUserDataIndex,$capaLocationIndex,$capaReadDeviceDataIndex,
+	$capaWriteDeviceDataIndex,$capaProtServIndex,$capaDrmIndex,$capaSwEventIndex,$capaPowerMgmtIndex,$capaAllFilesIndex,
+	$capaDiskAdminIndex,$capaNetworkControlIndex,$capaMultiMediaDDIndex,$capaCommDDIndex,
+	$capaTCBIndex,$capaTrustedUIIndex,$capaAlwaysPassIndex,$capaUserEnvIndex,$capaSurroundingsDDIndex,
+	$capaSidReadIndex,$capaSidWriteIndex,$rangeFromIndex,$rangeToIndex,$ownerIndex) = readIndexes($refToWorksheet);
+
+    if( $uidValueIndex < 0)
+    {
+	return;
+    }
+
+    my $row = 1;
+    my $emptyRowCount = 0;
+
+    ######################################################################
+    # Loop row by row until we have found $globalMaxEmptyRowCount of rows
+    # empty one after each other.
+    ######################################################################
+    my $currUid = "";
+    my $currUidKeysHash;
+    my $currUidRangesHash;
+    my $currUidSpecificHash;
+    my $currRangeHash = undef;
+    my $currKey = "";
+    my $currKeyReleaseHash;  # the ref to has that is found from "release"
+    my $lastActiveRowType = 0;   # 0 = not defined, 1 = uid, 2 = range, 3 = key
+
+    for( $row = 2;; $row++ ) 
+    {	         
+	#------------------------------------------------------------
+	# We only allow $globalMaxEmptyRowCount empty rows, before we stop
+	# handling the specific sheet
+	#------------------------------------------------------------
+	if(! (   hasValue($refToWorksheet,$row, $uidValueIndex )
+	      || hasValue($refToWorksheet,$row, $keyIntValueIndex )	
+	      || hasValue($refToWorksheet,$row, $valueIndex )	
+	      || hasValue($refToWorksheet,$row, $releaseIndex )	
+	      || hasValue($refToWorksheet,$row, $rangeFromIndex )	
+	      || hasValue($refToWorksheet,$row, $rangeToIndex )	
+	     ))
+	{
+	    $emptyRowCount++;
+	    if($emptyRowCount > $globalMaxEmptyRowCount)
+	    {
+		last;
+	    }
+	    next;
+	}
+	else
+	{
+	    # Was not empty line, reset counter.
+	    $emptyRowCount = 0;
+	}
+		
+	#------------------------------------------------------------
+	# Read the needed rows from the row
+	#------------------------------------------------------------
+	my $uidName             = readCol($refToWorksheet,$row,$uidNameIndex,"");
+	my $uid                 = readCol($refToWorksheet,$row,$uidValueIndex,"");
+	my $keyName             = readCol($refToWorksheet,$row,$keyNameValueIndex,"");
+	my $key                 = readCol($refToWorksheet,$row,$keyIntValueIndex,"");
+	my $sdName              = readCol($refToWorksheet,$row,$sdNameIndex,"");
+	my $removed             = readCol($refToWorksheet,$row,$removedIndex,"");
+	my $release             = readCol($refToWorksheet,$row,$releaseIndex,"");
+	my $variant             = readCol($refToWorksheet,$row,$variantNameIndex,"");
+	my $value               = readCol($refToWorksheet,$row,$valueIndex,"");
+	my $ro                  = readCol($refToWorksheet,$row,$readOnlyIndex,"");
+	my $keyType             = readCol($refToWorksheet,$row,$keyTypeIndex,"");
+	my $backup              = readCol($refToWorksheet,$row,$backupIndex,"");
+	my $rfs                 = readCol($refToWorksheet,$row,$rfsIndex,"");
+	my $custConfig          = readCol($refToWorksheet,$row,$custConfigIndex,"");
+	my $capaNone            = readCol($refToWorksheet,$row,$capaNoneIndex,"");         
+	my $capaAll             = readCol($refToWorksheet,$row,$capaAllIndex,"");         
+	my $capaAllMinusTcb     = readCol($refToWorksheet,$row,$capaAllMinusTcbIndex,"");
+	my $capaNetworkServices = readCol($refToWorksheet,$row,$capaNetworkServicesIndex,"");
+	my $capaLocalServices   = readCol($refToWorksheet,$row,$capaLocalServicesIndex,"");
+	my $capaReadUserData    = readCol($refToWorksheet,$row,$capaReadUserDataIndex,"");  
+	my $capaWriteUserData   = readCol($refToWorksheet,$row,$capaWriteUserDataIndex,"");
+	my $capaLocation        = readCol($refToWorksheet,$row,$capaLocationIndex,"");  
+	my $capaReadDeviceData  = readCol($refToWorksheet,$row,$capaReadDeviceDataIndex,"");
+	my $capaWriteDeviceData = readCol($refToWorksheet,$row,$capaWriteDeviceDataIndex,"");
+	my $capaProtServ        = readCol($refToWorksheet,$row,$capaProtServIndex,"");
+	my $capaDrm             = readCol($refToWorksheet,$row,$capaDrmIndex,"");
+	my $capaSwEvent         = readCol($refToWorksheet,$row,$capaSwEventIndex,"");
+	my $capaPowerMgmt       = readCol($refToWorksheet,$row,$capaPowerMgmtIndex,"");
+	my $capaAllFiles        = readCol($refToWorksheet,$row,$capaAllFilesIndex,"");
+	my $capaDiskAdmin       = readCol($refToWorksheet,$row,$capaDiskAdminIndex,"");
+	my $capaNetworkControl  = readCol($refToWorksheet,$row,$capaNetworkControlIndex,"");
+	my $capaMultiMediaDD    = readCol($refToWorksheet,$row,$capaMultiMediaDDIndex,"");
+	my $capaCommDD          = readCol($refToWorksheet,$row,$capaCommDDIndex,"");
+	my $capaTCB             = readCol($refToWorksheet,$row,$capaTCBIndex,"");
+	my $capaTrustedUI       = readCol($refToWorksheet,$row,$capaTrustedUIIndex,"");
+
+	my $capaAlwaysPass      = readCol($refToWorksheet,$row,$capaAlwaysPassIndex,"");
+	my $capaUserEnv         = readCol($refToWorksheet,$row,$capaUserEnvIndex,"");
+	my $capaSurroundingsDD  = readCol($refToWorksheet,$row,$capaSurroundingsDDIndex,"");
+	my $capaSidRead         = readCol($refToWorksheet,$row,$capaSidReadIndex,"");
+	my $capaSidWrite        = readCol($refToWorksheet,$row,$capaSidWriteIndex,"");
+	my $rangeFrom           = readCol($refToWorksheet,$row,$rangeFromIndex,"");
+	my $rangeTo             = readCol($refToWorksheet,$row,$rangeToIndex,"");
+	my $uidOwner            = readCol($refToWorksheet,$row,$ownerIndex,"");
+
+	if($uidName =~ /^\s*Comment:/i)
+	{
+	    # comment rows are ignored
+	    next;
+	}
+
+	#------------------------------------------------------------
+	# Handle UID row
+	#------------------------------------------------------------
+	if($uid !~ /^\s*$/)
+	{
+	    $currUid = $uid;
+	    $currKey = "";
+	    $lastActiveRowType = 1;
+	    my $tmpRefToHash = addHash($uid,$refToHash);
+	    $currUidKeysHash = addHash("keys",$tmpRefToHash);
+	    $$tmpRefToHash{"name"} = $uidName;
+	    $currUidRangesHash = addHash("ranges",$tmpRefToHash);
+	    $currUidSpecificHash = addHash("uid_specific",$tmpRefToHash);
+	}
+	#------------------------------------------------------------
+	# Handle range row
+	#------------------------------------------------------------
+	elsif($rangeFrom !~ /^\s*$/ || $rangeTo !~ /^\s*$/)
+	{
+	    $currRangeHash = addHash($rangeFrom,$currUidRangesHash);
+	    my $commonHash = addHash("common",$currRangeHash);
+	    $currRangeHash = addHash("to",$currRangeHash);
+	    $currRangeHash = addHash($rangeTo,$currRangeHash);
+
+	    $$commonHash{"removed"} = $removed;
+	    $lastActiveRowType = 2;
+	}
+	#------------------------------------------------------------
+	# Handle key row
+	#------------------------------------------------------------
+	elsif($key !~ /^\s*$/)
+	{
+	    $currKey = $key;
+	    $lastActiveRowType = 3;
+	    my $keyHash = addHash($key,$currUidKeysHash);
+	    ######################################################
+            #   "common" => (
+	    #               "name" => <someName>
+	    #               "sheetName" => <someNameWithoutPath>
+	    #               "sd-name" => <someName>  [optional]
+            #               "read-only" => <0/1>
+            #               "key type" => <bin/int/str/bool>
+	    #               "removed" => <release>
+	    #               "owner" => <ownerName>
+	    #               "entity" => <entity>
+            #               }
+	    ######################################################
+	    my $commonHash = addHash("common",$keyHash);
+
+	    $$commonHash{"owner"} = $owner;
+	    $$commonHash{"entity"} = $entity;
+	    $$commonHash{"name"} = $keyName;
+	    $$commonHash{"sheetName"} = $sheetName;
+	    
+            # read-only attribute is set always from the "key row". 
+	    # It can't be overwritten
+	    $$commonHash{"read-only"} = 0;
+	    if($ro =~ /^\s*yes\s*$/i)
+	    {
+		$$commonHash{"read-only"} = 1;
+	    }
+	    # key type attribute is set always from the "key row". It can't be overwritten
+	    $$commonHash{"key type"} = $keyType;
+
+	    # removed [ optional, we only defined, if specified]
+	    if($removed !~ /^\s*$/)
+	    {
+		$$commonHash{"removed"} = $removed;
+	    }
+
+	    # shared data name [ optional, we only defined, if specified]
+	    if($sdName !~ /^\s*$/)
+	    {
+		$$commonHash{"sd-name"} = $sdName;
+	    }
+	    
+	    ######################################################
+            #   "release" => {
+	    #                ....
+            #                }     
+	    # information to this has in filled later on.
+	    ######################################################
+	    $currKeyReleaseHash = addHash("release",$keyHash);	    
+	}
+	#------------------------------------------------------------
+	# Handle variant row
+	#------------------------------------------------------------
+	elsif($release !~ /^\s*$/)
+	{
+	    # harmonize the release syntax
+	    if($variant =~ /^\s*$/)
+	    {
+		$variant = "default";
+	    }
+	    my $relHashRef;
+	    if($lastActiveRowType == 3)
+	    {
+		$relHashRef = addHash($variant,$currKeyReleaseHash);
+	    }
+	    elsif($lastActiveRowType == 2)
+	    {
+		$relHashRef = addHash($variant,$currRangeHash);
+	    }
+	    elsif($lastActiveRowType == 1)
+	    {
+		$relHashRef = addHash($variant,$currUidSpecificHash);
+	    }
+	    ######################################################
+            #  <release>
+            #      => { 
+            #         "R" => (<capa1ForReading>,<capa2ForReading>)
+            #         "W" => (<capa1ForWriting>,<capa2ForWriting>)
+            #         "RSid" => (<sidForReading>)
+            #         "WSid" => (<sidForWriting>)
+            #         "value" => <value>             # only if this is for keys
+            #         "owner" => <uid>               # only if this is for uid
+            #         "rfs"  => <0/1>
+            #         "backup"  => <0/1>
+            #         }
+	    ######################################################
+	    $release =~ /s([0-9]+)\s+([0-9]+\.[0-9]+)/i;
+	    my $usedRel = "S$1 $2";
+	    my $refToVarHash = addHash($usedRel,$relHashRef);
+	    # Value and owner are specific only to some variant row types.
+	    if($lastActiveRowType == 3)   # This variant row is for a key
+	    {
+		$$refToVarHash{"value"} = $value;
+	    }
+	    elsif($lastActiveRowType == 1) # This variant row is for the uid
+	    {
+		$$refToVarHash{"owner"} = $uidOwner;
+	    }
+	    $$refToVarHash{"rfs"} = 0;
+	    if($rfs =~ /^\s*yes\s*$/i)
+	    {
+		$$refToVarHash{"rfs"} = 1;
+	    }
+	    $$refToVarHash{"backup"} = 0;
+	    if($backup =~ /^\s*yes\s*$/i)
+	    {
+		$$refToVarHash{"backup"} = 1;
+	    }
+	    if(!defined($$refToVarHash{"W"}))
+	    {
+		my @list;
+		$$refToVarHash{"W"} = \@list;
+	    }
+	    if(!defined($$refToVarHash{"R"}))
+	    {
+		my @list;
+		$$refToVarHash{"R"} = \@list;
+	    }
+
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaNone,"AlwaysPass");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaAlwaysPass,"AlwaysPass");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaNetworkServices,"NetworkServices");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaLocalServices,"Local Services");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaReadUserData,"ReadUserData");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaWriteUserData,"WriteUserData");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaLocation,"Location");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaReadDeviceData,"ReadDeviceData");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaWriteDeviceData,"WriteDeviceData");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaProtServ,"ProtServ");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaDrm,"DRM");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaSwEvent,"SwEvent");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaPowerMgmt,"PowerMgmt");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaAllFiles,"AllFiles");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaDiskAdmin,"DiskAdmin");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaNetworkControl,"NetworkControl");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaMultiMediaDD,"MultiMediaDD");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaCommDD,"CommDD");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaTCB,"TCB");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaTrustedUI,"TrustedUI");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaUserEnv,"UserEnvironment");
+	    addCapability($$refToVarHash{"R"},$$refToVarHash{"W"},$capaSurroundingsDD,"SurroundingsDD");
+	    
+	    my @list1;
+	    $$refToVarHash{"RSid"} = \@list1;
+	    if($capaSidRead !~ /^\s*$/)
+	    {
+		push(@list1,$capaSidRead);
+	    }
+	    my @list2;
+	    $$refToVarHash{"WSid"} = \@list2;
+	    if($capaSidWrite !~ /^\s*$/)
+	    {
+		push(@list2,$capaSidWrite);
+	    }
+	}
+    }
+
+    return $refToHash;
+}
+
+
+###########################################################################
+#
+###########################################################################
+sub checkRelease
+{
+    my $row = shift;
+    my $value = shift;
+    my $columnName = shift;
+
+    if($value !~ /^\s*S60\s+[1-9]+\.[0-9]+\s*$/ && $value !~ /^\s*$/)
+    {
+	print "Row $row: $columnName -column has wrong release syntax. (should be for instance \"S60 3.0\"\n";
+	return 1;
+    }
+    return 0;
+}
+
+###########################################################################
+#
+###########################################################################
+sub checkCapability
+{
+    my $row = shift;
+    my $value = shift;
+    my $columnName = shift;
+    
+    if($value !~ /^\s*$/ &&
+      $value !~ /^R$/ &&
+      $value !~ /^W$/ &&
+      $value !~ /^RW$/ 
+      )
+    {
+	print "Row $row: The $columnName -column has invalid value \"$value\".\n";
+	return 1;
+    }    
+    return 0;
+}
+
+###########################################################################
+# Makes syntax checks to the given worksheet
+#
+#
+# Params: referenceToWorksheet
+#
+###########################################################################
+sub checkCentrepKeyInfo   
+{
+    my $refToWorksheet = shift;
+    my $ignoreWarnings = shift;
+
+    # ----------------------------------------------------------------  
+    # look to header information
+    # ----------------------------------------------------------------      
+    my ($uidNameIndex,$uidValueIndex,$rangeFromIndex,$rangeToIndex,
+	$keyNameValueIndex,$keyIntValueIndex,$sdNameIndex,$removedIndex,$releaseIndex,$variantNameIndex,
+	$valueIndex,$readOnlyIndex,
+	$keyTypeIndex,$backupIndex,$rfsIndex,$custConfigIndex,$capaNoneIndex,$capaAllIndex,$capaAllMinusTcbIndex,$capaNetworkServicesIndex,
+	$capaLocalServicesIndex,$capaReadUserDataIndex,$capaWriteUserDataIndex,$capaLocationIndex,$capaReadDeviceDataIndex,
+	$capaWriteDeviceDataIndex,$capaProtServIndex,$capaDrmIndex,$capaSwEventIndex,$capaPowerMgmtIndex,$capaAllFilesIndex,
+	$capaDiskAdminIndex,$capaNetworkControlIndex,$capaMultiMediaDDIndex,$capaCommDDIndex,
+	$capaTCBIndex,$capaTrustedUIIndex,$capaAlwaysPassIndex,$capaUserEnvIndex,$capaSurroundingsDDIndex,
+	$capaSidReadIndex,$capaSidWriteIndex,$rangeFromIndex,$rangeToIndex,$ownerIndex) = readIndexes($refToWorksheet);
+    if( $uidValueIndex < 0)
+    {
+	return;
+    }
+
+    my $row = 1;
+    my $emptyRowCount = 0;
+
+    ######################################################################
+    # Loop row by row until we have found $globalMaxEmptyRowCount of rows
+    # empty one after each other.
+    ######################################################################
+    my $currUid = "";
+    my $currRange = "";
+    my $lastActiveRowType = 0;   # 0 = not defined, 1 = uid, 2 = range, 3 = key
+    my $variantRowCount = 0;
+    my $errorCount = 0;
+    my $currentKeyType = "";
+    my $currentKeyReadOnly = "";
+    for( $row = 2;; $row++ ) 
+    {	         
+	#------------------------------------------------------------
+	# We only allow $globalMaxEmptyRowCount empty rows, before we stop
+	# handling the specific sheet
+	#------------------------------------------------------------
+	if(! (   hasValue($refToWorksheet,$row, $uidValueIndex )
+	      || hasValue($refToWorksheet,$row, $uidNameIndex )
+	      || hasValue($refToWorksheet,$row, $keyNameValueIndex )	
+	      || hasValue($refToWorksheet,$row, $keyIntValueIndex )	
+	      || hasValue($refToWorksheet,$row, $releaseIndex )	
+	      || hasValue($refToWorksheet,$row, $rangeFromIndex )	
+	      || hasValue($refToWorksheet,$row, $rangeToIndex )	
+	     ))
+	{
+	    $emptyRowCount++;
+	    if($emptyRowCount > $globalMaxEmptyRowCount)
+	    {
+		if($variantRowCount == 0)
+		{
+		    if($lastActiveRowType == 1)
+		    {
+			print "Row $row: There were no variants defined for previous UID.\n";
+			print "          This means among other things that default access is alwaysFail.\n";	    
+			$errorCount++;
+		    }
+		    elsif($lastActiveRowType == 2)
+		    {
+			print "Row $row: There were no variants defined for previous range => range will not appear in ini-file.\n";
+			$errorCount++;
+		    }
+		    elsif($lastActiveRowType == 3)
+		    {
+			print "Row $row: There were no variants defined for previous key => key will not appear in ini-file.\n";
+			$errorCount++;
+		    }
+		}
+		last;
+	    }
+	    next;
+	}
+	else
+	{
+	    # Was not empty line, reset counter.
+	    $emptyRowCount = 0;
+	}
+		
+	#------------------------------------------------------------
+	# Read the needed rows from the row
+	#------------------------------------------------------------
+	my $uidName             = readCol($refToWorksheet,$row,$uidNameIndex,"");
+	my $uid                 = readCol($refToWorksheet,$row,$uidValueIndex,"");
+	my $rangeFrom           = readCol($refToWorksheet,$row,$rangeFromIndex,"");
+	my $rangeTo             = readCol($refToWorksheet,$row,$rangeToIndex,"");
+	my $keyName             = readCol($refToWorksheet,$row,$keyNameValueIndex,"");
+	my $key                 = readCol($refToWorksheet,$row,$keyIntValueIndex,"");
+	my $removed             = readCol($refToWorksheet,$row,$removedIndex,"");
+	my $release             = readCol($refToWorksheet,$row,$releaseIndex,"");
+	my $variant             = readCol($refToWorksheet,$row,$variantNameIndex,"");
+	my $value               = readCol($refToWorksheet,$row,$valueIndex,"");
+	my $ro                  = readCol($refToWorksheet,$row,$readOnlyIndex,"");
+	my $keyType             = readCol($refToWorksheet,$row,$keyTypeIndex,"");
+	my $backup              = readCol($refToWorksheet,$row,$backupIndex,"");
+	my $rfs                 = readCol($refToWorksheet,$row,$rfsIndex,"");
+	my $custConfig          = readCol($refToWorksheet,$row,$custConfigIndex,"");         
+	my $capaNone            = readCol($refToWorksheet,$row,$capaNoneIndex,"");         
+	my $capaAll             = readCol($refToWorksheet,$row,$capaAllIndex,"");         
+	my $capaAllMinusTcb     = readCol($refToWorksheet,$row,$capaAllMinusTcbIndex,"");
+	my $capaNetworkServices = readCol($refToWorksheet,$row,$capaNetworkServicesIndex,"");
+	my $capaLocalServices   = readCol($refToWorksheet,$row,$capaLocalServicesIndex,"");
+	my $capaReadUserData    = readCol($refToWorksheet,$row,$capaReadUserDataIndex,"");  
+	my $capaWriteUserData   = readCol($refToWorksheet,$row,$capaWriteUserDataIndex,"");
+	my $capaLocation        = readCol($refToWorksheet,$row,$capaLocationIndex,"");  
+	my $capaReadDeviceData  = readCol($refToWorksheet,$row,$capaReadDeviceDataIndex,"");
+	my $capaWriteDeviceData = readCol($refToWorksheet,$row,$capaWriteDeviceDataIndex,"");
+	my $capaProtServ        = readCol($refToWorksheet,$row,$capaProtServIndex,"");
+	my $capaDrm             = readCol($refToWorksheet,$row,$capaDrmIndex,"");
+	my $capaSwEvent         = readCol($refToWorksheet,$row,$capaSwEventIndex,"");
+	my $capaPowerMgmt       = readCol($refToWorksheet,$row,$capaPowerMgmtIndex,"");
+	my $capaAllFiles        = readCol($refToWorksheet,$row,$capaAllFilesIndex,"");
+	my $capaDiskAdmin       = readCol($refToWorksheet,$row,$capaDiskAdminIndex,"");
+	my $capaNetworkControl  = readCol($refToWorksheet,$row,$capaNetworkControlIndex,"");
+	my $capaMultiMediaDD    = readCol($refToWorksheet,$row,$capaMultiMediaDDIndex,"");
+	my $capaCommDD          = readCol($refToWorksheet,$row,$capaCommDDIndex,"");
+	my $capaTCB             = readCol($refToWorksheet,$row,$capaTCBIndex,"");
+	my $capaTrustedUI       = readCol($refToWorksheet,$row,$capaTrustedUIIndex,"");
+
+	my $capaAlwaysPass      = readCol($refToWorksheet,$row,$capaAlwaysPassIndex,"");
+	my $capaUserEnv         = readCol($refToWorksheet,$row,$capaUserEnvIndex,"");
+	my $capaSurroundingsDD  = readCol($refToWorksheet,$row,$capaSurroundingsDDIndex,"");
+	my $capaSidRead         = readCol($refToWorksheet,$row,$capaSidReadIndex,"");
+	my $capaSidWrite        = readCol($refToWorksheet,$row,$capaSidWriteIndex,"");
+	my $rangeFrom           = readCol($refToWorksheet,$row,$rangeFromIndex,"");
+	my $rangeTo             = readCol($refToWorksheet,$row,$rangeToIndex,"");
+	my $uidOwner            = readCol($refToWorksheet,$row,$ownerIndex,"");
+
+	if($uidName =~ /^\s*Comment:/)
+	{
+	    # comment rows are ignored
+	    print "Warning: Row $row ignored, since it is a comment row\n" if not $ignoreWarnings;
+	    next;
+	}
+
+	#------------------------------------------------------------
+	# Common checks
+	#------------------------------------------------------------
+	if($uidName !~ /^\s*$/ && $uid =~ /^\s*$/)
+	{
+	    # both uid and uidname have to be defined in the same row
+	    print "Row $row: Uid Name-column has value, but not the Uid Value-column\n";
+	    $errorCount++;
+	}
+	if($keyName !~ /^\s*$/ && $key =~ /^\s*$/)
+	{
+	    # both key int and keyname have to be defined in the same row
+	    print "Row $row: Key Name-column has value, but not the Key Int-column\n";
+	    $errorCount++;
+	}
+	if($rangeTo !~ /^\s*$/ && $rangeFrom =~ /^\s*$/)
+	{
+	    # if range to is defined, then also range from has to be defined.
+	    print "Row $row: Range To-column has value, but not the Range From-column\n";
+	    $errorCount++;
+	}
+	if($rangeTo =~ /^\s*$/ && $rangeFrom !~ /^\s*$/)
+	{
+	    # if range from is defined, then also range to  has to be defined.
+	    print "Row $row: Range From-column has value, but not the Range To-column\n";
+	    $errorCount++;
+	}
+	#------------------------------------------------------------
+	# Handle UID row
+	#------------------------------------------------------------
+	if($uid !~ /^\s*$/)
+	{
+	    $currUid = $uid;
+	    # Make sure that last uid/key/range had some variant rows
+	    if($variantRowCount == 0)
+	    {
+		if($lastActiveRowType == 1)
+		{
+		    print "Row $row: There were no variants defined for previous UID.\n";
+		    print "          This means among other things that default access is alwaysFail.\n";	    
+		    $errorCount++;
+		}
+		elsif($lastActiveRowType == 2)
+		{
+		    print "Row $row: There were no variants defined for previous range => range will not appear in ini-file.\n";
+		    $errorCount++;
+		}
+		elsif($lastActiveRowType == 3)
+		{
+		    print "Row $row: There were no variants defined for previous key => key will not appear in ini-file.\n";
+		    $errorCount++;
+		}
+	    }
+	    $lastActiveRowType = 1;
+	    $variantRowCount = 0;
+	    #######################################
+            # Check: In the uid row the only allowed
+	    #          columns are "uid name", "uid value", "purpose"
+	    #######################################
+	    if($rangeFrom !~ /^\s*$/)
+	    {
+		print "Row $row: Range From-column is not allowed for uid row\n";
+		$errorCount++;
+	    }	    
+	    if($rangeTo !~ /^\s*$/)
+	    {
+		print "Row $row: Range To-column is not allowed for uid row\n";
+		$errorCount++;
+	    }	    
+	    if($uidOwner !~ /^\s*$/)
+	    {
+		print "Row $row: Owner-column is not allowed for uid row\n";
+		$errorCount++;
+	    }	    
+	    if($key !~ /^\s*$/)
+	    {
+		print "Row $row: Key Int-column is not allowed for uid row\n";
+		$errorCount++;
+	    }	    
+	    if($value !~ /^\s*$/)
+	    {
+		print "Row $row: Def value-column is not allowed for uid row\n";
+		$errorCount++;
+	    }
+	    if($rfs !~ /^\s*$/)
+	    {
+		print "Row $row: RFS-column is not allowed for uid row\n";
+		$errorCount++;
+	    }
+	    if($ro !~ /^\s*$/)
+	    {
+		print "Row $row: Read Only-column is not allowed for uid row\n";
+		$errorCount++;
+	    }
+	    if($keyType !~ /^\s*$/)
+	    {
+		print "Row $row: Key Type-column is not allowed for uid row\n";
+		$errorCount++;
+	    }
+	    if($backup !~ /^\s*$/)
+	    {
+		print "Row $row: Backup-column is not allowed for uid row\n";
+		$errorCount++;
+	    }
+	    if($custConfig !~ /^\s*$/)
+	    {
+		print "Row $row: Cust Config-column is not allowed for uid row\n";
+		$errorCount++;
+	    }
+	    #######################################
+            # Check: Check that uid is in hex format 
+	    #######################################
+	    if($uid != /^\s*0x/)
+	    {
+		print "Row $row: The Uid value has to be a hex value (starting with 0x)\n";
+		$errorCount++;
+	    }
+	    elsif(length($uid) != 10)
+	    {
+		print "Row $row: The Uid length is not correct. Are you sure that the Uid is correct ?\n";
+		$errorCount++;
+	    }
+	    #######################################
+            # Check: Check that no capas defined
+	    #######################################
+	    if( $capaNone            !~ /^\s*$/ ||
+		$capaAll             !~ /^\s*$/ ||
+		$capaAllMinusTcb     !~ /^\s*$/ ||
+		$capaNetworkServices !~ /^\s*$/ ||
+		$capaLocalServices   !~ /^\s*$/ ||
+		$capaReadUserData    !~ /^\s*$/ ||
+		$capaWriteUserData   !~ /^\s*$/ ||
+		$capaLocation        !~ /^\s*$/ ||
+		$capaReadDeviceData  !~ /^\s*$/ ||
+		$capaWriteDeviceData !~ /^\s*$/ ||
+		$capaProtServ        !~ /^\s*$/ ||
+		$capaDrm             !~ /^\s*$/ ||
+		$capaSwEvent         !~ /^\s*$/ ||
+		$capaPowerMgmt       !~ /^\s*$/ ||
+		$capaAllFiles        !~ /^\s*$/ ||
+		$capaDiskAdmin       !~ /^\s*$/ ||
+		$capaNetworkControl  !~ /^\s*$/ ||
+		$capaMultiMediaDD    !~ /^\s*$/ ||
+		$capaCommDD          !~ /^\s*$/ ||
+		$capaTCB             !~ /^\s*$/ ||
+		$capaTrustedUI       !~ /^\s*$/ ||
+		$capaAlwaysPass      !~ /^\s*$/ ||    
+		$capaUserEnv         !~ /^\s*$/ ||       
+		$capaSurroundingsDD  !~ /^\s*$/ ||
+		$capaSidRead         !~ /^\s*$/ ||
+		$capaSidWrite        !~ /^\s*$/
+		)
+	    {
+		print "Row $row: Capabilities are not allowed to be defined in UID row.\n";
+		    $errorCount++;
+	    }
+	}
+	#------------------------------------------------------------
+	# Handle range row
+	#------------------------------------------------------------
+	elsif($rangeFrom !~ /^\s*$/)
+	{
+	    # Make sure that last uid/key/range had some variant rows
+	    if($variantRowCount == 0)
+	    {
+		if($lastActiveRowType == 1)
+		{
+		    print "Row $row: There were no variants defined for previous UID.\n";
+		    print "          This means among other things that default access is alwaysFail.\n";	    
+		    $errorCount++;
+		}
+		elsif($lastActiveRowType == 2)
+		{
+		    print "Row $row: There were no variants defined for previous range => range will not appear in ini-file.\n";
+		    $errorCount++;
+		}
+		elsif($lastActiveRowType == 3)
+		{
+		    print "Row $row: There were no variants defined for previous key => key will not appear in ini-file.\n";
+		    $errorCount++;
+		}
+	    }
+	    $variantRowCount = 0;
+	    $lastActiveRowType = 2;
+
+	    if($rangeTo =~ /^\s*$/)
+	    {
+		print "Row $row: You have to specify both Range To and Range From in the range row.\n";
+		$errorCount++;
+	    }	    
+	    #######################################
+            # Check: There has to be uid defined before any ranges 
+	    #######################################
+	    if($currUid =~ /^\s*$/)
+	    {
+		print "Row $row: Before any ranges are defined, an UID has to be defined\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: In the range row the only allowed
+	    #          columns are "range from", "range to", "purpose", "removed"
+	    #######################################
+	    if($uid !~ /^\s*$/)
+	    {
+		print "Row $row: Uid-column is not allowed for range row\n";
+		$errorCount++;
+	    }	    
+	    if($uidName !~ /^\s*$/)
+	    {
+		print "Row $row: Uid Name-column is not allowed for uid row\n";
+		$errorCount++;
+	    }	    
+	    if($uidOwner !~ /^\s*$/)
+	    {
+		print "Row $row: Owner-column is not allowed for range row\n";
+		$errorCount++;
+	    }	    
+	    if($key !~ /^\s*$/)
+	    {
+		print "Row $row: Key Int-column is not allowed for range row\n";
+		$errorCount++;
+	    }	    
+	    if($value !~ /^\s*$/)
+	    {
+		print "Row $row: Def value-column is not allowed for range row\n";
+		$errorCount++;
+	    }
+	    if($rfs !~ /^\s*$/)
+	    {
+		print "Row $row: RFS-column is not allowed for range row\n";
+		$errorCount++;
+	    }
+	    if($ro !~ /^\s*$/)
+	    {
+		print "Row $row: Read Only-column is not allowed for range row\n";
+		$errorCount++;
+	    }
+	    if($keyType !~ /^\s*$/)
+	    {
+		print "Row $row: Key Type-column is not allowed for range row\n";
+		$errorCount++;
+	    }
+	    if($backup !~ /^\s*$/)
+	    {
+		print "Row $row: Backup-column is not allowed for range row\n";
+		$errorCount++;
+	    }
+	    if($custConfig !~ /^\s*$/)
+	    {
+		print "Row $row: Cust Config-column is not allowed for range row\n";
+		$errorCount++;
+	    }
+	    #######################################
+            # Check: Check that range from and range to are in hex format 
+	    #######################################
+	    if($rangeFrom != /^\s*0x/)
+	    {
+		print "Row $row: The range from value has to be a hex value (starting with 0x)\n";
+		$errorCount++;
+	    }
+	    elsif(length($rangeFrom) != 10)
+	    {
+		print "Row $row: The range from-length is not correct. Are you sure that the range is correct ?\n";
+		$errorCount++;
+	    }
+	    if($rangeTo != /^\s*0x/)
+	    {
+		print "Row $row: The range to- value has to be a hex value (starting with 0x)\n";
+		$errorCount++;
+	    }
+	    elsif(length($rangeTo) != 10)
+	    {
+		print "Row $row: The range to-length is not correct. Are you sure that the range is correct ?\n";
+		$errorCount++;
+	    }
+	    #######################################
+            # Check: Check that no capas defined
+	    #######################################
+	    if( $capaNone            !~ /^\s*$/ ||
+		$capaAll             !~ /^\s*$/ ||
+		$capaAllMinusTcb     !~ /^\s*$/ ||
+		$capaNetworkServices !~ /^\s*$/ ||
+		$capaLocalServices   !~ /^\s*$/ ||
+		$capaReadUserData    !~ /^\s*$/ ||
+		$capaWriteUserData   !~ /^\s*$/ ||
+		$capaLocation        !~ /^\s*$/ ||
+		$capaReadDeviceData  !~ /^\s*$/ ||
+		$capaWriteDeviceData !~ /^\s*$/ ||
+		$capaProtServ        !~ /^\s*$/ ||
+		$capaDrm             !~ /^\s*$/ ||
+		$capaSwEvent         !~ /^\s*$/ ||
+		$capaPowerMgmt       !~ /^\s*$/ ||
+		$capaAllFiles        !~ /^\s*$/ ||
+		$capaDiskAdmin       !~ /^\s*$/ ||
+		$capaNetworkControl  !~ /^\s*$/ ||
+		$capaMultiMediaDD    !~ /^\s*$/ ||
+		$capaCommDD          !~ /^\s*$/ ||
+		$capaTCB             !~ /^\s*$/ ||
+		$capaTrustedUI       !~ /^\s*$/ ||
+		$capaAlwaysPass      !~ /^\s*$/ ||    
+		$capaUserEnv         !~ /^\s*$/ ||       
+		$capaSurroundingsDD  !~ /^\s*$/ ||
+		$capaSidRead         !~ /^\s*$/ ||
+		$capaSidWrite        !~ /^\s*$/
+		)
+	    {
+		print "Row $row: Capabilities are not allowed to be defined in range row.\n";
+		    $errorCount++;
+	    }
+	}
+	#------------------------------------------------------------
+	# Handle key row
+	#------------------------------------------------------------
+	elsif($key !~ /^\s*$/)
+	{
+	    # Make sure that last uid/key/range had some variant rows
+	    if($variantRowCount == 0)
+	    {
+		if($lastActiveRowType == 1)
+		{
+		    print "Row $row: There were no variants defined for previous UID.\n";
+		    print "          This means among other things that default access is alwaysFail.\n";	    
+		    $errorCount++;
+		}
+		elsif($lastActiveRowType == 2)
+		{
+		    print "Row $row: There were no variants defined for previous range => range will not appear in ini-file.\n";
+		    $errorCount++;
+		}
+		elsif($lastActiveRowType == 3)
+		{
+		    print "Row $row: There were no variants defined for previous key => key will not appear in ini-file.\n";
+		    $errorCount++;
+		}
+	    }
+	    $variantRowCount = 0;
+	    $lastActiveRowType = 3;
+
+	    $currentKeyType = $keyType;
+	    # Store the ro value into the variable (we need this to handle the key variant rows
+	    $currentKeyReadOnly = $ro;
+
+	    #######################################
+            # Check: There has to be uid defined before any keys 
+	    #######################################
+	    if($currUid =~ /^\s*$/)
+	    {
+		print "Row $row: Before any keys are defined an UID has to be defined\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: Check that key int is in hex format 
+	    #######################################
+	    if($key !~ /^\s*0x/)
+	    {
+		print "Row $row: The Key Int  has to be a hex value (starting with 0x)\n";
+		$errorCount++;
+	    }
+	    elsif(length($key) != 10)
+	    {
+		print "Row $row: The Key int length is not correct. Are you sure that the hex value is correct ?\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: Check that key type and read only are defined
+	    #######################################
+	    if($keyType =~  /^\s*$/)
+	    {
+		print "Row $row: The Key Type-column has to be defined in row, where key is defined.\n";
+		$errorCount++;
+	    }
+	    if($ro =~  /^\s*$/)
+	    {
+		print "Row $row: The Read Only-column has to be defined in row, where key is defined.\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: key type column
+	    #######################################
+ 	    if($keyType !~ /^Int$/ &&
+	       $keyType !~ /^Real$/ &&
+	       $keyType !~ /^Str$/ &&
+	       $keyType !~ /^Bin$/
+	       )
+	    {
+		print "Row $row: The Key type-column has invalid value.\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: Removed column syntax
+	    #######################################
+	    $errorCount += checkRelease($row,$removed,"Removed");
+
+	    #######################################
+            # Check: columns that should not be in key row
+	    #######################################
+	    if($rangeFrom !~ /^\s*$/)
+	    {
+		print "Row $row: Range From-column is not allowed for key row\n";
+		$errorCount++;
+	    }	    
+	    if($rangeTo !~ /^\s*$/)
+	    {
+		print "Row $row: Range To-column is not allowed for key row\n";
+		$errorCount++;
+	    }	    
+	    if($uidOwner !~ /^\s*$/)
+	    {
+		print "Row $row: Owner-column is not allowed for key row\n";
+		$errorCount++;
+	    }	    
+	    if($release !~ /^\s*$/)
+	    {
+		print "Row $row: Platform Release-column is not allowed for key row\n";
+		$errorCount++;
+	    }
+	    if($value !~ /^\s*$/)
+	    {
+		print "Row $row: Def value-column is not allowed for key row\n";
+		$errorCount++;
+	    }
+	    if($rfs !~ /^\s*$/)
+	    {
+		print "Row $row: RFS-column is not allowed for key row\n";
+		$errorCount++;
+	    }
+	    if($backup !~ /^\s*$/)
+	    {
+		print "Row $row: Backup-column is not allowed for key row\n";
+		$errorCount++;
+	    }
+	    if($custConfig !~ /^\s*$/)
+	    {
+		print "Row $row: Cust Config-column is not allowed for key row\n";
+		$errorCount++;
+	    }
+	    #######################################
+            # Check: Check that no capas defined
+	    #######################################
+	    if( $capaNone            !~ /^\s*$/ ||
+		$capaAll             !~ /^\s*$/ ||
+		$capaAllMinusTcb     !~ /^\s*$/ ||
+		$capaNetworkServices !~ /^\s*$/ ||
+		$capaLocalServices   !~ /^\s*$/ ||
+		$capaReadUserData    !~ /^\s*$/ ||
+		$capaWriteUserData   !~ /^\s*$/ ||
+		$capaLocation        !~ /^\s*$/ ||
+		$capaReadDeviceData  !~ /^\s*$/ ||
+		$capaWriteDeviceData !~ /^\s*$/ ||
+		$capaProtServ        !~ /^\s*$/ ||
+		$capaDrm             !~ /^\s*$/ ||
+		$capaSwEvent         !~ /^\s*$/ ||
+		$capaPowerMgmt       !~ /^\s*$/ ||
+		$capaAllFiles        !~ /^\s*$/ ||
+		$capaDiskAdmin       !~ /^\s*$/ ||
+		$capaNetworkControl  !~ /^\s*$/ ||
+		$capaMultiMediaDD    !~ /^\s*$/ ||
+		$capaCommDD          !~ /^\s*$/ ||
+		$capaTCB             !~ /^\s*$/ ||
+		$capaTrustedUI       !~ /^\s*$/ ||
+		$capaAlwaysPass      !~ /^\s*$/ ||    
+		$capaUserEnv         !~ /^\s*$/ ||       
+		$capaSurroundingsDD  !~ /^\s*$/ ||
+		$capaSidRead         !~ /^\s*$/ ||
+		$capaSidWrite        !~ /^\s*$/
+		)
+	    {
+		print "Row $row: Capabilities are not allowed to be defined in Key row.\n";
+		    $errorCount++;
+	    }
+	}
+	#------------------------------------------------------------
+	# Handle variant row
+	#------------------------------------------------------------
+	elsif($release !~ /^\s*$/)
+	{
+	    $variantRowCount++;
+	    #######################################
+            # Check: Variant row should not contain removed, keyType or Read only column
+	    #######################################
+	    if($keyType !~  /^\s*$/)
+	    {
+		print "Row $row: The Key Type-column can't be defined in variant-row.\n";
+		$errorCount++;
+	    }
+	    if($ro !~  /^\s*$/)
+	    {
+		print "Row $row: The Read Only-column can't be defined in variant-row.\n";
+		$errorCount++;
+	    }
+	    if($removed !~  /^\s*$/)
+	    {
+		print "Row $row: The Removed-column can't be defined in variant-row.\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: Platform release column syntax
+	    #######################################
+	    $errorCount += checkRelease($row,$release,"Platform Release");
+
+	    #######################################
+            # Check: Owner value only allowed for uid variant row
+	    #######################################
+ 	    if( $lastActiveRowType == 1)
+	    {
+		if($uidOwner =~ /^\s*$/)
+		{
+		    print "Row $row: No owner defined for the uid variant row.\n";
+		    $errorCount++;		    
+		}
+	    }
+ 	    elsif( $lastActiveRowType != 1)
+	    {
+		if($uidOwner !~ /^\s*$/)
+		{
+		    print "Row $row: Owner-column is only valid for the uid variant row.\n";
+		    $errorCount++;		    
+		}
+	    }
+	    #######################################
+            # Check: Variant name column
+	    #######################################
+	    if($variant !~ /^\s*$/ &&
+	       $variant !~ /^elaf$/ &&
+	       $variant !~ /^apac$/ &&
+	       $variant !~ /^thai$/ &&
+	       $variant !~ /^japan$/ &&
+	       $variant !~ /^gsm$/ &&
+	       $variant !~ /^low_cost$/
+	       )
+	    {
+		print "Row $row: The Variant name-column has invalid value.\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: def value column
+	    # (empty value only allowed in case of str and binary)
+	    # Checks only valid, if the row is key's variant row.
+	    # for other we check that the column is not filled.
+	    #######################################
+ 	    if( $lastActiveRowType == 3)
+	    {
+		if($currentKeyType !~ /^Str$/ && $currentKeyType !~ /^Bin$/ && $value =~ /^\s*$/)
+		{		
+		    print "Row $row: The Def value-column has to have some value.\n";
+		    $errorCount++;
+		}
+		if($currentKeyType =~ /^Int$/ && $value !~ /^\-*[0-9]+$/)
+		{
+		    print "Row $row: The Def value-column has to be a number, since type is Int.\n";
+		    $errorCount++;
+		}
+		if($currentKeyType =~ /^Real$/ && $value !~ /^\-*[0-9\.]+$/)
+		{
+		    print "Row $row: The Def value-column has to be a number, since type is Real.\n";
+		    $errorCount++;
+		}
+	    }
+	    elsif($value !~ /^\s*$/)
+	    {
+		    print "Row $row: The Def value-column should not be defined for ";
+		    if($lastActiveRowType ==1)
+		    {
+			print "Uid variant row\n";
+		    }
+		    elsif($lastActiveRowType ==2)
+		    {
+			print "range variant row\n";
+		    }
+		    $errorCount++;		
+	    }
+
+	    #######################################
+            # Check: backup and rfs columns
+	    #######################################
+	    if($backup =~ /^\s*$/)
+	    {
+		print "Row $row: The Backup-column has to be specified in variant row.\n";
+		$errorCount++;
+	    }
+	    elsif($backup !~ /^Yes$/ &&
+		  $backup !~ /^No$/
+		  )
+	    {
+		print "Row $row: The Backup-column has invalid value.\n";
+		$errorCount++;
+	    }
+	    if($release !~ /^\s*$/ && $lastActiveRowType == 3 && $currentKeyReadOnly =~ /yes/i && $backup =~ /^Yes$/)
+	    {
+		print "Row $row: A readonly key should not be backed up.\n";
+		$errorCount++;		
+	    }
+
+	    if($rfs =~ /^\s*$/)
+	    {
+		print "Row $row: The RFS-column has to have value in the variant row.\n";
+		$errorCount++;
+	    }
+	    elsif($rfs !~ /^Yes$/ &&
+		  $rfs !~ /^No$/
+		  )
+	    {
+		print "Row $row: The RFS-column has invalid value.\n";
+		$errorCount++;
+	    }
+	    if($release !~ /^\s*$/ && $lastActiveRowType == 3 && $currentKeyReadOnly =~ /yes/i && $rfs =~ /^Yes$/)
+	    {
+		print "Row $row: A readonly key should not have RFS as yes.\n";
+		$errorCount++;		
+	    }
+
+	    #######################################
+            # Check: customer config column
+	    #    Only allowed for key variant row
+	    #######################################
+	    if( $lastActiveRowType == 3)
+	    {		
+		if($custConfig =~ /^\s*$/)
+		{
+		    print "Row $row: The Cust Config-column has to have value in the variant row.\n";
+		    $errorCount++;
+		}
+		elsif($custConfig !~ /^Yes$/ &&
+		      $custConfig !~ /^No$/ &&
+		      $custConfig !~ /^Must$/
+		      )
+		{
+		    print "Row $row: The Cust config-column has invalid value.\n";
+		    $errorCount++;
+		}
+	    }
+	    elsif($custConfig !~ /^\s*$/)
+	    {
+		    print "Row $row: The Cust Config-column should not be defined in ";
+		    if($lastActiveRowType ==1)
+		    {
+			print "Uid variant row.\n";
+		    }
+		    elsif($lastActiveRowType ==2)
+		    {
+			print "range variant row.\n";
+		    }
+		    $errorCount++;		
+	    }
+	    #######################################
+            # Check: at least one capability needs to be specified if release is specified
+	    #######################################
+	    if($release !~ /^\s*$/)
+	    {
+		if( $capaNone            =~ /^\s*$/ &&
+		    $capaAll             =~ /^\s*$/ &&
+		    $capaAllMinusTcb     =~ /^\s*$/ &&
+		    $capaNetworkServices =~ /^\s*$/ &&
+		    $capaLocalServices   =~ /^\s*$/ &&
+		    $capaReadUserData    =~ /^\s*$/ &&
+		    $capaWriteUserData   =~ /^\s*$/ &&
+		    $capaLocation        =~ /^\s*$/ &&
+		    $capaReadDeviceData  =~ /^\s*$/ &&
+		    $capaWriteDeviceData =~ /^\s*$/ &&
+		    $capaProtServ        =~ /^\s*$/ &&
+		    $capaDrm             =~ /^\s*$/ &&
+		    $capaSwEvent         =~ /^\s*$/ &&
+		    $capaPowerMgmt       =~ /^\s*$/ &&
+		    $capaAllFiles        =~ /^\s*$/ &&
+		    $capaDiskAdmin       =~ /^\s*$/ &&
+		    $capaNetworkControl  =~ /^\s*$/ &&
+		    $capaMultiMediaDD    =~ /^\s*$/ &&
+		    $capaCommDD          =~ /^\s*$/ &&
+		    $capaTCB             =~ /^\s*$/ &&
+		    $capaTrustedUI       =~ /^\s*$/ &&
+		    $capaAlwaysPass      =~ /^\s*$/ &&    
+		    $capaUserEnv         =~ /^\s*$/ &&       
+		    $capaSurroundingsDD  =~ /^\s*$/ &&
+		    $capaSidRead         =~ /^\s*$/ &&
+		    $capaSidWrite        =~ /^\s*$/
+		    )
+		{
+		    print "Row $row: At least some capability colums has to have some value, since Platform Release-column is defined.\n";
+		    $errorCount++;
+		}
+	    }	   
+
+	    #######################################
+            # Check: if this is variant row for key, then if the key is read-only key, then
+	    #        there should be no "W" defined
+	    #######################################
+	    if($release !~ /^\s*$/ && $lastActiveRowType == 3 && $currentKeyReadOnly =~ /yes/i)
+	    {
+		if( $capaNone            =~ /W/i ||
+		    $capaAll             =~ /W/i ||
+		    $capaAllMinusTcb     =~ /W/i ||
+		    $capaNetworkServices =~ /W/i ||
+		    $capaLocalServices   =~ /W/i ||
+		    $capaReadUserData    =~ /W/i ||
+		    $capaWriteUserData   =~ /W/i ||
+		    $capaLocation        =~ /W/i ||
+		    $capaReadDeviceData  =~ /W/i ||
+		    $capaWriteDeviceData =~ /W/i ||
+		    $capaProtServ        =~ /W/i ||
+		    $capaDrm             =~ /W/i ||
+		    $capaSwEvent         =~ /W/i ||
+		    $capaPowerMgmt       =~ /W/i ||
+		    $capaAllFiles        =~ /W/i ||
+		    $capaDiskAdmin       =~ /W/i ||
+		    $capaNetworkControl  =~ /W/i ||
+		    $capaMultiMediaDD    =~ /W/i ||
+		    $capaCommDD          =~ /W/i ||
+		    $capaTCB             =~ /W/i ||
+		    $capaTrustedUI       =~ /W/i ||
+		    $capaAlwaysPass      =~ /W/i ||    
+		    $capaUserEnv         =~ /W/i ||       
+		    $capaSurroundingsDD  =~ /W/i ||
+		    $capaSidRead         =~ /W/i ||
+		    $capaSidWrite        =~ /W/i
+		    )
+		{
+		    print "Row $row: Since the key is read-only, there should be no W-capa defined.\n";
+		    $errorCount++;
+		}
+	    }	   
+	    #######################################
+            # Check: checking the usage of the "R"-capa.
+	    #######################################
+	    if($release !~ /^\s*$/ && $lastActiveRowType == 3)
+	    {
+		# You should not use R-capa with the below capabilities
+		if( $capaWriteUserData   =~ /R/i ||
+		    $capaWriteDeviceData =~ /R/i ||
+		    $capaSidWrite        =~ /R/i
+		    )
+		{
+		    print "Row $row: R-capa should not be used with association of Write-related capas.\n";
+		    $errorCount++;
+		}
+		
+		# In 99% cases you should allow R-to be always "alwayspass". Thus we report this as an error.
+		if( $capaNone            =~ /R/i ||
+		    $capaAll             =~ /R/i ||
+		    $capaAllMinusTcb     =~ /R/i ||
+		    $capaNetworkServices =~ /R/i ||
+		    $capaLocalServices   =~ /R/i ||
+		    $capaReadUserData    =~ /R/i ||
+		    $capaWriteUserData   =~ /R/i ||
+		    $capaLocation        =~ /R/i ||
+		    $capaReadDeviceData  =~ /R/i ||
+		    $capaWriteDeviceData =~ /R/i ||
+		    $capaProtServ        =~ /R/i ||
+		    $capaDrm             =~ /R/i ||
+		    $capaSwEvent         =~ /R/i ||
+		    $capaPowerMgmt       =~ /R/i ||
+		    $capaAllFiles        =~ /R/i ||
+		    $capaDiskAdmin       =~ /R/i ||
+		    $capaNetworkControl  =~ /R/i ||
+		    $capaMultiMediaDD    =~ /R/i ||
+		    $capaCommDD          =~ /R/i ||
+		    $capaTCB             =~ /R/i ||
+		    $capaTrustedUI       =~ /R/i ||
+		    $capaUserEnv         =~ /R/i ||       
+		    $capaSurroundingsDD  =~ /R/i ||
+		    $capaSidRead         =~ /R/i ||
+		    $capaSidWrite        =~ /R/i
+		    )
+		{
+		    print "Row $row: NOTE: only sensitive data (passwords and alike) should be protected for reading.\n";
+		    print "          In normal case read should be allowed for everyone (== AlwaysPass-capa).\n";
+			print "          Depending on the mening of key this is/is not an error (99% of cases this is an error).\n";
+		    $errorCount++;
+		}
+	    }	   
+	    #######################################
+            # Check: capability colums
+	    #######################################
+	    $errorCount += checkCapability($row,$capaNone,"None");
+	    $errorCount += checkCapability($row,$capaAll,"All");
+	    $errorCount += checkCapability($row,$capaAllMinusTcb,"All - TCB");
+	    $errorCount += checkCapability($row,$capaNetworkServices,"NetworkServices");
+	    $errorCount += checkCapability($row,$capaLocalServices,"Local Services");
+	    $errorCount += checkCapability($row,$capaReadUserData,"ReadUserData");
+	    $errorCount += checkCapability($row,$capaWriteUserData,"WriteUserData");
+	    $errorCount += checkCapability($row,$capaLocation,"Location");
+	    $errorCount += checkCapability($row,$capaReadDeviceData,"ReadDeviceData");
+	    $errorCount += checkCapability($row,$capaWriteDeviceData,"WriteDeviceData");
+	    $errorCount += checkCapability($row,$capaProtServ,"ProtServ");
+	    $errorCount += checkCapability($row,$capaDrm,"DRM");
+	    $errorCount += checkCapability($row,$capaSwEvent,"SwEvent");
+	    $errorCount += checkCapability($row,$capaPowerMgmt,"PowerMgmt");
+	    $errorCount += checkCapability($row,$capaAllFiles,"AllFiles");
+	    $errorCount += checkCapability($row,$capaDiskAdmin,"DiskAdmin");
+	    $errorCount += checkCapability($row,$capaNetworkControl,"NetworkControl");
+	    $errorCount += checkCapability($row,$capaMultiMediaDD,"MultiMediaDD");
+	    $errorCount += checkCapability($row,$capaCommDD,"CommDD");
+	    $errorCount += checkCapability($row,$capaTCB,"TCB");
+	    $errorCount += checkCapability($row,$capaAlwaysPass,"AlwaysPass");
+	    $errorCount += checkCapability($row,$capaUserEnv,"UserEnvironment");
+	    $errorCount += checkCapability($row,$capaSurroundingsDD,"SurroundingsDD");
+	    if($capaSidRead !~ /^\s*$/ && $capaSidRead !~ /^0x[0-9]{8}$/)
+	    {
+		print "Row $row: the Sid Read-column has invalid value. Only 1 sid is allowed in hex format.\n";
+		$errorCount++;
+	    }
+	    if($capaSidWrite !~ /^\s*$/ && $capaSidWrite !~ /^0x[0-9]{8}$/)
+	    {
+		print "Row $row: the Sid Write-column has invalid value. Only 1 sid is allowed in hex format.\n";
+		$errorCount++;
+	    }
+
+	    #######################################
+            # Check: capability colums limitations
+	    # max capability checks are:
+	    #  7 capabilities
+	    #  1 sid and 3 capabilities
+	    #######################################
+	    my @rList;
+	    my @wList;
+	    addCapability(\@rList,\@wList,$capaNone,"AlwaysPass");
+	    addCapability(\@rList,\@wList,$capaAlwaysPass,"AlwaysPass");
+	    addCapability(\@rList,\@wList,$capaNetworkServices,"NetworkServices");
+	    addCapability(\@rList,\@wList,$capaLocalServices,"Local Services");
+	    addCapability(\@rList,\@wList,$capaReadUserData,"ReadUserData");
+	    addCapability(\@rList,\@wList,$capaWriteUserData,"WriteUserData");
+	    addCapability(\@rList,\@wList,$capaLocation,"Location");
+	    addCapability(\@rList,\@wList,$capaReadDeviceData,"ReadDeviceData");
+	    addCapability(\@rList,\@wList,$capaWriteDeviceData,"WriteDeviceData");
+	    addCapability(\@rList,\@wList,$capaProtServ,"ProtServ");
+	    addCapability(\@rList,\@wList,$capaDrm,"DRM");
+	    addCapability(\@rList,\@wList,$capaSwEvent,"SwEvent");
+	    addCapability(\@rList,\@wList,$capaPowerMgmt,"PowerMgmt");
+	    addCapability(\@rList,\@wList,$capaAllFiles,"AllFiles");
+	    addCapability(\@rList,\@wList,$capaDiskAdmin,"DiskAdmin");
+	    addCapability(\@rList,\@wList,$capaNetworkControl,"NetworkControl");
+	    addCapability(\@rList,\@wList,$capaMultiMediaDD,"MultiMediaDD");
+	    addCapability(\@rList,\@wList,$capaCommDD,"CommDD");
+	    addCapability(\@rList,\@wList,$capaTCB,"TCB");
+	    addCapability(\@rList,\@wList,$capaTrustedUI,"TrustedUI");
+	    addCapability(\@rList,\@wList,$capaUserEnv,"UserEnvironment");
+	    addCapability(\@rList,\@wList,$capaSurroundingsDD,"SurroundingsDD");
+
+	    my $rSidDefined = 0;
+	    if($capaSidRead !~ /^\s*$/)
+	    {
+		$rSidDefined = 4;
+	    }
+	    my $wSidDefined = 0;
+	    if($capaSidWrite !~ /^\s*$/)
+	    {
+		$wSidDefined = 4;
+	    }
+	    
+	    if((scalar(@rList) + $rSidDefined) > 7)
+	    {
+		print "Row $row: To many Read capability checks defined. Allowed max amounts are:\n";
+		print "          (7 capabilities) or (1 sid and 3 capabilities)\n";  
+		$errorCount++;
+	    }
+	    if((scalar(@wList) + $wSidDefined) > 7)
+	    {
+		print "Row $row: To many Write capability checks defined. Allowed max amounts are:\n";
+		print "          (7 capabilities) or (1 sid and 3 capabilities)\n";  
+		$errorCount++;
+		
+	    }
+	}	
+    }
+    
+    if($errorCount < 1)
+    {
+	print "No content errors\n";
+    }
+}
+
+
+###########################################################################
+# Makes syntax checks that the given name is according to specification
+#
+#
+# Params: file name
+#
+###########################################################################
+sub checkCentrepKeySheetName
+{
+    my $name = shift;
+   
+    # ----------------------------------------------------------------  
+    # check name syntax
+    # ----------------------------------------------------------------      
+    if($name =~ /[A-Z]/)
+    {
+	print "Sheet: $name, no capital letters allowed\n";
+    }
+    if($name !~ /^[a-z0-9\_\.]+$/)
+    {
+	print "Sheet: $name, non valid characters in the name. (0-9 a-z _ and . are allowed\n";
+    }
+    if($name !~ /^keys_[a-z0-9\_]+\.xls$/)
+    {
+	print "Sheet: \"$name\", syntax should be \"keys_<modulename>.xls\"\n";
+    }
+	
+}
+
+1;
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/cenrep_keys_syntax_checker.pl	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+#
+#####################################
+# Run with -h to get help
+######################################
+use strict;
+use lib   ".";
+use Win32::OLE qw(in with);
+use Win32::OLE::Const 'Microsoft Excel';
+use Cwd;
+use Getopt::Long;
+use File::Basename;
+use excel_support;  # Own perl module that contains the reading of memory-sheets
+use cenrep_keys;  # Own perl module that contains the reading of memory-sheets
+
+###########################################################################
+# Function that gets a dir as parameter and reads the list of excel files from the
+# given directory.
+#
+# Params: a directory name
+#
+# Return value: a reference to a list of filenames.
+###########################################################################
+sub getExcelFilesFromDir
+{
+    my $dir = shift;
+    
+    # the given dir should be relative to the dir, where the script is executed.
+    if($dir !~ /^[\\\/]/ && $dir !~ /^[A-Za-z]:/)
+    {
+	$dir =  cwd . "\\$dir"; 
+    }
+    my @files;
+    @files = <$dir\\*.xls >;
+   
+    return \@files;
+}
+
+
+###################################################
+# Function that reads the file names from the given file.
+# THe information is read from Column A and 1st empty row indicates
+# end of input.
+#
+# Params: fileNameRead, refToExcelApp
+###################################################
+sub getExcelFilesFromFile
+{
+    my $file = shift;
+    my $refToExcel = shift;
+    
+    my @fileList;
+    # ----------------------------------------------------------------  
+    # Open the file and get the worksheet
+    # ----------------------------------------------------------------  
+    my $refToWb =  openWorkbook( $file,$refToExcel);
+    my $refToWorkSheet = getWorkSheet( $refToWb,"Info");
+    
+    #------------------------------------------------------------
+    # Read the needed rows from the row, until empty row found
+    #------------------------------------------------------------
+    my $row;
+    for( $row = 1;; $row++ ) 
+    {	         
+	my $fileName = $$refToWorkSheet->Cells( $row, 1  )->{ 'Value' };
+	
+	if(!defined($fileName) || $fileName =~ /^\s*$/)
+	{
+	    last;
+	}
+
+	push(@fileList,$fileName);
+    }
+	
+    return \@fileList;
+}
+
+###########################################################################
+# Main function, 
+###########################################################################
+sub main
+{
+    my $refToExcelFiles = shift;
+    my $refToExcel = shift;
+    my $ignoreWarnings = shift;
+
+    my %reshHash;
+    my $refToWorkSheet;
+    
+    my $errorsFound = 0;
+
+    # Loop through each found excel sheet. This will open one file after each other
+    # and parse information into the hashes defined above.
+    foreach my $file ( @{$refToExcelFiles} ) 
+    {
+	$file =~ /[\\\/]([a-zA-Z0-9\-_\.\s\&]+\.xls)/;
+	print "\n--------------------------------------------\nReading: $1\n";
+
+	my ($name,$path,$suffix) = fileparse($file,qr{\.xls});
+	checkCentrepKeySheetName("$name$suffix");
+	# ----------------------------------------------------------------  
+	# Open the file
+	# ----------------------------------------------------------------  
+	my $refToWb = openWorkbook( $file,$refToExcel);
+	
+	# ----------------------------------------------------------------  
+	# Read the information from the worksheets
+	# ----------------------------------------------------------------
+	for( my $i = 0; $i < $$refToWb->Worksheets->Count; $i++)
+	{
+	    my $workSheet = $$refToWb->WorkSheets($i + 1);
+	    $refToWorkSheet = getWorkSheet( $refToWb,$workSheet->Name);
+	    if(checkCentrepKeyInfo( $refToWorkSheet,$ignoreWarnings))
+	    {
+		$errorsFound = 1;
+	    }
+	}
+	# "delete" the workbooks, this closes the excel application	    
+	$$refToWb->Close(0);
+	undef $$refToWb;
+	undef $refToWb;
+    }
+
+    return $errorsFound;
+}
+
+###########################################################################
+# Shows help.
+#
+# Params: -
+#
+# Return: -
+#
+###########################################################################
+sub usage
+{
+    print "\n";
+    print "\n";
+    print "This script reads all the cenrep keys sheets from the given\n";
+    print "directory and makes a syntax check for them.\n";
+    print "\n";
+    print "Usage:\n";
+    print "  $0 [-h|-help] (-d <cenrepSheetDir> | -f <excelSheetName>) \n";
+    print "\n";
+    print "Options:\n";
+    print "  -h                  : Show this help\n";
+    print "  -help               : Show this help\n";
+    print "  -d <sheetDir>       : relative path from the dir where this script is run\n";
+    print "                        to the directory where the cenrep-sheets exist.\n";
+    print "  -e <excelSheetName> : name of the sheet, that specifies the read excel sheet names in the column A.\n";
+    print "                        No empty rows allowed, reading is stopped, when the 1st empty row is found.\n";	
+    print "                        The sheet name defining the files inside Workbook has to be \"Info\".\n";	
+    print "                        Also no header expected for the column (reading starts from row 1)\n";
+    print "  -w                  : Ignores warning messages\n";
+    print "  -h                  : Show this help\n";
+    print "\n";
+    print "You have specify either -d or -e, but not both at the same time.\n";
+    print "\n";
+    print "Example usage:\n";
+    print "    perl $0  -d cenrep\n"; 
+    print "\n";
+    print "Known issues:\n";
+    print "   - The script will give an error, if directory names in the path contain spaces\n";
+    print "\n";
+    print "\n";
+
+    exit(0);
+}
+###########################################################################
+# Parses the command line parameters from ARGV
+#
+# Params: -
+#
+# Return: -		    
+#
+###########################################################################
+sub parseCmdLine
+{
+    my $dir = "";
+    my $file = "";
+    my $sheetFile = "";
+    my $ignoreWarnings = 0;
+    
+    if( ! GetOptions('d:s'      => \$dir,
+		     's:s'      => \$sheetFile,
+		     'f:s'      => \$file,
+		     'h'        => \&usage,
+		     'w'        => \$ignoreWarnings,
+		     'help'     => \&usage,
+		     '<>'       => \&usage))
+    {
+	exit(1);
+    }
+    
+    if($dir ne "" and $file ne "" )
+    {
+	print "\nError: The file and directory arguments can't be specified at the same time.\n";
+	exit(1);
+    }
+    elsif($dir eq "" and $file eq "" )
+    {
+	usage;
+	print "\n\nError: You have to specify either the  -d or -f argument.\n";
+	exit(1);
+    }
+    
+    
+    return ($dir,$file,$sheetFile,$ignoreWarnings);
+}
+
+
+###################################################
+# Actual program
+###################################################
+my $sheetDir;
+my $file;
+my $sheetFile;
+my $ignoreWarnings;
+
+($sheetDir,$file,$sheetFile,$ignoreWarnings) = parseCmdLine;
+
+# ----------------------------------------------------------------  
+# Get excel application
+# ----------------------------------------------------------------  
+my $refToExcel = getExcelApp();
+
+#-----------------------------------------------------------------
+# There are 2 options how the user can give the if-sheet names handled:
+# 1) He gives the directory where all files are located
+# 2) He gives an excel sheet, which contains all the files in column A.
+#-----------------------------------------------------------------
+my $refToExcelFilesList;
+
+if($sheetFile !~ /^\s*$/)
+{
+    my @list;
+    push(@list,$sheetFile);
+    $refToExcelFilesList =  \@list;
+}
+if($sheetDir !~ /^\s*$/)
+{
+    # Read the filenames from the directory given
+    $refToExcelFilesList = getExcelFilesFromDir $sheetDir;
+}
+else
+{
+    # Read the filenames from the excel file given
+     $refToExcelFilesList = getExcelFilesFromFile $file, $refToExcel;
+}
+
+#-----------------------------------------------------------------
+# The main function that parses the information
+#-----------------------------------------------------------------
+
+my $errors = main $refToExcelFilesList,$refToExcel,$ignoreWarnings;
+
+#-----------------------------------------------------------------
+# quit excel and "delete" the instances.
+#-----------------------------------------------------------------
+quitExcelApp($refToExcel);
+
+exit $errors;
+
+
+
+
+
+
+
+
+
+
+
Binary file internetradio2.0/cenrep/cenrep_start.ini has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/excel_support.pm	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,184 @@
+#
+# 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:
+#
+###################################################
+###################################################
+# This module contains common helper functions for 
+# handling excel sheets from perl.
+###################################################
+###################################################
+package excel_support;
+
+##########################################
+# Libraries used
+##########################################
+use strict;
+use Win32::OLE qw(in with);
+use Win32::OLE::Const 'Microsoft Excel';
+use Exporter ();     # Needed to make constants available to caller.
+
+##########################################
+# Defining all the "global" variables, that we are using.
+##########################################
+use vars qw(
+            @ISA
+            @EXPORT
+            );
+
+
+@ISA = qw(Exporter); # Inherit from Exporter module (import method needed).
+
+# Define all the functions defined by this module
+use subs qw(
+	    getExcelApp
+	    quitExcelApp
+	    openWorkbook
+	    getWorkSheet
+	    getIndexByColName
+	    );
+
+##########################################
+# Define the exports from this module that can be used
+# Outside
+##########################################
+@EXPORT = qw(
+             &getExcelApp
+	     &quitExcelApp
+	     &openWorkbook
+	     &getWorkSheet
+	     &getIndexByColName
+             );
+
+
+###########################################################################
+# Function that creates an excel application and returns a reference to it.
+#
+# Params: -
+#
+# Return value: a reference to a excel application
+###########################################################################
+sub getExcelApp
+{
+    # get already active Excel application or open new
+    my $excel = Win32::OLE->GetActiveObject('Excel.Application') || 
+      Win32::OLE->new('Excel.Application', 'Quit');
+    
+    return \$excel;									    
+}
+
+###########################################################################
+# Function that deletes an excel application given
+#
+# Params: refToExcelApp
+#
+# Return value: a reference to a excel application
+###########################################################################
+sub quitExcelApp
+{
+    my $refToExcelApp = shift;
+
+    $$refToExcelApp->Quit();
+    # For some reason this needs to be done twice inorder to close the excel.
+    undef $$refToExcelApp;
+    undef $refToExcelApp;
+}
+
+###########################################################################
+# Function opens the given filename as workbook
+#
+# Params: Filename, referenceToExcelApp
+#
+# Return: reference to a workbook object 
+###########################################################################
+sub openWorkbook
+{
+    my $filename = shift;
+    my $refToExcel = shift;
+
+    # Open the workbook as read only
+    my $workBook = ${$refToExcel}->Workbooks->Open( { FileName => $filename, ReadOnly=> xlReadOnly } );
+    die "$filename: cannot open file\n" unless (defined $workBook );
+
+    return \$workBook;
+}
+
+###########################################################################
+# Function finds the wanted worksheet from the given workbook
+#
+# Params: referenceToWorkbook,wantedSheetName
+#
+# Return: reference to a worksheet object 
+###########################################################################
+sub getWorkSheet
+{
+    my $refToWb = shift;
+    my $wantedSheetName = shift;
+    
+    my $workSheet;
+
+    # Loop through all the workbooks and find a matching name.
+    for( my $i = 0; $i < $$refToWb->WorkSheets->Count; $i++)
+    {
+	# The index is from 1-> and the counter starts from 0 => +1.
+	$workSheet = $$refToWb->WorkSheets($i + 1);
+        if( $workSheet->Name eq $wantedSheetName ) 
+        {
+	    # match found, return reference to the found worksheet
+	    return \$workSheet;
+	}
+    }
+
+    # No match found, error, thus return undef.
+    return undef;
+}           
+
+
+###########################################################################
+# Function that finds the index of the column based on given name
+#
+# Params: referenceToWorksheet,
+#         wantedColName   (== the wanted column name)
+#         maxcolCount     (== how many columns are checked for the given name) 
+#
+# Return: index to Column, 
+#         -1, if no match found
+###########################################################################
+sub getIndexByColName
+{
+    my $refToWorksheet = shift;
+    my $colName = shift;
+    my $maxColCount = shift;
+    
+    my %i;
+    # loop through columns to find the index, which 
+    # matches to the given column name.
+    for( my $i = 1; $i < $maxColCount; $i++ )
+    {
+	# The headers are always in row 1.
+	my $colNameFromSheet = $$refToWorksheet->Cells( 1, $i  )->{ 'Value' };
+
+	# check the name against the given name. If same then return the index.
+        if($colName eq $colNameFromSheet)
+	{
+	    return $i;
+	}	       
+    }
+
+    # No match found, return -1 as an error.
+    return -1;
+}
+
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/gather_cenrep_to_storable.pl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,326 @@
+#
+# 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:
+#
+#####################################
+# Run with -h to get help
+######################################
+use strict;
+use lib   ".";
+use Win32::OLE qw(in with);
+use Win32::OLE::Const 'Microsoft Excel';
+use Cwd;
+use Getopt::Long;
+use File::Copy;
+use excel_support;  # Own perl module that contains the reading of cenrep key-sheets
+use cenrep_keys;  # Own perl module that contains the reading of cenrep key-sheets
+use Storable qw(nstore_fd);
+use Data::Dumper;
+
+
+###########################################################################
+# Function that gets a dir as parameter and reads the list of excel files from the
+# given directory.
+#
+# Params: a directory name
+#
+# Return value: a reference to a list of filenames.
+###########################################################################
+sub getExcelFilesFromDir
+{
+    my $dir = shift;
+    
+    # the given dir should be relative to the dir, where the script is executed.
+    if($dir !~ /^[\\\/]/ && $dir !~ /^[A-Za-z]:/)
+    {
+	$dir =  cwd . "\\$dir"; 
+    }
+    my @files;
+    @files = <$dir\\*.xls >;
+   
+    return \@files;
+}
+
+
+###################################################
+# Function that reads the file names from the given file.
+# THe information is read from Column A and 1st empty row indicates
+# end of input.
+#
+# Params: fileNameRead, refToExcelApp
+###################################################
+sub getExcelFilesFromFile
+{
+    my $file = shift;
+    
+    my @fileList;
+    # ----------------------------------------------------------------  
+    # Open the file
+    # ----------------------------------------------------------------  
+    open(IN,$file) || die "Unable to open: $file";
+
+    #------------------------------------------------------------
+    # Read file line by line
+    #------------------------------------------------------------
+    while(<IN>)
+    {
+	my $fileWithPath = $_;
+	chomp($fileWithPath);
+
+	if(! -f $fileWithPath)
+	{
+	    print STDERR "Warning: input file not found: $fileWithPath\n";
+	}
+	else
+	{
+	    push(@fileList,$fileWithPath);
+	}
+    }
+	
+    return \@fileList;
+}
+
+
+###########################################################################
+# Main function, 
+###########################################################################
+sub readConfig
+{
+    my $refToExcelFiles = shift;
+    my $refToExcel = shift;
+    
+    my %reshHash;
+    my $refToWorkSheet;
+    
+    # Loop through each found excel sheet. This will open one file after each other
+    # and parse information into the hashes defined above.
+    foreach my $file ( @{$refToExcelFiles} ) 
+    {
+	print "   Reading: $file\n";
+
+	# ----------------------------------------------------------------  
+	# Open the file
+	# ----------------------------------------------------------------  
+	my $refToWb = openWorkbook( $file,$refToExcel);
+
+	# ----------------------------------------------------------------  
+	# Check, that the template version is the one we support. If not
+	# the file is skipped and warning is written to user.
+	# ----------------------------------------------------------------  
+#  	if( isSupported($refToWb) == 0)
+#  	{
+#  	    # "delete" the workbooks, this closes the excel application
+#  	    undef $$refToWb;
+#  	    undef $refToWb;
+#  	    print STDERR "Warning: Unsupported template version in file: $file\n";
+#  	    next;
+#  	}
+
+	
+	# ----------------------------------------------------------------  
+	# Read the information from the worksheets
+	# ----------------------------------------------------------------
+	$refToWorkSheet = getWorkSheet( $refToWb,"Key values");
+	readCentrepKeyInfo( $refToWorkSheet,\%reshHash,undef,undef,$file);
+
+#  	for( my $i = 0; $i < $$refToWb->Worksheets->Count; $i++)
+#  	{
+#  	    my $workSheet = $$refToWb->WorkSheets($i + 1);
+#  	    $refToWorkSheet = getWorkSheet( $refToWb,$workSheet->Name);
+#  	    readCentrepKeyInfo( $refToWorkSheet,\%reshHash);
+#  	}
+	# "delete" the workbooks, this closes the excel application
+	$$refToWb->Close(0);
+	undef $$refToWb;
+	undef $refToWb;
+    }
+
+#    $Data::Dumper::Indent = 1;
+#     print Dumper(%reshHash);
+#      exit 1;
+
+    return \%reshHash;
+}
+
+###########################################################################
+# Shows help.
+#
+# Params: -
+#
+# Return: -
+#
+###########################################################################
+sub usage
+{
+    $0 =~ /([0-9a-zA-Z\_\.]+)$/;
+    my $filename = $1;
+    print "\n";
+    print "\n";
+    print "This script is intended to be used to generate ini-files for Central Repository\n";
+    print "based on the information in the cenrep key excel-sheet(s). These sheets define\n";
+    print "the content of the ini-files.\n";
+    print "\n";
+    print "Rough discruption on how the values for the ini-files are determinated:\n";
+    print "1) Content of sheets identified by -d or -s are read.\n";
+    print "2) From sheets read in step 1 the information is parsed based on the\n";
+    print "   information specified by -p, -r and -v\n";
+    print "3) [optional] Default values specified by the steps 1 and 2 can be\n";
+    print "    overriden by defining information in other sheets, specified by parameters\n";
+    print "    -vd,-vs and -vv\n";
+    print "\n";
+    print "\n";
+    print "Usage:\n";
+    print "  $filename [-h|-help]\n";
+    print "                (-d <dirName> | -s <sourceFilename>)\n";
+    print "                [ -f <resultFile>]\n";
+    print "\n";
+    print "Options:\n";
+    print " -h                  : Show this help\n";
+    print " -help               : Show this help\n";
+    print " -f <resultFile>     : The storable file name.\n";
+    print " -d <dirName>        : The dir, which contains the sheets, which are read. Relative path to the\n";
+    print "                       current dir or absoluth path. NOTE: the dir name can't contain any spaces.\n";
+    print " -s <sourceFilename>       : The text filename, which contains sheet name with absoluth\n";
+    print "                             path names (1/row)\n";
+    print "                              (see rough description above) Optional.\n";
+    print "\n";
+    print "\n";
+    print "You have specify either -d or -s, but not both at the same time.\n";
+    print "\n";
+    print "\n";
+    print "\n";
+}
+###########################################################################
+# Parses the command line parameters from ARGV
+#
+# Params: -
+#
+# Return: -		    
+#
+###########################################################################
+sub parseCmdLine
+{
+    my $sheetDirname = "";
+    my $sheetFilename = "";
+    my $resultFilename = "";
+    my $showHelp = 0;
+
+    if( ! GetOptions('d:s'      => \$sheetDirname,
+		     's:s'      => \$sheetFilename,
+		     'f:s'      => \$resultFilename,
+		     'h'        => \$showHelp,
+		     'help'     => \$showHelp,
+		     '<>'       => \&usage))
+    {
+	usage();
+	exit(1);
+    }
+    
+    my $error = 0;
+    if($sheetDirname ne "" and $sheetFilename ne "")
+    {
+	print "\nError: The -s and -d arguments can't be specified at the same time.\n";
+	$error = 1;
+    }
+    elsif($sheetDirname eq "" and $sheetFilename eq "")
+    {
+	print "\n\nError: You have to specify either the -d or -s argument.\n";
+	$error = 1;
+    }
+
+    if($resultFilename eq "")
+    {
+	print "\nError: You have to specify -rf parameter.\n";
+	$error = 1;
+    }
+    
+    if($error)
+    {
+	usage();
+	exit(1);
+    }
+    elsif($showHelp)
+    {
+	usage();
+    }
+    
+    return ($sheetDirname,$sheetFilename,$resultFilename);
+}
+
+
+###########################################################################
+# reads either default config or variant config into the result hash.
+# Note that the variant hash can't delete any keys, just override them.
+###########################################################################
+sub readSingleConfig
+{
+    my $refToExcel      = shift;
+    my $sheetDirname    = shift;
+    my $sheetFilename   = shift;
+    
+    #-----------------------------------------------------------------
+    # There are 2 options how the user can give the if-sheet names handled:
+    # 1) He gives the directory where all files are located
+    # 2) He gives an excel sheet, which contains all the files in column A.
+    #-----------------------------------------------------------------
+    my $refToExcelFilesList;
+
+    if($sheetDirname !~ /^\s*$/)
+    {
+	# Read the filenames from the directory given
+	$refToExcelFilesList = getExcelFilesFromDir $sheetDirname;
+    }
+    elsif($sheetFilename !~ /^\s*$/)
+    {
+	# Read the filenames from the excel file given
+	$refToExcelFilesList = getExcelFilesFromFile $sheetFilename;
+    }
+    else
+    {
+	# nothing to do, just exit function
+	return;
+    }
+    #-----------------------------------------------------------------
+    # The main function that parses the information from sheets
+    #-----------------------------------------------------------------
+
+    return readConfig($refToExcelFilesList,$refToExcel);
+}
+
+###################################################
+# Actual program
+###################################################
+my($sheetDirname,$sheetFilename,$resultFilename) = parseCmdLine;
+
+# ----------------------------------------------------------------  
+# Get excel application
+# ----------------------------------------------------------------  
+my $refToExcel = getExcelApp();
+
+#-----------------------------------------------------------------
+# read the default configuration hash
+#-----------------------------------------------------------------
+my $refToResultHash = readSingleConfig($refToExcel,$sheetDirname,$sheetFilename);
+
+#-----------------------------------------------------------------
+# quit excel and "delete" the instances.
+#-----------------------------------------------------------------
+quitExcelApp($refToExcel);
+
+
+open OUT, ">$resultFilename" or die "Unable to open $resultFilename: $!";
+binmode OUT;
+nstore_fd $refToResultHash, \*OUT;
+close OUT;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/generate_cenrep_inifile.pl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1478 @@
+#
+# 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:
+#
+######################################
+# Run with -h to get help
+######################################
+use strict;
+use lib   ".";
+use open OUT => ':raw';
+use Win32::OLE qw(in with);
+use Win32::OLE::Const 'Microsoft Excel';
+use Cwd;
+use Getopt::Long;
+use File::Copy;
+use Storable qw(fd_retrieve);
+use excel_support;  # Own perl module that contains the reading of memory-sheets
+use cenrep_keys;  # Own perl module that contains the reading of memory-sheets
+
+
+use Data::Dumper;
+
+# this is the bit mask that is put into the metadata in the ini-file, when
+# backup is set on.
+my $globalBackupValue = 0x01000000;
+
+###########################################################################
+###########################################################################
+sub printStr
+{
+    my $to = shift;
+    my $str = shift;
+
+    for (my $i = 0; $i < length($str); $i++) 
+    {
+	printf $to "%s\0", substr($str,$i, 1);
+    }
+}
+
+###########################################################################
+###########################################################################
+sub printNewLine
+{
+    my $to = shift;
+    my $fileName = shift;
+    
+    print $to "\x0D\x00\x0A\x00";
+
+    return;
+}
+#      # We need to close the file temporarely so that we can
+#      # write a new line into it differently. It seems that
+#      # unicode file name writing is somehow wrong in the 
+#      # used perl versio (ActivePerl 5.8.4)
+    
+#      close $to;
+#      # Writing the new line into the end of the line
+#      open $to,">>$fileName";
+#      binmode OUT;
+#      print OUT chr(13);
+#      print OUT chr(0);
+#      print OUT chr(10);
+#      print OUT chr(0);
+#      close OUT;
+    
+#      # Opening the file again to
+#  #    open(OUT,">>:encoding(UTF-16LE)",$fileName) || die "unable to open $fileName";
+#      open(OUT,">>$fileName") || die "unable to open $fileName";
+#  }
+
+###########################################################################
+# Function that gets a dir as parameter and reads the list of excel files from the
+# given directory.
+#
+# Params: a directory name
+#
+# Return value: a reference to a list of filenames.
+###########################################################################
+sub getExcelFilesFromDir
+{
+    my $dir = shift;
+    
+    # the given dir should be relative to the dir, where the script is executed.
+    if($dir !~ /^[\\\/]/ && $dir !~ /^[A-Za-z]:/)
+    {
+	$dir =  cwd . "\\$dir"; 
+    }
+    my @files;
+    @files = <$dir\\*.xls >;
+   
+    return \@files;
+}
+
+
+###################################################
+# Function that reads the file names from the given file.
+# THe information is read from Column A and 1st empty row indicates
+# end of input.
+#
+# Params: fileNameRead, refToExcelApp
+###################################################
+sub getExcelFilesFromFile
+{
+    my $file = shift;
+    
+    my @fileList;
+    # ----------------------------------------------------------------  
+    # Open the file
+    # ----------------------------------------------------------------  
+    open(IN,$file) || die "Unable to open: $file";
+
+    #------------------------------------------------------------
+    # Read file line by line
+    #------------------------------------------------------------
+    while(<IN>)
+    {
+	my $fileWithPath = $_;
+	chomp($fileWithPath);
+
+	if(! -f $fileWithPath)
+	{
+	    print STDERR "Warning: input file not found: $fileWithPath\n";
+	}
+	else
+	{
+	    push(@fileList,$fileWithPath);
+	}
+    }
+	
+    return \@fileList;
+}
+
+###################################################
+###################################################
+sub isRemoved
+{
+    my $platId = shift;
+    my $platRel = shift;
+    my $removed = shift;
+
+    # If not defined => not removed
+    if(! defined($removed))
+    {
+	return 0;
+    }
+   
+    if($removed =~ /$platId\s+([0-9]+\.[0-9]+)/i)
+    {
+	my $rel = $1;
+	if($rel <= $platRel)
+	{
+	    return 1;
+	}
+    }
+    return 0;    
+}
+###################################################
+# returns the official capa name from internal name.
+# this is implemented since the capa names in cenrep keys
+# migth not be the same as official names in the ini-file.
+###################################################
+sub getCapaValue
+{
+    my $formatNbr      = shift; # not used at the moment.
+    my $refToCapaList  = shift;
+
+    #########################
+    # official way, caps as strings
+    #########################
+
+#      my $retVal = "";
+#      my $isFirst = 1;
+#      foreach my $capa (@$refToCapaList)
+#      {
+#  	next if($capa =~ /^\s*$/);
+#  	if(!$isFirst)
+#  	{
+#  	    $retVal .= ",";
+#  	}
+#  	$retVal .= $capa;
+
+#  	$isFirst = 0;
+#      }
+
+    #########################
+    # Caps as strings
+    #########################
+    my $retVal = "";
+    my @capaList;
+    foreach my $capa (@$refToCapaList)
+    {
+	next if($capa =~ /^\s*$/);
+
+	if( $capa =~ /ReadUserData/)
+	{
+	    push(@capaList,"ReadUserData"); 
+	}
+	elsif($capa =~ /WriteUserData/)
+	{
+	    push(@capaList,"WriteUserData");
+	}
+	elsif( $capa =~ /ReadDeviceData/)
+	{
+	    push(@capaList,"ReadDeviceData");
+	}
+	elsif($capa =~ /WriteDeviceData/)
+	{
+	    push(@capaList,"WriteDeviceData");
+	}
+	elsif($capa =~ /NetworkControl/)
+	{
+	    push(@capaList,"NetworkControl");
+	}
+	elsif($capa =~ /NetworkServices/)
+	{
+	    push(@capaList,"NetworkServices");
+	} 
+	elsif($capa =~ /Local Services/)
+	{
+	    push(@capaList,"LocalServices");
+	} 
+	elsif($capa =~ /Location/)
+	{
+	    push(@capaList,"Location");
+	} 
+	elsif($capa =~ /ProtServ/)
+	{
+	    push(@capaList,"ProtServ");
+	} 
+	elsif($capa =~ /DRM/)
+	{
+	    push(@capaList,"DRM");
+	} 
+	elsif($capa =~ /SwEvent/)
+	{
+	    push(@capaList,"SwEvent");
+	} 
+	elsif($capa =~ /PowerMgmt/)
+	{
+	    push(@capaList,"PowerMgmt");
+	} 
+	elsif($capa =~ /AllFiles/)
+	{
+	    push(@capaList,"AllFiles");
+	} 
+	elsif($capa =~ /DiskAdmin/)
+	{
+	    push(@capaList,"DiskAdmin");
+	} 
+	elsif($capa =~ /MultiMediaDD/)
+	{
+	    push(@capaList,"MultimediaDD");
+	} 
+	elsif($capa =~ /CommDD/)
+	{
+	    push(@capaList,"CommDD");
+	} 
+	elsif($capa =~ /TrustedUI/)
+	{
+	    push(@capaList,"TrustedUI");
+	} 
+	elsif($capa =~ /TCB/)
+	{
+	    push(@capaList,"TCB");
+	} 
+	elsif($capa =~ /AlwaysPass/  || $capa =~ /None/)
+	{
+	    push(@capaList,"alwayspass");
+	} 
+	elsif($capa =~ /UserEnvironment/)
+	{
+	    push(@capaList,"UserEnvironment");
+	} 
+	elsif($capa =~ /SurroundingsDD/)
+	{
+	    push(@capaList,"SurroundingsDD");
+	} 
+    }
+    
+    return join(",",@capaList);
+
+}
+###################################################
+# 3rd param syntax:
+# <release> 
+#     => { 
+#        "R" => (<capa1ForReading>,<capa2ForReading>)
+#        "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#        "value" => <value>
+#        "rfs"  => <0/1>
+#        "backup"  => <0/1>
+#         }
+#  
+###################################################
+sub getConfig
+{
+    my $platId = shift;
+    my $platRel = shift;
+    my $refToHash = shift;
+
+    my $currRel = "0";
+    my $currRef = undef;
+    foreach my $plat (sort keys %$refToHash)
+    {
+	if($plat =~ /$platId\s+([0-9]+\.[0-9]+)/i)
+	{
+	    my $tentativeRel = $1;
+	    if($tentativeRel > $currRel && $tentativeRel <= $platRel)
+	    {
+		$currRel = $tentativeRel;
+		$currRef = $$refToHash{$plat};
+	    }
+	}
+    }
+#      if($currRel > 0)
+#      {
+#  	print $$refToHash{$currRel}, "a\n";
+#  	return $$refToHash{$currRel};
+#      }
+    return $currRef;
+}
+
+###########################################################################
+# Main function, 
+###########################################################################
+sub readConfig
+{
+    my $refToExcelFiles = shift;
+    my $refToExcel = shift;
+    
+    my %reshHash;
+    my $refToWorkSheet;
+    
+    # Loop through each found excel sheet. This will open one file after each other
+    # and parse information into the hashes defined above.
+    foreach my $file ( @{$refToExcelFiles} ) 
+    {
+	print "   Reading: $file\n";
+
+	# ----------------------------------------------------------------  
+	# Open the file
+	# ----------------------------------------------------------------  
+	my $refToWb = openWorkbook( $file,$refToExcel);
+
+	# ----------------------------------------------------------------  
+	# Check, that the template version is the one we support. If not
+	# the file is skipped and warning is written to user.
+	# ----------------------------------------------------------------  
+#  	if( isSupported($refToWb) == 0)
+#  	{
+#  	    # "delete" the workbooks, this closes the excel application
+#  	    undef $$refToWb;
+#  	    undef $refToWb;
+#  	    print STDERR "Warning: Unsupported template version in file: $file\n";
+#  	    next;
+#  	}
+
+	
+	# ----------------------------------------------------------------  
+	# Read the information from the worksheets
+	# ----------------------------------------------------------------
+	for( my $i = 0; $i < $$refToWb->Worksheets->Count; $i++)
+	{
+	    my $workSheet = $$refToWb->WorkSheets($i + 1);
+	    $refToWorkSheet = getWorkSheet( $refToWb,$workSheet->Name);
+	    readCentrepKeyInfo( $refToWorkSheet,\%reshHash);
+	}
+	# "delete" the workbooks, this closes the excel application
+	$$refToWb->Close(0);
+	undef $$refToWb;
+	undef $refToWb;
+    }
+    return \%reshHash;
+}
+###########################################################################
+###########################################################################
+sub getKeyType
+{
+    my $key = shift;
+
+    return "string" if($key =~ /str/i);
+    return "int" if($key =~ /int/i);
+    return "real" if($key =~ /real/i);
+    return "binary" if($key =~ /bin/i);
+
+    return "unknown_type";
+}
+
+
+###########################################################################
+# Prints the Key and key type into the given output.
+# The format in which the key is printed is format specific.
+###########################################################################
+sub printKey
+{
+    my $to = shift;
+    my $formatNbr = shift;
+    my $key = shift;
+    my $keyType = shift;
+
+    $key =~ s/0x(0*)/0x/g;
+    # Add 0 if the key value is "0x" (cases, where the id == 0)
+    $key .= "0" if $key =~ /0x\s*$/;
+    printStr $to, $key . " " . $keyType . " ";
+
+    return;
+}
+
+###########################################################################
+# Prints the capabilities into the given output.
+# The format in which the capabilities are printed is format specific.
+###########################################################################
+sub printCapa
+{
+    my $to = shift;
+    my $formatNbr = shift;
+    my $refToCapaList = shift;
+    my $prefix = shift;
+    my $alwaysFail = shift;
+
+    if($formatNbr > 1)
+    {
+	if($alwaysFail && $formatNbr > 3)
+	{
+	    printStr \*OUT, " $prefix=alwaysfail";
+	}
+	elsif(defined($refToCapaList) && scalar(@$refToCapaList) > 0)
+	{
+	    my $capaStr = getCapaValue($formatNbr,$refToCapaList);
+	    printStr \*OUT, " $prefix=$capaStr" if($capaStr);
+	}
+    }
+}
+
+###########################################################################
+# Prints the Sid  capabilities into the given output.
+# The format in which the capabilities are printed is format specific.
+###########################################################################
+sub printSidCapa
+{
+    my $to = shift;
+    my $formatNbr = shift;
+    my $refToCapaList = shift;
+    my $prefix = shift;
+
+    if($formatNbr > 1)
+    {
+	if(defined($refToCapaList) && scalar(@$refToCapaList) > 0)
+	{
+	    # Only 1 SID is allowed
+	    printStr \*OUT, " $prefix=$$refToCapaList[0]";
+	}
+    }
+}
+
+###########################################################################
+# Prints the information about ranges
+###########################################################################
+sub printPlatSec
+{
+    my $to = shift;
+    my $formatNbr = shift;
+    my $refToUidSpecificHash = shift;
+    my $refToRangesHash = shift;
+    my $fileName = shift;
+    my $addDefCaps = shift;
+
+    #-------------------------------
+    # UID specific (default capabilities)
+    #-------------------------------
+    # we need to know if write / read was specified.
+    # if not and addDefCaps is defined => then be add the 
+    # default alwayspass to the file
+    my $readSpecified = 0;
+    my $writeSpecified = 0;
+
+    ###############################
+    # RSid-capa writing (format specific)
+    ###############################
+    my $refToCapaList = $$refToUidSpecificHash{"RSid"};
+    printSidCapa($to,$formatNbr,$refToCapaList,"sid_rd");
+    $readSpecified += scalar(@$refToCapaList) if defined($refToCapaList);
+    
+    ###############################
+    # R-capa writing (format specific)
+    ###############################
+    $refToCapaList = $$refToUidSpecificHash{"R"};
+    printCapa($to,$formatNbr,$refToCapaList,"cap_rd",0);
+    $readSpecified = scalar(@$refToCapaList) if defined($refToCapaList);
+    
+    # Add def caps if no caps were defined
+    if($addDefCaps > 0 && $readSpecified < 1)
+    {
+	printStr \*OUT, " cap_rd=alwayspass";
+
+    }
+
+    ###############################
+    # WSid-capa writing (format specific)
+    ###############################
+    $refToCapaList = $$refToUidSpecificHash{"WSid"};
+    printSidCapa($to,$formatNbr,$refToCapaList,"sid_wr");
+    $writeSpecified += scalar(@$refToCapaList) if defined($refToCapaList);
+    
+    ###############################
+    # W-capa writing (format specific)
+    ###############################
+    $refToCapaList = $$refToUidSpecificHash{"W"};
+    printCapa($to,$formatNbr,$refToCapaList,"cap_wr",0);
+    $writeSpecified = scalar(@$refToCapaList) if defined($refToCapaList);
+    
+    # Add def caps if no caps were defined
+    if($addDefCaps > 0 && $writeSpecified < 1)
+    {
+	printStr \*OUT, " cap_wr=alwayspass";
+
+    }
+
+    printNewLine($to,$fileName);
+    
+    #-------------------------------
+    # Ranges
+    #-------------------------------
+    foreach my $rangeFrom (keys %$refToRangesHash)
+    {
+	my $refToRangeFromHash = $$refToRangesHash{$rangeFrom};
+
+	foreach my $rangeTo (keys %$refToRangeFromHash)
+	{
+	    my $refToRangeToHash = $$refToRangeFromHash{$rangeTo};
+
+	    printStr $to, $rangeFrom . " " .$rangeTo;
+	    
+	    ###############################
+	    # RSid-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToRangeToHash{"RSid"};
+	    printSidCapa($to,$formatNbr,$refToCapaList,"sid_rd");
+	    
+	    ###############################
+	    # R-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToRangeToHash{"R"};
+	    printCapa($to,$formatNbr,$refToCapaList,"cap_rd",0);
+	
+	    ###############################
+	    # WSid-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToRangeToHash{"WSid"};
+	    printSidCapa($to,$formatNbr,$refToCapaList,"sid_wr");
+	    
+	    ###############################
+	    # W-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToRangeToHash{"W"};
+	    printCapa($to,$formatNbr,$refToCapaList,"cap_wr",0);
+	    
+	    printNewLine($to,$fileName);
+	}
+    }    
+}
+
+###########################################################################
+# Prints the information about metadata
+###########################################################################
+sub printMetadata
+{
+    my $to = shift;
+    my $formatNbr = shift;
+    my $refToUidSpecificHash = shift;
+    my $refToRangesHash = shift;
+    my $fileName = shift;
+
+    #-------------------------------
+    # UID specific metadata
+    #-------------------------------
+
+    my $metaData = 0;
+    if($$refToUidSpecificHash{"backup"})
+    {
+	$metaData += $globalBackupValue;
+    }
+    printStr $to, " $metaData";
+    printNewLine($to,$fileName);
+
+    
+    #-------------------------------
+    # Ranges
+    #-------------------------------
+    foreach my $rangeFrom (keys %$refToRangesHash)
+    {
+	my $refToRangeFromHash = $$refToRangesHash{$rangeFrom};
+
+	foreach my $rangeTo (keys %$refToRangeFromHash)
+	{
+	    my $refToRangeToHash = $$refToRangeFromHash{$rangeTo};
+
+	    printStr $to, $rangeFrom . " " .$rangeTo;
+
+	    my $metaData2 = 0;
+	    if($$refToRangeToHash{"backup"})
+	    {
+		$metaData2 += $globalBackupValue;
+	    }
+	    printStr $to, " $metaData2";
+	    printNewLine($to,$fileName);
+	}    
+    }
+}
+
+###########################################################################
+# Function that generates a text file for the Restore factory settings.
+# This file 
+###########################################################################
+sub generateRfsFile
+{
+    my $reshHash = shift;
+    my $rfsFileWithPath = shift;
+
+    open(OUT,">$rfsFileWithPath") || die "unable to open $rfsFileWithPath for writing";
+    print OUT "\xFF\xFE";
+
+    foreach my $uid (keys %$reshHash)
+    {
+	my $refToUidHash = $$reshHash{$uid};
+	$uid =~ s/^0x0*//g;
+	$uid = 0 if $uid =~ /^$/;
+	my $refToUidSpecificHash = $$refToUidHash{"uid_specific"};
+
+	# Uid specific rfs overwrites the key specific values
+	# Thus if this is set to yes => we can skip key specific values
+	if($$refToUidSpecificHash{"rfs"})
+	{	    
+	    printStr \*OUT, "CR $uid";
+	    printNewLine(\*OUT,$rfsFileWithPath);
+	    next;
+	}
+
+	# If we get here => uid was not set to yes for RFS.
+	# now we loop through each ke
+	########################
+	# print each key into the file.
+	########################
+	my $refToKeysHash = $$refToUidHash{"keys"};
+	my $isFirstInUid = 1;
+	foreach my $key (sort keys %$refToKeysHash)
+	{		
+	    my $refToKeyHash = $$refToKeysHash{$key};
+
+	    # Check, if the key was restored in RFS. 	    
+	    if($$refToKeyHash{"rfs"})
+	    {
+		# If this is the 1st key for this UI, then
+		# we print the keyword (CR) and the uid into the
+		# file.
+		if($isFirstInUid)
+		{
+		    $isFirstInUid = 0;
+		    printStr \*OUT, "CR $uid";
+		    
+		}
+		
+		# print the key into the file (after some modifications)
+		$key =~ s/^0x0*//g;
+		$key = 0 if $key =~ /^$/;
+		printStr \*OUT, " $key";
+	    }
+	}
+	# Print a newline if (and only if) there was keys that had rfs-flag
+	# on.
+	if(! $isFirstInUid)
+	{
+	    printNewLine(\*OUT,$rfsFileWithPath);
+	}
+    }  
+    close OUT;
+}
+
+###########################################################################
+# Function that generates all the ini (txt)-files for the central repository.
+# There are multiple formats, which are supported at the moment, since the
+# development in ongoing and syntax is still a little but unknown.
+###########################################################################
+sub generateIniFiles
+{
+    my $reshHash = shift;
+    my $dirname = shift;
+    my $formatNbr = shift;
+    my $addDefCaps = shift;
+
+    my $iniFileCount = 0;
+    my $keyCount = 0;
+
+    foreach my $uid (keys %$reshHash)
+    {
+	my $refToHash = $$reshHash{$uid};
+	$refToHash = $$refToHash{"keys"};
+	my $refToRangeHash = $$refToHash{"ranges"};
+	if(scalar(keys %$refToHash) < 1 && scalar(keys %$refToRangeHash))
+	{
+	    # Skip uid, if no keys and ranges
+	    next;
+	}
+	$iniFileCount++;
+
+	##################################
+	# Filename syntax is "uid.txt" without the 0x in the begining 
+	##################################
+	my $fileName = "$uid.txt";
+	$fileName =~ s/^0x//i;
+			     
+	# Add dir name into the filename. 
+	if($dirname !~ /^\s*$/)
+	{
+	    my $tmpFileName = $fileName;
+	    $fileName = $dirname;
+	    if($dirname !~ /[\\\/]$/)
+	    {
+		$fileName .=  "\\";
+	    }
+	    $fileName .= $tmpFileName;
+	}
+
+	########################
+        # Copy the start of the file into the new name
+	# (note that this migth become format specific, 
+	#  but is not at the moment).
+	########################
+	my $templateName = "cenrep_start.ini";
+	    
+	copy($templateName,$fileName) or die "Copy failed: $! : $fileName";
+	open(OUT,">>$fileName") || die "unable to open $fileName";
+	########################
+	# Print the [owner] section
+	########################
+	if($formatNbr > 2)
+	{
+	    my $refToUidHash = $$reshHash{$uid};
+	    my $refToUidSpecificHash = $$refToUidHash{"uid_specific"};
+
+	    if($$refToUidSpecificHash{"owner"} !~ /^\s*$/)
+	    {
+		printStr \*OUT, "[owner]";
+		printNewLine(\*OUT,$fileName);
+		printStr \*OUT, $$refToUidSpecificHash{"owner"};
+		printNewLine(\*OUT,$fileName);
+	    }	    
+	}
+
+	########################
+	# Print the [defaultmeta] section
+        # Note that depending on the format
+        # nbr the metadata has to be before or after
+        # platsec-section.
+	########################
+	if($formatNbr > 3 )
+	{
+	    printStr \*OUT, "[defaultmeta]";
+	    printNewLine(\*OUT,$fileName);
+
+	    my $refToUidHash = $$reshHash{$uid};
+	    printMetadata(\*OUT,$formatNbr,$$refToUidHash{"uid_specific"},
+			  $$refToUidHash{"ranges"},$fileName);
+	}
+        
+	########################
+	# Print the [PlatSec] section
+	########################
+	if($formatNbr > 1)
+	{
+	    printStr \*OUT, "[platsec]";
+	    printNewLine(\*OUT,$fileName);
+    
+	    my $refToUidHash = $$reshHash{$uid};
+	    printPlatSec(\*OUT,$formatNbr,$$refToUidHash{"uid_specific"},
+			$$refToUidHash{"ranges"},$fileName,$addDefCaps);
+	}
+	########################
+	# Print the [metadata] section
+	########################
+	if($formatNbr eq 3)
+	{
+	    printStr \*OUT, "[metadata]";
+	    printNewLine(\*OUT,$fileName);
+
+	    my $refToUidHash = $$reshHash{$uid};
+	    printMetadata(\*OUT,$formatNbr,$$refToUidHash{"uid_specific"},
+			  $$refToUidHash{"ranges"},$fileName);
+	}
+
+	########################
+	# Print the [Main] section
+	########################
+	if($formatNbr > 0)
+	{
+	    printStr \*OUT, "[Main]";
+	    printNewLine(\*OUT,$fileName);
+	}
+
+	########################
+	# print each key into the file.
+	########################
+	foreach my $key (sort keys %$refToHash)
+	{		
+	    $keyCount++;
+	    my $refToHash2 = $$refToHash{$key};
+
+	    ###############################
+	    # Writing the key and key type. 
+	    # This is format specific.
+	    ###############################
+	    printKey(\*OUT,$formatNbr,$key,getKeyType($$refToHash2{"key type"}));
+
+	    ###############################
+	    # Write the value into the file
+	    ###############################
+
+	    # Strings are always enclosed with \". Also empty binary value is also enclosed
+	    # such way
+ 	    if($$refToHash2{"key type"} =~ /str/i ) 
+	    {
+		printStr \*OUT, "\"";
+	    }
+	    printStr \*OUT, $$refToHash2{"value"}; 
+ 	    if($$refToHash2{"key type"} =~ /str/i) 
+	    {
+		printStr \*OUT, "\"";
+	    }
+
+            if ($$refToHash2{"key type"} =~ /bin/i && $$refToHash2{"value"} =~ /^\s*$/)
+            {
+                printStr \*OUT, "00";
+            }
+
+	    ###############################
+	    # Generating the metadata and adding it into the file
+	    ###############################
+	    my $metaData = 0;
+	    if($$refToHash2{"backup"})
+	    {
+		$metaData += $globalBackupValue;
+	    }
+	    printStr \*OUT, " $metaData";
+
+	    # Note, according to the cenrep specification, then read access has to be
+	    # before the write access.
+
+	    ###############################
+	    # RSid-capa writing (format specific)
+	    ###############################
+	    my $refToCapaList = $$refToHash2{"RSid"};
+	    printSidCapa(\*OUT,$formatNbr,$refToCapaList,"sid_rd");
+
+	    ###############################
+	    # R-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToHash2{"R"};
+	    printCapa(\*OUT,$formatNbr,$refToCapaList,"cap_rd",0);
+
+	    ###############################
+	    # WSid-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToHash2{"WSid"};
+	    printSidCapa(\*OUT,$formatNbr,$refToCapaList,"sid_wr");
+
+	    ###############################
+	    # W-capa writing (format specific)
+	    ###############################
+	    $refToCapaList = $$refToHash2{"W"};
+	    printCapa(\*OUT,$formatNbr,$refToCapaList,"cap_wr",$$refToHash2{"read-only"});
+
+	    ##########################################
+	    ##########################################
+	    ##########################################
+	    ##########################################
+	    printNewLine(\*OUT,$fileName);
+	}
+	close OUT;
+    }
+
+    print "Ini file count = $iniFileCount\n";
+    print "Key count      = $keyCount\n";
+}
+
+###########################################################################
+# Shows help.
+#
+# Params: -
+#
+# Return: -
+#
+###########################################################################
+sub usage
+{
+    $0 =~ /([0-9a-zA-Z\_\.]+)$/;
+    my $filename = $1;
+    print "\n";
+    print "\n";
+    print "\n";
+    print "This script is intended to be used to generate ini-files for Central Repository\n";
+    print "based on the information in the cenrep key excel-sheet(s). These sheets define\n";
+    print "the content of the ini-files.\n";
+    print "\n";
+    print "Rough discruption on how the values for the ini-files are determinated:\n";
+    print "1) Content of sheets identified by -d or -s are read.\n";
+    print "   (alternatively -b can be used a storable file, where the sheet info\n";
+    print "    is already in binary format)\n";
+    print "2) From sheets read in step 1 the information is parsed based on the\n";
+    print "   information specified by -p, -r and -v\n";
+    print "3) [optional] Default values specified by the steps 1 and 2 can be\n";
+    print "    overriden by defining information in other sheets, specified by parameters\n";
+    print "    -vd,-vs,-vb and -vv, \n";
+    print "\n";
+    print "\n";
+    print "Usage:\n";
+    print "  $filename [-h|-help] [-fh]\n";
+    print "                [-p <platId>] -r <platRel> [-v <variantName]\n";
+    print "                (-d <dirName> | -s <sourceFilename> | -b <storableFilename>)\n";
+    print "                [ -rd <resultDir>]\n";
+    print "                [ (-vd <variantDirName> | -vs <sourceFilename> | -vb <storableFilename>)\n";
+    print "                  [-vv <variantsVariantName>]]\n";
+    print "                [-f <formatNbr> ]\n";
+    print "                [-dc ]\n";
+    print "                [-rfs <dirName> [-noini]]\n";
+    print "\n";
+    print "Options:\n";
+    print " -h                  : Show this help\n";
+    print " -help               : Show this help\n";
+    print " -fh                 : Show the help about supported formats.\n";
+    print " -p <platId>         : The identifier specifying platform. Optional. Default value: S60\n"; 
+    print "                       to the directory where the mem-sheets exist.\n";
+    print " -r <platRel>        : The platform number. For example: 3.0\n";
+    print " -rd <resultDir>     : The path, where the generated ini-files are written.\n";
+    print "                        Default: current directory\n";
+    print " -v <variantName>    : The variant name. Optional. Default value: \"\" == no variant.\n";
+    print "                       The names are not fixed in the script. The same names has to be\n";
+    print "                       used as supported by the excel sheet.\n";
+    print " -d <dirName>        : The dir, which contains the sheets, which are read. Relative path to the\n";
+    print "                       current dir or absoluth path. NOTE: the dir name can't contain any spaces.\n";
+    print " -s <sourceFilename>       : The text filename, which contains sheet name with absoluth\n";
+    print "                             path names (1/row)\n";
+    print " -b <storableFilename>  : the storable file name, which contains the same information as the\n";
+    print "                          key sheets. ( this can be generated with gather_cenrep_to_storable.pl)\n";
+    print " -vd <variantDirName>      : Same as -d, but for variant information\n";
+    print "                             (see rough description above) Optional.\n";
+    print " -vs <sourceFilename>      : Same as -s, but for variant information\n";
+    print "                              (see rough description above) Optional.\n";
+    print " -vb <storableFilename>  : the storable file name, which contains the same information as the\n";
+    print "                          variant key sheets.\n";
+    print " -vv <variantsVariantName> : Same as -v, but for variant information\n";
+    print "                              (see rough description above) Optional.\n";
+    print " -f <formatNbr>          : the format type that is generated. (see list of formats with -fh)\n";
+    print " -dc                     : adds alwayspass as default capabilities for UID namespace if non \n";
+    print "                              specified (also applies to certain formats)\n";
+    print " -rfs <dirName>        : The dir to which cenrep.txt-file is generated. This file\n";
+    print "                         contains info for Restore Factory Settings\n";
+    print " -noini                : used only with -rfs-option. If specified, only RFS file generated,\n";
+    print "                          no ini-files.\n";
+    print "\n";
+    print "\n";
+    print "You have specify either -d or -s, but not both at the same time.\n";
+    print "You can specify either -vd or -vs, but not both at the same time.\n";
+    print "\n";
+    print "\n";
+}
+
+
+###########################################################################
+# Shows format help.
+#
+# Params: -
+#
+# Return: -
+#
+###########################################################################
+sub formatHelp
+{
+    $0 =~ /([0-9a-zA-Z\_\.]+)$/;
+    my $filename = $1;
+    print "\n";
+    print "\n";
+    print "Supported formats (default format is 4):\n";
+    print "   0 : Format, where there are no capabilities generated for the keys.\n";
+    print "       Supported is key (as hex), type, value and metadata.\n";
+    print "       No \"[Main]\"-tag is included into the ini-file.\n";
+    print "       (a temporary fix so that testing can continue).\n";
+    print "   1 : Format 0 + \"[Main]\"-tag is included into the ini-file.\n";
+    print "       (Symbian w48 and earlier builds).\n";
+    print "\n";
+    print "   2 : Format 1 + in addition  capabilities are written in text format.\n";
+    print "       Supported is key (as hex), type, value, metadata and read/write capabilities in text format.\n";
+    print "       (Symbian w50 and later builds).\n";
+    print "\n";
+    print "   3 : Format 3 + in addition owner and metadata are written in text format.\n";
+    print "       Supported is key (as hex), type, value, metadata and read/write capabilities in text format.\n";
+    print "       (Symbian w?? and later builds).\n";
+    print "\n";
+    print "   4 : Format 4 + in addition alwaysfail-keyword used in ini-file.\n";
+    print "       (Symbian w10 and later builds).\n";
+    print "\n";
+    print "\n";
+    print "\n";
+
+}
+###########################################################################
+# Parses the command line parameters from ARGV
+#
+# Params: -
+#
+# Return: -		    
+#
+###########################################################################
+sub parseCmdLine
+{
+    my $platId = "S60";
+    my $platRel = "";
+    my $varName = "";
+    my $sheetDirname = "";
+    my $sheetFilename = "";
+    my $storableFilename = "";
+    my $resultDirname = "";
+    my $varNameVariant = "";
+    my $sheetDirnameVariant = "";
+    my $sheetFilenameVariant = "";
+    my $storableFilenameVariant = "";
+    my $formatNbr = -1;
+    my $addDefCaps = 0;
+    my $rfsDir = "";
+    my $noIni = 0;
+    my $showHelp = 0;
+    my $showFormatHelp = 0;
+
+    if( ! GetOptions('p:s'      => \$platId,
+		     'r:s'      => \$platRel,
+		     'v:s'      => \$varName,
+		     'd:s'      => \$sheetDirname,
+		     's:s'      => \$sheetFilename,
+		     'b:s'      => \$storableFilename,
+		     'rd:s'     => \$resultDirname,
+		     'vv:s'     => \$varNameVariant,
+		     'vd:s'     => \$sheetDirnameVariant,
+		     'vs:s'     => \$sheetFilenameVariant,
+		     'vb:s'     => \$storableFilenameVariant,
+		     'f:i'      => \$formatNbr,
+		     'dc'       => \$addDefCaps,
+		     'rfs:s'    => \$rfsDir,
+		     'noini'    => \$noIni,
+		     'h'        => \$showHelp,
+		     'help'     => \$showHelp,
+		     'fh'       => \$showFormatHelp,
+		     '<>'       => \&usage))
+    {
+	usage();
+	exit(1);
+    }
+    
+
+    ####################################
+    # Format number handling.
+    ####################################
+    # Set default format number, if not specified.
+    if( $formatNbr < 0)
+    {
+	$formatNbr = 4;
+    }
+    elsif( $formatNbr > 4)
+    {
+	print "\nError: Invalid format number: $formatNbr.\n";
+	$showFormatHelp = 1;
+    }
+
+    if($showFormatHelp)
+    {
+	formatHelp();
+	exit(1);
+    }
+    if($showHelp)
+    {
+	usage();
+	exit(1);
+    }
+
+
+
+    ####################################
+    # Checking other parameters
+    ####################################
+    my $error = 0;
+    if(    ($sheetDirname ne "" and $sheetFilename ne "") 
+	or ($sheetDirname ne "" and -b $storableFilename ne "")
+	or ($sheetFilename ne "" and -b $storableFilename ne ""))
+    {
+	print "\nError: The -s, -d and -b arguments can't be specified at the same time.\n";
+	$error = 1;
+    }
+    elsif($sheetDirname eq "" and $sheetFilename eq "" and $storableFilename eq "")
+    {
+	print "\n\nError: You have to specify either the -d or -s or -b argument.\n";
+	$error = 1;
+    }
+
+    if(   ($sheetDirnameVariant ne "" and $sheetFilenameVariant ne "")
+       or ($sheetDirnameVariant ne "" and $storableFilenameVariant ne "")
+       or ($storableFilenameVariant ne "" and $sheetFilenameVariant ne "")
+	    )
+    {
+	print "\nError: The -vs and -vd  and -vb arguments can't be specified at the same time.\n";
+	$error = 1;
+    }
+
+    if($platRel eq "")
+    {
+	print "\nError: You have to specify -r parameter.\n";
+	$error = 1;
+    }
+    
+    if($error)
+    {
+	usage();
+	exit(1);
+    }
+    elsif($showHelp)
+    {
+	usage();
+    }
+
+    return ($platId,$platRel,$varName,$sheetDirname,$sheetFilename,$storableFilename,
+	    $resultDirname,$varNameVariant,
+	    $sheetDirnameVariant,$sheetFilenameVariant,$storableFilenameVariant,$formatNbr,
+	    $addDefCaps,$rfsDir,$noIni);
+}
+
+###########################################################################
+#
+# The format of the returned hash is:
+# NOTE: Still one bug, onge a range/key  has been defined it can't be removed 
+#  {
+#  <uid> => 
+#    {
+#    "uid_specific"   
+#           = > {
+#               "R" => (<capa1ForReading>,<capa2ForReading>)
+#               "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#               "RSid" => (<sidForReading>)
+#               "WSid" => (<sidForWriting>)
+#               "owner"  => <someHexValue>
+#               "rfs"  => <0/1>
+#               "backup"  => <0/1>
+#               }
+#    "ranges"   
+#           = > {
+#            <fromRange>
+#              => {
+#                <toRange>
+#                 => {
+#                    "R" => (<capa1ForReading>,<capa2ForReading>)
+#                     "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#                     "RSid" => (<sidForReading>)
+#                     "WSid" => (<sidForWriting>)
+#                     "rfs"  => <0/1>
+#                     "backup"  => <0/1>       
+#                     }
+#                  }        
+#               }
+#    "keys" => {
+#              <keyInt> 
+#                   => {
+#                      "read-only" => <0/1>
+#                      "key type" => <bin/int/str/bool>
+#                      "R" => (<capa1ForReading>,<capa2ForReading>)
+#                      "W" => (<capa1ForWriting>,<capa2ForWriting>)
+#                      "RSid" => (<sidForReading>)
+#                      "WSid" => (<sidForWriting>)
+#                      "value" => <value>
+#                      "rfs"  => <0/1>
+#                      "backup"  => <0/1>
+#                       }
+#                } # keys
+###########################################################################
+sub generateConfig
+{
+    my $refToResHash = shift;     # The generated configuration
+    my $reftoConfigHash = shift;  # from where the configuration is generated from
+    my $platId = shift;
+    my $platRel = shift;
+    my $varName = shift;
+
+    if($varName =~ /^\s*$/)
+    {
+	# same as in cenrep_keys.pm
+	$varName = "default";
+    }
+
+    # See syntax of reftoConfigHash from the documentation of
+    # readCentrepKeyInfo
+    my $refToHash;
+    foreach my $uid (keys %$reftoConfigHash)
+    {
+	my $tmpUidResHash = addHash($uid,$refToResHash);
+	my $refToUidConfigHash = $$reftoConfigHash{$uid};
+
+	##########################################
+	# Adding UID information
+	##########################################
+	my $refToUidSpecificResHash = addHash("uid_specific",$tmpUidResHash);
+
+	my $refToUidSpecificConfigHash = $$refToUidConfigHash{"uid_specific"};
+	my $refToUidSpecificVariantConfigHash = undef;
+
+	#--------------------------------------------------
+	# now check, if there is variant specific configuration
+	#--------------------------------------------------
+	if(defined($$refToUidSpecificConfigHash{$varName}))
+	{
+	    $refToUidSpecificVariantConfigHash 
+		= getConfig($platId,$platRel,
+			    $$refToUidSpecificConfigHash{$varName});
+	}
+	#--------------------------------------------------
+	# if not found, then try to get default configuration
+	#--------------------------------------------------
+	if(!defined($refToUidSpecificVariantConfigHash) && $varName ne "default")
+	{
+	    $refToUidSpecificVariantConfigHash 
+		= getConfig($platId,$platRel,
+			    $$refToUidSpecificConfigHash{"default"});	    
+	}
+	#--------------------------------------------------
+	# if we found configuration then add it to the hash
+	#--------------------------------------------------
+	if(defined($refToUidSpecificVariantConfigHash))
+	{
+	    $$refToUidSpecificResHash{"rfs"} = $$refToUidSpecificVariantConfigHash{"rfs"};
+	    $$refToUidSpecificResHash{"backup"} = $$refToUidSpecificVariantConfigHash{"backup"};
+	    $$refToUidSpecificResHash{"R"} = $$refToUidSpecificVariantConfigHash{"R"};
+	    $$refToUidSpecificResHash{"W"} = $$refToUidSpecificVariantConfigHash{"W"};
+	    $$refToUidSpecificResHash{"RSid"} = $$refToUidSpecificVariantConfigHash{"RSid"};
+	    $$refToUidSpecificResHash{"WSid"} = $$refToUidSpecificVariantConfigHash{"WSid"};
+	    $$refToUidSpecificResHash{"owner"} = $$refToUidSpecificVariantConfigHash{"owner"};
+	}	    
+	##########################################
+	# Adding range information
+	##########################################
+	my $refToRangesResHash = addHash("ranges",$tmpUidResHash);
+
+	my $refToRangesConfigHash = $$refToUidConfigHash{"ranges"};
+	foreach my $rangeFrom (keys %$refToRangesConfigHash)
+	{
+	    my $refToRangeCommonConfigHash = ${$$refToRangesConfigHash{$rangeFrom}}{"common"};
+	    # 1st check, if the key belongs to this release
+	    if(isRemoved($platId,$platRel,$$refToRangeCommonConfigHash{"removed"}))
+	    {
+		next;
+	    }
+
+	    my $refToRangesToConfigHash = ${$$refToRangesConfigHash{$rangeFrom}}{"to"};
+	    foreach my $rangeTo (keys %$refToRangesToConfigHash)
+	    {
+		my $refToSingleRangeToConfigHash 
+		    = $$refToRangesToConfigHash{$rangeTo};
+		my $refToRangeToVariantConfigHash = undef;
+		#--------------------------------------------------
+		# now check, if there is variant specific configuration
+		#--------------------------------------------------
+		if(defined($$refToSingleRangeToConfigHash{$varName}))
+		{
+		    $refToRangeToVariantConfigHash
+			= getConfig($platId,$platRel,
+				    $$refToSingleRangeToConfigHash{$varName});
+		}
+		#--------------------------------------------------
+		# if not found, then try to get default configuration
+		#--------------------------------------------------
+		if(!defined($refToRangeToVariantConfigHash) && $varName ne "default")
+		{
+		    $refToRangeToVariantConfigHash
+			= getConfig($platId,$platRel,
+				    $$refToSingleRangeToConfigHash{"default"});	    
+		}
+		#--------------------------------------------------
+		# if we found configuration then add it to the hash
+		#--------------------------------------------------
+		if(defined($refToRangeToVariantConfigHash))
+		{
+		    my $refRangeVariantResHash  = addHash($rangeFrom,$refToRangesResHash);
+		    $refRangeVariantResHash  = addHash($rangeTo,$refRangeVariantResHash);
+		    $$refRangeVariantResHash{"rfs"} = $$refToRangeToVariantConfigHash{"rfs"};
+		    $$refRangeVariantResHash{"backup"} = $$refToRangeToVariantConfigHash{"backup"};
+		    $$refRangeVariantResHash{"R"} = $$refToRangeToVariantConfigHash{"R"};
+		    $$refRangeVariantResHash{"W"} = $$refToRangeToVariantConfigHash{"W"};
+		    $$refRangeVariantResHash{"RSid"} = $$refToRangeToVariantConfigHash{"RSid"};
+		    $$refRangeVariantResHash{"WSid"} = $$refToRangeToVariantConfigHash{"WSid"};
+		}	
+	    }
+	}    
+	##########################################
+	# Adding key values
+	##########################################
+	my $tmpKeysResHash = addHash("keys",$tmpUidResHash);
+
+	$refToHash = $$reftoConfigHash{$uid};
+	$refToHash = $$refToHash{"keys"};
+	foreach my $key (keys %$refToHash)
+	{
+	    my $refToCommonHash = ${$$refToHash{$key}}{"common"};
+	    # 1st check, if the key belongs to this release
+	    if(isRemoved($platId,$platRel,$$refToCommonHash{"removed"}))
+	    {
+		next;
+	    }
+	    #--------------------------------------------------
+	    # now check, if there is variant specific configuration
+	    #--------------------------------------------------
+	    my $refToRelHash = ${$$refToHash{$key}}{"release"};
+	    my $refToKeyConfigHash;
+	    if(defined($$refToRelHash{$varName}))
+	    {
+		$refToKeyConfigHash = getConfig($platId,$platRel,
+						$$refToRelHash{$varName});
+	    }
+	    #--------------------------------------------------
+	    # if not found, then try to get default configuration
+	    #--------------------------------------------------
+	    if(!defined($refToKeyConfigHash) && $varName ne "default")
+	    {
+		$refToKeyConfigHash 
+		    = getConfig($platId,$platRel,
+				$$refToRelHash{"default"});	    
+	    }
+	    #--------------------------------------------------
+	    # if we found configuration then add it to the hash
+	    #--------------------------------------------------
+	    if(defined($refToKeyConfigHash))
+	    {
+		my $keyResHash = addHash($key,$tmpKeysResHash);
+		$$keyResHash{"read-only"} = $$refToCommonHash{"read-only"};
+		$$keyResHash{"key type"} = $$refToCommonHash{"key type"};
+		$$keyResHash{"value"} = $$refToKeyConfigHash{"value"};
+		$$keyResHash{"rfs"} = $$refToKeyConfigHash{"rfs"};
+		$$keyResHash{"backup"} = $$refToKeyConfigHash{"backup"};
+		$$keyResHash{"R"} = $$refToKeyConfigHash{"R"};
+		$$keyResHash{"W"} = $$refToKeyConfigHash{"W"};
+		$$keyResHash{"RSid"} = $$refToKeyConfigHash{"RSid"};
+		$$keyResHash{"WSid"} = $$refToKeyConfigHash{"WSid"};
+	    }	    
+	}
+    }
+}
+
+###########################################################################
+# reads either default config or variant config into the result hash.
+# Note that the variant hash can't delete any keys, just override them.
+###########################################################################
+sub readSingleConfig
+{
+    my $refToExcel      = shift;
+    my $sheetDirname    = shift;
+    my $sheetFilename   = shift;
+    my $storableFilename = shift;
+    my $refToResultHash = shift;
+    my $platId          = shift;
+    my $platRel         = shift;
+    my $varName         = shift;
+    
+    #-----------------------------------------------------------------
+    # There are 2 options how the user can give the if-sheet names handled:
+    # 1) He gives the directory where all files are located
+    # 2) He gives an excel sheet, which contains all the files in column A.
+    #-----------------------------------------------------------------
+    my $refToExcelFilesList;
+
+    if($sheetDirname !~ /^\s*$/)
+    {
+	# Read the filenames from the directory given
+	$refToExcelFilesList = getExcelFilesFromDir $sheetDirname;
+    }
+    elsif($sheetFilename !~ /^\s*$/)
+    {
+	# Read the filenames from the excel file given
+	$refToExcelFilesList = getExcelFilesFromFile $sheetFilename;
+    }
+    elsif($storableFilename  =~ /^\s*$/)
+    {
+	# nothing to do, just exit function
+	return;
+    }
+    #-----------------------------------------------------------------
+    # The main function that parses the information from sheets
+    #-----------------------------------------------------------------
+    my $refToDefHash;
+    if($storableFilename  !~ /^\s*$/)
+    {
+        # read mem sheets info
+	open(STORABLE_IN ,$storableFilename) || die "Unable to open: $storableFilename";
+	$refToDefHash = fd_retrieve(\*STORABLE_IN);
+	close STORABLE_IN;
+    }
+    else
+    {
+	$refToDefHash = readConfig($refToExcelFilesList,$refToExcel);
+    }
+#For testing to get the generated config printed to terminal
+#     $Data::Dumper::Indent = 1;
+#     print Dumper($refToDefHash);
+#     exit 1;
+
+    #-----------------------------------------------------------------
+    # Determinate the default configuration 
+    #-----------------------------------------------------------------
+    generateConfig($refToResultHash,$refToDefHash,$platId,$platRel,$varName);
+    $refToDefHash = undef;
+
+#      #For testing to get the generated config printed to terminal
+#      $Data::Dumper::Indent = 1;
+#      print Dumper($refToResultHash);
+#      exit 1;
+
+}
+
+###################################################
+# Actual program
+###################################################
+my($platId,$platRel,$varName,$sheetDirname,$sheetFilename,$storableFilename,$resultDirname,
+   $varNameVariant,$sheetDirnameVariant,$storableFilenameVariant,$sheetFilenameVariant,$formatNbr,
+   $addDefCaps,$rfsDir,$noIni) = parseCmdLine;
+
+# ----------------------------------------------------------------  
+# Get excel application
+# ----------------------------------------------------------------  
+my $refToExcel = getExcelApp();
+
+#-----------------------------------------------------------------
+# read the default configuration hash
+#-----------------------------------------------------------------
+my %resultHash;
+readSingleConfig($refToExcel,$sheetDirname,$sheetFilename,$storableFilename,\%resultHash,
+		 $platId,$platRel,$varName);
+
+#-----------------------------------------------------------------
+# read the overriding variant  configuration hash
+#-----------------------------------------------------------------
+readSingleConfig($refToExcel,$sheetDirnameVariant,$sheetFilenameVariant,$storableFilenameVariant,
+		 \%resultHash,$platId,$platRel,$varNameVariant);
+
+#-----------------------------------------------------------------
+# quit excel and "delete" the instances.
+#-----------------------------------------------------------------
+quitExcelApp($refToExcel);
+
+#-----------------------------------------------------------------
+# Generate the ini-files
+#-----------------------------------------------------------------
+if(! $noIni)
+{
+    generateIniFiles(\%resultHash,$resultDirname,$formatNbr,$addDefCaps);
+}
+
+#-----------------------------------------------------------------
+# Generate the RFS file (if wanted)
+#-----------------------------------------------------------------
+if($rfsDir !~ /^\s*$/)
+{
+    $rfsDir =~ s/[\/\\]$//g;
+    $rfsDir .= "/cenrep_rfs.txt";  
+    generateRfsFile(\%resultHash,$rfsDir);
+}
+
Binary file internetradio2.0/cenrep/keys_internetradio.xls has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/readme.txt	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,44 @@
+Each script attached gives help with option "-h" in the command line.
+
+There are 3 different scripts:
+
+ cenrep_keys_syntax_checker.pl 
+      Used to verify the syntax of the excel sheets.
+
+ gather_cenrep_to_storable.pl
+      This reads the cenrep excel sheet(s) information into a storable file. This is
+      a binary format, which can be used by other scripts.
+      (for instance generate_cenrep_inifile.pl)
+      Main motivation to use: reading the information from excel sheets takes 95%
+      of time. If you for instance need to generate more than 1 confiration from the
+      same data it makes sence to 1st run this script once and then the other
+      script as many times as needed.
+
+  generate_cenrep_inifile.pl
+      This script is used to generate both cenrep ini-files based on the information
+      in the excel sheets and also if needed a file for the RFS.
+
+NOTES:
+  - the generate_cenrep_inifile.pl requires that you have active perl 5.8.4 or newer version
+    installed. Perl version 5.6.* does not work and results in error.
+    Reason for the new version is the unicode support needed.
+
+  - The scripts also require that Storable.pm module installed to the machine. With some
+    earlier perl-versions this module was not part of default delivery.
+
+  - There will be an error, if the path, where the excel-files are located, contains
+    directory names with spaces in them.
+    Solution: make sure that directory names in path don't contain spaces.
+
+  - If a new key is added, the default value must be defined also in 
+    CVRRepositoryManager::CheckRepositoryKeysL() to make sure that SIS installation works ok.
+
+  - Note that cenrep folder must be writable!
+
+Generating cenrep txt file:
+  -In cenrep folder type:
+    "attrib -r *.txt"  
+    "generate_cenrep_inifile.pl -r 5.0 -d ."
+  -In emulator:
+     - delete .cre file with visualradio uid from epoc32\WINSCW\C\private\10202be9\persists\
+     - type "abld export" to export cenrep file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/commandchannelinc/ircontrolparams.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRCONTROLPARAMS_H
+#define IRCONTROLPARAMS_H
+
+#include <e32def.h>
+
+//This value defines amount of time between each step in audio fade in effect
+const TInt KVolumeTime = 500000;  //defines Audio Fade In time
+
+//This value defines amount of time between each step in audio fade out effect
+const TInt KDownVolumeTime = 200000; //defines the Audio Fade Out Time
+
+/**
+ * Base for IR custom errors delivered via Command Channel
+ */
+const TInt KIRCtrlCmdErrorBase =  { 0xB1234B };
+
+/**
+ * IR specific error telling that creationg of player failed.
+ */
+const TInt KIRCtrlCmdPlayerNotCreated =  { KIRCtrlCmdErrorBase + 0x00000000 };
+
+/**
+ * IR specific general error sent by the player to report about its errors.
+ */
+const TInt KIRCtrlCmdGeneralPlayerError = { KIRCtrlCmdErrorBase + 0x00000001 };
+
+/**
+ * TIRControlCommmand is enum which defines various errors and condition of
+ *  the player
+ */
+enum TIRControlCommmand
+    {
+    //indicates that buffer is start to fill
+    EBufferFillStart = 0x0F, 
+    // indicates that buffer is filled
+    EBufferFillStop,
+    //indicates that buffer is filling
+    EBufferFilling,
+    // audio fade out    
+    EBufferFadeOut,
+    //audio fade in 
+    EBufferFadeIn,
+    //player stopped playing due some external conditions 
+    EStoppedPlaying,
+    //ready to start audio fade in 
+    EBufferFadeInReady, 
+    //indicates that an error has occured
+    EError, 
+    //indicates that player changed
+    EPlayerChanged,
+   //makes stereo mode on
+   	EStereo, 
+   	//When Player Stars Playing
+   	EPlayingState,
+    };
+
+#endif //IRCONTROLPARAMS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/commandchannelinc/irctrlcmdobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRCTRLCMDOBSERVER_H
+#define IRCTRLCMDOBSERVER_H
+
+#include <e32base.h>
+
+#include "ircontrolparams.h"
+
+class MIRCtrlCmdObserver;
+class MIRStreamFill;
+
+/**
+ * This is the class is implemented to provide completed independence to 
+ * mediaengine from client as well as network.It is through this class media 
+ * engine interacts with client and network. This also provides additional 
+ * features like audio fade in, audio fade out effect. This design is has to 
+ * provide flexiblilty to irmediaengine by avoiding any other dll interaction
+ * other than ircommandchannel.dll
+ *
+ * @code
+ *
+ * Observer* observer; //Observer class should be derived from MIRCtrlCmdObserver
+ * StreamFill* stream; //Streamfill class should be derived from MIRStreamFill
+ * CIRCtrlCmdObserver* channel = CIRCtrlCmdObserver::NewL(observer,stream);   
+ * //creates instance of ircommandchannel
+ * TIRControlCommmand command = EError;
+ * //senting an error value and is defined in IRControlParams.h
+ * TInt some_integer_value;
+ * TPtr ptrbuffer;
+ * TUint8* ptr = new (ELeave) TUint8[100];
+ * ptrbuffer.Set(ptr,100,100);
+ * channel->SentRequest(command,some_integer_value); 
+ * //sending a command to channel
+ * channel->FilltheBuffer(ptrbuffer); //call for filling the buffer
+ * TInt volume = channel->FetchVolume(); 
+ * //gets current volume (which can stored in database)
+ * command = EBufferFadeIn; //calling for a fade in effect
+ * channel->AudioFadeInOut(command,5);
+ * channel->DoAudioFadeOut(); //function for fade out effect
+ * delete channel;
+ *
+ * @endcode
+ * 
+ * @lib ircommandchannel.lib
+ * @since S_60 3.0
+ *
+ */
+ 
+NONSHARABLE_CLASS(CIRCtrlCmdObserver) :  public CBase
+    {
+public:                                //member function
+    /**
+     * Function : NewL
+     * Function returns an instance of CIRCtrlCmdObserver
+     * Two phase constructor
+     * @param MIRCtrlCmdObserver observers instance,pointer to MIRStreamFill
+     * @return instance of CIRCtrlCmdObserver
+     */
+    IMPORT_C static CIRCtrlCmdObserver* NewL(MIRCtrlCmdObserver* aObserver,
+		MIRStreamFill* aStream);    
+
+    /**
+     * Function : NewLC
+     * Function returns an instance of CIRCtrlCmdObserver
+     * Two phase constructor
+     * @param MIRCtrlCmdObserver observers instance,pointer to MIRStreamFill
+     * @return instance of CIRCtrlCmdObserver
+     */
+    IMPORT_C static CIRCtrlCmdObserver* NewLC(MIRCtrlCmdObserver* aObserver,
+		MIRStreamFill* aStream);
+    
+    /**
+     * Function : ~CIRCtrlCmdObserver
+     * Default destructor calls Cancel function which cancel the active request 
+     */
+    ~CIRCtrlCmdObserver();
+
+   /**
+     * Function : SentRequest
+     * Function sends request to handle events represented by 
+     * TIRControlCommmand
+     * @param TIRControlCommmand represents what action to be taken
+     * @param aValue represents any integer value if any, like buffering 
+     * percentage
+     */
+    IMPORT_C void SentRequest(TIRControlCommmand aCommand,TInt aValue);
+
+    /**
+     * Function : FilltheBuffer
+     * Function sends request to fill the buffer
+     * @param buffer to be filled with data
+     */
+    IMPORT_C void FilltheBuffer(TDes8& aInputBuffer);
+
+    /**
+     * Function : FetchVolume
+     * Function sends request to get the current volume index
+     * @return volume index
+     */
+    IMPORT_C TInt FetchVolume();
+
+        /**
+     * Function : AudioFadeInOut
+     * Function is called for audio Fade In Fade Out Effects
+     * @param TIRControlCommmand represents what action to be taken Fade 
+     * In or Fade Out
+     * @param aValue represents any integer value of cuurent volume level
+     */
+    IMPORT_C void AudioFadeInOut(TIRControlCommmand& aCommand,TInt aValue);
+    
+    /**
+     * Function : DoAudioFadeOut
+     * Function is used to sent request start audio Fade Out
+     */
+    IMPORT_C void DoAudioFadeOut();
+    
+private:
+    /**
+     * Function : ConstructL
+     * Function does all the initializations
+     * Two phase constructor
+     * @param MIRCtrlCmdObserver observers instance,pointer to MIRStreamFill
+     */
+    void ConstructL(MIRCtrlCmdObserver* aObserver,MIRStreamFill* aStream);
+
+    /**
+     * Function : CIRCtrlCmdObserver
+     * Function is the default constructor, sets the CActive priority, 
+     * Line status
+     */
+    CIRCtrlCmdObserver();
+    
+    /**
+     * Function : StartAudioFadeIn
+     * Function Starts audio Fade In effects
+     * @param take a parameter of CIRCtrlCmdObserver into a TAny pointer
+     * @return KErrNone upon completion
+     */
+    static TInt StartAudioFadeIn(TAny* aPtr);
+    
+    /**
+     * Function : StartAudioFadeOut
+     * Function Starts audio Fade Out effects
+     * @param take a parameter of CIRCtrlCmdObserver into a TAny pointer
+     * @return KErrNone upon completion
+     */
+    static TInt StartAudioFadeOut(TAny* aPtr);
+
+    /**
+     * Function : UpdateVolumeInc
+     * Function does the Fade In effect
+     */
+    void UpdateVolumeInc();
+    
+    /**
+     * Function : UpdateVolumeDec
+     * Function does the Fade In effect 
+     */
+    void UpdateVolumeDec();
+
+
+private:                                //data members
+
+    //This is instance of MIRCtrlCmdObserver 
+    MIRCtrlCmdObserver* iObserver;
+    
+    //Access to fill data
+    MIRStreamFill* iStream;
+
+    //Volume timer
+    CPeriodic* iVolumeTimer;
+
+    //current volume level
+    TInt iVolumeLevel;
+
+    //actual volume level
+    TInt iPersistentVolume;
+    
+    //instance of the command
+    TIRControlCommmand iCommand;
+    };
+    
+#endif//IRCTRLCMDOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/commandchannelinc/irctrlcommand.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRCTRLCOMMAND_H
+#define IRCTRLCOMMAND_H
+
+#include <e32cmn.h>
+
+#include "ircontrolparams.h"
+
+/**
+* Class is an abstract class which provides interfaces to pass commands
+* MCtrlCommand can pass a command and value to the inherited class
+* FetchVolume is meant for fetching the volume
+* DoAudioFadeOut is to activate Fade out fade in effect
+*/
+class MIRCtrlCmdObserver
+    {
+public:
+    /**
+     * Function : MCrtlCmdCommand
+     * Function is pure virtual function which used to pass commands
+     * @param TIRControlCommmand represents the commands,which determines 
+     * what action to be taken
+     * @param aValue represents any integer value if any, like buffering
+     * percentage
+     */
+    virtual void MCtrlCommand( TIRControlCommmand aCommand, TInt aValue ) = 0;
+
+    /**
+     * Function : FetchVolume
+     * Function is pure virtual function which sents Request to get the
+     * current volume index
+     * @return volume index
+     */
+    virtual TInt FetchVolume() = 0;
+    
+    /**
+     * Function : DoAudioFadeOut
+     * Function is pure virtual function, it is used to sent request start 
+     * audio Fade Out
+     */
+    virtual void DoAudioFadeOut() = 0;
+    /**
+     * Function : PlayerChanged()
+     * Function is pure virtual function, It notifies the Observer WhenEver
+	* Player Changed
+     * audio Fade Out
+     */
+    virtual void PlayerChanged() = 0;
+    };
+
+/**
+* Class is an abstract class which provides interfaces to fill the buffer
+* Request to fill the buffer is made through this interface
+*/
+class MIRStreamFill
+    {
+public:
+    /**
+     * Function: FilltheBuffer
+     * function is pure virtual implementation of and is call to fill
+     * the buffer 
+     * @param reference to the buffer to be filled with data
+     */
+    virtual void FilltheBuffer(TDes8& aInputBuffer) = 0;
+    };
+    
+#endif //IRCTRLCOMMAND_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/commandchannelsrc/irctrlcmdobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,302 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irctrlcmdobserver.h"
+#include "irctrlcommand.h"
+#include "irdebug.h"
+#include "ircontrolparams.h"
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIRCtrlCmdObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCtrlCmdObserver* CIRCtrlCmdObserver::NewL
+	(MIRCtrlCmdObserver* aObserver,MIRStreamFill* aStream)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewL" );
+    CIRCtrlCmdObserver* self = CIRCtrlCmdObserver::NewLC(aObserver,aStream);
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewL - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// Function returns an instance of CIRCtrlCmdObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCtrlCmdObserver* CIRCtrlCmdObserver::NewLC
+	(MIRCtrlCmdObserver* aObserver,MIRStreamFill* aStream)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewLC" );
+    CIRCtrlCmdObserver* self = new (ELeave) CIRCtrlCmdObserver;
+    CleanupStack::PushL(self);
+    self->ConstructL(aObserver,aStream);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::NewLC - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Function : ~CIRCtrlCmdObserver
+//  Default destructor calls Cancel function which cancel the active request 
+// ---------------------------------------------------------------------------
+//
+CIRCtrlCmdObserver::~CIRCtrlCmdObserver()
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::~CIRCtrlCmdObserver" );
+    if ( iVolumeTimer->IsActive() )
+        {
+        iVolumeTimer->Cancel();            
+        }
+    delete iVolumeTimer;    
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::~CIRCtrlCmdObserver - Exiting." );
+    }
+    
+// ---------------------------------------------------------------------------
+// Function : SentRequest
+// Function sends request to handle events represented by TIRControlCommmand
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::SentRequest( TIRControlCommmand aCommand, TInt aValue )
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::SentRequest" );
+   if(aCommand==EPlayerChanged)
+	    {
+	    iObserver->PlayerChanged();	
+	    }
+    else
+	    {
+	    iObserver->MCtrlCommand( aCommand, aValue );
+	    }
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::SentRequest - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : FilltheBuffer
+// Function sends request to fill the buffer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::FilltheBuffer(TDes8& aInputBuffer)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::FilltheBuffer" );
+    iStream->FilltheBuffer(aInputBuffer);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::FilltheBuffer - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : FetchVolume
+// Function sends request to get the current volume index
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRCtrlCmdObserver::FetchVolume()
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::FetchVolume" );
+    return iObserver->FetchVolume();
+    }
+
+// ---------------------------------------------------------------------------
+// Function : AudioFadeInOut
+// Function is called for audio Fade In Fade Out Effects
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::AudioFadeInOut
+	(TIRControlCommmand& aCommand,TInt aValue)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::AudioFadeInOut" );
+    iPersistentVolume = aValue;    
+    if ( EBufferFadeIn == aCommand )
+        {
+		//Audio Fade In effect
+        if ( iVolumeTimer->IsActive() )
+            {
+			//cancels the previous request if pending
+            iVolumeTimer->Cancel();            
+            }
+        if ( !iVolumeTimer->IsActive() )
+            {
+			//starts the fade in effect
+            iVolumeLevel = 0;            
+            TTimeIntervalMicroSeconds32 interval(KVolumeTime);
+            iVolumeTimer->Start(interval,interval,TCallBack(
+			CIRCtrlCmdObserver::StartAudioFadeIn,this));
+            }
+        }
+    else if ( EBufferFadeOut == aCommand )
+        {
+		//Audio Fade Out effect
+        if ( iVolumeTimer->IsActive() )
+            {
+			//cancels the previous request if pending
+            iVolumeTimer->Cancel();            
+            }
+        if ( !iVolumeTimer->IsActive() )
+            {
+			//starts the fade out effect
+            iVolumeLevel = iPersistentVolume;
+            TTimeIntervalMicroSeconds32 interval(KDownVolumeTime);
+            iVolumeTimer->Start(interval,interval,TCallBack(
+			CIRCtrlCmdObserver::StartAudioFadeOut,this));
+            }
+        }
+    else
+		{
+        IRLOG_DEBUG( "CIRCtrlCmdObserver::AudioFadeInOut - Exiting." );    
+        return;    
+		}        
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::AudioFadeInOut - Exiting." );   
+    }
+
+// ---------------------------------------------------------------------------
+// Function : DoAudioFadeOut
+// Function is used to sent request start audio Fade Out
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCtrlCmdObserver::DoAudioFadeOut()
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::DoAudioFadeOut" );
+    //requests to start Audio Fade Out
+	iObserver->DoAudioFadeOut();
+    }
+
+// ---------------------------------------------------------------------------
+// Function : ConstructL
+// Function does all the initializations
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRCtrlCmdObserver::ConstructL(MIRCtrlCmdObserver* aObserver,
+    MIRStreamFill* aStream)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::ConstructL" );
+    iObserver = aObserver;
+    iStream = aStream;
+    iVolumeTimer = CPeriodic::NewL(CPeriodic::EPriorityStandard);
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : CIRCtrlCmdObserver
+// Function is the default constructor, sets the CActive priority, Line status
+// ---------------------------------------------------------------------------
+//
+CIRCtrlCmdObserver::CIRCtrlCmdObserver()
+    {
+    //No implementation    
+    }    
+    
+// ---------------------------------------------------------------------------
+// Function : StartAudioFadeIn
+// Function Starts audio Fade In effects
+// ---------------------------------------------------------------------------
+//
+TInt CIRCtrlCmdObserver::StartAudioFadeIn(TAny* aPtr)     
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeIn" );
+    CIRCtrlCmdObserver* self = static_cast<CIRCtrlCmdObserver*>(aPtr);
+    if( self )
+		{
+		self->UpdateVolumeInc();
+		}
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeIn - Exiting." );
+    return KErrNone;        
+    }
+ 
+// ---------------------------------------------------------------------------
+// Function : StartAudioFadeOut
+// Function Starts audio Fade Out effects
+// ---------------------------------------------------------------------------
+//
+TInt CIRCtrlCmdObserver::StartAudioFadeOut(TAny* aPtr)
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeOut" );
+    CIRCtrlCmdObserver* self = static_cast<CIRCtrlCmdObserver*>(aPtr);
+    if( self )
+		{
+		self->UpdateVolumeDec();
+		}
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::StartAudioFadeOut - Exiting." );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Function : UpdateVolumeInc
+// Function does the Fade In effect
+// ---------------------------------------------------------------------------
+//
+void CIRCtrlCmdObserver::UpdateVolumeInc()     
+    {
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeInc" );
+    //less than zero condition check the value will never be less than zero
+	//even when when we start 
+    //primary check is volume becoming greater than equal to current volume 
+	//level stored in iPersistentVolume
+    if ( iVolumeTimer->IsActive()
+		&& ( ( 0 <= iVolumeLevel ) 
+		&& ( iPersistentVolume >= iVolumeLevel ) ) )
+        {
+		//if the time is volume level is not equal to current volume stored in
+		// iPersistentVolume
+		//it will initiates fade in effect
+        iCommand = EBufferFadeIn;
+        iObserver->MCtrlCommand(iCommand,iVolumeLevel);
+        iVolumeLevel++;
+        }
+    else
+        {
+        if ( iVolumeTimer->IsActive() )
+            {
+            iVolumeTimer->Cancel();            
+            }
+        }
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeInc - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : UpdateVolumeDec
+// Function does the Fade In effect 
+// ---------------------------------------------------------------------------
+//
+void  CIRCtrlCmdObserver::UpdateVolumeDec()     
+    {
+	IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeDec" );
+	//primary check is volume becoming lesser than equal to zero level 
+	if ( iVolumeTimer->IsActive()
+		&& ( ( 0 <= iVolumeLevel ) 
+		&& ( iPersistentVolume >= iVolumeLevel ) ) )
+		{
+		//if the time is volume level is not equal to current zero
+		//it will initiates fade out effect
+		iCommand = EBufferFadeOut;
+		iObserver->MCtrlCommand(iCommand,iVolumeLevel);
+		iVolumeLevel--;
+		}
+	else
+		{
+		if ( iVolumeTimer->IsActive() )
+			{
+			iVolumeTimer->Cancel();
+			}
+		}
+    IRLOG_DEBUG( "CIRCtrlCmdObserver::UpdateVolumeDec - Exiting." );    
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irdataprovider.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,278 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRDATAPROVIDER_H
+#define IRDATAPROVIDER_H
+
+#include <f32file.h>
+
+#include "irdataprovidertimer.h"
+#include "irhttpdataproviderobserver.h"
+
+class CIRHttpDataProvider;
+class CIRHttpRequestData;
+class CIRHttpResponseData;
+class CIRSettings;
+class MIRDataProviderObserver;
+
+/**
+ * This class provides the interface with the UI for IRDataProvider component
+ *
+ * @code
+ *
+ * // Create the data provider object. This is used for interaction with
+ * // the iSDS
+ *
+ * CIRDataProvider* iDataProvider = CIRDataProvider::NewL(iObserver);
+ *
+ * // This API is used to give a request to the iSDS and the aRequestObject
+ * // contains the headers to be set for the request url. The call back
+ * // function as defined by MIRDataProviderObserver is called to indicate
+ * // any responses.
+ *
+ * iDataProvider->IRHttpIssueRequestL( aRequestObject );
+ *
+ * // This API is called to cancel a previously issued request.
+ * // If there is no previously issued request it is ignored.
+ *
+ *  iDataProvider->IRHttpCancelRequest();
+ *
+ * // This API is called to indicate the data provider component to
+ * // release the resources held by it generally called when the network
+ * // connection gets disconnected.
+ *
+ * iDataProvider->ReleaseResources();
+ * @endcode
+ */
+
+NONSHARABLE_CLASS ( CIRDataProvider ):
+	public CBase,
+	public MIRHttpDataProviderObserver,
+	public MIRDataProviderTimeoutNotifier
+    {
+    public:
+
+    /**
+     *  CIRDataProvider::NewL(MIRDataProviderObserver& aObserver)
+     *  Creates instance of CIRDataProvider.
+     *  @param aObserver Observer for HTTP request.
+     *  @return CIRDataProvider*
+     */
+    IMPORT_C static CIRDataProvider *NewL(MIRDataProviderObserver &aObserver);
+
+    /**
+     *  CIRDataProvider::NewL(MIRDataProviderObserver& aObserver,
+	 *  TDesC8& aFilePath)
+     *  Creates instance of CIRDataProvider.
+     *  @param aObserver Observer for HTTP request.
+     *  @return CIRDataProvider*
+     */
+    IMPORT_C static CIRDataProvider *NewL( MIRDataProviderObserver &aObserver,
+		const TDesC &aFilePath );
+
+    /**
+     *  CIRDataProvider::~CIRDataProvider()
+     *  Destructs an instance of CIRDataProvider.
+     */
+    virtual ~CIRDataProvider();
+
+    /**
+     *  CIRDataProvider::IRHttpIssueRequest(TDesC8& aUri)
+     *  Used to issue an Http request
+     *  @param aRequestObject A reference of CIRHttpRequestData containing
+	 *  HTTP request parameters
+     */
+    IMPORT_C void IRHttpIssueRequestL( CIRHttpRequestData &aRequestObject );
+
+    /**
+     *  CIRDataProvider::IRHttpCancelRequest()
+     *  Used to cancel a request
+     */
+    IMPORT_C void IRHttpCancelRequest();
+
+    /**
+     *  CIRDataProvider::ReleaseResources()
+     *  Used to release all the resources help by data provider
+     *  Called when there is a network disconnection
+     */
+    IMPORT_C void ReleaseResources();
+
+    IMPORT_C CIRHttpDataProvider* GetHttpDataProvider();
+
+    void ExtractHeaderValue(const TDesC8& aHeaderData,
+    	const TDesC8& aHeaderName,const TDesC8& aDelimeter,
+    	TDes8& aHolder) const;
+
+    /*
+    *These are the callback functions used by CIRHttpDataProvider to
+    *provide the CIRDataProvider with the data after processing the
+    *HTTP request.
+     */
+    /**
+     *  CIRDataProvider::HttpEventComplete()
+     *  Used to Indicate to the observer that the request event has completed
+     */
+    virtual void HttpEventComplete();
+
+    /**
+     *  CIRDataProvider::HttpHeaderReceived( const TDesC8& aHeaderData )
+     *  Used by CIRHttpDataProvider to indicate that an HTTP header is
+     *  received.
+     *  @param aHeaderData Reference to the Header Info
+     */
+    virtual void HttpHeaderReceived( const TDesC8 &aHeaderData );
+
+     /**
+     *  CIRDataProvider::HttpDateHeaderReceived(const TDesC8 &aHeader,
+     *		const TTime& aTime );
+     *  Used by CIRHttpDataProvider to indicate that an HTTP header is
+     *  received.
+     *  @param aHeader Reference to the Header Info
+     *  @param aTime Reference to the TTime object containing time to be
+     *  set in the header
+     */
+    virtual void HttpDateHeaderReceived(const TDesC8 &aHeader,
+     	const TTime& aTime );
+
+    /**
+     *  CIRDataProvider::HttpBodyReceived( const TDesC8& aBodyData )
+     *  Used by CIRHttpDataProvider to indicate that an HTTP response
+	 *  body is received.
+     *  @param aHeaderData Reference to the Body data of HTTP request
+     */
+    virtual void HttpBodyReceived( const TDesC8 &aBodyData );
+
+    /**
+     *  CIRDataProvider::HttpTransactionError(TInt aErrCode)
+     *  Used by CIRHttpDataProvider to indicate that a HTTP Transaction
+	 *  error has occured.
+     *  @param aErrCode Error code indicating the HTTP Transaction error
+     */
+    virtual void HttpTransactionError( TInt aErrCode );
+
+    /**
+     *  CIRDataProvider::HttpResponseCodeRecieved(TInt aResponseCode)
+     *  Used by CIRHttpDataProvider to indicate to the iSDS Client that a
+     *  304 Not Changed response received
+     *  Note: Implemented in version 0.2
+     *  @param aResponseCode Response code received after HTTP Transaction
+     */
+    virtual void HttpResponseCodeRecieved( TInt aResponseCode );
+
+    /**
+     *  CIRDataProvider::TimerExpired( )
+     *  Called to indicate expiry of timer
+     */
+    virtual void TimerExpired();
+
+    private:
+    /**
+     *  CIRDataProvider::CIRDataProvider(MIRDataProviderObserver&
+	 *  aObserver):iDataProviderObserver(aObserver)
+     *  Default Constructor
+     *  @param aObserver Reference to the IRDataProvider Observer
+     */
+    CIRDataProvider( MIRDataProviderObserver &aObserver );
+    /**
+     *  void CIRDataProvider::ConstructL()
+     *  2nd Phase construction
+     */
+    void ConstructL();
+    /**
+     *  void CIRDataProvider::ConstructL(TDesC8& aFileName)
+     *  2nd Phase construction
+     */
+    void ConstructL( const TDesC &aFileName );
+    /**
+     *  CIRDataProvider::NewLC(MIRDataProviderObserver& aObserver)
+     *  Creates instance of CIRDataProvider.
+     *  @param aObserver Observer for HTTP request.
+     *  @return CIRDataProvider*
+     */
+    static CIRDataProvider *NewLC( MIRDataProviderObserver &aObserver );
+    /**
+     *  CIRDataProvider::NewLC(MIRDataProviderObserver& aObserver,
+	 *  TDesC8& aFileName)
+     *  Creates instance of CIRDataProvider.
+     *  @param aObserver Observer for HTTP request.
+     *  @return CIRDataProvider*
+     */
+    static CIRDataProvider *NewLC( MIRDataProviderObserver &aObserver,
+		const TDesC &aFileName );
+
+	/**
+	 *  CIRDataProvider::SetOffsetSeconds( const TTime& aTime )
+	 *  Stores the offset between device time and response header in settings
+	 *  @param isds time
+	 */
+	void SetOffsetSeconds( const TTime& aTime );
+
+private:
+
+	/**
+	 * Reference of the observer object to which call backs are returned
+	 */
+	MIRDataProviderObserver &iDataProviderObserver;
+
+	/**
+	 * Pointer to the HttpDataProvider object which is the actual
+	 * implementation of RFC 2616
+	 */
+    CIRHttpDataProvider *iHttpDataProvider;
+
+     /**
+     * Pointer to timer object
+     */
+    CIRDataProviderTimer *iDataProviderTimer; // Timeout Timer
+ /**
+     * File server session handle
+     */
+    RFs iFsSession; // Used for creation of XML data
+    /**
+    * File handle to create the xml file
+    */
+    RFile iFile;
+
+   	/**
+	 * Name of the Xml file to be created
+	 */
+    TFileName iXmlFilePath;
+
+   	/**
+	 * Pointer to Response header data
+	 */
+    CIRHttpResponseData* iResponseHeaders;
+
+    /**
+     * Used to access Settings object
+     */
+	CIRSettings* iIRSettings;
+
+	/**
+	 * Timer timeout value
+	 */
+	TInt iTimeOut;
+
+    };
+
+#endif // IRDATAPROVIDER_H
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irdataproviderconstants.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRDATAPROVIDERCONSTANTS_H
+#define IRDATAPROVIDERCONSTANTS_H
+
+#include <e32def.h>
+
+// Constants
+const TInt KMaxHeaderNameLength = 32;
+const TInt KMaxHeaderValueLength = 128;
+const TInt KMaxStatusTextLength = 32;
+const TInt KDPMaxContentTypeLength = 128;
+const TInt KMaxCharSetLength = 128;
+
+// This client accepts all content types.
+_LIT8( KAccept, "*/*" );
+// Used to specify the Accept Charset
+_LIT8( KAcceptCharset, "iso-8859-1, utf-8, iso-10646-ucs-2; q=0.6" );
+// Used to specify the Accept Language
+_LIT8( KAcceptLanguage, "en" );
+// Some texts for header output
+_LIT( KDPColon, ": " );
+// Default Content-Type
+_LIT8( KDefaultContentType, "application/xml" );
+// Default CharSet
+_LIT8( KDefaultCharSet, "UTF-8" );
+
+ // HTTP POST ContentType
+_LIT8( KPostContentType, "application/x-gzip" );
+/*!
+ * Http Success 2xx Status codes
+ */
+
+const TInt KOk = 200;
+const TInt KCreated = 201;
+const TInt KAccepted = 202;
+const TInt KNonAuthoritativeInformation = 203;
+const TInt KNoContent = 204;
+const TInt KResetContent = 205;
+const TInt KPartialContent = 206;
+/*!
+ * Redirection 3xx status codes
+ */
+const TInt KMultipleChoices = 300;
+const TInt KMovedPermanently = 301;
+const TInt KFound = 302;
+const TInt KSeeOther = 303;
+const TInt KNotModified = 304;
+const TInt KUseProxy = 305;
+/*
+This status code is not used as per RFC 2616
+const TInt KUnused = 306 
+ */
+const TInt KTemporaryRedirect = 307;
+/*!
+ * Client Error 4xx status codes
+ */
+const TInt KBadRequest = 400;
+const TInt KUnauthorized = 401;
+const TInt KPaymentRequired = 402;
+const TInt KForbidden = 403;
+const TInt KNotFound = 404;
+const TInt KMethodNotAllowed = 405;
+const TInt KNotAcceptable = 406;
+const TInt KProxyAuthenticationRequired = 407;
+const TInt KRequestTimeout = 408;
+const TInt KConflict = 409;
+const TInt KGone = 410;
+const TInt KLengthRequired = 411;
+const TInt KPreconditionFailed = 412;
+const TInt KRequestEntityTooLarge = 413;
+const TInt KRequestURITooLong = 414;
+const TInt KUnsupportedMediaType = 415;
+const TInt KRequestedRangeNotSatisfiable = 416;
+const TInt KExpectationFailed = 417;
+/*!
+ * Server Error 5xx status codes
+ */
+const TInt KInternalServerError = 500;
+const TInt KNotImplemented = 501;
+const TInt KBadGateway = 502;
+const TInt KServiceUnavailable = 503;
+const TInt KGatewayTimeout = 504;
+const TInt KHTTPVersionNotSupported = 505;
+/*!
+ * Timeout  code
+ */
+const TInt KDataProviderTimeout =  - 12345;
+const TInt KDndTimedOut = -5120;
+
+#endif // IRDATAPROVIDERCONSTANTS_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irdataproviderobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRDATAPROVIDEROBSERVER_H
+#define IRDATAPROVIDEROBSERVER_H
+
+#include <e32cmn.h>
+
+class CIRHttpResponseData;
+
+/**
+ * MIRDataProviderObserver
+ * passes events and responses body data with this interface. 
+ * An instance of this class must be provided for construction of 
+ * CIRDataProvider.
+ */
+
+class MIRDataProviderObserver
+    {
+    public:
+
+    /** 
+     *  void MIRDataProviderObserver::IRHttpGeneralError(TInt aErrCode)
+     *  Used to determine the Private path of IRAPP
+     *     
+     */
+    virtual void IRHttpGeneralError( TInt aErrCode ) = 0;
+    
+    /** 
+     *  void MIRDataProviderObserver::IRHttpDataReceived(TDesC& aXmlPath)
+     *  Used to determine the Private path of IRAPP
+     */
+    virtual void IRHttpDataReceived( const TDesC &aXmlPath ,
+            const CIRHttpResponseData& aResponseHeaders ) = 0;
+    /** 
+     *  void MIRDataProviderObserver::IRHttpContentNotChanged()
+     *  Used to determine the Private path of IRAPP
+     */
+    virtual void IRHttpResponseCodeReceived(TInt aResponseCode 
+      	,CIRHttpResponseData& aResponseHeaders  ) = 0;
+    };
+    
+#endif // IRDATAPROVIDEROBSERVER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irdataprovidertimer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRDATAPROVIDERTIMER_H
+#define IRDATAPROVIDERTIMER_H
+
+#include <e32base.h>
+
+/**
+ * Call for timer expiry
+ */
+class MIRDataProviderTimeoutNotifier
+    {
+    
+    public:
+	
+	/**
+	 * Called when the timer raises an event.
+	 */
+    virtual void TimerExpired() = 0;
+	
+    };
+    
+/**
+ * Timer class for response timerouts
+ */
+NONSHARABLE_CLASS ( CIRDataProviderTimer ): public CTimer
+    {
+    public:
+    
+	/**
+	* CIRDataProviderTimer::NewL( const TInt aPriority,
+	* MIRDataProviderTimeoutNotifier &aNotify )
+	* Two phase constructor
+	* @param aPriority Specifies the priority of the timer
+	* @param aNotify Reference of the observer
+	* @return CIRDataProviderTimer object
+	*/ 
+
+    static CIRDataProviderTimer *NewL( const TInt aPriority, 
+		MIRDataProviderTimeoutNotifier &aNotify );
+		
+	/** 
+	* CIRDataProviderTimer::NewLC( const TInt aPriority,
+	* MIRDataProviderTimeoutNotifier &aNotify )
+	* @param aPriority Specifies the priority of the timer
+	* @param aNotify Reference of the observer
+	* @return CIRDataProviderTimer object
+	*/ 
+	   
+    static CIRDataProviderTimer *NewLC( const TInt aPriority, 
+		MIRDataProviderTimeoutNotifier &aNotify );
+ 
+	/**
+	* CIRDataProviderTimer::~CIRDataProviderTimer()
+	* Default C++ destructor
+	*/
+	     
+    virtual ~CIRDataProviderTimer();
+    
+    protected:
+    
+	/** 
+	* Derived from CTimer
+	* CIRDataProviderTimer::RunL()
+	*/     
+    void RunL();
+    
+	/** 
+	* Derived from CTimer
+	* CIRDataProviderTimer::RunError()
+	*/     
+    TInt RunError( TInt aError );
+   	
+    private:
+    
+	/**
+	* CIRDataProviderTimer::CIRDataProviderTimer( const TInt aPriority, 
+	*  MIRDataProviderTimeoutNotifier &aNotify ): CTimer( aPriority ),
+	*  iNotify( aNotify )
+	*/ 
+	       
+    CIRDataProviderTimer( const TInt aPriority, 
+		MIRDataProviderTimeoutNotifier &aNotify );
+    
+	/**
+	* CIRDataProviderTimer::ConstructL()
+	* Second phase constructor
+	*/ 
+    void ConstructL();
+ 
+    private:
+    
+	/** 
+	 * Handle to the class to be notified of a timeout event.
+	 */
+    MIRDataProviderTimeoutNotifier &iNotify;
+    
+    };
+
+#endif // IRDATAPROVIDERTIMER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irhttpdataprovider.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRHTTPDATAPROVIDER_H
+#define IRHTTPDATAPROVIDER_H
+
+#include <mhttptransactioncallback.h>
+#include <rhttpsession.h>
+
+#include "irdataproviderconstants.h"
+#include "irfavoritesdb.h"
+
+class CIRHttpPost;
+class CIRHttpRequestData;
+class CIRNetworkController;
+class CIRLogoDownloadEngine;
+class CIRFavoritesDb;
+class MIRHttpDataProviderObserver;
+
+/**
+ * This class provides the implementation of the HTTP client
+ */
+
+NONSHARABLE_CLASS ( CIRHttpDataProvider ): public CBase,
+										public MHTTPTransactionCallback
+									
+    {
+    public:
+    /**
+     * CIRHttpDataProvider::CIRHttpDataProvider(MIRHttpDataProviderObserver&
+	 * aObserver):iObserver(aObserver),iRunning(EFalse)
+     * Creates instance of CIRHttpDataProvider.
+     * @param aObserver Reference to HTTP Data provider observer
+     */
+    CIRHttpDataProvider( MIRHttpDataProviderObserver &aObserver );
+    /**
+     * CIRHttpDataProvider::~CIRHttpDataProvider()
+     * Destructs instance of CIRHttpDataProvider.
+     */
+    virtual ~CIRHttpDataProvider();
+    /**
+     * CIRHttpDataProvider::NewL(MIRHttpDataProviderObserver& aObserver )
+     * Creates instance of CIRHttpDataProvider.
+     * @param aObserver Reference to HTTP Data provider observer
+     */
+    static CIRHttpDataProvider *NewL( MIRHttpDataProviderObserver &aObserver );
+    /**
+     *  CIRHttpDataProvider::NewLC(MIRHttpDataProviderObserver& aObserver)
+     *  Creates instance of CIRHttpDataProvider.
+     *  @param aObserver Reference to HTTP Data provider observer
+     */
+    static CIRHttpDataProvider *NewLC(MIRHttpDataProviderObserver &aObserver);
+    /**
+     * CIRHttpDataProvider::ConstructL()
+     * 2nd phase construction
+     */
+    void ConstructL();
+    /**
+     * CIRHttpDataProvider::CancelTransactionL()
+     * Cancel the issued Http transaction
+     */
+    void CancelTransaction();
+    /**
+     * CIRHttpDataProvider::GetHttpSession()
+     * returns the iHttpSession
+     */
+    RHTTPSession GetHttpSession();
+
+    /**
+     *  CIRHttpDataProvider::IssueHttpRequestL(
+	 *  CIRHttpRequestData& aRequestInfo )
+     *  Used to issue the request.
+     *  @param aRequestInfo Reference to request object
+     */
+    TInt IssueHttpRequestL( CIRHttpRequestData &aRequestObject );
+    /**
+     *  CIRHttpDataProvider::SetHttpContentType(TDesC& aContentType,
+	 *  TDesC& aCharSet)
+     *  Set the Http content type
+     *  @param aContentType Specifies the Content-Type
+     *  @param aCharSet Specifies the Charecter set
+     */
+    void SetHttpContentType(const TDesC &aContentType,
+    	const TDesC &aCharSet);
+
+    /**
+     *  CIRHttpDataProvider::InitializeHttpDataProviderL();
+     *  Initialize the data provider component
+     */
+    void InitializeHttpDataProviderL();
+
+    /**
+     *  CIRHttpDataProvider::ReleaseResources();
+     *  Releases the resources held by data provider
+     */
+    void ReleaseResources();
+
+    IMPORT_C CIRLogoDownloadEngine* GetLogoDownloadEngine();
+
+    private:
+    /**
+     * CIRHttpDataProvider::MHFRunL()
+     * Inherited from MHTTPTransactionCallback
+     * Called by framework to pass transaction events.
+     * @param aTransaction HTTP Transaction object
+     * @param aEvent HTTP Transaction Event
+     */
+    void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent &aEvent );
+    /**
+     * CIRHttpDataProvider::MHFRunError()
+     * Inherited from MHTTPTransactionCallback
+     * Called by framework to pass transaction errors
+     * @param aError Error code of the HTTP Transactin
+     * @return TInt Return code KErrNone if success
+     */
+    TInt MHFRunError( TInt aError, RHTTPTransaction aTransaction,
+		const THTTPEvent &aEvent );
+    /**
+     *  CIRHttpDataProvider::ExtractResponseHeadersL(
+	 *  RHTTPTransaction aTransaction )
+     *  Used to Extract the response headers.
+     *  @param aTransaction HTTP Transaction object
+     */
+    void ExtractResponseHeadersL( const RHTTPTransaction& aTransaction );
+    /**
+     *  CIRHttpDataProvider::SetHeaderL( RHTTPHeaders aHeaders, TInt
+	 *  aHeaderField, const TDesC8& aHeaderValue )
+     *  Used to set the Http header
+     *  @param aHeaders HTTP Headers object
+     *    @param aHeaderField Header field
+     *  @param aHeaderValue Header value
+     */
+    void SetHeaderL( RHTTPHeaders aHeaders, TInt aHeaderField,
+		const TDesC8 &aHeaderValue ) const;
+
+    /**
+     * CIRHttpDataProvider::BuildHeadersL(CIRHttpRequestData &aRequestInfo)
+     * Build the headers for the request
+     * @param CIRHttpRequestData&
+    */
+     void BuildHeadersL(const CIRHttpRequestData &aRequestInfo);
+
+    /**
+     * CIRHttpDataProvider::ValidateStatusCode(TInt aStatusCode)
+     * Validate the status code returned
+     * @param aStatusCode Status code
+     */
+    void ValidateStatusCode( TInt aStatusCode );
+
+    /**
+     *  CIRHttpDataProvider::CloseLogFile ();
+     *  Used to Close the log file LogUsage.gz externally from other sources (bug-fixing)
+     */
+    void CloseLogFile ();
+
+
+public:
+
+    /**
+     * iSetNonUAProfUserAgent Set when the UAProf should not be used
+     * may be used for image data provider
+     */
+    TBool iSetNonUAProfUserAgent;
+
+private:
+
+	/**
+	 * Status code of the response
+	 */
+    TInt iStatusCode;
+
+    /**
+     * Indicates if the transaction is active ie. there is a pending
+     * request.
+     */
+    TBool iRunning;
+
+    /**
+     * Used to identify first request to the data provider object
+     */
+    TBool iFirstTime;
+
+    /**
+     * HTTP session object
+     */
+    RHTTPSession iHttpSession;
+
+    /**
+     * HTTP transaction object
+     */
+    RHTTPTransaction iHttpTransaction;
+
+    /**
+     * HTTP Post object
+     */
+    CIRHttpPost* iLogMessage;
+
+    CIRFavoritesDb* iFavDb;
+
+    /**
+     * Network controller handle pointer
+     */
+    CIRNetworkController *iIRNetworkControllerHandle;
+
+    /**
+     * Reference of the Http data provider Observer
+     */
+    MIRHttpDataProviderObserver &iObserver;
+
+    /**
+     * Status text of the response
+     */
+    TBuf < KMaxStatusTextLength > iStatusText;
+
+    /**
+     * Content type header info
+     */
+    TBuf8 < KDPMaxContentTypeLength > iContentType;
+
+	/**
+     * Character set header info
+     */
+    TBuf8 < KMaxCharSetLength > iCharSet;
+
+    /**
+     * Set to ETrue if the response code is KNotModified ( 304 )
+     */
+    TBool iNotModified;
+
+    /**
+     * Pointet to Logo download
+     */
+    CIRLogoDownloadEngine* iLogoDownloadEngine;
+
+    };
+#endif // IRHTTPDATAPROVIDER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irhttpdataproviderobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRHTTPDATAPROVIDEROBSERVER_H
+#define IRHTTPDATAPROVIDEROBSERVER_H
+
+#include <e32cmn.h>
+
+/**
+ * MIRHttpDataProviderObserver
+ * passes events and responses body data with this interface. 
+ * An instance of this class must be provided for construction of 
+ * CIRHttpDataProvider.
+ */
+class MIRHttpDataProviderObserver
+    {
+public:
+    
+    /** 
+     *  void MIRHttpDataProviderObserver::HttpEventComplete()
+     *  Used to indicate HTTP event completion
+     */
+    virtual void HttpEventComplete() = 0;
+    
+    /** 
+     *  void MIRHttpDataProviderObserver::HttpHeaderReceived( 
+	 *  const TDesC8& aHeaderData )
+     *  Used to indicate HTTP header is received
+     */
+    virtual void HttpHeaderReceived( const TDesC8 &aHeaderData ) = 0;
+        
+    /** 
+     *  HttpDateHeaderReceived(const TDesC8 &aHeader, const TTime& aTime );
+     *  Used to indicate HTTP header is received
+     *  to be set in the request header
+     */
+    virtual void HttpDateHeaderReceived(const TDesC8 &aHeader,
+    	const TTime& aTime ) = 0;
+
+    /** 
+     *  void MIRHttpDataProviderObserver::HttpBodyReceived( 
+     *  const TDesC8& aBodyData )
+     *  Used to indicate HTTP body is received
+     */
+    virtual void HttpBodyReceived( const TDesC8 &aBodyData ) = 0;
+    
+    /** 
+     *  void MIRHttpDataProviderObserver::HttpTransactionError(
+     *  TInt aErrorCode)
+     *  Used to indicate HTTP Transaction error
+     */
+    virtual void HttpTransactionError( TInt aErrorCode ) = 0;
+    
+    /** 
+     *  void MIRHttpDataProviderObserver::HttpResponseCodeRecieved(
+     *  TInt aResponseCode)
+     *  Used to indicate HTTP response code recieved
+     */
+    virtual void HttpResponseCodeRecieved( TInt aResponseCode ) = 0;
+    
+    };
+
+#endif // IRHTTPDATAPROVIDEROBSERVER_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irhttppost.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRHTTPPOST_H
+#define IRHTTPPOST_H
+
+#include <f32file.h>
+#include <mhttpdatasupplier.h>
+#include <rhttptransaction.h>
+
+class CIRSettings;
+
+/**
+ * CIRHttpPost class for posting the data
+ * Reading from the file as chunks of data
+ * using MHTTPDataSupplier - Data supplier 
+ */
+NONSHARABLE_CLASS ( CIRHttpPost ):public CBase,	public MHTTPDataSupplier
+	{
+public:
+
+	/** 
+     * CIRHttpPost::NewL
+     * 1st phase constructor
+     */    
+     static CIRHttpPost* NewL( const RHTTPTransaction& aHttpTransaction );
+    		
+	/** 
+     * CIRHttpPost::~CIRHttpPost
+     * C++ default destructor
+     */
+	virtual ~CIRHttpPost();
+
+	/** 
+     * CIRHttpPost::GetNextDataPart
+     * Obtain a data part from the supplier. 
+     * The data is guaranteed to survive until a call
+     * is made to ReleaseData(). 
+     */
+	virtual TBool GetNextDataPart( TPtrC8& aDataPart );
+	
+	/** 
+     * ReleaseData()
+     * Release the current data part being held at the data supplier
+     */
+	virtual void ReleaseData();
+	
+	/** 
+     * OverallDataSize()
+     * Obtain the overall size of the data being supplied, 
+     * if known to the supplier
+     */	
+	virtual TInt OverallDataSize();
+	
+	/** 
+     * Reset()
+     * Reset the data supplier
+     * otherwise returns KErrNone
+     */
+	virtual TInt Reset();
+
+	/** 
+     * GetFileToPostL()
+     * Prepares the data to be posted from the log file
+     */
+	void GetFileToPostL(TInt *aFileSize);
+
+	/** 
+     * CloseLogFile ()
+     * Used to Close the log file LogUsage.gz externally from other sources (bug-fixing)
+     */
+	void CloseLogFile ();	
+	
+	/** 
+     * SetTransaction().
+     * Sets transaction.
+     *
+     * @param aHttpTransaction Reference to RHTTPTransaction.
+     */
+	void SetTransaction( const RHTTPTransaction& aHttpTransaction );
+
+private:
+
+	/** 
+     * CIRHttpPost::CIRHttpPost
+     * C++ default constructor
+     * @param aHttpTransaction Reference to RHTTPTransaction
+     */
+	CIRHttpPost( const RHTTPTransaction& aHttpTransaction );
+     
+	/** 
+     * CIRHttpPost::ConstructL
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+	/** 
+     * CIRHttpPost::GetDataPartFromFileL
+     * Obtain a data part from the browse log file.
+     *
+     * @param aDataPart Data from browse log to be returned.
+     */
+	 void GetDataPartFromFileL( TDes8& aDataPart );
+    
+private:
+
+	/**
+     * Browse log file.
+     */	
+    RFile iLogFile;
+
+	/**
+     * Total size of the post data file
+     */
+	TInt iTotalsize;
+	
+	/**
+     * set the initial data sent
+     */	
+	TInt iStartPos;
+	
+	/**
+     * remaining size of data to be sent
+     */	
+	TInt iRemainingLength;
+	
+     /**
+     * object to HTTP Transaction 
+     */
+	RHTTPTransaction iTransaction;
+    
+    /**
+     * Data part buffer.
+     */
+	RBuf8 iPartPostBuffer;
+	
+	/**
+	*central repository settings handle
+	*/
+	CIRSettings* iSettings;
+	};
+
+#endif //IRHTTPPOST_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irhttprequestdata.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRHTTPREQUESTDATA_H
+#define IRHTTPREQUESTDATA_H
+
+#include <e32base.h>
+
+// Constants
+/**
+ * Used to specify the maximum header-field value length
+ */
+const TInt KMAXHEADERLENGTH = 255;
+
+/**
+ * Used to specify the maximum URI length
+ */
+const TInt KMAXURILENGTH = 256;
+
+// Enumerations
+/**
+ * Enum specifying the type of HTTP request
+ */
+enum TIRHttpDataProvider
+    {
+    EIRHttpGET = 1, EIRHttpPOST
+    };
+
+/**
+ * Class to hold the request data
+ */
+class CIRHttpRequestData : public CBase
+    {
+public:
+    
+    /** 
+     *  void CIRHttpRequestData::CIRHttpRequestData()
+     *  Default C++ Constructor
+     */
+    inline CIRHttpRequestData()
+        {
+        // Implementation not required
+        }
+        
+    /** 
+     *  void CIRHttpRequestData::~CIRHttpRequestData()
+     *  Default C++ Destructor
+     *     
+     */
+    virtual inline ~CIRHttpRequestData()
+        {
+        // Implementation not required        
+        }
+public:
+    
+    /**
+     * This value indicates type of request method ( GET / POST )
+     */ 
+    TInt iMethod;
+    
+    /**
+     * IfModifiedSince header info
+     */    
+    TDateTime iIfModifiedSince;
+    
+    /**
+     * Set as ETrue if the IfModifiedSince header is set
+     */ 
+    TBool isIfModifiedSet;
+    
+    /**
+     * Used to set the Accept-Language Header
+     */ 
+    TBuf8 < KMAXHEADERLENGTH > iAcceptLanguage; 
+    
+    /**
+     * Used to set the Content-Type Header
+     */ 	
+    TBuf8 < KMAXHEADERLENGTH > iContentType; 
+	
+	/**
+	 * Used to specify the URI
+	 */	    
+    TBuf8 < KMAXURILENGTH > iUri;
+    
+    };
+
+
+class CIRHttpResponseData: public CBase
+	{
+public:
+
+    /** 
+     *  void CIRHttpResponseData::CIRHttpResponseData()
+     *  Default C++ Constructor
+     *     
+     */
+    inline CIRHttpResponseData()
+        {
+        // Implementation not required
+        }
+        
+    /** 
+     *  void CIRHttpResponseData::~CIRHttpResponseData()
+     *  Default C++ Destructor
+     */
+    inline ~CIRHttpResponseData()
+        {
+        // Implementation not required		
+        }
+public:
+    
+    /**
+     * Content type of the data
+     */ 
+    TBuf8 < KMAXHEADERLENGTH > iContentType;
+    
+    /**
+     * Date header value of the response
+     */ 
+    TTime iDate;
+    
+    /**
+     * Max age header value
+     */
+    TBuf8 < KMAXHEADERLENGTH > iMaxAge;
+    
+    /**
+     * Content-Length header value
+     */
+    TBuf8 < KMAXHEADERLENGTH > iContentLength;
+
+    /**
+     * LastModified header value
+     */ 
+    TTime iLastModified;
+    
+    /**
+     * Expires header value
+     */ 
+    TBuf8 < KMAXHEADERLENGTH > iExpires;
+    
+    /**
+     * ETag header value, Used in logo downloads
+     */
+    TBuf8 < KMAXHEADERLENGTH > iETag;
+    
+    };
+
+#endif // IRHTTPREQUESTDATA_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/irlogodownloadengine.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,561 @@
+/*
+* Copyright (c) 2006-2007 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 of IRLogoDownloadEngine.cpp
+*
+*/
+
+
+
+
+
+#ifndef IRLOGODOWNLOADENGINE_H
+#define IRLOGODOWNLOADENGINE_H
+
+#include <mhttpdatasupplier.h>
+#include <mhttptransactioncallback.h>
+#include <rhttptransaction.h>
+#include <rhttpsession.h>
+#include <rhttpheaders.h>
+#include <http.h>
+#include <es_sock.h>
+
+#include <pspresetobserver.h>
+#include "irfavoritesdb.h"
+#include "irisdspreset.h"
+#include "mlogodownloadobserver.h"
+#include "ircacheobserver.h"
+#include "iractivenetworkobserver.h"
+
+/**
+ * Used to specify the maximum header-field value length
+ */
+const TInt KMAXHEADERLENGTHS = 255;
+
+//Forward Declarations
+class RHTTPSession;
+class RHTTPTransaction;
+class CIRIsdsPreset;
+class CIRFavoritesDb;
+class CIRNetworkController;
+class MLogoDownloadObserver;
+class CIRCacheMgmt; //for logo cache mgmt
+class CIRHttpResponseData;
+class MIRActiveNetworkObserver;//for network up and downs
+
+
+
+/**
+* class CIRLogoDownlaodEngine
+*/
+class CIRLogoDownloadEngine : public CBase,	public MHTTPTransactionCallback,
+                              public MHTTPDataSupplier,public MIRCacheObserver,
+                              public MPSPresetObserver,
+                              public MIRActiveNetworkObserver
+{
+public:
+	/**
+	* enum TState
+	* status of the transaction
+	*/
+   	enum TState
+    {   
+    EIdle,
+    ESendingEvent
+    };
+    
+    /**
+	* CIRLogoDownloadEngine* NewL()
+	* Creates instance of CIRLogoDownloadEngine.
+	*/
+	IMPORT_C static CIRLogoDownloadEngine* NewL();
+	
+	/**
+	* void SetFavDbInstance(CIRFavoritesDb* aFavDb)
+	* To set the favorites db instance
+	*/
+    IMPORT_C void SetFavDbInstance(CIRFavoritesDb* aFavDb);
+    
+    /**
+	* SendRequestL(CIRIsdsPreset* aPreset)
+	* API is called from the SearchResultsView for to download logo
+	*/
+    IMPORT_C void SendRequestL(CIRIsdsPreset* aPreset,TInt aXValue=0,TInt aYValue=0);
+    
+    /**
+	* SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle
+	*										,TInt aNPVReq,TInt aXValue,TInt aYValue)
+	* API is called from the NowPlayingView for to download logo 
+	*/
+    IMPORT_C void SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,
+    				TInt aNPVReq=1,TInt aXValue=0,TInt aYValue=0);
+    
+    IMPORT_C TBool isLogoCachedL(CIRIsdsPreset* aPreset, TInt aXValue=0, TInt aYValue=0);
+    
+    /**
+	* CancelTransaction()
+	* cancels the current transaction
+	*/
+    IMPORT_C void CancelTransaction();
+    
+    /**
+	* TBool IsRunning() const
+	* To know the status of downloading logo
+	*/
+    IMPORT_C TBool IsRunning() const;
+    
+    /**
+	* ~CIRLogoDownloadEngine()
+	* Destructs instance of CIRLogoDownloadEngine
+	*/
+    IMPORT_C ~CIRLogoDownloadEngine();
+    
+    /**
+	* void SendPresetWithLogoL()
+	* sends the preset with logo to the requestors
+	*/
+    IMPORT_C void SendPresetWithLogoL();
+    
+    /**
+    * GetCacheLogoL(TDesC& aUrl,TInt& aStatus)
+    * takes the url as a parameter and returns the logo data which is in cache
+    * this API is called form the search results for to display logo on the view
+    */
+    IMPORT_C void GetCacheLogoL(const TDesC& aUrl,TInt& aStatus);
+	
+	/**
+	* TDesC8& SendCacheLogo()
+    * sends the logo which is cached
+    */
+	IMPORT_C TDesC8& SendCacheLogo();
+
+    
+    
+    /**
+	* void FetchLogoDataL(CIRIsdsPreset* aPreset)
+	* API is used to download logo from isds/internet
+	* called in the API SendRequestL(CIRIsdsPreset* aPreset)
+	*/
+    void FetchLogoDataL(CIRIsdsPreset* aPreset);
+    
+    /**
+	* void FetchLogoDataL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,TInt aNPVReq)
+	* API is used to download logo from isds/internet
+	* called in the API SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle)
+	*/
+	void FetchLogoDataL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,TInt aNPVReq);
+	
+	/**
+	* void ManagePresetArrayIndexL()
+	* To update the iPresetArray current index
+	*/
+	void ManagePresetArrayIndexL();
+	
+	/**
+	* void ManageCachePresetArrayIndexL()
+	* To update the iCachePresetArray current index
+	*/
+	void ManageCachePresetArrayIndexL();
+
+    /**
+	* void CacheError()
+	* Called from cachemgmt in case of an error
+	* callback API from MIRCacheObserver
+	*/   
+    void CacheError();
+    
+	/**
+	* void CacheFailed()
+	* Called from cachemgmt in case of cache failure
+	* callback API from MIRCacheObserver
+	*/ 
+    void CacheFailed();
+    
+	/**
+	* void CacheInvalid()
+	* Called from cachemgmt in case cache is invalid
+	* callback API from MIRCacheObserver
+	*/ 
+    void CacheInvalid();
+    
+	/**
+	* void CachedStructureL()
+	* Called from cachemgmt data retrival is successful
+	*@param aChoice,it gives the data type of the cache
+	* callback API from MIRCacheObserver
+	*/ 
+    void CachedStructureL(TInt aChoice);
+    
+    /**
+     *  ReleaseResources();
+     *  Releases the resources held by logo download engine
+     */
+    void ReleaseResources();
+	
+	/**
+	 * HandlePresetChangedL
+	 * whenever their is any change in preset
+	 * the function will get invoked.
+	 * callback API from MPSPresetObserver
+	 */
+	void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+	
+	//from MIRActiveNetworkObserver
+	/**
+	 * Notified by network controller when network is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+
+		 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+	
+private:
+	/**
+	* void ConstructL()
+	* 2nd phase construction
+	*/
+	void ConstructL();
+	
+	/**
+	* CIRLogoDownloadEngine()
+	* Standard C++ constructor
+	*/
+    CIRLogoDownloadEngine();        
+    
+    /**
+	* void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue) const
+	* to set the headers of the http transaction
+	*/
+    void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue) const;
+    
+    /**
+	* void IssueLogoDownloadRequest()
+	* submits the transaction for to download the logo
+	*/
+	void IssueLogoDownloadRequestL();	    
+	
+	/**
+	* void CheckCacheForLogoL(TInt aValue)
+	* checks the logo in the cache
+	*/
+	void CheckCacheForLogoL(TInt aValue);
+	
+	/**
+	* void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
+	* from MHTTPTransactionCallback
+	*/
+	void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+    
+    /**
+	* TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
+	* //from MHTTPTransactionCallback
+	*/
+    TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+    
+    /**
+	* void ReleaseData()
+	* from MHTTPDataSupplier
+	*/
+	void ReleaseData();
+    
+    /**
+	* TBool GetNextDataPart(TPtrC8& aDataPart)
+	* from MHTTPDataSupplier
+	*/
+    TBool GetNextDataPart(TPtrC8& aDataPart);
+    
+    /**
+	* TInt Reset()
+	* from MHTTPDataSupplier
+	*/
+    TInt Reset();
+    
+    /**
+	* TInt OverallDataSize()
+	* from MHTTPDataSupplier
+	*/
+    TInt OverallDataSize();
+    
+     /**
+     *  CIRLogoDownloadEngine::ExtractResponseHeadersL(
+	 *  RHTTPTransaction aTransaction )
+     *  Used to Extract the response headers.
+     *  @param aTransaction HTTP Transaction object
+     */
+    void ExtractResponseHeadersL( const RHTTPTransaction& aTransaction );
+    
+    /**
+     *  CIRLogoDownloadEngine::HttpHeaderReceived( const TDesC8& aHeaderData )
+     *  indicate that an HTTP header is received.
+     *  @param aHeaderData Reference to the Header Info
+     */
+    virtual void HttpHeaderReceived( const TDesC8 &aHeaderData );
+    
+    /**
+     * CIRLogoDownloadEngine::ExtractHeaderValue(const TDesC8& aHeaderData,
+     *	       const TDesC8& aHeaderName,const TDesC8& aDelimeter,
+     *	       TDes8& aHolder) const
+     * Used to build the CIRHttpResponseData
+     */
+    void ExtractHeaderValue(const TDesC8& aHeaderData,
+    	const TDesC8& aHeaderName,const TDesC8& aDelimeter,
+    	TDes8& aHolder) const;
+
+    /**
+     * CIRLogoDownloadEngine::HttpDateHeaderReceived(const TDesC8 &aHeader,const TTime& aTime )
+     * Used to build the CIRHttpResponseData members
+     */
+	void HttpDateHeaderReceived(const TDesC8 &aHeader,const TTime& aTime );
+    	
+	
+private:
+    /**
+    * pointer to the logo observer object
+    */	
+	MLogoDownloadObserver* iLogoHandle;
+	
+	/**
+    * pointer to the logo observer object
+    */
+	MLogoDownloadObserver* iTempLogoHandle;
+	
+	/**
+    * pointer to the logo observer object
+    */
+	MLogoDownloadObserver* iCacheTempLogoHandle;
+	
+	/**
+    * pointer to the favorites db object
+    */
+	CIRFavoritesDb* iFavDb;
+	
+	/**
+    * pointer to the preset object
+    * temporary preset in the logo downloading usecase
+    */
+	CIRIsdsPreset* iTempPreset;
+	
+	/**
+    * pointer to the preset object
+    * temporary preset in the cache checking usecase
+    */
+	CIRIsdsPreset* iCacheTempPreset;
+	
+	/**
+    * pointer to the preset object
+    * preset used to conver CIRPreset to CIRIsdsPreset
+    */
+	CIRIsdsPreset* iCopyPreset;
+
+    /**
+    * Network controller handle pointer
+    */
+    CIRNetworkController *iIRNetworkControllerHandle;
+    
+    /**
+    * Preset Array for downloading logo
+    */
+    CArrayPtrFlat<CIRIsdsPreset>*  iPresetArray;
+    
+    /**
+    * Preset Array for checking cache
+    */
+    CArrayPtrFlat<CIRIsdsPreset>*  iCachePresetArray;
+    
+    /**
+    * MLogoDownloadObserver array for downloading logo
+    */
+    CArrayPtrFlat<MLogoDownloadObserver>*   iObserverArray;
+    
+    /**
+    * MLogoDownloadObserver array for checking cache
+    */
+    CArrayPtrFlat<MLogoDownloadObserver>*   iCacheObserverArray;
+    
+    /**
+    * To keep track whether the req came for Favorites or NPV(downloading logo)
+    */
+    CArrayFixFlat<TInt>*    iReqFromArray;
+    
+    /**
+    * To keep track whether the req came for Favorites or NPV(checking cache)
+    */
+    CArrayFixFlat<TInt>*    iCacheReqFromArray;
+    
+    /**
+    * Separate session for the logo downloading
+    */
+    RHTTPSession    iLogoSession;
+    
+    /**
+    * http transaction
+    */
+    RHTTPTransaction		iTransaction;
+    
+    /**
+    * for the transactions with cache mgmt
+    */
+	CIRCacheMgmt *iCache;
+	
+	/**
+    * Pointer to Response header data
+    */
+	CIRHttpResponseData* iResponseHeaders;
+	
+	/**
+    * boolean for to know the status of the downloading logo
+    */
+    TBool	iRunning;	
+    
+    /**
+    * body of the transaction request
+    */
+    TDesC8* iReqBody;
+    
+    /**
+    * body of the transaction response
+    */
+    HBufC8* iRespBody;
+    
+    /**
+    * size of the response body
+    */
+    TInt    iRespBodySize;
+    
+    /**
+    * state of the transaction
+    */
+    TState  iState;
+    
+    /**
+    * status, from which the preset has modified
+    */
+    TBool iPresetModifiedStatus;
+    
+    
+    /**
+    * iPresetArray position
+    */
+	TInt    iPresetArrayPos;
+	
+	/**
+    * position of the iReqFromArray
+    */
+	TInt    iReqFromArrayPos;
+	
+	/**
+    * position of the iObserverArray
+    */
+	TInt    iObserverArrayPos;
+	
+	/**
+    * position of the iCachePresetArray
+    */
+	TInt    iCachePresetArrayPos;
+	
+	/**
+    * position of the iCacheReqFromArray
+    */
+	TInt    iCacheReqFromArrayPos;
+	
+	/**
+    * position of the iCacheObserverArray
+    */
+	TInt    iCacheObserverArrayPos;
+	
+	/**
+    * status of cache request
+    */
+	TInt    iCacheReqFrom;
+	
+	/**
+    * temporary variable for the status of request
+    */
+	TInt    iTempReqFrom;
+	
+	/**
+    * boolean to verify first time or not
+    */
+	TBool	iFirstTime;
+	
+	/**
+    * ETrue if logo is available in cache
+    */
+	TBool   iLogoCached; 
+	
+	/**
+    * boolean for forcibly getting the logo from cache
+    */
+	TBool   iForceGet;
+	
+	/**
+    * boolean for to track whether the cache request has made or not
+    */
+	TBool   iCacheReqMade;
+	
+	/**
+    * response from the cache for the availability of logo(CacheNotValid,NotCached,CacheUseable)
+    */
+	TInt 	iResult;
+	
+	/**
+    * status on cache checking
+    */
+	TBool 	iCheckingCache;
+	
+	/**
+    * integer for the status of sending the logo
+    */
+	TInt 	iSendingLogo;
+	
+	/**
+    * Using for temporarily till the isds provides urls
+    */
+	TInt 	iImageIndex;
+	
+	/**
+	* this is used while making a conditional GET request
+	*/
+	TTime iLastModifiedTime;
+	
+	/**
+	* this is used while making a conditional GET request
+	*/
+	TBuf8 < KMAXHEADERLENGTHS > iETag;
+	
+	/**
+	* this is used to track whether the request is conditional GET or non-conditional GET
+	*/
+	TBool iIsConditionalGET;
+	
+	/**
+	* Status of the logo download in the network up and down scenarios
+	*/
+	TBool iLogoRequestPending;
+	
+	/**
+	* status of the response code
+	*/
+	TInt iRespCode;
+	
+};
+
+#endif // IRLOGODOWNLOADENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataproviderinc/mlogodownloadobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* 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 MLOGODOWNLOADOBSERVER_H
+#define MLOGODOWNLOADOBSERVER_H
+
+#include <e32def.h>
+
+#include "irisdspreset.h"
+
+class CIRIsdsPreset;
+
+/**
+ * MLogoDownloadObserver
+ * passes id of a preset which has downloaded the logo.
+ * An instance of this class must be provided while calling the API SendRequestL() of 
+ * CIRLogoDownloadEngine.  The call of the API SendRequestL() is from NowPlayingView.
+ */
+class MLogoDownloadObserver
+    {
+public:
+    
+	
+	/**
+	 * MLogoDownloadObserver::PresetLogoDownloadedL()
+	 * called back when a preset's logo has downloaded
+	 * @param CIRIsdsPreset*, preset with downloaded logo
+	 */
+	virtual void PresetLogoDownloadedL(CIRIsdsPreset* aPreset)=0;
+	
+	/**
+	 * MLogoDownloadObserver::PresetLogoDownloadError()
+	 * called back when a preset's logo has not downloaded
+	 * @param CIRIsdsPreset*, preset with no logo data
+	 */
+	virtual void PresetLogoDownloadError(CIRIsdsPreset* aPreset)=0;
+
+	
+	 
+	};
+
+#endif // MLOGODOWNLOADOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataprovidersrc/irdataprovider.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,433 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdataprovider.h"
+#include "irdataproviderobserver.h"
+#include "irdebug.h"
+#include "irhttpdataprovider.h"
+#include "irhttprequestdata.h"
+#include "irsettings.h"
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::NewL(MIRDataProviderObserver& aObserver)
+//  Creates instance of CIRDataProvider.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRDataProvider *CIRDataProvider::NewL(
+    MIRDataProviderObserver &aObserver )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::NewL - Entering" );
+    CIRDataProvider *self = NewLC( aObserver );
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRDataProvider::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::NewL(MIRDataProviderObserver& aObserver)
+//  Creates instance of CIRDataProvider.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRDataProvider *CIRDataProvider::NewL(
+    MIRDataProviderObserver &aObserver, const TDesC &aFileName )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::NewL(..., &aFileName) - Entering" );
+    CIRDataProvider *self = NewLC( aObserver, aFileName );
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRDataProvider::NewL(..., &aFileName) - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::~CIRDataProvider()
+//  Destructs an instance of CIRDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRDataProvider::~CIRDataProvider() // destruct - virtual, so no export
+    {
+    IRLOG_DEBUG( "CIRDataProvider::~CIRDataProvider() - Entering" );
+
+    if (iHttpDataProvider)
+        {
+        // Cancel any active transactions
+        iHttpDataProvider->CancelTransaction();
+        // Destroy the data provider object
+        }
+
+    delete iHttpDataProvider;
+
+    if( iIRSettings )
+    	{
+    	iIRSettings->Close();
+		}
+
+    if (iDataProviderTimer)
+        {
+     	iDataProviderTimer->Cancel(); // Cancel the timer
+        }
+
+    delete iDataProviderTimer; // Destroy the timer object
+	if( iResponseHeaders )
+		{
+        delete iResponseHeaders;
+		}
+    iFile.Close();
+    iFsSession.Close(); // Close the file server session
+    IRLOG_DEBUG( "CIRDataProvider::~CIRDataProvider() - Exiting" );
+    }
+
+// General functions exported ( These are the API`s exposed )( HTTP )
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::IRHttpIssueRequest(TDesC8& aUri)
+//  Used to issue an Http request
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRDataProvider::IRHttpIssueRequestL(
+     CIRHttpRequestData &aRequestObject )
+    {
+    IRHttpCancelRequest();
+    IRLOG_DEBUG( "CIRDataProvider::IRHttpIssueRequestL - Entering" );
+	IRRDEBUG2("CIRDATAPROVIDER::IRHTTPISSUEREQUESTL",KNullDesC);
+    CIRHttpResponseData* newResponseHeaders = new ( ELeave ) CIRHttpResponseData;
+    delete iResponseHeaders;
+    iResponseHeaders = newResponseHeaders;
+
+
+    // Create or replace the file used to store xml response from iSDS
+    User::LeaveIfError(iFile.Replace( iFsSession, iXmlFilePath, EFileWrite ));
+    iHttpDataProvider->CancelTransaction();
+
+    TInt err = iHttpDataProvider->IssueHttpRequestL( aRequestObject );
+    // Cancel the timer if active
+    iDataProviderTimer->Cancel();
+    // Start the timer for timeout
+    iDataProviderTimer->After( iTimeOut );
+    if ( err == KErrCouldNotConnect )
+        {
+        // If error in IssueHttpRequest then close the open file
+	    iFile.Close();
+	    iDataProviderTimer->Cancel();
+	    iDataProviderObserver.IRHttpGeneralError( err );
+	    // Cancel any possibly pending transactions
+	    iHttpDataProvider->CancelTransaction();
+        }
+
+    IRLOG_DEBUG( "CIRDataProvider::IRHttpIssueRequestL - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::IRHttpCancelRequest()
+//  Used to cancel a request
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRDataProvider::IRHttpCancelRequest()
+    {
+    IRLOG_DEBUG( "CIRDataProvider::IRHttpCancelRequest - Entering" );
+    // Cancel the timer if active
+    iDataProviderTimer->Cancel();
+    // Cancel any possibly pending transactions
+    iHttpDataProvider->CancelTransaction();
+    // Close the file handle used to store the xml response
+    iFile.Close();
+    IRLOG_DEBUG( "CIRDataProvider::IRHttpCancelRequest - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::ReleaseResources()
+//  Used to release the resources held by the IRHttpDataProvider
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRDataProvider::ReleaseResources()
+	{
+	IRLOG_DEBUG( "CIRDataProvider::ReleaseResources - Entering" );
+	// Release the resources held by the IRHttpDataProvider
+	iHttpDataProvider->ReleaseResources();
+	IRLOG_DEBUG( "CIRDataProvider::ReleaseResources - Exiting" );
+	}
+
+
+//These are the callback functions used by CIRHttpDataProvider to
+//provide the CIRDataProvider with the data after processing the
+//HTTP request.
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::HttpEventComplete()
+//  Used to Indicate to the observer that the request event has completed
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::HttpEventComplete()
+    {
+    IRLOG_DEBUG( "CIRDataProvider::HttpEventComplete - Entering" );
+    iFile.Close();
+    iDataProviderTimer->Cancel();
+
+    // Need to take a member to a local variable, as the IRHttpDataReceived may initiate
+    // an IRHttpIssueRequestL() call, causing the headers to be replaced with empty ones, and
+    // causing crashes.
+    CIRHttpResponseData* currentHeaders = iResponseHeaders;
+    iResponseHeaders = NULL; // prevents the destructor to delete in case something streange happens.
+    iDataProviderObserver.IRHttpDataReceived( iXmlFilePath,*currentHeaders );
+
+    delete currentHeaders;
+    IRLOG_DEBUG( "CIRDataProvider::HttpEventComplete - Exiting." );
+    }
+
+
+void CIRDataProvider::ExtractHeaderValue(const TDesC8& aHeaderData,const
+	TDesC8& aHeaderName,const TDesC8& aDelimeter,TDes8& aHolder) const
+	{
+	IRLOG_DEBUG( "CIRDataProvider::ExtractHeaderValue - Entering" );
+	TInt position = aHeaderData.Find(aHeaderName);
+	if( position >= 0)
+		{
+		TPtrC8 headerValue = aHeaderData.Mid(position);
+		TInt delimeterPosition = headerValue.Find(aDelimeter);
+		if( delimeterPosition != KErrNotFound )
+			{
+			delimeterPosition++;
+			TPtrC8 value = headerValue.Mid(delimeterPosition);
+			aHolder.Copy(value);
+			aHolder.TrimAll();
+			}
+		}
+	IRLOG_DEBUG( "CIRDataProvider::ExtractHeaderValue - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::HttpHeaderReceived( const TDesC8& aHeaderData )
+//  Used by CIRHttpDataProvider to indicate that an HTTP header is received.
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::HttpHeaderReceived( const TDesC8& aHeaderData )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::HttpHeaderReceived - Entering." );
+	_LIT8(KDelim,":");
+	_LIT8(KContentType,"Content-Type");
+	ExtractHeaderValue(aHeaderData,KContentType,KDelim,iResponseHeaders->
+		iContentType);
+	_LIT8(KMaxAge,"max-age");
+	_LIT8(KDelimEqual,"=");
+	ExtractHeaderValue(aHeaderData,KMaxAge,KDelimEqual,iResponseHeaders->
+		iMaxAge);
+	_LIT8(KContentLength,"Content-Length");
+	ExtractHeaderValue(aHeaderData,KContentLength,KDelim,iResponseHeaders->
+		iContentLength);
+	_LIT8(KExpires,"Expires");
+	ExtractHeaderValue(aHeaderData,KExpires,KDelim,iResponseHeaders->iExpires);
+	IRLOG_DEBUG( "CIRDataProvider::HttpHeaderReceived - Exiting." );
+    }
+
+
+void CIRDataProvider::HttpDateHeaderReceived(const TDesC8 &aHeader,
+	const TTime& aTime )
+	{
+	IRLOG_DEBUG( "CIRDataProvider::HttpDateHeaderReceived - Entering." );
+	_LIT8(KDate,"Date");
+	_LIT8(KLastModified,"Last-Modified");
+	TInt position = aHeader.Find(KDate);
+	if( position != KErrNotFound )
+		{
+		iResponseHeaders->iDate = aTime;
+		//find the difference between device time and response time
+		//and storing the offset
+		SetOffsetSeconds( aTime );
+		return ;
+		}
+	position = aHeader.Find(KLastModified);
+	if( position != KErrNotFound )
+		{
+		iResponseHeaders->iLastModified = aTime;
+		}
+	IRLOG_DEBUG( "CIRDataProvider::HttpDateHeaderReceived - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::HttpBodyReceived( const TDesC8& aBodyData )
+//  Used by CIRHttpDataProvider to indicate that an HTTP response body
+//  is received.
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::HttpBodyReceived( const TDesC8 &aBodyData )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::HttpBodyReceived - Entering" );
+    TInt FileWritePos = 0;
+    iFile.Seek( ESeekEnd, FileWritePos );
+    iFile.Write( FileWritePos, aBodyData );
+    IRLOG_DEBUG( "CIRDataProvider::HttpBodyReceived - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::HttpTransactionError(TInt aErrCode)
+//  Used by CIRHttpDataProvider to indicate that a HTTP Transaction error
+//  has occured.
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::HttpTransactionError( TInt aErrCode )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::HttpTransactionError - Entering" );
+    iFile.Close();
+    iDataProviderTimer->Cancel();
+    iDataProviderObserver.IRHttpGeneralError( aErrCode );
+    // Cancel any possibly pending transactions
+    iHttpDataProvider->CancelTransaction();
+    IRLOG_DEBUG( "CIRDataProvider::HttpTransactionError - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::HttpResponseCodeRecieved(TInt aResponseCode)
+//  Used by CIRHttpDataProvider to indicate to the iSDS Client that a
+//  304 Not Changed response received
+//  Note: Implemented in version 0.2
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::HttpResponseCodeRecieved( TInt aResponseCode )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::HttpResponseCodeRecieved - Entering" );
+    iDataProviderObserver.IRHttpResponseCodeReceived( aResponseCode, *iResponseHeaders );
+    IRLOG_DEBUG( "CIRDataProvider::HttpResponseCodeRecieved- Exiting" );
+    }
+
+// constructor support
+// don't export these, because used only by functions in this DLL
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::CIRDataProvider(MIRDataProviderObserver& aObserver):
+//  iDataProviderObserver(aObserver)
+//  Default Constructor
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::TimerExpired()
+    {
+    IRLOG_INFO( "CIRDataProvider::TimerExpired - Entering" );
+    IRHttpCancelRequest();
+    HttpTransactionError( KDataProviderTimeout );
+    IRLOG_INFO( "CIRDataProvider::TimerExpired - Exiting" );
+    }
+
+
+
+CIRDataProvider::CIRDataProvider( MIRDataProviderObserver &aObserver ):
+    iDataProviderObserver( aObserver ) // first-phase C++ constructor
+    {
+    IRLOG_INFO( "CIRDataProvider::CIRDataProvider" );
+    // Definition not required
+    }
+
+// ---------------------------------------------------------------------------
+//  void CIRDataProvider::ConstructL()
+//  2nd Phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::ConstructL() // second-phase constructor
+    {
+    IRLOG_DEBUG( "CIRDataProvider::ConstructL - Entering" );
+    _LIT( KXmlFile, "iSdsResponse.xml" );
+    ConstructL(KXmlFile);
+    iHttpDataProvider->iSetNonUAProfUserAgent = EFalse;
+    IRLOG_DEBUG( "CIRDataProvider::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+//  void CIRDataProvider::ConstructL(TDesC& aFilePath)
+//  2nd Phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::ConstructL( const TDesC &aFileName )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::ConstructL(const TDesC &aFileName) - Entering" );
+    iHttpDataProvider = CIRHttpDataProvider::NewL( *this );
+    iDataProviderTimer = CIRDataProviderTimer::NewL( EPriorityHigh,  *this );
+    User::LeaveIfError(iFsSession.Connect());
+    iIRSettings = CIRSettings::OpenL();
+    iXmlFilePath = iIRSettings->PrivatePath();
+    iXmlFilePath.Append( aFileName );
+    iTimeOut = iIRSettings->GetTimeOut();
+    iHttpDataProvider->iSetNonUAProfUserAgent = ETrue;
+    IRLOG_DEBUG( "CIRDataProvider::ConstructL(const TDesC &aFileName) - Exiting." );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::NewLC(MIRDataProviderObserver& aObserver)
+//  Creates instance of CIRDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRDataProvider *CIRDataProvider::NewLC( MIRDataProviderObserver &aObserver )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::NewLC - Entering." );
+    CIRDataProvider *self = new( ELeave )CIRDataProvider( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRDataProvider::NewLC - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::NewLC(MIRDataProviderObserver& aObserver)
+//  Creates instance of CIRDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRDataProvider *CIRDataProvider::NewLC( MIRDataProviderObserver &aObserver,
+    const TDesC &aFileName )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::NewLC - Entering." );
+    CIRDataProvider *self = new( ELeave )CIRDataProvider( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFileName );
+    IRLOG_DEBUG( "CIRDataProvider::NewLC - Exiting." );
+    return self;
+    }
+
+EXPORT_C CIRHttpDataProvider* CIRDataProvider::GetHttpDataProvider()
+{
+IRLOG_DEBUG( "CIRDataProvider::GetHttpDataProvider" );
+	return iHttpDataProvider;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::SetOffsetSeconds( const TTime& aTime )
+//  Stores the offset between device time and response header in settings
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::SetOffsetSeconds( const TTime& aTime )
+	{
+	IRLOG_DEBUG( "CIRDataProvider::SetOffsetSeconds - Entering" );
+	TTime currenttime;
+	//calculates the current time
+	currenttime.UniversalTime();
+	//finds offset from isds response
+	TTimeIntervalSeconds offsetseconds;
+	//Find offset from isds response
+	TInt err = currenttime.SecondsFrom(aTime,offsetseconds);
+	if( err )
+		{
+		//if error offsetseconds is set to zero
+		offsetseconds = 0;
+		}
+	//storing the offset value in setting
+	TRAP_IGNORE( iIRSettings->SetTimeCorrectionL(offsetseconds.Int()) )
+	IRLOG_DEBUG( "CIRDataProvider::SetOffsetSeconds - Exiting." );
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataprovidersrc/irdataprovidertimer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdataprovidertimer.h"
+#include "irdebug.h"
+// ---------------------------------------------------------------------------
+// CIRDataProviderTimer::NewL( const TInt aPriority,
+//		MIRDataProviderTimeoutNotifier &aNotify )
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRDataProviderTimer *CIRDataProviderTimer::NewL( const TInt aPriority, 
+     MIRDataProviderTimeoutNotifier &aNotify )
+    {
+    IRLOG_DEBUG( "CIRDataProviderTimer::NewL - Entering" );
+    CIRDataProviderTimer *self = CIRDataProviderTimer::NewLC( aPriority,
+		aNotify );
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRDataProviderTimer::NewL - Exiting" );
+    return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRDataProviderTimer::NewLC( const TInt aPriority, 
+//		MIRDataProviderTimeoutNotifier &aNotify )
+// ---------------------------------------------------------------------------
+//    
+CIRDataProviderTimer *CIRDataProviderTimer::NewLC( const TInt aPriority, 
+    MIRDataProviderTimeoutNotifier &aNotify )
+    {
+    IRLOG_DEBUG( "CIRDataProviderTimer::NewLC - Entering" );
+    CIRDataProviderTimer *self = new( ELeave )CIRDataProviderTimer( 
+		aPriority, aNotify );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRDataProviderTimer::NewLC - Exiting" );
+    return self;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CIRDataProviderTimer::~CIRDataProviderTimer()
+// Default C++ destructor
+// ---------------------------------------------------------------------------
+//    
+ 
+CIRDataProviderTimer::~CIRDataProviderTimer()
+{
+IRLOG_DEBUG( "CIRDataProviderTimer::~CIRDataProviderTimer" );
+// Implementation not required
+}
+
+
+// ---------------------------------------------------------------------------
+// Derived from CTimer
+// CIRDataProviderTimer::RunL()
+// ---------------------------------------------------------------------------
+//  
+void CIRDataProviderTimer::RunL()
+    {
+    IRLOG_DEBUG( "CIRDataProviderTimer::RunL - Entering" );
+    if ( iStatus == KErrNone )
+        {
+        iNotify.TimerExpired();
+        }
+    else
+        {
+        User::Leave( iStatus.Int() );
+        }
+    IRLOG_DEBUG( "CIRDataProviderTimer::RunL - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// Derived from CTimer
+// CIRDataProviderTimer::RunError()
+// ---------------------------------------------------------------------------
+//    
+TInt CIRDataProviderTimer::RunError( TInt /*aError*/ )
+    {
+    IRLOG_DEBUG( "CIRDataProviderTimer::RunError" );
+        return KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRDataProviderTimer::CIRDataProviderTimer( const TInt aPriority, 
+//  MIRDataProviderTimeoutNotifier &aNotify ): CTimer( aPriority ),
+//  iNotify( aNotify )
+// ---------------------------------------------------------------------------
+//        
+CIRDataProviderTimer::CIRDataProviderTimer( const TInt aPriority, 
+    MIRDataProviderTimeoutNotifier &aNotify ): CTimer( aPriority ),
+    iNotify( aNotify )
+    {
+    IRLOG_DEBUG( "CIRDataProviderTimer::CIRDataProviderTimer" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRDataProviderTimer::ConstructL()
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//    
+void CIRDataProviderTimer::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRDataProviderTimer::ConstructL - Entering" );
+    CTimer::ConstructL();
+    CActiveScheduler::Add( this );
+    IRLOG_DEBUG( "CIRDataProviderTimer::ConstructL - Exiting" );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1036 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <httpstringconstants.h>
+#include <rhttpheaders.h>
+#include <mmfcontrollerpluginresolver.h> //to get the supported MIME types
+#ifdef _DEBUG
+#include <bautils.h>
+#include "irreportsettings.h"
+#endif
+#include "irdataprovider.h"
+#include "irdebug.h"
+#include "irhttpdataprovider.h"
+#include "irhttppost.h"
+#include "irhttprequestdata.h"
+#include "irnetworkcontroller.h"
+#include "irdatatransferobserver.h"
+#include "irlogodownloadengine.h"
+#include "irfavoritesdb.h"
+#include "irsettings.h"
+
+//Added for ALR/SNAP
+const TInt KBufflengthMaxLength = 255;
+const TInt KWapProfileMaxLength = 20;
+const TInt KNokiaIrAppAcceptMaxLength = 25;
+const TInt KSize = 1024;
+const TInt KMaxSize = 2048;
+const TInt KBufSize = 10;
+const TUid KUidHelixController        = { 0x101F8514 }; // Helix Video controller UID
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::CIRHttpDataProvider(MIRHttpDataProviderObserver&
+// aObserver):iObserver(aObserver),iRunning(EFalse)
+// Creates instance of CIRHttpDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRHttpDataProvider::CIRHttpDataProvider( MIRHttpDataProviderObserver
+    &aObserver ): iRunning( EFalse ), iObserver( aObserver )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::CIRHttpDataProvider" );
+    // Definition not required
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::~CIRHttpDataProvider()
+// Destructs instance of CIRHttpDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRHttpDataProvider::~CIRHttpDataProvider()
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::~CIRHttpDataProvider - Entering" );
+    iHttpSession.Close();
+    delete iLogMessage;
+    if(iIRNetworkControllerHandle)
+    	{
+    	iIRNetworkControllerHandle->Close();
+        }
+    if(iLogoDownloadEngine)
+    	{
+	    delete iLogoDownloadEngine;
+	    iLogoDownloadEngine = NULL;
+    	}
+    IRLOG_DEBUG( "CIRHttpDataProvider::~CIRHttpDataProvider - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::NewL(MIRHttpDataProviderObserver& aObserver )
+// Creates instance of CIRHttpDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRHttpDataProvider *CIRHttpDataProvider::NewL( MIRHttpDataProviderObserver
+	&aObserver )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::NewL - Entering" );
+    CIRHttpDataProvider *self = NewLC( aObserver );
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRHttpDataProvider::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::NewLC(MIRHttpDataProviderObserver& aObserver)
+// Creates instance of CIRHttpDataProvider.
+// ---------------------------------------------------------------------------
+//
+CIRHttpDataProvider *CIRHttpDataProvider::NewLC( MIRHttpDataProviderObserver
+    &aObserver )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::NewLC - Entering" );
+    CIRHttpDataProvider *self = new( ELeave )CIRHttpDataProvider( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRHttpDataProvider::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::ConstructL()
+// 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::ConstructL - Entering" );
+    iFirstTime = ETrue;
+    iIRNetworkControllerHandle = CIRNetworkController::OpenL();
+    iLogMessage = CIRHttpPost::NewL(iHttpTransaction);
+    iLogoDownloadEngine = CIRLogoDownloadEngine::NewL();
+    IRLOG_DEBUG( "CIRHttpDataProvider::ConstructL - Exiting" );
+    }
+
+EXPORT_C CIRLogoDownloadEngine* CIRHttpDataProvider::GetLogoDownloadEngine()
+{
+IRLOG_DEBUG( "CIRHttpDataProvider::GetLogoDownloadEngine" );
+	return iLogoDownloadEngine;
+}
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::CancelTransactionL()
+// Cancel the issued Http transaction
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::CancelTransaction()
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::CancelTransaction  - Entering" );
+    // Make sure that logfile is closed
+    CloseLogFile ();
+    if ( !iRunning )
+        {
+        return ;
+        }
+    // Close() also cancels transaction (Cancel() can also be used but
+    // resources allocated by transaction must be still freed with Close())
+    iHttpTransaction.Close();
+    // Not running anymore
+    iRunning = EFalse;
+    IRLOG_DEBUG( "CIRHttpDataProvider::CancelTransaction - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::CloseLogFile  ( CIRHttpRequestData& aRequestInfo )
+// Used to Close the log file LogUsage.gz externally from other sources (bug-fixing)
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::CloseLogFile ()
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::CloseLogFile  - Entering" );
+	if (iLogMessage) iLogMessage->CloseLogFile ();
+	IRLOG_DEBUG( "CIRHttpDataProvider::CloseLogFile  - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::IssueHttpRequestL( CIRHttpRequestData& aRequestInfo )
+// Used to issue the request.
+// ---------------------------------------------------------------------------
+//
+TInt CIRHttpDataProvider::IssueHttpRequestL( CIRHttpRequestData &aRequestInfo )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::IssueHttpRequestL - Entering" );
+    IRRDEBUG2("CIRHTTPDATAPROVIDER::IRHTTPISSUEREQUESTL",KNullDesC);
+    iNotModified = EFalse;
+    
+    if ( !( iIRNetworkControllerHandle->GetNetworkStatus() ) )
+        {
+        // Error Network connection inactive
+        return KErrCouldNotConnect;
+        }
+    if ( iFirstTime )
+        {
+        InitializeHttpDataProviderL();
+        iIRNetworkControllerHandle->InitializeHttpSessionL( iHttpSession,
+        			 MIRDataTransferTracker::EIRTransferCategoryIsds);
+        iFirstTime = EFalse;
+        }
+    // Parse string to URI (as defined in RFC2396)
+    TUriParser8 uri;
+    uri.Parse( aRequestInfo.iUri );
+    // Get request method string
+    RStringF method;
+    switch ( aRequestInfo.iMethod )
+        {
+        case EIRHttpGET:
+                {
+                method = iHttpSession.StringPool().StringF( HTTP::EGET,
+					RHTTPSession::GetTable() );
+                }
+            break;
+        case EIRHttpPOST:
+                {
+                method = iHttpSession.StringPool().StringF( HTTP::EPOST,
+					RHTTPSession::GetTable() );
+                }
+            break;
+        default:
+            {
+            }
+            break;
+        }
+    CleanupClosePushL( method );
+
+    IRLOG_DEBUG( "CIRHttpDataProvider::IssueHttpRequestL - Opening transaction" );
+    // Open transaction with previous method and parsed uri. This class will
+    // receive transaction events in MHFRunL and MHFRunError.
+    iHttpTransaction = iHttpSession.OpenTransactionL( uri,  *this, method );
+
+#ifdef _DEBUG
+    RFs iFs;
+    User::LeaveIfError(iFs.Connect());
+    
+    TTime timeStamp;
+    //timeStamp.UniversalTime();
+    timeStamp.HomeTime();
+    TDateTime dateTime =  timeStamp.DateTime();
+    
+    _LIT(KFormatTime,"-%d-%d-%d %d.%d.%d.xml.gz\n");
+    TBuf<32>    sendTime;
+    sendTime.Format(KFormatTime,dateTime.Year(),TInt(dateTime.Month()+1),dateTime.Day()+1,
+                                dateTime.Hour(),dateTime.Minute(),dateTime.Second());
+
+    _LIT( KDstFilePath, "c:\\data\\IR_Log\\");
+    TFileName dstFileName(KDstFilePath);
+    dstFileName.Append(KGZipLogFileName);
+    dstFileName.Append(sendTime);
+    
+    iFs.MkDirAll(dstFileName);
+    
+    if ( aRequestInfo.iMethod == EIRHttpPOST )
+        {
+        CIRSettings * settings = CIRSettings::OpenL();
+        if(NULL != settings)
+            {
+            TFileName filePath = settings->PrivatePath();
+            filePath.Append( KGZipLogFileName );                   
+
+            BaflUtils::CopyFile(iFs, filePath, dstFileName);
+            settings->Close();
+        }
+    }
+#endif
+    
+    if ( aRequestInfo.iMethod == EIRHttpPOST )
+        {
+        IRLOG_DEBUG( "CIRHttpDataProvider::IssueHttpRequestL - POST method" );
+        // Close the LogFile
+        iLogMessage->CloseLogFile ();
+        iLogMessage->SetTransaction( iHttpTransaction );
+        TInt FileSize(KErrNone);
+        TRAPD(err, iLogMessage->GetFileToPostL(&FileSize));
+        if( err )
+	        {
+	        // failed to open the file to be posted hence cancel the request
+	        CleanupStack::PopAndDestroy(&method);
+	        iHttpTransaction.Close();
+	        return KErrCouldNotConnect;
+	        }
+        TBuf8<KBufflengthMaxLength> bufflength;
+        _LIT8(KFormat,"%d");
+        bufflength.Format(KFormat,FileSize);
+        aRequestInfo.iContentType.Copy(KPostContentType);
+        RHTTPRequest LogRequest;
+        LogRequest = iHttpTransaction.Request();
+        LogRequest.SetBody((MHTTPDataSupplier&) *iLogMessage);
+        RHTTPHeaders header = iHttpTransaction.Request().GetHeaderCollection();
+        SetHeaderL(header,HTTP::EContentType,aRequestInfo.iContentType );
+        SetHeaderL(header,HTTP::EContentLength,bufflength);
+        }
+
+
+     // Setup the headers for the HTTP request
+    BuildHeadersL(aRequestInfo);
+  
+    // Submit the transaction. After this the framework will give transaction
+    // events via MHFRunL and MHFRunError.
+    iHttpTransaction.SubmitL();
+   
+#ifdef _DEBUG  
+    if ( aRequestInfo.iMethod == EIRHttpPOST )
+        {
+        _LIT( KSentPrefix, "X__");
+        TFileName sentLogFileName(KDstFilePath);
+        sentLogFileName.Append(KSentPrefix);
+        sentLogFileName.Append(KGZipLogFileName);
+        sentLogFileName.Append(sendTime);
+        BaflUtils::RenameFile(iFs, dstFileName, sentLogFileName);      
+        }
+    iFs.Close();
+#endif    
+    
+    CleanupStack::PopAndDestroy( &method );
+    iRunning = ETrue;
+    IRLOG_INFO( "CIRHttpDataProvider::IssueHttpRequestL - Submitted HTTP request" );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::SetHttpContentType(TDesC& aContentType,TDesC& aCharSet)
+// Set the Http content type
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::SetHttpContentType( const TDesC &aContentType,
+    const TDesC &aCharSet )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::SetHttpContentType - Entering" );
+    iContentType.Copy( aContentType );
+    iCharSet.Copy( aCharSet );
+    IRLOG_DEBUG( "CIRHttpDataProvider::SetHttpContentType - Exiting." );
+    }
+
+
+void CIRHttpDataProvider::InitializeHttpDataProviderL()
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::InitializeHttpDataProviderL - Entering" );
+    iHttpSession.Close();
+    TRAPD( LeaveValue, iHttpSession.OpenL() );
+    if ( LeaveValue != KErrNone )
+        {
+        // Most common error; no access point configured, and session creation
+        // leaves with KErrNotFound.
+        // Load a string from the resource file and add the error code to string
+        User::Leave( LeaveValue );
+        }
+    // Set the HTTP connection properties
+    RStringPool strP = iHttpSession.StringPool();
+    RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo();
+    // RSocketServ Handle
+    connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketServ,
+		RHTTPSession::GetTable() ),
+		THTTPHdrVal( iIRNetworkControllerHandle->GetIRSocketServer().Handle() ) );
+    // RConnection Handle
+    TInt connPtr = REINTERPRET_CAST( TInt,
+		&( iIRNetworkControllerHandle->GetIRConnection() ) );
+
+    connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketConnection,
+		RHTTPSession::GetTable() ), THTTPHdrVal( connPtr ) );
+    // HTTP Version ( Specify that i am using HTTP/1.1
+
+	connInfo.SetPropertyL( strP.StringF( HTTP::EVersion,
+		RHTTPSession::GetTable() ),
+		THTTPHdrVal( strP.StringF( HTTP::EHttp11, RHTTPSession::GetTable() ) ) );
+
+	RStringF temp = strP.OpenFStringL( KAccept );
+    CleanupClosePushL( temp );
+    connInfo.SetPropertyL( strP.StringF( HTTP::EAccept,
+		RHTTPSession::GetTable() ), THTTPHdrVal( temp ) );
+
+	CleanupStack::PopAndDestroy( &temp );
+    iContentType.Copy( KDefaultContentType );
+    iCharSet.Copy( KDefaultCharSet );
+
+    IRLOG_DEBUG( "CIRHttpDataProvider::InitializeHttpDataProviderL - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::MHFRunL()
+// Inherited from MHTTPTransactionCallback
+// Called by framework to pass transaction events.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHttpDataProvider::MHFRunL( RHTTPTransaction aTransaction,
+    const THTTPEvent &aEvent )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunL - Entering." );
+    
+    switch ( aEvent.iStatus )
+        {
+        case THTTPEvent::EGotResponseHeaders:
+            {
+            IRLOG_INFO( "CIRHttpDataProvider::MHFRunL - THTTPEvent::EGotResponseHeaders" );
+            IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--HEADERS",KNullDesC);
+            // HTTP response headers have been received. Use
+            // aTransaction.Response() to get the response. However, it's not
+            // necessary to do anything with the response when this event occurs.
+            // Get HTTP status code from header (e.g. 200)
+            RHTTPResponse resp = aTransaction.Response();
+            iStatusCode = resp.StatusCode();
+            // Get status text (e.g. "OK")
+            iStatusText.Copy(
+				( const unsigned short int* )resp.StatusText().DesC().Ptr(),
+				iStatusText.MaxLength() );
+            // Extract header field names and value
+	            	ExtractResponseHeadersL( aTransaction );
+	        // Validate the status code
+            ValidateStatusCode( iStatusCode );
+            }
+        break;
+        case THTTPEvent::EGotResponseBodyData:
+            {
+            // Part  of response's body data received. Use
+            // aTransaction.Response().Body()->GetNextDataPart() to get the actual
+            // body data.
+            // Get the body data supplier
+            IRLOG_INFO( "CIRHttpDataProvider::MHFRunL - THTTPEvent::EGotResponseBodyData" );
+            MHTTPDataSupplier *body = aTransaction.Response().Body();
+            TPtrC8 dataChunk;
+            body->GetNextDataPart( dataChunk );
+            iObserver.HttpBodyReceived( dataChunk );
+            // To release the body data.
+            body->ReleaseData();
+            }
+        break;
+        case THTTPEvent::ESucceeded:
+            {
+            IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--SUCCEEDED",KNullDesC);
+            // Transaction can be closed now. It's not needed anymore.
+            aTransaction.Close();
+            iRunning = EFalse;
+            iObserver.HttpEventComplete();
+            IRLOG_INFO( "CIRHttpDataProvider::MHFRunL - THTTPEvent::ESucceeded" );
+            }
+        break;
+        case THTTPEvent::EFailed:
+            {
+            IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--FAILED",KNullDesC);
+            // Transaction completed with failure.
+            aTransaction.Close();
+            iRunning = EFalse;
+            iObserver.HttpTransactionError( iStatusCode );
+            IRLOG_ERROR2( "CIRHttpDataProvider::MHFRunL - THTTPEvent::EFailed (status=%d)", iStatusCode );
+            }
+        break;
+       case THTTPEvent::ENotifyNewRequestBodyPart:
+            {
+            iLogMessage->ReleaseData();
+            }
+            break;
+        case KServiceUnavailable:
+	        {
+			IRRDEBUG2("MHFRunl:KServiceUnavailable",KNullDesC);
+			aTransaction.Close();
+            iRunning = EFalse;
+			iObserver.HttpTransactionError(KServiceUnavailable);
+	        }
+	        break;
+		case KDndTimedOut:      
+				{
+                IRRDEBUG2("MHFRunL :KDndTimedOut ",KNullDesC);
+      			// Just close the transaction on errors
+                aTransaction.Close();
+                iRunning = EFalse;
+				iObserver.HttpTransactionError(KDndTimedOut);	
+				}   
+				break;      
+        default:
+            // There are more events in THTTPEvent,
+            // Which is needed can be implemented incase required
+            // by the HTTP Data Provider
+                {
+                IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL--DEFAULT",KNullDesC);
+                if ( aEvent.iStatus < 0 )
+                    {
+                    IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNL %d",aEvent.iStatus);
+                    // Just close the transaction on errors
+                    aTransaction.Close();
+                    iRunning = EFalse;
+                    iObserver.HttpTransactionError( iStatusCode );
+                    }
+                // Other events are not errors
+				// (e.g. permanent and temporary redirections)
+				// ignore such errors
+                }
+            break;
+        }
+    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunL - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::MHFRunError()
+// Inherited from MHTTPTransactionCallback
+// Called by framework to pass transaction errors
+// ---------------------------------------------------------------------------
+//
+TInt CIRHttpDataProvider::MHFRunError( TInt /* aError*/,
+    RHTTPTransaction /*aTransaction*/, const THTTPEvent & /*aEvent*/ )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunError - Entering" );
+    IRRDEBUG2("CIRHTTPDATAPROVIDER::MHFRUNERROR",KNullDesC);
+    // Handle error and return KErrNone.
+    IRLOG_DEBUG( "CIRHttpDataProvider::MHFRunError - Exiting." );
+    return KErrNone;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::ExtractResponseHeadersL( RHTTPTransaction aTransaction )
+// Used to Extract the response headers.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHttpDataProvider::ExtractResponseHeadersL(const RHTTPTransaction&
+	aTransaction )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::ExtractResponseHeadersL - Entering" );
+    RHTTPResponse response = aTransaction.Response();
+    RHTTPHeaders respHeader = response.GetHeaderCollection();
+    THTTPHdrFieldIter iterator = respHeader.Fields();
+    RStringPool httpStringPool = aTransaction.Session().StringPool();
+    iterator.First();
+    HBufC8 *headerField = HBufC8::NewLC( KMaxHeaderNameLength +
+		KMaxHeaderValueLength );
+    HBufC8 *fieldValBuf = HBufC8::NewLC( KMaxHeaderValueLength );
+    while ( iterator.AtEnd() == EFalse )
+        {
+        RStringTokenF fieldName = iterator();
+        RStringF fieldNameStr = httpStringPool.StringF( fieldName );
+        THTTPHdrVal fieldVal;
+        if ( respHeader.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
+            {
+            const TDesC8 &fieldNameDesC = fieldNameStr.DesC();
+            headerField->Des().Copy( fieldNameDesC.Left(
+				KMaxHeaderNameLength ) );
+            fieldValBuf->Des().Zero();
+            switch ( fieldVal.Type() )
+                {
+                // the value is an integer
+                //lint restore -e747:Significant prototype
+                //coercion (arg. no. 1) int to long long  :
+                case THTTPHdrVal::KTIntVal: fieldValBuf->Des().Num(
+					fieldVal.Int() );
+                break;
+                // the value is a case-insensitive string
+                case THTTPHdrVal::KStrFVal:
+                    {
+                    RStringF fieldValStr = httpStringPool.StringF(
+						fieldVal.StrF() );
+                    const TDesC8 &fieldValDesC = fieldValStr.DesC();
+                    fieldValBuf->Des().Copy( fieldValDesC.Left(
+						KMaxHeaderValueLength ) );
+                    }
+                break;
+                // the value is a case-sensitive string
+                case THTTPHdrVal::KStrVal:
+                    {
+                    RString fieldValStr = httpStringPool.String(
+						fieldVal.Str() );
+                    const TDesC8 &fieldValDesC = fieldValStr.DesC();
+                    fieldValBuf->Des().Copy( fieldValDesC.Left(
+						KMaxHeaderValueLength ) );
+                    }
+                break;
+                // the value is a date/time
+                case THTTPHdrVal::KDateVal:
+                    {
+                    TDateTime date = fieldVal.DateTime();
+                    TTime t( date );
+                    if ( !iSetNonUAProfUserAgent )
+       					{
+       		            iObserver.HttpDateHeaderReceived( *headerField ,t );
+       					}
+                    }
+                break;
+                // the value is type is unknown
+                default:
+                    break;
+                }
+            // Display HTTP header field name and value
+            headerField->Des().Append( KDPColon );
+            headerField->Des().Append( *fieldValBuf );
+            iObserver.HttpHeaderReceived( *headerField );
+            }
+        ++iterator;
+        }
+    
+    CleanupStack::PopAndDestroy( fieldValBuf );
+    CleanupStack::PopAndDestroy( headerField );
+    IRLOG_DEBUG( "CIRHttpDataProvider::ExtractResponseHeadersL - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::SetHeaderL( RHTTPHeaders aHeaders, TInt aHeaderField,
+// const TDesC8& aHeaderValue )
+// Used to set the Http header
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::SetHeaderL( RHTTPHeaders aHeaders,
+    TInt aHeaderField, const TDesC8 &aHeaderValue ) const
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::SetHeaderL - Entering" );
+    RStringF valStr = iHttpSession.StringPool().OpenFStringL( aHeaderValue );
+    CleanupClosePushL( valStr );
+    THTTPHdrVal val( valStr );
+    aHeaders.SetFieldL( iHttpSession.StringPool().StringF( aHeaderField,
+		RHTTPSession::GetTable() ), val );
+    CleanupStack::PopAndDestroy( &valStr );
+    IRLOG_DEBUG( "CIRHttpDataProvider::SetHeaderL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::BuildHeadersL(CIRHttpRequestData &aRequestInfo)
+//  Build the headers for the request
+// ---------------------------------------------------------------------------
+//
+
+void CIRHttpDataProvider::BuildHeadersL(const CIRHttpRequestData &aRequestInfo)
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - Entering" );
+    RBuf logstr;
+    logstr.Create(KMaxSize);
+    logstr.CleanupClosePushL();
+     // Set headers for request; user agent and accepted content type
+    RHTTPHeaders header = iHttpTransaction.Request().GetHeaderCollection();
+
+     SetHeaderL( header, HTTP::EAccept, KAccept );
+     logstr.Copy(KAccept);
+    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAccept = %S", &logstr );
+
+       // Set the User-Agent header to UAProf string
+       SetHeaderL( header, HTTP::EUserAgent,
+		   iIRNetworkControllerHandle->GetUAProfString()->Des() );
+       logstr.Copy(iIRNetworkControllerHandle->GetUAProfString()->Des());
+    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EUserAgent = %S", &logstr );		   
+
+       // Set the Accept Character set header
+   SetHeaderL( header, HTTP::EAcceptCharset, KAcceptCharset );
+   logstr.Copy(KAcceptCharset);
+    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptCharset = %S", &logstr );
+
+    // Set the Accept-Language header as specified in aRequestInfo
+   if ( aRequestInfo.iAcceptLanguage.Length() != 0 )
+        {
+        SetHeaderL( header, HTTP::EAcceptLanguage,
+			aRequestInfo.iAcceptLanguage );
+        logstr.Copy(aRequestInfo.iAcceptLanguage);
+	    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptLanguage = %S", &logstr );
+        }
+    // If not specified then set the default accept language as "en"
+   else
+        {
+        SetHeaderL( header, HTTP::EAcceptLanguage, KAcceptLanguage );
+        logstr.Copy(KAcceptLanguage);
+        IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptLanguage = %S", &logstr );
+        }
+
+    // Set the If-Modified-Since header if required
+   if ( aRequestInfo.isIfModifiedSet )
+        {
+        THTTPHdrVal val( aRequestInfo.iIfModifiedSince );
+        header.SetFieldL( iHttpSession.StringPool().StringF(
+			HTTP::EIfModifiedSince, RHTTPSession::GetTable() ), val );
+        }
+
+    // Set the x-wap-profile header
+
+   TBuf8<KWapProfileMaxLength> xWapProfile;
+   _LIT(KXWapProfile,"x-wap-profile");
+   xWapProfile.Copy(KXWapProfile);
+   RStringF xWapProfileString  = iHttpSession.StringPool().OpenFStringL(
+	   xWapProfile  );
+   RStringF xWapProfileValueString  = iHttpSession.StringPool().OpenFStringL(
+	   iIRNetworkControllerHandle->GetWapProfString()->Des()  );
+   logstr.Copy(iIRNetworkControllerHandle->GetWapProfString()->Des());
+   IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - x-wap-profile = %S", &logstr );	   
+   THTTPHdrVal xWapProfileHeader(xWapProfileValueString  );
+   header.SetFieldL(xWapProfileString, xWapProfileHeader);
+   xWapProfileString.Close();
+   xWapProfileValueString.Close();
+   
+   
+   
+   
+   ////////////////////////////////////////////////////////////////////////////////
+   
+   //this piece of code is to get the MIME types supported by a device
+	TInt i,ii,j;
+    CMMFControllerPluginSelectionParameters *cs=CMMFControllerPluginSelectionParameters::NewLC();
+    CMMFFormatSelectionParameters * fs = CMMFFormatSelectionParameters::NewLC();
+    cs->SetRequiredPlayFormatSupportL(*fs);
+    cs->SetRequiredRecordFormatSupportL(*fs);
+    
+    RMMFControllerImplInfoArray controllers;
+    CleanupResetAndDestroyPushL(controllers);
+    cs->ListImplementationsL(controllers);
+    
+    TInt contrCount = controllers.Count();
+    RBuf8 audioMIMEs;
+    audioMIMEs.Create(KSize);
+    RBuf audioBuf;
+    audioBuf.Create(KBufSize);
+    _LIT(KAudio,"audio");
+    audioBuf.Copy(KAudio);
+    for(i=0;i<controllers.Count();i++)
+        {
+        if( KUidHelixController == controllers[i]->Uid() )
+            {
+        //supported play formats
+        const RMMFFormatImplInfoArray &pf=controllers[i]->PlayFormats();
+		TInt pfCount = pf.Count();
+        for(ii=0;ii<pf.Count();ii++)
+            {
+            TBuf<KSize> z;
+            TBuf<KSize> z1;
+            TBool first;
+            //file extensions
+            const CDesC8Array &fe=pf[ii]->SupportedFileExtensions();
+            first=TRUE;
+            z1.Zero();
+            for(j=0;j<fe.Count();j++)
+                {
+                _LIT(KNone,", ");
+                if(!first)z1.Append(KNone);
+                first=FALSE;
+                z.Copy(fe[j]);
+                z1.Append(z);
+                };
+            
+            //MIME types
+            const CDesC8Array &mt=pf[ii]->SupportedMimeTypes();
+            first=TRUE;
+            z1.Zero();
+            TInt tempD = 0;
+            for(j=0;j<mt.Count();j++)
+                {
+                z.Copy(mt[j]);
+                TInt res = z.Find(audioBuf);
+                if(res != KErrNotFound)
+	                {
+	                if(!first)
+		                {
+		                _LIT(KNone,", ");
+		                z1.Append(KNone);
+		                }
+                	first=FALSE;
+                	z1.Append(z);
+                	audioMIMEs.Append(z);
+                	if(j==mt.Count() && ii==pf.Count() && i==controllers.Count() )
+	                	{
+						//do nothing
+	                	}
+	                else 
+	                	{
+	                	_LIT(KComma,",");
+	                	audioMIMEs.Append(KComma);
+	                	}
+                	tempD++;	                	
+	                }
+                };
+
+            };// for play formats
+            }
+   
+        };
+	audioBuf.Close();
+    CleanupStack::PopAndDestroy(1);//controllers
+    CleanupStack::PopAndDestroy(fs);
+    CleanupStack::PopAndDestroy(cs);
+	
+   
+  /////////////////////////////////////////////////////////////////////////////////  
+   
+   
+   
+   // Set the X-Nokia-iRAPP-Accept header
+
+   TBuf8<KNokiaIrAppAcceptMaxLength> xNokiaIrAppAccept;
+   _LIT(KXNokiaIrAppAccept,"X-Nokia-iRAPP-Accept");
+   xNokiaIrAppAccept.Copy(KXNokiaIrAppAccept);
+   RStringF xNokiaIrAppAcceptString  = iHttpSession.StringPool().OpenFStringL(
+	   xNokiaIrAppAccept  );
+   RStringF xNokiaIrAppAcceptValueString  = iHttpSession.StringPool().OpenFStringL(
+	    audioMIMEs );
+   logstr.Copy(audioMIMEs);
+   IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - X-Nokia-iRAPP-Accept = %S", &logstr );
+   THTTPHdrVal xNokiaIrAppAcceptHeader(xNokiaIrAppAcceptValueString  );
+   header.SetFieldL(xNokiaIrAppAcceptString, xNokiaIrAppAcceptHeader);
+   xNokiaIrAppAcceptString.Close();
+   xNokiaIrAppAcceptValueString.Close();
+   
+   
+   audioMIMEs.Close();
+   
+   CleanupStack::PopAndDestroy(&logstr);
+   IRLOG_DEBUG( "CIRHttpDataProvider::BuildHeadersL - Exiting." );
+   }
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::ValidateStatusCode(TInt aStatusCode)
+// Validate the status code returned
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::ValidateStatusCode( TInt aStatusCode )
+    { 
+    IRLOG_DEBUG( "CIRHttpDataProvider::ValidateStatusCode- Entering" );
+    // Callbacks will be provided as and when the call handling in UI is ready
+    switch ( aStatusCode )
+        {
+        case KOk:
+            {
+            }
+            break;
+
+        case KCreated:
+            {
+            }
+            break;
+
+        case KAccepted:
+            {
+            }
+            break;
+
+        case KNonAuthoritativeInformation:
+            {
+            }
+            break;
+
+        case KNoContent:
+            {
+            }
+            break;
+
+        case KResetContent:
+            {
+            }
+            break;
+
+        case KPartialContent:
+            {
+            }
+            break;
+
+            /*
+            Redirection 3xx status codes
+             */
+        case KMultipleChoices:
+            {
+            }
+            break;
+
+        case KMovedPermanently:
+            {
+            }
+            break;
+
+        case KFound:
+            {
+            }
+            break;
+
+        case KSeeOther:
+            {
+            }
+            break;
+
+        case KNotModified:
+                {
+                iNotModified = ETrue;
+                iObserver.HttpResponseCodeRecieved( KNotModified );
+                }
+            break;
+
+        case KUseProxy:
+            {
+            }
+            break;
+
+            /*
+            This status code is not used as per RFC 2616
+            const TInt KUnused = 306
+             */
+        case KTemporaryRedirect:
+            {
+            }
+            break;
+
+            /*
+            Client Error 4xx status codes
+             */
+        case KBadRequest:
+            {
+            }
+            break;
+
+        case KUnauthorized:
+            {
+            }
+            break;
+
+        case KPaymentRequired:
+            {
+            }
+            break;
+
+        case KForbidden:
+            {
+            }
+            break;
+
+        case KNotFound:
+                {
+                iObserver.HttpResponseCodeRecieved( KNotFound );
+                }
+            break;
+
+        case KMethodNotAllowed:
+            {
+            }
+            break;
+
+        case KNotAcceptable:
+            {
+            }
+            break;
+
+        case KProxyAuthenticationRequired:
+            {
+            }
+            break;
+
+        case KRequestTimeout:
+            {
+            }
+            break;
+
+        case KConflict:
+            {
+            }
+            break;
+
+        case KGone:
+            {
+            }
+            break;
+
+        case KLengthRequired:
+            {
+            }
+            break;
+
+        case KPreconditionFailed:
+            {
+            }
+            break;
+
+        case KRequestEntityTooLarge:
+            {
+            }
+            break;
+
+        case KRequestURITooLong:
+            {
+            }
+            break;
+
+        case KUnsupportedMediaType:
+            {
+            }
+            break;
+
+        case KRequestedRangeNotSatisfiable:
+            {
+            }
+            break;
+
+        case KExpectationFailed:
+            {
+            }
+            break;
+
+            /*
+            Server Error 5xx status codes
+             */
+        case KInternalServerError:
+            {
+            }
+            break;
+
+        case KNotImplemented:
+            {
+            }
+            break;
+
+        case KBadGateway:
+            {
+            }
+            break;
+
+        case KServiceUnavailable:
+            {
+            }
+            break;
+
+        case KGatewayTimeout:
+            {
+            }
+            break;
+
+        case KHTTPVersionNotSupported:
+            {
+            }
+            break;
+
+        default:
+        	break;
+
+    } // End of switch(aStatusCode)
+    IRLOG_DEBUG( "CIRHttpDataProvider::ValidateStatusCode - Exiting." );
+} // ValidateStatusCode(TInt aStatusCode)
+
+
+// ---------------------------------------------------------------------------
+// CIRHttpDataProvider::ReleaseResources()
+// Used to free all resources
+// ---------------------------------------------------------------------------
+//
+void CIRHttpDataProvider::ReleaseResources()
+	{
+	IRLOG_DEBUG( "CIRHttpDataProvider::ReleaseResources - Entering" );
+	iLogoDownloadEngine->ReleaseResources();
+	CancelTransaction();
+	iHttpSession.Close();
+    iFirstTime = ETrue;
+    IRLOG_DEBUG( "CIRHttpDataProvider::ReleaseResources - Exiting." );
+	}
+
+
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataprovidersrc/irhttppost.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <coemain.h>
+
+#include "irdebug.h"
+#include "irhttppost.h"
+#include "irsettings.h"
+#include "irreportsettings.h"
+
+// Maximum data part size.
+const TInt KMaxSubmitSize = 1024;
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::NewL()
+// First phase constructor
+//----------------------------------------------------------------------------
+//
+CIRHttpPost* CIRHttpPost::NewL( const RHTTPTransaction& aHttpTransaction )
+	{
+	IRLOG_DEBUG( "CIRHttpPost::NewL - Entering" );
+	CIRHttpPost* self = new( ELeave ) CIRHttpPost( aHttpTransaction );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRHttpPost::NewL - Exiting" );
+	return self;
+	}
+//----------------------------------------------------------------------------
+// CIRHttpPost::ConstructL()
+// 2nd phase constructor
+//----------------------------------------------------------------------------
+//
+void CIRHttpPost::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRHttpPost::ConstructL - Entering" );
+	iSettings = CIRSettings::OpenL();
+	IRLOG_DEBUG( "CIRHttpPost::ConstructL - Exiting" );
+	}
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::GetDataPartFromFileL()
+// Read one data part from browse log file.
+//----------------------------------------------------------------------------
+//
+void CIRHttpPost::GetDataPartFromFileL( TDes8& aDataPart )
+    {
+    IRLOG_DEBUG( "CIRHttpPost::GetDataPartFromFileL - Entering" );
+    
+    // Count data size to be read
+    TInt offset = KMaxSubmitSize;
+    if ( iStartPos + offset > iTotalsize )
+        {
+        offset = iRemainingLength ;
+        }
+
+    // Read data part from file
+    User::LeaveIfError( iLogFile.Read( iStartPos, aDataPart, offset ) );
+    
+    // Count remaining data size
+    iStartPos += offset;
+    iRemainingLength -= offset;
+
+    IRLOG_DEBUG( "CIRHttpPost::GetDataPartFromFileL - Exiting" );
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::CIRHttpPost()
+// C++ constructor.
+//----------------------------------------------------------------------------
+//
+CIRHttpPost::CIRHttpPost( const RHTTPTransaction& aHttpTransaction )
+    {
+    IRLOG_DEBUG( "CIRHttpPost::CIRHttpPost - Entering" );
+    iTransaction = aHttpTransaction;
+    IRLOG_DEBUG( "CIRHttpPost::CIRHttpPost - Exiting" );
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::~CIRHttpPost()
+// Destructor.
+//----------------------------------------------------------------------------
+//
+CIRHttpPost::~CIRHttpPost()
+    {
+    IRLOG_DEBUG( "CIRHttpPost::~CIRHttpPost - Entering" );
+    iPartPostBuffer.Close();
+    iLogFile.Close();
+    if ( iSettings )
+        {
+        iSettings->Close();
+        }
+    IRLOG_DEBUG( "CIRHttpPost::~CIRHttpPost - Exit" );
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::CloseLogFile ()
+// Used to Close the log file LogUsage.gz externally from other sources (bug-fixing)
+//----------------------------------------------------------------------------
+//
+void CIRHttpPost::CloseLogFile ()
+    {
+    IRLOG_DEBUG( "CIRHttpPost::CloseLogFile - Entering" );
+	iLogFile.Close ();
+	IRLOG_DEBUG( "CIRHttpPost::CloseLogFile - Exiting" );
+    }
+
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::GetNextDataPart()
+// Obtains a data part from the supplier.
+//----------------------------------------------------------------------------
+//        
+TBool CIRHttpPost::GetNextDataPart( TPtrC8& aDataPart )
+    {
+    IRLOG_DEBUG( "CIRHttpPost::GetNextDataPart - Entering" );
+    TBool retVal( EFalse ); // Default: several data parts
+
+    // Get data part from browse log file
+    iPartPostBuffer.Delete( 0, iPartPostBuffer.Length() );
+    TRAPD( err, GetDataPartFromFileL( iPartPostBuffer ) )
+    if ( KErrNone == err )
+        {
+        // Set data part.
+        aDataPart.Set( iPartPostBuffer );
+        if ( iRemainingLength <= 0 )
+            {
+            // Last data part.
+            retVal = ETrue;
+            iLogFile.Close();
+            }
+        }
+    else
+        {
+        // Last data part.
+        iRemainingLength = 0;
+        retVal = ETrue;
+        iLogFile.Close();
+        }
+
+
+    IRLOG_DEBUG( "CIRHttpPost::GetNextDataPart - Exiting" );
+    return retVal;
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::ReleaseData()
+// Releases the current data part being held at the data supplier.
+//----------------------------------------------------------------------------
+//
+void CIRHttpPost::ReleaseData()
+    {
+    IRLOG_DEBUG( "CIRHttpPost::ReleaseData - Entering" );
+    if ( iRemainingLength > 0 )
+        {
+        TRAP_IGNORE( iTransaction.NotifyNewRequestBodyPartL() )
+        }
+    IRLOG_DEBUG( "CIRHttpPost::ReleaseData - Exiting" );
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::OverallDataSize()
+// Obtains the overall size of the data being supplied.
+//----------------------------------------------------------------------------
+//
+TInt CIRHttpPost::OverallDataSize()
+    {
+    IRLOG_DEBUG( "CIRHttpPost::OverallDataSize - Entering" );
+    TInt retVal( KErrNotFound );
+    if ( iTotalsize > 0 )
+        {    
+		retVal = iTotalsize;
+        }
+    IRLOG_DEBUG( "CIRHttpPost::OverallDataSize - Exiting" );
+    return retVal; 
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::Reset()
+// Resets the data supplier.
+//----------------------------------------------------------------------------
+//
+TInt CIRHttpPost::Reset()
+    {
+    IRLOG_DEBUG( "CIRHttpPost::Reset - Entering" );
+    iStartPos = 0;
+    iRemainingLength = iTotalsize;
+    IRLOG_DEBUG( "CIRHttpPost::Reset - Exiting" );
+    return KErrNone;
+    }
+
+//----------------------------------------------------------------------------
+// CIRHttpPost::GetFileToPostL()
+// Gets browse log file size.
+//----------------------------------------------------------------------------
+//
+void CIRHttpPost::GetFileToPostL(TInt *aFileSize)
+    {
+    IRLOG_DEBUG( "CIRHttpPost::GetFileToPostL - Entering" );
+
+    TFileName filePath = iSettings->PrivatePath();
+    filePath.Append( KGZipLogFileName );
+    
+    iPartPostBuffer.Close();
+    iPartPostBuffer.Create( KMaxSubmitSize );
+
+    User::LeaveIfError(
+    	iLogFile.Open( CCoeEnv::Static()->FsSession(), filePath, EFileRead ) );
+    User::LeaveIfError( iLogFile.Size( iTotalsize ) );
+    *aFileSize = iTotalsize;
+    
+    Reset();
+
+    IRLOG_DEBUG( "CIRHttpPost::GetFileToPostL - Exiting." );
+    }
+    
+//----------------------------------------------------------------------------
+// CIRHttpPost::SetTransaction()
+// Set the transaction.
+//----------------------------------------------------------------------------
+//
+void CIRHttpPost::SetTransaction( const RHTTPTransaction& aHttpTransaction )
+    {
+    IRLOG_DEBUG( "CIRHttpPost::SetTransaction - Entering." );
+    iTransaction = aHttpTransaction;
+    IRLOG_DEBUG( "CIRHttpPost::SetTransaction - Exiting." );
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/dataprovidersrc/irlogodownloadengine.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1685 @@
+/*
+* Copyright (c) 2006-2007 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:  Engine to fetch the logos 
+*
+*/
+
+
+#include <aknnotewrappers.h> 
+
+#include "irlogodownloadengine.h"
+#include "irnetworkcontroller.h"
+#include "ircachemgmt.h"
+#include "irhttprequestdata.h"
+#include "irpreset.h"
+#include "irdebug.h"
+#include "irdataproviderconstants.h"
+#include "iractivenetworkobserver.h"
+
+
+
+_LIT(KLogoX, "?x=");
+_LIT(KLogoY, "&y=");
+const TInt KPresetsArrayMaxLength = 50;
+const TInt KLogoSize = 59;
+const TInt KParameterSize = 12;
+const TInt KTen = 10;
+const TInt KCacheAvailable = 4;
+const TInt KLogo = 4;
+const TInt KStatusOK = 200;
+const TInt KStatusMultipleChoices = 300;
+const TInt KStatusNotModified = 304;
+const TInt KStatusGatewayTimeout = 504;
+
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::NewL()
+// Creates instance of CIRLogoDownloadEngine.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRLogoDownloadEngine* CIRLogoDownloadEngine::NewL()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::NewL - Entering" );
+    CIRLogoDownloadEngine* self = new(ELeave) CIRLogoDownloadEngine();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRLogoDownloadEngine::NewL - Exiting" );
+    return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::CIRLogoDownloadEngine()
+// Standard C++ constructor
+// ---------------------------------------------------------------------------
+//
+CIRLogoDownloadEngine::CIRLogoDownloadEngine()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CIRLogoDownloadEngine " );
+	//code here, if needed
+	}
+	
+	
+	
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::~CIRLogoDownloadEngine()
+// Destructs instance of CIRLogoDownloadEngine.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRLogoDownloadEngine::~CIRLogoDownloadEngine()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::~CIRLogoDownloadEngine - Entering" );
+    if(iReqBody)
+    	{
+    	delete iReqBody;
+    	iReqBody = NULL;
+    	}
+    if(iRespBody)
+    	{
+    	delete iRespBody;
+    	iRespBody = NULL;
+    	}
+	CancelTransaction();
+	iLogoSession.Close();
+	
+	if(iCopyPreset)
+		{
+		delete iCopyPreset;
+		}
+	if(iCacheTempPreset)
+		{
+		delete iCacheTempPreset;			
+		}
+	if(iTempPreset)
+		{
+		delete iTempPreset;			
+		}
+	if(iPresetArray)
+		{
+		iPresetArray->ResetAndDestroy();
+		}
+	delete iPresetArray;
+	if(iObserverArray)
+		{
+		delete iObserverArray;
+		iObserverArray = NULL;
+		}
+	if(iReqFromArray)
+		{
+		delete iReqFromArray;
+		iReqFromArray = NULL;
+		}
+	if(iCachePresetArray)
+		{
+		iCachePresetArray->ResetAndDestroy();
+		}
+	delete iCachePresetArray;
+	if(iCacheObserverArray)
+		{
+		delete iCacheObserverArray;
+		iCacheObserverArray = NULL;
+		}
+	if(iCacheReqFromArray)
+		{
+		delete iCacheReqFromArray;
+		iCacheReqFromArray = NULL;
+		}
+	if(iIRNetworkControllerHandle)
+    	{
+    	iIRNetworkControllerHandle->DeleteActiveNetworkObserver(*this);
+    	iIRNetworkControllerHandle->Close();
+        }		
+    if (iCache)
+	    {
+	    iCache->RemoveObserver(this);
+	    iCache->Close();
+	    }
+	if( iResponseHeaders )
+		{
+        delete iResponseHeaders;
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::~CIRLogoDownloadEngine - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::ConstructL()
+// 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ConstructL - Entering" );
+	iPresetArray = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(KPresetsArrayMaxLength);
+	iObserverArray = new (ELeave) CArrayPtrFlat<MLogoDownloadObserver>(KPresetsArrayMaxLength);
+	iReqFromArray = new (ELeave) CArrayFixFlat<TInt>(KPresetsArrayMaxLength);
+	iCachePresetArray = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(KPresetsArrayMaxLength);
+	iCacheObserverArray = new (ELeave) CArrayPtrFlat<MLogoDownloadObserver>(KPresetsArrayMaxLength);
+	iCacheReqFromArray = new (ELeave) CArrayFixFlat<TInt>(KPresetsArrayMaxLength);
+	
+	iPresetArrayPos = 0;
+	iReqFromArrayPos = 0;
+	iObserverArrayPos = 0;
+	iCachePresetArrayPos = 0;
+	iCacheReqFromArrayPos = 0;
+	iCacheObserverArrayPos = 0;
+	iImageIndex = 0; //using temporarily till the isds provides urls
+
+	iPresetModifiedStatus = EFalse;
+	iFirstTime = ETrue;
+	iIRNetworkControllerHandle = CIRNetworkController::OpenL();
+	iIRNetworkControllerHandle->RegisterActiveNetworkObserverL(*this);
+	iCache = CIRCacheMgmt::OpenL(*this);
+	iCache->AddObserverL(this);
+	iResponseHeaders = new ( ELeave ) CIRHttpResponseData;
+
+	//change to use the new session for logo downloading
+	TRAPD( LeaveValue, iLogoSession.OpenL() );
+    if ( LeaveValue != KErrNone )
+        {
+        // Most common error; no access point configured, and session creation
+        // leaves with KErrNotFound.
+        // Load a string from the resource file and add the error code to string
+        User::Leave( LeaveValue );
+        }
+    IRLOG_DEBUG( "CIRLogoDownloadEngine::ConstructL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::IsRunning()
+// To know the status of downloading logo
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRLogoDownloadEngine::IsRunning() const
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::IsRunning" );
+    return iRunning;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField,
+//                              const TDesC8& aHdrValue)
+// to set the headers of the http transaction
+// ---------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField,
+					 const TDesC8& aHdrValue) const
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SetHeaderL - Entering" );
+	RStringF valStr = iLogoSession.StringPool().OpenFStringL(aHdrValue);
+	CleanupClosePushL(valStr);
+	THTTPHdrVal val(valStr);
+	aHeaders.SetFieldL(iLogoSession.StringPool().StringF(aHdrField, RHTTPSession::GetTable()), val);
+	CleanupStack::PopAndDestroy(&valStr); // valStr
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SetHeaderL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::SetFavDbInstance(CIRFavoritesDb* aFavDb)
+// To set the favorites db instance
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRLogoDownloadEngine::SetFavDbInstance(CIRFavoritesDb* aFavDb)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SetFavDbInstance - Entering" );
+	iFavDb = aFavDb;
+	iFavDb->AddObserver( *this );
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SetFavDbInstance - Exiting" );
+	}
+
+
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,TInt aXValue,TInt aYValue)
+// API is called from the SearchResultsView for to download logo while doing Add to Favorites
+// ----------------------------------------------------------------------------------
+//
+EXPORT_C void CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,TInt aXValue,TInt aYValue)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Entering" );
+	if(!iCheckingCache)
+		{
+		++iImageIndex;
+		iCheckingCache = ETrue;
+		iCacheReqFrom = 0;
+		if(iCacheTempPreset)
+			{
+			delete iCacheTempPreset;				
+			}
+		iCacheTempPreset = NULL;
+		iCacheTempPreset = CIRIsdsPreset::NewL();
+		*iCacheTempPreset = *aPreset;
+
+		if(iCacheTempPreset->GetImgUrl().Length() != 0)
+			{
+			if((aXValue > 0)&&(aYValue > 0))
+				{
+				//Append the parameters(width,height) of the logo size to imgUrl
+				TInt size = iCacheTempPreset->GetImgUrl().Length() + KParameterSize;
+				RBuf urlWithSize;
+				urlWithSize.Create(size);
+				urlWithSize.Copy(iCacheTempPreset->GetImgUrl());
+				urlWithSize.Append(KLogoX);
+				urlWithSize.AppendNum(aXValue);
+				urlWithSize.Append(KLogoY);
+				urlWithSize.AppendNum(aYValue);
+				
+				//set the imgUrl with parameters to the preset
+				iCacheTempPreset->SetImgUrl(urlWithSize);
+				urlWithSize.Close();
+				}
+			//This method checks whether the logo is available
+ 			// for the request made
+			iForceGet = EFalse; 			
+			CheckCacheForLogoL(0);
+			}
+		else
+			{
+			//imgUrl doesnt exist in the Preset
+		    iCheckingCache = EFalse;
+			return;			
+			}
+
+		iCheckingCache = EFalse;
+		if(!iLogoCached)	
+			{
+			FetchLogoDataL(iCacheTempPreset);				
+			}
+		}
+	else
+		{
+		CIRIsdsPreset* tempPreset;
+		tempPreset = CIRIsdsPreset::NewL();
+		*tempPreset = *aPreset;
+		if(tempPreset->GetImgUrl().Length() != 0)
+			{
+			if((aXValue > 0)&&(aYValue > 0))
+				{
+				//Append the parameters(width,height) of the logo size to imgUrl
+				TInt size = tempPreset->GetImgUrl().Length() + KParameterSize;
+				RBuf urlWithSize;
+				urlWithSize.Create(size);
+				urlWithSize.Copy(tempPreset->GetImgUrl());
+				urlWithSize.Append(KLogoX);
+				urlWithSize.AppendNum(aXValue);
+				urlWithSize.Append(KLogoY);
+				urlWithSize.AppendNum(aYValue);
+				
+				//set the imgUrl with parameters to the preset
+				tempPreset->SetImgUrl(urlWithSize);
+				urlWithSize.Close();				
+				}
+			}
+		iCachePresetArray->AppendL(tempPreset);
+ 		iCacheReqFromArray->AppendL(0);	
+		}	
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Exiting" );
+	}
+
+
+EXPORT_C TBool CIRLogoDownloadEngine::isLogoCachedL(CIRIsdsPreset* aPreset, TInt aXValue, TInt aYValue)
+{
+    TInt cached = 0;
+    
+    if(iCacheTempPreset)
+    {
+        delete iCacheTempPreset;
+        iCacheTempPreset = NULL;
+    }
+    
+    iCacheTempPreset = CIRIsdsPreset::NewL();
+    *iCacheTempPreset = *aPreset;
+    iCacheReqMade = EFalse;
+    
+    if (iCacheTempPreset->GetImgUrl().Length() != 0)
+    {
+        if ((aXValue > 0) && (aYValue > 0))
+        {
+            //Append the parameters(width,height) of the logo size to imgUrl
+            TInt size = iCacheTempPreset->GetImgUrl().Length() + KParameterSize;
+            RBuf urlWithSize;
+            urlWithSize.Create(size);
+            urlWithSize.Copy(iCacheTempPreset->GetImgUrl());
+            urlWithSize.Append(KLogoX);
+            urlWithSize.AppendNum(aXValue);
+            urlWithSize.Append(KLogoY);
+            urlWithSize.AppendNum(aYValue);
+
+            //set the imgUrl with parameters to the preset
+            iCacheTempPreset->SetImgUrl(urlWithSize);
+            urlWithSize.Close();
+        }
+    }
+    
+    iCache->CheckCacheL(KLogo,iCacheTempPreset->GetImgUrl(),EFalse,cached);
+    
+    return (CIRCacheMgmt::ECacheUseable == cached)?ETrue:EFalse;     
+}
+// ----------------------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle,
+//													TInt aNPVReq,TInt aXValue,TInt aYValue)
+// API is called from several views for to download logo 
+// ----------------------------------------------------------------------------------------------
+//
+EXPORT_C void CIRLogoDownloadEngine::SendRequestL(CIRIsdsPreset* aPreset,
+			MLogoDownloadObserver* aLogoHandle,TInt aNPVReq,TInt aXValue,TInt aYValue)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Entering" );
+	if(aPreset->GetChannelType()==0)
+		{
+		aLogoHandle->PresetLogoDownloadedL(aPreset);
+		}
+	else if(!iCheckingCache)
+		{
+		++iImageIndex;
+		iCheckingCache = ETrue;
+		if(aNPVReq==2)
+			{
+			iCacheReqFrom=2;			
+			}
+		else
+			{
+			iCacheReqFrom=1;			
+			}
+
+		if(iCacheTempPreset)
+			{
+			delete iCacheTempPreset;
+			iCacheTempPreset = NULL;				
+			}
+		iCacheTempPreset = CIRIsdsPreset::NewL();
+		*iCacheTempPreset = *aPreset;
+		iCacheTempLogoHandle = aLogoHandle;
+		
+		if(iCacheTempPreset->GetImgUrl().Length() != 0)
+			{
+			if((aXValue > 0)&&(aYValue > 0))
+				{
+				//Append the parameters(width,height) of the logo size to imgUrl
+				TInt size = iCacheTempPreset->GetImgUrl().Length() + KParameterSize;
+				RBuf urlWithSize;
+				urlWithSize.Create(size);
+				urlWithSize.Copy(iCacheTempPreset->GetImgUrl());
+				urlWithSize.Append(KLogoX);
+				urlWithSize.AppendNum(aXValue);
+				urlWithSize.Append(KLogoY);
+				urlWithSize.AppendNum(aYValue);
+				
+				//set the imgUrl with parameters to the preset
+				iCacheTempPreset->SetImgUrl(urlWithSize);
+				urlWithSize.Close();
+				}
+			if(iCacheReqFrom==1 || iCacheReqFrom==2)
+				{
+				//This method checks whether the logo is available
+		 		// for the request made
+				iForceGet = EFalse;		 		
+				CheckCacheForLogoL(0);	
+				}
+/*			else if(iCacheReqFrom==2)
+				{
+				//the request has come from NowPlayingView(NPV)
+				//dont check for logo availability in cache
+				//download the logo freshly
+				iLogoCached=EFalse;								
+				}
+*/			}
+		else
+			{
+			//imgUrl doesnt exist in the Preset
+		    iCheckingCache = EFalse;
+			return;			
+			}
+		
+		iCheckingCache = EFalse;
+		if(!iLogoCached)	
+			{
+			FetchLogoDataL(iCacheTempPreset,aLogoHandle,iCacheReqFrom);				
+			}
+		}
+	else
+		{
+		CIRIsdsPreset* tempPreset;
+		tempPreset = CIRIsdsPreset::NewL();
+		*tempPreset = *aPreset;
+		if(tempPreset->GetImgUrl().Length() != 0)
+			{
+			if((aXValue > 0)&&(aYValue > 0))
+				{
+				//Append the parameters(width,height) of the logo size to imgUrl
+				TInt size = tempPreset->GetImgUrl().Length() + KParameterSize;
+				RBuf urlWithSize;
+				urlWithSize.Create(size);
+				urlWithSize.Copy(tempPreset->GetImgUrl());
+				urlWithSize.Append(KLogoX);
+				urlWithSize.AppendNum(aXValue);
+				urlWithSize.Append(KLogoY);
+				urlWithSize.AppendNum(aYValue);
+				
+				//set the imgUrl with parameters to the preset
+				tempPreset->SetImgUrl(urlWithSize);
+				urlWithSize.Close();				
+				}
+			}
+		iCachePresetArray->AppendL(tempPreset);
+ 		iCacheObserverArray->AppendL(aLogoHandle);
+ 		if(aNPVReq == 2)
+	 		{
+	 		iCacheReqFromArray->AppendL(2);		
+	 		}
+ 		else
+	 		{
+	 		iCacheReqFromArray->AppendL(1);		
+	 		}
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendRequestL - Exiting" );
+	}
+
+
+
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::GetCacheLogoL(TDesC& aUrl,TInt& aStatus)
+// takes the url as a parameter and returns the logo data which is in cache
+// this API is called form the search results for to display logo on the view
+// ----------------------------------------------------------------------------------
+//
+EXPORT_C void CIRLogoDownloadEngine::GetCacheLogoL(const TDesC& aUrl,TInt& aStatus)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::GetCacheLogoL - Entering" );
+	iSendingLogo=2;
+	iResult = 0;
+	iForceGet = EFalse;
+	//2 means, this API is called for the search results view
+	iCacheReqMade = ETrue;
+	iCache->CheckCacheL(KLogo,aUrl,iForceGet,iResult);		
+	aStatus = iResult;
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::GetCacheLogoL - Exiting" );
+
+	}
+	
+	
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::SendCacheLogo()
+// sends the logo which is cached
+// ----------------------------------------------------------------------------------
+//
+EXPORT_C TDesC8& CIRLogoDownloadEngine::SendCacheLogo()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendCacheLogo" );
+	return iCache->iLogoData;
+	}
+
+
+
+
+// ------------------------------------------------------------------------
+// CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset)
+// API is used to download logo from isds/internet
+// called in the API SendRequestL(CIRIsdsPreset* aPreset)
+// ------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Entering" );
+ 	if(!iRunning)
+	 	{
+
+	  	iTempReqFrom = 0;//which means the request came from SearchView while doing Add to Favorite
+	 	if( iReqBody )
+		 	{
+		 	delete iReqBody;
+		    iReqBody = NULL;
+		 	}
+	    if( iRespBody )
+		    {
+		    delete iRespBody;
+		    iRespBody = NULL;
+		    }
+		if(iTempPreset)
+			{
+			delete iTempPreset;
+			iTempPreset = NULL;				
+			}
+		iTempPreset = CIRIsdsPreset::NewL();
+	    *iTempPreset = *aPreset;
+   	    if(iTempPreset->GetImgUrl().Length() != 0)
+		    {
+	    	IssueLogoDownloadRequestL();
+		   	}
+	    else /*ImgUrl doesnt exist in the iTempPreset*/
+		    {
+	    	//simply ignore it
+		    }
+	    }
+ 	else
+	 	{
+	 	CIRIsdsPreset* tempPreset;
+	 	tempPreset = CIRIsdsPreset::NewL();
+	 	CleanupStack::PushL(tempPreset);
+	 	*tempPreset = *aPreset;
+	 	iPresetArray->AppendL(tempPreset);
+	 	CleanupStack::Pop(tempPreset);
+ 		iReqFromArray->AppendL(0);
+	 	}
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Exiting" );
+	}
+
+
+// -------------------------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle)
+// API is used to download logo from isds/internet
+// called in the API SendRequestL(CIRIsdsPreset* aPreset,MLogoDownloadObserver* aLogoHandle)
+// -------------------------------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::FetchLogoDataL(CIRIsdsPreset* aPreset,
+				MLogoDownloadObserver* aLogoHandle,TInt aNPVReq)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Entering" );
+	if(!iRunning)
+	 	{
+	 	if(aNPVReq==2)
+		 	{
+		 	iTempReqFrom = 2;//which means the request came from NowPlayingView	 		
+		 	}
+	 	else
+		 	{
+		 	iTempReqFrom = 1;//which means the request came from other than NowPlayingView	 		
+		 	}
+
+		iTempLogoHandle = aLogoHandle;
+		if( iReqBody )
+		 	{
+		 	delete iReqBody;
+		    iReqBody = NULL;
+		 	}
+	    if( iRespBody )
+		    {
+		    delete iRespBody;
+		    iRespBody = NULL;
+		    }
+		if(iTempPreset)
+			{
+			delete iTempPreset;
+			iTempPreset = NULL;				
+			}
+		iTempPreset = CIRIsdsPreset::NewL();
+	    *iTempPreset = *aPreset;
+	    if(iTempPreset->GetImgUrl().Length() != 0)
+		    {
+	    	IssueLogoDownloadRequestL();
+			}
+	    else /*ImgUrl doesnt exist in the iTempPreset*/
+		    {
+	    	//simply ignore it
+		    }
+	    }
+ 	else
+	 	{
+	 	CIRIsdsPreset* tempPreset;
+	 	tempPreset = CIRIsdsPreset::NewL();
+	 	CleanupStack::PushL(tempPreset);
+	 	*tempPreset = *aPreset;
+	 	iPresetArray->AppendL(tempPreset);
+	 	CleanupStack::Pop(tempPreset);
+		iObserverArray->AppendL(aLogoHandle);
+		if(aNPVReq==2)
+			{
+	 		iReqFromArray->AppendL(2);
+			}
+		else
+			{
+	 		iReqFromArray->AppendL(1);
+			}
+	 	}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::FetchLogoDataL - Exiting" );
+	}
+
+
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::CheckCacheForLogoL(TInt aValue)
+// Checks the cache whether the logo is available or not
+// ----------------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::CheckCacheForLogoL(TInt aValue)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CheckCacheForLogoL - Entering" );
+	iSendingLogo=aValue;
+	iResult = 0;
+	if(iSendingLogo==0)//0 means, this API is called for the usecase of checking cache
+		{
+		iCacheReqMade = ETrue;
+		iCache->CheckCacheL(KLogo,iCacheTempPreset->GetImgUrl(),iForceGet,iResult);		
+		}
+	else if(iSendingLogo==1)//1 means, this API is called for the usecase of downloading logo
+		{
+		iCacheReqMade = ETrue;
+		iCache->CheckCacheL(KLogo,iTempPreset->GetImgUrl(),iForceGet,iResult);		
+		}
+	if((iResult == 0))//not available in the cache
+		{
+		iLogoCached = EFalse;
+		iIsConditionalGET = EFalse;
+		}
+	else if(iResult == -1)//cache is stale/not useable
+		{
+		iLogoCached = EFalse;
+		iIsConditionalGET = ETrue;			
+		}
+	else if(iResult == 1)//cache is useable
+		{
+		iLogoCached = ETrue;	
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CheckCacheForLogoL - Exiting" );
+	}
+
+
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::IssueLogoDownloadRequest()
+// submits the transaction for to download the logo
+// ----------------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::IssueLogoDownloadRequestL()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::IssueLogoDownloadRequestL - Entering" );
+	///////////////////////////////////////////////////////////////////////////////////
+	//This piece of code is for selecting the access point which is already
+	//set at the begining of the application.  To download the logo the same
+	//accesse point will be used.
+	
+	
+	
+		
+	
+	if(!iIRNetworkControllerHandle->GetNetworkStatus())
+		{
+		iIRNetworkControllerHandle->ChooseAccessPointL();
+		iLogoRequestPending = ETrue;
+		}
+	
+	else
+		{
+		if( iFirstTime )
+			{
+			iLogoSession.Close();
+			TRAPD( LeaveValue, iLogoSession.OpenL() );
+	    	if ( LeaveValue != KErrNone )
+	        {
+	        // Most common error; no access point configured, and session creation
+	        // leaves with KErrNotFound.
+	        // Load a string from the resource file and add the error code to string
+	        User::Leave( LeaveValue );
+	        }
+			// Set the HTTP connection properties
+		    RStringPool strP = iLogoSession.StringPool();
+		    RHTTPConnectionInfo connInfo = iLogoSession.ConnectionInfo();
+		    // RSocketServ Handle
+		    connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketServ,
+				RHTTPSession::GetTable() ),
+				THTTPHdrVal( iIRNetworkControllerHandle->GetIRSocketServer().Handle() ) );
+
+		    // RConnection Handle
+		    TInt connPtr = REINTERPRET_CAST( TInt,
+				&( iIRNetworkControllerHandle->GetIRConnection() ) );
+		    connInfo.SetPropertyL( strP.StringF( HTTP::EHttpSocketConnection,
+				RHTTPSession::GetTable() ), THTTPHdrVal( connPtr ) );
+
+		    // HTTP Version ( Specify that i am using HTTP/1.1
+			connInfo.SetPropertyL( strP.StringF( HTTP::EVersion,
+				RHTTPSession::GetTable() ),
+				THTTPHdrVal( strP.StringF( HTTP::EHttp11, RHTTPSession::GetTable() ) ) );
+
+			// Set RHttpSession into NetworkController for logo byte counter
+			iIRNetworkControllerHandle->RegisterLogoDataTransferTrackerL( iLogoSession );
+
+			iFirstTime = EFalse;
+			}
+
+
+		HBufC8* buffertmp = HBufC8::NewLC( iTempPreset->GetImgUrl().Length() + 1 );
+		TPtr8 buffertmpPtr( buffertmp->Des() );
+		buffertmpPtr.Copy( iTempPreset->GetImgUrl() );
+
+		TUriParser8 uri;
+		uri.Parse(buffertmpPtr);
+		RStringF method = iLogoSession.StringPool().StringF(HTTP::EGET,RHTTPSession::GetTable());
+		iTransaction = iLogoSession.OpenTransactionL(uri, *this, method);
+		RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
+	    // Set the User-Agent header to UAProf string
+	    SetHeaderL( hdr, HTTP::EUserAgent,
+			   iIRNetworkControllerHandle->GetUAProfString()->Des() );
+
+		_LIT8(KAccept,"image/jpeg,image/png,image/gif");
+		SetHeaderL(hdr, HTTP::EAccept, KAccept);
+		SetHeaderL( hdr, HTTP::EAcceptLanguage, KAcceptLanguage );
+		
+		if(iIsConditionalGET)
+			{
+			RStringF valStr = iLogoSession.StringPool().OpenFStringL(iETag);
+			CleanupClosePushL(valStr);
+			THTTPHdrVal val(valStr);
+			hdr.SetFieldL(iLogoSession.StringPool().StringF(
+						HTTP::EIfNoneMatch, RHTTPSession::GetTable()), val);
+			CleanupStack::PopAndDestroy(&valStr); // valStr
+			}
+		CleanupStack::PopAndDestroy(buffertmp); // buffertmp
+		
+		//setting the member variable to zero
+		iRespBodySize = 0;
+		iTransaction.SubmitL();
+
+		iRunning = ETrue;
+		iLogoRequestPending = ETrue;
+		iState = ESendingEvent;
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::IssueLogoDownloadRequestL - Exiting" );
+	}
+
+
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::CancelTransaction()
+// cancels the current transaction
+// ----------------------------------------------------------------------------------
+//
+EXPORT_C void CIRLogoDownloadEngine::CancelTransaction()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CancelTransaction - Entering" );
+	if(!iRunning)
+	    {
+		return;
+	    }
+	iTransaction.Close();
+	iRunning = EFalse;
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CancelTransaction - Exiting" );
+	}
+
+
+// ----------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::SendPresetWithLogoL()
+// sends the preset with logo to the requestors
+// ----------------------------------------------------------------------------------
+//
+EXPORT_C void CIRLogoDownloadEngine::SendPresetWithLogoL()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendPresetWithLogoL - Entering" );
+	//Logo has downloaded, so update the status of the variable iLogoRequestPending
+	iLogoRequestPending = EFalse;
+	//Remove the imgUrl with parameters from the Preset
+	//now set imgUrl without parameters in to the Preset
+	TInt sizeImgUrlWithPar = iTempPreset->GetImgUrl().Length();
+	TBool hasParameters = EFalse;
+	RBuf urlWithPar;
+	urlWithPar.Create(sizeImgUrlWithPar);
+	urlWithPar.Copy(iTempPreset->GetImgUrl());
+	RBuf tempBuf;
+	tempBuf.Create(sizeImgUrlWithPar);
+
+	TLex urlLex(urlWithPar);
+	for(;!urlLex.Eos();)
+		{
+		tempBuf.Zero();
+		while(urlLex.Peek() != '?' && !urlLex.Eos())		
+			{
+			tempBuf.Append(urlLex.Get());
+			}
+		if(urlLex.Peek() == '?')
+			{
+			hasParameters = ETrue;			
+			}
+		urlLex.Inc();	
+		}
+	
+	RBuf imgUrl;		
+	if(hasParameters)		
+		{
+		//let say urlWithPar has the value http://www.logos.com/images/test.pngx=100&y=100
+		//now the tempBuf contains the value  x=100&y=100
+		TInt sizeUrlParameters = tempBuf.Length();
+		sizeUrlParameters++; // now this integer contains the size of x=100&y=100 
+		TInt sizeImgUrl = sizeImgUrlWithPar - sizeUrlParameters;
+		
+		//Create a buffer to store the imgUrl without parameters
+		imgUrl.Create(sizeImgUrl);
+		imgUrl.Copy(urlWithPar.Left(sizeImgUrl));
+		iTempPreset->SetImgUrl(imgUrl);
+		}
+	else
+		{
+		//nothing to be done
+		//the imgUrl present in the preset is correct, no need to change anything
+		}
+
+	//set the downloaded logo to the preset with the API SetLogoData()
+	iTempPreset->SetLogoData(*iRespBody);
+	if(iTempReqFrom == 0)//which means the request came from SearchView while doing Add to Favorite
+		{
+		iFavDb->ReplacePresetL(*iTempPreset);
+		iPresetModifiedStatus = ETrue;
+		}
+	else if(iTempReqFrom == 1)//which menas the request came from a view other than NowPlayingView
+		{
+		iTempLogoHandle->PresetLogoDownloadedL(iTempPreset);
+		}
+	else if(iTempReqFrom == 2)//which menas the request came from NowPlayingView
+		{
+		//(1)logo has downloaded freshly
+		//(2)send the logo to the NPV through PresetLogoDownloadedL
+		//(3)check whether the preset exists in favdb; if so replace that with new logo
+		iTempLogoHandle->PresetLogoDownloadedL(iTempPreset);
+		//iFavDb->ReplacePresetL(*iTempPreset)
+		}
+		
+    
+	iTempPreset->SetImgUrl(urlWithPar);	
+	//Cache the newly downloaded logo
+	iCache->CacheLogoL(*iRespBody,iTempPreset->GetImgUrl(),*iResponseHeaders);
+
+	//close all the buffers
+	imgUrl.Close();
+	tempBuf.Close();
+	urlWithPar.Close();
+	
+	iRunning = EFalse;
+	iState = EIdle;
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::SendPresetWithLogoL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
+// callback API from MHTTPTransactionCallback
+// ---------------------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunL - Entering" );
+	switch (aEvent.iStatus)
+		{
+		case THTTPEvent::EGotResponseHeaders:
+			{
+		    RHTTPResponse resp = aTransaction.Response();
+		    TInt status = resp.StatusCode();
+		    iRespCode = status;
+            ExtractResponseHeadersL(aTransaction);
+	        if(status >= KStatusOK &&  status < KStatusMultipleChoices)
+		    {
+	            THTTPHdrVal headerValue(0);
+	            RHTTPHeaders headers = resp.GetHeaderCollection();
+	            TInt error = headers.GetField(iLogoSession.StringPool().StringF(HTTP::EContentLength,
+	            				 RHTTPSession::GetTable()), 0, headerValue);
+	            iRespBodySize = 0;
+	            if (KErrNone == error)
+	            {
+	                iRespBodySize = headerValue.Int();
+	            }
+                iRespBody = HBufC8::NewL(iRespBodySize+1);
+		    }
+			else if( status == KStatusNotModified )//304 means, the content has not modified
+			    {
+			    if(iIsConditionalGET)
+				    {
+				    iIsConditionalGET = EFalse;
+				    iRunning = EFalse;
+				    //update the trust period 
+					//no problem if it leaves
+					TRAP_IGNORE(iCache->UpdateTrustPeriodL(KLogo,iTempPreset->GetImgUrl(),
+												*iResponseHeaders))
+					//do a forced get because the data is notmodifed in isds and 
+					//trustable
+					iForceGet = ETrue;
+					CheckCacheForLogoL(1);
+				    }
+		        }
+	        else if( status == KStatusGatewayTimeout )
+		        {
+				//implementation, if needed
+				CancelTransaction();
+				if(iTempReqFrom == 0)
+					{
+					//do nothing	
+					}
+				else
+					{
+					iTempLogoHandle->PresetLogoDownloadError(iTempPreset);					
+					}
+				ManagePresetArrayIndexL();
+				}
+
+			}
+			break;
+
+		case THTTPEvent::EGotResponseBodyData:
+			{
+			MHTTPDataSupplier* body = aTransaction.Response().Body();
+			TPtrC8 dataChunk;
+			body->GetNextDataPart(dataChunk);
+			if(iRespBodySize > 0)
+				{
+	            iRespBody->Des().Append((const TDesC8&)dataChunk);
+				}
+			else if(iRespBody)
+				{
+				//which means the body of the response has come
+				//but in the response headers Content-Length is missing
+				//for this usecase realloc the iRespBody with the data received					
+				HBufC8* buffertmp = HBufC8::NewLC( dataChunk.Length() + 1 );
+        		TPtr8 buffertmpPtr( buffertmp->Des() );
+        		buffertmpPtr.Copy( (const TDesC8&)dataChunk );
+        		
+   				TInt tempSize;
+				tempSize = iRespBody->Length() + dataChunk.Length();
+				
+				iRespBody = iRespBody->ReAllocL( tempSize );
+				TPtr8 ibufferPtr( iRespBody->Des() );
+				ibufferPtr.Append(buffertmpPtr);
+
+
+        		
+				CleanupStack::PopAndDestroy(buffertmp); // buffertmp        		
+				}
+			body->ReleaseData();
+			}
+			break;
+
+		case THTTPEvent::EResponseComplete:
+			{
+			//No implementation
+			}
+			break;
+
+		case THTTPEvent::ESucceeded:
+	        {
+			iTransaction.Close();
+			if(iIsConditionalGET)
+				{
+				iIsConditionalGET = EFalse;					
+				}
+		 
+			iRunning = EFalse;
+			//set the downloaded logo in the preset and send it back to the requestor
+			SendPresetWithLogoL();
+			ManagePresetArrayIndexL();
+	        }
+			break;
+
+		case THTTPEvent::EFailed:
+			{
+			aTransaction.Close();
+			iRunning = EFalse;
+			iState = EIdle;
+			if( iRespCode == KStatusNotModified )//304 means, the content has not modified
+				{
+				//do nothing;					
+				}
+			else
+				{
+				if(iTempReqFrom == 0)
+					{
+					//do nothing
+					}
+				else
+					{
+					iTempLogoHandle->PresetLogoDownloadError(iTempPreset);					
+					}
+				}
+			ManagePresetArrayIndexL();
+			}
+	        break;
+
+		default:
+
+			if (aEvent.iStatus < 0)
+				{
+				aTransaction.Close();
+				iRunning = EFalse;
+				iState = EIdle;
+				if(iTempReqFrom == 0)
+					{
+					//do nothing
+					}
+				else
+					{
+					iTempLogoHandle->PresetLogoDownloadError(iTempPreset);					
+					}
+				ManagePresetArrayIndexL();
+		        }
+			break;
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunL - Exiting" );
+	}
+
+
+// ------------------------------------------------------------------------------------------------------------------
+// CIRLogoDownloadEngine::MHFRunError(TInt /*aError*/, RHTTPTransaction aTransaction, const THTTPEvent& /*aEvent*/)
+// callback API from MHTTPTransactionCallback
+// ------------------------------------------------------------------------------------------------------------------
+//
+TInt CIRLogoDownloadEngine::MHFRunError(TInt /*aError*/, RHTTPTransaction aTransaction, const THTTPEvent& /*aEvent*/)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunError - Entering" );
+	aTransaction.Close();
+	iRunning = EFalse;
+	iState = EIdle;
+	if(iIsConditionalGET)
+		{
+		iIsConditionalGET = EFalse;	
+		}
+	if(iTempReqFrom == 0)
+		{
+		//do nothing	
+		}
+	else
+		{
+		iTempLogoHandle->PresetLogoDownloadError(iTempPreset);		
+		}
+	TRAP_IGNORE(ManagePresetArrayIndexL())
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::MHFRunError - Exiting" );
+	return KErrNone;
+	}
+
+// --------------------------------------------------------------------
+// CIRLogoDownloadEngine::GetNextDataPart(TPtrC8& aDataPart)
+// callback API from MHTTPDataSupplier
+// --------------------------------------------------------------------
+TBool CIRLogoDownloadEngine::GetNextDataPart(TPtrC8& aDataPart)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::GetNextDataPart - Entering" );
+    aDataPart.Length();
+    iReqBody->Length();
+    aDataPart.Set(*iReqBody);
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::GetNextDataPart - Exiting" );
+	return ETrue;
+	}
+
+// --------------------------------------------------------------------
+// CIRLogoDownloadEngine::ReleaseData()
+// callback API from MHTTPDataSupplier
+// --------------------------------------------------------------------
+void CIRLogoDownloadEngine::ReleaseData()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ReleaseData" );
+   //No implementaion
+	}
+
+
+// --------------------------------------------------------------------
+// CIRLogoDownloadEngine::Reset()
+// callback API from MHTTPDataSupplier
+// --------------------------------------------------------------------
+TInt CIRLogoDownloadEngine::Reset()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::Reset" );
+	return KErrNone;
+	}
+
+
+// --------------------------------------------------------------------
+// CIRLogoDownloadEngine::OverallDataSize()
+// callback API from MHTTPDataSupplier
+// --------------------------------------------------------------------
+TInt CIRLogoDownloadEngine::OverallDataSize()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::OverallDataSize" );
+	return iReqBody->Length();
+	}
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::ExtractResponseHeadersL( RHTTPTransaction aTransaction )
+// Used to Extract the response headers.
+// ---------------------------------------------------------------------------
+//
+
+void CIRLogoDownloadEngine::ExtractResponseHeadersL(const RHTTPTransaction&
+	aTransaction )
+    {
+    IRLOG_DEBUG( "CIRHttpDataProvider::ExtractResponseHeadersL - Entering" );
+    RHTTPResponse response = aTransaction.Response();
+    RHTTPHeaders respHeader = response.GetHeaderCollection();
+    THTTPHdrFieldIter iterator = respHeader.Fields();
+    RStringPool httpStringPool = aTransaction.Session().StringPool();
+    iterator.First();
+    HBufC8 *headerField = HBufC8::NewLC( KMaxHeaderNameLength +
+		KMaxHeaderValueLength );
+    HBufC8 *fieldValBuf = HBufC8::NewLC( KMaxHeaderValueLength );
+    while ( iterator.AtEnd() == EFalse )
+        {
+        RStringTokenF fieldName = iterator();
+        RStringF fieldNameStr = httpStringPool.StringF( fieldName );
+        THTTPHdrVal fieldVal;
+        if ( respHeader.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
+            {
+            const TDesC8 &fieldNameDesC = fieldNameStr.DesC();
+            headerField->Des().Copy( fieldNameDesC.Left(
+				KMaxHeaderNameLength ) );
+            fieldValBuf->Des().Zero();
+            switch ( fieldVal.Type() )
+                {
+                // the value is an integer
+                //lint restore -e747:Significant prototype
+                //coercion (arg. no. 1) int to long long  :
+                case THTTPHdrVal::KTIntVal: fieldValBuf->Des().Num(
+					fieldVal.Int() );
+                break;
+                // the value is a case-insensitive string
+                case THTTPHdrVal::KStrFVal:
+                    {
+                    RStringF fieldValStr = httpStringPool.StringF(
+						fieldVal.StrF() );
+                    const TDesC8 &fieldValDesC = fieldValStr.DesC();
+                    fieldValBuf->Des().Copy( fieldValDesC.Left(
+						KMaxHeaderValueLength ) );
+                    }
+                break;
+                // the value is a case-sensitive string
+                case THTTPHdrVal::KStrVal:
+                    {
+                    RString fieldValStr = httpStringPool.String(
+						fieldVal.Str() );
+                    const TDesC8 &fieldValDesC = fieldValStr.DesC();
+                    fieldValBuf->Des().Copy( fieldValDesC.Left(
+						KMaxHeaderValueLength ) );
+                    }
+                break;
+                // the value is a date/time
+                case THTTPHdrVal::KDateVal:
+                    {
+                    TDateTime date = fieldVal.DateTime();
+                    TTime t( date );
+//                    if ( iSetNonUAProfUserAgent )
+//       					{
+       		            HttpDateHeaderReceived( *headerField ,t );
+//       					}
+                    }
+                break;
+                // the value is type is unknown
+                default:
+                    break;
+                }
+            // Display HTTP header field name and value
+            headerField->Des().Append( KDPColon );
+            headerField->Des().Append( *fieldValBuf );
+            HttpHeaderReceived( *headerField );
+            }
+        ++iterator;
+        }
+    
+    CleanupStack::PopAndDestroy( fieldValBuf );
+    CleanupStack::PopAndDestroy( headerField );
+    IRLOG_DEBUG( "CIRLogoDownloadEngine::ExtractResponseHeadersL - Exiting." );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+//  CIRLogoDownloadEngine::HttpHeaderReceived( const TDesC8& aHeaderData )
+//  indicate that an HTTP header is received.
+// ---------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::HttpHeaderReceived( const TDesC8& aHeaderData )
+    {
+    IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpHeaderReceived - Entering." );
+	_LIT8(KDelim,":");
+	_LIT8(KContentType,"Content-Type");
+	ExtractHeaderValue(aHeaderData,KContentType,KDelim,iResponseHeaders->
+		iContentType);
+	_LIT8(KMaxAge,"max-age");
+	_LIT8(KDelimEqual,"=");
+	ExtractHeaderValue(aHeaderData,KMaxAge,KDelimEqual,iResponseHeaders->
+		iMaxAge);
+	_LIT8(KContentLength,"Content-Length");
+	ExtractHeaderValue(aHeaderData,KContentLength,KDelim,iResponseHeaders->
+		iContentLength);
+	_LIT8(KExpires,"Expires");
+	ExtractHeaderValue(aHeaderData,KExpires,KDelim,iResponseHeaders->iExpires);
+	_LIT8(KETag,"ETag");
+	ExtractHeaderValue(aHeaderData,KETag,KDelim,iResponseHeaders->iETag);
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpHeaderReceived - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+//  CIRLogoDownloadEngine::ExtractHeaderValue(const TDesC8& aHeaderData,const
+//	TDesC8& aHeaderName,const TDesC8& aDelimeter,TDes8& aHolder) const
+//  Used to build the CIRHttpResponseData
+// ---------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::ExtractHeaderValue(const TDesC8& aHeaderData,const
+	TDesC8& aHeaderName,const TDesC8& aDelimeter,TDes8& aHolder) const
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ExtractHeaderValue - Entering" );
+	TInt position = aHeaderData.Find(aHeaderName);
+	if( position >= 0)
+		{
+		TPtrC8 headerValue = aHeaderData.Mid(position);
+		TInt delimeterPosition = headerValue.Find(aDelimeter);
+		if( delimeterPosition != KErrNotFound )
+			{
+			delimeterPosition++;
+			TPtrC8 value = headerValue.Mid(delimeterPosition);
+			aHolder.Copy(value);
+			aHolder.TrimAll();
+			}
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ExtractHeaderValue - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+//  CIRLogoDownloadEngine::HttpDateHeaderReceived(const TDesC8 &aHeader,
+//	const TTime& aTime )
+//  Used to build the CIRHttpResponseData members
+// ---------------------------------------------------------------------------
+//
+void CIRLogoDownloadEngine::HttpDateHeaderReceived(const TDesC8 &aHeader,
+	const TTime& aTime )
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpDateHeaderReceived - Entering." );
+	_LIT8(KDate,"Date");
+	_LIT8(KLastModified,"Last-Modified");
+	TInt position = aHeader.Find(KDate);
+	if( position != KErrNotFound )
+		{
+		iResponseHeaders->iDate = aTime;
+		return ;
+		}
+	position = aHeader.Find(KLastModified);
+	if( position != KErrNotFound )
+		{
+		iResponseHeaders->iLastModified = aTime;
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::HttpDateHeaderReceived - Exiting." );
+	}
+
+
+
+
+
+// --------------------------------------------------------------------
+// CIRLogoDownloadEngine::ManagePresetArrayIndexL()
+// To make another download request if exists in the queue
+// To update the iPresetArray current index
+// --------------------------------------------------------------------
+void CIRLogoDownloadEngine::ManagePresetArrayIndexL()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ManagePresetArrayIndexL - Entering" );
+	TInt PresetArrayLength = iPresetArray->Count();
+	if((PresetArrayLength>0) && (iPresetArrayPos < PresetArrayLength))
+		{
+		CIRIsdsPreset* tempPreset = CIRIsdsPreset::NewL();
+		CleanupStack::PushL(tempPreset);
+    	*tempPreset = *(iPresetArray->At(iPresetArrayPos));
+    		if(iReqFromArrayPos < iReqFromArray->Count()  &&  iReqFromArray->At(iReqFromArrayPos) == 0 )
+        		{
+    			FetchLogoDataL(tempPreset);
+        		}
+        	else if(iObserverArrayPos < iObserverArray->Count())
+    	    	{
+    			FetchLogoDataL(tempPreset,iObserverArray->At(iObserverArrayPos),
+    							iReqFromArray->At(iReqFromArrayPos));
+    			++iObserverArrayPos;
+    	    	}
+		++iPresetArrayPos;
+		++iReqFromArrayPos;
+//		delete tempPreset;
+		CleanupStack::PopAndDestroy(tempPreset);
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ManagePresetArrayIndexL - Exiting" );
+	}
+
+
+// --------------------------------------------------------------------
+// CIRLogoDownloadEngine::ManageCachePresetArrayIndexL()
+// To make another download request if exists in the queue
+// To update the iCachePresetArray current index
+// --------------------------------------------------------------------
+void CIRLogoDownloadEngine::ManageCachePresetArrayIndexL()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ManageCachePresetArrayIndexL - Exiting" );
+ 	TInt CachePresetArrayLength = iCachePresetArray->Count();
+	if((CachePresetArrayLength>0) && (iCachePresetArrayPos < CachePresetArrayLength))
+		{
+		CIRIsdsPreset* tempPreset;
+		tempPreset = CIRIsdsPreset::NewL();
+		CleanupStack::PushL(tempPreset);
+		*tempPreset = *(iCachePresetArray->At(iCachePresetArrayPos));
+		
+		if(iCacheReqFromArrayPos < iCacheReqFromArray->Count()  &&
+					 iCacheReqFromArray->At(iCacheReqFromArrayPos) == 0 )
+    		{
+			SendRequestL(tempPreset,KLogoSize,KLogoSize);
+    		}
+    	else if(iCacheObserverArrayPos < iCacheObserverArray->Count())
+	    	{
+			SendRequestL(tempPreset,iCacheObserverArray->At(iCacheObserverArrayPos),
+					iCacheReqFromArray->At(iCacheReqFromArrayPos));
+			++iCacheObserverArrayPos;
+	    	}
+		++iCachePresetArrayPos;
+		++iCacheReqFromArrayPos;
+//		delete tempPreset;
+		CleanupStack::PopAndDestroy(tempPreset);
+ 		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::ManageCachePresetArrayIndexL - Exiting" );
+	}
+
+// -----------------------------------------------------
+// CIRLogoDownloadEngine::CacheError()
+// Called from cachemgmt in case of an error
+// callback API from MIRCacheObserver
+// -----------------------------------------------------
+void CIRLogoDownloadEngine::CacheError()
+ 	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheError" );
+
+ 	//code here, if needed
+ 	}
+
+// -----------------------------------------------------
+// CIRLogoDownloadEngine::CacheFailed()
+// Called from cachemgmt in case of cache failure
+// callback API from MIRCacheObserver
+// -----------------------------------------------------
+void CIRLogoDownloadEngine::CacheFailed()
+ 	{
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheFailed" );
+ 	//code here, if needed
+ 	}
+
+// -----------------------------------------------------
+// CIRLogoDownloadEngine::CacheInvalid()
+// Called from cachemgmt in case cache is invalid
+// callback API from MIRCacheObserver
+// -----------------------------------------------------
+void CIRLogoDownloadEngine::CacheInvalid()
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheInvalid - Entering" );
+	iETag = iCache->iETag;
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::CacheInvalid - Exiting" );
+	}
+
+// -----------------------------------------------------
+// CIRLogoDownloadEngine::CachedStructureL(TInt aChoice)
+// Called from cachemgmt data retrival is successful
+// callback API from MIRCacheObserver
+// -----------------------------------------------------
+void CIRLogoDownloadEngine::CachedStructureL(TInt aChoice)
+ 	{
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::CachedStructureL - Entering" );
+	if(iCacheReqMade)
+		{
+		iCacheReqMade = EFalse;
+		if(aChoice == KCacheAvailable)
+			{
+			
+		 	TInt sizeImgUrlWithPmts = 0;
+		 	//Remove the imgUrl with parameters from the Preset
+			//now set imgUrl without parameters in to the Preset
+			if(iSendingLogo==0)
+				{
+				sizeImgUrlWithPmts = iCacheTempPreset->GetImgUrl().Length();		
+				}
+			else if(iSendingLogo==1)
+				{
+				sizeImgUrlWithPmts = iTempPreset->GetImgUrl().Length();		
+				}
+			else if(iSendingLogo==2)
+				{
+				sizeImgUrlWithPmts = KTen;			
+				}
+			TBool hasParameters = EFalse;
+			RBuf urlWithPar;
+			urlWithPar.Create(sizeImgUrlWithPmts);
+			if(iSendingLogo==0)
+				{
+				urlWithPar.Copy(iCacheTempPreset->GetImgUrl());
+				}
+			else if(iSendingLogo==1)
+				{
+				urlWithPar.Copy(iTempPreset->GetImgUrl());
+				}
+			else if(iSendingLogo==2)
+				{
+				_LIT(KNone,"");
+				urlWithPar.Copy(KNone);
+				}
+				
+			RBuf tempBuf;
+			tempBuf.Create(sizeImgUrlWithPmts);
+
+			TLex urlLex(urlWithPar);
+			for(;!urlLex.Eos();)
+				{
+				tempBuf.Zero();
+				while(urlLex.Peek() != '?' && !urlLex.Eos())		
+					{
+					tempBuf.Append(urlLex.Get());
+					}
+				if(urlLex.Peek() == '?')
+					{
+					hasParameters = ETrue;			
+					}
+				urlLex.Inc();	
+				}
+			
+			RBuf imgUrl;		
+			if(hasParameters)		
+				{
+				//let say urlWithPar has the value http://www.logos.com/images/test.pngx=100&y=100
+				//now the tempBuf contains the value  x=100&y=100
+				TInt sizeUrlParameters = tempBuf.Length();
+				sizeUrlParameters++; // now this integer contains the size of x=100&y=100 
+				TInt sizeImgUrl = sizeImgUrlWithPmts - sizeUrlParameters;
+				
+				//Create a buffer to store the imgUrl without parameters
+				imgUrl.Create(sizeImgUrl);
+				imgUrl.Copy(urlWithPar.Left(sizeImgUrl));
+				if(iSendingLogo==0)
+					{
+					iCacheTempPreset->SetImgUrl(imgUrl);			
+					}
+				else if(iSendingLogo==1)
+					{
+					iTempPreset->SetImgUrl(imgUrl);			
+					}
+				}
+			else
+				{
+				//nothing to be done
+				//the imgUrl present in the preset is correct, no need to change anything
+				}
+			
+			
+			
+			if(iSendingLogo==0)
+			 	{
+			 	if(aChoice == KCacheAvailable)//logo is available in the cache
+				 	{
+					iCacheTempPreset->SetLogoData(iCache->iLogoData);	 		
+				 	}
+				if(iCacheReqFrom == 0)
+					{
+					iFavDb->ReplacePresetL(*iCacheTempPreset);
+					iPresetModifiedStatus = ETrue;
+					}
+				else
+					{
+					iCacheTempLogoHandle->PresetLogoDownloadedL(iCacheTempPreset);
+					}	
+				
+				
+				ManageCachePresetArrayIndexL(); 	
+			 	}
+			else if(iSendingLogo==1)	
+				{
+			 	if(aChoice == KCacheAvailable)//logo is available in the cache
+				 	{
+					iTempPreset->SetLogoData(iCache->iLogoData);	 		
+				 	}
+				if(iTempReqFrom == 0)
+					{
+					iFavDb->ReplacePresetL(*iTempPreset);
+					iPresetModifiedStatus = ETrue;
+					}
+				else
+					{
+					iTempLogoHandle->PresetLogoDownloadedL(iTempPreset);
+					}		 	
+					
+			 	ManagePresetArrayIndexL();
+			 	}
+			else if(iSendingLogo==2)//logo request from the search results (while displaying logo)
+				{
+				//code here, if needed			
+				}
+
+			//close all the buffers
+			imgUrl.Close();
+			tempBuf.Close();
+			urlWithPar.Close();
+			}
+			
+		}
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::CachedStructureL - Exiting" );
+ 	}
+ 	
+// -----------------------------------------------------
+// CIRLogoDownloadEngine::ReleaseResources()
+// Releases the resources held by logo download engine
+// Used to close the Http Session if already open
+// -----------------------------------------------------
+void CIRLogoDownloadEngine::ReleaseResources()
+	{
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::ReleaseResources - Entering" );
+	CancelTransaction();
+	iLogoSession.Close();
+    iFirstTime = ETrue;
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::ReleaseResources - Exiting" );
+	} 	
+
+
+// ---------------------------------------------------------------------------
+// CIRLogoDownloadEngine::HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aType )
+// This is called by CIRFavoritesDb when values of presets stations has been changed	
+// ---------------------------------------------------------------------------
+//	
+void CIRLogoDownloadEngine::HandlePresetChangedL( TInt aId, TUid aDataHandler,
+					 MPSPresetObserver::TPSReason aReason )
+	{
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::HandlePresetChangedL - Entering" );
+    if ( aDataHandler ==  KIRPreset  )
+        {
+        switch ( aReason )
+            {
+            case 0:  //MPSPresetObserver::EPSCreated
+                {
+/*d				CIRPreset* preset = NULL;
+                preset = iFavDb->PresetById( aId );
+                delete iCopyPreset;
+                iCopyPreset = NULL;
+                iCopyPreset = CIRIsdsPreset::NewL();
+                preset->CopyPresetData(*iCopyPreset);
+                if(iCopyPreset->GetChannelType()==1)
+	                {
+	                if(iCopyPreset->GetImgUrl().Length() != 0)
+		                {
+		                if(iCopyPreset->GetLogoData().Length() == 0)
+			                {
+			                SendRequestL(iCopyPreset);		                	
+			                }
+		                }
+					else
+						{
+						//do nothing;
+						}
+	                }
+d*/                }
+            	break;
+            case 1:  //MPSPresetObserver::EPSDeleted:
+            	break;
+            case 2:  //MPSPresetObserver::EPSModified:
+	            {
+	            if(!iFavDb->GetMoveStatus())
+			        {
+		            if(iPresetModifiedStatus)
+			            {
+						iPresetModifiedStatus = EFalse;		            	
+			            }
+		            else
+			            {
+						CIRPreset* preset = NULL;
+		                preset = iFavDb->PresetById( aId );
+		                delete iCopyPreset;
+		                iCopyPreset = NULL;
+		                iCopyPreset = CIRIsdsPreset::NewL();
+		                preset->CopyPresetData(*iCopyPreset);
+		                if(iCopyPreset->GetChannelType()==1)
+			                {
+			                if(iCopyPreset->GetImgUrl().Length() != 0)
+				                {
+				                SendRequestL(iCopyPreset,KLogoSize,KLogoSize);		                	
+				                }
+							else
+								{
+								//do nothing;
+								}
+			                }
+			            }
+			        }
+	            }
+            	break;
+            default:
+            	break;
+            }
+        }
+ 	IRLOG_DEBUG( "CIRLogoDownloadEngine::HandlePresetChangedL - Exiting" );
+	}
+
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when network is active, to reissue the request  
+// NotifyActiveNetworkObserversL()
+// -----------------------------------------------------------------------------
+
+void CIRLogoDownloadEngine::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::NotifyActiveNetworkObserversL - Entering" );
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			ReleaseResources();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+			if( iLogoRequestPending )
+				{
+				IssueLogoDownloadRequestL();
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRLogoDownloadEngine::NotifyActiveNetworkObserversL - Exiting" );
+	}
+
+ 	
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRLogoDownloadEngine::ResetPendingRequests(TBool /*aValue*/)
+	{
+		
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/iradvertisement.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRADVERTISEMENT_H
+#define IRADVERTISEMENT_H
+
+#include <e32base.h>
+
+/**
+*This class is being used by xml parser.
+*code is ready to support advertisement
+*not being used in current release
+*/
+
+class CIRAdvertisement : public CBase
+	{
+	public :
+	
+	/**
+	*CIRAdvertisement::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return CIRAdvertisement*
+	*/
+	IMPORT_C	static CIRAdvertisement* NewLC();
+	
+	/**
+	*CIRAdvertisement::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return CIRAdvertisement*
+	*/
+	IMPORT_C	static CIRAdvertisement* NewL();
+	
+	/**
+	*CIRAdvertisement::ConstructL()
+	*standard second phase constructor
+	*/
+	IMPORT_C	void ConstructL() const;
+	
+	/**
+	*CIRAdvertisement::~CIRAdvertisement()
+	*standard C++ destructor
+	*/
+	~CIRAdvertisement();
+	
+	/**
+	*CIRAdvertisement::SetAdvInUse()
+	*Function to set the advertisement in use
+	*@param TDesC
+	*/
+	IMPORT_C	void     SetAdvInUse(const TDesC& aAdvInUse);
+	
+	/**
+	*CIRAdvertisement::SetUsage()
+	*Function to set the url of the global advertisement
+	*@param TDesC
+	*/
+	IMPORT_C	void	 SetUsage(const TDesC& aUsageVisibleTimes);
+	
+	/**
+	*CIRAdvertisement::SetVisibleTime()
+	*Function to set the duration of the advertisement to be displayed
+	*@param TDesC
+	*/
+	IMPORT_C	void	 SetVisibleTime(const TDesC& aVisibleTime);
+	
+	/**
+	*CIRAdvertisement::SetURL()
+	*Function to set the url of the global advertisement
+	*@param TDesC
+	*/
+	IMPORT_C	void	 SetURL(const TDesC& aUrl);
+	
+	private :
+	//url to fetch the ad from		
+	HBufC*   iUrl;
+	//url of the current ad in use
+	HBufC*   iAdvInUse; 
+ 	//defines the time for which the ad is visible
+	TInt   iVisibleTime;
+	//no of times the ad to be shown
+	TInt   iUsageVisibleTimes;
+	
+   };
+	
+#endif//IRADVERTISEMENT_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/irbrowsecatagoryitems.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRBROWSECATAGORYITEMS_H
+#define IRBROWSECATAGORYITEMS_H
+
+#include <e32base.h>
+
+class RReadStream;
+class RWriteStream;
+
+/**
+ * This class provides the basic structure to hold the browse information 
+ *information that come from the isds server.
+ *It also provides the basic getter and setter functions to 
+ *manage the browse information.
+ * @code
+ *CIRBrowseCatagoryItems* browse = CIRBrowseCatagoryItems::NewL()
+ *browse->SetXXX();
+ *browse->GetXXX()
+ * *browse = *browse2
+ *delete browse;
+ * @endcode
+ *   
+ */
+
+class CIRBrowseCatagoryItems : public CBase
+	{
+public :
+
+	/**
+	*CIRBrowseCatagoryItems::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return CIRBrowseCatagoryItems*
+	*/
+	IMPORT_C	static CIRBrowseCatagoryItems* NewL();
+	
+
+	/**
+	*CIRBrowseCatagoryItems::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return CIRBrowseCatagoryItems*
+	*/
+	IMPORT_C	static CIRBrowseCatagoryItems* NewLC();
+
+	/**
+	*CIRBrowseCatagoryItems::ConstructL()
+	*standard second phase constructor
+	*/
+	void ConstructL() const;
+
+	/**
+	*CIRBrowseCatagoryItems::~CIRBrowseCatagoryItems()
+	*standard C++ destructor
+	*/
+	~CIRBrowseCatagoryItems();
+
+	/**
+	*CIRBrowseCatagoryItems::SetTextL()
+	*sets the category name and category id
+	**/
+	IMPORT_C	void SetTextL(const TDesC& aCatName,const TDesC& aCatId);
+
+	/**
+	*CIRBrowseCatagoryItems::SetSize()
+	*sets the count of the no of items present under that type
+	*/
+	IMPORT_C	void	SetSize(const TDesC& aCatSize);
+	
+	/**
+	*CIRBrowseCatagoryItems::SetGetOperation()
+	*sets the url that is used to get the next level of data
+	*/
+	IMPORT_C void SetGetOperation(const TDesC& aCatGetOperation);
+	
+	/**
+	*CIRBrowseCatagoryItems::SetBannerUrl(const TDesC& aBannerUrl)
+	*Set data Banner Url
+	*@param TDesC
+	*/
+	IMPORT_C void SetBannerUrl(const TDesC& aBannerUrl);
+	
+	
+	/**
+	*CIRBrowseCatagoryItems::SetClickThroughUrl(const TDesC& aClickThroughUrl)
+	*Set data Banner Url
+	*@param TDesC
+	*/
+	IMPORT_C  void SetClickThroughUrl(const TDesC& aClickThroughUrl);
+
+	/**
+	*CIRBrowseCatagoryItems::ExternalizeL()
+	*Externalizes the data from file
+	*@param RWriteStream
+	**/
+	IMPORT_C	void  ExternalizeL(RWriteStream& aStream) const;
+
+
+	/**
+	*CIRBrowseCatagoryItems::InternalizeL()
+	*Internalizes the data from file
+	*@param RWriteStream&
+	**/
+	IMPORT_C	void  InternalizeL(RReadStream& aStream);
+
+
+public:
+	//category name
+	HBufC*   iCatName;
+	//category id
+	HBufC*   iCatId;
+	//get operation
+	HBufC*	 iCatGetOperation;
+	//no of entities
+	TInt 		iSize;
+	
+	//For Advertisements
+	HBufC* iCatBannerUrl;
+	HBufC* iCatClickThroughUrl;
+	};
+	
+#endif// IRBROWSECATAGORYITEMS_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/irbrowsechannelitems.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRBROWSECHANNELITEMS_H
+#define IRBROWSECHANNELITEMS_H
+
+#include <e32base.h>
+
+class RReadStream;
+class RWriteStream;
+
+/**
+ * This class provides the basic structure to hold the browse information 
+ *information that come from the isds server.
+ *It also provides the basic getter and setter functions to 
+ *manage the browse information.
+ * @code
+ *CIRBrowseChannelItems* browse = CIRBrowseChannelItems::NewL()
+ *browse->SetXXX();
+ *browse->GetXXX()
+ *delete browse;
+ * @endcode
+ *   
+ */
+class CIRBrowseChannelItems : public CBase
+	{
+public :
+
+	/**
+	*CIRBrowseChannelItems::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@return CIRBrowseChannelItems*
+	*/
+	IMPORT_C	static CIRBrowseChannelItems* NewLC();
+
+	/**
+	*CIRBrowseChannelItems::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return CIRBrowseChannelItems*
+	*/
+	IMPORT_C	static CIRBrowseChannelItems* NewL();
+
+	/**
+	*CIRBrowseChannelItems::ConstructL()
+	*standard two phased constructor
+	*/
+	void ConstructL() const;
+
+	/**
+	*CIRBrowseChannelItems::~CIRBrowseChannelItems()
+	*standard C++ destructor
+	*/
+	~CIRBrowseChannelItems();
+
+public:
+
+	/**
+	*CIRBrowseChannelItems::SetTextL()
+	*Set data namely channelname,channelid,description
+	*@param TDesC,TDesC,TDesC
+	*/
+	IMPORT_C	void   SetTextL(
+		const TDesC& aChannelName,const TDesC& aChannelId,const TDesC& aDescription);
+
+	/**
+	*CIRBrowseChannelItems::SetGetOperationL()
+	*Set data get methord
+	*@param TDesC
+	*/
+	IMPORT_C	void	 SetGetOperationL(const TDesC& aChannelGetOperation);
+
+	/**
+	*CIRBrowseChannelItems::SetSize()
+	*Set data size of data
+	*@param TDesC
+	*/
+	IMPORT_C	void	 SetSize(const TDesC& aSize);
+
+	/**
+	*CIRBrowseChannelItems::SetImageUrl()
+	*Set data for iImgUrl
+	*@param TDesC
+	*/
+	IMPORT_C	void	 SetImageUrl(const TDesC& aImgUrl);
+
+	/**
+	*CIRBrowseChannelItems::SetGetOperation()
+	*Set data for the get operation
+	*@param TDesC
+	*/
+	IMPORT_C	void 	 SetGetOperation(TDesC& aCatGetOperation);
+
+	/**
+	*CIRBrowseChannelItems::ExternalizeL()
+	*Externalizes data into persistent storage
+	*@param RWriteStream
+	*/
+	IMPORT_C	void   ExternalizeL(RWriteStream& aStream) const;
+
+	/**
+	*CIRBrowseChannelItems::InternalizeL()
+	*internalizes data from persistent storage
+	*@param RReadStream
+	*/
+	IMPORT_C	void   InternalizeL(RReadStream& aStream);
+
+	/**
+	*CIRBrowseChannelItems::SetLastPlayedUrl()
+	*Sets the last played url
+	*/
+	IMPORT_C	void SetLastPlayedUrl();
+
+	/**
+	*CIRBrowseChannelItems::SetBitrate()
+	*Set data for 3bitrates
+	*@param TDesC,TDesC,TDesC
+	*/
+	IMPORT_C	void SetBitrate(
+		const TDesC &aBitrate1,const TDesC &aBitrate2,const TDesC &aBitrate3);
+
+	/**
+	*CIRBrowseChannelItems::SetBitrate()
+	*Set data for 2 bitrates
+	*@param TDesC,TDesC
+	*/
+	IMPORT_C	void SetBitrate(const TDesC &aBitrate1,const TDesC &aBitrate2);
+
+	/**
+	*CIRBrowseChannelItems::SetBitrate()
+	*Set data for 1 bitrate
+	*@param TDesC
+	*/
+	IMPORT_C	void SetBitrate(const TDesC &aBitrate1);
+
+	//For Advertisements
+	/**
+	*CIRBrowseChannelItems::SetBannerUrl(const TDesC& aBannerUrl)
+	*Set data Banner Url
+	*@param TDesC
+	*/
+	IMPORT_C void SetBannerUrl(const TDesC& aBannerUrl);
+	
+	
+	/**
+	*CIRBrowseChannelItems::SetClickThroughUrl(const TDesC& aClickThroughUrl)
+	*Set data Banner Url
+	*@param TDesC
+	*/
+	IMPORT_C  void SetClickThroughUrl(const TDesC& aClickThroughUrl);
+
+public :
+	//channel name
+	HBufC*   iChannelName;
+	//short description
+	HBufC*   iShortDescription;
+	//url to fetch the preset from
+	HBufC*   iChannelGetOperation;
+	//url to fetch the image from
+	RBuf     iImgUrl;
+	//supported bitrates(were required for bitrate view)
+	//not in use now
+	TInt     iBitrate1;
+	TInt     iBitrate2;
+	TInt     iBitrate3;
+	//channel id
+	TUint    iChannelID;
+	TInt	 iSize;
+	
+	
+		//For Advertisements
+	HBufC* iBannerUrl;
+	HBufC* iClickThroughUrl;
+
+	};
+
+#endif // IRBROWSECHANNELITEMS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/irchannelserverurl.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRCHANNELSERVERURL_H
+#define IRCHANNELSERVERURL_H
+
+#include <e32base.h>
+
+class RReadStream;
+class RWriteStream;
+
+/**
+ * This class provides the basic structure to hold the preset's url data
+ *information that come from the isds server.
+ *It also provides the basic getter and setter functions to 
+ *manage the preset's url information.
+ *for url selection for a particular bitrate some functionality 
+ *has been provided
+ *copy constructor and assignment operator has been provided to 
+ *override the default ones 
+ *
+ * @code
+ *CIRChannelServerUrl* presetUrl = CIRChannelServerUrl::NewL()
+ *preset->SetXXX();
+ *preset->GetXXX();
+ * @endcode
+ *   
+ */
+ 
+class CIRChannelServerUrl:public CBase
+	{
+public:
+	
+	/**
+	*CIRChannelServerUrl::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return *CIRChannelServerUrl
+	*/
+	IMPORT_C	static CIRChannelServerUrl* NewL();
+	
+	/**
+	*CIRChannelServerUrl::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@return *CIRChannelServerUrl
+	*/
+	IMPORT_C	static CIRChannelServerUrl* NewLC();
+	
+	/**
+	*CIRChannelServerUrl::SetServerName()
+	*sets server name 
+	*@param TDesC
+	*/
+	IMPORT_C	void SetServerName(const TDesC& aServerName);
+	
+	/**
+	*CIRChannelServerUrl::SetServerUrl()
+	*sets server url 
+	*@param TDesC
+	*/
+	IMPORT_C	void SetServerUrl(const TDesC& aServerUrl);
+	
+	/**
+	*CIRChannelServerUrl::SetBitRate()
+	*sets server bitrate 
+	*@param TInt
+	*/
+	IMPORT_C	void SetBitRate(TInt aBitrate);
+	
+	/**
+	*CIRChannelServerUrl::GetServerName()
+	*gets server name 
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetServerName() const;
+	
+	/**
+	*CIRChannelServerUrl::GetServerUrl()
+	*gets server url 
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetServerUrl() const;
+	
+	/**
+	*CIRChannelServerUrl::GetBitRate()
+	*gets server bitrate
+	*@return TInt
+	*/
+	IMPORT_C	TInt GetBitRate() const;
+	
+	/**
+	*CIRChannelServerUrl::~CIRChannelServerUrl()
+	*standard C++ destructor 
+	*/	
+	~CIRChannelServerUrl();
+	
+	/**
+	*CIRChannelServerUrl::=()
+	*standard C++ copy constructor(deep copy) 
+	*@param CIRChannelServerUrl
+	*/	
+	IMPORT_C	CIRChannelServerUrl& operator=(const CIRChannelServerUrl& churl);
+		
+	/**
+	*CIRChannelServerUrl::ExternalizeL()
+	*function to externalize url data
+	*@param CIRChannelServerUrl
+	*/
+	IMPORT_C void ExternalizeL(RWriteStream& aWriteStream);	
+	
+	/**
+	*CIRChannelServerUrl::InternalizeL()
+	*function to internalize url data
+	*@param CIRChannelServerUrl
+	*/
+	IMPORT_C void InternalizeL(RReadStream& aReadStream);
+
+protected:
+	
+	/**
+	*CIRChannelServerUrl::ConstructL()
+	*standard second phase construction
+	*/	
+	void ConstructL() const;
+	
+public:
+	//server name
+	HBufC *iServerName;
+	HBufC *iURL;
+	//bit rate
+	TInt iBitrate;
+	};
+	
+#endif //IRCHANNELSERVERURL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/irisdspreset.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,595 @@
+/*
+* Copyright (c) 2006-2008 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:  iSDS preset structure.
+*
+*/
+
+
+#ifndef IRISDSPRESET_H
+#define IRISDSPRESET_H
+
+#include <badesca.h>
+
+class CIRChannelServerUrl;
+class RReadStream;
+class RWriteStream;
+
+/**
+ * This class provides the basic structure to hold the preset
+ *information that come from the isds server.
+ *It also provides the basic getter and setter functions to
+ *manage the preset information.
+ *for url selection for a particular bitrate some functionality
+ *has been provided
+ *copy constructor and assignment operator has been provided to
+ *override the default ones
+ *
+ * @code
+ *CIRIsdsPreset* preset = CIRIsdsPreset::NewL()
+ *preset->SetXXX();
+ *preset->GetXXX()
+ * *preset1 = *preset2
+ * @endcode
+ *
+ */
+
+class CIRIsdsPreset:public CBase
+	{
+
+	public:
+
+	/**
+	*CIRIsdsPreset::NewL()
+	*Static function
+	*standard two phased constructor
+	*@return *CIRIsdsPreset
+	*/
+	IMPORT_C	static CIRIsdsPreset* NewL();
+
+
+	/**
+	*CIRIsdsPreset::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@return *CIRIsdsPreset
+	*/
+	IMPORT_C	static CIRIsdsPreset* NewLC();
+
+
+	/**
+	*CIRIsdsPreset::~CIRIsdsPreset()
+	*standard C++ destructor
+	*/
+	~CIRIsdsPreset();
+
+
+	/**
+	*CIRIsdsPreset::CIRIsdsPreset()
+	*standard C++ constructor
+	*/
+	IMPORT_C	CIRIsdsPreset();
+
+
+	protected:
+
+	/**
+	*CIRIsdsPreset::ConstructL()
+	*standard second phase constructor(Leaveable)
+	*/
+	void ConstructL();
+
+
+	public:
+
+
+	//setter functions
+
+	/**
+	*CIRIsdsPreset::SetId()
+	*sets id
+	*@param TDesC,supplied by xml parser
+	*/
+	IMPORT_C	void SetId(const TDesC &aId);
+
+	/**
+	*CIRIsdsPreset::SetId()
+	*sets id
+	*@param TInt,provided to manipulate the id number
+	*/
+	IMPORT_C	void SetId(TInt aId);
+
+	/**
+	*CIRIsdsPreset::SetName()
+	*sets the preset name
+	*@param TdesC aname,the name to be set
+	*/
+	IMPORT_C	void SetName(const TDesC &aName);
+
+	/**
+	*CIRIsdsPreset::SetLangInfo()
+	*sets the preset language name and the code
+	*@param TdesC,TdesC language id and name to be set
+	*/
+	IMPORT_C	void SetLangInfo(const TDesC &aLangId,const TDesC& aLangName);
+
+	/**
+	*CIRIsdsPreset::SetCountryInfo()
+	*sets the preset country name and the code
+	*@param TdesC,TdesC country id and country name to be set
+	*/
+	IMPORT_C void SetCountryInfo(const TDesC& aCountryId,
+		const TDesC& aCountryName);
+
+	/**
+	*CIRIsdsPreset::SetLangCode()
+	*sets the language code
+	*@param TdesC language code
+	*/
+	IMPORT_C     void SetLangCode(const TDesC &aLangId);
+
+	/**
+	*CIRIsdsPreset::SetLang()
+	*sets the language
+	*@param TdesC language
+	*/
+	IMPORT_C	void SetLang(const TDesC& aLangName);
+
+	/**
+	*CIRIsdsPreset::SetCountryCode()
+	*sets the language code
+	*@param TdesC language code
+	*/
+	IMPORT_C	void SetCountryCode(const TDesC &aCountryId);
+
+	/**
+	*CIRIsdsPreset::SetCountryName()
+	*sets the language name
+	*@param TdesC language name
+	*/
+	IMPORT_C	void SetCountryName(const TDesC& aCountryName);
+
+	/**
+	*CIRIsdsPreset::SetLastModifiedTime()
+	*sets the lastmodified time stamp
+	*@param TdesC lastmodified time stamp
+	*/
+	IMPORT_C	void SetLastModifiedTime(const TDesC &aLastModified);
+
+	/**
+	*CIRIsdsPreset::SetGenreInfo()
+	*sets the genreid and name
+	*@param aGenreId
+	*@param aGenreName
+	*/
+	IMPORT_C	void SetGenreInfo(const TDesC& aGenreId,const TDesC& aGenreName);
+
+	/**
+	*CIRIsdsPreset::SetImgUrl()
+	*sets the image url
+	*@param aImgUrl
+	*/
+	IMPORT_C	void SetImgUrl(const TDesC& aImgUrl);
+
+	/**
+	*CIRIsdsPreset::SetLogoDataL()
+	*sets the Logo Data
+	*@param aData
+	*@param aSize
+	*/
+    IMPORT_C void SetLogoData( const TDesC8& aData );
+
+	/**
+	*CIRIsdsPreset::SetAdvertisementInUse()
+	*sets the advertisementinuse url
+	*@param aAdvertisementInUse
+	*/
+	IMPORT_C	void SetAdvertisementInUse(const TDesC& aAdvertisementInUse);
+
+	/**
+	*CIRIsdsPreset::SetDescription()
+	*sets the description for the channel
+	*@param aDescription
+	*/
+	IMPORT_C	void SetDescription(const TDesC& aDescription);
+
+	/**
+	*CIRIsdsPreset::SetAdvertisementUrl()
+	*sets the advertisement url
+	*@param aAdvertisementUrl
+	*/
+	IMPORT_C	void SetAdvertisementUrl(const TDesC& aAdvertisementUrl);
+
+	/**
+	*CIRIsdsPreset::SetUrlCount()
+	*sets the count of the number of urls
+	*/
+	IMPORT_C	void SetUrlCount();
+
+	/**
+	*CIRIsdsPreset::SetShortDesc()
+	*sets the short description
+	*@param aShortDesc
+	*/
+	IMPORT_C	void SetShortDesc(const TDesC& aShortDesc);
+
+	/**
+	 * Sets the genre name
+	 * @param aGenreName
+	 */
+	IMPORT_C	void SetGenreName(const TDesC& aGenreName);
+
+	/**
+	 * Sets the genre id
+	 * @param aGenreId
+	 */
+	IMPORT_C	void SetGenreId(const TDesC& aGenreId);
+
+	/**
+	*CIRIsdsPreset::SetUrlCount()
+	*sets the count of the number of urls
+	*@param aCnt ,count
+	*/
+	IMPORT_C	void SetUrlCount(TInt aCnt);
+
+	/**
+	*CIRIsdsPreset::SetIndex()
+	*sets the index for the preset.used only for presets in the fav list
+	*@param aInt
+	*/
+	IMPORT_C	void SetIndex(TInt aInt);
+
+	/**
+	*CIRIsdsPreset::SetUrlL()
+	*sets the channel server url
+	*@param aServerName ,server name
+	*@param aUrl ,server url
+	*@param aBitrate .server bitrate
+	*/
+	IMPORT_C void SetUrlL(const TDesC &aServerName,const TDesC &aUrl,const TDesC &aBitrate);
+
+	/**
+	*CIRIsdsPreset::SetUrlL()
+	*sets the channel server url
+	*@param aServerName ,server name
+	*@param aUrl ,server url
+	*@param aBitrate ,server bitrate
+	*/
+	IMPORT_C void SetUrlL(const TDesC &aServerName,const TDesC &aUrl,TInt aBitrate);
+
+	/**
+	*CIRIsdsPreset::SetChannelType()
+	*sets the channel type
+	*@param aChannelType userdefined,isds,adhoc
+	*/
+	IMPORT_C	void SetChannelType(TInt aChannelType);
+
+	/**
+	*CIRIsdsPreset::SetUrlL()
+	*sets the url for a channel server
+	*@param aUrl
+	*/
+	IMPORT_C    void SetUrlL(const TDesC &aUrl);
+	
+	
+	/**
+	*CIRIsdsPreset::SetMusicStoreStatus()
+	*sets the musicStoreEnabled 
+	*@param aMusicStoreStatus
+	*/
+	IMPORT_C    void SetMusicStoreStatus(const TDesC& aMusicStoreStatus);
+	
+	
+	
+	
+
+	//for serialization
+	/**
+	*CIRIsdsPreset::ExternalizeL()
+	*serializes the preset data into a stream
+	*@param aWriteStream
+	*/
+	IMPORT_C	void ExternalizeL(RWriteStream& aWriteStream);
+
+	/**
+	*CIRIsdsPreset::InternalizeL()
+	*serializes the preset data from a stream to a structure
+	*@param aReadStream
+	*/
+	IMPORT_C 	void InternalizeL(RReadStream& aReadStream);
+
+	//getter functions
+	/**
+	*CIRIsdsPreset::GetId()
+	*gets the channel id
+	*@return TInt
+	*/
+	IMPORT_C	TInt GetId() const;
+
+	/**
+	*CIRIsdsPreset::GetName()
+	*gets the channel name
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetName() const;
+
+	/**
+	*CIRIsdsPreset::GetLangId()
+	*gets the channel channelid
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetLangId() const;
+
+	/**
+	*CIRIsdsPreset::GetLangName()
+	*gets the channel language name
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetLangName() const;
+
+	/**
+	*CIRIsdsPreset::GetCountryId()
+	*gets the channel countryid
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetCountryId() const;
+
+	/**
+	*CIRIsdsPreset::GetCountryName()
+	*gets the channel country name
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetCountryName() const;
+
+	/**
+	*CIRIsdsPreset::GetLastModifiedTime()
+	*gets the channel last modified time stamp
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetLastModifiedTime() const;
+
+	/**
+	*CIRIsdsPreset::GetDescription()
+	*gets the channel description
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetDescription() const;
+
+	/**
+	*CIRIsdsPreset::GetShortDescription()
+	*gets the channel  short description
+	*@return TDesC
+	*/
+	IMPORT_C   const TDesC& GetShortDescription() const;
+
+    /**
+    *CIRIsdsPreset::GetChannelType()
+	*gets the channel  Type
+	*@return TInt
+	*/
+	IMPORT_C	TInt GetChannelType() const;
+
+	/**
+	*CIRIsdsPreset::GetIndex()
+	*gets the channel  index
+	*@return TInt
+	*/
+	IMPORT_C	TInt GetIndex() const;
+
+	/**
+	*CIRIsdsPreset::GetGenreId()
+	*gets the channel  genreid
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetGenreId() const;
+
+	/**
+	*CIRIsdsPreset::GetGenreName()
+	*gets the channel  genre name
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetGenreName() const;
+
+	/**
+	*CIRIsdsPreset::GetAdvertisementUrl()
+	*gets the channel  advertisement url
+	*@return TDesC
+	*/
+	IMPORT_C	const TDesC& GetAdvertisementUrl() const;
+
+	/**
+	 * Gets the channel advertisement in use
+	 * @return TDesC
+	 */
+	IMPORT_C	const TDesC& GetAdvertisementInUse() const;
+
+	/**
+	 * Gets the image url
+	 * @return TDesC
+	 */
+	IMPORT_C	const TDesC& GetImgUrl() const;
+
+    /**
+    *CIRIsdsPreset::GetUrlCount()
+	*gets the channel  url count
+	*@return TDesC
+	*/
+	IMPORT_C	TInt GetUrlCount() const;
+
+	/*
+	*CIRIsdsPreset::GetLogoData()
+	*gets the Logo Data
+	*@return TDesC&
+	*/
+    IMPORT_C const TDesC8& GetLogoData() const;
+
+	/*
+	*CIRIsdsPreset::GetLogoSize()
+	*gets the Logo Size
+	*@return TSize&
+	*/
+    IMPORT_C const TSize& GetLogoSize() const;
+
+	/**
+	*CIRIsdsPreset::SGetUrl()
+	*gets the channel  url from zeroth position
+	*@return TInt
+	*/
+	IMPORT_C TInt GetUrl() const;
+
+		/**
+	*CIRIsdsPreset::GetMusicStoreStatus()
+	*gets the musicStoreEnabled 
+	*@return TDesC&
+	*/
+	IMPORT_C    const TDesC& GetMusicStoreStatus() const;
+
+
+	/**
+	*CIRIsdsPreset::SetLastModifiedTime()
+	*gets the channel  url at a particular index
+	*@param aindex
+	*@return CIRChannelServerUrl
+	*/
+	IMPORT_C	CIRChannelServerUrl& GetUrl(TInt aInt);
+
+    /**
+    *CIRIsdsPreset::operator=()
+	*assignment operator
+	*@param CIRIsdsPreset& aPreset
+	*@return CIRIsdsPreset
+	*/
+	IMPORT_C CIRIsdsPreset& operator=(const CIRIsdsPreset& aPreset);
+
+	/**
+	*CIRIsdsPreset::GetAvailableBitrates()
+	*gets the bitrate array
+	*@return RArray<TInt>
+	*/
+	IMPORT_C 	TInt GetAvailableBitrates(RArray<TInt>& aBitrates) const;
+
+	/**
+	*CIRIsdsPreset::GetUrlForBitrateL()
+	*gets the array of bitrates for a particular bitrate
+	*@param aBitrate
+	*@return CDesCArrayFlat
+	*/
+	IMPORT_C 	CDesCArrayFlat* GetUrlForBitrateL(TInt aBitrate);
+
+	/**
+	*CIRIsdsPreset::GetExactUrlForBitrateL()
+	*Urls exactly matching a given bitrate for display purpose
+	*@param aBitrate
+	*@return CDesCArrayFlat
+	*/
+	IMPORT_C 	CDesCArrayFlat* GetExactUrlForBitrateL(TInt aBitrate);
+
+	/**
+	*CIRIsdsPreset::UniqId()
+	*gets the unique id
+	*@return TUint32
+	*/
+	IMPORT_C 	TUint32 UniqId() const;
+
+	/**
+	*CIRIsdsPreset::SetUniqId()
+	*sets the unique id for the preset
+	*@param aId
+	*/
+	IMPORT_C 	void SetUniqId( TUint32 aId);
+
+    /**
+	*CIRIsdsPreset::GetChannelUrlAtL()
+	*sets the lastmodified time stamp
+	*returns the url at the urlarray by index
+	*@param aIndex
+	*@return TDesC
+	*/
+	IMPORT_C const TDesC& GetChannelUrlAtL(TInt aIndex) const;
+    /**
+	*CIRIsdsPreset::GetChannelUrlAtL()
+	*sets the lastmodified time stamp
+	*returns the url at the urlarray by index
+	*@param aIndex
+	*@return TDesC
+	*/
+	IMPORT_C  TInt GetChannelBitrateL(TInt aIndex);
+
+private:
+
+    /**
+	*CIRIsdsPreset::SortInOrderL()
+	*sorts the urls in bitrate order desc.
+	*/
+	void SortInOrderL();
+
+public:
+
+	//url array
+	CArrayPtrFlat<CIRChannelServerUrl>*iUrlArray;
+
+    /**type of presets(source)*/
+    enum TChannelType
+    {
+    	EUserDefined,/**added by user*/
+    	EIsdsPreset,/**fetched from isds*/
+    	EAdhoc /**not in use currently*/
+    };
+
+private:
+	//unique id generated for the preset saved at favourite
+	TUint32 iUniqId;
+	//no of channel urls
+	TInt iChannelUrlCount;
+    //0 for user defined 1 for isds type.
+	TInt iType;
+	//index in the preset table
+	TInt iIndex;
+	//isds generated preset id
+	TInt iPresetId;
+	//preset name
+	RBuf iName;
+	//preset language code
+	RBuf iLanguageCode;
+	//preset language
+	RBuf iLanguage;
+	//preset country of origin code
+	RBuf iCountryCode;
+	//preset country of origin
+	RBuf iCountry;
+	//preset last modified
+	RBuf iLastModified;
+	//musicStoreEnabled value
+	RBuf iMusicStoreStatus;
+	//not in use
+	RBuf iAdvertisementUrl;
+	//not in use
+	RBuf iAdvertisementInUse;
+	//not in use
+	RBuf iImgUrl;
+	//Logo Data
+	RBuf8 iLogoData;
+	//channel description
+	RBuf iDescription;
+	//channel short desription
+	RBuf iShortDesc;
+	//channel genre name
+	RBuf iGenereName;
+	//channel genre id
+	RBuf iGenereId;
+	//channel bitrate
+	TInt iBitrate;
+
+	};
+
+#endif	//IRISDSPRESET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/irlastplayedsongs.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRLASTPLAYEDSONGS_H
+#define IRLASTPLAYEDSONGS_H
+
+#include <e32base.h>
+
+class RReadStream;
+class RWriteStream;
+
+class CIRLastPlayedSongs:public CBase
+	{
+	public:
+	
+	
+	/**
+	*Function : NewL
+	*Function returns an instance of CIRLastPlayedSongs
+	*Two phase constructor
+	*@return instance of CIRLastPlayedSongs
+	*/
+	IMPORT_C static CIRLastPlayedSongs* NewL();
+	
+	
+	/**
+	*CIRLastPlayedSongs::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@return *CIRLastPlayedSongs
+	*/
+	IMPORT_C static CIRLastPlayedSongs* NewLC();
+	
+
+	/**
+	*CIRLastPlayedSongs::~CIRLastPlayedSongs()
+	*standard C++ destructor
+	*/
+	~CIRLastPlayedSongs();
+	
+	
+	/**
+	*CIRLastPlayedSongs::SetSongName()
+	*Function to set song name from a TDesC
+	*@param TDesC
+	*/
+	IMPORT_C void SetSongName(const TDesC&aSongName);
+	
+	
+	/**
+	*CIRLastPlayedSongs::GetSongName()
+	*Function to get song name from a TDesC
+	*@return TDesc instance
+	*/
+	IMPORT_C TDesC& GetSongName();
+
+	
+	/**
+	*CIRLastPlayedSongs::SetArtistName()
+	*Function to set artist name from a TDesC
+	*@param TDesc
+	*/
+	IMPORT_C void SetArtistName(const TDesC& aArtistName);
+	
+	
+	/**
+	*CIRLastPlayedSongs::GetArtistName()
+	*Function to get artist name from a TDesC
+	*@return TDesc instance
+	*/
+	IMPORT_C TDesC& GetArtistName();
+	
+	
+	/**
+	*CIRLastPlayedSongs::ExternalizeL()
+	*externalizes the data
+	*@param RWriteStream
+	*/
+	IMPORT_C void ExternalizeL(RWriteStream & aWriteStream);
+	
+	
+	/**
+	*CIRLastPlayedSongs::InternalizeL()
+	*internalizes the data
+	*@param RWriteStream
+	*/
+	IMPORT_C void InternalizeL(RReadStream & aReadStream);		
+	
+	
+	/**
+	*CIRLastPlayedSongs::=()
+	*standard C++ copy constructor(deep copy) 
+	*@param CIRLastPlayedSongs
+	*@return CIRLastPlayedSongs reference
+	*/
+	IMPORT_C CIRLastPlayedSongs& operator=(const CIRLastPlayedSongs& aSng);
+	
+	protected:
+	/**
+	*CIRLastPlayedSongs::ConstructL()
+	*standard second phase constructor
+	*/
+	void ConstructL();
+	
+private:
+	HBufC *iSongName;
+	HBufC *iArtistName;	
+	};
+	
+#endif //IRLASTPLAYEDSONGS_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuresinc/irotaupdate.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IROTAUPDATE_H
+#define IROTAUPDATE_H
+
+#include <e32base.h>
+
+class RReadStream;
+class RWriteStream;
+
+/**
+ * This class provides the basic structure to hold the OTA information.
+ *information that come from the isds server is parsed and put into this structure
+ *It also provides the basic setter functions to 
+ *manage the OTA information.
+ * @code
+ *CIROTAUpdate* ota = CIROTAUpdate::NewL()
+ *ota->SetXXX();
+ *delete ota;
+ * @endcode
+ *   
+ */
+
+class CIROTAUpdate : public CBase
+	{
+	public :
+	
+	/**
+	*Function : NewL
+	*Function returns an instance of CIROTAUpdate
+	*Two phase constructor
+	*@return instance of CIROTAUpdate
+	*/
+	IMPORT_C	static CIROTAUpdate* NewLC();
+	
+	
+	/**
+	*CIROTAUpdate::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@return *CIROTAUpdate
+	*/
+	IMPORT_C 	static CIROTAUpdate* NewL();
+    
+	
+	/**
+	*CIROTAUpdate::ConstructL()
+	*standard second phase constructor
+	*/
+	IMPORT_C	void ConstructL();
+	
+	
+	/**
+	*CIROTAUpdate::~CIROTAUpdate()
+	*standard C++ destructor
+	*/
+	~CIROTAUpdate();
+	
+	public:
+	
+	
+	/**
+	*CIROTAUpdate::SetUpdateMethod()
+	*Function to set update method
+	*@param TDesC
+	*/
+	IMPORT_C  void     SetUpdateMethod(const TDesC& aUpdateMethod);
+	
+	
+	/**
+	*CIROTAUpdate::SetVersion()
+	*Function to set version
+	*@param TDesC
+	*/
+	IMPORT_C  void	 SetVersion(const TDesC& aVersion);
+	
+	
+	/**
+	*CIROTAUpdate::SetUpdateInterval()
+	*Function to set update interval
+	*@param TDesC
+	*/
+	IMPORT_C  void	 SetUpdateInterval(const TDesC& aUpdateInterval);
+	
+	
+	/**
+	*CIROTAUpdate::SetOTAUrl()
+	*Function to set OTA Url
+	*@param TDesC
+	*/
+	IMPORT_C  void 	 SetOTAUrl(const TDesC& aOTAUrl);
+	
+	
+	/**
+	*CIROTAUpdate::ExternalizeL()
+	*externalizes the data
+	*@param RWriteStream
+	*/
+	IMPORT_C  void     ExternalizeL(RWriteStream& aStream) const;
+	
+	
+	/**
+	*CIROTAUpdate::InternalizeL()
+	*internalizes the data
+	*@param RWriteStream
+	*/
+	IMPORT_C  void     InternalizeL(RReadStream& aStream);
+	
+	public :
+	//native or browser	
+	HBufC*   iUpdateMethod;
+	//version no
+	HBufC*   iVersion; 
+	//url where the newer version can be found
+	HBufC*	 iOTAUrl;
+	//silence period
+	TInt     iUpdateInterval;
+   };
+   
+   #endif// IROTAUPDATE_H
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/iradvertisement.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "iradvertisement.h"
+#include "irdebug.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// Function returns an instance of CIRAdvertisement
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRAdvertisement* CIRAdvertisement::NewLC()
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::NewLC - Entering" );
+	CIRAdvertisement* self = new (ELeave) CIRAdvertisement;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRAdvertisement::NewLC - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::NewL()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRAdvertisement* CIRAdvertisement::NewL()
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::NewL - Entering" );
+	CIRAdvertisement* self = CIRAdvertisement::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRAdvertisement::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::ConstructL()
+//standard second phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAdvertisement::ConstructL() const
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::ConstructL" );
+	return;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::~CIRAdvertisement()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisement::~CIRAdvertisement()
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::~CIRAdvertisement - Entering" );
+	delete  iUrl;
+	iUrl=NULL;
+	delete iAdvInUse;
+	iAdvInUse = NULL;
+	IRLOG_DEBUG( "CIRAdvertisement::~CIRAdvertisement - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::SetAdvInUse()
+//Function to set the advertisement in use
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAdvertisement::SetAdvInUse(const TDesC& aAdvInUse)
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::SetAdvInUse - Entering" );
+	iAdvInUse=aAdvInUse.Alloc();
+	IRLOG_DEBUG( "CIRAdvertisement::SetAdvInUse - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::SetUsage()
+//Function to set the number of times the global adv to be shown
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAdvertisement::SetUsage(const TDesC& aUsageVisibleTimes)
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::SetUsage - Entering" );
+	TLex var(aUsageVisibleTimes);
+	var.Val(iUsageVisibleTimes);
+	IRLOG_DEBUG( "CIRAdvertisement::SetUsage - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::SetVisibleTime()
+//Function to set the duration of the advertisement to be displayed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAdvertisement::SetVisibleTime(const TDesC& aVisibleTime)
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::SetVisibleTime - Entering" );
+	 TLex var(aVisibleTime);
+	var.Val(iVisibleTime);
+	IRLOG_DEBUG( "CIRAdvertisement::SetVisibleTime - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRAdvertisement::SetURL()
+//Function to set the url of the global advertisement
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAdvertisement::SetURL(const TDesC& aUrl)
+	{
+	IRLOG_DEBUG( "CIRAdvertisement::SetURL - Entering" );
+	 iUrl = aUrl.Alloc();
+	IRLOG_DEBUG( "CIRAdvertisement::SetURL - Exiting." );
+	return;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/irbrowsecatagoryitems.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irdebug.h"
+#include "irbrowsecatagoryitems.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::NewL()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRBrowseCatagoryItems* CIRBrowseCatagoryItems::NewL()
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::NewL - Entering" );
+	CIRBrowseCatagoryItems* self = CIRBrowseCatagoryItems::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::NewLC()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRBrowseCatagoryItems* CIRBrowseCatagoryItems::NewLC()
+    {
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::NewLC - Entering" );
+	CIRBrowseCatagoryItems* self = new (ELeave) CIRBrowseCatagoryItems;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::NewLC - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::ConstructL()
+//standard second phase constructor
+// ---------------------------------------------------------------------------
+//
+ void CIRBrowseCatagoryItems::ConstructL() const
+	{
+    IRLOG_DEBUG( "CIRBrowseCatagoryItems::ConstructL" );
+	return;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::~CIRBrowseCatagoryItems()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+ CIRBrowseCatagoryItems::~CIRBrowseCatagoryItems()
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::~CIRBrowseCatagoryItems - Entering" );
+	delete iCatName;
+	iCatName=NULL;
+	delete iCatId;
+	iCatId=NULL;
+	delete iCatGetOperation;
+	iCatGetOperation=NULL;
+	
+	delete iCatBannerUrl;
+	iCatBannerUrl=NULL;
+	
+	delete iCatClickThroughUrl;
+	iCatClickThroughUrl=NULL;
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::~CIRBrowseCatagoryItems - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::SetTextL()
+//sets the cache status informa
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseCatagoryItems::SetTextL(const TDesC& aCatName,
+											   const TDesC& aCatId)
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetTextL - Entering" );
+	iCatName = aCatName.Alloc();
+	iCatId=aCatId.Alloc();	
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetTextL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::SetSize()
+//sets the size of the object iSize,after converting it from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  void CIRBrowseCatagoryItems::SetSize(const TDesC &aCatSize)
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetSize - Entering" );
+	TLex var(aCatSize);
+	var.Val(iSize);
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetSize - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::SetGetOperation()
+//sets params for retriving data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseCatagoryItems::SetGetOperation(const TDesC& aCatGetOperation)
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetGetOperation - Entering" );
+	iCatGetOperation = aCatGetOperation.Alloc();
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetGetOperation - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::ExternalizeL()
+//externalizes the data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseCatagoryItems::ExternalizeL(RWriteStream& aStream) const
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::ExternalizeL - Entering" );
+	if( !iCatGetOperation )
+		{
+		aStream.WriteInt32L(0);
+		}
+	else
+		{
+		aStream.WriteInt32L(iCatGetOperation->Des().MaxLength());
+		aStream << *iCatGetOperation;
+		}
+	if(!iCatName)
+		{
+		aStream.WriteInt32L(0);
+		}
+	else
+		{
+	aStream.WriteInt32L(iCatName->Des().MaxLength());
+	aStream << *iCatName;
+		}
+	if(!iCatId)
+		{
+		aStream.WriteInt32L(0);			
+		}
+	else
+		{
+	aStream.WriteInt32L(iCatId->Des().MaxLength());
+	aStream << *iCatId;
+		}
+	if(iSize>0)
+		{
+		aStream.WriteInt32L(iSize);
+		}
+	else
+		{
+		aStream.WriteInt32L(0);			
+		}
+	
+	
+	if(!iCatBannerUrl)
+		{
+		aStream.WriteInt32L(0);			
+		}
+	else
+		{
+		aStream.WriteInt32L(iCatBannerUrl->Des().MaxLength());
+		aStream << *iCatBannerUrl;
+		}
+	
+	if(!iCatClickThroughUrl)
+		{
+		aStream.WriteInt32L(0);	
+		}
+	else
+		{
+		aStream.WriteInt32L(iCatClickThroughUrl->Des().MaxLength());
+		aStream << *iCatClickThroughUrl;
+		}
+	
+		
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::ExternalizeL - Exiting." );	
+	}  
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseCatagoryItems::InternalizeL()
+//internalizes the data.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseCatagoryItems::InternalizeL(RReadStream& aStream)
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::InternalizeL - Entering" );
+	TInt maxlen;
+	maxlen=aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iCatGetOperation=HBufC::NewL(aStream,maxlen);
+		}
+	maxlen     = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iCatName = HBufC::NewL(aStream,maxlen);			
+		}
+	maxlen     = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iCatId = HBufC::NewL(aStream,maxlen);	
+		}
+	iSize  = aStream.ReadInt32L();
+	
+	maxlen = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iCatBannerUrl = HBufC::NewL(aStream, maxlen);
+		}
+	
+	maxlen = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iCatClickThroughUrl = HBufC::NewL(aStream, maxlen);	
+		}
+	
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::InternalizeL - Exiting." );
+	}  
+	
+
+
+EXPORT_C void CIRBrowseCatagoryItems::SetBannerUrl(const TDesC& aBannerUrl)
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetBannerUrl() - Entering" );
+	iCatBannerUrl = aBannerUrl.Alloc();
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetBannerUrl - Exiting" );
+	}
+	
+	
+EXPORT_C void CIRBrowseCatagoryItems::SetClickThroughUrl(const TDesC& aClickThroughUrl)
+	{
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetClickThroughUrl() - Entering" );
+	iCatClickThroughUrl = aClickThroughUrl.Alloc();
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::SetClickThroughUrl() - Exiting" );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/irbrowsechannelitems.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,357 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irbrowsechannelitems.h"
+#include "irdebug.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::NewLC()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CIRBrowseChannelItems* CIRBrowseChannelItems::NewLC()
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::NewLC - Entering" );
+	CIRBrowseChannelItems* self = new (ELeave) CIRBrowseChannelItems;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRBrowseChannelItems::NewLC - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::NewL()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRBrowseChannelItems* CIRBrowseChannelItems::NewL()
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::NewL - Entering" );
+	CIRBrowseChannelItems* self = CIRBrowseChannelItems::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRBrowseChannelItems::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::ConstructL()
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+ void CIRBrowseChannelItems::ConstructL() const
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::ConstructL" );
+	return;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::~CIRBrowseChannelItems()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//	
+ CIRBrowseChannelItems::~CIRBrowseChannelItems()
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::~CIRBrowseChannelItems - Entering" );
+	delete iChannelName;
+	iChannelName=NULL;
+	delete iChannelGetOperation;
+	iChannelGetOperation=NULL;
+	delete iShortDescription;
+	iShortDescription=NULL;
+	iImgUrl.Close();
+	
+	delete iBannerUrl;
+	iBannerUrl=NULL;
+	delete iClickThroughUrl;
+	iClickThroughUrl=NULL;
+
+	IRLOG_DEBUG( "CIRBrowseChannelItems::~CIRBrowseChannelItems - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetTextL()
+//Set data namely channelname,channelid,description
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetTextL(const TDesC& aChannelName,
+	const TDesC& aChannelId,const TDesC& aDescription)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetTextL - Entering" );
+	iChannelName = aChannelName.Alloc();
+	iShortDescription=aDescription.Alloc();	
+	TLex var(aChannelId);
+	var.Val(iChannelID);
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetTextL - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetGetOperationL()
+//Set data get methord
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CIRBrowseChannelItems::SetGetOperationL(
+	const TDesC& aChannelGetOperation)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetGetOperationL - Entering" );
+	iChannelGetOperation = aChannelGetOperation.Alloc();
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetGetOperationL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetSize()
+//Set data size of data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetSize(const TDesC& aSize)
+	{
+    IRLOG_DEBUG( "CIRBrowseChannelItems::SetSize - Entering" );
+	TLex var(aSize);
+	var.Val(iSize);
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetSize - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetImageUrl()
+//Set the url for the iImgUrl
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CIRBrowseChannelItems::SetImageUrl(const TDesC& aImgUrl)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetImageUrl - Entering" );
+	iImgUrl.Create(aImgUrl.Length());
+	iImgUrl.Copy(aImgUrl);
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetImageUrl - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::ExternalizeL()
+//Externalizes data into persistent storage
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::ExternalizeL(RWriteStream& aStream) const
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::ExternalizeL - Entering" );
+	if (iChannelName )
+		{
+		aStream.WriteInt32L(iChannelName->Des().MaxLength());
+		aStream << *iChannelName;
+		}
+	else 
+		{
+		aStream.WriteInt32L(0);
+		}
+	if((iShortDescription) && (iShortDescription->Des().MaxLength() != 0))
+		{	
+		TInt a = iShortDescription->Des().MaxLength();
+		aStream.WriteInt32L(iShortDescription->Des().MaxLength());
+		aStream << *iShortDescription;
+		}
+	else
+		{
+		aStream.WriteInt32L(0);
+		}
+	if(iChannelGetOperation)
+		{
+		aStream.WriteInt32L(iChannelGetOperation->Des().MaxLength());
+		aStream << *iChannelGetOperation;
+		}
+	else
+		{
+		aStream.WriteInt32L(0);
+		}
+	aStream.WriteInt32L(iBitrate1);
+	aStream.WriteInt32L(iBitrate2);
+	aStream.WriteInt32L(iBitrate3);
+	aStream.WriteUint32L(iChannelID);
+	if(iBannerUrl)
+		{
+		aStream.WriteInt32L(iBannerUrl->Des().MaxLength());
+		aStream <<*iBannerUrl;
+		}
+	else
+		{
+		aStream.WriteInt32L(0);
+		}
+	
+	if(iClickThroughUrl)	
+		{
+		aStream.WriteInt32L(iClickThroughUrl->Des().MaxLength());
+		aStream <<*iClickThroughUrl;
+		}
+	else
+		{
+		aStream.WriteInt32L(0);
+		}
+		
+	if(iImgUrl.Length() != 0)
+		{
+		aStream.WriteInt32L(iImgUrl.MaxLength());
+		aStream <<iImgUrl;
+		}
+	else
+		{
+		aStream.WriteInt32L(0);	
+		}
+
+	IRLOG_DEBUG( "CIRBrowseChannelItems::ExternalizeL - Exiting." );
+	}  
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::InternalizeL()
+//internalizes data from persistent storage
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::InternalizeL(RReadStream& aStream)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::InternalizeL - Entering" );
+	TInt maxlen;
+	maxlen     = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iChannelName = HBufC::NewL(aStream,maxlen);
+		}
+	maxlen     = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iShortDescription = HBufC::NewL(aStream,maxlen);
+		}
+	maxlen     = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iChannelGetOperation = HBufC::NewL(aStream,maxlen);
+		}
+	iBitrate1  = aStream.ReadInt32L();
+	iBitrate2  = aStream.ReadInt32L();
+	iBitrate3  = aStream.ReadInt32L();
+	iChannelID = aStream.ReadUint32L();
+	
+	
+	
+	maxlen = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iBannerUrl = HBufC::NewL(aStream, maxlen);
+		}
+	maxlen = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iClickThroughUrl = HBufC::NewL(aStream, maxlen);
+		}
+	maxlen = aStream.ReadInt32L();
+	if(maxlen!=0)
+		{
+		iImgUrl.Close();
+		iImgUrl.CreateL(aStream, maxlen);			
+		}
+	
+
+	IRLOG_DEBUG( "CIRBrowseChannelItems::InternalizeL - Exiting." );
+	}  
+	
+
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetBitrate()
+//Set data for 3bitrates
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetBitrate(const TDesC &aBitrate1,
+	const TDesC &aBitrate2,const TDesC &aBitrate3)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBitrate3 - Entering" );
+	TLex var1(aBitrate1);
+	var1.Val(iBitrate1);
+	TLex var2(aBitrate2);
+	var2.Val(iBitrate2);
+	TLex var3(aBitrate3);
+	var3.Val(iBitrate3);	
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBitrate3 - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetBitrate()
+//Set data for 2 bitrates
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetBitrate(const TDesC &aBitrate1,
+	const TDesC &aBitrate2)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBitrate2 - Entering" );
+	TLex var1(aBitrate1);
+	var1.Val(iBitrate1);
+	TLex var2(aBitrate2);
+	var2.Val(iBitrate2);
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBitrate2 - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetBitrate()
+//Set data for 1 bitrate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetBitrate(const TDesC &aBitrate1)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBitrate1 - Entering" );
+	TLex var1(aBitrate1);
+	var1.Val(iBitrate1);	
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBitrate1 - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetBannerUrl()
+//Set data namely BannerUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetBannerUrl(const TDesC& aBannerUrl)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBannerUrl - Entering" );
+	iBannerUrl = aBannerUrl.Alloc();
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetBannerUrl - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRBrowseChannelItems::SetBannerUrl()
+//Set data namely BannerUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRBrowseChannelItems::SetClickThroughUrl(const TDesC& aClickThroughUrl)
+	{
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetClickThroughUrl - Entering" );
+	iClickThroughUrl = aClickThroughUrl.Alloc();
+	IRLOG_DEBUG( "CIRBrowseChannelItems::SetClickThroughUrl - Exiting." );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/irchannelserverurl.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irchannelserverurl.h"
+#include "irdebug.h"
+	
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::NewL()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRChannelServerUrl* CIRChannelServerUrl::NewL()
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::NewL - Entering" );
+	CIRChannelServerUrl* self=CIRChannelServerUrl::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRChannelServerUrl::NewL - Exiting." );
+	return self;
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::NewLC()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRChannelServerUrl* CIRChannelServerUrl::NewLC()
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::NewLC - Entering" );
+	CIRChannelServerUrl* self=new(ELeave)CIRChannelServerUrl;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRChannelServerUrl::NewLC - Exiting." );
+	return self;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::SetServerName()
+//sets server name 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRChannelServerUrl::SetServerName(const TDesC& aServerName)
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::SetServerName - Entering" );
+	iServerName=aServerName.Alloc();
+	IRLOG_DEBUG( "CIRChannelServerUrl::SetServerName - Exiting." );
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::SetServerUrl()
+//sets server url 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRChannelServerUrl::SetServerUrl(const TDesC& aServerUrl)
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::SetServerUrl - Entering" );
+	iURL=aServerUrl.Alloc();
+	IRLOG_DEBUG( "CIRChannelServerUrl::SetServerUrl - Exiting." );
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::SetBitRate()
+//sets server bitrate 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRChannelServerUrl::SetBitRate(TInt aBitrate)
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::SetBitRate - Entering" );
+	iBitrate=aBitrate;
+	//if a negative value comes,set the bitrate to 0,so that it is accessable 
+	//to all the setting combination
+	if ( iBitrate < 0)
+		{
+		iBitrate = 0;
+		}
+	IRLOG_DEBUG( "CIRChannelServerUrl::SetBitRate - Exiting." );
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::GetServerName()
+//gets server name 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRChannelServerUrl::GetServerName() const
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::GetServerName" );
+	return *iServerName;
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::GetServerUrl()
+//gets server url 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRChannelServerUrl::GetServerUrl() const
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::GetServerUrl" );
+	return *iURL;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::GetBitRate()
+//gets server bitrate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRChannelServerUrl::GetBitRate() const
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::GetBitRate" );
+	return iBitrate;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::~CIRChannelServerUrl()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+CIRChannelServerUrl::~CIRChannelServerUrl()
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::~CIRChannelServerUrl - Entering" );
+	delete iServerName;
+	iServerName=NULL;
+	delete iURL;
+	iURL=NULL;
+	IRLOG_DEBUG( "CIRChannelServerUrl::~CIRChannelServerUrl - Exiting." );
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::=()
+//standard C++ copy constructor(deep copy) 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CIRChannelServerUrl& CIRChannelServerUrl::operator=(
+	const CIRChannelServerUrl& churl)
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::operator= - Entering" );
+	if(&churl == this)
+		{
+		return *this;
+		}
+	
+	if(iServerName)
+		{
+		delete iServerName;
+		iServerName=NULL;
+		}
+	if(churl.iServerName)
+		{
+		iServerName=churl.iServerName->Alloc();
+		}
+	if(iURL)
+		{
+		delete iURL;
+		iURL=NULL;
+		}
+	if(churl.iBitrate)
+		{
+		iURL=churl.iURL->Alloc();
+		}
+	iBitrate=churl.iBitrate;
+	IRLOG_DEBUG( "CIRChannelServerUrl::operator= - Exiting." );
+	return *this;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::ExternalizeL()
+//function to externalize url data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRChannelServerUrl::ExternalizeL(RWriteStream& aWriteStream)
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::ExternalizeL - Entering" );
+	TInt len;
+	if( !iServerName )
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iServerName->Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream << *iServerName;
+		}
+		
+	if(!iURL )
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iURL->Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream << *iURL;
+		}
+		
+	aWriteStream.WriteInt32L(iBitrate);
+    IRLOG_DEBUG( "CIRChannelServerUrl::ExternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::InternalizeL()
+//function to internalize url data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRChannelServerUrl::InternalizeL(RReadStream& aReadStream)
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::InternalizeL - Entering" );
+	TInt len;
+	len= aReadStream.ReadInt32L();
+	if(len!=0)
+		{
+		iServerName=HBufC::NewL(aReadStream,len);	
+		}
+
+	len=aReadStream.ReadInt32L();
+	if(len!=0)
+		{
+		iURL=HBufC::NewL(aReadStream,len);	
+		}
+	iBitrate=aReadStream.ReadInt32L();
+	IRLOG_DEBUG( "CIRChannelServerUrl::InternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRChannelServerUrl::ConstructL()
+//standard second phase construction
+// ---------------------------------------------------------------------------
+//	
+ void CIRChannelServerUrl::ConstructL() const
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrl::ConstructL" );
+	return;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/irisdspreset.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1209 @@
+/*
+* Copyright (c) 2006-2008 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:  iSDS preset structure.
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irchannelserverurl.h"
+#include "irdebug.h"
+#include "irisdspreset.h"
+
+const TInt KUrlArrayMaxLength = 128;
+const TInt KUrlForBitrateMaxLength = 128;
+
+_LIT(KComma,",");
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::NewL()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRIsdsPreset* CIRIsdsPreset::NewL()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::NewL - Entering" );
+	CIRIsdsPreset* self = CIRIsdsPreset::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRIsdsPreset::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::NewLC()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRIsdsPreset* CIRIsdsPreset::NewLC()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::NewLC - Entering" );
+	CIRIsdsPreset* self = new (ELeave) CIRIsdsPreset;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRIsdsPreset::NewLC - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::~CIRIsdsPreset()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+CIRIsdsPreset::~CIRIsdsPreset()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::~CIRIsdsPreset - Entering" );
+	iName.Close();
+	iLanguageCode.Close();
+	iLanguage.Close();
+	iCountryCode.Close();
+	iCountry.Close();
+	iLastModified.Close();
+	iMusicStoreStatus.Close();
+	iAdvertisementUrl.Close();
+	iAdvertisementInUse.Close();
+	iImgUrl.Close();
+	iLogoData.Close();
+	iDescription.Close();
+	iShortDesc.Close();
+	iGenereName.Close();
+	iGenereId.Close();
+
+	if (iUrlArray)
+		{
+		iUrlArray->ResetAndDestroy();
+		}
+	delete iUrlArray;
+	IRLOG_DEBUG( "CIRIsdsPreset::~CIRIsdsPreset - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::CIRIsdsPreset()
+//default C++ constructor
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRIsdsPreset::CIRIsdsPreset()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::CIRIsdsPreset" );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::ConstructL()
+//standard second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsPreset::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::ConstructL - Entering" );
+	iUrlArray = new (ELeave) CArrayPtrFlat<CIRChannelServerUrl>(
+		KUrlArrayMaxLength);
+	IRLOG_DEBUG( "CIRIsdsPreset::ConstructL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetId()
+//Function to set iPresetId from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetId(const TDesC &aId)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetId - Entering" );
+	TLex conv(aId);
+	conv.Val(iPresetId);
+	IRLOG_DEBUG( "CIRIsdsPreset::SetId - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetId()
+//Function to set iPresetId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetId(TInt aId)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetId(TInt) - Entering" );
+	iPresetId=aId;
+	IRLOG_DEBUG( "CIRIsdsPreset::SetId(TInt) - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetName()
+//Function to set iName from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetName(const TDesC &aName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetName - Entering" );
+	iName.Close();
+	iName.Create( aName );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetName - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetLangInfo()
+//Function to set iLanguageCode, iLanguage
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetLangInfo(const TDesC &aLangId,
+	const TDesC& aLangName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLangInfo - Entering" );
+    SetLangCode( aLangId );
+    SetLang( aLangName );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLangInfo - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetLangCode()
+//Function to set iLanguageCode from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetLangCode(const TDesC &aLangId)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLangCode - Entering" );
+	iLanguageCode.Close();
+	iLanguageCode.Create( aLangId );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLangCode - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetLang()
+//Function to set iLanguage from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetLang(const TDesC& aLangName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLang - Entering" );
+	iLanguage.Close();
+	iLanguage.Create( aLangName );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLang - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetCountryCode()
+//Function to set iCountryCode from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetCountryCode(const TDesC &aCountryId)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetCountryCode - Entering" );
+	iCountryCode.Close();
+	iCountryCode.Create( aCountryId );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetCountryCode - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetCountryName()
+//Function to set iCountry from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetCountryName(const TDesC& aCountryName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetCountryName - Entering" );
+	iCountry.Close();
+	iCountry.Create( aCountryName );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetCountryName - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetLangInfo()
+//Function to set iCountryCode, iCountry
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetCountryInfo(const TDesC &aCountryId,
+	const TDesC& aCountryName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetCountryInfo - Entering" );
+	SetCountryCode( aCountryId );
+    SetCountryName( aCountryName );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetCountryInfo - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetLastModifiedTime()
+//Function to set iLastModified
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetLastModifiedTime(const TDesC &aLastModified)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLastModifiedTime - Entering" );
+	iLastModified.Close();
+	iLastModified.Create( aLastModified );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLastModifiedTime - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetGenreInfo()
+//Function to set iGenereName, iGenereId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetGenreInfo(const TDesC& aGenreId,
+	const TDesC& aGenreName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetGenreInfo - Entering" );
+
+	if(iGenereName.Length())
+		{
+		RBuf newBuf;
+		newBuf.Create(
+		    iGenereName.Length() + aGenreName.Length() + KComma().Length() );
+		newBuf.Append( iGenereName );
+		newBuf.Append( KComma );
+		newBuf.Append( aGenreName );
+		iGenereName.Close();
+		iGenereName.Create( newBuf );
+		newBuf.Close();
+		}
+	if(iGenereId.Length())
+		{
+		RBuf newBuf;
+        newBuf.Create(
+            iGenereId.Length() + aGenreId.Length() + KComma().Length() );
+        newBuf.Append( iGenereId );
+        newBuf.Append( KComma );
+        newBuf.Append( aGenreId );
+        iGenereId.Close();
+        iGenereId.Create( newBuf );
+        newBuf.Close();
+		}
+	if(!iGenereName.Length())
+		{
+		iGenereName.Close();
+		iGenereName.Create( aGenreName );
+		}
+	if(!iGenereId.Length())
+		{
+		iGenereId.Close();
+		iGenereId.Create( aGenreId );
+		}
+
+	IRLOG_DEBUG( "CIRIsdsPreset::SetGenreInfo - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetImgUrl()
+//Function to set iImgUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetImgUrl(const TDesC& aImgUrl)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetImgUrl - Entering" );
+	iImgUrl.Close();
+	iImgUrl.Create( aImgUrl );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetImgUrl - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetLogoData()
+//Function to set LogoData
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRIsdsPreset::SetLogoData( const TDesC8& aData )
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLogoDataL - Entering" );
+
+	iLogoData.Close();
+	iLogoData.Create( aData );
+
+	IRLOG_DEBUG( "CIRIsdsPreset::SetLogoDataL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetAdvertisementInUse()
+//Function to set iAdvertisementInUse
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetAdvertisementInUse(
+	const TDesC& aAdvertisementInUse)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetAdvertisementInUse - Entering" );
+	iAdvertisementInUse.Close();
+	iAdvertisementInUse.Create( aAdvertisementInUse );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetAdvertisementInUse - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetDescription()
+//Function to set iDescription
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset:: SetDescription(const TDesC& aDescription)
+	{
+    IRLOG_DEBUG( "CIRIsdsPreset::SetDescription - Entering" );
+    iDescription.Close();
+    iDescription.Create( aDescription );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetDescription - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetAdvertisementUrl()
+//Function to set iAdvertisementUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetAdvertisementUrl(
+	const TDesC& aAdvertisementUrl)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetAdvertisementUrl - Entering" );
+	iAdvertisementUrl.Close();
+	iAdvertisementUrl.Create( aAdvertisementUrl );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetAdvertisementUrl - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetUrlCount()
+//Function to set iChannelUrlCount
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetUrlCount()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlCount - Entering" );
+	iChannelUrlCount=iUrlArray->Count();
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlCount - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetShortDesc()
+//Function to set iShortDesc
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset:: SetShortDesc(const TDesC& aShortDesc)
+	{
+    IRLOG_DEBUG( "CIRIsdsPreset::SetShortDesc - Entering" );
+    iShortDesc.Close();
+    iShortDesc.Create( aShortDesc );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetShortDesc - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIsdsPreset::SetGenreName()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetGenreName(const TDesC& aGenreName)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetGenreName - Entering" );
+	iGenereName.Close();
+	iGenereName.Create( aGenreName );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetGenreName - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIsdsPreset::SetGenreId()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetGenreId(const TDesC& aGenreId)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetGenreId - Entering" );
+	iGenereId.Close();
+	iGenereId.Create( aGenreId );
+	IRLOG_DEBUG( "CIRIsdsPreset::SetGenreId - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetUrlCount()
+//Function to set iChannelUrlCount
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetUrlCount(TInt aCnt)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlCount - Entering" );
+	iChannelUrlCount=aCnt;
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlCount - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetIndex()
+//Function to set iIndex
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetIndex(TInt aInt)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetIndex - Entering" );
+	iIndex=aInt;
+	IRLOG_DEBUG( "CIRIsdsPreset::SetIndex - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetUrl()
+//Function to set Url parameter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetUrlL(const TDesC &aServerName,
+	const TDesC &aUrl,const TDesC &aBitrate)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlL(..., const TDesC) - Entering" );
+	CIRChannelServerUrl * hold=CIRChannelServerUrl::NewL();
+	hold->SetServerName(aServerName);
+	hold->SetServerUrl(aUrl);
+	TLex conv(aBitrate);
+	TInt conVal = 0;
+	conv.Val(conVal);
+	//if a negative value comes,set the bitrate to 0,so that it is accessable
+	//to all the setting combination
+	if ( conVal < 0)
+		{
+		conVal = 0;
+		}
+	hold->SetBitRate(conVal);
+	iUrlArray->AppendL(hold);
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlL(..., const TDesC) - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetUrl()
+//Function to set Url parameter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetUrlL(const TDesC &aServerName,
+	const TDesC &aUrl,TInt aBitrate)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlL(..., TInt) - Entering" );
+	CIRChannelServerUrl * hold=CIRChannelServerUrl::NewL();
+	hold->SetServerName(aServerName);
+	hold->SetServerUrl(aUrl);
+
+	//if a negative value comes,set the bitrate to 0,so that it is accessable
+	//to all the setting combination
+	if (aBitrate < 0)
+		{
+		aBitrate = 0;
+		}
+	hold->SetBitRate(aBitrate);
+	iUrlArray->AppendL(hold);
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlL(..., TInt) - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetChannelType()
+//Function to set iType
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetChannelType(TInt aType)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetChannelType - Entering" );
+
+	if ( aType != EUserDefined && aType!=EIsdsPreset && aType!=EAdhoc)
+		{
+		aType=EUserDefined;
+		}
+	iType = aType;
+	IRLOG_DEBUG( "CIRIsdsPreset::SetChannelType - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetUrl()
+//Function to set Url parameter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetUrlL(const TDesC &aUrl)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlL - Entering" );
+	CIRChannelServerUrl * hold=CIRChannelServerUrl::NewL();
+	hold->SetServerUrl(aUrl);
+	iUrlArray->AppendL(hold);
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUrlL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::SetMusicStoreStatus()
+//Function to set iMusicStoreStatus parameter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::SetMusicStoreStatus(const TDesC& aMusicStoreStatus)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetMusicStoreStatus - Entering" );
+	iMusicStoreStatus.Close();
+	iMusicStoreStatus.Create( aMusicStoreStatus );	
+	IRLOG_DEBUG( "CIRIsdsPreset::SetMusicStoreStatus - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::ExternalizeL()
+//externalizes the data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  void CIRIsdsPreset::ExternalizeL(RWriteStream& aWriteStream)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::ExternalizeL - Entering" );
+//! externalize TInts s
+	aWriteStream.WriteUint32L(iUniqId);
+	aWriteStream.WriteInt32L(iPresetId);
+	aWriteStream.WriteInt32L(iIndex);
+	aWriteStream.WriteInt32L(iType);
+	aWriteStream.WriteInt32L(iChannelUrlCount);
+
+	// Externalize RBufs
+    aWriteStream << iLanguageCode;
+    aWriteStream << iLanguage;
+    aWriteStream << iCountryCode;
+    aWriteStream << iCountry;
+    aWriteStream << iGenereName;
+    aWriteStream << iGenereId;
+    aWriteStream << iName;
+    aWriteStream << iLastModified;
+    aWriteStream << iAdvertisementUrl;
+    aWriteStream << iAdvertisementInUse;
+    aWriteStream << iImgUrl;
+    aWriteStream << iDescription;
+    aWriteStream << iShortDesc;
+	aWriteStream << iMusicStoreStatus;
+	aWriteStream << iLogoData;
+
+
+	for(TInt cnt=0;cnt<iChannelUrlCount;cnt++)
+		{
+		GetUrl(cnt).ExternalizeL(aWriteStream);
+		}
+	IRLOG_DEBUG( "CIRIsdsPreset::ExternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::InternalizeL()
+//internalizes the data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsPreset::InternalizeL(RReadStream& aReadStream)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::InternalizeL - Entering" );
+	//! Internalize TInts s
+	iUniqId = aReadStream.ReadUint32L();
+	iPresetId=aReadStream.ReadInt32L();
+	iIndex=aReadStream.ReadInt32L();
+	iType=aReadStream.ReadInt32L();
+	iChannelUrlCount=aReadStream.ReadInt32L();
+
+	// Internalize RBufs
+	iLanguageCode.Close();
+	iLanguageCode.CreateL(aReadStream, KMaxTInt);
+
+	iLanguage.Close();
+	iLanguage.CreateL(aReadStream, KMaxTInt);
+
+	iCountryCode.Close();
+	iCountryCode.CreateL(aReadStream, KMaxTInt);
+
+	iCountry.Close();
+	iCountry.CreateL(aReadStream, KMaxTInt);
+
+	iGenereName.Close();
+	iGenereName.CreateL(aReadStream, KMaxTInt);
+
+	iGenereId.Close();
+	iGenereId.CreateL(aReadStream, KMaxTInt);
+
+	iName.Close();
+	iName.CreateL(aReadStream, KMaxTInt);
+
+	iLastModified.Close();
+	iLastModified.CreateL(aReadStream, KMaxTInt);
+
+	iAdvertisementUrl.Close();
+	iAdvertisementUrl.CreateL(aReadStream, KMaxTInt);
+
+	iAdvertisementInUse.Close();
+	iAdvertisementInUse.CreateL(aReadStream, KMaxTInt);
+
+	iImgUrl.Close();
+	iImgUrl.CreateL(aReadStream, KMaxTInt);
+
+	iDescription.Close();
+	iDescription.CreateL(aReadStream, KMaxTInt);
+
+	iShortDesc.Close();
+	iShortDesc.CreateL(aReadStream, KMaxTInt);
+
+	iMusicStoreStatus.Close();
+	iMusicStoreStatus.CreateL(aReadStream, KMaxTInt);
+
+
+    iUrlArray->ResetAndDestroy();
+
+	iLogoData.Close();
+	iLogoData.CreateL(aReadStream, KMaxTInt);
+	
+	
+	
+	CIRChannelServerUrl* url = NULL;
+	for(TInt cnt=0;cnt<iChannelUrlCount;cnt++)
+		{
+		url=CIRChannelServerUrl::NewLC();
+		url->InternalizeL(aReadStream);
+		iUrlArray->AppendL(url);
+		CleanupStack::Pop( url );
+		}
+	IRLOG_DEBUG( "CIRIsdsPreset::InternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetId()
+//Function to get iPresetId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRIsdsPreset::GetId() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetId" );
+	return iPresetId;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetId()
+//Function to get iName
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  const TDesC& CIRIsdsPreset::GetName() const 
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetName" );
+	return iName;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetLangId()
+//Function to get iLanguageCode
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetLangId() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetLangId" );
+	return iLanguageCode;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetLangName()
+//Function to get iLanguage
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetLangName() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetLangName" );
+	return iLanguage;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetCountryId()
+//Function to get iCountryCode
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetCountryId() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetCountryId" );
+	return iCountryCode;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetCountryName()
+//Function to get iCountry
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetCountryName() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetCountryName" );
+	return iCountry;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetLastModifiedTime()
+//Function to get iLastModified
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetLastModifiedTime() const 
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetLastModifiedTime" );
+	return iLastModified;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetDescription()
+//Function to get iDescription
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetDescription() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetDescription" );
+	return iDescription;
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetShortDescription()
+//Function to get iDescription
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  const TDesC& CIRIsdsPreset::GetShortDescription() const 
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetShortDescription" );
+	return iShortDesc;
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetChannelType()
+//Function to get iType
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRIsdsPreset::GetChannelType() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetChannelType" );
+	return iType;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetIndex()
+//Function to get iIndex
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRIsdsPreset::GetIndex() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetIndex" );
+	return iIndex;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetGenreId()
+//Function to get iGenereId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetGenreId() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetGenreId" );
+	return iGenereId;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetGenreName()
+//Function to get iGenereName
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetGenreName() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetGenreName" );
+	return iGenereName;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetAdvertisementUrl()
+//Function to get iAdvertisementUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetAdvertisementUrl() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetAdvertisementUrl" );
+	return iAdvertisementUrl;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIsdsPreset::GetAdvertisementInUse()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetAdvertisementInUse() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetAdvertisementInUse" );
+	return iAdvertisementInUse;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIsdsPreset::GetImgUrl()
+// Function to get iImgUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetImgUrl() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetImgUrl" );
+	return iImgUrl;
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetUrlCount()
+//Function to get iChannelUrlCount
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRIsdsPreset::GetUrlCount() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetUrlCount" );
+	return iChannelUrlCount;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetUrl()
+//Function to get iLanguageCode
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRChannelServerUrl& CIRIsdsPreset::GetUrl(TInt aInt)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetUrl" );
+	ASSERT( aInt >= 0 && aInt < iUrlArray->Count() ); 
+	return ((*iUrlArray->At(aInt)));
+	}
+
+
+EXPORT_C  const TDesC& CIRIsdsPreset::GetMusicStoreStatus() const 
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetMusicStoreStatus" );
+	return iMusicStoreStatus;	
+	}
+
+
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetLogoData()
+//Function to get LogoData
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  const TDesC8& CIRIsdsPreset::GetLogoData() const 
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetLogoData" );
+	return iLogoData;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::=()
+//standard C++ copy constructor(deep copy)
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRIsdsPreset& CIRIsdsPreset::operator=(const CIRIsdsPreset& aPreset)
+	{
+    IRLOG_DEBUG( "CIRIsdsPreset::operator=  - Entering" );
+
+    if(&aPreset == this)
+		{
+		return *this;
+		}
+
+    iName.Close();
+	iName.Create(aPreset.iName);
+
+	iLanguageCode.Close();
+	iLanguageCode.Create(aPreset.iLanguageCode);
+
+	iLanguage.Close();
+	iLanguage.Create(aPreset.iLanguage);
+
+	iCountryCode.Close();
+	iCountryCode.Create(aPreset.iCountryCode);
+
+	iCountry.Close();
+	iCountry.Create(aPreset.iCountry);
+
+	iLastModified.Close();
+	iLastModified.Create(aPreset.iLastModified);
+
+	iAdvertisementUrl.Close();
+	iAdvertisementUrl.Create(aPreset.iAdvertisementUrl);
+
+	iAdvertisementInUse.Close();
+	iAdvertisementInUse.Create(aPreset.iAdvertisementInUse);
+
+	iImgUrl.Close();
+	iImgUrl.Create(aPreset.iImgUrl);
+
+	iLogoData.Close();
+	iLogoData.Create(aPreset.iLogoData);
+
+	iDescription.Close();
+	iDescription.Create(aPreset.iDescription);
+
+	iShortDesc.Close();
+	iShortDesc.Create(aPreset.iShortDesc);
+	
+	iMusicStoreStatus.Close();
+	iMusicStoreStatus.Create(aPreset.iMusicStoreStatus);
+
+	iGenereName.Close();
+	iGenereName.Create(aPreset.iGenereName);
+
+	iGenereId.Close();
+	iGenereId.Create(aPreset.iGenereId);
+
+
+	iUrlArray->ResetAndDestroy();
+		
+	for(TInt cnt=0;cnt<aPreset.iChannelUrlCount;cnt++)
+		{
+		ASSERT( cnt >= 0 && cnt < aPreset.iUrlArray->Count() );
+		TRAPD(errUrl,SetUrlL(aPreset.iUrlArray->At(cnt)->GetServerName(),
+		aPreset.iUrlArray->At(cnt)->GetServerUrl(),
+		aPreset.iUrlArray->At(cnt)->GetBitRate()))
+		if(errUrl!=KErrNone)
+			{
+			return *this ;
+			}
+		}
+	iChannelUrlCount=aPreset.iChannelUrlCount;
+	iType=aPreset.iType;  //0 for user defined 1 for isds type.
+	iIndex=aPreset.iIndex;
+	iPresetId = aPreset.iPresetId;
+	iUniqId=aPreset.iUniqId;
+	IRLOG_DEBUG( "CIRIsdsPreset::operator= - Exiting." );
+ 	return *this;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetAvailableBitrates()
+//Function to get available bitrates
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRIsdsPreset::GetAvailableBitrates(RArray<TInt>& aBitrates) const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetAvailableBitrates - Entering." );
+	aBitrates.Reset();
+	TInt err = KErrNone;
+	for(TInt loop=0;loop<iUrlArray->Count() && !err;loop++)
+		{
+		err = aBitrates.InsertInOrder(iUrlArray->At(loop)->GetBitRate());
+		if (err == KErrAlreadyExists)
+		    {
+		    // Do not allow duplicates, but strip them away.
+		    err = KErrNone;
+		    }
+		}
+
+    if (err)
+        {
+        aBitrates.Reset();
+        }
+	IRLOG_DEBUG( "CIRIsdsPreset::GetAvailableBitrates - Exiting." );
+	return err;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetUrlForBitrateL()
+//Function to get Url for a given bitrate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDesCArrayFlat* CIRIsdsPreset::GetUrlForBitrateL(TInt aBitrate)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetUrlForBitrateL - Entering." );
+	CDesCArrayFlat* urlForBitrate = new (ELeave) CDesCArrayFlat(KUrlForBitrateMaxLength);
+	CleanupStack::PushL(urlForBitrate);
+	iBitrate=aBitrate;
+	SortInOrderL();
+	//appending the urls with bit rate less than or
+	//equal to given bit rate limit
+	for(TInt loop=0;loop<iUrlArray->Count();loop++)
+		{
+		if(aBitrate>=iUrlArray->At(loop)->GetBitRate())
+			{
+			urlForBitrate->AppendL(iUrlArray->At(loop)->GetServerUrl());
+			}
+		}
+	//appending	the url	with bit rate greater than given
+	//bit rate limit
+	for(TInt loop = (iUrlArray->Count()-1);loop >= 0;loop--)
+		{
+		if(aBitrate<iUrlArray->At(loop)->GetBitRate())
+			{
+			urlForBitrate->AppendL(iUrlArray->At(loop)->GetServerUrl());
+			}
+		}
+	if ( urlForBitrate->MdcaCount()==0 && iUrlArray->Count() > 0 )
+		{
+		urlForBitrate->AppendL(iUrlArray->At(0)->GetServerUrl());
+		}
+
+
+    CleanupStack::Pop(urlForBitrate);
+	IRLOG_DEBUG( "CIRIsdsPreset::GetUrlForBitrateL - Exiting." );
+	return urlForBitrate;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetExactUrlForBitrateL()
+//Function to get Urls exactly matching a given bitrate for display purpose
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDesCArrayFlat* CIRIsdsPreset::GetExactUrlForBitrateL(TInt aBitrate)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetUrlForBitrateL - Entering." );
+	CDesCArrayFlat* urlForBitrate = new (ELeave) CDesCArrayFlat(KUrlForBitrateMaxLength);
+	CleanupStack::PushL(urlForBitrate);
+
+	SortInOrderL();
+	//appending the urls with bit rate less than or
+	//equal to given bit rate limit
+	for(TInt loop=0;loop<iUrlArray->Count();loop++)
+		{
+		if(aBitrate==iUrlArray->At(loop)->GetBitRate())
+			{
+			urlForBitrate->AppendL(iUrlArray->At(loop)->GetServerUrl());
+			}
+		}
+
+    CleanupStack::Pop(urlForBitrate);
+	IRLOG_DEBUG( "CIRIsdsPreset::GetUrlForBitrateL - Exiting." );
+	return urlForBitrate;
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetChannelUrlAtL()
+//Function to get channel Url for a given index
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRIsdsPreset::GetChannelUrlAtL(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetChannelUrlAtL - Entering." );
+	__ASSERT_ALWAYS( aIndex < iUrlArray->Count(), User::Leave( KErrArgument ) );
+	IRLOG_DEBUG( "CIRIsdsPreset::GetChannelUrlAtL - Exiting." );
+	return iUrlArray->At(aIndex)->GetServerUrl();
+	}
+
+// ---------------------------------------------------------------------------
+//CIRIsdsPreset::GetChannelBitrateL()
+//Function to get channel Url for a given index
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  TInt CIRIsdsPreset::GetChannelBitrateL(TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::GetChannelUrlAtL - Entering." );
+	__ASSERT_ALWAYS( aIndex < iUrlArray->Count(), User::Leave( KErrArgument ) );
+	CDesCArrayFlat* urlForBitrate = new (ELeave) CDesCArrayFlat(KUrlForBitrateMaxLength);
+	CleanupStack::PushL(urlForBitrate);
+	SortInOrderL();
+	//appending the urls with bit rate less than or
+	//equal to given bit rate limit
+	for(TInt loop=0;loop<iUrlArray->Count();loop++)
+		{
+		if(iBitrate>=iUrlArray->At(loop)->GetBitRate())
+			{
+			urlForBitrate->AppendL(iUrlArray->At(loop)->GetServerUrl());
+			}
+		}
+	//appending	the url	with bit rate greater than given
+	//bit rate limit
+	for(TInt loop = (iUrlArray->Count()-1);loop >= 0;loop--)
+		{
+		if(iBitrate<iUrlArray->At(loop)->GetBitRate())
+			{
+			urlForBitrate->AppendL(iUrlArray->At(loop)->GetServerUrl());
+			}
+		}
+	if ( urlForBitrate->MdcaCount()==0 && iUrlArray->Count() > 0 )
+		{
+		urlForBitrate->AppendL(iUrlArray->At(0)->GetServerUrl());
+		}
+    for(TInt i=0;i<iUrlArray->Count();i++)
+	    {
+	    if(iUrlArray->At(i)->GetServerUrl().Compare(urlForBitrate->MdcaPoint(aIndex))==0)
+		    {
+		 IRRDEBUG2("CIRIsdsPreset:: - GetChannelBitrateL", KNullDesC);
+		    CleanupStack::Pop(urlForBitrate);
+			return iUrlArray->At(i)->GetBitRate();
+		    }
+	    }
+    CleanupStack::Pop(urlForBitrate);
+	IRRDEBUG2("CIRIsdsPreset:: - GetChannelUrlAtL Exiting", KNullDesC);
+	IRLOG_DEBUG( "CIRIsdsPreset::GetChannelUrlAtL - Exiting." );
+	return 0;
+	}
+//----------------------------------------------------------------------------
+// CIRIsdsPreset::SortInOrderL()
+// simple bubble shot
+// to sort the  bitrates in desc order
+//----------------------------------------------------------------------------
+//
+void CIRIsdsPreset::SortInOrderL()
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SortInOrderL - Exiting." );
+	//temporary holder for pointer
+	CIRChannelServerUrl* holdTemp = NULL;
+	TInt urlcount = iUrlArray->Count();
+	//sorts the array pointers [of urls] in the descending order of bit rate
+	//bubble sort algorithm is used for this
+	for (TInt sortcount = (urlcount - 1); sortcount >= 0; sortcount--)
+	  	{
+	    for (TInt index = 1; index <= sortcount; index++)
+	    	{
+	      	if (iUrlArray->At(index-1)->GetBitRate() <
+	      			iUrlArray->At(index)->GetBitRate())
+		       {
+		       holdTemp = iUrlArray->At(index-1);
+		       iUrlArray->At(index-1) = iUrlArray->At(index);
+		       iUrlArray->At(index) = holdTemp;
+		       }
+	    	}
+	  	}
+	IRLOG_DEBUG( "CIRIsdsPreset::SortInOrderL - Exiting." );
+	return;
+	}
+//----------------------------------------------------------------------------
+// TInt UniqId()
+//
+//----------------------------------------------------------------------------
+EXPORT_C TUint32 CIRIsdsPreset::UniqId() const
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::UniqId" );
+	return iUniqId;
+	}
+//----------------------------------------------------------------------------
+//  SetUniqId(TInt)
+//
+//----------------------------------------------------------------------------
+EXPORT_C void CIRIsdsPreset::SetUniqId( TUint32 aId)
+	{
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUniqId - Entering" );
+	iUniqId = aId;
+	IRLOG_DEBUG( "CIRIsdsPreset::SetUniqId - Exiting" );
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/irlastplayedsongs.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irdebug.h"
+#include "irlastplayedsongs.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIRLastPlayedSongs
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRLastPlayedSongs* CIRLastPlayedSongs::NewL()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::NewL - Entering" );
+	CIRLastPlayedSongs *self=CIRLastPlayedSongs::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRLastPlayedSongs::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::NewLC()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRLastPlayedSongs* CIRLastPlayedSongs::NewLC()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::NewLC - Entering" );
+	CIRLastPlayedSongs *self=new(ELeave)CIRLastPlayedSongs;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRLastPlayedSongs::NewLC - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::~CIRLastPlayedSongs()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+CIRLastPlayedSongs::~CIRLastPlayedSongs()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::~CIRLastPlayedSongs - Entering" );
+	delete iSongName;
+	iSongName=NULL;
+	delete iArtistName;
+	iArtistName=NULL;
+	IRLOG_DEBUG( "CIRLastPlayedSongs::~CIRLastPlayedSongs - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::SetSongName()
+//Function to set song name from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRLastPlayedSongs:: SetSongName(const TDesC&aSongName)
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::SetSongName - Entering" );
+	iSongName=aSongName.Alloc();
+	IRLOG_DEBUG( "CIRLastPlayedSongs::SetSongName - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::GetSongName()
+//Function to get song name from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TDesC& CIRLastPlayedSongs::GetSongName()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::GetSongName" );
+	return *iSongName;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::SetArtistName()
+//Function to set artist name from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void  CIRLastPlayedSongs::SetArtistName(const TDesC& aArtistName)
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::SetArtistName - Entering" );
+	iArtistName=aArtistName.Alloc();
+	IRLOG_DEBUG( "CIRLastPlayedSongs::SetArtistName - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::GetArtistName()
+//Function to get artist name from a TDesC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TDesC& CIRLastPlayedSongs:: GetArtistName()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::GetArtistName" );
+	return *iArtistName;
+	}
+	
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::ExternalizeL()
+//externalizes the data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRLastPlayedSongs:: ExternalizeL(RWriteStream & aWriteStream)
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::ExternalizeL - Entering" );
+	TInt32 len;
+    	len=iSongName->Length();
+	TRAP_IGNORE(aWriteStream.WriteInt32L(len))
+	aWriteStream<< *iSongName;
+	len=iArtistName->Length();
+	TRAP_IGNORE(aWriteStream.WriteInt32L(len))
+	aWriteStream<< *iArtistName;	
+	IRLOG_DEBUG( "CIRLastPlayedSongs::ExternalizeL - Exiting." );	
+	}
+	
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::InternalizeL()
+//internalizes the data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void  CIRLastPlayedSongs::InternalizeL(RReadStream & aReadStream)
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::InternalizeL - Entering" );
+	TInt8 len;
+	len=aReadStream.ReadInt8L();
+	iSongName=HBufC::NewL(aReadStream,len);
+	len=aReadStream.ReadInt8L();
+	iArtistName=HBufC::NewL(aReadStream,len);
+	IRLOG_DEBUG( "CIRLastPlayedSongs::InternalizeL - Exiting." );
+	}
+		
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::=()
+//standard C++ copy constructor(deep copy) 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CIRLastPlayedSongs& CIRLastPlayedSongs::operator=(const 
+	CIRLastPlayedSongs& aSng)
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::operator= - Entering" );
+	 if(&aSng == this)
+		{
+		return *this;
+		}
+	iArtistName=aSng.iArtistName;
+	iSongName=aSng.iSongName;
+	IRLOG_DEBUG( "CIRLastPlayedSongs::operator= - Exiting." );
+	return *this;
+	}
+
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::ConstructL()
+//standard second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRLastPlayedSongs::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongs::ConstructL" );
+	return;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/datastructuressrc/irotaupdate.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irdebug.h"
+#include "irotaupdate.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+//----------------------------------------------------------------------------
+// Function : NewLC
+// Function returns an instance of CIROTAUpdate
+// Two phase constructor
+//----------------------------------------------------------------------------
+//
+EXPORT_C CIROTAUpdate* CIROTAUpdate::NewLC()
+	{
+	IRLOG_DEBUG( "CIROTAUpdate::NewLC - Entering" );
+	CIROTAUpdate* self = new (ELeave) CIROTAUpdate;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIROTAUpdate::NewLC - Exiting." );
+	return self;
+	}
+
+
+//----------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIROTAUpdate
+// Two phase constructor
+//----------------------------------------------------------------------------
+//
+EXPORT_C CIROTAUpdate* CIROTAUpdate::NewL()
+	{
+	IRLOG_DEBUG( "CIROTAUpdate::NewL - Entering" );
+	CIROTAUpdate* self = CIROTAUpdate::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIROTAUpdate::NewL - Exiting." );
+	return self;
+	}
+
+
+//----------------------------------------------------------------------------
+//CIROTAUpdate::ConstructL()
+//standard second phase constructor
+//----------------------------------------------------------------------------
+//
+EXPORT_C void CIROTAUpdate::ConstructL()
+	{
+    IRLOG_DEBUG( "CIROTAUpdate::ConstructL" );
+	return;
+	}
+
+
+//----------------------------------------------------------------------------
+//CIROTAUpdate::~CIROTAUpdate()
+//standard C++ destructor
+//----------------------------------------------------------------------------
+//	
+CIROTAUpdate::~CIROTAUpdate()
+	{
+    IRLOG_DEBUG( "CIROTAUpdate::~CIROTAUpdate - Entering" ); 
+    delete iUpdateMethod;
+    delete iVersion;
+    delete iOTAUrl;
+    IRLOG_DEBUG( "CIROTAUpdate::~CIROTAUpdate - Exiting." );
+	}
+
+
+//----------------------------------------------------------------------------
+//CIROTAUpdate::SetUpdateMethod()
+//Function to set update method
+//----------------------------------------------------------------------------
+//
+EXPORT_C void CIROTAUpdate::SetUpdateMethod(const TDesC& aUpdateMethod)
+	{
+	IRLOG_DEBUG( "CIROTAUpdate::SetUpdateMethod - Entering" );
+	iUpdateMethod=aUpdateMethod.Alloc();
+	IRLOG_DEBUG( "CIROTAUpdate::SetUpdateMethod - Exiting." );
+	}
+	
+
+//----------------------------------------------------------------------------
+//CIROTAUpdate::SetVersion()
+//Function to set version
+//----------------------------------------------------------------------------
+//	
+EXPORT_C  void CIROTAUpdate::SetVersion(const TDesC& aVersion)
+	{          
+	IRLOG_DEBUG( "CIROTAUpdate::SetVersion - Entering" );
+	iVersion=aVersion.Alloc();
+	IRLOG_DEBUG( "CIROTAUpdate::SetVersion - Exiting." );
+	}
+
+
+//----------------------------------------------------------------------------
+//CIROTAUpdate::SetUpdateInterval()
+//Function to set update interval
+//----------------------------------------------------------------------------
+//
+EXPORT_C void CIROTAUpdate::SetUpdateInterval(const TDesC& aUpdateInterval)
+	{
+	IRLOG_DEBUG( "CIROTAUpdate::SetUpdateInterval - Entering" );
+	 TLex var(aUpdateInterval);
+	var.Val(iUpdateInterval);
+	IRLOG_DEBUG( "CIROTAUpdate::SetUpdateInterval - Exiting." );
+	}
+	
+
+//----------------------------------------------------------------------------
+//CIROTAUpdate::SetOTAUrl()
+//Function to set OTA Url
+//----------------------------------------------------------------------------
+//
+EXPORT_C void CIROTAUpdate::SetOTAUrl(const TDesC& aOTAUrl)
+  {
+    IRLOG_DEBUG( "CIROTAUpdate::SetOTAUrl - Entering" );
+	iOTAUrl=aOTAUrl.Alloc();
+	IRLOG_DEBUG( "CIROTAUpdate::SetOTAUrl - Exiting." );
+  }
+// ---------------------------------------------------------------------------
+//CIROTAUpdate::ExternalizeL()
+//externalizes the data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIROTAUpdate::ExternalizeL(RWriteStream& aStream) const
+	{
+	IRLOG_DEBUG( "CIROTAUpdate::ExternalizeL - Entering" );
+	aStream.WriteInt32L(iUpdateInterval);
+	TInt length;
+	if(iVersion)
+		{
+		length = iVersion->Length();
+		aStream.WriteInt32L(length);
+		aStream << *iVersion;
+		}
+	else
+		{
+		length = 0;
+		aStream.WriteInt32L(length);
+		}
+
+	if(iOTAUrl)
+		{
+		length = iOTAUrl->Length();
+		aStream.WriteInt32L(length);
+		aStream << *iOTAUrl;
+		}
+	else
+		{
+		length = 0;
+		aStream.WriteInt32L(length);
+		}
+		
+	if(iUpdateMethod)
+		{
+		length = iUpdateMethod->Length();
+		aStream.WriteInt32L(length);
+		aStream << *iUpdateMethod;
+		}
+	else
+		{
+		length = 0;
+		aStream.WriteInt32L(length);
+		}
+    IRLOG_DEBUG( "CIROTAUpdate::ExternalizeL - Exiting." );
+	}  
+
+
+// ---------------------------------------------------------------------------
+//CIROTAUpdate::InternalizeL()
+//internalizes the data.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIROTAUpdate::InternalizeL(RReadStream& aStream)
+	{
+	IRLOG_DEBUG( "CIROTAUpdate::InternalizeL - Entering" );
+	TInt length;
+	iUpdateInterval=aStream.ReadInt32L();
+	length = aStream.ReadInt32L();
+	
+	if(length)
+		{
+		iVersion = HBufC::NewL(aStream,length);
+		}
+		
+	length = aStream.ReadInt32L();
+	if(length)
+		{
+		iOTAUrl = HBufC::NewL(aStream,length);
+		}
+		
+ 	length = aStream.ReadInt32L();
+	if(length)
+		{
+		iUpdateMethod = HBufC::NewL(aStream,length);
+		}
+	IRLOG_DEBUG( "CIRBrowseCatagoryItems::InternalizeL - Exiting." );
+	}  
+	
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/favoritesdbinc/irfavoritesdb.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef  IRFAVORITESDB_H
+#define  IRFAVORITESDB_H
+
+#include <pspresetobserver.h>
+#include <psserv.h>
+
+class CIRIsdsPreset;
+class CIRPreset;
+class CIRSettings;
+class CPSPresetNotifier;
+
+
+//typedefed to array of pointer array
+typedef RPointerArray<CIRPreset> RIRPresetArray;
+
+//this class is an handle to the presetclient
+//provides apis to access the presetserver functionalities
+
+NONSHARABLE_CLASS( CIRFavoritesDb ):public CBase ,public MPSPresetObserver
+	{
+
+public:
+
+    /**CIRFavoritesDb::NewL()
+    *standard symbian 1st phase constructor
+    *@return CIRFavoritesDb* ,db instance
+    */
+    IMPORT_C static CIRFavoritesDb* NewL();
+
+
+    /**CIRFavoritesDb::~CIRFavoritesDb()
+    *standard c++ destructor
+    */
+    ~CIRFavoritesDb();
+
+
+    /**CIRFavoritesDb::AddPresetL()
+    *exported function to add a preset
+    *@param CIRIsdsPreset& the isds preset,TInt index(not in use for 3.2)
+    *@return KerrNone on success,KErrNoMemory if the no of presets is 20
+    */
+   IMPORT_C void AddPresetL(CIRIsdsPreset& aPreset,TInt& aIndex, TBool aIsLogoAvialable=EFalse);
+
+
+    /**CIRFavoritesDb::AddPresetL()
+    *exported,overloaded function to add a preset manually
+    *@param TDesC name,TDesC url of the preset,TInt,TIntindex and id not in use for 3.2
+    *@return KerrNone on success,KErrNoMemory if the no of presets is 20
+    */
+	IMPORT_C void AddPresetL(const TDesC& aName,const TDesC& aURl,
+		TInt& aReturn, TBool aIsLogoAvialable=EFalse);
+
+
+    /**CIRFavoritesDb::DeletePresetL()
+    *exported, function to delete a preset
+    *@param TInt is the id of the preset to be deleted
+    *@return KerrNone on success,
+    */
+   IMPORT_C void DeletePresetL( TInt aUniqId );
+
+
+    /**CIRFavoritesDb::GetAllPresetL()
+    *exported,function to get the list of saved presets in the array iFavPresetList
+    */
+   IMPORT_C void GetAllPreset();
+
+    /*
+     * get all presets sorted by played times
+     */
+    IMPORT_C const RIRPresetArray& GetAllSortedPresets();
+    
+    /**CIRFavoritesDb::SearchPreset()
+    *exported, function to find out if a preset exists in the favorites list
+    *@param TInt the id of the preset to search.
+    *@return the index number of the preset being searched(if found) else KErrNotFound
+    */
+   IMPORT_C  TInt SearchPreset( const TInt aUniqPresetId,
+							  const TInt aIsdsPresetId);
+
+
+    /**CIRFavoritesDb::GetPreviousPreset()
+    *exported, function to find out if a preset exists in the favorites list
+    *@param TInt the id of the preset .
+    *@return the index number of the previous preset
+    */
+   IMPORT_C TInt GetPreviousPreset(TInt aIndex);
+
+
+    /**CIRFavoritesDb::GetNextPreset()
+    *exported, function to find out if a preset exists in the favorites list
+    *@param TInt the id of the preset .
+    *@return the index number of the next preset
+    */
+   IMPORT_C TInt GetNextPreset(TInt aIndex);
+
+
+
+	/**CIRFavoritesDb::SwapPresetsInDbL()
+	*returns the previous preset for a given presetId
+	*@param TInt,TInt,TInt,TIntswaps the presets between two
+	*channelIds for given channel Indices
+	*@return TInt system wode error code
+	**/
+   IMPORT_C void SwapPresetsInDbL(TInt aChannelIdFrom,TInt aChannelIdTo,
+   			TInt aChannelIndexFro,TInt aChannelIndexTo);
+
+
+	/**CIRFavoritesDb::ReplacePresetL()
+	*replaces a preset with a new preset
+	*@param CIRIsdsPreset instance
+	*for presetSync
+	*@return TInt system wode error code
+	**/
+   IMPORT_C void ReplacePresetL(CIRIsdsPreset& aNewPreset);
+
+
+   /**CIRFavoritesDb::ReplaceUserDefinedPresetL()
+	*replaces a userdefined preset with a new userdefined preset
+	*@param CIRIsdsPreset instance
+	*for presetSync
+	*@return TInt system wide error code
+	**/
+   IMPORT_C void ReplaceUserDefinedPresetL(CIRIsdsPreset& aNewPreset);
+
+
+	/**CIRFavoritesDb::MakePresetUserDefinedL()
+	*for a favorite preset that has been removed from the isds.
+	*it is made a user defined preset by changing the type to 0.
+	*index value is preseved so that the relative positions in the saved
+	*stations view remains the same.
+	*@param TInt,TInt
+	*@return TInt
+	**/
+   IMPORT_C void MakePresetUserDefinedL(TInt aChannelId,TInt aUserDefinedChannelId);
+
+	/**
+	*const RVRPresetArray& CVRPresetHandler::Presets() const
+	* @return RIRPresetArray& an array containing all Internet Radio presets.
+	*/
+	IMPORT_C const RIRPresetArray& Presets() const;
+	/**
+	*TInt CIRFavoritesDb::EmptyPresetCount() const
+	*Returns the number of empty presets
+	*@return TInt the number of empty presets
+	*/
+	IMPORT_C TInt EmptyPresetCount() const;
+
+   /**
+	*TInt CIRFavoritesDb::AddObserver( MPSPresetObserver& aObserver )
+	*Adds an observer that is notified upon changes in presets.
+	*@param MPSPresetObserver&
+	*/
+
+	IMPORT_C TInt AddObserver( const MPSPresetObserver& aObserver );
+
+   /**
+	*TInt CIRPresetHandler::RemoveObserver( MPSPresetObserver& aObserver )
+	*Removes an observer for a preset.
+	*/
+	IMPORT_C void RemoveObserver(const MPSPresetObserver& aObserver );
+
+	/**CIRFavoritesDb::MaxPresetCount()
+	*returns the maximum number of presets that can be stored in the favorites list
+	*@return TInt maximum number of presets that can be stored in the favorites list
+	**/
+	IMPORT_C TInt MaxPresetCount();
+	
+	/** CIRFavoritesDb::SetMoveStatus(TBool aStatus)
+	* @aStatus, sets the status of the Move functionality progression
+	**/
+	IMPORT_C void SetMoveStatus(TBool aStatus);
+	
+	/** CIRFavoritesDb::GetMoveStatus()
+	* returns the status of the Move functionality
+	**/
+	IMPORT_C TBool GetMoveStatus();
+
+    /*
+     * Increase the played times of a channel if it has been in the favorites
+     * return : KErrNone if success
+     *          KErrNotFound if the preset is not in the favorites
+     */
+	IMPORT_C TInt IncreasePlayedTimesL(const CIRIsdsPreset &aIsdsPreset);
+	
+	private:
+
+    /**CIRFavoritesDb::HandlePresetChangedL()
+    *function to notify a change in saved presets
+    *@param TInt,TUid,TPSReason the id of the preset,the id of the
+    *preset handler i.e CIRPreset,the reason of change.
+    */
+    void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+
+      
+	/**CIRFavoritesDb::MovePresetL()
+	*moves a preset to destination index
+	*@param TInt,TInt,the preset id ,the destination index
+	**/
+	void MovePresetL( const TInt aId,const TInt aDestinationIndex );
+
+
+	/**CIRFavoritesDb::ConstructL()
+	*Standard 2nd phase construction
+	**/
+    void ConstructL();
+
+
+    /**CIRFavoritesDb::SortByIndex()
+	*sorts the preset list by index
+	**/
+    void SortByIndex();
+
+	/**
+	*TInt CIRFavoritesDb::MatchingPresetId( TInt aId )
+	*returns the index of the preset whose id is aId
+	*@return TInt the index of the preset whose id is aId
+	*/
+	TInt MatchingPresetId( TInt aId );
+
+
+	/**
+	*TInt CIRFavoritesDb::CreatePresetL( TInt aIndex )
+	*creates a preset by the index aIndex
+	*@param TInt aIndex,index of the new preset
+	*@return CIRPreset*
+	*/
+	CIRPreset* CreatePresetL( TInt aIndex );
+
+	/*
+	 * Search a user defined preset by name and url
+	 */
+	TInt SearchUserDefinedPreset(const TDesC &aName, const TDesC &aUrl);
+	
+public:
+
+	/**
+	 *CIRFavoritesDb::PresetByIndex(TInt aIndex)
+	 * Returns a preset by its id.
+	 * @param   aId     Id of the preset.
+	 * @return  The preset matching the id or <code>NULL</code> if no such preset exists.
+	 */
+	CIRPreset* PresetByIndex( TInt aIndex );
+
+
+	 /**
+	 * CIRFavoritesDb::PresetById(TInt aIndex)
+	 * Returns a preset by its id.
+	 * @param   aId     Id of the preset.
+	 * @return  The preset matching the id or <code>NULL</code> if no such preset exists.
+	 */
+	IMPORT_C CIRPreset* PresetById( TInt aId );
+
+
+	/**the preset list accessible to ui*/
+    /** Internet Radio presets currently stored in the preset server. */
+    RIRPresetArray iFavPresetList;
+private:
+
+    /** Session with the preset server. */
+    RPSServ iServ;
+//private:
+    
+    /** Notifier that informs about changes in presets. */
+    CPSPresetNotifier* iNotifier;
+    /** Observers to notify when presets change. */
+    RPointerArray<MPSPresetObserver> iObservers;
+
+    /** The maximum number of supported presets. */
+    TInt iMaxPresetCount;
+    /**cenrep handle*/
+    CIRSettings *iSettings;
+    /**type of presets(source)*/
+    enum TChannelType
+    {
+    	EUserDefined,/**added by user*/
+    	EIsdsPreset,/**fetched from isds*/
+    };
+    
+    /** iMoveStatus, to know the status of the Move funcitionality */
+    TBool iMoveStatus;
+};
+
+#endif  //end IRFAVORITESDB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,869 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <pspresetnotifier.h>
+#include <pstransaction.h>
+
+#include "irdebug.h"
+#include "irfavoritesdb.h"
+#include "irisdspreset.h"
+#include "irpreset.h"
+#include "irsettings.h"
+
+const TInt KNullId = 0;
+const TInt KNineteen = 19;
+const TInt KFifty = 50;
+
+namespace PresetHandler
+{
+//-------------------------------------------------------------------------------
+//TInt OrderByIndex( const CIRPresetImpl& aPreset1, const CIRPresetImpl& aPreset2 )
+//-------------------------------------------------------------------------------
+//
+    //Sort algorithm
+    // Orders presets by their index.
+    //
+    TInt OrderByIndex( const CIRPreset& aPreset1, const CIRPreset& aPreset2 )
+        {
+        if ( aPreset1.Index() < aPreset2.Index() )
+            {
+            return -1;
+            }
+        else if ( aPreset1.Index() > aPreset2.Index() )
+            {
+            return 1;
+            }
+        else
+            {
+            return 0;
+            }
+        }
+    
+    TInt OrderByPlayedTimes(const CIRPreset& aPreset1, const CIRPreset& aPreset2)
+    {
+        int difference = aPreset1.GetPlayedTimes() - aPreset2.GetPlayedTimes();
+        if (difference > 0)
+        {
+            return -1;
+        }
+        else if (difference == 0)
+        {
+            return aPreset1.Name().Compare(aPreset2.Name());
+        }
+        else 
+        {
+            return 1;
+        }
+    }
+}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::NewL()
+//standard symbian 1st phase constructor
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C CIRFavoritesDb* CIRFavoritesDb::NewL()
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::NewL" );
+    CIRFavoritesDb* self = new ( ELeave ) CIRFavoritesDb;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRFavoritesDb::NewL - Exiting." );
+    return self;
+    }
+
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::~CIRFavoritesDb()
+//standard c++ destructor
+//---------------------------------------------------------------------------
+//
+
+CIRFavoritesDb::~CIRFavoritesDb()
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::~CIRFavoritesDb" );
+    delete iNotifier;
+    iObservers.Close();
+    //resets the preset array
+    iFavPresetList.ResetAndDestroy();
+    iFavPresetList.Close();
+    iServ.Close();
+
+    if (iSettings)
+        {
+    	iSettings->Close();
+        }
+
+	IRLOG_DEBUG( "CIRFavoritesDb::~CIRFavoritesDb - Exiting." );
+    }
+
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::AddPresetL()
+//exported function to add a preset
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::AddPresetL(CIRIsdsPreset& aPreset,
+			TInt& aRetVal, TBool /*aIsLogoAvialable*/)
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL" );
+    iMoveStatus=EFalse;
+    SortByIndex() ;//sorted by index
+    TBool presetSaved = EFalse;
+
+    // Check the existence of preset before checking if the list is full 
+    // to avoid KErrNoMemory for a preset that exists in the list.
+    TInt searchResult = 0;
+    if (aPreset.GetChannelType() == 0)
+    {
+        searchResult = SearchUserDefinedPreset(aPreset.GetName(), aPreset.GetChannelUrlAtL(0));
+        //we don't allow user to add presets with the same name
+        if (searchResult >= 0)
+        {
+            ReplaceUserDefinedPresetL(aPreset);
+            aRetVal = KErrAlreadyExists;
+            return;
+        }
+    }
+    else
+    {
+        searchResult = SearchPreset( aPreset.GetId(), KNullId );
+    }
+    
+    if( KErrNotFound !=  searchResult)
+    {
+        //Eventhough the preset exists in the favorites db, replace the
+        //same with the new preset i.e. aPreset.  Because the db should 
+        //contain the updated values of the preset.
+        ReplacePresetL(aPreset);
+        
+        aRetVal = KErrAlreadyExists;
+
+        return;
+    }
+
+    if ( EmptyPresetCount()<=0 )
+	{
+	 	//max limit reached no more processing
+		aRetVal = KErrNoMemory;
+		return;
+	}
+    
+    // Found the next empty place or replace
+    for ( TInt j=0; j < MaxPresetCount() && !presetSaved; j++ )
+        {
+        CIRPreset* preset = PresetByIndex( j );
+        TBool presetExisted = preset ? ETrue : EFalse;//presetExisted=1 if preset exists
+
+        if ( !preset )
+            {
+            preset = CreatePresetL( j );//create if preset==NULL
+            }
+
+        if ( !presetExisted )//crete if preset did not exists
+            {
+            //open a transaction with the preset server
+            CPSTransaction* transaction = preset->CreateTransactionLC();
+            //Convert to Plugnized Preset
+            //That is accepted by the preset server
+            preset->CIRIsdsPresetToCIRPresetImpl(aPreset);
+            //setname of CPSPresetInterface is called
+            preset->SetNameL( aPreset.GetName() );
+            //asign the preset id of the fav preset to uniqid value of the preset
+            aPreset.SetUniqId(preset->Id());
+            transaction->CommitL();
+            CleanupStack::PopAndDestroy( transaction );
+            //added to check multiple insertion
+            presetSaved = ETrue;
+            }
+        }
+
+    aRetVal = KErrNone;
+    IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::AddPresetL()
+//exported,overloaded function to add a preset manually
+//converts the minimum data(name ,url) into an preset
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::AddPresetL(const TDesC& aName,
+	const TDesC& aURl,TInt& aReturn, TBool /*aIsLogoAvialable*/)
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL(des des int int)" );
+	iMoveStatus=EFalse;
+    CIRIsdsPreset* saveItem;
+    saveItem = CIRIsdsPreset::NewL();
+    saveItem->SetName(aName);
+	saveItem->SetUrlCount(1);//only one url is saved for manually added channel
+	saveItem->SetChannelType(EUserDefined);
+	_LIT(KNotAvailable,"NA");
+	//bitrate set to zero so that it is accessible to all kinds of bitrate settings
+	saveItem->SetUrlL(KNotAvailable,aURl,0);
+	AddPresetL(*saveItem,aReturn);
+	delete saveItem;
+	IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL(des des int int) - Exiting." );
+	}
+
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::DeletePresetL()
+//exported, function to delete a preset
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::DeletePresetL( TInt aId )
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::DeletePresetL" );
+    iMoveStatus=EFalse;
+	iServ.DeletePresetL( aId);
+	IRLOG_DEBUG( "CIRFavoritesDb::DeletePresetL - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::GetAllPresetL()
+//exported,function to get the list of saved presets in the array iFavPresetList
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::GetAllPreset()
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::GetAllPresetL" );
+	//sort the array according to the index values
+	SortByIndex();
+	IRLOG_DEBUG( "CIRFavoritesDb::GetAllPresetL - Exiting." );
+	}
+
+/*
+ * get all presets sorted by played times
+ */
+EXPORT_C const RIRPresetArray& CIRFavoritesDb::GetAllSortedPresets()
+{
+    iFavPresetList.Sort( TLinearOrder<CIRPreset>(PresetHandler::OrderByPlayedTimes));
+    return iFavPresetList;
+}
+    
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::SwapPresetsInDbL()
+//returns the previous preset for a given presetId
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::SwapPresetsInDbL( TInt aChannelIdFrom,
+	TInt /*aChannelIdTo*/,TInt /*aChannelIndexFro*/,TInt aChannelIndexTo )
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::SwapPresetsInDbL" );
+	MovePresetL(  aChannelIdFrom,aChannelIndexTo);
+	IRLOG_DEBUG( "CIRFavoritesDb::SwapPresetsInDbL - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::MovePresetL()
+//moves a preset to destination index
+//---------------------------------------------------------------------------
+//
+
+ void CIRFavoritesDb::MovePresetL( const TInt aId, const TInt aDestinationIndex )
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::MovePresetL" );
+	ASSERT( aDestinationIndex >= 0 && aDestinationIndex < iFavPresetList.Count() );
+	if( aDestinationIndex < 0 || aDestinationIndex >= iFavPresetList.Count())
+	{
+	    User::Leave(KErrArgument);
+	}
+	
+	TInt fakeIndex=iFavPresetList[aDestinationIndex]->Index();
+	SetMoveStatus(ETrue);
+    iServ.MovePresetL( aId, fakeIndex );
+	IRLOG_DEBUG( "CIRFavoritesDb::MovePresetL - Exiting." );
+    }
+    
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::SetMoveStatus()
+//sets the status of Move functionality
+//---------------------------------------------------------------------------
+//
+EXPORT_C void CIRFavoritesDb::SetMoveStatus(TBool aStatus)
+	{
+	iMoveStatus = aStatus;
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::GetMoveStatus()
+//returns the status of the Move functionality
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRFavoritesDb::GetMoveStatus()
+	{
+	return iMoveStatus;
+	}
+    
+    
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::SearchPreset()
+//exported, function to find out if a preset exists in the favorites list
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CIRFavoritesDb::SearchPreset( const TInt aIsdsPresetId,
+							  const TInt aUniqPresetId)
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset" );
+	TInt count = iFavPresetList.Count();
+	TInt iter;
+	//for isds presets
+	if(aIsdsPresetId!=KNullId)
+		{
+		for(iter=0;iter<count;iter++)
+			{
+			if(iFavPresetList[iter]->GetId() == aIsdsPresetId)
+				{
+			    IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (1)." );
+				return iter;
+				}
+			}
+		}
+	if(aUniqPresetId != KNullId )
+	//for manually added presets
+		{
+		for(iter=0;iter<count;iter++)
+			{
+			if(aUniqPresetId==iFavPresetList[iter]->Id())
+				{
+			    IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (2)." );
+				return iter;
+				}
+			}
+		}
+	// both the parameters are null implies that the preset is a non saved station
+	IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (3)." );
+	return KErrNotFound;
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::GetPreviousPreset()
+//exported, function to find out if a preset exists in the favorites list
+//---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRFavoritesDb::GetNextPreset(TInt aIndex)
+	{
+	if ( (aIndex==(iFavPresetList.Count()-1))||aIndex==KNineteen )
+		{
+		return 0;
+		}
+	else
+		{
+		return aIndex+1;
+		}
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::GetNextPreset()
+//exported, function to find out if a preset exists in the favorites list
+//---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRFavoritesDb::GetPreviousPreset( TInt aIndex )
+	{
+	if ( aIndex==0 )
+		{
+		TInt val=(iFavPresetList.Count()-1);
+		return val;
+		}
+	else
+		{
+		return aIndex-1;
+		}
+	}
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::ReplacePresetL()
+//replaces a preset with a new preset
+//for presetSync
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::ReplacePresetL( CIRIsdsPreset& aNewPreset )
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::ReplacePresetL" );
+	iMoveStatus=EFalse;
+	CIRPreset* preset;
+	TInt index = SearchPreset(aNewPreset.GetId(),KNullId);
+	//actual index
+    if (index >= 0)
+        {
+        ASSERT( index >= 0 || index < iFavPresetList.Count() );
+    	index = iFavPresetList[index]->Index();
+    	preset = PresetByIndex(index);
+    	if(preset)
+    		{
+        	CPSTransaction* transaction = preset->CreateTransactionLC();
+        	//change the preset data and commit
+        	preset->CIRIsdsPresetToCIRPresetImpl(aNewPreset);
+        	preset->SetChannelType(EIsdsPreset);
+        		preset->SetNameL( aNewPreset.GetName() );
+        	transaction->CommitL();
+        	CleanupStack::PopAndDestroy( transaction );
+    		}
+        }
+	IRLOG_DEBUG( "CIRFavoritesDb::ReplacePresetL - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::ReplaceUserDefinedPresetL()
+//replaces a userdefined preset with a new userdefiend preset
+//for presetSync
+//---------------------------------------------------------------------------
+//
+EXPORT_C void CIRFavoritesDb::ReplaceUserDefinedPresetL(CIRIsdsPreset& aNewPreset)
+{
+	IRLOG_DEBUG( "CIRFavoritesDb::ReplaceUserDefinedPresetL" );
+	iMoveStatus=EFalse;
+	TInt index = SearchUserDefinedPreset(aNewPreset.GetName(), aNewPreset.GetChannelUrlAtL(0));
+	
+    if (index >= 0 && index < iFavPresetList.Count())
+    {
+        CIRPreset* preset = iFavPresetList[index];
+        if (preset)
+        {
+            CPSTransaction* transaction = preset->CreateTransactionLC();
+            /**
+             * change the preset data and commit
+             */
+            preset->CIRIsdsPresetToCIRPresetImpl(aNewPreset);
+            preset->SetChannelType(EUserDefined);
+            preset->SetNameL(aNewPreset.GetName());
+            preset->SetDescription(aNewPreset.GetShortDescription());
+            transaction->CommitL();
+            CleanupStack::PopAndDestroy(transaction);
+        }
+    }
+	IRLOG_DEBUG( "CIRFavoritesDb::ReplaceUserDefinedPresetL - Exiting." );	
+}
+
+
+
+
+
+
+//---------------------------------------------------------------------------
+//IRFavoritesDb::MakePresetUserDefinedL()
+//for a favorite preset that has been removed from the isds.
+//it is made a user defined preset by changing the type to 0.
+//index value is preseved so that the relative positions in the saved
+//stations view remains the same.
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRFavoritesDb::MakePresetUserDefinedL( TInt aChannelId,
+	TInt /*aUserDefinedChannelId*/ )
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::MakePresetUserDefinedL" );
+	iMoveStatus=EFalse;
+	//to match the function signature
+	TInt index = SearchPreset(aChannelId,KNullId);
+	CIRPreset* preset;
+	//actual index
+    if (index >= 0)
+        {
+        ASSERT( index >= 0 || index < iFavPresetList.Count() );
+    	index = iFavPresetList[index]->Index();
+    	preset = PresetByIndex(index);
+    	if(preset)
+    		{
+        	CPSTransaction* transaction = preset->CreateTransactionLC();
+        	//convert the flag to user defined and commit
+        	preset->SetChannelType(EUserDefined);
+        	//assign null id
+        	preset->SetId(KNullId);
+
+        	//make logo as null;;;; added for 2.0
+        	_LIT8(KEmpty, "");
+        	RBuf8 tempLogo;
+        	tempLogo.Create(KEmpty);
+        	preset->SetLogoData(tempLogo);
+        	tempLogo.Close();
+        	_LIT(KEmptyString, "");
+        	RBuf tempString;
+        	tempString.Create(KEmptyString);
+			//set imgurl to null
+			preset->SetImgUrl(tempString);
+			//set genre to null
+			preset->SetGenreInfo(tempString,tempString);
+			//set language to null
+			preset->SetLang(tempString);
+			//set country to null
+			preset->SetCountryName(tempString);
+			tempString.Close();
+			//set musicStoreEnabled filed to "no";;;;added for 2.0
+        	_LIT(KNo, "no");
+        	RBuf tempMusicStoreEnabled;
+        	tempMusicStoreEnabled.Create(KNo);
+        	preset->SetMusicStoreStatus(tempMusicStoreEnabled);
+        	tempMusicStoreEnabled.Close();
+        	
+        	transaction->CommitL();
+        	CleanupStack::PopAndDestroy( transaction );
+    		}
+        }
+	IRLOG_DEBUG( "CIRFavoritesDb::MakePresetUserDefinedL - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//const RVRPresetArray& CVRPresetHandler::Presets() const
+// RIRPresetArray& an array containing all Internet Radio presets.
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C const RIRPresetArray& CIRFavoritesDb::Presets() const
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::Presets" );
+	//sort by 
+   	return iFavPresetList;
+    }
+
+/*
+ * Increase the played times of a channel if it has been in the favorites
+ * return : KErrNone if success
+ *          KErrNotFound if the preset is not in the favorites
+ */
+EXPORT_C TInt CIRFavoritesDb::IncreasePlayedTimesL(const CIRIsdsPreset &aIsdsPreset)
+{
+    //step 1 : search the preset in favorites
+    SortByIndex();
+    TInt index = 0;
+    if (aIsdsPreset.GetChannelType() == 0)
+    {
+        index = SearchUserDefinedPreset(aIsdsPreset.GetName(), aIsdsPreset.GetChannelUrlAtL(0));
+    }
+    else
+    {
+        index = SearchPreset(aIsdsPreset.GetId(), KNullId);
+    }
+    
+    if (KErrNotFound == index)
+    {
+        return KErrNotFound;
+    }
+    
+    //step 2 : update the played times of the preset
+    CIRPreset *irPreset = iFavPresetList[index];
+    //open a transaction with the preset server
+    CPSTransaction* transaction = irPreset->CreateTransactionLC();
+    irPreset->SetPlayedTimes(irPreset->GetPlayedTimes() + 1);
+    transaction->CommitL();
+    CleanupStack::PopAndDestroy(transaction);
+    
+    return KErrNone;
+}
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::ConstructL()
+//Standard 2nd phase construction
+//---------------------------------------------------------------------------
+//
+
+void CIRFavoritesDb::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::ConstructL" );
+	//cenrep handle
+    iSettings = CIRSettings::OpenL();
+    iSettings->SetMaxPresetCountL(KFifty);
+	User::LeaveIfError( iServ.Connect() );
+	//a session to the client of the preset server
+    iServ.GetPresetsL( iFavPresetList, KIRPreset );
+    //notifier
+    iNotifier = CPSPresetNotifier::NewL( iServ, *this );
+    //cenrep.
+    iMaxPresetCount=iSettings->MaxPresetCount();
+    //initialization of the list for UI use
+	//iFavPresetList=new(ELeave)CArrayPtrFlat<CIRPreset>(KGranularity)
+	iMoveStatus=EFalse;
+	IRLOG_DEBUG( "CIRFavoritesDb::ConstructL - Exiting." );
+	}
+
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::SortByIndex()
+//sorts the preset list by index
+//---------------------------------------------------------------------------
+//
+
+void CIRFavoritesDb::SortByIndex()
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::SortByIndex" );
+    //The sort order is determined by an algorithm supplied by the caller
+    //and packaged as a TLinerOrder<T>
+    iFavPresetList.Sort( TLinearOrder<CIRPreset>( PresetHandler::OrderByIndex ) );
+	IRLOG_DEBUG( "CIRFavoritesDb::SortByIndex - Exiting." );
+    }
+
+//---------------------------------------------------------------------------
+//EXPORT_C TInt CIRFavoritesDb::MaxPresetCount()
+//returns the maximum number of presets that can be stored in the favorites list
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CIRFavoritesDb::MaxPresetCount()
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::MaxPresetCount" );
+	return iMaxPresetCount;
+	}
+
+//---------------------------------------------------------------------------
+//TInt CIRFavoritesDb::EmptyPresetCount() const
+//Returns the number of empty presets
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CIRFavoritesDb::EmptyPresetCount() const
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::EmptyPresetCount" );
+    return iMaxPresetCount - iFavPresetList.Count();
+    }
+
+
+
+//---------------------------------------------------------------------------
+//TInt CIRFavoritesDb::AddObserver( MPSPresetObserver& aObserver )
+//Adds an observer that is notified upon changes in presets.
+//---------------------------------------------------------------------------
+//
+
+EXPORT_C TInt CIRFavoritesDb::AddObserver(const MPSPresetObserver& aObserver )
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::AddObserver" );
+    return iObservers.InsertInAddressOrder( &aObserver );
+    }
+
+
+//---------------------------------------------------------------------------
+//TInt CIRPresetHandler::RemoveObserver( MPSPresetObserver& aObserver )
+//Removes an observer for a preset.
+//---------------------------------------------------------------------------
+//
+EXPORT_C void CIRFavoritesDb::RemoveObserver(const MPSPresetObserver& aObserver )
+    {
+    TInt idx = iObservers.FindInAddressOrder( &aObserver );
+
+    if ( idx >= 0 )
+        {
+        iObservers.Remove( idx );
+        iObservers.Compress();
+        }
+    }
+
+//---------------------------------------------------------------------------
+//TInt CIRFavoritesDb::MatchingPresetId( TInt aId )
+//---------------------------------------------------------------------------
+//
+
+TInt CIRFavoritesDb::MatchingPresetId( TInt aId )
+    {
+    TInt indx = KErrNotFound;
+
+    SortByIndex() ;
+
+    for ( TInt i = 0; i < iFavPresetList.Count(); i++ )
+        {
+     	 if (iFavPresetList[i]->Id() == aId )
+            {
+            indx = iFavPresetList[i]->Index();
+          /*lint -save -e960 Note -- Violates MISRA Required Rule 58,
+          non-switch break used*/
+          break;
+          /*lint -restore */
+           }
+        }
+
+    return indx;
+    }
+
+//---------------------------------------------------------------------------
+//TInt CIRFavoritesDb::CreatePresetL( TInt aIndex )
+//creates a preset by the index aIndex
+//---------------------------------------------------------------------------
+//
+
+CIRPreset* CIRFavoritesDb::CreatePresetL( TInt aIndex )
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::CreatePresetL" );
+    CIRPreset* preset = static_cast<CIRPreset*>( iServ.CreatePresetL(
+    	aIndex, KIRPreset) );
+    CleanupStack::PushL( preset );
+    iFavPresetList.AppendL( preset );
+    CleanupStack::Pop( preset );
+	IRLOG_DEBUG( "CIRFavoritesDb::CreatePresetL - Exiting." );
+    return preset;
+    }
+
+/*
+ * Search a user defined preset by name and url
+ */
+TInt CIRFavoritesDb::SearchUserDefinedPreset(const TDesC &aName, const TDesC &aUrl)
+    {
+    TInt count = iFavPresetList.Count();
+    for (TInt index = 0; index < count; ++index)
+        {
+            CIRPreset *preset = iFavPresetList[index];
+            const TDesC &name = preset->Name();
+            TInt urlCount = preset->GetUrlCount();
+            if(preset->GetUrlCount()>0)
+                {
+                const TDesC &url = preset->GetChannelUrlAt(0);
+                if (preset->GetChannelType() == 0 &&
+                    name == aName &&
+                    url  == aUrl)
+                    {
+                        return index;
+                    }
+                }
+            else
+                {
+                if (preset->GetChannelType() == 0 &&
+                    name == aName &&
+                    aUrl == KNullDesC)
+                    {
+                        return index;
+                    }                
+                }
+        }
+    
+    return KErrNotFound;
+    }
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::PresetByIndex(TInt aIndex)
+// Returns a preset by its id.
+//---------------------------------------------------------------------------
+//
+EXPORT_C CIRPreset* CIRFavoritesDb::PresetByIndex( TInt aIndex )
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::PresetByIndex" );
+
+    CIRPreset* preset = NULL;
+
+    for ( TInt i = 0; i < iFavPresetList.Count(); i++ )
+        {
+        if (iFavPresetList[i]->Index()==aIndex)
+            {
+            preset = iFavPresetList[i];
+            /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+            break;
+            /*lint -restore*/
+            }
+        }
+	IRLOG_DEBUG( "CIRFavoritesDb::PresetByIndex - Exiting." );
+    return preset;
+	}
+
+//---------------------------------------------------------------------------
+// CIRFavoritesDb::PresetById(TInt aIndex)
+//Returns a preset by its id.
+//---------------------------------------------------------------------------
+//
+EXPORT_C CIRPreset* CIRFavoritesDb::PresetById( TInt aId )
+    {
+	IRLOG_DEBUG( "CIRFavoritesDb::PresetById" );
+
+    CIRPreset* preset = NULL;
+
+    for ( TInt i = 0; i < iFavPresetList.Count(); i++ )
+        {
+        if ( iFavPresetList[i]->Id() == aId )
+            {
+            preset = iFavPresetList[i];
+            /*lint -save -e960 Note -- Violates MISRA Required Rule 58,
+            non-switch break used*/
+            break;
+            /*lint -restore */
+            }
+        }
+	IRLOG_DEBUG( "CIRFavoritesDb::PresetById - Exiting." );
+
+    return preset;
+    }
+
+
+//---------------------------------------------------------------------------
+//CIRFavoritesDb::HandlePresetChangedL()
+//function to notify a change in saved presets
+//preset handler i.e CIRPreset,the reason of change.
+//---------------------------------------------------------------------------
+//
+EXPORT_C void CIRFavoritesDb::HandlePresetChangedL( TInt aId,
+	TUid aDataHandler, MPSPresetObserver::TPSReason aReason )
+	{
+	IRLOG_DEBUG( "CIRFavoritesDb::HandlePresetChangedL" );
+    if ( aDataHandler == KIRPreset )
+        {
+        switch ( aReason )
+            {
+            case MPSPresetObserver::EPSCreated:
+                {
+                //call back from the preset client
+                //to append a preset when the preset is added
+                CPSPresetInterface* preset = NULL;
+                preset = PresetById( aId );
+                if ( !preset )
+                    {
+                    preset = iServ.OpenPresetL( aId );
+                    CleanupStack::PushL( preset );
+                    iFavPresetList.AppendL( static_cast<CIRPreset*>( preset ) );
+                    CleanupStack::Pop( preset );
+                    }
+
+                }
+            break;
+            case MPSPresetObserver::EPSDeleted:
+                {
+                //call back from the preset client
+                //to remove a preset when the preset is deleted
+                for ( TInt i = 0; i < iFavPresetList.Count(); i++ )
+                    {
+                    if ( iFavPresetList[i]->Id() == aId )
+                        {
+                        delete iFavPresetList[i];
+                        iFavPresetList.Remove( i );
+                        /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+                        break;
+                        /*lint -restore*/
+                        }
+                    }
+                }
+            break;
+            case MPSPresetObserver::EPSModified:
+            break;
+            default:
+            break;
+            }
+
+        for ( TInt i = 0; i < iObservers.Count(); i++ )
+            {
+            iObservers[i]->HandlePresetChangedL( aId, aDataHandler, aReason );
+            }
+            
+        }
+	IRLOG_DEBUG( "CIRFavoritesDb::HandlePresetChangedL - Exiting." );
+
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/filerecognizerinc/irrecognizer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRRECOGNIZER_H
+#define IRRECOGNIZER_H
+
+#include <apmrec.h>
+
+const TInt KIRRecognizerImplementationUid = 0x2000B4DE;
+const TUid KIRRecognizerDllUid = {0x2000B4A9};
+/**
+ * Recognizer plug-in for .Pls files.
+ * 
+ * @code
+ * Uses Methods from the base class CApaDataRecognizerType
+ * to recognise the .pls files  
+ * @endcode
+ *
+*/
+class CApaRecognizerEx: public CApaDataRecognizerType
+    {
+public:
+    /**
+    * Default constructor
+    */
+    CApaRecognizerEx();
+
+    /**
+    * Destructor.
+    */
+    virtual ~CApaRecognizerEx();
+
+    /**
+    * CreateRecognizerL()
+    * From CApaDataRecognizerType CreateRecognizerL.
+    * creates and returns recognizer
+    */
+	static CApaDataRecognizerType* CreateRecognizerL();
+
+    /**
+    * PreferredBufSize()
+    * From CApaDataRecognizerType PreferredBufSize.
+    * returns preferred buffer size
+    */
+	TUint PreferredBufSize();
+
+    /**
+    * SupportedDataTypeL(SupportedDataTypeL)
+    * From CApaDataRecognizerType SupportedDataTypeL.
+    * @param aIndex is index that identifies the data type
+    * returns supported mime type
+    */
+	TDataType SupportedDataTypeL(TInt aIndex) const;
+
+private:
+        /**
+	 * DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
+	 * From CApaDataRecognizerType DoRecognizeL.
+	 * recognises the file by name and/or buffer
+	 * @param aName is file name containing the data to be recognized
+	 * @param aBuffer is buffer containing data to be recognized
+	 */
+	void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer);
+    };
+
+#endif //IRRECOGNIZER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/filerecognizersrc/irrecognizer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <implementationproxy.h>
+
+#include "irdebug.h"
+#include "irrecognizer.h"
+
+// CONSTANTS
+//voilate PC Lint Warning 569: Loss of information (initialization) 
+//(32 bits to 31 bits)
+// Uid of the recogniser
+//const TUid KUidIRRecognizer={0x2000B499}
+// maximum amount of buffer space we will ever use
+const TInt KMaxBufferLength=4;
+// If the file name length > 4, the file extension might be valid                  
+const TInt KPlsFileExtensionsMightBeValid = 4;  
+const TInt KM3uFileExtensionsMightBeValid = 4;
+
+//extension of File to be recognised.
+_LIT(KPlsExtension, ".pls");
+//Mime type of the .pls file
+_LIT8(KPlsMimeType,"audio/x-scpls");
+
+_LIT(KM3uExtension, ".m3u");
+_LIT8(KM3uMimeType, "audio/x-mpegurl");
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// RecognizerEx::RecognizerEx()
+// constructs the object
+// ---------------------------------------------------------------------------
+//
+CApaRecognizerEx::CApaRecognizerEx():CApaDataRecognizerType(KIRRecognizerDllUid, 
+	CApaDataRecognizerType::EHigh)
+    {
+    IRLOG_DEBUG( "CApaRecognizerEx::CApaRecognizerEx()" );
+    // It supports 2 mime type
+    iCountDataTypes = 2;
+    IRLOG_DEBUG( "CApaRecognizerEx::CApaRecognizerEx() - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// RecognizerEx::~RecognizerEx()
+// Destroys the object
+// ---------------------------------------------------------------------------
+//
+CApaRecognizerEx::~CApaRecognizerEx()
+    {
+    IRLOG_DEBUG( "CApaRecognizerEx::~CApaRecognizerEx" );
+    // no implementation
+    }
+
+
+// ---------------------------------------------------------------------------
+// RecognizerEx::CreateRecognizerL()
+// Returns pointer to the new object
+// ---------------------------------------------------------------------------
+//
+CApaDataRecognizerType* CApaRecognizerEx::CreateRecognizerL()
+    {
+    IRLOG_DEBUG( "CApaRecognizerEx::CreateRecognizerL" );
+    return new (ELeave) CApaRecognizerEx();
+    }
+
+
+// ---------------------------------------------------------------------------
+// RecognizerEx::PreferredBufSize()
+// Returns preferred buffer size
+// ---------------------------------------------------------------------------
+//
+TUint CApaRecognizerEx::PreferredBufSize()
+    {
+    IRLOG_DEBUG( "CApaRecognizerEx::PreferredBufSize" );
+    return KMaxBufferLength;
+    }
+
+// ---------------------------------------------------------------------------
+// RecognizerEx::SupportedDataTypeL()
+// Returns supported mime type
+// ---------------------------------------------------------------------------
+//
+TDataType CApaRecognizerEx::SupportedDataTypeL(TInt aIndex) const
+    {
+    IRLOG_DEBUG( "CApaRecognizerEx::SupportedDataTypeL" );
+    if (0 == aIndex)
+	{
+        return TDataType(KPlsMimeType);
+	}
+    else if (1 == aIndex)
+    {
+        return TDataType(KM3uMimeType);
+    }
+    else
+    {
+        ASSERT(0);
+        return TDataType(KNullDesC8);
+    }
+    }
+
+// ---------------------------------------------------------------------------
+// RecognizerEx::DoRecognizeL()
+// Recognizes the file by name and/or head buffer
+// ---------------------------------------------------------------------------
+//
+void CApaRecognizerEx::DoRecognizeL(const TDesC& aName, 
+	const TDesC8& aBuffer)
+    {
+	IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL" );    
+    // To keep code simple, we only check file name extension
+    TInt len = aBuffer.Length();
+    if (aName.Length()>KPlsFileExtensionsMightBeValid)
+		{
+		//Compare the extension of the file to be recognised with .pls
+		if (aName.Right(KPlsFileExtensionsMightBeValid).CompareF(
+			KPlsExtension)==0)
+	    {
+			iConfidence=ECertain;   // is certainly something totally new
+			iDataType=TDataType(KPlsMimeType);
+			IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL - Exiting (1)." );
+			return;
+		}
+		else if (aName.Right(KM3uFileExtensionsMightBeValid).CompareF(
+            KM3uExtension)==0)
+		{
+		    _LIT8(KHttp, "http://");
+		    if (KErrNotFound != aBuffer.Find(KHttp))
+		    {
+		        iConfidence = ECertain;
+		        iDataType = TDataType(KM3uMimeType);
+		        IRLOG_DEBUG("CApaRecognizerEx::DoRecognizeL - Exiting (2).");
+		    }
+		    return;
+		}
+	    IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL - Exiting (3)." );					
+		}
+    }
+
+
+// -----------------------------------------------------------------------------
+// ImplementationTable
+// violates PC lint error :: Warning 611: Suspicious cast
+// required by the ECOM framework to correctly identify the instantiation 
+// method pointer to provide to a client's resolution request.
+// -----------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(KIRRecognizerImplementationUid, 
+    	CApaRecognizerEx::CreateRecognizerL)
+    };
+    
+// ---------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Provides access to the implementationtable
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
+	TInt& aTableCount)
+    {
+    IRLOG_DEBUG( "ImplementationGroupProxy" );
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    IRLOG_DEBUG( "ImplementationGroupProxy - Exiting." );
+    return ImplementationTable;
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/generalsettingsinc/irgeneralsettingsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2006-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:  Declaration of CIRGeneralSettingsView
+*
+*/
+
+
+#ifndef C_CIRGENERALSETTINGSVIEW_H
+#define C_CIRGENERALSETTINGSVIEW_H
+
+#include "irsettingsviewbase.h"
+
+/**
+ * Implements the general settings plugin interface.
+ *
+ * Loads the necessary resources and constructs the view and model of the plugin.
+ */
+NONSHARABLE_CLASS( CIRGeneralSettingsView ) : public CIRSettingsViewBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param   aInitParams     The ECom plugin initialization parameters.
+     * @return  The newly created object.
+     */
+    static CIRGeneralSettingsView* NewL( TAny* aInitParams );
+    
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRGeneralSettingsView* NewLC();
+
+    /**
+     * Destructor.
+     */
+    ~CIRGeneralSettingsView();
+    
+    /**
+     * HandleCommandL()
+     * Command Handler
+     */
+    void HandleCommandL( TInt aCommand );
+    
+    /**
+     * DynInitMenuPaneL()
+     * Dynamically initialises a menu pane
+     */
+    void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRGeneralSettingsView();
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+    
+// from base class CAknView
+
+	/**
+     * Id()
+     * returns the Id of the view
+     */
+    TUid Id() const;
+    
+    
+    /**
+     * DoActivateL()
+     * Activates the view
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+    				 const TDesC8& aCustomMessage );
+    				 
+
+// from base class CGSPluginInterface
+
+	/** GetCaptionL()
+     * Gets the caption of general settings
+     */
+    void GetCaptionL( TDes& aCaption ) const;
+    
+    /** PluginProviderCategory()
+     * Getter for provider category
+     */
+    TInt PluginProviderCategory() const;
+    
+     /** CreateIconL()
+     * Creates icon for the general settings
+     */
+    CGulIcon* CreateIconL( const TUid aIconType );
+    
+     /** Visible()
+     * Getter for general settings view visibility status
+     */
+    virtual TBool Visible() const;
+    
+// from base class CVRSettingsViewBase
+
+ 	/** CreateContainerL()
+     * Constructs new container
+     */
+    void CreateContainerL();
+
+private:
+
+    /**
+     * iGeneralSettingsResourceLoader
+     * The resource loader for the resource file.
+     */
+    RConeResourceLoader iGeneralSettingsResourceLoader;
+    
+    };
+
+#endif // C_CIRGENERALSETTINGSVIEW_H 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/generalsettingssrc/irgeneralsettingsimplementationtable.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* 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: 
+*        ECOM proxy table for this plugin
+*
+*/
+
+
+// System includes
+#include <e32std.h>
+#include <implementationproxy.h>
+
+#include "irgeneralsettingsview.h"
+#include "irdebug.h"
+#include  "irgeneralsettings.hrh"
+
+ 
+
+// Constants
+const TImplementationProxy KGenSettingGSPluginImplementationTable[] = 
+	{
+	
+	IMPLEMENTATION_PROXY_ENTRY( IRGENERAL_SETTINGS_PLUGIN_DLL_UID,	CIRGeneralSettingsView::NewL )
+	};
+
+
+// ---------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Gate/factory function
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	IRLOG_DEBUG( "In ImplementationGroupProxy - Entering");
+	aTableCount = sizeof(KGenSettingGSPluginImplementationTable) 
+        / sizeof(TImplementationProxy);
+	IRLOG_DEBUG( "In ImplementationGroupProxy - Exiting");
+	return KGenSettingGSPluginImplementationTable; 
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/generalsettingssrc/irgeneralsettingsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2006-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:  Implementation of CIRGeneralSettingsView
+*
+*/
+
+
+#include <akntitle.h>
+#include "irgeneralsettingsview.h"
+#include "irgeneralsettings.hrh"
+#include "ircommonsettingscontainer.h"
+#include "irdebug.h"
+#include <irgeneralsettings.rsg>
+#include <internetradio.mbg>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include "ir.hrh"
+
+
+// General settings plugin bitmap file.
+
+_LIT(KIRMifFileName,"InternetRadio.mif");
+
+// General settings plugin resource file.
+_LIT( KIRGeneralSettingsResourceFile, "irgeneralsettings.rsc" );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRGeneralSettingsView* CIRGeneralSettingsView::NewL( TAny* /*aInitParams*/ )
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView::NewL - entering");
+    CIRGeneralSettingsView* self = CIRGeneralSettingsView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( " CIRGeneralSettingsView::NewL - exiting");
+    return self;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CIRGeneralSettingsView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRGeneralSettingsView* CIRGeneralSettingsView::NewLC()
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView::NewLC - Entering" );
+    CIRGeneralSettingsView* self = new( ELeave ) CIRGeneralSettingsView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRGeneralSettingsView::NewLC - Exiting" );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRGeneralSettingsView::CIRGeneralSettingsView()
+    : iGeneralSettingsResourceLoader( *iCoeEnv )
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView ::CIRGeneralSettingsView");
+    }
+    
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRGeneralSettingsView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRGeneralSettingsView::ConstructL - entering");
+    BaseConstructL();
+    LoadResourcesL( iGeneralSettingsResourceLoader, KIRGeneralSettingsResourceFile );
+    IRLOG_DEBUG( "CIRGeneralSettingsView::ConstructL - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRGeneralSettingsView::~CIRGeneralSettingsView()
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView::~CIRGeneralSettingsView - entering");
+    iGeneralSettingsResourceLoader.Close();
+    if(iContainer)
+    	{
+    	delete iContainer;
+    	iContainer = NULL;
+    	}
+    IRLOG_DEBUG( "CIRGeneralSettingsView::~CIRGeneralSettingsView - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for the view id
+// ---------------------------------------------------------------------------
+//
+TUid CIRGeneralSettingsView::Id() const
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView :: Id");
+    return TUid::Uid( IRGENERAL_SETTINGS_PLUGIN_DLL_UID );
+    }
+
+// ---------------------------------------------------------------------------
+// View activation
+// ---------------------------------------------------------------------------
+//
+void CIRGeneralSettingsView::DoActivateL( const TVwsViewId& aPrevViewId, 
+                                          TUid aCustomMessageId, 
+                                          const TDesC8& aCustomMessage )
+    {
+	
+    IRLOG_DEBUG( " CIRGeneralSettingsView::DoActivateL - Entering" );
+    
+    CIRSettingsViewBase::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+
+    HBufC* title = NULL;
+    title = iCoeEnv->AllocReadResourceLC( R_IRAPP_GENERAL_SETTINGS_PLUGIN_TITLE );
+    static_cast<CAknTitlePane*>( AppUi()->StatusPane()->ControlL(
+    			 TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( *title );
+    CleanupStack::PopAndDestroy( title );
+    IRLOG_DEBUG( " CIRGeneralSettingsView::DoActivateL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for the caption of general settings
+// ---------------------------------------------------------------------------
+//
+void CIRGeneralSettingsView::GetCaptionL( TDes& aCaption ) const
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView::GetCaptionL - Entering");
+    StringLoader::Load(aCaption,R_IRAPP_GENERAL_SETTINGS_PLUGIN_LISTBOX_CAPTION);
+    IRLOG_DEBUG( "CIRGeneralSettingsView::GetCaptionL - Exiting");
+	
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for provider category
+// ---------------------------------------------------------------------------
+//
+TInt CIRGeneralSettingsView::PluginProviderCategory() const
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView::PluginProviderCategory");
+    return EGSPluginProviderOEM;
+    }
+
+// ---------------------------------------------------------------------------
+// Creates icon for the general settings
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRGeneralSettingsView::CreateIconL( const TUid aIconType )
+    {
+	IRLOG_DEBUG( "CIRGeneralSettingsView::CreateIconL - Entering");
+    if ( aIconType == KGSIconTypeLbxItem )
+	    {
+	    TParse parse;
+		parse.Set( KIRMifFileName, &KDC_APP_RESOURCE_DIR, NULL );
+		TFileName bitmapFile = parse.FullName();
+		CompleteWithAppPath( bitmapFile );
+
+	    CIRSettingsViewBase::ResolveDriveL( iCoeEnv->FsSession(), bitmapFile );
+
+		IRLOG_DEBUG( "CIRGeneralSettingsView::CreateIconL - exiting");
+	    return AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), 
+	                                      KAknsIIDDefault, 
+	                                      bitmapFile, 
+	                                      EMbmInternetradioQgn_prop_set_apps_ir, 
+	                                      EMbmInternetradioQgn_prop_set_apps_ir_mask );
+	    }
+    else
+	    {
+	    IRLOG_DEBUG( "CIRGeneralSettingsView::CreateIconL - exiting");
+	    return CGSPluginInterface::CreateIconL( aIconType );
+	    }
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for general settings view visibility status
+// ---------------------------------------------------------------------------
+//
+TBool CIRGeneralSettingsView::Visible() const
+    {
+    IRLOG_DEBUG( "CIRGeneralSettingsView::Visible");
+	return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructs new container
+// ---------------------------------------------------------------------------
+//
+void CIRGeneralSettingsView::CreateContainerL()
+    {
+	IRLOG_DEBUG( "CIRGeneralSettingsView::CreateContainer - entering");
+    if( !iContainer )
+        {
+        iContainer = CIRCommonSettingsContainer::NewL();
+        }
+    IRLOG_DEBUG( "CIRGeneralSettingsView::CreateContainer - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// HandleCommandL()
+// Command handler
+// ---------------------------------------------------------------------------
+//
+void CIRGeneralSettingsView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRGeneralSettingsView::HandleCommandL - entering");
+	
+	switch ( aCommand )
+		{
+		case EEikCmdExit:
+		case EExitCmd:  //lint -fallthrough
+	    case EIRExit:
+		case EAknSoftkeyExit:
+			{
+			AppUi()->Exit();
+			}
+		break;
+				
+		default:
+			{
+			CIRSettingsViewBase::HandleCommandL( aCommand );
+			}
+		break;
+		}
+
+	IRLOG_DEBUG( "CIRGeneralSettingsView::HandleCommandL - Exiting");
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRGeneralSettingsView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRGeneralSettingsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRGeneralSettingsView::DynInitMenuPaneL - Entering" );
+
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_MENU_SETTINGS)
+			{				
+			// Now Playing option
+			 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+			}
+		}
+	IRLOG_DEBUG( "CIRGeneralSettingsView::DynInitMenuPaneL - Exiting" );
+	}
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/backup_registration.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" standalone="yes"?> 
+    <backup_registration> 
+        <passive_backup>
+            <include_file name = "lastPlayed.dat"/>
+            <include_file name = "cacheDb.db"/>
+            <include_file name = "iSdsResponse.xml"/>
+            <include_file name = "Session"/>
+            <include_file name = "RadioReport.xml"/>
+            <include_file name = "LogUsage.gz"/>
+			<include_file name = "songhistoryDb.db"/>
+            <include_file name = "irsettings_backed_up.ini"/>
+        </passive_backup> 
+      <proxy_data_manager sid="0x10202BE9"/>
+	<restore requires_reboot = "no"/> 
+</backup_registration> 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/bld.inf	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2006-2007 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:  Build information file for project InternetRadio
+*
+*/
+
+#include 		<platform_paths.hrh>
+#include        <bldvariant.hrh>
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+PRJ_EXPORTS
+
+// Cenrep
+../cenrep/2000b499.txt                          /epoc32/data/z/private/10202be9/2000b499.txt
+../cenrep/2000b499.txt                          /epoc32/release/winscw/udeb/z/private/10202be9/2000b499.txt
+../cenrep/2000b499.txt                          /epoc32/release/winscw/urel/z/private/10202be9/2000b499.txt
+#ifdef __WINS__
+../cenrep/2000b499.txt  		        /epoc32/winscw/c/private/10202be9/2000b499.txt
+#endif
+
+backup_registration.xml                         /epoc32/data/z/private/2000B499/backup_registration.xml
+
+//ROM Build
+// THESE COMMENTED IBYS SHOULD BE EXPORTED BY PRODUCTS
+../rom/internetradio.iby                      CORE_APP_LAYER_IBY_EXPORT_PATH(internetradio.iby)  
+../rom/internetradiosettings.iby              CORE_APP_LAYER_IBY_EXPORT_PATH(internetradiosettings.iby)
+
+
+PRJ_MMPFILES
+
+irsettings.mmp
+irrfsplugin.mmp
+irnetworkcontroller.mmp
+irdatastructures.mmp
+presetplugin.mmp
+ircachemgmt.mmp 
+irxmlparser.mmp
+irfavoritesdb.mmp
+irdataprovider.mmp
+irsessionlog.mmp
+isdsclient.mmp
+irsonghistory.mmp
+irrecognizer.mmp
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/bld_loc.bat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,91 @@
+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
+
+REM 
+REM This is a temporary way to localise Internet Radio into SIS.
+REM This script is only for Internet Radio development and testing and is dependent on hardcoded paths,
+REM languages and files, so it is only for internal use.
+REM 
+
+setlocal
+
+set _MMP=internetradio.mmp
+set _MMP_ORIG=%_MMP%.saved
+set _MMP_NO_LANG=%_MMP%.tmp
+
+
+REM Save original internetradio.mmp and avkon.loc
+move %_MMP% %_MMP_ORIG%
+copy \epoc32\include\avkon.loc \epoc32\include\avkon.loc.saved
+
+
+REM Copy the mmp without the LANG tag
+FOR /F "tokens=1*" %%A IN (%_MMP_ORIG%) DO (
+  IF NOT %%A==LANG (
+    echo %%A %%B >> %_MMP_NO_LANG%
+  )
+)
+
+REM Delete existing compiled resource files
+IF EXIST \epoc32\data\z\system\apps\internetradio\internetradio.r??? (
+  del \epoc32\data\z\system\apps\internetradio\internetradio.r???
+)
+
+
+REM Go through all localisation directories and build resources with the corresponding language.
+REM For each language, use the corresponding localised avkon.loc
+FOR /F %%i IN ('dir /AD /B ..\resources') DO (
+  IF EXIST \s60\s60LocFiles\%%i\avkon_%%i.loc (
+    echo.
+    echo LOCALISING LANGUAGE %%i
+    copy \s60\s60locfiles\%%i\avkon_%%i.loc \epoc32\include\avkon.loc
+    copy %_MMP_NO_LANG% %_MMP%
+    echo LANG %%i >> %_MMP%
+    call abld makefile armv5
+    call abld resource armv5 urel
+  ) ELSE (
+  IF EXIST \s60\misc\release\s60locfiles\%%i\avkon_%%i.loc ( 
+    echo.
+    echo LOCALISING LANGUAGE %%i
+    copy \s60\misc\release\s60locfiles\%%i\avkon_%%i.loc \epoc32\include\avkon.loc
+    copy %_MMP_NO_LANG% %_MMP%
+    echo LANG %%i >> %_MMP%
+    call abld makefile armv5
+    call abld resource armv5 urel
+  ) ELSE (
+    echo.
+    echo \s60\s60locfiles\%%i\avkon_%%i.loc doesn't exist!
+    echo \s60\s60locfiles\%%i\avkon_%%i.loc doesn't exist! >> LOCALISATION_ERRORS.txt
+    echo.
+    REM pause
+  )
+  )
+)
+
+
+REM Delete temp files and restore originals
+move \epoc32\include\avkon.loc.saved \epoc32\include\avkon.loc
+move %_MMP_ORIG% %_MMP%
+del %_MMP_NO_LANG%
+
+
+REM build makefiles again with the original mmp
+call abld makefile armv5
+
+
+endlocal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/copyradiothemes.bat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,49 @@
+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
+
+SETLOCAL
+
+SET THEME_DEST_C_UDEB_DIR=%EPOCROOT%epoc32\RELEASE\winscw\udeb\z\private\10207254\themes\271012080\270513751
+SET THEME_DEST_C_UREL_DIR=%EPOCROOT%epoc32\RELEASE\winscw\urel\z\private\10207254\themes\271012080\270513751
+SET THEME_DEST_Z_DIR=%EPOCROOT%epoc32\data\z\private\10207254\themes\271012080\270513751
+
+echo Copying Active Idle binary themes
+echo *********************************
+if not exist %THEME_DEST_C_UDEB_DIR%\271063149\1.0\sources mkdir %THEME_DEST_C_UDEB_DIR%\271063149\1.0\sources
+copy ..\activeidlethemes\binarythemes\activeidle\AI.* %THEME_DEST_C_UDEB_DIR%\271063149\1.0\
+copy ..\activeidlethemes\themes\activeidle\*.mif %THEME_DEST_C_UDEB_DIR%\271063149\1.0\sources\
+if not exist %THEME_DEST_C_UREL_DIR%\271063149\1.0\sources mkdir %THEME_DEST_C_UREL_DIR%\271063149\1.0\sources
+copy ..\activeidlethemes\binarythemes\activeidle\AI.* %THEME_DEST_C_UREL_DIR%\271063149\1.0\
+copy ..\activeidlethemes\themes\activeidle\*.mif %THEME_DEST_C_UREL_DIR%\271063149\1.0\sources\
+if not exist %THEME_DEST_Z_DIR%\271063149\1.0\sources mkdir %THEME_DEST_Z_DIR%\271063149\1.0\sources
+copy ..\activeidlethemes\binarythemes\activeidle\AI.* %THEME_DEST_Z_DIR%\271063149\1.0\
+copy ..\activeidlethemes\themes\activeidle\*.mif %THEME_DEST_Z_DIR%\271063149\1.0\sources\
+
+echo Copying Classic Idle binary themes
+echo **********************************
+if not exist %THEME_DEST_C_UDEB_DIR%\271063147\1.0\sources mkdir %THEME_DEST_C_UDEB_DIR%\271063147\1.0\sources
+copy ..\activeidlethemes\binarythemes\classicidle\CI.* %THEME_DEST_C_UDEB_DIR%\271063147\1.0\
+copy ..\activeidlethemes\themes\classicidle\*.mif %THEME_DEST_C_UDEB_DIR%\271063147\1.0\sources\
+if not exist %THEME_DEST_C_UREL_DIR%\271063147\1.0\sources mkdir %THEME_DEST_C_UREL_DIR%\271063147\1.0\sources
+copy ..\activeidlethemes\binarythemes\classicidle\CI.* %THEME_DEST_C_UREL_DIR%\271063147\1.0\
+copy ..\activeidlethemes\themes\classicidle\*.mif %THEME_DEST_C_UREL_DIR%\271063147\1.0\sources\
+if not exist %THEME_DEST_Z_DIR%\271063147\1.0\sources mkdir %THEME_DEST_Z_DIR%\271063147\1.0\sources
+copy ..\activeidlethemes\binarythemes\classicidle\CI.* %THEME_DEST_Z_DIR%\271063147\1.0\
+copy ..\activeidlethemes\themes\classicidle\*.mif %THEME_DEST_Z_DIR%\271063147\1.0\sources
+
+ENDLOCAL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/iconlist.txt	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,35 @@
+/c24,8 ..\aif\qgn_menu_irradio.svg 
+/c24,8 ..\mbm\qgn_prop_set_apps_ir.svg
+/c8,8 ..\mbm\qgn_indi_ai_music_play.svg
+/c8,8 ..\mbm\qgn_indi_ai_music_stop.svg
+/c8,8 ..\mbm\qgn_prop_ir_list_play.svg
+/c8,8 ..\mbm\qgn_prop_ir_list_stopped.svg
+/c8,8 ..\mbm\qgn_indi_tb_copy.svg
+/c8,8 ..\mbm\qgn_indi_tb_paste.svg
+/c8,8 ..\mbm\qgn_indi_fmradio_tb_listen.svg
+/c8,8 ..\mbm\qgn_indi_tb_next.svg
+/c8,8 ..\mbm\qgn_indi_tb_play.svg
+/c8,8 ..\mbm\qgn_indi_tb_previous.svg
+/c8,8 ..\mbm\qgn_indi_tb_stop.svg
+/c8,8 ..\mbm\qgn_indi_tb_next_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_play_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_previous_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_stop_white.svg
+/c8,8 ..\mbm\qgn_indi_fmradio_tb_listen_white.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_history.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_history_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_find.svg
+/c8,8 ..\mbm\qgn_indi_tb_find_white.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_addtofav.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_addtofav_white.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_addstation.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_addstation_white.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_findnshop.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_findnshop_white.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_saveall.svg
+/c8,8 ..\mbm\qgn_indi_irradio_tb_saveall_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_details.svg
+/c8,8 ..\mbm\qgn_indi_tb_details_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_paste_white.svg
+/c8,8 ..\mbm\qgn_indi_tb_copy_white.svg
+/c8,8 ..\mbm\qgn_ir_transparent.svg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/installradiothemes.bat	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,93 @@
+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
+
+SETLOCAL
+
+SET THEME_INSTALL_DIR1=%EPOCROOT%epoc32\winscw\C\Data\themeinstalltemp\activeidle
+SET THEME_INSTALL_DIR3=%EPOCROOT%epoc32\winscw\C\Data\themeinstalltemp\classicidle
+
+SET THEME_INSTALLED_DIR=%EPOCROOT%epoc32\winscw\c\private\10207254\themes\271012080\270513751
+
+SET THEME_DEST_C_UDEB_DIR=%EPOCROOT%epoc32\RELEASE\winscw\udeb\z\private\10207254\themes\271012080\270513751
+SET THEME_DEST_C_UREL_DIR=%EPOCROOT%epoc32\RELEASE\winscw\urel\z\private\10207254\themes\271012080\270513751
+SET THEME_DEST_Z_DIR=%EPOCROOT%epoc32\data\z\private\10207254\themes\271012080\270513751
+
+if not exist %THEME_INSTALL_DIR1% mkdir %THEME_INSTALL_DIR1%
+if not exist %THEME_INSTALL_DIR3% mkdir %THEME_INSTALL_DIR3%
+if not exist %THEME_INSTALL_DIR1%\Loc mkdir %THEME_INSTALL_DIR1%\loc
+if not exist %THEME_INSTALL_DIR3%\Loc mkdir %THEME_INSTALL_DIR3%\loc
+
+echo Copying Active Idle theme files
+echo *******************************
+copy ..\activeidlethemes\themes\activeidle\activeidle_dat.dat %THEME_INSTALL_DIR1%
+copy ..\activeidlethemes\themes\activeidle\*.dtd %THEME_INSTALL_DIR1%
+copy ..\activeidlethemes\themes\activeidle\*.xml %THEME_INSTALL_DIR1%
+copy ..\activeidlethemes\themes\activeidle\*.css %THEME_INSTALL_DIR1%
+copy ..\activeidlethemes\themes\activeidle\*.mif %THEME_INSTALL_DIR1%
+copy ..\activeidlethemes\themes\activeidle\*.svg %THEME_INSTALL_DIR1%
+
+echo Copying Active Idle localized theme files
+echo *****************************************
+copy ..\activeidlethemes\themes\activeidle\activeidle_loc.dat %THEME_INSTALL_DIR1%\loc\
+copy ..\activeidlethemes\themes\activeidle\*.xml %THEME_INSTALL_DIR1%\loc
+copy ..\activeidlethemes\themes\activeidle\*.css %THEME_INSTALL_DIR1%\loc
+
+echo Copying Classic Idle theme files
+echo ********************************
+copy ..\activeidlethemes\themes\classicidle\classicidle_dat.dat %THEME_INSTALL_DIR3%
+copy ..\activeidlethemes\themes\classicidle\*.dtd %THEME_INSTALL_DIR3%
+copy ..\activeidlethemes\themes\classicidle\*.xml %THEME_INSTALL_DIR3%
+copy ..\activeidlethemes\themes\classicidle\*.css %THEME_INSTALL_DIR3%
+copy ..\activeidlethemes\themes\classicidle\*.mif %THEME_INSTALL_DIR3%
+copy ..\activeidlethemes\themes\classicidle\*.svg %THEME_INSTALL_DIR3%
+
+echo Copying Classic Idle localized theme files
+echo ******************************************
+copy ..\activeidlethemes\themes\classicidle\classicidle_loc.dat %THEME_INSTALL_DIR3%\loc\
+copy ..\activeidlethemes\themes\classicidle\*.xml %THEME_INSTALL_DIR3%\loc
+copy ..\activeidlethemes\themes\classicidle\*.css %THEME_INSTALL_DIR3%\loc
+
+if not exist %EPOCROOT%epoc32\winscw\c\logs\themeinstallercons mkdir %EPOCROOT%epoc32\winscw\c\Logs\themeinstallercons
+
+echo Installing Active Idle theme files
+echo **********************************
+%EPOCROOT%epoc32\release\winscw\udeb\xnthemeinstallercons.exe C:\data\themeinstalltemp\activeidle\
+type %EPOCROOT%epoc32\winscw\c\logs\themeinstallercons\themeinstallercons.log
+
+xcopy /s /i /c %THEME_INSTALLED_DIR% %THEME_DEST_C_UDEB_DIR%
+xcopy /s /i /c %THEME_INSTALLED_DIR% %THEME_DEST_C_UREL_DIR%
+xcopy /s /i /c %THEME_INSTALLED_DIR% %THEME_DEST_Z_DIR%
+
+echo Installing Classic Idle theme files
+echo ***********************************
+%EPOCROOT%epoc32\release\winscw\udeb\xnthemeinstallercons.exe C:\data\themeinstalltemp\classicidle\
+type %EPOCROOT%epoc32\winscw\c\Logs\themeinstallercons\themeinstallercons.log
+
+xcopy /s /i /c %THEME_INSTALLED_DIR% %THEME_DEST_C_UDEB_DIR%
+xcopy /s /i /c %THEME_INSTALLED_DIR% %THEME_DEST_C_UREL_DIR%
+xcopy /s /i /c %THEME_INSTALLED_DIR% %THEME_DEST_Z_DIR%
+
+echo Copying Active Idle binary themes
+echo *********************************
+copy %THEME_DEST_Z_DIR%\271063149\1.0\AI.*  ..\activeidlethemes\binarythemes\activeidle\
+
+echo Copying Classic Idle binary themes
+echo **********************************
+copy %THEME_DEST_Z_DIR%\271063147\1.0\CI.*  ..\activeidlethemes\binarythemes\classicidle\
+
+ENDLOCAL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/internetradio.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+// To get the APP_LAYER_SYSTEMINCLUDE-definition
+#include 		<platform_paths.hrh>
+#include        <bldvariant.hrh>
+
+#include <data_caging_paths.hrh>
+#include "internetradioconfigurationflags.hrh"
+
+TARGET          internetradio.exe
+TARGETTYPE      exe
+UID             0x100039CE 0x2000B499
+VENDORID        VID_DEFAULT
+CAPABILITY      NetworkServices ProtServ ReadDeviceData ReadUserData  \
+                SwEvent UserEnvironment WriteDeviceData WriteUserData \
+                TrustedUI NetworkControl MultiMediaDD
+
+EPOCSTACKSIZE   0x5000
+EPOCHEAPSIZE    0x8000 0x400000
+
+PAGED
+
+LANGUAGE_IDS
+
+SOURCEPATH      ../uisrc
+SOURCE          ir.cpp
+SOURCE          irapplication.cpp
+SOURCE          irdocument.cpp
+SOURCE          irui.cpp
+SOURCE          irbaseview.cpp
+SOURCE          irnowplayingview.cpp
+SOURCE          irnowplayingviewcontainer.cpp
+SOURCE          irmainview.cpp
+SOURCE          irmaincontainer.cpp
+SOURCE          irhistorylistview.cpp
+SOURCE          irhistorylistcontainer.cpp 
+SOURCE          irsearchresultsview.cpp
+SOURCE          irsearchresultsviewcontainer.cpp
+SOURCE          irisdswrapper.cpp
+SOURCE          irhistory.cpp
+SOURCE          iralarmobserver.cpp
+SOURCE          irmessageobserver.cpp
+SOURCE          irmediaclient.cpp
+SOURCE          irnwinfoobserver.cpp
+SOURCE          irchangeobserver.cpp
+SOURCE          irpropertyobserver.cpp
+SOURCE          irpubsub.cpp
+SOURCE          irviewstack.cpp
+SOURCE          irfirsttimeview.cpp
+SOURCE          irfirsttimecontainer.cpp
+SOURCE          irdialoglauncher.cpp
+SOURCE          iraddmanuallystationview.cpp
+SOURCE          iraddmanuallystationcontainer.cpp
+SOURCE          irstationdirectorycontainer.cpp
+SOURCE          irstationdirectoryview.cpp
+SOURCE          ircostwarningview.cpp
+SOURCE          ircostwarningcontainer.cpp 
+SOURCE          irsettingscontainer.cpp
+SOURCE          irsettingsview.cpp
+SOURCE          irstationsview.cpp
+SOURCE          irstationsviewcontainer.cpp
+SOURCE          ircategoryview.cpp
+SOURCE          ircategoryviewcontainer.cpp
+SOURCE          irtopstationsview.cpp
+SOURCE          irplsplaylistitem.cpp
+SOURCE          irplsplaylist.cpp
+SOURCE          irplsview.cpp 
+SOURCE          irplscontainer.cpp 
+SOURCE          irsystemeventcollector.cpp            //for system events
+SOURCE          iraccessoryobserver.cpp               //for system events
+SOURCE          irsystemeventdetector.cpp             //for system events
+SOURCE          irpropertyobserver2.cpp               //for system events
+SOURCE          irnowplayingwrapper.cpp
+SOURCE          irstationinfoview.cpp
+SOURCE          irstationinfocontainer.cpp
+SOURCE          irstationinfopicture.cpp
+SOURCE          irfilteredmodel.cpp
+SOURCE          mirlistboxarray.cpp
+SOURCE          irradioidle.cpp
+SOURCE			irdiskspacewatcher.cpp
+SOURCE			irdiskspacesession.cpp
+SOURCE			ircontroleventobserver.cpp
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+SOURCE          irbacksteppingservicewrapper.cpp
+#endif // __IRA_FEATURE_BACKSTEPPING_SERVICE
+
+SOURCEPATH      ../uicontrolssrc
+SOURCE          irimageconverter.cpp
+SOURCE          irimageconverterimpl.cpp
+SOURCE          irstationlogocontrol.cpp
+SOURCE          irstationlogodata.cpp
+SOURCE          irstationinformationdata.cpp
+SOURCE          irstationinformationdisplay.cpp
+SOURCE          irmarqueeclet.cpp
+SOURCE          iriconloader.cpp
+SOURCE          iradvertisinglistbox.cpp
+SOURCE			irlayoututils.cpp
+
+
+
+
+START RESOURCE  ../resources/internetradio.rss
+HEADER
+TARGETPATH APP_RESOURCE_DIR
+END  // RESOURCE
+
+START RESOURCE ../resources/internetradio_reg.rss
+// Do not change the UID below.
+LANG SC
+TARGETPATH /private/10003a3f/import/apps
+END
+
+USERINCLUDE     ../include
+USERINCLUDE     ../group
+USERINCLUDE     ../uiinc
+USERINCLUDE     ../settingsinc
+USERINCLUDE     ../uicontrolsinc
+USERINCLUDE     ../settingsviewinc
+USERINCLUDE     ../datastructuresinc
+USERINCLUDE     ../favoritesdbinc
+USERINCLUDE     ../songhistoryinc
+USERINCLUDE     ../networkcontrollerinc
+USERINCLUDE     ../streamsourceinc
+USERINCLUDE     ../sessionloginc
+USERINCLUDE     ../mediaengineinc
+USERINCLUDE     ../commandchannelinc
+USERINCLUDE     ../isdsclientinc
+USERINCLUDE     ../dataproviderinc
+USERINCLUDE     ../cachemgmtinc
+USERINCLUDE     ../xmlparserinc
+USERINCLUDE     ../presetplugininc
+USERINCLUDE     ../resources
+USERINCLUDE     ../help
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(libc)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+// TODO will be removed after the changes of /epoc32/include
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE   MW_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(mmf/common)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(xml)
+
+#ifdef MUL_USE_COMMON_COMPONENTS
+LIBRARY gesturehelper.lib
+#endif
+LIBRARY          agentdialog.lib
+LIBRARY          aknicon.lib
+LIBRARY          aknnotify.lib
+LIBRARY          aknlayout2.lib
+LIBRARY          aknlayout2scalable.lib
+LIBRARY          aknskins.lib
+LIBRARY          aknskinsrv.lib
+LIBRARY          alarmclient.lib
+LIBRARY          alfclient.lib 
+LIBRARY          apgrfx.lib
+LIBRARY          apmime.lib
+LIBRARY          apparc.lib
+LIBRARY          apsettingshandlerui.lib
+LIBRARY          avkon.lib
+LIBRARY          bafl.lib
+LIBRARY          bitgdi.lib
+LIBRARY          charconv.lib
+LIBRARY          commdb.lib
+LIBRARY          commonengine.lib
+LIBRARY          commsdat.lib
+LIBRARY          aknlayout.lib
+LIBRARY          cone.lib
+LIBRARY          downloadmgr.lib
+LIBRARY          ecom.lib
+LIBRARY          efsrv.lib
+LIBRARY          egul.lib
+LIBRARY          eikcoctl.lib
+LIBRARY          eikcore.lib
+LIBRARY          estlib.lib
+LIBRARY          estor.lib
+LIBRARY          etel.lib
+LIBRARY          etel3rdparty.lib
+LIBRARY          etelmm.lib
+LIBRARY          etext.lib
+LIBRARY          euser.lib
+LIBRARY          fbscli.lib
+LIBRARY          form.lib
+LIBRARY          fepbase.lib
+LIBRARY          gdi.lib
+LIBRARY          hal.lib
+LIBRARY          hlplch.lib
+LIBRARY          hwrmlightclient.lib
+LIBRARY          inetprotutil.lib
+LIBRARY          ircommandchannel.lib
+LIBRARY          irdatastructures.lib
+LIBRARY          irfavoritesdb.lib
+LIBRARY          irnetworkcontroller.lib
+LIBRARY          irsessionlog.lib
+LIBRARY          irsettings.lib
+LIBRARY          irstreamsource.lib
+LIBRARY          isdsclientinterface.lib
+LIBRARY          psclient100.lib
+LIBRARY          remconcoreapi.lib
+LIBRARY          remconinterfacebase.lib
+LIBRARY          svgengine.lib
+LIBRARY          ws32.lib
+LIBRARY          SWInstCli.lib 
+LIBRARY          imageconversion.lib
+LIBRARY          bitmaptransforms.lib
+LIBRARY          numberconversion.lib
+LIBRARY          irsonghistory.lib
+LIBRARY          eikctl.lib
+LIBRARY          ihl.lib eikdlg.lib
+LIBRARY          dsclient.lib
+LIBRARY          irdataprovider.lib             // for Logo Handling
+LIBRARY          PlatformEnv.lib 
+LIBRARY          gsecomplugin.lib
+LIBRARY          featmgr.lib
+LIBRARY          irsettingsview.lib
+LIBRARY          accclient.lib                  //For Headset Events
+LIBRARY          centralrepository.lib 
+LIBRARY          mediaclientaudio.lib 
+LIBRARY          StereoWideningEffect.lib
+LIBRARY          aknhlist.lib                   //for history's hierarichal list
+LIBRARY          msgs.lib                       //for message handling
+LIBRARY          msgs_autoshutdown.lib 
+LIBRARY          touchfeedback.lib
+LIBRARY          mpxviewplugin.lib
+LIBRARY          profileengine.lib 
+LIBRARY             mmfcontrollerframework.lib //to get the supported MIME types
+
+LIBRARY          flogger.lib
+
+#ifdef FF_IAUPDATE
+LIBRARY          iaupdateapi.lib 
+#endif
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+LIBRARY 	 liwservicehandler.lib
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/internetradio_aif.mk	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,53 @@
+#
+# Copyright (c) 2002-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:  This is file for creating .mif file (scalable icon)
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\internetradio_aif.mif
+
+ICONDIR=..\aif
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+RESOURCE :	
+	mifconv $(ICONTARGETFILENAME) \
+		/c8,8 $(ICONDIR)\qgn_menu_irradio.svg
+		
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/internetradioconfigurationflags.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+
+#ifndef INTERNETRADIOCONFIGURATIONFLAGS_HRH
+#define INTERNETRADIOCONFIGURATIONFLAGS_HRH
+
+ 
+#include        <bldvariant.hrh>
+ 
+
+// INTERNET RADIO FEATURE FLAGS 
+// Enabling: #define
+// Disabling: #undef
+
+/**
+* Flag to enable/disable gesture helpers.
+*/
+/*#ifdef MUL_USE_COMMON_COMPONENTS
+#define __IRA_FEATURE_GESTURE_HELPERS
+#else
+#undef __IRA_FEATURE_GESTURE_HELPERS
+#endif*/
+
+/**
+* Flag to enable/disable WMA support
+*/
+#define __IRA_FEATURE_WMA_ENABLED
+
+/**
+* Flag to enable/disable WMA support
+*/
+#define __IRA_FEATURE_EQUALIZER
+
+/**
+* Flag to enable/disable Back Stepping Framework usage.
+*/
+/*#ifdef FF_HOMESCREEN_COMMON_IDLEFW
+#define __IRA_FEATURE_BACKSTEPPING_SERVICE
+#endif*/
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+#undef __IRA_FEATURE_BACKSTEPPING_SERVICE
+#endif
+
+#endif // INTERNETRADIOCONFIGURATIONFLAGS_HRH
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/internetradioedwinskin.mk	Mon Apr 19 14:01:53 2010 +0300
@@ -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: 
+#
+#=====================================================================
+# Name : InternetRadioEdwinSkin.mk
+# Part of : InternetRadio
+#
+# Description:
+#
+#
+#=====================================================================
+#
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+# -------------------------------------------------------------------
+# TODO: Configure these.
+# -------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+ICONTARGETFILENAME=$(TARGETDIR)\internetradioedwinskin.mif
+
+HEADERDIR=$(EPOCROOT)epoc32\include
+HEADERFILENAME=$(HEADERDIR)\internetradioedwinskin.mbg
+ICONDIR=..\mbm
+
+do_nothing : 
+	@rem do_nothing
+		
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+		
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# -------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included
+# automatically by MifConv if the mask depth is defined.
+# -------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+		/c16 $(ICONDIR)\qgn_ir_background.svg
+	
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES : 
+	@echo $(ICONTARGETFILENAME)
+    
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/internetradioiconsskin.mk	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,69 @@
+#
+# 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: 
+#
+#=====================================================================
+# Name : InternetRadioIcons.mk
+# Part of : InternetRadio
+#
+# Description:
+#
+#
+#=====================================================================
+#
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+# -------------------------------------------------------------------
+# TODO: Configure these.
+# -------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\internetradio.mif
+HEADERFILENAME=$(HEADERDIR)\internetradio.mbg
+
+do_nothing : 
+	@rem do_nothing
+		
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+		
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# -------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included
+# automatically by MifConv if the mask depth is defined.
+# -------------------------------------------------------------------
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /Ficonlist.txt
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(HEADERFILENAME)&& \
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/iractionhandler.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2008-2008 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:  IR Action Handler Plugin
+*
+*/
+
+// To get the APP_LAYER_SYSTEMINCLUDE-definition
+#include 		<platform_paths.hrh>
+#include "../resources/iractionhandler.hrh"	
+
+TARGET          iractionhandler.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D KIRActionHandlerDllUid 
+
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+
+PAGED
+
+SOURCEPATH      ../resources
+START RESOURCE 2001A962.rss
+TARGET  iractionhandler.rsc
+LANG SC
+END
+
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+USERINCLUDE     ../actionhandlerinc
+USERINCLUDE     ../resources
+
+USERINCLUDE	   ../include
+
+SOURCEPATH      ../actionhandlersrc
+SOURCE          iractionhandler.cpp
+
+LIBRARY         ecom.lib
+LIBRARY         euser.lib
+LIBRARY         liwservicehandler.lib
+LIBRARY         ws32.lib
+LIBRARY         apgrfx.lib
+LIBRARY         apparc.lib
+
+LIBRARY            flogger.lib
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/iractiveidle.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 21, Tue Mar 11 20:00:00 2008 by Rohit
+*  Ref:
+*  Merged IRv1.0 Engine code changes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include 		<platform_paths.hrh>
+ 
+#include <data_caging_paths.hrh>
+
+
+
+TARGET iractiveidle.dll
+TARGETTYPE PLUGIN
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x2000B4AB
+//VENDORID 
+
+PAGED
+
+//source file
+SOURCEPATH        ../activeidlesrc	
+SOURCE		iractiveidle.cpp
+SOURCE		iractiveidlemain.cpp
+SOURCE          iractiveidlestatedetector.cpp
+
+//user include
+USERINCLUDE    ../activeidleinc
+USERINCLUDE	   ../include
+USERINCLUDE    ../uiinc
+USERINCLUDE    ../activeidleenginc
+USERINCLUDE    ../resources
+USERINCLUDE    ../group
+USERINCLUDE    ../streamsourceinc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+SOURCEPATH        ../resources
+
+//resource file
+START RESOURCE  2000B4AB.rss
+TARGET IRActiveIdle.rsc
+end
+
+SOURCEPATH          ../resources
+START RESOURCE      iractiveidle.rss
+LANG SC 01 02 03 04 05 06 07 08 09 10 13 14 15 16 17 18 25 26 27 28 29 30 31 32 33 37 39 42 44 45 49 50 51 54 57 58 59 67 68 70 76 78 79 83 93 94 96 129 157 158 159 160 161 326 327 401 402
+
+HEADER
+TARGETPATH          RESOURCE_FILES_DIR
+end
+LIBRARY 				eikcore.lib
+LIBRARY                 aiutils.lib
+LIBRARY                 apgrfx.lib
+LIBRARY                 apparc.lib
+LIBRARY                 avkon.lib
+LIBRARY                 bafl.lib
+LIBRARY                 commonengine.lib 
+LIBRARY                 cone.lib
+LIBRARY                 ecom.lib
+LIBRARY                 efsrv.lib
+LIBRARY                 euser.lib
+LIBRARY                 iractiveidleengine.lib
+LIBRARY featmgr.lib 
+
+LIBRARY            flogger.lib
+
+//capability
+//CAPABILITY LocalServices Location NetworkServices PowerMgmt ProtServ ReadDeviceData ReadUserData SurroundingsDD SwEvent TrustedUI UserEnvironment WriteDeviceData WriteUserData
+CAPABILITY              CAP_ECOM_PLUGIN		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/iractiveidleengine.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+// To get the APP_LAYER_SYSTEMINCLUDE-definition
+#include 		<platform_paths.hrh>
+
+TARGET        iractiveidleengine.dll
+TARGETTYPE    dll
+UID 0x1000008d  0x2000B4A7      
+
+PAGED
+
+//source file
+SOURCEPATH	../activeidleengsrc
+
+SOURCE        iractiveidleeng.cpp
+SOURCE        iractiveidleengpubsub.cpp
+
+USERINCLUDE    ../activeidleenginc
+USERINCLUDE    ../include
+USERINCLUDE    ../uiinc
+USERINCLUDE    ../streamsourceinc
+
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH	../resources
+
+START RESOURCE	internetradio.rss
+TARGETPATH resource/apps
+END
+
+LIBRARY                 estor.lib
+LIBRARY                 euser.lib
+
+LIBRARY            flogger.lib
+
+//CAPABILITY LocalServices Location NetworkServices PowerMgmt ProtServ ReadDeviceData ReadUserData SurroundingsDD SwEvent TrustedUI UserEnvironment WriteDeviceData WriteUserData
+CAPABILITY		CAP_GENERAL_DLL
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/ircachemgmt.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c)  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 		<platform_paths.hrh>
+
+TARGET        ircachemgmt.dll
+TARGETTYPE    dll
+UID          0x1000008d 0x2000B4A1
+
+PAGED
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+SOURCEPATH    ../cachemgmtsrc
+SOURCE        ircachemgmt.cpp
+SOURCE		  ircachecleanup.cpp
+USERINCLUDE   ../cachemgmtinc
+USERINCLUDE   ../include
+USERINCLUDE   ../settingsinc
+USERINCLUDE   ../datastructuresinc
+USERINCLUDE   ../dataproviderinc
+USERINCLUDE   ../networkcontrollerinc
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY             bafl.lib
+LIBRARY             edbms.lib
+LIBRARY             efsrv.lib
+LIBRARY             estor.lib
+LIBRARY             euser.lib
+LIBRARY             irdatastructures.lib
+LIBRARY             irsettings.lib
+
+LIBRARY        flogger.lib
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY		CAP_GENERAL_DLL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/ircommandchannel.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 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 		<platform_paths.hrh>
+
+TARGET        ircommandchannel.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B49B
+
+PAGED
+
+SOURCEPATH        ../commandchannelsrc
+
+SOURCE        irctrlcmdobserver.cpp
+
+USERINCLUDE       ../commandchannelinc
+USERINCLUDE       ../include
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY                 euser.lib
+
+LIBRARY            flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irdataprovider.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* 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 		<platform_paths.hrh>
+
+TARGET        irdataprovider.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B49C
+
+PAGED
+
+SOURCEPATH    ../dataprovidersrc
+
+SOURCE        irdataprovider.cpp
+SOURCE        irhttpdataprovider.cpp
+SOURCE        irdataprovidertimer.cpp
+SOURCE        irhttppost.cpp
+SOURCE        irlogodownloadengine.cpp
+
+USERINCLUDE    ../dataproviderinc
+USERINCLUDE    ../include
+USERINCLUDE    ../settingsinc
+USERINCLUDE    ../networkcontrollerinc
+USERINCLUDE    ../datastructuresinc
+USERINCLUDE    ../favoritesdbinc
+USERINCLUDE    ../presetplugininc
+USERINCLUDE    ../cachemgmtinc
+USERINCLUDE    ../sessionloginc
+
+APP_LAYER_SYSTEMINCLUDE
+// TODO will be removed after the changes of /epoc32/include
+SYSTEMINCLUDE    OS_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE    MW_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE    OS_LAYER_PUBLIC_EXPORT_PATH(mmf/common)
+
+LIBRARY             bafl.lib
+LIBRARY             cone.lib
+LIBRARY             efsrv.lib
+LIBRARY             euser.lib
+LIBRARY             http.lib
+LIBRARY             inetprotutil.lib
+LIBRARY             irnetworkcontroller.lib
+LIBRARY             irsettings.lib
+LIBRARY             irdatastructures.lib
+LIBRARY             irfavoritesdb.lib
+LIBRARY             psclient100.lib
+LIBRARY             ircachemgmt.lib
+LIBRARY             mmfcontrollerframework.lib //to get the supported MIME types
+LIBRARY             avkon.lib //to display the information note
+
+
+
+//test linker error
+LIBRARY cenrepnotifhandler.lib
+LIBRARY	commonengine.lib
+LIBRARY etel.lib
+LIBRARY etel3rdparty.lib
+LIBRARY etelmm.lib
+LIBRARY estor.lib
+LIBRARY xmlframework.lib
+
+
+//LIBRARY avctpplugins.lib
+//LIBRARY eintsock.lib
+LIBRARY impapprotocolcontroller.lib
+LIBRARY imut.lib
+LIBRARY netmsg.lib
+LIBRARY netmeta.lib
+LIBRARY nifman.lib
+LIBRARY pops.lib
+LIBRARY responsemsg.lib
+LIBRARY smts.lib
+
+
+//test end
+
+
+LIBRARY        flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irdatastructures.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2007 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 		<platform_paths.hrh>
+
+TARGET        irdatastructures.dll
+TARGETTYPE    dll
+UID            0x1000008d 0x2000B49A
+
+PAGED
+
+SOURCEPATH    ../datastructuressrc
+
+SOURCE		irbrowsecatagoryitems.cpp
+SOURCE		irchannelserverurl.cpp
+SOURCE		irisdspreset.cpp
+SOURCE		irbrowsechannelitems.cpp
+SOURCE		iradvertisement.cpp
+SOURCE		irotaupdate.cpp
+SOURCE		irlastplayedsongs.cpp
+
+USERINCLUDE    ../datastructuresinc
+USERINCLUDE    ../include
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY             bafl.lib
+LIBRARY             estor.lib
+LIBRARY             euser.lib
+
+LIBRARY        flogger.lib
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irfavoritesdb.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* 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:
+*
+*/
+
+#include 		<platform_paths.hrh>
+TARGET        irfavoritesdb.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B4A0
+
+PAGED
+
+SOURCEPATH        ../favoritesdbsrc
+
+SOURCE		irfavoritesdb.cpp
+
+USERINCLUDE     ../favoritesdbinc
+USERINCLUDE     ../include
+USERINCLUDE     ../settingsinc
+USERINCLUDE     ../datastructuresinc
+USERINCLUDE     ../presetplugininc
+USERINCLUDE     ../xmlparserinc
+
+
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+LIBRARY             estor.lib
+LIBRARY             euser.lib
+LIBRARY             irdatastructures.lib
+LIBRARY             irsettings.lib
+LIBRARY             psclient100.lib
+LIBRARY             irxmlparser.lib
+
+LIBRARY        flogger.lib
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY		CAP_GENERAL_DLL
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irgeneralsettings.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2006-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:  Project definition file for project vrgeneralsettings
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include        <bldvariant.hrh>
+
+TARGET                  irgeneralsettings200.dll
+TARGETTYPE              PLUGIN
+UID						0x10009d8d 0x2001A930
+
+//CAPABILITY LocalServices Location NetworkServices ReadUserData SwEvent UserEnvironment WriteUserData ReadDeviceData WriteDeviceData NetworkControl PowerMgmt 
+CAPABILITY              CAP_ECOM_PLUGIN
+VENDORID                VID_DEFAULT
+
+PAGED
+
+SOURCEPATH              ../resources
+START RESOURCE		    2001A930.rss
+TARGET                  irgeneralsettings200.rsc
+TARGETPATH              ECOM_RESOURCE_DIR
+
+
+HEADER
+LANGUAGE_IDS
+END // RESOURCE
+
+
+START RESOURCE          irgeneralsettings.rss
+TARGETPATH              RESOURCE_FILES_DIR
+
+HEADER
+LANGUAGE_IDS
+END // RESOURCE
+
+USERINCLUDE             ../generalsettingsinc
+USERINCLUDE             ../group
+USERINCLUDE             ../resources
+USERINCLUDE             ../settingsinc
+USERINCLUDE             ../settingsviewinc
+USERINCLUDE				../include
+//USERINCLUDE   			 ../networkcontrollerinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+LIBRARY                 aknskins.lib
+LIBRARY                 avkon.lib
+LIBRARY                 commonengine.lib
+LIBRARY                 cone.lib
+LIBRARY                 eikcoctl.lib
+LIBRARY                 eikcore.lib
+LIBRARY                 euser.lib
+LIBRARY                 gsecomplugin.lib
+LIBRARY					irsettingsview.lib
+
+LIBRARY           apparc.lib
+LIBRARY           efsrv.lib CommonEngine.lib
+LIBRARY           GSFramework.lib  bafl.lib
+LIBRARY           eikctl.lib  estor.lib /*eiksrv.lib */
+LIBRARY	flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+SOURCEPATH ../generalsettingssrc
+SOURCE irgeneralsettingsview.cpp irgeneralsettingsimplementationtable.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irmcpplugin.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2008-2008 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:  IR Music Content Publisher Plugin is responsible for publishing content and
+*                actions towards Home screen and Matrix menu.
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "../resources/irmcpplugin.hrh"	
+
+TARGET          irmcpplugin100.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D KIRMCPPluginDllUid
+
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+
+PAGED
+
+LANGUAGE_IDS
+
+SOURCEPATH      ../resources
+START RESOURCE 2001A961.rss
+TARGET  irmcpplugin100.rsc
+LANG SC
+END
+
+START RESOURCE  irmcpplugin.rss
+HEADER
+TARGET      irmcpplugin.rsc
+TARGETPATH RESOURCE_FILES_DIR
+END
+
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+USERINCLUDE     ../mcpplugininc
+USERINCLUDE     ../resources
+USERINCLUDE     ../activeidleenginc
+USERINCLUDE     ../include
+USERINCLUDE     ../actionhandlerinc
+USERINCLUDE     ../streamsourceinc
+
+
+SOURCEPATH      ../mcppluginsrc
+SOURCE          irmcpplugin.cpp
+
+LIBRARY         bafl.lib 
+LIBRARY         cone.lib
+LIBRARY         commonengine.lib
+LIBRARY         ecom.lib
+LIBRARY         efsrv.lib
+LIBRARY         euser.lib
+LIBRARY         liwservicehandler.lib
+LIBRARY         psclient100.lib
+LIBRARY         iractiveidleengine.lib
+
+LIBRARY flogger.lib
+
+#if defined( WINSCW )
+deffile ../bwinscw/ 
+#else
+deffile ../bmarm/ 
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irmediaengine.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* 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:  Container for data buffer, it has fields for holding
+*							: address and size of memory chunk
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET irmediaengine.dll
+TARGETTYPE PLUGIN
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x2000B4A8
+VENDORID 0x70000001
+
+PAGED
+
+//source file
+SOURCEPATH        ../mediaenginesrc
+SOURCE		irmediaengineproxy.cpp
+SOURCE		irmp3player.cpp
+SOURCE		iraacplayer.cpp
+SOURCE		irbuffercontainer.cpp
+SOURCE		irtestingaudioplayer.cpp
+
+//user include
+USERINCLUDE		../mediaengineinc
+USERINCLUDE             ../include
+USERINCLUDE             ../commandchannelinc
+USERINCLUDE             ../resources
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(mda/common)
+
+SOURCEPATH        ../resources
+
+//resource file
+start resource 2000b4a8.rss
+TARGET irmediaengine.rsc
+end
+
+LIBRARY             ecom.lib
+LIBRARY             euser.lib
+LIBRARY             ircommandchannel.lib
+LIBRARY             mediaclientaudiostream.lib
+LIBRARY             mmfserverbaseclasses.lib
+
+LIBRARY        flogger.lib
+
+//capability
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+
+CAPABILITY              CAP_ECOM_PLUGIN NetworkControl MultiMediaDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irnetworkcontroller.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* 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:  
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET        irnetworkcontroller.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B4A2
+
+PAGED
+
+SOURCEPATH    ../networkcontrollersrc
+
+SOURCE        	irnetworkcontroller.cpp
+SOURCE		    irnetworkobserver.cpp
+SOURCE		    irdatatransfertracker.cpp
+SOURCE          irfilteredapreader.cpp
+
+USERINCLUDE     ../networkcontrollerinc
+USERINCLUDE     ../include
+USERINCLUDE     ../settingsinc
+
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+// TODO will be removed after the changes of /epoc32/include
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE   MW_LAYER_PUBLIC_EXPORT_PATH(http)
+
+LIBRARY             apengine.lib
+LIBRARY             bafl.lib
+LIBRARY             centralrepository.lib
+LIBRARY             commdb.lib
+LIBRARY             commsdat.lib
+LIBRARY             connmon.lib
+LIBRARY             esock.lib
+LIBRARY             euser.lib
+LIBRARY             featdiscovery.lib
+LIBRARY             irsettings.lib
+LIBRARY             http.lib
+LIBRARY 	        inetprotutil.lib
+LIBRARY 	        cmmanager.lib
+
+
+//test linker error
+LIBRARY cenrepnotifhandler.lib
+LIBRARY	commonengine.lib
+LIBRARY etel.lib
+LIBRARY etel3rdparty.lib
+LIBRARY etelmm.lib
+LIBRARY estor.lib
+LIBRARY efsrv.lib
+LIBRARY xmlframework.lib
+
+LIBRARY impapprotocolcontroller.lib
+LIBRARY imut.lib
+LIBRARY netmsg.lib
+LIBRARY netmeta.lib
+LIBRARY nifman.lib
+LIBRARY pops.lib
+LIBRARY responsemsg.lib
+LIBRARY smts.lib
+
+
+//test end
+
+
+LIBRARY        flogger.lib
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irrecognizer.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2005 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: 
+*     This is the project specification file for RecognizerEx.
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET          irfilerecognizer.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x2000B4A9
+
+PAGED
+
+SOURCEPATH      ../filerecognizersrc
+
+SOURCE          irrecognizer.cpp
+
+SOURCEPATH	../resources
+
+START RESOURCE  2000b4a9.rss
+TARGET          irfilerecognizer.rsc
+END
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData
+CAPABILITY              CAP_ECOM_PLUGIN
+VENDORID        0
+
+USERINCLUDE     ../filerecognizerinc
+USERINCLUDE     ../include
+USERINCLUDE     ../resources
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+LIBRARY             euser.lib
+LIBRARY             apmime.lib
+
+LIBRARY        flogger.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irrfsplugin.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2007-2007 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:  Project definition file for project Internet Radio RFS plugin
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET                  irrfsplugin.dll
+TARGETTYPE              PLUGIN
+UID                     0x10009D8D 0x2000B4AC
+
+CAPABILITY              CAP_ECOM_PLUGIN
+VENDORID                VID_DEFAULT
+
+PAGED
+
+SOURCEPATH              ../rfspluginsrc
+SOURCE                  irrfsplugin.cpp
+SOURCE                  irrfspluginproxy.cpp
+
+SOURCEPATH              ../resources
+START RESOURCE          2000b4ac.rss
+TARGET                  irrfsplugin.rsc
+END // RESOURCE
+
+USERINCLUDE             ../rfsplugininc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+LIBRARY                 ecom.lib
+LIBRARY                 efsrv.lib
+LIBRARY                 euser.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irsessionlog.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2007-2007 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:  Project definition file for project Internet Radio sessionlog
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET        irsessionlog.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B4A6
+
+SOURCEPATH    ../sessionlogsrc
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
+PAGED
+
+
+SOURCE        irsessionlogger.cpp
+SOURCE        irsessionloggerutility.cpp
+SOURCE	      irsessiondb.cpp
+SOURCE        irnmslogdb.cpp
+SOURCE        irnmslogger.cpp
+SOURCE        irphoneinfo.cpp
+
+USERINCLUDE   ../sessionloginc
+USERINCLUDE   ../include
+USERINCLUDE   ../settingsinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY             bafl.lib
+LIBRARY             charconv.lib 
+LIBRARY             cone.lib 
+LIBRARY             edbms.lib 
+LIBRARY             efsrv.lib
+LIBRARY             estor.lib 
+LIBRARY             euser.lib
+LIBRARY             ezlib.lib 
+LIBRARY             irsettings.lib
+LIBRARY             sysutil.lib
+LIBRARY             etel3rdparty.lib
+LIBRARY             imut.lib
+LIBRARY             flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irsettings.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2007-2007 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:  Settings component definition file.
+*
+*/
+
+
+#include 		<platform_paths.hrh>
+#include            <data_caging_paths.hrh>
+
+TARGET              irsettings.dll
+TARGETTYPE          DLL
+UID                 0x1000008D 0x2000B4A3
+
+
+VENDORID            VID_DEFAULT
+//CAPABILITY          NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
+PAGED
+
+SOURCEPATH          ../settingssrc
+SOURCE              irsettings.cpp
+
+USERINCLUDE         ../include
+USERINCLUDE         ../settingsinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE    OS_LAYER_PUBLIC_EXPORT_PATH(mmf/server)
+
+SOURCEPATH          ../resources
+START RESOURCE      irsettings.rss
+HEADER
+TARGETPATH          RESOURCE_FILES_DIR
+END
+
+LIBRARY             bafl.lib
+LIBRARY             commonengine.lib
+LIBRARY             cone.lib
+LIBRARY             efsrv.lib
+LIBRARY             estor.lib
+LIBRARY             euser.lib
+LIBRARY             platformenv.lib
+LIBRARY				centralrepository.lib
+LIBRARY             mmfdevsound.lib
+
+LIBRARY        flogger.lib
+
+#if defined( WINSCW )
+DEFFILE             ../bwinscw/ 
+#else
+DEFFILE             ../bmarm/ 
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irsettingsview.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2006-2007 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:  Gives the history data
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET        irsettingsview.dll
+TARGETTYPE    dll
+UID           0x1000008D 0x10282BAF
+
+PAGED
+
+SOURCEPATH    ../settingsviewsrc
+
+SOURCE 		  ircommonsettingscontainer.cpp
+SOURCE		  irsettingsviewbase.cpp
+//SOURCE		  irsnapsettingitem.cpp
+
+
+USERINCLUDE    ../include
+USERINCLUDE    ../networkcontrollerinc
+USERINCLUDE    ../settingsviewinc
+USERINCLUDE    ../settingsinc
+USERINCLUDE    ../resources
+USERINCLUDE	   ../help
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+// TODO will be removed after the changes of /epoc32/include
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE   MW_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(mmf/common)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(xml)
+
+LIBRARY             bafl.lib
+LIBRARY             charconv.lib
+LIBRARY             efsrv.lib
+LIBRARY             euser.lib
+LIBRARY             estor.lib
+LIBRARY             irsettings.lib
+LIBRARY		        irnetworkcontroller.lib
+LIBRARY		        PlatformEnv.lib 
+LIBRARY             gsecomplugin.lib
+LIBRARY             featmgr.lib
+LIBRARY             avkon.lib
+LIBRARY             eikcoctl.lib
+LIBRARY             eikcore.lib
+LIBRARY             cone.lib
+LIBRARY             hlplch.lib
+LIBRARY			    CommonEngine.lib
+LIBRARY 		    cmmanager.lib		
+
+
+
+
+//test linker error
+LIBRARY cenrepnotifhandler.lib
+LIBRARY	commonengine.lib
+LIBRARY etel.lib
+LIBRARY etel3rdparty.lib
+LIBRARY etelmm.lib
+LIBRARY inetprotutil.lib
+LIBRARY xmlframework.lib
+
+
+//LIBRARY avctpplugins.lib
+//LIBRARY eintsock.lib
+LIBRARY impapprotocolcontroller.lib
+LIBRARY imut.lib
+LIBRARY netmsg.lib
+LIBRARY netmeta.lib
+LIBRARY nifman.lib
+LIBRARY pops.lib
+LIBRARY responsemsg.lib
+LIBRARY smts.lib
+
+
+//test end
+
+            
+
+LIBRARY        flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI CommDD PowerMgmt MultimediaDD DRM DiskAdmin NetworkControl 
+CAPABILITY CAP_GENERAL_DLL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irsonghistory.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006-2007 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:  Gives the history data
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET        irsonghistory.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2001A92F
+
+PAGED
+
+SOURCEPATH    ../songhistorysrc
+
+SOURCE 		  irsonghistorydb.cpp	
+SOURCE		  irsonghistoryengine.cpp
+SOURCE		  irsonghistoryengpubsub.cpp
+SOURCE        irsonghistoryinfo.cpp
+
+
+USERINCLUDE    ../include
+USERINCLUDE    ../songhistoryinc
+USERINCLUDE    ../streamsourceinc
+USERINCLUDE    ../uiinc
+USERINCLUDE    ../settingsinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY             bafl.lib
+LIBRARY             charconv.lib
+LIBRARY             efsrv.lib
+LIBRARY             euser.lib
+LIBRARY             edbms.lib  
+LIBRARY             estor.lib
+LIBRARY             irsettings.lib
+
+            
+
+LIBRARY        flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irstreamsource.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,95 @@
+/*
+* Copyright (c)  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:  Project definition file for project Stream source
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET          irstreamsource.dll
+TARGETTYPE      dll
+UID             0x1000008d 0x2000B49F
+
+PAGED
+
+SOURCEPATH	../streamsourcesrc
+
+SOURCE          irstreamsource.cpp
+SOURCE          irsockettimeouttimer.cpp
+SOURCE          iricyflowinitiator.cpp
+SOURCE          iricyflowreader.cpp
+SOURCE          irsocketopener.cpp
+SOURCE          irstationconnection.cpp
+SOURCE          irnetworkbuffer.cpp
+SOURCE			irasfplayer.cpp
+
+USERINCLUDE     ../streamsourceinc
+USERINCLUDE     ../include
+USERINCLUDE     ../mediaengineinc
+USERINCLUDE     ../networkcontrollerinc
+USERINCLUDE     ../uiinc
+USERINCLUDE     ../commandchannelinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+// TODO will be removed after the changes of /epoc32/include
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(http)
+SYSTEMINCLUDE   MW_LAYER_PUBLIC_EXPORT_PATH(http)
+
+LIBRARY         esock.lib
+LIBRARY         euser.lib
+LIBRARY         inetprotutil.lib 
+LIBRARY         insock.lib
+LIBRARY         irnetworkcontroller.lib
+LIBRARY			mediaclientaudio.lib 		// CMdaAudioPlayerUtility (ASF streaming)
+LIBRARY	        mmfcontrollerframework.lib  // CMMFMetaDataEntry (ASF streaming)
+
+//test linker error
+LIBRARY cenrepnotifhandler.lib
+LIBRARY	commonengine.lib
+LIBRARY etel.lib
+LIBRARY etel3rdparty.lib
+LIBRARY etelmm.lib
+LIBRARY estor.lib
+LIBRARY efsrv.lib
+LIBRARY xmlframework.lib
+LIBRARY charconv.lib
+
+//LIBRARY avctpplugins.lib
+//LIBRARY eintsock.lib
+LIBRARY impapprotocolcontroller.lib
+LIBRARY imut.lib
+LIBRARY netmsg.lib
+LIBRARY netmeta.lib
+LIBRARY nifman.lib
+LIBRARY pops.lib
+LIBRARY responsemsg.lib
+LIBRARY smts.lib
+
+
+//test end
+
+
+
+LIBRARY        flogger.lib
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY		 CAP_GENERAL_DLL
+
+#if defined( WINSCW )
+DEFFILE          ../bwinscw/ 
+#else
+DEFFILE          ../bmarm/ 
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/irxmlparser.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2006-2007 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:  Gives the data from the XMl File
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET        irxmlparser.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B49D
+
+PAGED
+
+SOURCEPATH    ../xmlparsersrc
+
+SOURCE 		  irxmlcontenthandler.cpp 	
+SOURCE		  irxmlelements.cpp
+
+USERINCLUDE    ../xmlparserinc
+USERINCLUDE    ../include
+USERINCLUDE    ../datastructuresinc
+USERINCLUDE    ../cachemgmtinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(xml)
+
+LIBRARY             bafl.lib
+LIBRARY             charconv.lib
+LIBRARY             efsrv.lib
+LIBRARY             euser.lib
+LIBRARY             ircachemgmt.lib
+LIBRARY             irdatastructures.lib
+LIBRARY             xmlframework.lib
+
+LIBRARY        flogger.lib
+
+#if defined( WINSCW )
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY				CAP_GENERAL_DLL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/isdsclient.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include 		<platform_paths.hrh>
+
+TARGET        isdsclientinterface.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x2000B49E
+
+PAGED
+
+SOURCEPATH        ../isdsclientsrc
+SOURCE        irisdsclient.cpp
+SOURCE		  irlanguagemapper.cpp
+
+USERINCLUDE       ../isdsclientinc
+USERINCLUDE       ../include
+USERINCLUDE       ../datastructuresinc
+USERINCLUDE       ../dataproviderinc
+USERINCLUDE       ../networkcontrollerinc
+USERINCLUDE       ../cachemgmtinc
+USERINCLUDE       ../xmlparserinc
+USERINCLUDE       ../sessionloginc
+USERINCLUDE       ../settingsinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(xml)
+
+LIBRARY             charconv.lib
+LIBRARY             euser.lib
+LIBRARY             inetprotutil.lib
+LIBRARY             ircachemgmt.lib
+LIBRARY             irdataprovider.lib
+LIBRARY             irsessionlog.lib
+LIBRARY             irsettings.lib
+LIBRARY             irxmlparser.lib
+
+LIBRARY        flogger.lib
+
+#if defined(WINSCW)
+DEFFILE         ../bwinscw/ 
+#else
+DEFFILE         ../bmarm/ 
+#endif
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY		CAP_GENERAL_DLL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/group/presetplugin.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c)  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 		<platform_paths.hrh>
+
+TARGET        presetplugin.dll
+TARGETTYPE    PLUGIN
+UID           0x10009D8D 0X2000B4AA
+
+PAGED
+
+SOURCEPATH    ../presetpluginsrc
+
+
+SOURCE		irpresetimpl.cpp
+SOURCE		irchannelserverurlimpl.cpp
+SOURCE		irpresetpluginproxy.cpp
+
+
+USERINCLUDE   ../presetplugininc
+USERINCLUDE   ../include
+USERINCLUDE   ../datastructuresinc
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+// RESOURCE
+SOURCEPATH              ../resources
+START RESOURCE          2000b4aa.rss
+TARGET                  presetplugin.rsc
+END // RESOURCE
+
+LIBRARY                 bafl.lib
+LIBRARY                 estor.lib
+LIBRARY                 euser.lib
+LIBRARY                 irdatastructures.lib
+LIBRARY                 psclient100.lib
+
+LIBRARY            flogger.lib
+
+//CAPABILITY NetworkServices ProtServ ReadDeviceData ReadUserData SwEvent UserEnvironment WriteDeviceData WriteUserData TrustedUI
+CAPABILITY              CAP_ECOM_PLUGIN
+
Binary file internetradio2.0/help/iraap.hlp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/help/iraap.hlp.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+//
+// iraap.hlp.hrh
+//
+
+//
+// File generated by cshlpcmp Version 011
+//
+
+#ifndef __IRAAP_HLP_HRH__
+#define __IRAAP_HLP_HRH__
+
+#include <e32cmn.h>
+
+_LIT(KIR_HELP_MAIN,"IR_HELP_MAIN"); //Main menu view
+_LIT(KIR_HELP_NOW,"IR_HELP_NOW"); //Now playing view
+_LIT(KIR_HELP_STATIONS,"IR_HELP_STATIONS"); //Stations view
+_LIT(KIR_HELP_ADD_URL,"IR_HELP_ADD_URL"); //Add URL to stations view
+_LIT(KIR_HELP_DISCOVER,"IR_HELP_DISCOVER"); //Station directory view
+_LIT(KIR_HELP_GENRE,"IR_HELP_GENRE"); //Browse by genre view
+_LIT(KIR_HELP_GENRE_STATIONS,"IR_HELP_GENRE_STATIONS"); //Stations for genre view
+_LIT(KIR_HELP_LANGUAGE,"IR_HELP_LANGUAGE"); //Browse by language view
+_LIT(KIR_HELP_LANGUAGE_STATIONS,"IR_HELP_LANGUAGE_STATIONS"); //Stations for language view
+_LIT(KIR_HELP_COUNTRY,"IR_HELP_COUNTRY"); //Browse by country view
+_LIT(KIR_HELP_COUNTRY_STATIONS,"IR_HELP_COUNTRY_STATIONS"); //Stations for country view
+_LIT(KIR_HELP_TOP,"IR_HELP_TOP"); //Stations for top stations view
+_LIT(KIR_HELP_SEARCH,"IR_HELP_SEARCH"); //Search view
+_LIT(KIR_HELP_RESULTS,"IR_HELP_RESULTS"); //Search results view
+_LIT(KIR_HELP_SETTINGS,"IR_HELP_SETTINGS"); //Settings view
+_LIT(KIR_HELP_PLS,"IR_HELP_PLS"); //Receiving stations via .pls file view
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/help/iraap_hlp.pdf	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,146 @@
+%PDF-1.3
+%ª«¬­
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R
+ >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 5
+/Kids [6 0 R 8 0 R 10 0 R 12 0 R 14 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.18.1-DEV) >>
+endobj
+4 0 obj
+<< 
+/Font << /F3 15 0 R /F2 16 0 R /F1 17 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+5 0 obj
+<< /Length 3395 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau`W=``=W&q801d+_<q1)sQ3k$b9[8[@Y6a4Z?8RYT/='J)N_f+b4D+cl[%J.do\&tgX[Gr'.kqEq#2I"^A&hu*&%cY,#%YMP?YRF0\=>L20Qg$p5)*TG@lT/`uLBCkNW^HZ#%GEI87qjI826Y8Pg-ABST<P4n$D`7W>?dL)/B=6Z!\W"s_fIrlLm&8BQ#n=T$\hD/fLUjf<q25hOhMX((`AM6cMV/BJ'Dg[-Jdu;nq^aFmmlGn"k47i1s8%!5T0GPI>[FlQd!C;;W4"rAHD=rW.)6`26B(skU"8[@Oj>L+qc[/(c5]Vu*>8.l3^)*D;h7GGlumBUO@>B\\Q)?83kk*\WX1i/'+BpCFV7KsDIeLqV2p98]jNDLR-/"S)e/KmShi3a;;V6\jL!!VRb`*>Eg?$eKsDho^h;N)<LTm^nf]TsLP8F;6^f8*+),$q!*HK,F.<o!*q;9F^"(]70PcWB]MOI\Ip$]]ioil#HHS.\EC7KnZRp7&gl:)>U\4)N9Lhkg[cZl7\pHuSmdH]OgqiA`b!MP:"@7f1/f&-s>oG#.'"*T0[00g!TS6usB^HS[Ma%d&-oZeK_[[+/ktE\Wm8bN+W4mEhD=R&M<Y_*GC%b'KA)6e7ngIY510D-p-GtAsXaGY"fr&htKdI'X#:n#/P&I*X7k7,3_"VBJL;'ld9;EAa[;W;]d&L5PXuEe;)aqOq9D?h3AcDa6lRZEu1'^,FH^YW]L@R`Lh4#/Ol6t&@>C#"DPAUS6>i)?SF[OEN?Yh3=kE^gaY[>D![8haPKF!.D>tGmn]3%6^=0=?72=%kX2\5D:;j.p(H$mD9=J#kLCS&CU?EXUXs%2XdhPa9EU<7QbjB)cKhFHiPpjTMrb]7cq9UFo7\f_(o1,i):(!,L`0_lP$PB$]PmV6DbZ[Fh^qDZZZZjs7>_kK].#J1W]-dZ]:RKfM:fc@0<;VTFKs,a<VlX]AP9h:`p7ZB`>(mZp]Codi6\fZ)!(+G?^UUW&S9JA`80/;+3LRtIk4Cs'*`U*cU(]el<gmY^&qh)P(Wr5C2?ZtJ3Z0k"1UEZ,`H:UBY#dYD(OoCn+f7kLY*W9>-rh$/M`3*%#,c\4o.-hYM5'=MgiecW)kt]q+oY/)=)C<TP/HD<Z9ZDT#@#?\sp^9FrK&&sqauHgWJq,l:j`jB3#IY*VQ[q=e*h'"E)7dq6TKW3TKn@;7hnEEjjI7/n0f&lMi.AWSR]g$#ltGr6;f[dSY)5@J$'g-lE&[V2aK3F4lju_C#(a3h-C2Q0h!K2Q!q&(;E>oIRR7do=T)BG&p.<-Io1:n_q'94aKMK;j*F4]qI!195]4pJAC32!@',m=g/]=;EA#$<E4j.MPr3r6b9,61NL5`>a1%#V<j*;dDZ8\]3;j`&00ga6Gh?m$apT!-G1eKom/p2hI*B<8o+qV/&0;DY+`WQ!+]=[5P:c//@'nm-A]16mYA.i>p\6+/Y8Cf\ke-BPf`k[h`q9`je!RbTK`,4m-o=BsC*JO*U;G.SqLMk+j!2N?%OD)%"R7^4f.NWbci&EV:N.HeV_l:K7G1F(R@%h*'?=j]Xf]*Y+-e80OBZNtjP@-K-S=i3J7lt%cTgGrtr,J/3V&V2#F4=Hm3t1UZ0((u,lnZLDi-MiQdQ$Zdn'hH<XRjrO1"G6`Kq]qJ@Bk,>!3jdb)(!RbfVFaRBWffNrFud8?"/F/`"H,ra2)V\7gf;%7Mco,/ld)9R\g(Y"RLB7p*p7NXuMFi.FSos8,]hgo+KKB&CMn/Dp4+2n\3P[:Lga\-lA7j.q/:j'l0SV#4:@LjG1Gce-bl:^K$YsOG$<fV.I9"g`B/_YXcN#d(f!-b0i?IU4\#tHWi%E*g:fP'oOVUYVK:q@rKmal8KCAT]](WqQ5?RXF%shMB=NS1O#W6D.DAEjo5qcMq3?1nd_d?FD*lB+<XqaNoqKKAGIQ'Qu3f67t>pgOSYZc9^`XqB#oC,Y)pg,PJF+WniS='><7cFhO=3oq2'ZfBe_rWZtoS/<ZJ.TfK_tEA3.pdNVs]D20@:_*2HVX6Jb3\ks4']G#,.jC0Oj8M5!IRN%j0RF"!qgj9/m6Li?U)R#t(70[Rj=LC9)q9PglB0$6Iur.#t1o#F+>giin?o@QXV[7YPoM#6+k=?O[tN5\`iniKU`L)qf/a,Nr;!.&JZ3N;0KVLpVEG9FHh8;4cI+)IgSNY3aR,P]Z\5/Mf!$gQ280<.KNa2"W1+?\EA,K#X.;[\QuVXOKrZ,h"pPT)lVFb@'T6[rd#`YJY-'3.#'D"Np8(=b$F*V'gUR*sQk)*D^$#[p[_+O?/'fGe&#W<:r9'.J]+.t8V_6#btJJDp;N;@\U?bA,oh)M[p0#P2BAKR4p5cl.t:QQ=KK7o0^_(SJ[b#5W#uTg;"OPBs0mU2TI\UE1>sUX/'9/<@fC+s2'.c-->,H=l`A_<(\NntAMA!ou_tb+R)JY=(U^\d9K%DN#T<k5eW+Tp\W.#1DIBIPJV8Ed]a`4L>cH(@L-A5I:(82lKgf(`0Ceq2#kcqa]9P)7pO$X'9M\`rai(>(R;5+<6H6E[=ECW_9i`<K/%7Ef*?toA8]]YL[sf1hkL]?#dBYLdn#>McK0gbf=2$P="pgg#u@EN\`f)NL[/E?rYdmcL216KNa=n=h"VkD`4'(X"VNBGUabj_c9&LnR=U\%BoW>r3AFbUF>V=Ml:AIqSA5(WYulRN:A-kW`D9.3Nf@g)(rFYXubb.MlDhmTg"q=7B#g`)e(@j%Mr*gQoUfN\*0^RT\'_[$$%.CckKO8:u?)YV-XXHVajqi<L.Mu2uSK<BSJo?BUk\K%4.,s>ZVCln*bGc"V)82*doN!1>'jqURaQ-C:r*92_8A(?IAuQps;BHeN-;VT6MFmQ6aKP:cW\S/##HM_^qK?>Sh@d:PBhoibh#7i/H(+)qFi$o?luCA[0mT%[E,da\X@U+3=t]=#1X,NbO_"&t);d+W26\a'ch]3*N$GcZ)TKkWHY;LF7QC/YN@p9J07]$+8o'mWmrFj);r@Q#[mF2"7`.]qZ!g"(d'RIo(h_8D/3YH&c+J09i^T@-7>Tc,qI(*rAsqeo8PlcZ!k$<5XhIc$sLg3;R^M?4f+uXZ@+'/:a2.o[F&HNfa?kCH7!q&>\aZ$P#k/[bMT,Y2(phYC8$DNoAC\M2"MU-Ol,+J#Ea_c1F'lFl/3IcqcjTC#^.l*.Z=O=p&0=Y><KN0-(#!RtF$5-hIL'jV)MA2@)HXT'k]Y%Q4StOR$9Fk$XrkJF`3p2[:95*$jdJ2[<QjKYLQXig"K\'=_^4c_J!`8k1n0Qf4YfCmUd67>L'&><%!['-18>iU[Z/+io[.KSL%F7XJ_cg&o1iHn=oO/7u'N#^pab6fs'GCM9a>IWb1%pF!(#I@S(J)u)O7LB~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 5 0 R
+>>
+endobj
+7 0 obj
+<< /Length 3040 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau`W=``U]&q6H[_7*.=-=#QgQ%r=!)/"-$]Ug]ZPF#fqMABWY2&+.V.67D%$VEOm.=_Q_A"IMY5^0!Na4K/:YH)mIr1-uD>-%OENoaB]ZH<F<*O1VH!nVU#bBI6]qk:FO>(?Nj)stV*ekad+CrcCGWhVVsZYK8I)eHW09qQmArb&A4/]gpA3)I(iLP28l0IG(mS%@ZOr6rpBIpHCZpZoeR%q!*,>kKpE9B1+QTu6:u%Ko..7OJfZ?eddR^Pf0/AWf1bhp`T9-B:_rJ]$XEXb\4$*&^?Qe.q%NMJ.o-<2/0+nicmp($iFq4$0%Ij$3Z\F+RQm7qB6:Y.F;UEG_%?]\sYIoqVFkaG7/>7?Jq_m[D["#]ji$:qTZKKQ(Z>5JX<a26+tj4m8Sui[!,r%$/Faj%,_1Bd8Y1ModbP`pLS5$ot\PP<T8j`USW7SbU>%J=^P30#o5SV7CkX0J'bNoVf%PK1eoWZZ98#q`cPfG;gMOC[E)1c!mMZB$jXE!?tnY:\eo'n/,`E7M9?qU^"XX.LHag&`>gFPMSh,HrhZ&!,>)hWn-C)0pCOjdO"[(NfI8BKE8o_38U&q)@GgFo3@W-RLYt)M'pQ!*++,e7L)7)[-Dnud4BD+TEuU"o:0;gAi#1NbkS"R!Y;hV&#8YV-a5acGM"tATeq0IaTl?YI%AmKB.\6ujEX,*j(^omgKg)GJL/o?hq@.s.&0t)DRC/(#>$ZcH]d%"f&-&":9n0>""#]#0(NaY$FNEojC+flj8k%gkNNJ&oJQc-2NG5nK@!d#7XD+o+[F0\\V?jeN'>F9FuFUaCQ((cqd^."B.,`I;:(pV2ne%+jl!;]q9jX,=#0]$K/#%\b"fasmj\?Ck>&*'q9A+;9(pIb<;`;;f.<]i<hrMn>'4Y##mg.3dn]:`''smgbD]@5:(HLumJ1=@>0$?9,tSV?rfY<oo1lgpA$.`Tlhh=tfee"9j=lRp5-_eO@)A"-?3jhk3UfmO+V-julNQL\m1XKFn":(1"H/Lqepf..6dPgYZ@dK"ZSU>Z5,JG.^)PJLg8qA(VU45F&cF.I;dCM6'&p092DnD5&L8p,E3`(9"H)nMP"'Z[=T"pUE#7Yc<$VnL#(&<YP(:mGU[e_'R$h]Jb6/Q'e^trK]?l.f3%:\rk,!&T`Ytlr=(<=9h>[-DO3=$gEf<T:lDjp'I0*8QM=:/FLeRI/o.9u%4d_5gMO<]=_Ml^<!Mq1L^a_$5mdERn116+-#)AI8A.39X&\(&]0NFr,W.T=/DpT:sUnJjfeOF\M]H8&\EfmSW"<Lm_YY:6EB=lBL@B21"$u9eE/c$`T2#&Z<ACN&f8MK:f;qcaDJ7C%n%s<N_eFs4.<_5R?+@29Z[>9<5L3Y9/QbOZeU\2Bfq.$8+o`pVE@`hqB_D!haFS@3]kZ"5_`"WCoFZ^KI=TLLl16Y#!qbDeE>X+0,d>5-Gkm`rQ3k)o$[PfR4*u`(Fh:>bb`8-?Q"0S9%N\nm"FpF\C6N`Jo%l(m<"&U+D_YAS0a&J65*]M2eK4r+g,q@1.T7^Zs=6<AmNiF#L*=E<NQQF/:)9>M!WOeEud=NRW2&>I11D[KLb#m6j/up?$ZUBi/)ppGM-:cL@d+orRe=M&RXn68D-D=u:KPJ/@SujE88upJ93rU7Z^:^G,O=W.%[!n8V>#/+.mEg$H&5t8>Nbr)'h%b4?9-XoDDjoiVG\q"iK*)1KXBE5p[M[T-BTKa],q`JH$ZQ&;f"6b-F6d,K6-:mbG7!<QPQBB#UY\F]cDl'p"ZQB\oe%C1e!sM.[X*.`AIZ$G<n'hTSJWHRU\?j=e?IfNbc#<Va5T;:V(d;"f;D@6<j!!EMBYh=P"5&K7`?P]cg*^:j;7#pW^;LY"PilZF!C^=dc_O*W`-a4IO\+@?orK6hYBV]M5IHIr6^07pE[terHs*hB;M%5J%WG.\X[D1oXf8;@^A[=l(K5K75rf@"/iG:SISB0BKI-P%14]sdIDVU6#n?YffYKj7.9t_q'_Xmg^Y<9aG(@rR_nPsULX['D20'OPfYUi,E@2A6@$[dKKIr(?id_C,C#P]cOqoleAnW90)0_Pa!$il3qp[HA*:fG\Z3$+._J9=oje-'((nih(Dl9>Gkptq4CSPY0o'`q.C91C-;"%b(i@VL1XFM>?,DIf4="'aJCJ(,O,%kKLi@ZG6tMpjO2/<07V1/:LuCM.]b5S?b\NVT^QL`"=/2hK7eM([aH"T'$F`!o)Yb^Uk#T/-^d7KIP%RM4Zgk^4j6.gt\MEn.kKuXVA2`Jm+I\dZCK`<`oe1mX\\tbSRE\%7B4La48f00SY^EVahf+h30nS`;5kCMV[e)CMB,R0,,k:f3K_*&o^16G[LjL23mkrG/AX\D?kO:SAV4&:BRpHrXpMth9hV/,.:'(WkEkE*\mp_VVJ=F8-W97JH1MAU=j6#9k]:f+T_#;m>e]$h&kNc=cPg?>,DTf`\(pXs5J?j@?+B%c(b)nI(!PU4<1`LG,!r1"JKTQ(UK-#8\LN>^LD$'30_oD6:7QoOEb5ntr.DV9YPAk#lD)m,I:BPtKk@;L3+75L#q!:ErH6'dke9%'[d?`?'+*=1eluc-`q+U1C;\':4+)`+L"\Ck0p=1pE>goB,UCKPAn&^oINE+&5O*A7jbJ6k83$a!=Q[p/%$LI/&?O$3DJPglWQ[t\IKP8ToF^G>rllBi>pbQ4\FtQ,ac*JM`s2%n5$sMcdC=.D/"nVh(3gDI'/-U]7@WQ*(D$kq-n'NL'=dBYD,VJou!iVdL_)$3kG?8*4nJJ,^(TaFBi#3&n(3kI?dm>d&?.-0S0(A29Dd-$Jgj,c6EI-&EN=/?E-8K@ATIknX$a`FU\=gcZ'\qpZY(+R5"X<m"`W_(DECo2BKSD-t>"33(1E%'cc<6,7&qJ_cX2Y>56%X>fj+;O41<m`0VMttjl#dm\`!&-h]/2./Q]a!cMX4f=$qB,k)B&<CLQUlT*#mTRi(]YS0>iM(rjJ)3F`IBMbJhMc;.[5'*p0E>nj@/IeEb83AWsp%L0nZ<k]6@as4^NRf`~>
+endstream
+endobj
+8 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 7 0 R
+>>
+endobj
+9 0 obj
+<< /Length 3025 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#_D/\/u')nJ0ToUePDRhE*P5Ps-kp<k];Q#>9!l`t=TV]%bKH^S_P0a1-QF9?0OLsT=bmAt%Yro?Kq_BtR4JTQW^\[%4SV=EGh(*Des,,)arC;@q'@39SJO]d6cK=HG^OMX65L+^i5tJZA&%b4mF?`bUebp'JiZsM%;t*Xe`Dr(6h$7Yah/D>#<H]H1=`;"RcK>/l]-D%Qc?9+DM*%9cZUtt#Wk(ti`QJCo>cM8"/C[JbP>j-6]qo)mn`Nha9JXbI(PUN*+"H$R$FH_H-".M2^UC8YhiQ/FfrN@E9bpMP<SD7cmLp?kXCsIX"X>i0Z1ROYMW]Vt=H%Xe1KTLY@mn\8`LH#d9iifh-b)hWI3En+BQ]&,id2;Rfsf9o,!:UVh\>lR$/Xh3j7$2TDqNMtgg?/1pViq$jQn)n`5-;Qa3-nV<_7IQNXkRB2fV\@Mes@KAg_9=3RMXQ#/HtSdhK`+DM`([DO`;0+,)1;ZO:*l\U`8t)uloZM<uXbLbRu;A->57Snrk`^(Vt&V7`^6]nJRA%Bfb<MRlThm-.!d*ZMj\nCetIC1Y,QepscB#aR]KB2F,/<-="kq]BFg`cM3Pic&=J9C')kXO+8-Xi?(>Oq]TJb=rm>WhoOa9*$*jc"NQB?M"r[8EJlD4:;Kg,%"`Kf6t,Nl!cHjJ_0qLqj;\=;#Yl\NfE?E4J)Bh\sG/D25!?l'JBk2b;ZG.qN)`X>qj#tXE=M-DUW#jH.ZOjq9POA>erJYPq2agFU=lF?3fnHgKW/+be7DcK(V`!Em8]W+GFFm61qSIhP_NIgpPU^V:PgSQ/!6CO5\mm0KSFQOo11KC43c?O?ann(L\W"fu6QRH2itq+-u1EhPT3Zj2GJpb?M^]*8KUH<`q1PKlGXbpp]\P=f+DKG>iCD>(S#AQeSYgTU'W(9^_=JTs=tte`0,e/!]RU!1cn.g3h@"gZo\UOBl+a>"71$]WR7=MYgQ61A-G/U1_Z!:#U^Z]YaA-?>!4UaT7nJ&L4B:U/,.qq=_^u?Tq_#^]/]Srp?&Aq:5E;O4Q>hLGirVKFGG7?s109i%$4%!.;#;!Trh`T*<sgmS3IbkDU;MRnlga9T%e;\i0mg&1JoK@&uZHq^\C9gkoApE/B7d_G1QW*qHpGTj#SH"I;6U6"hCURmj3t4f:H$@h"#$?74sl+<[f."p%;fUHq-Qg>Efo?+isRg?HXFqe">(W%a!<RZs)+/qs0&F_hVPlL8[VG^ei7WSIOb6/5c/Q*Rk$qGi2WKJbrP*6NS3-4@&ib'77YI&VuNr*h-U49.#s<BHJ/:A)(Ydm\\SDa?9\s4cVr[SUS&<lt<_AdCN-?(Prc?jTf!QLR"j8Dl5[JcrS]ESY^:0E7/=/5#CoZQ,L\.Sh2r^dnR*i_71[#eP\;orq?meBn!L1Wsi3oBfG.MYO4R$RM+eZRoV6^K$2:>Io>_0"BrXh^Wlq<M@tNFe%/iF%C@!bopB44(Wf("0N(s,(.OWnP9+S<2uGoH';_P5QH-\(pBTslXCT$]\$3PVqY&(948ifL=^[tk?.LoBgJcfg@MOII(EJB+^T(B:O+'H?!%K9i5f(=OCC^`[%[-19pjcmMa0h*PI)1l)pO-\Os`eYiD/D72$0Q&"I#J]\PX#2`K?TS3bE,Y_<g:1'dEHp;A3a&;lL'-PG1,r_72Jk0VJ=Me-&t<-u)*K*Q-0hTdCT[Fl=$LJpG1@k76TZW<oAB)/=am!8;i7C4_2&"cSsF:!`kCk_i=PPQ`<f;\S<]*c>te<CHtHkla(FVq[6lgTqR.IJeIUs7H%B-P6\%VB=V%n?Bg!aTA^@.tk39)r.(GFiM`nF'+Sq2o7CkmXSf<J6cJPC/u)uN6rEJDFR!JjR%JULJRgM'R&IfFDE5%UQ*>B]H.s30hutX[+H%1L@KhSM1MrkrO4u89@W5F3'(2Y+>+?L@jR`(Z.4"\Q^2m&I;$Pf5\/e8miR&=QMG(;>=6SBFpX2XXTQ`)U*`@HW-Sa@:cH*s4g]scAd$M&]juQY=MYTs)q'pe%b^Wr5ot?G3FlV<cFXUY6Q3BoS3o3#i)&/8p=ncjH#T!'Q57$6Z9$TGPmOrR4@+@#+-B;?mW5!60'Y02i&1enmhEm9"7Q[-G+TBp>ki!Jhfp#h.@CS%Di[7H:;n,=;#UaA06D;,_=0L@62oFKDliN")=f^UI?4_qKDb,Y$[11E6hr1XcZOB5Wu"Yp1[&cTio%uj0+7Uq%iCi%T*b-K\I/k[?O6?a[XH8YRn<=iL_]QkQ3?QH1$j+Q8[]!]$Z5UC;p!T2$5g/ak*#+_[PnX>4YIG-#b4DNX`#7o.*&QA4^/3/!%V0&.hD:C+ii"`k[2hV-M8D(e7C2,'MBP#!!qD!:uBf4F)E0'jOW9qJ=ns%A:U#ODc=D`/if4]Tb"*"s'1=9>-F"7N)*T0J0aIDcZnAu%?"B(2Xha2-X.\O0`TWd5mWPR7OOF*T<S>P('b`oRnu$2EU`ZT18/Lm1"S_EaV2h:+rl;dM[<tTLNVO'fa6cs4HH;u_&kD*CdJ=8]"a:DA`jt^"NO7dH1Y?Zcsfq%+feOIKQT`l>$[)KoEf$M\u8J33RE(Naf94gSApd&WIYd:4Jlqb'HjPcE(nrPk9-9J1o>*H/d7N]NO_;(Nm%[TYq[%7VD3j\&]pZ/\NgOpb$6Wf*=lR2=Qh_$CCEN)':907c;DeSrVMp#<]3Dn-kN:2(JK.1SNN-\AM0(mAXEk=r3mSG2BE.YGGia%>bIM[$SrSUoP>bqF^BYoD=S.=*F6[.jY!Kbs06If?-GP4ksAHJ*ggRAhhJ;4^C/f-EroXP5LlQUFClge(_KPr-02ok/(+,c,DU7WpZkFAZ*Y/pThAq[ECVg:;BhkA9-;;K8=t.Dfj[3<`-W9Ehkfa9b_*fs$,3/%8o%[_[-Zrq;<"h\9@*4S8:V07>Y+ds[t5&27GJkHh[u7fg;r4t\-*,DKbK^O'e[`Vp`ON/8gJqBIMj28R-U1/'-1en+CZU*ZFPP(^:EcTpJ8N4oQL6!s)gWfSH~>
+endstream
+endobj
+10 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 9 0 R
+>>
+endobj
+11 0 obj
+<< /Length 3412 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#_=`<(T&q801kdR)_M+/2YCE<]$cK(@H-QC]T//F_oJ8VW/_J6>G7sk1&QYPibP"8.b+'IYNZH9+UZ2!ji.f/W"=$M-VX(\ot^2d<,YK4l:s2Z[M*RF=Y@2M"u:KHf;l9@LDWdML+lffM%Wul4YRe0tKNT`S>EKD./SI(n^?h^Q%?g(R82^3U^qX81tO-(GKgtRCEV5d.F^#6@$#a,AdJ(FY7.`@hUlUl!'rlJO_B(^&Frh.\S#A3Au4d69(p/dZ?SOi4S[8*LW`t.gYmmCZFp<(s,s&1kJi:2I'%O#pJ61rqA;V^qP.YF$$,ql+;$>B:DbVGSlK+3t)NQ!-,ofDh00BK''iEiCU/4EmX5oOeU5U+[l8)!IHG4U^Y4hk(EZNT\c\[b"8a"-73N)j*J;gpC2I;)\M^>is&DIdp._%/d<+6`mn;RYfHnq6q-V*KL`j=3moFG"!f%$#ulJH4bl6DS'hg-UfrcQQ/9L&H)Mpra:n!HS=bn=6,Q)FEHY'G#YZ,\HLmkknjfma5-pMm,>8c39?^&%S'NK<(i[!M2(0#"G-8B6__J_f4/9iN30;?=.jQc6***s&#24oiZjP>t=B=kUj7.9aDqp"[c^50/C^:4R+Yl_#T'rB)opmP;@T,RPWmsbC.6#GjP/$<,S/rAm7?>>S:L+E:)1@VY(]1(te*1CA>pS!46g=87aO#["/3413$B&?Ugk+JGVVWU6Z&0]%d@<#;/r(Q&a(<n@Q_9o/dqAU!Zt\YPg.g.pY*RPMfn/2a"\n3k6UH>@+/AQ$fnM7:C0A!RSS_1+Ort#M$:3fU8M?9`G+[NFibH!Op!Jfs\g./7^#ggTAOc2P[7ahi$IY*\bcu^]@_.d9q%m6T_g0&/.(nr#S`Fi]V7n>1kC??4AbJhdKsKDE#m#2Zm-?n'ab7f?d"sTd1*JM/4GaU#U:9k5:99n'A`GEUj%aq(J@piT-"H]3[]>?,';bk4g?b)1])hh6#bXX^NpfbEtBiKubtT^:HfQ-*T;f4%N#BDsYK2M"Sdc0!`WG0K"8%JVPW*05FHYO7;@W4ciBW!oNP-V-:_@dXalK4ka_HKa28mW+j4+KoODF^E;3"\;aYW]7T#[As1".W#tTE?GeNn37r9h]I4i11,"/R)HI7n!rP9G5a.0YmVT=#rocU=OX;te\^-?3C_ekcYIENJi]H:S+F[eVc9)GXHO9R:;\lZ'1rmi>(]hfbE:K[m:W`Tti5`,fk)s''EqW"5mj)P=nL/;m*N:(*.\>3OY/Lj=W)JZn87[!D7V?`ENMp!M/_+q=*tA8QH2dC4$lG0R\WmcS&:bl+"FMaB(@ej8r[8S1LC]ri[h+;1;a7o3>Q"SQaVrg)"h[5E!OW(@Bi9eU1F`d3@;m-En:TSR/]].uk`eLrKSh*'=a4+D_XW].8<B?[b"*q?:>dBnP`\cQ>UPTS8>p_N0V\)11D2P/Gqp")+;B9cN.aN`r3R>u(P0L&U)Afcks=*9,X\p\dM34PHG^LG-(Y?_q'IONIt)H`[_A-T8k9qRgj$b9`\g;7(Q>N"iF7g8a06F,!l`4u!`\(R`kl9rKOPu')C&l%PDFQ\;+6\&JS3*"-Rbc"*!cXXJ^:>1p9M5!S1'9bN3`hgm&EBi_!4Oe^NM(=q%:&0-^7G(1J#JNUjr[IU,%^>Q)[(XM8/baW$(&Q-JcaY94=E:+>bHM'a`c;#_4m(DfeP8&-c273ik]X)Ti"LO/SrGhm#[>gh5g_i<'`rqE3ZI'bQ%lhd\_[:tEKQ"Iq7!LO`m,TFCq@bor;^%d&q_*ZG&6>s/Bend@AKBV5r_ctn0.VI%NXK<Xe->&MBO7L9pI8hU0Nh8c"2EOCg@2),KD\s]d70lq"j0[Ufjh1C%(m@(%mebLE^#?.^aU-=f'[9-VaodIXTjqd8<a4DRIbo,)0FOokV<d/tC_,CY-)c1MO;cHX3eXgga/GP\b.BSj<_"s3d9'6\.@7R4qjP%E<jB;n#9QTe2MgRoEV6M_1IC$HHYGJTA7"D2KA1aY.*s0rAnQJP#6i_a^Be?0@b.qB:lu&*)n_[/;@2_--k$^9J<DtqO!/#XlC.bOk!L,gNRPMTo]\&'-L1SXF8m"?L^lRt1;k_-C4gh,*ed>"S[3l_^N9WP+SVo!Hk(KN`PSc7i2Qb)#6##da+-m:@W.rabf#P)^lWTco]s@s[@P+?sngULJp"eHsqR=cm-S$X:!8*Q=:DE$RSFOT!BGNG!S?6te`gGn/1t;"+&#N%n?>3*(fF@?R/!4=&IuIWi7ka,?17pNYop;]+Bgo*p)B+$5o<i]^K:N]<6hP5P8+>^[>"GF8d/g^U6g\PBY\+aG]_]I^@$6KQUJC<)U5\st$nTH8CpPJpbZ/MU?gm3Lb&<VZ/%&#ZJu/LYE"On"ie(PB`d3;n-J<q19d_'+UHA/Sb2/t=r#Y!W`N;;pnf:=,oBR@J]E\j%?`*&><8@ooL>&s/S''B@k_u7@[20uC]n!:_,\36T!>B/UTKUlDidhbc=WgJPkF5\31Rad&RI.IhKeb`goIqI9XUt]EATOFX4'<9]DLh@CjZ0thpeFg[1E?:"ZWX?P?m@""eb'CB0e+IXSd=_)Fc_I$@9V%u@@O<3$ui0u,P+WTZ9Cq.a\73PN7hC84T[UZY>f)h=Rua\)d[m)YV%PaQSARVT\n<klZE7eE_>rI!4&0(>jWleO&i_#Y2l]W;g#"ac;2@*9qI&b^C0T`2#cO%o8Dj%?-*_$1CU'(E9clV^k`Ojd"<)ISOPd'Bh[`M)e!(=M5>X]:,s.e5<d@'N&ed.o>hH/^TVL'5cs(eqS?J4[\d%7a8\fHr?*1"&tTcUdDua_M`[?mj'aIQGjpjWft5RgQJWZ(0*GsAZE-8@T#q[N*S/*Q+JZHh'i-_-^;*Bp^)I`d%09iHUKS$0#a$Y</\le]P3N80\>7JT!?WUsc*bbS(:10(eTo=k)]o-.5,l/_;:mWS&&()P=L#OoE*Q-mK<n).qp2Hg5['G*o9c<DcVC12WkM+%0B,G!a6hEkq"i]b3FVu*:Ti@d$I8FbR5U4u62,AgMa&^ZOePhZRFbG=hd4CeLj1:f-Snnu2\[49a$/t$h5nsdiH7[u>^2^c"pr'IO`PBOKJhplB".8dWpr7IdOGK1L?Bafc5%-S#Q`JJIm]ZaQCjeR!,F%%\4Hi&$/>)VGS$@i5)"qeVC2irUY2U%?402KrK-3p?kWJ/Q5W\$=Oss*5&k3I4)=ATD!2Ud;Xd(4</\!SIG;1<W)6;R9VE&>I)=6`96g:<^#$b3#g@**JhjM:>A4aM2@#X1'W5\&!FAJW&g:X7`2;r9!"4k99IbJc-Tns5aT1T$24#2n%WnGLgK*5Y6D:jL*R?h1O,pI,fC^/i$=hD=]qG&un]s:#.C2JB\,CeZUZqaRec,V@m<_%~>
+endstream
+endobj
+12 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 11 0 R
+>>
+endobj
+13 0 obj
+<< /Length 373 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat$t_+k(U&A@O6E3+nm$sd8OGVHCZ*]-`3`WKqSP$QaQ_'],-=5,?D6Yd)HAsbOGbl_i`0j=XXOBNG']bc2i^\S)NKHVKE((?<$7'@9S?D/e_'ddVB=<EK[ECeAsh"m[rD;B>t=a"Z2jFQ:-U^XEOQeBa[HUI)W<%NeQ<kD@"Cc^VT)4jbm[FsMdqm+FmiUtc,RQ`sTY5RWp[+<tq[__`']ZLPMZRG0)*Y+?3YInSn1)u*^Mu!?d*#X</R%I2=D18AS!sHUT8cTN-NA3BT#Ug9eb&Ubco':74FNS+D@!>o^!+7;!1$3`2">^+B-QdjoL._P<8;\_Tqsqe9[`J^1]3m[46HhRXPtc(d`[s8+h5TBQ*5'Cr~>
+endstream
+endobj
+14 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 13 0 R
+>>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+xref
+0 18
+0000000000 65535 f 
+0000000015 00000 n 
+0000000065 00000 n 
+0000000150 00000 n 
+0000000210 00000 n 
+0000000311 00000 n 
+0000003798 00000 n 
+0000003904 00000 n 
+0000007036 00000 n 
+0000007142 00000 n 
+0000010259 00000 n 
+0000010366 00000 n 
+0000013871 00000 n 
+0000013979 00000 n 
+0000014444 00000 n 
+0000014552 00000 n 
+0000014665 00000 n 
+0000014781 00000 n 
+trailer
+<<
+/Size 18
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+14889
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/help/irapp_hlp.helpsource.htm	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,32 @@
+<!--Arbortext, Inc., 1988-2004, v.4002--><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><title>irapp_hlp.helpsource.htm</title><meta name="Generator" content="Arbortext Epic Version 5.1"><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><style type="text/css">
+.b {font-weight: bold}
+.s {font-family: sans-serif}
+.l14al {line-height: 14pt; text-align: left}
+.l14p8 {line-height: 14pt; padding-top: 8pt}
+.f14sb {font-size: 14pt; font-family: sans-serif; font-weight: bold}
+.l14alp3 {line-height: 14pt; text-align: left; padding-top: 3pt}
+.f16sb {font-size: 16pt; font-family: sans-serif; font-weight: bold}</style><script type="text/javascript" language="JavaScript"><!-- 
+var fltpopupht = 400;
+var fltpopupwd = 480;
+var fltwin;
+function FltOnClick(hrefstr,popupnum) {
+  var winleft = (screen.width - fltpopupwd) / 2;
+  var wintop = (screen.height - fltpopupht) / 2;
+  winprops = 'height='+fltpopupht+',width='+fltpopupwd+',top='+wintop+',left='+winleft+',scrollbars=yes,resizable';
+  winprops += ',status=no,menubar=no';
+  popupname = "popup" + popupnum;
+  if (fltwin && fltwin.open) {
+    fltwin.close();
+  }
+  fltwin = window.open(hrefstr, popupname, winprops);
+  if (parseInt(navigator.appVersion) >= 4) {
+    fltwin.window.focus();
+  }
+}
+function CloseFltwin() {
+  if (fltwin && fltwin.open) {
+    fltwin.close();
+  }
+}
+// -->
+</script></head><body style="line-height: 16pt" onunload="CloseFltwin()"><div class="pgbrk" style="padding-top: 48pt"><div class="l14al" style="text-align: justify"><span class="s">Non-product-specific help for S60 3.0 and 3.1 products.</span></div><div style="line-height: 28pt; padding-top: 18pt"><span class="f14sb" style="font-size: 24pt">Nokia Internet Radio</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Internet radio</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">web radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">net radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Nokia Internet Radio is a network service. Before you can listen to radio stations on the web, you must have a wireless LAN or packet data access point defined in your device.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Note: Using packet data access points may involve transmission of large amounts of data through your service provider&#8217;s network. Contact your service provider for information about data transmission charges.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select:</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="b" style="font-family: sans-serif">Last played station</span><span class="s"> to listen to your last played station.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="b" style="font-family: sans-serif">Favourites</span><span class="s"> to view and listen to your saved stations, and to add stations to your favourites.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="b" style="font-family: sans-serif">Station directory</span><span class="s"> to find radio stations on the web.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="b" style="font-family: sans-serif">Search</span><span class="s"> to search for stations on the web by their name.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Add station manually</span> to save a station to your favourites. Enter the web address of the station and a name that you want to appear on the favourites list.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Add to stations</span> to save the last played station to your favourites</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Now playing station</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To stop playback, press the scroll key. To resume playback, press the scroll key again.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Note: Listen to music at a moderate level. Continuous exposure to high volume may damage your hearing. Do not hold the device near your ear when the loudspeaker is in use, because the volume may be extremely loud.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To adjust the volume, use the volume key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view station information, scroll down.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">If you are listening to a station saved in your favourites, scroll left or right to listen to the previous or next saved station.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Station information</span> to view general station information(not available if you have saved the station by manually entering its address). Scroll right to view the station&#8217;s recently played tracks. Scroll right again to view additional information, such as the available connection speeds for the station.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Add to stations</span> to save the currently playing station to your favourites</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Saved stations</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">managing stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">favourites</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view and listen to your saved stations, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> ><span class="b">Favourites</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To add stations to you favourites, select <span class="b">Find more stations...</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To delete a station from your favourites, scroll to it, and press <span class="b">C</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Tip: To view only stations beginning with particular letters, start entering the letters, and matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Station</span> > <span class="b">Details</span> to view station information</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Station</span> > <span class="b">Move</span> to move a station up or down on the list</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Station</span> > <span class="b">Delete</span> to remove a station from your favourites</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Add station manually</span> to save a station to your favourites. Enter the web address of the station and a name that you want to appear on the favourites list.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Find and save stations manually</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">saving stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">finding stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To find and save a station by entering its web address, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Options</span> > <span class="b">Add station manually</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Enter the web address of the station and a name that you want to appear on the favourites list.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save the station to your favourites, press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to the station, select <span class="b">Options</span> > <span class="b">Listen</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View station directory</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">finding stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To find radio stations on the web by different criteria, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select how you want the available stations sorted:</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Browse by genre</span> to view the available radio station genres. To view the stations in a genre, select a genre.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Browse by language</span> to view the languages in which there are stations broadcasting. To view the stations, select a language, and press the scroll key.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Browse by country</span> to view the countries in which there are stations broadcasting. To view the stations, select a country, and press the scroll key.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Top stations</span> to view stations sorted by their popularity</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View radio station genres</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">station genres</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view the available internet radio station genres, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Browse by genre</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view the stations in a genre, scroll to the genre, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View stations in a genre</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">stations by genre</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">finding stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">saving stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To find radio stations on the web by their genre, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Browse by genre</span>, and select a genre.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save a station to your favourites, scroll to it, and select <span class="b">Options</span> > <span class="b">Add to stations</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Tip: To view only stations beginning with particular letters, start entering the letters, and matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View radio station languages</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">station languages</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view the available internet radio station languages, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Browse by language</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view stations broadcasting in a particular language, scroll to the language, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View stations by language</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">stations by language</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">finding stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">saving stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To find radio stations on the web by their language, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Browse by language</span>, and select a language.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save a station to your favourites, scroll to it, and select <span class="b">Options</span> > <span class="b">Add to stations</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Tip: To view only stations beginning with particular letters, start entering the letters, and matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View radio station countries</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">stations in countries</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view the countries which have internet radio stations, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Browse by country</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To view stations in a particular country, scroll to the country, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View stations by country</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">stations by country</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">finding stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">saving stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To find radio stations on the web by their country of origin, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Browse by country</span>, and select a country.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save a station to your favourites, scroll to it, and select <span class="b">Options</span> > <span class="b">Add to stations</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Tip: To view only stations beginning with particular letters, start entering the letters, and matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">View most popular stations</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">stations by popularity</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">finding stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">saving stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To find radio stations on the web by their popularity, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Station directory</span> > <span class="b">Top stations</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save a station to your favourites, scroll to it, and select <span class="b">Options</span> > <span class="b">Add to stations</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Tip: To view only stations beginning with particular letters, start entering the letters, and matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Search for stations</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">station search</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To search for radio stations on the web by their name, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Options</span> > <span class="b">Search</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Enter a station name or the first letters of it to the search field, and press the scroll key. Matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Add station manually</span> to save a station to your favourites. Enter the web address of the station and a name that you want to appear on the favourites list.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Station search results</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">search results</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Stations matching your station search are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save a station to your favourites, scroll to it, and select <span class="b">Options</span> > <span class="b">Add to stations</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Tip: To view only stations beginning with particular letters, start entering the letters, and matching stations are displayed.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To make another search, select <span class="b">Options</span> > <span class="b">Search again</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Select <span class="b">Options</span> ></span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Go to now playing</span> to open the Now playing view</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Add station manually</span> to save a station to your favourites. Enter the web address of the station and a name that you want to appear on the favourites list.</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Update application</span> to update the Internet radio application</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Settings</span> to change the default access point and select connection speeds for the different connection types</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available options may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Internet radio settings</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">radio settings</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">settings, internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To change internet radio connection settings, select <span class="b">Menu</span> > <span class="b">Applications</span> > <span class="b">Internet radio</span> > <span class="b">Settings</span>.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To select the default access point to connect to the network, select <span class="b">Default access point</span>. Select <span class="b">Always ask</span> if you want the device to ask for the access point every time you open the application.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">Note: Using packet data access points may involve transmission of large amounts of data through your service provider&#8217;s network. Contact your service provider for information about data transmission charges.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To change the connection speeds for different connection types, select from the following:</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">GPRS connection bit rate</span>&#8212;for GPRS packet data connections</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">3G connection bit rate</span>&#8212;for UMTS packet data connections</span></div><div class="l14alp3" style="text-align: justify; text-indent: -5.1%; padding-left: 5.1%"><span class="s">&#8226;<span>&nbsp;</span>&nbsp;<span class="b">Wifi connection bit rate</span>&#8212;for wireless LAN connections</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The quality of the radio broadcast depends on the selected connection speed. The higher the speed, the better the quality.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">The available settings may vary.</span></div><div style="line-height: 18pt; padding-top: 12pt"><span class="f16sb">Receive links to stations</span></div><div class="l14p8" style="text-align: justify"><span class="s" style="font-style: italic; color: green">internet radio</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s" style="font-style: italic; color: green">links to stations</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">You may receive links to internet radio stations in a .pls file from compatible devices or services. To view the links in a .pls file, open the file.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To listen to a station, scroll to the link to it, and press the scroll key.</span></div><div class="l14al" style="text-align: justify; padding-top: 7pt"><span class="s">To save a station to your favourites, scroll to the link to it, and select <span class="b">Options</span> > <span class="b">Save</span>.</span></div></div></body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/include/ircmdlineparams.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008 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:  Command line parameter interface for Internet Radio.
+*
+*/
+
+
+#ifndef IRCMDLINEPARAMS_H
+#define IRCMDLINEPARAMS_H
+
+#include <e32def.h>
+
+/**
+ * Command line option for activating certain view at startup.
+ * For internal use.
+ */
+_LIT8( KIRCmdLineOptionView, "-view" );
+
+/**
+ * Command line argument for now playing view.
+ * For internal use.
+ */
+_LIT8( KIRCmdLineArgumentNowPlaying, "nowplaying" );
+
+/**
+ * Full command line parameter for activating now playing view at startup.
+ * External applications should use directly this literal.
+ */
+_LIT8( KIRCmdLineParamViewNowPlaying, "-view nowplaying" );
+
+#endif //  IRCMDLINEPARAMS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/include/irconnectionroamingobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2008-2008 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:  The interface for observing the application level roaming events
+*
+*/
+
+
+#ifndef M_IRCONNECTIONROAMINGOBSERVER_H
+#define M_IRCONNECTIONROAMINGOBSERVER_H
+
+#include <e32def.h>
+
+/**
+ * The interface for observing the application level roaming events
+ */
+NONSHARABLE_CLASS( MIRConnectionRoamingObserver )
+    {
+public:
+
+    /**
+     * The connection roaming event type
+     */
+    enum TIRRoamingEvent
+        {
+        /** 
+         * The new connection is being established 
+         */
+        EIRRoamingEventHandingOver,
+
+        /**
+         * The new connection is established and the old one will be closed
+         */
+        EIRRoamingEventConnected,
+
+        /**
+         * The establishment of the new connection has failed and the old connection will be used
+         */
+        EIRRoamingEventFailed
+        };
+
+    /**
+     * Notifies of the application level roaming event
+     * 
+     * @param aEvent The event that occured
+     */
+    virtual void HandleRoamingEventL( TIRRoamingEvent aEvent ) = 0;
+    };
+
+#endif // M_IRCONNECTIONROAMINGOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/include/irdebug.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2004-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:  Debug macros
+*
+*/
+
+
+#ifndef IRDEBUG_H
+#define IRDEBUG_H
+
+
+#include <e32debug.h>
+
+///////////////////////////////////////////////////////
+///////////////////////////////////////////////////////
+// Debug usage
+//
+// Set IR_DEBUG_LEVEL to desired level to get debug logs that are equal or more severe 
+// than the value set. E.g. IR_DEBUG_LEVEL_ERROR will print out ERROR and FATAL logs.
+//
+// Set IRDEBUG_TRACE_TO_FILE to get enable file logging.
+//
+///////////////////////////////////////////////////////
+
+// Available debug levels. Internal. Don't touch these
+
+#define IR_DEBUG_LEVEL_NONE    0
+#define IR_DEBUG_LEVEL_FATAL   1
+#define IR_DEBUG_LEVEL_ERROR   2
+#define IR_DEBUG_LEVEL_WARNING 3
+#define IR_DEBUG_LEVEL_INFO    4
+#define IR_DEBUG_LEVEL_DEBUG   5
+
+/////////////////////////////////////////////////////////////////////
+// DEBUG SETTINGS:
+// To enable /adjust debug output, modify values ONLY in this section
+/////////////////////////////////////////////////////////////////////
+//#define IRDEBUG_LOGGING_ENABLED
+//#define IRDEBUG_TRACE_TO_FILE
+
+
+/////////////////////////////////////////////////////////////////////
+// DEBUG SETTINGS:
+// DO NOT Edit below sections
+/////////////////////////////////////////////////////////////////////
+
+#ifdef IRDEBUG_LOGGING_ENABLED
+#define IR_DEBUG_LEVEL IR_DEBUG_LEVEL_DEBUG
+#define IRDEBUG_LEVEL  IR_DEBUG_LEVEL_DEBUG
+#else
+#define IR_DEBUG_LEVEL IR_DEBUG_LEVEL_NONE
+#define IRDEBUG_LEVEL  IR_DEBUG_LEVEL_NONE
+#endif
+
+#ifdef IRDEBUG_TRACE_TO_FILE
+    #include <flogger.h>
+    _LIT( KIRDebugLogDirectory, "internetradio" );
+    _LIT( KIRDebugLogFile, "internetradiolog.txt" );
+    const TFileLoggingMode KIRDebugLoggingMode = EFileLoggingModeAppend;
+#endif
+
+#if IR_DEBUG_LEVEL > IR_DEBUG_LEVEL_NONE
+
+#ifdef IRDEBUG_TRACE_TO_FILE
+        #define IRRDEBUG_DESC( a ) \
+            { \
+            RFileLogger::WriteFormat( KIRDebugLogDirectory, \
+                                      KIRDebugLogFile, \
+                                      KIRDebugLoggingMode, \
+                                      a ); \
+            }
+            
+        #define IRRDEBUG( a ) \
+            { \
+            RFileLogger::WriteFormat( KIRDebugLogDirectory, \
+                                      KIRDebugLogFile, \
+                                      KIRDebugLoggingMode, \
+                                      _L( a )); \
+            }
+                     
+        #define IRRDEBUG2( a, b ) \
+            { \
+            RFileLogger::WriteFormat( KIRDebugLogDirectory, \
+                                      KIRDebugLogFile, \
+                                      KIRDebugLoggingMode, \
+                                      _L( a ), b); \
+            }
+            
+        #define IRRDEBUG3( a, b, c ) \
+            { \
+            RFileLogger::WriteFormat( KIRDebugLogDirectory, \
+                                      KIRDebugLogFile, \
+                                      KIRDebugLoggingMode, \
+                                      _L( a ), b, c); \
+            }
+            
+        #define IRRDEBUG4( a, b, c, d ) \
+            { \
+            RFileLogger::WriteFormat( KIRDebugLogDirectory, \
+                                      KIRDebugLogFile, \
+                                      KIRDebugLoggingMode, \
+                                      _L( a ), b, c, d); \
+            }
+            
+        #define IRRDEBUG5( a, b, c, d, e ) \
+            { \
+            RFileLogger::WriteFormat( KIRDebugLogDirectory, \
+                                      KIRDebugLogFile, \
+                                      KIRDebugLoggingMode, \
+                                      _L( a ), b, c, d, e); \
+            }        
+#else // IRDEBUG_TRACE_TO_FILE
+        #define IRRDEBUG_DESC( a ) RDebug::Print( a )
+    
+        #define IRRDEBUG( a ) RDebug::Print( _L( a ) )
+                     
+        #define IRRDEBUG2( a, b ) RDebug::Print( _L( a ), b )
+            
+        #define IRRDEBUG3( a, b, c ) RDebug::Print( _L( a ), b, c )
+            
+        #define IRRDEBUG4( a, b, c, d ) RDebug::Print( _L( a ), b, c, d )
+            
+        #define IRRDEBUG5( a, b, c, d, e ) RDebug::Print( _L( a ), b, c, d, e )
+#endif // IRDEBUG_TRACE_TO_FILE
+           
+#else // IR_DEBUG_LEVEL > IR_DEBUG_LEVEL_NONE
+    #define IRRDEBUG_DESC( a )
+    #define IRRDEBUG( a )
+    #define IRRDEBUG2( a, b )
+    #define IRRDEBUG3( a, b, c )
+    #define IRRDEBUG4( a, b, c, d )
+    #define IRRDEBUG5( a, b, c, d, e )
+#endif
+
+////////////////////////////////////////////////////////////////////
+// The interface macros
+///////////////////////////////////////////////////////////////////
+
+
+#if IRDEBUG_LEVEL > IR_DEBUG_LEVEL_NONE
+    #define IRLOG_FATAL( a ) IRRDEBUG( "InternetRadio [FATAL]: " L##a )
+    #define IRLOG_FATAL2( a, b ) IRRDEBUG2( "InternetRadio [FATAL]: " L##a, b )
+    #define IRLOG_FATAL3( a, b, c ) IRRDEBUG3( "InternetRadio [FATAL]: " L##a, b, c )
+    #define IRLOG_FATAL4( a, b, c, d ) IRRDEBUG4( "InternetRadio [FATAL]: " L##a, b, c, d )
+    #define IRLOG_FATAL5( a, b, c, d, e ) IRRDEBUG5( "InternetRadio [FATAL]: " L##a, b, c, d, e )
+#else    
+    #define IRLOG_FATAL( a ) 
+    #define IRLOG_FATAL2( a, b )
+    #define IRLOG_FATAL3( a, b, c )
+    #define IRLOG_FATAL4( a, b, c, d )
+    #define IRLOG_FATAL5( a, b, c, d, e )
+ #endif
+
+#if IRDEBUG_LEVEL > IR_DEBUG_LEVEL_FATAL
+    #define IRLOG_ERROR( a ) IRRDEBUG( "InternetRadio [ERROR]: " L##a )
+    #define IRLOG_ERROR2( a, b ) IRRDEBUG2( "InternetRadio [ERROR]: " L##a, b )
+    #define IRLOG_ERROR3( a, b, c ) IRRDEBUG3( "InternetRadio [ERROR]: " L##a, b, c )
+    #define IRLOG_ERROR4( a, b, c, d ) IRRDEBUG4( "InternetRadio [ERROR]: " L##a, b, c, d )
+    #define IRLOG_ERROR5( a, b, c, d, e ) IRRDEBUG5( "InternetRadio [ERROR]: " L##a, b, c, d, e )
+#else
+    #define IRLOG_ERROR( a )
+    #define IRLOG_ERROR2( a, b )
+    #define IRLOG_ERROR3( a, b, c )
+    #define IRLOG_ERROR4( a, b, c, d ) 
+    #define IRLOG_ERROR5( a, b, c, d, e )
+#endif
+
+#if IRDEBUG_LEVEL > IR_DEBUG_LEVEL_ERROR
+    #define IRLOG_WARNING( a ) IRRDEBUG( "InternetRadio [WARNING]: " L##a )
+    #define IRLOG_WARNING2( a, b ) IRRDEBUG2( "InternetRadio [WARNING]: " L##a, b )
+    #define IRLOG_WARNING3( a, b, c ) IRRDEBUG3( "InternetRadio [WARNING]: " L##a, b, c )
+    #define IRLOG_WARNING4( a, b, c, d ) IRRDEBUG4( "InternetRadio [WARNING]: " L##a, b, c, d )
+    #define IRLOG_WARNING5( a, b, c, d, e ) IRRDEBUG5( "InternetRadio [WARNING]: " L##a, b, c, d, e )
+#else
+    #define IRLOG_WARNING( a )
+    #define IRLOG_WARNING2( a, b )
+    #define IRLOG_WARNING3( a, b, c )
+    #define IRLOG_WARNING4( a, b, c, d )
+    #define IRLOG_WARNING5( a, b, c, d, e )
+#endif
+
+#if IRDEBUG_LEVEL > IR_DEBUG_LEVEL_WARNING
+    #define IRLOG_INFO( a ) IRRDEBUG( "InternetRadio [INFO]: " L##a )
+    #define IRLOG_INFO2( a, b ) IRRDEBUG2( "InternetRadio [INFO]: " L##a, b )
+    #define IRLOG_INFO3( a, b, c ) IRRDEBUG3( "InternetRadio [INFO]: " L##a, b, c )
+    #define IRLOG_INFO4( a, b, c, d ) IRRDEBUG4( "InternetRadio [INFO]: " L##a, b, c, d )
+    #define IRLOG_INFO5( a, b, c, d, e ) IRRDEBUG5( "InternetRadio [INFO]: " L##a, b, c, d, e )
+#else
+    #define IRLOG_INFO( a )
+    #define IRLOG_INFO2( a, b )
+    #define IRLOG_INFO3( a, b, c )
+    #define IRLOG_INFO4( a, b, c, d )
+    #define IRLOG_INFO5( a, b, c, d, e )
+#endif
+
+#if IRDEBUG_LEVEL > IR_DEBUG_LEVEL_INFO
+    _LIT( KIRDebugMarker, "InternetRadio [DEBUG]: " );
+    #define IRLOG_DEBUG_DESC( desc ) \
+        { \
+        RBuf tmp; \
+        tmp.Create(KIRDebugMarker, KIRDebugMarker().Length() + desc.Length() ); \
+        tmp.Append(desc); \
+        IRRDEBUG_DESC(tmp); \
+        tmp.Close(); \
+        }
+    #define IRLOG_DEBUG( a ) IRRDEBUG( "InternetRadio [DEBUG]: " L##a )
+    #define IRLOG_DEBUG2( a, b ) IRRDEBUG2( "InternetRadio [DEBUG]: " L##a, b )
+    #define IRLOG_DEBUG3( a, b, c ) IRRDEBUG3( "InternetRadio [DEBUG]: " L##a, b, c )
+    #define IRLOG_DEBUG4( a, b, c, d ) IRRDEBUG4( "InternetRadio [DEBUG]: " L##a, b, c, d )
+    #define IRLOG_DEBUG5( a, b, c, d, e ) IRRDEBUG5( "InternetRadio [DEBUG]: " L##a, b, c, d, e )
+#else
+    #define IRLOG_DEBUG_DESC( desc )
+    #define IRLOG_DEBUG( a )
+    #define IRLOG_DEBUG2( a, b )
+    #define IRLOG_DEBUG3( a, b, c )
+    #define IRLOG_DEBUG4( a, b, c, d )
+    #define IRLOG_DEBUG5( a, b, c, d, e )
+#endif     
+
+////////////////////////////////////////////////////////////////////
+// Other debug related definitions
+///////////////////////////////////////////////////////////////////
+
+#if IRDEBUG_LEVEL > IR_DEBUG_LEVEL_NONE
+    #define IRDEBUGVAR( a ) a
+    #define IRDEBUGCODE( a ) a
+#else    
+    #define IRDEBUGVAR( a )   
+    #define IRDEBUGCODE( a )
+#endif
+
+
+          
+#endif          
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/include/irinternalcrkeys.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2005-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:  Visual Radio central repository keys.
+*
+*/
+
+
+#ifndef IRINTERNALCRKEYS_H
+#define IRINTERNALCRKEYS_H
+
+#include <e32cmn.h>
+
+/** The UID of the category we use. Must be the same as Visual Radio's UID3 (SID). */
+const TUid KCRUidInternetRadio = { 0x2000B499};
+
+
+const TUint32 KIRGprsBitRate = { 0x00000001};
+const TUint32 KIR3GBitRate = { 0x00000002};
+const TUint32 KIRWifiBitRate = { 0x00000003};
+const TUint32 KIRDefaultAccessPoint = { 0x00000004 };
+const TUint32 KIRUserDefinedAccessPoint = { 0x00000005 };
+const TUint32 KIRUserDefinedBearerID = { 0x00000006	};
+const TUint32 KIRUserDefinedNetworkID = { 0x00000007 };
+const TUint32 KIRDefaultMaxPresetCount = { 0x00000008 };
+const TUint32 KIRStereoMode = { 0x00000009 };
+const TUint32 KIRDefaultPlayVolume = { 0x00000010 };
+const TUint32 KIRCostWarningFlag = { 0x00000011 };
+const TUint32 KIRTermsAndConditionsFlag = { 0x00000012 };
+const TUint32 KIRUpdateAvailablity = { 0x00000013 };
+const TUint32 KIRTimeOutDuration = { 0x00000014 };
+const TUint32 KIRSilencePeriodDuration = { 0x00000015 };
+const TUint32 KIRSilencePeriodStartingTime = { 0x00000016 };
+const TUint32 KIRDefaultIsdsUrl = { 0x00000017 };
+const TUint32 KIRDefaultIrId = { 0x00000018 };
+const TUint32 KIRIrappVer = { 0x00000019 };
+const TUint32 KIRDefaultTimeCorrection = { 0x00000020 };
+const TUint32 KIRUserDefinedSubscriberId = { 0x00000021 };
+const TUint32 KIRUserDefinedLogRunningNumber = { 0x00000022 };
+const TUint32 KIRUserDefinedRunningChannelId = { 0x00000023 };
+//added for ALR/SNAP
+const TUint32 KIRUserDefinedSelection = { 0x00000024 };
+const TUint32 KIRUserDefinedDestinationId = {0x00000025 };
+
+const TUint32 KIRIfAnyFavFlag = {0x00000026 };
+
+//added for starting view
+const TUint32 KIRStartingViewId = {0x00000027};
+const TUint32 KIRStartingViewParameter = {0x00000028};
+const TUint32 KIRStickyViewFlag = {0x00000029};
+const TUint32 KIRPreferredQuality = {0x00000030};
+
+//added for songhistory show enable
+const TUint32 KIRSongHistoryShow = {0x00000031};
+
+//added for global advertisement
+const TUint32 KIRGlobalAdvFlag = {0x00000032};
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/include/irpubsubkeys.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRPUBSUBKEYS_H
+#define IRPUBSUBKEYS_H
+
+#include <e32def.h>
+#include <e32cmn.h>
+
+/** 
+ * enum to indicate the state of iRAPP application
+ */
+enum TIRPSApplicationRunningState
+    {
+    EIRPSApplicationUninitialized,
+    EIRPSApplicationRunning,
+    EIRPSApplicationClosing        
+    };
+
+/**
+ * enum to indicate the state of chanel playing
+ */
+enum TIRStopPlayState
+    {
+    EIRStateUninitialized,
+    EIRStatePlay,
+    EIRStateStop
+    };
+    
+    
+/**
+ * enum to indicate the state of chanel playing
+ */
+enum TIRBufferingState
+    {
+    EIRStateBufferingStart,
+    EIRStateBufferingStop,
+    EIRStateBufferingError
+    };
+
+/** 
+ * Internet Radio application Uid
+ */
+ 
+//violates PC Lint Warning 569: Loss of information 
+//(initialization) (32 bits to 31 bits)
+
+const TUid KUidActiveInternetRadioApp = {0x2000B499};
+
+/** 
+ * IR Publish and Subscribe keys base value
+ */
+const TUint32 KIRPubSubBase = { 0x00000020 } ;
+
+/** 
+ * IR Publish and Subscribe key to indicate prest index  change ( For XML Active Idle )
+ */
+const TUint32 KIRPSPresetIndex = { KIRPubSubBase + 0x00000000 };
+
+/** 
+ * IR Publish and Subscribe key to indicate if iRAPP is running ( For XML Active Idle )
+ */
+const TUint32 KIRPSDataApplicationRunning = { KIRPubSubBase + 0x00000001 };
+
+/** 
+ * This key is deprecated and the information is now available via KIRPSMetaData. 
+ */
+const TUint32 KIRPSArtistTitleChanged = { KIRPubSubBase + 0x00000002 };
+
+/** 
+ * This key is deprecated and the information is now available via KIRPSMetaData. 
+ */
+const TUint32 KIRPSSongTitleChanged = { KIRPubSubBase + 0x00000003 };
+
+/** 
+ * IR Publish and Subscribe key to indicate channel change ( For XML Active Idle )
+ */
+const TUint32 KIRPSDataChannel = { KIRPubSubBase + 0x00000004 };
+
+/** 
+ * IR Publish and Subscribe key to indicate volume change ( For XML Active Idle )
+ */
+const TUint32 KIRPSVolume = { KIRPubSubBase + 0x00000005 };
+
+/** 
+ * IR Publish and Subscribe key to indicate stop state ( For XML Active Idle )
+ */
+const TUint32 KIRPSPlayStop = { KIRPubSubBase + 0x00000006 };
+
+/** 
+ * IR Publish and Subscribe key to specify the channel server url
+ */
+const TUint32 KIRPSChannelUrl = { KIRPubSubBase + 0x00000007 };
+
+/** 
+ * IR Publish and Subscribe key to specify the Bitrate
+ */
+const TUint32 KIRPSBitrate = { KIRPubSubBase + 0x00000008 };
+
+/** 
+ * IR Publish and Subscribe key to Handle simultaneous play
+ */
+const TUint32 KIRPSMultiplePlay = { KIRPubSubBase + 0x00000009 };
+
+/** 
+ * IR Publish and Subscribe key to specify the channel server url
+ */
+const TUint32 KIRPSStationName = { KIRPubSubBase + 0x0000000A };  
+
+/** 
+ * IR Publish and Subscribe key to specify the number of application
+ * instances running
+ */
+const TUint32 KIRPSAppInstanceRunning = { KIRPubSubBase + 0x0000000B };  
+
+/**
+ * Updated whenever meta data has been received for the channel that is currently streaming.
+ *
+ * As this data is packed in binary form, listeners of this key can use the following code snippet to support
+ * unpacking it:
+ *
+ * #include <irmetadata.h>
+ *
+ * In your HandlePropertyChangeL( const TDesC8& aData ) method:
+ *
+ * if ( aKey == KIRPSMetaData )
+ *     {
+ *     CIRMetaData* metaData = CIRMetaData::NewL( aData ); 
+ *     CleanupStack::PushL( metaData );
+ *     // Meta data information is now available via the public access methods of CIRMetaData.
+ *     // Do whatever needs to be done with the meta data information here.
+ *     const TDesC& artist = metaData->Artist();
+ *     ...
+ *     CleanupStack::PopAndDestroy( metaData );
+ *     }
+ */
+const TUint32 KIRPSMetaData = { KIRPubSubBase + 0x0000000C };
+
+const TUint32 KIRPSChannelType = { KIRPubSubBase + 0x0000000D };
+
+const TUint32 KIRPSChannelId = { KIRPubSubBase + 0x000000E };
+
+const TUint32 KIRPSDataChannelDesc = { KIRPubSubBase + 0x0000000F };
+
+const TUint32 KIRPSChannelMusicFlag = { KIRPubSubBase + 0x00000010 };
+
+const TUint32 KIRPSControlSetPlayState = { KIRPubSubBase + 0x00000011 };
+
+
+const TUint32 KIRPSBufferingState = { KIRPubSubBase + 0x00000012 };
+
+#endif // IRPUBSUBKEYS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/install/cenrep.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,31 @@
+;
+; 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:
+;
+; Internet Radio cenrep.pkg
+
+; Languages
+&EN
+
+; Header
+#{"Internet RadioKeySpace"},(0x10202be9),1,3,0,TYPE=SP
+
+; Localised Vendor name
+%{"Symbian Software Ltd."}
+
+; Unique Vendor name
+:"Symbian Software Ltd."
+
+;Install KeySpace
+"..\cenrep\2000B499.txt"-"c:\private\10202be9\2000B499.txt"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/install/internetradiostub.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+;
+; InternetRadio stub.pkg
+
+; Languages
+&EN 
+
+; Header
+#{"InternetRadio"},(0x2000B499),1,0,0, TYPE=SA,RU
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; EXE/DLL
+""-"z:\sys\bin\InternetRadio.exe"
+""-"z:\sys\bin\IRDataStructures.dll"
+""-"z:\sys\bin\IRDataProvider.dll"
+""-"z:\sys\bin\IRXMLParser.dll"
+""-"z:\sys\bin\isdsclientinterface.dll"
+""-"z:\sys\bin\IRStreamSource.dll"
+""-"z:\sys\bin\IRMediaEngine.dll"
+""-"z:\sys\bin\IRFileRecognizer.dll"
+""-"z:\sys\bin\PresetPlugin.dll"
+""-"z:\sys\bin\irrfsplugin.dll"
+""-"z:\sys\bin\IRFavoritesDb.dll"
+""-"z:\sys\bin\IRCommandChannel.dll"
+""-"z:\sys\bin\IRCacheMgmt.dll"
+""-"z:\sys\bin\IRNetworkController.dll"
+""-"z:\sys\bin\irsettings.dll"
+""-"z:\sys\bin\IRSessionLog.dll"
+""-"z:\sys\bin\IRSongHistory.dll"
+""-"z:\sys\bin\IRSettingsView.dll"
+""-"z:\sys\bin\irgeneralsettings200.dll"
+;""-"z:\sys\bin\mpxequalizerview.dll"	
+;""-"z:\sys\bin\IRActiveIdleEngine.dll"
+;""-"z:\sys\bin\IRActiveIdle.dll"
+
+
+; Resources
+""-"z:\resource\apps\InternetRadio.r*"
+""-"z:\private\10003a3f\import\apps\InternetRadio_reg.rsc"
+""-"z:\resource\plugins\IRMediaEngine.rsc"
+""-"z:\resource\plugins\PresetPlugin.rsc"
+""-"z:\resource\plugins\irrfsplugin.rsc"
+""-"z:\resource\plugins\IRFileRecognizer.rsc"
+""-"z:\resource\irsettings.rsc"
+""-"z:\resource\plugins\IRActiveIdle.rsc"
+""-"z:\resource\irgeneralsettings.rsc"
+
+
+; Graphics
+""-"z:\resource\apps\InternetRadio.mif"
+""-"z:\resource\apps\InternetRadioEdwinSkin.mif"
+""-"z:\resource\apps\InternetRadio_aif.mif"
+
+
+; Backup & Restore
+""-"z:\private\2000B499\backup_registration.xml"
+
+
+; Animation script files
+""-"z:\resource\apps\qgn_ir_loading.svg"
+""-"z:\resource\apps\qgn_ir_buffering_anim.svg"
+;""-"z:\private\2000B499\IRFontDef.txt"
+
+
+; Help
+""-"z:\resource\help\iraap.hlp"
+
+
+; Terms of service
+""-"z:\private\2000b499\terms_*.html"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/install/ir_package.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,324 @@
+;
+; 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:
+;
+; InternetRadio package.pkg
+
+; Languages, currently 61, same order as in directory listing!
+&01,02,03,04,05,
+06,07,08,09,10,
+129,13,14,15,157,
+158,159,16,160,161,
+17,18,25,26,27,
+28,29,30,31,32,
+326,327,33,37,39,
+401,402,42,44,45,
+49,50,51,54,57,
+59,67,68,70,
+76,78,79,83,93,
+94,96,102,103,129,
+160,230
+
+; Header
+; Component name is required for each language
+; this can be found from loc files with identifier qtn_apps_ir_swins:
+; Make sure that these are in the exact same order than the language codes above!
+#{
+"Internet radio", "Radio Internet", "Internetradio", "Radio por Internet","Radio Internet", 
+"Internetradio", "Internetradio", "Internett-radio", "Internet-radio","Internet radio",
+"Internet radio", "Rádio Internet", "İnternet radyosu", "Netútvarp", "Internet radio",
+"Internet radio", "Internet radio", "Интернет-радио", "Internet radio", "Internet radio",
+"Internetes rádió", "Internetradio", "Internetové rádio", "Internetové rádio", "Radio internetowe",
+"Spletni radio", "網際網路收音機", "互è¯ç¶²æ”¶éŸ³æ©Ÿ", "网络电å°", "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ",
+"Radio Internet", "Radio Internet", "วิทยุ​อินเทอร์เน็ต", "راديو الإنترنت", "Internet radio", 
+"Internet irratia", "Radio por Internet", "Интернет радио", "Ràdio d'Internet", "Internetski radio", 
+"Interneti-raadio", "رادیو اینترنتی", "Radio Internet", "Ραδιόφωνο Διαδικτ.", "רדיו ×ינטרנט", 
+"Radio Internet","Interneta radio", "Interneto radijas", "Radio Internet", 
+"Rádio na Internet", "Radio Internet", "Internet radio", "Radio de Internet", "Інтернет-радіо", 
+"انٹرنیٹ ریڈیو", "Radio internet","Internet irratia","Radio por Internet","Internet radio",
+"Internet radio","Internet radio"},(0x2000B499),1,1,0,TYPE=SA,RU
+
+; Properties describing the version number
+;+(0=1, 1=1, 2=0)
+
+; S60 3.0 Platform dependency, just to suppress the warning
+;[0x101F7961], 0, 0, 0, { "S60 3.0" }
+;[0x101F7961], 0, 0, 0, {
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2"}
+
+; Localised Vendor name
+%{
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia"
+}
+
+;Unique Vendor name
+:"Nokia"
+
+; Resources
+;"\Epoc32\data\z\resource\apps\InternetRadio.rsc"			-"!:\resource\apps\InternetRadio.rsc"
+;"\Epoc32\data\z\resource\apps\irnetworkcontroller.rsc"			-"!:\resource\apps\irnetworkcontroller.rsc"
+;"\Epoc32\Data\Z\resource\plugins\IRMediaEngine.RSC" 			-"!:\resource\plugins\IRMediaEngine.RSC"
+"\Epoc32\Data\Z\resource\plugins\PresetPlugin.RSC"			-"!:\resource\plugins\PresetPlugin.RSC"
+"\epoc32\data\z\resource\plugins\irrfsplugin.rsc"			-"!:\resource\plugins\irrfsplugin.rsc"
+"\Epoc32\Data\Z\resource\plugins\IRFileRecognizer.RSC"			-"!:\resource\plugins\IRFileRecognizer.RSC"
+"\epoc32\data\z\resource\irsettings.rsc" 				-"!:\resource\irsettings.rsc"
+;"\epoc32\Data\Z\resource\plugins\irgeneralsettings200.rsc"		-"!:\resource\plugins\irgeneralsettings200.rsc"
+;"\epoc32\data\z\resource\irgeneralsettings.rsc" 			-"!:\resource\irgeneralsettings.rsc"
+
+;"\epoc32\Data\Z\resource\plugins\IRActiveIdle.RSC"			-"!:\resource\plugins\IRActiveIdle.RSC"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r01"			-"!:\resource\apps\InternetRadio.r01"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r02"			-"!:\resource\apps\InternetRadio.r02"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r03"			-"!:\resource\apps\InternetRadio.r03"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r04"			-"!:\resource\apps\InternetRadio.r04"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r05"			-"!:\resource\apps\InternetRadio.r05"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r06"			-"!:\resource\apps\InternetRadio.r06"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r07"			-"!:\resource\apps\InternetRadio.r07"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r08"			-"!:\resource\apps\InternetRadio.r08"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r09"			-"!:\resource\apps\InternetRadio.r09"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r10"			-"!:\resource\apps\InternetRadio.r10"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r13"			-"!:\resource\apps\InternetRadio.r13"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r14"			-"!:\resource\apps\InternetRadio.r14"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r15"			-"!:\resource\apps\InternetRadio.r15"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r16"			-"!:\resource\apps\InternetRadio.r16"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r17"			-"!:\resource\apps\InternetRadio.r17"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r18"			-"!:\resource\apps\InternetRadio.r18"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r25"			-"!:\resource\apps\InternetRadio.r25"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r26"			-"!:\resource\apps\InternetRadio.r26"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r27"			-"!:\resource\apps\InternetRadio.r27"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r28"			-"!:\resource\apps\InternetRadio.r28"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r29"			-"!:\resource\apps\InternetRadio.r29"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r30"			-"!:\resource\apps\InternetRadio.r30"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r31"			-"!:\resource\apps\InternetRadio.r31"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r32"			-"!:\resource\apps\InternetRadio.r32"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r33"			-"!:\resource\apps\InternetRadio.r33"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r37"			-"!:\resource\apps\InternetRadio.r37"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r39"			-"!:\resource\apps\InternetRadio.r39"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r42"			-"!:\resource\apps\InternetRadio.r42"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r44"			-"!:\resource\apps\InternetRadio.r44"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r45"			-"!:\resource\apps\InternetRadio.r45"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r49"			-"!:\resource\apps\InternetRadio.r49"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r50"			-"!:\resource\apps\InternetRadio.r50"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r51"			-"!:\resource\apps\InternetRadio.r51"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r54"			-"!:\resource\apps\InternetRadio.r54"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r57"			-"!:\resource\apps\InternetRadio.r57"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r59"			-"!:\resource\apps\InternetRadio.r59"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r67"			-"!:\resource\apps\InternetRadio.r67"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r68"			-"!:\resource\apps\InternetRadio.r68"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r70"			-"!:\resource\apps\InternetRadio.r70"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r76"			-"!:\resource\apps\InternetRadio.r76"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r78"			-"!:\resource\apps\InternetRadio.r78"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r79"			-"!:\resource\apps\InternetRadio.r79"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r83"			-"!:\resource\apps\InternetRadio.r83"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r93"			-"!:\resource\apps\InternetRadio.r93"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r94"			-"!:\resource\apps\InternetRadio.r94"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r96"			-"!:\resource\apps\InternetRadio.r96"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r102"			-"!:\resource\apps\InternetRadio.r102"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r103"			-"!:\resource\apps\InternetRadio.r103"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r129"			-"!:\resource\apps\InternetRadio.r129"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r157"			-"!:\resource\apps\InternetRadio.r157"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r158"			-"!:\resource\apps\InternetRadio.r158"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r159"			-"!:\resource\apps\InternetRadio.r159"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r160"			-"!:\resource\apps\InternetRadio.r160"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r161"			-"!:\resource\apps\InternetRadio.r161"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r230"			-"!:\resource\apps\InternetRadio.r230"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r326"			-"!:\resource\apps\InternetRadio.r326"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r327"			-"!:\resource\apps\InternetRadio.r327"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r401"			-"!:\resource\apps\InternetRadio.r401"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r402"			-"!:\resource\apps\InternetRadio.r402"
+
+;"\epoc32\data\z\private\10003a3f\import\apps\InternetRadio_reg.rsc"	-"!:\private\10003a3f\import\apps\InternetRadio_reg.rsc"
+
+; Graphics
+;"\Epoc32\data\z\resource\apps\InternetRadio_aif.mif"		-"!:\resource\apps\InternetRadio_aif.mif"
+;"\Epoc32\data\z\resource\apps\InternetRadio.mif"		-"!:\resource\apps\InternetRadio.mif"
+
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r01"-"!:\resource\plugins\irgeneralsettings200.r01"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r02"-"!:\resource\plugins\irgeneralsettings200.r02"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r03"-"!:\resource\plugins\irgeneralsettings200.r03"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r04"-"!:\resource\plugins\irgeneralsettings200.r04"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r05"-"!:\resource\plugins\irgeneralsettings200.r05"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r06"-"!:\resource\plugins\irgeneralsettings200.r06"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r07"-"!:\resource\plugins\irgeneralsettings200.r07"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r08"-"!:\resource\plugins\irgeneralsettings200.r08"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r09"-"!:\resource\plugins\irgeneralsettings200.r09"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r10"-"!:\resource\plugins\irgeneralsettings200.r10"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r13"-"!:\resource\plugins\irgeneralsettings200.r13"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r14"-"!:\resource\plugins\irgeneralsettings200.r14"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r15"-"!:\resource\plugins\irgeneralsettings200.r15"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r16"-"!:\resource\plugins\irgeneralsettings200.r16"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r17"-"!:\resource\plugins\irgeneralsettings200.r17"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r18"-"!:\resource\plugins\irgeneralsettings200.r18"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r25"-"!:\resource\plugins\irgeneralsettings200.r25"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r26"-"!:\resource\plugins\irgeneralsettings200.r26"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r27"-"!:\resource\plugins\irgeneralsettings200.r27"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r28"-"!:\resource\plugins\irgeneralsettings200.r28"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r29"-"!:\resource\plugins\irgeneralsettings200.r29"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r30"-"!:\resource\plugins\irgeneralsettings200.r30"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r31"-"!:\resource\plugins\irgeneralsettings200.r31"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r32"-"!:\resource\plugins\irgeneralsettings200.r32"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r33"-"!:\resource\plugins\irgeneralsettings200.r33"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r37"-"!:\resource\plugins\irgeneralsettings200.r37"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r39"-"!:\resource\plugins\irgeneralsettings200.r39"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r42"-"!:\resource\plugins\irgeneralsettings200.r42"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r44"-"!:\resource\plugins\irgeneralsettings200.r44"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r45"-"!:\resource\plugins\irgeneralsettings200.r45"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r49"-"!:\resource\plugins\irgeneralsettings200.r49"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r50"-"!:\resource\plugins\irgeneralsettings200.r50"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r51"-"!:\resource\plugins\irgeneralsettings200.r51"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r54"-"!:\resource\plugins\irgeneralsettings200.r54"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r57"-"!:\resource\plugins\irgeneralsettings200.r57"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r59"-"!:\resource\plugins\irgeneralsettings200.r59"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r67"-"!:\resource\plugins\irgeneralsettings200.r67"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r68"-"!:\resource\plugins\irgeneralsettings200.r68"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r70"-"!:\resource\plugins\irgeneralsettings200.r70"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r76"-"!:\resource\plugins\irgeneralsettings200.r76"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r78"-"!:\resource\plugins\irgeneralsettings200.r78"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r79"-"!:\resource\plugins\irgeneralsettings200.r79"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r83"-"!:\resource\plugins\irgeneralsettings200.r83"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r93"-"!:\resource\plugins\irgeneralsettings200.r93"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r94"-"!:\resource\plugins\irgeneralsettings200.r94"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r96"-"!:\resource\plugins\irgeneralsettings200.r96"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r102"-"!:\resource\plugins\irgeneralsettings200.r102"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r103"-"!:\resource\plugins\irgeneralsettings200.r103"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r129"-"!:\resource\plugins\irgeneralsettings200.r129"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r157"-"!:\resource\plugins\irgeneralsettings200.r157"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r158"-"!:\resource\plugins\irgeneralsettings200.r158"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r159"-"!:\resource\plugins\irgeneralsettings200.r159"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r160"-"!:\resource\plugins\irgeneralsettings200.r160"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r161"-"!:\resource\plugins\irgeneralsettings200.r161"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r230"-"!:\resource\plugins\irgeneralsettings200.r230"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r326"-"!:\resource\plugins\irgeneralsettings200.r326"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r327"-"!:\resource\plugins\irgeneralsettings200.r327"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r401"-"!:\resource\plugins\irgeneralsettings200.r401"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r402"-"!:\resource\plugins\irgeneralsettings200.r402"
+
+; EXE/DLL
+"\Epoc32\release\armv5\urel\IRDataStructures.dll"	-"!:\sys\bin\IRDataStructures.dll"
+"\Epoc32\release\armv5\urel\IRDataProvider.dll"		-"!:\sys\bin\IRDataProvider.dll"
+"\Epoc32\release\armv5\urel\IRXMLParser.dll"		-"!:\sys\bin\IRXMLParser.dll"	
+"\Epoc32\release\armv5\urel\isdsclientinterface.dll"	-"!:\sys\bin\isdsclientinterface.dll"		
+;"\Epoc32\release\armv5\urel\IRStreamSource.dll"		-"!:\sys\bin\IRStreamSource.dll"
+;"\Epoc32\release\armv5\urel\IRMediaEngine.dll"		-"!:\sys\bin\IRMediaEngine.dll"
+"\Epoc32\release\armv5\urel\IRFileRecognizer.dll"	-"!:\sys\bin\IRFileRecognizer.dll"
+"\Epoc32\release\armv5\urel\PresetPlugin.dll"		-"!:\sys\bin\PresetPlugin.dll"
+"\epoc32\release\armv5\urel\irrfsplugin.dll"		-"!:\sys\bin\irrfsplugin.dll"
+"\Epoc32\release\armv5\urel\IRFavoritesDb.dll"		-"!:\sys\bin\IRFavoritesDb.dll"
+;"\Epoc32\release\armv5\urel\IRCommandChannel.dll"	-"!:\sys\bin\IRCommandChannel.dll"
+"\Epoc32\release\armv5\urel\IRCacheMgmt.dll"		-"!:\sys\bin\IRCacheMgmt.dll"
+"\Epoc32\release\armv5\urel\IRNetworkController.dll"	-"!:\sys\bin\IRNetworkController.dll"
+"\Epoc32\release\armv5\urel\irsettings.dll"		-"!:\sys\bin\irsettings.dll"
+"\Epoc32\release\armv5\urel\IRSessionLog.dll"		-"!:\sys\bin\IRSessionLog.dll"
+"\Epoc32\release\armv5\urel\IRSongHistory.dll"		-"!:\sys\bin\IRSongHistory.dll"
+;"\Epoc32\release\armv5\urel\IRSettingsView.dll"		-"!:\sys\bin\IRSettingsView.dll"
+;"\Epoc32\release\armv5\urel\irgeneralsettings200.dll"	-"!:\sys\bin\irgeneralsettings200.dll"
+;"\Epoc32\release\armv5\urel\IRActiveIdleEngine.dll"	-"!:\sys\bin\IRActiveIdleEngine.dll"
+;"\Epoc32\release\armv5\urel\IRActiveIdle.dll"		-"!:\sys\bin\IRActiveIdle.dll"
+ 
+
+
+
+; Backup & Restore
+;"..\group\backup_registration.xml"	-"!:\private\2000B499\backup_registration.xml"
+
+; Animation script files
+;"..\mbm\qgn_ir_loading.svg"		-"!:\resource\apps\qgn_ir_loading.svg"
+;"..\mbm\qgn_ir_buffering_anim.svg"	-"!:\resource\apps\qgn_ir_buffering_anim.svg"
+
+; Help
+;"..\help\iraap.hlp"			-"!:\resource\help\iraap.hlp"
+
+; Terms of service
+;"\epoc32\data\z\private\2000b499\terms_01.html" -"!:\private\2000b499\terms_01.html"
+;"\epoc32\data\z\private\2000b499\terms_02.html" -"!:\private\2000b499\terms_02.html"
+;"\epoc32\data\z\private\2000b499\terms_03.html" -"!:\private\2000b499\terms_03.html"
+;"\epoc32\data\z\private\2000b499\terms_04.html" -"!:\private\2000b499\terms_04.html"
+;"\epoc32\data\z\private\2000b499\terms_05.html" -"!:\private\2000b499\terms_05.html"
+;"\epoc32\data\z\private\2000b499\terms_06.html" -"!:\private\2000b499\terms_06.html"
+;"\epoc32\data\z\private\2000b499\terms_07.html" -"!:\private\2000b499\terms_07.html"
+;"\epoc32\data\z\private\2000b499\terms_08.html" -"!:\private\2000b499\terms_08.html"
+;"\epoc32\data\z\private\2000b499\terms_09.html" -"!:\private\2000b499\terms_09.html"
+;"\epoc32\data\z\private\2000b499\terms_10.html" -"!:\private\2000b499\terms_10.html"
+;"\epoc32\data\z\private\2000b499\terms_13.html" -"!:\private\2000b499\terms_13.html"
+;"\epoc32\data\z\private\2000b499\terms_14.html" -"!:\private\2000b499\terms_14.html"
+;"\epoc32\data\z\private\2000b499\terms_15.html" -"!:\private\2000b499\terms_15.html"
+;"\epoc32\data\z\private\2000b499\terms_16.html" -"!:\private\2000b499\terms_16.html"
+;"\epoc32\data\z\private\2000b499\terms_17.html" -"!:\private\2000b499\terms_17.html"
+;"\epoc32\data\z\private\2000b499\terms_18.html" -"!:\private\2000b499\terms_18.html"
+;"\epoc32\data\z\private\2000b499\terms_25.html" -"!:\private\2000b499\terms_25.html"
+;"\epoc32\data\z\private\2000b499\terms_26.html" -"!:\private\2000b499\terms_26.html"
+;"\epoc32\data\z\private\2000b499\terms_27.html" -"!:\private\2000b499\terms_27.html"
+;"\epoc32\data\z\private\2000b499\terms_18.html" -"!:\private\2000b499\terms_28.html"
+;"\epoc32\data\z\private\2000b499\terms_29.html" -"!:\private\2000b499\terms_29.html"
+;"\epoc32\data\z\private\2000b499\terms_30.html" -"!:\private\2000b499\terms_30.html"
+;"\epoc32\data\z\private\2000b499\terms_31.html" -"!:\private\2000b499\terms_31.html"
+;"\epoc32\data\z\private\2000b499\terms_32.html" -"!:\private\2000b499\terms_32.html"
+;"\epoc32\data\z\private\2000b499\terms_33.html" -"!:\private\2000b499\terms_33.html"
+;"\epoc32\data\z\private\2000b499\terms_37.html" -"!:\private\2000b499\terms_37.html"
+;"\epoc32\data\z\private\2000b499\terms_39.html" -"!:\private\2000b499\terms_39.html"
+;"\epoc32\data\z\private\2000b499\terms_42.html" -"!:\private\2000b499\terms_42.html"
+;"\epoc32\data\z\private\2000b499\terms_44.html" -"!:\private\2000b499\terms_44.html"
+;"\epoc32\data\z\private\2000b499\terms_45.html" -"!:\private\2000b499\terms_45.html"
+;"\epoc32\data\z\private\2000b499\terms_49.html" -"!:\private\2000b499\terms_49.html"
+;"\epoc32\data\z\private\2000b499\terms_50.html" -"!:\private\2000b499\terms_50.html"
+;"\epoc32\data\z\private\2000b499\terms_51.html" -"!:\private\2000b499\terms_51.html"
+;"\epoc32\data\z\private\2000b499\terms_54.html" -"!:\private\2000b499\terms_54.html"
+;"\epoc32\data\z\private\2000b499\terms_57.html" -"!:\private\2000b499\terms_57.html"
+;"\epoc32\data\z\private\2000b499\terms_59.html" -"!:\private\2000b499\terms_59.html"
+;"\epoc32\data\z\private\2000b499\terms_67.html" -"!:\private\2000b499\terms_67.html"
+;"\epoc32\data\z\private\2000b499\terms_68.html" -"!:\private\2000b499\terms_68.html"
+;"\epoc32\data\z\private\2000b499\terms_70.html" -"!:\private\2000b499\terms_70.html"
+;"\epoc32\data\z\private\2000b499\terms_76.html" -"!:\private\2000b499\terms_76.html"
+;"\epoc32\data\z\private\2000b499\terms_78.html" -"!:\private\2000b499\terms_78.html"
+;"\epoc32\data\z\private\2000b499\terms_79.html" -"!:\private\2000b499\terms_79.html"
+;"\epoc32\data\z\private\2000b499\terms_83.html" -"!:\private\2000b499\terms_83.html"
+;"\epoc32\data\z\private\2000b499\terms_93.html" -"!:\private\2000b499\terms_93.html"
+;"\epoc32\data\z\private\2000b499\terms_94.html" -"!:\private\2000b499\terms_94.html"
+;"\epoc32\data\z\private\2000b499\terms_96.html" -"!:\private\2000b499\terms_96.html"
+;"\epoc32\data\z\private\2000b499\terms_157.html"-"!:\private\2000b499\terms_157.html"
+;"\epoc32\data\z\private\2000b499\terms_158.html"-"!:\private\2000b499\terms_158.html"
+;"\epoc32\data\z\private\2000b499\terms_159.html"-"!:\private\2000b499\terms_159.html"
+;"\epoc32\data\z\private\2000b499\terms_161.html"-"!:\private\2000b499\terms_161.html"
+;"\epoc32\data\z\private\2000b499\terms_326.html"-"!:\private\2000b499\terms_326.html"
+;"\epoc32\data\z\private\2000b499\terms_327.html"-"!:\private\2000b499\terms_327.html"
+;"\epoc32\data\z\private\2000b499\terms_401.html"-"!:\private\2000b499\terms_401.html"
+;"\epoc32\data\z\private\2000b499\terms_402.html"-"!:\private\2000b499\terms_402.html"
+
+; Cenrep update
+@"cenrep.sis",(0x10202be9)
+
+;"\Epoc32\release\armv5\urel\InternetRadio.exe"		-"!:\sys\bin\InternetRadio.exe"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/install/ir_package_deb.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,324 @@
+;
+; 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:
+;
+; InternetRadio package.pkg
+
+; Languages, currently 61, same order as in directory listing!
+&01,02,03,04,05,
+06,07,08,09,10,
+129,13,14,15,157,
+158,159,16,160,161,
+17,18,25,26,27,
+28,29,30,31,32,
+326,327,33,37,39,
+401,402,42,44,45,
+49,50,51,54,57,
+59,67,68,70,
+76,78,79,83,93,
+94,96,102,103,129,
+160,230
+
+; Header
+; Component name is required for each language
+; this can be found from loc files with identifier qtn_apps_ir_swins:
+; Make sure that these are in the exact same order than the language codes above!
+#{
+"Internet radio", "Radio Internet", "Internetradio", "Radio por Internet","Radio Internet", 
+"Internetradio", "Internetradio", "Internett-radio", "Internet-radio","Internet radio",
+"Internet radio", "Rádio Internet", "İnternet radyosu", "Netútvarp", "Internet radio",
+"Internet radio", "Internet radio", "Интернет-радио", "Internet radio", "Internet radio",
+"Internetes rádió", "Internetradio", "Internetové rádio", "Internetové rádio", "Radio internetowe",
+"Spletni radio", "網際網路收音機", "互è¯ç¶²æ”¶éŸ³æ©Ÿ", "网络电å°", "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ",
+"Radio Internet", "Radio Internet", "วิทยุ​อินเทอร์เน็ต", "راديو الإنترنت", "Internet radio", 
+"Internet irratia", "Radio por Internet", "Интернет радио", "Ràdio d'Internet", "Internetski radio", 
+"Interneti-raadio", "رادیو اینترنتی", "Radio Internet", "Ραδιόφωνο Διαδικτ.", "רדיו ×ינטרנט", 
+"Radio Internet","Interneta radio", "Interneto radijas", "Radio Internet", 
+"Rádio na Internet", "Radio Internet", "Internet radio", "Radio de Internet", "Інтернет-радіо", 
+"انٹرنیٹ ریڈیو", "Radio internet","Internet irratia","Radio por Internet","Internet radio",
+"Internet radio","Internet radio"},(0x2000B499),1,1,0,TYPE=SA,RU
+
+; Properties describing the version number
+;+(0=1, 1=1, 2=0)
+
+; S60 3.0 Platform dependency, just to suppress the warning
+;[0x101F7961], 0, 0, 0, { "S60 3.0" }
+;[0x101F7961], 0, 0, 0, {
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2","S60 3.2","S60 3.2","S60 3.2","S60 3.2",
+;"S60 3.2"}
+
+; Localised Vendor name
+%{
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia"
+}
+
+;Unique Vendor name
+:"Nokia"
+
+; Resources
+;"\Epoc32\data\z\resource\apps\InternetRadio.rsc"			-"!:\resource\apps\InternetRadio.rsc"
+;"\Epoc32\data\z\resource\apps\irnetworkcontroller.rsc"			-"!:\resource\apps\irnetworkcontroller.rsc"
+;"\Epoc32\Data\Z\resource\plugins\IRMediaEngine.RSC" 			-"!:\resource\plugins\IRMediaEngine.RSC"
+"\Epoc32\Data\Z\resource\plugins\PresetPlugin.RSC"			-"!:\resource\plugins\PresetPlugin.RSC"
+"\epoc32\data\z\resource\plugins\irrfsplugin.rsc"			-"!:\resource\plugins\irrfsplugin.rsc"
+"\Epoc32\Data\Z\resource\plugins\IRFileRecognizer.RSC"			-"!:\resource\plugins\IRFileRecognizer.RSC"
+"\epoc32\data\z\resource\irsettings.rsc" 				-"!:\resource\irsettings.rsc"
+;"\epoc32\Data\Z\resource\plugins\irgeneralsettings200.rsc"		-"!:\resource\plugins\irgeneralsettings200.rsc"
+;"\epoc32\data\z\resource\irgeneralsettings.rsc" 			-"!:\resource\irgeneralsettings.rsc"
+
+;"\epoc32\Data\Z\resource\plugins\IRActiveIdle.RSC"			-"!:\resource\plugins\IRActiveIdle.RSC"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r01"			-"!:\resource\apps\InternetRadio.r01"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r02"			-"!:\resource\apps\InternetRadio.r02"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r03"			-"!:\resource\apps\InternetRadio.r03"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r04"			-"!:\resource\apps\InternetRadio.r04"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r05"			-"!:\resource\apps\InternetRadio.r05"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r06"			-"!:\resource\apps\InternetRadio.r06"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r07"			-"!:\resource\apps\InternetRadio.r07"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r08"			-"!:\resource\apps\InternetRadio.r08"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r09"			-"!:\resource\apps\InternetRadio.r09"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r10"			-"!:\resource\apps\InternetRadio.r10"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r13"			-"!:\resource\apps\InternetRadio.r13"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r14"			-"!:\resource\apps\InternetRadio.r14"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r15"			-"!:\resource\apps\InternetRadio.r15"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r16"			-"!:\resource\apps\InternetRadio.r16"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r17"			-"!:\resource\apps\InternetRadio.r17"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r18"			-"!:\resource\apps\InternetRadio.r18"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r25"			-"!:\resource\apps\InternetRadio.r25"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r26"			-"!:\resource\apps\InternetRadio.r26"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r27"			-"!:\resource\apps\InternetRadio.r27"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r28"			-"!:\resource\apps\InternetRadio.r28"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r29"			-"!:\resource\apps\InternetRadio.r29"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r30"			-"!:\resource\apps\InternetRadio.r30"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r31"			-"!:\resource\apps\InternetRadio.r31"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r32"			-"!:\resource\apps\InternetRadio.r32"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r33"			-"!:\resource\apps\InternetRadio.r33"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r37"			-"!:\resource\apps\InternetRadio.r37"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r39"			-"!:\resource\apps\InternetRadio.r39"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r42"			-"!:\resource\apps\InternetRadio.r42"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r44"			-"!:\resource\apps\InternetRadio.r44"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r45"			-"!:\resource\apps\InternetRadio.r45"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r49"			-"!:\resource\apps\InternetRadio.r49"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r50"			-"!:\resource\apps\InternetRadio.r50"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r51"			-"!:\resource\apps\InternetRadio.r51"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r54"			-"!:\resource\apps\InternetRadio.r54"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r57"			-"!:\resource\apps\InternetRadio.r57"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r59"			-"!:\resource\apps\InternetRadio.r59"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r67"			-"!:\resource\apps\InternetRadio.r67"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r68"			-"!:\resource\apps\InternetRadio.r68"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r70"			-"!:\resource\apps\InternetRadio.r70"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r76"			-"!:\resource\apps\InternetRadio.r76"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r78"			-"!:\resource\apps\InternetRadio.r78"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r79"			-"!:\resource\apps\InternetRadio.r79"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r83"			-"!:\resource\apps\InternetRadio.r83"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r93"			-"!:\resource\apps\InternetRadio.r93"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r94"			-"!:\resource\apps\InternetRadio.r94"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r96"			-"!:\resource\apps\InternetRadio.r96"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r102"			-"!:\resource\apps\InternetRadio.r102"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r103"			-"!:\resource\apps\InternetRadio.r103"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r129"			-"!:\resource\apps\InternetRadio.r129"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r157"			-"!:\resource\apps\InternetRadio.r157"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r158"			-"!:\resource\apps\InternetRadio.r158"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r159"			-"!:\resource\apps\InternetRadio.r159"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r160"			-"!:\resource\apps\InternetRadio.r160"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r161"			-"!:\resource\apps\InternetRadio.r161"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r230"			-"!:\resource\apps\InternetRadio.r230"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r326"			-"!:\resource\apps\InternetRadio.r326"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r327"			-"!:\resource\apps\InternetRadio.r327"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r401"			-"!:\resource\apps\InternetRadio.r401"
+;"\Epoc32\data\z\resource\apps\InternetRadio.r402"			-"!:\resource\apps\InternetRadio.r402"
+
+;"\epoc32\data\z\private\10003a3f\import\apps\InternetRadio_reg.rsc"	-"!:\private\10003a3f\import\apps\InternetRadio_reg.rsc"
+
+; Graphics
+;"\Epoc32\data\z\resource\apps\InternetRadio_aif.mif"		-"!:\resource\apps\InternetRadio_aif.mif"
+;"\Epoc32\data\z\resource\apps\InternetRadio.mif"		-"!:\resource\apps\InternetRadio.mif"
+
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r01"-"!:\resource\plugins\irgeneralsettings200.r01"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r02"-"!:\resource\plugins\irgeneralsettings200.r02"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r03"-"!:\resource\plugins\irgeneralsettings200.r03"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r04"-"!:\resource\plugins\irgeneralsettings200.r04"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r05"-"!:\resource\plugins\irgeneralsettings200.r05"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r06"-"!:\resource\plugins\irgeneralsettings200.r06"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r07"-"!:\resource\plugins\irgeneralsettings200.r07"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r08"-"!:\resource\plugins\irgeneralsettings200.r08"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r09"-"!:\resource\plugins\irgeneralsettings200.r09"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r10"-"!:\resource\plugins\irgeneralsettings200.r10"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r13"-"!:\resource\plugins\irgeneralsettings200.r13"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r14"-"!:\resource\plugins\irgeneralsettings200.r14"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r15"-"!:\resource\plugins\irgeneralsettings200.r15"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r16"-"!:\resource\plugins\irgeneralsettings200.r16"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r17"-"!:\resource\plugins\irgeneralsettings200.r17"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r18"-"!:\resource\plugins\irgeneralsettings200.r18"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r25"-"!:\resource\plugins\irgeneralsettings200.r25"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r26"-"!:\resource\plugins\irgeneralsettings200.r26"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r27"-"!:\resource\plugins\irgeneralsettings200.r27"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r28"-"!:\resource\plugins\irgeneralsettings200.r28"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r29"-"!:\resource\plugins\irgeneralsettings200.r29"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r30"-"!:\resource\plugins\irgeneralsettings200.r30"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r31"-"!:\resource\plugins\irgeneralsettings200.r31"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r32"-"!:\resource\plugins\irgeneralsettings200.r32"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r33"-"!:\resource\plugins\irgeneralsettings200.r33"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r37"-"!:\resource\plugins\irgeneralsettings200.r37"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r39"-"!:\resource\plugins\irgeneralsettings200.r39"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r42"-"!:\resource\plugins\irgeneralsettings200.r42"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r44"-"!:\resource\plugins\irgeneralsettings200.r44"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r45"-"!:\resource\plugins\irgeneralsettings200.r45"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r49"-"!:\resource\plugins\irgeneralsettings200.r49"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r50"-"!:\resource\plugins\irgeneralsettings200.r50"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r51"-"!:\resource\plugins\irgeneralsettings200.r51"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r54"-"!:\resource\plugins\irgeneralsettings200.r54"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r57"-"!:\resource\plugins\irgeneralsettings200.r57"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r59"-"!:\resource\plugins\irgeneralsettings200.r59"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r67"-"!:\resource\plugins\irgeneralsettings200.r67"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r68"-"!:\resource\plugins\irgeneralsettings200.r68"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r70"-"!:\resource\plugins\irgeneralsettings200.r70"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r76"-"!:\resource\plugins\irgeneralsettings200.r76"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r78"-"!:\resource\plugins\irgeneralsettings200.r78"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r79"-"!:\resource\plugins\irgeneralsettings200.r79"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r83"-"!:\resource\plugins\irgeneralsettings200.r83"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r93"-"!:\resource\plugins\irgeneralsettings200.r93"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r94"-"!:\resource\plugins\irgeneralsettings200.r94"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r96"-"!:\resource\plugins\irgeneralsettings200.r96"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r102"-"!:\resource\plugins\irgeneralsettings200.r102"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r103"-"!:\resource\plugins\irgeneralsettings200.r103"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r129"-"!:\resource\plugins\irgeneralsettings200.r129"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r157"-"!:\resource\plugins\irgeneralsettings200.r157"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r158"-"!:\resource\plugins\irgeneralsettings200.r158"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r159"-"!:\resource\plugins\irgeneralsettings200.r159"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r160"-"!:\resource\plugins\irgeneralsettings200.r160"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r161"-"!:\resource\plugins\irgeneralsettings200.r161"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r230"-"!:\resource\plugins\irgeneralsettings200.r230"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r326"-"!:\resource\plugins\irgeneralsettings200.r326"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r327"-"!:\resource\plugins\irgeneralsettings200.r327"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r401"-"!:\resource\plugins\irgeneralsettings200.r401"
+;"\epoc32\data\z\resource\plugins\irgeneralsettings200.r402"-"!:\resource\plugins\irgeneralsettings200.r402"
+
+; EXE/DLL
+"\Epoc32\release\armv5\udeb\IRDataStructures.dll"	-"!:\sys\bin\IRDataStructures.dll"
+"\Epoc32\release\armv5\udeb\IRDataProvider.dll"		-"!:\sys\bin\IRDataProvider.dll"
+"\Epoc32\release\armv5\udeb\IRXMLParser.dll"		-"!:\sys\bin\IRXMLParser.dll"	
+"\Epoc32\release\armv5\udeb\isdsclientinterface.dll"	-"!:\sys\bin\isdsclientinterface.dll"		
+;"\Epoc32\release\armv5\udeb\IRStreamSource.dll"		-"!:\sys\bin\IRStreamSource.dll"
+;"\Epoc32\release\armv5\udeb\IRMediaEngine.dll"		-"!:\sys\bin\IRMediaEngine.dll"
+"\Epoc32\release\armv5\udeb\IRFileRecognizer.dll"	-"!:\sys\bin\IRFileRecognizer.dll"
+"\Epoc32\release\armv5\udeb\PresetPlugin.dll"		-"!:\sys\bin\PresetPlugin.dll"
+"\epoc32\release\armv5\udeb\irrfsplugin.dll"		-"!:\sys\bin\irrfsplugin.dll"
+"\Epoc32\release\armv5\udeb\IRFavoritesDb.dll"		-"!:\sys\bin\IRFavoritesDb.dll"
+;"\Epoc32\release\armv5\udeb\IRCommandChannel.dll"	-"!:\sys\bin\IRCommandChannel.dll"
+"\Epoc32\release\armv5\udeb\IRCacheMgmt.dll"		-"!:\sys\bin\IRCacheMgmt.dll"
+"\Epoc32\release\armv5\udeb\IRNetworkController.dll"	-"!:\sys\bin\IRNetworkController.dll"
+"\Epoc32\release\armv5\udeb\irsettings.dll"		-"!:\sys\bin\irsettings.dll"
+"\Epoc32\release\armv5\udeb\IRSessionLog.dll"		-"!:\sys\bin\IRSessionLog.dll"
+"\Epoc32\release\armv5\udeb\IRSongHistory.dll"		-"!:\sys\bin\IRSongHistory.dll"
+;"\Epoc32\release\armv5\udeb\IRSettingsView.dll"		-"!:\sys\bin\IRSettingsView.dll"
+;"\Epoc32\release\armv5\udeb\irgeneralsettings200.dll"	-"!:\sys\bin\irgeneralsettings200.dll"
+;"\Epoc32\release\armv5\udeb\IRActiveIdleEngine.dll"	-"!:\sys\bin\IRActiveIdleEngine.dll"
+;"\Epoc32\release\armv5\udeb\IRActiveIdle.dll"		-"!:\sys\bin\IRActiveIdle.dll"
+ 
+
+
+
+; Backup & Restore
+;"..\group\backup_registration.xml"	-"!:\private\2000B499\backup_registration.xml"
+
+; Animation script files
+;"..\mbm\qgn_ir_loading.svg"		-"!:\resource\apps\qgn_ir_loading.svg"
+;"..\mbm\qgn_ir_buffering_anim.svg"	-"!:\resource\apps\qgn_ir_buffering_anim.svg"
+
+; Help
+;"..\help\iraap.hlp"			-"!:\resource\help\iraap.hlp"
+
+; Terms of service
+;"\epoc32\data\z\private\2000b499\terms_01.html" -"!:\private\2000b499\terms_01.html"
+;"\epoc32\data\z\private\2000b499\terms_02.html" -"!:\private\2000b499\terms_02.html"
+;"\epoc32\data\z\private\2000b499\terms_03.html" -"!:\private\2000b499\terms_03.html"
+;"\epoc32\data\z\private\2000b499\terms_04.html" -"!:\private\2000b499\terms_04.html"
+;"\epoc32\data\z\private\2000b499\terms_05.html" -"!:\private\2000b499\terms_05.html"
+;"\epoc32\data\z\private\2000b499\terms_06.html" -"!:\private\2000b499\terms_06.html"
+;"\epoc32\data\z\private\2000b499\terms_07.html" -"!:\private\2000b499\terms_07.html"
+;"\epoc32\data\z\private\2000b499\terms_08.html" -"!:\private\2000b499\terms_08.html"
+;"\epoc32\data\z\private\2000b499\terms_09.html" -"!:\private\2000b499\terms_09.html"
+;"\epoc32\data\z\private\2000b499\terms_10.html" -"!:\private\2000b499\terms_10.html"
+;"\epoc32\data\z\private\2000b499\terms_13.html" -"!:\private\2000b499\terms_13.html"
+;"\epoc32\data\z\private\2000b499\terms_14.html" -"!:\private\2000b499\terms_14.html"
+;"\epoc32\data\z\private\2000b499\terms_15.html" -"!:\private\2000b499\terms_15.html"
+;"\epoc32\data\z\private\2000b499\terms_16.html" -"!:\private\2000b499\terms_16.html"
+;"\epoc32\data\z\private\2000b499\terms_17.html" -"!:\private\2000b499\terms_17.html"
+;"\epoc32\data\z\private\2000b499\terms_18.html" -"!:\private\2000b499\terms_18.html"
+;"\epoc32\data\z\private\2000b499\terms_25.html" -"!:\private\2000b499\terms_25.html"
+;"\epoc32\data\z\private\2000b499\terms_26.html" -"!:\private\2000b499\terms_26.html"
+;"\epoc32\data\z\private\2000b499\terms_27.html" -"!:\private\2000b499\terms_27.html"
+;"\epoc32\data\z\private\2000b499\terms_18.html" -"!:\private\2000b499\terms_28.html"
+;"\epoc32\data\z\private\2000b499\terms_29.html" -"!:\private\2000b499\terms_29.html"
+;"\epoc32\data\z\private\2000b499\terms_30.html" -"!:\private\2000b499\terms_30.html"
+;"\epoc32\data\z\private\2000b499\terms_31.html" -"!:\private\2000b499\terms_31.html"
+;"\epoc32\data\z\private\2000b499\terms_32.html" -"!:\private\2000b499\terms_32.html"
+;"\epoc32\data\z\private\2000b499\terms_33.html" -"!:\private\2000b499\terms_33.html"
+;"\epoc32\data\z\private\2000b499\terms_37.html" -"!:\private\2000b499\terms_37.html"
+;"\epoc32\data\z\private\2000b499\terms_39.html" -"!:\private\2000b499\terms_39.html"
+;"\epoc32\data\z\private\2000b499\terms_42.html" -"!:\private\2000b499\terms_42.html"
+;"\epoc32\data\z\private\2000b499\terms_44.html" -"!:\private\2000b499\terms_44.html"
+;"\epoc32\data\z\private\2000b499\terms_45.html" -"!:\private\2000b499\terms_45.html"
+;"\epoc32\data\z\private\2000b499\terms_49.html" -"!:\private\2000b499\terms_49.html"
+;"\epoc32\data\z\private\2000b499\terms_50.html" -"!:\private\2000b499\terms_50.html"
+;"\epoc32\data\z\private\2000b499\terms_51.html" -"!:\private\2000b499\terms_51.html"
+;"\epoc32\data\z\private\2000b499\terms_54.html" -"!:\private\2000b499\terms_54.html"
+;"\epoc32\data\z\private\2000b499\terms_57.html" -"!:\private\2000b499\terms_57.html"
+;"\epoc32\data\z\private\2000b499\terms_59.html" -"!:\private\2000b499\terms_59.html"
+;"\epoc32\data\z\private\2000b499\terms_67.html" -"!:\private\2000b499\terms_67.html"
+;"\epoc32\data\z\private\2000b499\terms_68.html" -"!:\private\2000b499\terms_68.html"
+;"\epoc32\data\z\private\2000b499\terms_70.html" -"!:\private\2000b499\terms_70.html"
+;"\epoc32\data\z\private\2000b499\terms_76.html" -"!:\private\2000b499\terms_76.html"
+;"\epoc32\data\z\private\2000b499\terms_78.html" -"!:\private\2000b499\terms_78.html"
+;"\epoc32\data\z\private\2000b499\terms_79.html" -"!:\private\2000b499\terms_79.html"
+;"\epoc32\data\z\private\2000b499\terms_83.html" -"!:\private\2000b499\terms_83.html"
+;"\epoc32\data\z\private\2000b499\terms_93.html" -"!:\private\2000b499\terms_93.html"
+;"\epoc32\data\z\private\2000b499\terms_94.html" -"!:\private\2000b499\terms_94.html"
+;"\epoc32\data\z\private\2000b499\terms_96.html" -"!:\private\2000b499\terms_96.html"
+;"\epoc32\data\z\private\2000b499\terms_157.html"-"!:\private\2000b499\terms_157.html"
+;"\epoc32\data\z\private\2000b499\terms_158.html"-"!:\private\2000b499\terms_158.html"
+;"\epoc32\data\z\private\2000b499\terms_159.html"-"!:\private\2000b499\terms_159.html"
+;"\epoc32\data\z\private\2000b499\terms_161.html"-"!:\private\2000b499\terms_161.html"
+;"\epoc32\data\z\private\2000b499\terms_326.html"-"!:\private\2000b499\terms_326.html"
+;"\epoc32\data\z\private\2000b499\terms_327.html"-"!:\private\2000b499\terms_327.html"
+;"\epoc32\data\z\private\2000b499\terms_401.html"-"!:\private\2000b499\terms_401.html"
+;"\epoc32\data\z\private\2000b499\terms_402.html"-"!:\private\2000b499\terms_402.html"
+
+; Cenrep update
+@"cenrep.sis",(0x10202be9)
+
+;"\Epoc32\release\armv5\udeb\InternetRadio.exe"		-"!:\sys\bin\InternetRadio.exe"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/install/irapp.key	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK8W4Sid0O13uFgIM6WyE1bHME0z
+/UD2zFJLjmfI9NC9ufv5AvIR7M40mSAu9j74mClct5iGkVxmV7lD055O8FGsx1dX+8NAVS/aQlZW
+90wmCPV7H0yI57tu1/2PhNBArmexNUrIptvsp/zP8Y4g2IVpGs5v2mlQ0QUmmpaDX+lPAgMBAAEC
+gYBJKM48InVCRFwKrKKoAZiDEgfkumx/0J/fYyLFyvpAnoYv+wR4EXVZVDEHeZf7B/TMk6lDWjcy
+3LCbAPRTmbhgNxgRoRQqoQzN4aCFhLD9872NSWoIzAPEanhJzcDYDr1a74PqpImrGE9XQY+n237T
+AiPmIsyz4ovHwXdc8aNjwQJBAN+kHobP9tVPrrYOceBh69KVoyVTa8dCuswlsTlwtFB0qNKBAO5B
+miXQ0s4AgdURqP4wCOaxCh5JbVyOMQfJvIMCQQDIbFuoW3qNDjCb9Bso0VTp92NSXMv7yX6+srT7
+tawPIyTV49VnVLtwSas7sDGC1U8iO7CbdUtPjPTG1zyjmF5FAkEApMwGZqc2p4dZIfTQ+1yM7xev
+KeEoCaRli+u2hbJEXQkqIjxHmEolMfqIbJ65DW4/DlgNJxmMcDcBbHOnM6r3ywJANWxUvjqsHv9C
+S7+0oZuy066ipeigYtwh0bkW7uVNGLfYcL8LOkDmuZaZcw6TE/nB3zEj8TxBt9GtyXbD7iOGNQJB
+ALpI8O+dACV3Ti7k2r1W+DlXc6EYrZWBMLejMbDLzAG8enyY/CGzb8+HCIFnDiGlEBdefYJTFLUm
+OwlwT3xRqOE=
+-----END PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/isdsclientinc/irlanguagemapper.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRLANGUAGEMAPPER_H
+#define IRLANGUAGEMAPPER_H
+
+#include <e32cmn.h>
+
+const TInt KIRLanguageCodeLength = 2;
+
+/**
+ * A utility class to translate TLanguage into a country code http headers 
+ * know something about
+ *
+ * @ingroup Utils
+ */
+NONSHARABLE_CLASS(IRLanguageMapper)
+    {
+public:
+    /**
+     * Translate TLanguage into language code representation 
+     * (such as "en", "fi" etc).
+     * @param aLanguage the language to be translated
+     * @return Language code representation of the given input.
+     */
+    static TBufC8<KIRLanguageCodeLength> MapLanguage(TLanguage aLanguage);
+    };
+
+#endif // IRLANGUAGEMAPPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/isdsclientinc/isdsclientdll.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef ISDSCLIENTDLL_H
+#define ISDSCLIENTDLL_H
+
+#include <e32base.h>
+
+#include "ircacheobserver.h"
+#include "irdataproviderobserver.h"
+#include "irlanguagemapper.h"
+#include "irparserobserver.h"
+
+class CIRCacheMgmt;
+class CIRDataProvider;
+class CIRHttpRequestData;
+class CIRIsdsPreset;
+class CIRReportGenerator;
+class CIRSettings;
+class CIRXMLContentHandler;
+class MIsdsResponseObserver;
+
+/** 
+ * This class is the one which acts as a interface between UI and network
+ * component which interacts with the isds server.It provides the data to 
+ * be diplayed to the UI either from cache or fetches it from the ISDS 
+ * server.
+ * 
+ *
+ * @code
+ *	creates the instance of isdsclient 
+ * iISDSClient = CIRIsdsClient::NewL(*this , iIRSettings->GetISDSBaseUrlL());
+ * iISDSClient->IRIsdsClientIntefaceL(EGenre); //requests for genre data
+ * //requests for selected channel
+ * iISDSClient->IRIsdsClientIntefaceL(iIndex, CIRIsdsClient::EChannels);
+ * //cancels any previous requests
+ * iISDSClient->IRISDSCancelRequest();
+ * //gets irid
+ * iISDSClient->IRGetIRIDL();
+ * iISDSClient->GetOtaStatusL(forceUpdate);//gets ota update status
+ * iISDSClient->IRISDSSearchL(aIsdsSearchString);
+ * iISDSClient->IRISDSPostL(pathtopost);
+ * SyncPresetL(iUi->iFavPresets->iFavPresetList->At(aUrlIndex)->GetId(),
+ * iUi->iFavPresets->iFavPresetList->At(aUrlIndex)->GetLastModifiedTime());
+ * iISDSClient->ReleaseResources();
+ * @endcode
+ *
+ */
+NONSHARABLE_CLASS( CIRIsdsClient ): public CBase ,
+	public MIRDataProviderObserver,
+	public MIRParserObserver,
+	public MIRCacheObserver
+	{
+public://public data
+
+/**
+ * These Enums correspond to a particular UI event which 
+ * requires request to be made to isds.
+ */
+	enum TIRIsdsclientInterfaceIDs
+	    {
+	    EGenre,
+	    ELanguages,
+	    ECountries,
+	    Ehotpicks
+	    };
+ 
+    
+	enum TIRIsdsClientInterfaces
+	   {
+	   ECatagory,
+       EChannels,
+       EPresets,
+       EOtaInfo
+       };   
+/**
+*type of data recieved from ISDS   
+*/
+	 enum TDataRecieved
+		{
+		ECategoryInfoRecieved,
+		EChannelListRecieved,
+		EPresetDataRecieved,
+		EOtaInfoRecieved,
+		EIridRecieved,
+		ESessionLogRecieved
+		};
+	
+public:
+
+	/**
+	* CIRIsdsClient::NewL(MIsdsResponseObserver& aobserver)
+	* Used by UI to create instance of CIRIsdsClient.
+	*/
+	IMPORT_C static CIRIsdsClient* NewL(MIsdsResponseObserver& aobserver,
+		const TDesC& aISDSBaseUrl);
+
+
+	/**
+	* CIRIsdsClient::NewLC(MIsdsResponseObserver& aobserver)
+	* Creates instance of CIRIsdsClient.
+	*/
+	static CIRIsdsClient* NewLC(MIsdsResponseObserver& aobserver,
+		const TDesC& aISDSBaseUrl);
+
+
+	/**
+	* CIRIsdsClient::~CIRIsdsClient()
+	* Destructor
+	*/
+	~CIRIsdsClient();
+
+
+	/**
+	* CIRIsdsClient::ConstructL()	
+	* Symbian two phased constructor
+	*/
+	void ConstructL(const TDesC& aISDSBaseUrl);
+
+
+	/**
+	* CIRIsdsClient::CIRIsdsClient(MIsdsResponseObserver& aobserver)	
+	* Default constructor
+	*/
+	 CIRIsdsClient(MIsdsResponseObserver& aobserver);   
+
+
+	/**
+	* void CIRIsdsClientInteface(TIRIsdsclientInterfaceIDs aISDSClientRequest)
+	* Called by UI to make request to ISDS for catogories
+	* @param :ENUM value depending on catogory which user wants to explore
+	*/
+	IMPORT_C TBool IRIsdsClientIntefaceL(
+		TIRIsdsclientInterfaceIDs aISDSClientRequest);
+
+
+	IMPORT_C TBool IRIsdsIsCategoryCachedL(
+	             TIRIsdsclientInterfaceIDs aISDSClientRequest);
+	/**
+	* void CIRIsdsClientInteface(TUint aSelectedOption,TIRIsdsClientInterfaces aChoice)
+	* This API is used by the UI to make request for isds listed channels
+	* @param : aSelectedOption-returns the index of the option selected by the user
+	* @param : aChoice-ENUM value specifies what data is expected preset or channel data
+	*/
+	 IMPORT_C TBool IRIsdsClientIntefaceL(TUint aSelectedOption,
+	 	TIRIsdsClientInterfaces aChoice,TInt aHistoryBool=EFalse);
+	 
+	 
+	 IMPORT_C TBool IRIsdsIsChannelCachedL(TUint aSelectedOption);
+
+
+
+	/**
+	* void CIRISDSCancelRequest()
+	* This API is used by the UI to cancel a request made.
+	*/	
+
+	IMPORT_C void IRISDSCancelRequest();
+
+	/**
+	* void CIRGetIRID()
+	* This API is used to get IR ID from isds server 
+	* isds if it doesnt have one
+	*/
+	IMPORT_C void IRGetIRIDL();
+	
+	/**
+	* void GetOtaStatusL()
+	* This API is used to get the OTA status from the server
+	* @param TBool,if ETrue the call is from UI and a call back has to be made to ui
+	* TBool contains the source of update (cache/isds)upon return.Used by Ui to load the
+	* loading screen based on this value.
+	*/
+	IMPORT_C void GetOtaStatusL(TBool& aDataFrom);	 
+
+	/**
+	* void CIRISDSSearch(TDesC& aSearchString)
+	* This API is used by the UI to search channels from isds
+	* @param : aSearchString-search string entered by user
+	*/	
+	IMPORT_C void IRISDSSearchL(const TDesC& aSearchString);
+		
+	/**
+	* void IRISDSPostL(TFileName &aFileName)
+	*function used to post the sesson logs
+	*@param sesson log file name
+	*/
+	IMPORT_C void IRISDSPostL(TFileName &aFileName);
+	
+	
+		
+	
+	IMPORT_C CIRDataProvider* GetDataProvider();
+	
+	/*
+	* void IRISDSMultiSearch()
+	* function used to search the stations by multi conditions
+    * @param 
+	*/
+	IMPORT_C void IRISDSMultiSearchL(const TDesC& aGenreID, const TDesC& aCountryID, const TDesC& aLanguageID, const TDesC& aSearchText);
+	
+	
+
+	/**
+	* void RHttpGeneralError(TInt aErrorCode)
+	* It is a call back function called by the data provider 
+	* to return error code in case of some error.
+	*@param error code
+	*/
+	void IRHttpGeneralError(TInt aErrCode);
+
+	/**
+	* void IRHttpDataReceived(TDesC& aXmlPath)
+	* It is a call back function called by the data provider 
+	* once it recieves the XML data
+	*/
+	void IRHttpDataReceived(const TDesC& aXmlPath,const CIRHttpResponseData& aResponseHeaders);
+
+	/**
+	* void IRHttpContentNotChanged()	
+	* this is call back funtion called by Dataprovider in case 
+	* HTTP content isnt changed by ISDS 
+	*/	    
+	void IRHttpResponseCodeReceived( TInt aResponseCode,
+		CIRHttpResponseData& aResponseHeaders );
+
+	/**
+	* void ParseError()
+	* Call back funtion called by XML parser in case of parsing error
+	*/
+	void ParseError( TInt aErrorCode );
+
+	/**
+	* void ParsedStructureL(TInt aChoice)
+	* Call back funtion called by XML parser after parsing is over
+	* @param : aChoice -specifies the type of data recieved from ISDS
+	*/    
+	void ParsedStructureL(TInt aChoice);
+
+	/**
+	* void CacheError()
+	* Called from cachemgmt in case of an error
+	*/   
+    void CacheError();
+    
+	/**
+	* void CacheError()
+	* Called from cachemgmt in case of cache failure
+	*/ 
+    void CacheFailed();
+    
+	/**
+	* void CacheError()
+	* Called from cachemgmt in case cache is invalid
+	*/ 
+    void CacheInvalid();
+    
+	/**
+	* void CacheError()
+	* Called from cachemgmt data retrival is successful
+	*@param aChoice,it gives the data type of the cache
+	*/ 
+    void CachedStructureL(TInt aChoice);
+    
+	/**
+	*void CIRIsdsClient::SyncPresetL()
+	*Used to syncronize presets
+	*@param TInt,TDesC, the preset id and the last modified tag for the preset          
+	*/
+    IMPORT_C TInt SyncPresetL(TInt aPresetId,const TDesC&aIfModifiedSince);
+    
+	/**
+	*void CIRIsdsClient::ConvertToTimeDate()
+	*Used to convert the date-time stamp to Symbian DateTime format
+	*@param TDesC&,TDateTime& the time stamp and the DateTime ref to 
+	*hold the new data
+	*/
+    void ConvertToTimeDate(const TDesC& aTime,TDateTime& aDateTime) const;
+    
+    /**
+    *ReleaseResources()
+    *relese the resources held by isds client
+    */
+	 IMPORT_C void ReleaseResources();
+	 	
+	/**
+	*CIRIsdsClient::GetMultiplePresetsL()
+	*for multiple selected presets to be saved 
+	*@param RArray&,TBool,the array of preset ids to be saved,return value
+	*/
+    IMPORT_C void GetMultiplePresetsL(const RArray<TInt>& aIndexArray,
+    	TBool& aDataFrom);
+        
+    /**
+	*CIRIsdsClient::PurgeOtaInfoL
+	*delete all the data cached wrt OTA
+	*reset the flags
+	*function called when the ota info available earlier is no longer valid
+	*/
+	IMPORT_C void PurgeOtaInfoL();
+	
+
+private:   
+	/**
+	*void IRHttpIssueRequestL(CIRHttpRequestData &);
+	*for making http request to Data Provider with Request object
+	*@param aRequestObject :The request object which has URL and other details
+	*/
+    void IRHttpIssueRequestL(CIRHttpRequestData &aRequestObject);
+	
+	/**
+	* void EncodeUrlL( TDes &aQuery )
+	* Encode the url using EEscapeUrlEncoded mode, This is used in session log
+	* @param url to be encoded
+	*/
+	void EncodeUrlL( TDes& aQuery );
+	
+
+
+	
+private:
+	//Session log
+    TBuf<256> iBrowseUrl;
+    TInt iChannId;	 
+
+	//XML parser instance
+	CIRXMLContentHandler* iXmlReader;
+
+	//ISDS observer reference
+	MIsdsResponseObserver& iIsdsResponseObserver;
+
+	//DataProvider instance
+	CIRDataProvider *iDataProvider;
+	
+	//cache mgmt
+	CIRCacheMgmt *iCache;
+	CIRSettings *iSettings;
+	CArrayPtrFlat<CIRIsdsPreset>* iSendPreset;
+	// used to store the isds base URL
+	HBufC* iISDSBaseUrl;
+	//contains catogory base URL
+	TBuf<256> iCatgoryURL;
+	//contains search base URL
+	TBuf<256>  iSearchURL;	 
+	//contains irid base URL
+	TBuf<256>  iGetIridUrl;
+	TBuf<128>	iGetOtaStatus;
+	TBool iSyncRequest;//1 if the preset data request is a sync request,0 if general request
+	TInt iPresetToBeSynced;//keeps the presetid for which the sync request has been sent
+	TBool iDataFrom;//data from isds =1,isds =0
+	TBool iCatDataFrom;//0 if isds,1 for cache
+	TBool iChannelDataFrom;//0 if isds,1 for cache
+	TBuf <256> iCachePath;
+	TBool iOtaReqFrom;//0 internal 1from UI
+	//session log
+	CIRReportGenerator* iBrowseReport;
+	//conditionalGet
+	TBool iConditonalGet;
+	TTime iLastModifiedTime;
+	TInt  iRequestType;
+	TBool iForceGet;
+	TBool iOnceForTheUsageSession;
+	TBool iPostResponsePending;
+	TBufC8<KIRLanguageCodeLength> iShortLanguageCode;
+	
+	/**
+    * boolean for to track whether the cache request has made or not
+    */
+	TBool   iCacheReqMade;
+	TBool   iIRIDPending;
+	TBool   iReqPending;
+	TBool   iReqFromGetIRIDFunc;
+	TBool   iReqFromSync;
+	
+	/**
+	* to store further pending request objects 
+	*/
+	CIRHttpRequestData* iTempRequestObject;
+	
+};
+
+#endif //ISDSCLIENTDLL_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/isdsclientinc/misdsresponseobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef MISDSRESPONSEOBSERVER
+#define MISDSRESPONSEOBSERVER
+
+#include <e32def.h>
+
+class CIRBrowseCatagoryItems;
+class CIRBrowseChannelItems;
+class CIRIsdsPreset;
+class CIROTAUpdate;
+
+/**
+ * MIsdsResponseObserver
+ * passes events and responses body data recived from isds server with this interface.
+ * An instance of this class must be provided for construction of 
+ * CIRIsdsClient.
+ */
+class MIsdsResponseObserver
+    {
+public:
+    /**
+	 * MIsdsResponseObserver::IsdsErrorL()
+	 * Used to Indiacte error in retrieving data from Isds
+	 * @param aErrCode- contains error code
+	 */
+    virtual void IsdsErrorL(TInt aErrCode) = 0;
+    
+	/**
+	 * MIsdsResponseObserver::IsdsCatogoryDataReceivedL()
+	 * Called when catogory information is recieved from ISDS
+	 * @param aParsedStructure - contains catogory info
+	 */
+	virtual void IsdsCatogoryDataReceivedL(
+		CArrayPtrFlat<CIRBrowseCatagoryItems> & aParsedStructure) = 0;
+    
+	/**
+	 * MIsdsResponseObserver::IsdsChannelDataReceivedL()
+	 * Called when channel information is recieved from ISDS
+	 * @param aParsedStructure - contains Channel info
+	 */
+	virtual void IsdsChannelDataReceivedL(
+		CArrayPtrFlat<CIRBrowseChannelItems> & aParsedStructure) = 0;
+    
+	/**
+	 * MIsdsResponseObserver::IsdsPresetDataReceivedL()
+	 * Called when preset information is recieved from ISDS
+	 * @param aParsedStructure - contains Preset info
+	 */
+	virtual void IsdsPresetDataReceivedL(
+		CArrayPtrFlat<CIRIsdsPreset> & aParsedStructure) = 0;
+    
+	/**
+	 * MIsdsResponseObserver::IsdsIRIDRecieved()
+	 * Called to provide IRID
+	 * @param aIRID  - contains IRID recived from Isds
+	 */
+	virtual void IsdsIRIDRecieved(const TDesC& aIRID)=0;
+
+	/**
+	 * MIsdsResponseObserver::IsdsOtaInfoRecieved()
+	 * called back when OTA info is recieved and Ui needs to be intimated
+	 * @param CIROTAUpdate&,the ota information 
+	 */
+	virtual void IsdsOtaInfoRecieved( CIROTAUpdate &aOtaData)=0;
+
+	/**
+	 * MIsdsResponseObserver::IsdsPresetRemovedL()
+	 * called back when the preset that is synced was removed from isds
+	 * @param TInt,the preset id
+	 */
+	virtual void IsdsPresetRemovedL(TInt aId)=0;
+
+	/**
+	 * MIsdsResponseObserver::IsdsPresetChangedL()
+	 * called back when the preset that is synced has been changed in the isds
+	 * @param CIRIsdsPreset&,the new preset data
+	 */
+	virtual void IsdsPresetChangedL(CIRIsdsPreset& aPreset)=0;
+	
+	/**
+	 * MIsdsResponseObserver::IsdsPresetNoChangeL()
+	 * called back when the preset that is synced has not been changed
+	 */
+	 virtual void IsdsPresetNoChangeL()=0;
+	 
+	};
+
+#endif // MISDSRESPONSEOBSERVER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/isdsclientsrc/irisdsclient.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1715 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <escapeutils.h>
+#include <tinternetdate.h>
+#include <utf.h>
+
+#include "irbrowsecatagoryitems.h"
+#include "irbrowsechannelitems.h"
+#include "ircachemgmt.h"
+#include "irdataprovider.h"
+#include "irdataproviderconstants.h"
+#include "irdebug.h"
+#include "irhttprequestdata.h"
+#include "irotaupdate.h"
+#include "irsessionlogger.h"
+#include "irsettings.h"
+#include "irxmlcontenthandler.h"
+#include "isdsclientdll.h"
+#include "misdsresponseobserver.h"
+
+#include "irisdspreset.h"
+
+const TInt KChannelidMaxLength = 25;
+const TInt KTwo = 2;
+/*const TInt KDays = 7;
+const TInt KHour = 24;
+const TInt KMinute = 60;
+const TInt KSecond = 60;*/
+const TInt KUrlPassMaxLength = 124;
+const TInt KChidMaxLength = 6;
+const TInt KCopyOfTimeMaxLength = 32;
+const TInt KMaxLength = 256;
+const TInt KFour = 4;
+
+_LIT(KBrowseUrl,"/do/directory/browse?type=");
+_LIT(KChannelnSearchUrl,"/do/directory/browse?type=channels&searchText=");
+
+_LIT(KGetIRIDUrl,"/do/service/getIrid");
+_LIT(KGenres,"genres");
+_LIT(KLanguages,"languages");
+_LIT(KCountries,"countries");
+_LIT(KHotpicks,"hotpicks");
+_LIT(KOtaUpdateUrl,"/do/service/otaUpdate?irid=");
+_LIT(KLogUsageUrl,"/do/service/logUsage");
+_LIT(KSearchUrl,"&start=1&size=50");
+_LIT(KMultiSearchUrl, "/do/directory/browse?type=channels&genreID=%S&countryID=%S&languageID=%S&searchText=");
+
+
+// ---------------------------------------------------------------------------
+// CIRIsdsClient::NewL(MIsdsResponseObserver& aobserver)
+// Used by UI to create instance of CIRIsdsClient.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRIsdsClient* CIRIsdsClient::NewL(MIsdsResponseObserver& aobserver,
+	const TDesC& aISDSBaseUrl)
+    {
+	IRLOG_DEBUG( "CIRIsdsClient::NewL - Entering" );
+	CIRIsdsClient* self = CIRIsdsClient::NewLC(aobserver,aISDSBaseUrl);
+	
+	CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRIsdsClient::NewL - Exiting." );
+	return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRIsdsClient::NewLC(MIsdsResponseObserver& aobserver)
+// Creates instance of CIRIsdsClient.
+// ---------------------------------------------------------------------------
+//
+CIRIsdsClient* CIRIsdsClient::NewLC(MIsdsResponseObserver& aobserver,
+									const TDesC& aISDSBaseUrl)
+    {
+    IRLOG_DEBUG( "CIRIsdsClient::NewLC - Entering" );
+    CIRIsdsClient* self = new ( ELeave ) CIRIsdsClient(aobserver);
+    CleanupStack::PushL( self );
+    self->ConstructL(aISDSBaseUrl);
+    IRLOG_DEBUG( "CIRIsdsClient::NewLC - Exiting." );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRIsdsClient::ConstructL()	
+// Symbian two phased constructor
+// ---------------------------------------------------------------------------
+//	
+void CIRIsdsClient::ConstructL(const TDesC& aISDSBaseUrl)
+	{
+	//!	Construsting the DataproviderDLL instance
+	IRLOG_DEBUG( "IRIsdsClient::ConstructL - Entering" );
+	iSettings=CIRSettings::OpenL();	
+	iISDSBaseUrl=aISDSBaseUrl.AllocL();
+//Base URL required to browse through the category
+	iCatgoryURL.Zero();
+	iCatgoryURL.Copy(*iISDSBaseUrl);
+	iCatgoryURL.Append(KBrowseUrl);
+	//Base URL required to search isds 
+	iSearchURL.Zero();
+	iSearchURL.Copy(*iISDSBaseUrl);
+	iSearchURL.Append(KChannelnSearchUrl);	
+	//Base URL required to get IRID
+	iGetIridUrl.Zero();
+	iGetIridUrl.Copy(*iISDSBaseUrl);
+	iGetIridUrl.Append(KGetIRIDUrl);
+	//creates DataProvider
+	iDataProvider=CIRDataProvider::NewL(*this);
+	//creates XML Parser
+	iXmlReader=CIRXMLContentHandler::NewL(*this,*this);
+	//creates Cache manager
+	iCache=CIRCacheMgmt::OpenL(*this);
+	iCache->AddObserverL(this);
+	//Session Log
+    iBrowseReport = CIRReportGenerator::OpenL();
+        // Retrive the current language and set it as an Accept Language
+	TLanguage currentLanguage = User::Language();
+	iShortLanguageCode = IRLanguageMapper::MapLanguage(currentLanguage);
+
+	IRLOG_DEBUG( "IRIsdsClient::ConstructL - Exiting." );
+
+    }
+	
+
+// ---------------------------------------------------------------------------
+// CIRIsdsClient::CIRIsdsClient(MIsdsResponseObserver& aobserver)	
+// Default constructor
+// ---------------------------------------------------------------------------
+//	
+CIRIsdsClient::CIRIsdsClient(MIsdsResponseObserver& aobserver):
+	iIsdsResponseObserver(aobserver)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::CIRIsdsClient" );
+	//No implementation
+	}	
+	
+// ---------------------------------------------------------------------------
+// CIRIsdsClient::~CIRIsdsClient()
+// Destructor
+// ---------------------------------------------------------------------------
+//	
+CIRIsdsClient::~CIRIsdsClient()
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::~CIRIsdsClient - Entering" );
+	delete iDataProvider;
+	delete 	iXmlReader;
+	if(iSendPreset)
+		{
+		iSendPreset->ResetAndDestroy();
+		}
+	delete iSendPreset;
+
+    if (iCache)
+        {
+        iCache->RemoveObserver(this);
+        iCache->Close();
+        }
+
+	if(iSettings)
+		{
+		iSettings->Close();
+		}
+	delete iISDSBaseUrl;
+	if(iBrowseReport)
+        {
+		iBrowseReport->Close();
+		}
+	if(iTempRequestObject)
+		{
+		delete iTempRequestObject;
+		iTempRequestObject = NULL;			
+		}
+
+	IRLOG_DEBUG( "CIRIsdsClient::~CIRIsdsClient - Exiting." );
+	}
+		
+
+EXPORT_C TBool CIRIsdsClient::IRIsdsIsCategoryCachedL(
+             TIRIsdsclientInterfaceIDs aISDSClientRequest)
+{ 
+    iForceGet=EFalse;  
+    TInt res = 0;
+    iCacheReqMade = EFalse;
+    switch(aISDSClientRequest)
+        {
+            //When genre data is requested by user
+        case EGenre:
+            {
+            //set the request type for subsiquent Use           
+             
+            iCachePath.Zero();
+            iCachePath.Copy(KGenres);            
+            iCache->CheckCacheL(0,KGenres,iForceGet,res);       
+            }
+          
+        break;
+        //When Language data is requested by user                       
+        case ELanguages:
+            {
+            
+            iCachePath.Zero();
+            iCachePath.Copy(KLanguages);            
+            iCache->CheckCacheL(0,KLanguages,iForceGet,res);          
+          
+            }
+        break;
+        //When Country data is requested by user                                                    
+        case  ECountries:
+            {
+         
+            iCachePath.Zero();
+            iCachePath.Copy(KCountries);          
+            iCache->CheckCacheL(0,KCountries,iForceGet,res);          
+            }
+        break;
+                    
+            //When hotpics data is requested by user                                                        
+        case  Ehotpicks:
+            {
+            //set the request type for subsiquent Use            
+            iCachePath.Zero();
+            iCachePath.Copy(KHotpicks);
+            iCache->CheckCacheL(1,KHotpicks,iForceGet,res);
+            
+            }
+        break;   
+		default:
+		break;    
+    }
+    
+    if (res == CIRCacheMgmt::ECacheUseable)
+    {
+        return ETrue;
+    }
+     
+    
+    return EFalse; 
+}
+// ---------------------------------------------------------------------------
+// void CIRIsdsClientInteface(TIRIsdsclientInterfaceIDs aISDSClientRequest)
+// Called by UI to make request to ISDS for catogories
+// @param :ENUM value depending on catogory which user wants to explore
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C TBool CIRIsdsClient::IRIsdsClientIntefaceL(TIRIsdsclientInterfaceIDs 
+	aISDSClientRequest)
+	{  
+	//cancels any pending request
+	IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Entering" );
+	CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
+	CleanupStack::PushL(requestData);
+	requestData->iAcceptLanguage.Copy( iShortLanguageCode );
+	//Sets the Htpp method to GET
+	requestData->iMethod = EIRHttpGET;
+	//check for valid cache
+	iForceGet=EFalse;  
+	 
+	TInt res=0;
+	  
+	switch(aISDSClientRequest)
+		{
+            //When genre data is requested by user
+		case EGenre:
+			{
+			//set the request type for subsiquent Use
+			iRequestType=0;
+			iDataFrom=EFalse;
+			iCachePath.Zero();
+			iCachePath.Copy(KGenres);
+			iCacheReqMade = ETrue;
+			iCache->CheckCacheL(0,KGenres,iForceGet,res);
+			if(res==0)//if cache is not available
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KGenres);
+				iConditonalGet=EFalse;
+				//issues request for Genre data
+				IRHttpIssueRequestL(*requestData);
+				iBrowseUrl.Zero();		
+				iBrowseUrl.Copy(requestData->iUri);
+				iBrowseReport->BrowseUrl(iBrowseUrl,0);    
+				iDataFrom=ETrue;				
+				}
+			if(res ==-1)//i cache is stale
+				{
+				iConditonalGet=ETrue;
+				requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+				requestData->isIfModifiedSet = ETrue;
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KGenres);
+				IRHttpIssueRequestL(*requestData);
+				iBrowseUrl.Zero();		
+		        iBrowseUrl.Copy(requestData->iUri);
+		        iBrowseReport->BrowseUrl(iBrowseUrl,0);    
+				iDataFrom=ETrue;	
+				}
+			if (res == 1)
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KGenres);
+				iBrowseUrl.Zero();		
+		        iBrowseUrl.Copy(requestData->iUri);
+		        iBrowseReport->BrowseUrl(iBrowseUrl,0);    						
+				}
+			}
+		break;
+        //When Language data is requested by user			 			
+		case ELanguages:
+			{
+	        //set the request type for subsiquent Use
+	        iRequestType=0;
+			iDataFrom=EFalse;
+			
+			iCachePath.Zero();
+			iCachePath.Copy(KLanguages);
+    		iCacheReqMade = ETrue;
+    		iCache->CheckCacheL(0,KLanguages,iForceGet,res);
+
+			if(res==0)//if cache is not available
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KLanguages);
+				//Isuues request for language data
+				IRHttpIssueRequestL(*requestData);
+				iConditonalGet=EFalse;	
+				iBrowseUrl.Zero();
+				iBrowseUrl.Copy(requestData->iUri);	
+				iBrowseReport->BrowseUrl(iBrowseUrl,0);
+				iDataFrom=ETrue;					
+				}			
+			if(res ==-1)//i cache is stale
+				{
+				iConditonalGet=ETrue;
+				requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+				requestData->isIfModifiedSet=ETrue;
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KLanguages);
+				//Isuues request for language data if cache isnt valid
+				IRHttpIssueRequestL(*requestData);	
+				iBrowseUrl.Zero();
+				iBrowseUrl.Copy(requestData->iUri);	
+				iBrowseReport->BrowseUrl(iBrowseUrl,0);
+				iDataFrom=ETrue;					
+				}
+			if (res == 1)
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KLanguages);
+				iBrowseUrl.Zero();		
+		        iBrowseUrl.Copy(requestData->iUri);
+		        iBrowseReport->BrowseUrl(iBrowseUrl,0);    						
+				}			
+			}
+		break;
+        //When Country data is requested by user			 						      			
+    	case  ECountries:
+			{
+			//set the request type for subsiquent Use
+			iRequestType=0;
+			iDataFrom=EFalse;
+			
+			iCachePath.Zero();
+			iCachePath.Copy(KCountries);
+			iCacheReqMade = ETrue;
+			iCache->CheckCacheL(0,KCountries,iForceGet,res);
+			if(res==0)//if cache is not available
+                {
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KCountries);	
+				//Isuues request for country data			
+				IRHttpIssueRequestL(*requestData);	
+				iConditonalGet=EFalse;
+				iBrowseUrl.Zero();
+				iBrowseUrl.Copy(requestData->iUri);
+				iBrowseReport->BrowseUrl(iBrowseUrl,0);
+				iDataFrom=ETrue;					
+				}
+			if(res ==-1)//i cache is stale
+				{
+				iConditonalGet=ETrue;
+			    requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+				requestData->isIfModifiedSet = ETrue;
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KCountries);
+				//Isuues request for country data if cache isnt valid
+				IRHttpIssueRequestL(*requestData);
+				iBrowseUrl.Zero();		
+			    iBrowseUrl.Copy(requestData->iUri);
+				iBrowseReport->BrowseUrl(iBrowseUrl,0);
+				iDataFrom=ETrue;					
+				}
+			if (res == 1)
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KCountries);
+				iBrowseUrl.Zero();		
+		        iBrowseUrl.Copy(requestData->iUri);
+		        iBrowseReport->BrowseUrl(iBrowseUrl,0);    						
+				}
+			 
+			}
+		break;
+    				
+    		//When hotpics data is requested by user			 						      				
+    	case  Ehotpicks:
+			{
+			//set the request type for subsiquent Use
+			iRequestType=1;
+			iCacheReqMade = ETrue;
+			iCache->CheckCacheL(1,KHotpicks,iForceGet,res);
+			iCachePath.Zero();
+			iCachePath.Copy(KHotpicks);
+			iDataFrom=EFalse;
+
+			if(res==0)//if cache is not available
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KHotpicks);
+				//Isuues request for hotpics data
+				IRHttpIssueRequestL(*requestData);
+				iConditonalGet=EFalse;
+				iBrowseUrl.Zero();
+			    iBrowseUrl.Copy(requestData->iUri);
+			        iBrowseReport->BrowseUrl(iBrowseUrl,0);     
+				iDataFrom=ETrue;					
+				}	
+			if(res ==-1)//i cache is stale
+			 	{
+				 iConditonalGet=ETrue;
+				 requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+				 requestData->isIfModifiedSet=ETrue;
+				 requestData->iUri.Copy(iCatgoryURL);
+				 requestData->iUri.Append(KHotpicks);
+				 //Isuues request for hotpics data if cache isnt valid
+				 IRHttpIssueRequestL(*requestData);
+				 iBrowseUrl.Zero();		
+		         iBrowseUrl.Copy(requestData->iUri);
+				 iBrowseReport->BrowseUrl(iBrowseUrl,0);     
+				 iDataFrom=ETrue;					
+				 }	
+			if (res == 1)
+				{
+				requestData->iUri.Copy(iCatgoryURL);
+				requestData->iUri.Append(KHotpicks);
+				iBrowseUrl.Zero();		
+		        iBrowseUrl.Copy(requestData->iUri);
+		        iBrowseReport->BrowseUrl(iBrowseUrl,0);    						
+				}
+			}
+		break;
+       	
+	    }
+	CleanupStack::PopAndDestroy(requestData); 
+	IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Exiting." );
+	return iDataFrom;		
+	}//end of function	
+	
+	
+EXPORT_C CIRDataProvider* CIRIsdsClient::GetDataProvider()
+{
+	IRLOG_DEBUG( "CIRIsdsClient::GetDataProvider" );
+	return iDataProvider;
+}
+
+	
+	
+	
+
+// ---------------------------------------------------------------------------
+// void IRHttpContentNotChanged()	
+// this is call back funtion called by Dataprovider in case 
+// HTTP content isnt changed by ISDS 
+// ---------------------------------------------------------------------------
+//	
+void CIRIsdsClient::IRHttpResponseCodeReceived( TInt aResponseCode,
+	CIRHttpResponseData& aResponseHeaders )
+	{
+	IRLOG_INFO2( "CIRIsdsClient::IRHttpResponseCodeReceived (%d)", aResponseCode );
+	TInt res = KErrNotFound;
+	switch (aResponseCode)
+		{
+		case KNotFound://404
+			{
+			//make channel user defined.
+			if(iSyncRequest)
+				{
+				iSyncRequest = EFalse;
+				//make the preset user-defined
+				TRAP_IGNORE(iIsdsResponseObserver.IsdsPresetRemovedL(
+													iPresetToBeSynced))	
+				}
+			
+			/*if(iOtaReqFrom)
+				{
+				TRAP_IGNORE(PurgeOtaInfoL())
+				}*/
+			
+			}
+			break;
+		case KNotModified://304
+			{
+			if(iConditonalGet)
+				{
+				//update the trust period 
+				//no problem if it leaves
+				TRAP_IGNORE(iCache->UpdateTrustPeriodL(iRequestType,iCachePath,
+				aResponseHeaders))
+				//do a forced get because the data is notmodifed in isds and 
+				//trustable
+				iForceGet=ETrue;
+				iCacheReqMade = ETrue;
+				TRAP_IGNORE(iCache->CheckCacheL(iRequestType,iCachePath,
+					iForceGet,res))
+				}
+			/*if(iOtaReqFrom)
+				{
+				TRAP_IGNORE(PurgeOtaInfoL())
+				}*/
+			}
+			break;
+		 default:
+		 	{
+		 	
+		 	}
+			break;
+		}
+	IRLOG_DEBUG( "CIRIsdsClient::IRHttpResponseCodeReceived - Exiting." );
+	}
+		
+
+// ---------------------------------------------------------------------------
+// void RHttpGeneralError(TInt aErrorCode)
+// It is a call back function called by the data provider 
+// to return error code in case of some error.
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsClient::IRHttpGeneralError(TInt aErrorCode)
+	{
+	IRLOG_ERROR2( "CIRIsdsClient::IRHttpGeneralError (%d)", aErrorCode );
+	IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR",KNullDesC);
+	if(iSyncRequest)
+		{
+		IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--IF ISYNC",KNullDesC);
+		iSyncRequest=EFalse;
+		if(aErrorCode == KNotModified  ||  aErrorCode == KServiceUnavailable)
+			{
+			TRAP_IGNORE(iIsdsResponseObserver.IsdsPresetNoChangeL())
+			return;			
+			}
+	    IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (1)." );
+		}
+
+	/*if(iOtaReqFrom)
+		{
+		//if internal service request
+		//reset the flag
+		iOtaReqFrom = EFalse
+		IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (2)." )
+		return	
+		}*/
+	if(iConditonalGet)
+		{
+		IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (3). ");
+		iConditonalGet = EFalse;
+		if(aErrorCode==KNotModified)
+			{
+			return;
+			}
+		}
+	if(iPostResponsePending)
+		{
+		IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (4). ");
+		IRRDEBUG2("CIRISDSCLIENT::ISDSGENERALERROR--POSTPENDING",KNullDesC);
+		iPostResponsePending = EFalse;
+		//no action required
+		//session log is backed up before sending;
+		return;
+		}
+	if(iIRIDPending)
+		{
+		IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--IF IRID",KNullDesC);
+		IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (7). ");			
+		iIRIDPending = EFalse;
+//d		TRAP_IGNORE( IRGetIRIDL() )
+		}
+	IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--BEFORE TRAPD",KNullDesC);
+	TRAPD(errd,iIsdsResponseObserver.IsdsErrorL(aErrorCode));
+	if(errd)
+		{
+		IRRDEBUG2("CIRISDSCLIENT::IRHTTPGENERALERROR--IF ERRD",KNullDesC);
+        IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (5)." );
+		return;		
+		}
+    IRLOG_DEBUG( "CIRIsdsClient::IRHttpGeneralError - Exiting (6)." );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// void IRHttpDataReceived(TDesC& aXmlPath)
+// It is a call back function called by the data provider 
+// once it recieves the XML data
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsClient::IRHttpDataReceived( const TDesC& aXmlPath, 
+										const CIRHttpResponseData& aResponseHeaders)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRHttpDataReceived - Entering" );
+	TBuf<KMaxLength> xmlPath;
+	xmlPath.Copy(aXmlPath);
+	
+	//!Calls XML parser with file path to XML file recieved
+	TRAPD(xmlErr,iXmlReader->ParseXmlL(xmlPath,iCachePath,aResponseHeaders))
+	if(xmlErr!=KErrNone)
+		{
+	    IRLOG_DEBUG( "CIRIsdsClient::IRHttpDataReceived - Exiting (1)." );
+		return;
+		}
+
+	if(iIRIDPending)
+		{
+		iIRIDPending = EFalse;
+		//if any request is pending by the time IRID response comes
+		if(iReqPending)
+			{
+			//issue the pending request
+			TRAP_IGNORE(IRHttpIssueRequestL(*iTempRequestObject))
+			}
+		}
+
+	IRLOG_DEBUG( "CIRIsdsClient::IRHttpDataReceived - Exiting (2)." );
+	}
+
+EXPORT_C TBool CIRIsdsClient::IRIsdsIsChannelCachedL(TUint aSelectedOption)
+{   
+    TInt res = 0;
+    iCacheReqMade = EFalse;
+    iForceGet=EFalse;
+     
+     //previous data from cache
+    if (iCatDataFrom)
+    {
+        if (aSelectedOption >= iCache->iPtrCategory->Count())
+        {
+            User::Leave(KErrArgument);
+        }
+
+        if (iCache->iPtrCategory->Count())
+        {
+            iCachePath.Zero();
+            iCachePath.Copy(
+                    (*(iCache->iPtrCategory))[aSelectedOption]->iCatId->Des());
+
+            iCache->CheckCacheL(1,
+                    iCachePath,
+                    iForceGet, res);
+        }
+    }
+    //previous data from xml
+    else
+    {
+        if (aSelectedOption >= iXmlReader->iPtrCategory->Count())
+        {
+            User::Leave(KErrArgument);
+        }
+
+        if (iXmlReader->iPtrCategory->Count())
+        {
+            iCachePath.Zero();
+            iCachePath.Copy(
+                    (*(iXmlReader-> iPtrCategory))[aSelectedOption]->iCatId->Des());
+            iCache->CheckCacheL(
+                    1,
+                    iCachePath,
+                    iForceGet, res);
+        }
+    }
+    
+     
+    if( CIRCacheMgmt::ECacheUseable == res )
+        return ETrue;
+    
+    return EFalse;  
+}
+
+// ---------------------------------------------------------------------------
+// void CIRIsdsClientInteface(TUint aSelectedOption,TIRIsdsClientInterfaces aChoice)
+// This API is used by the UI to make request for isds listed channels
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRIsdsClient::IRIsdsClientIntefaceL(TUint aSelectedOption,
+	TIRIsdsClientInterfaces aChoice,TInt aHistoryBool)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Entering" );
+	iForceGet=EFalse;
+	CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;	  	
+	CleanupStack::PushL(requestData);
+	requestData->iMethod = EIRHttpGET;
+	requestData->iAcceptLanguage.Copy( iShortLanguageCode );
+    requestData->iUri.Copy( *iISDSBaseUrl );
+    
+    TBool isAdvPresent = EFalse;
+    
+
+	TInt res;
+	if(aChoice==ECatagory)
+		{
+		//set the request type for subsiquent Use
+		iRequestType=1;
+		//previous data from cache
+		if(iCatDataFrom)
+			{
+			TInt categoryCacheIndex;
+
+			if (( *(iCache->iPtrCategory))[0]->iCatGetOperation)
+				{
+				isAdvPresent = EFalse;	
+				}
+			else
+				{
+				isAdvPresent = ETrue;	
+				}				
+			if (!isAdvPresent)
+				{
+				categoryCacheIndex = 0;				
+				}
+			else
+				{
+				categoryCacheIndex = 1;					
+				}			
+ 
+			if( aSelectedOption >= iCache->iPtrCategory->Count())
+			{
+			    User::Leave(KErrArgument);
+			}
+			
+			if(iCache->iPtrCategory->Count())
+				{
+				iCachePath.Zero();
+				iCachePath.Copy((*(iCache->iPtrCategory))[aSelectedOption]->iCatId->Des());
+				iCacheReqMade = ETrue;
+				iCache->CheckCacheL(1,(*(iCache->iPtrCategory))[aSelectedOption]->
+					iCatId->Des(),iForceGet,res);
+				iDataFrom=EFalse;			
+				if(res == 0)	
+					{
+					requestData->iUri.Append( (*(iCache->
+						iPtrCategory))[categoryCacheIndex]->iCatGetOperation->Des());
+					requestData->iUri.Append( (*(iCache->
+						iPtrCategory))[aSelectedOption]->iCatId->Des());	
+					IRHttpIssueRequestL(*requestData);
+					iConditonalGet=EFalse;
+					iBrowseUrl.Copy(requestData->iUri);
+					iBrowseReport->BrowseUrl(iBrowseUrl,0);
+					iDataFrom=ETrue;		
+					}
+				if(res == -1)
+					{
+					iConditonalGet=ETrue;
+					requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+					requestData->isIfModifiedSet = ETrue;
+					requestData->iUri.Append( (*(iCache->
+						iPtrCategory))[categoryCacheIndex]->iCatGetOperation->Des()); //0
+					requestData->iUri.Append( (*(iCache->
+						iPtrCategory))[aSelectedOption]->iCatId->Des());	
+					IRHttpIssueRequestL(*requestData);
+					iBrowseUrl.Copy(requestData->iUri);
+					iBrowseReport->BrowseUrl(iBrowseUrl,0);
+					iDataFrom=ETrue;		
+					}		
+				}
+			}
+		//previous data from xml
+		else
+			{
+			TInt categoryXmlIndex;
+			if (( *(iXmlReader->iPtrCategory))[0]->iCatGetOperation)
+				{
+				isAdvPresent = EFalse;	
+				}				
+			else
+				{
+				isAdvPresent = ETrue;	
+				}				
+			if (!isAdvPresent)
+				{
+				categoryXmlIndex = 0;				
+				}
+			else
+				{
+				categoryXmlIndex = 1;					
+				}
+			
+	        if (aSelectedOption >= iXmlReader->iPtrCategory->Count())
+	            {
+	            User::Leave(KErrArgument);
+                }
+	        
+			if(iXmlReader->iPtrCategory->Count())
+				{
+				iCachePath.Zero();
+				iCachePath.Copy((*(iXmlReader->
+					iPtrCategory))[aSelectedOption]->iCatId->Des());
+				iCacheReqMade = ETrue;
+				iCache->CheckCacheL(1,(*(iXmlReader->
+					iPtrCategory))[aSelectedOption]->iCatId->Des(),iForceGet,res);
+				iDataFrom=EFalse;			
+				if( res==0 )	
+					{
+					requestData->iUri.Append( (*(iXmlReader->
+						iPtrCategory))[categoryXmlIndex]->iCatGetOperation->Des());			  	  	
+					requestData->iUri.Append( (*(iXmlReader->
+						iPtrCategory))[aSelectedOption]->iCatId->Des());	
+					IRHttpIssueRequestL(*requestData);
+					iConditonalGet=EFalse;         
+					iBrowseUrl.Copy(requestData->iUri);
+					iBrowseReport->BrowseUrl(iBrowseUrl,0);	
+					iDataFrom=ETrue;	
+					}
+				if( res==-1 )
+					{
+					iConditonalGet=ETrue;
+					requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+					requestData->isIfModifiedSet = ETrue;
+					requestData->iUri.Append( (*(iXmlReader->
+						iPtrCategory))[categoryXmlIndex]->iCatGetOperation->Des());
+					requestData->iUri.Append( (*(iXmlReader->
+						iPtrCategory))[aSelectedOption]->iCatId->Des());	
+					IRHttpIssueRequestL(*requestData);
+					iBrowseUrl.Copy(requestData->iUri);
+					iBrowseReport->BrowseUrl(iBrowseUrl,0);
+					iDataFrom=ETrue;	
+					}
+				}
+			}
+		}
+	else if(aChoice==EChannels)
+		{
+    
+		TBuf<KChannelidMaxLength> channelid;
+		//set the request type for subsiquent Use
+		iRequestType=KTwo;	 	
+		_LIT(KFormat,"%d");
+		if(aHistoryBool)
+			{
+			_LIT(KPresetFetchUrl,"/do/directory/getPreset?channelid=");
+			requestData->iUri.Append(KPresetFetchUrl);
+			TBuf<KChannelidMaxLength> channelid;
+			_LIT(KFormat,"%d");
+			channelid.Format(KFormat,aSelectedOption);
+			requestData->iUri.Append(channelid);	
+			IRHttpIssueRequestL(*requestData);
+			iConditonalGet=EFalse;
+			//Session Log
+			iBrowseUrl.Zero();
+			iBrowseUrl.Copy(requestData->iUri);
+			iBrowseReport->BrowseUrl(iBrowseUrl,1);
+			iDataFrom=ETrue;
+			CleanupStack::PopAndDestroy(requestData); 
+			return iDataFrom;
+			}
+		
+		//previous data from cache
+		if( iChannelDataFrom)
+			{
+			TInt channelCacheIndex;
+			if (( *(iCache->iPtrChannel))[0]->iChannelGetOperation)
+				{
+				isAdvPresent = EFalse;	
+				}				
+			else
+				{
+				isAdvPresent = ETrue;	
+				}				
+			if (!isAdvPresent)
+				{
+				channelCacheIndex = 0;				
+				}
+			else
+				{
+				channelCacheIndex = 1;					
+				}
+			
+
+            if( aSelectedOption >= iCache->iPtrChannel->Count())
+            {
+                User::Leave(KErrArgument);
+            }
+            
+			if(iCache->iPtrChannel->Count())
+				{
+				channelid.Format(KFormat,(*(iCache->
+					iPtrChannel))[aSelectedOption]->iChannelID);
+				iCachePath.Zero();
+				iCachePath.Copy(channelid); 
+				iCacheReqMade = ETrue;
+				iCache->CheckCacheL(KTwo,channelid,iForceGet,res);
+				iDataFrom=EFalse;			
+				if( res == 0 || res==-1)	
+					{
+					requestData->iUri.Append( (*(iCache->
+						iPtrChannel))[channelCacheIndex]->iChannelGetOperation->Des());
+					requestData->iUri.Append(channelid);	
+					IRHttpIssueRequestL(*requestData);
+					iConditonalGet=EFalse;
+	        		//Session Log	
+					iBrowseUrl.Copy(requestData->iUri);				
+					iBrowseReport->BrowseUrl(iBrowseUrl,1);
+					iDataFrom=ETrue;		
+					}
+				}
+			}
+		//previous data from xml
+		else
+			{
+			TInt channelXmlIndex;
+			if( 0 == ( *(iXmlReader->iPtrChannel)).Count() )
+			{
+			    CleanupStack::PopAndDestroy(requestData); 
+			    IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Error!" );
+			    return iDataFrom;
+			}
+			
+			if (( *(iXmlReader->iPtrChannel))[0]->iChannelGetOperation)
+				{
+				isAdvPresent = EFalse;
+				}
+			else
+				{
+				isAdvPresent = ETrue;	
+				}				
+			if (!isAdvPresent)
+				{
+				channelXmlIndex = 0;				
+				}
+			else
+				{
+				channelXmlIndex = 1;					
+				}
+			
+            if( aSelectedOption >= iXmlReader->iPtrChannel->Count())
+            {
+                User::Leave(KErrArgument);
+            }
+            
+			if(iXmlReader->iPtrChannel->Count())
+				{
+				channelid.Format(KFormat,(*(iXmlReader->
+					iPtrChannel))[aSelectedOption]->iChannelID);
+				iCachePath.Zero();
+				iCachePath.Copy(channelid); 
+				iCacheReqMade = ETrue;
+				iCache->CheckCacheL(KTwo,channelid,iForceGet,res);
+				iDataFrom=EFalse;			
+				if(res == 0 || res==-1)	
+					{
+					requestData->iUri.Append( (*(iXmlReader->
+						iPtrChannel))[channelXmlIndex]->iChannelGetOperation->Des());
+					requestData->iUri.Append(channelid);	
+					IRHttpIssueRequestL(*requestData);
+					iConditonalGet=EFalse;
+	                //Session Log
+					iBrowseUrl.Copy(requestData->iUri);
+					iBrowseReport->BrowseUrl(iBrowseUrl,1);
+					iDataFrom=ETrue;		
+					}
+				}
+			}
+		}
+	else
+		{
+			
+		}		
+	CleanupStack::PopAndDestroy(requestData); 
+	IRLOG_DEBUG( "CIRIsdsClient::IRIsdsClientIntefaceL - Exiting" );
+	return iDataFrom;
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRGetIRID()
+// This API is used by the UI to get IR ID from 
+// isds if it doesnt have one
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsClient::IRGetIRIDL()
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRGetIRIDL - Entering" );
+	//if irid is not available fetch it
+	 if(iSettings->GetIRIDL().Length()==0)
+	 	{
+		 iReqFromGetIRIDFunc = ETrue;
+		 iIRIDPending = EFalse;
+		 CIRHttpRequestData *requestData= new(ELeave) CIRHttpRequestData(); 	
+		 CleanupStack::PushL(requestData);		  
+		 requestData->iMethod = EIRHttpGET;
+		 requestData->iAcceptLanguage.Copy( iShortLanguageCode );
+		 requestData->iUri.Copy(iGetIridUrl);		
+		 IRHttpIssueRequestL(*requestData);			
+		 CleanupStack::PopAndDestroy(requestData);
+		 iIRIDPending = ETrue;
+         IRLOG_DEBUG( "CIRIsdsClient::IRGetIRIDL - Exiting (1)." );
+		 return;	
+	 	}
+	IRLOG_DEBUG( "CIRIsdsClient::IRGetIRIDL - Exiting (2)." );
+	}
+// ---------------------------------------------------------------------------
+// void GetOtaStatus()
+// This API is used by the UI to query for ota update 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsClient::GetOtaStatusL(TBool& aDataFrom)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::GetOtaStatusL - Entering" );
+	
+ 	CIRHttpRequestData *requestData= new(ELeave) CIRHttpRequestData();
+  	
+	CleanupStack::PushL(requestData);
+
+	requestData->iMethod = EIRHttpGET;
+	requestData->iAcceptLanguage.Copy(iShortLanguageCode);
+	iGetOtaStatus.Zero();
+	iGetOtaStatus.Copy(*iISDSBaseUrl);
+	iGetOtaStatus.Append(KOtaUpdateUrl);
+	iGetOtaStatus.Append(	iSettings->GetIRIDL());
+	
+	//set the request type for subsiquent Use
+	iRequestType = EOtaInfo;
+	iDataFrom=EFalse;
+	iCachePath.Zero();
+	iCachePath.Copy(KOtaUpdateUrl);
+	TInt res = 0;
+	//check cache if it is a genral service request
+	//not initiated by the user.
+	if(iOtaReqFrom)
+		{
+		iCacheReqMade = ETrue;
+		iCache->CheckCacheL(EOtaInfo,KOtaUpdateUrl,iForceGet,res);
+		}
+	if(res == 1)
+		{
+		aDataFrom = EFalse;
+		}
+	//if cache is not available or stale(dont use the trust period val)
+	if(res == 0 || res == -1)
+		{
+		requestData->iUri.Copy(iGetOtaStatus);
+		iConditonalGet=EFalse;
+		//issues request for ota data
+		iDataProvider->IRHttpIssueRequestL(*requestData);
+		iDataFrom=ETrue;
+		aDataFrom = ETrue;				
+		}	
+	CleanupStack::PopAndDestroy(requestData);	
+	
+	IRLOG_DEBUG( "CIRIsdsClient::GetOtaStatusL - Exiting." );
+	}	
+
+// ---------------------------------------------------------------------------
+// CIRIsdsClient::IRISDSPostL()
+// This API is used to Post Irapp usage report to isds
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsClient::IRISDSPostL(TFileName &/*aFileName*/)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRISDSPostL - Entering" );
+	IRRDEBUG2("CIRISDSCLIENT::ISDSPOSTL",KNullDesC);
+	//Cancels any pending requests
+	IRISDSCancelRequest();
+	CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
+	CleanupStack::PushL(requestData);	 
+	//Sets the Http Method to POST
+	requestData->iMethod = EIRHttpPOST;
+	requestData->iAcceptLanguage.Copy(iShortLanguageCode);
+	requestData->iUri.Copy(*iISDSBaseUrl);
+	requestData->iUri.Append(KLogUsageUrl);
+	//issues request to post the log usage report to isds
+	iPostResponsePending = ETrue;
+	IRHttpIssueRequestL(*requestData);
+	CleanupStack::PopAndDestroy(requestData);
+	IRLOG_DEBUG( "CIRIsdsClient::IRISDSPostL - Exiting" );
+	}
+	
+// ---------------------------------------------------------------------------
+// void CIRISDSCancelRequest()
+// This API is used by the UI to cancel a request made.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsClient::IRISDSCancelRequest()
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRISDSCancelRequest - Entering" );
+	iSyncRequest = EFalse;
+	iReqFromSync = EFalse;
+	iOtaReqFrom = EFalse;
+	iConditonalGet = EFalse;
+	iPostResponsePending = EFalse;
+	iIRIDPending = EFalse;
+	iDataProvider->IRHttpCancelRequest();
+	IRLOG_DEBUG( "CIRIsdsClient::IRISDSCancelRequest - Exiting" );
+	}
+
+EXPORT_C void CIRIsdsClient::IRISDSMultiSearchL(const TDesC& aGenreID, const TDesC& aCountryID, const TDesC& aLanguageID, const TDesC& aSearchText)
+{
+    IRLOG_DEBUG( "CIRIsdsClient::IRISDSMultiSearch - Entering" );
+    CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData();
+    iCachePath.Zero();  
+    CleanupStack::PushL(requestData);
+    
+    requestData->iMethod = EIRHttpGET;
+    requestData->iAcceptLanguage.Copy( iShortLanguageCode );
+    
+    HBufC8* utfEncodedSearchText = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aSearchText );     
+    CleanupStack::PushL( utfEncodedSearchText );    
+    
+     
+    HBufC8 *encodedQuery = NULL; 
+    encodedQuery = EscapeUtils::EscapeEncodeL(*utfEncodedSearchText, EscapeUtils::EEscapeQuery);       
+       
+    HBufC* searchURL = HBufC::NewLC(iISDSBaseUrl->Length() + KMultiSearchUrl().Length() + aGenreID.Length() + aLanguageID.Length() + aCountryID.Length() +
+            KSearchUrl().Length() + utfEncodedSearchText->Size()/2+1);
+    HBufC* searchPartURL = HBufC::NewLC(KMultiSearchUrl().Length() + aGenreID.Length() + aLanguageID.Length() + aCountryID.Length());
+    searchPartURL->Des().Format(KMultiSearchUrl, &aGenreID, &aCountryID, &aLanguageID);
+    
+    HBufC* searchText = HBufC::NewLC(utfEncodedSearchText->Size()/2+1);
+    TPtr searchTextPtr(searchText->Des());
+    searchTextPtr.Copy(*utfEncodedSearchText);
+     
+    TPtr uriPtr( searchURL->Des());
+    uriPtr.Append(*iISDSBaseUrl);
+    uriPtr.Append(*searchPartURL);
+    uriPtr.Append(searchTextPtr);
+    uriPtr.Append(KSearchUrl);    
+    
+    if (encodedQuery)
+    {
+        delete encodedQuery;
+    }   
+    
+    requestData->iUri.Copy( searchURL->Left( requestData->iUri.MaxLength() ) );
+    IRHttpIssueRequestL(*requestData);
+    CleanupStack::PopAndDestroy(searchText);
+    CleanupStack::PopAndDestroy(searchPartURL);    
+    CleanupStack::PopAndDestroy(searchURL);
+    CleanupStack::PopAndDestroy(utfEncodedSearchText);
+    
+    
+    iBrowseUrl.Zero();
+    iBrowseUrl.Copy(requestData->iUri);
+    EncodeUrlL(iBrowseUrl);
+    iBrowseReport->BrowseUrl(iBrowseUrl,1);
+    CleanupStack::PopAndDestroy(requestData);   
+    
+    IRLOG_DEBUG( "CIRIsdsClient::IRISDSMultiSearch - Exiting." );
+}
+// ---------------------------------------------------------------------------
+// void CIRISDSSearch(TDesC& aSearchString)
+// This API is used by the UI to search channels from isds
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsClient::IRISDSSearchL(const TDesC& aSearchString)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRISDSSearchL - Entering" );
+	CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData();
+	iCachePath.Zero();	
+	CleanupStack::PushL(requestData);
+	//Sets the Http method to GET	
+	requestData->iMethod = EIRHttpGET;
+	requestData->iAcceptLanguage.Copy( iShortLanguageCode );
+
+    // This is a blatant hack to circumvent the fact that the application has hard-coded
+    // 256 to be the maximum length of the URI everywhere. Due to time-restraints it is
+    // not feasible to fix the actual issue here, so every search query that would exceed
+    // the said limit is truncated to fit it.
+    //
+    // The practical impacts of this hack is that should the maximum length be exceeded,
+    // a connection timed out query is most often displayed. 
+    //
+    // The scope of this quick hack is to enable users to perform search with UTF-8 characters
+    // with no possibility of application panics due to descriptor overflows, not to fix
+    // the actual problem with the hard-coded TBufs in the application.
+
+    HBufC8* utfEncoded = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aSearchString );
+    CleanupStack::PushL( utfEncoded );
+    HBufC8* uri = HBufC8::NewL( iSearchURL.Size() + utfEncoded->Size() + KSearchUrl().Size() );
+    TPtr8 uriPtr( uri->Des() );
+    uriPtr.Copy( iSearchURL );
+    
+	HBufC8 *encodedQuery = NULL;
+	encodedQuery = EscapeUtils::EscapeEncodeL(*utfEncoded,EscapeUtils::EEscapeQuery);
+    uriPtr.Append( *encodedQuery );
+    uriPtr.Append( KSearchUrl );
+    if(encodedQuery)
+	    {
+	    delete encodedQuery ;	
+	    }
+    CleanupStack::PopAndDestroy( utfEncoded );
+    requestData->iUri.Copy( uri->Left( requestData->iUri.MaxLength() ) );
+	delete uri;
+	
+	IRHttpIssueRequestL(*requestData);
+	iBrowseUrl.Zero();
+	iBrowseUrl.Copy(requestData->iUri);
+	EncodeUrlL(iBrowseUrl);
+	iBrowseReport->BrowseUrl(iBrowseUrl,1);
+	CleanupStack::PopAndDestroy(requestData);
+	IRLOG_DEBUG( "CIRIsdsClient::IRISDSSearchL - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+//void ParsedStructure(TInt aChoice)
+//Call back funtion called by XML parser after parsing is over
+// ---------------------------------------------------------------------------
+//
+void  CIRIsdsClient::ParsedStructureL(TInt aChoice)
+{
+	IRLOG_DEBUG( "CIRIsdsClient::ParsedStructureL - Entering" );
+	//if catogory info is recieved
+	if(aChoice==ECategoryInfoRecieved)
+		{
+		iCatDataFrom=EFalse;
+		iIsdsResponseObserver.IsdsCatogoryDataReceivedL(*(iXmlReader->
+			iPtrCategory));
+		}
+	// if channels list is recieved	
+	else if(aChoice==EChannelListRecieved)
+		{
+		iChannelDataFrom=EFalse;
+ 		iIsdsResponseObserver.IsdsChannelDataReceivedL(*(iXmlReader->iPtrChannel));
+		}
+
+	//if preset data is recieved
+	else if(aChoice==EPresetDataRecieved)
+		{
+		if(iSyncRequest)
+			{
+			iSyncRequest = EFalse;
+			//update the preset(replace it)
+			iIsdsResponseObserver.IsdsPresetChangedL(*iXmlReader->iPtrPreset->At(0));
+			}
+		else
+			{
+			iIsdsResponseObserver.IsdsPresetDataReceivedL(*(iXmlReader->
+				iPtrPreset));	
+			}	
+		}
+	/*else if(aChoice==EOtaInfoRecieved)
+		{
+		if(!iOtaReqFrom)
+			{
+			iIsdsResponseObserver.IsdsOtaInfoRecieved(*iXmlReader->iOTA)
+			}
+		else
+			{
+			iOtaReqFrom=EFalse;
+			//update settings
+			if(iXmlReader->iOTA->iUpdateInterval!=0)
+				{
+				iSettings->SetSilencePeriodL(iXmlReader->iOTA->iUpdateInterval)
+				}
+			else
+				{
+				iSettings->SetSilencePeriodL(KDays*KHour*KMinute*KSecond)
+				}
+			}
+		}*/
+	else if(aChoice==EIridRecieved)
+		{
+		iSettings->SetIRIDL(iXmlReader->iRID);
+		}
+	else if( aChoice == ESessionLogRecieved )
+		{
+		//session log is recieved in ISDS
+		iPostResponsePending = EFalse;
+		iBrowseReport->ReponseFromISDSObtained();
+		}
+	
+	else
+		{
+		TRAPD(errd,iIsdsResponseObserver.IsdsErrorL(KDataProviderTimeout));
+		if(errd)
+			{
+			IRLOG_DEBUG( "CIRIsdsClient::ParsedStructureL - Exiting ." );
+			return;		
+			}
+		}	
+	IRLOG_DEBUG( "CIRIsdsClient::ParsedStructureL - Exiting." );
+	}
+    
+// ---------------------------------------------------------------------------
+// void ParseError()
+// Call back funtion called by XML parser in case of parsing error
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsClient::ParseError( TInt aErrorCode )
+	{
+	IRLOG_ERROR( "CIRIsdsClient::ParseError - Entering" );
+	
+	IRHttpGeneralError( aErrorCode );
+	IRLOG_DEBUG( "CIRIsdsClient::ParseError - Exiting." );
+	}
+
+
+ void CIRIsdsClient::CacheError()
+ 	{
+	IRLOG_ERROR( "CIRIsdsClient::CacheError" );
+ 	}
+
+ void CIRIsdsClient::CacheFailed()
+ 	{
+	IRLOG_WARNING( "CIRIsdsClient::CacheFailed" );
+ 	}
+
+// ---------------------------------------------------------------------------
+// cache is present but Stale.
+// called by cache mgmt as a callback.
+// after copying the lastmodified time into its variable
+// here it is copied into the variable ilastModifiedTime 
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsClient::CacheInvalid()
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::CacheInvalid - Entering" );
+	iLastModifiedTime = iCache->iLastModified;
+	IRLOG_DEBUG( "CIRIsdsClient::CacheInvalid - Exiting" );
+	}
+
+ void CIRIsdsClient::CachedStructureL(TInt aChoice)
+ 	{
+	IRLOG_DEBUG( "CIRIsdsClient::CachedStructureL - Entering" );
+	if(iCacheReqMade)
+		{
+		iCacheReqMade = EFalse;
+		//if catogory info is recieved
+		if(aChoice==ECategoryInfoRecieved)
+			{
+			iCatDataFrom=ETrue;
+			iIsdsResponseObserver.IsdsCatogoryDataReceivedL(*(iCache->iPtrCategory));
+			}
+		
+		// if channels list is recieved	
+		else if(aChoice==EChannelListRecieved)
+			{
+			iChannelDataFrom=ETrue;
+			iIsdsResponseObserver.IsdsChannelDataReceivedL(*(iCache->iPtrChannel));
+			}
+		
+		//if preset data is recieved
+		else if(aChoice==EPresetDataRecieved)
+			{
+			//multiple presets can be presented to the UI.
+			iIsdsResponseObserver.IsdsPresetDataReceivedL(*(iCache->iPtrPreset));
+			}
+			
+		//if ota data is recieved
+		/*else if(aChoice==EOtaInfoRecieved)
+			{
+			if(!iOtaReqFrom)
+				{
+				iIsdsResponseObserver.IsdsOtaInfoRecieved(*iCache->iOTA)
+				}
+			else
+				{
+				iOtaReqFrom=EFalse;
+				//update settings
+				if(iCache->iOTA->iUpdateInterval!=0)
+					{
+					iSettings->SetSilencePeriodL(iCache->iOTA->iUpdateInterval)
+					}
+				else
+					{
+					iSettings->SetSilencePeriodL(KDays*KHour*KMinute*KSecond)
+					}
+				}
+			}*/
+		//if logo data is recieved
+		else if(aChoice==KFour)
+			{
+			//No implementation
+			}
+		else
+			{
+			TRAPD(errd,iIsdsResponseObserver.IsdsErrorL(KDataProviderTimeout));
+			if(errd)
+				{
+				IRLOG_DEBUG( "CIRIsdsClient::CachedStructureL- Exiting ." );
+				return;		
+				}
+			}	
+					
+		}
+    IRLOG_DEBUG( "CIRIsdsClient::CachedStructureL - Exiting." );
+ 	}
+
+// ---------------------------------------------------------------------------
+// void CIRIsdsClient::SyncPresetL()
+// Used to syncronize presets
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRIsdsClient::SyncPresetL(TInt aPresetId,const TDesC& 
+	aIfModifiedSince)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::SyncPresetL - Entering" );
+	IRRDEBUG2("CIRISDCLIENT::SYNCPRESETL",KNullDesC);
+	iReqFromSync = ETrue;
+	iPresetToBeSynced=aPresetId;
+	CIRHttpRequestData * requestData= new(ELeave) CIRHttpRequestData;
+	CleanupStack::PushL(requestData);
+	requestData->iMethod = EIRHttpGET;
+	 
+	requestData->iAcceptLanguage.Copy(iShortLanguageCode);	
+	TDateTime lastModified;
+	ConvertToTimeDate(aIfModifiedSince,lastModified);
+	requestData->isIfModifiedSet=ETrue;
+	requestData->iIfModifiedSince.Set(lastModified.Year(),lastModified.Month(),
+		lastModified.Day(),lastModified.Hour(),lastModified.Minute(),
+		lastModified.Second(),lastModified.MicroSecond());
+	_LIT(KPresetFetchUrl,"/do/directory/getPreset?channelid=");
+
+	TBuf<KUrlPassMaxLength> urlPass(iSettings->GetISDSBaseUrlL());
+	urlPass.Append(KPresetFetchUrl);
+	
+	TBuf<KChidMaxLength> chid;
+	_LIT(KFormat,"%d");
+	chid.Format(KFormat,aPresetId);
+	urlPass.Append(chid);
+	requestData->iUri.Copy(urlPass);
+
+	IRHttpIssueRequestL(*requestData);	
+	CleanupStack::PopAndDestroy(requestData);
+	IRLOG_DEBUG( "CIRIsdsClient::SyncPresetL - Exiting." );
+	return 1;
+	}
+
+// ---------------------------------------------------------------------------
+// void ReleaseResources()
+//
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CIRIsdsClient::ReleaseResources()
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::ReleaseResources - Entering" );
+	iDataProvider->ReleaseResources();	
+	IRLOG_DEBUG( "CIRIsdsClient::ReleaseResources - Exiting" );
+	}
+	
+//---------------------------------------------------------------------------
+//CIRIsdsClient::GetMultiplePresetsL
+//for multiple selected presets to be saved 
+//
+//---------------------------------------------------------------------------	
+//
+	
+EXPORT_C void CIRIsdsClient::GetMultiplePresetsL(const RArray<TInt>& aIndexArray,TBool& aDataFrom)
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::GetMultiplePresetsL - Entering" );
+	_LIT(KSeparator,",");
+	//get the count of the no of requested presets
+	TInt multiSelectedCount = aIndexArray.Count();
+	//allocate space for the request url
+	HBufC8* channelIds = HBufC8::NewLC(multiSelectedCount*KDefaultRealWidth 
+										+ multiSelectedCount);
+	//http request data		
+	CIRHttpRequestData* requestData= new(ELeave) CIRHttpRequestData;
+	requestData->iUri.Copy(*iISDSBaseUrl);
+	CleanupStack::PushL(requestData);
+	requestData->iAcceptLanguage.Copy(iShortLanguageCode);
+	//create a tptr to modify it
+	TPtr8 channelIdPtr = channelIds->Des();
+	//set the request type 
+	iRequestType=EPresets;
+	//result
+	TInt res;	 	
+	_LIT8(KFormat,"%d");
+	//if from cache
+	if( iChannelDataFrom)
+		{
+		for(TInt i=0;i<multiSelectedCount;i++)
+			{
+			ASSERT( aIndexArray[i] >= 0 && aIndexArray[i] < iCache->iPtrChannel->Count() ); 
+			TInt channelID = iCache->iPtrChannel->At(aIndexArray[i])->iChannelID;
+			if(i!=0)
+				{
+				channelIdPtr.Append(KSeparator);
+				}
+			TBuf8<KChannelidMaxLength> channelIdBuf;
+			channelIdBuf.Format(KFormat,channelID);
+			channelIdPtr.Append(channelIdBuf);					
+			}
+		iCachePath.Zero();
+		iCachePath.Copy(*channelIds); 
+		//check if cache is available
+		iCacheReqMade = ETrue;
+		iCache->CheckCacheL(EPresets,iCachePath,iForceGet,res);
+		aDataFrom=EFalse;			
+		if( res == KErrNone )	
+			{
+			requestData->iUri.Append( (*(iCache->
+			iPtrChannel))[0]->iChannelGetOperation->Des());
+			requestData->iUri.Append(*channelIds);	
+			IRHttpIssueRequestL(*requestData);
+			iConditonalGet=EFalse;
+    		//Session Log	
+			iBrowseUrl.Copy(requestData->iUri);				
+			iBrowseReport->BrowseUrl(iBrowseUrl,1);
+			aDataFrom=ETrue;		
+			}
+		if(res == KErrNotFound)
+			{
+			iConditonalGet=ETrue;
+			requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+			requestData->isIfModifiedSet = ETrue;
+			requestData->iUri.Append( (*(iCache->
+			iPtrChannel))[0]->iChannelGetOperation->Des());
+			requestData->iUri.Append(*channelIds);	
+			IRHttpIssueRequestL(*requestData);
+          	iBrowseUrl.Copy(requestData->iUri);				
+			iBrowseReport->BrowseUrl(iBrowseUrl,1);
+			aDataFrom=ETrue;
+			}
+		}
+	//if from xml file
+	else
+		{
+		for(TInt i=0;i<multiSelectedCount;i++)
+			{
+			ASSERT( aIndexArray[i] >= 0 && aIndexArray[i] < iXmlReader->iPtrChannel->Count() );
+			TInt channelID = iXmlReader->iPtrChannel->At(aIndexArray[i])->iChannelID;
+			if(i!=0)
+				{
+				channelIdPtr.Append(KSeparator);
+				}
+			TBuf8<KChannelidMaxLength> channelIdBuf;
+			channelIdBuf.Format(KFormat,channelID);
+			channelIdPtr.Append(channelIdBuf);					
+			}
+		iCachePath.Zero();
+		iCachePath.Copy(*channelIds); 
+		iCacheReqMade = ETrue;
+		iCache->CheckCacheL(EPresets,iCachePath,iForceGet,res);
+		aDataFrom=EFalse;			
+		if( res == KErrNone )	
+			{
+			requestData->iUri.Append( (*(iXmlReader->
+			iPtrChannel))[0]->iChannelGetOperation->Des());
+			requestData->iUri.Append(*channelIds);	
+			IRHttpIssueRequestL(*requestData);
+			iConditonalGet=EFalse;
+            //Session Log
+			iBrowseUrl.Copy(requestData->iUri);
+			iBrowseReport->BrowseUrl(iBrowseUrl,1);
+			aDataFrom=ETrue;		
+			}
+		if(res == KErrNotFound)
+			{
+			iConditonalGet=ETrue;
+			requestData->iIfModifiedSince = iLastModifiedTime.DateTime();
+			requestData->isIfModifiedSet = ETrue;
+			requestData->iUri.Append( (*(iXmlReader->
+				iPtrChannel))[0]->iChannelGetOperation->Des());
+			requestData->iUri.Append(*channelIds);	
+			IRHttpIssueRequestL(*requestData);
+            //Session Log
+			iBrowseUrl.Copy(requestData->iUri);
+			iBrowseReport->BrowseUrl(iBrowseUrl,1);
+			aDataFrom=ETrue;		
+			}
+		}
+	CleanupStack::PopAndDestroy(requestData);
+	CleanupStack::PopAndDestroy(channelIds);
+	IRLOG_DEBUG( "CIRIsdsClient::GetMultiplePresetsL - Exiting" );
+	}
+//---------------------------------------------------------------------------
+//CIRIsdsClient::ConvertToTimeDate
+//converts the date-time stamp (last modified) to Symbian DateTime format
+//---------------------------------------------------------------------------
+	
+void CIRIsdsClient::ConvertToTimeDate(const TDesC& aTime,
+									TDateTime& aDateTime) const
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::ConvertToTimeDate - Entering" );
+	TBuf8<KCopyOfTimeMaxLength> copyOfTime;
+	copyOfTime.Copy(aTime);
+	TInternetDate time;
+	TRAPD(error,time.SetDateL(copyOfTime));
+	if(!error)
+		{
+		aDateTime = time.DateTime();
+		}	
+	
+	IRLOG_DEBUG( "CIRIsdsClient::ConvertToTimeDate - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//CIRIsdsClient::IRHttpIssueRequestL
+//Issues Http Request to DataProvider to get data from URL in Request object
+//The Request URL is also encoded here
+//---------------------------------------------------------------------------
+//
+void CIRIsdsClient::IRHttpIssueRequestL( CIRHttpRequestData &aRequestObject )
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::IRHttpIssueRequestL - Entering" );
+	IRRDEBUG2("CIRISDSCLIENT::IRHTTPISSUEREQUESTL",KNullDesC);
+	if(iIRIDPending)
+		{
+		//if IRID reqeust is pending then queue the reuest 
+		//till IRID response comes
+		iReqPending = ETrue;
+		//temporary request object
+		iTempRequestObject= new(ELeave) CIRHttpRequestData;
+		iTempRequestObject->iMethod = aRequestObject.iMethod;
+		iTempRequestObject->iIfModifiedSince = aRequestObject.iIfModifiedSince;
+		iTempRequestObject->isIfModifiedSet = aRequestObject.isIfModifiedSet;
+		iTempRequestObject->iAcceptLanguage = aRequestObject.iAcceptLanguage;
+		iTempRequestObject->iContentType = aRequestObject.iContentType;
+		iTempRequestObject->iUri = aRequestObject.iUri;
+		}
+	else
+		{
+		if(iSettings->GetIRIDL().Length()==0)
+			{
+			if(iReqFromGetIRIDFunc)
+				{
+				iReqFromGetIRIDFunc = EFalse;
+				iDataProvider->IRHttpIssueRequestL(aRequestObject);					
+				}
+			else
+				{
+				//When the user cancels the http req,irid is not present.
+				//On next request,automatically first irid req is made.
+				//save the actual request
+				//get irid from isds
+				//once irid is received send the saved request to isds
+				iReqPending = ETrue;
+				//temporary request object
+				iTempRequestObject= new(ELeave) CIRHttpRequestData;
+				iTempRequestObject->iMethod = aRequestObject.iMethod;
+				iTempRequestObject->iIfModifiedSince = aRequestObject.iIfModifiedSince;
+				iTempRequestObject->isIfModifiedSet = aRequestObject.isIfModifiedSet;
+				iTempRequestObject->iAcceptLanguage = aRequestObject.iAcceptLanguage;
+				iTempRequestObject->iContentType = aRequestObject.iContentType;
+				iTempRequestObject->iUri = aRequestObject.iUri;
+				IRGetIRIDL();
+				}
+			}
+		else
+			{
+			iReqPending = EFalse;
+			if(iReqFromSync)
+				{
+				iReqFromSync = EFalse;
+				iSyncRequest = ETrue;					
+				}
+			iDataProvider->IRHttpIssueRequestL(aRequestObject);
+			}
+		}
+	IRLOG_DEBUG( "CIRIsdsClient::IRHttpIssueRequestL - Exiting." );
+	}
+
+//---------------------------------------------------------------------------
+//CIRIsdsClient::EncodeUrlL
+//This url encoding is for session log
+//---------------------------------------------------------------------------
+//
+void CIRIsdsClient::EncodeUrlL( TDes &aQuery )
+	{
+	IRLOG_DEBUG( "CIRIsdsClient::EncodeUrlL - Entering" );
+	//Encodes the URL inside the request object
+	HBufC *encodedurl = NULL;
+	encodedurl = EscapeUtils::EscapeEncodeL(aQuery,
+		EscapeUtils::EEscapeUrlEncoded);
+	aQuery.Copy(encodedurl->Left(aQuery.MaxLength()));
+	//encoded url is released
+	if( encodedurl )
+		{
+		delete encodedurl;
+		}
+	IRLOG_DEBUG( "CIRIsdsClient::EncodeUrlL - Exiting." );
+	}
+    
+//---------------------------------------------------------------------------
+//CIRIsdsClient::PurgeOtaInfoL
+//delete all the data cached wrt OTA
+//---------------------------------------------------------------------------
+//
+EXPORT_C void CIRIsdsClient::PurgeOtaInfoL()
+    {		
+	IRLOG_DEBUG( "CIRIsdsClient::PurgeOtaInfoL - Entering" );
+    //reset update available flag to 0
+    iSettings->ReSetUpdateAvailableL();
+    //reset silence period to 0
+    iSettings->SetSilencePeriodL(0);
+    //reset silence period start time to a zero string
+    iSettings->SetSilencePeriodStartL(KNullDesC);
+    //clear the cache info if any
+    TRAP_IGNORE(iCache->RemoveOtaInfoL())
+	IRLOG_DEBUG( "CIRIsdsClient::PurgeOtaInfoL - Exiting" );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/isdsclientsrc/irlanguagemapper.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,340 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <btsdp.h>
+
+#include "irlanguagemapper.h"
+#include "irdebug.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// IRLanguageMapper::MapLanguage
+// ---------------------------------------------------------
+
+TBufC8<KIRLanguageCodeLength> IRLanguageMapper::MapLanguage(TLanguage aLanguage)
+	{
+	IRLOG_DEBUG( "IRLanguageMapper::MapLanguage - Entering" );
+	TUint16 value=0;
+
+	switch(aLanguage)
+		{
+	case ELangEnglish:
+		value = KLanguageEnglish;
+		break;
+	case ELangFrench:
+		value = KLanguageFrench;
+		break;
+	case ELangGerman:
+		value = KLanguageGerman;
+		break;
+	case ELangSpanish:
+		value = KLanguageSpanish;
+		break;
+	case ELangItalian:
+		value = KLanguageItalian;
+		break;
+	case ELangSwedish:
+		value = KLanguageSwedish;
+		break;
+	case ELangDanish:
+		value = KLanguageDanish;
+		break;
+	case ELangNorwegian:
+		value = KLanguageNorwegian;
+		break;
+	case ELangFinnish:
+		value = KLanguageFinnish;
+		break;
+	case ELangAmerican:
+		value = KLanguageEnglish;
+		break;
+	case ELangSwissFrench:
+		value = KLanguageFrench;
+		break;
+	case ELangSwissGerman:
+		value = KLanguageGerman;
+		break;
+	case ELangPortuguese:
+		value = KLanguagePortuguese;
+		break;
+	case ELangTurkish:
+		value = KLanguageTurkish;
+		break;
+	case ELangIcelandic:
+		value = KLanguageIcelandic;
+		break;
+	case ELangRussian:
+		value = KLanguageRussian;
+		break;
+	case ELangHungarian:
+		value = KLanguageHungarian;
+		break;
+	case ELangDutch:
+		value = KLanguageDutch;
+		break;
+	case ELangBelgianFlemish:
+		value = KLanguageDutch;
+		break;
+	case ELangAustralian:
+		value = KLanguageEnglish;
+		break;
+	case ELangBelgianFrench:
+		value = KLanguageFrench;
+		break;
+	case ELangAustrian:
+		value = KLanguageGerman;
+		break;
+	case ELangNewZealand:
+		value = KLanguageEnglish;
+		break;
+	case ELangInternationalFrench:
+		value = KLanguageFrench;
+		break;
+	case ELangCzech:
+		value = KLanguageCzech;
+		break;
+	case ELangSlovak:
+		value = KLanguageSlovak;
+		break;
+	case ELangPolish:
+		value = KLanguagePolish;
+		break;
+	case ELangSlovenian:
+		value = KLanguageSlovenian;
+		break;
+	case ELangTaiwanChinese:
+		value = KLanguageChinese;
+		break;
+	case ELangHongKongChinese:
+		value = KLanguageChinese;
+		break;
+	case ELangPrcChinese:
+		value = KLanguageChinese;
+		break;
+	case ELangJapanese:
+		value = KLanguageJapanese;
+		break;
+	case ELangThai:
+		value = KLanguageThai;
+		break;
+	case ELangAfrikaans:
+		value = KLanguageAfrikaans;
+		break;
+	case ELangAlbanian:
+		value = KLanguageAlbanian;
+		break;
+	case ELangAmharic:
+		value = KLanguageAmharic;
+		break;
+	case ELangArabic:
+		value = KLanguageArabic;
+		break;
+	case ELangArmenian:
+		value = KLanguageArmenian;
+		break;
+	case ELangTagalog:
+		value = KLanguageTagalog;
+		break;
+	case ELangBelarussian:
+		value = KLanguageRussian;
+		break;
+	case ELangBengali:
+		value = KLanguageBengali;
+		break;
+	case ELangBulgarian:
+		value = KLanguageBulgarian;
+		break;
+	case ELangBurmese:
+		value = KLanguageBurmese;
+		break;
+	case ELangCatalan:
+		value = KLanguageCatalan;
+		break;
+	case ELangCroatian:
+		value = KLanguageCroatian;
+		break;
+	case ELangCanadianEnglish:
+		value = KLanguageEnglish;
+		break;
+	case ELangInternationalEnglish:
+		value = KLanguageEnglish;
+		break;
+	case ELangSouthAfricanEnglish:
+		value = KLanguageEnglish;
+		break;
+	case ELangEstonian:
+		value = KLanguageEstonian;
+		break;
+	case ELangFarsi:
+		value = KLanguagePersian;
+		break;
+	case ELangCanadianFrench:
+		value = KLanguageFrench;
+		break;
+	case ELangScotsGaelic:
+		value = KLanguageScotsGaelic;
+		break;
+	case ELangGeorgian:
+		value = KLanguageGeorgian;
+		break;
+	case ELangGreek:
+		value = KLanguageGreek;
+		break;
+	case ELangCyprusGreek:
+		value = KLanguageGreek;
+		break;
+	case ELangGujarati:
+		value = KLanguageGujarati;
+		break;
+	case ELangHebrew:
+		value = KLanguageHebrew;
+		break;
+	case ELangHindi:
+		value = KLanguageHindi;
+		break;
+	case ELangIndonesian:
+		value = KLanguageIndonesian;
+		break;
+	case ELangIrish:
+		value = KLanguageIrish;
+		break;
+	case ELangSwissItalian:
+		value = KLanguageItalian;
+		break;
+	case ELangKannada:
+		value = KLanguageKannada;
+		break;
+	case ELangKazakh:
+		value = KLanguageKazakh;
+		break;
+	case ELangKhmer:
+		value = KLanguageCambodian;
+		break;
+	case ELangKorean:
+		value = KLanguageKorean;
+		break;
+	case ELangLao:
+		value = KLanguageLaothian;
+		break;
+	case ELangLatvian:
+		value = KLanguageLatvian;
+		break;
+	case ELangLithuanian:
+		value = KLanguageLithuanian;
+		break;
+	case ELangMacedonian:
+		value = KLanguageMacedonian;
+		break;
+	case ELangMalay:
+		value = KLanguageMalay;
+		break;
+	case ELangMalayalam:
+		value = KLanguageMalayalam;
+		break;
+	case ELangMarathi:
+		value = KLanguageMarathi;
+		break;
+	case ELangMoldavian:
+		value = KLanguageMoldavian;
+		break;
+	case ELangMongolian:
+		value = KLanguageMongolian;
+		break;
+	case ELangNorwegianNynorsk:
+		value = KLanguageNorwegian;
+		break;
+	case ELangBrazilianPortuguese:
+		value = KLanguagePortuguese;
+		break;
+	case ELangPunjabi:
+		value = KLanguagePunjabi;
+		break;
+	case ELangRomanian:
+		value = KLanguageRomanian;
+		break;
+	case ELangSerbian:
+		value = KLanguageSerbian;
+		break;
+	case ELangSinhalese:
+		value = KLanguageSinhalese;
+		break;
+	case ELangSomali:
+		value = KLanguageSomali;
+		break;
+	case ELangInternationalSpanish:
+		value = KLanguageSpanish;
+		break;
+	case ELangLatinAmericanSpanish:
+		value = KLanguageSpanish;
+		break;
+	case ELangSwahili:
+		value = KLanguageSwahili;
+		break;
+	case ELangFinlandSwedish:
+		value = KLanguageSwedish;
+		break;
+	case ELangTamil:
+		value = KLanguageTamil;
+		break;
+	case ELangTelugu:
+		value = KLanguageTelugu;
+		break;
+	case ELangTibetan:
+		value = KLanguageTibetan;
+		break;
+	case ELangTigrinya:
+		value = KLanguageTigrinya;
+		break;
+	case ELangCyprusTurkish:
+		value = KLanguageTurkish;
+		break;
+	case ELangTurkmen:
+		value = KLanguageTurkmen;
+		break;
+	case ELangUkrainian:
+		value = KLanguageUkrainian;
+		break;
+	case ELangUrdu:
+		value = KLanguageUrdu;
+		break;
+	case ELangVietnamese:
+		value = KLanguageVietnamese;
+		break;
+	case ELangWelsh:
+		value = KLanguageWelsh;
+		break;
+	case ELangZulu:
+		value = KLanguageZulu;
+		break;
+	default:
+		value = KLanguageEnglish;
+		break;
+		}
+
+	/* translate the two bytes into actual 'string' */
+	TBuf8<KIRLanguageCodeLength> ret;
+	TUint char1 = (value >> 8) & 0xFFu;
+	TUint char2 = value & 0xFFu;
+	ret.Append(static_cast<TUint8>(char1));
+	ret.Append(static_cast<TUint8>(char2));
+	IRLOG_DEBUG( "IRLanguageMapper::MapLanguage - Exiting" );
+	return ret;
+	}
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_ai_music_play.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<g>
+<rect fill="none" width="16" height="16"/>
+<path d="M2,2C1.447,2,1,2.448,1,3v11c0,0.552,0.447,1,1,1h13c0.553,0,1-0.448,1-1V3c0-0.552-0.447-1-1-1H2z"/>
+<rect x="2" y="3" fill="#D9D9D9" width="12.313" height="10.302"/>
+<polygon fill="#B2B2B2" points="14,3 14,13 2,13 2,14 15,14 15,3  "/>
+<polygon fill="#5A910A" points="5,5 5,12 12,8.5  "/>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_ai_music_stop.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 16 16">
+<g>
+<g>
+<path d="M2,2C1.447,2,1,2.448,1,3v11c0,0.552,0.447,1,1,1h13c0.553,0,1-0.448,1-1V3c0-0.552-0.447-1-1-1H2z"/>
+<rect x="2" y="3" fill="#D9D9D9" width="12.369" height="10.301"/>
+<polygon fill="#B2B2B2" points="14,3 14,13 2,13 2,14 15,14 15,3 "/>
+<rect fill="none" width="16" height="16"/>
+<rect x="5.115" y="4.846" width="6.439" height="6.439"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_fmradio_tb_listen.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<polygon points="3.729,2.75 3.729,19.25 18.271,11.079 "/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_fmradio_tb_listen_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<polygon fill="#FFFFFF" points="3.729,2.75 3.729,19.25 18.271,11.079 "/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_addstation.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M11,16c2.762,0,5-2.238,5-5l0,0h-2c0,1.656-1.343,3-3,3V16z M11,8V6l0,0c-2.761,0-5,2.239-5,5h2l0,0       C8,9.344,9.344,8,11,8L11,8z M11,4L11,4V2c-4.97,0-9,4.03-9,9h2l0,0C4,7.134,7.134,4,11,4z M18,11c0,3.866-3.134,7-7,7v2l0,0       c4.971,0,9-4.029,9-9l0,0H18z"/>
+<polygon points="21.5,3 19,3 19,0.5 18,0.5 18,3 15.5,3 15.5,4 18,4 18,6.5 19,6.5 19,4 21.5,4 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_addstation_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M11,16c2.762,0,5-2.238,5-5l0,0h-2c0,1.656-1.343,3-3,3V16z M11,8V6l0,0c-2.761,0-5,2.239-5,5h2l0,0       C8,9.344,9.344,8,11,8L11,8z M11,4L11,4V2c-4.97,0-9,4.03-9,9h2l0,0C4,7.134,7.134,4,11,4z M18,11c0,3.866-3.134,7-7,7v2l0,0       c4.971,0,9-4.029,9-9l0,0H18z" fill="#FFFFFF"/>
+<polygon fill="#FFFFFF" points="21.5,3 19,3 19,0.5 18,0.5 18,3 15.5,3 15.5,4 18,4 18,6.5 19,6.5 19,4 21.5,4 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_addtofav.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<polygon points="21,8.922 13.495,8.923 11.03,1.71 8.566,8.922 1,8.923 7.063,13.328 4.687,20.29 11.03,16.21 17.376,20.287        14.995,13.313 "/>
+<polygon points="21.5,3 19,3 19,0.5 18,0.5 18,3 15.5,3 15.5,4 18,4 18,6.5 19,6.5 19,4 21.5,4 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_addtofav_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<polygon fill="#FFFFFF" points="21,8.922 13.495,8.923 11.03,1.71 8.566,8.922 1,8.923 7.063,13.328 4.687,20.29 11.03,16.21        17.376,20.287 14.995,13.313 "/>
+<polygon fill="#FFFFFF" points="21.5,3 19,3 19,0.5 18,0.5 18,3 15.5,3 15.5,4 18,4 18,6.5 19,6.5 19,4 21.5,4 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_findnshop.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M20,3h-4c-0.55,0-1,0.45-1,1v12H1.03c-0.55,0-1,0.45-1,1s0.45,1,1,1H3.5h10H16c0.55,0,1-0.45,1-1V5h3       c0.55,0,1-0.45,1-1S20.55,3,20,3z M12,19.5c0,0.828,0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S14.328,18,13.5,18S12,18.672,12,19.5z        M2,19.5C2,20.328,2.672,21,3.5,21S5,20.328,5,19.5S4.328,18,3.5,18S2,18.672,2,19.5z"/>
+<path d="M14,5l-2.148-0.001v2.673c-0.229,2.143-2.604,2.612-3.953,1.83c-0.385,1.345-1.572,1.829-2.537,1.835       c-1.178,0-2.125-0.708-2.305-1.723C2.86,8.473,3.696,7.397,4.975,7.105V4.999H1.03C0.467,5.002-0.158,5.564,0.081,6.315       l1.999,6C2.217,12.723,2.599,13,3.029,13H14V5z"/>
+<path d="M10.85,1.382c0-0.325-0.357-0.47-0.645-0.327C9.917,1.199,5.977,3.17,5.977,3.17v4.906       C5.764,8.031,5.533,8.02,5.293,8.063C4.495,8.204,3.936,8.821,4.043,9.44c0.109,0.619,0.847,1.008,1.646,0.866       c0.719-0.125,1.238-0.639,1.256-1.192H6.95V4.306l2.927-1.463v3.771C9.664,6.567,9.433,6.558,9.194,6.599       C8.395,6.74,7.837,7.357,7.944,7.977C8.042,8.532,8.649,8.9,9.35,8.866c0.773,0.011,1.43-0.583,1.496-1.195L10.85,1.382z"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_findnshop_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M20,3h-4c-0.55,0-1,0.45-1,1v12H1.03c-0.55,0-1,0.45-1,1s0.45,1,1,1H3.5h10H16c0.55,0,1-0.45,1-1V5h3       c0.55,0,1-0.45,1-1S20.55,3,20,3z M12,19.5c0,0.828,0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S14.328,18,13.5,18S12,18.672,12,19.5z        M2,19.5C2,20.328,2.672,21,3.5,21S5,20.328,5,19.5S4.328,18,3.5,18S2,18.672,2,19.5z" fill="#FFFFFF"/>
+<path d="M14,5l-2.148-0.001v2.673c-0.229,2.143-2.604,2.612-3.953,1.83c-0.385,1.345-1.572,1.829-2.537,1.835       c-1.178,0-2.125-0.708-2.305-1.723C2.86,8.473,3.696,7.397,4.975,7.105V4.999H1.03C0.467,5.002-0.158,5.564,0.081,6.315       l1.999,6C2.217,12.723,2.599,13,3.029,13H14V5z" fill="#FFFFFF"/>
+<path d="M10.85,1.382c0-0.325-0.357-0.47-0.645-0.327C9.917,1.199,5.977,3.17,5.977,3.17v4.906       C5.764,8.031,5.533,8.02,5.293,8.063C4.495,8.204,3.936,8.821,4.043,9.44c0.109,0.619,0.847,1.008,1.646,0.866       c0.719-0.125,1.238-0.639,1.256-1.192H6.95V4.306l2.927-1.463v3.771C9.664,6.567,9.433,6.558,9.194,6.599       C8.395,6.74,7.837,7.357,7.944,7.977C8.042,8.532,8.649,8.9,9.35,8.866c0.773,0.011,1.43-0.583,1.496-1.195L10.85,1.382z" fill="#FFFFFF"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_history.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<polygon points="4,1 15,1 15,0 3,0 3,16 4,16 "/>
+<polygon points="6,3 17,3 17,2 5,2 5,18 6,18 "/>
+<polygon points="9.186,17.18 16.419,9.946 16.419,14.316 19,14.316 19,4 7,4 7,20 12.005,20 "/>
+<polygon points="21,15.316 21,19.042 15.418,19.042 15.418,22 10.6,17.18 15.418,12.361 15.418,15.316 "/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_history_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<polygon fill="#FFFFFF" points="4,1 15,1 15,0 3,0 3,16 4,16 "/>
+<polygon fill="#FFFFFF" points="6,3 17,3 17,2 5,2 5,18 6,18 "/>
+<polygon fill="#FFFFFF" points="9.186,17.18 16.419,9.946 16.419,14.316 19,14.316 19,4 7,4 7,20 12.005,20 "/>
+<polygon fill="#FFFFFF" points="21,15.316 21,19.042 15.418,19.042 15.418,22 10.6,17.18 15.418,12.361 15.418,15.316 "/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_saveall.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M17.502,6.998V4.499h-2.5V2H3v19h16V6.998H17.502z M8,5.771h7.498c0.277,0,0.5,0.223,0.5,0.5s-0.223,0.5-0.5,0.5H8       c-0.277,0-0.5-0.223-0.5-0.5S7.723,5.771,8,5.771z M6.006,5.521c0.414,0,0.75,0.336,0.75,0.75s-0.336,0.75-0.75,0.75       s-0.75-0.336-0.75-0.75S5.592,5.521,6.006,5.521z M6.006,16.023c-0.414,0-0.75-0.336-0.75-0.75s0.336-0.75,0.75-0.75       s0.75,0.336,0.75,0.75S6.42,16.023,6.006,16.023z M6.006,13.051c-0.414,0-0.75-0.336-0.75-0.75s0.336-0.75,0.75-0.75       s0.75,0.336,0.75,0.75S6.42,13.051,6.006,13.051z M6.039,9.988c-0.414,0-0.75-0.336-0.75-0.75c0-0.413,0.336-0.75,0.75-0.75       s0.75,0.337,0.75,0.75C6.789,9.652,6.453,9.988,6.039,9.988z M15.498,15.773h-7.5c-0.275,0-0.498-0.224-0.498-0.5       c0-0.275,0.223-0.502,0.498-0.502h7.5c0.277,0,0.502,0.227,0.502,0.502C16,15.551,15.775,15.773,15.498,15.773z M15.498,12.803       h-7.5c-0.275,0-0.498-0.225-0.498-0.502c0-0.275,0.223-0.5,0.498-0.5h7.5c0.277,0,0.502,0.225,0.502,0.5       C16,12.578,15.775,12.803,15.498,12.803z M15.498,9.744H8c-0.277,0-0.502-0.224-0.502-0.501c0-0.276,0.225-0.5,0.502-0.5h7.498       c0.277,0,0.502,0.225,0.502,0.5C16,9.521,15.775,9.744,15.498,9.744z"/>
+<polygon points="22,2.51 19.5,2.51 19.5,0.01 18.5,0.01 18.5,2.51 16,2.51 16,3.51 18.5,3.51 18.5,6.01 19.5,6.01 19.5,3.51        22,3.51 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_irradio_tb_saveall_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M17.502,6.998V4.499h-2.5V2H3v19h16V6.998H17.502z M8,5.771h7.498c0.277,0,0.5,0.223,0.5,0.5       s-0.223,0.5-0.5,0.5H8c-0.277,0-0.5-0.223-0.5-0.5S7.723,5.771,8,5.771z M6.006,5.521c0.414,0,0.75,0.336,0.75,0.75       s-0.336,0.75-0.75,0.75s-0.75-0.336-0.75-0.75S5.592,5.521,6.006,5.521z M6.006,16.023c-0.414,0-0.75-0.336-0.75-0.75       s0.336-0.75,0.75-0.75s0.75,0.336,0.75,0.75S6.42,16.023,6.006,16.023z M6.006,13.051c-0.414,0-0.75-0.336-0.75-0.75       s0.336-0.75,0.75-0.75s0.75,0.336,0.75,0.75S6.42,13.051,6.006,13.051z M6.039,9.988c-0.414,0-0.75-0.336-0.75-0.75       c0-0.413,0.336-0.75,0.75-0.75s0.75,0.337,0.75,0.75C6.789,9.652,6.453,9.988,6.039,9.988z M15.498,15.773h-7.5       c-0.275,0-0.498-0.224-0.498-0.5c0-0.275,0.223-0.502,0.498-0.502h7.5c0.277,0,0.502,0.227,0.502,0.502       C16,15.551,15.775,15.773,15.498,15.773z M15.498,12.803h-7.5c-0.275,0-0.498-0.225-0.498-0.502c0-0.275,0.223-0.5,0.498-0.5       h7.5c0.277,0,0.502,0.225,0.502,0.5C16,12.578,15.775,12.803,15.498,12.803z M15.498,9.744H8c-0.277,0-0.502-0.224-0.502-0.501       c0-0.276,0.225-0.5,0.502-0.5h7.498c0.277,0,0.502,0.225,0.502,0.5C16,9.521,15.775,9.744,15.498,9.744z" fill="#FFFFFF"/>
+<polygon fill="#FFFFFF" points="22,2.51 19.5,2.51 19.5,0.01 18.5,0.01 18.5,2.51 16,2.51 16,3.51 18.5,3.51 18.5,6.01        19.5,6.01 19.5,3.51 22,3.51 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_copy.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 22 22">
+<g>
+<g>
+<rect fill="none" width="22" height="22"/>
+<path d="M4.792,10.375c-0.287,0-0.521-0.232-0.521-0.521c0-0.287,0.233-0.52,0.521-0.52H7.75V7.521H4.792      C4.505,7.521,4.271,7.289,4.271,7c0-0.287,0.233-0.52,0.521-0.52H7.75V5.584h5.979V1.167H2.854v14H7.75v-4.792H4.792z       M4.792,3.625h7.001c0.287,0,0.521,0.233,0.521,0.521c0,0.288-0.233,0.521-0.521,0.521H4.792c-0.287,0-0.521-0.233-0.521-0.521      C4.271,3.859,4.505,3.625,4.792,3.625z"/>
+<path d="M8.604,6.375v14h10.875v-14H8.604z M17.543,15.584h-7.001c-0.287,0-0.521-0.232-0.521-0.521      c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52C18.063,15.352,17.83,15.584,17.543,15.584z M17.543,12.73      h-7.001c-0.287,0-0.521-0.232-0.521-0.521c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52      C18.063,12.498,17.83,12.73,17.543,12.73z M17.543,9.875h-7.001c-0.287,0-0.521-0.233-0.521-0.521s0.233-0.521,0.521-0.521      h7.001c0.287,0,0.521,0.234,0.521,0.521S17.83,9.875,17.543,9.875z"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_copy_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 22 22">
+<g>
+<g>
+<rect fill="none" width="22" height="22"/>
+<path fill="#FFFFFF" d="M4.792,10.375c-0.287,0-0.521-0.232-0.521-0.521c0-0.287,0.233-0.52,0.521-0.52H7.75V7.521H4.792      C4.505,7.521,4.271,7.289,4.271,7c0-0.287,0.233-0.52,0.521-0.52H7.75V5.584h5.979V1.167H2.854v14H7.75v-4.792H4.792z       M4.792,3.625h7.001c0.287,0,0.521,0.233,0.521,0.521s-0.233,0.521-0.521,0.521H4.792c-0.287,0-0.521-0.233-0.521-0.521      C4.271,3.859,4.505,3.625,4.792,3.625z"/>
+<path fill="#FFFFFF" d="M8.604,6.375v14h10.875v-14H8.604z M17.543,15.584h-7.001c-0.287,0-0.521-0.232-0.521-0.521      c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52C18.063,15.352,17.83,15.584,17.543,15.584z M17.543,12.73      h-7.001c-0.287,0-0.521-0.232-0.521-0.521c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.231,0.521,0.52      C18.063,12.498,17.83,12.73,17.543,12.73z M17.543,9.875h-7.001c-0.287,0-0.521-0.233-0.521-0.521s0.233-0.521,0.521-0.521      h7.001c0.287,0,0.521,0.234,0.521,0.521S17.83,9.875,17.543,9.875z"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_details.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M19,2.001H3c-0.553,0-1,0.447-1,1V19c0,0.554,0.447,1,1,1h16c0.553,0,1-0.446,1-1V3C20,2.448,19.553,2.001,19,2.001z        M12.703,17.606H9.781V9.857H8.676v-1.66h4.027V17.606z M11.242,7.12c-1.058,0-1.586-0.62-1.586-1.337       c0-0.731,0.487-1.336,1.586-1.336c1.132,0,1.584,0.714,1.584,1.336C12.826,6.61,12.154,7.12,11.242,7.12z"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_details_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<path d="M19,2.001H3c-0.553,0-1,0.447-1,1V19c0,0.554,0.447,1,1,1h16c0.553,0,1-0.446,1-1V3       C20,2.448,19.553,2.001,19,2.001z M12.703,17.606H9.781V9.857H8.676v-1.66h4.027V17.606z M11.242,7.12       c-1.058,0-1.586-0.62-1.586-1.337c0-0.731,0.487-1.336,1.586-1.336c1.132,0,1.584,0.714,1.584,1.336       C12.826,6.61,12.154,7.12,11.242,7.12z" fill="#FFFFFF"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_find.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<path d="M13.948,11.441c-0.162,0.263-0.882,1.491-2.495,2.5L18.509,21c0.57-0.284,1.64-0.857,2.491-2.505L13.948,11.441z"/>
+<path d="M13.958,6.764c-0.406-3.568-3.627-6.127-7.192-5.721c-3.57,0.404-6.132,3.625-5.724,7.192       c0.404,3.566,3.627,6.128,7.194,5.722C11.802,13.551,14.363,10.331,13.958,6.764z M8.123,12.964       c-3.019,0.345-5.746-1.823-6.087-4.841C1.69,5.105,3.858,2.379,6.878,2.038c3.017-0.344,5.742,1.821,6.086,4.84       C13.309,9.896,11.14,12.621,8.123,12.964z"/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_find_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<path d="M13.948,11.441c-0.162,0.263-0.882,1.491-2.495,2.5L18.509,21c0.57-0.284,1.64-0.857,2.491-2.505       L13.948,11.441z" fill="#FFFFFF"/>
+<path d="M13.958,6.764c-0.406-3.568-3.627-6.127-7.192-5.721c-3.57,0.404-6.132,3.625-5.724,7.192       c0.404,3.566,3.627,6.128,7.194,5.722C11.802,13.551,14.363,10.331,13.958,6.764z M8.123,12.964       c-3.019,0.345-5.746-1.823-6.087-4.841C1.69,5.105,3.858,2.379,6.878,2.038c3.017-0.344,5.742,1.821,6.086,4.84       C13.309,9.896,11.14,12.621,8.123,12.964z" fill="#FFFFFF"/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_next.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<polygon points="17.211,4.643 17.211,10.58 9.666,4.85 9.666,10.585 2.02,4.85 2.02,17.146 9.666,11.507 9.666,17.146        17.211,11.512 17.211,17.146 20,17.146 20,4.643 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_next_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<polygon fill="#FFFFFF" points="17.211,4.643 17.211,10.58 9.666,4.85 9.666,10.585 2.02,4.85 2.02,17.146 9.666,11.507        9.666,17.146 17.211,11.512 17.211,17.146 20,17.146 20,4.643 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_paste.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 22 22">
+<g>
+<g>
+<rect fill="none" width="22" height="22"/>
+<path d="M19.562,8.625H8.687v11.25h10.875V8.625z M10.624,11.083h7.001c0.287,0,0.521,0.235,0.521,0.522s-0.233,0.52-0.521,0.52      h-7.001c-0.287,0-0.521-0.232-0.521-0.52S10.337,11.083,10.624,11.083z M17.625,17.834h-7.001c-0.287,0-0.521-0.232-0.521-0.521      c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52C18.146,17.602,17.912,17.834,17.625,17.834z       M17.625,14.981h-7.001c-0.287,0-0.521-0.232-0.521-0.521c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52      C18.146,14.749,17.912,14.981,17.625,14.981z"/>
+<g>
+<polygon points="14.801,7.479 14.801,2.579 11.879,2.579 13.909,4.371 4.224,4.371 6.255,2.579 3.331,2.579 3.331,17.141        7.643,17.141 7.643,7.479 "/>
+<polygon points="6.775,3.487 7.705,2.556 6.368,1.218 11.766,1.218 10.539,2.443 11.605,3.51 "/>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_paste_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 22 22">
+<g>
+<g>
+<rect fill="none" width="22" height="22"/>
+<path fill="#FFFFFF" d="M19.562,8.625H8.687v11.25h10.875V8.625z M10.624,11.083h7.001c0.287,0,0.521,0.235,0.521,0.522      s-0.233,0.52-0.521,0.52h-7.001c-0.287,0-0.521-0.232-0.521-0.52S10.337,11.083,10.624,11.083z M17.625,17.834h-7.001      c-0.287,0-0.521-0.232-0.521-0.521c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52      C18.146,17.602,17.912,17.834,17.625,17.834z M17.625,14.981h-7.001c-0.287,0-0.521-0.232-0.521-0.521      c0-0.287,0.233-0.52,0.521-0.52h7.001c0.287,0,0.521,0.232,0.521,0.52C18.146,14.749,17.912,14.981,17.625,14.981z"/>
+<g>
+<polygon fill="#FFFFFF" points="14.801,7.479 14.801,2.579 11.879,2.579 13.909,4.371 4.224,4.371 6.255,2.579 3.331,2.579        3.331,17.141 7.643,17.141 7.643,7.479 "/>
+<polygon fill="#FFFFFF" points="6.775,3.487 7.705,2.556 6.368,1.218 11.766,1.218 10.539,2.443 11.605,3.51 "/>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_play.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<polygon points="3.729,2.75 3.729,19.25 18.271,11.079 "/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_play_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<polygon fill="#FFFFFF" points="3.729,2.75 3.729,19.25 18.271,11.079 "/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_previous.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<polygon points="19.99,4.955 12.344,10.69 12.344,4.955 4.797,10.686 4.797,4.748 2.01,4.748 2.01,17.252 4.797,17.252        4.797,11.617 12.344,17.252 12.344,11.611 19.99,17.252 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_previous_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="none" height="22" width="22"/>
+<polygon fill="#FFFFFF" points="19.99,4.955 12.344,10.69 12.344,4.955 4.797,10.686 4.797,4.748 2.01,4.748 2.01,17.252        4.797,17.252 4.797,11.617 12.344,17.252 12.344,11.611 19.99,17.252 "/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_stop.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect height="14" width="14" x="4" y="4"/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_indi_tb_stop_white.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="22" viewBox="0 0 22 22" width="22">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="#FFFFFF" height="14" width="14" x="4" y="4"/>
+<rect fill="none" height="22" width="22"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_ir_transparent.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="6" viewBox="0 0 6 6" width="6" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<switch>
+<foreignObject content="structured text" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"/>
+<g>
+<g>
+<rect fill="#FFFFFF" fill-opacity="0" height="5" stroke="#FFFFFF" stroke-opacity="0" width="5" x="0.5" y="0.5"/>
+</g>
+</g>
+</switch>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_menu_irradio.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 44 44">
+<g>
+<g>
+<g>
+<path d="M33.216,16.98c-1.104,0-2,0.896-2,2v12.941c0,1.104,0.896,2,2,2h3.451c1.104,0,2-0.896,2-2V18.98c0-1.104-0.896-2-2-2       H33.216z"/>
+</g>
+<g>
+<path d="M7.333,16.98c-1.104,0-2,0.896-2,2v12.941c0,1.104,0.896,2,2,2h3.451c1.104,0,2-0.896,2-2V18.98c0-1.104-0.896-2-2-2       H7.333z"/>
+</g>
+<g>
+<path d="M8.196,25.45c0,3.688,1.436,7.155,4.043,9.763c2.607,2.606,6.073,4.042,9.76,4.042c7.611,0,13.804-6.192,13.804-13.805       c0-7.611-6.192-13.803-13.804-13.803C14.388,11.647,8.196,17.839,8.196,25.45z"/>
+</g>
+<circle fill="#635E54" cx="22" cy="25.45" r="12.941"/>
+<path fill="#AAA096" d="M11.571,31.533l21.557-10.778c-1.836-4.334-6.133-7.382-11.128-7.382      c-6.66,0-12.079,5.418-12.079,12.078C9.921,27.668,10.525,29.745,11.571,31.533z"/>
+<g>
+<path fill="#4F4A44" d="M18.567,13.336h-1.084c-0.516,0.193-1.021,0.41-1.503,0.664v1.063c0,0,0,0.862-0.863,0.862       s-1.727,0-1.727,0s-0.047,0-0.114-0.012c-2.199,2.014-3.699,4.77-4.098,7.878c0.434,0.435,0.763,0.764,0.763,0.764       s-0.862,0.86,0,1.725c0.863,0.862,4.314,4.313,4.314,4.313s-0.863,0.863,0,1.726c0.803,0.802,1.726,1.727,1.726,1.727v2.858       c1.319,0.695,2.772,1.161,4.313,1.364v-0.771c0.863,0,1.725-0.864,1.725-1.727v-4.313c0-0.762-0.913-1.726-1.725-1.726       s-1.726,0-1.726,0s-0.337-0.337-0.863-0.862c-0.526-0.527-1.225-0.504-1.725,0c-0.5,0.501-0.863,0.862-0.863,0.862       l-1.726-1.726c0.427-0.427,0.46-1.249,0-1.709c-0.46-0.461-0.861-0.88-0.861-0.88c-0.446-0.444-0.446-1.282,0-1.726       c0.442-0.444,1.279-0.444,1.724,0l0.863,0.865v1.725c0,0.431,0.863,0.431,0.863,0v-1.725l1.725-2.589c0,0,0,0,0.863,0       c0.862,0,1.726-0.864,1.726-1.727c0-0.861-0.863-1.726-1.726-1.726c-0.806,0-0.431,0-0.863,0s-0.432-0.864,0-0.864       s1.725,0,1.725,0s-0.001,0,0.863,0.864c0.432,0.433,1.294,0.431,1.726,0c0.431-0.432,0.429-1.294,0-1.726       C21.949,16.719,18.567,13.336,18.567,13.336z M34.676,22.826h-1.442l-1.726,1.728c0,0-1.725,0-2.587,0       c-0.863,0-1.727,0.86-1.727,1.725v2.588c0,0.825,0.921,1.725,1.727,1.725c0,0.009,0.862,0,0.862,0s0,0.863,0,1.726       c0,0.863,0.863,0.863,0.863,0.863v1.883c2.631-2.369,4.295-5.791,4.295-9.612C34.941,24.554,34.848,23.674,34.676,22.826z        M28.921,23.688c0.862,0,0.862-0.862,0.862-0.862v-1.722c0,0,0.005-0.866,0.864-0.866h2.586c0,0,0,0.863,0.863,0.863       c0.027,0,0.052,0,0.079,0c-1.28-3.587-4.092-6.436-7.658-7.765h-0.187l-1.725,1.726v2.591l0.696,0.696       c0.222,0.224,0.641,0.224,0.862,0c0.223-0.222,0.223-0.641,0-0.863l-0.255-0.254c-0.452-0.453,0-0.875,0-0.875       s0.421-0.433,0.854,0c0.431,0.432,0.86,0.867,0.86,0.867s-1.754,1.756-2.154,2.153c-0.399,0.401,0,0.864,0,0.864l0.861,0.863       c0,0,0,0.861,0,1.722c0,0.862,0.863,0.862,0.863,0.862S28.058,23.688,28.921,23.688z"/>
+<path fill="#FFFDFC" d="M18.288,13.057c-1.161,0.346-2.251,0.857-3.251,1.495c-0.087,0.229-0.285,0.474-0.717,0.501       c-3.171,2.345-5.239,6.097-5.257,10.342c0.005,0.006,0.009,0.013,0.016,0.02c0.862,0.863,4.313,4.313,4.313,4.313       s-0.861,0.863,0,1.725c0.803,0.803,1.726,1.728,1.726,1.728v3.217c1.301,0.82,2.754,1.423,4.313,1.738V36.63       c0.863,0,1.726-0.862,1.726-1.725v-4.314c0-0.765-0.913-1.727-1.726-1.727c-0.813,0-1.725,0-1.725,0s-0.337-0.336-0.862-0.861       c-0.526-0.527-1.225-0.502-1.726,0c-0.5,0.501-0.863,0.861-0.863,0.861L12.53,27.14c0.425-0.427,0.458-1.248,0-1.709       c-0.461-0.46-0.864-0.879-0.864-0.879c-0.444-0.446-0.444-1.282,0-1.726c0.443-0.445,1.281-0.445,1.725,0l0.863,0.862v1.726       c0,0.431,0.863,0.431,0.863,0v-1.726l1.726-2.589c0,0,0,0,0.862,0c0.863,0,1.725-0.861,1.725-1.724       c0-0.864-0.862-1.727-1.725-1.727c-0.806,0-0.432,0-0.862,0c-0.432,0-0.432-0.862,0-0.862c0.431,0,1.725,0,1.725,0       s-0.002-0.001,0.862,0.862c0.431,0.432,1.295,0.432,1.726,0c0.431-0.431,0.43-1.296,0-1.725       C21.105,15.873,19.258,14.027,18.288,13.057z M34.891,24.443c-0.088-0.143-0.093-0.299-0.035-0.446       c-0.078-0.695-0.218-1.374-0.403-2.033h-2.081l-1.725,1.725c0,0-1.726,0-2.589,0s-1.727,0.863-1.727,1.726v2.588       c0,0.824,0.922,1.726,1.727,1.726c0,0.008,0.863,0,0.863,0s0,0.863,0,1.725c0,0.863,0.862,0.863,0.862,0.863v3.459       c3.128-2.362,5.158-6.102,5.158-10.324C34.941,25.111,34.916,24.777,34.891,24.443z M28.058,22.826       c0.863,0,0.863-0.862,0.863-0.862v-1.723c0,0,0.004-0.867,0.864-0.867h2.586c0,0,0,0.864,0.862,0.864c0.206,0,0.411,0,0.607,0       c-1.606-3.645-4.843-6.396-8.785-7.351l-1.313,1.311v2.591l0.696,0.695c0.224,0.222,0.641,0.222,0.863,0       c0.222-0.22,0.222-0.639,0-0.861l-0.255-0.255c-0.453-0.453,0-0.875,0-0.875s0.422-0.434,0.853,0       c0.431,0.433,0.861,0.867,0.861,0.867s-1.756,1.755-2.155,2.154c-0.399,0.4,0,0.863,0,0.863l0.863,0.864c0,0,0,0.858,0,1.723       c0,0.862,0.861,0.862,0.861,0.862S27.194,22.826,28.058,22.826z"/>
+</g>
+<path fill="#4F4A44" d="M32.756,18.252c-0.241,0.153-0.403,0.421-0.403,0.728v12.941c0,0.307,0.162,0.574,0.403,0.728      c1.38-2.059,2.186-4.534,2.186-7.199C34.941,22.786,34.136,20.311,32.756,18.252z"/>
+<path fill="#4F4A44" d="M11.245,32.649c0.241-0.153,0.402-0.421,0.402-0.728V18.98c0-0.307-0.161-0.574-0.402-0.728      c-1.38,2.058-2.186,4.533-2.186,7.197C9.059,28.115,9.865,30.591,11.245,32.649z"/>
+<path d="M22,4.313L22,4.313L22,4.313c-11.155,0-19.412,4.399-19.412,14.667c0,6.284,0.062,8.442,2.588,10.353h3.02v-5.607h-3.02      c0,0-0.062-0.831-0.062-2.218c0-9.298,7.224-13.496,16.885-13.496v0c9.661,0,16.885,4.198,16.885,13.496      c0,1.388-0.062,2.218-0.062,2.218h-3.02v5.607h3.02c2.527-1.911,2.589-6.532,2.589-10.353C41.412,8.713,33.154,4.313,22,4.313z"/>
+<g>
+<path fill="#D9D9D9" d="M3.451,18.98L3.451,18.98c0,6.094,0.102,7.905,2.045,9.49c0.349,0,1.087,0,1.837,0       c0-1.011,0-2.872,0-3.883c-0.88,0-2.996,0-2.996,0l-0.021-0.799l-0.064-2.282c0-8.991,6.635-14.359,17.748-14.359       c11.113,0,17.748,5.369,17.748,14.359l-0.088,3.12l-0.837-0.04c0,0-1.276,0-2.156,0c0,1.011,0,2.872,0,3.883       c0.737,0,1.435,0,1.806,0c2.059-1.809,2.076-6.225,2.076-9.49C40.549,6.97,28.928,5.176,22,5.176S3.451,6.97,3.451,18.98z"/>
+</g>
+<rect x="7.333" y="18.98" fill="#6EC3FF" width="3.451" height="12.941"/>
+<polygon fill="#2882C8" points="9.921,18.98 9.921,31.059 7.333,31.059 7.333,31.922 10.784,31.922 10.784,18.98 "/>
+<rect x="33.216" y="18.98" fill="#6EC3FF" width="3.451" height="12.941"/>
+<polygon fill="#2882C8" points="35.804,18.98 35.804,31.059 33.216,31.059 33.216,31.922 36.667,31.922 36.667,18.98 "/>
+<path d="M22,4.314L22,4.314L22,4.314c-11.57,0-17.605,4.866-18.549,12.078h4.745C9.47,10.775,13.634,8.602,22,8.585l0,0v0.001      c8.367,0.016,12.53,2.189,13.803,7.806h4.745C39.604,9.18,33.569,4.314,22,4.314z"/>
+<rect fill="none" width="44" height="44"/>
+<g>
+<path fill="#595959" d="M3.854,15.529c1.169,0,2.892,0,3.681,0c1.522-5.439,5.893-7.79,14.463-7.807       c8.574,0.017,12.945,2.368,14.466,7.807c0.789,0,2.511,0,3.681,0C38.075,6.571,27.988,5.176,22,5.176       C16.012,5.176,5.925,6.571,3.854,15.529z"/>
+</g>
+<rect x="36.667" y="24.588" fill="#8A8A8A" width="0.862" height="3.883"/>
+<path fill="#383838" d="M40.176,15.529h-1.614c0.125,0.281,0.237,0.57,0.343,0.863h1.438      C40.295,16.097,40.24,15.81,40.176,15.529z"/>
+<path fill="#383838" d="M3.657,16.392h1.438c0.105-0.293,0.218-0.582,0.342-0.863H3.824C3.76,15.81,3.705,16.097,3.657,16.392z"/>
+<rect x="6.471" y="24.588" fill="#8A8A8A" width="0.863" height="3.883"/>
+<path fill="#8A8A8A" d="M22,5.176c-5.988,0-16.075,1.395-18.146,10.353c0.069-0.297,0.15-0.582,0.235-0.863h2.828      c1.797-5.374,6.461-7.79,15.079-7.807c1.701,0.003,3.243,0.104,4.644,0.298l2.47-1.234C26.583,5.348,24.051,5.176,22,5.176z       M21.999,7.723c1.155,0.002,2.224,0.053,3.23,0.142l0.009-0.004"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_prop_ir_list_play.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 76 76">
+<g>
+<g>
+<rect fill="none" width="76" height="76"/>
+<path fill-opacity="0.5" stroke-opacity="0.5" d="M68.156,60.22c0,4.349-3.526,7.875-7.875,7.875H15.656      c-4.349,0-7.875-3.526-7.875-7.875V15.595c0-4.351,3.526-7.875,7.875-7.875h44.625c4.349,0,7.875,3.524,7.875,7.875V60.22z"/>
+<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="261.5049" y1="5.1226" x2="288.5793" y2="32.1971" gradientTransform="matrix(1 0 0 1 -244.125 18.9697)">
+<stop offset="0" style="stop-color:#848383"/>
+<stop offset="0.1914" style="stop-color:#787777"/>
+<stop offset="1" style="stop-color:#494949"/>
+</linearGradient>
+<path fill="url(#XMLID_7_)" d="M24.736,19.818c-2.066-1.18-3.836-0.107-3.836,1.812c0,1.918,0,30.647,0,32.271      s2.064,2.805,3.54,2.065s30.187-15.761,31.72-16.671c1.771-1.053,1.609-2.584-0.295-3.542      C54.273,34.952,24.736,19.818,24.736,19.818z"/>
+<path d="M21.339,55.238c0,0,2.134,1.453,3.206,0.906c1.071-0.545,31.854-17.098,31.854-17.098s0.604-1.995,0.201-2.56      L21.339,55.238z"/>
+<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="261.3887" y1="4.7949" x2="288.6448" y2="32.0509" gradientTransform="matrix(1 0 0 1 -244.125 18.9697)">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.1084" style="stop-color:#F1F1F1"/>
+<stop offset="1" style="stop-color:#848383"/>
+</linearGradient>
+<path fill="url(#XMLID_8_)" d="M56.398,39.049c0,0,0.807-1.129-0.402-1.855c-1.21-0.726-31.29-15.886-32.258-16.451      c-0.968-0.563-1.775,0.08-1.775,1.048c0,0.969,0,30.727,0,31.695c0,1.531,0.646,2.498,0.646,2.498s-1.921-0.576-2.016-2.338      c-0.054-0.98-0.012-30.964,0-32.097c0.015-1.532,1.369-3.308,3.789-2.099c2.42,1.21,31.625,15.949,32.339,16.451      C58.898,37.437,56.398,39.049,56.398,39.049z"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_prop_ir_list_stopped.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 76 76">
+<g>
+<g>
+<rect fill="none" width="76" height="76"/>
+<path fill-opacity="0.5" stroke-opacity="0.5" d="M68.156,60.22c0,4.348-3.526,7.875-7.875,7.875H15.656      c-4.349,0-7.875-3.527-7.875-7.875V15.595c0-4.351,3.526-7.875,7.875-7.875h44.625c4.349,0,7.875,3.524,7.875,7.875V60.22z"/>
+<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="22.1313" y1="37.9731" x2="54.4346" y2="37.9731">
+<stop offset="0" style="stop-color:#848383"/>
+<stop offset="0.1914" style="stop-color:#787777"/>
+<stop offset="1" style="stop-color:#494949"/>
+</linearGradient>
+<path fill="url(#XMLID_3_)" d="M54.435,50.841c0,1.813-1.47,3.283-3.282,3.283H25.414c-1.813,0-3.283-1.47-3.283-3.283V25.104      c0-1.813,1.47-3.283,3.283-3.283h25.738c1.813,0,3.282,1.47,3.282,3.283V50.841z"/>
+<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="37.9355" y1="21.7769" x2="37.9353" y2="54.0269">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.5965" style="stop-color:#B3B2B2"/>
+<stop offset="1" style="stop-color:#848383"/>
+</linearGradient>
+<path fill="url(#XMLID_4_)" d="M53.838,23.312c0,0-0.795-1.391-2.285-1.491c-1.492-0.1-25.246,0-26.737,0      s-2.783,1.689-2.783,2.882s0,24.944,0,26.039s1.093,3.282,2.584,3.282s-0.596,0.199-0.994-3.28c-0.158-1.382,0-24.153,0-25.644      s0.696-1.789,1.789-1.789S53.838,23.312,53.838,23.312z"/>
+<path d="M23.821,52.335l1.593,1.789c0,0,24.051,0,25.939,0s3.08-1.59,3.08-2.883s0-25.544,0-26.638s-0.596-1.292-0.596-1.292      l-1.689,0.099c0,0,0,25.842,0,27.432c0,1.591-0.796,1.591-1.591,1.591S23.821,52.335,23.821,52.335z"/>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mbm/qgn_prop_set_apps_ir.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 42 29">
+<g>
+<g>
+<rect fill="none" width="42" height="29"/>
+<g>
+<g>
+<path d="M29.118,11.427c-0.799,0-1.448,0.648-1.448,1.448v9.367c0,0.799,0.649,1.446,1.448,1.446h2.498        c0.8,0,1.447-0.647,1.447-1.446v-9.367c0-0.799-0.647-1.448-1.447-1.448H29.118z"/>
+</g>
+<g>
+<path d="M10.384,11.427c-0.799,0-1.447,0.648-1.447,1.448v9.367c0,0.799,0.648,1.446,1.447,1.446h2.499        c0.799,0,1.447-0.647,1.447-1.446v-9.367c0-0.799-0.648-1.448-1.447-1.448H10.384z"/>
+</g>
+<g>
+<path d="M11.009,17.559c0,2.669,1.04,5.179,2.926,7.065C15.822,26.51,18.331,27.55,21,27.55c5.508,0,9.99-4.481,9.99-9.991        c0-5.509-4.48-9.991-9.99-9.991C15.491,7.568,11.009,12.049,11.009,17.559z"/>
+</g>
+<circle fill="#635E54" cx="21" cy="17.558" r="9.367"/>
+<path fill="#AAA096" d="M13.452,21.961l15.603-7.801C27.726,11.023,24.616,8.817,21,8.817c-4.82,0-8.743,3.921-8.743,8.743       C12.258,19.163,12.695,20.667,13.452,21.961z"/>
+<g>
+<path fill="#4F4A44" d="M18.516,8.79h-0.785c-0.374,0.14-0.739,0.297-1.088,0.48v0.77c0,0,0,0.624-0.625,0.624s-1.25,0-1.25,0        s-0.034,0-0.083-0.009c-1.591,1.458-2.677,3.453-2.966,5.702c0.314,0.314,0.552,0.553,0.552,0.553s-0.624,0.623,0,1.249        c0.625,0.624,3.122,3.121,3.122,3.121s-0.624,0.624,0,1.249c0.582,0.58,1.25,1.25,1.25,1.25v2.069        c0.955,0.503,2.006,0.84,3.122,0.986v-0.558c0.625,0,1.249-0.625,1.249-1.251v-3.121c0-0.551-0.661-1.249-1.249-1.249        c-0.587,0-1.249,0-1.249,0s-0.244-0.243-0.625-0.624c-0.381-0.382-0.887-0.364-1.249,0c-0.362,0.362-0.625,0.624-0.625,0.624        l-1.249-1.249c0.309-0.31,0.333-0.903,0-1.237c-0.333-0.333-0.624-0.636-0.624-0.636c-0.323-0.321-0.323-0.929,0-1.25        c0.32-0.321,0.926-0.321,1.248,0l0.625,0.626v1.249c0,0.312,0.625,0.312,0.625,0V16.91l1.249-1.874c0,0,0,0,0.625,0        c0.624,0,1.249-0.625,1.249-1.25c0-0.623-0.625-1.249-1.249-1.249c-0.583,0-0.312,0-0.625,0c-0.313,0-0.313-0.626,0-0.626        c0.313,0,1.248,0,1.248,0s0,0,0.625,0.626c0.313,0.313,0.937,0.312,1.25,0c0.312-0.313,0.311-0.937,0-1.25        C20.963,11.238,18.516,8.79,18.516,8.79z M30.175,15.659h-1.043l-1.25,1.251c0,0-1.248,0-1.872,0s-1.251,0.622-1.251,1.248        v1.873c0,0.597,0.668,1.248,1.251,1.248c0,0.007,0.624,0,0.624,0s0,0.625,0,1.25s0.625,0.625,0.625,0.625v1.362        c1.904-1.715,3.108-4.191,3.108-6.957C30.367,16.91,30.3,16.272,30.175,15.659z M26.01,16.282        c0.624,0,0.624-0.623,0.624-0.623v-1.246c0,0,0.003-0.628,0.625-0.628h1.871c0,0,0,0.625,0.625,0.625c0.021,0,0.039,0,0.058,0        c-0.927-2.596-2.962-4.658-5.542-5.62h-0.136l-1.249,1.25v1.875l0.503,0.504c0.161,0.162,0.464,0.162,0.624,0        c0.162-0.161,0.162-0.464,0-0.625l-0.185-0.184c-0.327-0.328,0-0.633,0-0.633s0.305-0.313,0.618,0        c0.312,0.313,0.622,0.627,0.622,0.627s-1.269,1.271-1.56,1.558c-0.289,0.291,0,0.626,0,0.626l0.624,0.625c0,0,0,0.622,0,1.246        c0,0.623,0.624,0.623,0.624,0.623S25.386,16.282,26.01,16.282z"/>
+<path fill="#FFFDFC" d="M18.313,8.588c-0.84,0.25-1.629,0.62-2.353,1.082c-0.063,0.167-0.207,0.343-0.52,0.363        c-2.295,1.697-3.792,4.413-3.805,7.486c0.003,0.003,0.007,0.009,0.012,0.015c0.624,0.623,3.122,3.122,3.122,3.122        s-0.624,0.624,0,1.248c0.581,0.58,1.249,1.251,1.249,1.251v2.328c0.941,0.593,1.993,1.029,3.122,1.258v-1.09        c0.625,0,1.25-0.625,1.25-1.249v-3.122c0-0.554-0.661-1.25-1.25-1.25c-0.588,0-1.249,0-1.249,0s-0.244-0.244-0.624-0.623        c-0.381-0.381-0.887-0.363-1.25,0c-0.362,0.362-0.625,0.623-0.625,0.623l-1.249-1.248c0.308-0.31,0.332-0.903,0-1.236        c-0.333-0.334-0.625-0.638-0.625-0.638c-0.321-0.322-0.321-0.928,0-1.248c0.321-0.322,0.927-0.322,1.249,0l0.625,0.623v1.25        c0,0.312,0.625,0.312,0.625,0v-1.25l1.249-1.873c0,0,0,0,0.625,0s1.248-0.624,1.248-1.248c0-0.625-0.624-1.25-1.248-1.25        c-0.583,0-0.313,0-0.625,0c-0.312,0-0.312-0.624,0-0.624s1.249,0,1.249,0s-0.001,0,0.624,0.624        c0.312,0.313,0.938,0.313,1.249,0c0.312-0.312,0.312-0.938,0-1.248C20.353,10.626,19.016,9.29,18.313,8.588z M30.331,16.829        c-0.064-0.104-0.067-0.216-0.025-0.322c-0.057-0.504-0.157-0.995-0.292-1.472h-1.506l-1.249,1.249c0,0-1.249,0-1.873,0        c-0.625,0-1.251,0.623-1.251,1.249v1.873c0,0.596,0.667,1.249,1.251,1.249c0,0.005,0.624,0,0.624,0s0,0.624,0,1.248        c0,0.625,0.624,0.625,0.624,0.625v2.503c2.265-1.709,3.733-4.416,3.733-7.472C30.367,17.313,30.349,17.071,30.331,16.829z         M25.386,15.659c0.624,0,0.624-0.624,0.624-0.624v-1.247c0,0,0.003-0.628,0.625-0.628h1.872c0,0,0,0.625,0.623,0.625        c0.15,0,0.299,0,0.44,0c-1.162-2.638-3.505-4.629-6.359-5.32l-0.95,0.949v1.875l0.503,0.503c0.163,0.161,0.465,0.161,0.625,0        c0.161-0.159,0.161-0.463,0-0.624l-0.185-0.184c-0.328-0.328,0-0.634,0-0.634s0.305-0.314,0.617,0        c0.313,0.313,0.623,0.628,0.623,0.628s-1.271,1.271-1.559,1.559c-0.289,0.29,0,0.625,0,0.625l0.624,0.626c0,0,0,0.621,0,1.247        c0,0.624,0.624,0.624,0.624,0.624S24.759,15.659,25.386,15.659z"/>
+</g>
+<path fill="#4F4A44" d="M28.785,12.349c-0.173,0.111-0.291,0.304-0.291,0.526v9.367c0,0.223,0.118,0.415,0.291,0.526       c0.999-1.49,1.582-3.281,1.582-5.21S29.784,13.838,28.785,12.349z"/>
+<path fill="#4F4A44" d="M13.216,22.769c0.174-0.11,0.291-0.304,0.291-0.526v-9.367c0-0.222-0.116-0.416-0.291-0.526       c-0.999,1.489-1.583,3.281-1.583,5.209C11.634,19.487,12.217,21.279,13.216,22.769z"/>
+<path d="M21,2.259L21,2.259L21,2.259c-8.074,0-14.05,3.184-14.05,10.616c0,4.548,0.045,6.11,1.873,7.493h2.186v-4.058H8.823       c0,0-0.045-0.602-0.045-1.606c0-6.729,5.229-9.767,12.222-9.767l0,0c6.992,0,12.221,3.038,12.221,9.767       c0,1.006-0.044,1.606-0.044,1.606h-2.188v4.058h2.188c1.828-1.383,1.873-4.728,1.873-7.493C35.051,5.444,29.073,2.259,21,2.259       z"/>
+<g>
+<path fill="#D9D9D9" d="M7.575,12.875L7.575,12.875c0,4.411,0.073,5.722,1.48,6.868c0.253,0,0.787,0,1.329,0        c0-0.73,0-2.078,0-2.811c-0.636,0-2.168,0-2.168,0l-0.016-0.578l-0.046-1.651C8.154,8.196,12.957,4.311,21,4.311        s12.846,3.886,12.846,10.393l-0.064,2.258l-0.604-0.028c0,0-0.925,0-1.562,0c0,0.732,0,2.079,0,2.811c0.534,0,1.038,0,1.307,0        c1.49-1.31,1.503-4.505,1.503-6.868c0-8.693-8.411-9.991-13.425-9.991C15.986,2.884,7.575,4.182,7.575,12.875z"/>
+</g>
+<rect x="10.384" y="12.875" fill="#6EC3FF" width="2.499" height="9.367"/>
+<polygon fill="#2882C8" points="12.258,12.875 12.258,21.617 10.384,21.617 10.384,22.242 12.883,22.242 12.883,12.875 "/>
+<rect x="29.118" y="12.875" fill="#6EC3FF" width="2.498" height="9.367"/>
+<polygon fill="#2882C8" points="30.992,12.875 30.992,21.617 29.118,21.617 29.118,22.242 31.616,22.242 31.616,12.875 "/>
+<path d="M21,2.26L21,2.26L21,2.26c-8.374,0-12.742,3.522-13.425,8.742h3.434c0.922-4.065,3.936-5.638,9.991-5.65l0,0l0,0       c6.056,0.012,9.069,1.585,9.99,5.65h3.435C33.742,5.782,29.374,2.26,21,2.26z"/>
+<g>
+<path fill="#595959" d="M7.866,10.377c0.846,0,2.094,0,2.665,0c1.102-3.937,4.266-5.638,10.468-5.65        c6.206,0.012,9.37,1.713,10.471,5.65c0.57,0,1.816,0,2.664,0C32.636,3.894,25.334,2.884,21,2.884        C16.667,2.884,9.366,3.894,7.866,10.377z"/>
+</g>
+<rect x="31.616" y="16.934" fill="#8A8A8A" width="0.624" height="2.811"/>
+<path fill="#383838" d="M34.156,10.377h-1.168c0.09,0.204,0.171,0.413,0.247,0.625h1.042       C34.241,10.789,34.202,10.581,34.156,10.377z"/>
+<path fill="#383838" d="M7.724,11.002h1.041c0.077-0.212,0.158-0.421,0.248-0.625H7.845       C7.798,10.581,7.759,10.789,7.724,11.002z"/>
+<rect x="9.761" y="16.934" fill="#8A8A8A" width="0.625" height="2.811"/>
+<path fill="#8A8A8A" d="M21,2.884c-4.334,0-11.635,1.01-13.134,7.493c0.05-0.215,0.109-0.421,0.17-0.624h2.047       c1.301-3.89,4.676-5.639,10.914-5.651c1.231,0.002,2.346,0.075,3.362,0.216l1.787-0.894C24.317,3.009,22.484,2.884,21,2.884z        M21,4.728c0.836,0.001,1.609,0.038,2.337,0.103l0.007-0.003"/>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mcpplugininc/irmcpplugin.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2008-2008 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:  Plugin used by Music content publisher to publish data and actions
+*                to Home Screen/Matrix Menu/Any component requiring them.
+*
+*/
+
+
+#ifndef IRMCPPLUGIN_H
+#define IRMCPPLUGIN_H
+
+#include "mcpplugin.h"
+#include "mcppluginobserver.h"
+#include "iractiveidleengnotifyhandler.h"
+
+class CIRActiveIdleEng;
+
+class CIRMetaData;
+#define KMAXLENGTH 256
+
+
+/**
+ * IR Content Publisher plugin is publishes data and actions for 
+ * Home screen and Matrix menu.
+ * 
+ * The plugin uses existing Active idle engine for getting information from VRA. 
+ * 
+ * The plugin is currently loaded by Music Content Publisher. 
+ */
+NONSHARABLE_CLASS( CIRMCPPlugin ) : public CMCPPlugin,
+                                    public MIRActiveIdleEngNotifyHandler
+    {
+public:
+    /**
+     * Two-phase constructor. 
+     * 
+     * @param aObserver The plugin observer providing also the publishing API
+     * @return A pointer to new instance of CIRMCPPlugin 
+     */
+    static CIRMCPPlugin* NewL( MMCPPluginObserver* aObserver );
+    
+    /**
+     * Destructor.
+     */
+    ~CIRMCPPlugin();
+
+// from base class CMCPPlugin
+    void Deactivate();
+
+// from base class MIRActiveIdleEngNotifyHandler    
+   void HandleChannelChangeL();
+    void HandleMetaDataReceivedL( const CIRMetaData& aMetaData );
+    void HandleVolumeChangeL( const TInt aVolume );
+    void HandlePlayStopL( TIRStopPlayState aState );
+    void HandleApplicationRunningStateChangeL(  const TIRPSApplicationRunningState aRunningState );
+    void HandleBufferingStateL(TIRBufferingState aState );
+
+private:
+
+    /**
+     * Installs (publishes) a given VR Action Handler command to given destination.
+     * 
+     * @param aCommand The command to be installed to given destination.
+     * @param aDestination The destination where the given command is installed.
+     */
+    void InstallIRCommandActionL( const TDesC& aCommand, TMCPTriggerDestination aDestination );
+
+    /**
+     * Activates the plugin and publishes the actions and information accordingly.
+     */
+    void ActivateL();
+    
+    
+    
+    /**
+    * Publishes the actions and information of last played station.
+	*/
+	void PublishLastPlayedWidgetItemsL();
+    
+    
+    
+private:
+    /**
+     * C++ constructor.
+     * 
+     * @param aObserver The plugin observer providing also the publishing API
+     */
+    CIRMCPPlugin( MMCPPluginObserver* aObserver );
+    
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+    
+    /**
+     * Searches and adds the plugin's resource file to the environment.
+     */
+    void InitializeResourceLoadingL();
+
+private:
+    /**
+     * The observer providing the publishing API.
+     * Not owned.
+     */
+    MMCPPluginObserver* iObserver;
+
+    /**
+     * Active idle engine used for reading VRA states.
+     * Owned.
+     */
+    CIRActiveIdleEng* iEngine;
+    
+    /** 
+     * Last played text.
+     * Owned. 
+     */
+    HBufC* iLastPlayedText;
+
+    /**
+     * State indicator, the plugin can be active or inactive. 
+     */
+    TBool iActive;
+    
+    /** resource offset. */
+    TInt iResourceOffset;
+    
+    /**
+     * Radio Text overrides PS name, and we have both available.
+     * So we need to keep track which one is being currently published.  
+     */
+    TBool iShowingRDSRadioText;
+    
+    //Added by Snigdha
+    
+     /**
+     * Current meta data information.
+     * Owned.
+     */
+    CIRMetaData*  iMetaData;
+    
+     // Meta data info
+    TBuf 	<KMAXLENGTH> iChannelName;
+    TInt 	iPresetIndex;
+    
+    /** Internet Radio application running state */
+    TIRPSApplicationRunningState        iRunningState;
+    
+    TInt iPlayingState;
+    
+      /** 
+     * Last played text.
+     * Owned. 
+     */
+    HBufC* iBufferingText;
+
+
+    };
+
+#endif /* IRMCPPLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mcpplugininc/mcpplugin.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2008 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 Content Publisher Plugin interface definition
+*
+*/
+
+
+#ifndef C_MCPPLUGIN_H
+#define C_MCPPLUGIN_H
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+/**
+ * The interface class for all MCP plugins
+ * Plugins are responsible for updating data and actions to the Music Widget
+ * and Matrix Menu.
+ *
+ * The implementator of this interface should implement Deactivate function that 
+ * will be invoked when the plugin is preempted by another plugin.
+ *
+ * IMPORTANT NOTE: 
+ * It is recommended that the plugin does not publish data while not active.
+ * After calling Deactivate on the plugin it should chnage its state to
+ * not active.
+ *
+ */
+class CMCPPlugin : public CBase
+    {
+public:
+
+    /** 
+     * Triggers Deactivation Process.
+     * Note: This should return immediatelly.
+     *       Just a change of state variable is recommended.
+     */
+    virtual void Deactivate() = 0;
+    };
+
+#endif // C_MCPPLUGIN_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mcpplugininc/mcppluginobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2008-2008 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:  Manages MCP plugins, and content publishing.
+*
+*/
+
+
+#ifndef M_MCPPLUGINOBSERVER_H
+#define M_MCPPLUGINOBSERVER_H
+
+class CLiwDefaultMap;
+class CMCPPlugin;
+
+
+/**
+ * Music Widget Image Destinations.
+ * 9.1 Music Widget has two panels, The left panel contains an image:
+ * TMCPImageDestination:EMWImage1, the right panel contains three text
+ * rows: TMCPTextDestination:EMWText1, TMCPTextDestination:EMWText2, 
+ * TMCPTextDestination:EMWText3. Actions can be installed into this
+ * two panels to the triggers: TMCPTriggerDestination:EMWTrigger1, 
+ * TMCPTriggerDestination:EMWTrigger2.
+ */
+enum TMCPImageDestination
+    {
+     EMusicWidgetImage1 = 1000//do not change
+    };
+
+/**
+ * Music Widget Text Destinations.
+ * 9.1 Music Widget has two panels, The left panel contains an image:
+ * TMCPImageDestination:EMWImage1, the right panel contains three text
+ * rows: TMCPTextDestination:EMWText1, TMCPTextDestination:EMWText2, 
+ * TMCPTextDestination:EMWText3. Actions can be installed into this
+ * two panels to the triggers: TMCPTriggerDestination:EMWTrigger1, 
+ * TMCPTriggerDestination:EMWTrigger2.
+ */
+enum TMCPTextDestination
+    {
+     EMusicWidgetText1 = 2000//do not change
+     ,EMusicWidgetText2
+     ,EMusicWidgetText3
+    };
+
+/**
+ * Music Widget Action Destinations.
+ * 9.1 Music Widget has two panels, The left panel contains an image:
+ * TMCPImageDestination:EMWImage1, the right panel contains three text
+ * rows: TMCPTextDestination:EMWText1, TMCPTextDestination:EMWText2, 
+ * TMCPTextDestination:EMWText3. Actions can be installed into this
+ * two panels to the triggers: TMCPTriggerDestination:EMWTrigger1, 
+ * TMCPTriggerDestination:EMWTrigger2.
+ */
+enum TMCPTriggerDestination
+    {
+     EMusicWidgetTrigger1 = 3000//do not change
+     ,EMusicWidgetTrigger2
+    };
+
+/**
+ *  Observer interface, to be implemented by the Music Content Publisher.
+ *  This interface is to be used to inform the music harves of changes on the
+ *  plugin that need to be propagated to the Music Widget UI. 
+ *  @since S60 5.0
+ */
+class MMCPPluginObserver
+    {
+public:
+    
+    /**
+     * Called when an image needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the image is to be placed.
+     * @param aImagePath Source path of the Image.
+     */
+    virtual void PublishImageL(CMCPPlugin* aPlugin,
+            TMCPImageDestination aDestination, const TDesC& aImagePath) = 0;
+
+    /**
+     * Called when an image needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the image is to be placed.
+     * @param aBitmapHandle Bitmap handle to the image.
+     */
+    virtual void PublishImageL(CMCPPlugin* aPlugin, 
+            TMCPImageDestination aDestination, TInt aBitmapHandle) = 0;
+
+    /**
+     * Called when a text needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the text is to be placed.
+     * @param aText Descriptor containing the text.
+     */
+    virtual void PublishTextL( CMCPPlugin* aPlugin, 
+            TMCPTextDestination aDestination, const TDesC& aText ) = 0;
+
+    /**
+     * Called when an action needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Destination trigger that should launch the action.
+     * @param aTrigerMap LIW Map containint the action that can be interpreted
+     * by the specified action handler plugin.
+     */
+    virtual void PublishActionL( CMCPPlugin* aPlugin, 
+            TMCPTriggerDestination aDestination, 
+            CLiwDefaultMap* aTrigerMap ) = 0;
+    
+    /**
+     * Called when a plugin becomes active.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     */
+    virtual void BecameActiveL( CMCPPlugin* aPlugin ) = 0;
+
+    };
+
+#endif /*MCPPLUGINOBSERVER_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mcpplugininc/mcppluginuids.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2008-2008 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:  Resource headers for MCP Plugin 
+*
+*/
+
+
+#ifndef MCPPLUGINUIDS_HRH_
+#define MCPPLUGINUIDS_HRH_
+
+#define KMCPPluginUid 0x10207C19 // interface uid
+
+#endif /*MCPPLUGINUIDS_HRH_*/
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mcppluginsrc/irmcpplugin.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,584 @@
+/*
+* Copyright (c) 2008-2008 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 <bautils.h>
+#include <coemain.h>
+#include <data_caging_path_literals.hrh>
+#include <e32cmn.h>
+#include <implementationproxy.h>
+#include <liwvariant.h>
+#include <stringloader.h>
+#include <irmcpplugin.rsg>
+
+#include <e32property.h>
+
+#include "iractionhandler.hrh"
+#include "iractionhandlerdefs.h"
+#include "iractiveidleeng.h"
+#include "iractiveidleengnotifyhandler.h"
+#include "irdebug.h"
+#include "irmcpplugin.h"
+#include "irmcpplugin.hrh"
+
+
+
+#include "irmetadata.h"
+
+const TInt KIRMinVolumeLevel = 0;
+const TInt KIRMaxVolumeLevel  = 10;
+
+_LIT( KIRMCPPluginResourceFileName, "irmcpplugin.rsc" );
+
+//Temp images from Music widget, svg via handle to rgba bitmap will be supported soon.
+_LIT( KIMGPlay, "z:\\Resource\\apps\\qgn_prop_image_tb_play2_dimmed2.png" );
+_LIT( KIMGStop, "z:\\Resource\\apps\\qgn_prop_image_tb_pause_dimmed2.png" );
+
+_LIT8( KIRPluginUid, "plugin_id" );
+_LIT8( KIRData, "data" );
+_LIT( KEmpty, "" );
+// ---------------------------------------------------------
+// CIRMCPPlugin::NewL
+// ---------------------------------------------------------
+//
+CIRMCPPlugin* CIRMCPPlugin::NewL( MMCPPluginObserver* aObserver )
+    {
+    CIRMCPPlugin* self = new ( ELeave ) CIRMCPPlugin( aObserver );
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+    
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CIRMCPPlugin::~CIRMCPPlugin
+// ---------------------------------------------------------
+//
+CIRMCPPlugin::~CIRMCPPlugin()
+    {
+    if ( iResourceOffset > 0 )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );
+        }
+
+    delete iMetaData;
+
+    delete iEngine;
+    delete iLastPlayedText;
+    }
+
+// ---------------------------------------------------------
+// CIRMCPPlugin::CIRMCPPlugin
+// ---------------------------------------------------------
+//
+CIRMCPPlugin::CIRMCPPlugin( MMCPPluginObserver* aObserver )
+    : iObserver( aObserver )
+    {
+    }
+
+// ---------------------------------------------------------
+// CIRMCPPlugin::ConstructL
+// ---------------------------------------------------------
+//
+void CIRMCPPlugin::ConstructL()
+    {
+    InitializeResourceLoadingL();
+
+    iRunningState = EIRPSApplicationUninitialized;
+
+    iLastPlayedText = StringLoader::LoadL( R_IR_MCP_LASTPLAYED);
+    iBufferingText = StringLoader::LoadL( R_IR_MCP_BUFFERING);
+
+    iEngine = CIRActiveIdleEng::NewL( *this );
+    iEngine->SecondConstructL();
+    
+    iMetaData = CIRMetaData::NewL();
+	HandleApplicationRunningStateChangeL(iRunningState);
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::InitializeResourceLoadingL
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::InitializeResourceLoadingL()
+    {
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    RFs fs( coeEnv->FsSession() );
+    TFileName fileName; 
+    TFileName baseResource;
+    TFindFile finder( fs );
+    TLanguage language( ELangNone );
+    
+    TParsePtrC parse( KIRMCPPluginResourceFileName );
+    _LIT( resourceFileWildExt, ".r*" );
+
+    // Make sure to find all resource files, not only .rsc files as it may be so
+    // that there is only .r01, .r02, etc. files available
+    fileName.Copy( parse.Name() );
+    fileName.Append( resourceFileWildExt );
+
+    // TFindFile applies search order that is from 
+    // drive Y to A, then Z
+    CDir* entries = NULL;
+    TInt err = finder.FindWildByDir( fileName , KDC_RESOURCE_FILES_DIR, entries );
+    delete entries;
+    entries = NULL;
+    TBool found = EFalse;
+    while ( !found && err == KErrNone )
+        {
+        // Found file
+        fileName.Zero();
+        TParsePtrC foundPath( finder.File() );
+        fileName.Copy( foundPath.DriveAndPath() );
+        fileName.Append( KIRMCPPluginResourceFileName );
+        BaflUtils::NearestLanguageFile( fs, fileName, language );
+        if ( language != ELangNone && BaflUtils::FileExists( fs, fileName ) )
+            {
+            found = ETrue;
+            iResourceOffset = coeEnv->AddResourceFileL( fileName );
+            }
+        else
+            {
+            if ( language == ELangNone &&
+                 !baseResource.Compare( KNullDesC ) &&
+                 BaflUtils::FileExists( fs, fileName ) )
+                {
+                baseResource.Copy( fileName );
+                }
+            err = finder.FindWild( entries );
+            delete entries;
+            entries = NULL;
+            }
+        }
+
+    if ( !found && baseResource.Compare( KNullDesC ) )
+        {
+        // If we found *.rsc then better to use that than nothing
+        if ( BaflUtils::FileExists( fs, baseResource ) )
+            {
+            iResourceOffset = coeEnv->AddResourceFileL( baseResource );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::Deactivate
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::Deactivate()
+    {
+    IRRDEBUG2("InternetRadio -- CIRMCPPlugin::Deactivate Entering", KNullDesC);
+
+    iActive = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::ActivateL
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::ActivateL()
+    {
+    IRRDEBUG2("CIRMCPPlugin::ActivateL Entering", KNullDesC);
+
+    iActive = ETrue;
+    iObserver->BecameActiveL(this);
+    
+    HandleChannelChangeL();
+    
+    HandleMetaDataReceivedL(*iMetaData);
+  
+  	RProperty::Get( KUidActiveInternetRadioApp,KIRPSPlayStop,
+					 iPlayingState );	 
+
+	HandlePlayStopL(static_cast<TIRStopPlayState>(iPlayingState));
+	
+/*	IRRDEBUG2("ActivateL iRunningState = %d",iRunningState);
+    InstallIRCommandActionL( KIRCommandValueStartNowPlaying(), EMusicWidgetTrigger1 );
+    iObserver->PublishImageL( this, EMusicWidgetImage1, KIMGPlay ); */ 	
+	
+    InstallIRCommandActionL( KIRCommandValueStartNowPlaying(), EMusicWidgetTrigger2 );            
+
+    }
+
+
+
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::PublishLastPlayedWidgetItemsL
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::PublishLastPlayedWidgetItemsL()
+    {
+    if ( iActive )
+    	{
+   	    IRRDEBUG2("CIRMCPPlugin::PublishLastPlayedWidgetItemsL Entering", KNullDesC);
+
+        InstallIRCommandActionL( KIRCommandValueStartNowPlaying(), EMusicWidgetTrigger1 );
+        iObserver->PublishImageL( this, EMusicWidgetImage1, KIMGPlay );
+        }
+	
+    HandleChannelChangeL();
+    IRRDEBUG2("CIRMCPPlugin::PublishLastPlayedWidgetItemsL Exitings", KNullDesC);
+       
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::HandleChannelChangeL
+// Handles channel change
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::HandleChannelChangeL()
+	{
+	
+    IRRDEBUG2("CIRMCPPlugin::HandleChannelChangeL Entering", KNullDesC);
+
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannel,
+				 	 iChannelName );
+				 	 
+	IRRDEBUG2("HandleChannelChange iRunningState = %d",iRunningState);
+
+	 if ( iActive )
+        {
+        switch(iRunningState)
+	        {
+	        case EIRPSApplicationRunning:
+		        {
+		        iObserver->PublishTextL( this, EMusicWidgetText1, iChannelName);
+		        IRRDEBUG2("CIRMCPPlugin::HandleChannelChangeL iChannelName published", KNullDesC);
+							       	
+				break;
+		        }
+		     
+	        case  EIRPSApplicationUninitialized:
+	        case  EIRPSApplicationClosing:
+		       {
+	     	   IRRDEBUG2("CIRMCPPlugin::HandleChannelChangeL EIRPSApplicationUninitialized", KNullDesC);
+		       iObserver->PublishTextL( this, EMusicWidgetText1, *iLastPlayedText );
+	           iObserver->PublishTextL( this, EMusicWidgetText2, iChannelName );
+	      			
+					break;
+		       }
+		       
+		    default:
+		    	break;
+	        }
+        }	
+
+    IRRDEBUG2("CIRMCPPlugin::HandleChannelChangeL Exiting", KNullDesC);
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::HandleMetaDataReceivedL
+// Handles meta data changes
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::HandleMetaDataReceivedL( const CIRMetaData& aMetaData )
+    {
+    IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL Entering", KNullDesC);
+
+    iMetaData->SetL( aMetaData );
+    
+    if ( iActive )
+        {
+        switch(iRunningState)
+	        {
+
+	        case EIRPSApplicationRunning:
+		        {
+		        IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL EIRPSApplicationRunning", KNullDesC);
+				if(iMetaData->Song().Length())
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText2, iMetaData->Song());
+		            IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL Song published", KNullDesC);
+					}
+			/*	else
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText2, KEmpty)
+					}*/
+										
+				if(iMetaData->Artist().Length())
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText3, iMetaData->Artist());
+			        IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL Artist published", KNullDesC);
+					} 
+			/*	else
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText3, KEmpty)
+					}*/	
+									       	
+				break;
+		        }
+		     
+	        case  EIRPSApplicationUninitialized:
+	        case  EIRPSApplicationClosing:
+		       {
+	     	   IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL EIRPSApplicationUninitialized/Closing", KNullDesC);
+	           if(iMetaData->Song().Length())
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText3, iMetaData->Song());
+		            IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL LastSong published", KNullDesC);
+					}
+			   else
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText3, KEmpty);
+					}	
+						
+					break;
+		       }
+		       
+		    default:
+		    	break;
+	        }
+        }	   
+        	
+    IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL exiting", KNullDesC);
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::HandlePlayStopL
+// Handles data change in Stop State
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::HandlePlayStopL( TIRStopPlayState aState )
+	{
+	
+    IRRDEBUG2("CIRMCPPlugin::HandlePlayStopL Entering", KNullDesC);
+
+	if ( aState == EIRStatePlay )
+		{
+	    IRRDEBUG2("CIRMCPPlugin::HandlePlayStopL unmute/play", KNullDesC);
+
+	    InstallIRCommandActionL( KIRCommandValueStop(), EMusicWidgetTrigger1 );
+
+        iObserver->PublishImageL( this, EMusicWidgetImage1, KIMGStop );
+		}
+	else 			//if (aState == EIRStateStop)
+		{
+		
+	    IRRDEBUG2("CIRMCPPlugin::HandlePlayStopL mute/stop", KNullDesC);
+
+	    InstallIRCommandActionL( KIRCommandValuePlay(), EMusicWidgetTrigger1 );
+
+        iObserver->PublishImageL( this, EMusicWidgetImage1, KIMGPlay );
+		}
+		
+		
+
+    IRRDEBUG2("InternetRadio -- CIRMCPPlugin::HandlePlayStopL Exiting", KNullDesC);
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::HandleVolumeChangeL
+// Handles volume change
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::HandleVolumeChangeL( const TInt aVolume )
+	  {
+      if ( aVolume >= KIRMinVolumeLevel && aVolume <= KIRMaxVolumeLevel )
+	      {
+	      	
+	      }
+	  else
+		  {
+		  User::Leave(KErrGeneral);
+	 	  }		      
+ 	  }
+
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::HandleApplicationRunningStateChangeL
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::HandleApplicationRunningStateChangeL( TIRPSApplicationRunningState 
+															aRunningState )
+	{
+	IRRDEBUG2("CIRMCPPlugin::HandleApplicationRunningStateChangeL Entering aRunningState= %d", aRunningState);
+
+	if ( iRunningState != aRunningState )
+		{
+		iRunningState = aRunningState;
+
+		switch ( iRunningState )
+			{
+			case EIRPSApplicationUninitialized:
+			case EIRPSApplicationRunning:
+			ActivateL();
+			break;
+			case EIRPSApplicationClosing:
+			if ( iActive )
+				{
+				IRRDEBUG2("HandleApplicationRunningStateChangeL EIRPSApplicationClosing iActive", KNullDesC);
+
+				InstallIRCommandActionL( KIRCommandValueStartNowPlaying(), EMusicWidgetTrigger1 );
+				IRRDEBUG2("HandleApplicationRunningStateChangeL StartNowPlaying", KNullDesC);
+
+				iObserver->PublishImageL( this, EMusicWidgetImage1, KIMGPlay );
+				IRRDEBUG2("HandleApplicationRunningStateChangeL PublishImageL", KNullDesC);
+
+ 				iObserver->PublishTextL( this, EMusicWidgetText1, *iLastPlayedText );
+	            iObserver->PublishTextL( this, EMusicWidgetText2, iChannelName );
+	      	
+
+				if(iMetaData->Song().Length())
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText3, iMetaData->Song());
+					IRRDEBUG2("CIRMCPPlugin::HandleMetaDataReceivedL Song published", KNullDesC);
+					}
+				else
+					{
+					iObserver->PublishTextL( this, EMusicWidgetText3, KEmpty);
+					}
+
+				}
+			iActive = EFalse;
+			break;
+			default:
+			break;
+
+			}
+
+		}
+	IRRDEBUG2("CIRMCPPlugin::HandleApplicationRunningStateChangeL Exiting", KNullDesC);
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRMCPPlugin::InstallIRCommandActionL
+// ---------------------------------------------------------------------------
+//
+void CIRMCPPlugin::InstallIRCommandActionL( const TDesC& aCommand, 
+											TMCPTriggerDestination aDestination )
+    {
+    IRRDEBUG2("CIRMCPPlugin::InstallIRCommandActionL Entering", KNullDesC);
+
+    CLiwDefaultMap* mapTrigger = CLiwDefaultMap::NewLC();
+    CLiwDefaultMap* mapData = CLiwDefaultMap::NewLC();
+
+    mapTrigger->InsertL( KIRPluginUid, TLiwVariant( 
+	TUid::Uid( KIRActionHandlerImplementationUid ) ) );
+	
+    mapData->InsertL( KIRCommand, TLiwVariant( aCommand ) );
+    
+    mapTrigger->InsertL( KIRData, TLiwVariant( mapData ) );
+    
+    if ( iActive )
+        {
+        IRRDEBUG2("InstallIRCommandActionL iActive", KNullDesC);
+        
+        iObserver->PublishActionL( this, aDestination, mapTrigger );
+        IRRDEBUG2("InstallIRCommandActionL PublishActionL", KNullDesC);
+        
+        }
+    
+    CleanupStack::PopAndDestroy( mapData );
+    CleanupStack::PopAndDestroy( mapTrigger );
+    
+    IRRDEBUG2("CIRMCPPlugin::InstallIRCommandActionL Exiting", KNullDesC);
+
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CIRActiveIdle::HandleBufferingStateL
+// Handles changes in Internet Radio buffering state
+// ---------------------------------------------------------------------------
+//
+
+void CIRMCPPlugin::HandleBufferingStateL(TIRBufferingState aState )
+	{
+	IRRDEBUG2("CIRMCPPlugin::HandleBufferingStateL Entering", KNullDesC);
+	
+	if(iActive)
+		{
+		switch (aState)	
+			{
+			case EIRStateBufferingStop:
+				{
+				IRRDEBUG2("CIRMCPPlugin::HandleBufferingStateL 0", KNullDesC);
+
+				HandleChannelChangeL();
+    
+    			HandleMetaDataReceivedL(*iMetaData);
+  
+  				RProperty::Get( KUidActiveInternetRadioApp,KIRPSPlayStop,
+					 iPlayingState );	 
+
+				HandlePlayStopL(static_cast<TIRStopPlayState>(iPlayingState));
+	
+	
+				}
+			break;
+			case EIRStateBufferingStart:
+				{
+				
+ 				IRRDEBUG2("CIRMCPPlugin::HandleBufferingStateL 1", KNullDesC);
+
+				iObserver->PublishTextL( this, EMusicWidgetText1, KEmpty);
+				iObserver->PublishTextL( this, EMusicWidgetText2,KEmpty);
+				iObserver->PublishTextL( this, EMusicWidgetText3,*iBufferingText);
+	
+				}
+				break;
+				
+			case  EIRStateBufferingError:
+				{
+				iObserver->PublishTextL( this, EMusicWidgetText1, KEmpty);
+				iObserver->PublishTextL( this, EMusicWidgetText2,KEmpty);
+				iObserver->PublishTextL( this, EMusicWidgetText3,KEmpty);
+	
+				}
+			break;
+			}
+		}
+
+	IRRDEBUG2("CIRMCPPlugin::HandleBufferingStateL Exiting", KNullDesC);
+	
+	}
+
+    
+/** Provides a key-value pair table, that is used to identify the correct construction function for the requested interface. */
+const TImplementationProxy KIRMCPPluginImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY( KIRMCPPluginImplementationUid, CIRMCPPlugin::NewL )
+    };
+
+const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount );
+
+// ---------------------------------------------------------------------------
+// Returns the implementations provided by this ECOM plugin DLL.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    IRRDEBUG2("CIRMCPPlugin::ImplementationGroupProxy", KNullDesC);
+
+    aTableCount = sizeof( KIRMCPPluginImplementationTable ) / sizeof( TImplementationProxy );
+    return KIRMCPPluginImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/iraacplayer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRAACPLAYER_H
+#define IRAACPLAYER_H
+
+#include <audio.h>
+#include <mdaaudiooutputstream.h>
+
+#include "ircontrolparams.h"
+#include "irmediaenginedef.h"
+#include "irmediaengineinterface.h"
+
+class CIRBufferContainer;
+
+//========================================class declaration CIRAACPlayer============================================
+
+/**
+ * This class is the implementation of AAC/AAC+ format.This forms a part of
+ * media engine which is implemented as an ECom plugin. The interface class
+ * is irmediaengineinterface.h  The mime type of mp3 is used to load this
+ * plugin mimetype : audio/aac or audio/accp This is to be passed as the   
+ * default data while creation of player
+ * 
+ * @code
+ *
+ * //mimetype is buffer with audio/aac or audio/aacp as data
+ * iPlayer = CIRMediaEngineInterface::NewL(mimetype);
+ *
+ * TConfig config;
+ * config.iVolume = xxxxxx; //some integer value between 0 and Maximum Volume
+ * TUint8* buffer; //is a buffer of size [KINPUT_BUFFER_SIZE] as defined in  IRMediaEngineBuffer.h
+ *                 //this is should have filled buffer when you call Intialize
+ * CIRCtrlCmdObserver* aChannel; //command channel dll's instant
+ * TInt volume;
+ * iPlayer->Intialize(config,buffer,channel);
+ * iPlayer->Play();//to play
+ * iPlayer->Stop();//to stop
+ * iPlayer->SetVolume(volume);//set the volume
+ * iPlayer->Volume;// returns current volume
+ * iPlayer->MaxVolume();//return maximum volume
+ * iPlayer->StopPlayerBuffering();//stop buffering if required
+ * iPlayer->StartPlayerBuffering();//start buffering (incase if stop you can restart with this method)
+ * iPlayer->BufferFilled(); //should be called when the buffer given by player is return
+ *                     //this will mark the buffer as filled
+ *
+ * @endcode
+ *
+ */
+
+NONSHARABLE_CLASS(CIRAACPlayer) : public CIRMediaEngineInterface,
+	public MMdaAudioOutputStreamCallback
+	{
+public:
+									//Member Functions
+	/**
+	 * Function : NewL
+	 * function to return an instance of CIRAACPlayer
+	 * Two phase constructor
+	 * @return instance of CIRAACPlayer
+	 */
+	static CIRAACPlayer* NewL();
+
+	/**
+	 * Function : NewLC
+	 * function to creates an instance of CIRAACPlayer
+	 * Two phase constructor
+	 * @return instance of CIRAACPlayer
+	 */
+	static CIRAACPlayer* NewLC();	
+
+	/**
+	 * Function : ~CIRAACPlayer
+	 * Default Destructor
+	 */
+	~CIRAACPlayer();
+
+										//Function which control the play
+
+	/**
+	 * Function : Play
+	 * function to which intiates the playing
+	 */
+	void Play();
+	
+	/**
+	 * Function : Stop
+	 * function to stop the player
+	 */
+	void Stop();   	     
+
+										 //Function to control the volume
+	       
+	/**
+	 * Function : SetVolume
+	 * function to set the volume, integer level of volume is the input
+	 * @param integer level of volume is the input
+	 */			
+	void SetVolume(TInt aVolume);
+			
+	/**
+	 * Function : MaxVolume
+	 * function to returns the maximum volume , integer value is the Output
+	 * @return integer value is the Output
+	 */		
+	TInt MaxVolume() const;
+	
+	/**
+	 * Function : Volume
+	 * function to returns the volume, integer level of voume is the Output
+	 * @return integer value is the Output
+	 */		
+	TInt Volume() const;
+	
+	/**
+	 * Function: Intialize
+	 * Set the codec type and sampling rate channel of stream
+	 * This is set to initial settings which is required to start the player
+	 * @param configuration infomation
+	 * @param instance of data buffer, whose size is defined in IRMediaEngineBuffer.h
+	 * @param instance of the channel through with information is sent to UI
+	 */			
+	void Intialize(TConfig& aConfig,TUint8* aInitParams,
+		CIRCtrlCmdObserver* aChannel);			
+	
+	/**
+	 * Function: StopPlayerBuffering
+	 * Function is used to freeze bufferring 
+	 */
+	void StopPlayerBuffering();
+	
+	/**
+	 * Function: BufferFilled
+	 * Function which is called when network gets the buffer filled with data
+	 */
+  	void BufferFilled();
+  	
+  	/**
+	 * Function: GetAudioPlayer
+	 * Function which is called To return the Current Audio Player
+	*/
+	CMdaAudioOutputStream* GetAudioPlayer();
+
+private:	
+	/**
+	 * Function: CIRAACPlayer
+	 * This function is the default constructor
+	 */
+	CIRAACPlayer();
+
+	/**
+	 * Function: ConstructL
+	 * Two phase constructor is used to intialize data members
+	 */
+	void ConstructL();	
+
+	/**	
+	 * Function: CreatebufferL 
+	 * Create the buffers and allocates address for each buffers
+	 * keeps them in buffer queue
+	 */       
+	void CreateBufferL();
+	
+	/**
+	 * Function: ReCreateBufferL
+	 * Function is used to recreate the buffer
+	 */	
+	void ReCreateBufferL();
+
+										//Call back functions from MMdaAudioOutputStreamCallback
+	
+	/**
+	 * Function: MaoscBufferCopied
+	 * call back to implement for using CMdaAudioOutputStream
+	 * Call as callback from the CMdaAudioOutputStream::WriteL
+	 * after frame work copies the stream to buffer
+	 * @param Error
+	 * @param reference to buffer
+	 */		
+	void MaoscBufferCopied(TInt aError, const TDesC8 &aBuffer);
+		
+	/**
+	 * Function: MaoscPlayComplete
+	 * call back to implement for using CMdaAudioOutputStream
+	 * Call as callback from the CMdaAudioOutputStream::WriteL
+	 * after play is completed
+	 * @param aError
+	 */	    
+	void MaoscPlayComplete(TInt aError);
+	
+	/**
+	 * Function: MaoscOpenComplete
+	 * call back to implement for using CMdaAudioOutputStream
+	 * Call as callback from the CMdaAudioOutputStream::Open
+	 * @param aError
+	 */	    
+	void MaoscOpenComplete(TInt aError);				
+		
+	/**
+	 * Function: GetAACAudioProperties
+	 * extract all the information to start the play from the stream
+	 */
+	void GetAACAudioProperties();
+	
+	/**
+	 * Function: DoFindnDecodeAACHeader
+	 * Function return a non modifiable pointer descriptor of data buffer
+	 */
+	void DoFindnDecodeAACHeaderL();
+	
+	/**
+	 * Function: ReArrangeBuffer
+	 * Function rearranges the buffer, and should be called after finding the header
+	 * from the address of buffers specified, the data buffers are kept in sink queue and 
+	 * remaining buffers are discarded that is put into source queue.
+	 * 
+	 * @param address of starting of header
+	 */	
+	void ReArrangeBufferL(TUint8* aInput);
+
+
+										        //data members
+										        
+private:	
+	//Enum for Play State
+	enum TState
+		{
+		ENotReady,    //Not ready to play
+		EReadyToPlay, //Ready to play
+		EPlaying      //Playing
+		};
+
+	// Player state	
+	TState iState; 		
+
+	//For implement Player functionalities	
+	
+	//player utility 
+	CMdaAudioOutputStream* iAudioPlayer;
+	
+	//Temporary holder for buffer container
+	CIRBufferContainer* iTempBufferHolder;
+	
+	//Holds the address of data buffer which is to be played
+	TUint8* iTempbuffer;				
+
+	//This represents a large input buffer which takes the input
+	TUint8* iInputBufferPtr;
+	
+	//Instance of channel through with data is sent UI
+	CIRCtrlCmdObserver* iChannel;
+		
+	//Setting for sampling rate, channel
+	TMdaAudioDataSettings iSettings;  
+				
+	//FourCC representation of the codec
+	TFourCC iDataType;				
+
+	//hold the configuration information
+	TConfig iConfig;  				
+				
+	//Hold the pointer to the buffer to be filled
+	TPtr8 iInputBuffer;				 
+
+	//Contains Data to be played
+	TPtr8 iInput;
+		
+	//Queue of buffer which is filled
+	TSglQue<CIRBufferContainer> iSourceBufferQ;
+		
+	//Queue of buffer which is empty
+	TSglQue<CIRBufferContainer> iSinkBufferQ;
+	
+	//Holds the audio format data
+	TAudioFormatData iAudioInfo;
+	
+	//Holds the percentage of data in the buffer
+	TInt iBufferPercentage;
+	
+	// For First time play
+	TBool iFirstTime;
+	
+	//checks whether header is found or not
+	TBool iHeaderFound;
+	
+	//this bool indicates buffering is taking place initially or rebuffering
+	//mainly to intial parameter like volume during rebuffering
+	TBool iNeedReBuffering;
+	
+	//Indicates that it is a new player
+	TBool iNewPlayer;
+	
+	//This is used to StopPlayerBuffering
+	TBool iStopPlayerBuffering;	
+	
+	//This is used to stop buffering if its rebuffering, set if stop function is called
+	//and  reset when play function is called
+	TBool iStopState;
+	
+	//skips sending the error code during stop if stop internally 
+	//is during play called
+	TBool iSkipPlayCompleted;	
+	};  
+
+#endif //IRAACPLAYER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/iraacplayerlocal.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRAACPLAYERLOCAL_H
+#define IRAACPLAYERLOCAL_H
+
+#include <e32def.h>
+
+//AAC sampling rate is based on bit index
+//sampling rate are taken from an array of 1x16 demension
+//and size of the array is defined below
+const TUint8 KAACSamplingRateArraySize = 16;
+
+//AAC sampling rate selection array
+const TUint KAacSamplingRate[KAACSamplingRateArraySize] =
+	{
+	96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,0,0,0,0
+	};
+
+//enumerated sampling frequency values 
+//for aac/aacp player	
+enum TIRAACSamplingFreq
+	{
+	EAACSamplingFreq8000 = 8000,
+	EAACSamplingFreq11025 = 11025,
+	EAACSamplingFreq12000 = 12000,
+	EAACSamplingFreq16000 = 16000,
+	EAACSamplingFreq22050 = 22050,
+	EAACSamplingFreq24000 = 24000,
+	EAACSamplingFreq32000 = 32000,
+	EAACSamplingFreq44100 = 44100,
+	EAACSamplingFreq48000 = 48000,
+	EAACSamplingFreq64000 = 64000,
+	EAACSamplingFreq88200 = 88200,
+	EAACSamplingFreq96000 = 96000,	
+	};	
+
+//zero indicates that channel is mono
+const TInt KAACChannelMono = 0;
+
+const TInt KAACHeaderSize = 4;
+
+#endif//IRAACPLAYERLOCAL_H
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irbuffercontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRBUFFERCONTAINER_H
+#define IRBUFFERCONTAINER_H
+
+#include <e32base.h>
+
+//========================================class declaration CIRBufferContainer============================================
+
+/**
+ * This class is wrapper class which can hold an address of a memory chunk
+ * and size (granularity) of memory chunk.
+ * This is implemented so as to use with queue like TSglQue
+ * iLink is public member and is of a member of type TSglQueLink
+ * The memory address is of TUint8* type and address is of type TInt
+ * you can assign the address and granularity only when you create an instance
+ * and retrive address and size using Des() and GetSize() respectively
+ * typical usage is as follows
+ * Note: This class DOESN'T take any responsibility of removing memory chunk
+ * associated to it when you delete the chunk, since it is not creating the memory
+ * chunk it doesn't do deallocation it has to taken care from where you create
+ * the memory chunk
+ *
+ * @code
+ *
+ * TSglQue<CIRBufferContainer> Myque;
+ * TInt f_off = _FOFF(CIRBufferContainer,iLink);
+ * Myque.SetOffset(f_off);
+ * TUint8* buffer;
+ * TInt sizeofbuffer;
+ * CIRBufferContainer* bufferholder;
+ * bufferholder = CIRBufferContainer::NewL(buffer,sizeofbuffer);
+ * Myque.AddLast(*bufferholder);
+ * TUint8* ptr = bufferholder->Des();
+ * TInt size = bufferholder->GetSize();
+ * bufferholder = Myque.First();
+ * Myque.Remove(*bufferholder);
+ * delete bufferholder; //deleting bufferholder doesn't deletes memory allocated
+ *			            //to buffer is not getting deleted we have delete it explicitly
+ * 
+ * delete buffer;
+ *
+ * @endcode
+ *   
+ */
+
+NONSHARABLE_CLASS(CIRBufferContainer) : public CBase
+	{
+											//member functions
+public :
+	
+	/**
+	 * Two Phase NewL
+	 * returns an instance CIRBufferContainer
+	 * Owned by CIRBufferContainer
+	 * @param Address of data chunk
+	 * @param Granularity of data chunk
+	 * @return instance CIRBufferContainer
+	 */	
+	static CIRBufferContainer* NewL(TUint8* aAddress,TInt aGranularity);
+		
+	/**
+	 * Two Phase NewLC
+	 * Creates an instance CIRBufferContainer
+	 * Owned by CIRBufferContainer
+	 * @param Address of data chunk
+	 * @param Granularity of data chunk
+	 * @return instance CIRBufferContainer
+	 */
+	static CIRBufferContainer* NewLC(TUint8* aAddress,TInt aGranularity);
+
+	/**
+	 * destructor function
+	 * Owned by CIRBufferContainer
+	 */ 
+	~CIRBufferContainer();
+	
+ 	/**	
+	 *  Des returns the Address of the chunk;
+	 *  Owned by CIRBufferContainer Class
+	 *  @return address
+	 */	
+	 TUint8* Des() const;
+	
+		 
+	/**	
+	 *  Size returns the size of the chunk;
+	 *  Owned by CIRBufferContainer Class
+	 *  @return size of chunk
+	 */
+	 TInt Size() const;	
+												
+private:
+
+	/**
+	 * Function : CIRBufferContainer
+	 * default constructor
+	 */	
+	CIRBufferContainer();
+				
+	/**
+	 * Two Phase ConstructL
+	 * Owned by CIRBufferContainer
+	 * @param Address of data chunk
+	 * @param Granularity of data chunk
+	 */
+ 	void ConstructL(TUint8* aAddress,TInt aGranularity);
+ 		 	
+												
+									//function which return address and granularity
+
+												//data members
+
+public:
+	//Que Link owned by CIRBufferContainer
+	TSglQueLink iLink; 
+
+private:
+		
+	//Queued buffer pointer owned by CIRBufferContainer
+	TUint8* iDataAddress;
+		
+	//Size of the chunk
+	TInt iSize;		
+	};
+
+#include "irbuffercontainer.inl"
+	
+#endif//IRBUFFERCONTAINER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irbuffercontainer.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+
+#ifndef IR_BUFFERCONTAINER_INL
+#define IR_BUFFERCONTAINER_INL
+
+// -----------------------------------------------------------------------------	
+//  Des returns the Address of the chunk;
+//  Owned by CIRBufferContainer Class
+// @return address
+// -----------------------------------------------------------------------------
+//
+ inline TUint8* CIRBufferContainer::Des() const
+	{
+	return iDataAddress;	
+	} 
+	 
+// -----------------------------------------------------------------------------	
+//  Size returns the size of the chunk;
+//  Owned by CIRBufferContainer Class
+//  @return size of chunk
+// -----------------------------------------------------------------------------
+//
+ inline TInt CIRBufferContainer::Size() const
+	{
+	return iSize;	
+	}
+	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irmediaenginebuffer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRMEDIAENGINEBUFFER_H
+#define IRMEDIAENGINEBUFFER_H
+
+#include <e32def.h>
+
+// Number of input buffers
+const TInt KIRInputBufferCount = 20;
+
+//100 percentage of data 
+const TInt K100Percentage = 100;
+
+//zero percentage of data
+const TInt KZeroPercentage = 0;
+
+#endif//IRMEDIAENGINEBUFFER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irmediaenginedef.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+//supported formats
+#ifndef IRMEDIAENGINEDEF_H 
+#define IRMEDIAENGINEDEF_H
+
+#include <e32def.h>
+
+//No of volume levels required other than zero volume level
+const TInt KNoVolumeLevels = 10;
+
+//volume level corresponding to zero volume (mute volume)
+const TInt KZeroVolume = 0;
+
+//This hold the initialization information which is required for a player to statrt playing
+class TConfig
+	{
+public:
+	TInt32  iVolume; //volume level
+	TInt    iPlayBufferCount; // number of playing buffers
+	TUint   iPlayBufferSize; // size of single playing buffer (in bytes)
+	};
+	
+//This structure holds the various parameter of an audio format which is available
+class TAudioFormatData
+	{
+public:
+	TUint32 iSamplingRate; //sampling rate
+	TUint32 iBitRate; //bit rate
+	TUint32 iVersion; //version
+	TUint32 iLayer; //layer
+	TUint32 iChannel; //channel
+	TUint32 iPadding; //padding
+	TUint32 iFrameSize; //frame size
+	TUint32 iSamplesPerFrame; //samples per frame
+	};
+		
+
+#endif//IRMEDIAENGINEDEF_H 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irmediaengineinterface.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRMEDIAENGINEINTERFACE_H
+#define IRMEDIAENGINEINTERFACE_H
+
+#include <ecom.h>
+#include <mdaaudiooutputstream.h>
+
+class CIRCtrlCmdObserver;
+class TConfig;
+
+// UID of this interface
+const TUid KMediaEngineInterfaceUid = {0x200087E8};
+
+//========================================class declaration CIRMediaEngineInterface============================================
+
+/**
+ *
+ * This is interface class for media engine, This has pure virtual function 
+ * which the player implementation in the media engine should have. The default 
+ * data typically can be mime type like audio/mpeg etc. 
+ * It has virtual implementation like
+ * Play() for play implementation
+ * Stop() for stop implemtation 
+ * SetVolume(TInt aVolume) for setting implementation
+ * Volume() for setting the volume
+ * MaxVolume() for setting the maximum volume
+ * BufferFilled() is call back to intimate buffer is filled
+ * Intialize(TConfig& ,TUint8* ,CIRCtrlCmdObserver* )
+ * TConfig is structure the congfiguration data if required is supposed to pass
+ * by this way, TUint8* refers to buffer and CIRCtrlCmdObserver* is instance to
+ * CIRCtrlCmdObserver defined in IRCommandChannel.lib
+ * and also functions like StopPlayerBuffering() and StartPlayerBuffering() to 
+ * start and stop buffering.
+ *
+ */
+
+
+class CIRMediaEngineInterface : public CBase
+      {
+												//Member Function
+public:
+
+	/**
+	 * Function : NewL
+	 * function to creates an instance of CIRMediaEngineInterface
+	 * Two phase constructor
+	 * @param matching string
+	 */	
+	static CIRMediaEngineInterface* NewL(const TDesC8& aMatchString);
+
+	/**
+	 * Function : ~CIRMediaEngineInterface
+	 * Default Destructor
+	 */
+	~CIRMediaEngineInterface();
+
+	// Pure interface method
+
+	/**
+	 * Function : Play
+	 * function to which intiate the player
+	 */
+	virtual void Play() = 0;
+
+	/**
+	 * Function : Stop
+	 * function to which stop the player
+	 */
+	virtual void Stop() = 0; 
+	
+	/**
+	 * Function : SetVolume
+	 * function to set the volume 
+	 * @param integer level of volume is the input
+	 */		
+	virtual void SetVolume(TInt aVolume) = 0;
+
+	/**
+	 * Function : Volume
+	 * function to returns the volume, integer level of voume is the Output
+	 * @return integer value is the Output
+	 */
+	virtual TInt Volume() const = 0;
+	 
+	/**
+	 * Function : MaxVolume
+	 * function to returns the maximum volume 
+	 * @return integer value is the Output 
+	 */
+	virtual	TInt MaxVolume() const = 0;
+
+	/**
+	 * Function: Intialize
+	 * Set the codec type and sampling rate channel of stream
+	 * This is set to initial settings which is required to start the player
+	 * @param configuration infomation and instance of stream source
+	 * @param instance of data buffer, whose size is defined in IRMediaEngineBuffer.h
+	 * @param instance of the channel through with information is sent to UI
+	 */			
+	virtual void Intialize(TConfig& aConfig,TUint8* aInitParams,CIRCtrlCmdObserver* aChannel) = 0;
+						
+	/**
+	 * Function: BufferFilled
+	 * Function which is called when network gets the buffer filled with data
+	 */
+	virtual void BufferFilled() = 0;
+	
+	/**
+	 * Function: StopPlayerBuffering
+	 * Function is used to stop bufferring 
+	 */
+	virtual void StopPlayerBuffering() = 0;
+	
+	/**
+	 * Function: GetAudioPlayer()
+	 * Function is used to Return the Current Audio Player 
+	 */
+	virtual CMdaAudioOutputStream* GetAudioPlayer() = 0;
+									//Data Members
+protected:
+	//Default c'tor
+	inline CIRMediaEngineInterface();
+
+protected:
+
+    /* Size of a play buffer. */
+    TInt iPlayBufferSize;
+
+    /* Total size of input buffer(s). */
+    TInt iInputBufferSize;
+
+    /* Offset address of the buffers. */
+    TInt iBufferOffset;
+
+    /* The level of current volume */
+    TInt iCurrentVolume;
+ 
+private:
+	// Unique instance identifier key
+	TUid iDtor_ID_Key;
+	};
+
+#include "irmediaengineinterface.inl"
+
+#endif//IRMEDIAENGINEINTERFACE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irmediaengineinterface.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+
+// -----------------------------------------------------------------------------
+// Function : CIRMediaEngineInterface
+// default constructor
+// @param none
+// @return none
+// -----------------------------------------------------------------------------
+//
+inline CIRMediaEngineInterface::CIRMediaEngineInterface()
+	{
+	//No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// Function : ~CIRMediaEngineInterface
+// default destructor
+// -----------------------------------------------------------------------------
+//
+inline CIRMediaEngineInterface::~CIRMediaEngineInterface()
+	{
+	// Destroy any instance variables and then
+	// inform the framework that this specific 
+	// instance of the interface has been destroyed.
+	REComSession::DestroyedImplementation(iDtor_ID_Key);
+	}
+
+// -----------------------------------------------------------------------------
+// Function : NewL
+// function to creates an instance of CIRMediaEngineInterface
+// Two phase constructor 
+// @param matching string
+// -----------------------------------------------------------------------------
+//
+inline CIRMediaEngineInterface* CIRMediaEngineInterface::NewL(const TDesC8& aMatchString)
+	{
+	// Set up the interface find for the default resolver.
+	TEComResolverParams resolverParams;
+	resolverParams.SetDataType(aMatchString);
+	resolverParams.SetWildcardMatch(ETrue);		// Allow wildcard matching
+	
+	return reinterpret_cast<CIRMediaEngineInterface*> 
+					(REComSession::CreateImplementationL(KMediaEngineInterfaceUid, 
+									   _FOFF(CIRMediaEngineInterface,iDtor_ID_Key), 
+										NULL,resolverParams));
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irmp3player.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,324 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRMP3PLAYER_H
+#define IRMP3PLAYER_H
+
+#include <audio.h>
+#include <mdaaudiooutputstream.h>
+
+#include "ircontrolparams.h"
+#include "irmediaenginedef.h"
+#include "irmediaengineinterface.h"
+
+class CIRBufferContainer;
+#ifdef __WINS__
+class CIRTestingAudioPlayer;
+#endif //__WINS__
+
+//========================================class declaration CIRMP3Player============================================
+
+/**
+ * This class is the implementation of MP3 format.This forms a part of
+ * media engine which is implemented as an ECom plugin. The interface class
+ * is irmediaengineinterface.h . The mime type of mp3 is used to load this
+ * plugin mimetype : audio/mpeg This is to be passed as the default data 
+ * while creation of player
+ * 
+ * @code
+ *
+ * //mimetype is buffer with audio/mpeg as data
+ * iPlayer = CIRMediaEngineInterface::NewL(mimetype);
+ *
+ * TConfig config;
+ * config.iVolume = xxxxxx; //some integer value between 0 and Maximum Volume
+ * TUint8* buffer; //is a buffer of size [KINPUT_BUFFER_SIZE] as defined in  IRMediaEngineBuffer.h
+ *                 //this is should have filled buffer when you call Intialize
+ * CIRCtrlCmdObserver* aChannel; //command channel dll's instant
+ * TInt volume;
+ * iPlayer->Intialize(config,buffer,channel);
+ * iPlayer->Play();//to play
+ * iPlayer->Stop();//to stop
+ * iPlayer->SetVolume(volume);//set the volume
+ * iPlayer->Volume;// returns current volume
+ * iPlayer->MaxVolume();//return maximum volume
+ * iPlayer->StopPlayerBuffering();//stop buffering if required
+ * iPlayer->StartPlayerBuffering();//start buffering (incase if stop you can restart with this method)
+ * iPlayer->BufferFilled(); //should be called when the buffer given by player is return
+ *                     //this will mark the buffer as filled
+ *
+ * @endcode
+ */
+
+NONSHARABLE_CLASS(CIRMP3Player) : public CIRMediaEngineInterface,
+								  public MMdaAudioOutputStreamCallback
+	{
+public:
+									//Member Functions
+	/**
+	 * Function : NewL
+	 * function returns an instance of CIRMP3Player
+	 * Two phase constructor
+	 * @return instance of CIRMP3Player
+	 */
+	static CIRMP3Player* NewL();
+
+	/**
+	 * Function : NewLC
+	 * function creates an instance of CIRMP3Player
+	 * Two phase constructor
+	 * @return instance of CIRMP3Player
+	 */
+	static CIRMP3Player* NewLC();
+	
+	/**
+	 * Function : ~CIRMP3Player
+	 * Default Destructor
+	 */
+	~CIRMP3Player();
+
+										//Function which control the play
+
+	/**
+	 * Function : Play
+	 * function to which intiate the player
+	 */
+	void Play();
+	
+	/**
+	 * Function : Stop
+	 * function to which stop the player
+	 */
+	void Stop();   	     
+
+										 //Function to control the volume
+	       
+	/**
+	 * Function : SetVolume
+	 * function to set the volume, integer level of volume is the input
+	 * @param integer level of volume is the input
+	 */			
+	void SetVolume(TInt aVolume);
+	
+	/**
+	 * Function : MaxVolume
+	 * function to returns the maximum volume , integer value is the Output
+	 * @return integer value is the Output
+	 */		
+	TInt MaxVolume() const;
+	
+	/**
+	 * Function : Volume
+	 * function to returns the volume, integer level of voume is the Output
+	 * @return integer value is the Output
+	 */		
+	TInt Volume() const;
+	
+	/**
+	 * Function: Intialize
+	 * Set the codec type and sampling rate channel of stream
+	 * This is set to initial settings which is required to start the player
+	 * @param configuration infomation
+	 * @param instance of data buffer, whose size is defined in IRMediaEngineBuffer.h
+	 * @param instance of the channel through with information is sent to UI
+	 */			
+	void Intialize(TConfig& aConfig,TUint8* aInitParams,CIRCtrlCmdObserver* aChannel);
+		
+	/**
+	 * Function: StopPlayerBuffering
+	 * Function is used to stop bufferring 
+	 */
+	void StopPlayerBuffering();
+	
+	/**
+	 * Function: BufferFilled
+	 * Function which is called when the buffer filled with data
+	 */
+  	void BufferFilled();
+  	
+  	/**
+	 * Function: GetAudioPlayer
+	 * Function which is called when the Player Instance has Changed
+	*/
+	CMdaAudioOutputStream* GetAudioPlayer();
+
+private:
+	/**
+	 * Function: CIRMP3Player
+	 * This function is the default constructor
+	 */
+	CIRMP3Player();
+
+	/**
+	 * Function: ConstructL
+	 * Two phase constructor is used to intialize data members
+	 */
+	void ConstructL();	
+
+	/**	
+	 * Function: CreateBufferL 
+	 * Create the buffers and allocates address for each buffers
+	 * keeps them in buffer queue
+	 */       
+	void CreateBufferL();
+	
+	/**
+	 * Function: ReCreateBufferL
+	 * Function is used to recreate the buffer
+	 */	
+	void ReCreateBufferL();
+	
+	 /**
+	 * Function: GetMP3AudioProperties
+	 * extract all the information to start the play from the stream by calling DoFindnDecodeMP3Header
+	 */
+	void GetMP3AudioProperties();
+	
+	/**
+	 * Function: DoFindnDecodeMP3Header
+   	 * Function is used to find the mp3 header and decode the mp3 header
+	 */
+	void DoFindnDecodeMP3Header();
+	
+	/**
+	 * Function: CrossCheckHeader
+	 * Function is cross checks sampling rate 
+	 * @param a pointer to input buffer
+	 * @return ETrue if the sampling rate matches with sampling rate of next MP3 frame
+	 */		
+	TBool CrossCheckHeader(TUint8* aInput);
+								
+								//Call back functions
+public:	
+	/**
+	 * Function: MaoscBufferCopied
+	 * call back to be implement for using CMdaAudioOutputStream
+	 * Call as callback from the CMdaAudioOutputStream::WriteL
+	 * after frame work copies the stream to buffer
+	 * @param Error code
+	 * @param reference to buffer
+	 */		
+	void MaoscBufferCopied(TInt aError, const TDesC8 &aBuffer);
+	
+	/**
+	 * Function: MaoscPlayComplete
+	 * call back to  beimplement for using CMdaAudioOutputStream
+	 * after play is completed
+	 * @param error code
+	 */	    
+	void MaoscPlayComplete(TInt aError);
+		
+	/**
+	 * Function: MaoscOpenComplete
+	 * call back to implement for using CMdaAudioOutputStream
+	 * Call as callback from the CMdaAudioOutputStream::Open
+	 * @param error code
+	 */	    
+	void MaoscOpenComplete(TInt aError);	
+
+										        //data members
+										        
+private:	
+	//Enum for Play State
+	enum TState
+		{
+		ENotReady,    //Not ready to play
+		EReadyToPlay, //Ready to play
+		EPlaying      //Playing
+		};
+
+	// Player state	
+	TState iState; 		
+
+
+	//For implement Player functionalities
+	
+	//player utility 
+	CMdaAudioOutputStream* iAudioPlayer;
+#ifdef __WINS__	
+	//Instance for TestingAudioPlayer
+	CIRTestingAudioPlayer* iTestingAudioPlayer;
+#endif //__WINS__
+	
+	//Holds the address of data buffer which is to be played
+	TUint8* iTempbuffer;				
+
+	//This represents a large input buffer which takes the input
+	TUint8* iInputBufferPtr;			 
+	
+	//Temporary holder for buffer container
+	CIRBufferContainer* iTempBufferHolder;
+	
+	//Instance of channel through with data is sent UI
+	CIRCtrlCmdObserver* iChannel;
+		
+	//Setting for sampling rate, channel
+	TMdaAudioDataSettings iSettings;  
+				
+	//FourCC representation of the codec
+	TFourCC iDataType;	
+				
+	//hold the configuration information
+	TConfig iConfig;  				
+				
+	//Hold the pointer to the buffer to be filled
+	TPtr8 iInputBuffer;				 
+
+	//Contains Data to be played
+	TPtr8 iInput;
+		
+	//Queue of buffer which is filled
+	TSglQue<CIRBufferContainer> iSourceBufferQ;
+		
+	//Queue of buffer which is empty
+	TSglQue<CIRBufferContainer> iSinkBufferQ;
+	
+	//Holds the audio format data
+	TAudioFormatData iAudioInfo;
+
+	//Holds the percentage of data in the buffer
+	TInt iBufferPercentage;
+	
+	// For First time play
+	TBool iFirstTime;
+	
+	//this bool indicates buffering is taking place initially or rebuffering
+	//mainly to intial parameter like volume during rebuffering
+	TBool iNeedReBuffering;
+	
+	//Indicates that it is a new player
+	TBool iNewPlayer;
+	
+	//This is used to StopPlayerBuffering while playing 
+	TBool iStopPlayerBuffering;
+	
+	//This is used to stop buffering if its rebuffering, set if stop function is called
+	//and  reset when play function is called
+	TBool iStopState;
+
+	//Indicates that player is rebuffering
+	TBool iReBuffering;
+	
+	//skips sending the error code during stop if stop internally 
+	//is during play called
+	TBool iSkipPlayCompleted;
+	};  
+
+#endif//IRMP3PLAYER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irmp3playerlocal.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+
+
+#ifndef IRMP3PLAYERLOCAL_H
+#define IRMP3PLAYERLOCAL_H
+
+//sampling rate of MP3 is taken from a look up table
+//selection is made based on MPEG version and index bits
+//the look up table is made in the form of an array of 4x4 
+//and demension are define in terms of constant defined below
+const TUint8 KMP3SamplingRateVersionArraySize = 4;
+const TUint8 KMP3SamplingRateIndexArraySize = 4;
+
+//bitrate rate of MP3 is taken from a look up table
+//selection is made based on MPEG version and Layer and index bits
+//the look up table is made in the form of an array of 2x3x16 
+//and demension are define in terms of constant defined below
+const TUint8 KMP3BitRateMPEGArraySize = 2;
+const TUint8 KMP3BitRateLayerArraySize = 3;
+const TUint8 KMP3BitRateIndexArraySize = 16;
+
+//channel selection is based on 2 bits and is defined as array of 
+//demension 4 and is defined in terms of constant.
+const TUint8 KMP3ChannelArraySize = 4;
+
+
+//sampling rate is given in Hzs.
+//KMP3SamplingRate[MPEGVersion][bit index]
+const TInt32 KMP3SamplingRate[KMP3SamplingRateVersionArraySize][KMP3SamplingRateIndexArraySize] = //! Sampling rates for MP3
+	{		
+		{11025,12000,8000,0},    //MPEG 2.5 unofficial   00
+		{0, 0, 0, 0},            //reserved              01
+		{22050,24000,16000,0},   //MPEG 2                10
+		{44100,48000,32000,0}    //MPEG 1                11
+	};
+	
+//each bit rate is given in Kbps.
+// KBitRate[Version][Layer][bitselect] 
+const TUint32 KBitRate[KMP3BitRateMPEGArraySize]
+					  [KMP3BitRateLayerArraySize]
+					  [KMP3BitRateIndexArraySize] = //! Bit rates for Mp3
+	{
+		{	// MPEG 1
+			{0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0},	// Layer1
+			{0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,0},	// Layer2
+			{0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,0}	// Layer3
+		},
+		{	// MPEG 2, 2.5		
+			{0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,0},	// Layer1
+			{0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0},			// Layer2
+			{0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0}			// Layer3
+		}
+	};
+
+//enumerated sampling frequency values 
+//for mp3 player
+enum TIRMp3SamplingFreq
+	{
+	EMp3SamplingFreq8000 = 8000,
+	EMp3SamplingFreq11025 = 11025,
+	EMp3SamplingFreq12000 = 12000,
+	EMp3SamplingFreq16000 = 16000,
+	EMp3SamplingFreq22050 = 22050,
+	EMp3SamplingFreq24000 = 24000,
+	EMp3SamplingFreq32000 = 32000,
+	EMp3SamplingFreq44100 = 44100,
+	EMp3SamplingFreq48000 = 48000,	
+	};	
+
+//channels 1 for stereo, and 0 for mono
+// bits 6,7:
+// 00 - Stereo
+// 01 - Joint stereo (Stereo)
+// 10 - Dual channel (Stereo)
+// 11 - Single channel (Mono)
+const TUint32 KChannelInfo[KMP3ChannelArraySize] =
+	{1,1,0,0};
+
+const TInt KMp3FrameHeaderSize = 5;
+
+//zero indicates that channel is mono
+const TInt KMp3ChannelMono = 0;
+
+#endif//IRMP3PLAYERLOCAL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaengineinc/irtestingaudioplayer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRTESTINGAUDIOPLAYER_H
+#define IRTESTINGAUDIOPLAYER_H
+
+
+#include <e32base.h>
+
+enum TAudioFunctionType
+	{
+	EOpen=0,
+	EWriteLBufferCopied,
+	EWriteLPlayComplete
+	};
+
+class CIRMP3Player;
+
+
+class CIRTestingAudioPlayer : public CActive
+	{
+public:
+									//Member Functions
+	public:
+        static CIRTestingAudioPlayer* NewL(CIRMP3Player& aMP3Player);
+        
+        void ConstructL();
+        
+        ~CIRTestingAudioPlayer();     // Destruction
+        
+        void IssueRequest();  // issue request
+       
+        void DoCancel();       // Cancel request
+        // Defined as pure virtual by CActive
+        // implementation provided by this class.
+       
+        void RunL();     // service completed request.
+        // Defined as pure virtual by CActive
+        // implementation provided by this class.
+  
+  		void Open();
+		void Write();
+		void Stop();
+		void Close();
+        
+    private:
+        
+        RTimer iTimer;      // Asynchronous service provider.
+        
+        TInt iCounter;
+        
+		CIRTestingAudioPlayer(CIRMP3Player& aMP3Player);        // Construction
+		
+	public:
+	
+		TAudioFunctionType iAudioFuncType;
+		
+		CIRMP3Player& iMP3Player;
+	};  
+
+#endif//IRTESTINGAUDIOPLAYER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaenginesrc/iraacplayer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,949 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <AudioPreference.h>
+
+#include "iraacplayer.h"
+#include "iraacplayerlocal.h"
+#include "irbuffercontainer.h"
+#include "irctrlcmdobserver.h"
+#include "irdebug.h"
+#include "irmediaenginebuffer.h"
+
+// Constants
+
+const TInt KZERO = 0 ;
+const TInt KONE = 1 ;
+const TInt KTWO = 2 ;
+const TInt KTHREE = 3 ;
+const TInt KFOUR = 4 ;
+const TInt KFIVE = 5 ;
+const TInt KSIX = 6 ;
+const TInt KELEVEN = 11 ;
+const TInt KTWENTYONE = 21 ;
+const TInt KTWENTYFOUR = 24 ;
+const TInt KSIXTEEN = 16 ;
+const TInt KEIGHT = 8 ;
+const TInt KONEFIVETHREESIX = 1536 ;
+
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// function returns an instance of CIRAACPlayer
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRAACPlayer* CIRAACPlayer::NewL()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::NewL" );
+	CIRAACPlayer* self = CIRAACPlayer::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRAACPlayer::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// function creates an instance of CIRAACPlayer
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRAACPlayer* CIRAACPlayer::NewLC()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::NewLC" );
+	CIRAACPlayer* self = new (ELeave) CIRAACPlayer;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRAACPlayer::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : ~CIRAACPlayer
+// Default Destructor
+// ---------------------------------------------------------------------------
+//
+CIRAACPlayer::~CIRAACPlayer()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::~CIRAACPlayer" );
+	delete iAudioPlayer;
+	while(!iSinkBufferQ.IsEmpty())//deleting all the entries in sink buffers queue
+		{
+		iTempBufferHolder = iSinkBufferQ.First();
+		iSinkBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		}
+	while(!iSourceBufferQ.IsEmpty())//deleting all the entries in source buffers queue
+		{
+		iTempBufferHolder = iSourceBufferQ.First();
+		iSourceBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::~CIRAACPlayer - Exiting." );
+	}
+
+
+									//Function for Play control
+
+// ---------------------------------------------------------------------------
+// Function : Play
+// function which intiates the player to start playing
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::Play()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::Play" );
+	if ( EPlaying == iState ) //If the current state is playing
+		{
+		//internally stopped before playing so no need of sending
+		//stop status
+		iSkipPlayCompleted = ETrue;
+		iAudioPlayer->Stop(); //then we have to stop it then restart the play from begining
+		iSkipPlayCompleted = EFalse;
+		}
+	iState = ENotReady;
+	iBufferPercentage = KZeroPercentage;
+	iHeaderFound = EFalse;
+	iStopState = EFalse;
+
+	//note : using TRAP_IGNORE to suppress a codescanner warning
+	//"Ignoring the return value from Open() functions"
+	//this cannot be checked as this symbian API returns void
+
+	//opening the current player component
+	 TRAP_IGNORE(iAudioPlayer->Open(&iSettings); )
+	iChannel->SentRequest(EPlayingState,KErrNone);			
+	IRLOG_DEBUG( "CIRAACPlayer::Play - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Stop
+// function which stops the player
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::Stop()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::Stop" );
+	//If the current state is playing
+	if ( EPlaying == iState )
+		{
+		iAudioPlayer->Stop();
+		}
+	else
+		{
+		//sending the updated status as stopped
+		iChannel->SentRequest( EStoppedPlaying, KErrNone );
+		}
+	iState = EReadyToPlay;
+	iStopState = ETrue;
+	IRLOG_DEBUG( "CIRAACPlayer::Stop - Exiting." );
+	}
+
+										//Functions for Volume Control
+
+// ---------------------------------------------------------------------------
+// Function : SetVolume
+// function to set the volume
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::SetVolume(TInt aVolume )
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::SetVolume" );
+	//If volume should be less than maximum value and greater than or equal to zero then set the volume
+	if( KZeroVolume <= aVolume && iAudioPlayer->MaxVolume() >= aVolume )
+		{
+		iAudioPlayer->SetVolume((TInt)(aVolume));
+		iConfig.iVolume = iCurrentVolume = aVolume;
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::SetVolume - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// Function : MaxVolume
+// function to returns the maximum volume
+// ---------------------------------------------------------------------------
+//
+TInt CIRAACPlayer::MaxVolume() const
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::MaxVolume" );
+	return iAudioPlayer->MaxVolume();
+	}
+// ---------------------------------------------------------------------------
+// Function : Volume
+// function to returns the volume, integer level of voume is the Output
+// ---------------------------------------------------------------------------
+//
+TInt CIRAACPlayer::Volume() const
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::Volume" );
+	return iAudioPlayer->Volume();
+	}
+
+									//Intialization of Codec Settings
+
+// ---------------------------------------------------------------------------
+// Function: Intialize
+// Set the codec type and sampling rate channel of stream
+// This is set to initial settings which is required to start the player
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::Intialize(TConfig& aConfig,TUint8* aInitParams,
+	CIRCtrlCmdObserver* aChannel)
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::Intialize" );
+	iInputBufferPtr = reinterpret_cast<TUint8*> (aInitParams); //instance of buffer
+	//Configuration information
+	iConfig = aConfig; //! Set all the configuration information like volume
+	iPlayBufferSize = iConfig.iPlayBufferSize;
+	iInputBufferSize = iConfig.iPlayBufferCount*iPlayBufferSize;
+    iBufferOffset = iPlayBufferSize;
+	iDataType.Set(KMMFFourCCCodeAAC); //! Set the data type as AAC
+	iChannel = reinterpret_cast<CIRCtrlCmdObserver*> (aChannel);
+	iChannel->SentRequest(EPlayerChanged,KErrNone);									//creates an instance of the player
+	TRAPD(err,CreateBufferL()); //creates the buffer
+	if( err )
+		{
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+		return;
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::Intialize - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: StopPlayerBuffering
+// Function is used to freeze bufferring
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::StopPlayerBuffering()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::StopPlayerBuffering" );
+	iStopPlayerBuffering = ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: BufferFilled
+// Function which is called when network gets the buffer filled with data
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::BufferFilled()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::BufferFilled" );
+	if( !iNewPlayer )
+		{
+		//if not playing for the first time
+		if( !iSourceBufferQ.IsEmpty() )
+			{
+			//Initially all unfilled buffers are in source buffer Queue
+			//Once the buffer in the source buffer queue is filled it is moved to queue of buffer
+			//to the sink
+			iTempBufferHolder = iSourceBufferQ.First();
+			iSourceBufferQ.Remove(*iTempBufferHolder);
+			iSinkBufferQ.AddLast(*iTempBufferHolder);
+			}
+		}
+
+	if( iFirstTime )
+		{
+		//if it is playing for first time or rebuffering
+		if( !iNewPlayer )
+			{
+			//if not playing for the first time
+			if( !iSourceBufferQ.IsEmpty() )
+				{
+				//fill the entire buffer source queue
+				//if the entire source buffer queue is not filled
+				if( !iStopPlayerBuffering )
+					{
+					iTempBufferHolder = iSourceBufferQ.First();
+					iTempbuffer = iTempBufferHolder->Des();
+					iInputBuffer.Set
+						(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+
+					if( !iStopState )
+						{
+						//! Calls the fill the buffer for next subsequent times until the source buffer queue is empty
+						iChannel->FilltheBuffer(iInputBuffer);
+						IRLOG_DEBUG( "CIRAACPlayer::BufferFilled - Exiting (1)."  );
+						return;
+						}
+					}
+				}
+			else
+				{
+				//if the entire source buffer queue is filled
+				//gets the header informations like sampling rate and channel
+				//this function here is called to find proper header and
+				//rearrange buffer accordingly
+				GetAACAudioProperties();
+
+				//buffer is completetly filled and indicates that buffering is completed
+				iBufferPercentage = K100Percentage;
+				iChannel->SentRequest( EBufferFillStop, iBufferPercentage );
+
+				//takes the first buffer from sink buffer queue
+				if( !iSinkBufferQ.IsEmpty() )
+					{
+					iTempBufferHolder = iSinkBufferQ.First();
+					}
+				iTempbuffer = iTempBufferHolder->Des();
+
+				iInput.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+				iFirstTime = EFalse;
+				iState = EPlaying;
+				if( !iStopState )
+					{
+					//! Calls the play for the first time
+					TRAPD(err,iAudioPlayer->WriteL(iInput));
+					if( err )
+						{
+						iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+                        IRLOG_DEBUG( "CIRAACPlayer::BufferFilled - Exiting (2)." );
+						return;
+						}
+					}
+				}
+			}
+		else
+			{
+			//if a new player
+			TInt err( KErrNone );
+			//get audio properties like sampling rate and channel
+			if( !iHeaderFound )
+				{
+				GetAACAudioProperties();
+				}
+
+			//sets the audio properties like sampling rate and channel
+			TRAP(err, iAudioPlayer->SetAudioPropertiesL( iSettings.iSampleRate,
+														 iSettings.iChannels));
+			if( err )
+				{
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+                IRLOG_DEBUG( "CIRAACPlayer::BufferFilled - Exiting (3)." );
+				return;
+				}
+
+			//indicates that it is ready to play to client
+			iBufferPercentage = K100Percentage;
+			iChannel->SentRequest( EBufferFadeInReady, iBufferPercentage );
+
+			if( !iSinkBufferQ.IsEmpty() )
+				{
+				iTempBufferHolder = iSinkBufferQ.First();
+				}
+			iTempbuffer = iTempBufferHolder->Des();
+
+			//takes the first buffer from sink buffer queue
+			iInput.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+			iFirstTime = EFalse;
+			iState = EPlaying;
+			iNewPlayer = EFalse;
+			if( !iStopState )
+				{
+				//! Calls the play for the first time
+				TRAP(err,iAudioPlayer->WriteL(iInput));
+				if( err )
+					{
+					iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+                    IRLOG_DEBUG( "CIRAACPlayer::BufferFilled - Exiting (4)." );
+					return;
+					}
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::BufferFilled - Exiting (5)." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CIRAACPlayer
+// This function is the default constructor
+// ---------------------------------------------------------------------------
+//
+CIRAACPlayer::CIRAACPlayer():iInputBuffer(NULL,0,0),iInput(NULL,0,0)
+	{
+	IRLOG_DEBUG( "CIRAACPlayer()::CIRAACPlayer" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConstructL
+// Two phase constructor is used to intialize data members
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::ConstructL" );
+
+
+	iAudioPlayer = CMdaAudioOutputStream::NewL(*this,KAudioPriorityRealOnePlayer,
+		(TMdaPriorityPreference)KAudioPrefRealOneStreaming );
+
+
+
+										//creates an instance of the player
+
+	TInt f_off = _FOFF(CIRBufferContainer,iLink); //for the buffer queue which is maintained
+
+    iSinkBufferQ.SetOffset(f_off);	 //It is Queue of buffer used by media Sink
+    iSourceBufferQ.SetOffset(f_off); // Source of buffer which is ready to fill
+
+   	iNewPlayer = ETrue;    //indicates that this a newly created player
+	iStopPlayerBuffering = EFalse; //indicates whether to freeze buffering
+	iNeedReBuffering = EFalse; //if rebuffering is required this is to set true
+	iState = ENotReady;//current state not ready
+	IRLOG_DEBUG( "CIRAACPlayer::ConstructL - Exiting." );
+
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CreateBufferL
+// Allocates memory and  creates buffers of sink queue
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::CreateBufferL()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::CreateBufferL" );
+	TUint8* bufferaddress = iInputBufferPtr;
+
+	//Created memory to buffer and allocates buffers to buffer queues
+	for(TInt buffercount = 0;buffercount < KIRInputBufferCount; buffercount++)
+		{
+		iTempBufferHolder =
+			CIRBufferContainer::NewL(bufferaddress,iPlayBufferSize);
+		iSinkBufferQ.AddLast(*iTempBufferHolder);
+		bufferaddress += iBufferOffset;
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::CreateBufferL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ReCreateBufferL
+// Recreates buffers of source queue
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::ReCreateBufferL()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::ReCreateBufferL" );
+	while(!iSinkBufferQ.IsEmpty())
+		{
+		//Deleting all the entries in sink buffers queue
+		iTempBufferHolder = iSinkBufferQ.First();
+		iSinkBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		iTempBufferHolder = NULL;
+		}
+	while(!iSourceBufferQ.IsEmpty())
+		{
+		//deleting all the entries in source buffers queue
+		iTempBufferHolder = iSourceBufferQ.First();
+		iSourceBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		iTempBufferHolder = NULL;
+		}
+	TUint8* bufferaddress = iInputBufferPtr;
+	for(TInt buffercount = 0;buffercount < KIRInputBufferCount; buffercount++)
+		{
+		//reallocates the buffer to source buffer queue
+		iTempBufferHolder =
+			CIRBufferContainer::NewL(bufferaddress,iPlayBufferSize);
+		iSourceBufferQ.AddLast(*iTempBufferHolder);
+		bufferaddress += iBufferOffset;
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::ReCreateBufferL - Exiting." );
+	}
+
+									//Call back functions
+
+// ---------------------------------------------------------------------------
+// Function: MaoscBufferCopied
+// call back to be implemented for using CMdaAudioOutputStream
+// Call as callback from the CMdaAudioOutputStream::WriteL
+// after frame work has copied stream to a buffer * @param Error code
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/)
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::MaoscBufferCopied" );
+	if( aError )
+		{
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+		IRLOG_DEBUG( "CIRAACPlayer::MaoscBufferCopied - Exiting (1)." );
+		return;
+		}
+	else
+		{
+        if ( iCurrentVolume < iConfig.iVolume )
+            {
+            iCurrentVolume = iConfig.iVolume;
+            IRLOG_INFO2( "CIRAACPlayer::MaoscBufferCopied - Setting volume to %d", iCurrentVolume );
+            iAudioPlayer->SetVolume( iCurrentVolume );
+            }
+		if( !iSinkBufferQ.IsEmpty() )
+			{
+			//removing the previously read buffer
+			iTempBufferHolder = iSinkBufferQ.First();
+			iSinkBufferQ.Remove(*iTempBufferHolder);
+			if(iTempBufferHolder->Size() == iPlayBufferSize)
+				{
+				iSourceBufferQ.AddLast(*iTempBufferHolder);
+				}
+			else
+				{
+				delete iTempBufferHolder;
+				iTempBufferHolder = NULL;
+				}
+			}
+
+		if( !iStopPlayerBuffering )
+			{
+			if( !iSourceBufferQ.IsEmpty() )
+				{
+				//refilling the first empty buffer from the source queue
+				iFirstTime = EFalse;
+				iTempBufferHolder = iSourceBufferQ.First();
+				iTempbuffer = iTempBufferHolder->Des();
+				iInputBuffer.Set
+					(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+				iChannel->FilltheBuffer(iInputBuffer);
+				}
+			}
+		if( iStopState )
+			{
+            IRLOG_DEBUG( "CIRAACPlayer::MaoscBufferCopied - Exiting (2)." );
+			return;
+			}
+		//starts to play next buffer
+		if( !iSinkBufferQ.IsEmpty() )
+			{
+			//takes the next buffer and plays
+			iTempBufferHolder = iSinkBufferQ.First();
+			iTempbuffer = iTempBufferHolder->Des();
+			iInput.Set(iTempbuffer,iTempBufferHolder->Size(),
+				iTempBufferHolder->Size());
+			//writing to MMF buffer
+			TRAPD(err,iAudioPlayer->WriteL(iInput));
+			if( err )
+				{
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+                IRLOG_DEBUG( "CIRAACPlayer::MaoscBufferCopied - Exiting (3)." );
+				return;
+				}
+			}
+		else
+			{
+			//If no buffer to play so rebuffer
+			if( !iStopPlayerBuffering )
+				{
+				Play();
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::MaoscBufferCopied - Exiting (4)." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: MaoscPlayComplete
+// call back to be implemented for using CMdaAudioOutputStream
+// after play is completed
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::MaoscPlayComplete(TInt aError)
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::MaoscPlayComplete" );
+	if( !iSkipPlayCompleted )
+		{
+		//sending the error code
+		iChannel->SentRequest( EStoppedPlaying, aError );
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::MaoscPlayComplete - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: MaoscOpenComplete
+// call back to be implemented for using CMdaAudioOutputStream
+// Call as callback from the CMdaAudioOutputStream::Open
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::MaoscOpenComplete( TInt aError )
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::MaoscOpenComplete" );
+	if( aError )
+		{
+		IRLOG_DEBUG( "CIRAACPlayer::MaoscOpenComplete - Exiting (1)." );
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+		return;
+		}
+	else
+		{
+		//Setting the data type of player as MP3
+		TRAPD(err, iAudioPlayer->SetDataTypeL(iDataType.FourCC()));  //set type the data as MP3 type
+		if ( err )
+			{
+			if ( KErrNotSupported == err )
+				{
+				iChannel->SentRequest( EError, KErrNotSupported );
+				}
+			else
+				{
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+				}
+            IRLOG_DEBUG( "CIRAACPlayer::MaoscOpenComplete - Exiting (2)." );
+			return;
+			}
+
+		//during rebuffering current volume is to be taken
+		if( iNeedReBuffering )
+			{
+			iConfig.iVolume = iChannel->FetchVolume();
+			}
+		//Computes the current volume and sets the volume
+		TInt index = iAudioPlayer->MaxVolume()/KNoVolumeLevels;
+		iConfig.iVolume = iConfig.iVolume * index;
+		//if volume level given is greater than Maximum volume
+		//volume is set to maximum volume level
+		if( iConfig.iVolume > iAudioPlayer->MaxVolume() )
+			{
+			iConfig.iVolume = iAudioPlayer->MaxVolume();
+			}
+		//if volume level given is lesser than zero
+		//volume is set to zero volume level
+		if( iConfig.iVolume < KZeroVolume )
+			{
+			iConfig.iVolume = KZeroVolume;
+			}
+        // The actual setting of the volume is delayed to MaoscBufferCopied method.
+        // This was due to some error in N91 sound subsystem, which caused the
+        // volume not to adjust in some cases. 
+        iCurrentVolume = 0;
+        iAudioPlayer->SetVolume( iCurrentVolume );
+		iFirstTime = ETrue;
+		iNeedReBuffering = ETrue;
+		if( !iNewPlayer )
+			{
+			//if rebuffering
+			TRAP(err,ReCreateBufferL());
+			if ( err )
+				{
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+                IRLOG_DEBUG( "CIRAACPlayer::MaoscOpenComplete - Exiting (3)." );
+				return;
+				}
+			if( !iStopPlayerBuffering )
+				{
+				//initiates rebuffering for the first time
+				iTempBufferHolder = iSourceBufferQ.First();
+				iTempbuffer = iTempBufferHolder->Des();
+				iInputBuffer.Set(iTempbuffer,iTempBufferHolder->Size(),
+					iTempBufferHolder->Size());
+
+				iChannel->SentRequest( EBufferFillStart, iBufferPercentage );
+				//! Call FilltheBuffer for first time
+				iChannel->FilltheBuffer(iInputBuffer);	//start fill the data
+				}
+			}
+		else
+			{
+			//First time playing
+			BufferFilled();
+			}
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::MaoscOpenComplete - Exiting (4)." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: GetAACAudioProperties
+// extract all the information to start the playing from the stream
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::GetAACAudioProperties()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::GetAACAudioProperties" );
+	//decoding the AAC header
+	TRAPD(err,DoFindnDecodeAACHeaderL());
+	if( err )
+		{
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+        IRLOG_DEBUG( "CIRAACPlayer::GetAACAudioProperties - Exiting (1)." );
+		return;
+		}
+	switch(iAudioInfo.iSamplingRate)
+		{
+		case EAACSamplingFreq8000: //sampling frequency 8000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;
+			}
+			break;
+		case EAACSamplingFreq11025: //sampling frequency 11025
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate11025Hz;
+			}
+			break;
+		case EAACSamplingFreq12000:	//sampling frequency 12000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate12000Hz;
+			}
+			break;
+		case EAACSamplingFreq16000:	//sampling frequency 16000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate16000Hz;
+			}
+			break;
+		case EAACSamplingFreq22050:	//sampling frequency 22050
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate22050Hz;
+			}
+			break;
+		case EAACSamplingFreq24000:	//sampling frequency 24000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate24000Hz;
+			}
+			break;
+		case EAACSamplingFreq32000:	//sampling frequency 32000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate32000Hz;
+			}
+			break;
+		case EAACSamplingFreq44100:	//sampling frequency 44100
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate44100Hz;
+			}
+			break;
+		case EAACSamplingFreq48000:	//sampling frequency 48000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate48000Hz;
+			}
+			break;
+		case EAACSamplingFreq64000:	//sampling frequency 64000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate64000Hz;
+			}
+			break;
+		case EAACSamplingFreq96000:	//sampling frequency 96000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate96000Hz;
+			}
+			break;
+		default:	//default sampling frequency 22050
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate22050Hz;
+			}
+			break;
+		}
+
+	//sets the channel information
+	if( KAACChannelMono == iAudioInfo.iChannel ) //if 0 it indicates mono
+		{
+		iSettings.iChannels = TMdaAudioDataSettings::EChannelsMono;
+		}
+	else //else if it is 1 it indicates stereo
+		{
+		iSettings.iChannels = TMdaAudioDataSettings::EChannelsStereo;
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::GetAACAudioProperties - Exiting (2)." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: DoFindnDecodeAACHeader
+// Function return a non modifiable pointer descriptor of data buffer
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::DoFindnDecodeAACHeaderL()
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::DoFindnDecodeAACHeaderL." );
+	TUint8* input = iInputBufferPtr;
+	TUint8* endptr = iInputBufferPtr + iInputBufferSize - KAACHeaderSize;
+	while ( (endptr > input) && (!iHeaderFound) )
+		{
+		//ADIF header is checked
+		if( ('A' == input[KZERO]) && ('D' == input[KONE]) && ('I' == input[KTWO])	&&
+			('F' ==input[KTHREE]) )
+			{
+			iHeaderFound = ETrue;
+			}
+		else
+			{
+			//checking for sync bits
+			if( (0xFF == input[0]) && (0xF0 == (0xF6 & input[1])) )
+				{
+				//sync bits are obtained
+				TInt framelength = 0;
+				framelength |= (input[KTHREE] & 0x03) << KELEVEN;
+				framelength |= (input[KFOUR] << KTHREE);
+				framelength |= (input[KFIVE] >> KFIVE) & 0x07;
+				if( (0 >= framelength) &&
+					(endptr > (input + framelength + KFOUR)) )
+					{
+					iHeaderFound = EFalse;
+					}
+				else
+					{
+					//cross checked
+					TUint8* nextheader = input + framelength;
+					if( (0xFF == nextheader[0]) &&
+						(0xF0 == ( 0xF6 & nextheader[1])) )
+						{
+					 	iHeaderFound = ETrue;
+						}
+					}
+				}
+			}
+		if( iHeaderFound )
+			{
+			//header is found
+			TUint value = 0;
+			value |= input[0] << KTWENTYFOUR;
+			value |= input[1] << KSIXTEEN;
+			value |= input[2] << KEIGHT;
+			value |= input[KTHREE];
+			//version information is obtained from 19th bit
+			//of acc/accp header
+			TInt index = ( value >> 20 ) & 0x0FFF;
+			if( 0x0FFF == (index & 0xFFF) )
+				{
+				iAudioInfo.iVersion = (value >> 19) & 0x01; //MPEG version
+														    //0 MPEG 4
+														    //1 MPEG 2
+				//selection bits for sampling rate starts with 10th bit
+				//4 bits are need for getting the sampling rate.
+				//this bit combination is extracted and stored in index
+				index = ( value >> 10 ) & 0x00F;
+				iAudioInfo.iSamplingRate = KAacSamplingRate[index]; //gets the sampling rate
+				if( 0 == iAudioInfo.iSamplingRate ) //if sampling rate is zero then we consider the header is wrong
+					{
+					iHeaderFound = EFalse;
+					}
+				else
+					{
+					//decoding channel information
+					index = (value >> 6) & 0x07;
+					if( index == 0 || index == 2 )
+						{
+						iAudioInfo.iChannel = 1; //channel information
+						}
+					else if( index == 1 )
+						{
+						//1 represents stereo and
+						iAudioInfo.iChannel = 0; //0 represents mono
+						}
+					else
+						{
+						iHeaderFound = EFalse;
+						}
+
+					if( iHeaderFound )
+						{
+						//additional check is done for validation
+						//of aac header
+						index = ( value >> 10 ) & 0x00F;
+
+						value = 0;
+						value |= (input[KFOUR] << KTWENTYFOUR);
+						value |= (input[KFIVE] << KSIXTEEN);
+						value |= (input[KSIX] << KEIGHT);
+
+						index |= ( (value >> KTWENTYONE ) & 0x07FF );
+						TInt RawData = ((value >> KEIGHT) &0x03) + 1;
+						if( index > (KONEFIVETHREESIX * RawData) )
+							{
+							iHeaderFound = EFalse;
+							}
+						}
+					}
+				}
+			}
+		//if header is not found we go for next header
+		if( !iHeaderFound )
+			{
+			input++;
+			}
+		}
+	if( iHeaderFound )
+		{
+		ReArrangeBufferL(input);
+		}
+	IRLOG_DEBUG( "CIRAACPlayer::DoFindnDecodeAACHeaderL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ReArrangeBuffer
+// Function rearranges the buffer, and should be called after finding the header
+// from the address of buffers specified, the data buffers are kept in sink queue and
+// remaining buffers are discarded that is put into source queue.
+// ---------------------------------------------------------------------------
+//
+void CIRAACPlayer::ReArrangeBufferL(TUint8* aInput)
+	{
+	IRLOG_DEBUG( "CIRAACPlayer::ReArrangeBufferL" );
+	//if header is found we are rearranging the buffer
+	TUint8* input = aInput;
+	TUint8* endptr = iInputBufferPtr + iInputBufferSize;
+	TUint8* tempbuffer = input;
+
+	while(!iSinkBufferQ.IsEmpty())
+		{
+		//removing all the entries in sink buffers queue
+		iTempBufferHolder = iSinkBufferQ.First();
+		iSinkBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		iTempBufferHolder = NULL;
+		}
+
+	//adds the valid data
+	for(tempbuffer = input; endptr > (tempbuffer + iBufferOffset);
+		tempbuffer += iBufferOffset)
+		{
+		iTempBufferHolder =
+			CIRBufferContainer::NewL(tempbuffer,iPlayBufferSize);
+		iSinkBufferQ.AddLast(*iTempBufferHolder);
+		}
+
+	//adds the valid data
+	TInt length = endptr - tempbuffer;
+	if( length > 0 )
+		{
+		// this buffer will be removed after first time you play
+		iTempBufferHolder =
+			CIRBufferContainer::NewL(tempbuffer,length);
+		iSinkBufferQ.AddLast(*iTempBufferHolder);
+		}
+
+	//adds the buffers to source buffer queue
+	for(tempbuffer = iInputBufferPtr;
+		input > (tempbuffer + iBufferOffset);
+		tempbuffer += iBufferOffset)
+		{
+		iTempBufferHolder =
+			CIRBufferContainer::NewL(tempbuffer,iPlayBufferSize);
+		iSourceBufferQ.AddLast(*iTempBufferHolder);
+		}
+
+	IRLOG_DEBUG( "CIRAACPlayer::ReArrangeBufferL - Exiting." );
+	}
+
+// CIRMP3Player::GetMediaClientInstance()
+// Returns the Audio Player Instance
+// ---------------------------------------------------------------------------
+//
+CMdaAudioOutputStream* CIRAACPlayer::GetAudioPlayer()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::GetMediaClientInstance " );
+	return iAudioPlayer;	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaenginesrc/irbuffercontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irbuffercontainer.h"
+#include "irdebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// Two Phase NewL
+// returns an instance CIRBufferContainer
+// Owned by CIRBufferContainer
+// ---------------------------------------------------------------------------
+//
+CIRBufferContainer* CIRBufferContainer::NewL
+	(TUint8* aAddress,TInt aGranularity)
+	{
+	IRLOG_DEBUG( "CIRBufferContainer::NewL" );
+	CIRBufferContainer *self = 
+		CIRBufferContainer::NewLC(aAddress,aGranularity);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRBufferContainer::NewL - Exiting." );
+	return self;	
+	}
+
+// ---------------------------------------------------------------------------
+// Two Phase NewLC
+// Creates an instance CIRBufferContainer
+// Owned by CIRBufferContainer
+// ---------------------------------------------------------------------------
+//
+CIRBufferContainer* CIRBufferContainer::NewLC
+	(TUint8* aAddress,TInt aGranularity)
+	{
+	IRLOG_DEBUG( "CIRBufferContainer::NewLC" );
+	CIRBufferContainer *self = new(ELeave) CIRBufferContainer;
+	CleanupStack::PushL(self);
+	self->ConstructL(aAddress,aGranularity);
+	IRLOG_DEBUG( "CIRBufferContainer::NewLC - Exiting." );
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// destructor function
+// Owned by CIRBufferContainer
+// ---------------------------------------------------------------------------
+//
+CIRBufferContainer::~CIRBufferContainer ()
+	{
+	IRLOG_DEBUG( "CIRBufferContainer::~CIRBufferContainer" );
+	//No implementation
+	}	
+	
+// ---------------------------------------------------------------------------
+// Function : CIRBufferContainer
+// default constructor
+// ---------------------------------------------------------------------------
+//
+ CIRBufferContainer::CIRBufferContainer()
+	{
+	IRLOG_DEBUG( "CIRBufferContainer::CIRBufferContainer" );
+	//No implementation	
+	}
+
+// ---------------------------------------------------------------------------
+// Two Phase ConstructL
+// Owned by CIRBufferContainer
+// ---------------------------------------------------------------------------
+//
+void CIRBufferContainer::ConstructL(TUint8* aAddress,TInt aGranularity)
+	{
+	IRLOG_DEBUG( "CIRBufferContainer::ConstructL" );
+	//address of memory chunk
+	iDataAddress = aAddress;
+	//granularity of each chunk
+	iSize = aGranularity;
+	IRLOG_DEBUG( "CIRBufferContainer::ConstructL - Exiting." );
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaenginesrc/irmediaengineproxy.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <implementationproxy.h>
+
+#include "iraacplayer.h"
+#include "irmp3player.h"
+
+// Map the interface UIDs to implementation factory functions
+// violates PC lint error :: Warning 611: Suspicious cast
+const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(0x200087E9,CIRMP3Player::NewL),	
+	IMPLEMENTATION_PROXY_ENTRY(0x200087EA,CIRAACPlayer::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x200087EB,CIRAACPlayer::NewL),
+	};
+
+// Exported proxy for instantiation method resolution
+// violates PC lint error 714-- not refrenced.  
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy
+	(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaenginesrc/irmp3player.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1142 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <AudioPreference.h>
+
+#include "irbuffercontainer.h"
+#include "irctrlcmdobserver.h"
+#include "irdebug.h"
+#include "irmediaenginebuffer.h"
+#include "irmp3player.h"
+#include "irmp3playerlocal.h"
+
+#ifdef __WINS__
+#include "irtestingaudioplayer.h"
+#endif //__WINS__
+
+
+
+// Constants
+const TInt KZero = 0;
+const TInt KOne = 1;
+const TInt KTwo = 2;
+const TInt KThree = 3;
+
+const TInt KTwentyFour = 24;
+const TInt KSixteen = 16;
+const TInt KEight = 8;
+const TInt KSamplesPerFrame1 = 576;
+const TInt KSamplesPerFrame2 = 1152;
+const TInt KOneFourFour = 144;
+const TInt KThousand = 1000;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// function returns an instance of CIRMP3Player
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRMP3Player* CIRMP3Player::NewL()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::NewL" );
+	CIRMP3Player* self = CIRMP3Player::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRMP3Player::NewL - Exiting." );
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// function creates an instance of CIRMP3Player
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRMP3Player* CIRMP3Player::NewLC()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::NewLC" );
+	CIRMP3Player* self = new (ELeave) CIRMP3Player;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRMP3Player::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : ~CIRMP3Player
+// Default Destructor
+// ---------------------------------------------------------------------------
+//
+CIRMP3Player::~CIRMP3Player()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::~CIRMP3Player" );
+	//delete the instance of the player
+	delete iAudioPlayer;
+	
+#ifdef __WINS__
+	if(iTestingAudioPlayer)
+		{
+		iTestingAudioPlayer->Close();
+		delete iTestingAudioPlayer;
+		iTestingAudioPlayer = NULL;
+		}
+	CActiveScheduler::Delete(iTestingAudioPlayer);
+
+#endif //__WINS__
+
+	while(!iSinkBufferQ.IsEmpty())
+		{
+		//Deleting all the entries in sink buffers queue
+		iTempBufferHolder = iSinkBufferQ.First();
+		iSinkBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		}
+	while(!iSourceBufferQ.IsEmpty())
+		{
+		//deleting all the entries in source buffers queue
+		iTempBufferHolder = iSourceBufferQ.First();
+		iSourceBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		}
+	IRLOG_DEBUG( "CIRMP3Player::~CIRMP3Player - Exiting." );	
+	}
+									//Function for Play control
+
+// ---------------------------------------------------------------------------
+// Function : Play
+// function to which intiate the player
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::Play()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::Play" );
+	//! then we have to stop it then restart the play from begining
+	if ( EPlaying == iState )
+		{
+		//internally stopped before playing so no need of sending
+		//stop status		
+		iSkipPlayCompleted = ETrue;
+		
+#ifdef __WINS__
+		iTestingAudioPlayer->Stop();
+#else 
+		iAudioPlayer->Stop(); 
+#endif //__WINS__
+		
+		iSkipPlayCompleted = EFalse;		
+		}
+	iState = ENotReady;
+	iStopState = EFalse;
+	iBufferPercentage = KZeroPercentage;
+	
+	//note : using TRAP_IGNORE to suppress a codescanner warning
+	//"Ignoring the return value from Open() functions"
+	//this cannot be checked as this symbian API returns void
+#ifdef __WINS__
+	TRAP_IGNORE ( iTestingAudioPlayer->Open() );
+#else 
+	//opening the current player component
+	TRAP_IGNORE ( iAudioPlayer->Open(&iSettings) );
+#endif //__WINS__
+	iChannel->SentRequest(EPlayingState,KErrNone);	
+	IRLOG_DEBUG( "CIRMP3Player::Play - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Stop
+// function to which stop the player
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::Stop()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::Stop" );	
+	//If the current state is playing 	
+	if ( EPlaying == iState )
+		{
+#ifdef __WINS__
+		iTestingAudioPlayer->Stop();
+#else
+		iAudioPlayer->Stop();	
+#endif //__WINS__
+		
+		}		
+	else
+		{
+	IRRDEBUG2("CIRMP3Player::Stop EStoppedPlaying", KNullDesC); 
+		//sending the updated status as stopped
+		iChannel->SentRequest( EStoppedPlaying, KErrNone );	
+		}		
+	iState = EReadyToPlay;
+	iStopState = ETrue;
+	IRLOG_DEBUG( "CIRMP3Player::Stop - Exiting." );	
+	}
+										
+										//Functions for Volume Control
+
+// ---------------------------------------------------------------------------
+// Function : SetVolume
+// function to set the volume 
+// ---------------------------------------------------------------------------
+//	
+void CIRMP3Player::SetVolume(TInt aVolume )
+	{	
+	IRLOG_DEBUG( "CIRMP3Player::SetVolume" );		
+	//! If volume should be less than maximum value and greater than or equal to zero then set the volume
+	if( KZeroVolume <= aVolume && iAudioPlayer->MaxVolume() >= aVolume )
+		{
+		iAudioPlayer->SetVolume( aVolume );	
+		iConfig.iVolume = iCurrentVolume = aVolume;
+		}		
+	IRLOG_DEBUG( "CIRMP3Player::SetVolume - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : MaxVolume
+// function to returns the maximum volume 
+// ---------------------------------------------------------------------------
+//
+TInt CIRMP3Player::MaxVolume() const
+	{
+	IRLOG_DEBUG( "CIRMP3Player::MaxVolume" );
+	return iAudioPlayer->MaxVolume();	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Volume
+// function to returns the volume, integer level of volume is the Output
+// ---------------------------------------------------------------------------
+//
+TInt CIRMP3Player::Volume() const
+	{
+	IRLOG_DEBUG( "CIRMP3Player::Volume" );
+	return iAudioPlayer->Volume();
+	}
+
+									//Intialization of Codec Settings
+
+// ---------------------------------------------------------------------------
+// Function: Intialize
+// Set the codec type and sampling rate channel of stream
+// This is set to initial settings which is required to start the player
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::Intialize(TConfig& aConfig,TUint8* aInitParams,
+	CIRCtrlCmdObserver* aChannel)
+	{
+	IRLOG_DEBUG( "CIRMP3Player::Intialize" );
+	iInputBufferPtr = reinterpret_cast<TUint8*> (aInitParams); //instance of buffer
+	iConfig = aConfig; //! Set all the configuration information like volume
+	iPlayBufferSize = iConfig.iPlayBufferSize;
+	iInputBufferSize = iConfig.iPlayBufferCount*iPlayBufferSize;
+    iBufferOffset = iPlayBufferSize;
+	iDataType.Set(KMMFFourCCCodeMP3); //! Set the data type as MP3
+	iChannel = reinterpret_cast<CIRCtrlCmdObserver*> (aChannel);
+	TRAPD(err,CreateBufferL()); // allocates buffer to the queue
+	if( err )
+		{
+	IRRDEBUG2("CIRMP3Player::Intialize - EError", KNullDesC);
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+		return;	
+		}
+	iChannel->SentRequest(EPlayerChanged,KErrNone);									//creates an instance of the player
+	IRLOG_DEBUG( "CIRMP3Player::Intialize - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: StopPlayerBuffering
+// Function is used to stop buffering 
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::StopPlayerBuffering()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::StopPlayerBuffering" );
+	//stops the player from buffering
+	iStopPlayerBuffering = ETrue;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: BufferFilled
+// Function which is called when network gets the buffer filled with data
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::BufferFilled()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::BufferFilled" );
+	if( !iNewPlayer )
+		{
+		if( !iSourceBufferQ.IsEmpty() )
+			{
+			//! Initially all unfilled buffers are in source buffer Queue
+			//! Once the buffer in the source buffer queue is filled it is moved to queue of buffer
+			//! to the sink
+			iTempBufferHolder = iSourceBufferQ.First();
+			iSourceBufferQ.Remove(*iTempBufferHolder);
+			iSinkBufferQ.AddLast(*iTempBufferHolder);
+			}
+		}
+	
+	if( iFirstTime )
+		{
+		if( !iNewPlayer )
+			{
+			// During rebuffering only
+			if( !iSourceBufferQ.IsEmpty() ) 
+				{
+				//if source buffer is empty
+				//first buffer of source buffer is taken and refilled
+				iTempBufferHolder = iSourceBufferQ.First();							
+				iTempbuffer = iTempBufferHolder->Des();
+				iInputBuffer.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+				if( iStopState )
+					{
+                    IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (1)." );
+					return;
+					}
+				if( !iStopPlayerBuffering )
+					{								
+					//Calls the fill the buffer for next subsequent times 
+					//until the source buffer queue is empty
+					iChannel->FilltheBuffer(iInputBuffer); 
+					}
+				else
+					{
+                    IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (2)." );
+					//if stopPlayerBuffering is set it has return without buffering
+					return;	
+					}
+				}
+			else
+				{
+				//once it is rebuffered it has trigger play
+				//it has to indicate that rebuffering has completed for client
+				
+				TInt err( KErrNone ); 
+				if( !iReBuffering )
+					{
+					GetMP3AudioProperties();
+					//Sets the audio properties of the player like sampling rate and channel
+					TRAP(err, iAudioPlayer->SetAudioPropertiesL(iSettings.iSampleRate,
+																iSettings.iChannels));
+					if ( err )
+						{
+					IRRDEBUG2("CIRMP3Player::BufferFilled - EError", KNullDesC);
+						iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );	
+                        IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (3)." );
+						return;
+						}
+					}
+				iReBuffering = EFalse;
+				//buffer reached 100% headers are decoded ready to play			
+				iBufferPercentage = K100Percentage;
+				iChannel->SentRequest( EBufferFillStop, iBufferPercentage ); 
+				
+				if( !iSinkBufferQ.IsEmpty() )
+					{
+					iTempBufferHolder = iSinkBufferQ.First();	
+					}					
+				iTempbuffer = iTempBufferHolder->Des();
+				
+				//Take first source buffer queue to be filled
+				iInput.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+				iFirstTime = EFalse;
+				iState = EPlaying;
+				if( !iStopState )
+					{
+
+#ifdef __WINS__
+					iTestingAudioPlayer->Write();
+#else
+					//writing to mmp based buffer to trigger play
+					TRAP(err,iAudioPlayer->WriteL(iInput));	
+
+					if( err )
+						{
+						//error condition
+			IRRDEBUG2("CIRMP3Player::BufferFilled - EError1", KNullDesC);
+						iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );	
+                        IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (4)." );
+						return;
+						}
+#endif //__WINS__	
+					}
+				//! Calls the play for the first time after rebuffering
+			
+				}
+			}
+		else
+			{
+			//First time when the player is created
+			TInt err( KErrNone );
+			GetMP3AudioProperties();			
+				
+			//! Sets the audio properties of the player like sampling rate and channel
+			//Sets the audio properties of the player like sampling rate and channel
+			TRAP(err, iAudioPlayer->SetAudioPropertiesL(iSettings.iSampleRate,
+														iSettings.iChannels));
+			if ( err )
+				{
+		IRRDEBUG2("CIRMP3Player::BufferFilled - EError2", KNullDesC);
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );	
+	            IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (5)." );
+				return;
+				}
+			//buffer percentage is 100%							
+			iBufferPercentage = K100Percentage;
+			//indicating it has rebuffered
+			iChannel->SentRequest( EBufferFadeInReady, iBufferPercentage ); 			
+			
+			if( !iSinkBufferQ.IsEmpty() )
+				{
+				iTempBufferHolder = iSinkBufferQ.First();
+				}
+			iTempbuffer = iTempBufferHolder->Des();
+			
+			//first buffer of sink is taken and played
+			iInput.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);
+			iNewPlayer = EFalse;
+			iFirstTime = EFalse;
+			iState = EPlaying;
+			
+			//Calls the play for the first time
+			if( !iStopState )
+				{
+#ifdef __WINS__
+				iTestingAudioPlayer->Write();
+#else
+				//writing to MMF buffers
+				TRAP(err,iAudioPlayer->WriteL(iInput));	
+				if( err )
+					{
+			IRRDEBUG2("CIRMP3Player::BufferFilled - EError3", KNullDesC);
+					iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );	
+					IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (6)." );	
+					return;
+					}	
+#endif //__WINS__
+				}
+			}	
+		}		
+	IRLOG_DEBUG( "CIRMP3Player::BufferFilled - Exiting (7)." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CIRMP3Player
+// This function is the default constructor
+// ---------------------------------------------------------------------------
+//
+CIRMP3Player::CIRMP3Player() : iInputBuffer(NULL,0,0), iInput(NULL,0,0)
+	{
+	IRLOG_DEBUG( "CIRMP3Player::CIRMP3Player" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConstructL
+// Two phase constructor is used to intialize data members
+// Function can leave if CMdaAudioOutputStream::NewL leaves
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::ConstructL" );
+
+	iAudioPlayer = CMdaAudioOutputStream::NewL(*this,KAudioPriorityRealOnePlayer,
+		(TMdaPriorityPreference)KAudioPrefRealOneStreaming );
+
+										//creates an instance of the player
+										
+#ifdef __WINS__			
+	iTestingAudioPlayer = CIRTestingAudioPlayer::NewL(*this);
+	CActiveScheduler::Add(iTestingAudioPlayer);
+#endif //__WINS__
+
+	TInt f_off = _FOFF(CIRBufferContainer,iLink); //for the buffer queue which is maintained
+
+    iSinkBufferQ.SetOffset(f_off);	 //It is Queue of buffer used by media Sink
+    iSourceBufferQ.SetOffset(f_off); // Source of buffer which is ready to fill
+    
+	iNewPlayer = ETrue;	//indicates that this a newly created player
+	iStopPlayerBuffering = EFalse;	//indicates whether to stop buffering
+	iState = ENotReady;	//current state not ready	
+	iNeedReBuffering = EFalse;//if rebuffering is required this is to set true
+	iStopState = EFalse; //
+	IRLOG_DEBUG( "CIRMP3Player::ConstructL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CreateBufferL 
+// Created buffers in sink buffer queue and allocates memory to sink buffer queues
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::CreateBufferL()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::CreatebufferL" );	
+	TUint8* bufferaddress = iInputBufferPtr;
+	//! source buffers not created since initially all buffers are filled with data and is ready to play	
+	//! Created buffers in sink buffer queue and allocates memory to sink buffer queues
+	for(TInt buffercount = 0; buffercount < KIRInputBufferCount; buffercount++)
+		{		
+		iTempBufferHolder = CIRBufferContainer::NewL(bufferaddress,
+			iPlayBufferSize);
+		iSinkBufferQ.AddLast(*iTempBufferHolder);
+		bufferaddress += iBufferOffset;
+		}
+	IRLOG_DEBUG( "CIRMP3Player::CreatebufferL - Exiting." );	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: ReCreateBufferL 
+// Recreates buffers of source queue
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::ReCreateBufferL()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::ReCreateBufferL " );
+	while(!iSinkBufferQ.IsEmpty())
+		{
+		//Deleting all the entries in sink buffers queue
+		iTempBufferHolder = iSinkBufferQ.First();
+		iSinkBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		iTempBufferHolder = NULL;	
+		}
+	while(!iSourceBufferQ.IsEmpty())
+		{
+		//deleting all the entries in source buffers queue
+		iTempBufferHolder = iSourceBufferQ.First();
+		iSourceBufferQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		iTempBufferHolder = NULL;	
+		}
+	TUint8* bufferaddress = iInputBufferPtr; 
+	//reallocates the buffer to source buffer queue
+	for(TInt buffercount = 0; buffercount < KIRInputBufferCount; buffercount++)
+		{		
+		iTempBufferHolder = CIRBufferContainer::NewL(bufferaddress,
+			iPlayBufferSize);
+		iSourceBufferQ.AddLast(*iTempBufferHolder);
+		bufferaddress += iBufferOffset;
+		}	
+	IRLOG_DEBUG( "CIRMP3Player::ReCreateBufferL - Exiting." );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// Function: GetMP3AudioProperties
+// extract all the information required to start the play from the stream
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::GetMP3AudioProperties()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::GetMP3AudioProperties" );
+	//Decoding MP3 header		
+	DoFindnDecodeMP3Header();	
+	
+	//! Sets the sampling rate and channel information to data members
+	switch(iAudioInfo.iSamplingRate)
+		{
+		case EMp3SamplingFreq8000: //sampling frequency 8000
+			{	
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;
+			}
+			break;
+		case EMp3SamplingFreq11025: //sampling frequency 11025
+			{			
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate11025Hz;
+			}
+			break;
+		case EMp3SamplingFreq12000:	//sampling frequency 12000
+			{	
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate12000Hz;
+			}
+			break;
+		case EMp3SamplingFreq16000:	//sampling frequency 16000
+			{			
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate16000Hz;
+			}
+			break;
+		case EMp3SamplingFreq22050:	//sampling frequency 22050
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate22050Hz;
+			}
+			break;
+		case EMp3SamplingFreq24000:	//sampling frequency 24000
+			{			
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate24000Hz;
+			}
+			break;
+		case EMp3SamplingFreq32000:	//sampling frequency 32000
+			{
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate32000Hz;
+			}
+			break;
+		case EMp3SamplingFreq44100:	//sampling frequency 44100
+			{			
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate44100Hz;
+			}
+			break;
+		case EMp3SamplingFreq48000:	//sampling frequency 48000
+			{	
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate48000Hz;
+			}
+			break;
+		default:	//default sampling frequency 22050
+			{	
+			iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate22050Hz;
+			}
+			break;	
+		}
+	//sets the channel information	
+	if( KMp3ChannelMono == iAudioInfo.iChannel ) //0 indicates mono
+		{
+		iSettings.iChannels = TMdaAudioDataSettings::EChannelsMono;	
+		}		
+	else	//else 1 it indicates it is stereo
+		{
+		iSettings.iChannels = TMdaAudioDataSettings::EChannelsStereo;	
+		}				
+	IRLOG_DEBUG( "CIRMP3Player::GetMP3AudioProperties - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: DoFindnDecodeMP3Header
+// Function is used to find the mp3 header and decode the mp3 header
+// This function do have hard coded values and these value remains as such
+// as long as the standard remains, so used as such
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::DoFindnDecodeMP3Header()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::DoFindnDecodeMP3Header" );
+	//first buffer is discarded
+	TUint8* input = iInputBufferPtr;
+	//end ptr is calculated
+	TUint8* endptr = iInputBufferPtr + iInputBufferSize;
+	
+	//holds the 4 bytes of data
+	TUint value = 0; //value zero is intialized
+	TBool headerfound = EFalse;
+	
+	//value are to hardcoded as this is the standard way of implement
+	// the MP3 header decoding
+	while( input < endptr && !headerfound )
+		{
+		//stepsuccess indicates the success in each step or stage of header decoding,
+		//incase of failure we will not go for next step
+		TBool stepsuccess = EFalse;
+		//initially no header is found
+		//assign the value to zero initially for clearing the value
+		//then assign next 32 bits of data to value	
+		value = 0; //value is cleared
+		value |= input[0]<<KTwentyFour; //first 8 bit is shift 24bits copied (or) to "value"
+		value |= input[1]<<KSixteen; //second 8 bit is shift 24bits copied (or) to "value"
+		value |= input[2]<<KEight;//third 8 bit is shift 24bits copied (or) to "value"
+		value |= input[KThree];//last 8 bit is shift 24bits copied (or) to "value"
+		
+		// sync bytes found
+		// for performance reasons check already that it is not data within an empty frame (all bits set)
+		// therefore check wether the bits for bitrate are all set -> means that this is no header
+		if ( (input[0] == 0xFF) && ( ( input[1] & 0xE0 ) == 0xE0 ) && ( ( input[2] & 0xF0 ) != 0xF0 ) )
+			{
+			//header is found
+			//first level of header decoding is success, so stepsuccess = ETrue
+			stepsuccess = ETrue;
+			//version information is stored in 2 bits starting from 19th bit of header
+			//two get only 2bits we are doing an AND operation with 0b011 (0x03)				
+			TInt index = (value >> 19) & 0x03;
+			//! Gets the version information of MPEG
+			
+			TInt version = index; 	 //MPEG 2.5 	00
+									 //reservered   01
+									 //MPEG 2       10
+									 //MPEG 1       11
+			//if header information is 0x01						 
+			iAudioInfo.iVersion = version;
+			if( 0x01 == iAudioInfo.iVersion ) 
+				{
+				//bit pattern 0x01 indicates that version is reserved 							  
+				// and is considered as incorrect header information
+				stepsuccess = EFalse;	
+				}
+				
+			else
+				{
+				//bit pattern 0x00 indictes MPEG version is 2.5
+				//bit pattern 0x10 indictes MPEG version is 2
+				//MPEG 2.5 (0x00) and MPEG 2 (0x10) version
+				if( (0x00 == iAudioInfo.iVersion) || 
+					(0x02 == iAudioInfo.iVersion) )
+					{
+					//576 samples per frame
+					//there is 576 samples per frame
+					iAudioInfo.iSamplesPerFrame = KSamplesPerFrame1;
+					}
+				else 
+					{
+					//MPEG 1 version (0x11) 
+					//for MPEG 1 there is 1152 samples per frame
+					iAudioInfo.iSamplesPerFrame = KSamplesPerFrame2;
+					}
+				}				
+				
+			if( stepsuccess )
+				{
+				//layer information from the header is obtained from 2 bits starting 17th Bit
+				//information is extracted to index. 				
+				index = ( value >> 17 ) & 0x03;     
+				if( 0x01 != index ) 	//Layer 3 check if its layer 2 to layer 1 								
+					{				    //we will consider the header is not proper
+					stepsuccess = EFalse;
+					}
+				else
+					{
+					iAudioInfo.iLayer = 2; //Layer 3
+					//for selection bitrate we have need a combination of MPEG version, layer information
+					//and selection bits. the selection bits starts from 12th bits of mp3 header
+					//the selection byte is extracted into the index		
+					index = (value >> 12) & 0x000F;
+					TInt versionindex = 0;
+					if( 0x11 == version )
+						{
+						//index of the array is 0
+						versionindex = 0;	
+						}
+					else
+						{
+						//index of array is 1
+						versionindex = 1;	
+						}
+					//getting the bit rate
+					iAudioInfo.iBitRate = 
+						KBitRate[versionindex][iAudioInfo.iLayer][index];  
+					if( iAudioInfo.iBitRate == 0 ) //since bit rate is zero we consider as header is not proper
+						{
+						stepsuccess = EFalse;
+						}						
+					}			
+				}
+				
+			if( stepsuccess )
+				{
+				//sampling rate is obtained by a combination of MPEG version and
+				//selection bits. There are 2 selection bits starting from 10th bit
+				//and is extracted (AND with 0x03) from header and stored in index 
+				index = ( value >> 10 ) & 0x03;
+				
+				//! Gets the sampling frequency				
+				iAudioInfo.iSamplingRate = 
+					KMP3SamplingRate[iAudioInfo.iVersion][index];
+				if( 0 == iAudioInfo.iSamplingRate ) //if sampling rate is 0 it is invalidated
+					{
+					stepsuccess = EFalse;	
+					}
+				//padding information is obtained from 9th bit of mp3 header
+				iAudioInfo.iPadding = (value >> 9) & 0x01; //padding
+				
+				//the information for selection of channel is stored in 2bits starting from 6th bit of
+				//mp3 header and is decoded and kept in index for selection of channel
+				index = ( value >> 6 ) & 0x0003;				
+				iAudioInfo.iChannel = KChannelInfo[index]; //0 for mono and 1 for stereo			
+				
+				//framesize = (144 * bitrate)/(padding + sampling rate)
+				if( stepsuccess )
+					{//multiplication of 1000 is to convert kbs to bs
+					iAudioInfo.iFrameSize = (KOneFourFour * iAudioInfo.iBitRate * KThousand)
+						/(iAudioInfo.iPadding + iAudioInfo.iSamplingRate);	
+					}
+				//cross checking the header with next header
+				//both sampling frequency matches the function will return ETrue else EFalse	
+				if( !CrossCheckHeader(input) ) 
+					{
+					stepsuccess = EFalse;
+					}
+				}
+			if( stepsuccess )
+				{
+				//header is found
+				headerfound = ETrue;	
+				}
+			else
+				{
+				//header is not found
+				input++;	
+				}
+			} // sync bytes found
+			else
+			{
+			//header sync bits doesn't match
+			input++;	
+			}
+		}
+	IRLOG_DEBUG( "CIRMP3Player::DoFindnDecodeMP3Header - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: CrossCheckHeader
+// Function is cross checks sampling rate  
+// This function do have hard coded values and these value remains as such
+// as long as the standard remains, so used as such
+// ---------------------------------------------------------------------------
+//
+TBool CIRMP3Player::CrossCheckHeader(TUint8* aInput)
+	{
+	IRLOG_DEBUG( "CIRMP3Player::CrossCheckHeader" );
+	if( !aInput )
+		{
+		return EFalse;
+		}
+	//next header is to taken
+	TUint8* input = aInput + iAudioInfo.iSamplesPerFrame;
+	TUint8* endptr = iInputBufferPtr + iInputBufferSize 
+		- KMp3FrameHeaderSize;
+	TUint32 samplingrate = 0;
+	TBool headerfound = EFalse;
+	
+	TUint value = 0;
+	TInt version = 0;
+	TUint channel = 0;
+	TUint layer = 0;
+	while( input < endptr && !headerfound )
+		{
+		//header is not found
+		TInt successheader = EFalse;
+		//assign the value to zero initially for clearing the value
+		//then assign next 32 bits of data to value			
+		value = 0;
+		value |= input[KZero]<<KTwentyFour;
+		value |= input[KOne]<<KSixteen;
+		value |= input[KTwo]<<KEight;
+		value |= input[KThree];
+			
+		// sync bytes found
+		// for performance reasons check already that it is not data within an empty frame (all bits set)
+		// therefore check wether the bits for bitrate are all set -> means that this is no header
+		if ( (input[0] == 0xFF) && ( ( input[1] & 0xE0 ) == 0xE0 ) && ( ( input[2] & 0xF0 ) != 0xF0 ) )
+			{
+			//header is obtained
+			successheader = ETrue;
+			//version information is stored in 2 bits starting from 19th bit of header
+			//two get only 2bits we are doing an AND operation with 0b011 (0x03)
+			TInt index = (value >> 19) & 0x03;
+			//! Gets the version information of MPEG
+			
+			version = index; 	 //MPEG 2.5 	00
+										 //reservered   01
+										 //MPEG 2       10
+										 //MPEG 1       11
+			//if header information is 0x01							 
+			if( 0x01 == version ) //indicates that version is reserved and is considered 
+				{				  //as incorrect header information
+				//header is not valid							  
+				successheader = EFalse;
+				input++;
+				headerfound = EFalse;	
+				}
+				
+			index = ( value >> 6 ) & 0x0003;
+			channel = KChannelInfo[index]; //0 for mono and 1 for stereo	
+			
+			index = ( value >> 17 ) & 0x03;
+			if ( index == 0x01 )
+				layer = 2;
+				
+			if( successheader )	
+				{
+				//sampling rate is obtained by a combination of MPEG version and
+				//selection bits. There are 2 selection bits starting from 10th bit
+				//and is extracted (AND with 0x03) from header and stored in index 
+				index = (value >> 10) & 0x03;				
+				//! Gets the sampling frequency				
+				samplingrate = KMP3SamplingRate[version][index];
+				if( 0 == samplingrate ) //if sampling rate is 0 it is invalidated
+					{
+					//header is not valid
+					input++;	
+					}
+				else
+					{
+					//header is obtained
+					headerfound = ETrue;	
+					}	
+				}					
+			} // sync bytes found
+			else
+			{
+			//header is not valid
+			input++;	
+			}
+		}
+	//if sampling rate match with one we initially decoded we return ETrue else EFalse
+	// version change never possible
+	// layer change never possible
+	// sampling rate change never possible
+	// from mono to stereo never possible
+	if ( iAudioInfo.iSamplingRate == samplingrate && iAudioInfo.iVersion == version
+			&& iAudioInfo.iChannel == channel
+		 	&& iAudioInfo.iLayer == layer )
+		{
+		IRLOG_DEBUG( "CIRMP3Player::CrossCheckHeader - Exiting (1)." );
+		return ETrue;	
+		}		
+	else
+		{
+		IRLOG_DEBUG( "CIRMP3Player::CrossCheckHeader - Exiting (2).");
+		return EFalse;	
+		}		
+	}
+
+	
+									//Call back functions
+
+// ---------------------------------------------------------------------------
+// Function: MaoscBufferCopied
+// call back to be implemented for using CMdaAudioOutputStream
+// Call as callback from the CMdaAudioOutputStream::WriteL
+// after frame work has copied stream to a buffer
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/)
+	{
+	IRLOG_DEBUG( "CIRMP3Player::MaoscBufferCopied" );	
+	if( aError )
+		{
+		IRLOG_ERROR2( "CIRMP3Player::MaoscBufferCopied - Error in buffering (%d)", aError );
+		//error in playing then return
+		IRRDEBUG2("CIRMP3Player::MaoscBufferCopied - EError", KNullDesC);
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+		return;
+		}
+	else
+		{
+       if ( iCurrentVolume < iConfig.iVolume )
+            {
+            iCurrentVolume = iConfig.iVolume;
+            IRLOG_INFO2( "CIRMP3Player::MaoscBufferCopied - Setting volume to %d", iCurrentVolume );
+            iAudioPlayer->SetVolume( iCurrentVolume );
+            }
+		if( iSinkBufferQ.IsEmpty() )
+			{
+			//previously played buffer is empty
+			//should never happen
+		IRRDEBUG2("CIRMP3Player::MaoscBufferCopied - EError1", KNullDesC);
+			iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+			return;	
+			}
+		else
+			{
+			//previously played buffer is removed	
+			iTempBufferHolder = iSinkBufferQ.First();
+			//played buffer is removed from sink queue		
+			iSinkBufferQ.Remove(*iTempBufferHolder);
+			//removed buffer is appended to end of source queue
+			iSourceBufferQ.AddLast(*iTempBufferHolder);
+			
+			//the first buffer of the source buffer is given to refill					
+			if( !iSourceBufferQ.IsEmpty() )
+				{
+				iTempBufferHolder = iSourceBufferQ.First();	
+				}			
+			//if stop is called during rebuffering
+			if( !iStopPlayerBuffering )
+				{
+				// if player is stopped it has to stop buffering
+				iTempbuffer = iTempBufferHolder->Des();
+				iInputBuffer.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize); 
+				iChannel->FilltheBuffer(iInputBuffer);	
+				}
+			//if stop state we have to return
+			if( iStopState )
+				{
+				IRLOG_DEBUG( "CIRMP3Player::MaoscBufferCopied - Exiting (1)." );	
+				//should continue this loop unless play is triggered
+				return;	
+				}
+						
+			//plays buffer if there buffer to play
+			if( !iSinkBufferQ.IsEmpty() )
+				{
+				//sink Buffer queue has buffer to play
+				iTempBufferHolder = iSinkBufferQ.First();
+				iTempbuffer = iTempBufferHolder->Des();
+							
+				iInput.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);				
+
+#ifdef __WINS__
+				iTestingAudioPlayer->Write();
+#else				
+				//writing to MMF buffer
+				TRAPD(err,iAudioPlayer->WriteL(iInput));
+
+				if( err )
+					{
+			IRRDEBUG2("CIRMP3Player::MaoscBufferCopied - EError2", KNullDesC);
+					//if playing failed
+					iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+					return;	
+					}
+#endif //__WINS__
+				}
+			else
+				{
+				//rebuffering
+				if( !iStopPlayerBuffering )
+					{
+					//if sink buffer is empty
+					//we have to rebuffer
+					iReBuffering = ETrue;
+					Play();
+					}								
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRMP3Player::MaoscBufferCopied - Exiting (2)." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: MaoscPlayComplete
+// call back to implement for using CMdaAudioOutputStream
+// Call as callback from the CMdaAudioOutputStream::WriteL
+// after play is completed
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::MaoscPlayComplete(TInt aError)
+	{
+	IRLOG_DEBUG( "CIRMP3Player::MaoscPlayComplete" );
+	if( !iSkipPlayCompleted )
+		{
+	IRRDEBUG2("CIRMP3Player::MaoscPlayComplete EStoppedPlaying", KNullDesC); 
+
+		//sending the stop status
+		iChannel->SentRequest( EStoppedPlaying, aError );	
+		}
+	IRLOG_DEBUG( "CIRMP3Player::MaoscPlayComplete - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: MaoscOpenComplete
+// call back implemented for using CMdaAudioOutputStream
+// Call as callback from the CMdaAudioOutputStream::Open
+// ---------------------------------------------------------------------------
+//
+void CIRMP3Player::MaoscOpenComplete( TInt aError )
+	{	
+	IRLOG_DEBUG( "CIRMP3Player::MaoscOpenComplete" );
+	if( aError )
+		{		
+		IRLOG_ERROR( "CIRMP3Player::MaoscOpenComplete - error end" );
+		IRRDEBUG2("CIRMP3Player::MaoscOpenComplete - EError", KNullDesC);
+		//open failed
+		iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+		return;	
+		}
+	else
+		{
+		TInt err( KErrNone );
+		
+#ifdef __WINS__
+	      err=0;
+#else
+		//Setting the data type of player as MP3
+		TRAP(err, iAudioPlayer->SetDataTypeL(iDataType.FourCC()));  //set type the data as MP3 type
+	      
+		if ( err )
+			{
+			if ( KErrNotSupported == err )
+				{
+			IRRDEBUG2("CIRMP3Player::MaoscOpenComplete - EError1", KNullDesC);
+				iChannel->SentRequest( EError, KErrNotSupported );
+				}
+			else
+				{
+			IRRDEBUG2("CIRMP3Player::MaoscOpenComplete - EError2", KNullDesC);
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );
+				}
+			return;
+			}
+#endif //__WINS__
+		
+		
+		//during rebuffering current volume is to be taken	
+		if( iNeedReBuffering )
+			{
+			iConfig.iVolume = iChannel->FetchVolume();	
+			}			
+		
+		//Computes the current volume and sets the volume
+		TInt index = iAudioPlayer->MaxVolume()/KNoVolumeLevels;	
+		iConfig.iVolume = iConfig.iVolume * index;
+		//if the given volume is greater than max volume it made to maximum volume
+		//this may happen if the first time volume exceeds the limits
+		if( iConfig.iVolume > iAudioPlayer->MaxVolume() )
+			{
+			iConfig.iVolume = iAudioPlayer->MaxVolume();	
+			}			
+		//else if the given volume is less than zero it made to zero 
+		//this may happen if the first time volume goes below the limits
+		if( iConfig.iVolume < KZeroVolume )
+			{
+			iConfig.iVolume = KZeroVolume;	
+			}			
+		
+		// The actual setting of the volume is delayed to MaoscBufferCopied method.
+		// This was due to some error in N91 sound subsystem, which caused the
+		// volume not to adjust in some cases. 
+	    iCurrentVolume = 0;
+        iAudioPlayer->SetVolume( iCurrentVolume );
+		
+		iFirstTime = ETrue;
+		iNeedReBuffering = ETrue;
+		
+		if( !iNewPlayer )
+			{
+			//player is rebuffering or stop and played
+			TRAP(err,ReCreateBufferL());
+			if ( err )
+				{
+				IRRDEBUG2("CIRMP3Player::MaoscOpenComplete - EError3", KNullDesC);
+				iChannel->SentRequest( EError, KIRCtrlCmdGeneralPlayerError );	
+				return;
+				}
+			
+			//initiates the refilling of buffers
+			iTempBufferHolder = iSourceBufferQ.First();
+			iTempbuffer = iTempBufferHolder->Des();
+			iInputBuffer.Set(iTempbuffer,iPlayBufferSize,iPlayBufferSize);			
+			iChannel->SentRequest( EBufferFillStart, iBufferPercentage );
+			//Call FilltheBuffer for first time 
+			iChannel->FilltheBuffer(iInputBuffer);	//start fill the data	
+			}
+		else
+			{
+			//First time playing
+			BufferFilled();
+			}
+		}
+	IRLOG_DEBUG( "CIRMP3Player::MaoscOpenComplete - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRMP3Player::GetMediaClientInstance()
+// Returns the Audio Player Instance
+// ---------------------------------------------------------------------------
+//
+CMdaAudioOutputStream* CIRMP3Player::GetAudioPlayer()
+	{
+	IRLOG_DEBUG( "CIRMP3Player::GetMediaClientInstance " );
+	return iAudioPlayer;	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/mediaenginesrc/irtestingaudioplayer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include "irtestingaudioplayer.h"
+#include "irmp3player.h"
+
+// Constants
+
+const TInt KTWOMILLION = 2000000 ;
+
+CIRTestingAudioPlayer::CIRTestingAudioPlayer(CIRMP3Player& aMP3Player):
+			 CActive(CActive::EPriorityStandard),iMP3Player(aMP3Player)
+{
+		iCounter=0;
+}
+
+CIRTestingAudioPlayer::~CIRTestingAudioPlayer()
+{
+	// Make sure we're cancelled
+	Cancel();
+	iTimer.Close();
+
+}
+
+CIRTestingAudioPlayer* CIRTestingAudioPlayer::NewL(CIRMP3Player& aMP3Player)
+{
+	CIRTestingAudioPlayer* self = new (ELeave) CIRTestingAudioPlayer(aMP3Player);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+}
+void CIRTestingAudioPlayer::ConstructL()
+{
+	iTimer.CreateLocal();
+}
+
+void CIRTestingAudioPlayer::IssueRequest()
+{
+
+	// Request another wait
+  	iStatus = KRequestPending;
+    iTimer.After( iStatus, KTWOMILLION );
+    //console->Printf(_L("\n Set Active called after iTimer()"))
+    SetActive();
+    //console->Printf(_L("\n Leaving Issue Request"))
+}
+
+void CIRTestingAudioPlayer::DoCancel()
+{
+	iTimer.Cancel(); // Close the ASP
+}
+
+void CIRTestingAudioPlayer::RunL()
+	{
+
+	switch(iAudioFuncType)
+		{
+		case EOpen:
+			{
+			iMP3Player.MaoscOpenComplete(0);
+			}
+		break;
+		case EWriteLBufferCopied:
+			{
+			TBuf8<2> dummy;
+			iMP3Player.MaoscBufferCopied(0,dummy);
+			}
+		break;
+		case EWriteLPlayComplete:
+			{
+			iMP3Player.MaoscOpenComplete(0);
+			}
+			break;
+		default:
+			{
+
+			}
+		}
+	}
+
+void CIRTestingAudioPlayer::Open()
+	{
+	iAudioFuncType = EOpen;
+	IssueRequest();
+	}
+void CIRTestingAudioPlayer::Write()
+	{
+	iAudioFuncType = EWriteLBufferCopied;
+	IssueRequest();
+	}
+void CIRTestingAudioPlayer::Stop()
+	{
+	iTimer.Cancel();
+	}
+void CIRTestingAudioPlayer::Close()
+	{
+	// do nothing
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/iractivenetworkobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRACTIVENETWORKOBSERVER_H_
+#define IRACTIVENETWORKOBSERVER_H_
+
+
+#include "irnetworkcontrollerobserver.h"
+
+class MIRActiveNetworkObserver
+	{
+public:
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 virtual void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)= 0;
+	 
+	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 virtual void ResetPendingRequests(TBool aValue)= 0;
+
+	};
+
+#endif /*IRACTIVENETWORKOBSERVER_H_*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/irdatatransferobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2005-2008 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:  Data transfer interfaces.
+*
+*/
+
+
+#ifndef M_MIRDATATRANSFEROBSERVER_H
+#define M_MIRDATATRANSFEROBSERVER_H
+
+#include <e32def.h>
+
+class RHTTPSession;
+class MIRDataTransferObserver;
+
+/**
+ * Data transfer tracker interface.
+ *
+ * Provides means to attach itself to an existing network session to track the data amounts
+ * transferred through it, and also an API through which raw data amounts can be manually
+ * inputted (this is mainy the case when raw sockets are used directly).
+ *
+ * For getting notifications from the application's data transfer amounts on the core side,
+ * this class supports an observer interface through which data transfer events are notified.
+ */
+NONSHARABLE_CLASS( MIRDataTransferTracker )
+    {
+
+public:
+
+    /**
+     * Supported data transfer categories.
+     */
+    enum TIRTransferCategory
+        {
+
+        /**
+         * The category for the data is unknown.
+         */
+        EIRTransferCategoryUnknown,
+
+        /**
+         * The category for the data is SDS.
+         */
+        EIRTransferCategoryIsds,
+
+        /**
+         * The category for the data is content show.
+         */
+        EIRTransferCategoryAudio
+
+        };
+
+    /**
+     * Simple struct to keep hold of all the different data amounts transferred.
+     *
+     * The actual total amount of bytes of transferred data through the connection
+     * is the amount of total bytes sent added to the amount of total bytes received.
+     */
+    NONSHARABLE_STRUCT( TIRDataTransferPckg )
+        {
+
+        /**
+         * The total amount of bytes sent originating from all traffic.
+         * This is simply the sum of all the categorized data sent amounts.
+         */
+        TInt iBytesSentTotal;
+
+        /**
+         * The total amount of bytes received originating from all traffic.
+         * This is simply the sum of all the categorized data received amounts.
+         */
+        TInt iBytesReceivedTotal;
+
+        /**
+         * The total amount of bytes sent originating from unknown traffic.
+         */
+        TInt iBytesSentUnknown;
+
+        /**
+         * The total amount of bytes received originating from unknown traffic.
+         */
+        TInt iBytesReceivedUnknown;
+
+        /**
+         * The total amount of bytes sent originating from station directory traffic.
+         */
+        TInt iBytesSentIsds;
+
+        /**
+         * The total amount of bytes received originating from station directory traffic.
+         */
+        TInt iBytesReceivedIsds;
+
+        /**
+         * The total amount of bytes sent originating from content show traffic.
+         */
+        TInt iBytesSentAudio;
+
+        /**
+         * The total amount of bytes received originating from content show traffic.
+         */
+        TInt iBytesReceivedAudio;
+
+        };
+
+public:
+
+    /**
+     * Sets the observer that is notified of data transfer events.
+     *
+     * @param   aObserver           The observer to set, or NULL if none.
+     */
+    virtual void SetObserver( MIRDataTransferObserver* aObserver ) = 0;
+
+    /**
+     * Returns the current data transfer amounts.
+     *
+     * This always reflects the current situation, and thereby does not
+     * take the threshold mechanism into account.
+     *
+     * @return  The current data transfer amounts.
+     */
+    virtual const TIRDataTransferPckg& TransferredData() const = 0;
+
+    /**
+     * Binds the tracker to an existing and opened HTTP session.
+     *
+     * @param   aSession            Session to bind the tracker to.
+     * @param   aCategory           Transfer category to record the data under.
+     */
+    virtual void BindL( RHTTPSession aSession, TIRTransferCategory aCategory ) = 0;
+
+    /**
+     * Notifies of raw bytes transferred through the connection.
+     *
+     * Raw sockets cannot be observer automatically, so if they are used, then manual
+     * notification is required on the user's part.
+     *
+     * @param   aBytesSent          Bytes sent through the raw socket.
+     * @param   aBytesReceived      Bytes received through the raw socket.
+     * @param   aCategory           Transfer category to record the data under.
+     */
+    virtual void RawDataTransferredL( TInt aBytesSent,
+    		 TInt aBytesReceived, TIRTransferCategory aCategory ) = 0;
+
+    };
+
+/**
+ * Interface which all data transfer events are passed through.
+ */
+class MIRDataTransferObserver
+    {
+
+public:
+
+    /**
+     * Invoked when a data transfer event occurs.
+     *
+     * The amount of data supplied as the parameter is the absolute amount of data transferred during
+     * the life time of the connection. The threshold after which the call back is invoked is internal,
+     * resulting in that it may not always be instantly called unless a predefined amount of data has
+     * already been transferred since the last call back was made.
+     *
+     * @param   aData           Data amounts that have been transferred through the connection.
+     */
+    virtual void HandleDataTransferEventL( 
+    			const MIRDataTransferTracker::TIRDataTransferPckg& aData ) = 0;
+
+    };
+
+#endif // M_MIRDATATRANSFEROBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/irdatatransfertracker.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2008-2008 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:  Tracks data transmitted through a network connection.
+*
+*/
+
+
+#ifndef C_CIRDATATRANSFERTRACKER_H
+#define C_CIRDATATRANSFERTRACKER_H
+
+#include <mhttpfilter.h>
+
+#include "irdatatransferobserver.h"
+
+/**
+ * Tracks data transmitted through a network connection.
+ *
+ * Data sent or received over HTTP sessions are logged with the implemented HTTP filter.
+ * For raw sockets, the implementation requires that the user of the socket notifies
+ * him of data transfer explicitly.
+ */
+NONSHARABLE_CLASS( CIRDataTransferTracker )
+    : public CBase, public MIRDataTransferTracker, public MHTTPFilter
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @return  The created object. Transfers ownership.
+     */
+    static CIRDataTransferTracker*  NewL( );
+
+    /**
+     * Destructor.
+     */
+    ~CIRDataTransferTracker();
+
+// from base class MIRDataTransferTracker
+
+   void SetObserver( MIRDataTransferObserver* );
+    const TIRDataTransferPckg& TransferredData() const;
+    void BindL( RHTTPSession , TIRTransferCategory );
+    void RawDataTransferredL( TInt , TInt , TIRTransferCategory );
+
+// from base class MHTTPFilter
+
+    void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRDataTransferTracker();
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL() const;
+
+    /**
+     * Calculates the header field sizes in bytes from the specified headers.
+     *
+     * @param   aTransaction        HTTP transaction for the headers.
+     * @param   aHeaders            Headers to calculate the size from.
+
+     * @return  Size of the headers in bytes.
+     */
+    TInt HeaderSize(const RHTTPTransaction aTransaction, RHTTPHeaders aHeaders );
+
+    /**
+     * Parses the header sizes (both request and response) of the supplied HTTP transaction,
+     * logging it under the specified category.
+     *
+     * @param   aTransaction        Transaction to parse the headers from.
+     * @param   aCategory           Transfer category to record the data under.
+     */
+    void ParseHeaderSizeL(const RHTTPTransaction aTransaction, TIRTransferCategory aCategory );
+
+    /**
+     * Parses the body size of the supplied HTTP transaction, logging it under the specified category.
+     *
+     * @param   aTransaction        Transaction to parse the headers from.
+     * @param   aCategory           Transfer category to record the data under.
+     */
+    void ParseBodySizeL(const RHTTPTransaction aTransaction, TIRTransferCategory aCategory );
+
+    /**
+     * Processes raw data sent and/or received via the connection.
+     *
+     * @param   aBytesSent          The number of bytes that were sent.
+     * @param   aBytesReceived      The number of bytes that were received.
+     * @param   aCategory           Transfer category to record the data under.
+     */
+    void ProcessDataL( TInt aBytesSent, TInt aBytesReceived, TIRTransferCategory aCategory );
+
+    /**
+     * Dispatches the notification of the data transfer conditionally.
+     *
+     * If the threshold between the last notification's data transfer amount and the current
+     * data transfer amount is not exceeded, then no notification is dispatched.
+     */
+    void DispatchNotificationL();
+
+private:
+
+    /**
+     * Data transfer observer.
+     * Not owned.
+     */
+    MIRDataTransferObserver* iObserver;
+
+    /**
+     * Persistent storage for the data amounts transferred.
+     */
+    MIRDataTransferTracker::TIRDataTransferPckg iPckg;
+
+    /**
+     * The amount of bytes transferred since last notification was dispatched.
+     */
+    TInt iBytesSinceLastNotification;
+
+    /**
+     * The flag to determine Byte Counter crossed first threshold
+     */
+	TBool bThresholdCrossed;
+
+    };
+
+#endif // C_CIRDATATRANSFERTRACKER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/irfilteredapreader.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2008 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:  Used to read in only access points with the desired characteristics. 
+*
+*/
+
+
+#ifndef CIRFILTEREDAPREADER_H
+#define CIRFILTEREDAPREADER_H
+
+#include <commsdattypesv1_1.h>
+
+using namespace CommsDat;
+
+/**
+ *  Reads the access points for Network Controller component.
+ * 
+ *  Returns only those entries from IAP table that are referenced from 
+ *  WAP_ACCESS_POINT table.
+ * 
+ *  In addition to that an instance of class performs filtering based on
+ *  configured criteria.   
+  *
+ */
+NONSHARABLE_CLASS( CIRFilteredApReader ): public CBase
+    {
+public:
+    // The filtering flags
+    static const TInt KIRFilterNone         = 0x0;
+    static const TInt KIRFilterWAPOnly      = 0x1;
+    static const TInt KIRFilterWAPMandatory = 0x2;
+    static const TInt KIRFilterEasyWLAN     = 0x4;
+    
+public:
+    /**
+     * Two-phased constructor.
+     * @param aFilterFlags Defines the filtering criteria applied to entries
+     * @return Instance of CIRFilteredApReader
+     */
+    static CIRFilteredApReader* NewL( TInt aFilterFlags );
+
+    /**
+     * Two-phased constructor.
+     * @param aFilterFlags Defines the filtering criteria applied to entries
+     * @return Instance of CIRFilteredApReader
+     */
+    static CIRFilteredApReader* NewLC( TInt aFilterFlags );
+
+    /**
+     * Gets the first appropriate IAP record.
+     * Initialises the required objects for iteration.
+     * 
+     * Only those records that have the desired characteristics are returned.
+     *
+     * @return The suitable record, if found. NULL, if no record was found
+     */
+    CCDIAPRecord* FirstRecordL();    
+
+    /**
+     * Gets the next appropriate IAP record.
+     * Only those records that have the desired characteristics are returned.
+     *
+     * @return The suitable record, if found. NULL, if no record was found
+     */
+    CCDIAPRecord* NextRecordL();
+
+private:
+    /**
+     * C++ Default constructor.
+     * 
+     * @param aFilterFlags Defines the filtering criteria applied to entries 
+     */
+    CIRFilteredApReader( TInt aFilterFlags );
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+    /**
+     * Destructor.
+     */
+    ~CIRFilteredApReader();
+    
+    /**
+     * Returns the current record.
+     * 
+     * @return The current record.
+     */
+    CCDWAPAccessPointRecord* CurrentRecordL() const;
+
+    /**
+     * Moves the iterator to next record in WAPAccessPoint table.
+     * 
+     * @return ETrue if there was more records, EFalse if not.
+     */
+    TBool MoveToNextRecord();
+
+    /**
+     * Loads items from WAPIPBearer and IAP tables that are
+     * referenced by the current record.
+     */
+    TBool LoadCurrentApDetailsL();
+    
+    /**
+     * Performs the filtering.
+     * 
+     * Applies the different filtering criteria according to configured
+     * policy (flags).
+     *
+     * @return ETrue if the record was let through, EFalse if the record was filtered out.
+     */
+    TBool FilterL() const;
+
+    /**
+     * Filters the access point entries that have the mandatory WAP parameters.
+     *
+     * Currently only GatewayAddress of WAPIPBearer is checked.
+     * 
+     * Examining the StartPage field of WAPAccessPoint table proved to be 
+     * too strict filter.  
+     * 
+     * @return ETrue if the record was let through, EFalse if the record was filtered out.
+     */
+    TBool FilterWAPMandatoryL() const;
+    
+    /**
+     * Filters the access point entries that use IAPService, whose type is WAPOnly.
+     * 
+     * @return ETrue if the record was let through, EFalse if the record was filtered out.
+     */
+    TBool FilterWAPOnlyL() const;
+
+    /**
+     * Filters the access point entries whose name is "EasyWlan".
+     * 
+     * This filtering should be done in more clever way.
+     * 
+     * @return ETrue if the record was let through, EFalse if the record was filtered out.
+     */
+    TBool FilterEasyWlanL() const;
+
+private: // data
+
+    /**
+     * The database accessor.
+     * Owned.
+     */
+    CMDBSession* iDbSession;
+    
+    /**
+     * All the records in WAPAccessPoint table. 
+     * Owned.
+     */
+    CMDBRecordSet<CCDWAPAccessPointRecord>* iWapTable;
+    
+    /**
+     * Index of the current record.
+     */
+    TInt iWapTableIndex;
+    
+    /**
+     * WAPIPBearer entry associated with current record.
+     * Owned.
+     */
+    CCDWAPIPBearerRecord* iWapIpBearerRecord;
+
+    /**
+     * IAP record associated with current record.
+     * Owned.
+     */
+    CCDIAPRecord* iIapRecord;
+    
+    /**
+     * Flags that define the applied filtering criteria.
+     */
+    TInt iFilterFlags;
+    };
+#endif // CIRFILTEREDAPREADER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/irnetworkcontroller.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,587 @@
+/*
+* Copyright (c) 2006-2008 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:  Controls the network interface(s) for Internet Radio.
+*
+*/
+
+
+#ifndef CIRNETWORKCONTROLLER_H
+#define CIRNETWORKCONTROLLER_H
+
+#include <badesca.h>
+#include <es_sock.h>
+#include <rhttpsession.h>
+
+//Added for ALR/SNAP
+#include <cmmanager.h>
+#include <connpref.h>
+#include <commdbconnpref.h>
+#include <comms-infras/cs_mobility_apiext.h>
+#include "iractivenetworkobserver.h"
+
+
+#include "irnetworkcontrollerobserver.h"
+#include "irdatatransfertracker.h"
+
+class CIRNetworkObserver;
+class CIRSettings;
+class MIRActiveNetworkObserver;
+
+typedef RArray<TUint32> RDestinationArray;
+
+//Added for ALR/SNAP
+enum TUserDefinedSelection
+   {
+    EUserDefinedSelectionAlwaysAsk = 0,
+    EUserDefinedSelectionDefaultConnection,
+    EUserDefinedSelectionDestination,
+    EUserDefinedSelectionConnectionMethod
+    };
+    
+    
+namespace CommsDat
+    {
+    class CMDBSession;
+    }
+
+using namespace CommsDat;
+
+/**
+ * This class provides the interface to IRNetworkController component
+ *
+ * @code
+ * // CIRNetworkController follows a singleton pattern
+ * // hence the destructor is private and to destroy it we need to use an API
+ * // For creating a network controller which has provision for network monitoring
+ * // we need to pass the reference of the observer which should derive from
+ * // MIRNetworkControllerObserver class the network even observed will be
+ * // indicated to the observer with the call back IRNetworkEvent() function
+ * CIRNetworkController* iNetworkController = CIRNetworkController::NewL(iObserver)
+ *
+ * // For creating a network controller which does not have provision for network monitoring
+ * // we use the overloaded NewL() of CIRNetworkController
+ * CIRNetworkController* iNetworkController = CIRNetworkController::NewL()
+ *
+ * // This API is used to destroy the network controller handle
+ * iNetworkController->DestroyNetworkController();
+ *
+ * // This API returns the instance of RConnection
+ * // The same RConnection object is used across the entire iRAPP components to
+ * // provide central arbiter and monitoring of Network Connection
+ * iNetworkController->GetIRConnection();
+ *
+ * // This API returns the instance of RSocketServ
+ * // The same RSocketServ object is used across the entire iRAPP components to
+ * // provide central arbiter and monitoring of Network Connection
+ * iNetworkController->GetIRSocketServer();
+ *
+ * // This API returns a pointer to the x-wap-profile string.
+ * // The ownership of the object is passed onto the caller
+ * iNetworkController->GetWapProfString();
+ *
+ * // This API returns a pointer to the UAProf string.
+ * // The ownership of the object is passed onto the caller
+ * iNetworkController->GetUAProfString();
+ *
+ * // This API returns ETrue of network connection is up and running EFalse
+ * // otherwise
+ * iNetworkController->GetNetworkStatus();
+ *
+ * // This API returns the IAP id of the connected connection
+ * // this is used by download manager for choosing the access point
+ * iNetworkController->GetIAPId();
+ *
+ * // This API returns the list of available access points
+ * iNetworkController->GetAccessPointList();
+ *
+ * // This API returns the list of bearer ids for available access points
+ * iNetworkController->GetBearerList();
+ *
+ * // This API returns the list of network ids for available access points
+ * iNetworkController->GetNetworkList();
+ *
+ * // This API returns the list of iap ids for available access points
+ * iNetworkController->GetApList();
+ *
+ * // This API is called to initiate access point selection
+ * iNetworkController->ChooseAccessPointL();
+ *
+ * // This API returns ETrue if the phone is in offline mode, EFalse
+ * // otherwise
+ * iNetworkController->IsOfflineMode();
+ *
+ * // This API returns ETrue if WLan is supported on the device, EFalse
+ * // otherwise
+ * iNetworkController->IsWlanSupported();
+ *
+ * // This API allows the caller to reset the network connection status
+ * iNetworkController->ResetConnectionStatus();
+ *
+ * // This API returns the type of connection open
+ * iNetworkController->IdentifyConnectionType();
+ *
+ * @endcode
+ *
+ */
+
+NONSHARABLE_CLASS(CIRNetworkController): public CActive, 
+										 public MIRDataTransferObserver,
+									     public MMobilityProtocolResp
+	{
+
+public:
+
+	/**
+	 *  Creates an Instance of CIRNetworkController
+	 *  @return CIRNetworkController*
+	 */
+	IMPORT_C static CIRNetworkController* OpenL(MIRNetworkController* aObserver = NULL);
+
+	/**
+	 *  Conditionally destroys the IRNetworkController object
+	 */
+	IMPORT_C void Close();
+
+	/**
+	 *  Default C++ Destructor
+	 */
+	~CIRNetworkController();
+
+	/**
+	 *  Returns the instance of RConnection
+	 *  The same RConnection object is used across the entire iRAPP components to
+	 *  provide central arbiter and monitoring of Network Connection
+	 *  @return RConnection&
+	 */
+	IMPORT_C RConnection& GetIRConnection();
+
+	/**
+	 *  Returns the instance of RSocketServ
+	 *  The same RSocketServ object is used across the entire iRAPP components to
+	 *  provide central arbiter and monitoring of Network Connection
+	 *  @return RSocketServ&
+	 */
+	IMPORT_C RSocketServ& GetIRSocketServer();
+
+	/**
+	 *  Returns a HBufC pointer to the x-wap-profile string
+	 *  Transfers the ownership of the returned HBufC8 object
+	 *  The caller must takecare of deleting the returned object
+	 *  @return HBufC8*
+	 */
+	IMPORT_C HBufC8* GetWapProfString();
+
+	/**
+	 *  Returns a HBufC pointer to the UAProf string
+	 *  Transfers the ownership of the returned HBufC8 object
+	 *  The caller must takecare of deleting the returned object
+	 *  @return HBufC8*
+	 */
+	IMPORT_C HBufC8* GetUAProfString();
+
+	/**
+	 *  Returns the variable which indicates if connection is active or not
+	 *  @return TBool iIsConnectedToNetwork
+	 */
+	IMPORT_C TBool GetNetworkStatus() const;
+
+	/**
+	 *  Gets the IAP Id of the chosen IAP
+	 *  @return TInt Error code.
+	 */
+	IMPORT_C TInt GetIAPId(TUint32& aIapId) const;
+
+	/**
+	 *  Returns the list of available access points
+	 *  @return CDesCArray* array specifying the access point names
+	 */
+	IMPORT_C const CDesCArray* GetAccessPointList() const;
+
+	/**
+	 *  Returns the list of bearer ids for available access points
+	 *  @return const RArray<TUint32> array specifying the bearer ids
+	 */
+	IMPORT_C const RArray<TUint32> GetBearerList() const;
+
+	/**
+	 *  Returns the list of network ids for available access points
+	 *  @return const RArray<TUint32> array specifying the network ids
+	 */
+	IMPORT_C const RArray<TUint32> GetNetworkList() const;
+
+	/**
+	 *  Returns the list of iap ids for available access points
+	 *  @return const RArray<TUint32> array specifying the iap ids
+	 */
+	IMPORT_C const RArray<TUint32> GetApList() const;
+
+	/**
+	 *  Configures the Access Point which is used by all the components for network connectivity
+	 */
+	IMPORT_C void ChooseAccessPointL(TBool aDefaultConnection = ETrue);
+
+	/*
+	 * cancel configuring access point
+	 */
+	IMPORT_C void CancelConnecting();
+	
+	/**
+	 *  This api is used to determine if the phone is in offline mode
+	 *  @return ETrue if the phone is in offline mode else EFalse
+	 */
+	IMPORT_C TBool IsOfflineMode();
+
+	/**
+	 *  This api is used to determine if the phone supports WLan usage
+	 *  @return ETrue if the phone supports else EFalse
+	 */
+	IMPORT_C TBool IsWlanSupported() const;
+
+	/**
+	 *  Reset the connection status to Disconnected state
+	 */
+	IMPORT_C  void ResetConnectionStatus();
+
+	/**
+	 *  Used to determine the type of connection
+	 *  @return enum describing the type of connection ( GPRS/3G/WiFi )
+	 */
+	IMPORT_C TIRConnectionType IdentifyConnectionType() const;
+
+	/**
+	 *  Binds DataTranseferTracker instance to HTTPSession (Byte Counter Impl)
+	 */
+	IMPORT_C  void InitializeHttpSessionL(const RHTTPSession& aHTTPSession, 
+						MIRDataTransferTracker::TIRTransferCategory aCategory );
+
+	/**
+	 *  Binds LogoDataTranseferTracker instance to Logo HTTPSession (Byte Counter Impl)
+	 */
+	IMPORT_C  void RegisterLogoDataTransferTrackerL( RHTTPSession& aHTTPSession );
+
+	/**
+	 *  DataTranseferTracker instance for observers and Raw sockets (Byte Counter Impl)
+	 */
+	IMPORT_C  MIRDataTransferTracker& DataTransferTracker();
+
+	/**
+	 *  LogoDataTranseferTracker instance for observers and Raw sockets (Byte Counter Impl)
+	 */
+	IMPORT_C  MIRDataTransferTracker& LogoDataTransferTracker();
+
+	/**
+	 *  Method to receive notification when logo is downloaded
+	 */
+	void HandleDataTransferEventL( const MIRDataTransferTracker::TIRDataTransferPckg& aData );
+
+	/*
+	 * Registers the observer that will be notified for 
+	 * a network connection.
+	 * Observer requires notification to reissue pending request
+	 */ 
+	IMPORT_C  void RegisterActiveNetworkObserverL(MIRActiveNetworkObserver& aActiveNetworkObserver);
+
+	/**
+	 * DeleteRoamingObserver()
+	 * Used to remove an observer for roaming events from the observer array
+	 */
+	IMPORT_C void DeleteActiveNetworkObserver(MIRActiveNetworkObserver& aActiveNetworkObserver);
+		
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	IMPORT_C  void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+	 
+	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+protected:
+
+	/**
+	 *  Derived from CActive
+	 */
+
+	/**
+	 * The function is called by the active scheduler when a request completion event occurs,
+	 */
+	virtual void RunL();
+
+	/**
+	 *  Cancels the pending requests on the CIRNetworkController Active object
+	 */
+	virtual void DoCancel();
+	
+	
+public: // From MMobilityProtocolResp		//to be changed to private after demo
+
+			//Added for ALR/SNAP
+		void PreferredCarrierAvailable( TAccessPointInfo aOldAPInfo,
+			TAccessPointInfo aNewAPInfo,
+			TBool aIsUpgrade,
+			TBool aIsSeamless );
+		void NewCarrierActive( TAccessPointInfo aNewAPInfo, TBool aIsSeamless );
+		void Error( TInt aError );	
+		
+public:
+		/**
+		 * IsHandingOverConnection()
+		 * Indicates if the Hand over of Network connection has happened
+		 */
+		IMPORT_C TBool IsHandingOverConnection();
+		
+		void ResetHandingOverConnection();
+		
+private:
+
+	/**
+	 *  Used to determine the current profile
+	 *  @return TInt describing the profile value
+	 */
+	TInt DetermineCurrentProfile() const;
+
+	/**
+	 *  Pops up the access point list.
+	 *  @return TBool ETrue feature is supported EFalse otherwise
+	 */
+	TBool CheckFeatureL(TInt aFeatureId) const;
+
+	/**
+	 *  Default C++ Constructor
+	 */
+	CIRNetworkController();
+
+	/**
+	 *  Second Phase construction.
+	 */
+	void ConstructL();
+
+	/**
+	 *  Second Phase construction.
+	 *	@param aObserver pointer to the observer class if an observer is needed
+	 */
+	void ConstructL( MIRNetworkController* aObserver );
+
+	/**
+	 *  Determines the available access points using CommsDat Api
+	 */
+	void QueryCommsForIAPL();
+
+	/**
+	 *  Queries the system and extracts the UAProf information
+	 *  Used by IRDataProvider and IRStreamSource
+	 */
+	void BuildUAProfStringL();
+
+	/**
+	 *  Retrievs the string from Central Repository for the specified key and cen rep uid
+	 *  Transfers the ownership of the returned HBufC object
+	 *  The caller must takecare of deleting the returned object*
+	 *	@param aRepositoryUid specifies the Uid of the repository to be used
+	 *	@param aKey specifies the key to be used
+	 *	@return HufC* pointer to the retrieved string
+	 */
+	HBufC* CentralRepositoryStringValueL(const TUid& aRepositoryUid,
+		TUint32 aKey ) const;
+
+	/**
+	 *  Pops up the access point list.
+	 *  @return TBool ETrue is we need to proceed with access point selection EFalse otherwise
+	 */
+	TBool DisplayAccessPointListL();
+
+	/**
+	 *  Validates the access point availablity etc.
+	 */
+	TBool ValidateAccessPointsL();
+
+	/**
+	 *  Handles the success case of Network connection in RunL
+	 */
+	void HandleRunLSuccessL();
+	
+	/**
+	 *  Handles the error case of Network connection in RunL
+	 */
+	void HandleRunLErrorL(TInt aStatusCode);
+	
+public:
+	/**
+	 * Indicates if ChooseAccessPointL is called
+	 */
+	TBool iIsConnectRequestIssued;
+
+private:
+    /**
+     * This is the physical connection we are putting up
+     */
+	RConnection* iIRNetworkConnection;
+
+	/**
+     * Actual RSocketServ instance
+     */
+   	RSocketServ iIRSocketServer;
+
+	/**
+     * Number of objects currently referring to the singleton object CIRNetworkController
+     */
+	TInt iSingletonInstances;
+
+	/**
+     * Used to access Settings object
+     */
+	CIRSettings* iIRSettings;
+
+	/**
+     * IR Network component observer
+     */
+	MIRNetworkController* iObserver;
+
+	/**
+	 * Enum declaration which indicate the network status
+	 */
+	enum TIRNetworkConnectionStatus
+		{
+		EIRNetworkConnectionActive = 1,
+		EIRNetworkConnectionInActive
+		};
+
+	/**
+	 * Variable to keep track of the RConnection connection status
+	 */
+	TIRNetworkConnectionStatus iNetworkConnectionState;
+
+	/**
+	 * Enum declaration which indicate the connection to RSocketServ status
+	 */
+	enum TIRSocketServerConnectionStatus
+		{
+		EIRSocketServerActive = 1,
+		EIRSocketServerInActive
+		};
+
+	/**
+	 * Variable to keep track of the RSocketServ connection status
+	 */
+	TIRSocketServerConnectionStatus iSocketServerConnectionState;
+
+	/**
+	 * Enum declaration to indicate the NetworkController state
+	 */
+	enum TIRNetworkControllerState
+		{
+		EInActive = 1,
+		EConnectingToNetwork
+		};
+
+	/**
+	 * Specifies the Network controller state
+	 */
+	TIRNetworkControllerState iNetworkControllerState;
+
+	/**
+	 * Indicates the current network connection status
+	 */
+	TBool iIsConnectedToNetwork;
+
+	/**
+	 * Network observer
+	 */
+	CIRNetworkObserver* iIRNetworkObserver;
+
+	/**
+	 * Pointer to UAProf string
+	 */
+	HBufC8* iIRUAProf;
+
+	/**
+	 * Pointer to x-wap-profile string
+	 */
+	HBufC8* iIRWapProf;
+
+	/**
+	 * Access point list for settings view
+	 */
+	CDesCArrayFlat* iIapList;
+
+	/**
+	 * Array of bearer ids for access points
+	 */
+	RArray<TUint32> iBearerList;
+
+	/**
+	 * Array of network ids for access points
+	 */
+	RArray<TUint32> iNetworkList;
+
+	/**
+	 * Array of iap ids for access points
+	 */
+	RArray<TUint32> iIapIdList;
+
+	/**
+	 * Indicates if WiFi is supported or not
+	 */
+	TBool iIsWlanSupported;
+
+	/**
+	 * Used to determine if connection is open or not
+	 */
+
+	TBool iConnectionPresent;
+
+	/**
+	 * Tracks data transferred over the network for the connection.
+	 * Owned.
+	 */
+
+	CIRDataTransferTracker* iDataTransferTracker;
+
+	/**
+	 * Tracks data transferred over the network for the Logo session.
+	 * Owned.
+	 */
+
+	CIRDataTransferTracker* iLogoDataTransferTracker;
+	
+	
+	//Added for ALR/SNAP
+	
+	/**
+    * Observes the preferred network within defined destination
+    */
+	CActiveCommsMobilityApiExt* iMobility;
+	
+
+	/**
+     * ETrue if the ALR handover is ongoing
+     */
+    TBool iHandingOver;
+    
+    
+    /**
+	 * Array of observers for change in roaming events
+	 */
+	RPointerArray<MIRActiveNetworkObserver> iActiveNetworkObserverArray;
+	
+	TBool iDefaultConnection;
+	};
+
+#endif //CIRNETWORKCONTROLLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/irnetworkcontrollerobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef MIRNETWORKCONTROLLEROBSERVER_H
+#define MIRNETWORKCONTROLLEROBSERVER_H
+
+#include <e32def.h>
+
+/** 
+* Identifies the type of connection 
+*/    
+enum TIRConnectionType
+	{
+	EGprs,
+	EWcdma,
+	ECdma2000,
+	EWiFi,
+	EEdge
+	};   
+
+/** 
+* Indicates the various Network events
+*/    
+enum TIRNetworkEvent
+	{
+	ENetworkConnectionConnecting,
+	ENetworkConnectionEstablished,
+	ENetworkConnectionDisconnected,
+	EDisplayNetworkMessageNoConnectivity,
+	EDisplayOfflineMode,
+    EDisplayNoAccessPointsDefined,
+    EAccessPointSelectionCancelled,
+    EConnectingCancelled
+	};   
+
+/** 
+* Observers should derive from this class and pass a pointer of this
+* type when creating an instance of CIRNetworkController if they require
+* an observer
+*/  
+class MIRNetworkController
+	{
+public:
+
+	/** 
+    * IRNetworkEventL(TIRNetworkEvent aEvent)		*  @param aEvent Indicates the type of network event that occurred
+	*/
+	virtual void IRNetworkEventL(TIRNetworkEvent aEvent) = 0;
+
+	};
+
+#endif // MIRNETWORKCONTROLLEROBSERVER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollerinc/irnetworkobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef CIRNETWORKOBSERVER_H
+#define CIRNETWORKOBSERVER_H
+
+#include <rconnmon.h>
+
+#include "irnetworkcontrollerobserver.h"
+
+class MIRNetworkController;
+class CIRNetworkController;
+
+NONSHARABLE_CLASS(CIRNetworkObserver): public CActive , 
+	public MConnectionMonitorObserver
+	{
+public: 
+
+	/**
+	 *Creates an Instance of CIRNetworkObserver
+	 *@return CIRNetworkObserver*
+	 */    
+	IMPORT_C static CIRNetworkObserver* NewL(CIRNetworkController *aNetworkController);
+
+	/** 
+	 *  Default Destructor
+	 */
+	~CIRNetworkObserver();
+
+	/** 
+	 *  Initializes the Connection monitor
+	 */    
+	void InitializeNetworkObserver();
+
+	/** 
+	 *  Set the observer used to communicate with the IRNetworkController
+	 */    
+	void SetObserver(MIRNetworkController* aObserver);
+	
+	/**
+	 * Sets network monitoring observer to decide whether network monitoring is 
+	 * required.
+	 */
+	void SetNetworkMonitoring(TBool aValue);
+
+private: 
+
+	/** 
+	 *  Default Constructor
+	 */
+	CIRNetworkObserver(CIRNetworkController *aNetworkController);
+
+	/** 
+	 *  Creates an Instance of CIRNetworkObserver
+	 *  @return CIRNetworkObserver*
+	 */    
+	static CIRNetworkObserver* NewLC(CIRNetworkController *aNetworkController);
+
+	/** 
+	 *  Second Phase construction.
+	 */
+	void ConstructL();
+
+//  Derived from CActive
+
+	/** 
+	 * Derived from CActive
+	 * The function is called by the active scheduler when a request 
+	 * completion event occurs,
+	 */
+	virtual void RunL();
+
+	/** 
+	 *  Cancels the pending requests on the CIRNetworkObserver Active object
+	 */
+	virtual void DoCancel();
+
+	/** 
+	 *  Handles a leave occurring in the request completion event handler RunL()
+	 */
+	virtual TInt RunError(int aError);
+
+	/**
+	 *	Derived from MConnectionMonitorObserver
+	 */
+
+	/** 
+	 *  Derived from MConnectionMonitorObserver
+	 *  Implements the EventL method which is called when there is a network event
+	 *  @param aConnMonEvent Indicates the type of event occurred
+	 */     
+	void  EventL(const CConnMonEventBase &aConnMonEvent);
+
+	/** 
+	 *  Identifies the type of connection we have used to get connected to network
+	 */
+	void IdentifyConnection();
+
+	/**
+	 * Utility function used just to keep RunL() small
+	 */
+	void IRNetworkObserverRunL();
+
+    /**
+     * Extracts the IAP Id of the access point
+     */
+	void GetAPId();
+
+
+public: // Public Data Members
+
+	/**
+	 * Stores the type of connection that is currently open
+	 */
+	TIRConnectionType iIRConnectionType;
+
+	/**
+	 * Stores the IAP ID of the connection
+	 */
+	TUint iIAPId;
+
+    TBool iIsIAPIdAvailable;
+
+private:
+
+	/** 
+	 *IR Connection monitor states ( indicates the different 
+	 *possible states the state machine can be in )
+	 */
+	enum TIRObserverState
+	{
+	EInitializing,
+	EGettingConnectionInfo,
+	EGettingIAPId
+	};
+
+	/**
+	 * Used to monitor the network
+	 */
+	RConnectionMonitor iIRConnectionMonitor;
+
+	/**
+	 * Stores the currently open connection Id
+	 */
+	TUint iConnectionId;
+
+	/**
+	 * Stores the currently open Sub connection Id
+	 */
+	TUint iSubConnectionCount;
+
+	/**
+	 * Stores the count of currently open sub connections
+	 */
+	TUint iConnectionCount;
+
+	/**
+	 * Stores the state of the observer
+	 */
+	TIRObserverState iObserverState;
+
+	/**
+	 * Stores the type of connection open
+	 */
+	TInt iConnectionType;
+
+	/**
+	 * Pointer to the network controller object
+	 */
+	MIRNetworkController* iMonitorObserver;
+
+	/**
+	 * Boolean indicates if monitoring option is requested by the creator
+	 * of the CIRNetworkController instance
+	 */
+	TBool iMonitoringRequired;
+
+	CIRNetworkController *iNetworkController;
+	};
+
+#endif //CIRNETWORKOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollersrc/irdatatransfertracker.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2008-2008 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:  Tracks data transmitted through a network connection.
+*
+*/
+
+#include <httpstringconstants.h>
+#include <mhttpdatasupplier.h>
+#include <rhttpheaders.h>
+#include "irdebug.h"
+
+#include "irdatatransfertracker.h"
+
+// The threshold in bytes after which notifications are sent to observers.
+const TInt KIRDataTransferTrackerThreshold = 104858;	// 0.1  MB = 104857.6 bytes (rounded)
+const TInt KIRDataTransferTrackerMiniThreshold = 1049;	// 0.01 MB = 1048.57 bytes (rounded)
+
+// The overhead in bytes per one HTTP header.
+const TInt KVRBytesPerHeaderOverhead = 2; // "\r\n"
+// The overhead in bytes per one header field in a request.
+const TInt KVRBytesPerHeaderFieldOverhead = 4; // ": \r\n"
+// The overhead in bytes per one header sent.
+const TInt KVRBytesPerHeaderSentOverhead = 4; // "  \r\n"
+// The overhead in bytes per one header received.
+const TInt KVRBytesPerHeaderReceivedOverhead = 3; // " \r\n"
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRDataTransferTracker* CIRDataTransferTracker::NewL()
+    {
+	IRLOG_DEBUG( "CIRDataTransferTracker::NewL - Entering");
+    CIRDataTransferTracker* self = new ( ELeave ) CIRDataTransferTracker;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRDataTransferTracker::NewL - Exiting");
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRDataTransferTracker::CIRDataTransferTracker()
+    {
+	IRLOG_DEBUG( "CIRDataTransferTracker::CIRDataTransferTracker - Entering");
+	bThresholdCrossed = EFalse;
+	IRLOG_DEBUG( "CIRDataTransferTracker::CIRDataTransferTracker - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::ConstructL() const
+    {
+    IRLOG_DEBUG( "CIRDataTransferTracker::ConstructL");
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRDataTransferTracker::~CIRDataTransferTracker()
+    {
+    	IRLOG_DEBUG( "CIRDataTransferTracker::~CIRDataTransferTracker - Entering");
+    	iObserver = NULL;
+        IRLOG_DEBUG( "CIRDataTransferTracker::~CIRDataTransferTracker - Exiting");
+
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRDataTransferTracker.
+// Sets the observer.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::SetObserver( MIRDataTransferObserver* aObserver )
+    {
+    IRLOG_DEBUG( "CIRDataTransferTracker::SetObserver - Entering");
+    iObserver = aObserver;
+    IRLOG_DEBUG( "CIRDataTransferTracker::SetObserver - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRDataTransferTracker.
+// Returns the current transferred data amounts.
+// ---------------------------------------------------------------------------
+//
+const MIRDataTransferTracker::TIRDataTransferPckg& CIRDataTransferTracker::TransferredData() const
+    {
+    IRLOG_DEBUG( "CIRDataTransferTracker::TIRDataTransferPckg");
+    return iPckg;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRDataTransferTracker.
+// Binds this to track the supplied HTTP session.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::BindL( RHTTPSession aSession, TIRTransferCategory aCategory )
+    {
+    IRLOG_DEBUG2( "CIRDataTransferTracker::BindL() - aCategory = %d", static_cast<TInt>( aCategory ) );
+
+    aSession.ConnectionInfo().SetPropertyL(
+        aSession.StringPool().StringF( HTTP::ESessionId, aSession.GetTable() ), 
+        	THTTPHdrVal( aCategory ) );
+    aSession.FilterCollection().AddFilterL(
+        *this, THTTPEvent::EAnyTransactionEvent, MHTTPFilter::EClientFilters, RStringF() );
+    IRLOG_DEBUG( "CIRDataTransferTracker::BindL - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRDataTransferTracker.
+// Handles raw data transfers.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::RawDataTransferredL( TInt aBytesSent, TInt aBytesReceived, 
+												  TIRTransferCategory aCategory )
+    {
+    IRLOG_DEBUG( "CIRDataTransferTracker::RawDataTransferredL - Entering");
+    ProcessDataL( aBytesSent, aBytesReceived, aCategory );
+    IRLOG_DEBUG( "CIRDataTransferTracker::RawDataTransferredL - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// From class MHTTPFilter.
+// Invoked when HTTP transactions are sent or received.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::MHFRunL(const RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
+    {
+    IRLOG_DEBUG2( "CIRDataTransferTracker::MHFRunL() - aEvent.iStatus = %d", aEvent.iStatus );
+
+    RHTTPSession session = aTransaction.Session();
+
+    THTTPHdrVal categoryVal;
+
+    if( session.ConnectionInfo().Property(
+        session.StringPool().StringF( HTTP::ESessionId, session.GetTable() ), categoryVal ) )
+        {
+        TIRTransferCategory category = static_cast<TIRTransferCategory>( categoryVal.Int() );
+
+        switch ( aEvent.iStatus )
+            {
+            case THTTPEvent::EGotResponseHeaders:
+                ParseHeaderSizeL( aTransaction, category );
+                break;
+            case THTTPEvent::EGotResponseBodyData:
+                ParseBodySizeL( aTransaction, category );
+                break;
+            default:
+                break;
+            }
+        }
+    IRLOG_DEBUG( "CIRDataTransferTracker::MHFRunL - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// Calculates the header field sizes in bytes from the specified headers.
+// ---------------------------------------------------------------------------
+//
+TInt CIRDataTransferTracker::HeaderSize( const RHTTPTransaction aTransaction, 
+										 RHTTPHeaders aHeaders )
+    {
+    IRLOG_DEBUG( "CIRDataTransferTracker::HeaderSize - Entering");
+    TInt size = KVRBytesPerHeaderOverhead;
+
+    RStringPool stringPool = aTransaction.Session().StringPool();
+
+    THTTPHdrFieldIter it = aHeaders.Fields();
+    it.First();
+
+    while ( !it.AtEnd() )
+        {
+        RStringF key = stringPool.StringF( it() );
+
+        TPtrC8 ptr;
+        aHeaders.GetRawField( key, ptr );
+
+        size += key.DesC().Size();
+        size += ptr.Size();
+        size += KVRBytesPerHeaderFieldOverhead;
+
+        ++it;
+        }
+    IRLOG_DEBUG( "CIRDataTransferTracker::HeaderSize - Exiting");
+    return size;
+
+    }
+
+// ---------------------------------------------------------------------------
+// Parses the header sizes (both request and response) of the supplied HTTP
+// transaction, logging it under the specified category.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::ParseHeaderSizeL( const RHTTPTransaction aTransaction, 
+								   			   TIRTransferCategory aCategory )
+    {
+    IRLOG_DEBUG2( "CIRDataTransferTracker::ParseHeaderSizeL() - aCategory = %d", static_cast<TInt>( aCategory ) );
+
+    RHTTPSession session = aTransaction.Session();
+
+    // Parse the request size first.
+
+    RHTTPRequest request = aTransaction.Request();
+    TInt sent = HeaderSize( aTransaction, request.GetHeaderCollection() );
+
+    // Now that the actual header fields are parsed we have to manually extract the original request.
+    // The format of the request is "%S %S %S\r\n", where the first string is the method (GET or POST),
+    // the second is the full URI of the request, and the third the HTTP protocol version in use.
+
+    RStringF http = session.StringPool().StringF( HTTP::EHttp11, session.GetTable() );
+
+    sent += request.Method().DesC().Size();
+    sent += request.URI().UriDes().Size();
+    sent += http.DesC().Size();
+    sent += KVRBytesPerHeaderSentOverhead;
+
+    // Proceed to parse the response size.
+
+    RHTTPResponse response = aTransaction.Response();
+    TInt received = HeaderSize( aTransaction, response.GetHeaderCollection() );
+
+    // Now that the actual header fields of the response are parsed, we have to manually extract the
+    // original response. The format of the response is "%S %d %S\r\n", where the first string is the HTTP
+    // protocol version, the first integer is the HTTP status code, and the second string is the
+    // status text.
+
+    TBuf8<KDefaultRealWidth> responseCode;
+    responseCode.AppendNum( static_cast<TInt64>( response.StatusCode() ) );
+
+    received += session.StringPool().StringF( HTTP::EHttp11, session.GetTable() ).DesC().Size();
+    received += responseCode.Size(); // Contains the byte for the trailing space as is, so need not add it as overhead below.
+    received += response.StatusText().DesC().Size();
+    received += KVRBytesPerHeaderReceivedOverhead;
+
+    ProcessDataL( sent, received, aCategory );
+    IRLOG_DEBUG( "CIRDataTransferTracker::ParseHeaderSizeL - Exiting");
+
+    }
+
+// ---------------------------------------------------------------------------
+// Parses the body size of the supplied HTTP transaction, logging it under the specified category.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::ParseBodySizeL(const RHTTPTransaction aTransaction, 
+											TIRTransferCategory aCategory )
+    {
+    IRLOG_DEBUG2( "CIRDataTransferTracker::ParseBodySizeL() - aCategory = %d", static_cast<TInt>(aCategory) );
+
+    ASSERT( aTransaction.Response().HasBody() );
+
+    TPtrC8 ptr;
+    aTransaction.Response().Body()->GetNextDataPart( ptr );
+
+    ProcessDataL( 0, ptr.Size(), aCategory );
+    IRLOG_DEBUG( "CIRDataTransferTracker::ParseBodySizeL - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// Processes raw data sent and/or received via the connection.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::ProcessDataL( TInt aBytesSent, TInt aBytesReceived, 
+										   TIRTransferCategory aCategory )
+    {
+    IRLOG_DEBUG4( "CIRDataTransferTracker::ProcessDataL() - aBytesSent = %d, aBytesReceived = %d, aCategory = %d",
+        aBytesSent, aBytesReceived, static_cast<TInt>(aCategory) );
+
+    switch ( aCategory )
+        {
+        case MIRDataTransferTracker::EIRTransferCategoryIsds:
+            iPckg.iBytesSentIsds += aBytesSent;
+            iPckg.iBytesReceivedIsds += aBytesReceived;
+            break;
+        case MIRDataTransferTracker::EIRTransferCategoryAudio:
+            iPckg.iBytesSentAudio += aBytesSent;
+            iPckg.iBytesReceivedAudio += aBytesReceived;
+            break;
+        default:
+            iPckg.iBytesSentUnknown += aBytesSent;
+            iPckg.iBytesReceivedUnknown += aBytesReceived;
+            break;
+        }
+
+    iPckg.iBytesSentTotal += aBytesSent;
+    iPckg.iBytesReceivedTotal += aBytesReceived;
+
+    iBytesSinceLastNotification += aBytesSent + aBytesReceived;
+
+    DispatchNotificationL();
+    IRLOG_DEBUG( "CIRDataTransferTracker::ProcessDataL() - Exiting");
+    }
+
+// ---------------------------------------------------------------------------
+// Dispatches the notification of the data transfer conditionally.
+// ---------------------------------------------------------------------------
+//
+void CIRDataTransferTracker::DispatchNotificationL()
+    {
+    IRLOG_DEBUG2( "CIRDataTransferTracker::DispatchNotificationL() - iBytesSinceLastNotif = %d",
+        iBytesSinceLastNotification );
+
+	// Set flag when Byte Counter crosses first threshold 0.1 MB
+	if( bThresholdCrossed == EFalse && 
+		(iPckg.iBytesSentTotal+iPckg.iBytesReceivedTotal) >= KIRDataTransferTrackerThreshold )
+		bThresholdCrossed = ETrue;
+
+	// Smooth updates to each 0.01 MB
+	if( /*bThresholdCrossed == EFalse &&*/ iBytesSinceLastNotification >= KIRDataTransferTrackerMiniThreshold)
+        {
+        if ( iObserver )
+            {
+            iObserver->HandleDataTransferEventL( iPckg );
+            }
+        iBytesSinceLastNotification = 0;
+        }
+
+
+	// Streaming updates to each 0.1 MB afterwards
+    else if ( iBytesSinceLastNotification >= KIRDataTransferTrackerThreshold )
+        {
+        if ( iObserver )
+            {
+            iObserver->HandleDataTransferEventL( iPckg );
+            }
+        iBytesSinceLastNotification = 0;
+        }
+    IRLOG_DEBUG( "CIRDataTransferTracker::DispatchNotificationL() - Exiting");
+
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollersrc/irfilteredapreader.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 2008 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:  Used to read in only access points with the desired characteristics.
+*
+*/
+
+
+#include <commdb.h>
+#include <e32cmn.h>
+
+#include "irdebug.h"
+#include "irfilteredapreader.h"
+
+_LIT( KDynIpAddress, "0.0.0.0" );
+_LIT( KEasyWLAN, "Easy WLAN" );
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::NewL
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader* CIRFilteredApReader::NewL( TInt aFilterFlags )
+    {
+    IRLOG_DEBUG2( "CIRFilteredApReader::NewL - Filter flags = %d", aFilterFlags );
+    CIRFilteredApReader* self = CIRFilteredApReader::NewLC( aFilterFlags );
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRFilteredApReader::NewL - Exiting." );    
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader* CIRFilteredApReader::NewLC( TInt aFilterFlags )
+    {
+    IRLOG_DEBUG2( "CIRFilteredApReader::NewLC - Filter flags = %d", aFilterFlags );
+    CIRFilteredApReader* self = new( ELeave ) CIRFilteredApReader( aFilterFlags );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRFilteredApReader::NewL - Exiting." );    
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FirstRecordL
+// ---------------------------------------------------------------------------
+//
+CCDIAPRecord* CIRFilteredApReader::FirstRecordL()
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::FirstRecordL - Entering" );    
+    CCDIAPRecord* record( NULL );
+    iWapTableIndex = 0;
+    if ( iWapTable->iRecords.Count() > 0 )
+        {
+        TBool loaded( EFalse );
+        TRAPD( err, loaded = LoadCurrentApDetailsL() ); // may leave because of access rights etc.
+        if ( err == KErrNone && loaded && FilterL())
+            {
+            record = static_cast<CCDIAPRecord*>( CCDRecordBase::CreateCopyRecordL( *iIapRecord ) );
+            record->SetRecordId( iIapRecord->RecordId() );
+            IRLOG_INFO2( "CIRFilteredApReader::FirstRecordL - %S accepted.", &record->iRecordName.GetL() );
+            }
+        else if ( err != KErrNone || !loaded )
+            {
+            IRLOG_ERROR3( "CIRFilteredApReader::FirstRecordL - Loading AP details failed (err=%d, loaded=%d).",
+                          err, loaded );            
+            record = NextRecordL();
+            }
+        else
+            {
+            IRLOG_INFO2( "CIRFilteredApReader::FirstRecordL - %S filtered out.", &iIapRecord->iRecordName.GetL() );
+            record = NextRecordL();            
+            }
+        }        
+    IRLOG_DEBUG( "CIRFilteredApReader::FirstRecordL - Exiting." );    
+    return record;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::NextRecordL
+// ---------------------------------------------------------------------------
+//
+CCDIAPRecord* CIRFilteredApReader::NextRecordL()
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::NextRecordL - Entering");    
+    CCDIAPRecord* record( NULL );
+    
+    while ( !record && MoveToNextRecord() )
+        {
+        TBool loaded( EFalse );
+        TRAPD( err, loaded = LoadCurrentApDetailsL() ); // may leave because of access rights etc.
+        if ( err == KErrNone && loaded && FilterL())
+            {
+            record = static_cast<CCDIAPRecord*>( CCDRecordBase::CreateCopyRecordL( *iIapRecord ) );
+            record->SetRecordId( iIapRecord->RecordId() );            
+            IRLOG_INFO2( "CIRFilteredApReader::FirstRecordL - %S accepted.", &record->iRecordName.GetL() );            
+            }
+        else if ( err != KErrNone || !loaded )
+            {
+            IRLOG_ERROR3( "CIRFilteredApReader::NextRecordL - Loading AP details failed (err=%d, loaded=%d).",
+                          err, loaded );            
+            }
+        else
+            {
+            IRLOG_INFO2( "CIRFilteredApReader::NextRecordL - %S filtered out.", &iIapRecord->iRecordName.GetL() );
+            }
+        }
+    IRLOG_DEBUG( "CIRFilteredApReader::NextRecordL - Exiting." );    
+    return record;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::CIRFilteredApReader
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader::CIRFilteredApReader( TInt aFilterFlags ) 
+    : iFilterFlags( aFilterFlags )  
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::CIRFilteredApReader" );                
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRFilteredApReader::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::ConstructL - Entering" );                
+    iDbSession = CMDBSession::NewL(CMDBSession::LatestVersion());
+    
+    iWapTable = new (ELeave) CMDBRecordSet<CCDWAPAccessPointRecord>( KCDTIdWAPAccessPointRecord );
+    iWapTable->LoadL( *iDbSession );
+    IRLOG_DEBUG( "CIRFilteredApReader::ConstructL - Exiting." );    
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::~CIRFilteredApReader
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader::~CIRFilteredApReader()
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::~CIRFilteredApReader - Entering" );    
+    delete iDbSession;
+    delete iWapTable;
+    delete iWapIpBearerRecord;
+    delete iIapRecord;
+    IRLOG_DEBUG( "CIRFilteredApReader::~CIRFilteredApReader - Exiting." );    
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::CurrentRecordL
+// ---------------------------------------------------------------------------
+//
+CCDWAPAccessPointRecord* CIRFilteredApReader::CurrentRecordL() const
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::CurrentRecordL - Entering" );    
+    if ( iWapTableIndex >= iWapTable->iRecords.Count() )
+        {
+        IRLOG_FATAL( "CIRFilteredApReader::CurrentRecordL - WAP table overflow!" );
+        User::Leave( KErrCorrupt );
+        }
+    IRLOG_DEBUG( "CIRFilteredApReader::CurrentRecordL - Exiting" );    
+    return static_cast<CCDWAPAccessPointRecord*>( iWapTable->iRecords[iWapTableIndex] );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::MoveToNextRecord
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::MoveToNextRecord()
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::MoveToNextRecord - Entering" );    
+    TBool retMe(EFalse);
+    if ( ++iWapTableIndex < iWapTable->iRecords.Count() )
+        {
+        IRLOG_INFO2( "CIRFilteredApReader::MoveToNextRecord - Current record %d", iWapTableIndex );        
+        retMe = ETrue;
+        }
+    else
+        {
+        IRLOG_INFO( "CIRFilteredApReader::MoveToNextRecord - No more records" );        
+        }
+    IRLOG_DEBUG( "CIRFilteredApReader::MoveToNextRecord - Exiting" );    
+    return retMe;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::LoadCurrentApDetailsL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::LoadCurrentApDetailsL()
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::LoadCurrentApDetailsL - Entering" );    
+    delete iWapIpBearerRecord;
+    iWapIpBearerRecord = NULL;
+    
+    delete iIapRecord;
+    iIapRecord = NULL;
+    
+    // Load record from WAPIPBearer
+    iWapIpBearerRecord = static_cast<CCDWAPIPBearerRecord*>( 
+    		CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
+
+    iWapIpBearerRecord->iWAPAccessPointId.SetL( CurrentRecordL()->RecordId() );
+    TBool res = iWapIpBearerRecord->FindL( *iDbSession );
+    
+    if ( res )
+        {
+        iIapRecord = static_cast<CCDIAPRecord*>(
+        		 CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
+        iIapRecord->SetRecordId( iWapIpBearerRecord->iWAPIAP );
+        iIapRecord->LoadL( *iDbSession );
+        }
+    IRLOG_DEBUG2( "CIRFilteredApReader::LoadCurrentApDetailsL - returning %d", res );    
+    return res;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterL() const
+    {
+    IRLOG_DEBUG2( "CIRFilteredApReader::FilterL - Service type %S", &iIapRecord->iServiceType.GetL() );    
+    TBool retMe( ETrue );
+    
+    // The WAP check needs to be done only for CSD, GPRS, CDMA and LAN (because of Easy WLAN)
+    // APs. 
+    if ( iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameDialOutISP ) ) == 0 ||
+         iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameOutgoingWCDMA ) ) == 0 ||
+//         iIapRecord->iServiceType.GetL().Compare( 
+//         					TPtrC( KCDTypeNameCDMA2000PacketService ) ) == 0 ||
+         iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameLANService) ) == 0 )
+        {
+        if ( iFilterFlags & KIRFilterWAPMandatory )
+            {
+            retMe = FilterWAPMandatoryL();
+            }
+        if ( retMe && iFilterFlags & KIRFilterWAPOnly )
+            {
+            retMe = FilterWAPOnlyL();
+            }
+        if ( retMe && iFilterFlags & KIRFilterEasyWLAN )
+            {
+            retMe = FilterEasyWlanL();            
+            }
+        }
+    IRLOG_DEBUG2( "CIRFilteredApReader::FilterL - Returning %d", retMe );    
+    return retMe;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterWAPMandatoryL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterWAPMandatoryL() const
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::FilterWAPMandatoryL - Entering" );    
+    TBool retMe( EFalse );
+    
+    // First check the WAP_GATEWAY_ADDRESS of WAP_IP_BEARER table.
+    if ( iWapIpBearerRecord->iWAPGatewayAddress.IsNull() || 
+         iWapIpBearerRecord->iWAPGatewayAddress.GetL().Length() == 0 ||
+         iWapIpBearerRecord->iWAPGatewayAddress.GetL().Compare( KDynIpAddress ) == 0 )
+        {
+        retMe = ETrue;
+        }
+    IRLOG_INFO3( "CIRFilteredApReader::FilterWAPMandatoryL - Returning %d for %S", retMe, &iIapRecord->iRecordName.GetL() );
+    return retMe;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterWAPOnlyL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterWAPOnlyL() const
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::FilterWAPOnlyL - Entering" );    
+    TBool retMe( EFalse );
+
+    IRLOG_DEBUG2( "CIRFilteredApReader::FilterWAPOnlyL - Service type %S", &iIapRecord->iServiceType.GetL() );
+    if ( iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameDialOutISP ) ) == 0 )
+        {
+        CCDDialOutISPRecord* dialOutRecord = static_cast<CCDDialOutISPRecord*>( 
+        			CCDRecordBase::RecordFactoryL( KCDTIdDialOutISPRecord ) );
+        CleanupStack::PushL( dialOutRecord );
+        dialOutRecord->SetRecordId( iIapRecord->iService );
+        dialOutRecord->LoadL( *iDbSession );
+        if ( dialOutRecord->iType != EIspTypeWAPOnly )
+            {
+            retMe = ETrue;
+            }
+        CleanupStack::PopAndDestroy( dialOutRecord );
+        }
+    else if ( iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameOutgoingWCDMA ) ) == 0 )
+        {
+        CCDWCDMAPacketServiceRecord* gprsRecord = static_cast<CCDWCDMAPacketServiceRecord*>( 
+        		CCDRecordBase::RecordFactoryL( KCDTIdOutgoingGprsRecord ) );
+        CleanupStack::PushL( gprsRecord );
+        gprsRecord->SetRecordId( iIapRecord->iService );
+        gprsRecord->LoadL( *iDbSession );
+        if ( gprsRecord->iGPRSAPType != EIspTypeWAPOnly )
+            {
+            retMe = ETrue;
+            }
+        CleanupStack::PopAndDestroy( gprsRecord );
+        }
+//    else if ( iIapRecord->iServiceType.GetL().Compare( 
+//    					TPtrC( KCDTypeNameCDMA2000PacketService ) ) == 0 )
+//        {
+//        CCDCDMA2000PacketServiceRecord* cdmaRecord = static_cast<CCDCDMA2000PacketServiceRecord*>(
+//        	 CCDRecordBase::RecordFactoryL( KCDTIdCDMA2000PacketServiceRecord ) );
+//        CleanupStack::PushL( cdmaRecord );
+//        cdmaRecord->SetRecordId( iIapRecord->iService );
+//        cdmaRecord->LoadL( *iDbSession );
+//        if ( cdmaRecord->iApType != EIspTypeWAPOnly )
+//            {
+//            retMe = ETrue;
+//            }
+//        CleanupStack::PopAndDestroy( cdmaRecord );
+//        }
+    else
+        {
+        retMe = ETrue;
+        }
+    
+    IRLOG_INFO3( "CIRFilteredApReader::FilterWAPOnlyL - Returning %d for %S", retMe, &iIapRecord->iRecordName.GetL() );    
+    return retMe; 
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterEasyWlanL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterEasyWlanL() const
+    {
+    IRLOG_DEBUG( "CIRFilteredApReader::FilterEasyWlanL - Entering" );    
+    TBool retMe( EFalse );
+    if ( iIapRecord->iRecordName.GetL().Compare( KEasyWLAN ) != 0 )
+        {
+        retMe = ETrue;
+        }
+    IRLOG_INFO3( "CIRFilteredApReader::FilterEasyWlanL - Returning %d for %S", retMe, &iIapRecord->iRecordName.GetL() );    
+    return retMe;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollersrc/irnetworkcontroller.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1189 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <centralrepository.h>
+#include <commsdattypesv1_1.h>
+#include <commdb.h>
+#include <commdbconnpref.h>
+#include <featdiscovery.h>
+#include <features.hrh>
+#include <ProfileEngineSDKCRKeys.h>
+#include <WebUtilsInternalCRKeys.h>
+#include <httpstringconstants.h>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+
+#include "irdebug.h"
+#include "irfilteredapreader.h"
+#include "irnetworkcontroller.h"
+#include "irnetworkobserver.h"
+#include "irsettings.h"
+
+#include "iractivenetworkobserver.h"
+
+//for ALR/SNAP
+#include <cmmanager.h>
+#include <cmdestination.h>
+
+
+const TInt KMaxIRUAProfLength = 250; // Max length of the UAProf string
+const TInt KIRDefaultUAProfBufferSize = 0x80;
+const TUint KIRESockMessageSlots = 16;
+const TUint32 KIRUniqueWlanId = 0x2000883F; // Just to make it unique
+const TInt KArraySize = 5;
+const TInt KWlanStringMaxLength = 9;
+const TInt KTwo = 2;
+
+
+// To Format the UAProf string
+_LIT(KIRUAProfSpace," ");
+
+// WLan (generic) name string
+_LIT(KIRWLanName,"Easy WLAN");
+
+// ---------------------------------------------------------------------------
+//  Creates an Instance of CIRNetworkController
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRNetworkController* CIRNetworkController::OpenL(MIRNetworkController* aObserver)
+{
+    IRLOG_DEBUG( "CIRNetworkController::OpenL - Entering" );
+    CIRNetworkController* networkController = reinterpret_cast<CIRNetworkController*>(Dll::Tls());
+
+    if (!networkController)
+    {
+        networkController = new (ELeave) CIRNetworkController;
+        CleanupClosePushL(*networkController);
+        networkController->iSingletonInstances = 1;
+        networkController->ConstructL(aObserver);
+        User::LeaveIfError(Dll::SetTls(networkController));
+        networkController->iSingletonInstances = 0;
+        CleanupStack::Pop(networkController);
+	}
+    networkController->iSingletonInstances++;
+    IRLOG_DEBUG( "CIRNetworkController::OpenL - Exiting." );
+    return networkController;
+}
+
+// ---------------------------------------------------------------------------
+// Conditionally destroys the IRNetworkController object
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRNetworkController::Close()
+{
+    IRLOG_DEBUG2( "CIRNetworkController::Close - singleton instances=%d", iSingletonInstances );
+    iSingletonInstances--;
+    
+    if( iSingletonInstances == 0 )
+    {
+        delete this;
+    }
+    IRLOG_DEBUG( "CIRNetworkController::Close - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::GetIRConnection
+//  Returns the instance of RConnection
+//  The same RConnection object is used across the entire iRAPP components to
+//  provide central arbiter and monitoring of Network Connection
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RConnection& CIRNetworkController::GetIRConnection()
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetIRConnection - Entering" );
+    // If the RConnection is open return the reference
+    switch(iNetworkConnectionState)
+    {
+    case EIRNetworkConnectionActive:
+    {
+        // Connection is active and ready to use return the reference
+        return (*iIRNetworkConnection);
+    }
+	
+    case EIRNetworkConnectionInActive:
+    {
+        // Connection is not active and application cannot continue hence panic
+        _LIT(KComponentName,"NetworkController");
+        User::Panic(KComponentName,KErrCouldNotConnect);
+    }
+    break;
+	
+    default:
+    {
+        // no implementation
+    }
+    break;
+    }
+	
+    // Inserted to remove the compiler warning
+    IRLOG_DEBUG( "CIRNetworkController::GetIRConnection - Exiting." );
+    return (*iIRNetworkConnection);
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::GetIRSocketServer
+//  Returns the instance of RSocketServ
+//  The same RSocketServ object is used across the entire iRAPP components to
+//  provide central arbiter and monitoring of Network Connection
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RSocketServ& CIRNetworkController::GetIRSocketServer()
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetIRSocketServer - Entering" );
+    switch(iSocketServerConnectionState)
+    {
+    case EIRSocketServerActive:
+    {
+        // Connection to Socket Server is active hence return the reference
+        return iIRSocketServer;
+    }
+	
+    case EIRSocketServerInActive:
+    {
+        // Connection to Socket Server not open hence open and return the reference
+        // Connection is not active and application cannot continue hence panic
+        _LIT(KComponentName,"NetworkController");
+        User::Panic(KComponentName,KErrCouldNotConnect);
+    }
+    break;
+	
+    default:
+    {
+        // no implemenatation
+    }
+    break;
+	}
+    
+    // Inserted to remove the compiler warning
+    IRLOG_DEBUG( "CIRNetworkController::GetIRSocketServer - Exiting." );
+    return iIRSocketServer;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::GetWapProfString
+//  Returns a HBufC pointer to the x-wap-profile string
+//  Transfers the ownership of the returned HBufC8 object
+//  The caller must takecare of deleting the returned object
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* CIRNetworkController::GetWapProfString()
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetWapProfString" );
+    return iIRWapProf;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::GetUAProfString
+//  Returns a HBufC pointer to the UAProf string
+//  Transfers the ownership of the returned HBufC8 object
+//  The caller must takecare of deleting the returned object
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* CIRNetworkController::GetUAProfString()
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetUAProfString" );
+    return iIRUAProf;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::GetNetworkStatus
+//  Returns the variable which indicates if connection is active or not
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRNetworkController::GetNetworkStatus() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetNetworkStatus" );
+    return iIsConnectedToNetwork;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::GetIAPId
+// Gets the IAP Id of the chosen IAP
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRNetworkController::GetIAPId(TUint32& aIapId) const
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetIAPId - Entering" );
+    TInt retVal(KErrNone);
+    if(iIsConnectedToNetwork)
+    {
+        if ( iIRNetworkObserver->iIsIAPIdAvailable )
+        {
+            aIapId = iIRNetworkObserver->iIAPId;
+        }
+    }
+    else
+    {
+        retVal = KErrNotFound;
+    }
+    IRLOG_DEBUG( "CIRNetworkController::GetIAPId - Exiting." );
+    return retVal;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::GetAccessPointList
+// Reset the connection status to Disconnected statet
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const CDesCArray* CIRNetworkController::GetAccessPointList() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetAccessPointList" );
+    return iIapList;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::GetBearerList
+// Reset the connection status to Disconnected statet
+//
+EXPORT_C const RArray<TUint32> CIRNetworkController::GetBearerList() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetBearerList" );
+    return iBearerList;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::GetNetworkList
+// Reset the connection status to Disconnected statet
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const RArray<TUint32> CIRNetworkController::GetNetworkList() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetNetworkList" );
+    return iNetworkList;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::GetApList
+// Reset the connection status to Disconnected statet
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const RArray<TUint32> CIRNetworkController::GetApList() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::GetApList" );
+    return iIapIdList;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::ChooseAccessPointL
+//  Configures the Access Point which is used by all the components for network
+//  connectivity
+// ---------------------------------------------------------------------------
+//
+
+
+EXPORT_C void CIRNetworkController::ChooseAccessPointL(TBool aDefaultConnection)
+{
+    IRLOG_DEBUG( "CIRNetworkController::ChooseAccessPointL - Entering" );
+    if (iHandingOver)
+    {
+        if (iObserver)
+        {
+            iObserver->IRNetworkEventL(ENetworkConnectionConnecting);
+        }
+        IRLOG_DEBUG("CIRNetworkController::ChooseAccessPointL, ALR is handing over, Exiting");
+        return;
+    }
+    
+    iIRNetworkObserver->SetNetworkMonitoring(ETrue);
+    iDefaultConnection = aDefaultConnection;
+	
+    // Always validate the Access Points status
+    if ( ValidateAccessPointsL() )
+    { 
+        // Connect to the Symbian Socket Server
+        iIRNetworkConnection->Close();
+        iIRSocketServer.Close();
+        TInt ReturnErrorCode = iIRSocketServer.Connect( KIRESockMessageSlots );
+        
+        if(ReturnErrorCode != KErrNone )
+        {
+            // Error in opening the connection to SocketServer
+            iSocketServerConnectionState = EIRSocketServerInActive;
+            IRLOG_DEBUG( "CIRNetworkController::ChooseAccessPointL - Exiting (1)." );
+            return ;
+        }
+		
+        // Connection to RSocketServ is sucessful
+        iSocketServerConnectionState = EIRSocketServerActive;
+        
+        // Open the RConnection over the iIRSocketServer
+        ReturnErrorCode = iIRNetworkConnection->Open(iIRSocketServer);
+
+        if( ReturnErrorCode != KErrNone )
+        {
+            // Error in opening the connection
+            iNetworkConnectionState = EIRNetworkConnectionInActive;
+            IRLOG_DEBUG( "CIRNetworkController::ChooseAccessPointL - Exiting (2)." );
+            return ;
+        }
+        
+        //Added for ALR/SNAP
+        if(!IsActive())
+        {
+            if (iDefaultConnection)
+            {
+                iIRNetworkConnection->Start(iStatus);
+            }
+            else
+            {
+                TCommDbConnPref connPref;
+                connPref.SetDialogPreference(ECommDbDialogPrefPrompt);
+                iIRNetworkConnection->Start(connPref, iStatus) ;
+            }
+            
+            // Set the NetworkController state
+            iNetworkControllerState = EConnectingToNetwork;
+
+            SetActive();
+            iIsConnectRequestIssued = ETrue;
+            if (iObserver)
+            {
+                IRLOG_DEBUG( "CIRNetworkController::ChooseAccessPointL - notify ENetworkConnectionConnecting" );
+                iObserver->IRNetworkEventL(ENetworkConnectionConnecting);
+            }
+        }
+            
+        IRLOG_DEBUG( "CIRNetworkController::ChooseAccessPointL - Exiting (3)." );
+        return;
+    }
+    else
+    {
+        iObserver->IRNetworkEventL(EAccessPointSelectionCancelled);
+    }
+    IRLOG_DEBUG( "CIRNetworkController::ChooseAccessPointL - Exiting (4)." );
+}
+
+EXPORT_C void CIRNetworkController::CancelConnecting()
+{
+    IRLOG_DEBUG("CIRNetworkController::CancelConnecting(), Entering");
+    iIRNetworkObserver->Cancel();
+    Cancel();
+    ResetConnectionStatus();
+    IRLOG_DEBUG("CIRNetworkController::CancelConnecting(), Exiting");
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::IsOfflineMode
+//  This api is used to determine if the phone is in offline mode
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRNetworkController::IsOfflineMode()
+{
+    IRLOG_DEBUG( "CIRNetworkController::IsOfflineMode" );
+    // System defined value for offline mode is 5
+    const TInt KOfflineMode = 5;
+	TInt returnValue = 0;
+    returnValue = DetermineCurrentProfile();
+    if (returnValue == KOfflineMode)
+    {
+        IRLOG_DEBUG( "CIRNetworkController::IsOfflineMode - Exiting (1)." );
+        return ETrue;
+    }
+    IRLOG_DEBUG( "CIRNetworkController::IsOfflineMode - Exiting (2)." );
+    return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::IsWlanSupported
+//  This api is used to determine if the phone supports WLan usage
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRNetworkController::IsWlanSupported() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::IsWlanSupported" );
+    return iIsWlanSupported;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::ResetConnectionStatus
+//  Reset the connection status to Disconnected statet
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRNetworkController::ResetConnectionStatus()
+{
+    IRLOG_DEBUG( "CIRNetworkController::ResetConnectionStatus - Entering" );
+    iIsConnectRequestIssued = EFalse;
+    iNetworkConnectionState = EIRNetworkConnectionInActive;
+    iIsConnectedToNetwork = EFalse;
+    iConnectionPresent = EFalse;
+    IRLOG_DEBUG( "CIRNetworkController::ResetConnectionStatus - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::IdentifyConnectionType
+// Used to determine the type of connection
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TIRConnectionType CIRNetworkController::IdentifyConnectionType() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::IdentifyConnectionType" );
+    IRRDEBUG2("CIRNetworkController::IdentifyConnectionType - Entering iConnectionType = %d", iIRNetworkObserver->iIRConnectionType);
+
+    return iIRNetworkObserver->iIRConnectionType;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::DetermineCurrentProfile
+// Used to determine the current profile
+// ---------------------------------------------------------------------------
+//
+TInt CIRNetworkController::DetermineCurrentProfile() const
+{
+    IRLOG_DEBUG( "CIRNetworkController::DetermineCurrentProfile" );
+    TInt value = KErrNone;
+    TRAPD(err,
+            CRepository* cRepositoryHandle = CRepository::NewLC(KCRUidProfileEngine );
+            cRepositoryHandle->Get(KProEngActiveProfile,value);
+            CleanupStack::PopAndDestroy(cRepositoryHandle); )
+    if (err != KErrNone)
+    {
+        value = err;
+    }
+
+    IRLOG_DEBUG( "CIRNetworkController::DetermineCurrentProfile - Exiting." );
+    return value;
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::CheckFeatureL
+// Pops up the access point list.
+// ---------------------------------------------------------------------------
+//
+TBool CIRNetworkController::CheckFeatureL(TInt aFeatureId) const
+{
+    IRLOG_DEBUG( "CIRNetworkController::CheckFeatureL" );
+    return CFeatureDiscovery::IsFeatureSupportedL(aFeatureId);
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::CIRNetworkController
+// Default C++ Constructor
+// ---------------------------------------------------------------------------
+//
+CIRNetworkController::CIRNetworkController(): CActive(
+	CActive::EPriorityHigh )
+{
+    // Add the AO to the ActiveScheduler
+    IRLOG_DEBUG( "CIRNetworkController::CIRNetworkController- Entering" );
+    CActiveScheduler::Add(this);
+    // Initialize the states
+    iNetworkConnectionState = EIRNetworkConnectionInActive;
+    iSocketServerConnectionState = EIRSocketServerInActive;
+    iNetworkControllerState = EInActive;
+
+    IRLOG_DEBUG( "CIRNetworkController::CIRNetworkController - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::~CIRNetworkController
+//  Default C++ Destructor
+// ---------------------------------------------------------------------------
+//
+CIRNetworkController::~CIRNetworkController()
+{
+    IRLOG_DEBUG( "CIRNetworkController::~CIRNetworkController- Entering" );
+    _LIT(KErrorMsg,"Method Close not called");
+    __ASSERT_ALWAYS(iSingletonInstances == 0, User::Panic(KErrorMsg, KErrCorrupt));
+
+    delete iMobility;
+    if (IsActive())
+    {
+        Cancel();
+    }
+    if (iIRNetworkConnection)
+    {
+        iIRNetworkConnection->Close();
+        delete iIRNetworkConnection;
+    }
+
+    // Set all the state variables to indicate network connection is closed
+    delete iIRUAProf;
+    delete iIRWapProf;
+    if (iIRSettings)
+    {
+        iIRSettings->Close();
+        iIRSettings = NULL;
+    }
+    delete iIRNetworkObserver;
+    iIRSocketServer.Close();
+    iBearerList.Close();
+    iNetworkList.Close();
+    iIapIdList.Close();
+    if (iIapList)
+    {
+        iIapList->Reset();
+        delete iIapList;
+        iIapList = NULL;
+    }
+
+    if (iDataTransferTracker)
+    {
+        delete iDataTransferTracker;
+        iDataTransferTracker = NULL;
+    }
+    if (iLogoDataTransferTracker)
+    {
+        delete iLogoDataTransferTracker;
+        iLogoDataTransferTracker = NULL;
+    }
+    iObserver = NULL;
+
+    iActiveNetworkObserverArray.Close();
+
+    Dll::FreeTls();
+    IRLOG_DEBUG( "CIRNetworkController::~CIRNetworkController - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::ConstructL
+//  Second Phase construction.
+//	aObserver pointer to the observer class if an observer is needed
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkController::ConstructL( MIRNetworkController* aObserver )
+{
+    IRLOG_DEBUG( "CIRNetworkController::ConstructL- Entering" );
+    iObserver = aObserver;
+    iIRNetworkObserver = CIRNetworkObserver::NewL(this);
+    iIRNetworkObserver->SetObserver(iObserver);
+
+    // Create instance of DataTransferTracker (Byte Counter Impl)
+    iDataTransferTracker = CIRDataTransferTracker::NewL();
+    iLogoDataTransferTracker = CIRDataTransferTracker::NewL();
+
+    iIRNetworkConnection = new (ELeave) RConnection;
+
+    iIRSettings = CIRSettings::OpenL();
+
+    BuildUAProfStringL();
+    iIapList = new (ELeave) CDesCArrayFlat(KArraySize);
+
+    QueryCommsForIAPL();
+
+    IRLOG_DEBUG( "CIRNetworkController::ConstructL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::QueryCommsForIAPL
+//  Determines the available access points using CommsDat Api
+//  voilates PCLint Error 40 --Undeclared identifier 'KFeatureIdProtocolWlan'
+//  as defined in featureinfo.h
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkController::QueryCommsForIAPL()
+{
+    IRLOG_DEBUG( "CIRNetworkController::QueryCommsForIAPL- Entering" );
+
+    // Reset all the comms info
+    iIapList->Reset();
+    iBearerList.Reset();
+    iNetworkList.Reset();
+    iIapIdList.Reset();
+    
+#ifndef __WINS__
+    CIRFilteredApReader* filteredReader = CIRFilteredApReader::
+    NewLC( CIRFilteredApReader::KIRFilterWAPOnly |
+            CIRFilteredApReader::KIRFilterWAPMandatory |
+            CIRFilteredApReader::KIRFilterEasyWLAN );
+
+    CCDIAPRecord* iapRecord = filteredReader->FirstRecordL();
+
+    while ( iapRecord )
+    {
+        CleanupStack::PushL( iapRecord );
+
+        iIapList->AppendL( iapRecord->iRecordName.GetL() );
+        iBearerList.AppendL( static_cast<TUint32>(iapRecord->iBearer) );
+        iNetworkList.AppendL( static_cast<TUint32>(iapRecord->iNetwork) );
+        iIapIdList.AppendL( iapRecord->RecordId() );
+
+        CleanupStack::PopAndDestroy( iapRecord );
+        iapRecord = filteredReader->NextRecordL();
+    }
+    CleanupStack::PopAndDestroy( filteredReader );
+#else
+    CMDBSession* dbSession = CMDBSession::NewL(CMDBSession::LatestVersion());
+    CleanupStack::PushL(dbSession);
+
+    CMDBRecordSet<CCDIAPRecord>* iapSet = new (ELeave) CMDBRecordSet<
+            CCDIAPRecord> (KCDTIdIAPRecord);
+    CleanupStack::PushL(iapSet);
+
+    TRAP_IGNORE(iapSet->LoadL(*dbSession));
+    
+    for (TInt i = 0; i < iapSet->iRecords.Count(); i++)
+    {
+        CCDIAPRecord* iapRecord =
+                static_cast<CCDIAPRecord*> (iapSet->iRecords[i]);
+        iIapList->AppendL(iapRecord->iRecordName.GetL());
+        iBearerList.AppendL(static_cast<TUint32> (iapRecord->iBearer));
+        iNetworkList.AppendL(static_cast<TUint32> (iapRecord->iNetwork));
+        iIapIdList.AppendL(iapRecord->RecordId());
+    }
+    CleanupStack::PopAndDestroy(2, dbSession);
+
+#endif
+    
+    // If WLan is supported on the device then add the WLan option
+    // to the IAP List
+#ifndef __WINS__
+    iIsWlanSupported = CheckFeatureL(KFeatureIdProtocolWlan);
+    if( iIsWlanSupported )
+    {
+        TBuf<KWlanStringMaxLength> wlanString;
+        wlanString.Copy(KIRWLanName);
+        iIapList->AppendL(wlanString);
+        TUint32 WlanIdentifier(KIRUniqueWlanId);
+        iBearerList.AppendL(WlanIdentifier);
+        iNetworkList.AppendL((TUint32)KErrNotFound);
+        iIapIdList.AppendL((TUint32)KErrNotFound);
+    }
+#endif
+
+    iIapList->Compress();
+
+    IRLOG_DEBUG( "CIRNetworkController::QueryCommsForIAPL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::BuildUAProfStringL
+// Queries the system and extracts the UAProf information
+//  Used by IRDataProvider and IRStreamSource
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkController::BuildUAProfStringL()
+{
+    IRLOG_DEBUG( "CIRNetworkController::BuildUAProfStringL- Entering" );
+    // Create space on heap for the UAProf String
+    iIRUAProf = HBufC8::NewL(KMaxIRUAProfLength);
+    iIRWapProf = HBufC8::NewL(KMaxIRUAProfLength);
+    HBufC* cenRepPtr;
+    TPtr8 irUAProf = iIRUAProf->Des();
+    TPtr8 irWapProf = iIRWapProf->Des();
+    irUAProf.Append(iIRSettings->GetIrappVersionL());
+
+    cenRepPtr = NULL;
+    irUAProf.Append(KIRUAProfSpace);
+    // extract UAProf sub-string from cenrep
+    cenRepPtr = CentralRepositoryStringValueL(KCRUidWebUtils, KWebUtilsUsrAg3);
+    // append it to form the UAProf
+    irUAProf.Append(cenRepPtr->Des());
+    delete cenRepPtr;
+    cenRepPtr = NULL;
+
+    irUAProf.Append(KIRUAProfSpace);
+    // extract UAProf sub-string from cenrep
+    cenRepPtr = CentralRepositoryStringValueL(KCRUidWebUtils, KWebUtilsUsrAg2);
+    // append it to form the UAProf
+    irUAProf.Append(cenRepPtr->Des());
+    delete cenRepPtr;
+    cenRepPtr = NULL;
+
+    irUAProf.Append(KIRUAProfSpace);
+    // extract UAProf sub-string from cenrep
+    cenRepPtr = CentralRepositoryStringValueL(KCRUidWebUtils, KWebUtilsUsrAg4);
+    // append it to form the UAProf
+    irUAProf.Append(cenRepPtr->Des());
+    delete cenRepPtr;
+    cenRepPtr = NULL;
+
+    irUAProf.Append(KIRUAProfSpace);
+    // extract UAProf sub-string from cenrep
+    cenRepPtr = CentralRepositoryStringValueL(KCRUidWebUtils, KWebUtilsUsrAg5);
+    // append it to form the UAProf
+    irUAProf.Append(cenRepPtr->Des());
+    delete cenRepPtr;
+    cenRepPtr = NULL;
+    // trim out the quotes
+    irUAProf.Delete(irUAProf.Length() - 1, 1);
+    // extract x-wap-profile string from cenrep
+    cenRepPtr = CentralRepositoryStringValueL(KCRUidWebUtils, KWebUtilsUaProf);
+    // append it to form the UAProf
+    irWapProf.Copy(cenRepPtr->Des());
+    delete cenRepPtr;
+    cenRepPtr = NULL;
+
+    IRLOG_DEBUG( "CIRNetworkController::BuildUAProfStringL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::CentralRepositoryStringValueL
+// Retrievs the string from Central Repository for the specified key and cen rep uid
+// Transfers the ownership of the returned HBufC object
+// The caller must takecare of deleting the returned object*
+// ---------------------------------------------------------------------------
+//
+HBufC* CIRNetworkController::CentralRepositoryStringValueL(
+	const TUid& aRepositoryUid, TUint32 aKey ) const
+{
+    IRLOG_DEBUG( "CIRNetworkController::CentralRepositoryStringValueL- Entering" );
+    CRepository* pRepository = CRepository::NewL(aRepositoryUid);
+    CleanupStack::PushL(pRepository);
+
+    TInt length = KIRDefaultUAProfBufferSize;
+    HBufC* valueString = HBufC::NewLC(length);
+    TInt error(KErrTooBig);
+    do
+    {
+        TPtr ptr = valueString->Des();
+        error = pRepository->Get(aKey, ptr);
+        if (error == KErrTooBig)
+        {
+            CleanupStack::PopAndDestroy(valueString);
+            length = KTwo * length;
+            valueString = HBufC::NewLC(length);
+        }
+    } while (error == KErrTooBig);
+
+    if (error)
+    {
+        TPtr ptr = valueString->Des();
+        ptr.Copy(KNullDesC());
+    }
+
+    CleanupStack::Pop(valueString);
+    CleanupStack::PopAndDestroy(pRepository);
+    IRLOG_DEBUG( "CIRNetworkController::CentralRepositoryStringValueL - Exiting." );
+    return valueString;
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::ValidateAccessPointsL(
+//  Validates the access point availablity etc.
+//  voilates PCLint Error 40 --Undeclared identifier 'KFeatureIdProtocolWlan'
+//  as defined in featureinfo.h
+// ---------------------------------------------------------------------------
+//
+TBool CIRNetworkController::ValidateAccessPointsL()
+{
+    IRLOG_DEBUG( "CIRNetworkController::ValidateAccessPointsL- Entering" );
+    TBool status = ETrue;
+#ifndef __WINS__
+    // Check if the phone is in offline mode
+    // If yes, do not allow GPRS access
+    // If phone is in offline mode and device does not support
+    // WIFI then exit the application
+    // Do not make this check in Wins
+    //violates PC Lint error : Error 40: Undeclared identifier KFeatureIdProtocolWlan
+    if( IsOfflineMode() && !(CheckFeatureL(KFeatureIdProtocolWlan)) )
+    {
+        // The phone is in offline mode and WLan is not available
+        iObserver->IRNetworkEventL(EDisplayOfflineMode);
+        status = EFalse;
+    }
+    // If phone is not in offline mode and no access points are defined
+    // check if device has WIFI support then try to launch WIFI
+    // selection if there is no support then display a message
+    if( !IsOfflineMode() && iIapList->MdcaCount() == 0 )
+    {
+        // Check if there is WIFI support
+        //violates PC Lint error : Error 40: Undeclared identifier KFeatureIdProtocolWlan
+        if(!CheckFeatureL(KFeatureIdProtocolWlan))
+        {
+            iObserver->IRNetworkEventL(EDisplayNoAccessPointsDefined);
+            status = EFalse;
+        }
+    }
+#endif
+    IRLOG_DEBUG( "CIRNetworkController::ValidateAccessPointsL - Exiting." );
+    return status;
+}
+
+
+// Derived from CActive
+
+// ---------------------------------------------------------------------------
+// CIRNetworkController::RunL
+// The function is called by the active scheduler when a request completion event occurs,
+// ---------------------------------------------------------------------------
+//
+
+void CIRNetworkController::RunL()
+{
+    IRLOG_INFO2( "CIRNetworkController::RunL - iStatus=%d", iStatus.Int() );
+    iHandingOver = EFalse;
+
+    TInt statusCode = iStatus.Int();
+
+    if (iStatus == KErrNone)
+    {
+        HandleRunLSuccessL();
+    }
+    else
+    {
+        HandleRunLErrorL(statusCode);
+    }
+    IRLOG_DEBUG( "CIRNetworkController::RunL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+//  CIRNetworkController::DoCancel()
+//  Cancels the pending requests on the CIRNetworkController Active object
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkController::DoCancel()
+{
+    IRLOG_DEBUG( "CIRNetworkController::DoCancel - Entering" );
+    iIRNetworkConnection->Stop();
+    iIRNetworkConnection->Close();
+    iIRSocketServer.Close();
+    IRLOG_DEBUG( "CIRNetworkController::DoCancel - Exiting." );
+}
+
+// ---------------------------------------------------------
+// CIRNetworkController::InitializeHttpSession
+// ---------------------------------------------------------
+EXPORT_C void CIRNetworkController::InitializeHttpSessionL(const RHTTPSession& aHTTPSession, 
+											MIRDataTransferTracker::TIRTransferCategory aCategory)
+{
+    IRLOG_DEBUG("CVRConnection::InitializeHttpSessionL - enter");
+
+    iDataTransferTracker->BindL(aHTTPSession, aCategory);
+
+    RStringF sockserv = aHTTPSession.StringPool().StringF(
+            HTTP::EHttpSocketServ, RHTTPSession::GetTable());
+    CleanupClosePushL(sockserv);
+
+    RStringF connection = aHTTPSession.StringPool().StringF(
+            HTTP::EHttpSocketConnection, RHTTPSession::GetTable());
+    CleanupClosePushL(connection);
+
+    RHTTPConnectionInfo cInfo = aHTTPSession.ConnectionInfo();
+    cInfo.SetPropertyL(sockserv, THTTPHdrVal(iIRSocketServer.Handle()));
+    cInfo.SetPropertyL(connection, THTTPHdrVal(
+            reinterpret_cast<TInt> (iIRNetworkConnection)));
+    CleanupStack::PopAndDestroy(&connection); // sockserv.close, connection.close
+    CleanupStack::PopAndDestroy(&sockserv); // sockserv.close, connection.close
+
+    IRLOG_DEBUG("CIRNetworkController::InitializeHttpSessionL - exit");
+}
+
+// ---------------------------------------------------------
+// CIRNetworkController::RegisterLogoDataTransferTrackerL
+// ---------------------------------------------------------
+EXPORT_C void CIRNetworkController::RegisterLogoDataTransferTrackerL(RHTTPSession& aHTTPSession)
+{
+    IRLOG_DEBUG("CVRConnection::InitializeHttpSessionL - enter");
+
+    iLogoDataTransferTracker->BindL(aHTTPSession,
+            MIRDataTransferTracker::EIRTransferCategoryIsds);
+
+    RStringF sockserv = aHTTPSession.StringPool().StringF(
+            HTTP::EHttpSocketServ, RHTTPSession::GetTable());
+    CleanupClosePushL(sockserv);
+
+    RStringF connection = aHTTPSession.StringPool().StringF(
+            HTTP::EHttpSocketConnection, RHTTPSession::GetTable());
+    CleanupClosePushL(connection);
+
+    RHTTPConnectionInfo cInfo = aHTTPSession.ConnectionInfo();
+    cInfo.SetPropertyL(sockserv, THTTPHdrVal(iIRSocketServer.Handle()));
+    cInfo.SetPropertyL(connection, THTTPHdrVal(
+            reinterpret_cast<TInt> (iIRNetworkConnection)));
+    CleanupStack::PopAndDestroy(&connection); // sockserv.close, connection.close
+    CleanupStack::PopAndDestroy(&sockserv); // sockserv.close, connection.close	
+
+    // Subscribe to logo byte counter info
+    iLogoDataTransferTracker->SetObserver(this);
+
+    IRLOG_DEBUG("CIRNetworkController::RegisterLogoDataTransferTrackerL - exit");
+}
+
+// ---------------------------------------------------------
+// CIRNetworkController::DataTransferTracker()
+// ---------------------------------------------------------
+
+EXPORT_C MIRDataTransferTracker& CIRNetworkController::DataTransferTracker()
+{
+    IRLOG_DEBUG("CIRNetworkController::DataTransferTracker");
+    return *iDataTransferTracker;
+}
+
+// ---------------------------------------------------------
+// CIRNetworkController::LogoDataTransferTracker()
+// ---------------------------------------------------------
+
+EXPORT_C MIRDataTransferTracker& CIRNetworkController::LogoDataTransferTracker()
+{
+    IRLOG_DEBUG("CIRNetworkController::LogoDataTransferTracker");
+    return *iLogoDataTransferTracker;
+}
+
+// ---------------------------------------------------------
+// CIRNetworkController::LogoDataTransferTracker()
+// ---------------------------------------------------------
+
+void CIRNetworkController::HandleDataTransferEventL( 
+		const MIRDataTransferTracker::TIRDataTransferPckg& aData )
+{
+    IRLOG_DEBUG("CIRNetworkController::HandleDataTransferEventL - Entering");
+    iDataTransferTracker->RawDataTransferredL(aData.iBytesSentTotal,
+            aData.iBytesReceivedTotal,
+            MIRDataTransferTracker::EIRTransferCategoryIsds);
+    IRLOG_DEBUG("CIRNetworkController::HandleDataTransferEventL - Exiting");
+}
+
+// ---------------------------------------------------------
+// CIRNetworkController::PreferredCarrierAvailable()
+// ---------------------------------------------------------
+
+void CIRNetworkController::PreferredCarrierAvailable( TAccessPointInfo aOldAPInfo,
+                                            TAccessPointInfo aNewAPInfo,
+                                            TBool aIsUpgrade,
+                                            TBool aIsSeamless )
+{
+    IRLOG_DEBUG("CIRNetworkController::PreferredCarrierAvailable - Entering");
+
+    (void)aOldAPInfo;
+    (void)aNewAPInfo;
+    (void)aIsUpgrade;
+    IRLOG_DEBUG5("CIRNetworkController::PreferredCarrierAvailable, old ap : %d, new ap : %d, aIsUpgrade : %d, aIsSeamless : %d", 
+                 aOldAPInfo.AccessPoint(), aNewAPInfo.AccessPoint(), aIsUpgrade, aIsSeamless);
+    
+    if (aIsSeamless)
+    {
+        // It is Seamless. E.g. Mobile IP enabled.
+    }
+    else
+    {
+        // sockets used by the connection should be closed here.
+
+        // We ask to migrate to the Preferred Carrier.
+        if (!IsOfflineMode())
+        {
+            //handling over connection may take some time, during handling over connection,
+            //application should be in disconnected state
+            TRAP_IGNORE(iObserver->IRNetworkEventL(ENetworkConnectionDisconnected);)
+            
+            iIRNetworkObserver->SetNetworkMonitoring(EFalse);
+            
+            iMobility->MigrateToPreferredCarrier();
+            iHandingOver = ETrue;
+        }
+    }
+
+    IRLOG_DEBUG("CIRNetworkController::PreferredCarrierAvailable - Exiting");
+}
+
+
+// ---------------------------------------------------------
+// CIRNetworkController::NewCarrierActive()
+// ---------------------------------------------------------
+void CIRNetworkController::NewCarrierActive( TAccessPointInfo aNewAPInfo, TBool aIsSeamless )
+{
+    IRLOG_DEBUG("CIRNetworkController::NewCarrierActive - Entering");
+    (void)aNewAPInfo;
+    IRLOG_DEBUG3("CIRNetworkController::NewCarrierActive, new ap : %d, aIsSeamless : %d",
+                 aNewAPInfo.AccessPoint(), aIsSeamless);
+    
+    if (aIsSeamless)
+    {
+        // It is Seamless. E.g. Mobile IP enabled.
+    }
+    else
+    {
+        // sockets used by the connection should be re-opened here.
+        // We accept the new IAP.
+
+        iMobility->NewCarrierAccepted();
+
+        iIsConnectRequestIssued = EFalse;
+        iNetworkConnectionState = EIRNetworkConnectionActive;
+        iIsConnectedToNetwork = ETrue;
+        iConnectionPresent = ETrue;
+        
+        iIRNetworkObserver->SetNetworkMonitoring(ETrue);
+        iIRNetworkObserver->InitializeNetworkObserver();    
+    }
+
+    IRLOG_DEBUG("CIRNetworkController::NewCarrierActive - Exiting");
+}
+
+
+// ---------------------------------------------------------
+// CIRNetworkController::Error()
+// ---------------------------------------------------------
+void CIRNetworkController::Error( TInt /*aError*/ )
+{
+    IRLOG_DEBUG("CIRNetworkController::Error");
+    // Does nothing for the moment
+}
+	
+// ---------------------------------------------------------
+// HandleRunLSuccessL()
+// Handles the success case of Network connection in RunL
+// ---------------------------------------------------------
+void CIRNetworkController::HandleRunLSuccessL()
+{
+    IRLOG_DEBUG("CIRNetworkController::HandleRunLSuccessL - Entering");
+
+    switch (iNetworkControllerState)
+    {
+    case EConnectingToNetwork:
+    {
+        iIsConnectedToNetwork = ETrue;
+        // Connection to network sucessful
+        iNetworkConnectionState = EIRNetworkConnectionActive;
+        iConnectionPresent = ETrue;
+        iIsConnectRequestIssued = EFalse;
+        iIRNetworkObserver->InitializeNetworkObserver();
+    }
+        break;
+    default:
+    {
+        // no implementation
+    }
+        break;
+    }
+
+    if (!iMobility)
+    {
+        iMobility = CActiveCommsMobilityApiExt::NewL(*iIRNetworkConnection,
+                *this);
+    }
+    IRLOG_DEBUG("CIRNetworkController::HandleRunLSuccessL - Exiting");
+}
+
+
+// ---------------------------------------------------------
+// HandleRunLErrorL()
+// Handles the error case of Network connection in RunL
+// ---------------------------------------------------------
+void CIRNetworkController::HandleRunLErrorL(TInt aStatusCode )
+{
+    IRLOG_DEBUG("CIRNetworkController::HandleRunLErrorL - Entering");
+	
+    switch(iNetworkControllerState)
+	{
+		case EConnectingToNetwork:
+		{
+		    // Connection to network failure
+			iNetworkConnectionState = EIRNetworkConnectionInActive;
+            iIsConnectedToNetwork = EFalse;
+            iConnectionPresent = EFalse;
+            iIsConnectRequestIssued = EFalse;
+            if (aStatusCode != KErrCancel)
+            {
+                if (iDefaultConnection)
+                {
+                    //give user the second chance to select access point manually
+                    ChooseAccessPointL(EFalse);
+                }
+                else
+                {
+                    iObserver->IRNetworkEventL(EDisplayNetworkMessageNoConnectivity);
+                }
+            }
+            else
+            {
+                iObserver->IRNetworkEventL(EAccessPointSelectionCancelled);
+                ResetPendingRequests(EFalse);
+            }
+        }
+        break;
+        
+        default:
+        {
+            // no implementation
+        }
+        break;
+    }
+
+    IRLOG_DEBUG("CIRNetworkController::HandleRunLErrorL - Exiting");
+}
+
+// ---------------------------------------------------------
+// Registers the observer that will be notified for 
+// a network connection.
+// Observer requires notification to reissue pending request
+// ---------------------------------------------------------
+	
+EXPORT_C  void CIRNetworkController::RegisterActiveNetworkObserverL(MIRActiveNetworkObserver&
+																	 aActiveNetworkObserver)
+{
+    IRLOG_DEBUG("CIRNetworkController::RegisterActiveNetworkObserverL - Entering");
+    iActiveNetworkObserverArray.AppendL(&aActiveNetworkObserver);
+    IRLOG_DEBUG("CIRNetworkController::RegisterActiveNetworkObserverL - Exiting");
+}
+// ---------------------------------------------------------------------------
+// DeleteActiveNetworkObserver()
+// Used to remove an observer for roaming events from the observer array
+// ---------------------------------------------------------------------------
+EXPORT_C void CIRNetworkController::DeleteActiveNetworkObserver(MIRActiveNetworkObserver&
+																 aActiveNetworkObserver)
+{
+    IRLOG_DEBUG("CIRNetworkController::DeleteActiveNetworkObserver - Entering");
+    TInt index = iActiveNetworkObserverArray.Find(&aActiveNetworkObserver);
+
+    if (index != KErrNotFound)
+    {
+        iActiveNetworkObserverArray.Remove(index);
+    }
+
+    IRLOG_DEBUG("CIRNetworkController::DeleteActiveNetworkObserver - Exiting");
+}
+	
+// ---------------------------------------------------------------------------
+// NotifyActiveNetworkObserversL()
+// Used to notify all observers for network events about a change in network event
+// ---------------------------------------------------------------------------
+EXPORT_C void CIRNetworkController::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+{
+    IRLOG_DEBUG("CIRNetworkController::NotifyActiveNetworkObserversL - Entering");
+
+    for (TInt i = iActiveNetworkObserverArray.Count() - 1; i >= 0; i--)
+    {
+        iActiveNetworkObserverArray[i]->NotifyActiveNetworkObserversL(aEvent);
+    }
+
+    IRLOG_DEBUG("CIRNetworkController::NotifyActiveNetworkObserversL - Exiting");
+}
+// ---------------------------------------------------------
+// IsHandingOverConnection()
+// Indicates if the Hand over of Network connection has happened
+// ---------------------------------------------------------    
+EXPORT_C  TBool CIRNetworkController::IsHandingOverConnection()
+{
+	IRLOG_DEBUG("CIRNetworkController::IsHandingOverConnection - Entering");
+    IRLOG_DEBUG("CIRNetworkController::IsHandingOverConnection - Exiting");
+	return iHandingOver;
+}
+
+// -----------------------------------------------------------
+// Reset member iHandingOver to EFalse.
+// -----------------------------------------------------------
+void CIRNetworkController::ResetHandingOverConnection()
+{
+    IRLOG_DEBUG("CIRNetworkController::ResetHandingOverConnection(), Entering");
+    iHandingOver = EFalse;
+    IRLOG_DEBUG("CIRNetworkController::ResetHandingOverConnection(), Exiting");
+}
+
+// -----------------------------------------------------------------------------
+// Notifies observers when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRNetworkController::ResetPendingRequests(TBool aValue)
+{
+    for (TInt i = 0; i < iActiveNetworkObserverArray.Count(); i++)
+    {
+        iActiveNetworkObserverArray[i]->ResetPendingRequests(aValue);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/networkcontrollersrc/irnetworkobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,470 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdebug.h"
+#include "irnetworkobserver.h"
+#include "irnetworkcontroller.h"
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::NewL
+// Creates an Instance of CIRNetworkObserver
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRNetworkObserver *CIRNetworkObserver::NewL(CIRNetworkController *aNetworkController)
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::NewL - Entering" );
+	CIRNetworkObserver *self = NewLC(aNetworkController);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNetworkObserver::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::~CIRNetworkObserver()
+// Default Destructor
+// ---------------------------------------------------------------------------
+//
+CIRNetworkObserver::~CIRNetworkObserver()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::~CIRNetworkObserver - Entering" );
+        Cancel();
+	iIRConnectionMonitor.CancelNotifications();
+	iIRConnectionMonitor.Close();
+	IRLOG_DEBUG( "CIRNetworkObserver::~CIRNetworkObserver - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::InitializeNetworkObserver()
+//  Initializes the Connection monitor
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::InitializeNetworkObserver()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::InitializeNetworkObserver - Entering" );
+	iConnectionId = 0;
+	if(!IsActive())
+		{
+		iObserverState = EInitializing;
+		iIRConnectionMonitor.GetConnectionCount(iConnectionCount,iStatus);
+		SetActive();
+		}
+	IRLOG_DEBUG( "CIRNetworkObserver::InitializeNetworkObserver - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::SetObserver(MIRNetworkController* aObserver)
+// Set the observer used to communicate with the IRNetworkController
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::SetObserver(MIRNetworkController* aObserver)
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::SetObserver - Entering" );
+	iMonitorObserver = aObserver;
+	iMonitoringRequired = ETrue;  
+	IRLOG_DEBUG( "CIRNetworkObserver::SetObserver - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::CIRNetworkObserver()
+// Default Constructor
+// ---------------------------------------------------------------------------
+//
+CIRNetworkObserver::CIRNetworkObserver(CIRNetworkController *aNetworkController):
+    CActive( CActive::EPriorityStandard ), iNetworkController(aNetworkController)
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::CIRNetworkObserver - Entering" );
+	// Add the AO to the ActiveScheduler
+	CActiveScheduler::Add( this );
+	IRLOG_DEBUG( "CIRNetworkObserver::CIRNetworkObserver - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Creates an Instance of CIRNetworkObserver
+// ---------------------------------------------------------------------------
+//
+CIRNetworkObserver *CIRNetworkObserver::NewLC(CIRNetworkController *aNetworkController )
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::NewLC - Entering " );
+	CIRNetworkObserver *self = new( ELeave )CIRNetworkObserver(aNetworkController);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRNetworkObserver::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::ConstructL() 
+// Second Phase construction.
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::ConstructL - Entering" );
+	iIRConnectionMonitor.ConnectL();
+	iIRConnectionMonitor.NotifyEventL(*this);
+	iMonitoringRequired = EFalse;  
+	IRLOG_DEBUG( "CIRNetworkObserver::ConstructL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::RunL()
+// The function is called by the active scheduler when a request completion event occurs,
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::RunL()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::RunL - Entering" );
+	IRNetworkObserverRunL();
+	IRLOG_DEBUG( "CIRNetworkObserver::RunL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::DoCancel()
+// Cancels the pending requests on the CIRNetworkObserver Active object
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::DoCancel" );
+	}
+
+// ---------------------------------------------------------------------------    
+// CIRNetworkObserver::RunError()
+// Handles a leave occurring in the request completion event handler RunL()
+// ---------------------------------------------------------------------------
+//    
+TInt CIRNetworkObserver::RunError(TInt /*aError*/)
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::RunError" );
+	iNetworkController->ResetHandingOverConnection();
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::EventL(const CConnMonEventBase &aConnMonEvent)
+// Derived from MConnectionMonitorObserver
+// Implements the EventL method which is called when there is a network event
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::EventL(const CConnMonEventBase &aConnMonEvent)
+	{
+	IRLOG_INFO4( "CIRNetworkObserver::EventL - Event type %d for connection %d, iConnectionId=%d", 
+	             aConnMonEvent.EventType(), aConnMonEvent.ConnectionId(), iConnectionId );
+	switch(aConnMonEvent.EventType())
+		{
+		case EConnMonCreateConnection:
+			{
+			//Triggered when a new connection has been been created
+			// for future implementation
+			}
+		break;
+
+		case EConnMonDeleteConnection:
+			{
+			//Triggered when a connection has been been deleted.
+			if( aConnMonEvent.ConnectionId() == iConnectionId )
+				{
+				if(iMonitoringRequired)
+					{
+					iMonitorObserver->IRNetworkEventL(ENetworkConnectionDisconnected);
+					}
+				}			
+			}
+		break;
+
+		case EConnMonCreateSubConnection:       
+			{
+			//Triggered when a new subconnection has been been created
+			// for future implementation
+			}
+		break;
+
+		case EConnMonDeleteSubConnection:       
+			{
+			//Triggered when a subconnection has been been deleted
+			// for future implementation
+			}
+		break;
+
+		case EConnMonDownlinkDataThreshold:     
+			{
+			// for future implementation
+			}
+		break;
+
+		case EConnMonUplinkDataThreshold:       
+			{
+			// for future implementation
+			}
+		break;
+
+		case EConnMonNetworkStatusChange:       
+			{
+			// for future implementation
+			}
+		break;
+
+		case EConnMonConnectionStatusChange:    
+			{
+			//Triggered when the status of some connection changes.
+			// for future implementation
+			}
+		break;
+
+		case EConnMonConnectionActivityChange:  
+			{
+			//Triggered when some connection changes from active to idle or vice versa
+			// for future implementation
+			}
+		break;
+
+		case EConnMonNetworkRegistrationChange: 
+			{
+			// for future implementation
+			}
+		break;
+
+		case EConnMonBearerChange:              
+			{
+			//Triggered when bearer type (GPRS / Edge GPRS / WCDMA) changes
+			// for future implementation
+			}
+		break;
+
+		case EConnMonSignalStrengthChange:      
+			{
+			// for future implementation
+			}
+		break;
+
+		case EConnMonBearerAvailabilityChange:  
+			{
+			//Triggered when the availability of some bearer changes
+			// for future implementation
+			}
+		break;
+
+		case EConnMonIapAvailabilityChange:     
+			{
+			// for future implementation
+			}
+		break;
+
+		case EConnMonTransmitPowerChange:    
+			{
+			// for future implementation
+			}
+		break;
+		default:
+			{
+			// no implementation
+			}
+		break;    
+		}
+	IRLOG_DEBUG( "CIRNetworkObserver::EventL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::IdentifyConnection()
+// Identifies the type of connection we have used to get connected to network
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::IdentifyConnection()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::IdentifyConnection - Entering" );
+	if(!IsActive())
+		{
+		iObserverState = EGettingConnectionInfo;
+		iIRConnectionMonitor.GetConnectionInfo(
+		    iConnectionCount,iConnectionId,iSubConnectionCount);
+		// O Indicates method applies to connection
+		iIRConnectionMonitor.GetIntAttribute(
+		    iConnectionId,0,KBearer,iConnectionType,iStatus);
+		SetActive();
+		}
+	IRLOG_DEBUG( "CIRNetworkObserver::IdentifyConnection - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::GetIAPId()
+// Retrieves the IAP Id of the connection
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkObserver::GetAPId()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::GetIAPId - Entering" );
+	if(!IsActive())
+		{
+		iObserverState = EGettingIAPId;
+		iIRConnectionMonitor.GetConnectionInfo(
+		    iConnectionCount,iConnectionId,iSubConnectionCount);
+		// O in RConnectionMonitor::GetIntAttribute indicates method applies to connection
+		iIRConnectionMonitor.GetUintAttribute(
+		    iConnectionId,0,KIAPId,iIAPId,iStatus);
+		SetActive();
+		}
+	IRLOG_DEBUG( "CIRNetworkObserver::GetIAPId - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::IRNetworkObserverRunL()
+// Utility function used just to keep RunL() small
+// ---------------------------------------------------------------------------
+// 
+void CIRNetworkObserver::IRNetworkObserverRunL()
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::IRNetworkObserverRunL - Entering" );
+	switch(iObserverState)
+		{
+		case EInitializing:
+			{
+			if( iStatus.Int() == KErrNone )
+				{
+				// Initializing the Connection Monitor sucessful    
+				IdentifyConnection();
+				}
+			else
+				{
+				// Error initializing the connection monitor
+				iNetworkController->ResetHandingOverConnection();
+				}    
+			}
+		break;
+
+		case EGettingConnectionInfo:
+			{
+			if( iStatus.Int() == KErrNone )
+				{
+                iIsIAPIdAvailable = EFalse;
+				GetAPId();	
+				}
+			else
+				{
+				// Error initializing the connection monitor
+				iNetworkController->ResetHandingOverConnection();
+				}    
+			}
+		break;   
+		
+		case EGettingIAPId:
+			{
+			    iIsIAPIdAvailable = ETrue;   
+			    switch(iConnectionType)
+			    {
+			        case EBearerGPRS:
+			            {
+			            iIRConnectionType = EGprs;
+			            if(iMonitoringRequired)
+			             {
+			             // Intimate the connection established event
+			                 iMonitorObserver->IRNetworkEventL(
+			                     ENetworkConnectionEstablished);
+			             }
+			            }
+			        break;
+                    
+			        case EBearerEdgeGPRS:
+			            {
+			            iIRConnectionType = EEdge;
+			            if(iMonitoringRequired)
+			             {
+			             // Intimate the connection established event
+			                 iMonitorObserver->IRNetworkEventL(
+			                     ENetworkConnectionEstablished);
+			             }
+			            }
+			        break;
+                    
+			        case EBearerWLAN:
+			            {
+			            iIRConnectionType = EWiFi;    
+			            if(iMonitoringRequired)
+			                {
+			                // Intimate the connection established event
+			                iMonitorObserver->IRNetworkEventL(
+			                    ENetworkConnectionEstablished);
+			                }
+			            }
+			        break;
+                    
+			        case EBearerWCDMA:
+			            {
+			            iIRConnectionType = EWcdma;
+			            if(iMonitoringRequired)
+			            {
+			            // Intimate the connection established event
+			                iMonitorObserver->IRNetworkEventL(
+			                    ENetworkConnectionEstablished);
+			            }
+			            }
+                    break;
+			            
+			        case EBearerCDMA2000:
+			            {
+			            iIRConnectionType = ECdma2000;
+			            if(iMonitoringRequired)
+			            {
+			            // Intimate the connection established event
+			                iMonitorObserver->IRNetworkEventL(
+			                    ENetworkConnectionEstablished);
+			            }
+			            }
+			        break;
+			        
+			        default:
+			            {
+			            #ifdef __WINS__
+			            iIRConnectionType = EGprs;
+			            if(iMonitoringRequired)
+			             {
+			             // Intimate the connection established event
+			                 iMonitorObserver->IRNetworkEventL(
+			                     ENetworkConnectionEstablished);
+			             }
+			            #endif
+			            }
+			        break;
+			    }
+			    
+			    iNetworkController->ResetHandingOverConnection();
+			}
+			break;
+			
+		default:
+			{
+			// no implementation
+			}
+		break;
+		}
+	IRLOG_DEBUG( "CIRNetworkObserver::IRNetworkObserverRunL	- Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNetworkObserver::SetNetworkMonitoring()
+// Sets network monitoring observer to decide whether network monitoring is required.
+// ---------------------------------------------------------------------------
+// 
+void CIRNetworkObserver::SetNetworkMonitoring(TBool aValue)
+	{
+	IRLOG_DEBUG( "CIRNetworkObserver::SetNetworkMonitoring - Entering" );
+
+	iMonitoringRequired = aValue;	
+	
+	IRLOG_DEBUG( "CIRNetworkObserver::SetNetworkMonitoring - Exiting" );
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/presetplugininc/irchannelserverurlimpl.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+
+#ifndef IRCHANNELSERVERURLIMPL_H
+#define IRCHANNELSERVERURLIMPL_H
+
+#include <e32base.h>
+
+class RReadStream;
+class RWriteStream;
+
+/**
+ * This class provides the basic structure to hold the preset's url data
+ *information that come from the isds server.
+ *It also provides the basic getter and setter functions to 
+ *manage the preset's url information.
+ *has been provided 
+ *   
+ */
+class CIRChannelServerUrlImpl:public CBase
+	{
+public:
+	
+	
+	/**CIRChannelServerUrlImpl::NewL()
+	*Static function
+	*standard two phased constructor
+	*@param void
+	*@return *CIRChannelServerUrlImpl
+	**/
+	static  CIRChannelServerUrlImpl* NewL();
+	
+	
+	/**CIRChannelServerUrlImpl::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@param void
+	*@return *CIRChannelServerUrlImpl
+	**/
+	static CIRChannelServerUrlImpl* NewLC();
+	
+	
+	/**CIRChannelServerUrlImpl::SetServerName()
+	*sets server name 
+	*@param TDesC
+	*@return void
+	**/
+	void SetServerName(const TDesC& aServerName);
+	
+	
+	/**CIRChannelServerUrlImpl::SetServerUrl()
+	*sets server url 
+	*@param TDesC
+	*@return void
+	**/
+	void SetServerUrl(const TDesC& aServerUrl);
+	
+	
+	/**CIRChannelServerUrlImpl::SetBitRate()
+	*sets server bitrate 
+	*@param TInt
+	*@return void
+	**/
+	void SetBitRate(TInt aBitrate);
+	
+	
+	/**CIRChannelServerUrlImpl::GetServerName()
+	*gets server name 
+	*@param void
+	*@return TDesC
+	**/
+	TDesC& GetServerName();
+	
+	
+	/**CIRChannelServerUrlImpl::GetServerUrl()
+	*gets server url 
+	*@param void
+	*@return TDesC
+	**/
+	TDesC& GetServerUrl();
+	
+	
+	/**CIRChannelServerUrlImpl::GetBitRate()
+	*gets server bitrate
+	*@param void
+	*@return TInt
+	**/
+	TInt GetBitRate();
+	
+	
+	/**CIRChannelServerUrlImpl::~CIRChannelServerUrl()
+	*standard C++ destructor 
+	*@param NA
+	*@return NA
+	**/	
+	~CIRChannelServerUrlImpl();
+	
+	
+	/**CIRChannelServerUrlImpl::=()
+	*standard C++ copy constructor(deep copy) 
+	*@param CIRChannelServerUrl
+	*@return NA
+	**/	
+	CIRChannelServerUrlImpl& operator=(const CIRChannelServerUrlImpl& churl);
+		
+	
+	/**CIRChannelServerUrlImpl::ExternalizeL()
+	*function to externalize url data
+	*@param CIRChannelServerUrl
+	*@return NA
+	**/
+	void ExternalizeL(RWriteStream& aWriteStream);	
+	
+	/**CIRChannelServerUrlImpl::InternalizeL()
+	*function to internalize url data
+	*@param CIRChannelServerUrlImpl
+	*@return NA
+	**/
+	void InternalizeL(RReadStream& aReadStream);
+	
+protected:
+	
+	
+	/**CIRChannelServerUrlImpl::ConstructL()
+	*standard second phase construction
+	*@param void
+	*@return void
+	**/	
+	void ConstructL();
+	
+public:
+	//channel server name
+	HBufC *iServerName;
+	//channel server url
+	HBufC *iURL;
+	//bitrate supported by channel server
+	TInt iBitrate;
+	};
+	
+#endif//IRCHANNELSERVERURLIMPL_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/presetplugininc/irpreset.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,381 @@
+/*
+* Copyright (c) 2006-2008 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:  ?Description
+*
+*/
+
+
+#ifndef IRPRESET_H
+#define IRPRESET_H
+
+#include <badesca.h>
+#include <pspresetinterface.h>
+
+class CIRIsdsPreset;
+
+const TUid KIRPreset = { 0x10009DC1 };
+
+/**
+ *preset abstract class to expose general apis to the app
+ *it is the base class for IRPresetImpl,which is a plugin
+ *the plugin implements all the pure virtual functions
+*/
+class CIRPreset:public CPSPresetInterface
+	{
+
+public:
+
+	/**
+	*CIRPreset::SetId()
+	*sets id
+	*@param TDesC,supplied by xml parser
+	*/
+	virtual void SetId(const TDesC &aId)=0;
+
+	/**
+	*CIRPreset::SetId()
+	*sets id
+	*@param TInt,provided to manipulate the id number
+	*/
+	virtual void SetId(TInt aId)=0;
+
+
+	/**
+	*CIRPreset::SetLangInfo()
+	*sets the preset language name and the code
+	*@param TdesC,TdesC language id and name to be set
+	*/
+	virtual void SetLangInfo(const TDesC &aLangId,const TDesC& aLangName)=0;
+
+	/**
+	*CIRPreset::SetCountryInfo()
+	*sets the preset country name and the code
+	*@param TdesC,TdesC country id and country name to be set
+	*/
+	virtual void SetCountryInfo(const TDesC &aCountryId,
+		const TDesC& aCountryName)=0;
+
+	/**
+	*CIRPreset::SetLangCode()
+	*sets the language code
+	*@param TdesC language code
+	*/
+	virtual void SetLangCode(const TDesC &aLangId)=0;
+
+	/**
+	*CIRPreset::SetLang()
+	*sets the language
+	*@param TdesC language
+	*/
+	virtual void SetLang(const TDesC& aLangName)=0;
+
+	/**
+	*CIRPreset::SetCountryCode()
+	*sets the language code
+	*@param TdesC language code
+	*/
+	virtual void SetCountryCode(const TDesC &aCountryId)=0;
+
+	/**
+	*CIRPreset::SetCountryName()
+	*sets the language name
+	*@param TdesC language name
+	*/
+	virtual void SetCountryName(const TDesC& aCountryName)=0;
+
+	/**
+	*CIRPreset::SetLastModifiedTime()
+	*gets the channel  url at a particular index
+	*@param TDesC,time stamp
+	*/
+	virtual void SetLastModifiedTime(const TDesC &aLastModified)=0;
+
+	/**
+	*CIRPreset::SetGenreInfo()
+	*sets the genreid and name
+	*@param aGenreId
+	*@param aGenreName
+	*/
+	virtual void SetGenreInfo(const TDesC& aGenreId,
+		const TDesC& aGenreName)=0;
+
+	/**
+	*CIRPreset::SetImgUrl()
+	*sets the image url
+	*@param aImgUrl
+	*/
+	virtual void SetImgUrl(const TDesC& aImgUrl)=0;
+
+	/**
+	*CIRPreset::SetAdvertisementInUse()
+	*sets the advertisementinuse url
+	*@param aAdvertisementInUse
+	*/
+	virtual void SetAdvertisementInUse(const TDesC& aAdvertisementInUse)=0;
+
+	/**
+	*CIRPreset::SetDescription()
+	*sets the description for the channel
+	*@param aDescription
+	*/
+	virtual void SetDescription(const TDesC& aDescription)=0;
+
+	/**
+	*CIRPreset::SetAdvertisementUrl()
+	*sets the advertisement url
+	*@param aAdvertisementUrl
+	*/
+	virtual void SetAdvertisementUrl(const TDesC& aAdvertisementUrl)=0;
+
+	/**
+	*CIRPreset::SetUrlCount()
+	*sets the count of the number of urls
+	*/
+	virtual void SetUrlCount()=0;
+
+	/**
+	*CIRPreset::SetShortDesc()
+	*sets the short description
+	*@param aShortDesc
+	*/
+	virtual void SetShortDesc(const TDesC& aShortDesc)=0;
+
+
+	/**
+	*CIRPreset::SetMusicStoreStatus()
+	*sets the musicStoreEnabled flag
+	*@param aMusicStoreStatus
+	*/
+	virtual void SetMusicStoreStatus(const TDesC& aMusicStoreStatus)=0;
+
+
+	/**
+	*CIRPreset::SetUrlCount()
+	*sets the count of the number of urls
+	*@param aCnt ,count
+	*/
+	virtual void SetUrlCount(TInt aCnt)=0;
+
+	/**
+	*CIRPreset::SetIndex()
+	*sets the index for the preset.used only for presets in the fav list
+	*@param aInt
+	*/
+	//not required
+	//virtual void SetIndex(TInt aInt)=0
+
+	/**
+	*CIRPreset::SetUrlL()
+	*sets the channel server url
+	*@param aServerName ,server name
+	*@param aUrl ,server url
+	*@param aBitrate .server bitrate
+	*/
+	virtual void SetUrlL(const TDesC &aServerName,const TDesC &aUrl,
+		const TDesC &aBitrate)=0;
+
+	/**
+	*CIRPreset::SetUrlL()
+	*sets the channel server url
+	*@param aServerName ,server name
+	*@param aUrl ,server url
+	*@param aBitrate ,server bitrate
+	*/
+	virtual void SetUrlL(const TDesC &aServerName,const TDesC &aUrl,
+		TInt aBitrate)=0;
+
+	/**
+	*CIRPreset::SetChannelType()
+	*sets the channel type
+	*@param aChannelType userdefined,isds,adhoc
+	*/
+	virtual void SetChannelType(TInt aChannelType)=0;
+
+	/**
+	*CIRPreset::GetId()
+	*gets the channel id
+	*@return TInt
+	*/
+	virtual TInt GetId()const=0;
+
+	/**
+	*CIRPreset::GetLangId()
+	*gets the channel channelangid
+	*@return TDesC
+	*/
+	virtual const TDesC& GetLangId() const=0;
+
+	/**
+	*CIRPreset::GetLangName()
+	*gets the channel language name
+	*@return TDesC
+	*/
+	virtual const TDesC& GetLangName() const=0;
+
+	/**
+	*CIRPreset::GetCountryId()
+	*gets the channel countryid
+	*@return TDesC
+	*/
+	virtual const TDesC& GetCountryId() const=0;
+
+	/**
+	*CIRPreset::GetCountryName()
+	*gets the channel country name
+	*@return TDesC
+	*/
+	virtual const TDesC& GetCountryName() const=0;
+
+	/**
+	*CIRPreset::GetLastModifiedTime()
+	*gets the channel last modified time stamp
+	*@return TDesC
+	*/
+	virtual const TDesC& GetLastModifiedTime() const=0;
+
+	/**
+	*CIRPreset::GetDescription()
+	*gets the channel description
+	*@return TDesC
+	*/
+	virtual const TDesC& GetDescription() const=0;
+
+	/**
+	*CIRPreset::GetShortDescription()
+	*gets the channel  short description
+	*@return TDesC
+	*/
+	virtual const TDesC& GetShortDescription() const=0;
+
+
+	/**
+	*CIRPreset::GetMusicStoreStatus()
+	*gets the channel  musicStoreEnabled flag
+	*@return TDesC
+	*/
+	virtual const TDesC& GetMusicStoreStatus() const=0;
+
+
+    /**
+    *CIRPreset::GetChannelType()
+	*gets the channel  Type
+	*@return TInt
+	*/
+	virtual TInt GetChannelType()const=0;
+
+	/**
+	*CIRPreset::GetGenreId()
+	*gets the channel  genreid
+	*@return TDesC
+	*/
+	virtual const TDesC& GetGenreId() const=0;
+
+	/**
+	*CIRPreset::GetGenreName()
+	*gets the channel  genre name
+	*@return TDesC
+	*/
+	virtual const TDesC& GetGenreName() const=0;
+
+	/**
+	*CIRPreset::GetAdvertisementUrl()
+	*gets the channel  advertisement url
+	*@return TDesC
+	*/
+	virtual const TDesC& GetAdvertisementUrl() const=0;
+
+	/**
+	*CIRPreset::GetImgUrl()
+	*gets the channel  image url
+	*@return TDesC
+	*/
+	virtual const TDesC& GetImgUrl()const=0;
+
+    /**
+    *CIRPreset::GetUrlCount()
+	*gets the channel  url count
+	*@return TDesC
+	*/
+	virtual TInt GetUrlCount()const=0;
+
+	/*
+	 * get the channel url at specified position
+	 *
+	 */
+	virtual const TDesC& GetChannelUrlAt(TInt aIndex) const = 0;
+	
+	/**
+	*CIRPreset::GetAvailableBitrates()
+	*gets the bitrate array
+	*@return RArray<TInt>
+	*/
+    virtual RArray<TInt>& GetAvailableBitrates()=0;
+
+	/**
+ 	*void CIRPresetImpl::CIRIsdsPresetToCIRPresetImpl(const CIRIsdsPreset& aIsdsPreset)
+ 	*used to convert the isdspresets to plugnized presets.
+ 	*Does a deep copy for all the member variables
+ 	*@param CIRIsdsPreset&,the preset to be copied from
+	*/
+    virtual void CIRIsdsPresetToCIRPresetImpl(const CIRIsdsPreset& aIsdsPreset)=0;
+
+	/**
+	*CIRPreset::CopyPresetData()
+	*copy data to CIRIsdsPreset
+	*@param CIRIsdsPreset&,the preset to be copied into
+	*/
+	virtual void CopyPresetData(CIRIsdsPreset& aIsdsPreset) const =0;
+
+	/**
+	*CIRPreset::UniqId()
+	*gets the unique id
+	*@return TUint32
+	*/
+	virtual TUint32 UniqId()=0;
+
+	/**
+	*CIRPreset::SetUniqId()
+	*sets the unique id for the preset
+	*@param aId
+	*/
+	virtual void SetUniqId( const TUint32 aId)=0;
+
+	 /**
+     * Sets the logo data for this preset for a specific size.
+     *
+     * @param   aData           Raw image data to set.
+     * @param   aSize           Size of the logo in pixels.
+     */
+    virtual void SetLogoData( const TDesC8& aData ) = 0;
+
+    /**
+     * Returns the logo data for this preset.
+     *
+     * If the returned descriptor's length is zero, then it means
+     * that the preset does not have a logo.
+     */
+    virtual  const TDesC8& GetLogoData() const = 0;
+
+    /*
+     * Returns the played times of the channel
+     */
+    virtual TInt GetPlayedTimes() const = 0;
+    
+    /*
+     * Set the played times of the channel
+     */
+    virtual void SetPlayedTimes(TInt aPlayedTimes) = 0;
+	};
+
+#endif	//end of IRPRESET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/presetplugininc/irpresetimpl.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,567 @@
+/*
+* Copyright (c) 2006-2008 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:  ?Description
+*
+*/
+
+
+#ifndef IRPRESETIMPL_H
+#define IRPRESETIMPL_H
+
+#include "irpreset.h"
+
+class CIRChannelServerUrlImpl;
+
+/**
+ * This class provides the basic structure to hold the preset
+ *information that is saved in the favourites database
+ *It also provides the basic getter and setter functions to
+ *manage the preset information.
+ *for url selection for a particular bitrate some functionality
+ *has been provided
+ *copy constructor and assignment operator has been provided to
+ *override the default ones
+ *
+ * @code
+ *CIRPresetImpl* preset = CIRPresetImpl::NewL()
+ *preset->SetXXX();
+ *preset->GetXXX()
+ * *preset1 = *preset2
+ * @endcode
+ *
+ */
+
+class CIRPresetImpl:public CIRPreset
+	{
+
+public:
+
+	/**CIRPresetImpl::NewL()
+	*Static function
+	*standard two phased constructor
+	*@param void
+	*@return *CIRPresetImpl
+	**/
+    static CIRPresetImpl* NewL(TAny* aParams);
+
+
+	/**CIRPresetImpl::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@param void
+	*@return *CIRPresetImpl
+	**/
+ 	static CIRPresetImpl* NewLC(TAny* aParams);
+
+
+	/**CIRPresetImpl::~CIRIsdsPreset()
+	*standard C++ destructor
+	*@param NA
+	*@return NA
+	**/
+	~CIRPresetImpl();
+
+	/**
+	*CIRPresetImpl::SetId()
+	*sets id
+	*@param TDesC,supplied by xml parser
+	*/
+	void SetId(const TDesC &aId);
+
+	/**
+	*CIRPresetImpl::SetId()
+	*sets id
+	*@param TInt,provided to manipulate the id number
+	*/
+	void SetId(TInt aId);
+
+
+	/**
+	*CIRPresetImpl::SetLangInfo()
+	*sets the preset language name and the code
+	*@param TdesC,TdesC language id and name to be set
+	*/
+	void SetLangInfo(const TDesC &aLangId,const TDesC& aLangName);
+
+	/**
+	*CIRPresetImpl::SetCountryInfo()
+	*sets the preset country name and the code
+	*@param TdesC,TdesC country id and country name to be set
+	*/
+	void SetCountryInfo(const TDesC &aCountryId,const TDesC& aCountryName);
+
+	/**
+	*CIRPresetImpl::SetLangCode()
+	*sets the language code
+	*@param TdesC language code
+	*/
+	void SetLangCode(const TDesC &aLangId);
+
+	/**
+	*CIRPresetImpl::SetLang()
+	*sets the language
+	*@param TdesC language
+	*/
+	void SetLang(const TDesC& aLangName);
+
+	/**
+	*CIRPresetImpl::SetCountryCode()
+	*sets the language code
+	*@param TdesC language code
+	*/
+	void SetCountryCode(const TDesC &aCountryId);
+
+	/**
+	*CIRPresetImpl::SetCountryName()
+	*sets the language name
+	*@param TdesC language name
+	*/
+	void SetCountryName(const TDesC& aCountryName);
+
+	/**
+	*CIRPresetImpl::SetLastModifiedTime()
+	*gets the channel  url at a particular index
+	*@param TDesC,time stamp
+	*/
+	void SetLastModifiedTime(const TDesC &aLastModified);
+
+	/**
+	*CIRPresetImpl::SetGenreInfo()
+	*sets the genreid and name
+	*@param aGenreId
+	*@param aGenreName
+	*/
+	void SetGenreInfo(const TDesC& aGenreId,const TDesC& aGenreName);
+
+	/**
+	*CIRPresetImpl::SetImgUrl()
+	*sets the image url
+	*@param aImgUrl
+	*/
+	void SetImgUrl(const TDesC& aImgUrl);
+
+	/**
+	*CIRPresetImpl::SetLogoData()
+	*sets the Logo Data
+	*@param aData
+	*@param aSize
+	*/
+	void SetLogoData( const TDesC8& aData );
+
+	/**
+	*CIRPresetImpl::SetAdvertisementInUse()
+	*sets the advertisementinuse url
+	*@param aAdvertisementInUse
+	*/
+	void SetAdvertisementInUse(const TDesC& aAdvertisementInUse);
+
+	/**
+	*CIRPresetImpl::SetDescription()
+	*sets the description for the channel
+	*@param aDescription
+	*/
+	void SetDescription(const TDesC& aDescription);
+
+	/**
+	*CIRPresetImpl::SetAdvertisementUrl()
+	*sets the advertisement url
+	*@param aAdvertisementUrl
+	*/
+	void SetAdvertisementUrl(const TDesC& aAdvertisementUrl);
+
+	/**
+	*CIRPresetImpl::SetUrlCount()
+	*sets the count of the number of urls
+	*/
+	void SetUrlCount();
+
+	/**
+	*CIRPresetImpl::SetShortDesc()
+	*sets the short description
+	*@param aShortDesc
+	*/
+	void SetShortDesc(const TDesC& aShortDesc);
+
+	/**
+	*CIRPresetImpl::SetUrlCount()
+	*sets the count of the number of urls
+	*@param aCnt ,count
+	*/
+	void SetUrlCount(TInt aCnt);
+
+	/**
+	*CIRPresetImpl::SetUrlL()
+	*sets the channel server url
+	*@param aServerName ,server name
+	*@param aUrl ,server url
+	*@param aBitrate .server bitrate
+	*/
+	void SetUrlL(const TDesC &aServerName,const TDesC &aUrl,
+		const TDesC &aBitrate);
+
+	/**
+	*CIRPresetImpl::SetUrlL()
+	*sets the channel server url
+	*@param aServerName ,server name
+	*@param aUrl ,server url
+	*@param aBitrate ,server bitrate
+	*/
+	void SetUrlL(const TDesC &aServerName,const TDesC &aUrl,TInt aBitrate);
+
+	/**
+	*CIRPresetImpl::SetChannelType()
+	*sets the channel type
+	*@param aChannelType userdefined,isds,adhoc
+	*/
+	void SetChannelType(TInt aChannelType);
+	
+	/**
+	*CIRPresetImpl::SetMusicStoreStatus()
+	*sets the musicStoreEnabled 
+	*@param aMusicStoreStatus
+	*/
+	void SetMusicStoreStatus(const TDesC& aMusicStoreStatus);
+
+	//getter functions
+
+	/**
+	*CIRPresetImpl::GetId()
+	*gets the channel id
+	*@return TInt
+	*/
+	TInt GetId()const;
+	/**
+	*CIRPresetImpl::GetLangId()
+	*gets the channel channelangid
+	*@return TDesC
+	*/
+	const TDesC& GetLangId() const;
+
+	/**
+	*CIRPresetImpl::GetLangName()
+	*gets the channel language name
+	*@return TDesC
+	*/
+	const TDesC& GetLangName() const;
+
+	/**
+	*CIRPresetImpl::GetCountryId()
+	*gets the channel countryid
+	*@return TDesC
+	*/
+	const TDesC& GetCountryId() const;
+
+	/**
+	*CIRPresetImpl::GetCountryName()
+	*gets the channel country name
+	*@return TDesC
+	*/
+	const TDesC& GetCountryName() const;
+
+	/**
+	*CIRPresetImpl::GetLastModifiedTime()
+	*gets the channel last modified time stamp
+	*@return TDesC
+	*/
+	const TDesC& GetLastModifiedTime() const;
+
+	/**
+	*CIRPresetImpl::GetDescription()
+	*gets the channel description
+	*@return TDesC
+	*/
+	const TDesC& GetDescription() const;
+
+	/**
+	*CIRPresetImpl::GetShortDescription()
+	*gets the channel  short description
+	*@return TDesC
+	*/
+	const TDesC& GetShortDescription() const;
+
+    /**
+    *CIRPresetImpl::GetChannelType()
+	*gets the channel  Type
+	*@return TInt
+	*/
+	TInt GetChannelType()const;
+
+	/**
+	*CIRPresetImpl::GetGenreId()
+	*gets the channel  genreid
+	*@return TDesC
+	*/
+	const TDesC& GetGenreId() const;
+
+	/**
+	*CIRPresetImpl::GetGenreName()
+	*gets the channel  genre name
+	*@return TDesC
+	*/
+	const TDesC& GetGenreName() const;
+
+	/**
+	*CIRPresetImpl::GetAdvertisementUrl()
+	*gets the channel  advertisement url
+	*@return TDesC
+	*/
+	const TDesC& GetAdvertisementUrl() const;
+
+	/**
+	*CIRPresetImpl::GetImgUrl()
+	*gets the channel  image url
+	*@return TDesC
+	*/
+	const TDesC& GetImgUrl() const;
+
+    /**
+    *CIRPresetImpl::GetUrlCount()
+	*gets the channel  url count
+	*@return TDesC
+	*/
+	TInt GetUrlCount()const;
+
+	/*
+	*CIRPresetImpl::GetLogoData()
+	*gets the Logo Data
+	*@return TDesC8&
+	*/
+    const TDesC8& GetLogoData() const;
+
+	/**
+	*CIRPresetImpl::GetUrl()
+	*gets the channel  url from zeroth position
+	*@return CIRChannelServerUrlImpl&
+	*/
+	CIRChannelServerUrlImpl& GetUrl(TInt aInt)const;
+	
+	/*
+	 * get the channel url at specified position
+     *
+     */
+	const TDesC& GetChannelUrlAt(TInt aIndex) const;
+	    
+	/**
+	*CIRPresetImpl::GetMusicStoreStatus()
+	*gets the musicStoreEnabled 
+	*@return TDesC&
+	*/
+	const TDesC& GetMusicStoreStatus()const;
+
+
+    /**
+    *CIRPresetImpl::operator=()
+	*assignment operator
+	*@param CIRIsdsPreset& aPreset
+	*@return CIRIsdsPreset
+	*/
+	CIRPresetImpl& operator=(const CIRPresetImpl& aPreset);
+
+	/**
+ 	*void CIRPresetImpl::CIRIsdsPresetToCIRPresetImpl(const CIRIsdsPreset& aIsdsPreset)
+ 	*used to convert the isdspresets to plugnized presets.
+ 	*Does a deep copy for all the member variables
+ 	*@param CIRIsdsPreset&,the preset to be copied from
+	*/
+	void CIRIsdsPresetToCIRPresetImpl(const CIRIsdsPreset& aIsdsPreset);
+
+	/**
+	*CIRPresetImpl::CopyPresetData()
+	*copy data to CIRIsdsPreset
+	*@param CIRIsdsPreset&,the preset to be copied into
+	*/
+	void CopyPresetData(CIRIsdsPreset& aIsdsPreset) const;
+
+	/**
+	*CIRPresetImpl::GetAvailableBitrates()
+	*gets the bitrate array
+	*@return RArray<TInt>
+	*/
+	RArray<TInt>& GetAvailableBitrates();
+
+    /**
+	*CIRPresetImpl::UniqId()
+	*gets the unique id
+	*@return TUint32
+	*/
+	TUint32 UniqId() ;
+
+	/**
+	*CIRPresetImpl::SetUniqId()
+	*sets the unique id for the preset
+	*@param aId
+	*/
+	void SetUniqId( TUint32 aUniqId);
+
+    /*
+     * Returns the played times of the channel
+     */
+    TInt GetPlayedTimes() const;
+    
+    /*
+     * Set the played times of the channel
+     */
+    void SetPlayedTimes(TInt aPlayedTimes);
+    
+protected:
+
+    /**CIRPresetImpl::CIRIsdsPreset()
+    *standard C++ constructor
+    *@param void
+    *@return NA
+    **/
+    CIRPresetImpl();
+    
+	/**CIRPresetImpl::ConstructL(TAny* aParams)
+	*standard second phase constructor(Leaveable)
+	*@param void
+	*@return void
+	**/
+	void ConstructL(TAny* aParams);
+
+
+    //for serialization
+    /**
+    *CIRPresetImpl::ExternalizeL()
+    *serializes the preset data into a stream
+    *@param aWriteStream
+    */
+    void ExternalizeL(RWriteStream& aWriteStream)const;
+
+    /**
+    *CIRPresetImpl::InternalizeL()
+    *serializes the preset data from a stream to a structure
+    *@param aReadStream
+    */
+    void InternalizeL(RReadStream& aReadStream);
+    
+private:
+
+	/**
+	 * unique id generated for the preset saved at favourite
+	 */
+	TUint32 iUniqId;
+
+	/**
+	 * no of channel urls
+	 */
+	TInt iChannelUrlCount;
+
+	/**
+	 * 0 for user defined 1 for isds type.
+	 */
+	TInt iType;
+
+	/**
+	 * index in the preset table
+	 */
+	//TInt iIndex;not required
+
+	/**
+	 * isds generated preset id
+	 */
+	TInt iPresetId;
+
+	/**
+	 * preset language code
+	 */
+	RBuf iLanguageCode;
+
+	/**
+	 * preset language
+	 */
+	RBuf iLanguage;
+
+	/**
+	 * preset country of origin code
+	 */
+	RBuf iCountryCode;
+
+	/**
+	 * preset country of origin
+	 */
+	RBuf iCountry;
+
+	/**
+	 * preset last modified
+	 */
+	RBuf iLastModified;
+
+	/**
+	 * not in use
+	 */
+	RBuf iAdvertisementUrl;
+
+	/**
+	 * not in use
+	 */
+	RBuf iAdvertisementInUse;
+
+	/**
+	 * Logo URL
+	 */
+	RBuf iImgUrl;
+
+	/**
+     * Raw image data for the logo.
+     * Owned.
+     */
+    RBuf8 iLogoData;
+
+	/**
+	 * channel description
+	 */
+	RBuf iDescription;
+
+	/**
+	 * channel short desription
+	 */
+	RBuf iShortDesc;
+
+	/**
+	 * channel genre name
+	 */
+	RBuf iGenereName;
+
+	/**
+	 * channel genre id
+	 */
+	RBuf iGenereId;
+	
+	/**
+	 * musicStoreEnabled value
+	 */
+	RBuf iMusicStoreStatus;
+
+
+	/**
+	 * url array
+	 */
+	CDesCArrayFlat* iUrlForBitrate;
+
+	/**
+	 * url array
+	 */
+	CArrayPtrFlat<CIRChannelServerUrlImpl>* iUrlArray;
+
+	/**
+	 * bitrate array
+	 */
+	RArray<TInt> iBitrateArray;
+	
+	//added by Peter on June 23rd, 2009
+	TInt iPlayedTimes;
+	};
+
+#endif	//end of IRPRESETIMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/presetpluginsrc/irchannelserverurlimpl.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,238 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irchannelserverurlimpl.h"
+#include "irdebug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::NewL()
+// Static function
+// standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+CIRChannelServerUrlImpl* CIRChannelServerUrlImpl::NewL()
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrlImpl::NewL" );
+	CIRChannelServerUrlImpl* self=CIRChannelServerUrlImpl::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRChannelServerUrlImpl::NewL - Exiting." );
+	return self;
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::NewLC()
+// Static function
+// standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+CIRChannelServerUrlImpl* CIRChannelServerUrlImpl::NewLC()
+	{
+	IRLOG_DEBUG( "CIRChannelServerUrlImpl::NewLC" );
+	CIRChannelServerUrlImpl* self=new(ELeave)CIRChannelServerUrlImpl;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::NewLC - Exiting." );
+	return self;
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::SetServerName()
+// sets server name 
+// ---------------------------------------------------------------------------
+//
+void CIRChannelServerUrlImpl::SetServerName(const TDesC& aServerName)
+	{
+	iServerName=aServerName.Alloc();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::SetServerUrl()
+// sets server url 
+// ---------------------------------------------------------------------------
+//
+void CIRChannelServerUrlImpl::SetServerUrl(const TDesC& aServerUrl)
+	{
+	iURL=aServerUrl.Alloc();
+	}
+
+
+// ---------------------------------------------------------------------------	
+// CIRChannelServerUrlImpl::SetBitRate()
+// sets server bitrate 
+// ---------------------------------------------------------------------------
+//
+void CIRChannelServerUrlImpl::SetBitRate(TInt aBitrate)
+	{
+	iBitrate=aBitrate;
+	}
+
+
+// ---------------------------------------------------------------------------	
+// CIRChannelServerUrlImpl::GetServerName()
+// gets server name 
+// ---------------------------------------------------------------------------
+//
+TDesC& CIRChannelServerUrlImpl::GetServerName()
+	{
+	return *iServerName;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::GetServerUrl()
+// gets server url 
+// ---------------------------------------------------------------------------
+//
+TDesC& CIRChannelServerUrlImpl::GetServerUrl()
+	{
+	return *iURL;
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::GetBitRate()
+// gets server bitrate
+// ---------------------------------------------------------------------------
+//
+TInt CIRChannelServerUrlImpl::GetBitRate()
+	{
+	return iBitrate;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::~CIRChannelServerUrlImpl()
+// destructor 
+// ---------------------------------------------------------------------------
+//
+CIRChannelServerUrlImpl::~CIRChannelServerUrlImpl()
+	{
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::~CIRChannelServerUrlImpl" );
+	delete iServerName;
+	delete iURL;
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::~CIRChannelServerUrlImpl - Exiting." );
+	}
+
+	
+// ---------------------------------------------------------------------------	
+// CIRChannelServerUrlImpl::=()
+// standard C++ copy constructor(deep copy) 
+// ---------------------------------------------------------------------------
+//
+CIRChannelServerUrlImpl& CIRChannelServerUrlImpl::operator=(
+	const CIRChannelServerUrlImpl& churl)
+	{
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::operator=" );
+	if(&churl == this)
+		{
+		return *this;
+		}
+	iServerName=churl.iServerName;
+	iURL=churl.iURL;
+	iBitrate=churl.iBitrate;
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::operator= - Exiting." );
+	return *this;
+	}
+	
+
+// ---------------------------------------------------------------------------	
+// CIRChannelServerUrlImpl::ExternalizeL()
+// function to externalize url data
+// ---------------------------------------------------------------------------
+//
+void CIRChannelServerUrlImpl::ExternalizeL(RWriteStream& aWriteStream)
+	{
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::ExternalizeL" );
+	//algo
+	//1.check if data is present for the particular member variable
+	//2.if yes get the length of the data and externalize the length and then the data
+	//3.if no data is present write the length as 0.
+	TInt len;
+	if(iServerName)
+		{
+		len=iServerName->Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream << *iServerName;
+		}
+	else
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+		
+	if(iURL)
+		{
+		len=iURL->Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream << *iURL;
+		}
+	else
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+		
+	aWriteStream.WriteInt32L(iBitrate);
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::ExternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::InternalizeL()
+// function to internalize url data
+// ---------------------------------------------------------------------------
+//
+void CIRChannelServerUrlImpl::InternalizeL(RReadStream& aReadStream)
+	{
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::InternalizeL" );
+	//algo
+	//1.get the length of the data
+	//2.read that many bytes
+	//3.if read length is zero. skip..
+	TInt len;
+	len= aReadStream.ReadInt32L();
+	if(len)
+		{
+		iServerName=HBufC::NewL(aReadStream,len);	
+		}
+
+	len=aReadStream.ReadInt32L();
+	if(len)
+		{
+		iURL=HBufC::NewL(aReadStream,len);	
+		}
+	iBitrate=aReadStream.ReadInt32L();
+	IRLOG_DEBUG(  "CIRChannelServerUrlImpl::InternalizeL - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRChannelServerUrlImpl::ConstructL()
+// standard second phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRChannelServerUrlImpl::ConstructL()
+	{
+	//no implementation
+	return;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/presetpluginsrc/irpresetimpl.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1167 @@
+/*
+* Copyright (c) 2006-2008 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:  ?Description
+*
+*/
+
+#include <s32strm.h>
+
+#include "irchannelserverurl.h"
+#include "irchannelserverurlimpl.h"
+#include "irdebug.h"
+#include "irpresetimpl.h"
+#include "irisdspreset.h"
+
+const TInt KUrlArrayMaxLength = 128;
+const TInt KUrlForBitrateMaxLength = 128;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::NewL()
+// Static function
+// standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+CIRPresetImpl* CIRPresetImpl::NewL( TAny* aParams )
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::NewL" );
+	CIRPresetImpl* self = CIRPresetImpl::NewLC( aParams );
+	CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRPresetImpl::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::NewLC()
+// Static function
+// standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+CIRPresetImpl* CIRPresetImpl::NewLC( TAny* aParams )
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::NewLC" );
+	CIRPresetImpl* self = new (ELeave) CIRPresetImpl;
+	CleanupStack::PushL( self );
+	self->ConstructL( aParams );
+	IRLOG_DEBUG( "CIRPresetImpl::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::ConstructL()
+// standard second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::ConstructL(TAny* aParams)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::ConstructL" );
+	BaseConstructL(aParams);
+	iUrlArray=
+		new (ELeave) CArrayPtrFlat<CIRChannelServerUrlImpl>(
+		KUrlArrayMaxLength);
+	iUrlForBitrate=new (ELeave) CDesCArrayFlat(KUrlForBitrateMaxLength);
+	IRLOG_DEBUG( "CIRPresetImpl::ConstructL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::~CIRPresetImpl()
+// standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+CIRPresetImpl::~CIRPresetImpl()
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::~CIRPresetImpl" );
+	iLanguageCode.Close();
+	iLanguage.Close();
+	iCountryCode.Close();
+	iCountry.Close();
+	iLastModified.Close();
+	iAdvertisementUrl.Close();
+	iAdvertisementInUse.Close();
+	iImgUrl.Close();
+	iLogoData.Close();
+	iDescription.Close();
+	iShortDesc.Close();
+	iGenereName.Close();
+	iGenereId.Close();
+	iMusicStoreStatus.Close();
+	delete iUrlForBitrate;
+	if (iUrlArray)
+		{
+		iUrlArray->ResetAndDestroy();
+		}
+
+	delete iUrlArray;
+	iBitrateArray.Close();
+	IRLOG_DEBUG( "CIRPresetImpl::~CIRPresetImpl - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetId()
+// Function to set iPresetId
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetId(TInt aId)
+	{
+	iPresetId=aId;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetId()
+// Function to set iPresetId from a TDesC
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetId(const TDesC &aId)
+	{
+	TLex conv(aId);
+	conv.Val(iPresetId);
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetLangCode()
+// Function to set iLanguageCode from a TDesC
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetLangCode(const TDesC &aLangId)
+	{
+	iLanguageCode.Close();
+	iLanguageCode.Create( aLangId );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetLang()
+// Function to set iLanguage from a TDesC
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetLang(const TDesC& aLangName)
+	{
+	iLanguage.Close();
+	iLanguage.Create( aLangName );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetCountryCode()
+// Function to set iCountryCode from a TDesC
+// ---------------------------------------------------------------------------
+void CIRPresetImpl::SetCountryCode(const TDesC &aCountryId)
+	{
+	iCountryCode.Close();
+	iCountryCode.Create( aCountryId );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetCountryName()
+// Function to set iCountry from a TDesC
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetCountryName(const TDesC& aCountryName)
+	{
+	iCountry.Close();
+	iCountry.Create( aCountryName );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetLangInfo()
+// Function to set iLanguageCode, iLanguage
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetLangInfo(const TDesC &aLangId,const TDesC& aLangName)
+	{
+    SetLangCode( aLangId );
+    SetLang( aLangName );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetLangInfo()
+// Function to set iCountryCode, iCountry
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetCountryInfo(const TDesC &aCountryId,
+	const TDesC& aCountryName)
+	{
+	SetCountryCode( aCountryId );
+    SetCountryName( aCountryName );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetLastModifiedTime()
+// Function to set iLastModified
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetLastModifiedTime(const TDesC &aLastModified)
+	{
+	iLastModified.Close();
+	iLastModified.Create( aLastModified );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetGenreInfo()
+// Function to set iGenereName, iGenereId
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetGenreInfo(const TDesC& aGenreId,
+	const TDesC& aGenreName)
+	{
+	iGenereName.Close();
+	iGenereName.Create( aGenreName );
+	iGenereId.Close();
+	iGenereId.Create( aGenreId );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetImgUrl()
+// Function to set iImgUrl
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetImgUrl(const TDesC& aImgUrl)
+	{
+	iImgUrl.Close();
+	iImgUrl.Create( aImgUrl );
+	}
+
+// ---------------------------------------------------------------------------
+// From class CIRPresetImpl
+// Sets the raw logo image data.
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetLogoData( const TDesC8& aData )
+    {
+		iLogoData.Close();
+		iLogoData.Create( aData );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CIRPresetImpl
+// Returns the raw logo image data.
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CIRPresetImpl::GetLogoData() const
+    {
+    return iLogoData;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetAdvertisementUrl()
+// Function to set iAdvertisementUrl
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetAdvertisementUrl(const TDesC& aAdvertisementUrl)
+	{
+	iAdvertisementUrl.Close();
+	iAdvertisementUrl.Create( aAdvertisementUrl );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetAdvertisementInUse()
+// Function to set iAdvertisementInUse
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetAdvertisementInUse(const TDesC& aAdvertisementInUse)
+	{
+	iAdvertisementInUse.Close();
+	iAdvertisementInUse.Create( aAdvertisementInUse );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetDescription()
+// Function to set iDescription
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl:: SetDescription(const TDesC& aDescription)
+	{
+    iDescription.Close();
+    iDescription.Create( aDescription );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetShortDesc()
+// Function to set iShortDesc
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl:: SetShortDesc(const TDesC& aShortDesc)
+	{
+    iShortDesc.Close();
+    iShortDesc.Create( aShortDesc );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetUrlCount()
+// Function to set iChannelUrlCount
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetUrlCount()
+	{
+	iChannelUrlCount=iUrlArray->Count();
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetUrlCount()
+// Function to set iChannelUrlCount
+// ---------------------------------------------------------------------------
+void CIRPresetImpl::SetUrlCount(TInt aCnt)
+	{
+	iChannelUrlCount=aCnt;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetChannelType()
+// Function to set iType
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetChannelType(TInt aType)
+	{
+	iType = aType;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetUrl()
+// Function to set Url parameter
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetUrlL(const TDesC &aServerName,const TDesC &aUrl,
+	const TDesC &aBitrate)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::SetUrlL" );
+	CIRChannelServerUrlImpl* hold=CIRChannelServerUrlImpl::NewL();
+	hold->SetServerName(aServerName);
+	hold->SetServerUrl(aUrl);
+	TLex conv(aBitrate);
+	TInt conVal = 0;
+	conv.Val(conVal);
+	hold->SetBitRate(conVal);
+	//ownership transferred to the array
+	//no need to delete hold
+	iUrlArray->AppendL(hold);
+	IRLOG_DEBUG( "CIRPresetImpl::SetUrlL - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetUrl()
+// Function to set Url parameter
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetUrlL(const TDesC &aServerName,const TDesC &aUrl,
+	TInt aBitrate)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::SetUrlL(const TDesC &aServerName,const TDesC &aUrl,TInt aBitrate)" );
+	CIRChannelServerUrlImpl* hold=CIRChannelServerUrlImpl::NewL();
+	hold->SetServerName(aServerName);
+	hold->SetServerUrl(aUrl);
+	hold->SetBitRate(aBitrate);
+	iUrlArray->AppendL(hold);
+	IRLOG_DEBUG( "CIRPresetImpl::SetUrlL(const TDesC &aServerName,const TDesC &aUrl,TInt aBitrate) - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::SetMusicStoreStatus()
+// Function to set iMusicStoreStatus
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::SetMusicStoreStatus(const TDesC& aMusicStoreStatus)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::SetMusicStoreStatus - Entering" );
+    iMusicStoreStatus.Close();
+    iMusicStoreStatus.Create( aMusicStoreStatus );
+	IRLOG_DEBUG( "CIRPresetImpl::SetMusicStoreStatus - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetId()
+// Function to get iPresetId
+// ---------------------------------------------------------------------------
+//
+TInt CIRPresetImpl::GetId()const
+	{
+	return iPresetId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetLangId()
+// Function to get iLanguageCode
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetLangId() const
+	{
+	return iLanguageCode;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetLangName()
+// Function to get iLanguage
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetLangName() const
+	{
+	return iLanguage;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetCountryId()
+// Function to get iCountryCode
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetCountryId() const
+	{
+	return iCountryCode;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetCountryName()
+// Function to get iCountry
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetCountryName() const
+	{
+	return iCountry;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetLastModifiedTime()
+// Function to get iLastModified
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetLastModifiedTime() const
+	{
+	return iLastModified;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetGenreId()
+// Function to get iGenereId
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetGenreId() const
+	{
+	return iGenereId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetGenreName()
+// Function to get iGenereName
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetGenreName() const
+	{
+	return iGenereName;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetAdvertisementUrl()
+// Function to get iAdvertisementUrl
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetAdvertisementUrl() const
+	{
+	return iAdvertisementUrl;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetImgUrl()
+// Function to get iImgUrl
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetImgUrl() const
+	{
+	return iImgUrl;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetUrlCount()
+// Function to get iChannelUrlCount
+// ---------------------------------------------------------------------------
+//
+TInt CIRPresetImpl::GetUrlCount() const
+	{
+	return iChannelUrlCount;
+	}
+
+/*
+ * get the channel url at specified position
+ *
+ */
+const TDesC& CIRPresetImpl::GetChannelUrlAt(TInt aIndex) const
+{
+    return iUrlArray->At(aIndex)->GetServerUrl();
+}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetUrl()
+// Function to get iLanguageCode
+// ---------------------------------------------------------------------------
+//
+CIRChannelServerUrlImpl& CIRPresetImpl::GetUrl(TInt aInt)const
+	{
+	ASSERT( aInt >= 0 && aInt < iUrlArray->Count() );
+	return ((*iUrlArray->At(aInt)));
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetDescription()
+// Function to get iDescription
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetDescription() const
+	{
+	return iDescription;
+	}
+
+// ---------------------------------------------------------------------------
+//CIRPresetImpl::GetShortDescription()
+//Function to get iDescription
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetShortDescription() const
+	{
+	return iShortDesc;
+	}
+
+// ---------------------------------------------------------------------------
+//CIRPresetImpl::GetMusicStoreStatus()
+//Function to get iMusicStoreStatus
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPresetImpl::GetMusicStoreStatus() const
+	{
+	return iMusicStoreStatus;
+	}
+
+
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetChannelType()
+// Function to get iType
+// ---------------------------------------------------------------------------
+//
+TInt CIRPresetImpl::GetChannelType()const
+	{
+	return iType;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl& CIRPresetImpl::operator=(const CIRPresetImpl& preset)
+// assignment operator eg. preset1=preset2
+// shallow copy
+// ---------------------------------------------------------------------------
+//
+CIRPresetImpl& CIRPresetImpl::operator=(const CIRPresetImpl& aPreset)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::operator=" );
+    if(&aPreset == this)
+		{
+		return *this;
+		}
+	//copy data members
+	iUniqId = aPreset.iUniqId;
+ 	iPresetId = aPreset.iPresetId;
+
+	TRAP_IGNORE(SetNameL(aPreset.Name()))
+
+	iLanguageCode.Close();
+	iLanguageCode.Create(aPreset.iLanguageCode);
+
+	iLanguage.Close();
+	iLanguage.Create(aPreset.iLanguage);
+
+	iCountryCode.Close();
+	iCountryCode.Create(aPreset.iCountryCode);
+
+	iCountry.Close();
+	iCountry.Create(aPreset.iCountry);
+
+	iLastModified.Close();
+	iLastModified.Create(aPreset.iLastModified);
+
+	iAdvertisementUrl.Close();
+	iAdvertisementUrl.Create(aPreset.iAdvertisementUrl);
+
+	iAdvertisementInUse.Close();
+	iAdvertisementInUse.Create(aPreset.iAdvertisementInUse);
+
+	iImgUrl.Close();
+	iImgUrl.Create(aPreset.iImgUrl);
+
+	iLogoData.Close();
+	iLogoData.Create( aPreset.iLogoData );
+
+	iDescription.Close();
+	iDescription.Create(aPreset.iDescription);
+
+	iShortDesc.Close();
+	iShortDesc.Create(aPreset.iShortDesc);
+	
+	iMusicStoreStatus.Close();
+	iMusicStoreStatus.Create(aPreset.iMusicStoreStatus);
+
+	iGenereName.Close();
+	iGenereName.Create(aPreset.iGenereName);
+
+	iGenereId.Close();
+	iGenereId.Create(aPreset.iGenereId);
+
+	iChannelUrlCount = aPreset.iChannelUrlCount;
+	iType = aPreset.iType;  //0 for user defined 1 for isds type.
+	for(TInt cnt=0;cnt<iChannelUrlCount;cnt++)
+		{
+		ASSERT( cnt >= 0 && cnt < aPreset.iUrlArray->Count() );
+		TRAPD(errUrl,SetUrlL(aPreset.iUrlArray->At(cnt)->GetServerName(),
+							 aPreset.iUrlArray->At(cnt)->GetServerUrl(),
+							 aPreset.iUrlArray->At(cnt)->GetBitRate()))
+		if(errUrl!=KErrNone)
+			{
+			return *this ;
+			}
+		}
+	IRLOG_DEBUG( "CIRPresetImpl::operator= - Exiting." );
+ 	return *this;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::CIRPresetImpl()
+// default C++ constructor
+// standard two phased constructor
+// ---------------------------------------------------------------------------
+CIRPresetImpl::CIRPresetImpl()
+	{
+	// no implementation
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::CIRPresetImpl()
+// default C++ constructor
+// standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::ExternalizeL(RWriteStream& aWriteStream)const
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::ExternalizeL" );
+//! externalize TInts s
+	aWriteStream.WriteUint32L(iUniqId);
+	aWriteStream.WriteInt32L(iPresetId);
+	aWriteStream.WriteInt32L(iType);
+	aWriteStream.WriteInt32L(iChannelUrlCount);
+
+	//Externalize HBufC s
+	//algo
+	//1.check if data is present for the particular member variable
+	//2.if yes get the length of the data and externalize the length and then the data
+	//3.if no data is present write the length as 0.
+	TInt len = 0;
+	if(!iLanguageCode.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iLanguageCode.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iLanguageCode;
+		}
+
+	if(!iLanguage.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iLanguage.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iLanguage;
+		}
+
+	if(!iCountryCode.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iCountryCode.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iCountryCode;
+		}
+
+	if(!iCountry.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iCountry.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iCountry;
+		}
+
+	if(!iGenereName.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iGenereName.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iGenereName;
+		}
+
+	if(!iGenereId.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iGenereId.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iGenereId;
+		}
+
+	if(!iLastModified.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iLastModified.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iLastModified;
+		}
+
+	if(!iAdvertisementUrl.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iAdvertisementUrl.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iAdvertisementUrl;
+		}
+
+	if(!iAdvertisementInUse.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iAdvertisementInUse.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iAdvertisementInUse;
+		}
+
+	if(!iImgUrl.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iImgUrl.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iImgUrl;
+		}
+
+	if(!iDescription.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iDescription.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iDescription;
+		}
+
+	if(!iShortDesc.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iShortDesc.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iShortDesc;
+		}
+
+	if(!iMusicStoreStatus.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iMusicStoreStatus.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iMusicStoreStatus;
+		}
+
+	if(!iLogoData.Length())
+		{
+		len=0;
+		aWriteStream.WriteInt32L(len);
+		}
+	else
+		{
+		len=iLogoData.Length();
+		aWriteStream.WriteInt32L(len);
+		aWriteStream<<iLogoData;
+		}
+
+	//externalizing the preset data
+	for(TInt cnt=0;cnt<iChannelUrlCount;cnt++)
+		{
+		GetUrl(cnt).ExternalizeL(aWriteStream);
+		}
+	
+	//added by Peter on June 23rd, 2009
+	aWriteStream.WriteInt32L(iPlayedTimes);
+	
+	IRLOG_DEBUG( "CIRPresetImpl::ExternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::CIRPresetImpl()
+// Internalizes the preset data
+// required for being derived from CPSPresetInterface
+// ---------------------------------------------------------------------------
+//
+ void CIRPresetImpl::InternalizeL(RReadStream& aReadStream)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::InternalizeL" );
+	//! Internalize TInts s
+	iUniqId = aReadStream.ReadUint32L();
+	iPresetId=aReadStream.ReadInt32L();
+	iType=aReadStream.ReadInt32L();
+	iChannelUrlCount=aReadStream.ReadInt32L();
+	TInt len = 0;
+
+	//algo
+	//1.get the length of the data
+	//2.read that many bytes
+	//3.if read length is zero. skip.
+	len=aReadStream.ReadInt32L();
+	iLanguageCode.Close();
+	if(len!=0)
+		{
+		iLanguageCode.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iLanguage.Close();
+	if(len!=0)
+		{
+		iLanguage.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iCountryCode.Close();
+	if(len!=0)
+		{
+		iCountryCode.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iCountry.Close();
+	if(len!=0)
+		{
+		iCountry.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iGenereName.Close();
+	if(len!=0)
+		{
+		iGenereName.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iGenereId.Close();
+	if(len!=0)
+		{
+		iGenereId.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iLastModified.Close();
+	if(len!=0)
+		{
+		iLastModified.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iAdvertisementUrl.Close();
+	if(len!=0)
+		{
+		iAdvertisementUrl.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iAdvertisementInUse.Close();
+	if(len!=0)
+		{
+		iAdvertisementInUse.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iImgUrl.Close();
+	if(len!=0)
+		{
+		iImgUrl.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iDescription.Close();
+	if(len!=0)
+		{
+		iDescription.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iShortDesc.Close();
+	if(len!=0)
+		{
+		iShortDesc.CreateL(aReadStream,len);
+		}
+
+	len=aReadStream.ReadInt32L();
+	iMusicStoreStatus.Close();
+	if(len!=0)
+		{
+		iMusicStoreStatus.CreateL(aReadStream,len);	
+		}
+	
+
+	len=aReadStream.ReadInt32L();
+	iLogoData.Close();
+	if(len!=0)
+		{
+		iLogoData.CreateL(aReadStream,len);
+		}
+
+	//internalizing the preset data
+	CIRChannelServerUrlImpl *url = NULL;
+	for(TInt cnt=0;cnt<iChannelUrlCount;cnt++)
+		{
+		url = CIRChannelServerUrlImpl::NewLC();
+		url->InternalizeL(aReadStream);
+		iUrlArray->AppendL(url);
+	    CleanupStack::Pop(url);
+		}
+	
+	iPlayedTimes = aReadStream.ReadInt32L();
+	IRLOG_DEBUG( "CIRPresetImpl::InternalizeL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRPresetImpl::CIRIsdsPresetToCIRPresetImpl(const CIRIsdsPreset& aIsdsPreset)
+// used to convert the isdspresets to plugnized presets.
+// Does a deep copy for all the member variables
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::CIRIsdsPresetToCIRPresetImpl(const CIRIsdsPreset& aIsdsPreset)
+ 	{
+	IRLOG_DEBUG( "CIRPresetImpl::CIRIsdsPresetToCIRPresetImpl" );
+	iUniqId = aIsdsPreset.UniqId();
+ 	iPresetId = aIsdsPreset.GetId();
+	iChannelUrlCount = aIsdsPreset.GetUrlCount();
+	iType = aIsdsPreset.GetChannelType();  //0 for user defined 1 for isds type.
+
+    TRAP_IGNORE( SetNameL( aIsdsPreset.GetName() ) )
+    SetLangCode( aIsdsPreset.GetLangId() );
+
+	SetLogoData( aIsdsPreset.GetLogoData() );
+    SetLang( aIsdsPreset.GetLangName() );
+    SetCountryCode( aIsdsPreset.GetCountryId() );
+    SetCountryName( aIsdsPreset.GetCountryName() );
+    SetLastModifiedTime( aIsdsPreset.GetLastModifiedTime() );
+    SetAdvertisementUrl( aIsdsPreset.GetAdvertisementUrl() );
+    SetAdvertisementInUse( aIsdsPreset.GetAdvertisementInUse() );
+    SetImgUrl( aIsdsPreset.GetImgUrl() );
+    SetDescription( aIsdsPreset.GetDescription() );
+    SetShortDesc( aIsdsPreset.GetShortDescription() );
+    SetMusicStoreStatus(aIsdsPreset.GetMusicStoreStatus());
+    SetGenreInfo( aIsdsPreset.GetGenreId(), aIsdsPreset.GetGenreName() );
+
+
+    iUrlArray->ResetAndDestroy();
+
+	for(TInt cnt=0;cnt<aIsdsPreset.GetUrlCount();cnt++)
+		{
+		ASSERT( cnt >= 0 && cnt < aIsdsPreset.iUrlArray->Count() );
+		TRAPD(errUrl,SetUrlL(aIsdsPreset.iUrlArray->At(cnt)->GetServerName(),
+							 aIsdsPreset.iUrlArray->At(cnt)->GetServerUrl(),
+							 aIsdsPreset.iUrlArray->At(cnt)->GetBitRate()))
+		if(errUrl!=KErrNone)
+			{
+			return ;
+			}
+		}
+	IRLOG_DEBUG( "CIRPresetImpl::CIRIsdsPresetToCIRPresetImpl - Exiting." );
+ 	}
+/*
+// ---------------------------------------------------------------------------
+// void CIRPresetImpl::UserDefinedPresetToCIRPresetImpl
+// used to convert the userdefined preset to plugnized presets.
+// Does a deep copy for all the member variables
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::UserDefinedPresetToCIRPresetImpl(const TDesC& aName,
+	const TDesC& aURl,TInt aId,TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::UserDefinedPresetToCIRPresetImpl" );
+	iPresetId=aId;
+	TRAP_IGNORE(SetNameL(aName))
+	SetChannelType(0);//type set to user defined
+	//done to match the API,new API should be exposed by DS to accept only Url
+	_LIT(KServerName,"NA");
+	//copy the url
+	TRAPD(errUrl,SetUrlL(KServerName,aURl,0))
+	if(errUrl!=KErrNone)
+		{
+	    IRLOG_ERROR2( "CIRPresetImpl::UserDefinedPresetToCIRPresetImpl - SetUrlL left with %d.", errUrl );
+		return ; // WHATTHEHECK
+		}
+	// manually added channels have only one channel url
+    SetUrlCount(1);
+	IRLOG_DEBUG( "CIRPresetImpl::UserDefinedPresetToCIRPresetImpl - Exiting." );
+	}
+*/
+
+// ---------------------------------------------------------------------------
+//CIRPresetImpl::CopyPresetData()
+// copy data to CIRIsdsPreset
+// ---------------------------------------------------------------------------
+//
+void CIRPresetImpl::CopyPresetData(CIRIsdsPreset& aIsdsPreset) const
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::CopyPresetData" );
+	aIsdsPreset.SetUniqId( this->Id() );
+	aIsdsPreset.SetId( iPresetId );
+	aIsdsPreset.SetUrlCount( iChannelUrlCount );
+	aIsdsPreset.SetChannelType( iType );  //0 for user defined 1 for isds type.
+	//algo
+	//1.check if the CIRIsdsPreset,member contains any data
+	//2.if yes delete it and set it to null
+	//3.allocate memory and copy data
+	aIsdsPreset.SetGenreName( iGenereName );
+	aIsdsPreset.SetGenreId( iGenereId );
+	aIsdsPreset.SetLangCode( iLanguageCode );
+
+	aIsdsPreset.SetLogoData(iLogoData);
+	aIsdsPreset.SetLang( iLanguage );
+	aIsdsPreset.SetCountryCode( iCountryCode );
+	aIsdsPreset.SetCountryName( iCountry );
+	aIsdsPreset.SetName( Name() );
+	aIsdsPreset.SetLastModifiedTime( iLastModified );
+	aIsdsPreset.SetAdvertisementUrl( iAdvertisementUrl );
+	aIsdsPreset.SetAdvertisementInUse( iAdvertisementInUse );
+	aIsdsPreset.SetImgUrl( iImgUrl );
+	aIsdsPreset.SetDescription( iDescription );
+	aIsdsPreset.SetShortDesc( iShortDesc );
+	aIsdsPreset.SetMusicStoreStatus( iMusicStoreStatus );
+
+    aIsdsPreset.iUrlArray->ResetAndDestroy();
+
+	for(TInt cnt=0;cnt<iChannelUrlCount;cnt++)
+		{
+		ASSERT( cnt >= 0 && cnt < iUrlArray->Count() );
+		TRAPD(errUrl,aIsdsPreset.SetUrlL(iUrlArray->At(cnt)->GetServerName(),
+										 iUrlArray->At(cnt)->GetServerUrl(),
+										 iUrlArray->At(cnt)->GetBitRate()))
+		if(errUrl!=KErrNone)
+			{
+			return ;
+			}
+		}
+	IRLOG_DEBUG( "CIRPresetImpl::CopyPresetData - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRPresetImpl::GetAvailableBitrates()
+// Function to get available bitrates
+// ---------------------------------------------------------------------------
+//
+RArray<TInt>& CIRPresetImpl::GetAvailableBitrates()
+	{
+	IRLOG_DEBUG( "CIRPresetImpl::GetAvailableBitrates" );
+	iBitrateArray.Reset();
+	//creates an array of bitrates(int)that are available for a particular preset
+	for(TInt loop=0;loop<iUrlArray->Count();loop++)
+		{
+		iBitrateArray.InsertInOrder(iUrlArray->At(loop)->GetBitRate());
+		}
+	IRLOG_DEBUG( "CIRPresetImpl::GetAvailableBitrates - Exiting." );
+	return iBitrateArray;
+	}
+
+//----------------------------------------------------------------------------
+// TInt UniqId()
+//----------------------------------------------------------------------------
+TUint32 CIRPresetImpl::UniqId()
+	{
+	return iUniqId;
+	}
+//----------------------------------------------------------------------------
+//  SetUniqId(TInt)
+//----------------------------------------------------------------------------
+void CIRPresetImpl::SetUniqId( TUint32 aId)
+	{
+	iUniqId = aId;
+	}
+
+/*
+ * Returns the played times of the channel
+ */
+TInt CIRPresetImpl::GetPlayedTimes() const
+{
+    return iPlayedTimes;
+}
+
+/*
+ * Set the played times of the channel
+ */
+void CIRPresetImpl::SetPlayedTimes(TInt aPlayedTimes)
+{
+    iPlayedTimes = aPlayedTimes;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/presetpluginsrc/irpresetpluginproxy.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <implementationproxy.h>
+
+#include "irpresetimpl.h"
+
+// The implementation proxy table that lists all interfaces and their implementations contained within this plugin.
+const TImplementationProxy KIRPresetPluginImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY( 0x10009DC1, CIRPresetImpl:: NewL) 
+    };
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Entry point for ECOM plugins.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( 
+	TInt& aTableCount )
+    {
+    aTableCount = sizeof( KIRPresetPluginImplementationTable ) / 
+    	sizeof( TImplementationProxy );
+    return KIRPresetPluginImplementationTable;
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/01/internetradio_01.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[90] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regions"
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add your station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Intern. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[11]:%1N result"
+#define qtn_ir_search_results "%0U[09]:%1N results"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[89] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/01/internetradioai_01.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/01/terms_01.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,163 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Internet Radio service (“Serviceâ€) enables you to discover and experience the content of Internet radio stations. YOU AGREE THAT YOUR USE OF THE SERVICE ACKNOWLEDGES THAT YOU HAVE READ THIS AGREEMENT, YOU HAVE UNDERSTOOD IT AND YOU AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS. If you do not agree, please note that you will not be allowed to use the Service.</p>
+
+<p></p>
+
+<h1>1. DEFINITIONS</h1>
+
+<p></p>
+
+<p>Internet radio stations are entities that generally produce and distribute audio content and related metadata over the Internet in a stream.</p>
+
+<p></p>
+
+<p>The link to the Internet radio station is a resource locator or a set of resource locators that enable the user to access the content streamed by the Internet radio station.</p>
+
+<p></p>
+
+<h1>2. THE SERVICE</h1>
+
+<p></p>
+
+<p>The Service enables the following:</p>
+<p>1. browsing of links to Internet radio stations;</p>
+<p>2. accessing the content of Internet radio stations;</p>
+
+<p></p>
+
+<h1>3. USE OF THE SERVICE</h1>
+
+<p></p>
+
+<p>Use of the Service is only permitted for your private and non-commercial use. Nokia shall own all intellectual property rights relating to the Service.</p>
+
+<p></p>
+
+<p>Nokia reserves the right to change these terms and conditions by informing you of such change.</p>
+
+<p></p>
+
+<h1>4. PRIVACY</h1>
+
+<p></p>
+
+<p>Nokia is committed to protecting user privacy, and thus implements strict confidentiality policies.</p>
+
+<p></p>
+
+<p>In order to monitor the use of and to improve the Service, Nokia may collect usage data including, but not limited to, information about the Internet radio stations accessed, the time spent on each station and the items rated as favourites.</p>
+
+<p></p>
+
+<p>Nokia does not collect any information that allows identification of the user of the Service.</p>
+
+<p></p>
+
+<h1>5. SERVICE AVAILABILITY</h1>
+
+<p></p>
+
+<p>The Service is provided as a convenience to you. It is provided "as is" and on an "as available" basis. Nokia does not guarantee that the Service shall be uninterrupted or error-free. Nokia reserves the right to revise the Service or withdraw access to it at any time.</p>
+
+<p></p>
+
+<p>Nokia may provide upgrades for software applications related to the Service at its sole discretion.</p>
+
+<p></p>
+
+<h1>6. DISCLAIMER AND LIABILITY</h1>
+
+<p></p>
+
+<p>For your ease of accessibility, Nokia may include links to Internet radio stations that are owned or operated by third parties. Nokia does not guarantee that the links to Internet radio stations will be operational. In addition, the content that is not related to Nokia does not imply whatsoever that Nokia endorses the content as such or the products or services referenced in such content.</p>
+
+<p></p>
+
+<p>You must review and agree to each station's rules of use, if any, before accessing it. You also agree that Nokia has no control over the content of third-party services and cannot assume any responsibility for the content provided by Internet radio stations.</p>
+
+<p></p>
+
+<p>Accessing the content of Internet radio stations using the Service may involve the transmission of large amounts of data through your service provider's network. Contact your service provider for information about data transmission charges. Note that using the Service with Internet radio stations that are delivering higher bit rate streams to you may incur higher costs associated with data traffic.</p>
+
+<p></p>
+
+<p>The data traffic associated with the usage of the Service may include the following at least: updating the content of the stations’ directory, streaming data from the Internet radio station, collecting statistical data and upgrading the Internet radio application.</p>
+
+<p></p>
+
+<p>Nokia is not liable for the costs of data traffic associated with your use of the Service.</p>
+
+<p></p>
+
+<p>NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF TITLE OR NON-INFRINGEMENT OR IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, IS MADE IN RELATION TO THE AVAILABILITY, ACCURACY, RELIABILITY OR CONTENT OF THE SERVICE. NOKIA SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR FOR BUSINESS INTERRUPTION ARISING OUT OF THE USE OF OR INABILITY TO USE THE SERVICE, EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW EXCLUSION OF CERTAIN WARRANTIES OR LIMITATIONS OF LIABILITY, SO THE ABOVE LIMITATIONS OR EXCLUSIONS MAY NOT APPLY TO YOU. THE LIABILITY OF NOKIA WOULD IN SUCH CASE BE LIMITED TO THE GREATEST EXTENT PERMITTED BY LAW.</p>
+
+<p></p>
+
+<p>Nothing contained herein shall prejudice the statutory rights of any party dealing as a consumer. Nothing contained herein limits Nokia's liability in the event of death or personal injury resulting from Nokia's negligence.</p>
+
+<p></p>
+
+<h1>7. POLICY REGARDING ALLEGATIONS OF COPYRIGHT INFRINGEMENT</h1>
+
+<p></p>
+
+<p>If you believe that your copyrighted work has been handled in a way that constitutes copyright infringement, you may notify Nokia by providing a notification including the following:</p>
+
+<p></p>
+
+<p>(1) A physical or electronic signature of a person authorised to act on behalf of the owner of the exclusive right that is allegedly infringed;</p>
+
+<p></p>
+
+<p>(2) Identification or description of the copyrighted work claimed to have been infringed;</p>
+
+<p></p>
+
+<p>(3) Identification or description of the material that is claimed to be infringing and information reasonably sufficient to locate the material;</p>
+
+<p></p>
+
+<p>(4) Your name, address, telephone number, e-mail address and any other information that will permit Nokia to contact you;</p>
+
+<p></p>
+
+<p>(5) A statement that you believe, in good faith, that use of the material in the manner on which this complaint is based is not authorised by the copyright owner, its agent or the law; and</p>
+
+<p></p>
+
+<p>(6) A statement that the information in the notification is accurate and, under penalty of perjury, that you are authorised to act on behalf of the owner of an exclusive right that is allegedly infringed.</p>
+
+<p></p>
+
+<p>The notification must be sent to our Designated Agent address at:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GOVERNING LAW</h1>
+
+<p></p>
+
+<p>As used in these terms and conditions, "Nokia" means Nokia Corporation. Nokia operates and controls the Service from locations within Finland. As such, the information contained on the Service hereby is deemed to be provided in Finland.</p>
+
+<p></p>
+
+<p>Except where prohibited by applicable law, these terms and conditions shall be governed by the laws of Finland without regard to conflict of law provisions. For US residents: These terms and conditions shall be governed by the laws of Texas.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. All rights reserved.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/02/internetradio_02.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Toujours demander"
+#define qtn_ir_active_idle_data "%0U - %1U : %2U"
+#define qtn_ir_added_multi "%N stations enregistrées"
+#define qtn_ir_added_single "%U[85] enregistrée"
+#define qtn_ir_addmanually_unnamed "Sans nom"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "URL du flux"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U : %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio non active"
+#define qtn_ir_app_general_err "Erreur interne. Redémarrez l'application."
+#define qtn_ir_apps_grid "Radio Int."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Qual. optimale"
+#define qtn_ir_bitrate_high "Haute qualité"
+#define qtn_ir_bitrate_standard "Qual. standard"
+#define qtn_ir_cost_heading "Avis important"
+#define qtn_ir_cost_softkey_continue "Continuer"
+#define qtn_ir_cost_softkey_exit "Quitter"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet utilise la connexion de données du téléphone pour la transmission des signaux radio. Uniquement conseillé si vous avez opté pour un forfait de données. En cas de doute, contactez votre opérateur avant de continuer."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Pays/régions"
+#define qtn_ir_discover_beststations "Sélection meilleures stations"
+#define qtn_ir_discover_country_region "Recherche par pays/rég."
+#define qtn_ir_discover_genre "Rechercher par genre"
+#define qtn_ir_discover_genre_expanded "Stations triées par genre"
+#define qtn_ir_discover_langauge "Rechercher par langue"
+#define qtn_ir_discover_language_expanded "Stations triées par langue"
+#define qtn_ir_discover_staticountryreg "Stations triées par pays/rég."
+#define qtn_ir_discover_title "Répert. stations"
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Modifier station"
+#define qtn_ir_err_operation "Erreur de fonctionnement. Réessayez."
+#define qtn_ir_err_url_unavail "URL non disponible"
+#define qtn_ir_error_address "Adresse de station de radio Internet incorrect"
+#define qtn_ir_error_connection "Délai connexion dépassé. Réessayez."
+#define qtn_ir_error_favourites "Espace insuffisant dans les favoris pour enregistrer la sélection"
+#define qtn_ir_error_general "Impossible de se connecter à la station"
+#define qtn_ir_error_isds_unavailable "Service de répertoire des stations Internet temporairement indisponible"
+#define qtn_ir_error_notavailable "Aucun lien de flux disponible"
+#define qtn_ir_error_notinisds "Plus disponible"
+#define qtn_ir_error_search "Entrez le terme à rechercher"
+#define qtn_ir_findst_addstation "Ajouter station manu."
+#define qtn_ir_findst_addtofav "Ajouter la station aux Favoris"
+#define qtn_ir_findst_browsesds "Parcourir répert. stations"
+#define qtn_ir_findst_search_ensrhterm "Entrez le terme à rechercher"
+#define qtn_ir_findst_softkey_search "Rechercher"
+#define qtn_ir_findstation_title "Rech. station"
+#define qtn_ir_firstuse_title "Radio Int. : Bienvenue"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Aucun historique"
+#define qtn_ir_homescreen_buffering "Mise en tampon"
+#define qtn_ir_homescreen_lastplayed "Dernière écoutée"
+#define qtn_ir_info_details_bitrate "%N Kbits/s :"
+#define qtn_ir_info_details_countryregi "Pays/Région :"
+#define qtn_ir_info_details_description "Description :"
+#define qtn_ir_info_details_genre "Genre(s) :"
+#define qtn_ir_info_details_language "Langue :"
+#define qtn_ir_info_details_name "Nom :"
+#define qtn_ir_info_details_streams "Flux :"
+#define qtn_ir_info_details_title "Infos station"
+#define qtn_ir_info_details_type "Type :"
+#define qtn_ir_info_details_type_isds "Rép. stat."
+#define qtn_ir_info_details_type_manual "Déf. util."
+#define qtn_ir_info_details_unnamed "Sans nom"
+#define qtn_ir_info_softkey_close "Fermer"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Langues"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Chargement"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Recherche en cours"
+#define qtn_ir_main_descriptive_text "'Rechercher stations' ds barre outils pour ajouter"
+#define qtn_ir_main_discover_expanded "Rechercher nouvelles stations"
+#define qtn_ir_main_last "Dernière écoutée"
+#define qtn_ir_main_now "En écoute"
+#define qtn_ir_main_prog_deleting "Suppression de %N"
+#define qtn_ir_main_searchindir "Rechercher ds répertoire"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Station sans nom"
+#define qtn_ir_memlo_ram_out_of_mem "Espace mémoire insuffisant pour exécuter cette opération. Supprimez d'abord certaines données."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N Kbits/s"
+#define qtn_ir_now_bitrate_mbps "%N Mbit/s"
+#define qtn_ir_now_bytecountermb "%N Mo"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N Mo"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Station suivante"
+#define qtn_ir_now_tooltip_play "Lire"
+#define qtn_ir_now_tooltip_previous "Station précédente"
+#define qtn_ir_now_tooltip_stop "Arrêter"
+#define qtn_ir_now_wait_buffering "Mise en tampon"
+#define qtn_ir_now_wait_buffering_perc "Mise en mémoire tampon %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Aucune connexion au réseau"
+#define qtn_ir_nwcontroller_err_nosnaps "Aucun point d'accès défini"
+#define qtn_ir_options_add "Ajouter aux Favoris"
+#define qtn_ir_options_add_manually "Ajouter station manu."
+#define qtn_ir_options_change "Changer"
+#define qtn_ir_options_clearhistory "Effacer l'historique"
+#define qtn_ir_options_editstation "Modifier station"
+#define qtn_ir_options_equalizer "Egaliseur"
+#define qtn_ir_options_exit "Quitter"
+#define qtn_ir_options_findnmusicstore "Recherch. ds Music Store"
+#define qtn_ir_options_fmtrans "Emetteur FM"
+#define qtn_ir_options_gotomusicstore "Aller à Music Store"
+#define qtn_ir_options_help "Aide"
+#define qtn_ir_options_history "Historique"
+#define qtn_ir_options_info "Informations station"
+#define qtn_ir_options_mainview "Aller à l'affichage princ."
+#define qtn_ir_options_mark "Marquer"
+#define qtn_ir_options_markall "Marquer tout"
+#define qtn_ir_options_markunmark "Sélectionner/Désélect."
+#define qtn_ir_options_now "Aller à En écoute"
+#define qtn_ir_options_off "Désactiver"
+#define qtn_ir_options_on "Activer"
+#define qtn_ir_options_searchag "Nouvelle recherche"
+#define qtn_ir_options_select "Sélectionner"
+#define qtn_ir_options_settings "Paramètres"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Elargissement stéréo"
+#define qtn_ir_options_unmark "Enlever"
+#define qtn_ir_options_unmarkall "Tout enlever"
+#define qtn_ir_playfail_err "Echec de l'écoute de la radio"
+#define qtn_ir_playlist_title "Liens reçus"
+#define qtn_ir_popup_no_results "Aucun résultat"
+#define qtn_ir_popup_toomany_results "Trop de résultats. Précisez le terme à rechercher."
+#define qtn_ir_results_none "Aucune station correspondante trouvée. Recherchez à nouveau."
+#define qtn_ir_search_result "%0U[09] :%1N résultat"
+#define qtn_ir_search_results "%0U[09] :%1N résult."
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Débit binaire conn. 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Débit binaire conn. GPRS"
+#define qtn_ir_settings_network "Connexion réseau"
+#define qtn_ir_settings_snap_default "Connexion par défaut"
+#define qtn_ir_settings_title "Paramètres"
+#define qtn_ir_settings_wifi "Débit binaire conn. WiFi"
+#define qtn_ir_softkey_back "Retour"
+#define qtn_ir_softkey_cancel "Annuler"
+#define qtn_ir_softkey_done "Terminé"
+#define qtn_ir_softkey_no "Non"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Sélectionner"
+#define qtn_ir_softkey_yes "Oui"
+#define qtn_ir_station_saved "Station enregistrée"
+#define qtn_ir_stationlist_nomatches "(aucun résultat)"
+#define qtn_ir_stations_popup_delete "Supprimer\n%U[77] ?"
+#define qtn_ir_stations_popup_delete_many "Supprimer %N stations ?"
+#define qtn_ir_stations_popup_removed "%U[86] supprimée"
+#define qtn_ir_stations_popup_removed_many "%N stations supprimées"
+#define qtn_ir_stations_popup_save "Enregistrer la station dans les Favoris ?"
+#define qtn_ir_suboptions_delete "Supprimer"
+#define qtn_ir_suboptions_details "Détails"
+#define qtn_ir_suboptions_move "Déplacer"
+#define qtn_ir_terms_details "En acceptant les Termes et conditions ci-dessous, vous concluez un contrat dans la mesure autorisée par la législation en vigueur, sans autre limitation ou interdiction quant à tous les droits matériels"
+#define qtn_ir_terms_heading "Termes et conditions"
+#define qtn_ir_terms_softkey_accept "Accepter"
+#define qtn_ir_terms_softkey_decline "Décliner"
+#define qtn_ir_title_history "Historique"
+#define qtn_ir_tooltip_addalltofav "Ajouter tt aux Favoris"
+#define qtn_ir_tooltip_addstation "Ajouter station manu."
+#define qtn_ir_tooltip_addtofav "Ajouter aux Favoris"
+#define qtn_ir_tooltip_copy "Copier"
+#define qtn_ir_tooltip_findnstore "Rech. ds Music Store"
+#define qtn_ir_tooltip_findst "Rechercher stations"
+#define qtn_ir_tooltip_history "Historique"
+#define qtn_ir_tooltip_listen "Ecouter"
+#define qtn_ir_tooltip_paste "Coller"
+#define qtn_ir_tooltip_stationde "Détails de la station"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nom"
+#define qtn_ir_url_title "Ajouter station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/02/internetradioai_02.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/02/terms_02.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Le service de radio Internet de Nokia (le « Service ») vous permet de découvrir et de profiter du contenu de stations de radio Internet. VOUS ATTESTEZ QUE VOTRE UTILISATION DU SERVICE SIGNIFIE QUE VOUS AVEZ LU LE PRÉSENT CONTRAT, EN AVEZ COMPRIS LES TERMES ET CONSENTEZ À ÊTRE LIÉ PAR SES DISPOSITIONS. Dans le cas contraire, vous n'êtes pas autorisé à utiliser le Service.</p>
+
+<p></p>
+
+<h1>1. DÉFINITIONS</h1>
+
+<p></p>
+
+<p>Une station de radio Internet désigne une personne morale qui, de façon générale, produit et diffuse du contenu audio et des métadonnées y afférentes sur Internet par le biais d'un flux.</p>
+
+<p></p>
+
+<p>Un lien vers une station de radio Internet désigne une ou plusieurs adresses URL permettant à l'utilisateur d'accéder au contenu diffusé par une station de radio Internet.</p>
+
+<p></p>
+
+<h1>2. SERVICE</h1>
+
+<p></p>
+
+<p>Le Service permet d'effectuer les opérations suivantes :</p>
+<p>1. consultation de liens vers des stations de radio Internet</p>
+<p>2. accès au contenu de stations de radio Internet</p>
+
+<p></p>
+
+<h1>3. UTILISATION DU SERVICE</h1>
+
+<p></p>
+
+<p>L'utilisation du Service est autorisée exclusivement pour votre usage privé et non commercial. Nokia est détenteur de l'intégralité des droits de propriété intellectuelle sur le Service.</p>
+
+<p></p>
+
+<p>Nokia se réserve le droit d'apporter des modifications aux présentes dispositions, sous réserve d'un avis vous étant adressé en ce sens.</p>
+
+<p></p>
+
+<h1>4. CONFIDENTIALITÉ</h1>
+
+<p></p>
+
+<p>Nokia s'engage à respecter la vie privée des utilisateurs et, à ces fins, applique des mesures strictes de confidentialité.</p>
+
+<p></p>
+
+<p>Aux fins du contrôle des utilisations du Service et de son amélioration, Nokia est susceptible de recueillir des données sur l'utilisation, notamment, mais sans s'y limiter, des informations sur les stations de radio Internet auxquels les utilisateurs accèdent, le temps passé par ces derniers sur chaque station et les stations ajoutées à leurs favoris.</p>
+
+<p></p>
+
+<p>Nokia ne recueille aucune information permettant d'identifier personnellement un utilisateur du Service.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILITÉ DU SERVICE</h1>
+
+<p></p>
+
+<p>Le service vous est proposé à des fins de commodité. Il vous est fourni en l'état et sous réserve de sa disponibilité. Nokia ne garantit pas la continuité ni l'absence d'erreurs du Service. Nokia se réserve le droit de modifier le Service ou de supprimer l'accès à celui-ci à tout moment.</p>
+
+<p></p>
+
+<p>Nokia peut, à son entière discrétion, fournir des mises à niveau pour les applications logicielles liées au Service.</p>
+
+<p></p>
+
+<h1>6. RESPONSABILITÉ</h1>
+
+<p></p>
+
+<p>Pour faciliter votre accès, Nokia peut inclure des liens vers des stations de radio Internet détenues ou exploitées par des tiers. Nokia ne garantit pas le caractère opérationnel des liens vers les stations de radio Internet. En outre, le contenu non associé à Nokia n'implique d'aucune façon que Nokia assume une quelconque responsabilité vis-à-vis du contenu en tant que tel ou des produits ou services visés dans ledit contenu.</p>
+
+<p></p>
+
+<p>Avant d'accéder à une station, vous devez, le cas échéant, consulter et respecter les règles d'utilisation de ladite station. Vous convenez également que Nokia n'a aucun contrôle sur le contenu des services de tiers et ne peut assumer une quelconque responsabilité vis-à-vis du contenu proposé par les stations de radio Internet.</p>
+
+<p></p>
+
+<p>L'accès au contenu des stations de radio Internet au moyen du Service peut impliquer la transmission d'un grand nombre de données sur le réseau de votre fournisseur de services. Pour plus d'informations sur les frais liés à la transmission desdites données, contactez votre fournisseur de services. Notez que l'utilisation du Service avec des stations de radio Internet proposant des flux à un débit élevé peuvent engendrer des frais supérieurs concernant le trafic de données.</p>
+
+<p></p>
+
+<p>Le trafic de données lié à l'utilisation du Service peut inclure au minimum les opérations suivantes : mise à jour du contenu du répertoire des stations, diffusion de données par les stations de radio Internet, collecte de données statistiques et mise à niveau des applications de radio Internet.</p>
+
+<p></p>
+
+<p>Nokia n'est pas responsable des frais relatifs au trafic de données lié à votre utilisation du Service.</p>
+
+<p></p>
+
+<p>AUCUNE GARANTIE DE QUELQUE NATURE QUE CE SOIT, QU'ELLE SOIT EXPRESSE OU TACITE, NOTAMMENT, MAIS SANS S'Y LIMITER, LES GARANTIES SUR LA PROPRIÉTÉ OU L'ABSENCE DE CONTREFAÇON OU LES GARANTIES TACITES DE QUALITÉ MARCHANDE OU D'ADÉQUATION À UN BUT PARTICULIER, N'EST FORMULÉE RELATIVEMENT À LA DISPONIBILITÉ, LA PRÉCISION, LA FIABILITÉ OU LE CONTENU DU SERVICE. NOKIA NE PEUT ÊTRE TENU RESPONSABLE DE QUELCONQUES DOMMAGES DIRECTS, INDIRECTS, ACCESSOIRES OU SPÉCIAUX, DE PERTES DE BÉNÉFICES OU D'INTERRUPTIONS DE L'ACTIVITÉ LIÉS À L'UTILISATION OU À L'IMPOSSIBILITÉ D'UTILISATION DU SERVICE, MÊME SI NOKIA A ÉTÉ INFORMÉ DE LA POSSIBILITÉ DE TELS DOMMAGES. CERTAINS PAYS N'AUTORISANT PAS L'EXCLUSION DE CERTAINES GARANTIES OU RESTRICTIONS DE RESPONSABILITÉ, IL EST POSSIBLE QUE LES RESTRICTIONS OU EXCLUSIONS SUSVISÉES NE S'APPLIQUENT PAS À VOUS. DANS CE CAS, LA RESPONSABILITÉ DE NOKIA SERA LIMITÉE AU MAXIMUM AUTORISÉ PAR LA LOI.</p>
+
+<p></p>
+
+<p>Aucune des présentes dispositions ne peut porter préjudice aux droits légaux de toute partie ayant qualité de consommateur. Par ailleurs, aucune des présentes dispositions n'a pour effet de limiter la responsabilité de Nokia en cas de décès ou de dommages corporels résultant d'une faute de la part de Nokia.</p>
+
+<p></p>
+
+<h1>7. DISPOSITIONS RELATIVES AUX ALLÉGATIONS DE CONTREFAÇON DE DROITS D'AUTEUR</h1>
+
+<p></p>
+
+<p>Si vous pensez qu'une œuvre dont vous détenez les droits d'auteur a été utilisée d'une façon contrefaisant lesdits droits d'auteur, vous pouvez en avertir Nokia par voie de notification en mentionnant les éléments suivants :</p>
+
+<p></p>
+
+<p>(1) La signature physique ou électronique de la personne autorisée à agir pour le compte du détenteur du droit exclusif prétendument contrefait ;</p>
+
+<p></p>
+
+<p>(2) l'identification ou la description de l'œuvre dont les droits d'auteur ont prétendument été contrefaits ;</p>
+
+<p></p>
+
+<p>(3) l'identification ou la description du contenu prétendument contrefaisant et des informations permettant, dans une mesure raisonnable, de localiser ledit contenu ;</p>
+
+<p></p>
+
+<p>(4) vos nom, adresse, numéro de téléphone, adresse électronique et toute autre information permettant à Nokia de vous contacter ;</p>
+
+<p></p>
+
+<p>(5) une déclaration de bonne foi attestant que vous avez de bonnes raisons de penser que l'utilisation du contenu visé n'est pas autorisée par le détenteur des droits d'auteur, par son représentant ou par la loi ; et</p>
+
+<p></p>
+
+<p>(6) une déclaration sous serment attestant de l'exactitude des informations fournies dans la notification et de votre habilitation à agir pour le compte du titulaire du droit exclusif prétendument contrefait.</p>
+
+<p></p>
+
+<p>La notification doit être envoyée à notre représentant désigné à l'adresse suivante :</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. DROIT APPLICABLE</h1>
+
+<p></p>
+
+<p>Dans le cadre des présentes, « Nokia » désigne Nokia Corporation. Nokia exploite et contrôle le Service depuis des établissements situés en Finlande. Il en résulte que les informations sur le Service fournies aux présentes sont réputées avoir été fournies depuis la Finlande.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Tous droits réservés.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/03/internetradio_03.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Immer fragen"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N Sender gespeichert"
+#define qtn_ir_added_single "%U[85] gespeichert"
+#define qtn_ir_addmanually_unnamed "Unbenannt"
+#define qtn_ir_addst_description "Beschreibung"
+#define qtn_ir_addst_streamurl "Stream-URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internetradio"
+#define qtn_ir_ai_radio_not_active "Radio aus"
+#define qtn_ir_app_general_err "Interner Fehler. Programm neu starten."
+#define qtn_ir_apps_grid "Intern.radio"
+#define qtn_ir_apps_list "Internetradio"
+#define qtn_ir_apps_skey "Internetradio"
+#define qtn_ir_apps_standby "Internetradio"
+#define qtn_ir_apps_swins "Internetradio"
+#define qtn_ir_apps_wheel "Internetradio"
+#define qtn_ir_bitrate_best "Beste Qualität"
+#define qtn_ir_bitrate_high "Hohe Qualität"
+#define qtn_ir_bitrate_standard "Standardqualit."
+#define qtn_ir_cost_heading "Wichtiger Hinweis"
+#define qtn_ir_cost_softkey_continue "Fortfahren"
+#define qtn_ir_cost_softkey_exit "Schließen"
+#define qtn_ir_cost_title "Internetradio"
+#define qtn_ir_cost_warning "Internetradio ermöglicht Radiohören über die Datenverbindung des Telefons. Dies wird nur mit einem Daten-Pauschaltarif empfohlen. Erfragen Sie gegebenenfalls die Datenkosten bei Ihrem Betreiber, bevor Sie fortfahren."
+#define qtn_ir_country_list_expanded "%N Sender"
+#define qtn_ir_countryregion_title "Länd./Regionen"
+#define qtn_ir_discover_beststations "Auswahl der besten Sender"
+#define qtn_ir_discover_country_region "Nach Land/Region durchs."
+#define qtn_ir_discover_genre "Nach Genre durchsuchen"
+#define qtn_ir_discover_genre_expanded "Sender nach Genre sortiert"
+#define qtn_ir_discover_langauge "Nach Sprache durchsuch."
+#define qtn_ir_discover_language_expanded "Sender nach Sprache sortiert"
+#define qtn_ir_discover_staticountryreg "Send. nach Land/Region sort."
+#define qtn_ir_discover_title "Senderverz."
+#define qtn_ir_discover_top "Beste Sender"
+#define qtn_ir_edit_title "Sender bearb."
+#define qtn_ir_err_operation "Fehler bei aktuellem Vorgang. Bitte erneut versuchen."
+#define qtn_ir_err_url_unavail "Internetadresse nicht verfügbar"
+#define qtn_ir_error_address "Falsche Internetradio-Senderadresse"
+#define qtn_ir_error_connection "Zeitüberschreitung bei Verbindung. Bitte erneut versuchen."
+#define qtn_ir_error_favourites "Nicht genügend Platz in Favoriten, um Auswahl zu speichern"
+#define qtn_ir_error_general "Verbindung zum Sender nicht möglich"
+#define qtn_ir_error_isds_unavailable "Internet-Senderverzeichnis vorübergehend nicht erreichbar"
+#define qtn_ir_error_notavailable "Keine Streaming-Links verfügbar"
+#define qtn_ir_error_notinisds "Objekt nicht mehr verfügbar"
+#define qtn_ir_error_search "Bitte einen Suchbegriff eingeben"
+#define qtn_ir_findst_addstation "Sender manuell hinzuf."
+#define qtn_ir_findst_addtofav "Sender zu Favorit. hinzufüg."
+#define qtn_ir_findst_browsesds "Senderverz. durchsuchen"
+#define qtn_ir_findst_search_ensrhterm "Bitte Suchbegriff eingeben"
+#define qtn_ir_findst_softkey_search "Suchen"
+#define qtn_ir_findstation_title "Sender finden"
+#define qtn_ir_firstuse_title "Radio: Willkommen"
+#define qtn_ir_genre_list_expanded "%N Sender"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Kein Verlauf"
+#define qtn_ir_homescreen_buffering "Puffern von Daten"
+#define qtn_ir_homescreen_lastplayed "Zuletzt gehört"
+#define qtn_ir_info_details_bitrate "%N Kb/s:"
+#define qtn_ir_info_details_countryregi "Land/Region:"
+#define qtn_ir_info_details_description "Beschreibung:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Sprache:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Senderinfo"
+#define qtn_ir_info_details_type "Typ:"
+#define qtn_ir_info_details_type_isds "Send.-Vz."
+#define qtn_ir_info_details_type_manual "Ben.-def."
+#define qtn_ir_info_details_unnamed "Unben."
+#define qtn_ir_info_softkey_close "Schließen"
+#define qtn_ir_language_list_expanded "%N Sender"
+#define qtn_ir_language_title "Sprachen"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Daten werden geladen"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Suche läuft"
+#define qtn_ir_main_descriptive_text "Hinzufügen mit 'Sender finden' (Symbolleiste)"
+#define qtn_ir_main_discover_expanded "Neue Radiosender entdecken"
+#define qtn_ir_main_last "Zuletzt gehört"
+#define qtn_ir_main_now "Aktueller Sender"
+#define qtn_ir_main_prog_deleting "%N wird gelöscht"
+#define qtn_ir_main_searchindir "Suche in Verzeichnis"
+#define qtn_ir_main_title "Internetradio"
+#define qtn_ir_main_unnamed_station "Unben. Sender"
+#define qtn_ir_memlo_ram_out_of_mem "Nicht genügend Speicher für diesen Vorgang. Löschen Sie erst einige Daten."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N Kb/s"
+#define qtn_ir_now_bitrate_mbps "%N Mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Nächster Sender"
+#define qtn_ir_now_tooltip_play "Wiedergabe"
+#define qtn_ir_now_tooltip_previous "Vorheriger Sender"
+#define qtn_ir_now_tooltip_stop "Stopp"
+#define qtn_ir_now_wait_buffering "Puffern von Daten"
+#define qtn_ir_now_wait_buffering_perc "%N% werden gepuffert"
+#define qtn_ir_nwcontroller_err_noconnectivity "Keine Netzverbindung"
+#define qtn_ir_nwcontroller_err_nosnaps "Kein Zugangspunkt definiert"
+#define qtn_ir_options_add "Zu Favoriten hinzufügen"
+#define qtn_ir_options_add_manually "Sender manuell hinzuf."
+#define qtn_ir_options_change "Ändern"
+#define qtn_ir_options_clearhistory "Verlauf löschen"
+#define qtn_ir_options_editstation "Sender bearbeiten"
+#define qtn_ir_options_equalizer "Klangregler"
+#define qtn_ir_options_exit "Schließen"
+#define qtn_ir_options_findnmusicstore "In Music Store suchen"
+#define qtn_ir_options_fmtrans "FM-Transmitter"
+#define qtn_ir_options_gotomusicstore "Zum Music Store"
+#define qtn_ir_options_help "Hilfe"
+#define qtn_ir_options_history "Verlauf"
+#define qtn_ir_options_info "Senderinfos"
+#define qtn_ir_options_mainview "Zur Hauptansicht"
+#define qtn_ir_options_mark "Markieren"
+#define qtn_ir_options_markall "Alles markieren"
+#define qtn_ir_options_markunmark "Markierungen"
+#define qtn_ir_options_now "Zu 'Aktuelle Titel'"
+#define qtn_ir_options_off "Aus"
+#define qtn_ir_options_on "Ein"
+#define qtn_ir_options_searchag "Erneut suchen"
+#define qtn_ir_options_select "Auswählen"
+#define qtn_ir_options_settings "Einstellungen"
+#define qtn_ir_options_station "Radiosender"
+#define qtn_ir_options_stereowidening "Stereo-Raumklang"
+#define qtn_ir_options_unmark "Markierung löschen"
+#define qtn_ir_options_unmarkall "Markier. aufheben"
+#define qtn_ir_playfail_err "Radio-Wiedergabe nicht erfolgt"
+#define qtn_ir_playlist_title "Empfang. Links"
+#define qtn_ir_popup_no_results "Nichts gefunden"
+#define qtn_ir_popup_toomany_results "Zu viele Ergebnisse. Suchbegriff einengen."
+#define qtn_ir_results_none "Keine übereinstimmenden Sender gefunden. Erneut suchen."
+#define qtn_ir_search_result "%0U[09]:%1N Ergebnis"
+#define qtn_ir_search_results "%0U[06]:%1N Ergebnisse"
+#define qtn_ir_set_folder_internetradio "Internetradio"
+#define qtn_ir_set_folder_irradio "Internetradio"
+#define qtn_ir_settings_3g "Bitrate für 3G-Verbindung"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Bitrate für GPRS-Verbind."
+#define qtn_ir_settings_network "Netzverbindung"
+#define qtn_ir_settings_snap_default "Standardverbindung"
+#define qtn_ir_settings_title "Einstellungen"
+#define qtn_ir_settings_wifi "Bitrate Wi-Fi-Verbindung"
+#define qtn_ir_softkey_back "Zurück"
+#define qtn_ir_softkey_cancel "Abbruch"
+#define qtn_ir_softkey_done "Ausgeführt"
+#define qtn_ir_softkey_no "Nein"
+#define qtn_ir_softkey_options "Optionen"
+#define qtn_ir_softkey_select "Auswahl"
+#define qtn_ir_softkey_yes "Ja"
+#define qtn_ir_station_saved "Sender gespeichert"
+#define qtn_ir_stationlist_nomatches "(keine Treffer)"
+#define qtn_ir_stations_popup_delete "%U[74]\nlöschen?"
+#define qtn_ir_stations_popup_delete_many "%N Sender löschen?"
+#define qtn_ir_stations_popup_removed "%U[88] gelöscht"
+#define qtn_ir_stations_popup_removed_many "%N Sender gelöscht"
+#define qtn_ir_stations_popup_save "Sender in Favoriten speichern?"
+#define qtn_ir_suboptions_delete "Löschen"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Verschieben"
+#define qtn_ir_terms_details "Die Annahme der nachfolgenden Bedingungen begründet ein Vertragsverhältnis im gesetzlich zulässigen Umfang und ohne weitere Einschränkungen/Verbote in Bezug auf alle materiellen Rechte"
+#define qtn_ir_terms_heading "Geschäftsbedingungen"
+#define qtn_ir_terms_softkey_accept "OK"
+#define qtn_ir_terms_softkey_decline "Ablehnen"
+#define qtn_ir_title_history "Verlauf"
+#define qtn_ir_tooltip_addalltofav "Alle zu Fav. hinzufüg."
+#define qtn_ir_tooltip_addstation "Send. manuell hinzuf."
+#define qtn_ir_tooltip_addtofav "Zu Favoriten hinzufüg."
+#define qtn_ir_tooltip_copy "Kopieren"
+#define qtn_ir_tooltip_findnstore "In Music Store suchen"
+#define qtn_ir_tooltip_findst "Sender suchen"
+#define qtn_ir_tooltip_history "Verlauf"
+#define qtn_ir_tooltip_listen "Anhören"
+#define qtn_ir_tooltip_paste "Einfügen"
+#define qtn_ir_tooltip_stationde "Senderdetails"
+#define qtn_ir_top_title "Beste Sender"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Send. hinzufüg."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/03/internetradioai_03.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internetradio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/03/terms_03.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Mit dem Nokia Internet Radio Dienst („Dienst“) können Sie die Inhalte entdecken und erleben, die von Internetradiostationen zur Verfügung gestellt werden. DURCH DIE NUTZUNG DIESES DIENSTES BESTÄTIGEN SIE, DASS SIE DIESE VEREINBARUNG GELESEN UND VERSTANDEN HABEN UND DASS SIE DIE DARIN ENTHALTENEN BESTIMMUNGEN ALS RECHTSVERBINDLICH ANERKENNEN. Sollten Sie nicht damit einverstanden sein, sind Sie nicht zur Nutzung des Dienstes berechtigt.</p>
+
+<p></p>
+
+<h1>1. DEFINITIONEN</h1>
+
+<p></p>
+
+<p>Internetradiostationen sind Einrichtungen, die im Allgemeinen Audioinhalte und verwandte Metadaten produzieren und in Form von Datenströmen („Streaming“) über das Internet verbreiten.</p>
+
+<p></p>
+
+<p>Der Link zu einer Internetradiostation ist ein Quellenanzeiger oder ein Satz von Quellenanzeigern, die dem Benutzer den Zugriff auf von der Internetradiostation per Datenstrom bereitgestellte Inhalte ermöglichen.</p>
+
+<p></p>
+
+<h1>2. DER DIENST</h1>
+
+<p></p>
+
+<p>Der Dienst umfasst Folgendes:</p>
+<p>1. Bereitstellung von Links zu Internetradiostationen;</p>
+<p>2. Zugriff auf die Inhalte der Internetradiostationen;</p>
+
+<p></p>
+
+<h1>3. NUTZUNG DES DIENSTES</h1>
+
+<p></p>
+
+<p>Die Nutzung des Dienstes ist ausschließlich zu privaten, nicht kommerziellen Zwecken gestattet. Nokia besitzt alle geistigen Eigentumsrechte an diesem Dienst.</p>
+
+<p></p>
+
+<p>Nokia behält sich das Recht vor, diese Nutzungsbedingungen zu ändern und setzt Sie über eine solche Änderung in Kenntnis.</p>
+
+<p></p>
+
+<h1>4. DATENSCHUTZ</h1>
+
+<p></p>
+
+<p>Nokia verpflichtet sich zum Schutz Ihrer persönlichen Daten und setzt hierzu strenge Vertraulichkeitsrichtlinien durch.</p>
+
+<p></p>
+
+<p>Zur Nutzungsüberwachung und zur Optimierung des Dienstes erfasst Nokia ggf. Daten, darunter Daten zu den aufgerufenen Internetradiostationen, die bei jeder Station verbrachte Zeit und die Inhalte, die als Favoriten gespeichert wurden.</p>
+
+<p></p>
+
+<p>Nokia erfasst keinerlei Daten, die die Identifikation der Benutzer des Dienstes ermöglichen.</p>
+
+<p></p>
+
+<h1>5. VERFÃœGBARKEIT DES DIENSTES</h1>
+
+<p></p>
+
+<p>Der Dienst vereinfacht den Zugriff auf Inhalte von Internetradiostationen. Der Dienst wird ohne Mängelgewähr und je nach Verfügbarkeit zur Verfügung gestellt. Nokia übernimmt keine Gewähr dafür, dass der Dienst ununterbrochen und fehlerfrei zur Verfügung steht. Nokia behält sich das Recht vor, jederzeit Änderungen an dem Dienst vorzunehmen oder den Zugriff darauf zu verwehren.</p>
+
+<p></p>
+
+<p>Nokia stellt nach eigenem Ermessen ggf. Aktualisierungen für die mit dem Dienst verbundenen Softwareanwendungen zur Verfügung.</p>
+
+<p></p>
+
+<h1>6. HAFTUNGSAUSSCHLUSS UND HAFTUNG</h1>
+
+<p></p>
+
+<p>Um Ihnen den Zugriff zu erleichtern, stellt Nokia ggf. Links zu Internetradiostationen zur Verfügung, die sich im Besitz von Dritten befinden oder von Dritten betrieben werden. Nokia übernimmt keine Gewährleistung dafür, dass die Links zu den Internetradiostationen funktionsfähig sind. Darüber hinaus bedeutet die Bereitstellung von Links durch Nokia zu nicht in Bezug zu Nokia stehenden Inhalten nicht, dass Nokia die Inhalte selbst oder die Produkte oder Dienstleistungen empfiehlt, auf die in solchen Inhalten verwiesen wird.</p>
+
+<p></p>
+
+<p>Sofern vorhanden, müssen Sie die Nutzungsbedingungen jeder Station lesen und ihnen zustimmen, bevor Sie darauf zugreifen. Sie erkennen zudem an, dass Nokia keine Kontrolle über die Inhalte der Dienste Dritter ausüben und keinerlei Haftung für die von Internetradiostationen bereitgestellten Inhalte übernehmen kann.</p>
+
+<p></p>
+
+<p>Beim Zugriff auf die Inhalte von Internetradiostationen über den Dienst kann es zur Übertragung großer Datenmengen über das Netz Ihres Providers kommen. Informationen zu den Kosten von Datenübertragungen erhalten Sie bei Ihrem Provider. Hinweis: Bei der Nutzung des Dienstes in Verbindung mit Internetradiostationen, die Ihnen Datenströme mit einer höheren Bitrate senden, können ggf. höhere Kosten auf Sie zukommen.</p>
+
+<p></p>
+
+<p>Der Datenverkehr bei der Nutzung des Dienstes umfasst mindestens Folgendes: Aktualisierung der Inhalte der Stationen, Datenströme der Internetradiostation, Erfassung statistischer Daten und Aktualisierung der Software für Internetradio.</p>
+
+<p></p>
+
+<p>Nokia übernimmt keine Haftung für die Kosten des Datenverkehrs, die aus der Nutzung des Dienstes durch Sie entstehen.</p>
+
+<p></p>
+
+<p>NOKIA ÜBERNIMMT KEINE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG IN ZUSAMMENHANG MIT DER VERFÜGBARKEIT, GENAUIGKEIT, ZUVERLÄSSIGKEIT ODER DEM INHALT DES DIENSTES, DARUNTER GEWÄHRLEISTUNGEN WEGEN RECHTSMÄNGELN ODER ÜBER DIE NICHTVERLETZUNG VON RECHTEN DRITTER SOWIE STILLSCHWEIGENDE GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT ODER DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. NOKIA HAFTET NICHT FÜR DIREKTE, INDIREKTE, ZUFÄLLIGE ODER BESONDERE SCHÄDEN ODER FÜR FOLGESCHÄDEN, FÜR ENTGANGENE GEWINNE ODER FÜR GESCHÄFTSUNTERBRECHUNGEN, DIE DURCH DIE NUTZUNG ODER FEHLENDE NUTZUNGSMÖGLICHKEIT DES DIENSTES ENTSTEHEN. DAS GILT AUCH DANN, WENN NOKIA VON DER MÖGLICHKEIT SOLCHER SCHÄDEN IN KENNTNIS GESETZT WURDE. EINIGE RECHTSORDNUNGEN ERLAUBEN DEN AUSSCHLUSS BESTIMMTER GEWÄHRLEISTUNGEN ODER BESTIMMTE HAFTUNGSBESCHRÄNKUNGEN NICHT, WESHALB IN EINIGEN LÄNDERN DIE OBEN GENANNTEN BESCHRÄNKUNGEN ODER AUSSCHLÜSSE MÖGLICHERWEISE FÜR SIE NICHT GELTEN. IN EINEM SOLCHEN FALL BESCHRÄNKT SICH DIE HAFTUNG VON NOKIA AUF DAS GESETZLICHE HÖCHSTMASS.</p>
+
+<p></p>
+
+<p>Der Inhalt dieser Nutzungsbedingungen beeinträchtigt die gesetzlichen Rechte von Verbrauchern nicht. Diese Vereinbarung beschränkt die Haftung von Nokia bei Todesfällen oder Personenschäden nicht, wenn diese auf Fahrlässigkeit seitens Nokia zurückzuführen sind.</p>
+
+<p></p>
+
+<h1>7. VORGEHEN BEI MUTMASSLICHER VERLETZUNG DES URHEBERRECHTES</h1>
+
+<p></p>
+
+<p>Wenn Sie der Meinung sind, dass Ihre urheberrechtlich geschützte Arbeit auf eine Art und Weise verwendet wurde, die eine Verletzung des Urheberrechtes darstellt, benachrichtigen Sie Nokia in Form einer Meldung, die Folgendes enthält:</p>
+
+<p></p>
+
+<p>(1) Eine physische oder elektronische Signatur einer Person, die berechtigt ist, im Namen des Eigentümers des Alleinrechts, das angeblich verletzt wurde, zu handeln;</p>
+
+<p></p>
+
+<p>(2) Identifikation oder Beschreibung der urheberrechtlich geschützten Arbeit, die widerrechtlich verwendet wurde;</p>
+
+<p></p>
+
+<p>(3) Identifikation oder Beschreibung des Materials, das angeblich gegen ein bestehendes Urheberrecht verstößt sowie Informationen, die zur Auffindung des Materials ausreichend sind;</p>
+
+<p></p>
+
+<p>(4) Ihren Namen, Anschrift, Telefonnummer, E-Mail-Adresse und alle ansonsten notwendigen Informationen, damit Nokia sich mit Ihnen in Verbindung setzen kann;</p>
+
+<p></p>
+
+<p>(5) Eine Erklärung, dass Sie in gutem Glauben der Auffassung sind, dass die beschriebene Verwendung des Materials vom Urheberrechtsinhaber, seinem Vertreter oder dem Gesetz nicht gestattet ist; und</p>
+
+<p></p>
+
+<p>(6) Eine Versicherung, dass die Informationen in der Meldung korrekt sind, sowie eine eidesstattliche Erklärung, dass Sie bevollmächtigt sind, im Namen des Eigentümers des Alleinrechts, das angeblich verletzt wurde, zu handeln.</p>
+
+<p></p>
+
+<p>Senden Sie Ihre Meldung an die Adresse unseres zuständigen Mitarbeiters:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GELTENDES RECHT</h1>
+
+<p></p>
+
+<p>Der Begriff „Nokia“ bezeichnet in diesen Nutzungsbedingungen „Nokia Corporation“. Nokia betreibt und kontrolliert den Dienst von Standorten in Finnland aus. Die enthaltenen Informationen über den Dienst gelten hiermit als bereitgestellt in Finnland.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Alle Rechte vorbehalten.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/04/internetradio_04.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Preguntar siempre"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N emisoras guardadas"
+#define qtn_ir_added_single "%U[87] guardada"
+#define qtn_ir_addmanually_unnamed "Sin nombre"
+#define qtn_ir_addst_description "Descripción"
+#define qtn_ir_addst_streamurl "Transmitir URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Rad. Int."
+#define qtn_ir_ai_radio_not_active "Radio no activa"
+#define qtn_ir_app_general_err "Error interno. Reinicie la aplicación."
+#define qtn_ir_apps_grid "Rad. Int."
+#define qtn_ir_apps_list "Rad. Int."
+#define qtn_ir_apps_skey "Rad. Int."
+#define qtn_ir_apps_standby "Radio por Internet"
+#define qtn_ir_apps_swins "Radio por Internet"
+#define qtn_ir_apps_wheel "Rad. Int."
+#define qtn_ir_bitrate_best "Calidad óptima"
+#define qtn_ir_bitrate_high "Calidad alta"
+#define qtn_ir_bitrate_standard "Calidad estándar"
+#define qtn_ir_cost_heading "Aviso importante"
+#define qtn_ir_cost_softkey_continue "Continuar"
+#define qtn_ir_cost_softkey_exit "Salir"
+#define qtn_ir_cost_title "Rad. Int."
+#define qtn_ir_cost_warning "La radio por Internet usa la conexión de datos para las transmisiones de radio. Esta aplicación es recomendable si dispone de un plan de datos de tarifa plana. Si no está seguro de los costes de datos, póngase en contacto con el operador antes de continuar."
+#define qtn_ir_country_list_expanded "%N emisoras"
+#define qtn_ir_countryregion_title "Países/regiones"
+#define qtn_ir_discover_beststations "Las mejores emisoras"
+#define qtn_ir_discover_country_region "Examinar por país/región"
+#define qtn_ir_discover_genre "Examinar por género"
+#define qtn_ir_discover_genre_expanded "Emisoras por género"
+#define qtn_ir_discover_langauge "Examinar por idioma"
+#define qtn_ir_discover_language_expanded "Emisoras por idioma"
+#define qtn_ir_discover_staticountryreg "Emisoras por país/región"
+#define qtn_ir_discover_title "Direct. emis."
+#define qtn_ir_discover_top "Mejores emisoras"
+#define qtn_ir_edit_title "Editar emisora"
+#define qtn_ir_err_operation "Error operación. Inténtelo de nuevo."
+#define qtn_ir_err_url_unavail "URL no disponible"
+#define qtn_ir_error_address "La dirección de emisora de radio por Internet no es correcta"
+#define qtn_ir_error_connection "El tiempo de espera de la conexión se ha agotado. Inténtelo de nuevo."
+#define qtn_ir_error_favourites "No hay espacio suficiente en las favoritas para guardar la selección"
+#define qtn_ir_error_general "No se puede conectar a la emisora"
+#define qtn_ir_error_isds_unavailable "En este momento, el servicio del directorio de la emisora de Internet no está disponible"
+#define qtn_ir_error_notavailable "No hay enlaces de transmisión disponibles"
+#define qtn_ir_error_notinisds "El elemento ya no está disponible"
+#define qtn_ir_error_search "Introduzca un término de búsqueda"
+#define qtn_ir_findst_addstation "Añadir emis. manualm."
+#define qtn_ir_findst_addtofav "Añada emisora favoritas"
+#define qtn_ir_findst_browsesds "Buscar direct. emisora"
+#define qtn_ir_findst_search_ensrhterm "Intr. término búsqueda"
+#define qtn_ir_findst_softkey_search "Buscar"
+#define qtn_ir_findstation_title "Buscar emisoras"
+#define qtn_ir_firstuse_title "Rad. Int.: Bienvenido"
+#define qtn_ir_genre_list_expanded "%N emisoras"
+#define qtn_ir_genre_title "Géneros"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Historial vacío"
+#define qtn_ir_homescreen_buffering "Almacen. en búfer"
+#define qtn_ir_homescreen_lastplayed "Último reproducido"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/región:"
+#define qtn_ir_info_details_description "Descripción:"
+#define qtn_ir_info_details_genre "Géneros:"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nombre:"
+#define qtn_ir_info_details_streams "Transmisiones:"
+#define qtn_ir_info_details_title "Inf. emisora"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "Dir. emis."
+#define qtn_ir_info_details_type_manual "Def. us."
+#define qtn_ir_info_details_unnamed "Sin nomb."
+#define qtn_ir_info_softkey_close "Cerrar"
+#define qtn_ir_language_list_expanded "%N emisoras"
+#define qtn_ir_language_title "Idiomas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Cargando"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Buscando"
+#define qtn_ir_main_descriptive_text "Use \"Buscar emisoras\" para añadir emisoras"
+#define qtn_ir_main_discover_expanded "Nuevas emisoras"
+#define qtn_ir_main_last "Últ. repr."
+#define qtn_ir_main_now "Repr. ahora"
+#define qtn_ir_main_prog_deleting "Borrando %N"
+#define qtn_ir_main_searchindir "Buscar en el directorio"
+#define qtn_ir_main_title "Rad. Int."
+#define qtn_ir_main_unnamed_station "Emis. sin nomb."
+#define qtn_ir_memlo_ram_out_of_mem "No hay suficiente memoria para efectuar la operación. Borre datos antes."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Emisora siguiente"
+#define qtn_ir_now_tooltip_play "Reproducir"
+#define qtn_ir_now_tooltip_previous "Emisora anterior"
+#define qtn_ir_now_tooltip_stop "Detener"
+#define qtn_ir_now_wait_buffering "Almacenando en búfer"
+#define qtn_ir_now_wait_buffering_perc "Almacenando en búfer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No hay conexión de red"
+#define qtn_ir_nwcontroller_err_nosnaps "No se ha definido ningún punto de acceso"
+#define qtn_ir_options_add "Añadir a las favoritas"
+#define qtn_ir_options_add_manually "Añadir emis. manual."
+#define qtn_ir_options_change "Cambiar"
+#define qtn_ir_options_clearhistory "Borrar historial"
+#define qtn_ir_options_editstation "Editar emisora"
+#define qtn_ir_options_equalizer "Ecualizador"
+#define qtn_ir_options_exit "Salir"
+#define qtn_ir_options_findnmusicstore "Buscar en tienda mús."
+#define qtn_ir_options_fmtrans "Transmisor FM"
+#define qtn_ir_options_gotomusicstore "Ir a tienda de música"
+#define qtn_ir_options_help "Ayuda"
+#define qtn_ir_options_history "Historial"
+#define qtn_ir_options_info "Información emisora"
+#define qtn_ir_options_mainview "Ir a vista principal"
+#define qtn_ir_options_mark "Marcar"
+#define qtn_ir_options_markall "Marcar todo"
+#define qtn_ir_options_markunmark "Marcar/anul. marcar"
+#define qtn_ir_options_now "Ir a Reproduciendo"
+#define qtn_ir_options_off "Desactivar"
+#define qtn_ir_options_on "Activar"
+#define qtn_ir_options_searchag "Buscar otra vez"
+#define qtn_ir_options_select "Seleccionar"
+#define qtn_ir_options_settings "Ajustes"
+#define qtn_ir_options_station "Emisora"
+#define qtn_ir_options_stereowidening "Ampliación estéreo"
+#define qtn_ir_options_unmark "Anular marcar"
+#define qtn_ir_options_unmarkall "Deseleccionar todo"
+#define qtn_ir_playfail_err "Error al reproducir la radio"
+#define qtn_ir_playlist_title "Enl. recib."
+#define qtn_ir_popup_no_results "No se encontraron resultados"
+#define qtn_ir_popup_toomany_results "Hay demasiados resultados. Refine la búsqueda."
+#define qtn_ir_results_none "No se han encontrado emisoras coincidentes. Vuelva a realizar la búsqueda."
+#define qtn_ir_search_result "%0U[08]:%1N resultado"
+#define qtn_ir_search_results "%0U[09]:%1N results."
+#define qtn_ir_set_folder_internetradio "Rad. Int."
+#define qtn_ir_set_folder_irradio "Rad. Int."
+#define qtn_ir_settings_3g "Velocidad bits conex. 3G"
+#define qtn_ir_settings_connec_softkey_ok "Aceptar"
+#define qtn_ir_settings_gprs "Velocid. bits conex. GPRS"
+#define qtn_ir_settings_network "Conexión de red"
+#define qtn_ir_settings_snap_default "Conexión predet."
+#define qtn_ir_settings_title "Ajustes"
+#define qtn_ir_settings_wifi "Velocid. bits conex. Wi-Fi"
+#define qtn_ir_softkey_back "Atrás"
+#define qtn_ir_softkey_cancel "Cancelar"
+#define qtn_ir_softkey_done "Hecho"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Opciones"
+#define qtn_ir_softkey_select "Seleccionar"
+#define qtn_ir_softkey_yes "Sí"
+#define qtn_ir_station_saved "Emisora guardada"
+#define qtn_ir_stationlist_nomatches "(no hay coincidencias)"
+#define qtn_ir_stations_popup_delete "¿Borrar\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "¿Borrar %N emisoras?"
+#define qtn_ir_stations_popup_removed "La emisora %U[67] se ha borrado"
+#define qtn_ir_stations_popup_removed_many "%N emisoras borradas"
+#define qtn_ir_stations_popup_save "¿Guardar emisora en las favoritas?"
+#define qtn_ir_suboptions_delete "Borrar"
+#define qtn_ir_suboptions_details "Detalles"
+#define qtn_ir_suboptions_move "Mover"
+#define qtn_ir_terms_details "Al aceptar las condiciones generales, acepta un contrato hasta el grado permitido por la ley aplicable, y no limitado ni prohibido respecto de todos los derechos materiales"
+#define qtn_ir_terms_heading "Condiciones generales"
+#define qtn_ir_terms_softkey_accept "Aceptar"
+#define qtn_ir_terms_softkey_decline "Rechazar"
+#define qtn_ir_title_history "Historial"
+#define qtn_ir_tooltip_addalltofav "Añadir todas a fav."
+#define qtn_ir_tooltip_addstation "Añadir emis. man."
+#define qtn_ir_tooltip_addtofav "Añadir a las favoritas"
+#define qtn_ir_tooltip_copy "Copiar"
+#define qtn_ir_tooltip_findnstore "Buscar en tienda mús."
+#define qtn_ir_tooltip_findst "Buscar emisoras"
+#define qtn_ir_tooltip_history "Historial"
+#define qtn_ir_tooltip_listen "Escuchar"
+#define qtn_ir_tooltip_paste "Pegar"
+#define qtn_ir_tooltip_stationde "Detalles de la emisora"
+#define qtn_ir_top_title "Más escuchadas"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nombre"
+#define qtn_ir_url_title "Añadir emisora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/04/internetradioai_04.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/04/terms_04.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>El servicio de radio por Internet de Nokia (en adelante, “Servicioâ€) le permite descubrir y disfrutar del contenido de emisoras de radio por Internet. USTED ACEPTA QUE EL USO QUE HAGA DEL SERVICIO IMPLICA QUE HA LEÃDO Y COMPRENDIDO EL PRESENTE ACUERDO Y QUE SE COMPROMETE A RESPETAR LOS TÉRMINOS Y CONDICIONES CONTENIDOS EN ÉL. Si usted no confirma estos términos, le informamos de que no podrá utilizar el Servicio.</p>
+
+<p></p>
+
+<h1>1. DEFINICIONES</h1>
+
+<p></p>
+
+<p>La expresión "emisoras de radio por Internet" hace referencia a entidades que, de forma general, producen y distribuyen contenido de audio y metadatos relacionados mediante un flujo transmitido por Internet.</p>
+
+<p></p>
+
+<p>La expresión "enlace a la emisora de radio por Internet" hace referencia al localizador o a un conjunto de localizadores de recursos que permiten al usuario acceder al contenido transmitido por la emisora de radio por Internet.</p>
+
+<p></p>
+
+<h1>2. SERVICIO</h1>
+
+<p></p>
+
+<p>El Servicio le permite:</p>
+<p>1. explorar los enlaces a las emisoras de radio por Internet;</p>
+<p>2. acceder al contenido de las emisoras de radio por Internet.</p>
+
+<p></p>
+
+<h1>3. USO DEL SERVICIO</h1>
+
+<p></p>
+
+<p>El uso del Servicio le presta a usted acceso privado y no comercial exclusivamente. Nokia dispondrá de todos los derechos de propiedad intelectual relacionados con el Servicio.</p>
+
+<p></p>
+
+<p>Nokia se reserva el derecho a modificar los términos y condiciones presentes siempre que le informe a usted de dichas modificaciones.</p>
+
+<p></p>
+
+<h1>4. PRIVACIDAD</h1>
+
+<p></p>
+
+<p>Nokia se compromete a proteger la intimidad del usuario mediante la aplicación de políticas de confidencialidad restrictivas.</p>
+
+<p></p>
+
+<p>Con el fin de supervisar la utilización del Servicio y poder mejorarlo, Nokia puede recabar información de uso, entre la que cabe mencionar, aunque no de forma exclusiva, datos sobre las emisoras de radio por Internet a las que se accede, el tiempo que se pasa en cada una de ellas y los elementos calificados como favoritos.</p>
+
+<p></p>
+
+<p>Nokia no recaba información alguna que permita la identificación del usuario del Servicio.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILIDAD DEL SERVICIO</h1>
+
+<p></p>
+
+<p>El Servicio se le ofrece para su comodidad. Se le dispensa "tal y como es" y "según disponibilidad". Nokia no garantiza que el Servicio no se interrumpa ni que esté libre de errores. Nokia se reserva el derecho de revisar el Servicio o de no permitir el acceso al mismo en cualquier momento.</p>
+
+<p></p>
+
+<p>Nokia puede ofrecer actualizaciones de las aplicaciones de software relacionadas con el Servicio a su entera discreción.</p>
+
+<p></p>
+
+<h1>6. DECLARACIÓN DE RENUNCIA Y RESPONSABILIDAD</h1>
+
+<p></p>
+
+<p>Para que le sea más fácil acceder a ellas, Nokia puede incluir enlaces a emisoras de radio por Internet cuya propiedad u operatividad recae en terceros. Nokia no garantiza que dichos enlaces estén operativos. Por otra parte, el hecho de que aparezca contenido no relacionado con Nokia no implica en modo alguno que Nokia apruebe dicho contenido o los productos o servicios mencionados en él.</p>
+
+<p></p>
+
+<p>Usted debe revisar y confirmar las normas de uso de cada emisora, si existieran, antes de acceder a ella. Asimismo, acepta que Nokia no controla el contenido de los servicios de terceras partes y no puede asumir responsabilidad alguna por el contenido ofrecido por las emisoras de radio por Internet.</p>
+
+<p></p>
+
+<p>Para acceder al contenido de las emisoras de radio por Internet mediante el Servicio, quizá tenga que transferir una gran cantidad de datos a través de la red de su proveedor de servicios. Póngase en contacto con él para que le informe de sus tarifas de transferencia de datos. Tenga en cuenta que utilizar el Servicio con emisoras de radio por Internet que transmiten altas tasas de bits puede incurrir en mayores costes de transmisión de información.</p>
+
+<p></p>
+
+<p>Las transmisiones relacionadas con el uso del Servicio pueden incluir al menos los siguientes datos: actualización del contenido del directorio de las emisoras, transmisión de datos desde la emisora de radio por Internet, recopilación de datos estadísticos y actualización de la aplicación de radio por Internet.</p>
+
+<p></p>
+
+<p>Nokia no se responsabiliza de los costes de la transferencia de datos asociados al uso del Servicio.</p>
+
+<p></p>
+
+<p>NO SE OTORGA NINGUNA GARANTÃA EXPRESA O IMPLÃCITA (ENTRE LAS QUE CABE DESTACAR, SIN QUE SEA DE FORMA RESTRICTIVA, LA GARANTÃA DE TÃTULO O DE NO INCUMPLIMIENTO, ASà COMO LA GARANTÃA IMPLÃCITA DE QUE EL SERVICIO ES COMERCIABLE O ADECUADO PARA UN USO DETERMINADO) EN RELACIÓN CON LA DISPONIBILIDAD, CORRECCIÓN, FIABILIDAD O CONTENIDO DEL SERVICIO. NOKIA NO SERà RESPONSABLE EN NINGÚN CASO DE LOS DAÑOS Y PERJUICIOS DIRECTOS, INDIRECTOS, ACCIDENTALES, ESPECIALES O CONSECUENTES; PÉRDIDA DE BENEFICIOS O INTERRUPCIÓN DE ACTIVIDAD COMERCIAL PROVOCADOS POR EL USO O LA INCAPACIDAD PARA USAR EL SERVICIO, INCLUSO SI NOKIA HUBIERA SIDO ADVERTIDO DE LA POSIBILIDAD DE QUE ÉSTOS SE PRODUJERAN. EN ALGUNAS JURISDICCIONES NO ESTà PERMITIDO EXCLUIR CIERTAS GARANTÃAS NI LIMITAR LA RESPONSABILIDAD DE CIERTA MANERA, POR LO QUE PUEDE QUE LAS LIMITACIONES Y EXCLUSIONES ANTERIORES NO SE LE APLIQUEN A USTED. EN TAL CASO, LA RESPONSABILIDAD DE NOKIA ALCANZARà LOS LÃMITES MÃXIMOS PERMITIDOS POR LA LEGISLACIÓN.</p>
+
+<p></p>
+
+<p>Ninguna cláusula del presente acuerdo perjudicará los derechos legales de parte alguna que intervenga en él como consumidor. Ninguna cláusula del presente acuerdo limita la responsabilidad de Nokia en caso de fallecimiento o lesiones personales causados por su negligencia.</p>
+
+<p></p>
+
+<h1>7. POLÃTICA SOBRE ALEGACIONES EN CASO DE INCUMPLIMIENTO DEL COPYRIGHT</h1>
+
+<p></p>
+
+<p>Si cree que un trabajo suyo con copyright se ha manipulado de tal forma que se haya producido una infracción, puede notificárselo a Nokia. Adjunte los siguientes datos:</p>
+
+<p></p>
+
+<p>(1) la firma física o electrónica del representante autorizado del propietario del derecho exclusivo que supuestamente se ha quebrantado;</p>
+
+<p></p>
+
+<p>(2) identificación o descripción del trabajo con copyright cuyo incumplimiento se denuncia;</p>
+
+<p></p>
+
+<p>(3) identificación o descripción del material que supuestamente infringe el derecho de copyright e información suficiente (dentro de lo razonable) para localizar dicho material;</p>
+
+<p></p>
+
+<p>(4) su nombre, dirección, número de teléfono, dirección de correo electrónico y cualquier otro dato que permita a Nokia contactar con usted;</p>
+
+<p></p>
+
+<p>(5) un escrito en el que declara que cree de buena fe que el uso del material, tal y como se denuncia, no está autorizado por el propietario del copyright, su agente o la legislación; y</p>
+
+<p></p>
+
+<p>(6) un escrito en el que declara que la información de la notificación es correcta, y so pena de falso testimonio, que usted está autorizado para representar al propietario del derecho exclusivo que supuestamente se infringe.</p>
+
+<p></p>
+
+<p>La notificación debe dirigirse a nuestro Agente, cuya dirección es:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LEGISLACIÓN APLICABLE</h1>
+
+<p></p>
+
+<p>Tal y como se utiliza en los presentes términos y condiciones, la palabra "Nokia" se refiere a Nokia Corporation. Nokia opera y controla el Servicio desde sus instalaciones en Finlandia. La información relativa al Servicio contenida en el presente acuerdo, en los términos del mismo, se considera dada en Finlandia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Reservados todos los derechos.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/05/internetradio_05.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Chiedi sempre"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stazioni salvate"
+#define qtn_ir_added_single "Stazione %U[72] salvata"
+#define qtn_ir_addmanually_unnamed "Senza nome"
+#define qtn_ir_addst_description "Descrizione"
+#define qtn_ir_addst_streamurl "URL dello stream"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio non attiva"
+#define qtn_ir_app_general_err "Errore interno. Riavviare l'applicazione."
+#define qtn_ir_apps_grid "Radio Inter."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Ottima qualità"
+#define qtn_ir_bitrate_high "Qualità elevata"
+#define qtn_ir_bitrate_standard "Qualità standard"
+#define qtn_ir_cost_heading "Avviso importante"
+#define qtn_ir_cost_softkey_continue "Continua"
+#define qtn_ir_cost_softkey_exit "Esci"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet utilizza la connessione dati del telefono in uso per le trasmissioni radio. È consigliata solo se si dispone di un piano dati a tariffa flat. Se non si è certi dei costi per il trasferimento dei dati, verificare con l'operatore prima di continuare."
+#define qtn_ir_country_list_expanded "%N stazioni"
+#define qtn_ir_countryregion_title "Paesi/aree"
+#define qtn_ir_discover_beststations "Selezione migliori stazioni"
+#define qtn_ir_discover_country_region "Sfoglia per paese/area"
+#define qtn_ir_discover_genre "Sfoglia per genere"
+#define qtn_ir_discover_genre_expanded "Stazioni ordinate per genere"
+#define qtn_ir_discover_langauge "Sfoglia per lingua"
+#define qtn_ir_discover_language_expanded "Stazioni ordinate per lingua"
+#define qtn_ir_discover_staticountryreg "Staz. ordinate per paese/area"
+#define qtn_ir_discover_title "Direct. stazioni"
+#define qtn_ir_discover_top "Stazioni al primo posto"
+#define qtn_ir_edit_title "Modifica staz."
+#define qtn_ir_err_operation "Errore nell'operazione. Riprovare."
+#define qtn_ir_err_url_unavail "URL non disponibile"
+#define qtn_ir_error_address "Indirizzo della stazione radio Internet non corretto"
+#define qtn_ir_error_connection "Connessione scaduta. Riprovare."
+#define qtn_ir_error_favourites "Spazio insufficiente nei Favoriti per salvare la selezione"
+#define qtn_ir_error_general "Impossibile connettersi alla stazione"
+#define qtn_ir_error_isds_unavailable "Servizio di directory stazioni Internet temporaneamente non disponibile"
+#define qtn_ir_error_notavailable "Nessun collegamento di streaming disponibile"
+#define qtn_ir_error_notinisds "Elemento non più disponibile"
+#define qtn_ir_error_search "Inserire un termine da cercare"
+#define qtn_ir_findst_addstation "Aggiungi staz. manualm."
+#define qtn_ir_findst_addtofav "Aggiunge stazione ai Favoriti"
+#define qtn_ir_findst_browsesds "Sfoglia directory stazioni"
+#define qtn_ir_findst_search_ensrhterm "Inserire termine da cercare"
+#define qtn_ir_findst_softkey_search "Cerca"
+#define qtn_ir_findstation_title "Trova stazioni"
+#define qtn_ir_firstuse_title "Radio Intern.: Introduz."
+#define qtn_ir_genre_list_expanded "%N stazioni"
+#define qtn_ir_genre_title "Generi"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Nessuna cronologia"
+#define qtn_ir_homescreen_buffering "Buffering in corso"
+#define qtn_ir_homescreen_lastplayed "Ultima riprodotta"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Paese/Area:"
+#define qtn_ir_info_details_description "Descrizione:"
+#define qtn_ir_info_details_genre "Genere/i:"
+#define qtn_ir_info_details_language "Lingua:"
+#define qtn_ir_info_details_name "Nome:"
+#define qtn_ir_info_details_streams "Stream:"
+#define qtn_ir_info_details_title "Info stazione"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "Dir. staz."
+#define qtn_ir_info_details_type_manual "Def. da ut."
+#define qtn_ir_info_details_unnamed "No nome"
+#define qtn_ir_info_softkey_close "Chiudi"
+#define qtn_ir_language_list_expanded "%N stazioni"
+#define qtn_ir_language_title "Lingue"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Caricamento in corso"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Ricerca in corso"
+#define qtn_ir_main_descriptive_text "Usare \"Trova stazio­ni\" su barra str. per agg. staz."
+#define qtn_ir_main_discover_expanded "Per scoprire nuove staz. radio"
+#define qtn_ir_main_last "Ult. riprodotta"
+#define qtn_ir_main_now "In esecuzione"
+#define qtn_ir_main_prog_deleting "Eliminazione di %N in corso"
+#define qtn_ir_main_searchindir "Cerca nella directory"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Staz. senza nome"
+#define qtn_ir_memlo_ram_out_of_mem "Memoria insufficiente per eseguire l'operazione. Eliminare prima qualche dato."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N Kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Stazione successiva"
+#define qtn_ir_now_tooltip_play "Riproduci"
+#define qtn_ir_now_tooltip_previous "Stazione precedente"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering in corso"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Connessione di rete non disponibile"
+#define qtn_ir_nwcontroller_err_nosnaps "Nessun punto di accesso definito"
+#define qtn_ir_options_add "Aggiungi a Favoriti"
+#define qtn_ir_options_add_manually "Aggiungi staz. manualm."
+#define qtn_ir_options_change "Cambia"
+#define qtn_ir_options_clearhistory "Cancella cronologia"
+#define qtn_ir_options_editstation "Modifica stazione"
+#define qtn_ir_options_equalizer "Equalizzatore"
+#define qtn_ir_options_exit "Esci"
+#define qtn_ir_options_findnmusicstore "Trova nel Music Store"
+#define qtn_ir_options_fmtrans "Trasmettitore FM"
+#define qtn_ir_options_gotomusicstore "Vai al Music Store"
+#define qtn_ir_options_help "Guida"
+#define qtn_ir_options_history "Cronologia"
+#define qtn_ir_options_info "Informazioni stazione"
+#define qtn_ir_options_mainview "Vai alla vista principale"
+#define qtn_ir_options_mark "Seleziona"
+#define qtn_ir_options_markall "Seleziona tutto"
+#define qtn_ir_options_markunmark "Seleziona/Deselezione"
+#define qtn_ir_options_now "Vai a In esecuzione"
+#define qtn_ir_options_off "Disattiva"
+#define qtn_ir_options_on "Attiva"
+#define qtn_ir_options_searchag "Cerca di nuovo"
+#define qtn_ir_options_select "Seleziona"
+#define qtn_ir_options_settings "Impostazioni"
+#define qtn_ir_options_station "Stazione"
+#define qtn_ir_options_stereowidening "Amplificatore stereo"
+#define qtn_ir_options_unmark "Deseleziona"
+#define qtn_ir_options_unmarkall "Deseleziona tutto"
+#define qtn_ir_playfail_err "Riproduzione radio non riuscita"
+#define qtn_ir_playlist_title "Colleg. ricevuti"
+#define qtn_ir_popup_no_results "Nessun risultato trovato"
+#define qtn_ir_popup_toomany_results "Troppi risultati. Ridefinire il termine da cercare."
+#define qtn_ir_results_none "Nessuna stazione corrispondente trovata. Cercare ancora."
+#define qtn_ir_search_result "%0U[09]:%1N risultato"
+#define qtn_ir_search_results "%0U[08]:%1N risultati"
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Vel. in bit connessione 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Vel. in bit conness. GPRS"
+#define qtn_ir_settings_network "Connessione di rete"
+#define qtn_ir_settings_snap_default "Connessione predefin."
+#define qtn_ir_settings_title "Impostazioni"
+#define qtn_ir_settings_wifi "Vel. in bit conness. Wi-Fi"
+#define qtn_ir_softkey_back "Indietro"
+#define qtn_ir_softkey_cancel "Annulla"
+#define qtn_ir_softkey_done "Fine"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Opzioni"
+#define qtn_ir_softkey_select "Seleziona"
+#define qtn_ir_softkey_yes "Sì"
+#define qtn_ir_station_saved "Stazione salvata"
+#define qtn_ir_stationlist_nomatches "(nessuna corrispondenza)"
+#define qtn_ir_stations_popup_delete "Eliminare\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Eliminare %N stazioni?"
+#define qtn_ir_stations_popup_removed "Stazione %U[70] eliminata"
+#define qtn_ir_stations_popup_removed_many "%N stazioni eliminate"
+#define qtn_ir_stations_popup_save "Salvare la stazione nei Favoriti?"
+#define qtn_ir_suboptions_delete "Elimina"
+#define qtn_ir_suboptions_details "Dettagli"
+#define qtn_ir_suboptions_move "Sposta"
+#define qtn_ir_terms_details "Accettando le Condizioni generali che seguono, l'utente stipula un contratto nella misura consentita dalla legge applicabile e non ulteriormente limitata o vietata in relazione a tutti i diritti sul materiale"
+#define qtn_ir_terms_heading "Condizioni generali"
+#define qtn_ir_terms_softkey_accept "Accetta"
+#define qtn_ir_terms_softkey_decline "Rifiuta"
+#define qtn_ir_title_history "Cronologia"
+#define qtn_ir_tooltip_addalltofav "Agg. tutte a Favoriti"
+#define qtn_ir_tooltip_addstation "Aggiungi staz. man."
+#define qtn_ir_tooltip_addtofav "Aggiungi a Favoriti"
+#define qtn_ir_tooltip_copy "Copia"
+#define qtn_ir_tooltip_findnstore "Trova nel Music Store"
+#define qtn_ir_tooltip_findst "Trova stazioni"
+#define qtn_ir_tooltip_history "Cronologia"
+#define qtn_ir_tooltip_listen "Ascolta"
+#define qtn_ir_tooltip_paste "Incolla"
+#define qtn_ir_tooltip_stationde "Dettagli stazione"
+#define qtn_ir_top_title "Staz. a pr. posto"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nome"
+#define qtn_ir_url_title "Aggiungi staz."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/05/internetradioai_05.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/05/terms_05.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Il Servizio Nokia radio Internet ("Servizio") consente di scoprire e utilizzare il contenuto delle stazioni radio Internet. L'USO DEL SERVIZIO DA PARTE DELL'UTENTE IMPLICA CHE L'UTENTE HA LETTO E COMPRESO IL PRESENTE CONTRATTO E NE ACCETTA I TERMINI E LE CONDIZIONI. Qualora l'utente non accetti tutti i termini e le condizioni, non è autorizzato a utilizzare il Servizio.</p>
+
+<p></p>
+
+<h1>1. DEFINIZIONI</h1>
+
+<p></p>
+
+<p>Per stazioni radio Internet si intendono entità che generalmente producono contenuti audio e metadati correlati, trasmessi via streaming attraverso Internet.</p>
+
+<p></p>
+
+<p>Per collegamento alla stazione radio Internet si intende un localizzatore di risorse o un insieme di localizzatori di risorse che consentono all'utente di accedere al contenuto trasmesso dalle stazioni radio Internet.</p>
+
+<p></p>
+
+<h1>2. IL SERVIZIO</h1>
+
+<p></p>
+
+<p>Il Servizio consente le seguenti operazioni:</p>
+<p>1. ricerca dei collegamenti alle stazioni radio Internet;</p>
+<p>2. accesso ai contenuti delle stazioni radio Internet.</p>
+
+<p></p>
+
+<h1>3. USO DEL SERVIZIO</h1>
+
+<p></p>
+
+<p>L'uso del Servizio è consentito solo per fini privati e non commerciali. Nokia detiene tutti i diritti di proprietà intellettuale relativi al Servizio e a esso correlati.</p>
+
+<p></p>
+
+<p>Previa notifica all'utente, Nokia si riserva il diritto di modificare i termini e le condizioni ivi contenuti.</p>
+
+<p></p>
+
+<h1>4. PRIVACY</h1>
+
+<p></p>
+
+<p>Nokia si impegna a tutelare la privacy dell'utente tramite rigide politiche di riservatezza.</p>
+
+<p></p>
+
+<p>Al fine di monitorare l'uso del Servizio e migliorarne sempre l'efficienza, Nokia può raccogliere dati relativi alla fruizione del servizio incluse, in via esemplificativa ma non limitativa, informazioni sulle stazioni radio Internet fruite, il tempo di fruizione di ogni stazione radio e gli elementi maggiormente graditi dagli utenti.</p>
+
+<p></p>
+
+<p>In nessun modo le informazioni raccolte da Nokia possono consentire l'identificazione dell'utente del Servizio.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILITÀ DEL SERVIZIO</h1>
+
+<p></p>
+
+<p>Il Servizio viene fornito a beneficio dell'utente. Il Servizio viene fornito "così com'è" e "secondo disponibilità". Nokia non garantisce la continuità e l'affidabilità del Servizio. Nokia si riserva il diritto di modificare il Servizio o impedirne l'accesso in qualunque momento.</p>
+
+<p></p>
+
+<p>Nokia può fornire aggiornamenti per applicazioni software inerenti al servizio a sua esclusiva discrezione.</p>
+
+<p></p>
+
+<h1>6. DECLINAZIONE DI RESPONSABILITÀ</h1>
+
+<p></p>
+
+<p>Per facilitare l'accesso all'utente, Nokia può includere collegamenti alle stazioni radio Internet di proprietà di terzi o gestite da terzi. Nokia non garantisce il funzionamento dei suddetti collegamenti alle stazioni radio Internet. Inoltre, la trasmissione di contenuti non correlati a Nokia non implica in nessun modo l'approvazione da parte di Nokia di tali contenuti o dei prodotti o dei servizi citati in tali contenuti.</p>
+
+<p></p>
+
+<p>Prima di effettuare l'accesso, l'utente è tenuto a prendere visione e accettare le norme per l'utilizzo di ogni stazione radio, laddove applicabili. Inoltre l'utente riconosce che Nokia non esercita alcun controllo sui contenuti forniti da terzi e non è in alcun modo responsabile dei contenuti trasmessi dalle stazioni radio Internet.</p>
+
+<p></p>
+
+<p>L'accesso ai contenuti delle stazioni radio Internet per l'uso del Servizio può comportare la trasmissione di ingenti quantità di dati attraverso la rete del provider di servizi dell'utente. Per informazioni sulle tariffe applicate alla trasmissione dei dati, l'utente è tenuto a contattare il proprio provider di servizi. La fruizione di stazioni radio Internet che trasmettono a un bitrate più elevato potrebbe comportare costi più elevati associati al traffico di dati.</p>
+
+<p></p>
+
+<p>Il traffico di dati associato all'uso del Servizio può comportare, in via non limitativa, le seguenti condizioni: aggiornamento del contenuto della directory delle stazioni, streaming di dati dalle stazioni radio Internet, raccolta di dati statistici e aggiornamento dell'applicazione utilizzata per la radio via Internet.</p>
+
+<p></p>
+
+<p>Nokia declina ogni responsabilità relativa ai costi del traffico di dati associato all'uso del Servizio da parte dell'utente.</p>
+
+<p></p>
+
+<p>NOKIA NON RICONOSCE ALCUNA GARANZIA DI NESSUN TIPO, ESPLICITA O IMPLICITA, COMPRESE, IN VIA ESEMPLIFICATIVA MA NON LIMITATIVA, GARANZIE DI TITOLARITÀ O DI NON VIOLAZIONE DEI DIRITTI ALTRUI O GARANZIE IMPLICITE DI COMMERCIABILITÀ O IDONEITÀ PER UN FINE PARTICOLARE IN RELAZIONE ALLA DISPONIBILITÀ, ALLA PRECISIONE, ALL'AFFIDABILITÀ O AL CONTENUTO DEL SERVIZIO. NOKIA NON SARÀ, IN ALCUN CASO, RESPONSABILE PER DANNI DIRETTI, INDIRETTI, INCIDENTALI, SPECIALI O CONSEQUENZIALI, PER LA PERDITA DI PROFITTI O PER L'INTERRUZIONE DELL'ATTIVITÀ DERIVANTI DALL'USO O DAL MANCATO UTILIZZO DEL SERVIZIO, ANCHE NEL CASO IN CUI NOKIA SIA STATA INFORMATA DELLA POSSIBILITÀ DEL VERIFICARSI DI TALI DANNI. POICHÉ ALCUNE GIURISDIZIONI NON AMMETTONO L’ESCLUSIONE DI ALCUNE GARANZIE O LA LIMITAZIONE DI RESPONSABILITÀ, LA LIMITAZIONE DI CUI SOPRA POTREBBE NON ESSERE APPLICABILE ALL’UTENTE. IN TAL CASO LA RESPONSABILITÀ DI NOKIA È LIMITATA NELLA MISURA MASSIMA CONSENTITA DALLA LEGGE APPLICABILE.</p>
+
+<p></p>
+
+<p>Niente di quanto contenuto nel presente contratto pregiudica in alcun modo i diritti previsti dalla normativa vigente a tutela dei consumatori. Niente di quanto contenuto nel presente contratto limita la responsabilità di Nokia nei confronti dell'utente in caso di morte o lesione personale derivante da negligenza di Nokia.</p>
+
+<p></p>
+
+<h1>7. POLITICA RELATIVA ALLA NOTIFICA DELLE VIOLAZIONI DEL COPYRIGHT</h1>
+
+<p></p>
+
+<p>Se l'utente ritiene che sia stata commessa una violazione del proprio lavoro soggetto a copyright, può presentare una notifica a Nokia allegando i seguenti documenti:</p>
+
+<p></p>
+
+<p>(1) Firma fisica o elettronica di una persona autorizzata a procedere per conto del possessore di un diritto esclusivo presumibilmente violato;</p>
+
+<p></p>
+
+<p>(2) Identificazione o descrizione del materiale soggetto a copyright di cui si rivendica la violazione;</p>
+
+<p></p>
+
+<p>(3) Identificazione o descrizione del materiale che si pensa sia causa di attività di violazione e informazioni ?ragionevolmente sufficienti a consentire al fornitore del servizio di individuare il materiale;</p>
+
+<p></p>
+
+<p>(4) Nome, indirizzo, numero telefonico, indirizzo e-mail e ogni altra informazione che consenta a Nokia di contattare l'utente;</p>
+
+<p></p>
+
+<p>(5) Dichiarazione che asserisca la convinzione in buona fede che l'utilizzo del materiale nelle modalità contestate non è autorizzato dal possessore del copyright, dal relativo agente o previsto dalla legge; e</p>
+
+<p></p>
+
+<p>(6) Dichiarazione che confermi l'accuratezza delle informazioni incluse nella notifica e dichiarazione giurata che si dispone dell'autorizzazione a procedere per conto del possessore di un diritto esclusivo presumibilmente violato.</p>
+
+<p></p>
+
+<p>La notifica deve essere inviata all'indirizzo dell'agente designato Nokia, riportato di seguito:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LEGGE APPLICABILE</h1>
+
+<p></p>
+
+<p>Nel presente contratto il termine "Nokia" indica Nokia Corporation. Nokia gestisce e controlla il Servizio dalla sua sede in Finlandia. Pertanto si ritiene che le informazioni sul Servizio contenute nel presente documento siano state fornite in Finlandia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Tutti i diritti riservati.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/06/internetradio_06.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Fråga alltid"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N kanaler sparade"
+#define qtn_ir_added_single "%U[89] sparad"
+#define qtn_ir_addmanually_unnamed "Namnlös"
+#define qtn_ir_addst_description "Beskrivning"
+#define qtn_ir_addst_streamurl "URL-direktuppspelning"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internetradio"
+#define qtn_ir_ai_radio_not_active "Radio inaktiv"
+#define qtn_ir_app_general_err "Internt fel. Starta om programmet."
+#define qtn_ir_apps_grid "Intern.radio"
+#define qtn_ir_apps_list "Internetradio"
+#define qtn_ir_apps_skey "Internetradio"
+#define qtn_ir_apps_standby "Internetradio"
+#define qtn_ir_apps_swins "Internetradio"
+#define qtn_ir_apps_wheel "Internetradio"
+#define qtn_ir_bitrate_best "Bästa kvalitet"
+#define qtn_ir_bitrate_high "Hög kvalitet"
+#define qtn_ir_bitrate_standard "Standardkvalitet"
+#define qtn_ir_cost_heading "Viktigt"
+#define qtn_ir_cost_softkey_continue "Fortsätt"
+#define qtn_ir_cost_softkey_exit "Avsluta"
+#define qtn_ir_cost_title "Internetradio"
+#define qtn_ir_cost_warning "Internetradio använder telefonens dataanslutning för radiosändningar. Detta rekommenderas endast om du har fast kostnad för datatrafik. Kontakta din operatör innan du fortsätter om du är osäker över din datakostnad."
+#define qtn_ir_country_list_expanded "%N kanaler"
+#define qtn_ir_countryregion_title "Land/region"
+#define qtn_ir_discover_beststations "Urval av de bästa kanalerna"
+#define qtn_ir_discover_country_region "Bläddra efter land/region"
+#define qtn_ir_discover_genre "Bläddra efter genre"
+#define qtn_ir_discover_genre_expanded "Kanaler sorterade efter genre"
+#define qtn_ir_discover_langauge "Bläddra efter språk"
+#define qtn_ir_discover_language_expanded "Kanaler sorterade efter språk"
+#define qtn_ir_discover_staticountryreg "Kanaler sort. ef. land/region"
+#define qtn_ir_discover_title "Kanalkatalog"
+#define qtn_ir_discover_top "Mest populära kanaler"
+#define qtn_ir_edit_title "Redigera kanal"
+#define qtn_ir_err_operation "Åtgärdsfel. Försök igen."
+#define qtn_ir_err_url_unavail "URL ej tillgänglig"
+#define qtn_ir_error_address "Felaktig adress för Internetradiokanal"
+#define qtn_ir_error_connection "Timeout för anslutning. Försök igen."
+#define qtn_ir_error_favourites "Inte tillräckligt med utrymme i favoriter för att spara valet"
+#define qtn_ir_error_general "Det går inte att ansluta till kanalen"
+#define qtn_ir_error_isds_unavailable "Katalogtjänst för Internetkanal är tillfälligt otillgänglig"
+#define qtn_ir_error_notavailable "Inga direktuppspelande länkar tillgängliga"
+#define qtn_ir_error_notinisds "Objekt ej längre tillgänglig"
+#define qtn_ir_error_search "Ange en sökterm"
+#define qtn_ir_findst_addstation "Lägg till kanal manuellt"
+#define qtn_ir_findst_addtofav "Lägg till din kanal i favoriter"
+#define qtn_ir_findst_browsesds "Bläddra i kanalkatalog"
+#define qtn_ir_findst_search_ensrhterm "Ange en sökterm"
+#define qtn_ir_findst_softkey_search "Sök"
+#define qtn_ir_findstation_title "Hitta kanaler"
+#define qtn_ir_firstuse_title "Intern.radio: Välkom."
+#define qtn_ir_genre_list_expanded "%N kanaler"
+#define qtn_ir_genre_title "Genrer"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Ingen historik"
+#define qtn_ir_homescreen_buffering "Buffrar"
+#define qtn_ir_homescreen_lastplayed "Senast spelad"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Land/region:"
+#define qtn_ir_info_details_description "Beskrivning:"
+#define qtn_ir_info_details_genre "Genre(r):"
+#define qtn_ir_info_details_language "Språk:"
+#define qtn_ir_info_details_name "Namn:"
+#define qtn_ir_info_details_streams "Direktuppspel.:"
+#define qtn_ir_info_details_title "Kanalinfo"
+#define qtn_ir_info_details_type "Typ:"
+#define qtn_ir_info_details_type_isds "Kanalkat."
+#define qtn_ir_info_details_type_manual "Anv.defin."
+#define qtn_ir_info_details_unnamed "Namnlös"
+#define qtn_ir_info_softkey_close "Stäng"
+#define qtn_ir_language_list_expanded "%N kanaler"
+#define qtn_ir_language_title "Språk"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Läser in"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Söker"
+#define qtn_ir_main_descriptive_text "Hitta kanaler i verkt.fält. för att lägga till kanaler"
+#define qtn_ir_main_discover_expanded "Upptäck nya radiokanaler"
+#define qtn_ir_main_last "Senast spelad"
+#define qtn_ir_main_now "Spelas nu"
+#define qtn_ir_main_prog_deleting "Tar bort %N"
+#define qtn_ir_main_searchindir "Sök i katalog"
+#define qtn_ir_main_title "Internetradio"
+#define qtn_ir_main_unnamed_station "Namnlös kanal"
+#define qtn_ir_memlo_ram_out_of_mem "För lite minne för att utföra åtgärden. Radera data först."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Nästa kanal"
+#define qtn_ir_now_tooltip_play "Spela"
+#define qtn_ir_now_tooltip_previous "Föregående kanal"
+#define qtn_ir_now_tooltip_stop "Stopp"
+#define qtn_ir_now_wait_buffering "Buffrar"
+#define qtn_ir_now_wait_buffering_perc "Buffrar %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ingen nätanslutning"
+#define qtn_ir_nwcontroller_err_nosnaps "Ingen kopplingspunkt definierad"
+#define qtn_ir_options_add "Lägg till i favoriter"
+#define qtn_ir_options_add_manually "Lägg till kanal manuellt"
+#define qtn_ir_options_change "Ändra"
+#define qtn_ir_options_clearhistory "Rensa historik"
+#define qtn_ir_options_editstation "Redigera kanal"
+#define qtn_ir_options_equalizer "Equalizer"
+#define qtn_ir_options_exit "Avsluta"
+#define qtn_ir_options_findnmusicstore "Hitta i Musikbutik"
+#define qtn_ir_options_fmtrans "FM-sändare"
+#define qtn_ir_options_gotomusicstore "GÃ¥ till Musikbutik"
+#define qtn_ir_options_help "Hjälp"
+#define qtn_ir_options_history "Historik"
+#define qtn_ir_options_info "Kanalinfo"
+#define qtn_ir_options_mainview "GÃ¥ till huvudvyn"
+#define qtn_ir_options_mark "Markera"
+#define qtn_ir_options_markall "Markera alla"
+#define qtn_ir_options_markunmark "Markera/Avmarkera"
+#define qtn_ir_options_now "GÃ¥ till Lyssna nu"
+#define qtn_ir_options_off "Av"
+#define qtn_ir_options_on "PÃ¥"
+#define qtn_ir_options_searchag "Ny sökning"
+#define qtn_ir_options_select "Välj"
+#define qtn_ir_options_settings "Inställningar"
+#define qtn_ir_options_station "Kanal"
+#define qtn_ir_options_stereowidening "Stereoutvidgning"
+#define qtn_ir_options_unmark "Avmarkera"
+#define qtn_ir_options_unmarkall "Avmarkera alla"
+#define qtn_ir_playfail_err "Radiouppspelning misslyckades"
+#define qtn_ir_playlist_title "Mottagna länkar"
+#define qtn_ir_popup_no_results "Inga träffar"
+#define qtn_ir_popup_toomany_results "För många träffar. Förfina din sökterm."
+#define qtn_ir_results_none "Inga matchande kanaler hittades. Sök igen."
+#define qtn_ir_search_result "%0U[13]:%1N träff"
+#define qtn_ir_search_results "%0U[10]:%1N träffar"
+#define qtn_ir_set_folder_internetradio "Internetradio"
+#define qtn_ir_set_folder_irradio "Internetradio"
+#define qtn_ir_settings_3g "3G-anslut.bithastighet"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS-anslut.bithastighet"
+#define qtn_ir_settings_network "Nätverksanslutning"
+#define qtn_ir_settings_snap_default "Standardanslutning"
+#define qtn_ir_settings_title "Inställningar"
+#define qtn_ir_settings_wifi "Wi-Fi-anslut.bithastighet"
+#define qtn_ir_softkey_back "Tillbaka"
+#define qtn_ir_softkey_cancel "Avbryt"
+#define qtn_ir_softkey_done "Klar"
+#define qtn_ir_softkey_no "Nej"
+#define qtn_ir_softkey_options "Val"
+#define qtn_ir_softkey_select "Välj"
+#define qtn_ir_softkey_yes "Ja"
+#define qtn_ir_station_saved "Kanal sparad"
+#define qtn_ir_stationlist_nomatches "(inga träffar)"
+#define qtn_ir_stations_popup_delete "Ta bort\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Ta bort %N kanaler?"
+#define qtn_ir_stations_popup_removed "%U[87] borttagen"
+#define qtn_ir_stations_popup_removed_many "%N kanaler borttagna"
+#define qtn_ir_stations_popup_save "Spara kanal i favoriter?"
+#define qtn_ir_suboptions_delete "Radera"
+#define qtn_ir_suboptions_details "Info"
+#define qtn_ir_suboptions_move "Flytta"
+#define qtn_ir_terms_details "Genom att godkänna Villkoren nedan ingår du ett avtal i den utsträckning som tillåts enligt tillämplig lag och som inte vidare begränsas eller förbjuds med avseende på alla materiella rättigheter"
+#define qtn_ir_terms_heading "Villkor"
+#define qtn_ir_terms_softkey_accept "Godkänn"
+#define qtn_ir_terms_softkey_decline "Avböj"
+#define qtn_ir_title_history "Historik"
+#define qtn_ir_tooltip_addalltofav "Lägg till alla i favoriter"
+#define qtn_ir_tooltip_addstation "Lägg till kanal manu."
+#define qtn_ir_tooltip_addtofav "Lägg till i favoriter"
+#define qtn_ir_tooltip_copy "Kopiera"
+#define qtn_ir_tooltip_findnstore "Hitta i Musikbutik"
+#define qtn_ir_tooltip_findst "Hitta kanaler"
+#define qtn_ir_tooltip_history "Historik"
+#define qtn_ir_tooltip_listen "Lyssna"
+#define qtn_ir_tooltip_paste "Klistra in"
+#define qtn_ir_tooltip_stationde "Kanalinfo"
+#define qtn_ir_top_title "Popul. kanaler"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Namn"
+#define qtn_ir_url_title "Lägg till kanal"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/06/internetradioai_06.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Nätradio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/06/terms_06.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Med Nokia Internet Radio-tjänsten (tjänsten) kan du upptäcka och ta del av innehållet på internetradiostationer. DU SAMTYCKER TILL ATT DIN ANVÄNDNING AV TJÄNSTEN INNEBÄR ATT DU LÄST DETTA AVTAL, FÖRSTÅR DET OCH ACCEPTERAR ATT VARA BUNDEN AV DESS VILLKOR OCH BESTÄMMELSER. Om du inte samtycker har du inte tillstånd att använda tjänsten.</p>
+
+<p></p>
+
+<h1>1. DEFINITIONER</h1>
+
+<p></p>
+
+<p>Med internetradiostationer avses enheter som i allmänhet producerar och distribuerar ljudinnehåll och relaterade metadata via internet i en ström.</p>
+
+<p></p>
+
+<p>Med länken till internetradiostationen avses en resurssökfunktion eller en uppsättning resurssökfunktioner som ger användaren tillgång till det innehåll som strömmas av internetradiostationen.</p>
+
+<p></p>
+
+<h1>2. TJÄNSTEN</h1>
+
+<p></p>
+
+<p>Tjänsten möjliggör följande:</p>
+<p>1. bläddring mellan länkar till internetradiostationer,</p>
+<p>2. åtkomst till innehållet på internetradiostationer,</p>
+
+<p></p>
+
+<h1>3. ANVÄNDNING AV TJÄNSTEN</h1>
+
+<p></p>
+
+<p>Användning av tjänsten är tillåtet endast för privat och icke-kommersiellt bruk. Nokia äger samtliga immateriella rättigheter i och till tjänsten.</p>
+
+<p></p>
+
+<p>Nokia förbehåller sig rätten att ändra dessa villkor och bestämmelser genom att informera dig om sådana ändringar.</p>
+
+<p></p>
+
+<h1>4. SEKRETESS</h1>
+
+<p></p>
+
+<p>Nokia lägger stor vikt vid att skydda användarens integritet genom att implementera strikta sekretessregler.</p>
+
+<p></p>
+
+<p>För att kunna övervaka användningen och förbättra tjänsten kan Nokia samla in användningsdata inklusive, men inte begränsat till, information om besökta internetradiostationer, tiden som tillbringats på varje station och de poster som klassats som favoriter.</p>
+
+<p></p>
+
+<p>Nokia samlar inte in någon information som möjliggör identifiering av användaren av tjänsten.</p>
+
+<p></p>
+
+<h1>5. TJÄNSTENS TILLGÄNGLIGHET</h1>
+
+<p></p>
+
+<p>Tjänsten tillhandahålls för din bekvämlighet. Den tillhandahålls i befintligt skick och i mån av tillgång. Nokia garanterar inte att tjänsten kan användas utan avbrott eller fel. Nokia förbehåller sig rätten att revidera tjänsten eller dra tillbaka tillgången till den när som helst.</p>
+
+<p></p>
+
+<p>Nokia kan tillhandahålla uppgraderingar för program som är relaterade till tjänsten efter eget gottfinnande.</p>
+
+<p></p>
+
+<h1>6. FRISKRIVNING OCH ANSVARSSKYLDIGHET</h1>
+
+<p></p>
+
+<p>För att göra tillgängligheten enkel för dig kan Nokia inkludera länkar till internetradiostationer som ägs eller drivs av tredje part. Nokia garanterar inte att länkar till internetradiostationer fungerar. Dessutom gäller att innehåll som inte är relaterat till Nokia på intet sätt innebär att Nokia godkänner innehållet som sådant, och inte heller de produkter eller tjänster som omnämns i sådant innehåll.</p>
+
+<p></p>
+
+<p>Du måste läsa igenom och godkänna varje stations användningsregler, om sådana finns, innan du får åtkomst till den. Du accepterar också att Nokia inte har någon kontroll över innehållet i tjänster från tredje part, och inte kan åta sig något ansvar för det innehåll som tillhandahålls av internetradiostationer.</p>
+
+<p></p>
+
+<p>Att komma åt innehållet på internetradiostationer med hjälp av tjänsten kan medföra att stora mängder data överförs genom tjänsteleverantörs nätverk. Kontakta tjänsteleverantören om du vill ha information om dataöverföringsavgifter. Observera att om du använder tjänsten med internetradiostationer som levererar högre bithastighetsströmmar till dig kan det innebära högre datatrafikkostnader.</p>
+
+<p></p>
+
+<p>Datatrafiken i samband med användningen av tjänsten kan inkludera minst följande: uppdatering av innehållet i stationskatalogen, strömning av data från internetradiostationen, insamling av statistiska data och uppgradering av internetradioprogrammet.</p>
+
+<p></p>
+
+<p>Nokia ansvarar inte för datatrafikkostnader i samband med din användning av tjänsten.</p>
+
+<p></p>
+
+<p>INGA GARANTIER AV NÅGOT SLAG, VARE SIG UTTRYCKTA ELLER UNDERFÖRSTÅDDA, INKLUSIVE MEN INTE BEGRÄNSAT TILL, GARANTIER AVSEENDE ÄGANDERÄTT ELLER SKYDD MOT INTRÅNG ELLER UNDERFÖRSTÅDDA GARANTIER OM SÄLJBARHET ELLER LÄMPLIGHET FÖR ETT VISST ÄNDAMÅL, GÖRS VAD GÄLLER TJÄNSTENS TILLGÄNGLIGHET, RIKTIGHET, TILLFÖRLITLIGHET ELLER INNEHÅLL. NOKIA ANSVARAR INTE FÖR NÅGRA DIREKTA, INDIREKTA, TILLFÄLLIGA ELLER SPECIELLA SKADOR ELLER FÖLJDSKADOR, UTEBLIVEN VINST ELLER FÖR VERKSAMHETSAVBROTT SOM ORSAKATS AV ANVÄNDNINGEN AV, ELLER OFÖRMÅGAN ATT ANVÄNDA, TJÄNSTEN, ÄVEN OM NOKIA HAR MEDDELATS OM RISKEN FÖR SÅDANA SKADOR. VISSA JURISDIKTIONER TILLÅTER INTE UNDANTAG FRÅN VISSA GARANTIER ELLER ANSVARSBEGRÄNSNINGAR, SÅ OVANSTÅENDE BEGRÄNSNINGAR ELLER UNDANTAG KANSKE INTE GÄLLER DIG. NOKIAS ANSVAR BEGRÄNSAS I SÅDANT FALL TILL DEN STÖRSTA OMFATTNING SOM TILLÅTS ENLIGT LAG.</p>
+
+<p></p>
+
+<p>Ingenting häri skall påverka de lagstadgade rättigheter som någon av parterna åtnjuter som konsument. Ingenting häri begränsar Nokias ansvar vid händelse av dödsfall eller personskada som orsakats av försummelse från Nokias sida.</p>
+
+<p></p>
+
+<h1>7. POLICY AVSEENDE PÅSTÅENDEN OM INTRÅNG I UPPHOVSRÄTT</h1>
+
+<p></p>
+
+<p>Om du anser att ditt upphovsrättsskyddade verk har hanterats på ett sätt som utgör ett intrång i upphovsrätten kan du meddela Nokia genom ett meddelande som innehåller följande:</p>
+
+<p></p>
+
+<p>(1) En fysisk eller elektronisk underskrift av en person med behörighet att agera för ägaren till den exklusiva rättighet i vilken intrång påstås ha skett,</p>
+
+<p></p>
+
+<p>(2) Identifiering eller beskrivning av det upphovsrättsskyddade verk i vilket intrång påstås ha skett,</p>
+
+<p></p>
+
+<p>(3) Identifiering eller beskrivning av det material som påstås utgöra intrång och information som rimligen är tillräcklig för att kunna hitta materialet,</p>
+
+<p></p>
+
+<p>(4) Namn, adress, telefonnummer, e-postadress och annan information så att Nokia kan kontakta dig,</p>
+
+<p></p>
+
+<p>(5) Ett utlåtande där du intygar att du har rimliga skäl att tro att användning av materialet på det sätt som orsakat klagomålet inte är godkänd av upphovsrättsinnehavaren, dess agent eller enligt lag, och</p>
+
+<p></p>
+
+<p>(6) Ett utlåtande där du intygar att informationen i meddelandet är korrekt och, med vetskap om påföljderna för mened, att du är behörig att agera för ägaren till en exklusiv rättighet i vilken intrång påstås ha skett.</p>
+
+<p></p>
+
+<p>Meddelandet skall skickas till vår utsedda agents adress:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GÄLLANDE LAGSTIFTNING</h1>
+
+<p></p>
+
+<p>Med "Nokia" avses i dessa villkor och bestämmelser Nokia Corporation. Nokia driver och kontrollerar tjänsten från platser i Finland. Följaktligen anses informationen om tjänsten härmed ha tillhandahållits i Finland.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Med ensamrätt.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/07/internetradio_07.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Spørg altid"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stationer er gemt"
+#define qtn_ir_added_single "%U[88] er gemt"
+#define qtn_ir_addmanually_unnamed "Intet navn"
+#define qtn_ir_addst_description "Beskrivelse"
+#define qtn_ir_addst_streamurl "URL-adresse på stream"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U – %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internetradio"
+#define qtn_ir_ai_radio_not_active "Radioen er ikke aktiv"
+#define qtn_ir_app_general_err "Intern fejl. Genstart programmet."
+#define qtn_ir_apps_grid "Intern.radio"
+#define qtn_ir_apps_list "Internetradio"
+#define qtn_ir_apps_skey "Internetradio"
+#define qtn_ir_apps_standby "Internetradio"
+#define qtn_ir_apps_swins "Internetradio"
+#define qtn_ir_apps_wheel "Internetradio"
+#define qtn_ir_bitrate_best "Bedste kvalitet"
+#define qtn_ir_bitrate_high "Høj kvalitet"
+#define qtn_ir_bitrate_standard "Standardkvalitet"
+#define qtn_ir_cost_heading "Vigtig meddelelse"
+#define qtn_ir_cost_softkey_continue "Fortsæt"
+#define qtn_ir_cost_softkey_exit "Afslut"
+#define qtn_ir_cost_title "Internetradio"
+#define qtn_ir_cost_warning "Internetradio bruger en dataforbindelse fra telefonen til radiotransmissioner. Dette anbefales kun, hvis du har et dataabonnement med ubegrænset trafik. Hvis du ikke er sikker på, hvad du skal betale for transmission af data, skal du kontakte din operatør, inden du fortsætter."
+#define qtn_ir_country_list_expanded "%N stationer"
+#define qtn_ir_countryregion_title "Lande/regioner"
+#define qtn_ir_discover_beststations "Nogle af de bedste stationer"
+#define qtn_ir_discover_country_region "Gennemse efter land/reg."
+#define qtn_ir_discover_genre "Gennemse efter genre"
+#define qtn_ir_discover_genre_expanded "Stationer sorteret efter genre"
+#define qtn_ir_discover_langauge "Gennemse efter sprog"
+#define qtn_ir_discover_language_expanded "Stationer sorteret efter sprog"
+#define qtn_ir_discover_staticountryreg "Station. sorteret eft. land/reg."
+#define qtn_ir_discover_title "Stationsoversigt"
+#define qtn_ir_discover_top "Mest populære stationer"
+#define qtn_ir_edit_title "Rediger station"
+#define qtn_ir_err_operation "Der opstod en fejl under handlingen. Prøv igen."
+#define qtn_ir_err_url_unavail "URL-adressen er ikke tilgængelig"
+#define qtn_ir_error_address "Forkert adresse på internetradiostation"
+#define qtn_ir_error_connection "Timeout på forbindelse. Prøv igen."
+#define qtn_ir_error_favourites "Der er ikke nok plads på listen over foretrukne til, at stationen kan gemmes"
+#define qtn_ir_error_general "Der kunne ikke oprettes forbindelse til stationen"
+#define qtn_ir_error_isds_unavailable "Tjenesten med oversigten over internetstationer er ikke tilgængelig i øjeblikket"
+#define qtn_ir_error_notavailable "Der er ingen tilgængelige streaminglinks"
+#define qtn_ir_error_notinisds "Elementet er fjernet"
+#define qtn_ir_error_search "Indtast et søgeord"
+#define qtn_ir_findst_addstation "Tilføj station manuelt"
+#define qtn_ir_findst_addtofav "Tilføj en station i Foretrukne"
+#define qtn_ir_findst_browsesds "Gennemse stat.oversigt"
+#define qtn_ir_findst_search_ensrhterm "Indtast et søgeord"
+#define qtn_ir_findst_softkey_search "Søg"
+#define qtn_ir_findstation_title "Stationssøgning"
+#define qtn_ir_firstuse_title "Int.radio: Velkommen"
+#define qtn_ir_genre_list_expanded "%N stationer"
+#define qtn_ir_genre_title "Genrer"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Ingen oversigt"
+#define qtn_ir_homescreen_buffering "Gemmer i buffer"
+#define qtn_ir_homescreen_lastplayed "Senest afspillet"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Land/region:"
+#define qtn_ir_info_details_description "Beskrivelse:"
+#define qtn_ir_info_details_genre "Genre(r):"
+#define qtn_ir_info_details_language "Sprog:"
+#define qtn_ir_info_details_name "Navn:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Stationsoplys."
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Sta.overs."
+#define qtn_ir_info_details_type_manual "Brug.def."
+#define qtn_ir_info_details_unnamed "IntetNavn"
+#define qtn_ir_info_softkey_close "Luk"
+#define qtn_ir_language_list_expanded "%N stationer"
+#define qtn_ir_language_title "Sprog"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Indlæser"
+#define qtn_ir_loading_percent_sign "%N %"
+#define qtn_ir_loading_searching "Søger"
+#define qtn_ir_main_descriptive_text "Tilføj stationer: Søg efter stationer på værkt.linjen"
+#define qtn_ir_main_discover_expanded "Opdag nye radiostationer"
+#define qtn_ir_main_last "Senest afspillet"
+#define qtn_ir_main_now "Nu afspilles"
+#define qtn_ir_main_prog_deleting "Sletter %N"
+#define qtn_ir_main_searchindir "Søg i oversigt"
+#define qtn_ir_main_title "Internetradio"
+#define qtn_ir_main_unnamed_station "Intet navn"
+#define qtn_ir_memlo_ram_out_of_mem "Der er ikke nok hukommelse til handlingen. Slet nogle data først."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Næste station"
+#define qtn_ir_now_tooltip_play "Afspil"
+#define qtn_ir_now_tooltip_previous "Forrige station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Gemmer i buffer"
+#define qtn_ir_now_wait_buffering_perc "Gemmer i buffer\n%N %"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ingen netværks­forbindelse"
+#define qtn_ir_nwcontroller_err_nosnaps "Der er ikke angivet et adgangspunkt"
+#define qtn_ir_options_add "Tilføj til Foretrukne"
+#define qtn_ir_options_add_manually "Tilføj station manuelt"
+#define qtn_ir_options_change "Skift"
+#define qtn_ir_options_clearhistory "Ryd oversigt"
+#define qtn_ir_options_editstation "Rediger station"
+#define qtn_ir_options_equalizer "Equalizer"
+#define qtn_ir_options_exit "Afslut"
+#define qtn_ir_options_findnmusicstore "Find i Musikbutik"
+#define qtn_ir_options_fmtrans "FM-sender"
+#define qtn_ir_options_gotomusicstore "GÃ¥ til Musikbutik"
+#define qtn_ir_options_help "Hjælp"
+#define qtn_ir_options_history "Oversigt"
+#define qtn_ir_options_info "Stationsoplysninger"
+#define qtn_ir_options_mainview "GÃ¥ til hovedvisning"
+#define qtn_ir_options_mark "Markér"
+#define qtn_ir_options_markall "Markér alle"
+#define qtn_ir_options_markunmark "Markér/fjern markering"
+#define qtn_ir_options_now "GÃ¥ til Nu afspilles"
+#define qtn_ir_options_off "Fra"
+#define qtn_ir_options_on "Til"
+#define qtn_ir_options_searchag "Søg igen"
+#define qtn_ir_options_select "Vælg"
+#define qtn_ir_options_settings "Indstillinger"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereoudvidelse"
+#define qtn_ir_options_unmark "Fjern markering"
+#define qtn_ir_options_unmarkall "Fjern markering af alle"
+#define qtn_ir_playfail_err "Der kunne ikke afspilles radio"
+#define qtn_ir_playlist_title "Modtagne links"
+#define qtn_ir_popup_no_results "Der blev ikke fundet nogen resultater"
+#define qtn_ir_popup_toomany_results "Der blev fundet for mange resultater. Begræns søgningen."
+#define qtn_ir_results_none "Der blev ikke fundet nogen stationer, der opfylder søgekriterierne. Søg igen."
+#define qtn_ir_search_result "%0U[10]:%1N resultat"
+#define qtn_ir_search_results "%0U[10]:%1N result."
+#define qtn_ir_set_folder_internetradio "Internetradio"
+#define qtn_ir_set_folder_irradio "Internetradio"
+#define qtn_ir_settings_3g "Bithastighed: 3G-forb."
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Bithastighed: GPRS-forb."
+#define qtn_ir_settings_network "Netværksforbindelse"
+#define qtn_ir_settings_snap_default "Standardforbindelse"
+#define qtn_ir_settings_title "Indstillinger"
+#define qtn_ir_settings_wifi "Bithastighed: Wi-Fi-forb."
+#define qtn_ir_softkey_back "Tilbage"
+#define qtn_ir_softkey_cancel "Annuller"
+#define qtn_ir_softkey_done "Udført"
+#define qtn_ir_softkey_no "Nej"
+#define qtn_ir_softkey_options "Valg"
+#define qtn_ir_softkey_select "Vælg"
+#define qtn_ir_softkey_yes "Ja"
+#define qtn_ir_station_saved "Stationen er gemt"
+#define qtn_ir_stationlist_nomatches "(ingen fundne)"
+#define qtn_ir_stations_popup_delete "Slet\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Vil du slette %N stationer?"
+#define qtn_ir_stations_popup_removed "%U[87] er slettet"
+#define qtn_ir_stations_popup_removed_many "%N stationer er slettet"
+#define qtn_ir_stations_popup_save "Vil du gemme stationen i Foretrukne?"
+#define qtn_ir_suboptions_delete "Slet"
+#define qtn_ir_suboptions_details "Detaljer"
+#define qtn_ir_suboptions_move "Flyt"
+#define qtn_ir_terms_details "Hvis du accepterer vilkårene og betingelserne nedenfor, indgår du en kontrakt i henhold til gældende lovgivning uden yderligere begrænsninger eller forbud, hvad angår alle materielle rettigheder."
+#define qtn_ir_terms_heading "Vilkår og betingelser"
+#define qtn_ir_terms_softkey_accept "Acceptér"
+#define qtn_ir_terms_softkey_decline "Afvis"
+#define qtn_ir_title_history "Oversigt"
+#define qtn_ir_tooltip_addalltofav "Tilføj alle i Foretrukne"
+#define qtn_ir_tooltip_addstation "Tilføj station manuelt"
+#define qtn_ir_tooltip_addtofav "Tilføj i Foretrukne"
+#define qtn_ir_tooltip_copy "Kopiér"
+#define qtn_ir_tooltip_findnstore "Find i Musikbutik"
+#define qtn_ir_tooltip_findst "Søg efter stationer"
+#define qtn_ir_tooltip_history "Oversigt"
+#define qtn_ir_tooltip_listen "Aflyt"
+#define qtn_ir_tooltip_paste "Sæt ind"
+#define qtn_ir_tooltip_stationde "Stationsdetaljer"
+#define qtn_ir_top_title "Populære stat."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Navn"
+#define qtn_ir_url_title "Tilføj station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/07/internetradioai_07.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internetradio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/07/terms_07.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokias Internetradiotjeneste ("Tjenesten") giver dig mulighed for at opdage og opleve indholdet af internetradiostationer. DU ACCEPTERER, AT DU MED DIN BRUG AF TJENESTEN ANERKENDER, AT DU HAR LÆST DENNE AFTALE, AT DU FORSTÅR DEN, OG AT DU INDVILLIGER I AT VÆRE UNDERLAGT DENS VILKÅR OG BETINGELSER. Hvis du ikke accepterer, skal du være opmærksom på, at du ikke kan bruge tjenesten.</p>
+
+<p></p>
+
+<h1>1. DEFINITIONER</h1>
+
+<p></p>
+
+<p>Internetradiostationer betegner enheder, som producerer og distribuerer lydindhold og relaterede metadata over internettet ved hjælp af streaming.</p>
+
+<p></p>
+
+<p>Linket til internetradiostationen betegner en internetadresse eller en samling af internetadresser, der giver brugeren adgang til det indhold, som internetradiostationen streamer.</p>
+
+<p></p>
+
+<h1>2. TJENESTEN</h1>
+
+<p></p>
+
+<p>Tjenesten muliggør følgende funktioner:</p>
+<p>1. søgning efter links til internetradiostationer;</p>
+<p>2. adgang til indholdet af internetradiostationer;</p>
+
+<p></p>
+
+<h1>3. BRUG AF TJENESTEN</h1>
+
+<p></p>
+
+<p>Tjenesten må kun anvendes til privat og ikke-kommerciel brug. Nokia ejer alle intellektuelle rettigheder i og til tjenesten.</p>
+
+<p></p>
+
+<p>Nokia forbeholder sig retten til at ændre disse termer og betingelser ved at informere dig om sådanne ændringer.</p>
+
+<p></p>
+
+<h1>4. PERSONLIGE OPLYSNINGER</h1>
+
+<p></p>
+
+<p>Nokia har forpligtet sig til at beskytte brugernes privatliv ved at iværksætte en streng fortrolighedspolitik.</p>
+
+<p></p>
+
+<p>For at kunne kontrollere og forbedre tjenesten vil Nokia måske indsamle brugerdata, som inkluderer, men ikke begrænser sig til, informationer om, hvilke internetradiostationer brugerne anvender, den tid de tilbringer på hver station, og hvilke elementer de vurderer som favoritter.</p>
+
+<p></p>
+
+<p>Nokia indsamler ikke nogen information, som giver mulighed for identifikation af tjenestens brugere.</p>
+
+<p></p>
+
+<h1>5. TJENESTENS TILGÆNGELIGHED</h1>
+
+<p></p>
+
+<p>Tjenesten er udviklet som en service til dig. Den stilles til rådighed, som den er og forefindes. Nokia garanterer ikke, at Tjenesten vil fungere uden afbrydelser og fejl.  Nokia forbeholder sig ret til at revidere Tjenesten eller til at fjerne adgangen til den på et hvilket som helst tidspunkt.</p>
+
+<p></p>
+
+<p>Nokia kan stille opgraderinger til rådighed for de softwareapplikationer, der er relateret til tjenesten</p>
+
+<p></p>
+
+<h1>6. ANSVARSFRASKRIVELSE OG ERSTATNINGSANSVAR</h1>
+
+<p></p>
+
+<p>Nokia kan inkludere links til internetradiostationer, som ejes og drives af tredjepart. Nokia garanterer ikke, at linkene til internetradiostationerne er klar til brug. Desuden implicerer det indhold, der ikke er relateret til Nokia, på ingen måde, at Nokia billiger indholdet som sådan eller de produkter eller tjenester, der nævnes i dette indhold.</p>
+
+<p></p>
+
+<p>Du skal gennemlæse og acceptere hver enkelt stations anvendelsesregler, før du benytter den. Du accepterer ligeledes, at Nokia ikke har nogen kontrol over indholdet af tredjepartstjenester og ikke kan påtage sig ansvar for indhold, der stilles til rådighed af internetradiostationer.</p>
+
+<p></p>
+
+<p>At bruge tjenesten til at få adgang til indholdet af internetradiostationerne kan involvere overførsel af store datamængder gennem din tjenesteudbyders netværk. Kontakt din tjenesteudbyder, hvis du ønsker informationer om overførselsomkostninger. Bemærk, at anvendelsen af Tjenesten sammen med internetradiostationer, som leverer en højere bitrate, kan være forbundet med højere omkostninger i forhold til dataoverførsel.</p>
+
+<p></p>
+
+<p>Den dataoverførsel, der er forbundet med anvendelsen af tjenesten kan som minimum omfatte: opdatering af indholdet af stationernes oversigt, streaming af data fra internetradiostationen, indsamling af statistiske data og opgradering af internetradioapplikationen.</p>
+
+<p></p>
+
+<p>Nokia er ikke erstatningspligtig for de omkostninger til dataoverførsel, der er forbundet med din anvendelse af Tjenesten.</p>
+
+<p></p>
+
+<p>DER STILLES INGEN GARANTI AF NOGEN ART, HVERKEN UDTRYKKELIG ELLER STILTIENDE, HERUNDER, MEN IKKE BEGRÆNSET TIL, GARANTI FOR ADKOMST ELLER IKKE-KRÆNKELSE AF ELLER STILTIENDE GARANTIER OM SALGBARHED OG EGNETHED TIL ET BESTEMT FORMÅL, I FORHOLD TIL TJENESTENS TILGÆNGELIGHED, PRÆCISION, PÅLIDELIGHED ELLER INDHOLD. NOKIA PÅTAGER SIG IKKE ANSVARET FOR NOGEN DIREKTE, INDIREKTE, TILFÆLDIGE, KONKRET DOKUMENTERBARE SKADER ELLER FØLGESKADER, DRIFTSTAB ELLER DRIFTSAFBRYDELSE, DER OPSTÅR SOM FØLGE AF BRUG AF ELLER MANGLENDE MULIGHED FOR AT BRUGE TJENESTEN, HELLER IKKE SELV OM NOKIA ER BLEVET UNDERRETTET OM MULIGHEDEN FOR SÅDANNE SKADER. VISSE LANDES LOVGIVNING TILLADER IKKE UDELUKKELSE AF STILTIENDE GARANTIER. HVIS DETTE ER TILFÆLDET, ER DU MULIGVIS IKKE OMFATTET AF DEN OVENNÆVNTE ANSVARSFRASKRIVELSE. NOKIAS ERSTATNINGSANSVAR ER I SÅDAN ET TILFÆLDE BEGRÆNSET TIL DEN HØJESTE GRAD, DER ER TILLADT AF LOVGIVNINGEN.</p>
+
+<p></p>
+
+<p>Intet heri forringer nogen parts lovbestemte forbrugerrettigheder.  Intet heri begrænser Nokias erstatningsansvar i tilfælde af død eller personskade, der opstår som følge af Nokias uagtsomhed.</p>
+
+<p></p>
+
+<h1>7. POLITIK ANGÅENDE BESKYLDNING OM KRÆNKELSE AF OPHAVSRET</h1>
+
+<p></p>
+
+<p>Hvis du mener, at dit ophavsretligt beskyttede værk er blevet behandlet på en måde, der kan betegnes som krænkelse af ophavsret, kan du underrette Nokia ved at sende en meddelelse, der indeholder følgende:</p>
+
+<p></p>
+
+<p>(1) En fysisk eller elektronisk signatur fra en person, der er autoriseret til at handle på vegne af ejeren af den rettighed, der påstås krænket;</p>
+
+<p></p>
+
+<p>(2) En identifikation eller beskrivelse af det beskyttede værk, som påstås krænket;</p>
+
+<p></p>
+
+<p>(3) Identifikation eller beskrivelse af det materiale, som påstås at krænke ophavsretten, og informationer, der er tilstrækkelige til at lokalisere materialet;</p>
+
+<p></p>
+
+<p>(4) Dit navn, adresse, telefonnummer, e-mail-adresse og enhver anden information, som vil give Nokia mulighed for at kontakte dig;</p>
+
+<p></p>
+
+<p>(5) En erklæring om, at du er i god tro om, at den brug af materialet, som du klager over, ikke er autoriseret af ejeren af ophavsretten, vedkommendes agent eller af loven; og</p>
+
+<p></p>
+
+<p>(6) En erklæring om, at informationerne i din meddelelse er korrekte, og under mened at du er autoriseret til at handle på vegne af ejeren af den eneret, som påstås krænket.</p>
+
+<p></p>
+
+<p>Erklæringen skal sendes til vores agent på følgende adresse:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GÆLDENDE LOVGIVNING</h1>
+
+<p></p>
+
+<p>Når det anvendes i disse vilkår og betingelser, betyder "Nokia" Nokia Corporation. Nokia driver og kontrollerer tjenesten fra Finland. Informationen, der er indeholdt på tjenesten, anses for at være fremsat i Finland.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Alle rettigheder forbeholdes.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/08/internetradio_08.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Spør alltid"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N kanaler lagret"
+#define qtn_ir_added_single "%U[90] lagret"
+#define qtn_ir_addmanually_unnamed "Uten navn"
+#define qtn_ir_addst_description "Beskrivelse"
+#define qtn_ir_addst_streamurl "URL for direkteavspilling"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internett-radio"
+#define qtn_ir_ai_radio_not_active "Radio er ikke aktiv"
+#define qtn_ir_app_general_err "Intern feil. Start programmet på nytt."
+#define qtn_ir_apps_grid "Int.-radio"
+#define qtn_ir_apps_list "Internett-radio"
+#define qtn_ir_apps_skey "Internett-radio"
+#define qtn_ir_apps_standby "Internett-radio"
+#define qtn_ir_apps_swins "Internett-radio"
+#define qtn_ir_apps_wheel "Internett-radio"
+#define qtn_ir_bitrate_best "Best kvalitet"
+#define qtn_ir_bitrate_high "Høy kvalitet"
+#define qtn_ir_bitrate_standard "Standard kvalitet"
+#define qtn_ir_cost_heading "Viktig melding"
+#define qtn_ir_cost_softkey_continue "Fortsett"
+#define qtn_ir_cost_softkey_exit "Avslutt"
+#define qtn_ir_cost_title "Internett-radio"
+#define qtn_ir_cost_warning "Internett-radio bruker datatilkoblingen på telefonen til radiooverføringer. Dette anbefales bare hvis du har en avtale om faste utgifter for dataoverføring. Forhør deg med operatøren din før du fortsetter hvis du er usikker på kostnadene ved dataoverføring."
+#define qtn_ir_country_list_expanded "%N kanaler"
+#define qtn_ir_countryregion_title "Land/områder"
+#define qtn_ir_discover_beststations "Utvalg av de beste kanalene"
+#define qtn_ir_discover_country_region "Bla gj. etter land/område"
+#define qtn_ir_discover_genre "Bla gj. etter sjanger"
+#define qtn_ir_discover_genre_expanded "Kanaler sortert etter sjanger"
+#define qtn_ir_discover_langauge "Bla gjennom etter språk"
+#define qtn_ir_discover_language_expanded "Kanaler sortert etter språk"
+#define qtn_ir_discover_staticountryreg "Kanaler sort. etter land/omr."
+#define qtn_ir_discover_title "Kanaloversikt"
+#define qtn_ir_discover_top "Populære kanaler"
+#define qtn_ir_edit_title "Rediger kanal"
+#define qtn_ir_err_operation "Feil i operasjon. Prøv på nytt."
+#define qtn_ir_err_url_unavail "URL utilgjengelig"
+#define qtn_ir_error_address "Feil adresse for Internett-radiokanal"
+#define qtn_ir_error_connection "Tilkoblingen ble tidsavbrutt. Prøv igjen."
+#define qtn_ir_error_favourites "Ikke nok plass i Favoritter til å lagre valget"
+#define qtn_ir_error_general "Kan ikke koble til kanalen"
+#define qtn_ir_error_isds_unavailable "Tjenesten for Internett-kanaloversikt er midlertidig utilgjengelig"
+#define qtn_ir_error_notavailable "Ingen direkteavspillings­koblinger tilgjengelig"
+#define qtn_ir_error_notinisds "Elementet er ikke lenger tilgjengelig"
+#define qtn_ir_error_search "Skriv inn et søkeord"
+#define qtn_ir_findst_addstation "Legg til kanal manuelt"
+#define qtn_ir_findst_addtofav "Legg til kanalen i Favoritter"
+#define qtn_ir_findst_browsesds "Bla gj. kanaloversikt"
+#define qtn_ir_findst_search_ensrhterm "Skriv inn et søkeord"
+#define qtn_ir_findst_softkey_search "Søk"
+#define qtn_ir_findstation_title "Finn kanaler"
+#define qtn_ir_firstuse_title "Int.-radio: Velkommen"
+#define qtn_ir_genre_list_expanded "%N kanaler"
+#define qtn_ir_genre_title "Sjangre"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Ingen historikk"
+#define qtn_ir_homescreen_buffering "Bufrer"
+#define qtn_ir_homescreen_lastplayed "Sist spilt"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Land/område:"
+#define qtn_ir_info_details_description "Beskrivelse:"
+#define qtn_ir_info_details_genre "Sjanger(e):"
+#define qtn_ir_info_details_language "Språk:"
+#define qtn_ir_info_details_name "Navn:"
+#define qtn_ir_info_details_streams "Direkteavspilling:"
+#define qtn_ir_info_details_title "Kanalinfo"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Kan.overs."
+#define qtn_ir_info_details_type_manual "Bruk.def."
+#define qtn_ir_info_details_unnamed "U/navn"
+#define qtn_ir_info_softkey_close "Lukk"
+#define qtn_ir_language_list_expanded "%N kanaler"
+#define qtn_ir_language_title "Språk"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Laster"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Søker"
+#define qtn_ir_main_descriptive_text "Legg til kanaler med Finn kanaler på verktøylinjen"
+#define qtn_ir_main_discover_expanded "Oppdag nye radiokanaler"
+#define qtn_ir_main_last "Sist spilte"
+#define qtn_ir_main_now "Spilles nå"
+#define qtn_ir_main_prog_deleting "Sletter %N"
+#define qtn_ir_main_searchindir "Søk i katalog"
+#define qtn_ir_main_title "Internett-radio"
+#define qtn_ir_main_unnamed_station "Kanal uten navn"
+#define qtn_ir_memlo_ram_out_of_mem "Ikke nok minne til å utføre operasjon. Slett noen data først."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Neste kanal"
+#define qtn_ir_now_tooltip_play "Spill av"
+#define qtn_ir_now_tooltip_previous "Forrige kanal"
+#define qtn_ir_now_tooltip_stop "Stopp"
+#define qtn_ir_now_wait_buffering "Bufrer"
+#define qtn_ir_now_wait_buffering_perc "Bufrer %N %"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ingen nettverks­tilkobling"
+#define qtn_ir_nwcontroller_err_nosnaps "Tilgangspunkt ikke definert"
+#define qtn_ir_options_add "Legg til i Favoritter"
+#define qtn_ir_options_add_manually "Legg til kanal manuelt"
+#define qtn_ir_options_change "Endre"
+#define qtn_ir_options_clearhistory "Tøm historikk"
+#define qtn_ir_options_editstation "Rediger kanal"
+#define qtn_ir_options_equalizer "Equalizer"
+#define qtn_ir_options_exit "Avslutt"
+#define qtn_ir_options_findnmusicstore "Finn i Musikkbutikk"
+#define qtn_ir_options_fmtrans "FM-sender"
+#define qtn_ir_options_gotomusicstore "GÃ¥ til Musikkbutikk"
+#define qtn_ir_options_help "Hjelp"
+#define qtn_ir_options_history "Historikk"
+#define qtn_ir_options_info "Kanalinformasjon"
+#define qtn_ir_options_mainview "GÃ¥ til hovedvisning"
+#define qtn_ir_options_mark "Merk"
+#define qtn_ir_options_markall "Merk alt"
+#define qtn_ir_options_markunmark "Merk/fjern merking"
+#define qtn_ir_options_now "Gå til Spiller nå"
+#define qtn_ir_options_off "Av"
+#define qtn_ir_options_on "PÃ¥"
+#define qtn_ir_options_searchag "Søk på nytt"
+#define qtn_ir_options_select "Velg"
+#define qtn_ir_options_settings "Innstillinger"
+#define qtn_ir_options_station "Kanal"
+#define qtn_ir_options_stereowidening "Stereoutvidelse"
+#define qtn_ir_options_unmark "Fjern merking"
+#define qtn_ir_options_unmarkall "Fjern all merking"
+#define qtn_ir_playfail_err "Radioavspilling mislyktes"
+#define qtn_ir_playlist_title "Mottatte kobl."
+#define qtn_ir_popup_no_results "Ingen treff funnet"
+#define qtn_ir_popup_toomany_results "For mange treff. Avgrens søket."
+#define qtn_ir_results_none "Fant ingen treff i kanaler. Prøv på nytt."
+#define qtn_ir_search_result "%0U[13]:%1N treff"
+#define qtn_ir_search_results "%0U[12]:%1N treff"
+#define qtn_ir_set_folder_internetradio "Internett-radio"
+#define qtn_ir_set_folder_irradio "Internett-radio"
+#define qtn_ir_settings_3g "Bithastigh. for 3G-tilkobl."
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Bithastigh. GPRS-tilkobl."
+#define qtn_ir_settings_network "Nettverkstilkobling"
+#define qtn_ir_settings_snap_default "Standard tilkobling"
+#define qtn_ir_settings_title "Innstillinger"
+#define qtn_ir_settings_wifi "Bithastigh. Wi-Fi-tilkobl."
+#define qtn_ir_softkey_back "Tilbake"
+#define qtn_ir_softkey_cancel "Avbryt"
+#define qtn_ir_softkey_done "Utført"
+#define qtn_ir_softkey_no "Nei"
+#define qtn_ir_softkey_options "Valg"
+#define qtn_ir_softkey_select "Velg"
+#define qtn_ir_softkey_yes "Ja"
+#define qtn_ir_station_saved "Kanal lagret"
+#define qtn_ir_stationlist_nomatches "(ingen treff)"
+#define qtn_ir_stations_popup_delete "Slette\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Slette %N kanaler?"
+#define qtn_ir_stations_popup_removed "%U[89] slettet"
+#define qtn_ir_stations_popup_removed_many "%N kanaler slettet"
+#define qtn_ir_stations_popup_save "Lagre kanalen i Favoritter?"
+#define qtn_ir_suboptions_delete "Slett"
+#define qtn_ir_suboptions_details "Detaljer"
+#define qtn_ir_suboptions_move "Flytt"
+#define qtn_ir_terms_details "Ved å godta vilkårene under inngår du en avtale så langt dette tillates av gjeldende lovgivning og uten videre begrensninger eller forbud med hensyn til alle materielle rettigheter"
+#define qtn_ir_terms_heading "Vilkår"
+#define qtn_ir_terms_softkey_accept "Godta"
+#define qtn_ir_terms_softkey_decline "Avslå"
+#define qtn_ir_title_history "Historikk"
+#define qtn_ir_tooltip_addalltofav "Legg til alle i Favor."
+#define qtn_ir_tooltip_addstation "Legg til kanal manuelt"
+#define qtn_ir_tooltip_addtofav "Legg til i Favoritter"
+#define qtn_ir_tooltip_copy "Kopier"
+#define qtn_ir_tooltip_findnstore "Finn i Musikkbutikk"
+#define qtn_ir_tooltip_findst "Finn kanaler"
+#define qtn_ir_tooltip_history "Historikk"
+#define qtn_ir_tooltip_listen "Lytt til"
+#define qtn_ir_tooltip_paste "Lim inn"
+#define qtn_ir_tooltip_stationde "Detaljer om kanalen"
+#define qtn_ir_top_title "Pop. kanaler"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Navn"
+#define qtn_ir_url_title "Legg til kanal"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/08/internetradioai_08.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internett-radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/08/terms_08.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Med tjenesten Nokia Internett-radio (Tjenesten) kan du oppdage og oppleve innholdet på Internett-radiostasjoner. DU GODTAR AT DU VED Å BRUKE TJENESTEN BEKREFTER AT DU HAR LEST OG FORSTÅTT DENNE AVTALEN, OG AT DU ER BUNDET AV VILKÅRENE I DEN. Vær oppmerksom på at hvis du ikke godtar dette, har du ikke lov til å bruke Tjenesten.</p>
+
+<p></p>
+
+<h1>1. DEFINISJONER</h1>
+
+<p></p>
+
+<p>Med begrepet Internett-radiostasjoner menes enheter som i hovedsak produserer og distribuerer lydinnhold og tilknyttede metadata via Internett i en direkteavspilling.</p>
+
+<p></p>
+
+<p>Med begrepet Kobling til Internett-radiostasjon menes en ressursindikator eller et sett med ressursindikatorer som gjør det mulig for brukeren å få tilgang til innhold som spilles av direkte på Internett-radiostasjonen.</p>
+
+<p></p>
+
+<h1>2. TJENESTEN</h1>
+
+<p></p>
+
+<p>Tjenesten muliggjør følgende:</p>
+<p>1. søk på koblinger til Internett-radiostasjoner;</p>
+<p>2. tilgang til innholdet på Internett-radiostasjoner; og</p>
+
+<p></p>
+
+<h1>3. BRUK AV TJENESTEN</h1>
+
+<p></p>
+
+<p>Det er bare tillatt å bruke Tjenesten til privat bruk og ikke-kommersielle formål. Nokia eier alle åndsverkrettigheter i og til Tjenesten.</p>
+
+<p></p>
+
+<p>Nokia forbeholder seg retten til å endre disse vilkårene ved å informere deg om slike endringer.</p>
+
+<p></p>
+
+<h1>4. PERSONVERN</h1>
+
+<p></p>
+
+<p>Nokia er opptatt av å ivareta brukerens personvern ved å implementere strenge retningslinjer for konfidensialitet.</p>
+
+<p></p>
+
+<p>For å kunne overvåke bruken av og forbedre Tjenesten kan Nokia samle inn bruksdata, inkludert, men ikke begrenset til, informasjon om hvilke Internett-radiostasjoner som er besøkt, tiden som er brukt ved hver stasjon, og hvilke elementer som er angitt som favoritter.</p>
+
+<p></p>
+
+<p>Nokia samler ikke inn noen informasjon som kan identifisere brukeren av Tjenesten.</p>
+
+<p></p>
+
+<h1>5. TJENESTETILGJENGELIGHET</h1>
+
+<p></p>
+
+<p>Tjenesten leveres som et hjelpemiddel til deg. Den leveres "som den er" og "etter tilgjengelighet". Nokia garanterer ikke at Tjenesten vil fungere uavbrutt eller feilfritt. Nokia forbeholder seg retten til å revidere Tjenesten eller trekke tilbake tilgang til den når som helst.</p>
+
+<p></p>
+
+<p>Nokia kan levere oppgraderinger for programvare knyttet til Tjenesten etter eget skjønn.</p>
+
+<p></p>
+
+<h1>6. ANSVARSFRASKRIVELSE OG ANSVAR</h1>
+
+<p></p>
+
+<p>For å gjøre tilgangen enkel for deg kan Nokia inkludere koblinger til Internett-radiostasjoner som eies eller drives av tredjeparter. Nokia garanterer ikke at koblingene til Internett-radiostasjonene vil fungere. Innholdet som ikke er knyttet til Nokia, impliserer heller ikke på noen som helst måte at Nokia gir sin støtte til slikt innhold eller til produktene eller tjenestene som det henvises til i slikt innhold.</p>
+
+<p></p>
+
+<p>Du må lese gjennom og godta reglene for bruk som gjelder for hver stasjon, hvis noen, før du besøker den. Du godtar også at Nokia ikke har noen kontroll over innholdet i tredjepartstjenestene og ikke har noe ansvar for innholdet som leveres på Internett-radiostasjonene.</p>
+
+<p></p>
+
+<p>Hvis du prøver å få tilgang til innholdet på Internett-radiostasjonene ved hjelp av Tjenesten, kan det innebære overføring av store datamengder via tjenesteleverandørens nettverk. Ta kontakt med tjenesteleverandøren hvis du vil ha informasjon om prisene for dataoverføring. Vær oppmerksom på at bruk av Tjenesten med Internett-radiostasjoner som spilles av direkte ved høye bithastigheter, kan føre til høyere kostnader knyttet til datatrafikken.</p>
+
+<p></p>
+
+<p>Datatrafikken som er knyttet til bruken av Tjenesten, kan omfatte minst følgende: oppdatering av innholdet i stasjonenes katalog, avspilling av data direkte fra Internett-radiostasjonen, innsamling av statistiske data og oppgradering av Internett-radioprogrammet.</p>
+
+<p></p>
+
+<p>Nokia er ikke ansvarlig for kostnadene ved datatrafikk som er knyttet til din bruk av Tjenesten.</p>
+
+<p></p>
+
+<p>DET GIS INGEN GARANTIER AV NOE SLAG, VERKEN UTTRYKTE ELLER UNDERFORSTÅTTE, INKLUDERT, MEN IKKE BEGRENSET TIL, GARANTIER OM EIERSKAP ELLER IKKE-KRENKELSE ELLER UNDERFORSTÅTTE GARANTIER OM SALGBARHET ELLER EGNETHET FOR ET BESTEMT FORMÅL, I FORHOLD TIL TILGJENGELIGHETEN TIL, NØYAKTIGHETEN AV, PÅLITELIGHETEN TIL ELLER INNHOLDET I TJENESTEN. NOKIA ER IKKE ANSVARLIG FOR NOEN DIREKTE, INDIREKTE, TILFELDIGE ELLER SPESIELLE SKADER ELLER FØLGESKADER, TAPT FORTJENESTE ELLER DRIFTSAVBRUDD SOM OPPSTÅR SOM FØLGE AV BRUKEN AV ELLER MANGLENDE EVNE TIL Å BRUKE TJENESTEN, SELV OM NOKIA ER BLITT GJORT OPPMERKSOM PÅ MULIGHETEN FOR SLIKE SKADER. ENKELTE RETTSOMRÅDER TILLATER IKKE UTELUKKELSE AV ENKELTE GARANTIER ELLER ANSVARSBEGRENSNINGER, OG DET ER DERFOR IKKE SIKKERT AT BEGRENSNINGENE ELLER UTELUKKELSENE OVENFOR GJELDER FOR DEG. NOKIAS ANSVAR ER I SLIKE TILFELLER BEGRENSET I SÅ STOR GRAD SOM DET ER TILLATT I HENHOLD TIL LOVGIVNINGEN.</p>
+
+<p></p>
+
+<p>Ingenting i denne avtalen skal påvirke de lovfestede rettighetene til noen part som handler som en kunde. Ingenting i denne avtalen begrenser Nokias ansvar ved dødsfall eller personlig skade som er et resultat av Nokias uaktsomhet.</p>
+
+<p></p>
+
+<h1>7. RETNINGSLINJER VED PÃ…STANDER OM BRUDD PÃ… OPPHAVSRETT</h1>
+
+<p></p>
+
+<p>Hvis du tror at ditt opphavsrettslig beskyttede arbeid er håndtert på en måte som innebærer brudd på opphavsrett, kan du varsle Nokia ved å sende en beskjed som inneholder følgende:</p>
+
+<p></p>
+
+<p>(1) En fysisk eller elektronisk signatur av en person som er autorisert til å handle på vegne av eieren av den eksklusive rettigheten som det påstås er krenket;</p>
+
+<p></p>
+
+<p>(2) en identifikasjon eller beskrivelse av det opphavsrettslig beskyttede arbeidet som det påstås er krenket;</p>
+
+<p></p>
+
+<p>(3) en identifikasjon eller beskrivelse av materialet som det påstås er krenkende, og tilstrekkelig informasjon til å kunne lokalisere materialet;</p>
+
+<p></p>
+
+<p>(4) navnet ditt, adressen din, telefonnummeret ditt, e-postadressen din og enhver annen informasjon som gjør det mulig for Nokia å kontakte deg;</p>
+
+<p></p>
+
+<p>(5) en erklæring om at du tror helt og holdent at bruken av materialet slik det klages på, ikke er godkjent av eieren av eller representanten for opphavsretten eller loven; og</p>
+
+<p></p>
+
+<p>(6) en erklæring om at informasjonen i beskjeden er nøyaktig, og, med mulighet for å bli straffet for falsk forklaring, at du er autorisert til å kunne handle på vegne av eieren av en eksklusiv rettighet som det påstås er krenket.</p>
+
+<p></p>
+
+<p>Beskjeden må sendes til adressen til vår utpekte representant på:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GJELDENDE LOVGIVNING</h1>
+
+<p></p>
+
+<p>Der "Nokia" brukes i disse vilkårene, henvises det til Nokia Corporation. Nokia driver og kontrollerer Tjenesten fra steder i Finland. Derfor anses det som at informasjonen i Tjenesten er levert i Finland.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Med enerett.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/09/internetradio_09.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Kysy aina"
+#define qtn_ir_active_idle_data "%0U – %1U: %2U"
+#define qtn_ir_added_multi "%N kanavaa tallennettu"
+#define qtn_ir_added_single "%U[86] tallennettu"
+#define qtn_ir_addmanually_unnamed "Nimetön"
+#define qtn_ir_addst_description "Kuvaus"
+#define qtn_ir_addst_streamurl "Suoratoiston URL-osoite"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet-radio"
+#define qtn_ir_ai_radio_not_active "Radio ei käytössä"
+#define qtn_ir_app_general_err "Sisäinen virhe. Käynnistä sovellus uudelleen."
+#define qtn_ir_apps_grid "Intern.-radio"
+#define qtn_ir_apps_list "Internet-radio"
+#define qtn_ir_apps_skey "Internet-radio"
+#define qtn_ir_apps_standby "Internet-radio"
+#define qtn_ir_apps_swins "Internet-radio"
+#define qtn_ir_apps_wheel "Internet-radio"
+#define qtn_ir_bitrate_best "Paras laatu"
+#define qtn_ir_bitrate_high "Hyvä laatu"
+#define qtn_ir_bitrate_standard "Vakiolaatu"
+#define qtn_ir_cost_heading "Tärkeä huomautus"
+#define qtn_ir_cost_softkey_continue "Jatka"
+#define qtn_ir_cost_softkey_exit "Poistu"
+#define qtn_ir_cost_title "Internet-radio"
+#define qtn_ir_cost_warning "Internet-radio vastaanottaa radiolähetyksiä puhelimen datayhteyden kautta. Tämä on suositeltavaa vain, jos sinulla on kiinteään kuukausimaksuun perustuva tiedonsiirtosopimus. Jos et tiedä varmasti, mitä tiedonsiirto maksaa, tarkista asia palveluntarjoajalta, ennen kuin jatkat."
+#define qtn_ir_country_list_expanded "%N kanavaa"
+#define qtn_ir_countryregion_title "Maat tai alueet"
+#define qtn_ir_discover_beststations "Parhaiden kanavien valikoima"
+#define qtn_ir_discover_country_region "Selaa maan/alueen muk."
+#define qtn_ir_discover_genre "Selaa lajityypin mukaan"
+#define qtn_ir_discover_genre_expanded "Kanavat lajityypin mukaan"
+#define qtn_ir_discover_langauge "Selaa kielen mukaan"
+#define qtn_ir_discover_language_expanded "Kanavat kielen mukaan"
+#define qtn_ir_discover_staticountryreg "Kanavat järj. maitt./alueitt."
+#define qtn_ir_discover_title "Kanavahakem."
+#define qtn_ir_discover_top "Suosituimmat kanavat"
+#define qtn_ir_edit_title "Muokk. kanavaa"
+#define qtn_ir_err_operation "Toiminnossa tapahtui virhe. Yritä uudelleen."
+#define qtn_ir_err_url_unavail "URL-osoite ei käytettävissä"
+#define qtn_ir_error_address "Virheellinen Internet-radiokanavan osoite"
+#define qtn_ir_error_connection "Yhteyden aikakatkaisu. Yritä uudelleen."
+#define qtn_ir_error_favourites "Suosikeissa oleva tila ei riitä valinnan tallennukseen"
+#define qtn_ir_error_general "Yhteyttä kanavaan ei voi muodostaa"
+#define qtn_ir_error_isds_unavailable "Internetin kanavahakemisto­palvelu ei ole juuri nyt käytettävissä"
+#define qtn_ir_error_notavailable "Suoratoistolinkkejä ei saatavilla"
+#define qtn_ir_error_notinisds "Kohdetta ei enää ole"
+#define qtn_ir_error_search "Kirjoita hakusana"
+#define qtn_ir_findst_addstation "Lisää kanava itse"
+#define qtn_ir_findst_addtofav "Lisää kanava suosikkeihin"
+#define qtn_ir_findst_browsesds "Selaa kanavahakemistoa"
+#define qtn_ir_findst_search_ensrhterm "Kirjoita hakusana"
+#define qtn_ir_findst_softkey_search "Etsi"
+#define qtn_ir_findstation_title "Etsi kanavia"
+#define qtn_ir_firstuse_title "Int.-radio: Tervetuloa"
+#define qtn_ir_genre_list_expanded "%N kanavaa"
+#define qtn_ir_genre_title "Lajityypit"
+#define qtn_ir_history_artist_song "%0U – %1U"
+#define qtn_ir_history_no_history "Ei aiempia tietoja"
+#define qtn_ir_homescreen_buffering "Luetaan puskuriin"
+#define qtn_ir_homescreen_lastplayed "Viimeksi toistettu"
+#define qtn_ir_info_details_bitrate "%N kbit/s:"
+#define qtn_ir_info_details_countryregi "Maa tai alue:"
+#define qtn_ir_info_details_description "Kuvaus:"
+#define qtn_ir_info_details_genre "Lajityypit:"
+#define qtn_ir_info_details_language "Kieli:"
+#define qtn_ir_info_details_name "Nimi:"
+#define qtn_ir_info_details_streams "Suoratoisto:"
+#define qtn_ir_info_details_title "Kanavan tiedot"
+#define qtn_ir_info_details_type "Tyyppi:"
+#define qtn_ir_info_details_type_isds "Kanavah."
+#define qtn_ir_info_details_type_manual "Käytt. m."
+#define qtn_ir_info_details_unnamed "Nimetön"
+#define qtn_ir_info_softkey_close "Sulje"
+#define qtn_ir_language_list_expanded "%N kanavaa"
+#define qtn_ir_language_title "Kielet"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Haetaan"
+#define qtn_ir_loading_percent_sign "%N %"
+#define qtn_ir_loading_searching "Etsitään"
+#define qtn_ir_main_descriptive_text "Lisää kanavia työk.rivin Etsi kanavia -komennolla"
+#define qtn_ir_main_discover_expanded "Kokeile uusia radiokanavia"
+#define qtn_ir_main_last "Viim. toistettu"
+#define qtn_ir_main_now "Toisto"
+#define qtn_ir_main_prog_deleting "Poistetaan: %N"
+#define qtn_ir_main_searchindir "Etsi hakemistosta"
+#define qtn_ir_main_title "Internet-radio"
+#define qtn_ir_main_unnamed_station "Nimetön kanava"
+#define qtn_ir_memlo_ram_out_of_mem "Muisti ei riitä toiminnon suorittamiseen. Poista ensin tietoja."
+#define qtn_ir_now_artist_song "%0U – %1U"
+#define qtn_ir_now_bitrate "%N kbit/s"
+#define qtn_ir_now_bitrate_mbps "%N Mbit/s"
+#define qtn_ir_now_bytecountermb "%N Mt"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N Mt"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Seuraava kanava"
+#define qtn_ir_now_tooltip_play "Toista"
+#define qtn_ir_now_tooltip_previous "Edellinen kanava"
+#define qtn_ir_now_tooltip_stop "Lopeta"
+#define qtn_ir_now_wait_buffering "Luetaan puskuriin"
+#define qtn_ir_now_wait_buffering_perc "Luetaan puskuriin %N %"
+#define qtn_ir_nwcontroller_err_noconnectivity "Yhteyttä verkkoon ei ole"
+#define qtn_ir_nwcontroller_err_nosnaps "Yhteysosoitetta ei ole määritetty"
+#define qtn_ir_options_add "Lisää suosikkeihin"
+#define qtn_ir_options_add_manually "Lisää kanava itse"
+#define qtn_ir_options_change "Muuta"
+#define qtn_ir_options_clearhistory "Tyhjennä muisti"
+#define qtn_ir_options_editstation "Muokkaa kanavaa"
+#define qtn_ir_options_equalizer "Taajuuskorjain"
+#define qtn_ir_options_exit "Poistu"
+#define qtn_ir_options_findnmusicstore "Etsi Musiikkikaupasta"
+#define qtn_ir_options_fmtrans "FM-lähetin"
+#define qtn_ir_options_gotomusicstore "Siirry Musiikkikauppaan"
+#define qtn_ir_options_help "Ohjeet"
+#define qtn_ir_options_history "Aiemmat"
+#define qtn_ir_options_info "Kanavan tiedot"
+#define qtn_ir_options_mainview "Siirry päänäkymään"
+#define qtn_ir_options_mark "Valitse"
+#define qtn_ir_options_markall "Valitse kaikki"
+#define qtn_ir_options_markunmark "Valitse / poista valinta"
+#define qtn_ir_options_now "Siirry toistolistaan"
+#define qtn_ir_options_off "Ei"
+#define qtn_ir_options_on "Kyllä"
+#define qtn_ir_options_searchag "Uusi etsintä"
+#define qtn_ir_options_select "Valitse"
+#define qtn_ir_options_settings "Asetukset"
+#define qtn_ir_options_station "Kanava"
+#define qtn_ir_options_stereowidening "Stereotehostus"
+#define qtn_ir_options_unmark "Poista valinta"
+#define qtn_ir_options_unmarkall "Poista valinnat"
+#define qtn_ir_playfail_err "Radion kuuntelu epäonnistui"
+#define qtn_ir_playlist_title "Vastaanot. linkit"
+#define qtn_ir_popup_no_results "Mitään ei löytynyt"
+#define qtn_ir_popup_toomany_results "Liikaa tuloksia. Tarkenna hakuehtoja."
+#define qtn_ir_results_none "Etsittyjä kanavia ei löydy. Etsi uudelleen."
+#define qtn_ir_search_result "%0U[11]:%1N löytyi"
+#define qtn_ir_search_results "%0U[10]:%1N löytyi"
+#define qtn_ir_set_folder_internetradio "Internet-radio"
+#define qtn_ir_set_folder_irradio "Internet-radio"
+#define qtn_ir_settings_3g "3G-yhteyden nopeus"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS-yhteyden nopeus"
+#define qtn_ir_settings_network "Verkkoyhteys"
+#define qtn_ir_settings_snap_default "Oletusyhteys"
+#define qtn_ir_settings_title "Asetukset"
+#define qtn_ir_settings_wifi "Wi-Fi-yhteyden nopeus"
+#define qtn_ir_softkey_back "Takaisin"
+#define qtn_ir_softkey_cancel "Peruuta"
+#define qtn_ir_softkey_done "Valmis"
+#define qtn_ir_softkey_no "Ei"
+#define qtn_ir_softkey_options "Valinnat"
+#define qtn_ir_softkey_select "Valitse"
+#define qtn_ir_softkey_yes "Kyllä"
+#define qtn_ir_station_saved "Kanava tallennettu"
+#define qtn_ir_stationlist_nomatches "(ei tuloksia)"
+#define qtn_ir_stations_popup_delete "Poistetaanko\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Poistetaanko %N kanavaa?"
+#define qtn_ir_stations_popup_removed "%U[87] poistettu"
+#define qtn_ir_stations_popup_removed_many "%N kanavaa poistettu"
+#define qtn_ir_stations_popup_save "Haluatko tallentaa kanavan suosikkeihin?"
+#define qtn_ir_suboptions_delete "Poista"
+#define qtn_ir_suboptions_details "Tiedot"
+#define qtn_ir_suboptions_move "Siirrä"
+#define qtn_ir_terms_details "Hyväksymällä alla olevat käyttöehdot käyttäjä hyväksyy sopimuksen lain sallimassa laajuudessa ilman kaikkien materiaalioikeuksien asettamia lisärajoituksia"
+#define qtn_ir_terms_heading "Käyttöehdot"
+#define qtn_ir_terms_softkey_accept "Hyväksy"
+#define qtn_ir_terms_softkey_decline "Hylkää"
+#define qtn_ir_title_history "Aiemmat"
+#define qtn_ir_tooltip_addalltofav "Lisää kaikki suosikk."
+#define qtn_ir_tooltip_addstation "Lisää kanava itse"
+#define qtn_ir_tooltip_addtofav "Lisää suosikkeihin"
+#define qtn_ir_tooltip_copy "Kopioi"
+#define qtn_ir_tooltip_findnstore "Etsi Musiikkikaupasta"
+#define qtn_ir_tooltip_findst "Etsi kanavia"
+#define qtn_ir_tooltip_history "Aiemmat"
+#define qtn_ir_tooltip_listen "Avaa"
+#define qtn_ir_tooltip_paste "Liitä"
+#define qtn_ir_tooltip_stationde "Kanavan tiedot"
+#define qtn_ir_top_title "Suosit. kanavat"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nimi"
+#define qtn_ir_url_title "Lisää kanava"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/09/internetradioai_09.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet-radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/09/terms_09.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokian Internet-radiopalvelun (jäljempänä Palvelu) avulla voit tarkastella ja käyttää Internet-radiokanavien sisältöä. KÄYTTÄMÄLLÄ OHJELMISTOA KÄYTTÄJÄ OSOITTAA LUKENEENSA TÄMÄN SOPIMUKSEN, YMMÄRTÄNEENSÄ SEN SISÄLLÖN JA SITOUTUVANSA NOUDATTAMAAN SEN EHTOJA. Mikäli käyttäjä ei sitoudu noudattamaan tätä sopimusta, hän ei saa käyttää Palvelua.</p>
+
+<p></p>
+
+<h1>1. MÄÄRITELMÄT</h1>
+
+<p></p>
+
+<p>Internet-radiokanavilla tarkoitetaan tahoja, jotka julkisesti tuottavat ja levittävät äänisisältöä ja siihen liittyviä metatietoja suoratoistona Internetissä.</p>
+
+<p></p>
+
+<p>Internet-radiokanavan linkki tarkoittaa resurssin paikanninta tai paikanninsarjaa, joiden avulla käyttäjä voi käyttää Internet-radiokanavan suoratoistosisältöä.</p>
+
+<p></p>
+
+<h1>2. PALVELU</h1>
+
+<p></p>
+
+<p>Palvelun avulla voidaan</p>
+<p>1. selata Internet-radiokanavien linkkejä</p>
+<p>2. käyttää Internet-radiokanavien sisältöä</p>
+
+<p></p>
+
+<h1>3. PALVELUN KÄYTTÄMINEN</h1>
+
+<p></p>
+
+<p>Käyttäjä saa käyttää Palvelua vain yksityisiin ja ei-kaupallisiin tarkoituksiin. Nokia omistaa kaikki Palveluun liittyvät immateriaalioikeudet.</p>
+
+<p></p>
+
+<p>Nokia pidättää oikeuden muuttaa näitä käyttöehtoja ilmoittamalla käyttäjälle muutoksesta.</p>
+
+<p></p>
+
+<h1>4. TIETOSUOJA</h1>
+
+<p></p>
+
+<p>Nokia pyrkii suojaamaan käyttäjän yksityisyyttä tiukkojen salassapitokäytäntöjen avulla.</p>
+
+<p></p>
+
+<p>Palvelun käytön seurantaa ja parantamista varten Nokia voi kerätä käyttötietoja, kuten tietoja käytetyistä Internet-radiokanavista, kullakin kanavalla vietetystä ajasta ja suosikeiksi luokitelluista kohteista.</p>
+
+<p></p>
+
+<p>Nokia ei kerää tietoja, joiden avulla Palvelun käyttäjä voitaisiin tunnistaa.</p>
+
+<p></p>
+
+<h1>5. PALVELUN SAATAVUUS</h1>
+
+<p></p>
+
+<p>Palvelu tarjotaan käyttäjän hyödyksi. Se tarjotaan "sellaisenaan" ja "saatavuuden mukaan". Nokia ei takaa, että Palvelu toimii virheettömästi tai keskeytyksettä. Nokia pidättää oikeuden muokata Palvelua tai estää sen käyttämisen milloin tahansa.</p>
+
+<p></p>
+
+<p>Nokia voi harkintansa mukaan toimittaa päivityksiä Palveluun liittyviin ohjelmistosovelluksiin.</p>
+
+<p></p>
+
+<h1>6. VASTUUVAPAUSLAUSEKE</h1>
+
+<p></p>
+
+<p>Käytön helpottamista varten Nokia voi tarjota linkkejä kolmansien osapuolten omistamiin tai tarjoamiin radiokanaviin. Nokia ei takaa Internet-radiokanavien linkkien toimimista. Lisäksi sisältö, joka ei liity Nokiaan, ei millään tavalla osoita, että Nokia hyväksyy sisällön sinänsä tai sisällössä mainitut tuotteet tai palvelut.</p>
+
+<p></p>
+
+<p>Käyttäjän on luettava ja hyväksyttävä kunkin kanavan mahdolliset käyttöehdot ennen kanavan käyttöä. Käyttäjä hyväksyy myös, että Nokia ei pysty vaikuttamaan kolmannen osapuolen palveluiden sisältöön eikä se ole vastuussa Internet-radiokanavien tarjoamasta sisällöstä.</p>
+
+<p></p>
+
+<p>Internet-radiokanavien sisällön käyttämiseen Palvelun avulla voi liittyä suurien tietomäärien siirtämistä käyttäjän palveluntarjoajan verkossa. Lisätietoja tiedonsiirron veloituksista saa palveluntarjoajalta. On huomattava, että kun Palvelun kanssa käytetään Internet-radiokanavia, joiden suoratoiston bittinopeus on suuri, tietoliikenteestä aiheutuvat kustannukset voivat kasvaa.</p>
+
+<p></p>
+
+<p>Palvelun käyttämiseen liittyvään tietoliikenteeseen voi sisältyä ainakin kanavan hakemiston sisällön päivittäminen, tiedon suoratoisto Internet-radiokanavalta, tilastotietojen kerääminen ja Internet-radiosovelluksen päivittäminen.</p>
+
+<p></p>
+
+<p>Nokia ei vastaa Palvelun käyttöön liittyvistä tietoliikennekustannuksista.</p>
+
+<p></p>
+
+<p>PALVELUN SAATAVUUDESTA, PAIKKANSAPITÄVYYDESTÄ, LUOTETTAVUUDESTA TAI SISÄLLÖSTÄ EI ANNETA MITÄÄN NIMENOMAISIA TAI OLETETTUJA TAKUITA, MUKAAN LUKIEN NIMESTÄ JA OIKEUKSIEN LOUKKAAMATTOMUUDESTA ANNETUT TAKUUT TAI OLETETUT TAKUUT MYYNTIKELPOISUUDESTA TAI SOVELTUVUUDESTA TIETTYYN TARKOITUKSEEN. NOKIA EI VASTAA MISTÄÄN SUORISTA, EPÄSUORISTA, VÄLILLISISTÄ, ERITYISISTÄ TAI JOHDANNAISISTA VAHINGOISTA, VOITTOJEN MENETYKSISTÄ TAI LIIKETOIMINNAN KESKEYTYMISESTÄ, JOTKA AIHEUTUVAT PALVELUN KÄYTTÄMISESTÄ TAI PALVELUN KÄYTÖN ESTYMISESTÄ, VAIKKA NOKIALLE OLISI ILMOITETTU KYSEISTEN VAHINKOJEN MAHDOLLISUUDESTA. KAIKILLA LAINKÄYTTÖALUEILLA TIETTYJEN TAKUIDEN POISSULKEMINEN TAI VAHINKOJEN VASTUUNRAJOITUKSET EIVÄT OLE SALLITTUJA, JOTEN EDELLÄ KUVATUT RAJOITUKSET TAI POISSULKEMISET EIVÄT EHKÄ KOSKE SINUA. TÄLLAISESSA TAPAUKSESSA NOKIAN VASTUU RAJOITTUU LAIN SALLIMAAN ENIMMÄISMÄÄRÄÄN.</p>
+
+<p></p>
+
+<p>Mikään tässä mainittu ei vaikuta kuluttajan ominaisuudessa sopimuksen hyväksyneen osapuolen oikeuksiin, jotka johtuvat pakottavasta lainsäädännöstä. Mikään tässä mainittu ei rajoita Nokian vastuuta Nokian laiminlyönnistä aiheutuneesta kuolemasta tai henkilövahingosta.</p>
+
+<p></p>
+
+<h1>7. TEKIJÄNOIKEUKSIEN LOUKKAAMISEEN LIITTYVIÄ SYYTÖKSIÄ KOSKEVA MENETTELY</h1>
+
+<p></p>
+
+<p>Jos sinulla on syytä uskoa, että tekijänoikeuksien suojaamaa teostasi on käsitelty tekijänoikeutta loukkaavalla tavalla, voit tiedottaa siitä toimittamalla Nokialle ilmoituksen, jossa on</p>
+
+<p></p>
+
+<p>(1) oletetusti loukatun yksinoikeuden omistajan puolesta toimimaan valtuutetun henkilön fyysinen tai sähköinen allekirjoitus</p>
+
+<p></p>
+
+<p>(2) oletetusti loukatun, tekijänoikeuksien suojaaman teoksen tunnistetiedot tai kuvaus</p>
+
+<p></p>
+
+<p>(3) oletetusti loukkaavan aineiston tunnistetiedot tai kuvaus sekä kohtuullisesti riittävät tiedot aineiston löytämistä varten</p>
+
+<p></p>
+
+<p>(4) nimesi, osoitteesi, puhelinnumerosi, sähköpostiosoitteesi ja muita tietoja, joiden avulla Nokia voi ottaa yhteyden sinuun</p>
+
+<p></p>
+
+<p>(5) lausunto siitä, että sinulla on hyvä syy uskoa, että valituksen koskemaa aineistoa on käytetty ilman tekijänoikeuden omistajan tai sen edustajan lupaa tai lain vastaisesti ja</p>
+
+<p></p>
+
+<p>(6) lausunto siitä, että ilmoituksen tiedot pitävät paikkansa ja perättömästä lausumasta langetetun rangaistuksen uhalla sinulla on oikeus toimia oletetusti loukatun yksinoikeuden omistajan edustajana.</p>
+
+<p></p>
+
+<p>Ilmoitus on lähetettävä Nokian vastaavalle edustajalle osoitteeseen</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. SOVELLETTAVA LAKI</h1>
+
+<p></p>
+
+<p>Näissä käyttöehdoissa "Nokia" tarkoittaa Nokia Corporationia. Nokia hallinnoi ja ohjaa Palvelua Suomessa sijaitsevista paikoista. Sellaisenaan Palvelun sisältämät tiedot katsotaan täten toimitetuiksi Suomessa.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Kaikki oikeudet pidätetään.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/10/internetradio_10.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[90] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regions"
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favorites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add your station to favorites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Intern. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favorites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equalizer"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[11]:%1N result"
+#define qtn_ir_search_results "%0U[09]:%1N results"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[89] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favorites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favorites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favorites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/10/internetradioai_10.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/10/terms_10.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,163 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Internet Radio service (“Serviceâ€) enables you to discover and experience the content of Internet radio stations. YOU AGREE THAT YOUR USE OF THE SERVICE ACKNOWLEDGES THAT YOU HAVE READ THIS AGREEMENT, YOU HAVE UNDERSTOOD IT AND YOU AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS. If you do not agree, please note that you will not be allowed to use the Service.</p>
+
+<p></p>
+
+<h1>1. DEFINITIONS</h1>
+
+<p></p>
+
+<p>Internet radio stations are entities that generally produce and distribute audio content and related metadata over the Internet in a stream.</p>
+
+<p></p>
+
+<p>The link to the Internet radio station is a resource locator or a set of resource locators that enable the user to access the content streamed by the Internet radio station.</p>
+
+<p></p>
+
+<h1>2. THE SERVICE</h1>
+
+<p></p>
+
+<p>The Service enables the following:</p>
+<p>1. browsing of links to Internet radio stations;</p>
+<p>2. accessing the content of Internet radio stations;</p>
+
+<p></p>
+
+<h1>3. USE OF THE SERVICE</h1>
+
+<p></p>
+
+<p>Use of the Service is only permitted for your private and non-commercial use. Nokia shall own all intellectual property rights relating to the Service.</p>
+
+<p></p>
+
+<p>Nokia reserves the right to change these terms and conditions by informing you of such change.</p>
+
+<p></p>
+
+<h1>4. PRIVACY</h1>
+
+<p></p>
+
+<p>Nokia is committed to protecting user privacy, and thus implements strict confidentiality policies.</p>
+
+<p></p>
+
+<p>In order to monitor the use of and to improve the Service, Nokia may collect usage data including, but not limited to, information about the Internet radio stations accessed, the time spent on each station and the items rated as favourites.</p>
+
+<p></p>
+
+<p>Nokia does not collect any information that allows identification of the user of the Service.</p>
+
+<p></p>
+
+<h1>5. SERVICE AVAILABILITY</h1>
+
+<p></p>
+
+<p>The Service is provided as a convenience to you. It is provided "as is" and on an "as available" basis. Nokia does not guarantee that the Service shall be uninterrupted or error-free. Nokia reserves the right to revise the Service or withdraw access to it at any time.</p>
+
+<p></p>
+
+<p>Nokia may provide upgrades for software applications related to the Service at its sole discretion.</p>
+
+<p></p>
+
+<h1>6. DISCLAIMER AND LIABILITY</h1>
+
+<p></p>
+
+<p>For your ease of accessibility, Nokia may include links to Internet radio stations that are owned or operated by third parties. Nokia does not guarantee that the links to Internet radio stations will be operational. In addition, the content that is not related to Nokia does not imply whatsoever that Nokia endorses the content as such or the products or services referenced in such content.</p>
+
+<p></p>
+
+<p>You must review and agree to each station's rules of use, if any, before accessing it. You also agree that Nokia has no control over the content of third-party services and cannot assume any responsibility for the content provided by Internet radio stations.</p>
+
+<p></p>
+
+<p>Accessing the content of Internet radio stations using the Service may involve the transmission of large amounts of data through your service provider's network. Contact your service provider for information about data transmission charges. Note that using the Service with Internet radio stations that are delivering higher bit rate streams to you may incur higher costs associated with data traffic.</p>
+
+<p></p>
+
+<p>The data traffic associated with the usage of the Service may include the following at least: updating the content of the stations’ directory, streaming data from the Internet radio station, collecting statistical data and upgrading the Internet radio application.</p>
+
+<p></p>
+
+<p>Nokia is not liable for the costs of data traffic associated with your use of the Service.</p>
+
+<p></p>
+
+<p>NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF TITLE OR NON-INFRINGEMENT OR IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, IS MADE IN RELATION TO THE AVAILABILITY, ACCURACY, RELIABILITY OR CONTENT OF THE SERVICE. NOKIA SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR FOR BUSINESS INTERRUPTION ARISING OUT OF THE USE OF OR INABILITY TO USE THE SERVICE, EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW EXCLUSION OF CERTAIN WARRANTIES OR LIMITATIONS OF LIABILITY, SO THE ABOVE LIMITATIONS OR EXCLUSIONS MAY NOT APPLY TO YOU. THE LIABILITY OF NOKIA WOULD IN SUCH CASE BE LIMITED TO THE GREATEST EXTENT PERMITTED BY LAW.</p>
+
+<p></p>
+
+<p>Nothing contained herein shall prejudice the statutory rights of any party dealing as a consumer. Nothing contained herein limits Nokia's liability in the event of death or personal injury resulting from Nokia's negligence.</p>
+
+<p></p>
+
+<h1>7. POLICY REGARDING ALLEGATIONS OF COPYRIGHT INFRINGEMENT</h1>
+
+<p></p>
+
+<p>If you believe that your copyrighted work has been handled in a way that constitutes copyright infringement, you may notify Nokia by providing a notification including the following:</p>
+
+<p></p>
+
+<p>(1) A physical or electronic signature of a person authorised to act on behalf of the owner of the exclusive right that is allegedly infringed;</p>
+
+<p></p>
+
+<p>(2) Identification or description of the copyrighted work claimed to have been infringed;</p>
+
+<p></p>
+
+<p>(3) Identification or description of the material that is claimed to be infringing and information reasonably sufficient to locate the material;</p>
+
+<p></p>
+
+<p>(4) Your name, address, telephone number, e-mail address and any other information that will permit Nokia to contact you;</p>
+
+<p></p>
+
+<p>(5) A statement that you believe, in good faith, that use of the material in the manner on which this complaint is based is not authorised by the copyright owner, its agent or the law; and</p>
+
+<p></p>
+
+<p>(6) A statement that the information in the notification is accurate and, under penalty of perjury, that you are authorised to act on behalf of the owner of an exclusive right that is allegedly infringed.</p>
+
+<p></p>
+
+<p>The notification must be sent to our Designated Agent address at:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GOVERNING LAW</h1>
+
+<p></p>
+
+<p>As used in these terms and conditions, "Nokia" means Nokia Corporation. Nokia operates and controls the Service from locations within Finland. As such, the information contained on the Service hereby is deemed to be provided in Finland.</p>
+
+<p></p>
+
+<p>Except where prohibited by applicable law, these terms and conditions shall be governed by the laws of Finland without regard to conflict of law provisions. For US residents: These terms and conditions shall be governed by the laws of Texas.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. All rights reserved.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/102/internetradio_102.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Galdetu beti"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N irrati kate gordeta"
+#define qtn_ir_added_single "%U[88] gordeta"
+#define qtn_ir_addmanually_unnamed "Izenik ez"
+#define qtn_ir_addst_description "Deskribapena"
+#define qtn_ir_addst_streamurl "Transmisioaren URLa"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet irratia"
+#define qtn_ir_ai_radio_not_active "Irratia ez dago aktibo"
+#define qtn_ir_app_general_err "Barneko errorea. Berrabiarazi aplikazioa."
+#define qtn_ir_apps_grid "Int. irratia"
+#define qtn_ir_apps_list "Internet irratia"
+#define qtn_ir_apps_skey "Internet irratia"
+#define qtn_ir_apps_standby "Internet irratia"
+#define qtn_ir_apps_swins "Internet irratia"
+#define qtn_ir_apps_wheel "Internet irratia"
+#define qtn_ir_bitrate_best "Kalitate onena"
+#define qtn_ir_bitrate_high "Kalitate ona"
+#define qtn_ir_bitrate_standard "Kalitate arrunta"
+#define qtn_ir_cost_heading "Ohar garrantzitsua"
+#define qtn_ir_cost_softkey_continue "Jarraitu"
+#define qtn_ir_cost_softkey_exit "Irten"
+#define qtn_ir_cost_title "Internet irratia"
+#define qtn_ir_cost_warning "Interneteko irratiak zure telefonoaren datu konexioa erabiltzen du irrati transmisioetarako. Datu tarifa finkoa baduzu bakarrik gomendatzen da. Aplikatuko zaizun tarifaz ziur ez bazaude, egiaztatu zure operadorearekin jarraitu aurretik."
+#define qtn_ir_country_list_expanded "%N kate"
+#define qtn_ir_countryregion_title "Herrialdeak"
+#define qtn_ir_discover_beststations "Kate onenen aukeraketa"
+#define qtn_ir_discover_country_region "Arakatu herrial. arabera"
+#define qtn_ir_discover_genre "Arakatu gener. arabera"
+#define qtn_ir_discover_genre_expanded "Generoaren arabera"
+#define qtn_ir_discover_langauge "Arakatu hizkun. arabera"
+#define qtn_ir_discover_language_expanded "Hizkuntzaren arabera"
+#define qtn_ir_discover_staticountryreg "Herrialdearen arabera"
+#define qtn_ir_discover_title "Kateak"
+#define qtn_ir_discover_top "Entzunenak"
+#define qtn_ir_edit_title "Editatu katea"
+#define qtn_ir_err_operation "Errorea eragiketan. Saiatu berriro."
+#define qtn_ir_err_url_unavail "URLa ez dago eskuragarri"
+#define qtn_ir_error_address "Interneteko irrati katearen helbide okerra"
+#define qtn_ir_error_connection "Konexioa denboraz kanpo. Saiatu berriro."
+#define qtn_ir_error_favourites "Aukeraketa gordetzeko toki gutxiegi Gogokoak atalean"
+#define qtn_ir_error_general "Ezin da katera konektatu"
+#define qtn_ir_error_isds_unavailable "Interneteko irrati kateen zerrenda eskuragaitz dago aldi baterako"
+#define qtn_ir_error_notavailable "Ez dago transmisiorako esteka eskuragarririk"
+#define qtn_ir_error_notinisds "Elementua eskuragaitz"
+#define qtn_ir_error_search "Idatzi bilaketa hitz bat"
+#define qtn_ir_findst_addstation "Gehitu katea eskuz"
+#define qtn_ir_findst_addtofav "Gehitu Gogokoak atalean"
+#define qtn_ir_findst_browsesds "Arakatu kateak"
+#define qtn_ir_findst_search_ensrhterm "Idatzi bilaketa hitz bat"
+#define qtn_ir_findst_softkey_search "Bilatu"
+#define qtn_ir_findstation_title "Bilatu kateak"
+#define qtn_ir_firstuse_title "Internet irratia"
+#define qtn_ir_genre_list_expanded "%N kate"
+#define qtn_ir_genre_title "Generoak"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Historiarik ez"
+#define qtn_ir_homescreen_buffering "Bufer. gordetzen"
+#define qtn_ir_homescreen_lastplayed "Erreprod. azkena"
+#define qtn_ir_info_details_bitrate "%N kbp:"
+#define qtn_ir_info_details_countryregi "Herrialdea:"
+#define qtn_ir_info_details_description "Deskribapena:"
+#define qtn_ir_info_details_genre "Generoak:"
+#define qtn_ir_info_details_language "Hizkuntza:"
+#define qtn_ir_info_details_name "Izena:"
+#define qtn_ir_info_details_streams "Iturriak:"
+#define qtn_ir_info_details_title "Katearen datuak"
+#define qtn_ir_info_details_type "Mota:"
+#define qtn_ir_info_details_type_isds "Kateak"
+#define qtn_ir_info_details_type_manual "Pertsonal."
+#define qtn_ir_info_details_unnamed "Izenik ez"
+#define qtn_ir_info_softkey_close "Itxi"
+#define qtn_ir_language_list_expanded "%N kate"
+#define qtn_ir_language_title "Hizkuntzak"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Kargatzen"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Bilatzen"
+#define qtn_ir_main_descriptive_text "Aukeratu \"Bilatu kateak\" kateak gehitzeko"
+#define qtn_ir_main_discover_expanded "Ezagutu irrati kate berriak"
+#define qtn_ir_main_last "Azkena"
+#define qtn_ir_main_now "Orain entzungai"
+#define qtn_ir_main_prog_deleting "%N ezabatzen"
+#define qtn_ir_main_searchindir "Bilatu zerrendan"
+#define qtn_ir_main_title "Internet irratia"
+#define qtn_ir_main_unnamed_station "Izenik ez"
+#define qtn_ir_memlo_ram_out_of_mem "Ez dago eragiketa egiteko adina memoriarik. Lehenik, ezabatu zenbait datu."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbp"
+#define qtn_ir_now_bitrate_mbps "%N mbp"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Hurrengo katea"
+#define qtn_ir_now_tooltip_play "Erreproduzitu"
+#define qtn_ir_now_tooltip_previous "Aurreko katea"
+#define qtn_ir_now_tooltip_stop "Gelditu"
+#define qtn_ir_now_wait_buffering "Bufferrean gordetzen"
+#define qtn_ir_now_wait_buffering_perc "% %N buferreratzen"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ez dago sare konexiorik"
+#define qtn_ir_nwcontroller_err_nosnaps "Ez da sargunerik zehaztu"
+#define qtn_ir_options_add "Gehitu Gogokoak atalean"
+#define qtn_ir_options_add_manually "Gehitu katea eskuz"
+#define qtn_ir_options_change "Aldatu"
+#define qtn_ir_options_clearhistory "Ezabatu historia"
+#define qtn_ir_options_editstation "Editatu katea"
+#define qtn_ir_options_equalizer "Ekualizadorea"
+#define qtn_ir_options_exit "Irten"
+#define qtn_ir_options_findnmusicstore "Bilatu musika dendan"
+#define qtn_ir_options_fmtrans "FM transmisorea"
+#define qtn_ir_options_gotomusicstore "Joan musika dendara"
+#define qtn_ir_options_help "Laguntza"
+#define qtn_ir_options_history "Historia"
+#define qtn_ir_options_info "Katearen datuak"
+#define qtn_ir_options_mainview "Joan ikuspegi nagusira"
+#define qtn_ir_options_mark "Markatu"
+#define qtn_ir_options_markall "Markatu guztiak"
+#define qtn_ir_options_markunmark "Markatu/Kendu marka"
+#define qtn_ir_options_now "Joan erreprodukziora"
+#define qtn_ir_options_off "Desaktibatuta"
+#define qtn_ir_options_on "Aktibatuta"
+#define qtn_ir_options_searchag "Bilatu berriro"
+#define qtn_ir_options_select "Aukeratu"
+#define qtn_ir_options_settings "Ezarpenak"
+#define qtn_ir_options_station "Irrati katea"
+#define qtn_ir_options_stereowidening "Estereo zabalketa"
+#define qtn_ir_options_unmark "Desmarkatu"
+#define qtn_ir_options_unmarkall "Desmarkatu guztiak"
+#define qtn_ir_playfail_err "Erreprodukzio errorea"
+#define qtn_ir_playlist_title "Jasotakoak"
+#define qtn_ir_popup_no_results "Ez da emaitzarik lortu"
+#define qtn_ir_popup_toomany_results "Emaitza gehiegi. Zehaztu bilaketa."
+#define qtn_ir_results_none "Ez da bat datorren katerik aurkitu. Bilatu berriro."
+#define qtn_ir_search_result "%0U[09]:%1N emaitza"
+#define qtn_ir_search_results "%0U[08]:%1N emaitza"
+#define qtn_ir_set_folder_internetradio "Internet irratia"
+#define qtn_ir_set_folder_irradio "Internet irratia"
+#define qtn_ir_settings_3g "3G konexioko bit tasa"
+#define qtn_ir_settings_connec_softkey_ok "Ados"
+#define qtn_ir_settings_gprs "GPRS konexioko bit tasa"
+#define qtn_ir_settings_network "Sare konexioa"
+#define qtn_ir_settings_snap_default "Konexio lehenetsia"
+#define qtn_ir_settings_title "Ezarpenak"
+#define qtn_ir_settings_wifi "Wi-Fi konexioko bit tasa"
+#define qtn_ir_softkey_back "Atzera"
+#define qtn_ir_softkey_cancel "Utzi"
+#define qtn_ir_softkey_done "Eginda"
+#define qtn_ir_softkey_no "Ez"
+#define qtn_ir_softkey_options "Aukerak"
+#define qtn_ir_softkey_select "Aukeratu"
+#define qtn_ir_softkey_yes "Bai"
+#define qtn_ir_station_saved "Katea gordeta"
+#define qtn_ir_stationlist_nomatches "(bat-etortzerik ez)"
+#define qtn_ir_stations_popup_delete "%U[74]\nezabatu?"
+#define qtn_ir_stations_popup_delete_many "%N kate ezabatu?"
+#define qtn_ir_stations_popup_removed "%U[87] ezabatuta"
+#define qtn_ir_stations_popup_removed_many "%N irrati kate ezabatuta"
+#define qtn_ir_stations_popup_save "Katea Gogokoak atalean gorde?"
+#define qtn_ir_suboptions_delete "Ezabatu"
+#define qtn_ir_suboptions_details "Xehetasunak"
+#define qtn_ir_suboptions_move "Mugitu"
+#define qtn_ir_terms_details "Ondorengo Baldintzak onartuz gero, kontratu batera batzen zara, lege aplikagariak baimendutakora mugatuta dagoena eta eskubide materialak ukatzen dituena"
+#define qtn_ir_terms_heading "Baldintzak"
+#define qtn_ir_terms_softkey_accept "Onartu"
+#define qtn_ir_terms_softkey_decline "Baztertu"
+#define qtn_ir_title_history "Historia"
+#define qtn_ir_tooltip_addalltofav "Guztiak Gogokoetan"
+#define qtn_ir_tooltip_addstation "Gehitu katea eskuz"
+#define qtn_ir_tooltip_addtofav "Gehitu Gogokoetan"
+#define qtn_ir_tooltip_copy "Kopiatu"
+#define qtn_ir_tooltip_findnstore "Bilatu musika dendan"
+#define qtn_ir_tooltip_findst "Bilatu kateak"
+#define qtn_ir_tooltip_history "Historia"
+#define qtn_ir_tooltip_listen "Entzun"
+#define qtn_ir_tooltip_paste "Itsatsi"
+#define qtn_ir_tooltip_stationde "Katearen datuak"
+#define qtn_ir_top_title "Entzunenak"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Izena"
+#define qtn_ir_url_title "Gehitu katea"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/103/internetradio_103.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Preguntar sempre"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N emisoras gardadas"
+#define qtn_ir_added_single "%U[88] gardada"
+#define qtn_ir_addmanually_unnamed "Sen nome"
+#define qtn_ir_addst_description "Descrición"
+#define qtn_ir_addst_streamurl "URL transmisión secuencia"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio non activa"
+#define qtn_ir_app_general_err "Erro interno. Reiniciar a aplicación."
+#define qtn_ir_apps_grid "Radio Inter."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio por Internet"
+#define qtn_ir_apps_swins "Radio por Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Calidade óptima"
+#define qtn_ir_bitrate_high "Alta calidade"
+#define qtn_ir_bitrate_standard "Calidade estándar"
+#define qtn_ir_cost_heading "Aviso importante"
+#define qtn_ir_cost_softkey_continue "Continuar"
+#define qtn_ir_cost_softkey_exit "Saír"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "A radio por Internet emprega a conexión de datos do teléfono para as transmisións de radio. Só se recomenda se dispón dunha tarifa plana de datos. Se non está seguro dos custos dos datos, consulte co seu operador antes de continuar."
+#define qtn_ir_country_list_expanded "%N emisoras"
+#define qtn_ir_countryregion_title "País/rexións"
+#define qtn_ir_discover_beststations "Selección das mellores emis."
+#define qtn_ir_discover_country_region "Buscar por país/rexión"
+#define qtn_ir_discover_genre "Buscar por xénero"
+#define qtn_ir_discover_genre_expanded "Emis. clasificadas por xénero"
+#define qtn_ir_discover_langauge "Buscar por idioma"
+#define qtn_ir_discover_language_expanded "Emis. clasificadas por idioma"
+#define qtn_ir_discover_staticountryreg "Emis. ordenadas país/rexión"
+#define qtn_ir_discover_title "Directorio emis."
+#define qtn_ir_discover_top "As mellores emisoras"
+#define qtn_ir_edit_title "Editar emisora"
+#define qtn_ir_err_operation "Erro na operación. Ténteo de novo."
+#define qtn_ir_err_url_unavail "URL non dispoñible"
+#define qtn_ir_error_address "Enderezo de emisora de radio por Internet incorrecto"
+#define qtn_ir_error_connection "Tempo de espera da conexión rematado. Ténteo de novo."
+#define qtn_ir_error_favourites "Non hai suficiente espazo en favoritos para gardar a selección"
+#define qtn_ir_error_general "Imposible conectar á emisora"
+#define qtn_ir_error_isds_unavailable "Servizo de directorio de emisora da Internet non dispoñible temporalmente"
+#define qtn_ir_error_notavailable "Non hay ligazóns de transmisión en secuencia dispoñibles"
+#define qtn_ir_error_notinisds "Elemento xa non está dispoñible"
+#define qtn_ir_error_search "Introducir termo de busca"
+#define qtn_ir_findst_addstation "Eng. emis. manualm."
+#define qtn_ir_findst_addtofav "Engadir emisora a favoritas"
+#define qtn_ir_findst_browsesds "Buscar directorio emiso."
+#define qtn_ir_findst_search_ensrhterm "Introducir termo de busca"
+#define qtn_ir_findst_softkey_search "Buscar"
+#define qtn_ir_findstation_title "Buscar emisoras"
+#define qtn_ir_firstuse_title "Radio Intern.: Benvido"
+#define qtn_ir_genre_list_expanded "%N emisoras"
+#define qtn_ir_genre_title "Xéneros"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Non hai historial"
+#define qtn_ir_homescreen_buffering "Almacen. no búfer"
+#define qtn_ir_homescreen_lastplayed "Pistas recentes"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/Rexión:"
+#define qtn_ir_info_details_description "Descrición:"
+#define qtn_ir_info_details_genre "Xénero(s):"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nome:"
+#define qtn_ir_info_details_streams "Transmisións:"
+#define qtn_ir_info_details_title "Info. emisora"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "Dir. emis."
+#define qtn_ir_info_details_type_manual "Defi. usu."
+#define qtn_ir_info_details_unnamed "Sen nom."
+#define qtn_ir_info_softkey_close "Pechar"
+#define qtn_ir_language_list_expanded "%N emisoras"
+#define qtn_ir_language_title "Idiomas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Cargando"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Buscando"
+#define qtn_ir_main_descriptive_text "Use \"Busc. emis.\" da barr. ferr. para eng. emis."
+#define qtn_ir_main_discover_expanded "Descubrir novas emis. radio"
+#define qtn_ir_main_last "Pistas recentes"
+#define qtn_ir_main_now "Reproducindo"
+#define qtn_ir_main_prog_deleting "Borrando %N"
+#define qtn_ir_main_searchindir "Buscar no directorio"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Emis. sen nome"
+#define qtn_ir_memlo_ram_out_of_mem "Non hai memoria abondo para efectuar a operación. Borre datos."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Seguinte emisora"
+#define qtn_ir_now_tooltip_play "Reproducir"
+#define qtn_ir_now_tooltip_previous "Emisora anterior"
+#define qtn_ir_now_tooltip_stop "Deter"
+#define qtn_ir_now_wait_buffering "Almacenando no búfer"
+#define qtn_ir_now_wait_buffering_perc "Almacenando no búfer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Sen conexión de rede"
+#define qtn_ir_nwcontroller_err_nosnaps "Ningún punto de acceso definido"
+#define qtn_ir_options_add "Engadir a Favoritas"
+#define qtn_ir_options_add_manually "Engadir emisora manual."
+#define qtn_ir_options_change "Cambiar"
+#define qtn_ir_options_clearhistory "Borrar historial"
+#define qtn_ir_options_editstation "Editar emisora"
+#define qtn_ir_options_equalizer "Ecualizador"
+#define qtn_ir_options_exit "Saír"
+#define qtn_ir_options_findnmusicstore "Atopar en Music store"
+#define qtn_ir_options_fmtrans "Transmisor FM"
+#define qtn_ir_options_gotomusicstore "Ir a Music store"
+#define qtn_ir_options_help "Axuda"
+#define qtn_ir_options_history "Historial"
+#define qtn_ir_options_info "Información emisora"
+#define qtn_ir_options_mainview "Ir á vista principal"
+#define qtn_ir_options_mark "Marcar"
+#define qtn_ir_options_markall "Marcar todo"
+#define qtn_ir_options_markunmark "Marcar/Desmarcar"
+#define qtn_ir_options_now "Ir a Reproducindo"
+#define qtn_ir_options_off "Desactivar"
+#define qtn_ir_options_on "Activar"
+#define qtn_ir_options_searchag "Buscar de novo"
+#define qtn_ir_options_select "Seleccionar"
+#define qtn_ir_options_settings "Axustes"
+#define qtn_ir_options_station "Emisora"
+#define qtn_ir_options_stereowidening "Ampliación de estéreo"
+#define qtn_ir_options_unmark "Desmarcar"
+#define qtn_ir_options_unmarkall "Desmarcar todo"
+#define qtn_ir_playfail_err "Erro ó reproducir a radio"
+#define qtn_ir_playlist_title "Ligazóns recib."
+#define qtn_ir_popup_no_results "Non se atoparon resultados"
+#define qtn_ir_popup_toomany_results "Demasiados resultados. Limite a busca."
+#define qtn_ir_results_none "Non se atoparon emisoras coincidentes. Buscar de novo."
+#define qtn_ir_search_result "%0U[10]:%1N results."
+#define qtn_ir_search_results "%0U[09]:%1N results."
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Velocid. bits conexión 3G"
+#define qtn_ir_settings_connec_softkey_ok "Aceptar"
+#define qtn_ir_settings_gprs "Velocid. bits conex. GPRS"
+#define qtn_ir_settings_network "Conexión de rede"
+#define qtn_ir_settings_snap_default "Conexión por defecto"
+#define qtn_ir_settings_title "Axustes"
+#define qtn_ir_settings_wifi "Velocid. bits conex. Wi-Fi"
+#define qtn_ir_softkey_back "Atrás"
+#define qtn_ir_softkey_cancel "Cancelar"
+#define qtn_ir_softkey_done "Feito"
+#define qtn_ir_softkey_no "Non"
+#define qtn_ir_softkey_options "Opcións"
+#define qtn_ir_softkey_select "Seleccionar"
+#define qtn_ir_softkey_yes "Si"
+#define qtn_ir_station_saved "Emisora gardada"
+#define qtn_ir_stationlist_nomatches "(ningunha coincidencia)"
+#define qtn_ir_stations_popup_delete "Borrar\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Borrar %N emisoras?"
+#define qtn_ir_stations_popup_removed "%U[88] borrada"
+#define qtn_ir_stations_popup_removed_many "%N emisoras borradas"
+#define qtn_ir_stations_popup_save "Gardar emisora en Favoritas?"
+#define qtn_ir_suboptions_delete "Borrar"
+#define qtn_ir_suboptions_details "Detalles"
+#define qtn_ir_suboptions_move "Mover"
+#define qtn_ir_terms_details "Ao aceptar os Termos e condicións seguintes vostede asina un contrato na medida permitida pola lexislación aplicable e sen máis limitacións e prohibicións con respecto aos dereitos materiais"
+#define qtn_ir_terms_heading "Termos e condicións"
+#define qtn_ir_terms_softkey_accept "Aceptar"
+#define qtn_ir_terms_softkey_decline "Rexeitar"
+#define qtn_ir_title_history "Historial"
+#define qtn_ir_tooltip_addalltofav "Engad. tod. a favoritas"
+#define qtn_ir_tooltip_addstation "Eng. emis. manualm."
+#define qtn_ir_tooltip_addtofav "Engadir a favoritas"
+#define qtn_ir_tooltip_copy "Copiar"
+#define qtn_ir_tooltip_findnstore "Buscar en Music store"
+#define qtn_ir_tooltip_findst "Buscar emisoras"
+#define qtn_ir_tooltip_history "Historial"
+#define qtn_ir_tooltip_listen "Escoitar"
+#define qtn_ir_tooltip_paste "Pegar"
+#define qtn_ir_tooltip_stationde "Detalles da emisora"
+#define qtn_ir_top_title "As mellor. emis."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nome"
+#define qtn_ir_url_title "Engadir emisora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/129/internetradio_129.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[44] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Int. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regns."
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add a station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Int. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[05]:%1N result"
+#define qtn_ir_search_results "%0U[05]:%1N res."
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[44] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/13/internetradio_13.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Perguntar sempre"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N estações guardadas"
+#define qtn_ir_added_single "%U[87] guardada"
+#define qtn_ir_addmanually_unnamed "Sem nome"
+#define qtn_ir_addst_description "Descrição"
+#define qtn_ir_addst_streamurl "URL da sequência"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Rádio Internet"
+#define qtn_ir_ai_radio_not_active "Rádio inactiva"
+#define qtn_ir_app_general_err "Erro interno. Reinicie a aplicação."
+#define qtn_ir_apps_grid "Rád. Intern."
+#define qtn_ir_apps_list "Rádio Internet"
+#define qtn_ir_apps_skey "Rádio Internet"
+#define qtn_ir_apps_standby "Rádio Internet"
+#define qtn_ir_apps_swins "Rádio Internet"
+#define qtn_ir_apps_wheel "Rádio Internet"
+#define qtn_ir_bitrate_best "Qualidade de topo"
+#define qtn_ir_bitrate_high "Alta qualidade"
+#define qtn_ir_bitrate_standard "Qualidade standard"
+#define qtn_ir_cost_heading "Aviso importante"
+#define qtn_ir_cost_softkey_continue "Continuar"
+#define qtn_ir_cost_softkey_exit "Sair"
+#define qtn_ir_cost_title "Rádio Internet"
+#define qtn_ir_cost_warning "A rádio Internet utiliza a ligação de dados do o telemóvel para transmissões de rádio. Só é aconselhável se tiver um plano de dados sem custos adicionais. Se não tiver a certeza dos custos da transmissão de dados, consulte o seu operador antes de continuar."
+#define qtn_ir_country_list_expanded "%N estações"
+#define qtn_ir_countryregion_title "Países/regiões"
+#define qtn_ir_discover_beststations "Selecção melhores estações"
+#define qtn_ir_discover_country_region "Procurar por país/região"
+#define qtn_ir_discover_genre "Procurar por género"
+#define qtn_ir_discover_genre_expanded "Estações ordens. por género"
+#define qtn_ir_discover_langauge "Procurar por idioma"
+#define qtn_ir_discover_language_expanded "Estações ordens. por idioma"
+#define qtn_ir_discover_staticountryreg "Estaçs. ordens. p/ país/região"
+#define qtn_ir_discover_title "Direct. estações"
+#define qtn_ir_discover_top "Principais estações"
+#define qtn_ir_edit_title "Editar estação"
+#define qtn_ir_err_operation "Erro na operação. Tente novamente."
+#define qtn_ir_err_url_unavail "URL indisponível"
+#define qtn_ir_error_address "Endereço da estação de rádio Internet incorrecto"
+#define qtn_ir_error_connection "Tempo da ligação excedido. Tente novamente."
+#define qtn_ir_error_favourites "Espaço insuficiente nos Favoritos para guardar a selecção"
+#define qtn_ir_error_general "Impossível ligar à estação"
+#define qtn_ir_error_isds_unavailable "Serviço de directório de estações de Internet indisponível temporariamente"
+#define qtn_ir_error_notavailable "Sem hiperligações de streaming disponíveis"
+#define qtn_ir_error_notinisds "O item já não está disponível"
+#define qtn_ir_error_search "Introduza um termo de procura"
+#define qtn_ir_findst_addstation "Adic. est. manualmente"
+#define qtn_ir_findst_addtofav "Adic. estação a Favoritos"
+#define qtn_ir_findst_browsesds "Procurar direct. estações"
+#define qtn_ir_findst_search_ensrhterm "Introduza termo de procura"
+#define qtn_ir_findst_softkey_search "Procurar"
+#define qtn_ir_findstation_title "Encont. estações"
+#define qtn_ir_firstuse_title "Rád. Inter.: Bem-vindo"
+#define qtn_ir_genre_list_expanded "%N estações"
+#define qtn_ir_genre_title "Géneros"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Sem histórico"
+#define qtn_ir_homescreen_buffering "A col. mem. int."
+#define qtn_ir_homescreen_lastplayed "Última reprodução"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/Região:"
+#define qtn_ir_info_details_description "Descrição:"
+#define qtn_ir_info_details_genre "Género(s):"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nome:"
+#define qtn_ir_info_details_streams "Sequências:"
+#define qtn_ir_info_details_title "Infos. estação"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "Dir. estçs."
+#define qtn_ir_info_details_type_manual "Def. utiliz."
+#define qtn_ir_info_details_unnamed "S/ nome"
+#define qtn_ir_info_softkey_close "Fechar"
+#define qtn_ir_language_list_expanded "%N estações"
+#define qtn_ir_language_title "Idiomas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "A carregar"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "A procurar"
+#define qtn_ir_main_descriptive_text "Util. 'Encont. estações' na barra ferrs. p/ adic. estçs."
+#define qtn_ir_main_discover_expanded "Desc. novas estações de rádio"
+#define qtn_ir_main_last "Última reprod."
+#define qtn_ir_main_now "A reproduzir"
+#define qtn_ir_main_prog_deleting "A apagar %N"
+#define qtn_ir_main_searchindir "Procurar no directório"
+#define qtn_ir_main_title "Rádio Internet"
+#define qtn_ir_main_unnamed_station "Estação s/ nome"
+#define qtn_ir_memlo_ram_out_of_mem "Memória insuficiente para efectuar a operação. Apagar 1º alguns dados."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Estação seguinte"
+#define qtn_ir_now_tooltip_play "Reproduzir"
+#define qtn_ir_now_tooltip_previous "Estação anterior"
+#define qtn_ir_now_tooltip_stop "Parar"
+#define qtn_ir_now_wait_buffering "A colocar na memória intermédia"
+#define qtn_ir_now_wait_buffering_perc "Armazenamento em memória temporária %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Sem ligação à rede"
+#define qtn_ir_nwcontroller_err_nosnaps "Nenhum ponto de acesso definido"
+#define qtn_ir_options_add "Adicionar a Favoritos"
+#define qtn_ir_options_add_manually "Adic. est. manualmente"
+#define qtn_ir_options_change "Alterar"
+#define qtn_ir_options_clearhistory "Limpar histórico"
+#define qtn_ir_options_editstation "Editar estação"
+#define qtn_ir_options_equalizer "Equalizador"
+#define qtn_ir_options_exit "Sair"
+#define qtn_ir_options_findnmusicstore "Encontrar na Loja música"
+#define qtn_ir_options_fmtrans "Transmissor FM"
+#define qtn_ir_options_gotomusicstore "Ir para a Loja de música"
+#define qtn_ir_options_help "Ajuda"
+#define qtn_ir_options_history "Histórico"
+#define qtn_ir_options_info "Informações da estação"
+#define qtn_ir_options_mainview "Ir para a vista principal"
+#define qtn_ir_options_mark "Marcar"
+#define qtn_ir_options_markall "Marcar todos"
+#define qtn_ir_options_markunmark "Marcar/Desmarcar"
+#define qtn_ir_options_now "Ir para Em reprodução"
+#define qtn_ir_options_off "Desactivar"
+#define qtn_ir_options_on "Activar"
+#define qtn_ir_options_searchag "Procurar novamente"
+#define qtn_ir_options_select "Seleccionar"
+#define qtn_ir_options_settings "Definições"
+#define qtn_ir_options_station "Estação"
+#define qtn_ir_options_stereowidening "Alargamento estéreo"
+#define qtn_ir_options_unmark "Desmarcar"
+#define qtn_ir_options_unmarkall "Desmarcar todos"
+#define qtn_ir_playfail_err "Falha na reprodução de rádio"
+#define qtn_ir_playlist_title "Ligs. recebidas"
+#define qtn_ir_popup_no_results "Procura sem resultados"
+#define qtn_ir_popup_toomany_results "Demasiados resultados. Aperfeiçoe o termo de procura."
+#define qtn_ir_results_none "Não foram encontradas estações com correspondência. Procurar novamente."
+#define qtn_ir_search_result "%0U[10]:%1N results."
+#define qtn_ir_search_results "%0U[09]:%1N results."
+#define qtn_ir_set_folder_internetradio "Rádio Internet"
+#define qtn_ir_set_folder_irradio "Rádio Internet"
+#define qtn_ir_settings_3g "Vel. transmissão lig. 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Vel. transmiss. lig. GPRS"
+#define qtn_ir_settings_network "Ligação de rede"
+#define qtn_ir_settings_snap_default "Ligação predefinida"
+#define qtn_ir_settings_title "Definições"
+#define qtn_ir_settings_wifi "Vel. transmissão lig. Wi-Fi"
+#define qtn_ir_softkey_back "Para trás"
+#define qtn_ir_softkey_cancel "Cancelar"
+#define qtn_ir_softkey_done "Efectuado"
+#define qtn_ir_softkey_no "Não"
+#define qtn_ir_softkey_options "Opções"
+#define qtn_ir_softkey_select "Seleccionar"
+#define qtn_ir_softkey_yes "Sim"
+#define qtn_ir_station_saved "Estação guardada"
+#define qtn_ir_stationlist_nomatches "(sem correspondências)"
+#define qtn_ir_stations_popup_delete "Apagar\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Apagar %N estações?"
+#define qtn_ir_stations_popup_removed "%U[88] apagada"
+#define qtn_ir_stations_popup_removed_many "%N estações apagadas"
+#define qtn_ir_stations_popup_save "Guardar estação em Favoritos?"
+#define qtn_ir_suboptions_delete "Apagar"
+#define qtn_ir_suboptions_details "Detalhes"
+#define qtn_ir_suboptions_move "Mover"
+#define qtn_ir_terms_details "Ao aceitar os Termos e condições descritos abaixo, o utilizador está a celebrar um contrato, até à extensão permitida pela lei aplicável, e não limitada nem proibida relativamente a todos os direitos de material"
+#define qtn_ir_terms_heading "Termos e condições"
+#define qtn_ir_terms_softkey_accept "Aceitar"
+#define qtn_ir_terms_softkey_decline "Recusar"
+#define qtn_ir_title_history "Histórico"
+#define qtn_ir_tooltip_addalltofav "Adic. tudo a Favoritos"
+#define qtn_ir_tooltip_addstation "Adic. est. manualm."
+#define qtn_ir_tooltip_addtofav "Adicionar a Favoritos"
+#define qtn_ir_tooltip_copy "Copiar"
+#define qtn_ir_tooltip_findnstore "Enc. na Loja de música"
+#define qtn_ir_tooltip_findst "Encontrar estações"
+#define qtn_ir_tooltip_history "Histórico"
+#define qtn_ir_tooltip_listen "Ouvir"
+#define qtn_ir_tooltip_paste "Colar"
+#define qtn_ir_tooltip_stationde "Detalhes da estação"
+#define qtn_ir_top_title "Princs. estações"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nome"
+#define qtn_ir_url_title "Adic. estação"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/13/internetradioai_13.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Rádio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/13/terms_13.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>O serviço Rádio por Internet Nokia (“Serviçoâ€) permite-lhe identificar e usufruir do conteúdo das estações de rádio por Internet. O UTILIZADOR ACEITA QUE ATRAVÉS DA SUA UTILIZAÇÃO DO SERVIÇO EXPRIME A LEITURA E COMPREENSÃO DO PRESENTE ACORDO E COMPROMETE-SE A RESPEITAR OS RESPECTIVOS TERMOS E CONDIÇÕES. Se não aceitar, tenha em atenção que não estará autorizado a utilizar o Serviço.</p>
+
+<p></p>
+
+<h1>1. DEFINIÇÕES</h1>
+
+<p></p>
+
+<p>Estações de rádio por Internet são entidades que produzem e distribuem geralmente conteúdo de áudio e metadados relacionados através da Internet, num fluxo.</p>
+
+<p></p>
+
+<p>A ligação à estação de rádio por Internet corresponde a um localizador de recursos ou a um conjunto de localizadores de recursos que permitem ao utilizador aceder ao conteúdo transmitido em fluxo pela estação de rádio por Internet.</p>
+
+<p></p>
+
+<h1>2. O SERVIÇO</h1>
+
+<p></p>
+
+<p>O Serviço permite as seguintes acções:</p>
+<p>1. navegação em ligações para estações de rádio por Internet;</p>
+<p>2. acesso ao conteúdo das estações de rádio por Internet;</p>
+
+<p></p>
+
+<h1>3. UTILIZAÇÃO DO SERVIÇO</h1>
+
+<p></p>
+
+<p>A utilização do Serviço é apenas permitida para fins particulares e não comerciais. A Nokia é a proprietária de todos os direitos de propriedade intelectual incluídos no Serviço, bem como do Serviço.</p>
+
+<p></p>
+
+<p>A Nokia reserva-se o direito de alterar os presentes termos e condições, informando o utilizador em conformidade.</p>
+
+<p></p>
+
+<h1>4. PRIVACIDADE</h1>
+
+<p></p>
+
+<p>A Nokia compromete-se a proteger a privacidade do utilizador ao implementar rígidas políticas de confidencialidade.</p>
+
+<p></p>
+
+<p>Com o objectivo de monitorizar a utilização e melhorar o Serviço, a Nokia poderá recolher dados de utilização, incluindo, mas não se limitando a, informações sobre as estações de rádio por Internet acedidas, o tempo despendido em cada estação e os itens classificados como favoritos.</p>
+
+<p></p>
+
+<p>A Nokia não recolhe quaisquer informações que permitam a identificação do utilizador do Serviço.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILIDADE DO SERVIÇO</h1>
+
+<p></p>
+
+<p>O Serviço é fornecido como uma comodidade para o utilizador. Este é fornecido "tal como está" e "conforme disponível". A Nokia não garante que o Serviço seja ininterrupto e isento de erros. A Nokia reserva-se o direito de rever o Serviço ou retirar acesso ao mesmo em qualquer altura.</p>
+
+<p></p>
+
+<p>A Nokia poderá fornecer actualizações para as aplicações de software relacionadas com o Serviço, conforme entender apropriado.</p>
+
+<p></p>
+
+<h1>6. EXCLUSÃO DE RESPONSABILIDADE E OBRIGAÇÕES</h1>
+
+<p></p>
+
+<p>Para acessibilidade acrescida, a Nokia poderá incluir ligações a estações de rádio por Internet que sejam propriedade ou operadas por terceiros. A Nokia não garante que a operacionalidade das ligações às estações de rádio por Internet. Por outro lado, no que se refere a conteúdo que não esteja relacionado com a Nokia não implica de forma alguma que a Nokia subscreva o mesmo ou os produtos ou serviços nele referidos.</p>
+
+<p></p>
+
+<p>O utilizador terá de consulta e aceitar as regras de utilização de cada estação, se existentes, antes de aceder às mesmas. O utilizador aceita igualmente que a Nokia não tem qualquer controlo sobre o conteúdo de serviços de terceiros e não pode assumir qualquer responsabilidade pelo conteúdo fornecido pelas estações de rádio por Internet.</p>
+
+<p></p>
+
+<p>O acesso ao conteúdo das estações de rádio por Internet através do Serviço poderá envolver a transmissão de grandes quantidades de dados através da rede do fornecedor de serviços. Contacte o fornecedor de serviços para obter informações sobre os encargos aplicáveis à transmissão de dados. Tenha em atenção que a utilização do Serviço com estações de rádio por Internet que transmitam fluxos com taxas de bits superiores poderá implicar custos mais elevados associados ao tráfego de dados.</p>
+
+<p></p>
+
+<p>O tráfego de dados associado à utilização do Serviço poderá incluir, pelo menos, as seguintes acções: a actualização de conteúdo do directório de estações, o fluxo de dados da estação de rádio por Internet, a recolha de dados estatísticos e a actualização da aplicação de rádio por Internet.</p>
+
+<p></p>
+
+<p>A Nokia não é responsável pelos custos do tráfego de dados associado à utilização do Serviço.</p>
+
+<p></p>
+
+<p>NÃO SÃO FORNECIDAS GARANTIAS DE QUALQUER TIPO, EXPLÃCITAS OU IMPLÃCITAS, INCLUINDO, MAS NÃO SE LIMITANDO A, GARANTIAS DE TITULARIDADE OU NÃO INFRACÇÃO OU GARANTIAS IMPLÃCITAS DE COMERCIALIZAÇÃO OU ADEQUAÇÃO A UM DETERMINADO FIM, RELATIVAMENTE À DISPONIBILIDADE, EXACTIDÃO, FIABILIDADE OU CONTEÚDO DO SERVIÇO. A NOKIA NÃO SERà RESPONSÃVEL POR QUAISQUER DANOS DIRECTOS, INDIRECTOS, INCIDENTAIS, ESPECIAIS OU CONSEQUENTES, LUCROS CESSANTES OU INTERRUPÇÃO DO NEGÓCIO RESULTANTES DA UTILIZAÇÃO OU INCAPACIDADE DE UTILIZAÇÃO DO SERVIÇO, MESMO QUE A NOKIA TENHA SIDO ALERTADA PARA A POSSIBILIDADE DA OCORRÊNCI DESSES DANOS. ALGUMAS JURISDIÇÕES NÃO PERMITEM A EXCLUSÃO DE DETERMINADAS GARANTIAS OU LIMITAÇÕES DE RESPONSABILIDADE, PELO QUE AS LIMITAÇÕES OU EXCLUSÕES ANTERIORES PODERÃO NÃO SER APLICÃVEIS AO UTILIZADOR. A RESPONSABILIDADE DA NOKIA NESSE CASO SERIA LIMITADA AO MÃXIMO PREVISTO PELA LEI.</p>
+
+<p></p>
+
+<p>Nenhuma informação aqui contida deverá prejudicar os direitos estatutários de qualquer uma das Partes na qualidade de consumidor. Nenhuma informação aqui contida limita a responsabilidade da Nokia na eventualidade de morte ou lesões pessoais resultantes de negligência da Nokia.</p>
+
+<p></p>
+
+<h1>7. POLÃTICA RELATIVAMENTE A ALEGAÇÕES DE VIOLAÇÃO DE DIREITOS DE AUTOR</h1>
+
+<p></p>
+
+<p>Se considerar que o seu trabalho protegido por direitos de autor foi tratado de forma que constitua violação de direitos de autor, poderá informar a Nokia através de uma notificação, incluindo os seguintes elementos:</p>
+
+<p></p>
+
+<p>(1) A assinatura física ou electrónica de uma pessoa autorizada a agir em nome do proprietário do direito exclusivo que foi alegadamente violado;</p>
+
+<p></p>
+
+<p>(2) A identificação ou descrição do trabalho protegido por direitos de autor, alvo da alegada violação;</p>
+
+<p></p>
+
+<p>(3) A identificação ou descrição do material que alegadamente deu origem à violação e informações suficientemente razoáveis para a localização do material;</p>
+
+<p></p>
+
+<p>(4) O seu nome, endereço, número de telefone, endereço electrónico e quaisquer outras informações que permitam que a Nokia o contacte;</p>
+
+<p></p>
+
+<p>(5) Uma declaração que ateste a sua convicção em boa-fé de que a utilização do material da forma referida não é autorizada pelo proprietário dos direitos de autor, o respectivo agente ou a lei e</p>
+
+<p></p>
+
+<p>(6) Uma declaração que ateste que as informações na notificação são rigorosas e, sob pena de perjúrio, que está autorizado a agir em nome do proprietário de um direito exclusivo que foi alegadamente violado.</p>
+
+<p></p>
+
+<p>A notificação tem de ser enviada para o endereço do Agente Designado da Nokia em:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LEGISLAÇÃO APLICÃVEL</h1>
+
+<p></p>
+
+<p>Conforme os presentes termos e condições, "Nokia" corresponde à Nokia Corporation. A Nokia opera e controla o Serviço a partir de localizações na Finlândia. Como tal, as informações contidas no presente Serviço são consideradas como fornecidas na Finlândia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Todos os direitos reservados.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/14/internetradio_14.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Her zaman sor"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N istasyon kaydedildi"
+#define qtn_ir_added_single "%U[86] kaydedildi"
+#define qtn_ir_addmanually_unnamed "Adsız"
+#define qtn_ir_addst_description "Açıklama"
+#define qtn_ir_addst_streamurl "Yayın URL'si"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Ä°nternet radyosu"
+#define qtn_ir_ai_radio_not_active "Radyo etkin deÄŸil"
+#define qtn_ir_app_general_err "İç hata. Uygulamayı yeniden başlatın."
+#define qtn_ir_apps_grid "Ä°nt. rdys"
+#define qtn_ir_apps_list "Ä°nternet radyosu"
+#define qtn_ir_apps_skey "Ä°nternet rdys"
+#define qtn_ir_apps_standby "Ä°nternet radyosu"
+#define qtn_ir_apps_swins "Ä°nternet radyosu"
+#define qtn_ir_apps_wheel "Ä°nternet radyosu"
+#define qtn_ir_bitrate_best "En iyi kalite"
+#define qtn_ir_bitrate_high "Yüksek kalite"
+#define qtn_ir_bitrate_standard "Standart kalite"
+#define qtn_ir_cost_heading "Önemli bildirim"
+#define qtn_ir_cost_softkey_continue "Devam"
+#define qtn_ir_cost_softkey_exit "Çıkış"
+#define qtn_ir_cost_title "Ä°nternet rady."
+#define qtn_ir_cost_warning "İnternet radyosu, radyo iletimleri için telefonunuzun veri bağlantısını kullanır. Bu özellik, yalnızca sabit ücretli bir veri tarifeniz varsa önerilir. Veri maliyetlerinizden emin değilseniz, devam etmeden önce operatörünüze danışın."
+#define qtn_ir_country_list_expanded "%N istasyon"
+#define qtn_ir_countryregion_title "Ülkeler/bölgeler"
+#define qtn_ir_discover_beststations "En iyi istasyonlardan seçme"
+#define qtn_ir_discover_country_region "Ülkeye/bölgeye göre tara"
+#define qtn_ir_discover_genre "Türe göre tara"
+#define qtn_ir_discover_genre_expanded "İstsynlr türe göre sıralandı"
+#define qtn_ir_discover_langauge "Dile göre tara"
+#define qtn_ir_discover_language_expanded "İstasyonlar dile göre sıralandı"
+#define qtn_ir_discover_staticountryreg "Ülky/blgy göre sıral. istsynlr"
+#define qtn_ir_discover_title "Ä°stasyon dizini"
+#define qtn_ir_discover_top "En iyi istasyonlar"
+#define qtn_ir_edit_title "İst. düzenle"
+#define qtn_ir_err_operation "Ä°ÅŸlemde hata oluÅŸtu. Tekrar deneyin."
+#define qtn_ir_err_url_unavail "URL kullanım dışı"
+#define qtn_ir_error_address "Hatalı İnternet radyosu istasyon adresi"
+#define qtn_ir_error_connection "Bağlantı süresi doldu. Yeniden deneyin."
+#define qtn_ir_error_favourites "Favoriler klasöründe seçimi kaydetmek için yeterli alan yok"
+#define qtn_ir_error_general "İstasyona bağlanamadı"
+#define qtn_ir_error_isds_unavailable "İnternet istasyonu dizin servisi geçici olarak kullanım dışı"
+#define qtn_ir_error_notavailable "Yayın bağlantısı yok"
+#define qtn_ir_error_notinisds "Öğe artık kullanılamıyor"
+#define qtn_ir_error_search "Aranacak terim girin"
+#define qtn_ir_findst_addstation "Ä°stasyonu elle ekle"
+#define qtn_ir_findst_addtofav "Ä°stasyonu favorilere ekle"
+#define qtn_ir_findst_browsesds "Ä°stasyon dizinini tara"
+#define qtn_ir_findst_search_ensrhterm "Aranacak terim girin"
+#define qtn_ir_findst_softkey_search "Ara"
+#define qtn_ir_findstation_title "Ä°stasyon bul"
+#define qtn_ir_firstuse_title "Ä°nt. rdys: HoÅŸ geldiniz"
+#define qtn_ir_genre_list_expanded "%N istasyon"
+#define qtn_ir_genre_title "Türler"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Geçmiş görünümü boş"
+#define qtn_ir_homescreen_buffering "Arabelleğe alınıyor"
+#define qtn_ir_homescreen_lastplayed "Son çalınan"
+#define qtn_ir_info_details_bitrate "%N kb/sn:"
+#define qtn_ir_info_details_countryregi "Ülke/Bölge:"
+#define qtn_ir_info_details_description "Açıklama:"
+#define qtn_ir_info_details_genre "Tür(ler):"
+#define qtn_ir_info_details_language "Dil:"
+#define qtn_ir_info_details_name "Ad:"
+#define qtn_ir_info_details_streams "Yayın:"
+#define qtn_ir_info_details_title "Ä°stasyon bilg."
+#define qtn_ir_info_details_type "Tür:"
+#define qtn_ir_info_details_type_isds "Ä°st. diz."
+#define qtn_ir_info_details_type_manual "Kul. tnml"
+#define qtn_ir_info_details_unnamed "Adsız"
+#define qtn_ir_info_softkey_close "Kapat"
+#define qtn_ir_language_list_expanded "%N istasyon"
+#define qtn_ir_language_title "Diller"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Yükleniyor"
+#define qtn_ir_loading_percent_sign "%%N"
+#define qtn_ir_loading_searching "Arıyor"
+#define qtn_ir_main_descriptive_text "İst. eklmk için arç çbğndn 'İstasyon bul'u kllnn"
+#define qtn_ir_main_discover_expanded "Yeni radyo istasyonları bul"
+#define qtn_ir_main_last "Son çalınan"
+#define qtn_ir_main_now "Şimdi çalınan"
+#define qtn_ir_main_prog_deleting "%N siliniyor"
+#define qtn_ir_main_searchindir "Dizinde ara"
+#define qtn_ir_main_title "Ä°nternet rdys"
+#define qtn_ir_main_unnamed_station "Adsız istasyon"
+#define qtn_ir_memlo_ram_out_of_mem "İşlemi yapmak için yeterli hafıza yok. Önce bazı verileri silin."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kb/sn"
+#define qtn_ir_now_bitrate_mbps "%N mb/sn"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Sonraki istasyon"
+#define qtn_ir_now_tooltip_play "Çal/oynat"
+#define qtn_ir_now_tooltip_previous "Önceki istasyon"
+#define qtn_ir_now_tooltip_stop "Durdur"
+#define qtn_ir_now_wait_buffering "Arabelleğe alınıyor"
+#define qtn_ir_now_wait_buffering_perc "Ara belleğe alınıyor (%%N)"
+#define qtn_ir_nwcontroller_err_noconnectivity "Şebeke bağlantısı yok"
+#define qtn_ir_nwcontroller_err_nosnaps "Tanımlanan erişim noktası yok"
+#define qtn_ir_options_add "Favoriler'e ekle"
+#define qtn_ir_options_add_manually "Ä°stasyonu elle ekle"
+#define qtn_ir_options_change "DeÄŸiÅŸtir"
+#define qtn_ir_options_clearhistory "Geçmişi sil"
+#define qtn_ir_options_editstation "İstasyonu düzenle"
+#define qtn_ir_options_equalizer "Ekolayzer"
+#define qtn_ir_options_exit "Çıkış"
+#define qtn_ir_options_findnmusicstore "Müzik Mağazası'nda bul"
+#define qtn_ir_options_fmtrans "FM verici"
+#define qtn_ir_options_gotomusicstore "Müzik mağazası'na git"
+#define qtn_ir_options_help "Yardım"
+#define qtn_ir_options_history "Geçmiş"
+#define qtn_ir_options_info "Ä°stasyon bilgisi"
+#define qtn_ir_options_mainview "Ana görünüme git"
+#define qtn_ir_options_mark "Ä°ÅŸaretle"
+#define qtn_ir_options_markall "Tümünü işaretle"
+#define qtn_ir_options_markunmark "İşaretle/İşareti kaldır"
+#define qtn_ir_options_now "Şimdi çalan'a git"
+#define qtn_ir_options_off "Kapalı"
+#define qtn_ir_options_on "Açık"
+#define qtn_ir_options_searchag "Yeniden ara"
+#define qtn_ir_options_select "Seç"
+#define qtn_ir_options_settings "Ayarlar"
+#define qtn_ir_options_station "Ä°stasyon"
+#define qtn_ir_options_stereowidening "Stereo geniÅŸletme"
+#define qtn_ir_options_unmark "İşareti kaldır"
+#define qtn_ir_options_unmarkall "Tümünün iş. kaldır"
+#define qtn_ir_playfail_err "Radyo çalınamadı"
+#define qtn_ir_playlist_title "Alınan bağ."
+#define qtn_ir_popup_no_results "Hiçbir sonuç bulunamadı"
+#define qtn_ir_popup_toomany_results "Çok fazla sonuç. Arama teriminizi ayrıntılandırın."
+#define qtn_ir_results_none "Eşleşen istasyon bulunamadı. Tekrar arayın."
+#define qtn_ir_search_result "%0U[11]:%1N sonuç"
+#define qtn_ir_search_results "%0U[10]:%1N sonuç"
+#define qtn_ir_set_folder_internetradio "Ä°nternet radyosu"
+#define qtn_ir_set_folder_irradio "Ä°nternet radyosu"
+#define qtn_ir_settings_3g "3G bağlantı bit hızı"
+#define qtn_ir_settings_connec_softkey_ok "Tamam"
+#define qtn_ir_settings_gprs "GPRS bağlantısı bit hızı"
+#define qtn_ir_settings_network "Şebeke bağlantısı"
+#define qtn_ir_settings_snap_default "Varsayılan bağlantı"
+#define qtn_ir_settings_title "Ayarlar"
+#define qtn_ir_settings_wifi "Wi-Fİ bağlantısı bit hızı"
+#define qtn_ir_softkey_back "Geri"
+#define qtn_ir_softkey_cancel "Ä°ptal"
+#define qtn_ir_softkey_done "Bitti"
+#define qtn_ir_softkey_no "Hayır"
+#define qtn_ir_softkey_options "Seçenek"
+#define qtn_ir_softkey_select "Seç"
+#define qtn_ir_softkey_yes "Evet"
+#define qtn_ir_station_saved "Ä°stasyon kaydedildi"
+#define qtn_ir_stationlist_nomatches "(eÅŸleÅŸme yok)"
+#define qtn_ir_stations_popup_delete "%U[74]\nsilinsin mi?"
+#define qtn_ir_stations_popup_delete_many "%N istasyon silinsin mi?"
+#define qtn_ir_stations_popup_removed "%U[90] silindi"
+#define qtn_ir_stations_popup_removed_many "%N istasyon silindi"
+#define qtn_ir_stations_popup_save "Ä°stasyon Favoriler'e kaydedilsin mi?"
+#define qtn_ir_suboptions_delete "Sil"
+#define qtn_ir_suboptions_details "Bilgiler"
+#define qtn_ir_suboptions_move "Taşı"
+#define qtn_ir_terms_details "Aşağıdaki Hüküm ve Koşulları kabul etmekle yürürlükteki yasalarca izin verilen ve maddi haklar açısından daha fazla sınırlanmayan veya yasaklanmayan kapsamda bir sözleşmeye tabi olursunuz"
+#define qtn_ir_terms_heading "Hüküm ve koşullar"
+#define qtn_ir_terms_softkey_accept "Kabul et"
+#define qtn_ir_terms_softkey_decline "Reddet"
+#define qtn_ir_title_history "Geçmiş"
+#define qtn_ir_tooltip_addalltofav "Tümünü fvrlr ekle"
+#define qtn_ir_tooltip_addstation "Ä°stasyonu elle ekle"
+#define qtn_ir_tooltip_addtofav "Favorilere ekle"
+#define qtn_ir_tooltip_copy "Kopyala"
+#define qtn_ir_tooltip_findnstore "Müzik mğzsnd bul"
+#define qtn_ir_tooltip_findst "Ä°stasyon bul"
+#define qtn_ir_tooltip_history "Geçmiş"
+#define qtn_ir_tooltip_listen "Dinle"
+#define qtn_ir_tooltip_paste "Yapıştır"
+#define qtn_ir_tooltip_stationde "Ä°stasyon bilgileri"
+#define qtn_ir_top_title "En iyi ist."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Ad"
+#define qtn_ir_url_title "Ä°stasyon ekleme"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/14/internetradioai_14.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Ä°nternet radyosu">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/14/terms_14.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Ä°nternet Radyosu servisi (“Servisâ€) Ä°nternet radyosu istasyonlarının içeriÄŸini keÅŸfetmenizi ve kullanmanızı saÄŸlar. BU SERVÄ°SÄ° KULLANMANIN, BU SÖZLEÅžMEYÄ° OKUDUÄžUNUZU, ANLADIÄžINIZI TEYÄ°T ETTİĞİNÄ° VE SÖZLEÅžME HÃœKÃœM VE KOÅžULLARINA TABÄ° OLDUÄžUNUZU KABUL EDERSÄ°NÄ°Z.  Kabul etmediÄŸiniz takdirde bu Servisi kullanma izninizin bulunmadığını unutmayın.</p>
+
+<p></p>
+
+<h1>1. TANIMLAR</h1>
+
+<p></p>
+
+<p>İnternet radyosu istasyonu, genellikle ses içeriği ve bununla ilgili üst verileri İnternet üzerinden gerçek zamanlı olarak üreten ve dağıtan kuruluşlara denir.</p>
+
+<p></p>
+
+<p>İnternet radyosu istasyonunun bağlantısı, kullanıcının İnternet radyosu istasyonu tarafından gerçek zamanlı olarak yayınlanan içeriğe erişimini sağlayan kaynak adresine veya kaynak adresi grubuna denir.</p>
+
+<p></p>
+
+<h1>2. SERVÄ°S</h1>
+
+<p></p>
+
+<p>Servis aşağıdakileri sağlamaktadır:</p>
+<p>1. İnternet radyosu istasyonları bağlantılarını tarama;</p>
+<p>2. İnternet radyosu istasyonlarının içeriğine erişim;</p>
+
+<p></p>
+
+<h1>3. SERVÄ°SÄ°N KULLANIMI</h1>
+
+<p></p>
+
+<p>Servisin yalnızca özel ve ticari olmayan kullanımına izin verilmektedir. Bu Servisin ve Servise ilişkin tüm fikri mülkiyet hakları Nokia'ya aittir.</p>
+
+<p></p>
+
+<p>Nokia’nın bu değişiklikler hakkında bilgi vererek hüküm ve koşulları değiştirme hakkı saklıdır.</p>
+
+<p></p>
+
+<h1>4. GÄ°ZLÄ°LÄ°K</h1>
+
+<p></p>
+
+<p>Nokia, etkin gizlilik kuralları uygulayarak kullanıcıların gizli bilgilerini korumayı taahhüt eder.</p>
+
+<p></p>
+
+<p>Nokia, bu Servisin kullanımını izlemek ve geliştirmek için erişilen İnternet radyosu istasyonları, her istasyonda geçirilen süre ve favori olarak değerlendirilen öğeler hakkındaki bilgiler de dahil ancak bunlarla sınırlı olmamak üzere kullanım verileri toplayabilir.</p>
+
+<p></p>
+
+<p>Nokia, Servis kullanıcısının kimliğinin saptanmasına olanak veren bilgileri toplamaz.</p>
+
+<p></p>
+
+<h1>5. SERVİSİN KULLANILABİLİRLİĞİ</h1>
+
+<p></p>
+
+<p>Servis size kolaylık olarak sunulmaktadır. Bu Servis “olduğu gibi†ve “mevcutsa†sunulmaktadır. Nokia, Servisin kesintisiz ve hatasız olduğunu garanti etmez. Nokia’nın herhangi bir zamanda Servisi gözden geçirme veya erişim hakkını geri alma hakkı saklıdır.</p>
+
+<p></p>
+
+<p>Nokia, tamamen kendi takdirine bağlı olarak servis ile ilgili yazılım uygulamaları için yükseltme sunabilir.</p>
+
+<p></p>
+
+<h1>6. SORUMLULUK REDDÄ° VE SORUMLULUK</h1>
+
+<p></p>
+
+<p>Kolay erişiminiz için Nokia üçüncü taraflara ait veya üçüncü taraflarca işletilen İnternet radyosu istasyonlarının bağlantılarına yer verebilir. Nokia, bu İnternet radyosu istasyonlarının bağlantılarının çalıştığını garanti etmez. Ayrıca Nokia ile ilgili olmayan içerik, hiçbir şekilde Nokia’nın sözü edilen içeriği olduğu gibi veya içerik içerisinde sözü edilen ürünleri ya da servisleri onayladığı anlamına gelmez.</p>
+
+<p></p>
+
+<p>Erişmeden önce, varsa, her istasyonun kullanım kurallarını inceleyip kabul etmeniz gerekir. Ayrıca Nokia’nın üçüncü taraf servisler üzerinde hiçbir denetiminin olmadığını ve İnternet radyosu istasyonu tarafından sunulan içerikle ilgili hiçbir sorumluluğu üstlenmediğini kabul etmiş olursunuz.</p>
+
+<p></p>
+
+<p>Servisi kullanarak İnternet radyosu istasyonlarının içeriğine erişmek servis sağlayıcı şebekesinden büyük miktarda veri aktarımına neden olabilir. Veri aktarım ücretleri hakkında bilgi almak için servis sağlayıcınıza başvurun. Daha yüksek bit oranı akışına sahip İnternet radyosu istasyonlarıyla bu Servisi kullanmak veri trafiğine bağlı olarak daha yüksek maliyet yükleyebilir.</p>
+
+<p></p>
+
+<p>Servisin kullanımı ile ilgili veri trafiği en azından aşağıdakileri içerebilir: İstasyon dizinin içeriğinin güncellenmesi, İnternet radyosu istasyonundan gerçek zamanlı veri aktarımı, istatistik bilgilerin toplanması, İnternet radyosu uygulamasının yükseltilmesi.</p>
+
+<p></p>
+
+<p>Nokia, Servisin kullanımı ile ilgili olarak veri trafiği maliyetlerinden sorumlu değildir.</p>
+
+<p></p>
+
+<p>SERVİSİN KULLANILABİLİRLİĞİ, DOĞRULUĞU, GÜVENİLİRLİĞİ VEYA İÇERİĞİ İLE İLGİLİ OLARAK MÜLKİYET VEYA HAK İHLALİ BULUNMAMASI İLE İLGİLİ GARANTİLER YA DA SATILABİLİRLİK VEYA BELİRLİ BİR AMACA UYGUNLUĞU İLE İLGİLİ ZIMNİ GARANTİLER DE DAHİL ANCAK BUNLARLA SINIRLI OLMAMAK ÜZERE HİÇBİR AÇIK VEYA ZIMNİ GARANTİ VERİLMEZ.  NOKIA, SERVİSİN KULLANILAMAMASINDAN VEYA KULLANIMINDAN DOĞAN DOĞRUDAN, DOLAYLI, ARIZİ, ÖZEL VEYA NEDEN OLUNAN ZARARLARDAN, KAYBEDİLEN KÂRDAN VEYA TİCARİ KESİNTİLERDEN ZARAR OLASILIĞINDAN HABERDAR EDİLMİŞ OLSA BİLE SORUMLU DEĞİLDİR. BAZI HUKUK SİSTEMLERİ, BELİRLİ GARANTİLERİN HARİÇ TUTULMASINA VEYA SORUMLULUKLARIN SINIRLANDIRILMASINA İZİN VERMEMEKTEDİR, BU NEDENLE YUKARIDAKİ SINIRLAMALAR SİZİN İÇİN GEÇERLİ OLMAYABİLİR. BÖYLE BİR DURUMDA NOKIA’NIN SORUMLULUKLARI YASALARIN İZİN VERDİĞİ AZAMİ ÖLÇÜDE SINIRLIDIR.</p>
+
+<p></p>
+
+<p>Buradaki hiçbir şey tüketici olarak işlem yapan tarafın yasal haklarına halel getirmeyecektir. Buradaki hiçbir şey, Nokia’nın ihmali sonucunda ortaya çıkan ölüm veya kişisel yaralanmalarda Nokia’nın sorumluluklarını sınırlandırmaz.</p>
+
+<p></p>
+
+<h1>7. TELÄ°F HAKKI Ä°HLALÄ° Ä°DDÄ°ALARI Ä°LE Ä°LGÄ°LÄ° POLÄ°TÄ°KA</h1>
+
+<p></p>
+
+<p>Telif hakkına sahip olduğunuz bir çalışmanın telif hakkı ihlali oluşturacak şekilde kullanıldığını düşünüyorsanız, aşağıdakileri içeren bir bildirimde bulunarak Nokia'yı bilgilendirebilirsiniz:</p>
+
+<p></p>
+
+<p>(1) İhlal edildiği iddia edilen özel hakkın sahibinin adına hareket etmeye izinli kişinin fiziki veya elektronik imzası;</p>
+
+<p></p>
+
+<p>(2) İhlal edildiği iddia edilen telif hakkıyla korunan çalışmanın tanımlanması ve açıklaması;</p>
+
+<p></p>
+
+<p>(3) Telif hakkını ihlal ettiği iddia edilen malzemenin tanımlanması ve açıklaması ile malzemeyi bulmak için yeterli derecede bilgi;</p>
+
+<p></p>
+
+<p>(4) Adınız, adresiniz, telefon numaranız, e-posta adresiniz ve Nokia’nın sizinle irtibata geçmesini sağlayacak diğer bilgiler;</p>
+
+<p></p>
+
+<p>(5) İyi niyetle malzemenin şikayet edilen biçimde kullanımına telif hakkı sahibi, aracı kurumu veya yasa tarafından izin verilmediğini düşündüğünüzün beyan edilmesi ve</p>
+
+<p></p>
+
+<p>(6) Bildirimdeki bilginin doğru olduğunun, yalan beyanda bulunma ile ilgili cezalara tabi olduğunun, ihlal edildiği iddia edilen özel hakkın sahibi adına hareket etme izninizin bulunduğunun beyan edilmesi.</p>
+
+<p></p>
+
+<p>Bildirimin Atanmış Temsilci adresine gönderilmesi gerekir:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. TABÄ° OLUNAN YASA</h1>
+
+<p></p>
+
+<p>Bu hüküm ve koÅŸullarda kullanıldığı gibi “Nokiaâ€, Nokia Corporation anlamına gelmektedir. Nokia bu Servisi Finlandiya içindeki yerlerden iÅŸletmekte ve denetlemektedir. Aynı ÅŸekilde Servis içindeki bilginin Finlandiya’da saÄŸlandığı varsayılır.</p>
+
+<p></p>
+
+<p>Telif Hakkı © Nokia Corporation 2006. Tüm hakları saklıdır.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/15/internetradio_15.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Spyrja alltaf"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stöðvar vistaðar"
+#define qtn_ir_added_single "%U[90] vistuð"
+#define qtn_ir_addmanually_unnamed "Ãn heitis"
+#define qtn_ir_addst_description "Lýsing"
+#define qtn_ir_addst_streamurl "Slóð straums"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Netútvarp"
+#define qtn_ir_ai_radio_not_active "Útvarp ekki virkt"
+#define qtn_ir_app_general_err "Innri villa. Endurræstu forritið."
+#define qtn_ir_apps_grid "Netútvarp"
+#define qtn_ir_apps_list "Netútvarp"
+#define qtn_ir_apps_skey "Netútvarp"
+#define qtn_ir_apps_standby "Netútvarp"
+#define qtn_ir_apps_swins "Netútvarp"
+#define qtn_ir_apps_wheel "Netútvarp"
+#define qtn_ir_bitrate_best "Bestu gæði"
+#define qtn_ir_bitrate_high "Hágæði"
+#define qtn_ir_bitrate_standard "Venjuleg gæði"
+#define qtn_ir_cost_heading "Mikilvæg tilkynning"
+#define qtn_ir_cost_softkey_continue "Ãfram"
+#define qtn_ir_cost_softkey_exit "Hætta"
+#define qtn_ir_cost_title "Netútvarp"
+#define qtn_ir_cost_warning "Netútvarp nota gagnatengingu símans til að ná útvarpssendingum. Einungis er mælt með þessu ef þú greiðir fast gjald fyrir gagntenginguna. Ef þú ert ekki viss um hvað gögnin kosta skaltu athuga það hjá símafyrirtækinu áður en lengra er haldið."
+#define qtn_ir_country_list_expanded "%N stöðvar"
+#define qtn_ir_countryregion_title "Lönd/svæði"
+#define qtn_ir_discover_beststations "Úrval af bestu stöðvunum"
+#define qtn_ir_discover_country_region "Skoða eftir landi/svæði"
+#define qtn_ir_discover_genre "Skoða eftir stefnu"
+#define qtn_ir_discover_genre_expanded "Stöðvar eftir stefnu"
+#define qtn_ir_discover_langauge "Skoða eftir tungumáli"
+#define qtn_ir_discover_language_expanded "Stöðvar eftir tungumáli"
+#define qtn_ir_discover_staticountryreg "Stöðvum raðað e. borg/svæði"
+#define qtn_ir_discover_title "Stöðvaskrá"
+#define qtn_ir_discover_top "Vinsælustu stöðvarnar"
+#define qtn_ir_edit_title "Breyta stöð"
+#define qtn_ir_err_operation "Villa í aðgerð. Reyndu aftur."
+#define qtn_ir_err_url_unavail "veffang ekki tiltækt"
+#define qtn_ir_error_address "Rangt vistfang Netútvarpsstöðvar"
+#define qtn_ir_error_connection "Tengingin rann út. Reyndu aftur."
+#define qtn_ir_error_favourites "Of lítið minni í Uppáhalds til að vista"
+#define qtn_ir_error_general "Ekki hægt að tengjast við stöðina"
+#define qtn_ir_error_isds_unavailable "Netútvarpsskráin er ekki til staðar tímabundið"
+#define qtn_ir_error_notavailable "Engir straumspilunar­tenglar"
+#define qtn_ir_error_notinisds "Hluturinn er ekki lengur til staðar"
+#define qtn_ir_error_search "Sláðu inn leitarorð"
+#define qtn_ir_findst_addstation "Bæta handvirkt við stöð"
+#define qtn_ir_findst_addtofav "Bæta stöðinni við Uppáhalds"
+#define qtn_ir_findst_browsesds "Fletta í stöðvaskrá"
+#define qtn_ir_findst_search_ensrhterm "Sláðu inn leitarorð"
+#define qtn_ir_findst_softkey_search "Leita"
+#define qtn_ir_findstation_title "Finna stöðvar"
+#define qtn_ir_firstuse_title "Netútvarp: Velkomin"
+#define qtn_ir_genre_list_expanded "%N stöðvar"
+#define qtn_ir_genre_title "Stefnur"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Engin sögu"
+#define qtn_ir_homescreen_buffering "Hleð í biðminni"
+#define qtn_ir_homescreen_lastplayed "Síðast spilað"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Land/Svæði:"
+#define qtn_ir_info_details_description "Lýsing:"
+#define qtn_ir_info_details_genre "Stefna:"
+#define qtn_ir_info_details_language "Tungumál:"
+#define qtn_ir_info_details_name "Heiti:"
+#define qtn_ir_info_details_streams "Straumar:"
+#define qtn_ir_info_details_title "Uppl. stöðvar"
+#define qtn_ir_info_details_type "Gerð:"
+#define qtn_ir_info_details_type_isds "Stöðv.skr."
+#define qtn_ir_info_details_type_manual "Not. tilgr."
+#define qtn_ir_info_details_unnamed "Ãn heitis"
+#define qtn_ir_info_softkey_close "Loka"
+#define qtn_ir_language_list_expanded "%N stöðvar"
+#define qtn_ir_language_title "Tungumál"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Hleð"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Leita"
+#define qtn_ir_main_descriptive_text "Nota 'Finna stöðvar' til að bæta við stöð"
+#define qtn_ir_main_discover_expanded "Finndu nýjar útvarpsstöðvar"
+#define qtn_ir_main_last "Síðast spiluð"
+#define qtn_ir_main_now "Ã spilun"
+#define qtn_ir_main_prog_deleting "Eyði %N"
+#define qtn_ir_main_searchindir "Leita í skráasafni"
+#define qtn_ir_main_title "Netútvarp"
+#define qtn_ir_main_unnamed_station "Ónefnd stöð"
+#define qtn_ir_memlo_ram_out_of_mem "Ekki er nægjanlegt minni til að framkvæma aðgerð. Eyddu fyrst einhverjum gögnum."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Næsta stöð"
+#define qtn_ir_now_tooltip_play "Spila"
+#define qtn_ir_now_tooltip_previous "Fyrri stöð"
+#define qtn_ir_now_tooltip_stop "Stöðva"
+#define qtn_ir_now_wait_buffering "Hleð í biðminni"
+#define qtn_ir_now_wait_buffering_perc "Hleð í biðminni %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Engin tenging til staðar"
+#define qtn_ir_nwcontroller_err_nosnaps "Enginn aðgangsstaður valinn"
+#define qtn_ir_options_add "Bæta við Uppáhalds"
+#define qtn_ir_options_add_manually "Bæta handvirkt við stöð"
+#define qtn_ir_options_change "Breyta"
+#define qtn_ir_options_clearhistory "Eyða sögu"
+#define qtn_ir_options_editstation "Breyta stöð"
+#define qtn_ir_options_equalizer "Tónjafnari"
+#define qtn_ir_options_exit "Hætta"
+#define qtn_ir_options_findnmusicstore "Finna í Tónlistarverslun"
+#define qtn_ir_options_fmtrans "FM-sendir"
+#define qtn_ir_options_gotomusicstore "Opna Tónlistarverslun"
+#define qtn_ir_options_help "Hjálp"
+#define qtn_ir_options_history "Forsaga"
+#define qtn_ir_options_info "Um stöð"
+#define qtn_ir_options_mainview "Opna aðalskjá"
+#define qtn_ir_options_mark "Merkja"
+#define qtn_ir_options_markall "Merkja öll"
+#define qtn_ir_options_markunmark "Merkja/afmerkja"
+#define qtn_ir_options_now "Opna 'Ã spilun'"
+#define qtn_ir_options_off "Slökkt"
+#define qtn_ir_options_on "Kveikt"
+#define qtn_ir_options_searchag "Leita aftur"
+#define qtn_ir_options_select "Velja"
+#define qtn_ir_options_settings "Stillingar"
+#define qtn_ir_options_station "Stöð"
+#define qtn_ir_options_stereowidening "Viðbótarsteríó"
+#define qtn_ir_options_unmark "Afmerkja"
+#define qtn_ir_options_unmarkall "Afmerkja öll"
+#define qtn_ir_playfail_err "Spilun útvarps mistókst"
+#define qtn_ir_playlist_title "Mótt. tenglar"
+#define qtn_ir_popup_no_results "Ekkert fannst"
+#define qtn_ir_popup_toomany_results "Of margar niðurstöður. Þrengdu leitina."
+#define qtn_ir_results_none "Engar samsvarandi stöðvar fundust"
+#define qtn_ir_search_result "%0U[10]:%1N niðurst."
+#define qtn_ir_search_results "%0U[09]:%1N niðurst."
+#define qtn_ir_set_folder_internetradio "Netútvarp"
+#define qtn_ir_set_folder_irradio "Netútvarp"
+#define qtn_ir_settings_3g "3G-tengihraði"
+#define qtn_ir_settings_connec_softkey_ok "Ã lagi"
+#define qtn_ir_settings_gprs "GPRS-tengihraði"
+#define qtn_ir_settings_network "Nettenging"
+#define qtn_ir_settings_snap_default "Sjálfgefin tenging"
+#define qtn_ir_settings_title "Stillingar"
+#define qtn_ir_settings_wifi "Wi-Fi tengihraði"
+#define qtn_ir_softkey_back "Bakka"
+#define qtn_ir_softkey_cancel "Hætta við"
+#define qtn_ir_softkey_done "Lokið"
+#define qtn_ir_softkey_no "Nei"
+#define qtn_ir_softkey_options "Valkostir"
+#define qtn_ir_softkey_select "Velja"
+#define qtn_ir_softkey_yes "Já"
+#define qtn_ir_station_saved "Stöð vistuð"
+#define qtn_ir_stationlist_nomatches "(engar niðurstöður)"
+#define qtn_ir_stations_popup_delete "Eyða\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Eyða %N stöðvum?"
+#define qtn_ir_stations_popup_removed "%U[91] eytt"
+#define qtn_ir_stations_popup_removed_many "%N stöðvum eytt"
+#define qtn_ir_stations_popup_save "Vista stöð í Uppáhalds?"
+#define qtn_ir_suboptions_delete "Eyða"
+#define qtn_ir_suboptions_details "Upplýsingar"
+#define qtn_ir_suboptions_move "Færa"
+#define qtn_ir_terms_details "Með því að samþykkja ákvæðin og skilmálana hér að neðan gengstu undir samning að því marki sem gildandi lög leyfa og sem takmarkast ekki frekar eða er óheimilt með tilliti til allra efnislegra réttinda."
+#define qtn_ir_terms_heading "Skilmálar"
+#define qtn_ir_terms_softkey_accept "Samþykkja"
+#define qtn_ir_terms_softkey_decline "Hafna"
+#define qtn_ir_title_history "Forsaga"
+#define qtn_ir_tooltip_addalltofav "Bæta öllu v. Uppáhalds"
+#define qtn_ir_tooltip_addstation "Bæta handvirkt v. stöð"
+#define qtn_ir_tooltip_addtofav "Bæta við Uppáhalds"
+#define qtn_ir_tooltip_copy "Afrita"
+#define qtn_ir_tooltip_findnstore "Finna í Tónlistarversl."
+#define qtn_ir_tooltip_findst "Finna stöðvar"
+#define qtn_ir_tooltip_history "Forsaga"
+#define qtn_ir_tooltip_listen "Hlusta"
+#define qtn_ir_tooltip_paste "Líma"
+#define qtn_ir_tooltip_stationde "Um stöðina"
+#define qtn_ir_top_title "Vinsæl. stöðvar"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Heiti"
+#define qtn_ir_url_title "Bæta við stöð"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/15/internetradioai_15.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Netútvarp">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/15/terms_15.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia netútvarpsþjónustan („Þjónustan“) gerir þér kleift að finna og hlusta á útsendingar netútvarpsstöðva. MEà NOTKUN ÞINNI à ÞJÓNUSTUNNI VIÃURKENNIRÃU Aà ÞÚ HAFIR LESIà ÞENNAN SAMNING, SKILJIR HANN OG SAMÞYKKIR Aà HLÃTA SKILMÃLUM HANS OG SKILYRÃUM. Vinsamlega athugaðu að ef þú samþykkir hann ekki er þér óheimilt að nota þjónustuna.</p>
+
+<p></p>
+
+<h1>1. SKILGREININGAR</h1>
+
+<p></p>
+
+<p>Með netútvarpsstöðvum er átt við lögaðila sem almennt framleiða og dreifa hljóðefni og tengdum lýsigögnum á internetinu með straumum.</p>
+
+<p></p>
+
+<p>Með tengli í netútvarpsstöð er átt við veffang eða tengd vefföng sem veita notanda aðgang að efni sem útvarpsstöðin sendir frá sér.</p>
+
+<p></p>
+
+<h1>2. ÞJÓNUSTAN</h1>
+
+<p></p>
+
+<p>Þjónustan gerir notendum kleift að gera eftirfarandi:</p>
+<p>1. skoða tengla í netútvarpsstöðvar;</p>
+<p>2. hlusta á efni netútvarpsstöðva.</p>
+
+<p></p>
+
+<h1>3. NOTKUN ÞJÓNUSTUNNAR</h1>
+
+<p></p>
+
+<p>Einungis er heimilt að nota þjónustuna í persónulegu skyni og ekki í viðskiptalegu augnamiði. Nokia á allan hugverkarétt í og að Þjónustunni.</p>
+
+<p></p>
+
+<p>Nokia áskilur sér rétt til að breyta þessum skilmálum og skilyrðum með því að tilkynna þér um slíkar breytingar.</p>
+
+<p></p>
+
+<h1>4. GAGNALEYND</h1>
+
+<p></p>
+
+<p>Nokia leggur áherslu á verndun notendagagna með innleiðingu strangra trúnaðarreglna.</p>
+
+<p></p>
+
+<p>Til að fylgjast með notkun þjónustunnar og bæta hana kann Nokia að safna notendagögnum, þ.m.t. en ekki takmarkað við, upplýsingum um hlustun á netútvarpsstöðvar, hlustunartíma hverrar stöðvar og einkunnargjöf.</p>
+
+<p></p>
+
+<p>Nokia safnar engum upplýsingum sem gera því kleift að bera kennsl á notendur þjónustunnar.</p>
+
+<p></p>
+
+<h1>5. FRAMBOà ÞJÓNUSTU</h1>
+
+<p></p>
+
+<p>Þjónustan er veitt þér til þæginda. Hún er veitt „eins og hún er“ og „í samræmi við framboð“. Nokia ábyrgist hvorki að þjónustan verði truflana- né villulaus. Nokia áskilur sér rétt til að endurskoða þjónustuna eða loka fyrir aðgang að henni hvenær sem er.</p>
+
+<p></p>
+
+<p>Nokia kann að veita uppfærslur fyrir forrit sem tengjast þjónustunni að eigin vild.</p>
+
+<p></p>
+
+<h1>6. AFSAL ÃBYRGÃAR OG SKAÃBÓTASKYLDA</h1>
+
+<p></p>
+
+<p>Til að auðvelda þér aðgengi kann Nokia að veita tengla í netútvarpsstöðvar sem eru í eigu eða eru reknar af þriðju aðilum. Nokia ábyrgist ekki að tenglar í netútvarpsstöðvar séu virkir. Að auki merkir framboð á efni sem ekki tengist Nokia að neinu leyti ekki að Nokia styðji efnið sem slíkt eða þær vörur eða þjónustu sem slíkt efni vísar í.</p>
+
+<p></p>
+
+<p>Þú verður að skoða og samþykkja notkunarreglur hverrar stöðvar, ef einhverjar eru, áður en þú hlustar á þær. Þú samþykkir einnig að Nokia hafi enga stjórn á efni hjá þjónustu þriðju aðila og geti ekki tekið neina ábyrgð á efni netútvarpsstöðva.</p>
+
+<p></p>
+
+<p>Aðgangur að efni netútvarpsstöðva með þjónustunni kann að innihalda flutning stórra gagna um netkerfi þjónustuveitunnar. Upplýsingar um gagnaflutningsgjöld fást hjá þjónustuveitunni. Athugaðu að notkun þjónustunnar með netútvarpsstöðvum sem senda strauma með meiri bitahraða getur haft í för með sér hærri kostnað vegna gagnaflutninga.</p>
+
+<p></p>
+
+<p>Gagnaflutningar sem tengjast notkun þjónustunnar kunna að hafa í för með sér a.m.k. eitt af eftirfarandi: uppfærslu efnis í stöðvaskrá, straumspilun gagna frá netútvarpsstöðinni, söfnun tölfræðigagna og uppfærslu netútvarpsforritsins.</p>
+
+<p></p>
+
+<p>Nokia er ekki ábyrgt fyrir kostnaði af gagnaflutningum sem tengjast notkun þinni á þjónustunni.</p>
+
+<p></p>
+
+<p>ENGIN ÃBYRGà ER VEITT, HVORKI BEIN NÉ ÓBEIN, Þ.M.T. EN EKKI TAKMARKAà VIà ÃBYRGà à EIGNARRÉTTINDUM EÃA Aà EKKI SÉ BROTIà GEGN RÉTTINDUM EÃA ÓBEINAR ÃBYRGÃIR à SELJANLEIKA EÃA TILTEKNU NOTAGILDI, à TENGSLUM VIà AUÃFÃANLEIKA, NÃKVÆMNI, ÃREIÃANLEIKA EÃA EFNI ÞJÓNUSTUNNAR. NOKIA BER ENGA ÃBYRGà à NEINUM BEINUM, ÓBEINUM, TILFALLANDI, SÉRSTÖKUM EÃA AFLEIDDUM TJÓNABÓTUM, TEKJUTAPI EÃA TRUFLANA à REKSTRI SEM HLÃST AF NOTKUN EÃA VANGETU à NOTKUN ÞJÓNUSTUNNAR, JAFNVEL EF NOKIA HEFUR VERIà LÃTIà VITA AF MÖGULEIKANUM à SLÃKU TJÓNABÓTUM. SUM LÖGSAGNARUMDÆMI LEYFA EKKI ÚTILOKUN à TILTEKNUM ÃBYRGÃUM EÃA TAKMARKANIR à BYRGÃ. ÞVà KANN TAKMÖRKUNIN EÃA ÚTILOKUNIN Aà OFAN EKKI Aà EIGA VIà ÞIG. SKAÃABÓTASKYLDA NOKIA ER à SLÃKUM TILFELLUM TAKMÖRKUà VIà ÞAà SEM MÖGULEGA ER HEIMILT SAMKVÆMT LÖGUM.</p>
+
+<p></p>
+
+<p>Ekkert hér skal ganga gegn lögbundnum réttindum hvers þess sem gegnir hlutverki neytanda. Ekkert hér takmarkar skaðabótaskyldu Nokia vegna dauðsfalla eða meiðsla sem hljótast af vanrækslu Nokia.</p>
+
+<p></p>
+
+<h1>7. STEFNA VARÃANDI ÃSAKANIR UM BROT à HÖFUNDARRÉTTI</h1>
+
+<p></p>
+
+<p>Ef þú telur að höfundarréttarvarið efni þitt hafi verið meðhöndlað þannig að það feli í sér brot á höfundarrétti geturðu látið Nokia vita af því með tilkynningu sem inniheldur eftirfarandi:</p>
+
+<p></p>
+
+<p>(1) Efnislega eða rafræna undirskrift aðila sem hefur leyfi til að koma fram fyrir hönd eiganda einkaefnisins sem sagt er brotið á;</p>
+
+<p></p>
+
+<p>(2) Staðfestingu eða lýsingu á höfundarréttarvarða efninu sem sagt er brotið á;</p>
+
+<p></p>
+
+<p>(3) Staðfestingu eða lýsingu á efninu sem sagt er brotið á og nægjanlegar upplýsingar til að staðsetja efnið;</p>
+
+<p></p>
+
+<p>(4) Nafn þitt, heimilisfang, símanúmer, netfang og aðrar upplýsingar sem gera Nokia kleift að hafa samband við þig;</p>
+
+<p></p>
+
+<p>(5) Yfirlýsingu um að þú teljir í góðri trú að notkun efnisins á þann hátt sem lýst er sé ekki samkvæmt leyfi höfundarrétthafa, fulltrúa hans eða samkvæmt lögum; og</p>
+
+<p></p>
+
+<p>(6) Yfirlýsingu um að upplýsingarnar sem koma fram í tilkynningunni séu réttar, og háð lögum um meinsæri, að þú hafir leyfi til að koma fram fyrir hönd eiganda einkaefnisins sem sagt er brotið á.</p>
+
+<p></p>
+
+<p>Þessa tilkynningu verður að senda fulltrúa okkar á:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GILDANDI LÖG</h1>
+
+<p></p>
+
+<p>Eins og það er notað í þessum skilmálum og skilyrðum merkir ‘Nokia' Nokia Corporation. Nokia stýrir og stjórnar þjónustunni frá Finnlandi. Því er litið svo á að upplýsingarnar sem koma fram í þjónustunni séu sem slíkar veittar í Finnlandi.</p>
+
+<p></p>
+
+<p>Höfundarréttur © Nokia Corporation 2006. Öll réttindi áskilin.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/157/internetradio_157.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[44] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Int. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regns."
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add a station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Int. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[05]:%1N result"
+#define qtn_ir_search_results "%0U[05]:%1N res."
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[44] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/158/internetradio_158.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[44] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Int. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regns."
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add a station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Int. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[05]:%1N result"
+#define qtn_ir_search_results "%0U[05]:%1N res."
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[44] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/159/internetradio_159.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[44] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Int. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regns."
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add a station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Int. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[05]:%1N result"
+#define qtn_ir_search_results "%0U[05]:%1N res."
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[44] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/16/internetradio_16.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Ð’Ñегда Ñпрашивать"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "Сохранено Ñтанций: %N"
+#define qtn_ir_added_single "Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ %U[69] Ñохранена"
+#define qtn_ir_addmanually_unnamed "Без названиÑ"
+#define qtn_ir_addst_description "ОпиÑание"
+#define qtn_ir_addst_streamurl "URL-Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾Ñ‚Ð¾ÐºÐ°"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Интернет-радио"
+#define qtn_ir_ai_radio_not_active "Радио неактивно"
+#define qtn_ir_app_general_err "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПерезапуÑтите приложение."
+#define qtn_ir_apps_grid "Инт.-радио"
+#define qtn_ir_apps_list "Интернет-радио"
+#define qtn_ir_apps_skey "Интерн.-радио"
+#define qtn_ir_apps_standby "Интернет-радио"
+#define qtn_ir_apps_swins "Интернет-радио"
+#define qtn_ir_apps_wheel "Интернет-радио"
+#define qtn_ir_bitrate_best "Ð’Ñ‹Ñшее качеÑтво"
+#define qtn_ir_bitrate_high "Ð’Ñ‹Ñокое качеÑтво"
+#define qtn_ir_bitrate_standard "Станд. качеÑтво"
+#define qtn_ir_cost_heading "Ð’Ð°Ð¶Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
+#define qtn_ir_cost_softkey_continue "Продолжить"
+#define qtn_ir_cost_softkey_exit "Выйти"
+#define qtn_ir_cost_title "Интерн.-радио"
+#define qtn_ir_cost_warning "Интернет-радио иÑпользует Ñоединение данных телефона Ð´Ð»Ñ Ñ€Ð°Ð´Ð¸Ð¾Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸. ПользоватьÑÑ Ñтой функцией рекомендуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в Ñлучае фикÑированного тарифного плана. ЕÑли вы не знаете Ñвоего тарифа на передачу данных, обратитеÑÑŒ к оператору, прежде чем продолжить."
+#define qtn_ir_country_list_expanded "Станций: %N"
+#define qtn_ir_countryregion_title "Страны/рег."
+#define qtn_ir_discover_beststations "Выборка лучших Ñтанций"
+#define qtn_ir_discover_country_region "ПоиÑк по Ñтране/рег."
+#define qtn_ir_discover_genre "ПоиÑк по жанру"
+#define qtn_ir_discover_genre_expanded "Станции отÑортир. по жанру"
+#define qtn_ir_discover_langauge "ПоиÑк по Ñзыку"
+#define qtn_ir_discover_language_expanded "Станции отÑортир. по Ñзыку"
+#define qtn_ir_discover_staticountryreg "Станц. отÑорт. по Ñтране/рег."
+#define qtn_ir_discover_title "Каталог Ñтанц."
+#define qtn_ir_discover_top "Лучшие Ñтанции"
+#define qtn_ir_edit_title "Редакт. Ñтанц."
+#define qtn_ir_err_operation "Ошибка операции. Повторите попытку."
+#define qtn_ir_err_url_unavail "URL-Ð°Ð´Ñ€ÐµÑ Ð½ÐµÐ´Ð¾Ñтупен"
+#define qtn_ir_error_address "Ðеправильный Ð°Ð´Ñ€ÐµÑ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-радиоÑтанции"
+#define qtn_ir_error_connection "Тайм-аут ÑоединениÑ. Повторите попытку."
+#define qtn_ir_error_favourites "ÐедоÑтаточно меÑта в папке \"Избранное\" Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… Ñлементов"
+#define qtn_ir_error_general "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº Ñтанции"
+#define qtn_ir_error_isds_unavailable "УÑлуга каталога Интернет-Ñтанций временно недоÑтупна"
+#define qtn_ir_error_notavailable "Ðет потоковых ÑÑылок"
+#define qtn_ir_error_notinisds "Элемент больше не доÑтупен"
+#define qtn_ir_error_search "Введите критерий поиÑка"
+#define qtn_ir_findst_addstation "Доб. Ñтанцию вручную"
+#define qtn_ir_findst_addtofav "Доб. Ñтанции в избранное"
+#define qtn_ir_findst_browsesds "ПоиÑк в катал. Ñтанций"
+#define qtn_ir_findst_search_ensrhterm "Ввод критериев поиÑка"
+#define qtn_ir_findst_softkey_search "ПоиÑк"
+#define qtn_ir_findstation_title "ПоиÑк Ñтанций"
+#define qtn_ir_firstuse_title "И.-радио: приветÑтвие"
+#define qtn_ir_genre_list_expanded "Станций: %N"
+#define qtn_ir_genre_title "Жанры"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Ðет запиÑей журнала"
+#define qtn_ir_homescreen_buffering "БуферизациÑ"
+#define qtn_ir_homescreen_lastplayed "ПоÑл. воÑпроизв."
+#define qtn_ir_info_details_bitrate "%N кбит/Ñ:"
+#define qtn_ir_info_details_countryregi "Страна/регион:"
+#define qtn_ir_info_details_description "ОпиÑание:"
+#define qtn_ir_info_details_genre "Жанр(ы):"
+#define qtn_ir_info_details_language "Язык:"
+#define qtn_ir_info_details_name "Ðазвание:"
+#define qtn_ir_info_details_streams "Потоки:"
+#define qtn_ir_info_details_title "Инф. о Ñтанции"
+#define qtn_ir_info_details_type "Тип:"
+#define qtn_ir_info_details_type_isds "Кат. Ñтан."
+#define qtn_ir_info_details_type_manual "Пользов."
+#define qtn_ir_info_details_unnamed "Без назв."
+#define qtn_ir_info_softkey_close "Закрыть"
+#define qtn_ir_language_list_expanded "Станций: %N"
+#define qtn_ir_language_title "Языки"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "ВыполнÑетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "ВыполнÑетÑÑ Ð¿Ð¾Ð¸Ñк"
+#define qtn_ir_main_descriptive_text "ИÑп. \"ПоиÑк Ñтанций\" на пан. инÑÑ‚Ñ€. д/доб. Ñтанц."
+#define qtn_ir_main_discover_expanded "ПоиÑк новых Ñтанций"
+#define qtn_ir_main_last "ПоÑл. ÑтанциÑ"
+#define qtn_ir_main_now "Текущ. ÑтанциÑ"
+#define qtn_ir_main_prog_deleting "Удаление %N"
+#define qtn_ir_main_searchindir "ПоиÑк в каталоге"
+#define qtn_ir_main_title "Интерн.-радио"
+#define qtn_ir_main_unnamed_station "Станц. без назв."
+#define qtn_ir_memlo_ram_out_of_mem "ÐедоÑтаточно памÑти Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸. Сначала удалите некоторые данные."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N кбит/Ñ"
+#define qtn_ir_now_bitrate_mbps "%N мбит/Ñ"
+#define qtn_ir_now_bytecountermb "%N МБ"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N МБ"
+#define qtn_ir_now_fm_frequency "%U[16] МГц"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÑтанциÑ"
+#define qtn_ir_now_tooltip_play "ВоÑпроизвеÑти"
+#define qtn_ir_now_tooltip_previous "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÑтанциÑ"
+#define qtn_ir_now_tooltip_stop "ОÑтановить"
+#define qtn_ir_now_wait_buffering "БуферизациÑ"
+#define qtn_ir_now_wait_buffering_perc "Ð‘ÑƒÑ„ÐµÑ€Ð¸Ð·Ð°Ñ†Ð¸Ñ %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ðет Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñети"
+#define qtn_ir_nwcontroller_err_nosnaps "Ðе указана точка доÑтупа"
+#define qtn_ir_options_add "Добавить в избранное"
+#define qtn_ir_options_add_manually "Доб. Ñтанцию вручную"
+#define qtn_ir_options_change "Изменить"
+#define qtn_ir_options_clearhistory "ОчиÑтить журнал"
+#define qtn_ir_options_editstation "Редактиров. Ñтанцию"
+#define qtn_ir_options_equalizer "Эквалайзер"
+#define qtn_ir_options_exit "Выйти"
+#define qtn_ir_options_findnmusicstore "Ðайти в Муз. магазине"
+#define qtn_ir_options_fmtrans "FM-передатчик"
+#define qtn_ir_options_gotomusicstore "В Музыкальн. магазин"
+#define qtn_ir_options_help "Справка"
+#define qtn_ir_options_history "Журнал"
+#define qtn_ir_options_info "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñтанции"
+#define qtn_ir_options_mainview "Открыть главное окно"
+#define qtn_ir_options_mark "Отметить"
+#define qtn_ir_options_markall "Отметить вÑе"
+#define qtn_ir_options_markunmark "Отметить/СнÑÑ‚ÑŒ отм."
+#define qtn_ir_options_now "К текущей Ñтанции"
+#define qtn_ir_options_off "Отключить"
+#define qtn_ir_options_on "Включить"
+#define qtn_ir_options_searchag "Повторить поиÑк"
+#define qtn_ir_options_select "Выбрать"
+#define qtn_ir_options_settings "ÐаÑтройки"
+#define qtn_ir_options_station "СтанциÑ"
+#define qtn_ir_options_stereowidening "РаÑширение Ñтерео"
+#define qtn_ir_options_unmark "СнÑÑ‚ÑŒ отметку"
+#define qtn_ir_options_unmarkall "СнÑÑ‚ÑŒ вÑе отметки"
+#define qtn_ir_playfail_err "Сбой воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ€Ð°Ð´Ð¸Ð¾"
+#define qtn_ir_playlist_title "Получ. ÑÑылки"
+#define qtn_ir_popup_no_results "Ðе найдено результатов"
+#define qtn_ir_popup_toomany_results "Слишком много результатов. Уточните критерии поиÑка."
+#define qtn_ir_results_none "Ðе найдено ÑоответÑтвующих Ñтанций. Повторите попытку."
+#define qtn_ir_search_result "%0U[09]:%1N результ."
+#define qtn_ir_search_results "%0U[08]:%1N результ."
+#define qtn_ir_set_folder_internetradio "Интернет-радио"
+#define qtn_ir_set_folder_irradio "Интернет-радио"
+#define qtn_ir_settings_3g "СкороÑÑ‚ÑŒ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ 3G"
+#define qtn_ir_settings_connec_softkey_ok "ОК"
+#define qtn_ir_settings_gprs "СкороÑÑ‚ÑŒ Ñоедин. GPRS"
+#define qtn_ir_settings_network "Подключение к Ñети"
+#define qtn_ir_settings_snap_default "Соедин. по умолч."
+#define qtn_ir_settings_title "ÐаÑтройки"
+#define qtn_ir_settings_wifi "СкороÑÑ‚ÑŒ Ñоедин. Wi-Fi"
+#define qtn_ir_softkey_back "Ðазад"
+#define qtn_ir_softkey_cancel "Отменить"
+#define qtn_ir_softkey_done "Готово"
+#define qtn_ir_softkey_no "Ðет"
+#define qtn_ir_softkey_options "Функции"
+#define qtn_ir_softkey_select "Выбрать"
+#define qtn_ir_softkey_yes "Да"
+#define qtn_ir_station_saved "Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ Ñохранена"
+#define qtn_ir_stationlist_nomatches "(нет Ñовпадений)"
+#define qtn_ir_stations_popup_delete "Удалить\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Удалить Ñтанции (%N)?"
+#define qtn_ir_stations_popup_removed "Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ %U[71] удалена"
+#define qtn_ir_stations_popup_removed_many "Удалено Ñтанций: %N"
+#define qtn_ir_stations_popup_save "Сохранить Ñтанцию в папке \"Избранное\"?"
+#define qtn_ir_suboptions_delete "Удалить"
+#define qtn_ir_suboptions_details "СведениÑ"
+#define qtn_ir_suboptions_move "ПеремеÑтить"
+#define qtn_ir_terms_details "ÐŸÑ€Ð¸Ð½Ð¸Ð¼Ð°Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ðµ ниже уÑловиÑ, вы заключаете Ñоглашение в Ñтепени, допуÑкаемой применимым законодательÑтвом, без дополнительных ограничений или запретов, каÑающихÑÑ Ð²Ñех материальных прав"
+#define qtn_ir_terms_heading "УÑловиÑ"
+#define qtn_ir_terms_softkey_accept "ПринÑÑ‚ÑŒ"
+#define qtn_ir_terms_softkey_decline "Отклонить"
+#define qtn_ir_title_history "Журнал"
+#define qtn_ir_tooltip_addalltofav "Доб. вÑе в избранное"
+#define qtn_ir_tooltip_addstation "Доб. Ñтанц. вручную"
+#define qtn_ir_tooltip_addtofav "Добав. в избранное"
+#define qtn_ir_tooltip_copy "Копировать"
+#define qtn_ir_tooltip_findnstore "Ðайти в Муз. магазине"
+#define qtn_ir_tooltip_findst "ПоиÑк Ñтанций"
+#define qtn_ir_tooltip_history "Журнал"
+#define qtn_ir_tooltip_listen "Слушать"
+#define qtn_ir_tooltip_paste "Ð’Ñтавить"
+#define qtn_ir_tooltip_stationde "Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñтанции"
+#define qtn_ir_top_title "Лучшие Ñтанц."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Ðазвание"
+#define qtn_ir_url_title "Добавл. Ñтанц."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/16/internetradioai_16.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Интернет-радио">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/16/terms_16.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>УÑлуга Интернет-радио Nokia (“УÑлугаâ€) позволÑет узнать об Интернет-радиоÑтанциÑÑ… и ознакомитьÑÑ Ñ Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ñ‹Ð¼ ими Ñодержимым. ÐÐСТОЯЩИМ ВЫ ПОДТВЕРЖДÐЕТЕ СВОЕ СОГЛÐСИЕ С ТЕМ, ЧТО ПОЛЬЗОВÐÐИЕ ДÐÐÐОЙ УСЛУГОЙ ОЗÐÐЧÐЕТ, ЧТО ВЫ ОЗÐÐКОМИЛИСЬ С ÐÐСТОЯЩИМ СОГЛÐШЕÐИЕМ, Ð’ÐИКЛИ Ð’ ЕГО СУТЬ И ПРИÐИМÐЕТЕ ÐРСЕБЯ ОБЯЗÐТЕЛЬСТВРПО СОБЛЮДЕÐИЮ ЕГО ПОЛОЖЕÐИЙ И УСЛОВИЙ. Ð’ Ñлучае неÑоглаÑÐ¸Ñ Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми и уÑловиÑми данного ÑÐ¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑÑ ÑƒÑлугой запрещаетÑÑ.</p>
+
+<p></p>
+
+<h1>1. ОПРЕДЕЛЕÐИЯ</h1>
+
+<p></p>
+
+<p>Интернет-радиоÑтанции - организации, которые в оÑновном занимаютÑÑ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ñтвом и раÑпроÑтранением потоков аудио-Ñодержимого и ÑопутÑтвующих метаданных в Интернете.</p>
+
+<p></p>
+
+<p>СÑылка на Интернет-радиоÑтанцию - указатель реÑурÑа или набор указателей реÑурÑов, которые позволÑÑŽÑ‚ пользователю получить доÑтуп к потоку Ñодержимого Интернет-радиоÑтанции.</p>
+
+<p></p>
+
+<h1>2. УСЛУГÐ</h1>
+
+<p></p>
+
+<p>УÑлуга предоÑтавлÑет Ñледующие возможноÑти:</p>
+<p>1. ПроÑмотр ÑÑылок на Интернет-радиоÑтанции;</p>
+<p>2. ДоÑтуп к Ñодержимому Интернет-радиоÑтанций.</p>
+
+<p></p>
+
+<h1>3. ПОЛЬЗОВÐÐИЕ УСЛУГОЙ</h1>
+
+<p></p>
+
+<p>ПользоватьÑÑ Ð£Ñлугой разрешаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в чаÑтных некоммерчеÑких целÑÑ…. Nokia владеет вÑеми правами на интеллектуальную ÑобÑтвенноÑÑ‚ÑŒ, вытекающими из Ð¾ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ УÑлуги.</p>
+
+<p></p>
+
+<p>Nokia оÑтавлÑет за Ñобой право вноÑить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñти Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ уÑловиÑ, Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€ÑƒÑ Ð¾ таких изменениÑÑ….</p>
+
+<p></p>
+
+<h1>4. КОÐФИДЕÐЦИÐЛЬÐОСТЬ</h1>
+
+<p></p>
+
+<p>Nokia берет на ÑÐµÐ±Ñ Ð¾Ð±ÑзательÑтво по защите неприкоÑновенноÑти конфиденциальной информации, принадлежащей пользователÑм, путем реализации политики Ñтрогой конфиденциальноÑти.</p>
+
+<p></p>
+
+<p>Ð’ целÑÑ… Ð½Ð°Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ Ð·Ð° пользованием данной УÑлугой и Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ ÐºÐ°Ñ‡ÐµÑтва ее оказаниÑ, ÐºÐ¾Ñ€Ð¿Ð¾Ñ€Ð°Ñ†Ð¸Ñ Nokia может Ñобирать данные о пользовании УÑлугой, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ (но не ограничиваÑÑÑŒ Ñтим) информацию о доÑтупе к Интернет-радиоÑтанциÑм, времени, проведенном на каждой Ñтанции, и объектах, которые были отнеÑены к категории "Избранное".</p>
+
+<p></p>
+
+<p>Nokia обÑзуетÑÑ Ð½Ðµ Ñобирать информацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет идентифицировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð£Ñлуги.</p>
+
+<p></p>
+
+<h1>5. ДОСТУП К УСЛУГЕ</h1>
+
+<p></p>
+
+<p>УÑлуга оказываетÑÑ Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ удобÑтва. Nokia не гарантирует качеÑтво и наличие УÑлуги, а также отÑутÑтвие перебоев и ошибок в процеÑÑе ее оказаниÑ. Nokia оÑтавлÑет за Ñобой право переÑмотреть уÑÐ»Ð¾Ð²Ð¸Ñ Ð¾ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð£Ñлуги и отказать в доÑтупе к ней в любое времÑ.</p>
+
+<p></p>
+
+<p>Nokia может обновлÑÑ‚ÑŒ программные приложениÑ, ÑвÑзанные Ñ Ð¾ÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ УÑлуги, по ÑобÑтвенному уÑмотрению.</p>
+
+<p></p>
+
+<h1>6. ЗÐЯВЛЕÐИЕ ОБ ОГРÐÐИЧЕÐИИ ОТВЕТСТВЕÐÐОСТИ И ОБЯЗÐÐÐОСТИ</h1>
+
+<p></p>
+
+<p>Nokia может размеÑтить ÑÑылки на радиоÑтанции, владельцами или операторами которых ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ñ€ÐµÑ‚ÑŒÐ¸ лица Ñ Ñ†ÐµÐ»ÑŒÑŽ облегчить доÑтуп к ним. Nokia не гарантирует актуальноÑÑ‚ÑŒ ÑÑылок на радиоÑтанции. Кроме того, Nokia не неÑет ответÑтвенноÑÑ‚ÑŒ за Ñодержимое, не имеющее Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ðº Ñтой корпорации, как таковое, а также за продукцию или уÑлуги, на которые ÑÑылаетÑÑ Ð´Ð°Ð½Ð½Ð¾Ðµ Ñодержимое.</p>
+
+<p></p>
+
+<p>Перед тем как получить доÑтуп к радиоÑтанции, Ñледует ознакомитьÑÑ Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð°Ð¼Ð¸ ее иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ (еÑли такие ÑущеÑтвуют) и принÑÑ‚ÑŒ их. ÐаÑтоÑщим Ð’Ñ‹ также подтверждаете Ñвое ÑоглаÑие Ñ Ñ‚ÐµÐ¼, что Nokia не может контролировать Ñодержимое уÑлуг, оказываемых третьими лицами, и не неÑет какую-либо ответÑтвенноÑÑ‚ÑŒ за Ñодержимое, предоÑтавлÑемое Интернет-радиоÑтанциÑми.</p>
+
+<p></p>
+
+<p>ДоÑтуп к Ñодержимому Интернет-радиоÑтанций, возможноÑÑ‚ÑŒ которого предоÑтавлÑет Ð´Ð°Ð½Ð½Ð°Ñ Ð£Ñлуга, может повлечь за Ñобой передачу больших объемов данных через Ñеть вашего поÑтавщика уÑлуг. За информацией о ÑтоимоÑти передачи данных обратитеÑÑŒ к вашему поÑтавщику уÑлуг. Обратите внимание, что иÑпользование УÑлуги Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÐ»ÑƒÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-радиоÑтанций Ñ Ð±Ð¾Ð»ÐµÐµ выÑоким качеÑтвом аудио-Ñигнала, может увеличить Ваши раÑходы из-за ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐ¼Ð¾Ð² принÑÑ‚Ñ‹Ñ… данных.</p>
+
+<p></p>
+
+<p>Передача данных, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ Ð¸Ñпользованием УÑлуги, может ÑкладыватьÑÑ, по крайней мере, из Ñледующих ÑоÑтавлÑющих: обновление Ñодержимого каталога Ñтанции, передача потока данных Интернет-радиоÑтанции, Ñбор ÑтатиÑтичеÑких данных и обновление Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-радио.</p>
+
+<p></p>
+
+<p>Nokia не неÑет ответÑтвенноÑÑ‚ÑŒ за ÑтоимоÑÑ‚ÑŒ передачи данных в результате Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ УÑлугой.</p>
+
+<p></p>
+
+<p>Ð’ ОТÐОШЕÐИИ ДОСТУПÐОСТИ, ДОСТОВЕРÐОСТИ, ÐÐДЕЖÐОСТИ ИЛИ СОДЕРЖИМОГО ДÐÐÐОЙ УСЛУГИ ÐЕ ПРЕДОСТÐВЛЯЮТСЯ ÐИ КÐКИЕ ГÐРÐÐТИИ, ВЫРÐЖЕÐÐЫЕ ЯВÐО ИЛИ КОСВЕÐÐО, ВКЛЮЧÐЯ (ÐО ÐЕ ОГРÐÐИЧИВÐЯСЬ ЭТИМ) ГÐРÐÐТИИ ПРÐВОВОГО ТИТУЛРИЛИ ОТСУТСТВИЯ ÐÐРУШЕÐИЙ ПРÐÐ’ ИÐТЕЛЛЕКТУÐЛЬÐОЙ СОБСТВЕÐÐОСТИ, ИЛИ КОСВЕÐÐЫЕ ГÐРÐÐТИИ ПРИГОДÐОСТИ ДЛЯ ПРОДÐЖИ ИЛИ ИСПОЛЬЗОВÐÐИЯ ПО ÐÐЗÐÐЧЕÐИЮ. NOKIA ÐЕ ÐЕСЕТ ОТВЕТСТВЕÐÐОСТИ ЗРКÐКОЙ-ЛИБО ПРЯМОЙ, КОСВЕÐÐЫЙ ИЛИ СЛУЧÐЙÐЫЙ, ФÐКТИЧЕСКИЙ ИЛИ ПОСЛЕДУЮЩИЙ УЩЕРБ, УБЫТКИ ИЛИ ПЕРЕРЫВ Ð’ КОММЕРЧЕСКОЙ ДЕЯТЕЛЬÐОСТИ, ВЫТЕКÐЮЩИЙ ИЗ ПОЛЬЗОВÐÐИЯ ИЛИ ÐЕВОЗМОЖÐОСТИ ПОЛЬЗОВÐÐИЯ ДÐÐÐОЙ УСЛУГОЙ ДÐЖЕ Ð’ ТОМ СЛУЧÐЕ, КОГДРNOKIA БЫЛРУВЕДОМЛЕÐРО ВОЗМОЖÐОСТИ ВОЗÐИКÐОВЕÐИЯ ТÐКОГО УЩЕРБÐ. ÐЕКОТРЫЕ ЮРИСДИКЦИИ ÐЕ ДОПУСКÐЮТ ОТКÐЗРОТ ОПРЕДЕЛЕÐÐЫХ ГÐРÐÐТИЙ ИЛИ ОГРÐÐИЧЕÐИЙ ОТВЕТСТВЕÐÐОСТИ, И ПОЭТОМУ УКÐЗÐÐÐЫЕ ВЫШЕ ОГРÐÐИЧЕÐИЯ И ИСКЛЮЧЕÐИЯ МОГУТ ÐЕ РÐСПРОСТРÐÐЯТЬСЯ ÐÐ Ð’ÐС. Ð’ ЭТОМ СЛУЧÐЕ ОТВЕТСТВЕÐÐОСТЬ КОРПОРÐЦИИ NOKIA ОГРÐÐИЧИВÐЕТСЯ Ð’ ТОЙ СТЕПЕÐИ, КОТОРÐЯ ДОПУСКÐЕТСЯ ЗÐКОÐОДÐТЕЛЬСТВОМ.</p>
+
+<p></p>
+
+<p>Ðикакие уÑловиÑ, приведенные здеÑÑŒ, не должны ущемлÑÑ‚ÑŒ законные права любого лица, выÑтупающего в роли потребителÑ, либо ограничивать ответÑтвенноÑÑ‚ÑŒ корпорации Nokia в Ñлучае Ñмерти или вреда, причиненного в результате небрежноÑти, допущенной корпорацией Nokia.</p>
+
+<p></p>
+
+<h1>7. ПОЛИТИКРВ ОТÐОШЕÐИИ ИСКОВ О ÐÐРУШЕÐИИ ÐВТОРСКИХ ПРÐÐ’</h1>
+
+<p></p>
+
+<p>ЕÑли вы Ñчитаете, что ваши авторÑкие права были нарушены, вы можете уведомить об Ñтом корпорацию Nokia в пиÑьме, которое должно Ñодержать Ñледующее:</p>
+
+<p></p>
+
+<p>(1) физичеÑкую или Ñлектронную подпиÑÑŒ лица, уполномоченного дейÑтвовать от имени владельца иÑключительного права, которое, как утверждаетÑÑ, было нарушено;</p>
+
+<p></p>
+
+<p>(2) идентификационный код или опиÑание объекта, авторÑкие права на который, как утверждаетÑÑ, были нарушены;</p>
+
+<p></p>
+
+<p>(3) идентификационный код или опиÑание материалов, которые, как утверждаетÑÑ, нарушили авторÑкие права, и ÑведениÑ, позволÑющие уÑтановить меÑтонахождение данных материалов;</p>
+
+<p></p>
+
+<p>(4) Ваше имÑ, адреÑ, номер телефона, Ð°Ð´Ñ€ÐµÑ Ñлектронной почты и любые другие ÑведениÑ, позволÑющие корпорации Nokia ÑвÑзатьÑÑ Ñ Ð²Ð°Ð¼Ð¸;</p>
+
+<p></p>
+
+<p>(5) заÑвление, в котором ÑодержитÑÑ Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ о том, что владелец авторÑких прав, его агент или законодательÑтво не предоÑтавлÑли Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾Ñ‡Ð¸Ñ Ð½Ð° иÑпользование материалов в обжалуемой форме; и</p>
+
+<p></p>
+
+<p>(6) заÑвление, в котором утверждаетÑÑ, что ÑведениÑ, ÑодержащиеÑÑ Ð² уведомлении, ÑвлÑÑŽÑ‚ÑÑ Ð´Ð¾Ñтоверными, и в Ñлучае их недоÑтоверноÑти Ð’Ñ‹ принимаете на ÑÐµÐ±Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑÑ‚ÑŒ за дачу ложных показаний, а также, что Ð’Ñ‹ уполномочены дейÑтвовать от имени владельца иÑключительного права, которое, как утверждаетÑÑ, было нарушено.</p>
+
+<p></p>
+
+<p>Уведомление Ñледует направить агенту, назначенному нами, по адреÑу:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. ПРИМЕÐИМОЕ ЗÐКОÐОДÐТЕЛЬСТВО</h1>
+
+<p></p>
+
+<p>Применительно к данным положениÑм и уÑловиÑм "Nokia" означает "ÐºÐ¾Ñ€Ð¿Ð¾Ñ€Ð°Ñ†Ð¸Ñ Nokia". Nokia обÑлуживавет и контролирует данную УÑлугу Ñ Ñ‚ÐµÑ€Ñ€Ð¸Ñ‚Ð¾Ñ€Ð¸Ð¸ ФинлÑндии. ПоÑтому ÑчитаетÑÑ, что ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± УÑлуге, приведенные здеÑÑŒ, находÑÑ‚ÑÑ Ð¿Ð¾Ð´ юриÑдикцией ФинлÑндии.</p>
+
+<p></p>
+
+<p>© ÐšÐ¾Ñ€Ð¿Ð¾Ñ€Ð°Ñ†Ð¸Ñ Nokia, 2006. Ð’Ñе права защищены.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/160/internetradio_160.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[90] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regions"
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add your station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Intern. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[11]:%1N result"
+#define qtn_ir_search_results "%0U[09]:%1N results"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[89] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/161/internetradio_161.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[90] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regions"
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add your station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Intern. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[11]:%1N result"
+#define qtn_ir_search_results "%0U[09]:%1N results"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[89] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/17/internetradio_17.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Mindig rákérdez"
+#define qtn_ir_active_idle_data "%0U–%1U: %2U"
+#define qtn_ir_added_multi "%N állomás mentve"
+#define qtn_ir_added_single "%U[90] ment."
+#define qtn_ir_addmanually_unnamed "Névtelen"
+#define qtn_ir_addst_description "Leírás"
+#define qtn_ir_addst_streamurl "Letöltési URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internetes rádió"
+#define qtn_ir_ai_radio_not_active "A rádió nincs bekap.-va"
+#define qtn_ir_app_general_err "Belső hiba. Indítsa újra az alkalmazást."
+#define qtn_ir_apps_grid "Intern. rádió"
+#define qtn_ir_apps_list "Internetes rádió"
+#define qtn_ir_apps_skey "Internetes rádió"
+#define qtn_ir_apps_standby "Internetes rádió"
+#define qtn_ir_apps_swins "Internetes rádió"
+#define qtn_ir_apps_wheel "Internetes rádió"
+#define qtn_ir_bitrate_best "Legjobb minőség"
+#define qtn_ir_bitrate_high "Kiváló minőség"
+#define qtn_ir_bitrate_standard "Normál minőség"
+#define qtn_ir_cost_heading "Fontos figyelmeztetés"
+#define qtn_ir_cost_softkey_continue "Folytat"
+#define qtn_ir_cost_softkey_exit "Kilép"
+#define qtn_ir_cost_title "Internetes rádió"
+#define qtn_ir_cost_warning "Az internetes rádió a telefon adatkapcsolatát használja a rádióadások átviteléhez. Ezért ennek használata csak akkor javasolt, ha kedvező előfizetési csomagja van. Ha nem ismeri az átviteli díjakat, mielőtt folytatja, kérjen tájékoztatást a szolgáltatótól."
+#define qtn_ir_country_list_expanded "%N állomás"
+#define qtn_ir_countryregion_title "Ország/térség"
+#define qtn_ir_discover_beststations "Legjobb állomások gyűjtem."
+#define qtn_ir_discover_country_region "Böng. orsz./térs. szerint"
+#define qtn_ir_discover_genre "Böngészés műfaj szerint"
+#define qtn_ir_discover_genre_expanded "Ãllomások műfaj szerint"
+#define qtn_ir_discover_langauge "Böngészés nyelv szerint"
+#define qtn_ir_discover_language_expanded "Ãllomások nyelv szerint"
+#define qtn_ir_discover_staticountryreg "Ãllomások orsz./térs. szerint"
+#define qtn_ir_discover_title "Ãllomástár"
+#define qtn_ir_discover_top "Népszerű állomások"
+#define qtn_ir_edit_title "Ãllomás szerk."
+#define qtn_ir_err_operation "Hiba a műveletben. Próbálja újra."
+#define qtn_ir_err_url_unavail "Nincs URL"
+#define qtn_ir_error_address "Az internetes rádió állomáscíme érvénytelen"
+#define qtn_ir_error_connection "A kapcsolat időtúllépése. Próbálja újra."
+#define qtn_ir_error_favourites "Nincs elég hely a kedvenceknél a kiválasztott elem mentéséhez"
+#define qtn_ir_error_general "Nem sikerült az állomáshoz csatlakozni"
+#define qtn_ir_error_isds_unavailable "Az internetes állomástár szolgáltatás jelenleg nem érhető el"
+#define qtn_ir_error_notavailable "Nincs streaminghivatkozás"
+#define qtn_ir_error_notinisds "Az elem már nem érhető el"
+#define qtn_ir_error_search "Ãrjon be keresÅ‘szót"
+#define qtn_ir_findst_addstation "Ãllomás h.adása kézzel"
+#define qtn_ir_findst_addtofav "Ãllom. h.adása kedvencekhez"
+#define qtn_ir_findst_browsesds "Ãllomástár böngészése"
+#define qtn_ir_findst_search_ensrhterm "Ãrjon be keresÅ‘szót"
+#define qtn_ir_findst_softkey_search "Keres"
+#define qtn_ir_findstation_title "Ãllom. keresése"
+#define qtn_ir_firstuse_title "Int. rádió: Üdvözöljük"
+#define qtn_ir_genre_list_expanded "%N állomás"
+#define qtn_ir_genre_title "Műfajok"
+#define qtn_ir_history_artist_song "%0U–%1U"
+#define qtn_ir_history_no_history "Nincs előzmény"
+#define qtn_ir_homescreen_buffering "Betöltés"
+#define qtn_ir_homescreen_lastplayed "Legutoljára játszott"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Ország/térség:"
+#define qtn_ir_info_details_description "Leírás:"
+#define qtn_ir_info_details_genre "Műfaj(ok):"
+#define qtn_ir_info_details_language "Nyelv:"
+#define qtn_ir_info_details_name "Név:"
+#define qtn_ir_info_details_streams "Adatfolyamok:"
+#define qtn_ir_info_details_title "Ãllomásadatok"
+#define qtn_ir_info_details_type "Típus:"
+#define qtn_ir_info_details_type_isds "Ãllom.tár"
+#define qtn_ir_info_details_type_manual "Felhasz.-i"
+#define qtn_ir_info_details_unnamed "Névtelen"
+#define qtn_ir_info_softkey_close "Bezár"
+#define qtn_ir_language_list_expanded "%N állomás"
+#define qtn_ir_language_title "Nyelvek"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Betöltés"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Keresés"
+#define qtn_ir_main_descriptive_text "Ãll. h.adása: az eszköztár „Ãllomás keres.†ikonja"
+#define qtn_ir_main_discover_expanded "Új rádióállomások keresése"
+#define qtn_ir_main_last "Legut. játszott"
+#define qtn_ir_main_now "Most játszott"
+#define qtn_ir_main_prog_deleting "%N törlése folyamatban"
+#define qtn_ir_main_searchindir "Keresés az állomástárban"
+#define qtn_ir_main_title "Internetes rádió"
+#define qtn_ir_main_unnamed_station "Névtelen állom."
+#define qtn_ir_memlo_ram_out_of_mem "A művelet végre­hajtásához nincs elég memória. Előbb töröljön adatokat."
+#define qtn_ir_now_artist_song "%0U–%1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Következő állomás"
+#define qtn_ir_now_tooltip_play "Lejátszás"
+#define qtn_ir_now_tooltip_previous "Előző állomás"
+#define qtn_ir_now_tooltip_stop "Leállítás"
+#define qtn_ir_now_wait_buffering "Betöltés folyamatban"
+#define qtn_ir_now_wait_buffering_perc "Pufferelés: %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Nincs hálózati kapcsolat"
+#define qtn_ir_nwcontroller_err_nosnaps "Nincs megadva hozzáférési pont"
+#define qtn_ir_options_add "H.adás a kedvencekhez"
+#define qtn_ir_options_add_manually "Ãllomás h.adása kézzel"
+#define qtn_ir_options_change "Módosítás"
+#define qtn_ir_options_clearhistory "Előzmények törlése"
+#define qtn_ir_options_editstation "Ãllomás szerkesztése"
+#define qtn_ir_options_equalizer "Hangszínszabályozó"
+#define qtn_ir_options_exit "Kilépés"
+#define qtn_ir_options_findnmusicstore "Keresés Zeneáruházban"
+#define qtn_ir_options_fmtrans "FM-rádióadó"
+#define qtn_ir_options_gotomusicstore "Ugrás a Zeneáruházba"
+#define qtn_ir_options_help "Súgó"
+#define qtn_ir_options_history "Előzmények"
+#define qtn_ir_options_info "Ãllomásadatok"
+#define qtn_ir_options_mainview "Ugrás a fő nézetbe"
+#define qtn_ir_options_mark "Kijelölés"
+#define qtn_ir_options_markall "Összes kijelölése"
+#define qtn_ir_options_markunmark "Kijelölés/elvetés"
+#define qtn_ir_options_now "Ugrás Most játszott-ra"
+#define qtn_ir_options_off "Ki"
+#define qtn_ir_options_on "Be"
+#define qtn_ir_options_searchag "Keresés újból"
+#define qtn_ir_options_select "Kiválasztás"
+#define qtn_ir_options_settings "Beállítások"
+#define qtn_ir_options_station "Ãllomás"
+#define qtn_ir_options_stereowidening "Széles sztereó"
+#define qtn_ir_options_unmark "Kijelölés megszüntet."
+#define qtn_ir_options_unmarkall "Kijelölés megszüntet."
+#define qtn_ir_playfail_err "A rádióállomásról nem sikerült lejátszani"
+#define qtn_ir_playlist_title "Fogadott hiv.-ok"
+#define qtn_ir_popup_no_results "Nincs találat"
+#define qtn_ir_popup_toomany_results "Túl sok találat. Szűkítse a keresési feltételeket"
+#define qtn_ir_results_none "Nem található a keresett állomás. Próbálja meg újra."
+#define qtn_ir_search_result "%0U[11]:%1N találat"
+#define qtn_ir_search_results "%0U[10]:%1N találat"
+#define qtn_ir_set_folder_internetradio "Internetes rádió"
+#define qtn_ir_set_folder_irradio "Internetes rádió"
+#define qtn_ir_settings_3g "3G-kapcsolat bitrátája"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS-kapcsolat bitrátája"
+#define qtn_ir_settings_network "Hálózati kapcsolat"
+#define qtn_ir_settings_snap_default "Alapértelm. kapcsolat"
+#define qtn_ir_settings_title "Beállítások"
+#define qtn_ir_settings_wifi "WiFi-kapcsolat bitrátája"
+#define qtn_ir_softkey_back "Vissza"
+#define qtn_ir_softkey_cancel "Mégse"
+#define qtn_ir_softkey_done "Kész"
+#define qtn_ir_softkey_no "Nem"
+#define qtn_ir_softkey_options "Opciók"
+#define qtn_ir_softkey_select "Kiválasztás"
+#define qtn_ir_softkey_yes "Igen"
+#define qtn_ir_station_saved "Ãllomás mentve"
+#define qtn_ir_stationlist_nomatches "(nincs találat)"
+#define qtn_ir_stations_popup_delete "Törli ezt:\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Töröl %N állomást?"
+#define qtn_ir_stations_popup_removed "%U[89] törölve"
+#define qtn_ir_stations_popup_removed_many "%N állomás kiválasztva"
+#define qtn_ir_stations_popup_save "Menti az állomást a kedvencekhez?"
+#define qtn_ir_suboptions_delete "Törlés"
+#define qtn_ir_suboptions_details "Adatok"
+#define qtn_ir_suboptions_move "Ãthelyezés"
+#define qtn_ir_terms_details "Az alábbi Használati feltételek elfogadásával Ön szerződő féllé válik a vonatkozó törvény által engedélyezett mértékben, és az összes anyagi jogot tekintve bármilyen egyéb további korlátozás vagy tiltás nélkül"
+#define qtn_ir_terms_heading "Használati feltételek"
+#define qtn_ir_terms_softkey_accept "Elfogad"
+#define qtn_ir_terms_softkey_decline "Elutasít"
+#define qtn_ir_title_history "Előzmények"
+#define qtn_ir_tooltip_addalltofav "Összes h.ad. kedv.-hez"
+#define qtn_ir_tooltip_addstation "Ãllom. h.adása kézzel"
+#define qtn_ir_tooltip_addtofav "Hozzáadás a kedv.-hez"
+#define qtn_ir_tooltip_copy "Másolás"
+#define qtn_ir_tooltip_findnstore "Keres. Zeneáruházban"
+#define qtn_ir_tooltip_findst "Ãllomások keresése"
+#define qtn_ir_tooltip_history "Előzmények"
+#define qtn_ir_tooltip_listen "Meghallgatás"
+#define qtn_ir_tooltip_paste "Beillesztés"
+#define qtn_ir_tooltip_stationde "Ãllomás adatai"
+#define qtn_ir_top_title "Népszerű áll.-ok"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Név"
+#define qtn_ir_url_title "Ãllom. hozzáad."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/17/internetradioai_17.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internetes rádió">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/17/terms_17.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>A Nokia internetes rádiószolgáltatása (“Szolgáltatásâ€) lehetÅ‘vé teszi az internetes rádióállomások felfedezését és használatát. A SZOLGÃLTATÃS HASZNÃLATÃVAL ÖN ELISMERI, HOGY ELOLVASTA EZT A SZERZÅDÉST, MEGÉRTETTE AZ, VALAMINT ELFOGADJA ANNAK FELTÉTELEIT. Ha nem fogadja el, akkor nem jogosult a Szolgáltatás használatára.</p>
+
+<p></p>
+
+<h1>1. MEGHATÃROZÃSOK</h1>
+
+<p></p>
+
+<p>Az internetes rádióállomások olyan entitások, amelyek általában audiotartalmat, valamint kapcsolódó metaadatokat állítanak elő és terjesztenek az interneten, adatfolyamok formájában.</p>
+
+<p></p>
+
+<p>Az internetes rádióra mutató hivatkozás egy olyan erőforrás-leíró vagy erőforrás-leírók csoportja, amelyek lehetővé teszik a felhasználó számára, hogy hozzáférjen az internetes rádióállomás által szolgáltatott adatfolyamhoz.</p>
+
+<p></p>
+
+<h1>2. A SZOLGÃLTATÃS</h1>
+
+<p></p>
+
+<p>A Szolgáltatás a következőket teszi lehetővé:</p>
+<p>1. az internetes rádióállomások hivatkozásainak böngészését,</p>
+<p>2. az internetes rádióállomások tartalmához való hozzáférést.</p>
+
+<p></p>
+
+<h1>3. A SZOLGÃLTATÃS HASZNÃLATA</h1>
+
+<p></p>
+
+<p>A Szolgáltatás csak saját és nem üzleti célú felhasználása engedélyezett. A Nokia rendelkezik a Szolgáltatással kapcsolatos minden szellemi tulajdonjoggal.</p>
+
+<p></p>
+
+<p>A Nokia fenntartja a jogot a feltételek felhasználó értesítése melletti módosítására.</p>
+
+<p></p>
+
+<h1>4. SZEMÉLYES ADATOK VÉDELME</h1>
+
+<p></p>
+
+<p>A Nokia elkötelezte magát a felhasználók személyes adatainak megvédése mellett, hatékony adatkezelési előírások alkalmazásával.</p>
+
+<p></p>
+
+<p>A Szolgáltatás használatának megfigyeléséhez és hatékonyságának növeléséhez a Nokia adatokat gyűjthet, beleértve, de nem korlátozva a használt internetes rádióállomásokra vonatkozó információkra, az egyes állomásokon töltött időre és a kedvencekként besorolt elemekre.</p>
+
+<p></p>
+
+<p>A Nokia nem gyűjt olyan információkat, amelyek lehetővé teszik a Szolgáltatást használó felhasználó azonosítását.</p>
+
+<p></p>
+
+<h1>5. A SZOLGÃLTATÃS ELÉRHETÅSÉGE</h1>
+
+<p></p>
+
+<p>A Szolgáltatás az Ön szórakozásának célját szolgálja. A Szolgáltatás „jelen állapotában†és „jelen elérhetőséggel†vehető igénybe. A Nokia nem garantálja a Szolgáltatás szünetmentességét, sem hibamentességét. A Nokia fenntartja a jogot, hogy bármikor átdolgozza a Szolgáltatást, vagy visszavonja annak elérhetőségét.</p>
+
+<p></p>
+
+<p>A Nokia saját belátása szerint frissítéseket nyújthat a Szolgáltatáshoz kapcsolódó szoftverekhez.</p>
+
+<p></p>
+
+<h1>6. NYILATKOZAT A FELELÅSSÉGRÅL</h1>
+
+<p></p>
+
+<p>A könnyű hozzáférhetőség érdekében a Nokia hozzáadhat harmadik fél által birtokolt vagy működtetett internetes rádióállomásokra mutató hivatkozásokat. A Nokia nem garantálja, hogy az internetes rádióállomásokra mutató hivatkozások működnek. Ezenfelül a Nokiához nem köthető tartalom nem jelenti azt, hogy a Nokia támogatja ez ilyen tartalom használatát, sem az ilyen tartalom által hivatkozott termékeket vagy szolgáltatásokat.</p>
+
+<p></p>
+
+<p>Az egyes állomások használata előtt el kell fogadnia azok használatra vonatkozó szerződését, amennyiben létezik ilyen. Ön azt is elfogadja, hogy a Nokia nincs befolyással a harmadik fél szolgáltatásainak tartalmára, és nem vállal felelősséget az internetes rádióállomások által nyújtott tartalommal kapcsolatban.</p>
+
+<p></p>
+
+<p>Az internetes rádióállomások tartalmához a Szolgáltatás használatával történő hozzáférés nagymennyiségű adat átvitelével jár a szolgáltató hálózatában. Az adatátviteli díjakkal kapcsolatban lépjen kapcsolatba a szolgáltatóval. Megjegyzés: a Szolgáltatás internetes rádióállomásokkal történő használata magasabb bitrátájú adatfolyamok használatát jelenti, és mint ilyen, magasabb adatforgalmi költségekkel járhat.</p>
+
+<p></p>
+
+<p>A Szolgáltatás használatához kapcsolódó adatforgalom legalább a következőket foglalhatja magába: az állomástár tartalmának frissítése, az internetes rádióállomásról származó folyamatos adatletöltés, statisztikai adatok gyűjtése és az internetesrádió-alkalmazás frissítése.</p>
+
+<p></p>
+
+<p>A Nokia nem felelős a Szolgáltatás használatához kapcsolódó adatforgalom költségeiért.</p>
+
+<p></p>
+
+<p>A NOKIA SEMMIFÉLE KIFEJEZETT VAGY VÉLELMEZETT GARANCIÃT NEM VÃLLAL A SZOLGÃLTATÃS ELÉRHETÅSÉGÉVEL, PONTOSSÃGÃVAL, MEGBÃZHATÓSÃGÃVAL VAGY TARTALMÃVAL KAPCSOLATBAN, BELEÉRTVE, DE NEM KIZÃRÓLAGOSAN A JOGSZAVATOSSÃGRA VAGY JOGTISZTASÃG SZAVATOLÃSÃRA VONATKOZÓ GARANCIÃT, VALAMINT AZ ÉRTÉKESÃTHETÅSÉGRE VAGY EGY ADOTT CÉLRA VALÓ ALKALMASSÃGRA VONATKOZÓ VÉLELMEZETT GARANCIÃT. A NOKIA NEM TEHETÅ FELELÅSSÉ A SZOLGÃLTATÃS HASZNÃLATÃBÓL VAGY ANNAK NEM MÅ°KÖDÉSÉBÅL SZÃRMAZÓ KÖZVETLEN, KÖZVETETT, VÉLETLEN, KÃœLÖNLEGES VAGY KÖVETKEZMÉNYI KÃRÉRT, BEVÉTELKIESÉSÉRT VAGY AZ ÃœZLETMENET MEGSZAKADÃSÃÉRT MÉG AKKOR SEM, HA A NOKIA ÉRTESÃœLT AZ ILYEN KÃROK LEHETÅSÉGÉRÅL. NÉHÃNY JOGRENDSZER NEM TESZI LEHETÅVÉ ADOTT GARANCIÃK VAGY FELELÅSSÉGVÃLLALÃSOK KORLÃTOZÃSÃT, EZÉRT ELÅFORDULHAT, HOGY A FENT EMLÃTETT KORLÃTOZÃSOK VAGY KIZÃRÃSOK NEM VONATKOZNAK ÖNRE. AZ ILYEN ESETEKBEN A NOKIA FELELÅSSÉGE A JOGSZABÃLYOK ÃLTAL MEGENGEDETT LEGNAGYOBB MÉRTÉKBEN KORLÃTOZÓDIK.</p>
+
+<p></p>
+
+<p>Az itt foglaltak semelyike nem korlátozhatja az ügyfélként szereplő egyik fél törvényes jogait sem. Az itt foglaltak egyike sem korlátozza a Nokia felelősségét a Nokia gondatlanságából eredő haláleset vagy személyi sérülés esetén.</p>
+
+<p></p>
+
+<h1>7. A SZERZÅI JOGOK MEGSÉRTÉSÉRE VONATKOZÓ IRÃNYELVEK</h1>
+
+<p></p>
+
+<p>Ha úgy érzi, hogy a szerzői jog által védett tartalom kezelése olyan módon valósul meg, amely sérti a szerzői jogot, akkor erről értesítheti a Nokiát a következő információk elküldésével:</p>
+
+<p></p>
+
+<p>(1) az állítólagosan megsértett szerzői jogot kizárólagosan birtokló személy fizikai vagy elektronikus aláírása;</p>
+
+<p></p>
+
+<p>(2) a szerzői jog által védett mű, amely esetén a jogsértés történt;</p>
+
+<p></p>
+
+<p>(3) a jogsértést megvalósító anyag azonosítása vagy leírása, valamint elegendő információ az anyag helyének megtalálásához;</p>
+
+<p></p>
+
+<p>(4) az Ön neve, címe, telefonszáma, e-mail címe és bármilyen információ, amely lehetővé teszi a Nokia számára, hogy kapcsolatba léphessen Önnel;</p>
+
+<p></p>
+
+<p>(5) nyilatkozat arról, hogy Ön legjobb tudomása szerint az adott anyag bejelentett módon történő használatát nem hagyta jóvá a szerzői jog tulajdonosa, annak ügynöke vagy a törvény; és</p>
+
+<p></p>
+
+<p>(6) nyilatkozat arról, hogy az értesítésben foglalt információk pontosak, valamint büntetőjogi felelőssége tudatában kijelenti, hogy Ön jogosult az állítólagosan megsértett szerzői jog tulajdonosa képviseletében eljárni.</p>
+
+<p></p>
+
+<p>Az értesítés a kijelölt ügynökünknek küldje el, a következő címre:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. VONATKOZÓ JOG</h1>
+
+<p></p>
+
+<p>Ebben a jogi nyilatkozatban a „Nokia†a Nokia Corporationt jelenti. A Nokia a Szolgáltatást Finnországból működteti. Ennek megfelelően az itt közölt, Szolgáltatásról szóló információkat úgy Finnországból származónak kell tekinteni.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Minden jog fenntartva.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/18/internetradio_18.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Altijd vragen"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N zenders opgeslagen"
+#define qtn_ir_added_single "%U[85] opgeslagen"
+#define qtn_ir_addmanually_unnamed "Naamloos"
+#define qtn_ir_addst_description "Beschrijving"
+#define qtn_ir_addst_streamurl "Stream url"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internetradio"
+#define qtn_ir_ai_radio_not_active "Radio niet actief"
+#define qtn_ir_app_general_err "Interne fout. Start de toepassing opnieuw."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internetradio"
+#define qtn_ir_apps_skey "Internetradio"
+#define qtn_ir_apps_standby "Internetradio"
+#define qtn_ir_apps_swins "Internetradio"
+#define qtn_ir_apps_wheel "Internetradio"
+#define qtn_ir_bitrate_best "Beste kwaliteit"
+#define qtn_ir_bitrate_high "Hoge kwaliteit"
+#define qtn_ir_bitrate_standard "Stand.kwaliteit"
+#define qtn_ir_cost_heading "Belangrijke melding"
+#define qtn_ir_cost_softkey_continue "Doorgaan"
+#define qtn_ir_cost_softkey_exit "Afsluiten"
+#define qtn_ir_cost_title "Internetradio"
+#define qtn_ir_cost_warning "Internetradio gebruikt uw telefoonverbinding voor radiouitzendingen. Dit wordt alleen aangeraden als u tegen een vast tarief belt. Als u hier niet zeker van bent, moet u eerst contact opnemen met uw provider."
+#define qtn_ir_country_list_expanded "%N zenders"
+#define qtn_ir_countryregion_title "Landen/regio's"
+#define qtn_ir_discover_beststations "Selectie van beste zenders"
+#define qtn_ir_discover_country_region "Bladeren op land/regio"
+#define qtn_ir_discover_genre "Bladeren op genre"
+#define qtn_ir_discover_genre_expanded "Zenders gesorteerd op genre"
+#define qtn_ir_discover_langauge "Bladeren op taal"
+#define qtn_ir_discover_language_expanded "Zenders gesorteerd op taal"
+#define qtn_ir_discover_staticountryreg "Zenders gesort. op land/regio"
+#define qtn_ir_discover_title "Zenderoverzicht"
+#define qtn_ir_discover_top "Populaire zenders"
+#define qtn_ir_edit_title "Zender bewrkn"
+#define qtn_ir_err_operation "Fout in bewerking. Probeer opnieuw."
+#define qtn_ir_err_url_unavail "URL niet beschikbaar"
+#define qtn_ir_error_address "Onjuist zenderadres"
+#define qtn_ir_error_connection "Time-out voor verb. Probeer het opnieuw."
+#define qtn_ir_error_favourites "Te weinig ruimte in Favorieten om zender op te slaan"
+#define qtn_ir_error_general "Kan geen verbinding maken met zender"
+#define qtn_ir_error_isds_unavailable "Service voor zenderoverzicht niet beschikbaar"
+#define qtn_ir_error_notavailable "Geen streaming links beschikbaar"
+#define qtn_ir_error_notinisds "Item niet meer beschikbaar"
+#define qtn_ir_error_search "Voer een zoekterm in"
+#define qtn_ir_findst_addstation "Zender handm. toev."
+#define qtn_ir_findst_addtofav "Zender aan favorieten toev."
+#define qtn_ir_findst_browsesds "In zenders bladeren"
+#define qtn_ir_findst_search_ensrhterm "Voer een zoekterm in"
+#define qtn_ir_findst_softkey_search "Zoeken"
+#define qtn_ir_findstation_title "Zenders zoeken"
+#define qtn_ir_firstuse_title "Internetradio: welkom"
+#define qtn_ir_genre_list_expanded "%N zenders"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Geen geschiedenis"
+#define qtn_ir_homescreen_buffering "In buffer plaatsen"
+#define qtn_ir_homescreen_lastplayed "Laatst gespeeld"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Land/regio:"
+#define qtn_ir_info_details_description "Beschrijving:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Taal:"
+#define qtn_ir_info_details_name "Naam:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Zenderinfo"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Zenders"
+#define qtn_ir_info_details_type_manual "Zelf toeg."
+#define qtn_ir_info_details_unnamed "Naamls."
+#define qtn_ir_info_softkey_close "Sluiten"
+#define qtn_ir_language_list_expanded "%N zenders"
+#define qtn_ir_language_title "Talen"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Wordt geladen"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Zoeken"
+#define qtn_ir_main_descriptive_text "Voeg zenders toe met Zenders zoeken"
+#define qtn_ir_main_discover_expanded "Ontdek nieuwe radiozenders"
+#define qtn_ir_main_last "Laatst gespeeld"
+#define qtn_ir_main_now "Afspelen"
+#define qtn_ir_main_prog_deleting "%N verwijderen"
+#define qtn_ir_main_searchindir "Zoeken in overzicht"
+#define qtn_ir_main_title "Internetradio"
+#define qtn_ir_main_unnamed_station "Naaml. zender"
+#define qtn_ir_memlo_ram_out_of_mem "Onvoldoende geheugen voor bewerking. Wis eerst enkele gegevens."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Volgende zender"
+#define qtn_ir_now_tooltip_play "Afspelen"
+#define qtn_ir_now_tooltip_previous "Vorige zender"
+#define qtn_ir_now_tooltip_stop "Stoppen"
+#define qtn_ir_now_wait_buffering "In buffer plaatsen"
+#define qtn_ir_now_wait_buffering_perc "%N% bufferen"
+#define qtn_ir_nwcontroller_err_noconnectivity "Geen netwerkverbinding"
+#define qtn_ir_nwcontroller_err_nosnaps "Geen access-point gedefinieerd"
+#define qtn_ir_options_add "Toev. aan Favorieten"
+#define qtn_ir_options_add_manually "Zender handm. toev."
+#define qtn_ir_options_change "Wijzigen"
+#define qtn_ir_options_clearhistory "Geschiedenis wissen"
+#define qtn_ir_options_editstation "Zender bewerken"
+#define qtn_ir_options_equalizer "Equalizer"
+#define qtn_ir_options_exit "Afsluiten"
+#define qtn_ir_options_findnmusicstore "Zoeken in Music store"
+#define qtn_ir_options_fmtrans "FM-zender"
+#define qtn_ir_options_gotomusicstore "Ga naar Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "Geschiedenis"
+#define qtn_ir_options_info "Zenderinformatie"
+#define qtn_ir_options_mainview "Ga naar hoofdoverzicht"
+#define qtn_ir_options_mark "Markeren"
+#define qtn_ir_options_markall "Alle markeren"
+#define qtn_ir_options_markunmark "Markeringen aan/uit"
+#define qtn_ir_options_now "Ga naar Afspelen"
+#define qtn_ir_options_off "Uit"
+#define qtn_ir_options_on "Aan"
+#define qtn_ir_options_searchag "Opnieuw zoeken"
+#define qtn_ir_options_select "Selecteren"
+#define qtn_ir_options_settings "Instellingen"
+#define qtn_ir_options_station "Zender"
+#define qtn_ir_options_stereowidening "Stereoverbreding"
+#define qtn_ir_options_unmark "Markering opheffen"
+#define qtn_ir_options_unmarkall "Alle mark. opheffen"
+#define qtn_ir_playfail_err "Afspelen van radio mislukt"
+#define qtn_ir_playlist_title "Ontv. kopp."
+#define qtn_ir_popup_no_results "Geen zoekresultaten"
+#define qtn_ir_popup_toomany_results "Teveel resultaten. Verfijn uw zoekactie."
+#define qtn_ir_results_none "Geen passende zender gevonden. Zoek opnieuw."
+#define qtn_ir_search_result "%0U[09]:%1N resultaat"
+#define qtn_ir_search_results "%0U[09]:%1N resultn"
+#define qtn_ir_set_folder_internetradio "Internetradio"
+#define qtn_ir_set_folder_irradio "Internetradio"
+#define qtn_ir_settings_3g "Bitrate voor 3G-verb."
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Bitrate voor GPRS-verb."
+#define qtn_ir_settings_network "Netwerkverbinding"
+#define qtn_ir_settings_snap_default "Standaardverbinding"
+#define qtn_ir_settings_title "Instellingen"
+#define qtn_ir_settings_wifi "Bitrate voor WiFi-verb."
+#define qtn_ir_softkey_back "Terug"
+#define qtn_ir_softkey_cancel "Annuleren"
+#define qtn_ir_softkey_done "OK"
+#define qtn_ir_softkey_no "Nee"
+#define qtn_ir_softkey_options "Opties"
+#define qtn_ir_softkey_select "Select."
+#define qtn_ir_softkey_yes "Ja"
+#define qtn_ir_station_saved "Zender opgeslagen"
+#define qtn_ir_stationlist_nomatches "(geen items gevonden)"
+#define qtn_ir_stations_popup_delete "%U[84] verwijderen?"
+#define qtn_ir_stations_popup_delete_many "%N zenders verwijderen?"
+#define qtn_ir_stations_popup_removed "%U[86] verwijderd"
+#define qtn_ir_stations_popup_removed_many "%N zenders verwijderd"
+#define qtn_ir_stations_popup_save "Zender opslaan in Favorieten?"
+#define qtn_ir_suboptions_delete "Verwijderen"
+#define qtn_ir_suboptions_details "Gegevens"
+#define qtn_ir_suboptions_move "Verplaatsen"
+#define qtn_ir_terms_details "Door de Voorwaarden te accepteren gaat u een contract aan voor zover dit in overeenstemming is met de geldende wet, zonder verdere beperking of uitsluiting met betrekking tot alle materiële rechten"
+#define qtn_ir_terms_heading "Voorwaarden"
+#define qtn_ir_terms_softkey_accept "Accept."
+#define qtn_ir_terms_softkey_decline "Weigeren"
+#define qtn_ir_title_history "Geschiedenis"
+#define qtn_ir_tooltip_addalltofav "Aan Favorieten toev."
+#define qtn_ir_tooltip_addstation "Zender handm. toev."
+#define qtn_ir_tooltip_addtofav "Aan Favorieten toev."
+#define qtn_ir_tooltip_copy "Kopiëren"
+#define qtn_ir_tooltip_findnstore "Zoeken in Music store"
+#define qtn_ir_tooltip_findst "Zenders zoeken"
+#define qtn_ir_tooltip_history "Geschiedenis"
+#define qtn_ir_tooltip_listen "Luisteren"
+#define qtn_ir_tooltip_paste "Plakken"
+#define qtn_ir_tooltip_stationde "Zenderdetails"
+#define qtn_ir_top_title "Topzenders"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Naam"
+#define qtn_ir_url_title "Zender toev."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/18/internetradioai_18.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internetradio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/18/terms_18.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Met de Nokia Internetradio-service (de “Serviceâ€) kunt u ontdekken en ervaren wat internetradiostations te bieden hebben. DOOR GEBRUIK TE MAKEN VAN DE SERVICE ERKENT U DAT U DEZE OVEREENKOMST HEBT GELEZEN EN BEGREPEN EN DAT U GEBONDEN BENT AAN DE DAARIN OPGENOMEN VOORWAARDEN. Wanneer u hiermee niet instemt, is het u niet toegestaan gebruik te maken van de Service.</p>
+
+<p></p>
+
+<h1>1. DEFINITIES</h1>
+
+<p></p>
+
+<p>Onder Internetradiostations worden bedrijven verstaan die over het algemeen audiocontent en bijbehorende metadata produceren en streamen via het internet.</p>
+
+<p></p>
+
+<p>Onder de link naar het Internetradiostation wordt een radiolocator of een groep radiolocators verstaan waarmee de gebruiker toegang kan krijgen tot de content die door het Internetradiostation wordt uitgezonden.</p>
+
+<p></p>
+
+<h1>2. DE SERVICE</h1>
+
+<p></p>
+
+<p>De Service biedt de volgende mogelijkheden:</p>
+<p>1. links naar Internetradiostations doornemen;</p>
+<p>2. de content van Internetradiostations opvragen;</p>
+
+<p></p>
+
+<h1>3. GEBRUIK VAN DE SERVICE</h1>
+
+<p></p>
+
+<p>De Service mag uitsluitend worden gebruikt voor privé- en niet-commerciële doeleinden. Alle intellectuele eigendomsrechten in en op de Service berusten bij Nokia.</p>
+
+<p></p>
+
+<p>Nokia behoudt zich het recht voor deze voorwaarden middels kennisgeving te wijzigen.</p>
+
+<p></p>
+
+<h1>4. PRIVACY</h1>
+
+<p></p>
+
+<p>Nokia voert een beleid van strikte geheimhouding om de privacy van gebruikers te beschermen.</p>
+
+<p></p>
+
+<p>Om het gebruik van de Service te bewaken en de Service te verbeteren, is het Nokia toegestaan gebruiksgegevens te verzamelen, met inbegrip van, doch niet beperkt tot, informatie over de beluisterde Internetradiostations, de gebruikstijd per station en de als favorieten aangemerkte onderwerpen.</p>
+
+<p></p>
+
+<p>Nokia verzamelt geen gegevens waarmee gebruikers van de Service kunnen worden geïdentificeerd.</p>
+
+<p></p>
+
+<h1>5. BESCHIKBAARHEID VAN DE SERVICE</h1>
+
+<p></p>
+
+<p>De Service wordt geleverd om u van dienst te zijn. De Service wordt in de huidige staat ("as is") en op basis van beschikbaarheid geleverd. Nokia garandeert niet dat de Service ononderbroken of foutloos wordt geleverd. Nokia behoudt zich het recht voor de Service op elk moment te herzien of de toegang ertoe op te heffen.</p>
+
+<p></p>
+
+<p>Nokia is gerechtigd naar eigen goeddunken upgrades voor de aan de Service verbonden softwaretoepassingen te verschaffen.</p>
+
+<p></p>
+
+<h1>6. AFWIJZING VAN VERANTWOORDELIJKHEID EN AANSPRAKELIJKHEID</h1>
+
+<p></p>
+
+<p>Nokia kan voor uw gebruiksgemak links opnemen naar Internetradiostations die eigendom zijn van of worden geëxploiteerd door derden. Nokia garandeert niet dat de links naar Internetradiostations naar behoren werken. Bovendien kan aan de content die geen betrekking heeft op Nokia, op geen enkele wijze worden afgeleid dat Nokia die content als zodanig of de daarin genoemde producten of diensten onderschrijft of goedkeurt.</p>
+
+<p></p>
+
+<p>Alvorens gebruik te maken van een station, dient u de daarop betrekking hebbende gebruiksvoorwaarden, indien aanwezig, te lezen en te accepteren. U aanvaardt ook dat Nokia geen zeggenschap heeft over de content van derden en geen enkele verantwoordelijkheid kan accepteren voor de content die door Internetradiostations wordt geleverd.</p>
+
+<p></p>
+
+<p>Het door middel van de Service toegang verkrijgen tot de content van Internetradiostations kan gepaard gaan met de overdracht van grote hoeveelheden data via het netwerk van uw serviceprovider. Neem contact op met uw serviceprovider voor informatie over kosten van dataoverdracht. We wijzen u erop dat het gebruik van de Service met Internetradiostations die streams met een hogere bitsnelheid naar u zenden, gepaard kan gaan met hogere kosten voor dataverkeer.</p>
+
+<p></p>
+
+<p>Het dataverkeer dat verband houdt met het gebruik van de Service, kan ten minste het volgende omvatten: het updaten van de content van de radiostationsgids, het streamen van data vanaf het Internetradiostation, het verzamelen van statistische gegevens en het upgraden van de internetradiosoftware.</p>
+
+<p></p>
+
+<p>Nokia is niet aansprakelijk voor de kosten van dataverkeer dat verband houdt met uw gebruik van de Service.</p>
+
+<p></p>
+
+<p>TEN AANZIEN VAN DE BESCHIKBAARHEID, JUISTHEID, BETROUWBAARHEID OF INHOUD VAN DE SERVICE WORDT GEEN ENKELE GARANTIE VAN WELKE AARD DAN OOK VERSTREKT, EXPLICIET NOCH IMPLICIET, MET INBEGRIP VAN, DOCH NIET BEPERKT TOT, GARANTIE VAN EIGENDOMSRECHT OF VRIJWARING TEGEN INBREUK OF STILZWIJGENDE GARANTIES VAN VERKOOPBAARHEID OF GESCHIKTHEID VOOR EEN BEPAALD DOEL. NOKIA AANVAARDT GEEN AANSPRAKELIJKHEID VOOR DIRECTE, INDIRECTE, BIJKOMENDE OF BIJZONDERE SCHADE, GEVOLGSCHADE OF WINSTDERVING OF VOOR BEDRIJFSSCHADE ALS GEVOLG VAN HET GEBRUIK VAN DE SERVICE OF HET NIET KUNNEN GEBRUIKEN VAN DE SERVICE, OOK ALS NOKIA IS GEÃNFORMEERD OVER DE MOGELIJKHEID VAN DERGELIJKE SCHADES. IN SOMMIGE RECHTSGEBIEDEN IS UITSLUITING VAN BEPAALDE GARANTIES OF BEPERKING VAN AANSPRAKELIJKHEID NIET TOEGESTAAN, ZODAT DE BOVENGENOEMDE BEPERKINGEN OF UITSLUITINGEN WELLICHT NIET OP U VAN TOEPASSING ZIJN. DE AANSPRAKELIJKHEID VAN NOKIA IS IN DAT GEVAL STRIKT BEPERKT TOT HET MAXIMAAL WETTELIJK TOELAATBARE.</p>
+
+<p></p>
+
+<p>Niets in deze overeenkomst tast de wettelijke rechten aan van enige partij die handelt als consument. Niets in deze overeenkomst beperkt de aansprakelijkheid van Nokia in het geval van overlijden of letsel als gevolg van nalatigheid van Nokia.</p>
+
+<p></p>
+
+<h1>7. BELEID INZAKE BESCHULDIGINGEN VAN INBREUK OP AUTEURSRECHT</h1>
+
+<p></p>
+
+<p>Wanneer u van mening bent dat uw auteursrechtelijk beschermde werk is behandeld op een manier die inbreuk maakt op auteursrechten, kunt u Nokia daarvan op de hoogte stellen middels een kennisgeving die de volgende informatie bevat:</p>
+
+<p></p>
+
+<p>(1) Een schriftelijke of elektronische handtekening van een persoon die bevoegd is te handelen namens de houder van het exclusieve recht waarop inbreuk zou zijn gemaakt;</p>
+
+<p></p>
+
+<p>(2) De identificatie of omschrijving van het auteursrechtelijk beschermde werk waarvan het auteursrecht zou zijn geschonden;</p>
+
+<p></p>
+
+<p>(3) De identificatie of omschrijving van het materiaal dat inbreuk op auteursrecht zou maken en redelijkerwijs voldoende informatie om het materiaal te lokaliseren;</p>
+
+<p></p>
+
+<p>(4) Uw naam, adres, telefoonnummer, e-mailadres en eventuele andere gegevens waardoor Nokia contact met u kan opnemen;</p>
+
+<p></p>
+
+<p>(5) Een verklaring dat u te goeder trouw meent dat het soort gebruik van het materiaal waartegen bezwaar wordt gemaakt niet door de houder van het auteursrecht, diens agent of de wet is toegestaan en</p>
+
+<p></p>
+
+<p>(6) Een verklaring dat de informatie in de kennisgeving juist is en, op straffe van meineed, dat u bevoegd bent te handelen namens de houder van een exclusief recht dat zou zijn geschonden.</p>
+
+<p></p>
+
+<p>De kennisgeving dient te worden gestuurd naar het adres van onze Designated Agent (aangewezen vertegenwoordiger), namelijk:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. GELDEND RECHT</h1>
+
+<p></p>
+
+<p>Onder "Nokia" wordt in deze voorwaarden verstaan Nokia Corporation. Nokia exploiteert en beheert de Service vanuit locaties in Finland. Bijgevolg wordt de hierin vervatte informatie over de Service geacht te zijn verstrekt in Finland.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Alle rechten voorbehouden.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2000b4a2.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+NAME IRNC
+
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.hrh>
+#include <avkon.rh>
+#include <avkon.rsg>
+
+
+RESOURCE RSS_SIGNATURE
+{
+}
+
+RESOURCE DIALOG r_irnc_connecting_dialog
+{
+    flags = EAknWaitNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+    {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = 1;
+            control= AVKON_NOTE 
+                { 
+                layout = EWaitLayout;
+                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+    };
+}
+
+//TODO: localization
+#define qtn_ir_connecting_note   "Connecting to server..."
+
+RESOURCE TBUF r_irapp_connecting_note {buf = qtn_ir_connecting_note;}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2000b4a8.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2000 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:  ?Description
+*
+*/
+
+
+#include <registryinfo.rh>
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x2000B4A8;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = 0x200087E8;
+			implementations = 
+				{
+				//implementation for MP3
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x200087E9;
+					version_no = 1;
+					display_name = "MP3";
+					default_data = "audio/mpeg"; 
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x200087EA; 
+					version_no = 1;
+					display_name = "AAC";
+					default_data = "audio/aac"; 
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x200087EB; 
+					version_no = 1;
+					display_name = "AACplus";
+					default_data = "audio/aacp"; 
+					opaque_data = "";
+					}
+				
+				
+				
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2000b4a9.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2000 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:  ?Description
+*
+*/
+
+
+#include <registryinfo.rh>
+
+RESOURCE REGISTRY_INFO r_registry
+{
+    dll_uid = 0x2000B4A9; // should match name of this file
+    interfaces =
+    {
+        INTERFACE_INFO
+        {
+            interface_uid = 0x101F7D87;  // const for all Data Recognizers
+            implementations =
+            {
+                IMPLEMENTATION_INFO
+                {
+                    implementation_uid = 0x2000B4DE; // unique implementation uid
+                    version_no = 1;
+                    display_name = "IRFileRecognizer";
+                    default_data = "";
+                    opaque_data = "";
+                }
+            };
+        }
+    };
+}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2000b4aa.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2000 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:  Resource definitions for project irpresetplugin
+*
+*/
+
+
+#include <registryinfo.rh>
+
+// ---------------------------------------------------------------------------
+// r_ir_preset_plugin_registry_info
+// Registry info for the preset ECOM plugin.
+// ---------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO r_ir_preset_plugin_registry_info
+    {
+    dll_uid     = 0x2000B4AA;
+    interfaces  =
+        {
+        INTERFACE_INFO
+            {
+            interface_uid   = 0x10281CB6;
+            implementations =
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    //implementation_uid  = 0xA0001D79;
+                    implementation_uid  = 0x10009DC1;
+
+                    version_no          = 1;
+                    display_name        = "Internet Radio Preset Plugin";
+                    default_data        = "";
+                    opaque_data         = "";
+                    }
+                };
+            }
+        };        
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2000b4ab.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+
+//  INCLUDES
+//#include <ecom/RegistryInfo.rh>
+//#include <oem/KAIPluginConst.h>
+
+//#include "VRActiveIdle.hrh"
+
+// RESOURCES
+#include <aicontentpublisheruid.hrh>
+#include <ecom/registryinfo.rh>
+//
+// Resource information for the ECOM DLL.
+//
+RESOURCE REGISTRY_INFO theInfo
+    {
+    dll_uid = 0x2000B4AB;
+
+    interfaces = 
+        {
+        INTERFACE_INFO
+            {
+            // UID of interface that is implemented
+            interface_uid = AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER;
+            implementations = 
+                {
+                // Info for Active Idle Plugin container
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = 0x2000B4A7;
+                    version_no         = 1;
+                    display_name       = "";
+                    default_data       = "";
+                    opaque_data        = "";
+                    }
+                };
+            }
+        };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2000b4ac.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2000 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:  Resource definitions for project Internet Radio RFS plugin
+*
+*/
+
+
+#include <registryinfo.rh>
+
+// ---------------------------------------------------------------------------
+// r_ps_rfs_plugin_registry_info
+// Registry info for the Internet Radio RFS ECOM plugin.
+// ---------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO r_ps_rfs_plugin_registry_info
+    {
+    dll_uid = 0x2000B4AC;
+    interfaces =
+        {
+        INTERFACE_INFO
+            {
+            interface_uid = 0x102073BB;
+            implementations =
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = 0x2000B4DD;
+                    version_no = 1;
+                    display_name = "Internet Radio RFS Plugin";
+                    default_data = "N"; // Normal RFS.
+                    opaque_data = "";
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2001a930.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#include <registryinfo.rh>
+#include "irgeneralsettings.hrh"
+
+/**
+* How to use the resource definition:
+*
+* IMPLEMENTATION_INFO
+*	{
+*	implementation_uid  = <Your implementation UID here>;
+*	version_no          = 1;
+*	display_name        = "<Your plugin name here (just for debugging)>";
+*	default_data        = "<One of the below UIDs your plugin will be part of>";
+*	opaque_data         = "<Position of your plugin in the parent listbox>";
+*	}
+*
+* Plugin position must follow the postition defined in UI specification.
+* Position starts from 0. Use -1 if position is not to be used in sorting.
+*
+*/
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid     = IRGENERAL_SETTINGS_PLUGIN_DLL_UID; // Plugin dll UID 
+	interfaces  = 
+		{
+		INTERFACE_INFO 
+			{
+			interface_uid   = 0x10207236; // UID for CGSPluginInterface - do not change. 0x10207236
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid =  IRGENERAL_SETTINGS_PLUGIN_DLL_UID; // Plugin UID 
+					version_no          = 1;
+					display_name        = "Internet Radio"; // Plugin debug name
+					default_data        = "0x10207239"; // Parent UID ie App Settings
+					opaque_data         = "-1"; // Order number 
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2001a961.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2001 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:  ECom plugin registration resource for IR Music Content Publisher Plugin.
+*
+*/
+
+
+#include "mcppluginuids.hrh"
+#include <ecom/registryinfov2.rh>
+
+#include "irmcpplugin.hrh"
+
+// ---------------------------------------------------------------------------
+// Resource information for the ECOM DLL.
+// ---------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO theInfo
+    {
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+    dll_uid = KIRMCPPluginDllUid;
+
+    interfaces = 
+        {
+        INTERFACE_INFO
+            {
+            // MCP plugin interface
+            interface_uid = KMCPPluginUid;
+
+            implementations = 
+                {
+                // VR MCP Plugin implementation
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = KIRMCPPluginImplementationUid;
+                    version_no         = 1;
+                    display_name       = "IRMCPPlugin";
+                    default_data       = "";
+                    opaque_data        = "";
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/2001a962.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2001 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:  ECom plugin registration resource for IRActionHandler.
+*
+*/
+
+
+#include <ahpluginuids.hrh>
+#include <ecom/registryinfov2.rh>
+
+#include "iractionhandler.hrh"
+
+// ---------------------------------------------------------------------------
+// Resource information for the ECOM DLL.
+// ---------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO theInfo
+    {
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+    dll_uid = KIRActionHandlerDllUid;
+
+    interfaces = 
+        {
+        INTERFACE_INFO
+            {
+            // AH plugin interface
+            interface_uid = KAHPluginInterfaceUid;
+
+            implementations = 
+                {
+                // VR Action handler AH plugin implementation
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = KIRActionHandlerImplementationUid;
+                    version_no         = 1;
+                    display_name       = "IRActionHandlerPlugin";
+                    default_data       = "";
+                    opaque_data        = "";
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/230/internetradio_230.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Always ask"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations saved"
+#define qtn_ir_added_single "%U[90] saved"
+#define qtn_ir_addmanually_unnamed "Unnamed"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Stream URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio not active"
+#define qtn_ir_app_general_err "Internal error. Restart application."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Best quality"
+#define qtn_ir_bitrate_high "High quality"
+#define qtn_ir_bitrate_standard "Standard quality"
+#define qtn_ir_cost_heading "Important notice"
+#define qtn_ir_cost_softkey_continue "Continue"
+#define qtn_ir_cost_softkey_exit "Exit"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Countr./regions"
+#define qtn_ir_discover_beststations "Selection of the best stations"
+#define qtn_ir_discover_country_region "Browse by country/region"
+#define qtn_ir_discover_genre "Browse by genre"
+#define qtn_ir_discover_genre_expanded "Stations sorted by genre"
+#define qtn_ir_discover_langauge "Browse by language"
+#define qtn_ir_discover_language_expanded "Stations sorted by language"
+#define qtn_ir_discover_staticountryreg "Stations sorted by ctry./reg."
+#define qtn_ir_discover_title "Station direct."
+#define qtn_ir_discover_top "Top stations"
+#define qtn_ir_edit_title "Edit station"
+#define qtn_ir_err_operation "Error in operation. Try again."
+#define qtn_ir_err_url_unavail "URL unavailable"
+#define qtn_ir_error_address "Incorrect Internet radio station address"
+#define qtn_ir_error_connection "Connection timed out. Try again."
+#define qtn_ir_error_favourites "Not enough space in favourites to save selection"
+#define qtn_ir_error_general "Unable to connect to station"
+#define qtn_ir_error_isds_unavailable "Internet station directory service temporarily unavailable"
+#define qtn_ir_error_notavailable "No streaming links available"
+#define qtn_ir_error_notinisds "Item no longer available"
+#define qtn_ir_error_search "Enter a search term"
+#define qtn_ir_findst_addstation "Add station manually"
+#define qtn_ir_findst_addtofav "Add your station to favourites"
+#define qtn_ir_findst_browsesds "Browse station directory"
+#define qtn_ir_findst_search_ensrhterm "Enter a search term"
+#define qtn_ir_findst_softkey_search "Search"
+#define qtn_ir_findstation_title "Find stations"
+#define qtn_ir_firstuse_title "Intern. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No history"
+#define qtn_ir_homescreen_buffering "Buffering"
+#define qtn_ir_homescreen_lastplayed "Last played"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Country/Region:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Language:"
+#define qtn_ir_info_details_name "Name:"
+#define qtn_ir_info_details_streams "Streams:"
+#define qtn_ir_info_details_title "Station info"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Stat. dir."
+#define qtn_ir_info_details_type_manual "User-def."
+#define qtn_ir_info_details_unnamed "Unnamed"
+#define qtn_ir_info_softkey_close "Close"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Languages"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Loading"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Searching"
+#define qtn_ir_main_descriptive_text "Use 'Find stations' from toolbar to add stations"
+#define qtn_ir_main_discover_expanded "Discover new radio stations"
+#define qtn_ir_main_last "Last played"
+#define qtn_ir_main_now "Now playing"
+#define qtn_ir_main_prog_deleting "Deleting %N"
+#define qtn_ir_main_searchindir "Search in directory"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Unnamed station"
+#define qtn_ir_memlo_ram_out_of_mem "Not enough memory to perform operation. Delete some data first."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Next station"
+#define qtn_ir_now_tooltip_play "Play"
+#define qtn_ir_now_tooltip_previous "Previous station"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buffering"
+#define qtn_ir_now_wait_buffering_perc "Buffering %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No network connection"
+#define qtn_ir_nwcontroller_err_nosnaps "No access point defined"
+#define qtn_ir_options_add "Add to favourites"
+#define qtn_ir_options_add_manually "Add station manually"
+#define qtn_ir_options_change "Change"
+#define qtn_ir_options_clearhistory "Clear history"
+#define qtn_ir_options_editstation "Edit station"
+#define qtn_ir_options_equalizer "Equaliser"
+#define qtn_ir_options_exit "Exit"
+#define qtn_ir_options_findnmusicstore "Find in Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Go to Music store"
+#define qtn_ir_options_help "Help"
+#define qtn_ir_options_history "History"
+#define qtn_ir_options_info "Station information"
+#define qtn_ir_options_mainview "Go to main view"
+#define qtn_ir_options_mark "Mark"
+#define qtn_ir_options_markall "Mark all"
+#define qtn_ir_options_markunmark "Mark/Unmark"
+#define qtn_ir_options_now "Go to Now playing"
+#define qtn_ir_options_off "Off"
+#define qtn_ir_options_on "On"
+#define qtn_ir_options_searchag "Search again"
+#define qtn_ir_options_select "Select"
+#define qtn_ir_options_settings "Settings"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Unmark"
+#define qtn_ir_options_unmarkall "Unmark all"
+#define qtn_ir_playfail_err "Radio playback failed"
+#define qtn_ir_playlist_title "Received links"
+#define qtn_ir_popup_no_results "No results found"
+#define qtn_ir_popup_toomany_results "Too many results. Refine your search term."
+#define qtn_ir_results_none "No matching stations found. Search again."
+#define qtn_ir_search_result "%0U[11]:%1N result"
+#define qtn_ir_search_results "%0U[09]:%1N results"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "3G connection bitrate"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS connection bitrate"
+#define qtn_ir_settings_network "Network connection"
+#define qtn_ir_settings_snap_default "Default connection"
+#define qtn_ir_settings_title "Settings"
+#define qtn_ir_settings_wifi "Wi-Fi connection bitrate"
+#define qtn_ir_softkey_back "Back"
+#define qtn_ir_softkey_cancel "Cancel"
+#define qtn_ir_softkey_done "Done"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Select"
+#define qtn_ir_softkey_yes "Yes"
+#define qtn_ir_station_saved "Station saved"
+#define qtn_ir_stationlist_nomatches "(no matches)"
+#define qtn_ir_stations_popup_delete "Delete\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Delete %N stations?"
+#define qtn_ir_stations_popup_removed "%U[89] deleted"
+#define qtn_ir_stations_popup_removed_many "%N stations deleted"
+#define qtn_ir_stations_popup_save "Save station to favourites?"
+#define qtn_ir_suboptions_delete "Delete"
+#define qtn_ir_suboptions_details "Details"
+#define qtn_ir_suboptions_move "Move"
+#define qtn_ir_terms_details "By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights"
+#define qtn_ir_terms_heading "Terms and Conditions"
+#define qtn_ir_terms_softkey_accept "Accept"
+#define qtn_ir_terms_softkey_decline "Decline"
+#define qtn_ir_title_history "History"
+#define qtn_ir_tooltip_addalltofav "Add all to favourites"
+#define qtn_ir_tooltip_addstation "Add station manually"
+#define qtn_ir_tooltip_addtofav "Add to favourites"
+#define qtn_ir_tooltip_copy "Copy"
+#define qtn_ir_tooltip_findnstore "Find in Music store"
+#define qtn_ir_tooltip_findst "Find stations"
+#define qtn_ir_tooltip_history "History"
+#define qtn_ir_tooltip_listen "Listen"
+#define qtn_ir_tooltip_paste "Paste"
+#define qtn_ir_tooltip_stationde "Station details"
+#define qtn_ir_top_title "Top stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Name"
+#define qtn_ir_url_title "Add station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/25/internetradio_25.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Vždy se zeptat"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "Stanice byly uloženy (%N)"
+#define qtn_ir_added_single "Stanice %U[68] byla uložena"
+#define qtn_ir_addmanually_unnamed "Bez názvu"
+#define qtn_ir_addst_description "Popis"
+#define qtn_ir_addst_streamurl "Adresa URL streamu"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet. rádio"
+#define qtn_ir_ai_radio_not_active "Rádio není aktivní"
+#define qtn_ir_app_general_err "Vnitřní chyba. Restartujte aplikaci."
+#define qtn_ir_apps_grid "Intern. rádio"
+#define qtn_ir_apps_list "Internet. rádio"
+#define qtn_ir_apps_skey "Internet. rádio"
+#define qtn_ir_apps_standby "Internetové rádio"
+#define qtn_ir_apps_swins "Internetové rádio"
+#define qtn_ir_apps_wheel "Internet. rádio"
+#define qtn_ir_bitrate_best "Nejlepší kvalita"
+#define qtn_ir_bitrate_high "Vysoká kvalita"
+#define qtn_ir_bitrate_standard "Standardní kvalita"
+#define qtn_ir_cost_heading "Důležité upozornění"
+#define qtn_ir_cost_softkey_continue "PokraÄovat"
+#define qtn_ir_cost_softkey_exit "Konec"
+#define qtn_ir_cost_title "Internet. rádio"
+#define qtn_ir_cost_warning "Internetové rádio používá k příjmu rozhlasového vysílání datové pÅ™ipojení telefonu. To je vhodné jen v případÄ›, že máte datový plán s paušálním poplatkem. Pokud si nejste jisti, kolik platíte za pÅ™enos dat, poraÄte se nejprve s operátorem."
+#define qtn_ir_country_list_expanded "Stanice: %N"
+#define qtn_ir_countryregion_title "ZemÄ›/oblasti"
+#define qtn_ir_discover_beststations "Výběr nejlepších stanic"
+#define qtn_ir_discover_country_region "Proch. dle zemÄ›/oblasti"
+#define qtn_ir_discover_genre "Procházet podle žánru"
+#define qtn_ir_discover_genre_expanded "Stanice řazeny podle žánrů"
+#define qtn_ir_discover_langauge "Procházet podle jazyka"
+#define qtn_ir_discover_language_expanded "Stanice řazeny podle jazyka"
+#define qtn_ir_discover_staticountryreg "Stanice řazeny dle země/obl."
+#define qtn_ir_discover_title "Adresář stanic"
+#define qtn_ir_discover_top "Nej stanice"
+#define qtn_ir_edit_title "Upravit stanici"
+#define qtn_ir_err_operation "Provozní chyba. Opakujte akci."
+#define qtn_ir_err_url_unavail "Adresa URL není k dispozici"
+#define qtn_ir_error_address "Nesprávná adresa stanice internetového rádia"
+#define qtn_ir_error_connection "Vypršela prodleva spojení. Opakujte akci."
+#define qtn_ir_error_favourites "Nedostatek místa v oblíbených položkách pro uložení výběru"
+#define qtn_ir_error_general "Ke stanici se nelze připojit"
+#define qtn_ir_error_isds_unavailable "Služba adresáře internetových stanic není doÄasnÄ› k dispozici"
+#define qtn_ir_error_notavailable "Odkazy streamování nejsou k dispozici"
+#define qtn_ir_error_notinisds "Položka již není k dispozici"
+#define qtn_ir_error_search "Zadejte hledaný pojem"
+#define qtn_ir_findst_addstation "PÅ™idat stanici ruÄnÄ›"
+#define qtn_ir_findst_addtofav "Přidat stanici do oblíbených"
+#define qtn_ir_findst_browsesds "Procházet adresář stanic"
+#define qtn_ir_findst_search_ensrhterm "Zadejte hledaný pojem"
+#define qtn_ir_findst_softkey_search "Najít"
+#define qtn_ir_findstation_title "Hledat stanice"
+#define qtn_ir_firstuse_title "Intern. rádio: Vítejte"
+#define qtn_ir_genre_list_expanded "Stanice: %N"
+#define qtn_ir_genre_title "Žánry"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Žádná historie"
+#define qtn_ir_homescreen_buffering "Uklád. do mezipam."
+#define qtn_ir_homescreen_lastplayed "Poslední hraná"
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "ZemÄ›/oblast:"
+#define qtn_ir_info_details_description "Popis:"
+#define qtn_ir_info_details_genre "Žánry:"
+#define qtn_ir_info_details_language "Jazyk:"
+#define qtn_ir_info_details_name "Název:"
+#define qtn_ir_info_details_streams "Streamy:"
+#define qtn_ir_info_details_title "Info o stanici"
+#define qtn_ir_info_details_type "Typ:"
+#define qtn_ir_info_details_type_isds "Adr. stan."
+#define qtn_ir_info_details_type_manual "Def. uživ."
+#define qtn_ir_info_details_unnamed "Bez názvu"
+#define qtn_ir_info_softkey_close "Zavřít"
+#define qtn_ir_language_list_expanded "Stanice: %N"
+#define qtn_ir_language_title "Jazyky"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "NaÄítání"
+#define qtn_ir_loading_percent_sign "%N %"
+#define qtn_ir_loading_searching "Hledání"
+#define qtn_ir_main_descriptive_text "Stanice přidejte možností 'Najít stanice' na panelu"
+#define qtn_ir_main_discover_expanded "Poznávejte nové stanice"
+#define qtn_ir_main_last "Poslední hraná"
+#define qtn_ir_main_now "Přehrávání"
+#define qtn_ir_main_prog_deleting "Odstraňování %N"
+#define qtn_ir_main_searchindir "Hledat v adresáři"
+#define qtn_ir_main_title "Internet. rádio"
+#define qtn_ir_main_unnamed_station "Bez názvu"
+#define qtn_ir_memlo_ram_out_of_mem "Nedostatek paměti k vykonání operace. Nejdříve odstraňte některá data."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N Mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Další stanice"
+#define qtn_ir_now_tooltip_play "Přehrát"
+#define qtn_ir_now_tooltip_previous "Předchozí stanice"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Ukládání do vyrovnávací paměti"
+#define qtn_ir_now_wait_buffering_perc "Ukládání do vyrovnávací paměti %N %"
+#define qtn_ir_nwcontroller_err_noconnectivity "Žádné síťové připojení"
+#define qtn_ir_nwcontroller_err_nosnaps "Není definován žádný přístupový bod"
+#define qtn_ir_options_add "Přidat do oblíbených"
+#define qtn_ir_options_add_manually "PÅ™idat stanici ruÄnÄ›"
+#define qtn_ir_options_change "Změnit"
+#define qtn_ir_options_clearhistory "Smazat historii"
+#define qtn_ir_options_editstation "Upravit stanici"
+#define qtn_ir_options_equalizer "Ekvalizér"
+#define qtn_ir_options_exit "Konec"
+#define qtn_ir_options_findnmusicstore "Najít v Obchodě s hudbou"
+#define qtn_ir_options_fmtrans "VysílaÄ FM"
+#define qtn_ir_options_gotomusicstore "Přejít do Obchodu"
+#define qtn_ir_options_help "Nápověda"
+#define qtn_ir_options_history "Historie"
+#define qtn_ir_options_info "Informace o stanici"
+#define qtn_ir_options_mainview "Přejít do hlav. zobrazení"
+#define qtn_ir_options_mark "OznaÄit"
+#define qtn_ir_options_markall "OznaÄit vÅ¡e"
+#define qtn_ir_options_markunmark "OznaÄit/OdznaÄit"
+#define qtn_ir_options_now "Přejít na Právě hraje"
+#define qtn_ir_options_off "Vypnout"
+#define qtn_ir_options_on "Zapnout"
+#define qtn_ir_options_searchag "Znovu hledat"
+#define qtn_ir_options_select "Zvolit"
+#define qtn_ir_options_settings "Nastavení"
+#define qtn_ir_options_station "Stanice"
+#define qtn_ir_options_stereowidening "Rozšířené stereo"
+#define qtn_ir_options_unmark "ZruÅ¡it oznaÄení"
+#define qtn_ir_options_unmarkall "ZruÅ¡it vÅ¡echna oznaÄ."
+#define qtn_ir_playfail_err "Chyba přehrávání rádia"
+#define qtn_ir_playlist_title "Přijaté odkazy"
+#define qtn_ir_popup_no_results "Žádné výsledky hledání"
+#define qtn_ir_popup_toomany_results "Příliš mnoho výsledků. Upřesněte hledaný pojem."
+#define qtn_ir_results_none "Shodné stanice nenalezeny. Opakujte hledání."
+#define qtn_ir_search_result "%0U[11] - výsl.: %1N"
+#define qtn_ir_search_results "%0U[10] - výsl.: %1N"
+#define qtn_ir_set_folder_internetradio "Internet. rádio"
+#define qtn_ir_set_folder_irradio "Internet. rádio"
+#define qtn_ir_settings_3g "Rychlost spojení 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Rychlost spojení GPRS"
+#define qtn_ir_settings_network "Připojení k síti"
+#define qtn_ir_settings_snap_default "Výchozí připojení"
+#define qtn_ir_settings_title "Nastavení"
+#define qtn_ir_settings_wifi "Rychlost spojení Wi-Fi"
+#define qtn_ir_softkey_back "Zpět"
+#define qtn_ir_softkey_cancel "Zrušit"
+#define qtn_ir_softkey_done "Hotovo"
+#define qtn_ir_softkey_no "Ne"
+#define qtn_ir_softkey_options "Volby"
+#define qtn_ir_softkey_select "Zvolit"
+#define qtn_ir_softkey_yes "Ano"
+#define qtn_ir_station_saved "Stanice byla uložena"
+#define qtn_ir_stationlist_nomatches "(žádné shody)"
+#define qtn_ir_stations_popup_delete "Chcete odstranit stanici\n%U[60]?"
+#define qtn_ir_stations_popup_delete_many "Chcete odstranit stanice (%N)?"
+#define qtn_ir_stations_popup_removed "Stanice %U[65] byla odstraněna"
+#define qtn_ir_stations_popup_removed_many "Stanice byly odstraněny (%N)"
+#define qtn_ir_stations_popup_save "Chcete stanici uložit do oblíbených?"
+#define qtn_ir_suboptions_delete "Odstranit"
+#define qtn_ir_suboptions_details "Detaily"
+#define qtn_ir_suboptions_move "Přesunout"
+#define qtn_ir_terms_details "Souhlasem s níže uvedenými podmínkami uzavíráte smlouvu v rozsahu povoleném platnými zákony, a to bez dalšího omezení Äi zákazu s ohledem na veÅ¡kerá materiální práva"
+#define qtn_ir_terms_heading "Podmínky"
+#define qtn_ir_terms_softkey_accept "Přijmout"
+#define qtn_ir_terms_softkey_decline "Odmítnout"
+#define qtn_ir_title_history "Historie"
+#define qtn_ir_tooltip_addalltofav "Přidat vše do oblíb."
+#define qtn_ir_tooltip_addstation "PÅ™idat stanici ruÄnÄ›"
+#define qtn_ir_tooltip_addtofav "Přidat do oblíbených"
+#define qtn_ir_tooltip_copy "Kopírovat"
+#define qtn_ir_tooltip_findnstore "Najít v Obchodě"
+#define qtn_ir_tooltip_findst "Najít stanice"
+#define qtn_ir_tooltip_history "Historie"
+#define qtn_ir_tooltip_listen "Poslech"
+#define qtn_ir_tooltip_paste "Vložit"
+#define qtn_ir_tooltip_stationde "Podrobnosti o stanici"
+#define qtn_ir_top_title "Nej stanice"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Název"
+#define qtn_ir_url_title "Přidat stanici"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/25/internetradioai_25.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet. rádio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/25/terms_25.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,160 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Služba internetového rádia Nokia („Služba“) vám umožňuje objevovat internetové rozhlasové stanice a užívat si jejich obsahu. SOUHLASÃTE S TÃM, ŽE POUŽÃVÃNÃM TÉTO SLUŽBY POTVRZUJETE, ŽE JSTE ÄŒETLI TUTO SMLOUVU, ROZUMÃTE Jà A ZAVAZUJETE SE K DODRŽOVÃNà JEJÃCH PODMÃNEK. Pokud nesouhlasíte, uvÄ›domte si prosím, že nemáte povolení Službu používat.</p>
+
+<p></p>
+
+<h1>1. DEFINICE</h1>
+
+<p></p>
+
+<p>Internetové rozhlasové stanice jsou právnické osoby, které obecně vyrábějí a šíří zvukový obsah a související data prostřednictvím zvukového datového toku přes síť internet.</p>
+
+<p></p>
+
+<p>Odkaz na internetovou rozhlasovou stanici je adresa nebo sada adres k prostředkům, které uživatelům umožňují přístup k datovému toku vysílaného danou rozhlasovou stanicí.</p>
+
+<p></p>
+
+<h1>2. SLUŽBA</h1>
+
+<p></p>
+
+<p>Služba umožňuje následující:</p>
+<p>1. prohlížení odkazů na internetové rozhlasové stanice</p>
+<p>2. přístup k obsahu internetových rozhlasových stanic</p>
+
+<p></p>
+
+<h1>3. POUŽÃVÃNà SLUŽBY</h1>
+
+<p></p>
+
+<p>Používání služby je dovoleno jen pro vaÅ¡e soukromé a neziskové úÄely. SpoleÄnost Nokia vlastní veÅ¡keré duÅ¡evní vlastnictví ke službÄ› a jejímu používání.</p>
+
+<p></p>
+
+<p>Nokia si vyhrazuje právo změnit tyto podmínky s tím, že o změnách vás bude informovat.</p>
+
+<p></p>
+
+<h1>4. SOUKROMÃ</h1>
+
+<p></p>
+
+<p>Nokia se zavazuje chránit soukromí uživatelů pomocí přísných pravidel utajení.</p>
+
+<p></p>
+
+<p>Aby bylo možné sledovat používání Služby a vylepÅ¡ovat ji, smí Nokia shromažÄovat data uživatelů, například informace o rozhlasových stanicích, které uživatel poslouchal, o dobÄ› přístupu ke každé stanici a o položkách, které oznaÄil jako oblíbené.</p>
+
+<p></p>
+
+<p>Nokia neshromažÄuje žádné informace, které umožňují uživatele Služby identifikovat.</p>
+
+<p></p>
+
+<h1>5. DOSTUPNOST SLUŽBY</h1>
+
+<p></p>
+
+<p>Služba je poskytována k vaÅ¡emu prospÄ›chu. Je poskytována „tak jak je“ a na základÄ› toho „kde je k dispozici“ Nokia nezaruÄuje, že Služba bude nepÅ™eruÅ¡ována a bez chyb. Nokia si vyhrazuje právo kdykoliv Službu upravit nebo k ní odebrat přístup.</p>
+
+<p></p>
+
+<p>Nokia smí poskytovat inovace softwarových aplikací, které se ke Službě vztahují, podle svého výhradního uvážení.</p>
+
+<p></p>
+
+<h1>6. ZŘEKNUTà SE PRÃV A ODPOVÄšDNOST</h1>
+
+<p></p>
+
+<p>Pro vaÅ¡e pohodlí smí Nokia uvádÄ›t odkazy na internetové rozhlasové stanice, které vlastní a řídí tÅ™etí strany. Nokia vÅ¡ak nezaruÄuje, že budou tyto odkazy funkÄní. Dále platí, že obsah, který se nevztahuje k produktům spoleÄnosti Nokia, není automaticky schválen spoleÄností Nokia jako takový, případnÄ› výrobky a služby, na které se v obsahu odkazuje.</p>
+
+<p></p>
+
+<p>PÅ™ed přístupem ke kterékoliv stanici musíte pÅ™eÄíst a odsouhlasit pravidla používání této stanice, jsou-li k dispozici. Také souhlasíte s tím, že Nokia nemá možnost ovlivňovat obsah služeb tÅ™etích stran a nemůže proto pÅ™ebírat žádnou odpovÄ›dnost za obsah poskytovaný internetovými rozhlasovými stanicemi.</p>
+
+<p></p>
+
+<p>Přístup k obsahu internetových rozhlasových stanic pomocí Služby může znamenat nutnost přenášet velké množství dat v síti vašeho poskytovatele služeb. Informujte se u svého poskytovatele služeb o poplatcích za datové přenosy. Uvědomte si, že používání Služby s internetovými rozhlasovými stanicemi, které vysílají datové toky s vyšší přenosovou rychlostí, může znamenat vyšší náklady v souvislosti s poplatky za větší přenos dat.</p>
+
+<p></p>
+
+<p>PÅ™enos dat související s používáním Služby může zahrnovat pÅ™inejmenším následující: aktualizace obsahu adresáře stanice, příjem datového toku ze stanice, shromažÄování statistických dat a inovaci aplikace pro internetové rádio.</p>
+
+<p></p>
+
+<p>Nokia není odpovědná za náklady za datový přenos, které v souvislosti s používáním Služby vzniknou.</p>
+
+<p></p>
+
+<p>VE VZTAHU K DOSTUPNOSTI, PŘESNOSTI, SPOLEHLIVOSTI NEBO OBSAHU TÉTO SLUŽBY SE NEPOSKYTUJà ŽÃDNÉ VYJÃDŘENÉ NEBO IMPLICITNà ZÃRUKY VÄŒETNÄš, NIKOLI VÅ AK POUZE, ZÃRUK NA TITUL, NEPŘESTUPNÃCH NEBO NEVYJÃDŘENÃCH ZÃRUK PRODEJNOSTI A VHODNOSTI PRO DANà ÚČEL. SPOLEÄŒNOST NOKIA NEBUDE ZA ŽÃDNÃCH OKOLNOSTà ODPOVÄšDNA ZA ŽÃDNÉ PŘÃMÉ, NEPŘÃMÉ, NÃHODNÉ NEBO NÃSLEDNÉ Å KODY, ZTRÃTY PŘÃJMÅ® NEBO PŘERUÅ ENà PODNIKÃNà POCHÃZEJÃCà Z POUŽÃVÃNà NEBO NEDOSTUPNOSTI SLUŽBY, I KDYŽ SPOLEÄŒNOST NOKIA NA MOŽNOST TÄšCHTO Å KOD UPOZORNILA. NÄšKTERÉ JURISDIKCE NEUMOŽŇUJà VYLOUÄŒENà NÄšKTERÃCH ZÃRUK NEBO OMEZENà ODPOVÄšDNOSTI, TAKŽE SE VÃS VÃÅ E UVEDENà OMEZENà NEBO OMEZENà NEMUSà TÃKAT. ODPOVÄšDNOST SPOLEÄŒNOSTI NOKIA BUDE V TAKOVÉM PŘÃPADÄš OMEZENA V MAXIMÃLNà MÃŘE POVOLENÉ PŘÃSLUÅ NÃMI PRÃVNÃMI PŘEDPISY.
+</p>
+
+<p></p>
+
+<p>Nic ze zde uvedeného nepoÅ¡kozuje zákonná práva žádné strany jednající jako zákazník. Nic ze zde uvedeného neomezuje odpovÄ›dnost spoleÄnosti Nokia v případÄ› úmrtí nebo poranÄ›ní osob, které je výsledkem nedbalosti spoleÄnosti Nokia.</p>
+
+<p></p>
+
+<h1>7. PRAVIDLA PRO OZNÃMENÃ O PORUÅ ENÃ AUTORSKÃCH PRÃV</h1>
+
+<p></p>
+
+<p>Jste-li pÅ™esvÄ›dÄeni, že s vaší prací chránÄ›nou autorským právem bylo nakládáno způsobem, který znamená poruÅ¡ení vaÅ¡ich autorských práv, můžete na tuto skuteÄnost upozornit spoleÄnost Nokia oznámením, které obsahuje následující:</p>
+
+<p></p>
+
+<p>(1) Fyzický nebo elektronický podpis osoby, která je oprávněná jednat jménem vlastníka výhradních práv, která byla údajně porušena.</p>
+
+<p></p>
+
+<p>(2) Identifikace nebo popis práce chráněné autorským právem, které se tvrzení o porušení autorských práv týká.</p>
+
+<p></p>
+
+<p>(3) Identifikace nebo popis materiálu, který podle tvrzení poruÅ¡uje autorská práva, a informace, která v rozumné míře dostateÄnÄ› umožňuje vyhledání tohoto materiálu.</p>
+
+<p></p>
+
+<p>(4) VaÅ¡e jméno, adresa, telefonní Äíslo, adresa elektronické poÅ¡ty a další informace, pomocí kterých se spoleÄnost Nokia může s vámi spojit.</p>
+
+<p></p>
+
+<p>(5) Prohlášení, že jste v dobré víře pÅ™esvÄ›dÄení, že použití materiálu způsobem, na který si stěžujete, není povoleno vlastníkem práv, jeho zástupcem nebo zákonem.</p>
+
+<p></p>
+
+<p>(6) Prohlášení, že informace v oznámení je pÅ™esná a dále pod hrozbou trestu za kÅ™ivou výpovÄ›Ä, že jste oprávnÄ›ni jednat jménem vlastníka výhradních práv, která byla údajnÄ› poruÅ¡ena.</p>
+
+<p></p>
+
+<p>Oznámení musíte poslat na adresu jmenovaného zástupce:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. ROZHODUJÃCÃ PRÃVO</h1>
+
+<p></p>
+
+<p>Jak je používáno v tÄ›chto podmínkách, „Nokia“ znamená spoleÄnost Nokia Corporation. Nokia působí a řídí Službu ze svých pracoviÅ¡Å¥ ve Finsku. Informace o SlužbÄ› tímto způsobem zde uvedené jsou domnÄ›le poskytnuty pro Finsko.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Všechna práva vyhrazena.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/26/internetradio_26.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Vždy žiadať"
+#define qtn_ir_active_idle_data "%0U – %1U: %2U"
+#define qtn_ir_added_multi "Uložené stanice: %N"
+#define qtn_ir_added_single "%U[91] ulož."
+#define qtn_ir_addmanually_unnamed "Bez názvu"
+#define qtn_ir_addst_description "Popis"
+#define qtn_ir_addst_streamurl "Adresa URL prúdu údajov"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U – %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet. rádio"
+#define qtn_ir_ai_radio_not_active "Rádio nie je aktívne"
+#define qtn_ir_app_general_err "Interná chyba. Znova spustite aplikáciu."
+#define qtn_ir_apps_grid "Internet.rád."
+#define qtn_ir_apps_list "Internet. rádio"
+#define qtn_ir_apps_skey "Internet. rádio"
+#define qtn_ir_apps_standby "Internetové rádio"
+#define qtn_ir_apps_swins "Internetové rádio"
+#define qtn_ir_apps_wheel "Internet. rádio"
+#define qtn_ir_bitrate_best "Najlepšia kvalita"
+#define qtn_ir_bitrate_high "Vysoká kvalita"
+#define qtn_ir_bitrate_standard "Štandardná kvalita"
+#define qtn_ir_cost_heading "Dôležitý oznam"
+#define qtn_ir_cost_softkey_continue "PokraÄuj"
+#define qtn_ir_cost_softkey_exit "UkonÄi"
+#define qtn_ir_cost_title "Internet. rádio"
+#define qtn_ir_cost_warning "Internetové rádio používa na rádiové vysielanie dátové pripojenie vášho telefónu. Tento spôsob sa odporúÄa len v prípade, že máte paušálny plán údajov. Ak si nie ste istí poplatkami za údaje, pred tým, ako budete pokraÄovaÅ¥, sa obráťte na operátora."
+#define qtn_ir_country_list_expanded "PoÄet staníc: %N"
+#define qtn_ir_countryregion_title "Krajiny/regióny"
+#define qtn_ir_discover_beststations "Výber najlepších staníc"
+#define qtn_ir_discover_country_region "Prehliad. podľa kraj./reg."
+#define qtn_ir_discover_genre "Prehliadať podľa žánru"
+#define qtn_ir_discover_genre_expanded "Stanice zorad. podľa žánru"
+#define qtn_ir_discover_langauge "Prehliadať podľa jazyka"
+#define qtn_ir_discover_language_expanded "Stanice zorad. podľa jazyka"
+#define qtn_ir_discover_staticountryreg "Stanice zor. podľa kraj./reg."
+#define qtn_ir_discover_title "Adresár staníc"
+#define qtn_ir_discover_top "Najobľúbenejšie stanice"
+#define qtn_ir_edit_title "Úprava stanice"
+#define qtn_ir_err_operation "PoÄas operácie sa vyskytla chyba. Skúste znova."
+#define qtn_ir_err_url_unavail "Adresa URL nie je k dispozícii"
+#define qtn_ir_error_address "Nesprávna adresa stanice internetového rádia"
+#define qtn_ir_error_connection "Čas pripojenia uplynul. Skúste znova."
+#define qtn_ir_error_favourites "Nedostatok miesta na uloženie výberu v zozname obľúbených položiek"
+#define qtn_ir_error_general "Nemožno sa pripojiť k stanici"
+#define qtn_ir_error_isds_unavailable "Služba adresára internetových staníc nie je doÄasne k dispozícii"
+#define qtn_ir_error_notavailable "Odkazy na prúdy údajov nie sú k dispozícii"
+#define qtn_ir_error_notinisds "Položka viac nie je dostupná"
+#define qtn_ir_error_search "Zadajte hľadaný výraz"
+#define qtn_ir_findst_addstation "Pridať stanice manuálne"
+#define qtn_ir_findst_addtofav "Prid. stanicu medzi Obľúbené"
+#define qtn_ir_findst_browsesds "Prehliad. adresár staníc"
+#define qtn_ir_findst_search_ensrhterm "Zadajte hľadaný výraz"
+#define qtn_ir_findst_softkey_search "Vyhľadať"
+#define qtn_ir_findstation_title "Hľadanie staníc"
+#define qtn_ir_firstuse_title "Internet. rádio. Vitajte"
+#define qtn_ir_genre_list_expanded "PoÄet staníc: %N"
+#define qtn_ir_genre_title "Žánre"
+#define qtn_ir_history_artist_song "%0U – %1U"
+#define qtn_ir_history_no_history "Žiadna história"
+#define qtn_ir_homescreen_buffering "Ukladá do vyr. pam."
+#define qtn_ir_homescreen_lastplayed "Naposledy hraná"
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "Krajina/región:"
+#define qtn_ir_info_details_description "Popis:"
+#define qtn_ir_info_details_genre "Žáner:"
+#define qtn_ir_info_details_language "Jazyk:"
+#define qtn_ir_info_details_name "Názov:"
+#define qtn_ir_info_details_streams "Prúdy údajov:"
+#define qtn_ir_info_details_title "Inf. o stanici"
+#define qtn_ir_info_details_type "Typ:"
+#define qtn_ir_info_details_type_isds "Adr. stan."
+#define qtn_ir_info_details_type_manual "Def. použ."
+#define qtn_ir_info_details_unnamed "Bez náz."
+#define qtn_ir_info_softkey_close "Zavri"
+#define qtn_ir_language_list_expanded "PoÄet staníc: %N"
+#define qtn_ir_language_title "Jazyky"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "NaÄítava sa"
+#define qtn_ir_loading_percent_sign "%N %"
+#define qtn_ir_loading_searching "Vyhľadáva sa"
+#define qtn_ir_main_descriptive_text "Použ. Hľadanie staníc na pan. s nástr. a prid. stan."
+#define qtn_ir_main_discover_expanded "Objavte nové rádiové stanice"
+#define qtn_ir_main_last "Naposledy hraná"
+#define qtn_ir_main_now "Prehráva sa"
+#define qtn_ir_main_prog_deleting "Vymazáva sa: %N"
+#define qtn_ir_main_searchindir "Vyhľadať v adresári"
+#define qtn_ir_main_title "Internet. rádio"
+#define qtn_ir_main_unnamed_station "Stanica bez náz."
+#define qtn_ir_memlo_ram_out_of_mem "Nedostatok pa­mäte na vykonanie operácie. Vymažte najprv nejaké dáta."
+#define qtn_ir_now_artist_song "%0U – %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N MB/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Ďalšia stanica"
+#define qtn_ir_now_tooltip_play "Prehrať"
+#define qtn_ir_now_tooltip_previous "Predošlá stanica"
+#define qtn_ir_now_tooltip_stop "Zastaviť"
+#define qtn_ir_now_wait_buffering "Ukladá sa do vyrovnávacej pamäte"
+#define qtn_ir_now_wait_buffering_perc "NaÄítava sa do vyrovnávacej pamäte: %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Žiadne sieťové pripojenie"
+#define qtn_ir_nwcontroller_err_nosnaps "Nie je definované miesto prístupu"
+#define qtn_ir_options_add "Pridať medzi Obľúbené"
+#define qtn_ir_options_add_manually "Pridať stanicu manuálne"
+#define qtn_ir_options_change "Zmeniť"
+#define qtn_ir_options_clearhistory "Zmazať históriu"
+#define qtn_ir_options_editstation "Upraviť stanicu"
+#define qtn_ir_options_equalizer "Ekvalizér"
+#define qtn_ir_options_exit "UkonÄiÅ¥"
+#define qtn_ir_options_findnmusicstore "Vyhľadať v Hud. obchode"
+#define qtn_ir_options_fmtrans "VysielaÄ FM"
+#define qtn_ir_options_gotomusicstore "ÃsÅ¥ do Hud. obchodu"
+#define qtn_ir_options_help "Pomocník"
+#define qtn_ir_options_history "História"
+#define qtn_ir_options_info "Informácie o stanici"
+#define qtn_ir_options_mainview "ÃsÅ¥ do hlavného okna"
+#define qtn_ir_options_mark "OznaÄiÅ¥"
+#define qtn_ir_options_markall "OznaÄiÅ¥ vÅ¡etky"
+#define qtn_ir_options_markunmark "OznaÄiÅ¥/neoznaÄiÅ¥"
+#define qtn_ir_options_now "Prejsť do Prehráva sa"
+#define qtn_ir_options_off "Vypnúť"
+#define qtn_ir_options_on "Zapnúť"
+#define qtn_ir_options_searchag "Hľadať znova"
+#define qtn_ir_options_select "Vybrať"
+#define qtn_ir_options_settings "Nastavenia"
+#define qtn_ir_options_station "Stanica"
+#define qtn_ir_options_stereowidening "Rozšírenie sterea"
+#define qtn_ir_options_unmark "NeoznaÄiÅ¥"
+#define qtn_ir_options_unmarkall "ZruÅ¡iÅ¥ vÅ¡et. oznaÄ."
+#define qtn_ir_playfail_err "Prehrávanie rádia zlyhalo"
+#define qtn_ir_playlist_title "Prijaté odkazy"
+#define qtn_ir_popup_no_results "Nenašli sa žiadne výsledky"
+#define qtn_ir_popup_toomany_results "Príliš veľa výsledkov. Spresnite hľadaný výraz."
+#define qtn_ir_results_none "Nenašli sa žiadne zhodné stanice. Hľadať znova."
+#define qtn_ir_search_result "%0U[10]: %1N výsled."
+#define qtn_ir_search_results "%0U[09]: %1N výsled."
+#define qtn_ir_set_folder_internetradio "Internet. rádio"
+#define qtn_ir_set_folder_irradio "Internet. rádio"
+#define qtn_ir_settings_3g "Bit. rýchlosť pripojenia 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Bit. rýchlosť pripoj. GPRS"
+#define qtn_ir_settings_network "Sieťové pripojenie"
+#define qtn_ir_settings_snap_default "Predvol. pripojenie"
+#define qtn_ir_settings_title "Nastavenia"
+#define qtn_ir_settings_wifi "Bit. rýchlosť pripoj. Wi-Fi"
+#define qtn_ir_softkey_back "Späť"
+#define qtn_ir_softkey_cancel "Zruš"
+#define qtn_ir_softkey_done "UkonÄené"
+#define qtn_ir_softkey_no "Nie"
+#define qtn_ir_softkey_options "Voľby"
+#define qtn_ir_softkey_select "Vybrať"
+#define qtn_ir_softkey_yes "Ãno"
+#define qtn_ir_station_saved "Stanica uložená"
+#define qtn_ir_stationlist_nomatches "(žiadne zhody)"
+#define qtn_ir_stations_popup_delete "Vymazať\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "VymazaÅ¥ poÄet staníc: %N?"
+#define qtn_ir_stations_popup_removed "%U[89] vymaz."
+#define qtn_ir_stations_popup_removed_many "Vymazané stanice: %N"
+#define qtn_ir_stations_popup_save "Uložiť stanicu do zložky Obľúbené?"
+#define qtn_ir_suboptions_delete "Vymazať"
+#define qtn_ir_suboptions_details "Detaily"
+#define qtn_ir_suboptions_move "Presunúť"
+#define qtn_ir_terms_details "Vyjadrením súhlasu s podmienkami používania uvedenými nižšie vstupujete do zmluvného vzÅ¥ahu v rozsahu povolenom platným zákonom, ktorý nebude Äalej obmedzovaný alebo zakazovaný v súvislosti so žiadnymi materiálnymi právami"
+#define qtn_ir_terms_heading "Podmienky používania"
+#define qtn_ir_terms_softkey_accept "Prijmi"
+#define qtn_ir_terms_softkey_decline "Odmietni"
+#define qtn_ir_title_history "História"
+#define qtn_ir_tooltip_addalltofav "Prid. vš. medzi Obľúb."
+#define qtn_ir_tooltip_addstation "Prid. stan. manuálne"
+#define qtn_ir_tooltip_addtofav "Prid. medzi Obľúbené"
+#define qtn_ir_tooltip_copy "Kopírovať"
+#define qtn_ir_tooltip_findnstore "Hľadať v Hud. obchode"
+#define qtn_ir_tooltip_findst "Hľadať stanice"
+#define qtn_ir_tooltip_history "História"
+#define qtn_ir_tooltip_listen "VypoÄuÅ¥"
+#define qtn_ir_tooltip_paste "Prilepiť"
+#define qtn_ir_tooltip_stationde "Detaily o stanici"
+#define qtn_ir_top_title "Najobľúb. stan."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Názov"
+#define qtn_ir_url_title "Pridanie stanice"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/26/internetradioai_26.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet. rádio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/26/terms_26.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Služba Nokia Internet Radio service (“Službaâ€) vám umožní objavovaÅ¥ a prehliadaÅ¥ obsah internetových rádiových staníc. BERIETE NA VEDOMIE, ŽE POUŽÃVANÃM TEJTO SLUŽBY POTVRDZUJETE, ŽE STE SI PREÄŒÃTALI TÚTO ZMLUVU, POROZUMELI STE JEJ A SÚHLASÃTE, ŽE STE VIAZANà JEJ PODMIENKAMI. Ak nesúhlasíte, beriete na vedomie, že nemáte oprávnenie používaÅ¥ Službu.</p>
+
+<p></p>
+
+<h1>1. DEFINÃCIE</h1>
+
+<p></p>
+
+<p>Internetové rádiové stanice sú entity, ktoré vÅ¡eobecne produkujú a v reálnom Äase distribuujú cez internet audio obsah a súvisiace metadáta.</p>
+
+<p></p>
+
+<p>Odkaz na internetová rádiovú stanicu znamená zdrojový lokátor alebo sústavu zdrojových lokátorov, ktoré umožňujú používateľovi prístup k obsahu vysielanému internetovou rádiovou stanicou.</p>
+
+<p></p>
+
+<h1>2. SLUŽBA</h1>
+
+<p></p>
+
+<p>Služba umožňuje nasledovné:</p>
+<p>1. prehliadanie odkazov na internetové rádiové stanice;</p>
+<p>2. prístup k obsahu internetových rádiových staníc;</p>
+
+<p></p>
+
+<h1>3. POUŽÃVANIE SLUŽBY</h1>
+
+<p></p>
+
+<p>Službu možno používaÅ¥ iba na súkromné a nekomerÄné úÄely. Nokia bude vlastniÅ¥ intelektuálne práva na a pre úÄely Služby.</p>
+
+<p></p>
+
+<p>Nokia si vyhradzuje zmeniť tieto všeobecné podmienky vydaním informácie o tejto zmene.</p>
+
+<p></p>
+
+<h1>4. OCHRANA SÚKROMIA</h1>
+
+<p></p>
+
+<p>Nokia zabezpeÄuje ochranu súkromia používateľov implementáciou prísnych pravidiel pre ochranu dôverných informácií.</p>
+
+<p></p>
+
+<p>V snahe o monitorovanie a zlepÅ¡enie Služby môže Nokia zhromažÄovaÅ¥ používateľské dáta vrátane, ale nie s obmedzením, informácií o uskutoÄnených prístupoch k internetovým rádiovým staniciam, o Äase strávenom na jednotlivej stanici a o položkách oznaÄených ako obľúbené.</p>
+
+<p></p>
+
+<p>Nokia nezhromažÄuje žiadne informácie, ktoré umožňujú identifikáciu používateľa Služby.</p>
+
+<p></p>
+
+<h1>5. DOSTUPNOSŤ SLUŽBY</h1>
+
+<p></p>
+
+<p>Služba sa ponúka pre vaÅ¡e pohodlie.  Ponúka sa „tak ako je“ na báze „ako je prístupná“.  Nokia nezaruÄujem že Služba bude fungovaÅ¥ bez preruÅ¡enia a bez porúch. Nokia si vyhradzuje právo zmeniÅ¥ Službu alebo kedykoľvek k nej zruÅ¡iÅ¥ prístup.</p>
+
+<p></p>
+
+<p>Nokia môže poskytnúť aktualizácie softvérových aplikácií súvisiacich so Službou a výhradne pre jej úÄely.</p>
+
+<p></p>
+
+<h1>6. OBMEDZENIE ZÃRUK A ZODPOVEDNOSTI</h1>
+
+<p></p>
+
+<p>Pre uľahÄenie prístupu môže Nokia poskytnúť odkazy na internetové rádiové stanice, ktoré vlastnia a prevádzkujú tretie strany. Nokia nezaruÄuje, že tieto odkazy na internetové stanice sú funkÄné. NavyÅ¡e Nokia sa nehlási, a absolútne nepreberá zodpovednosÅ¥ za obsah, netýkajúci sa spoloÄnosti Nokia, teda obsah ako taký alebo produkty, Äi služby spomenuté v tomto obsahu.</p>
+
+<p></p>
+
+<p>Pred vstupom ku ktorejkoľvek stanici si musíte preÄítaÅ¥ podmienky pre použitie, ak sú, a súhlasiÅ¥ s nimi. Takisto súhlasíte, že Nokia nemá dosah na obsah služieb poskytovaných tretími stranami a nemôže znášaÅ¥ zodpovednosÅ¥ za obsah poskytovaný internetovými rádiovými stanicami.</p>
+
+<p></p>
+
+<p>Prístup k obsahu internetových rádiových staníc prostredníctvom Služby môže vyvolať prenos veľkého objemu dát cez sieť vášho poskytovateľa služieb. Informujte sa u svojho poskytovateľa služieb o poplatkoch za prenos dát Majte na pamäti, že používanie Služby s internetovými rádiovými stanicami, poskytujúcimi streamy s vyššou prenosovou rýchlosťou môže spôsobiť zvýšenie nákladov spojených s prenosom dát.</p>
+
+<p></p>
+
+<p>Prenos dát spojený s používaním Služby môže obsahovaÅ¥ najmenej nasledovné: aktualizácia obsahu adresára stanice, streamingový prenos dát z internetovej stanice, zhromažÄovanie Å¡tatistických údajov a nová verzia softvéru internetovej rádiovej aplikácie.</p>
+
+<p></p>
+
+<p>Nokia nie je zodpovedná za náklady za prenos dát v súvislosti s vašim používaním Služby.</p>
+
+<p></p>
+
+<p>NEPOSKYTUJÚ SA ŽIADNE ZÃRUKY AKÉHOKOĽVEK DRUHU, ÄŒI UŽ VÃSLOVNÉ ALEBO IMPLIKOVANÉ, VRÃTANE, ALE NIE VÃHRADNE ZÃRUK TITULU ALEBO NEPORUÅ OVANIA SPRÃVNOSTI, ALEBO IMPLIKOVANÃCH ZÃRUK OBCHODOVATEĽNOSTI A VHODNOSTI NA URÄŒITà ÚČEL VO VZŤAHU S DOSTUPNOSŤOU, PRESNOSŤOU, SPOĽAHLIVOSŤOU ALEBO OBSAHOM SLUŽBY.  NOKIA NENESIE ZODPOVEDNOSŤ ZA AKOKOĽVEK VZNIKNUTÉ PRIAME, NEPRIAME, NÃHODNÉ, OSOBITNÉ ALEBO NÃSLEDNÉ Å KODY, STRATU ZISKU, ALEBO PRERUÅ ENIE OBCHODNEJ ÄŒINNOST VYPLÃVAJÚCEJ Z POUŽITIA ALEBO NEMOŽNOSTI POUŽITIA SLUŽBY, AJ KEÄŽ NOKIA NA MOŽNOSŤ TÃCHTO Å KÔD UPOZORNILA. NIEKTORÉ JURISDIKCIE NEUMOŽŇUJÚ VYLÚČENIE URÄŒITÃCH ZÃURK ALEBO OBMEDZENIE ZODPOVEDNOSTI, PRETO HORE UVEDENÉ OBMEDZENIA, ALEBO VYLÚČENIA PRE VÃS NEMUSIA PLATIŤ. ZODPOVEDNOSŤ NOKIA MÔŽE BYŤ V TAKOMTO PRÃPADE OBMEDZENà NAJAVÄČŠOM MOŽNOM ROZSAHU, PRÃPUSTNOM PODĽA PLATNÉHO PRÃVA.</p>
+
+<p></p>
+
+<p>NiÄ z tu spomenutého neobmedzuje zákonné práva ktorejkoľvek strany obchodujúcej ako používateľ. NiÄ z tu obsiahnutého neobmedzuje zodpovednosÅ¥ spoloÄnosti Nokia v prípade úmrtia alebo zranenia spôsobeného nedbalosÅ¥ou zo strany Nokia.</p>
+
+<p></p>
+
+<h1>7. POSTUP V PRÃPADE ŽALOBY ZA PORUÅ ENIE AUTORSKÃCH PRÃV</h1>
+
+<p></p>
+
+<p>Ak ste presvedÄení, že bolo s vaším autorským právom naložené spôsobom, ktorý vyžaduje podanie žaloby za poruÅ¡enie autorských práv, informujte Nokia, poskytnite oznámenie, obsahujúce nasledovné:</p>
+
+<p></p>
+
+<p>(1) Fyzický alebo elektronický podpis osoby oprávnenej konať v mene vlastníka exkluzívneho práva, ktoré bolo porušené;</p>
+
+<p></p>
+
+<p>(2) Identifikácia alebo popis diela chráneného autorským právom, ktoré bolo porušené;</p>
+
+<p></p>
+
+<p>(3) Identifikáciu alebo popis materiálu, ktorého práva boli prehlásené za poruÅ¡ené a informáciu podľa ktorej je možné urÄiÅ¥ umiestnenie materiálu;</p>
+
+<p></p>
+
+<p>(4) VaÅ¡e meno, adresu, telefóne Äíslo, e-mailovú adresu a akékoľvek ÄalÅ¡ie informácie, ktoré umožnia Nokia, aby sa s vami nakontaktovala;</p>
+
+<p></p>
+
+<p>(5) Prehlásenie, že v dobrej viere predpokladáte, že použitie predmetného materiálu nie je chránené autorským právom vlastníka, jeho agenta, alebo zákonom; a</p>
+
+<p></p>
+
+<p>(6) Prehlásenie, že informácia v oznámení je presná a s vedomím trestnej zodpovednosti, že ste poverení konať mene vlastníka exkluzívnych práv, ktoré boli porušené.</p>
+
+<p></p>
+
+<p>Oznámenie treba doruÄiÅ¥ na adresu nášho designovaného zástupcu:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. POUŽITEĽNÉ PRÃVO</h1>
+
+<p></p>
+
+<p>Ako vyplýva zo vÅ¡eobecných podmienok, „Nokia“ znamená SpoloÄnosÅ¥ Nokia. Nokia prevádzkuje ovláda Službu z miest umiestnených na Fínskom území. Informácie ako také, obsiahnuté v Službe sa vzÅ¥ahujú na Fínsko.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Všetky práva vyhradené.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/27/internetradio_27.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Zawsze pytaj"
+#define qtn_ir_active_idle_data "%0U – %1U: %2U"
+#define qtn_ir_added_multi "Liczba zapisanych stacji: %N"
+#define qtn_ir_added_single "Zapisano: %U[78]"
+#define qtn_ir_addmanually_unnamed "Nienazw."
+#define qtn_ir_addst_description "Opis"
+#define qtn_ir_addst_streamurl "Adres URL strumienia"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio internet."
+#define qtn_ir_ai_radio_not_active "Radio nieaktywne"
+#define qtn_ir_app_general_err "Błąd wewnętrzny. Zrestartuj aplikację."
+#define qtn_ir_apps_grid "Radio intern."
+#define qtn_ir_apps_list "Radio internet."
+#define qtn_ir_apps_skey "Radio internet."
+#define qtn_ir_apps_standby "Radio internetowe"
+#define qtn_ir_apps_swins "Radio internetowe"
+#define qtn_ir_apps_wheel "Radio internet."
+#define qtn_ir_bitrate_best "Najlepsza"
+#define qtn_ir_bitrate_high "Wysoka"
+#define qtn_ir_bitrate_standard "Standardowa"
+#define qtn_ir_cost_heading "Ważna uwaga"
+#define qtn_ir_cost_softkey_continue "Kontynuuj"
+#define qtn_ir_cost_softkey_exit "Wyjdź"
+#define qtn_ir_cost_title "Radio internet."
+#define qtn_ir_cost_warning "Radio internetowe używa połączenia transmisji danych telefonu do pobierania audycji. Funkcja ta jest zalecana tylko w przypadku stałej opłaty za transmisję danych. Jeśli nie znasz kosztów transmisji danych, najpierw skontaktuj się z operatorem."
+#define qtn_ir_country_list_expanded "Liczba stacji: %N"
+#define qtn_ir_countryregion_title "Kraje/regiony"
+#define qtn_ir_discover_beststations "Wybór najlepszych stacji"
+#define qtn_ir_discover_country_region "Przegl. wg krajów/region."
+#define qtn_ir_discover_genre "Przeglądaj wg gatunków"
+#define qtn_ir_discover_genre_expanded "Stacje wg gatunków"
+#define qtn_ir_discover_langauge "Przeglądaj wg języków"
+#define qtn_ir_discover_language_expanded "Stacje wg języków"
+#define qtn_ir_discover_staticountryreg "Stacje wg krajów/regionów"
+#define qtn_ir_discover_title "Katalog stacji"
+#define qtn_ir_discover_top "Najlepsze stacje"
+#define qtn_ir_edit_title "Edytuj stacje"
+#define qtn_ir_err_operation "Błąd operacji. Spróbuj ponownie."
+#define qtn_ir_err_url_unavail "Adres URL niedostępny"
+#define qtn_ir_error_address "Błędny adres internetowej stacji radiowej"
+#define qtn_ir_error_connection "Upłynął limit czasu połączenia. Spróbuj ponownie."
+#define qtn_ir_error_favourites "Brak miejsca w Ulubionych na zapisanie wyboru"
+#define qtn_ir_error_general "Nie można połączyć się ze stacją"
+#define qtn_ir_error_isds_unavailable "Usługa katalogu stacji internetowych tymczasowo niedostępna"
+#define qtn_ir_error_notavailable "Brak dostępnych łączy do strumieni"
+#define qtn_ir_error_notinisds "Element już niedostępny"
+#define qtn_ir_error_search "Wprowadź termin do wyszukania"
+#define qtn_ir_findst_addstation "Dodaj stację ręcznie"
+#define qtn_ir_findst_addtofav "Dodaj stacjÄ™ do Ulubionych"
+#define qtn_ir_findst_browsesds "PrzeglÄ…daj katalog stacji"
+#define qtn_ir_findst_search_ensrhterm "Wpisz termin do wyszukania"
+#define qtn_ir_findst_softkey_search "Szukaj"
+#define qtn_ir_findstation_title "Znajdź stacje"
+#define qtn_ir_firstuse_title "Radio intern.: witaj"
+#define qtn_ir_genre_list_expanded "Liczba stacji: %N"
+#define qtn_ir_genre_title "Gatunki"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Brak historii"
+#define qtn_ir_homescreen_buffering "Buforowanie"
+#define qtn_ir_homescreen_lastplayed "Ostatnio odtwarz."
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "Kraj/region:"
+#define qtn_ir_info_details_description "Opis:"
+#define qtn_ir_info_details_genre "Gatunki:"
+#define qtn_ir_info_details_language "Język:"
+#define qtn_ir_info_details_name "Nazwa:"
+#define qtn_ir_info_details_streams "Strumienie:"
+#define qtn_ir_info_details_title "Inf. o stacji"
+#define qtn_ir_info_details_type "Typ:"
+#define qtn_ir_info_details_type_isds "Kat. stacji"
+#define qtn_ir_info_details_type_manual "WÅ‚asne"
+#define qtn_ir_info_details_unnamed "Nienazw."
+#define qtn_ir_info_softkey_close "Zamknij"
+#define qtn_ir_language_list_expanded "Liczba stacji: %N"
+#define qtn_ir_language_title "Języki"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Åadowanie"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Wyszukiwanie"
+#define qtn_ir_main_descriptive_text "Wybierz Znajdź stacje na pasku narz., aby dodać"
+#define qtn_ir_main_discover_expanded "Wykryj nowe stacje radiowe"
+#define qtn_ir_main_last "Ostatnio odtw."
+#define qtn_ir_main_now "Teraz odtwarz."
+#define qtn_ir_main_prog_deleting "Usuwanie %N"
+#define qtn_ir_main_searchindir "Wyszukaj w katalogu"
+#define qtn_ir_main_title "Radio internet."
+#define qtn_ir_main_unnamed_station "Nienazw. stacja"
+#define qtn_ir_memlo_ram_out_of_mem "Za mało pamięci do wykonania tej operacji. Najpierw usuń zbędne dane."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N Mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Następna stacja"
+#define qtn_ir_now_tooltip_play "Odtwórz"
+#define qtn_ir_now_tooltip_previous "Poprzednia stacja"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Buforowanie"
+#define qtn_ir_now_wait_buffering_perc "Buforowanie %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Brak połączenia z siecią"
+#define qtn_ir_nwcontroller_err_nosnaps "Brak zdefiniowanego punktu dostępu"
+#define qtn_ir_options_add "Dodaj do Ulubionych"
+#define qtn_ir_options_add_manually "Dodaj stację ręcznie"
+#define qtn_ir_options_change "Zmień"
+#define qtn_ir_options_clearhistory "Usuń historię"
+#define qtn_ir_options_editstation "Edytuj stacjÄ™"
+#define qtn_ir_options_equalizer "Korektor"
+#define qtn_ir_options_exit "Wyjdź"
+#define qtn_ir_options_findnmusicstore "Znajdź w sklepie muz."
+#define qtn_ir_options_fmtrans "Przekaźnik FM"
+#define qtn_ir_options_gotomusicstore "Idź do sklepu muz."
+#define qtn_ir_options_help "Pomoc"
+#define qtn_ir_options_history "Historia"
+#define qtn_ir_options_info "Informacje o stacji"
+#define qtn_ir_options_mainview "Idź do widoku głównego"
+#define qtn_ir_options_mark "Zaznacz"
+#define qtn_ir_options_markall "Zaznacz wszystkie"
+#define qtn_ir_options_markunmark "Zaznacz/Usuń zaznacz."
+#define qtn_ir_options_now "Idź do Teraz odtw."
+#define qtn_ir_options_off "Wył."
+#define qtn_ir_options_on "WÅ‚."
+#define qtn_ir_options_searchag "Szukaj ponownie"
+#define qtn_ir_options_select "Wybierz"
+#define qtn_ir_options_settings "Ustawienia"
+#define qtn_ir_options_station "Stacja"
+#define qtn_ir_options_stereowidening "Rozszerzenie stereo"
+#define qtn_ir_options_unmark "Wyklucz"
+#define qtn_ir_options_unmarkall "Wyklucz wszystkie"
+#define qtn_ir_playfail_err "BÅ‚Ä…d odtwarzania radia"
+#define qtn_ir_playlist_title "Odebrane Å‚Ä…cza"
+#define qtn_ir_popup_no_results "Brak wyników wyszukiwania"
+#define qtn_ir_popup_toomany_results "Zbyt wiele wyników. Popraw wyszukiwany termin."
+#define qtn_ir_results_none "Nie znaleziono pasujÄ…cych stacji. Wyszukaj ponownie."
+#define qtn_ir_search_result "%0U[11]:%1N wynik"
+#define qtn_ir_search_results "%0U[09]:%1N wynik."
+#define qtn_ir_set_folder_internetradio "Radio internet."
+#define qtn_ir_set_folder_irradio "Radio internet."
+#define qtn_ir_settings_3g "Szybkość połączenia 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Szybkość połączenia GPRS"
+#define qtn_ir_settings_network "Połączenie internetowe"
+#define qtn_ir_settings_snap_default "Połączenie domyślne"
+#define qtn_ir_settings_title "Ustawienia"
+#define qtn_ir_settings_wifi "Szybkość połączenia Wi-Fi"
+#define qtn_ir_softkey_back "Wróć"
+#define qtn_ir_softkey_cancel "Anuluj"
+#define qtn_ir_softkey_done "Gotowe"
+#define qtn_ir_softkey_no "Nie"
+#define qtn_ir_softkey_options "Opcje"
+#define qtn_ir_softkey_select "Wybierz"
+#define qtn_ir_softkey_yes "Tak"
+#define qtn_ir_station_saved "Stacja zapisana"
+#define qtn_ir_stationlist_nomatches "(brak odpowiedników)"
+#define qtn_ir_stations_popup_delete "Usunąć\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Usunąć stacje (%N)?"
+#define qtn_ir_stations_popup_removed "Usunięto %U[78]"
+#define qtn_ir_stations_popup_removed_many "LIczba usuniętych stacji: %N"
+#define qtn_ir_stations_popup_save "Zapisać stację w Ulubionych?"
+#define qtn_ir_suboptions_delete "Usuń"
+#define qtn_ir_suboptions_details "Szczegóły"
+#define qtn_ir_suboptions_move "PrzenieÅ›"
+#define qtn_ir_terms_details "Akceptując poniższy Regulamin, zawierasz umowę w zakresie dozwolonym przez obowiązujące prawo i nieograniczonym w inny sposób w dziedzinie praw materialnych"
+#define qtn_ir_terms_heading "Warunki"
+#define qtn_ir_terms_softkey_accept "Akceptuj"
+#define qtn_ir_terms_softkey_decline "Odrzuć"
+#define qtn_ir_title_history "Historia"
+#define qtn_ir_tooltip_addalltofav "Dodaj wsz. do Ulub."
+#define qtn_ir_tooltip_addstation "Dodaj stację ręcznie"
+#define qtn_ir_tooltip_addtofav "Dodaj do Ulubionych"
+#define qtn_ir_tooltip_copy "Kopiuj"
+#define qtn_ir_tooltip_findnstore "Znajdź w sklepie muz."
+#define qtn_ir_tooltip_findst "Znajdź stacje"
+#define qtn_ir_tooltip_history "Historia"
+#define qtn_ir_tooltip_listen "SÅ‚uchaj"
+#define qtn_ir_tooltip_paste "Wklej"
+#define qtn_ir_tooltip_stationde "Szczegóły stacji"
+#define qtn_ir_top_title "Najlepsze stacje"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nazwa"
+#define qtn_ir_url_title "Dodaj stacjÄ™"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/27/internetradioai_27.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio internet.">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/27/terms_27.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>UsÅ‚uga Nokia Internet Radio („UsÅ‚ugaâ€) umożliwia wyszukiwanie i korzystanie z internetowych stacji radiowych. UÅ»YTKOWNIK OÅšWIADCZA, Å»E ZAPOZNAÅ SIĘ Z NINIEJSZÄ„ UMOWÄ„, ZROZUMIAÅ JEJ TREŚĆ I Å»E ZGADZA SIĘ PRZESTRZEGAĆ WARUNKÓW I POSTANOWIEŃ TEJ UMOWY. Bez wyrażenia takiej zgody użytkownik nie ma prawa korzystać z UsÅ‚ugi.</p>
+
+<p></p>
+
+<h1>1. DEFINICJE</h1>
+
+<p></p>
+
+<p>Internetowe stacje radiowe są to mające osobowość prawną jednostki, które w ogólności wytwarzają materiały audio i związane z nimi metadane, i rozpowszechniają je strumieniowo przez internet.</p>
+
+<p></p>
+
+<p>ÅÄ…cze do internetowej stacji radiowej jest adresem lub grupÄ… adresów web, przez które użytkownik może uzyskać dostÄ™p do materiałów audio w strumieniu wysyÅ‚anym przez internetowÄ… stacjÄ™ radiowÄ….</p>
+
+<p></p>
+
+<h1>2. USÅUGA</h1>
+
+<p></p>
+
+<p>Omawiana Usługa umożliwia:</p>
+<p>1. przeglÄ…danie Å‚Ä…czy do internetowych stacji radiowych</p>
+<p>2. uzyskiwanie dostępu do treści emitowanych przez internetowe stacje radiowe</p>
+
+<p></p>
+
+<h1>3. KORZYSTANIE Z USÅUGI</h1>
+
+<p></p>
+
+<p>Korzystanie z tej Usługi jest dozwolone tylko w celach prywatnych i niekomercyjnych. Wszystkie prawa własności do wartości intelektualnych Usługi są w posiadaniu firmy Nokia.</p>
+
+<p></p>
+
+<p>Firma Nokia zastrzega sobie prawo do zmiany niniejszych postanowień i warunków, zobowiązując się przy tym do informowania użytkowników Usługi o dokonanych zmianach.</p>
+
+<p></p>
+
+<h1>4. ZASADY PRYWATNOÅšCI</h1>
+
+<p></p>
+
+<p>Firma Nokia skutecznie chroni prywatność użytkownika, stosując nienaruszalne zasady poufności.</p>
+
+<p></p>
+
+<p>Do celów monitoringu i z myślą o podnoszeniu jakości Usługi firma Nokia może gromadzić dane o popularności Usługi, włączając w to, ale nie ograniczając tego do informacji o liczbie odwiedzin poszczególnych stacji radiowych, o czasie słuchania każdej stacji i o ulubionych audycjach.</p>
+
+<p></p>
+
+<p>Firma Nokia nie gromadzi żadnych informacji, które pozwoliłyby zidentyfikować użytkownika Usługi.</p>
+
+<p></p>
+
+<h1>5. DOSTĘPNOŚĆ USÅUGI</h1>
+
+<p></p>
+
+<p>UsÅ‚uga jest Å›wiadczona dla wygody użytkownika. Dostarczana jest na zasadach „jest, jaka jest†i „jest taka, jaka jest dostÄ™pnaâ€. Firma Nokia nie gwarantuje, że UsÅ‚uga dziaÅ‚ać bÄ™dzie nieprzerwanie i bezbÅ‚Ä™dnie. Firma Nokia zastrzega sobie prawo do korygowania UsÅ‚ugi, Å‚Ä…cznie z możliwoÅ›ciÄ… zablokowania do niej dostÄ™pu.</p>
+
+<p></p>
+
+<p>Firma Nokia, według własnego uznania, może dostarczyć uaktualnienia aplikacji związanych z Usługą.</p>
+
+<p></p>
+
+<h1>6. ZASTRZEŻENIE BRAKU ODPOWIEDZIALNOŚCI</h1>
+
+<p></p>
+
+<p>Żeby ułatwić dostęp do internetowych stacji radiowych, firma Nokia może ujawniać łącza do stacji, które są własnością osób trzecich lub które są zarządzanie przez osoby trzecie. Firma Nokia nie gwarantuje, że takie łącza do internetowych stacji radiowych będą zawsze aktywne. Co więcej, treści prezentowane przez stacje radiowe niepowiązane z firmą Nokia nie są przez firmę Nokia lansowane, jak również nie są promowane produkty i usługi, do których te treści się odwołują.</p>
+
+<p></p>
+
+<p>Przed uzyskaniem dostępu do danej stacji radiowej użytkownik musi zapoznać się z regułami (jeśli są takowe) korzystania ze stacji i zgodzić się na przestrzeganie tych reguł. Użytkownik musi też zgodzić się z faktem, że firma Nokia nie ma żadnego wpływu na usługi świadczone przez osoby trzecie i w żadnej mierze nie odpowiada za treści nadawane przez takie stacje radiowe.</p>
+
+<p></p>
+
+<p>Uzyskany za pośrednictwem Usługi dostęp do treści nadawanych przez stacje radiowe może się wiązać z transmisją dużych ilości danych przez sieć własnego usługodawcy. W sprawie opłat za transmisję danych należy się skontaktować z usługodawcą. Trzeba też wiedzieć, że użycie Usługi do słuchania internetowych stacji radiowych, których strumienie charakteryzują się dużą liczbą bitów na sekundę, może zwiększyć koszty związane z transmisją danych.</p>
+
+<p></p>
+
+<p>Przepływ danych związany z użyciem Usługi może obejmować następujące operacje: uaktualnianie zawartości katalogu stacji radiowych, przesyłanie strumienia danych z internetowej stacji radiowej, gromadzenie danych statystycznych i uaktualnianie aplikacji radia internetowego.</p>
+
+<p></p>
+
+<p>Firma Nokia nie jest odpowiedzialna za koszty transmisji danych związane z użyciem Usługi.</p>
+
+<p></p>
+
+<p>W ODNIESIENIU DO DOSTĘPNOÅšCI, DOKÅADNOÅšCI, NIEZAWODNOÅšCI I ZAWARTOÅšCI NINIEJSZEJ USÅUGI FIRMA NOKIA NIE UDZIELA Å»ADNYCH GWARANCJI, ZARÓWNO WYRAŹNYCH, JAK I DOROZUMIANYCH, WÅÄ„CZAJÄ„C W TO, ALE NIE OGRANICZAJÄ„C TEGO DO WSZELKICH DOROZUMIANYCH GWARANCJI CO DO WARTOÅšCI RYNKOWEJ, PRZYDATNOÅšCI DO OKREÅšLONEGO CELU ORAZ NIENARUSZANIA PRZEPISÓW PRAWA. FIRMA NOKIA NIE PONOSI Å»ADNEJ ODPOWIEDZIALNOÅšCI ZA JAKIEKOLWIEK BEZPOÅšREDNIE, POÅšREDNIE, PRZYPADKOWE, NADZWYCZAJNE LUB WTÓRNE SZKODY, ANI TEÅ» ZA UTRATY ZYSKÓW LUB PRZERWY W DZIAÅALNOÅšCI, WYNIKAJÄ„CE Z UÅ»YCIA LUB NIEMOÅ»NOÅšCI UÅ»YCIA NINIEJSZEJ USÅUGI. NIEKTÓRE PRAWODAWSTWA NIE ZEZWALAJÄ„ NA WYÅÄ„CZANIE PEWNYCH GWARANCJI LUB NA OGRANICZENIA ODPOWIEDZIALNOÅšCI, CZYLI Å»E WYÅ»EJ WYMIENIONE OGRANICZENIA LUB WYÅÄ„CZENIA MOGÄ„ NIE MIEĆ ZASTOSOWANIA W KRAJU UÅ»YTKOWNIKA. W TAKICH PRZYPADKACH ODPOWIEDZIALNOŚĆ FIRMY NOKIA BĘDZIE OGRANICZONA W MAKSYMALNEJ MIERZE, NA JAKÄ„ ZEZWALA OBOWIÄ„ZUJÄ„CE PRAWO.</p>
+
+<p></p>
+
+<p>Żadne z powyższych postanowień nie umniejsza ustawowych praw strony występującej jako klient. Żadne z powyższych postanowień nie ma zastosowania w przypadku śmierci lub zranienia ciała spowodowanego zaniedbaniem firmy Nokia.</p>
+
+<p></p>
+
+<h1>7. POSTĘPOWANIE W PRZYPADKU DOMNIEMANIA NARUSZENIA PRAW AUTORSKICH</h1>
+
+<p></p>
+
+<p>Jeśli użytkownik podejrzewa, że jego praca chroniona prawami autorskimi została wykorzystana z naruszeniem praw autorskich, może o tym powiadomić firmę Nokia, dostarczając następujące dane:</p>
+
+<p></p>
+
+<p>(1) Fizyczny lub elektroniczny podpis osoby upoważnionej do działania w imieniu właściciela praw, które przypuszczalnie zostały naruszone;</p>
+
+<p></p>
+
+<p>(2) Oznaczenie lub opis pracy, w odniesieniu do której prawa autorskie mogły zostać naruszone;</p>
+
+<p></p>
+
+<p>(3) Oznaczenie lub opis materiału chronionego prawami autorskimi oraz informacje wystarczająco dokładne do zlokalizowania tego materiału;</p>
+
+<p></p>
+
+<p>(4) Nazwisko użytkownika, jego adres, numer telefonu, adres e-mail i inne dane, które pozwolą firmie Nokia skontaktować się z użytkownikiem;</p>
+
+<p></p>
+
+<p>(5) Stwierdzenie, że użytkownik ma solidne podstawy, żeby sądzić, że jego materiał został użyty bez upoważnienia i niezgodnie z prawem;</p>
+
+<p></p>
+
+<p>(6) Stwierdzenie, że informacje zawarte w powiadomieniu są dokładne i podane ze świadomością o odpowiedzialności karnej za działanie bez upoważnienia właściciela przypuszczalnie naruszonych praw autorskich.</p>
+
+<p></p>
+
+<p>Takie powiadomienie należy wysłać na adres:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. UZUPEÅNIENIE</h1>
+
+<p></p>
+
+<p>Używane w niniejszym dokumencie słowo „Nokia†oznacza Nokia Corporation. Firma Nokia zarządza Usługą z miejsc znajdujących się na terenie Finlandii. Podane tu informacje na temat Usługi odnoszą się do prawa obowiązującego w Finlandii.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Wszelkie prawa zastrzeżone.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/28/internetradio_28.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Vedno vprašaj"
+#define qtn_ir_active_idle_data "%0U[09] – %1U[08]: %2U"
+#define qtn_ir_added_multi "Shranjenih %N postaj"
+#define qtn_ir_added_single "%U[86] shranjenih"
+#define qtn_ir_addmanually_unnamed "Brez ime."
+#define qtn_ir_addst_description "Opis"
+#define qtn_ir_addst_streamurl "Pretok URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U – %2U: %3U"
+#define qtn_ir_ai_iradio_title "Spletni radio"
+#define qtn_ir_ai_radio_not_active "Radio ni aktiven"
+#define qtn_ir_app_general_err "Notranja napaka. Ponovno zaženite aplikacijo."
+#define qtn_ir_apps_grid "Spletni radio"
+#define qtn_ir_apps_list "Spletni radio"
+#define qtn_ir_apps_skey "Spletni radio"
+#define qtn_ir_apps_standby "Spletni radio"
+#define qtn_ir_apps_swins "Spletni radio"
+#define qtn_ir_apps_wheel "Spletni radio"
+#define qtn_ir_bitrate_best "Najboljša kakovost"
+#define qtn_ir_bitrate_high "Visoka kakovost"
+#define qtn_ir_bitrate_standard "Standardna kakovost"
+#define qtn_ir_cost_heading "Pomembno obvestilo"
+#define qtn_ir_cost_softkey_continue "Nadaljuj"
+#define qtn_ir_cost_softkey_exit "Izhod"
+#define qtn_ir_cost_title "Spletni radio"
+#define qtn_ir_cost_warning "Spletni radio uporablja podatkovno povezavo telefona za predvajanje radia. To je priporoÄljivo le, Äe prenos podatkov plaÄujete pavÅ¡alno. ÄŒe niste prepriÄani o stroÅ¡kih prenosa podatkov, jih preden nadaljujete preverite pri operaterju."
+#define qtn_ir_country_list_expanded "%N postaj"
+#define qtn_ir_countryregion_title "Države/regije"
+#define qtn_ir_discover_beststations "Izbor najboljših postaj"
+#define qtn_ir_discover_country_region "Brskaj po državah/regijah"
+#define qtn_ir_discover_genre "Brskaj po zvrsti"
+#define qtn_ir_discover_genre_expanded "Postaje po zvrsti"
+#define qtn_ir_discover_langauge "Brskaj po jeziku"
+#define qtn_ir_discover_language_expanded "Postaje po jeziku"
+#define qtn_ir_discover_staticountryreg "Postaje razv. po državi/regiji"
+#define qtn_ir_discover_title "Imenik postaj"
+#define qtn_ir_discover_top "Najbolj priljub. postaje"
+#define qtn_ir_edit_title "Urejanje postaje"
+#define qtn_ir_err_operation "Napaka pri delovanju. Poskusite znova."
+#define qtn_ir_err_url_unavail "URL ni na voljo"
+#define qtn_ir_error_address "Nepravilen naslov spletne radio postaje"
+#define qtn_ir_error_connection "Iztek Äasa povezave. Poskusite znova."
+#define qtn_ir_error_favourites "Med priljubljenimi ni dovolj prostora za shranjevanje izbora"
+#define qtn_ir_error_general "Povezava s postajo ni uspela"
+#define qtn_ir_error_isds_unavailable "Imeniška storitev spletnega radia trenutno ni na voljo"
+#define qtn_ir_error_notavailable "Povezav za pretok ni na voljo"
+#define qtn_ir_error_notinisds "Element ni veÄ na voljo"
+#define qtn_ir_error_search "Vnesite nov iskalni niz"
+#define qtn_ir_findst_addstation "Dodaj postajo roÄno"
+#define qtn_ir_findst_addtofav "Dodaj postajo med prilj."
+#define qtn_ir_findst_browsesds "Brskanje po imeniku post."
+#define qtn_ir_findst_search_ensrhterm "Vnesite nov iskalni niz"
+#define qtn_ir_findst_softkey_search "IÅ¡Äi"
+#define qtn_ir_findstation_title "Iskanje postaj"
+#define qtn_ir_firstuse_title "Spl. radio: Dobrodošli"
+#define qtn_ir_genre_list_expanded "%N postaj"
+#define qtn_ir_genre_title "Zvrsti"
+#define qtn_ir_history_artist_song "%0U – %1U"
+#define qtn_ir_history_no_history "Brez zgodovine"
+#define qtn_ir_homescreen_buffering "Polnim medpomn."
+#define qtn_ir_homescreen_lastplayed "Nazadnje predv."
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "Država/regija:"
+#define qtn_ir_info_details_description "Opis:"
+#define qtn_ir_info_details_genre "Zvrst(i):"
+#define qtn_ir_info_details_language "Jezik:"
+#define qtn_ir_info_details_name "Ime:"
+#define qtn_ir_info_details_streams "Prenos:"
+#define qtn_ir_info_details_title "Info. o postaji"
+#define qtn_ir_info_details_type "Vrsta:"
+#define qtn_ir_info_details_type_isds "Im. post."
+#define qtn_ir_info_details_type_manual "Uporabn."
+#define qtn_ir_info_details_unnamed "Brez ime."
+#define qtn_ir_info_softkey_close "Zapri"
+#define qtn_ir_language_list_expanded "%N postaj"
+#define qtn_ir_language_title "Jeziki"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Nalagam"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "IÅ¡Äem"
+#define qtn_ir_main_descriptive_text "Za dod. post., up. \"Iskanje postaj\" v orod. vr."
+#define qtn_ir_main_discover_expanded "Iskanje novih radijskih postaj"
+#define qtn_ir_main_last "Nazadnje predv."
+#define qtn_ir_main_now "Zdaj predvajam"
+#define qtn_ir_main_prog_deleting "Brisanje %N"
+#define qtn_ir_main_searchindir "Iskanje v imeniku"
+#define qtn_ir_main_title "Spletni radio"
+#define qtn_ir_main_unnamed_station "Postaja brez im."
+#define qtn_ir_memlo_ram_out_of_mem "Ni dovolj pomnilnika za izvedbo postopka. Najprej zbr. nekaj podatkov."
+#define qtn_ir_now_artist_song "%0U – %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Nasl. radijska postaja"
+#define qtn_ir_now_tooltip_play "Predvajaj"
+#define qtn_ir_now_tooltip_previous "Prej. radijska postaja"
+#define qtn_ir_now_tooltip_stop "Ustavi"
+#define qtn_ir_now_wait_buffering "Polnim medpomnilnik"
+#define qtn_ir_now_wait_buffering_perc "Medpomnjenje %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ni povezave z omrežjem"
+#define qtn_ir_nwcontroller_err_nosnaps "Ni doloÄene dostopne toÄke"
+#define qtn_ir_options_add "Dodaj k Priljubljenim"
+#define qtn_ir_options_add_manually "Dodaj postajo roÄno"
+#define qtn_ir_options_change "Spremeni"
+#define qtn_ir_options_clearhistory "Zbriši zgodovino"
+#define qtn_ir_options_editstation "Urejanje postaje"
+#define qtn_ir_options_equalizer "IzenaÄevalnik"
+#define qtn_ir_options_exit "Izhod"
+#define qtn_ir_options_findnmusicstore "Najdi v Glasbeni trgovini"
+#define qtn_ir_options_fmtrans "Oddajnik FM"
+#define qtn_ir_options_gotomusicstore "Pojdi v Glasbeno trgovino"
+#define qtn_ir_options_help "PomoÄ"
+#define qtn_ir_options_history "Zgodovina"
+#define qtn_ir_options_info "Informacije o postaji"
+#define qtn_ir_options_mainview "Pojdi na glavni pogled"
+#define qtn_ir_options_mark "OznaÄi"
+#define qtn_ir_options_markall "OznaÄi vse"
+#define qtn_ir_options_markunmark "OznaÄi/Opusti"
+#define qtn_ir_options_now "Pojdi na Predvajanje"
+#define qtn_ir_options_off "IzkljuÄeno"
+#define qtn_ir_options_on "VkljuÄeno"
+#define qtn_ir_options_searchag "Ponovi iskanje"
+#define qtn_ir_options_select "Izberi"
+#define qtn_ir_options_settings "Nastavitve"
+#define qtn_ir_options_station "Postaja"
+#define qtn_ir_options_stereowidening "Stereo razširjanje"
+#define qtn_ir_options_unmark "Opusti"
+#define qtn_ir_options_unmarkall "OdznaÄi vse"
+#define qtn_ir_playfail_err "Predvajanje radia ni uspelo"
+#define qtn_ir_playlist_title "Prejete pov."
+#define qtn_ir_popup_no_results "Ne najdem"
+#define qtn_ir_popup_toomany_results "PreveÄ rezultatov. IzboljÅ¡ajte kriterije iskanja."
+#define qtn_ir_results_none "Ni ustreznih postaj. Poskusite znova."
+#define qtn_ir_search_result "%0U[10]:%1N rezultat"
+#define qtn_ir_search_results "%0U[10]:%1N rezult."
+#define qtn_ir_set_folder_internetradio "Spletni radio"
+#define qtn_ir_set_folder_irradio "Spletni radio"
+#define qtn_ir_settings_3g "Hitrost prenosa prek 3G"
+#define qtn_ir_settings_connec_softkey_ok "V redu"
+#define qtn_ir_settings_gprs "Hitrost pren. prek GPRS"
+#define qtn_ir_settings_network "Omrežna povezava"
+#define qtn_ir_settings_snap_default "Privzeta povezava"
+#define qtn_ir_settings_title "Nastavitve"
+#define qtn_ir_settings_wifi "Hitrost pren. prek Wi-Fi"
+#define qtn_ir_softkey_back "Nazaj"
+#define qtn_ir_softkey_cancel "PrekliÄi"
+#define qtn_ir_softkey_done "KonÄano"
+#define qtn_ir_softkey_no "Ne"
+#define qtn_ir_softkey_options "Možnosti"
+#define qtn_ir_softkey_select "Izberi"
+#define qtn_ir_softkey_yes "Da"
+#define qtn_ir_station_saved "Postaja je shranjena"
+#define qtn_ir_stationlist_nomatches "(ni zadetkov)"
+#define qtn_ir_stations_popup_delete "Izbriši\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Izbrišem %N postaj?"
+#define qtn_ir_stations_popup_removed "%U[87] izbrisanih"
+#define qtn_ir_stations_popup_removed_many "%N postaj izbrisanih"
+#define qtn_ir_stations_popup_save "Shranim postajo med Priljubljene?"
+#define qtn_ir_suboptions_delete "Zbriši"
+#define qtn_ir_suboptions_details "Podrobnosti"
+#define qtn_ir_suboptions_move "Premakni"
+#define qtn_ir_terms_details "ÄŒe se strinjate s spodnjimi pogoji in doloÄili, pristopite k pogodbi v najveÄjem obsegu, ki ga dovoljuje veljavna zakonodaja, brez omejitev ali prepovedi v zvezi z materialnimi pravicami"
+#define qtn_ir_terms_heading "Pogoji"
+#define qtn_ir_terms_softkey_accept "Sprejmi"
+#define qtn_ir_terms_softkey_decline "Zavrni"
+#define qtn_ir_title_history "Zgodovina"
+#define qtn_ir_tooltip_addalltofav "Dodaj vse med priljub."
+#define qtn_ir_tooltip_addstation "Dodaj postajo roÄno"
+#define qtn_ir_tooltip_addtofav "Dodaj med priljub."
+#define qtn_ir_tooltip_copy "Kopiraj"
+#define qtn_ir_tooltip_findnstore "Najdi v Glasbeni trg."
+#define qtn_ir_tooltip_findst "Iskanje postaj"
+#define qtn_ir_tooltip_history "Zgodovina"
+#define qtn_ir_tooltip_listen "Poslušaj"
+#define qtn_ir_tooltip_paste "Prilepi"
+#define qtn_ir_tooltip_stationde "Podrobnosti o postaji"
+#define qtn_ir_top_title "Naj. prilj. post."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Ime"
+#define qtn_ir_url_title "Dodajanje post."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/28/internetradioai_28.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internetni radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/28/terms_28.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Storitev Nokia Internet Radio (“storitevâ€) omogoÄa odkrivanje in doživetje vsebine internetnih radijskih postaj. SOGLAÅ ATE, DA Z UPORABO STORITVE POTRJUJETE, DA STE PREBRALI TO POGODBO IN JO RAZUMELI TER DA VAS OBVEZUJEJO NJENI POGOJI IN DOLOÄŒILA. ÄŒe ne soglaÅ¡ate, storitve ne smete uporabljati.</p>
+
+<p></p>
+
+<h1>1. DEFINICIJE</h1>
+
+<p></p>
+
+<p>Internetne radijske postaje so pravne ali fiziÄne osebe, ki na sploÅ¡no producirajo zvoÄno vsebino in sorodne metapodatke ter jih v toku distribuirajo po internetu.</p>
+
+<p></p>
+
+<p>Povezava na internetno radijsko postajo pomeni naslov ali veÄ naslovov URL, ki uporabniku omogoÄajo dostop do vsebine, ki jo internetna radijska postaja pretoÄno oddaja.</p>
+
+<p></p>
+
+<h1>2. STORITEV</h1>
+
+<p></p>
+
+<p>Storitev omogoÄa naslednje:</p>
+<p>1. brskanje po povezavah na internetne radijske postaje;</p>
+<p>2. dostop do vsebine internetnih radijskih postaj.</p>
+
+<p></p>
+
+<h1>3. UPORABA STORITVE</h1>
+
+<p></p>
+
+<p>Uporaba storitve je dovoljena samo za vašo osebno in nekomercialno rabo. Nokia je lastnik vseh pravic intelektualne lastnine v storitvi in za njo.</p>
+
+<p></p>
+
+<p>Nokia si pridržuje pravico spremeniti te pogoje in doloÄila tako, da vas o tem obvesti.</p>
+
+<p></p>
+
+<h1>4. ZASEBNOST</h1>
+
+<p></p>
+
+<p>Nokia si prizadeva zagotoviti zasebnost uporabnikov z uveljavljanjem strogih pravilnikov o zasebnosti.</p>
+
+<p></p>
+
+<p>Za spremljanje uporabe in izboljÅ¡anje storitve lahko Nokia zbira podatke o uporabi, vkljuÄno s podatki o internetnih radijskih postajah, do katerih ste dostopali, Äasu posluÅ¡anja posamezne postaje in elementi, ki ste jih izbrali za priljubljene.</p>
+
+<p></p>
+
+<p>Nokia ne zbira nikakrÅ¡nih podatkov, ki bi omogoÄili prepoznavo uporabnika storitve.</p>
+
+<p></p>
+
+<h1>5. RAZPOLOŽLJIVOST STORITVE</h1>
+
+<p></p>
+
+<p>Storitev se daje na voljo kot ugodnost, in sicer, "kakrÅ¡na je" in "ko je na voljo". Nokia ne jamÄi, da bo storitev brez prekinitev ali napak. Nokia si pridržuje pravico kadar koli spremeniti storitev ali ukiniti dostop do nje.</p>
+
+<p></p>
+
+<p>Nokia lahko po svoji presoji da na voljo nadgradnje storitve ali programske opreme, povezane z njo.</p>
+
+<p></p>
+
+<h1>6. ODPOVED IN ODGOVORNOST</h1>
+
+<p></p>
+
+<p>Nokia lahko za vaÅ¡ lažji dostop da na voljo povezave na internetne radijske postaje, ki so last tretjih oseb oziroma jih te tretje osebe upravljajo. Nokia ne jamÄi, da bodo povezave na internetne radijske postaje delovale. Poleg tega vsebina, ki ni povezava z Nokio, nikakor ne pomeni, da Nokia podpira tako vsebino ali izdelke ali storitve, omenjene v taki vsebini.</p>
+
+<p></p>
+
+<p>Pred dostopom do katere koli postaje morate prebrati njena pravila za uporabo in soglašati z njimi. Soglašate tudi, da Nokia nima nobenega nadzora nad vsebino storitev tretjih oseb in ne more prevzeti nobene odgovornosti za vsebino internetnih radijskih postaj.</p>
+
+<p></p>
+
+<p>Uporaba storitve za dostop do vsebine internetnih radijskih postaj lahko vkljuÄuje prenos velikih koliÄin podatkov skozi omrežje vaÅ¡ega ponudnika storitev. Za podatke o ceni tega prenosa podatkov se obrnite na ponudnika storitev. StroÅ¡ki prenosa podatkov so lahko veÄji, Äe storitev uporabljate za posluÅ¡anje internetnih radijskih postaj, ki uporabljajo tokove veÄje bitne hitrosti.</p>
+
+<p></p>
+
+<p>Prenos podatkov, povezan z uporabo storitve, lahko obsega najmanj naslednje: posodabljanje imenika postaj, pretoÄni prenos podatkov internetnih radijskih postaj, zbiranje statistiÄnih podatkov in nadgradnja programske opreme za posluÅ¡anje internetnih radijskih postaj.</p>
+
+<p></p>
+
+<p>Nokia ni odgovorna za stroške prenosa podatkov, povezane z vašo uporabo storitve.</p>
+
+<p></p>
+
+<p>GLEDE RAZPOLOŽLJIVOSTI, TOČNOSTI, ZANESLJIVOSTI ALI VSEBINE STORITVE NI NIKAKRŠNEGA JAMSTVA, NAJSI BO IZRECNO ALI VSEBOVANO, VKLJUČNO Z JAMSTVI LASTNIŠTVA ALI NEKRŠITVE AVTORSKIH PRAVIC ALI VSEBOVANIH JAMSTEV PRIMERNOSTI ZA PRODAJO ALI ZA DOLOČEN NAMEN, VENDAR NE OMEJENO NANJE. NOKIA NI ODGOVORNA ZA KAKRŠNO KOLI NEPOSREDNO, POSREDNO, NAKLJUČNO, POSEBNO IN POSLEDIČNO ŠKODO, IZGUBO DOBIČKA ALI PREKINITEV POSLOVANJA, KI JE POSLEDICA UPORABE ALI NEZMOŽNOSTI UPORABE STORITVE, ČETUDI JE BILA NOKIA OBVEŠČENA O MOŽNOSTI TAKE ŠKODE. NEKATERE JURISDIKCIJE NE DOVOLJUJEJO IZKLJUČITVE DOLOČENIH JAMSTEV ALI OMEJITVE ODGOVORNOSTI, ZATO ZGORNJE OMEJITVE ALI IZKLJUČITVE ZA VAS MORDA NE VELJAJO. ODGOVORNOST NOKIE JE V TAKIH PRIMERIH OMEJENA DO NAJVEČJE MERE, KI JO DOVOLJUJE ZAKONODAJA.</p>
+
+<p></p>
+
+<p>Noben del tega dokumenta ne vpliva na zakonske pravice katere koli osebe, ki se obravnava kot potrošnik. Noben del tega dokumenta ne omejuje odgovornosti Nokie v primeru smrti ali telesnih poškodb, ki so posledica malomarnosti Nokie.</p>
+
+<p></p>
+
+<h1>7. PRAVILNIK GLEDE DOMNEVNIH KRÅ ITEV AVTORSKIH PRAVIC</h1>
+
+<p></p>
+
+<p>ÄŒe menite, da je bilo vaÅ¡e avtorsko zaÅ¡Äiteno delo obravnavano na kakrÅ¡en koli naÄin, ki pomeni krÅ¡itev avtorskih pravic, morate obvestiti Nokio z obvestilom, ki vsebuje naslednje:</p>
+
+<p></p>
+
+<p>(1) fiziÄni ali elektronski podpis osebe, pooblaÅ¡Äene za ukrepanje v imenu lastnika izkljuÄne pravice, ki je domnevno krÅ¡ena;</p>
+
+<p></p>
+
+<p>(2) navedbo ali opis avtorsko zaÅ¡Äitenega dela, za katero naj bi bile krÅ¡ene avtorske pravice;</p>
+
+<p></p>
+
+<p>(3) navedbo ali opis gradiva, ki naj bi krÅ¡ilo avtorske pravice, in informacije, ki razumno zadoÅ¡Äajo, da se to gradivo najde;</p>
+
+<p></p>
+
+<p>(4) vaše ime, naslov, telefonsko številko, e-poštni naslov in vse druge informacije, potrebne, da Nokia naveže stik z vami;</p>
+
+<p></p>
+
+<p>(5) izjavo, da v dobri veri verjamete, da lastnik avtorskih pravic, njegov posrednik ali zakonodaja ne dovoljuje uporabe gradiva na naÄin, opisan v pritožbi; in</p>
+
+<p></p>
+
+<p>(6) izjavo, da so informacije v obvestilu toÄne in da ste pooblaÅ¡Äeni za ukrepanje v imenu lastnika izkljuÄne pravice, ki je domnevno krÅ¡ena. ÄŒe je ta izjava neresniÄna, je zagrožena kazen zaradi krivoprisege.</p>
+
+<p></p>
+
+<p>Obvestilo mora biti poslano na naslov imenovanega zastopnika:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. UPOÅ TEVNA ZAKONODAJA</h1>
+
+<p></p>
+
+<p>V teh pogojih in doloÄilih pomeni izraz "Nokia" podjetje Nokia Corporation. Nokia storitev izvaja in upravlja iz Finske, zato se lahko Å¡teje, da informacije na tej storitvi izhajajo iz Finske.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Vse pravice pridržane.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/29/internetradio_29.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "總是詢å•"
+#define qtn_ir_active_idle_data "%0U - %1U:%2U"
+#define qtn_ir_added_multi "%N個電å°å·²å„²å­˜"
+#define qtn_ir_added_single "%U[44]已儲存"
+#define qtn_ir_addmanually_unnamed "未命å"
+#define qtn_ir_addst_description "內容說明"
+#define qtn_ir_addst_streamurl "串æµURL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U-%2U:%3U"
+#define qtn_ir_ai_iradio_title "網路收音機"
+#define qtn_ir_ai_radio_not_active "收音機未啟動"
+#define qtn_ir_app_general_err "內部錯誤。請é‡æ–°å•Ÿå‹•æ‡‰ç”¨ç¨‹å¼ã€‚"
+#define qtn_ir_apps_grid "網路廣播"
+#define qtn_ir_apps_list "網際網路收音機"
+#define qtn_ir_apps_skey "網路收音機"
+#define qtn_ir_apps_standby "網際網路收音機"
+#define qtn_ir_apps_swins "網際網路收音機"
+#define qtn_ir_apps_wheel "網際網路收音機"
+#define qtn_ir_bitrate_best "最佳å“質"
+#define qtn_ir_bitrate_high "高å“質"
+#define qtn_ir_bitrate_standard "標準å“質"
+#define qtn_ir_cost_heading "é‡è¦æ示"
+#define qtn_ir_cost_softkey_continue "繼續"
+#define qtn_ir_cost_softkey_exit "退出"
+#define qtn_ir_cost_title "網路收音機"
+#define qtn_ir_cost_warning "網際網路收音機會使用手機的數據連線來進行收音機傳輸。åªå»ºè­°æ‚¨åœ¨æŽ¡ç”¨å–®ä¸€è²»çŽ‡æ•¸æ“šæ–¹æ¡ˆæ™‚使用本功能。如果您ä¸ç¢ºå®šç›®å‰æ‰€æŽ¡ç”¨çš„數據費率,請先å‘系統業者查詢後å†ç¹¼çºŒä½¿ç”¨ã€‚"
+#define qtn_ir_country_list_expanded "%N個電å°"
+#define qtn_ir_countryregion_title "國家/地å€"
+#define qtn_ir_discover_beststations "ç²¾é¸çš„最佳電å°"
+#define qtn_ir_discover_country_region "ä¾åœ‹å®¶/地å€ç€è¦½"
+#define qtn_ir_discover_genre "ä¾ç¨®é¡žç€è¦½"
+#define qtn_ir_discover_genre_expanded "ä¾ç¨®é¡žæŽ’åºé›»å°"
+#define qtn_ir_discover_langauge "ä¾èªžè¨€ç€è¦½"
+#define qtn_ir_discover_language_expanded "ä¾èªžè¨€æŽ’åºé›»å°"
+#define qtn_ir_discover_staticountryreg "é›»å°ä¾ç…§åœ‹å®¶/地å€æŽ’åº"
+#define qtn_ir_discover_title "é›»å°ç›®éŒ„"
+#define qtn_ir_discover_top "最熱門電å°"
+#define qtn_ir_edit_title "編輯電å°"
+#define qtn_ir_err_operation "æ“作發生錯誤。請é‡è©¦ä¸€æ¬¡ã€‚"
+#define qtn_ir_err_url_unavail "URL無法使用"
+#define qtn_ir_error_address "網際網路收音機電å°ä½å€éŒ¯èª¤"
+#define qtn_ir_error_connection "連線逾時。請å†è©¦ä¸€æ¬¡ã€‚"
+#define qtn_ir_error_favourites "我的最愛的空間ä¸è¶³ï¼Œç„¡æ³•å„²å­˜é¸å–é …ç›®"
+#define qtn_ir_error_general "無法連線至電å°"
+#define qtn_ir_error_isds_unavailable "網際網路電å°ç›®éŒ„æœå‹™æš«æ™‚無法使用"
+#define qtn_ir_error_notavailable "ç„¡å¯ç”¨çš„串æµé€£çµ"
+#define qtn_ir_error_notinisds "項目已ä¸å­˜åœ¨"
+#define qtn_ir_error_search "輸入æœå°‹è©žå½™"
+#define qtn_ir_findst_addstation "手動加入電å°"
+#define qtn_ir_findst_addtofav "將您的電å°åŠ å…¥æˆ‘的最愛"
+#define qtn_ir_findst_browsesds "ç€è¦½é›»å°ç›®éŒ„"
+#define qtn_ir_findst_search_ensrhterm "輸入æœå°‹è©žå½™"
+#define qtn_ir_findst_softkey_search "æœå°‹"
+#define qtn_ir_findstation_title "尋找電å°"
+#define qtn_ir_firstuse_title "網路收音機:歡迎"
+#define qtn_ir_genre_list_expanded "%N個電å°"
+#define qtn_ir_genre_title "種類"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "無記錄"
+#define qtn_ir_homescreen_buffering "ç·©è¡è™•ç†ä¸­"
+#define qtn_ir_homescreen_lastplayed "上次播放"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "國家/地å€ï¼š"
+#define qtn_ir_info_details_description "內容說明:"
+#define qtn_ir_info_details_genre "種類:"
+#define qtn_ir_info_details_language "語言:"
+#define qtn_ir_info_details_name "å稱:"
+#define qtn_ir_info_details_streams "串æµï¼š"
+#define qtn_ir_info_details_title "é›»å°è³‡è¨Š"
+#define qtn_ir_info_details_type "類型:"
+#define qtn_ir_info_details_type_isds "目錄"
+#define qtn_ir_info_details_type_manual "自訂"
+#define qtn_ir_info_details_unnamed "未命å"
+#define qtn_ir_info_softkey_close "關閉"
+#define qtn_ir_language_list_expanded "%N個電å°"
+#define qtn_ir_language_title "語言"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "載入中"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "æœå°‹ä¸­"
+#define qtn_ir_main_descriptive_text "從工具列使用\"尋找電å°\"來加入電å°"
+#define qtn_ir_main_discover_expanded "探索新的收音機電å°"
+#define qtn_ir_main_last "上次播放"
+#define qtn_ir_main_now "正在播放"
+#define qtn_ir_main_prog_deleting "正在刪除%N"
+#define qtn_ir_main_searchindir "在目錄中æœå°‹"
+#define qtn_ir_main_title "網路收音機"
+#define qtn_ir_main_unnamed_station "未命åçš„é›»å°"
+#define qtn_ir_memlo_ram_out_of_mem "沒有足夠的記憶體å¯ä¾›åŸ·è¡Œä½œæ¥­ã€‚請先刪除一些資料。"
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "下一個電å°"
+#define qtn_ir_now_tooltip_play "播放"
+#define qtn_ir_now_tooltip_previous "上一個電å°"
+#define qtn_ir_now_tooltip_stop "åœæ­¢"
+#define qtn_ir_now_wait_buffering "ç·©è¡è™•ç†ä¸­"
+#define qtn_ir_now_wait_buffering_perc "ç·©è¡è™•ç†ä¸­%N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "無網路連線"
+#define qtn_ir_nwcontroller_err_nosnaps "未定義存å–點"
+#define qtn_ir_options_add "加入至我的最愛"
+#define qtn_ir_options_add_manually "手動加入電å°"
+#define qtn_ir_options_change "變更"
+#define qtn_ir_options_clearhistory "清除記錄"
+#define qtn_ir_options_editstation "編輯電å°"
+#define qtn_ir_options_equalizer "平衡器"
+#define qtn_ir_options_exit "退出"
+#define qtn_ir_options_findnmusicstore "在音樂商店中尋找"
+#define qtn_ir_options_fmtrans "FM發é€å™¨"
+#define qtn_ir_options_gotomusicstore "移至音樂商店"
+#define qtn_ir_options_help "說明"
+#define qtn_ir_options_history "記錄"
+#define qtn_ir_options_info "é›»å°è³‡è¨Š"
+#define qtn_ir_options_mainview "移至主檢視"
+#define qtn_ir_options_mark "標記"
+#define qtn_ir_options_markall "全部標記"
+#define qtn_ir_options_markunmark "標記/å–消標記"
+#define qtn_ir_options_now "移至正在播放"
+#define qtn_ir_options_off "關"
+#define qtn_ir_options_on "é–‹"
+#define qtn_ir_options_searchag "å†æ¬¡æœå°‹"
+#define qtn_ir_options_select "é¸å–"
+#define qtn_ir_options_settings "設定"
+#define qtn_ir_options_station "é›»å°"
+#define qtn_ir_options_stereowidening "ç«‹é«”è²å¼·åŒ–"
+#define qtn_ir_options_unmark "å–消標記"
+#define qtn_ir_options_unmarkall "全部å–消標記"
+#define qtn_ir_playfail_err "收音機播放失敗"
+#define qtn_ir_playlist_title "收到的連çµ"
+#define qtn_ir_popup_no_results "找ä¸åˆ°çµæžœ"
+#define qtn_ir_popup_toomany_results "找到太多個項目。請é‡æ–°ä¿®æ”¹æœå°‹è©žå½™ã€‚"
+#define qtn_ir_results_none "找ä¸åˆ°ç›¸ç¬¦é›»å°ã€‚è«‹å†æ¬¡æœå°‹ã€‚"
+#define qtn_ir_search_result "%0U[08]:%1N"
+#define qtn_ir_search_results "%0U[07]:%1N"
+#define qtn_ir_set_folder_internetradio "網際網路收音機"
+#define qtn_ir_set_folder_irradio "網際網路收音機"
+#define qtn_ir_settings_3g "3G連線傳輸率"
+#define qtn_ir_settings_connec_softkey_ok "確定"
+#define qtn_ir_settings_gprs "GPRS連線傳輸率"
+#define qtn_ir_settings_network "網路連線"
+#define qtn_ir_settings_snap_default "é è¨­é€£ç·š"
+#define qtn_ir_settings_title "設定"
+#define qtn_ir_settings_wifi "Wi-Fi連線傳輸率"
+#define qtn_ir_softkey_back "返回"
+#define qtn_ir_softkey_cancel "å–消"
+#define qtn_ir_softkey_done "完æˆ"
+#define qtn_ir_softkey_no "å¦"
+#define qtn_ir_softkey_options "é¸é …"
+#define qtn_ir_softkey_select "é¸å–"
+#define qtn_ir_softkey_yes "是"
+#define qtn_ir_station_saved "é›»å°å·²å„²å­˜"
+#define qtn_ir_stationlist_nomatches "(無相符項目)"
+#define qtn_ir_stations_popup_delete "是å¦åˆªé™¤\n%U[38]?"
+#define qtn_ir_stations_popup_delete_many "是å¦è¦åˆªé™¤%N個電å°ï¼Ÿ"
+#define qtn_ir_stations_popup_removed "%U[44]已刪除"
+#define qtn_ir_stations_popup_removed_many "%N個電å°å·²åˆªé™¤"
+#define qtn_ir_stations_popup_save "是å¦å°‡é›»å°å„²å­˜è‡³æˆ‘的最愛?"
+#define qtn_ir_suboptions_delete "刪除"
+#define qtn_ir_suboptions_details "詳細資訊"
+#define qtn_ir_suboptions_move "移動"
+#define qtn_ir_terms_details "åŒæ„下列之æ¢æ¬¾å’Œæ¢ä»¶å³æ§‹æˆåˆç´„關係,在é©ç”¨æ³•å¾‹å…許的範åœå…§ï¼Œä¸å—所有物權的進一步é™åˆ¶æˆ–ç¦æ­¢"
+#define qtn_ir_terms_heading "æ¢æ¬¾å’Œæ¢ä»¶"
+#define qtn_ir_terms_softkey_accept "接å—"
+#define qtn_ir_terms_softkey_decline "拒絕"
+#define qtn_ir_title_history "記錄"
+#define qtn_ir_tooltip_addalltofav "全部加入我的最愛"
+#define qtn_ir_tooltip_addstation "手動加入電å°"
+#define qtn_ir_tooltip_addtofav "加入至我的最愛"
+#define qtn_ir_tooltip_copy "複製"
+#define qtn_ir_tooltip_findnstore "在音樂商店中尋找"
+#define qtn_ir_tooltip_findst "尋找電å°"
+#define qtn_ir_tooltip_history "記錄"
+#define qtn_ir_tooltip_listen "收è½"
+#define qtn_ir_tooltip_paste "貼上"
+#define qtn_ir_tooltip_stationde "é›»å°è©³ç´°è³‡è¨Š"
+#define qtn_ir_top_title "最熱門電å°"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "å稱"
+#define qtn_ir_url_title "加入電å°"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/29/internetradioai_29.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "網路收音機">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/29/terms_29.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia 網際網路廣播æœå‹™ï¼ˆä»¥ä¸‹ç°¡ç¨±ã€Œæœå‹™ã€ï¼‰èƒ½å¤ è®“貴用戶探索與體驗網際網路廣播電å°çš„內容。貴用戶åŒæ„æ­¤æœå‹™çš„使用å³ç¢ºèªè²´ç”¨æˆ¶å·²é–±è®€éŽæœ¬å”議,了解其內容,並且åŒæ„éµå®ˆå”è­°çš„æ¢æ¬¾èˆ‡æ¢ä»¶ã€‚倘若貴用戶並ä¸åŒæ„,å³ä¸å¾—使用此「æœå‹™ã€ã€‚</p>
+
+<p></p>
+
+<h1>1. 定義</h1>
+
+<p></p>
+
+<p>網際網路廣播電å°ä¸€èˆ¬è€Œè¨€æ„指在網際網路的串æµä¸­ç”¢ç”Ÿèˆ‡å‚³æ’­éŸ³è¨Šå…§å®¹åŠç›¸é—œä¸­ç¹¼è³‡æ–™çš„實體。</p>
+
+<p></p>
+
+<p>網際網路廣播電å°é€£çµæ„指讓使用者能夠存å–網際網路廣播電å°æ‰€å‚³æ’­ä¹‹å…§å®¹çš„一個或一組資æºå®šä½å™¨ã€‚</p>
+
+<p></p>
+
+<h1>2. æœå‹™</h1>
+
+<p></p>
+
+<p>「æœå‹™ã€å¯æ供下列功能:</p>
+<p>1. ç€è¦½èˆ‡ç¶²éš›ç¶²è·¯å»£æ’­é›»å°çš„連çµï¼›</p>
+<p>2. å­˜å–網際網路廣播電å°çš„內容;</p>
+
+<p></p>
+
+<h1>3. 使用æœå‹™</h1>
+
+<p></p>
+
+<p>「æœå‹™ã€çš„使用åªå…許作為貴用戶的ç§äººæˆ–éžå•†æ¥­æ€§ç”¨é€”。Nokia æ“有「æœå‹™ã€çš„所有智慧財產權。</p>
+
+<p></p>
+
+<p>Nokia ä¿ç•™è®Šæ›´é€™äº›æ¢æ¬¾èˆ‡æ¢ä»¶ï¼Œä¸¦ä¸”通知貴用戶此類變更的權利。</p>
+
+<p></p>
+
+<h1>4. éš±ç§æ¬Š</h1>
+
+<p></p>
+
+<p>Nokia 藉由實施嚴格的機密政策,致力於ä¿è­·ä½¿ç”¨è€…çš„éš±ç§æ¬Šã€‚</p>
+
+<p></p>
+
+<p>為了監控「æœå‹™ã€çš„使用並且åšå¥½ã€Œæœå‹™ã€çš„改良工作,Nokia å¯èƒ½æœƒæ”¶é›†ä¸€äº›ä½¿ç”¨è³‡æ–™ï¼ŒåŒ…括(但ä¸é™æ–¼ï¼‰æœ‰é—œå­˜å–的網際網路廣播電å°ã€åœ¨æ¯å€‹é›»å°æ‰€èŠ±è²»çš„時間,以åŠå°‡å“ªäº›é …目加入「我的最愛ã€ç­‰è³‡è¨Šã€‚</p>
+
+<p></p>
+
+<p>Nokia 並ä¸æœƒæ”¶é›†å¯ä¾›è­˜åˆ¥ä½¿ç”¨ã€Œæœå‹™ã€ä¹‹ä½¿ç”¨è€…身份的任何資訊。</p>
+
+<p></p>
+
+<h1>5. æœå‹™å¯ç”¨æ€§</h1>
+
+<p></p>
+
+<p>「æœå‹™ã€ä¿‚é‡å°è²´ç”¨æˆ¶çš„方便性所æ供。「æœå‹™ã€ä¿‚ä¾ã€Œç¾æ³ã€åŠã€Œå¯ç”¨æ™‚ã€æ‰€æ供。Nokia ä¸ä¿è­‰ã€Œæœå‹™ã€ä¸æœƒä¸­æ–·æˆ–沒有錯誤。Nokia ä¿ç•™éš¨æ™‚修訂「æœå‹™ã€æˆ–撤銷存å–「æœå‹™ã€çš„權利。</p>
+
+<p></p>
+
+<p>Nokia 得自行決定是å¦ç‚ºã€Œæœå‹™ã€ç›¸é—œçš„軟體應用程å¼æä¾›å‡ç´šç‰ˆæœ¬ã€‚</p>
+
+<p></p>
+
+<h1>6. å…責è²æ˜Žèˆ‡è²¬ä»»</h1>
+
+<p></p>
+
+<p>為了貴用戶的存å–方便,Nokia å¯èƒ½æœƒåŒ…括由第三方所經營的網際網路廣播電å°çš„連çµã€‚Nokia ä¸ä¿è­‰èˆ‡ç¶²éš›ç¶²è·¯å»£æ’­é›»å°çš„連çµçš†å¯ä½œç”¨ã€‚此外,與 Nokia 無關的內容並ä¸è¡¨ç¤º Nokia èªåŒè©²å…§å®¹ï¼Œæˆ–是該內容中所æåŠçš„產å“或æœå‹™ã€‚</p>
+
+<p></p>
+
+<p>貴用戶在存å–其內容å‰å¿…須審核並åŒæ„æ¯å€‹é›»å°çš„使用è¦å®šã€‚貴用戶亦åŒæ„ Nokia å°æ–¼ç¬¬ä¸‰æ–¹æœå‹™çš„內容並無控制權力,å°æ–¼ç¶²éš›ç¶²è·¯å»£æ’­é›»å°æ‰€æ供的內容亦ä¸æ‰¿æ“”任何責任。</p>
+
+<p></p>
+
+<p>使用「æœå‹™ã€å­˜å–網際網路廣播電å°çš„內容å¯èƒ½æœƒæ¶‰åŠé€éŽè²´ç”¨æˆ¶çš„æœå‹™æ供者網路進行大é‡è³‡æ–™çš„轉æ›ã€‚請連絡您的æœå‹™æ供者以了解有關資料傳輸費用的資訊。請注æ„,在使用包å«ç¶²éš›ç¶²è·¯å»£æ’­é›»å°çš„「æœå‹™ã€æ™‚,如果網際網路廣播電å°æœƒå°‡æ›´é«˜çš„ä½å…ƒçŽ‡ä¸²æµå‚³é€çµ¦æ‚¨ï¼Œå¯èƒ½æœƒç”¢ç”Ÿæ›´é«˜çš„資料æµé‡ç›¸é—œè²»ç”¨ã€‚</p>
+
+<p></p>
+
+<p>使用「æœå‹™ã€æ‰€è¡ç”Ÿçš„資料æµé‡å¯èƒ½è‡³å°‘包括以下項目:更新電å°ç›®éŒ„的內容ã€ä¸²æµç¶²éš›ç¶²è·¯å»£æ’­é›»å°çš„資料ã€æ”¶é›†éœæ…‹è³‡æ–™ä»¥åŠæ›´æ–°ç¶²éš›ç¶²è·¯å»£æ’­æ‡‰ç”¨ç¨‹å¼ã€‚</p>
+
+<p></p>
+
+<p>å°æ–¼è²´ç”¨æˆ¶å› ä½¿ç”¨ã€Œæœå‹™ã€æ‰€è¡ç”Ÿçš„資料æµé‡è²»ç”¨ï¼ŒNokia 概ä¸è² è²¬ã€‚</p>
+
+<p></p>
+
+<p>ä¸æ供任何形å¼ä¹‹æ“”ä¿ï¼Œä¸è«–其為明示或默示者,其中包括(但ä¸é™æ–¼ï¼‰æ¬Šåˆ©åŠä¸ä¾µå®³ä»–人權益之擔ä¿è²¬ä»»ï¼Œæˆ–é©å”®æ€§ã€é©åˆæŸç‰¹å®šç”¨é€”之默示擔ä¿è²¬ä»»ï¼Œäº¦èˆ‡ã€Œæœå‹™ã€ä¹‹å¯ç”¨æ€§ã€æº–確性ã€å¯é æ€§æˆ–內容無關。由於使用或未能使用「æœå‹™ã€æ‰€å°Žè‡´çš„任何直接ã€é–“接ã€éš¨é™„性ã€ç‰¹æ®Šæˆ–è¡ç”Ÿæ€§æ害ã€åˆ©æ½¤æ失或業務中止,NOKIA 概ä¸è² è²¬ã€‚å³ä½¿å·²äº‹å‰å‘ŠçŸ¥ NOKIA 發生此æ害之å¯èƒ½æ€§ï¼Œå…¶çµæžœäº¦åŒã€‚æŸäº›è½„å€ä¸å…許å°ç‰¹å®šæ“”ä¿ä¹‹æŽ’除或責任é™åˆ¶ï¼Œå› æ­¤ä¸Šé–‹é™åˆ¶æˆ–排除è¦å®šå¯èƒ½ä¸é©ç”¨æ–¼è²´ç”¨æˆ¶ã€‚NOKIA 在此情æ³ä¸­æ‡‰è² ä¹‹è²¬ä»»åƒ…é™æ–¼æ³•å¾‹å…許之最大範åœã€‚</p>
+
+<p></p>
+
+<p>上述æåŠä¹‹å…責è²æ˜Žä¸¦ä¸æœƒæ害任何一方作為消費者之法定權益。å³ä½¿å·²åˆ—出上述之å…責è²æ˜Žï¼Œå€˜è‹¥ç”±æ–¼ Nokia çš„ç–忽而造æˆäººå“¡å‚·äº¡æ™‚,Nokia ä»æ‡‰æ‰¿æ“”責任。</p>
+
+<p></p>
+
+<h1>7. 有關侵害著作權主張的原則</h1>
+
+<p></p>
+
+<p>如果貴用戶èªç‚ºä»–人處ç†è²´ç”¨æˆ¶ä¹‹è‘—作權作å“çš„æ–¹å¼å·²ç¶“構æˆè‘—作權侵害,貴用戶å¯é€šçŸ¥ Nokia 並æ供以下資訊:</p>
+
+<p></p>
+
+<p>(1) ç²å¾—授權代表專屬權益é­å—侵害者採å–行動者的實際或電å­ç°½åï¼›</p>
+
+<p></p>
+
+<p>(2) è²ç¨±å·²é­å—侵害之著作權作å“的識別或æè¿°ï¼›</p>
+
+<p></p>
+
+<p>(3) è²ç¨±æ§‹æˆä¾µå®³ä¹‹è³‡æ–™çš„識別或æ述,以åŠæœ‰å……分åˆç†åŽŸå› å¯æ‰¾å‡ºè³‡æ–™çš„資訊;</p>
+
+<p></p>
+
+<p>(4) 貴用戶的姓åã€ä½å€ã€é›»è©±è™Ÿç¢¼ã€é›»å­éƒµä»¶ä½å€ä»¥åŠä»»ä½•å…¶ä»–å…許 Nokia 與您連絡的資訊;</p>
+
+<p></p>
+
+<p>(5) 貴用戶有充分ç†ç”±ç›¸ä¿¡è³‡æ–™çš„使用並未ç²å¾—著作權所有者ã€å…¶ä»£ç†å•†æˆ–法律授權的原因陳述;以åŠ</p>
+
+<p></p>
+
+<p>(6) 陳述本通知內容的資訊完全屬實,並且å—å½è­‰è™•ç½°ä¹‹ç›£ç£ï¼Œè²´ç”¨æˆ¶å·²ç²å¾—授權代表專屬權益é­å—侵害之所有者。</p>
+
+<p></p>
+
+<p>必須將通知é€éŽä»¥ä¸‹ä½å€å‚³é€çµ¦æˆ‘們指定的代ç†å•†ï¼š</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. 政府管ç†ä¹‹æ³•è¦</h1>
+
+<p></p>
+
+<p>"Nokia" 表示 Nokia Corporation,與在這些æ¢æ¬¾èˆ‡æ¢ä»¶çš„用法相åŒã€‚Nokia é€éŽä½æ–¼èŠ¬è˜­å¢ƒå…§çš„å„個據點æ“作與控制「æœå‹™ã€ã€‚就其本身而言,包å«åœ¨ã€Œæœå‹™ã€ä¸­çš„資訊將會被視為在芬蘭所æ供。</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. ä¿ç•™æ‰€æœ‰æ¬Šåˆ©ã€‚</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/30/internetradio_30.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "長期請求"
+#define qtn_ir_active_idle_data "%0U - %1U:%2U"
+#define qtn_ir_added_multi "%N個電å°å·²å„²å­˜"
+#define qtn_ir_added_single "%U[44]已儲存"
+#define qtn_ir_addmanually_unnamed "未命å"
+#define qtn_ir_addst_description "內容說明"
+#define qtn_ir_addst_streamurl "串æµURL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U-%2U:%3U"
+#define qtn_ir_ai_iradio_title "網絡收音機"
+#define qtn_ir_ai_radio_not_active "未啟動收音機"
+#define qtn_ir_app_general_err "內部錯誤。請é‡æ–°å•Ÿå‹•æ‡‰ç”¨ç¨‹å¼ã€‚"
+#define qtn_ir_apps_grid "網絡廣播"
+#define qtn_ir_apps_list "互è¯ç¶²æ”¶éŸ³æ©Ÿ"
+#define qtn_ir_apps_skey "網絡收音機"
+#define qtn_ir_apps_standby "互è¯ç¶²æ”¶éŸ³æ©Ÿ"
+#define qtn_ir_apps_swins "互è¯ç¶²æ”¶éŸ³æ©Ÿ"
+#define qtn_ir_apps_wheel "互è¯ç¶²æ”¶éŸ³æ©Ÿ"
+#define qtn_ir_bitrate_best "最佳å“質"
+#define qtn_ir_bitrate_high "高å“質"
+#define qtn_ir_bitrate_standard "標準å“質"
+#define qtn_ir_cost_heading "é‡è¦æ示"
+#define qtn_ir_cost_softkey_continue "繼續"
+#define qtn_ir_cost_softkey_exit "退出"
+#define qtn_ir_cost_title "網絡收音機"
+#define qtn_ir_cost_warning "互è¯ç¶²æ”¶éŸ³æ©Ÿæœƒä½¿ç”¨æ‰‹æ©Ÿçš„數據連接來進行收音機傳輸。åªå»ºè­°æ‚¨åœ¨æŽ¡ç”¨å–®ä¸€è²»çŽ‡æ•¸æ“šæ–¹æ¡ˆæ™‚使用本功能。如果您ä¸ç¢ºå®šç›®å‰æ‰€æŽ¡ç”¨çš„數據費率,請先å‘網絡營辦商查詢後å†ç¹¼çºŒä½¿ç”¨ã€‚"
+#define qtn_ir_country_list_expanded "%N個電å°"
+#define qtn_ir_countryregion_title "國家/地å€"
+#define qtn_ir_discover_beststations "ç²¾é¸çš„最佳電å°"
+#define qtn_ir_discover_country_region "ä¾åœ‹å®¶/地å€ç€è¦½"
+#define qtn_ir_discover_genre "ä¾ç¨®é¡žç€è¦½"
+#define qtn_ir_discover_genre_expanded "ä¾ç¨®é¡žæŽ’åºé›»å°"
+#define qtn_ir_discover_langauge "ä¾èªžè¨€ç€è¦½"
+#define qtn_ir_discover_language_expanded "ä¾èªžè¨€æŽ’åºé›»å°"
+#define qtn_ir_discover_staticountryreg "é›»å°ä¾ç…§åœ‹å®¶/地å€æŽ’åº"
+#define qtn_ir_discover_title "é›»å°ç›®éŒ„"
+#define qtn_ir_discover_top "最熱門電å°"
+#define qtn_ir_edit_title "修改電å°"
+#define qtn_ir_err_operation "æ“作時發生錯誤。請é‡è©¦ä¸€æ¬¡ã€‚"
+#define qtn_ir_err_url_unavail "URL無法使用"
+#define qtn_ir_error_address "互è¯ç¶²æ”¶éŸ³æ©Ÿé›»å°ä½å€éŒ¯èª¤"
+#define qtn_ir_error_connection "連接逾時。請å†è©¦ä¸€æ¬¡ã€‚"
+#define qtn_ir_error_favourites "我的最愛的空間ä¸è¶³ï¼Œç„¡æ³•å„²å­˜é¸æ“‡é …ç›®"
+#define qtn_ir_error_general "無法連接至電å°"
+#define qtn_ir_error_isds_unavailable "互è¯ç¶²é›»å°ç›®éŒ„æœå‹™æš«æ™‚無法使用"
+#define qtn_ir_error_notavailable "沒有å¯ç”¨çš„串æµé€£çµ"
+#define qtn_ir_error_notinisds "項目已ä¸å­˜åœ¨"
+#define qtn_ir_error_search "輸入找尋詞彙"
+#define qtn_ir_findst_addstation "手動加入電å°"
+#define qtn_ir_findst_addtofav "將您的電å°åŠ å…¥æˆ‘的最愛"
+#define qtn_ir_findst_browsesds "ç€è¦½é›»å°ç›®éŒ„"
+#define qtn_ir_findst_search_ensrhterm "輸入找尋詞彙"
+#define qtn_ir_findst_softkey_search "找尋"
+#define qtn_ir_findstation_title "找尋電å°"
+#define qtn_ir_firstuse_title "網絡收音機:歡迎"
+#define qtn_ir_genre_list_expanded "%N個電å°"
+#define qtn_ir_genre_title "種類"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "沒有記錄"
+#define qtn_ir_homescreen_buffering "ç·©è¡è™•ç†ä¸­"
+#define qtn_ir_homescreen_lastplayed "上次播放"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "國家/地å€ï¼š"
+#define qtn_ir_info_details_description "內容說明:"
+#define qtn_ir_info_details_genre "種類:"
+#define qtn_ir_info_details_language "語言:"
+#define qtn_ir_info_details_name "å稱:"
+#define qtn_ir_info_details_streams "串æµï¼š"
+#define qtn_ir_info_details_title "é›»å°è³‡æ–™"
+#define qtn_ir_info_details_type "類型:"
+#define qtn_ir_info_details_type_isds "目錄"
+#define qtn_ir_info_details_type_manual "自定義"
+#define qtn_ir_info_details_unnamed "未命å"
+#define qtn_ir_info_softkey_close "關閉"
+#define qtn_ir_language_list_expanded "%N個電å°"
+#define qtn_ir_language_title "語言"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "載入中"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "找尋中"
+#define qtn_ir_main_descriptive_text "從工具列使用\"找尋電å°\"來加入電å°"
+#define qtn_ir_main_discover_expanded "探索新的收音機電å°"
+#define qtn_ir_main_last "上次播放"
+#define qtn_ir_main_now "正在播放"
+#define qtn_ir_main_prog_deleting "正在刪除%N"
+#define qtn_ir_main_searchindir "在目錄中找尋"
+#define qtn_ir_main_title "網絡收音機"
+#define qtn_ir_main_unnamed_station "未命åçš„é›»å°"
+#define qtn_ir_memlo_ram_out_of_mem "沒有足夠的記憶體å¯ä¾›åŸ·è¡Œæ“作。請先刪除一些數據。"
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "下一個電å°"
+#define qtn_ir_now_tooltip_play "播放"
+#define qtn_ir_now_tooltip_previous "上一個電å°"
+#define qtn_ir_now_tooltip_stop "åœæ­¢"
+#define qtn_ir_now_wait_buffering "ç·©è¡è™•ç†ä¸­"
+#define qtn_ir_now_wait_buffering_perc "ç·©è¡è™•ç†ä¸­%N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "無網絡連接"
+#define qtn_ir_nwcontroller_err_nosnaps "未定義接入點"
+#define qtn_ir_options_add "加至我的最愛"
+#define qtn_ir_options_add_manually "手動加入電å°"
+#define qtn_ir_options_change "æ›´æ›"
+#define qtn_ir_options_clearhistory "清除記錄"
+#define qtn_ir_options_editstation "修改電å°"
+#define qtn_ir_options_equalizer "å‡è¡¡å™¨"
+#define qtn_ir_options_exit "退出"
+#define qtn_ir_options_findnmusicstore "在音樂商店中找尋"
+#define qtn_ir_options_fmtrans "FM發é€å™¨"
+#define qtn_ir_options_gotomusicstore "å‰å¾€éŸ³æ¨‚商店"
+#define qtn_ir_options_help "說明"
+#define qtn_ir_options_history "記錄"
+#define qtn_ir_options_info "é›»å°è³‡æ–™"
+#define qtn_ir_options_mainview "å‰å¾€ä¸»æª¢è¦–"
+#define qtn_ir_options_mark "標記"
+#define qtn_ir_options_markall "全部標記"
+#define qtn_ir_options_markunmark "標記/å–消標記"
+#define qtn_ir_options_now "å‰å¾€æ­£åœ¨æ’­æ”¾"
+#define qtn_ir_options_off "關"
+#define qtn_ir_options_on "é–‹"
+#define qtn_ir_options_searchag "å†æ¬¡æ‰¾å°‹"
+#define qtn_ir_options_select "é¸æ“‡"
+#define qtn_ir_options_settings "設定"
+#define qtn_ir_options_station "é›»å°"
+#define qtn_ir_options_stereowidening "ç«‹é«”è²å¼·åŒ–"
+#define qtn_ir_options_unmark "å–消標記"
+#define qtn_ir_options_unmarkall "全部å–消標記"
+#define qtn_ir_playfail_err "收音機播放失敗"
+#define qtn_ir_playlist_title "收到的連çµ"
+#define qtn_ir_popup_no_results "找ä¸åˆ°çµæžœ"
+#define qtn_ir_popup_toomany_results "找到太多個項目。請é‡æ–°ä¿®æ”¹æ‰¾å°‹è©žå½™ã€‚"
+#define qtn_ir_results_none "找ä¸åˆ°ç›¸ç¬¦é›»å°ã€‚è«‹å†æ¬¡æ‰¾å°‹ã€‚"
+#define qtn_ir_search_result "%0U[08]:%1N"
+#define qtn_ir_search_results "%0U[07]:%1N"
+#define qtn_ir_set_folder_internetradio "互è¯ç¶²æ”¶éŸ³æ©Ÿ"
+#define qtn_ir_set_folder_irradio "互è¯ç¶²æ”¶éŸ³æ©Ÿ"
+#define qtn_ir_settings_3g "3G連接傳輸率"
+#define qtn_ir_settings_connec_softkey_ok "確定"
+#define qtn_ir_settings_gprs "GPRS連接傳輸率"
+#define qtn_ir_settings_network "網絡連接"
+#define qtn_ir_settings_snap_default "é è¨­é€£æŽ¥"
+#define qtn_ir_settings_title "設定"
+#define qtn_ir_settings_wifi "Wi-Fi連接傳輸率"
+#define qtn_ir_softkey_back "返回"
+#define qtn_ir_softkey_cancel "å–消"
+#define qtn_ir_softkey_done "完æˆ"
+#define qtn_ir_softkey_no "å¦"
+#define qtn_ir_softkey_options "é¸é …"
+#define qtn_ir_softkey_select "é¸æ“‡"
+#define qtn_ir_softkey_yes "是"
+#define qtn_ir_station_saved "é›»å°å·²å„²å­˜"
+#define qtn_ir_stationlist_nomatches "(沒有相é…)"
+#define qtn_ir_stations_popup_delete "是å¦åˆªé™¤\n%U[38]?"
+#define qtn_ir_stations_popup_delete_many "是å¦è¦åˆªé™¤%N個電å°ï¼Ÿ"
+#define qtn_ir_stations_popup_removed "%U[44]已刪除"
+#define qtn_ir_stations_popup_removed_many "%N個電å°å·²åˆªé™¤"
+#define qtn_ir_stations_popup_save "是å¦å°‡é›»å°å„²å­˜è‡³æˆ‘的最愛?"
+#define qtn_ir_suboptions_delete "刪除"
+#define qtn_ir_suboptions_details "詳細資料"
+#define qtn_ir_suboptions_move "移動"
+#define qtn_ir_terms_details "åŒæ„下列之æ¢æ¬¾å’Œæ¢ä»¶å³æ§‹æˆåˆç´„關係,在é©ç”¨æ³•å¾‹å…許的範åœå…§ï¼Œä¸å—所有物權的進一步é™åˆ¶æˆ–ç¦æ­¢"
+#define qtn_ir_terms_heading "æ¢æ¬¾å’Œæ¢ä»¶"
+#define qtn_ir_terms_softkey_accept "接å—"
+#define qtn_ir_terms_softkey_decline "拒絕"
+#define qtn_ir_title_history "記錄"
+#define qtn_ir_tooltip_addalltofav "全部加入我的最愛"
+#define qtn_ir_tooltip_addstation "手動加入電å°"
+#define qtn_ir_tooltip_addtofav "加至我的最愛"
+#define qtn_ir_tooltip_copy "複製"
+#define qtn_ir_tooltip_findnstore "在音樂商店中找尋"
+#define qtn_ir_tooltip_findst "找尋電å°"
+#define qtn_ir_tooltip_history "記錄"
+#define qtn_ir_tooltip_listen "收è½"
+#define qtn_ir_tooltip_paste "貼上"
+#define qtn_ir_tooltip_stationde "é›»å°è©³ç´°è³‡æ–™"
+#define qtn_ir_top_title "最熱門電å°"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "å稱"
+#define qtn_ir_url_title "加入電å°"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/30/internetradioai_30.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "互è¯ç¶²æ”¶éŸ³æ©Ÿ">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/30/terms_30.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Internet Radio serviceï¹Nokia 網絡廣播æœå‹™ï¹žï¼Œç°¡ç¨±æœå‹™ï¼Œå¯è®“您發掘åŠé«”驗網絡電å°çš„內容。使用æœå‹™ï¼Œå³è¡¨ç¤ºæ‚¨å·²é–±è®€æœ¬å”議,了解並åŒæ„接å—本å”議內的æ¢æ¬¾åŠæ¢ä»¶ã€‚請注æ„︰如果您ä¸åŒæ„,您將ä¸å¯ä½¿ç”¨æ­¤æœå‹™ã€‚</p>
+
+<p></p>
+
+<h1>1. 定義</h1>
+
+<p></p>
+
+<p>網絡電å°å³åœ¨äº’è¯ç¶²ä¸Šå»£æ³›æ供並發放è²éŸ³å…§å®¹åŠç›¸é—œçš„ metadataï¹å…ƒè³‡æ–™ï¹žçš„å¹³å°ã€‚</p>
+
+<p></p>
+
+<p>網絡電å°çš„連çµå³è³‡æºå®šä½æˆ–一組資æºå®šä½ï¼Œå¯è®“用戶存å–網絡電å°çš„內容。</p>
+
+<p></p>
+
+<h1>2. æœå‹™</h1>
+
+<p></p>
+
+<p>æœå‹™åŒ…括以下內容︰</p>
+<p>1. ç€è¦½å„網絡電å°çš„連çµï¼›</p>
+<p>2. å­˜å–å„網絡電å°çš„內容;</p>
+
+<p></p>
+
+<h1>3. æœå‹™ç”¨é€”</h1>
+
+<p></p>
+
+<p>æœå‹™åªé©ç”¨æ–¼ç§äººæˆ–éžå•†æ¥­ç”¨é€”。Nokia æ“有所有在æœå‹™å…§çš„知識產權。</p>
+
+<p></p>
+
+<p>Nokia ä¿ç•™æ›´æ”¹é€™äº›æ¢æ¬¾åŠæ¢ä»¶çš„權利,並會通知您有關改動。</p>
+
+<p></p>
+
+<h1>4. ç§éš±</h1>
+
+<p></p>
+
+<p>Nokia 承諾ä¿éšœç”¨æˆ¶çš„ç§éš±ï¼Œå¯¦è¡Œé«˜åº¦çš„ä¿å¯†æ”¿ç­–。</p>
+
+<p></p>
+
+<p>為了監控æœå‹™çš„使用情æ³ï¼ŒNokia å¯èƒ½æœƒæ”¶é›†ä½¿ç”¨æ•¸æ“šï¼ŒåŒ…括有關存å–的網絡電å°çš„資訊〠ç€è¦½å„é›»å°çš„時間åŠå–œæ„›é …目等等。</p>
+
+<p></p>
+
+<p>Nokiaä¸æœƒæ”¶é›†æœƒè­˜åˆ¥æœå‹™ç”¨æˆ¶èº«ä»½çš„數據。</p>
+
+<p></p>
+
+<h1>5. SERVICE (æœå‹™)的供應</h1>
+
+<p></p>
+
+<p>Service (æœå‹™)çš„æ供是為您帶來方便。以「as is (ä¾ç…§åŽŸæ¨£)ã€å’Œ as available (「å¯ç”¨æ™‚ã€)å½¢å¼æä¾›æœå‹™ã€‚Nokia ä¸ä¿è­‰æœå‹™ä¸è¢«çµ‚止或沒有錯誤。Nokia ä¿ç•™éš¨æ™‚修改æœå‹™æˆ–å–消存å–æœå‹™çš„權利。</p>
+
+<p></p>
+
+<p>Nokia å¯èƒ½æœƒæä¾›æœå‹™æ›´æ–°çš„相關軟件程å¼ï¼Œä½†ä¸€åˆ‡ç”±Nokia 自行決定。</p>
+
+<p></p>
+
+<h1>6. 責任åŠå…除的責任</h1>
+
+<p></p>
+
+<p>為了方便用戶存å–,Nokiaå¯èƒ½åŒ…括由第三者æ“有åŠé‹ä½œçš„網絡電å°é€£çµã€‚Nokia ä¸æ“”ä¿å„網絡電å°é€£çµçš„æ“作。此外,與 Nokia 無關的內容並ä¸è¡¨ç¤º Nokia èªå¯å…¶æœ¬èº«çš„內容或包å«ç›¸é—œç”¢å“或æœå‹™çš„內容。</p>
+
+<p></p>
+
+<p>如有任何è¦å®šï¼Œå­˜å–å‰å¿…須閱讀åŠåŒæ„接å—這些使用è¦å®šã€‚您也需è¦åŒæ„æŽ¥å— Nokia å°ç¬¬ä¸‰è€…æ供的æœå‹™å…§å®¹æ²’有任何控制權,且ä¸èƒ½è¦æ±‚ Nokia 為å„網絡電å°æ供的內容負責。</p>
+
+<p></p>
+
+<p>使用æœå‹™å­˜å–網絡電å°çš„內容å¯èƒ½éœ€è¦é€éŽæ‚¨çš„æœå‹™ä¾›æ‡‰å•†çš„網絡傳é€å¤§é‡æ•¸æ“šã€‚有關數據傳é€æ”¶è²»çš„資訊,請å‘您的æœå‹™ä¾›æ‡‰å•†æŸ¥è©¢ã€‚注æ„︰使用æœå‹™å­˜å–網絡電å°éœ€è¦æ›´é«˜çš„傳é€çŽ‡ï¼Œå› æ­¤æ‚¨å¯èƒ½éœ€è¦æ‰¿æ“”更高的在網路上傳輸å°åŒ…的數é‡æ‰€éœ€çš„費用。</p>
+
+<p></p>
+
+<p>使用æœå‹™åœ¨ç¶²è·¯ä¸Šå‚³è¼¸å°åŒ…的數é‡æœ€å°‘包括︰更新電å°æŒ‡å—的內容ã€å¾žç¶²çµ¡é›»å°å–得數據ã€æ”¶é›†çµ±è¨ˆæ•¸æ“šä»¥åŠå‡ç´šç¶²çµ¡å»£æ’­çš„應用程å¼ã€‚</p>
+
+<p></p>
+
+<p>Nokia 無須為您使用æœå‹™åœ¨ç¶²è·¯ä¸Šå‚³è¼¸å°åŒ…的數é‡æ‰€éœ€çš„費用負責。</p>
+
+<p></p>
+
+<p>ä¸æŽ¥å—任何類型的ä¿éšœï¼Œä¸è«–是書é¢åˆ—明的還是éžæ›¸é¢å½¢å¼çš„(包括但ä¸é™æ–¼æ¬Šåˆ©çš„ä¿éšœã€ä¸è¢«ä¾µçŠ¯çš„ä¿éšœã€éžæ›¸é¢å½¢å¼çš„å¯å”®æ€§ä¿éšœæˆ–基於特定用途的é©åˆåº¦ä¿éšœ),å‡èˆ‡æœå‹™çš„供應ã€æº–確度ã€å¯é åº¦æˆ–內容無關。å³ä½¿ NOKIA 有å°é€™äº›å¯èƒ½ç™¼ç”Ÿçš„æ壞æ出建議,也ä¸å¯å› ç‚ºä»»ä½•åœ¨ä½¿ç”¨æˆ–未能使用æœå‹™éŽç¨‹ä¸­æ‰€é€ æˆçš„直接ã€é–“接ã€æ¬¡è¦çš„ã€ç‰¹åˆ¥æˆ–必然的æ壞ã€æ失或商業阻礙而咎責於 NOKIA。有些å¸æ³•æ¬Šä¸å…許排除æŸäº›è²¬ä»»ä¿è­‰æˆ–é™åˆ¶ï¼Œæ‰€ä»¥ä»¥ä¸Šçš„é™åˆ¶æˆ–者排除å¯èƒ½å°æ‚¨ä¸é©ç”¨ã€‚這種情æ³ä¸‹ï¼ŒNOKIA 的責任將é™åˆ¶æ–¼æ³•å¾‹æ‰€è¦å®šçš„最大é™åº¦ã€‚</p>
+
+<p></p>
+
+<p>上述的æ±è¥¿ä¸¦ä¸æœƒæ害任何顧客的權益。上述的æ±è¥¿ä¸¦ä¸é™åˆ¶ Nokia 就其ç–忽而引致的人命傷亡而負責。</p>
+
+<p></p>
+
+<h1>7. è²ç¨±ä¾µçŠ¯ç‰ˆæ¬Šçš„政策</h1>
+
+<p></p>
+
+<p>å‡è‹¥æ‚¨èªç‚ºæ‚¨å·²é ˜æœ‰ç‰ˆæ¬Šçš„作å“被侵犯版權,您å¯ä»¥é€šçŸ¥Nokia,但通知書上需è¦åŒ…括以下資料︰</p>
+
+<p></p>
+
+<p>(1) ç²è²ç¨±è¢«ä¾µçŠ¯å°ˆæœ‰æ¬Šçš„æ“有者授權的代表的簽å或電å­ç°½ç½²ï¼›</p>
+
+<p></p>
+
+<p>(2) 申報被侵犯版權作å“的有關æ述或識別;</p>
+
+<p></p>
+
+<p>(3)申報被侵犯版權物料的æè¿°åŠè­˜åˆ¥ï¼Œä»¥åŠè¶³å¤ ä¸¦åˆç†æ‰¾å‡ºç‰©æ–™ä¸‹è½çš„資訊;</p>
+
+<p></p>
+
+<p>(4) 您的姓åã€ä½å€ã€è¯çµ¡é›»è©±ã€é›»éƒµåœ°å€ä»¥åŠä»»ä½•å…¶ä»–Nokia å¯è¯çµ¡åˆ°æ‚¨çš„資訊;</p>
+
+<p></p>
+
+<p>(5)  您相信您所投訴的æ料在沒有被權æ“有人ã€å…¶ä»£ç†æˆ–法律授權使用的è²æ˜Žï¼›åŠ</p>
+
+<p></p>
+
+<p>(6) 需è¦è²æ˜Žé€šçŸ¥æ›¸å…§çš„資訊正確,並且您是ç²æŽˆæ¬Šä»£è¡¨è¢«ä¾µçŠ¯ç‰ˆæ¬Šçš„專有權æ“有者,å¦å‰‡å¯æŽ¥å—å½è­‰åˆ‘ç½°ï¼›</p>
+
+<p></p>
+
+<p>通知書必須發é€è‡³æˆ‘們指定的代ç†å•†ï¼Œåœ°å€å¦‚下︰</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. 政府法例</h1>
+
+<p></p>
+
+<p>在這些æ¢æ¬¾èˆ‡æ¢ä»¶ä¸­ï¼ŒNokiaå³Nokia Corporation。Nokia 在芬蘭境內營é‹åŠæŽ§åˆ¶æœå‹™ã€‚故此,以上有關æœå‹™çš„資訊視為於芬蘭æ供。</p>
+
+<p></p>
+
+<p>版權 © Nokia Corporation 2006. ä¿ç•™ä¸€åˆ‡æ¬Šåˆ©ã€‚</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/31/internetradio_31.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "总是询问"
+#define qtn_ir_active_idle_data "%0U - %1U:%2U"
+#define qtn_ir_added_multi "已储存%N个电å°"
+#define qtn_ir_added_single "已储存%U"
+#define qtn_ir_addmanually_unnamed "未命å"
+#define qtn_ir_addst_description "æè¿°"
+#define qtn_ir_addst_streamurl "æµåª’体URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "网络电å°"
+#define qtn_ir_ai_radio_not_active "收音机未å¯åŠ¨"
+#define qtn_ir_app_general_err "内部错误。é‡æ–°å¯åŠ¨åº”用程åºã€‚"
+#define qtn_ir_apps_grid "网络电å°"
+#define qtn_ir_apps_list "网络电å°"
+#define qtn_ir_apps_skey "网络电å°"
+#define qtn_ir_apps_standby "网络电å°"
+#define qtn_ir_apps_swins "网络电å°"
+#define qtn_ir_apps_wheel "网络电å°"
+#define qtn_ir_bitrate_best "最佳质é‡"
+#define qtn_ir_bitrate_high "高质é‡"
+#define qtn_ir_bitrate_standard "标准质é‡"
+#define qtn_ir_cost_heading "é‡è¦è¯´æ˜Ž"
+#define qtn_ir_cost_softkey_continue "继续"
+#define qtn_ir_cost_softkey_exit "退出"
+#define qtn_ir_cost_title "网络电å°"
+#define qtn_ir_cost_warning "网络电å°ä½¿ç”¨æ‰‹æœºçš„æ•°æ®è¿žæŽ¥ä¼ é€æ— çº¿ç”µä¿¡å·ã€‚仅建议在具有固定费用的数æ®å¹³å°æ—¶è¿™ä¹ˆåšã€‚如果ä¸ç¡®ä¿¡æ‚¨çš„æ•°æ®è´¹ç”¨ï¼Œè¯·åœ¨ç»§ç»­ä¹‹å‰ä¸Žæ‚¨çš„è¿è¥å•†æ ¸å®žã€‚"
+#define qtn_ir_country_list_expanded "%N个电å°"
+#define qtn_ir_countryregion_title "国家/地区"
+#define qtn_ir_discover_beststations "选择最å—欢迎的电å°"
+#define qtn_ir_discover_country_region "按国家或地区æµè§ˆ"
+#define qtn_ir_discover_genre "按æµæ´¾æµè§ˆ"
+#define qtn_ir_discover_genre_expanded "按æµæ´¾å¯¹ç”µå°æŽ’åº"
+#define qtn_ir_discover_langauge "按语言æµè§ˆ"
+#define qtn_ir_discover_language_expanded "按语言对电å°æŽ’åº"
+#define qtn_ir_discover_staticountryreg "按国家/地区排åºç”µå°"
+#define qtn_ir_discover_title "电å°ç›®å½•"
+#define qtn_ir_discover_top "最å—欢迎的电å°"
+#define qtn_ir_edit_title "编辑电å°"
+#define qtn_ir_err_operation "æ“作出现错误。请å†è¯•ã€‚"
+#define qtn_ir_err_url_unavail "URLä¸å¯ç”¨"
+#define qtn_ir_error_address "网络电å°åœ°å€ä¸æ­£ç¡®"
+#define qtn_ir_error_connection "连接超时。\n请é‡è¯•ã€‚"
+#define qtn_ir_error_favourites "收è—夹中没有足够的空间存储该选择"
+#define qtn_ir_error_general "无法连接到电å°"
+#define qtn_ir_error_isds_unavailable "网络电å°ç›®å½•æœåŠ¡æš‚æ—¶ä¸å¯ç”¨"
+#define qtn_ir_error_notavailable "没有å¯ç”¨çš„æµåª’体链接"
+#define qtn_ir_error_notinisds "æ¡ç›®å·²ä¸å­˜åœ¨"
+#define qtn_ir_error_search "输入æœç´¢æ¡ä»¶"
+#define qtn_ir_findst_addstation "手动增加电å°"
+#define qtn_ir_findst_addtofav "将电å°åŠ è‡³æ”¶è—夹"
+#define qtn_ir_findst_browsesds "æµè§ˆç”µå°ç›®å½•"
+#define qtn_ir_findst_search_ensrhterm "输入æœç´¢æ¡ä»¶"
+#define qtn_ir_findst_softkey_search "æœç´¢"
+#define qtn_ir_findstation_title "查找电å°"
+#define qtn_ir_firstuse_title "欢迎使用网络电å°"
+#define qtn_ir_genre_list_expanded "%N个电å°"
+#define qtn_ir_genre_title "æµæ´¾"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "无历å²è®°å½•"
+#define qtn_ir_homescreen_buffering "正在缓冲"
+#define qtn_ir_homescreen_lastplayed "上次显示项"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "国家或地区:"
+#define qtn_ir_info_details_description "æ述:"
+#define qtn_ir_info_details_genre "æµæ´¾ï¼š"
+#define qtn_ir_info_details_language "语言:"
+#define qtn_ir_info_details_name "å称:"
+#define qtn_ir_info_details_streams "æµåª’体:"
+#define qtn_ir_info_details_title "电å°ä¿¡æ¯"
+#define qtn_ir_info_details_type "类型:"
+#define qtn_ir_info_details_type_isds "目录"
+#define qtn_ir_info_details_type_manual "定义"
+#define qtn_ir_info_details_unnamed "未命å"
+#define qtn_ir_info_softkey_close "关闭"
+#define qtn_ir_language_list_expanded "%N个电å°"
+#define qtn_ir_language_title "语言"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "正在加载"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "正在æœç´¢"
+#define qtn_ir_main_descriptive_text "使用工具æ ä¸­çš„\"查找电å°\"添加电å°"
+#define qtn_ir_main_discover_expanded "å‘现新的广播电å°"
+#define qtn_ir_main_last "上次显示"
+#define qtn_ir_main_now "正在播放"
+#define qtn_ir_main_prog_deleting "正在删除%N"
+#define qtn_ir_main_searchindir "æœç´¢ç›®å½•"
+#define qtn_ir_main_title "网络电å°"
+#define qtn_ir_main_unnamed_station "未命å的电å°"
+#define qtn_ir_memlo_ram_out_of_mem "存储空间ä¸è¶³ï¼Œæ— æ³•è¿›è¡Œæ“作。请先删除一些数æ®ã€‚"
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "下一个电å°"
+#define qtn_ir_now_tooltip_play "播放"
+#define qtn_ir_now_tooltip_previous "上一个电å°"
+#define qtn_ir_now_tooltip_stop "åœæ­¢"
+#define qtn_ir_now_wait_buffering "正在缓冲"
+#define qtn_ir_now_wait_buffering_perc "缓冲%N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "无网络连接"
+#define qtn_ir_nwcontroller_err_nosnaps "未定义接入点"
+#define qtn_ir_options_add "加至收è—夹"
+#define qtn_ir_options_add_manually "手动增加电å°"
+#define qtn_ir_options_change "更改"
+#define qtn_ir_options_clearhistory "清除历å²è®°å½•"
+#define qtn_ir_options_editstation "编辑电å°"
+#define qtn_ir_options_equalizer "å‡è¡¡å™¨"
+#define qtn_ir_options_exit "退出"
+#define qtn_ir_options_findnmusicstore "在音ä¹å•†åº—中查找"
+#define qtn_ir_options_fmtrans "调频å‘射器"
+#define qtn_ir_options_gotomusicstore "转到音ä¹å•†åº—"
+#define qtn_ir_options_help "帮助"
+#define qtn_ir_options_history "历å²è®°å½•"
+#define qtn_ir_options_info "电å°ä¿¡æ¯"
+#define qtn_ir_options_mainview "转到主视图"
+#define qtn_ir_options_mark "标记"
+#define qtn_ir_options_markall "全部标记"
+#define qtn_ir_options_markunmark "标记/å–消标记"
+#define qtn_ir_options_now "转到正在播放"
+#define qtn_ir_options_off "å…³"
+#define qtn_ir_options_on "å¼€"
+#define qtn_ir_options_searchag "é‡æ–°æœç´¢"
+#define qtn_ir_options_select "选择"
+#define qtn_ir_options_settings "设置"
+#define qtn_ir_options_station "电å°"
+#define qtn_ir_options_stereowidening "立体声扩展"
+#define qtn_ir_options_unmark "å–消标记"
+#define qtn_ir_options_unmarkall "全部å–消标记"
+#define qtn_ir_playfail_err "收音机播放失败"
+#define qtn_ir_playlist_title "已接收链接"
+#define qtn_ir_popup_no_results "未找到结果"
+#define qtn_ir_popup_toomany_results "结果太多。请细化æœç´¢æ¡ä»¶ã€‚"
+#define qtn_ir_results_none "找ä¸åˆ°ç›¸ç¬¦çš„广播电å°ã€‚é‡æ–°æœç´¢ã€‚"
+#define qtn_ir_search_result "%0U[08]:%1N"
+#define qtn_ir_search_results "%0U[07]:%1N"
+#define qtn_ir_set_folder_internetradio "网络电å°"
+#define qtn_ir_set_folder_irradio "网络电å°"
+#define qtn_ir_settings_3g "3G连接比特率"
+#define qtn_ir_settings_connec_softkey_ok "确认"
+#define qtn_ir_settings_gprs "GPRS连接比特率"
+#define qtn_ir_settings_network "网络连接"
+#define qtn_ir_settings_snap_default "默认连接"
+#define qtn_ir_settings_title "设置"
+#define qtn_ir_settings_wifi "Wi-Fi连接比特率"
+#define qtn_ir_softkey_back "返回"
+#define qtn_ir_softkey_cancel "å–消"
+#define qtn_ir_softkey_done "完æˆ"
+#define qtn_ir_softkey_no "å¦"
+#define qtn_ir_softkey_options "选项"
+#define qtn_ir_softkey_select "选择"
+#define qtn_ir_softkey_yes "是"
+#define qtn_ir_station_saved "已储存电å°"
+#define qtn_ir_stationlist_nomatches "(未找到匹é…的内容)"
+#define qtn_ir_stations_popup_delete "删除\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "删除%N个电å°ï¼Ÿ"
+#define qtn_ir_stations_popup_removed "已删除%U"
+#define qtn_ir_stations_popup_removed_many "已删除%N个电å°"
+#define qtn_ir_stations_popup_save "是å¦å°†ç”µå°å­˜è‡³æ”¶è—夹?"
+#define qtn_ir_suboptions_delete "删除"
+#define qtn_ir_suboptions_details "详情"
+#define qtn_ir_suboptions_move "移动"
+#define qtn_ir_terms_details "如果åŒæ„您在åˆåŒä¸­è¾“入的以下æ¡æ¬¾å’Œæ¡ä»¶ï¼Œå³å¯èŽ·å¾—适用法律所å…许的扩展æƒé™ï¼Œå¹¶ä¸”在所有é‡è¦æƒåˆ©æ–¹é¢ä¸å†å—到é™åˆ¶æˆ–被ç¦æ­¢"
+#define qtn_ir_terms_heading "æ¡æ¬¾å’Œæ¡ä»¶"
+#define qtn_ir_terms_softkey_accept "接å—"
+#define qtn_ir_terms_softkey_decline "æ‹’ç»"
+#define qtn_ir_title_history "历å²è®°å½•"
+#define qtn_ir_tooltip_addalltofav "将电å°åŠ è‡³æ”¶è—夹"
+#define qtn_ir_tooltip_addstation "手动增加电å°å¹¿æ’­"
+#define qtn_ir_tooltip_addtofav "加至收è—夹"
+#define qtn_ir_tooltip_copy "å¤åˆ¶"
+#define qtn_ir_tooltip_findnstore "在音ä¹å•†åº—中查找"
+#define qtn_ir_tooltip_findst "查找电å°"
+#define qtn_ir_tooltip_history "历å²è®°å½•"
+#define qtn_ir_tooltip_listen "收å¬"
+#define qtn_ir_tooltip_paste "粘贴"
+#define qtn_ir_tooltip_stationde "电å°è¯¦æƒ…"
+#define qtn_ir_top_title "最佳电å°"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "å称"
+#define qtn_ir_url_title "增加电å°"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/31/internetradioai_31.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "互è”网收音机">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/31/terms_31.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>诺基亚网络收音机 (Internet Radio) æœåŠ¡ï¼ˆä¸‹ç§°â€œæœåŠ¡â€ï¼‰å¯ä»¥è®©æ‚¨æŸ¥æ‰¾å’Œä½“验网络电å°çš„内容。使用本æœåŠ¡å³è¡¨æ˜Žæ‚¨å·²ç»é˜…读此å议,ç†è§£å…¶å«ä¹‰ï¼Œå¹¶åŒæ„接å—å…¶æ¡æ¬¾ä¸Žæ¡ä»¶çš„约æŸã€‚请注æ„,如果您ä¸åŒæ„,则您ä¸å¯ä½¿ç”¨æœ¬æœåŠ¡ã€‚</p>
+
+<p></p>
+
+<h1>1. 定义</h1>
+
+<p></p>
+
+<p>网络电å°æ˜¯æŒ‡ä¸€èˆ¬åˆ¶ä½œå£°éŸ³å†…容和相关元数æ®ï¼Œå¹¶ä»¥æµåª’体的形å¼ï¼Œåœ¨ç½‘络上分å‘这些内容和数æ®çš„实体。</p>
+
+<p></p>
+
+<p>网络电å°é“¾æŽ¥ä»£è¡¨ä¸€ä¸ªæˆ–一组资æºå®šä½æ ‡è®°ï¼Œå¯ä»¥è®©ç”¨æˆ·è®¿é—®ç½‘络电å°ä¼ é€çš„æµåª’体内容。</p>
+
+<p></p>
+
+<h1>2. æœåŠ¡</h1>
+
+<p></p>
+
+<p>本æœåŠ¡å¯ä»¥å®žçŽ°ä»¥ä¸‹ç›®çš„:</p>
+<p>1. æµè§ˆç½‘络电å°é“¾æŽ¥ï¼›</p>
+<p>2. 访问网络电å°å†…容。</p>
+
+<p></p>
+
+<h1>3. æœåŠ¡çš„使用</h1>
+
+<p></p>
+
+<p>本æœåŠ¡ä»…ä¾›ç§äººå’Œéžå•†ä¸šç”¨é€”使用。诺基亚拥有本æœåŠ¡çš„所有相关知识产æƒã€‚</p>
+
+<p></p>
+
+<p>诺基亚ä¿ç•™ä¿®æ”¹è¿™äº›æ¡æ¬¾å’Œæ¡ä»¶çš„æƒåˆ©ï¼Œã€‚</p>
+
+<p></p>
+
+<h1>4. éšç§</h1>
+
+<p></p>
+
+<p>诺基亚采用高度ä¿å¯†æ”¿ç­–,致力于ä¿æŠ¤ç”¨æˆ·éšç§ã€‚</p>
+
+<p></p>
+
+<p>为了监控使用情况和改善本æœåŠ¡ï¼Œè¯ºåŸºäºšå¯èƒ½ä¼šæ”¶é›†ä½¿ç”¨æ•°æ®ï¼ŒåŒ…括但ä¸é™äºŽè¢«è®¿é—®çš„网络电å°ã€ç”¨æˆ·åœ¨æ¯ä¸ªç”µå°ä¸Šåœç•™çš„时间和用户收è—项目的有关信æ¯ã€‚</p>
+
+<p></p>
+
+<p>诺基亚并ä¸æ”¶é›†å¯ä»¥ç”¨ä»¥è¯†åˆ«æœ¬æœåŠ¡ç”¨æˆ·èº«ä»½çš„任何信æ¯ã€‚</p>
+
+<p></p>
+
+<h1>5. æœåŠ¡å¼€æ”¾æƒ…况</h1>
+
+<p></p>
+
+<p>本æœåŠ¡æ˜¯ä¸€ç§ä¾¿åˆ©æ€§æœåŠ¡ï¼Œä»…在“å¯èŽ·å¾—â€åŸºç¡€ä¸Šâ€œæŒ‰åŽŸæ ·â€æ供。诺基亚并ä¸ä¿è¯æœ¬æœåŠ¡ä¸ä¼šé—´æ–­æˆ–ä¸å‡ºé”™ã€‚诺基亚ä¿ç•™éšæ—¶ä¿®æ”¹æœ¬æœåŠ¡æˆ–å–消对本æœåŠ¡è®¿é—®çš„æƒåˆ©ã€‚</p>
+
+<p></p>
+
+<p>诺基亚å¯ä»¥è‡ªè¡Œå†³å®šæ供对æœåŠ¡ç›¸å…³åº”用软件的å‡çº§ã€‚</p>
+
+<p></p>
+
+<h1>6. å…责声明与责任</h1>
+
+<p></p>
+
+<p>为了便于您访问,诺基亚å¯èƒ½ä¼šåŠ å…¥ç¬¬ä¸‰æ–¹æ‹¥æœ‰æˆ–è¿è¥çš„网络电å°çš„链接。诺基亚并ä¸ä¿è¯è¿™äº›ç½‘络电å°é“¾æŽ¥èƒ½å¤Ÿæ­£å¸¸ä½¿ç”¨ã€‚此外,éžè¯ºåŸºäºšå†…容的存在,并ä¸ä»£è¡¨è¯ºåŸºäºšè®¤åŒæ­¤ç±»å†…容或其中推è的产å“或æœåŠ¡ã€‚</p>
+
+<p></p>
+
+<p>您必须仔细阅读并接å—æ¯ä¸ªç”µå°çš„使用规则(如有)åŽï¼Œæ‰å¯ä»¥å¯¹å…¶è¿›è¡Œè®¿é—®ã€‚您还承认诺基亚对于第三方æœåŠ¡çš„内容没有控制æƒï¼Œå¹¶å¯¹ç½‘络电å°æ供的内容ä¸æ‰¿å½“任何责任。</p>
+
+<p></p>
+
+<p>使用本æœåŠ¡è®¿é—®ç½‘络电å°çš„内容å¯èƒ½éœ€è¦é€šè¿‡æ‚¨çš„æœåŠ¡æ供商网络传输大é‡æ•°æ®ã€‚关于数æ®ä¼ è¾“收费情况的有关信æ¯ï¼Œè¯·ä¸Žæ‚¨çš„æœåŠ¡æ供商è”系。请注æ„,使用本æœåŠ¡è®¿é—®å‘您æ供比特率更高的数æ®æµçš„网络电å°ï¼Œå¯èƒ½éœ€è¦æ‰¿æ‹…更高的数æ®æµé‡æˆæœ¬ã€‚</p>
+
+<p></p>
+
+<p>与使用本æœåŠ¡æœ‰å…³çš„æ•°æ®æµé‡è‡³å°‘包括:更新电å°ç›®å½•å†…容ã€ä»¥æµåª’体形å¼ä¼ é€ç½‘络电å°æ•°æ®ã€æ”¶é›†ç»Ÿè®¡æ•°æ®å’Œæ›´æ–°ç½‘络收音机应用程åºã€‚</p>
+
+<p></p>
+
+<p>对于您使用本æœåŠ¡çš„相关数æ®æµé‡æˆæœ¬ï¼Œè¯ºåŸºäºšä¸è´Ÿè´£ã€‚</p>
+
+<p></p>
+
+<p>对于本æœåŠ¡çš„å¯ç”¨æ€§ã€å‡†ç¡®æ€§ã€å¯é æ€§æˆ–内容,ä¸ä½œä»»ä½•æ˜Žç¤ºæˆ–暗示的ä¿è¯ï¼ŒåŒ…括但ä¸é™äºŽæƒåˆ©æˆ–éžä¾µæƒæ€§ä¿è¯ï¼Œæˆ–适销性或对特定用途的åˆé€‚性的暗示ä¿è¯ã€‚对于任何直接ã€é—´æŽ¥ã€äº‹æ•…性ã€ç‰¹æ®Šæˆ–因果性æŸä¼¤æˆ–利润æŸå¤±ï¼Œå¯¹äºŽå› ä½¿ç”¨æœ¬æœåŠ¡æˆ–无法使用本æœåŠ¡è€Œäº§ç”Ÿçš„业务中断,诺基亚å‡ä¸æ‰¿å½“责任,å³ä½¿è¯ºåŸºäºšå·²è¢«å‘ŠçŸ¥å­˜åœ¨æ­¤ç±»æŸä¼¤çš„å¯èƒ½æ€§ï¼Œä¹Ÿæ˜¯å¦‚此。有些辖区ä¸å…许排除特定ä¿è¯æˆ–责任é™åˆ¶ï¼Œå› æ­¤ä¸Šè¿°é™åˆ¶æˆ–ä¿è¯æŽ’除表述å¯èƒ½ä¸é€‚用于您。在此情况下,诺基亚的责任将é™äºŽæ³•å¾‹å…许的最大é™åº¦ã€‚</p>
+
+<p></p>
+
+<p>本文中的任何内容å‡ä¸å¯ä¾µå®³ä½œä¸ºæ¶ˆè´¹è€…的任何一方的åˆæ³•æƒåˆ©ã€‚本文中的任何内容å‡ä¸é™åˆ¶è¯ºåŸºäºšåœ¨å› å…¶ç–忽引起死亡或人身伤害情况下的责任。</p>
+
+<p></p>
+
+<h1>7. 关于版æƒä¾µçŠ¯æ–­è¨€çš„ç­–ç•¥</h1>
+
+<p></p>
+
+<p>如果您认为对您拥有正当版æƒçš„作å“的处ç†æ–¹å¼æž„æˆäº†ä¾µæƒï¼Œè¯·å¯ä»¥é€šçŸ¥è¯ºåŸºäºšï¼Œé€šçŸ¥ä¸­åº”包括以下内容:</p>
+
+<p></p>
+
+<p>(1) 代表å—侵害专有æƒæ‰€æœ‰è€…授æƒä»£è¡¨çš„ç­¾å(常规签å或电å­ç­¾å);</p>
+
+<p></p>
+
+<p>(2) å—ä¾µæƒç‰ˆæƒä½œå“的标识或æè¿°ï¼›</p>
+
+<p></p>
+
+<p>(3) ä¾µæƒæ料的标识或æ述和找到这些æ料的充足信æ¯ï¼›</p>
+
+<p></p>
+
+<p>(4) 您的姓åã€åœ°å€ã€ç”µè¯å·ç ã€ç”µå­é‚®ä»¶åœ°å€ä»¥åŠå¯ä»¥è®©è¯ºåŸºäºšè”系到您的任何其他信æ¯ï¼›</p>
+
+<p></p>
+
+<p>(5) 关于您确信é­åˆ°æŠ•è¯‰çš„æ料未ç»ç‰ˆæƒæ‰€æœ‰è€…ã€å…¶ä»£ç†äººæˆ–法律授æƒçš„声明;</p>
+
+<p></p>
+
+<p>(6) 关于通知中的信æ¯æ˜¯å‡†ç¡®çš„,且如是伪è¯ï¼Œæ„¿å—处罚,以åŠæ‚¨æ˜¯å—ä¾µæƒä¸“有æƒæ‰€æœ‰è€…授æƒä»£è¡¨çš„声明。</p>
+
+<p></p>
+
+<p>此通知必须å‘é€åˆ°æˆ‘们的指定代ç†æœºæž„,地å€ä¸ºï¼š</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. 适用法律</h1>
+
+<p></p>
+
+<p>本文æ¡æ¬¾ä¸­ä½¿ç”¨çš„“诺基亚â€æŒ‡è¯ºåŸºäºšå…¬å¸ã€‚诺基亚在芬兰境内è¿è¥å’ŒæŽ§åˆ¶æœ¬æœåŠ¡ã€‚因此,此处包å«çš„æœåŠ¡ä¿¡æ¯åº”视为在芬兰境内æ供。</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. ä¿ç•™æ‰€æœ‰æƒåˆ©ã€‚</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/32/internetradio_32.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "常ã«ç¢ºèª"
+#define qtn_ir_active_idle_data "%0U-%1U : %2U"
+#define qtn_ir_added_multi "%N件ã®ã‚¹ãƒ†ãƒ¼\nションをä¿å­˜ã—ã¾ã—ãŸ"
+#define qtn_ir_added_single "ä¿å­˜ã—ã¾ã—ãŸ\n[%U[39]]"
+#define qtn_ir_addmanually_unnamed "åå‰ãªã—"
+#define qtn_ir_addst_description "詳細データ"
+#define qtn_ir_addst_streamurl "ストリームURL"
+#define qtn_ir_ai_info_nometadata "%0N。%1U"
+#define qtn_ir_ai_info_stationdata "%0N。%1U-%2U : %3U"
+#define qtn_ir_ai_iradio_title "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_ai_radio_not_active "ラジオãŒéžï½±ï½¸ï¾ƒï½¨ï¾Œï¾ž"
+#define qtn_ir_app_general_err "内部エラー。アプリケーショï¾ã‚’å†èµ·å‹•ã—ã¦ãã ã•ã„。"
+#define qtn_ir_apps_grid "ネットラジオ"
+#define qtn_ir_apps_list "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_apps_skey "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_apps_standby "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_apps_swins "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_apps_wheel "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_bitrate_best "最高音質"
+#define qtn_ir_bitrate_high "高音質"
+#define qtn_ir_bitrate_standard "標準音質"
+#define qtn_ir_cost_heading "é‡è¦ãªæ³¨æ„"
+#define qtn_ir_cost_softkey_continue "続行"
+#define qtn_ir_cost_softkey_exit "終了"
+#define qtn_ir_cost_title "ネットラジオ"
+#define qtn_ir_cost_warning "インターãƒãƒƒãƒˆãƒ©ã‚¸ã‚ªã¯ã€é›»è©±æ©Ÿã®ãƒ‡ãƒ¼ã‚¿æŽ¥ç¶šã‚’使用ã—ã¦ãƒ©ã‚¸ã‚ªé€ä¿¡ã‚’è¡Œã„ã¾ã™ã€‚インターãƒãƒƒãƒˆãƒ©ã‚¸ã‚ªã¯å®šé¡ãƒ‡ãƒ¼ã‚¿ãƒ—ランをã”利用ã®å ´åˆã«ã®ã¿ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚データコストãŒä¸æ˜Žãªå ´åˆã¯ã€ç¶šè¡Œã™ã‚‹å‰ã«ã”利用ã®æºå¸¯é›»è©±äº‹æ¥­è€…ã«ã”確èªãã ã•ã„。"
+#define qtn_ir_country_list_expanded "ステーショï¾%N件"
+#define qtn_ir_countryregion_title "国/地域"
+#define qtn_ir_discover_beststations "最é©ãªï½½ï¾ƒï½°ï½¼ï½®ï¾ã®é¸æŠž"
+#define qtn_ir_discover_country_region "国/地域別ã«è¡¨ç¤º"
+#define qtn_ir_discover_genre "ジャンル別ã«è¡¨ç¤º"
+#define qtn_ir_discover_genre_expanded "ステーショï¾ã‚’ジャï¾ï¾™åˆ¥ã«ä¸¦æ›¿ãˆ"
+#define qtn_ir_discover_langauge "言語別ã«è¡¨ç¤º"
+#define qtn_ir_discover_language_expanded "ステーショï¾ã‚’言語別ã«ä¸¦æ›¿ãˆ"
+#define qtn_ir_discover_staticountryreg "ステーショï¾ã‚’市/地域別ã«ä¸¦æ›¿"
+#define qtn_ir_discover_title "局フォルダ"
+#define qtn_ir_discover_top "トップステーション"
+#define qtn_ir_edit_title "ステーショï¾ç·¨é›†"
+#define qtn_ir_err_operation "æ“作中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
+#define qtn_ir_err_url_unavail "利用ã§ããªã„URLã§ã™"
+#define qtn_ir_error_address "ä¸é©åˆ‡ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ©ã‚¸ã‚ª\nステーションアドレスã§ã™"
+#define qtn_ir_error_connection "接続タイムアウトã§ã™ã€‚ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
+#define qtn_ir_error_favourites "「ãŠæ°—ã«å…¥ã‚Šã€ã«é¸æŠžé …目をä¿å­˜ã™ã‚‹å分ãªé ˜åŸŸãŒã‚ã‚Šã¾ã›ã‚“"
+#define qtn_ir_error_general "ステーションã«æŽ¥ç¶šã§ãã¾ã›ã‚“"
+#define qtn_ir_error_isds_unavailable "インターãƒãƒƒãƒˆã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚µãƒ¼ãƒ“スãŒä¸€æ™‚çš„ã«ä½¿ç”¨ã§ãã¾ã›ã‚“"
+#define qtn_ir_error_notavailable "使用å¯èƒ½ãªã‚¹ãƒˆ\nリーミングリンクãŒã‚ã‚Šã¾ã›ã‚“"
+#define qtn_ir_error_notinisds "アイテムを使用ã§ãã¾ã›ã‚“"
+#define qtn_ir_error_search "検索キーワードを入力ã—ã¾ã™"
+#define qtn_ir_findst_addstation "ステーショï¾æ‰‹å‹•è¿½åŠ "
+#define qtn_ir_findst_addtofav "ステーショï¾ã®ãŠæ°—ã«å…¥ã‚Šè¿½åŠ "
+#define qtn_ir_findst_browsesds "ステーショï¾ï¾Œï½«ï¾™ï¾€ï¾žã‚’表示"
+#define qtn_ir_findst_search_ensrhterm "検索キーワードを入力ã—ã¾ã™"
+#define qtn_ir_findst_softkey_search "検索"
+#define qtn_ir_findstation_title "ステーショï¾æ¤œç´¢"
+#define qtn_ir_firstuse_title "ネットラジオ: よã†ã“ã"
+#define qtn_ir_genre_list_expanded "ステーション%N件"
+#define qtn_ir_genre_title "ジャンル"
+#define qtn_ir_history_artist_song "%0U-%1U"
+#define qtn_ir_history_no_history "履歴ãªã—"
+#define qtn_ir_homescreen_buffering "バッファリï¾ï½¸ï¾žä¸­"
+#define qtn_ir_homescreen_lastplayed "最終å†ç”Ÿ"
+#define qtn_ir_info_details_bitrate "%Nkbps:"
+#define qtn_ir_info_details_countryregi "国/地域 :"
+#define qtn_ir_info_details_description "説明 :"
+#define qtn_ir_info_details_genre "ジャンル :"
+#define qtn_ir_info_details_language "言語 :"
+#define qtn_ir_info_details_name "åå‰ :"
+#define qtn_ir_info_details_streams "ストリーム :"
+#define qtn_ir_info_details_title "ステーショï¾æƒ…å ±"
+#define qtn_ir_info_details_type "タイプ :"
+#define qtn_ir_info_details_type_isds "局フォルダ"
+#define qtn_ir_info_details_type_manual "カスタム"
+#define qtn_ir_info_details_unnamed "ç„¡å"
+#define qtn_ir_info_softkey_close "é–‰ã˜ã‚‹"
+#define qtn_ir_language_list_expanded "ステーショï¾%N件"
+#define qtn_ir_language_title "言語"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "読ã¿è¾¼ã¿ä¸­"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "検索中"
+#define qtn_ir_main_descriptive_text "ツールバーã®ã€Œï½½ï¾ƒï½°ï½¼ï½®ï¾æ¤œ\nç´¢ã€ã‹ã‚‰ï½½ï¾ƒï½°ï½¼ï½®ï¾ã‚’追加"
+#define qtn_ir_main_discover_expanded "æ–°è¦ï¾—ジオステーショï¾æ¤œç´¢"
+#define qtn_ir_main_last "最終å†ç”Ÿ"
+#define qtn_ir_main_now "å†ç”Ÿä¸­"
+#define qtn_ir_main_prog_deleting "%N件削除ã—ã¦ã„ã¾ã™"
+#define qtn_ir_main_searchindir "フォルダ内を検索"
+#define qtn_ir_main_title "ネットラジオ"
+#define qtn_ir_main_unnamed_station "åå‰ãªã—ステーショï¾"
+#define qtn_ir_memlo_ram_out_of_mem "メモリä¸è¶³ã®ãŸã‚æ“作を実行ã§ãã¾ã›ã‚“。先ã«ä¸€éƒ¨ã®ãƒ‡ãƒ¼ã‚¿ã‚’削除ã—ã¦ãã ã•\nã„。"
+#define qtn_ir_now_artist_song "%0U-%1U"
+#define qtn_ir_now_bitrate "%Nkbps"
+#define qtn_ir_now_bitrate_mbps "%Nmbps"
+#define qtn_ir_now_bytecountermb "%NMB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1NMB"
+#define qtn_ir_now_fm_frequency "%U[10]MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "次ã®ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³"
+#define qtn_ir_now_tooltip_play "å†ç”Ÿ"
+#define qtn_ir_now_tooltip_previous "å‰ã®ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³"
+#define qtn_ir_now_tooltip_stop "åœæ­¢"
+#define qtn_ir_now_wait_buffering "ãƒãƒƒãƒ•ã‚¡ãƒªãƒ³ã‚°ä¸­"
+#define qtn_ir_now_wait_buffering_perc "ãƒãƒƒãƒ•ã‚¡ä¸­%N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒã‚ã‚Šã¾ã›ã‚“"
+#define qtn_ir_nwcontroller_err_nosnaps "アクセスãƒã‚¤ãƒ³ãƒˆãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#define qtn_ir_options_add "ãŠæ°—ã«å…¥ã‚Šã«è¿½åŠ "
+#define qtn_ir_options_add_manually "ステーショï¾æ‰‹å‹•è¿½åŠ "
+#define qtn_ir_options_change "変更"
+#define qtn_ir_options_clearhistory "履歴をクリア"
+#define qtn_ir_options_editstation "ステーショï¾ã‚’編集"
+#define qtn_ir_options_equalizer "イコライザ"
+#define qtn_ir_options_exit "終了"
+#define qtn_ir_options_findnmusicstore "ï¾ï½­ï½°ï½¼ï¾žï½¯ï½¸ï½½ï¾„アを検索"
+#define qtn_ir_options_fmtrans "FMトランスミッタ"
+#define qtn_ir_options_gotomusicstore "ï¾ï½­ï½°ï½¼ï¾žï½¯ï½¸ï½½ï¾„ï½±ã«ç§»å‹•"
+#define qtn_ir_options_help "ヘルプ"
+#define qtn_ir_options_history "履歴"
+#define qtn_ir_options_info "ステーション情報"
+#define qtn_ir_options_mainview "メインビューã«ç§»å‹•"
+#define qtn_ir_options_mark "マーク"
+#define qtn_ir_options_markall "ã™ã¹ã¦ã‚’マーク"
+#define qtn_ir_options_markunmark "マーク/マーク解除"
+#define qtn_ir_options_now "「å†ç”Ÿä¸­ã€ã‚’é–‹ã"
+#define qtn_ir_options_off "オフ"
+#define qtn_ir_options_on "オン"
+#define qtn_ir_options_searchag "å†åº¦æ¤œç´¢"
+#define qtn_ir_options_select "é¸æŠž"
+#define qtn_ir_options_settings "設定"
+#define qtn_ir_options_station "ステーション"
+#define qtn_ir_options_stereowidening "サラウンド"
+#define qtn_ir_options_unmark "マーク解除"
+#define qtn_ir_options_unmarkall "ã™ã¹ã¦ã®ãƒžãƒ¼ã‚¯è§£é™¤"
+#define qtn_ir_playfail_err "ラジオã®å†ç”Ÿã«å¤±æ•—ã—ã¾ã—ãŸ"
+#define qtn_ir_playlist_title "å—ä¿¡ã—ãŸï¾˜ï¾ï½¸"
+#define qtn_ir_popup_no_results "キーワードã«ä¸€è‡´ã™ã‚‹çµæžœãŒã‚ã‚Šã¾ã›ã‚“"
+#define qtn_ir_popup_toomany_results "キーワードã«ä¸€è‡´ã™ã‚‹çµæžœãŒå¤šã™ãŽã¾ã™ã€‚検索キーワードを絞り込んã§ãã ã•\nã„。"
+#define qtn_ir_results_none "キーワードã«ä¸€è‡´ã™ã‚‹ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã†ä¸€åº¦æ¤œç´¢ã—ã¦ãã ã•ã„。"
+#define qtn_ir_search_result "%0U[08]:çµæžœ%1N件"
+#define qtn_ir_search_results "%0U[07]:%1N"
+#define qtn_ir_set_folder_internetradio "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_set_folder_irradio "ï½²ï¾ï¾€ï½°ï¾ˆï½¯ï¾„ラジオ"
+#define qtn_ir_settings_3g "3G接続ビットレート"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS接続ビットレート"
+#define qtn_ir_settings_network "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶š"
+#define qtn_ir_settings_snap_default "デフォルト接続"
+#define qtn_ir_settings_title "設定"
+#define qtn_ir_settings_wifi "Wi-Fi接続ビットレート"
+#define qtn_ir_softkey_back "戻る"
+#define qtn_ir_softkey_cancel "キャï¾ï½¾ï¾™"
+#define qtn_ir_softkey_done "完了"
+#define qtn_ir_softkey_no "ã„ã„ãˆ"
+#define qtn_ir_softkey_options "オプショï¾"
+#define qtn_ir_softkey_select "é¸æŠž"
+#define qtn_ir_softkey_yes "ã¯ã„"
+#define qtn_ir_station_saved "「ãŠæ°—ã«å…¥ã‚Šã€ã«ä¿å­˜ã—ã¾ã—ãŸ"
+#define qtn_ir_stationlist_nomatches "(ステーションãŒã‚ã‚Šã¾ã›ã‚“)"
+#define qtn_ir_stations_popup_delete "削除ã—ã¾ã™ã‹ï¼Ÿ\n[%U[39]]"
+#define qtn_ir_stations_popup_delete_many "%N件ã®ã‚¹ãƒ†ãƒ¼\nションを削除ã—ã¾ã™ã‹ï¼Ÿ"
+#define qtn_ir_stations_popup_removed "削除ã—ã¾ã—ãŸ\n[%U[39]]"
+#define qtn_ir_stations_popup_removed_many "%N件ã®ã‚¹ãƒ†ãƒ¼\nションを削除ã—ã¾ã—ãŸ"
+#define qtn_ir_stations_popup_save "ステーショï¾ã‚’「ãŠæ°—ã«å…¥ã‚Šã€ã«ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ"
+#define qtn_ir_suboptions_delete "削除"
+#define qtn_ir_suboptions_details "詳細"
+#define qtn_ir_suboptions_move "移動"
+#define qtn_ir_terms_details "以下ã®ä½¿ç”¨è¨±è«¾å¥‘ç´„ã«åˆæ„ã™ã‚‹ã¨ã€é©ç”¨æ³•ã§è¨±å¯ã•ã‚Œã‚‹é™ã‚Šã«ãŠã„ã¦å¥‘ç´„ã‚’ç· çµã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ãŒã€ã“ã®å¥‘ç´„ã«ã‚ˆã£ã¦é‡è¦ãªã‚らゆる権利ã«ã¤ã„ã¦ã•ã‚‰ã«åˆ¶é™ã¾ãŸã¯ç¦æ­¢ã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。"
+#define qtn_ir_terms_heading "利用è¦ç´„"
+#define qtn_ir_terms_softkey_accept "承èª"
+#define qtn_ir_terms_softkey_decline "æ‹’å¦"
+#define qtn_ir_title_history "履歴"
+#define qtn_ir_tooltip_addalltofav "ãŠæ°—ã«å…¥ã‚Šå…¨è¿½åŠ "
+#define qtn_ir_tooltip_addstation "ステーショï¾æ‰‹å‹•è¿½åŠ "
+#define qtn_ir_tooltip_addtofav "ãŠæ°—ã«å…¥ã‚Šã«è¿½åŠ "
+#define qtn_ir_tooltip_copy "コピー"
+#define qtn_ir_tooltip_findnstore "ï¾ï½­ï½°ï½¼ï¾žï½¯ï½¸ï½½ï¾„ア検索"
+#define qtn_ir_tooltip_findst "ステーション検索"
+#define qtn_ir_tooltip_history "履歴"
+#define qtn_ir_tooltip_listen "å†ç”Ÿ"
+#define qtn_ir_tooltip_paste "貼り付ã‘"
+#define qtn_ir_tooltip_stationde "ステーション詳細"
+#define qtn_ir_top_title "トップステーショï¾"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "åå‰"
+#define qtn_ir_url_title "ステーショï¾è¿½åŠ "
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/32/internetradioai_32.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "ラジオ">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/32/terms_32.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>ノキア・インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªã‚µãƒ¼ãƒ“ス(「本サービスã€)ã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã®ãƒ—ログラムをãŠæ¥½ã—ã¿ã„ãŸã ã‘ã¾ã™ã€‚本サービスをãŠä½¿ã„ã„ãŸã ãã“ã¨ã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ã¯ã“ã®å¥‘約書を読んã§ç†è§£ã—ã€æ¡é …ã«å¾“ã†ã“ã¨ã«åŒæ„ã—ãŸã¨è¦‹ãªã•ã‚Œã¾ã™ã€‚åŒæ„ã—ãªã„å ´åˆã¯ã€ã“ã®æœ¬ã‚µãƒ¼ãƒ“スã®ä½¿ç”¨ãŒè¨±å¯ã•ã‚Œãªã„ã“ã¨ã«ã”ç•™æ„ãã ã•ã„。</p>
+
+<p></p>
+
+<h1>1. 定義</h1>
+
+<p></p>
+
+<p>インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã¨ã¯ã€ä¸€èˆ¬çš„ã«éŸ³æ¥½ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŠã‚ˆã³é–¢é€£ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’インターãƒãƒƒãƒˆã‚’通ã˜ã¦ç”Ÿæˆã€ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°é…ä¿¡ã™ã‚‹å®Ÿä½“ã‚’æ„味ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã¸ã®ãƒªãƒ³ã‚¯ã¯ã€ãƒ¦ãƒ¼ã‚¶ã‚’インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã‚ˆã‚Šã‚¹ãƒˆãƒªãƒ¼ãƒ é…ä¿¡ã•ã‚ŒãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã‚¢ã‚¯ã‚»ã‚¹ã•ã›ã‚‹ãƒªã‚½ãƒ¼ã‚¹ãƒ»ãƒ­ã‚±ãƒ¼ã‚¿ã¾ãŸã¯è¤‡æ•°ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ»ãƒ­ã‚±ãƒ¼ã‚¿ã‚’æ„味ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<h1>2. 本サービス</h1>
+
+<p></p>
+
+<p>本サービスã«ã‚ˆã‚Šä»¥ä¸‹ã®ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚</p>
+<p>1. インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã¸ã®ãƒªãƒ³ã‚¯ã®é–²è¦§</p>
+<p>2. インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹</p>
+
+<p></p>
+
+<h1>3. 本サービスã®ä½¿ç”¨</h1>
+
+<p></p>
+
+<p>本サービスã®ä½¿ç”¨ã¯ã€å€‹äººçš„ãŠã‚ˆã³éžå•†æ¥­ç›®çš„ã®ã¿ã«é™ã‚Šè¨±å¯ã•ã‚Œã¾ã™ã€‚ノキアã¯ã€æœ¬ã‚µãƒ¼ãƒ“ス内ãŠã‚ˆã³æœ¬ã‚µãƒ¼ãƒ“スã«å¯¾ã™ã‚‹ã™ã¹ã¦ã®çŸ¥çš„財産権を所有ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>ノキアã¯ã€ã“れらã®æ¡é …を変更をユーザã«é€šçŸ¥ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šå¤‰æ›´ã™ã‚‹æ¨©åˆ©ã‚’有ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<h1>4. プライãƒã‚·ãƒ¼</h1>
+
+<p></p>
+
+<p>堅固ãªç§˜å¯†ä¿æŒãƒãƒªã‚·ãƒ¼ã®å®Ÿè£…ã«ã‚ˆã‚Šã€ãƒŽã‚­ã‚¢ã¯ãƒ¦ãƒ¼ã‚¶ã®ãƒ—ライãƒã‚·ãƒ¼ã‚’ä¿è­·ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>本サービスã®ä½¿ç”¨ãŠã‚ˆã³å¼·åŒ–をモニターã™ã‚‹ãŸã‚ã€ãƒŽã‚­ã‚¢ã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã€å„ラジオ局ã«è²»ã‚„ã•ã‚ŒãŸæ™‚é–“ã€ãŠæ°—ã«å…¥ã‚Šã¨è©•ä¾¡ã•ã‚ŒãŸé …ç›®ã«é–¢ã™ã‚‹æƒ…報をå«ã‚ã¦åˆ¶é™ãªã使用データをåŽé›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>ノキアã¯ã€æœ¬ã‚µãƒ¼ãƒ“スを使用ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ã®å€‹äººæƒ…報を許å¯ã™ã‚‹æƒ…å ±ã®åŽé›†ã¯ã—ã¾ã›ã‚“。</p>
+
+<p></p>
+
+<h1>5. 本サービスå¯ç”¨æ€§</h1>
+
+<p></p>
+
+<p>本サービスã¯ãƒ¦ãƒ¼ã‚¶ã®éƒ½åˆã«åˆã‚ã›ã¦ãŠä½¿ã„ã„ãŸã ã‘ã¾ã™ã€‚本サービスã¯ã€ä¿è¨¼ã‚‚ãªãç¾çŠ¶æœ‰å§¿ã®ã¾ã¾ã§æä¾›ã•ã‚Œã¾ã™ã€‚ノキアã¯ã€æœ¬ã‚µãƒ¼ãƒ“スãŒä¸­æ–­ã—ãŸã‚Šã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸã‚Šã—ãªã„ã“ã¨ã‚’ä¿è¨¼ã—ã¦ã„ã¾ã›ã‚“。ノキアã¯ã€ã„ã¤ã§ã‚‚本サービスを変更ã—ãŸã‚Šã‚¢ã‚¯ã‚»ã‚¹ã‚’中断ã™ã‚‹æ¨©åˆ©ã‚’所有ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>ノキアã¯ã€ç‹¬è‡ªã®æ±ºå®šæ¨©ã«ã‚ˆã‚Šã€æœ¬ã‚µãƒ¼ãƒ“スã«é–¢é€£ã™ã‚‹ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ»ã‚¢ãƒ—リケーションã®ã‚¢ãƒƒãƒ—グレードをæä¾›ã™ã‚‹ã“ã¨ã‚‚ã‚ã‚Šã¾ã™ã€‚</p>
+
+<p></p>
+
+<h1>6. å…責事項ãŠã‚ˆã³è²¬ä»»</h1>
+
+<p></p>
+
+<p>ノキアã¯ã€ãƒ¦ãƒ¼ã‚¶ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„ãŸã ã‘るよã†ã«ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティã«ã‚ˆã‚Šæ‰€æœ‰ã¾ãŸã¯é‹å–¶ã•ã‚Œã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã¸ã®ãƒªãƒ³ã‚¯ã‚’å«ã‚ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚ノキアã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã¸ã®ãƒªãƒ³ã‚¯ãŒä½¿ç”¨å¯èƒ½ã§ã‚ã‚‹ã‹ã©ã†ã‹ã¯ä¿è¨¼ã—ã¾ã›ã‚“。ã¾ãŸã€ãƒŽã‚­ã‚¢ã«é–¢é€£ã—ãªã„コンテンツをノキアãŒæ”¯æŒã™ã‚‹ã€ã¾ãŸã¯ã€ã‹ã‹ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を言åŠã™ã‚‹è£½å“や本サービスをノキアãŒæ”¯æŒã™ã‚‹ã“ã¨ã¯ä¸€åˆ‡ã‚ã‚Šã¾ã›ã‚“。</p>
+
+<p></p>
+
+<p>アクセスã™ã‚‹å‰ã«ã€ãƒ¦ãƒ¼ã‚¶ã¯ã€å„ラジオ局ã®ä½¿ç”¨ãƒ«ãƒ¼ãƒ«ã«ç›®ã‚’通ã—ã€åŒæ„ã™ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚ユーザã¯ã€ãƒŽã‚­ã‚¢ã¯ã‚µãƒ¼ãƒ‰ãƒ‘ーティã®æœ¬ã‚µãƒ¼ãƒ“スã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¨©é™ã¯æŒãŸãšã€ãŠã‚ˆã³ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã«ã‚ˆã£ã¦æä¾›ã•ã‚ŒãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ä½•ã®è²¬ä»»ã‚‚è² ã‚ãªã„ã“ã¨ã«ã‚‚åŒæ„ã—ã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>本サービスを使用ã—インターãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒãŠä½¿ã„ã®ã‚µãƒ¼ãƒ“ス・プロãƒã‚¤ãƒ€ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’通ã˜ã¦å¤§å®¹é‡ãƒ‡ãƒ¼ã‚¿ã®é€ä¿¡ãŒè¡Œã‚れるã“ã¨ã«ãªã‚Šã¾ã™ã€‚データé€ä¿¡ã«ã‹ã‹ã‚‹æ–™é‡‘ã«ã¤ã„ã¦ã€ãŠä½¿ã„ã®ã‚µãƒ¼ãƒ“ス・プロãƒã‚¤ãƒ€ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。高ビットレート・ストリーミングé…ä¿¡ã‚’è¡Œã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã®æœ¬ã‚µãƒ¼ãƒ“スを使用ã—ãŸã”利用ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã«é–¢é€£ã—ã¦é«˜ã‚³ã‚¹ãƒˆã®è² æ‹…ãŒã‹ã‹ã‚‹å¯èƒ½æ€§ã‚‚ã‚ã‚‹ã“ã¨ã«ã”ç•™æ„ãã ã•ã„。</p>
+
+<p></p>
+
+<p>本サービスã®ä½¿ç”¨ã«ä¼´ã†ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã¯ã€å°‘ãªãã¨ã‚‚以下をå«ã¿ã¾ã™ã€‚ラジオ局ディレクトリã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã‚¢ãƒƒãƒ—デートã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªå±€ã‹ã‚‰ã®ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ãƒ»ãƒ‡ãƒ¼ã‚¿ã€é™çš„データã®åŽé›†ã€ãŠã‚ˆã³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ»ãƒ©ã‚¸ã‚ªãƒ»ã‚¢ãƒƒãƒ—リケーションã®ã‚¢ãƒƒãƒ—グレード。</p>
+
+<p></p>
+
+<p>ノキアã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒä½¿ç”¨ã—ãŸæœ¬ã‚µãƒ¼ãƒ“スã«é–¢é€£ã—ã¦ç™ºç”Ÿã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ»ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã«ã‹ã‹ã‚‹ã‚³ã‚¹ãƒˆã«å¯¾ã™ã‚‹è²¬ä»»ã¯ã‚ã‚Šã¾ã›ã‚“。</p>
+
+<p></p>
+
+<p>å¯ç”¨æ€§ã€æ­£ç¢ºã•ã€ä¿¡é ¼æ€§ã€ã¾ãŸã¯æœ¬ã‚µãƒ¼ãƒ“スã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«é–¢é€£ã—ã¦ã€æ‰€æœ‰æ¨©ã€ä»–者ã®æ¨©åˆ©ã‚’侵害ã—ã¦ã„ãªã„ã“ã¨ã€å•†æ¥­æ€§ã¾ãŸã¯ç‰¹å®šç›®çš„ã¨ã®é©åˆæ€§ã¸ã®é»™ç¤ºçš„ãªä¿è¨¼ãªã©ã‚’明示的ã«ã‚‚黙示的ã«ã‚‚ä¿è¨¼ã—ã¾ã›ã‚“ (ãŸã ã—ã“れらã«é™å®šã•ã‚Œãªã„)。ノキアã¯ã€ç›´æŽ¥çš„æ害ã€é–“接的æ害ã€å¶ç™ºçš„æ害ã€ç‰¹åˆ¥æ害ã€çµæžœçš„æ害ã€åˆ©ç›Šæ失ã€ã¾ãŸã¯æœ¬ã‚µãƒ¼ãƒ“スã®ä½¿ç”¨ä¸å¯ã«ã‚ˆã‚‹æ¥­å‹™ä¸­æ–­ã€æœ¬ã‚µãƒ¼ãƒ“ス使用ä¸å¯ã«ã‚ˆã‚‹è²¬ä»»ã«ã¤ã„ã¦ã€ã‹ã‹ã‚‹æ害ã®å¯èƒ½æ€§ã®çŸ¥ã‚‰ã›ã‚’å—ã‘ã¦ã„ãŸå ´åˆã§ã‚‚ã€è²¬ä»»ã‚’è² ã„ã¾ã›ã‚“。一部ã®å›½/å·ž/管轄区域ã§ã¯ä¿è¨¼ã¾ãŸã¯è²¬ä»»ã®é™¤å¤–ã‚’èªã‚ã¦ã„ãªã„ãŸã‚ã€ä¸Šè¨˜ã®åˆ¶é™ã¾ãŸã¯é™¤å¤–ãŒãƒ¦ãƒ¼ã‚¶ã«é©ç”¨ã•ã‚Œãªã„å ´åˆã‚‚ã‚ã‚Šã¾ã™ã€‚ãã®ã‚ˆã†ãªå ´åˆã€ãƒŽã‚­ã‚¢ã®è²¬ä»»ã¯ã€æ³•å¾‹ãŒè¨±ã™å¯èƒ½ãªæœ€å¤§é™ã¾ã§ã«åˆ¶é™ã•ã‚Œã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>ã“ã®å¥‘約書ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã‚‹ã„ã‹ãªã‚‹äº‹é …ã‚‚ã€æ¶ˆè²»è€…ã¨ã—ã¦è¡Œå‹•ã™ã‚‹è€…ã®æ³•å¾‹ä¸Šã®æ¨©åˆ©ã‚’侵害ã—ã¾ã›ã‚“。ã“ã®å¥‘約書ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã‚‹ã„ã‹ãªã‚‹äº‹é …ã‚‚ã€ãƒŽã‚­ã‚¢ã®ä¸æ³•è¡Œç‚ºã«èµ·å› ã™ã‚‹å€‹äººã®æ­»å‚·äº‹æ•…ã«ãŠã‘るノキアã®ãƒ¦ãƒ¼ã‚¶ã«å¯¾ã™ã‚‹è²¬ä»»ã‚’制é™ã—ã¾ã›ã‚“。</p>
+
+<p></p>
+
+<h1>7. 著作権侵害疑惑ã«é–¢ã™ã‚‹ãƒãƒªã‚·ãƒ¼</h1>
+
+<p></p>
+
+<p>ユーザãŒã€è‡ªèº«ã®è‘—作物ãŒãƒãƒ³ãƒ‰ãƒ«ã•ã‚Œã¦ãŠã‚Šã€è‘—作権ãŒä¾µå®³ã•ã‚Œã¦ã„ã‚‹ã¨è€ƒãˆã‚‹å ´åˆã€ãƒŽã‚­ã‚¢ã¾ã§ä»¥ä¸‹ã®æƒ…報を通知ã—ã¦ãã ã•ã„。</p>
+
+<p></p>
+
+<p>(1) 独å æ¨©åˆ©ãŒä¾µå®³ã•ã‚ŒãŸã¨ã™ã‚‹æ‰€æœ‰è€…ã®ä»£è¡Œã¨ãªã‚‹è€…ã®ç‰©ç†çš„ã¾ãŸã¯é›»å­ç½²å</p>
+
+<p></p>
+
+<p>(2) 著作権ãŒä¾µå®³ã•ã‚ŒãŸã¨ã™ã‚‹è‘—作物ã®è¨¼æ˜Žæ›¸ã¾ãŸã¯èª¬æ˜Ž</p>
+
+<p></p>
+
+<p>(3) 著作権を侵害ã—ãŸã¨ã™ã‚‹ç‰©å“ã®è¨¼æ˜Žæ›¸ã¾ãŸã¯èª¬æ˜ŽãŠã‚ˆã³ç‰©å“ã®å ´æ‰€ã‚’åˆç†çš„ã«æŒ‡ã—示ã™ã«å分ãªæƒ…å ±</p>
+
+<p></p>
+
+<p>(4) æ°åã€ä½æ‰€ã€é›»è©±ç•ªå·ã€Eメールアドレスã€ãã®ä»–ã®é€£çµ¡å…ˆæƒ…å ±</p>
+
+<p></p>
+
+<p>(5) 該物å“ã®ä½¿ç”¨ãŒè‘—作権所有者ã€ä»£ç†äººã€ã¾ãŸã¯æ³•å¾‹ã«ã‚ˆã‚Šè¨±å¯ã•ã‚Œã¦ã„ãªã„ã¨ã®ç¢ºä¿¡ã‚’è¿°ã¹ã‚‹ç™ºè¨€æ›¸</p>
+
+<p></p>
+
+<p>(6) ã‹ã‹ã‚‹é€šçŸ¥ã«ã‚る情報ãŒæ­£ç¢ºãªã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã€ãŠã‚ˆã³è‘—作権侵害ã•ã‚ŒãŸã¨ã™ã‚‹ç‹¬å æ¨©ã®æ‰€æœ‰è€…ã®ä»£ç†äººã¨ã—ã¦æ‰¿èªã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’記ã—ãŸç™ºè¨€æ›¸</p>
+
+<p></p>
+
+<p>ã“ã®é€šçŸ¥ã¯ã€ä»¥ä¸‹ã®å½“社ã®å°‚属代ç†äººã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¾ã§ãŠé€ã‚Šãã ã•ã„。</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. 準拠法</h1>
+
+<p></p>
+
+<p>æ¡é …内ã§ä½¿ç”¨ã•ã‚ŒãŸã€ŒãƒŽã‚­ã‚¢ã€ã¯ã€ã€ŒNokia Corporationã€ã‚’æ„味ã—ã¾ã™ã€‚ノキアã¯ã€ãƒ•ã‚£ãƒ³ãƒ©ãƒ³ãƒ‰å†…ã®æ‹ ç‚¹ã‹ã‚‰æœ¬ã‚µãƒ¼ãƒ“スをé‹å–¶ãŠã‚ˆã³ç®¡ç†ã—ã¾ã™ã€‚ãã®ãŸã‚ã€æœ¬å¥‘ç´„ã§æœ¬ã‚µãƒ¼ãƒ“スã«å«ã¾ã‚Œã‚‹æƒ…å ±ã¯ãƒ•ã‚£ãƒ³ãƒ©ãƒ³ãƒ‰ã§æä¾›ã•ã‚Œã‚‹ã¨è¦‹ãªã•ã‚Œã¾ã™ã€‚</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. All rights reserved.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/326/internetradio_326.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Sentiasa tanya"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stesen disimpan"
+#define qtn_ir_added_single "%U[43] disimpan"
+#define qtn_ir_addmanually_unnamed "Tidak bernama"
+#define qtn_ir_addst_description "Penerangan"
+#define qtn_ir_addst_streamurl "URL strim"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio tidak aktif"
+#define qtn_ir_app_general_err "Ralat dalaman. Mulakan semula aplikasi."
+#define qtn_ir_apps_grid "Radio Intr."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Kualiti terbaik"
+#define qtn_ir_bitrate_high "Berkualiti tinggi"
+#define qtn_ir_bitrate_standard "Kualiti standard"
+#define qtn_ir_cost_heading "Notis penting"
+#define qtn_ir_cost_softkey_continue "Teruskan"
+#define qtn_ir_cost_softkey_exit "Keluar"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet menggunakan sambungan data telefon anda untuk pemancaran radio. Ini hanya disyorkan jika anda mempunyai pelan data bayaran tetap. Jika anda tidak pasti tentang kos data anda, periksa dengan operator anda sebelumnya meneruskan."
+#define qtn_ir_country_list_expanded "%N stesen"
+#define qtn_ir_countryregion_title "Negara/wilayh"
+#define qtn_ir_discover_beststations "Pilih stesen terbaik"
+#define qtn_ir_discover_country_region "S/imbs ikt negara/wilayah"
+#define qtn_ir_discover_genre "Semak imbas ikut genre"
+#define qtn_ir_discover_genre_expanded "Stesen disusun ikut genre"
+#define qtn_ir_discover_langauge "Semak imbas ikut bahasa"
+#define qtn_ir_discover_language_expanded "Stesen disusun ikut bahasa"
+#define qtn_ir_discover_staticountryreg "Stsn diisih m'ikt negara/r'tau"
+#define qtn_ir_discover_title "Direktori stsn"
+#define qtn_ir_discover_top "Stesen paling popular"
+#define qtn_ir_edit_title "Edit stesen"
+#define qtn_ir_err_operation "Ralat dalam operasi. Cuba lagi."
+#define qtn_ir_err_url_unavail "URL tidak tersedia"
+#define qtn_ir_error_address "Alamat stesen radio Internet yang tidak betul"
+#define qtn_ir_error_connection "Sambungan tamat masa. Cuba lagi."
+#define qtn_ir_error_favourites "Tidak cukup ruang dalam kegemaran untuk menyimpan pilihan"
+#define qtn_ir_error_general "Gagal menyambung kepada stesen"
+#define qtn_ir_error_isds_unavailable "Perkhidmatan direktori stesen Internet tidak tersedia untuk sementara waktu"
+#define qtn_ir_error_notavailable "Tiada pautan penstriman tersedia"
+#define qtn_ir_error_notinisds "Item tidak lagi tersedia"
+#define qtn_ir_error_search "Masukkan istilah carian"
+#define qtn_ir_findst_addstation "Tmbh stsn secara manual"
+#define qtn_ir_findst_addtofav "T'bah stesen anda ke kegmrn"
+#define qtn_ir_findst_browsesds "S/imbas direktori stesen"
+#define qtn_ir_findst_search_ensrhterm "Masukkan istilah carian"
+#define qtn_ir_findst_softkey_search "Cari"
+#define qtn_ir_findstation_title "Cari stesen"
+#define qtn_ir_firstuse_title "Radio Intr.: S/Dtng"
+#define qtn_ir_genre_list_expanded "%N stesen"
+#define qtn_ir_genre_title "Genre"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Tiada sejarah"
+#define qtn_ir_homescreen_buffering "Menimbal"
+#define qtn_ir_homescreen_lastplayed "T'akhir dimainkn"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Negara/Wilayah:"
+#define qtn_ir_info_details_description "Penerangan:"
+#define qtn_ir_info_details_genre "Genre:"
+#define qtn_ir_info_details_language "Bahasa:"
+#define qtn_ir_info_details_name "Nama:"
+#define qtn_ir_info_details_streams "Strim:"
+#define qtn_ir_info_details_title "Maklmt stesen"
+#define qtn_ir_info_details_type "Jenis:"
+#define qtn_ir_info_details_type_isds "D'ktr stsn"
+#define qtn_ir_info_details_type_manual "T'rfn p'gn"
+#define qtn_ir_info_details_unnamed "Tk b'nm."
+#define qtn_ir_info_softkey_close "Tutup"
+#define qtn_ir_language_list_expanded "%N stesen"
+#define qtn_ir_language_title "Bahasa"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Memuat"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Mencari"
+#define qtn_ir_main_descriptive_text "Gunakan 'Cari stesen' dr bar alat utk m'nmbh stsn"
+#define qtn_ir_main_discover_expanded "Temui stesen radio baru"
+#define qtn_ir_main_last "T'akhir dimainkn"
+#define qtn_ir_main_now "Kini dimainkan"
+#define qtn_ir_main_prog_deleting "Memadam %N"
+#define qtn_ir_main_searchindir "Cari dalam direktori"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Stesen tdk b'nma"
+#define qtn_ir_memlo_ram_out_of_mem "Tidak cukup memori untuk menjalankan operasi. Padam sesetengah data dulu."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%Nkb/s"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Stesen seterusnya"
+#define qtn_ir_now_tooltip_play "Main"
+#define qtn_ir_now_tooltip_previous "Stesen sebelumnya"
+#define qtn_ir_now_tooltip_stop "Henti"
+#define qtn_ir_now_wait_buffering "Menimbal"
+#define qtn_ir_now_wait_buffering_perc "Menimbal %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Tiada sambungan rangkaian"
+#define qtn_ir_nwcontroller_err_nosnaps "Tiada pusat akses ditentukan"
+#define qtn_ir_options_add "Tamb. pd. Kegemaran"
+#define qtn_ir_options_add_manually "Tmbh stsn s'cra manual"
+#define qtn_ir_options_change "Tukar"
+#define qtn_ir_options_clearhistory "Kosongkan sejarah"
+#define qtn_ir_options_editstation "Edit stesen"
+#define qtn_ir_options_equalizer "Penyama"
+#define qtn_ir_options_exit "Keluar"
+#define qtn_ir_options_findnmusicstore "Cari dalam Kedai muzik"
+#define qtn_ir_options_fmtrans "Pemancar FM"
+#define qtn_ir_options_gotomusicstore "Pergi ke Kedai muzik"
+#define qtn_ir_options_help "Bantuan"
+#define qtn_ir_options_history "Sejarah"
+#define qtn_ir_options_info "Maklumat stesen"
+#define qtn_ir_options_mainview "Pergi ke paparan utama"
+#define qtn_ir_options_mark "Tanda"
+#define qtn_ir_options_markall "Tanda semua"
+#define qtn_ir_options_markunmark "Tanda/Buang tanda"
+#define qtn_ir_options_now "Pergi ke Kini dimainkan"
+#define qtn_ir_options_off "Tak aktif"
+#define qtn_ir_options_on "Aktif"
+#define qtn_ir_options_searchag "Cari lagi"
+#define qtn_ir_options_select "Pilih"
+#define qtn_ir_options_settings "Tetapan"
+#define qtn_ir_options_station "Stesen"
+#define qtn_ir_options_stereowidening "Perluasan stereo"
+#define qtn_ir_options_unmark "Buang tanda"
+#define qtn_ir_options_unmarkall "Buang semua tanda"
+#define qtn_ir_playfail_err "Gagal main balik radio"
+#define qtn_ir_playlist_title "P'tn yg ditrma"
+#define qtn_ir_popup_no_results "Tiada hasil dijumpai"
+#define qtn_ir_popup_toomany_results "Terlalu banyak hasil. Perhaluskan istilah carian anda."
+#define qtn_ir_results_none "Tiada stesen radio sepadan yang ditemui. Cari lagi."
+#define qtn_ir_search_result "%0U[06]:%1N hsl"
+#define qtn_ir_search_results "%0U[06]:%1N hsl"
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Kadar bit sambungan 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Kadar bit sambungn GPRS"
+#define qtn_ir_settings_network "Sambungan rangkaian"
+#define qtn_ir_settings_snap_default "Sambungan lalai"
+#define qtn_ir_settings_title "Tetapan"
+#define qtn_ir_settings_wifi "Kadar bit sambungn Wi-Fi"
+#define qtn_ir_softkey_back "Balik"
+#define qtn_ir_softkey_cancel "Batal"
+#define qtn_ir_softkey_done "Selesai"
+#define qtn_ir_softkey_no "Tidak"
+#define qtn_ir_softkey_options "Pilihan"
+#define qtn_ir_softkey_select "Pilih"
+#define qtn_ir_softkey_yes "Ya"
+#define qtn_ir_station_saved "Stesen disimpan"
+#define qtn_ir_stationlist_nomatches "(tiada padanan)"
+#define qtn_ir_stations_popup_delete "Padam\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "Padam %N stesen?"
+#define qtn_ir_stations_popup_removed "%U[43] dipadam"
+#define qtn_ir_stations_popup_removed_many "%N stesen dipadam"
+#define qtn_ir_stations_popup_save "Simpan stesen ke kegemaran?"
+#define qtn_ir_suboptions_delete "Padam"
+#define qtn_ir_suboptions_details "Butiran"
+#define qtn_ir_suboptions_move "Pindah"
+#define qtn_ir_terms_details "Dengan bersetuju pada Terma dan Syarat di bawah anda memasuki kontrak ke takat yang diizinkan oleh undang-undang yang boleh diguna pakai dan tidak dihadkan atau dihalang selanjutnya berkaitan dengan semua hak bahan"
+#define qtn_ir_terms_heading "Terma dan Syarat"
+#define qtn_ir_terms_softkey_accept "Terima"
+#define qtn_ir_terms_softkey_decline "Tolak"
+#define qtn_ir_title_history "Sejarah"
+#define qtn_ir_tooltip_addalltofav "T'bh semua ke kgmrn"
+#define qtn_ir_tooltip_addstation "T'bh stsn s'cra manual"
+#define qtn_ir_tooltip_addtofav "Tambah ke kegemaran"
+#define qtn_ir_tooltip_copy "Salin"
+#define qtn_ir_tooltip_findnstore "Cari dalam Kedai muzik"
+#define qtn_ir_tooltip_findst "Cari stesen"
+#define qtn_ir_tooltip_history "Sejarah"
+#define qtn_ir_tooltip_listen "Dengar"
+#define qtn_ir_tooltip_paste "Tampal"
+#define qtn_ir_tooltip_stationde "Butiran stesen"
+#define qtn_ir_top_title "Stsn plng pplr"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nama"
+#define qtn_ir_url_title "Tambh stesen"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/326/internetradioai_326.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/327/internetradio_327.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Selalu tanya"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stasiun disimpan"
+#define qtn_ir_added_single "%U[43] disimpan"
+#define qtn_ir_addmanually_unnamed "Tanpa nama"
+#define qtn_ir_addst_description "Keterangan"
+#define qtn_ir_addst_streamurl "URL streaming"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio tidak aktif"
+#define qtn_ir_app_general_err "Kesalahan internal. Mulai ulang aplikasi."
+#define qtn_ir_apps_grid "Radio I'net"
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Kualitas terbaik"
+#define qtn_ir_bitrate_high "Kualitas tinggi"
+#define qtn_ir_bitrate_standard "Kualitas standar"
+#define qtn_ir_cost_heading "Pemberitahuan penting"
+#define qtn_ir_cost_softkey_continue "Lanjutkan"
+#define qtn_ir_cost_softkey_exit "Keluar"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet menggunakan sambungan data telepon untuk transmisi radio. Kondisi ini hanya disarankan jika Anda memiliki rencana data biaya tetap. Jika Anda tidak yakin dengan biaya data, hubungi operator sebelum melanjutkan."
+#define qtn_ir_country_list_expanded "%N stasiun"
+#define qtn_ir_countryregion_title "Neg./wilayah"
+#define qtn_ir_discover_beststations "Pilihan stasiun terbaik"
+#define qtn_ir_discover_country_region "Telusur b'dsrkn neg./wlyh"
+#define qtn_ir_discover_genre "Telusur b'dasarkan genre"
+#define qtn_ir_discover_genre_expanded "Stasiun diurut b'dsrkan genre"
+#define qtn_ir_discover_langauge "Telusur b'dsrkan bahasa"
+#define qtn_ir_discover_language_expanded "Stasiun diurut b'dsrkan bhs"
+#define qtn_ir_discover_staticountryreg "Sta. diurut b'dsrkn neg./wlyh"
+#define qtn_ir_discover_title "Dir. stasiun"
+#define qtn_ir_discover_top "Stasiun populer"
+#define qtn_ir_edit_title "Edit stasiun"
+#define qtn_ir_err_operation "Kesalahan saat operasi. Coba lagi."
+#define qtn_ir_err_url_unavail "URL tidak tersedia"
+#define qtn_ir_error_address "Alamat stasiun Radio Internet salah"
+#define qtn_ir_error_connection "Waktu sambungan habis. Coba lagi."
+#define qtn_ir_error_favourites "Kapasitas dalam favorit tidak cukup untuk menyimpan pilihan"
+#define qtn_ir_error_general "Tidak dapat menyambung ke stasiun"
+#define qtn_ir_error_isds_unavailable "Layanan direktori stasiun Internet tidak tersedia untuk sementara waktu"
+#define qtn_ir_error_notavailable "Tidak ada link streaming yang tersedia"
+#define qtn_ir_error_notinisds "Item tidak lagi tersedia"
+#define qtn_ir_error_search "Masukkan istilah pencarian"
+#define qtn_ir_findst_addstation "Tbh stasiun scr manual"
+#define qtn_ir_findst_addtofav "Tbh stasiun Anda ke favorit"
+#define qtn_ir_findst_browsesds "Telusur direktori stasiun"
+#define qtn_ir_findst_search_ensrhterm "Masukkan istilah pencarian"
+#define qtn_ir_findst_softkey_search "Cari"
+#define qtn_ir_findstation_title "Cari stasiun"
+#define qtn_ir_firstuse_title "Radio I'net: Slmt dtg"
+#define qtn_ir_genre_list_expanded "%N stasiun"
+#define qtn_ir_genre_title "Genre"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Tidak ada riwayat"
+#define qtn_ir_homescreen_buffering "Mem-buffer"
+#define qtn_ir_homescreen_lastplayed "Terakhir diputar"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Negara/Wilayah:"
+#define qtn_ir_info_details_description "Keterangan:"
+#define qtn_ir_info_details_genre "Genre:"
+#define qtn_ir_info_details_language "Bahasa:"
+#define qtn_ir_info_details_name "Nama:"
+#define qtn_ir_info_details_streams "Stream:"
+#define qtn_ir_info_details_title "Info stasiun"
+#define qtn_ir_info_details_type "Jenis:"
+#define qtn_ir_info_details_type_isds "Direk. sta."
+#define qtn_ir_info_details_type_manual "Dtn. p'gn"
+#define qtn_ir_info_details_unnamed "Tnp nm"
+#define qtn_ir_info_softkey_close "Tutup"
+#define qtn_ir_language_list_expanded "%N stasiun"
+#define qtn_ir_language_title "Bahasa"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Memuat"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Mencari"
+#define qtn_ir_main_descriptive_text "Gnkan 'Cari stasiun' dari toolbar utk m'tbh stasiun"
+#define qtn_ir_main_discover_expanded "Temukan stasiun radio baru"
+#define qtn_ir_main_last "Terakhir diputar"
+#define qtn_ir_main_now "Sekarang diputar"
+#define qtn_ir_main_prog_deleting "Menghapus %N"
+#define qtn_ir_main_searchindir "Cari dalam direktori"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Stasiun tnp nama"
+#define qtn_ir_memlo_ram_out_of_mem "Memori tidak cukup untuk menjalankan pengoperasian. Hapus dulu sebagian data."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[09] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Stasiun berikutnya"
+#define qtn_ir_now_tooltip_play "Putar"
+#define qtn_ir_now_tooltip_previous "Stasiun sebelumnya"
+#define qtn_ir_now_tooltip_stop "Berhenti"
+#define qtn_ir_now_wait_buffering "Mem-buffer"
+#define qtn_ir_now_wait_buffering_perc "Mem-buffer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Tidak ada sambungan jaringan"
+#define qtn_ir_nwcontroller_err_nosnaps "Tidak ada jalur akses yang ditentukan"
+#define qtn_ir_options_add "Tambahkan ke Favorit"
+#define qtn_ir_options_add_manually "Tbh stasiun scr manual"
+#define qtn_ir_options_change "Ubah"
+#define qtn_ir_options_clearhistory "Hapus riwayat"
+#define qtn_ir_options_editstation "Edit stasiun"
+#define qtn_ir_options_equalizer "Ekualiser"
+#define qtn_ir_options_exit "Keluar"
+#define qtn_ir_options_findnmusicstore "Cari dalam Music store"
+#define qtn_ir_options_fmtrans "Pemancar FM"
+#define qtn_ir_options_gotomusicstore "Ke Music store"
+#define qtn_ir_options_help "Petunjuk"
+#define qtn_ir_options_history "Riwayat"
+#define qtn_ir_options_info "Informasi stasiun"
+#define qtn_ir_options_mainview "Ke tampilan utama"
+#define qtn_ir_options_mark "Tandai"
+#define qtn_ir_options_markall "Tandai semua"
+#define qtn_ir_options_markunmark "Tandai/Hapus tanda"
+#define qtn_ir_options_now "Ke Sekarang diputar"
+#define qtn_ir_options_off "Tidak aktif"
+#define qtn_ir_options_on "Aktif"
+#define qtn_ir_options_searchag "Cari lagi"
+#define qtn_ir_options_select "Pilih"
+#define qtn_ir_options_settings "Pengaturan"
+#define qtn_ir_options_station "Stasiun"
+#define qtn_ir_options_stereowidening "Pelebaran stereo"
+#define qtn_ir_options_unmark "Hapus tanda"
+#define qtn_ir_options_unmarkall "Hapus semua tanda"
+#define qtn_ir_playfail_err "Pemutaran radio gagal"
+#define qtn_ir_playlist_title "Link diterima"
+#define qtn_ir_popup_no_results "Tidak ada hasil yang ditemukan"
+#define qtn_ir_popup_toomany_results "Terlalu banyak hasil. Persempit istilah pencarian Anda."
+#define qtn_ir_results_none "Tidak ada stasiun yang cocok ditemukan. Cari lagi."
+#define qtn_ir_search_result "%0U[06]:%1N hasil"
+#define qtn_ir_search_results "%0U[05]:%1N hasil"
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Kecepatan bit samb. 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Kecepatan bit samb. GPRS"
+#define qtn_ir_settings_network "Sambungan jaringan"
+#define qtn_ir_settings_snap_default "Sambungan default"
+#define qtn_ir_settings_title "Pengaturan"
+#define qtn_ir_settings_wifi "Kecepatan bit samb. Wi-Fi"
+#define qtn_ir_softkey_back "Kembali"
+#define qtn_ir_softkey_cancel "Batal"
+#define qtn_ir_softkey_done "Selesai"
+#define qtn_ir_softkey_no "Tidak"
+#define qtn_ir_softkey_options "Pilihan"
+#define qtn_ir_softkey_select "Pilih"
+#define qtn_ir_softkey_yes "Ya"
+#define qtn_ir_station_saved "Stasiun disimpan"
+#define qtn_ir_stationlist_nomatches "(tidak ada yang cocok)"
+#define qtn_ir_stations_popup_delete "Hapus\n%U[39]?"
+#define qtn_ir_stations_popup_delete_many "Hapus %N stasiun?"
+#define qtn_ir_stations_popup_removed "%U[44] dihapus"
+#define qtn_ir_stations_popup_removed_many "%N stasiun dihapus"
+#define qtn_ir_stations_popup_save "Simpan stasiun ke favorit?"
+#define qtn_ir_suboptions_delete "Hapus"
+#define qtn_ir_suboptions_details "Rincian"
+#define qtn_ir_suboptions_move "Pindah"
+#define qtn_ir_terms_details "Dengan menyetujui Persyaratan dan Ketentuan di bawah ini, Anda terikat dalam kontrak sejauh yang diizinkan oleh undang-undang yang berlaku dan tidak dibatasi atau dilarang lebih lanjut, terkait dengan semua hak utama"
+#define qtn_ir_terms_heading "P'syaratan dan Ketentuan"
+#define qtn_ir_terms_softkey_accept "Terima"
+#define qtn_ir_terms_softkey_decline "Tolak"
+#define qtn_ir_title_history "Riwayat"
+#define qtn_ir_tooltip_addalltofav "Tbhkan sm. ke favorit"
+#define qtn_ir_tooltip_addstation "Tbh stasiun scr manual"
+#define qtn_ir_tooltip_addtofav "Tbhkan ke favorit"
+#define qtn_ir_tooltip_copy "Salin"
+#define qtn_ir_tooltip_findnstore "Cari dalam Music store"
+#define qtn_ir_tooltip_findst "Cari stasiun"
+#define qtn_ir_tooltip_history "Riwayat"
+#define qtn_ir_tooltip_listen "Dengar"
+#define qtn_ir_tooltip_paste "Tempel"
+#define qtn_ir_tooltip_stationde "Rincian stasiun"
+#define qtn_ir_top_title "Sta. populer"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nama"
+#define qtn_ir_url_title "Tbh stasiun"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/327/internetradioai_327.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/33/internetradio_33.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "ถามà¸à¹ˆà¸­à¸™"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N สถานี​ที่​จัด​เà¸à¹‡à¸šâ€‹à¹à¸¥à¹‰à¸§"
+#define qtn_ir_added_single "%U[95] ที่​จัด​เà¸à¹‡à¸šâ€‹à¹à¸¥à¹‰à¸§"
+#define qtn_ir_addmanually_unnamed "ไม่​มี​ชื่อ"
+#define qtn_ir_addst_description "รายละเอียด"
+#define qtn_ir_addst_streamurl "สตรีม URL"
+#define qtn_ir_ai_info_nometadata "%0N %1U"
+#define qtn_ir_ai_info_stationdata "%0N %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_ai_radio_not_active "ยัง​ไม่​ได้​เปิด​ใช้​วิทยุ"
+#define qtn_ir_app_general_err "ผิด​พลาด​ภาย​ใน รีสตาร์ท​à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชั่น"
+#define qtn_ir_apps_grid "วิทยุ​เน็ต"
+#define qtn_ir_apps_list "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_apps_skey "วิทยุ​เน็ต"
+#define qtn_ir_apps_standby "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_apps_swins "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_apps_wheel "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_bitrate_best "คุณภาพ​ดี​ที่​สุด"
+#define qtn_ir_bitrate_high "คุณภาพ​สูง"
+#define qtn_ir_bitrate_standard "คุณภาพ​มาตรà¸à¸²à¸™"
+#define qtn_ir_cost_heading "ประà¸à¸²à¸¨â€‹à¸—ี่​สำคัà¸"
+#define qtn_ir_cost_softkey_continue "ใช้​ต่อ"
+#define qtn_ir_cost_softkey_exit "ออà¸"
+#define qtn_ir_cost_title "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_cost_warning "วิทยุ​อินเทอร์เน็ต​ใช้​à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­â€‹à¸‚้อมูล​ของ​โทรศัพท์​คุณ​เพื่อ​รับ​ส่ง​สัà¸à¸à¸²à¸“​วิทยุ à¹à¸™à¸°à¸™à¸³â€‹à¹€à¸‰à¸žà¸²à¸°â€‹à¹€à¸¡à¸·à¹ˆà¸­â€‹à¸„ุณ​มี​à¹à¸œà¸™â€‹à¸‚้อมูล​ที่​เรียà¸â€‹à¹€à¸à¹‡à¸šâ€‹à¸„่า​ธรรมเนียม​คง​ที่ โปรด​ตรวจ​สอบ​à¸à¸±à¸šâ€‹à¸œà¸¹à¹‰à¹ƒà¸«à¹‰â€‹à¸šà¸£à¸´à¸à¸²à¸£â€‹à¸à¹ˆà¸­à¸™â€‹à¸”ำเนินà¸à¸²à¸£â€‹à¸–้า​คุณ​ไม่​à¹à¸™à¹ˆà¹ƒà¸ˆâ€‹à¹€à¸£à¸·à¹ˆà¸­à¸‡â€‹à¸„่า​ใช้​จ่าย​ข้อมูล"
+#define qtn_ir_country_list_expanded "%N สถานี"
+#define qtn_ir_countryregion_title "ปท./ภูมิภาค"
+#define qtn_ir_discover_beststations "à¸à¸²à¸£â€‹à¹€à¸¥à¸·à¸­à¸â€‹à¸ªà¸–านี​ที่​ดี​ที่​สุด"
+#define qtn_ir_discover_country_region "เรียà¸â€‹à¸”ู​ตาม​ประเทศ/ภูมิภาค"
+#define qtn_ir_discover_genre "เรียà¸â€‹à¸”ู​ตาม​ประเภท"
+#define qtn_ir_discover_genre_expanded "สถานี​ที่​เรียง​ตาม​ประเภท"
+#define qtn_ir_discover_langauge "เรียà¸â€‹à¸”ู​ตาม​ภาษา"
+#define qtn_ir_discover_language_expanded "สถานี​ที่​เรียง​ตาม​ภาษา"
+#define qtn_ir_discover_staticountryreg "สถานี​ที่​เรียง​ตาม​ประเทศ/ภูมิภาค"
+#define qtn_ir_discover_title "ไดเรà¸à¸—อรีสถานี"
+#define qtn_ir_discover_top "สถานี​ชั้น​นำ"
+#define qtn_ir_edit_title "à¹à¸à¹‰à¹„ข​สถานี"
+#define qtn_ir_err_operation "ข้อผิดพลาด​ในà¸à¸²à¸£â€‹à¸—ำงาน ลอง​อีà¸à¸„รั้ง"
+#define qtn_ir_err_url_unavail "ไม่พบ URL"
+#define qtn_ir_error_address "ที่อยู่​สถานี​วิทยุ​อินเทอร์เน็ต​ไม่​ถูà¸à¸•à¹‰à¸­à¸‡"
+#define qtn_ir_error_connection "หมด​เวลา​เชื่อม​ต่อ ลอง​อีà¸â€‹à¸„รั้ง"
+#define qtn_ir_error_favourites "มี​พื้นที่​ใน​รายà¸à¸²à¸£â€‹à¹‚ปรด​เพื่อ​จัด​เà¸à¹‡à¸šâ€‹à¸£à¸²à¸¢à¸à¸²à¸£â€‹à¸—ี่​เลือà¸â€‹à¹„ม่​พอ"
+#define qtn_ir_error_general "ไม่​สามารถ​เชื่อม​ต่อ​สถานี"
+#define qtn_ir_error_isds_unavailable "บริà¸à¸²à¸£â€‹à¹„ดเรà¸à¸—อรี​สถานี​อินเทอร์เน็ต​งด​บริà¸à¸²à¸£â€‹à¸Šà¸±à¹ˆà¸§à¸„ราว"
+#define qtn_ir_error_notavailable "ไม่​มี​ลิงค์​à¸à¸²à¸£â€‹à¸ªà¸•à¸£à¸µà¸¡"
+#define qtn_ir_error_notinisds "ไม่​มี​รายà¸à¸²à¸£â€‹à¸™à¸µà¹‰â€‹à¹à¸¥à¹‰à¸§"
+#define qtn_ir_error_search "ใส่​คำ​ที่​ใช้​ค้น​หา"
+#define qtn_ir_findst_addstation "เพิ่ม​สถานี​ด้วย​ตนเอง"
+#define qtn_ir_findst_addtofav "เพิ่ม​สถานี​คุณ​ใน​รายà¸à¸²à¸£â€‹à¹‚ปรด"
+#define qtn_ir_findst_browsesds "เรียà¸à¸”ู​ไดเรà¸à¸—อรี​สถานี"
+#define qtn_ir_findst_search_ensrhterm "ใส่​คำ​ที่​ใช้​ค้น​หา"
+#define qtn_ir_findst_softkey_search "ค้นหา"
+#define qtn_ir_findstation_title "ค้นหา​สถานี"
+#define qtn_ir_firstuse_title "วิทยุ​เน็ต: ยินดี​ต้อนรับ"
+#define qtn_ir_genre_list_expanded "%N สถานี"
+#define qtn_ir_genre_title "ประเภท"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "ไม่​มี​ประวัติ"
+#define qtn_ir_homescreen_buffering "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸Ÿà¹€à¸Ÿà¸­à¸£à¹Œ"
+#define qtn_ir_homescreen_lastplayed "เล่น​ล่าสุด"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "ประเทศ/ภูมิภาค:"
+#define qtn_ir_info_details_description "คำอธิบาย:"
+#define qtn_ir_info_details_genre "ประเภท:"
+#define qtn_ir_info_details_language "ภาษา:"
+#define qtn_ir_info_details_name "ชื่อ:"
+#define qtn_ir_info_details_streams "สตรีม:"
+#define qtn_ir_info_details_title "ข้อมูล​สถานี"
+#define qtn_ir_info_details_type "ชนิด:"
+#define qtn_ir_info_details_type_isds "ไดฯสถานี"
+#define qtn_ir_info_details_type_manual "ผู้ใช้ระบุ"
+#define qtn_ir_info_details_unnamed "ไม่​มี​ชื่อ"
+#define qtn_ir_info_softkey_close "ปิด"
+#define qtn_ir_language_list_expanded "%N สถานี"
+#define qtn_ir_language_title "ภาษา"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "à¸à¸³à¸¥à¸±à¸‡à¹‚หลด"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา"
+#define qtn_ir_main_descriptive_text "ใช้ \"ค้น​หา​สถานี\" จาà¸â€‹à¹à¸–บ​เครื่องมือ​เพื่อ​เพิ่ม​สถานี"
+#define qtn_ir_main_discover_expanded "ค้น​หา​สถานี​วิทยุ​ใหม่"
+#define qtn_ir_main_last "เล่น​ล่าสุด"
+#define qtn_ir_main_now "à¸à¸³à¸¥à¸±à¸‡à¹€à¸¥à¹ˆà¸™à¸•à¸­à¸™à¸™à¸µà¹‰"
+#define qtn_ir_main_prog_deleting "à¸à¸³à¸¥à¸±à¸‡â€‹à¸¥à¸š %N"
+#define qtn_ir_main_searchindir "ค้น​หา​ใน​ไดเรà¸à¸—อรี"
+#define qtn_ir_main_title "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_main_unnamed_station "สถานี​ที่​ไม่​มี​ชื่อ"
+#define qtn_ir_memlo_ram_out_of_mem "หน่วย​ความ​จำ​ไม่​พอ​ที่​จะ​ดำเนิน​à¸à¸²à¸£ ลบ​บาง​ข้อมูล​ออà¸â€‹à¸à¹ˆà¸­à¸™"
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[18] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "สถานีถัดไป"
+#define qtn_ir_now_tooltip_play "เล่น"
+#define qtn_ir_now_tooltip_previous "สถานีà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
+#define qtn_ir_now_tooltip_stop "หยุด"
+#define qtn_ir_now_wait_buffering "à¸à¸³à¸¥à¸±à¸‡à¸—ำบัฟเฟอร์"
+#define qtn_ir_now_wait_buffering_perc "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸Ÿà¹€à¸Ÿà¸­à¸£à¹Œ %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "ไม่​มี​à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­â€‹à¹€à¸„รือข่าย"
+#define qtn_ir_nwcontroller_err_nosnaps "ไม่​ได้​ระบุ​จุด​เชื่อม​ต่อ"
+#define qtn_ir_options_add "เพิ่ม​ใน​รายà¸à¸²à¸£â€‹à¹‚ปรด"
+#define qtn_ir_options_add_manually "เพิ่ม​สถานี​ด้วย​ตนเอง"
+#define qtn_ir_options_change "เปลี่ยน"
+#define qtn_ir_options_clearhistory "ลบประวัติ"
+#define qtn_ir_options_editstation "à¹à¸à¹‰à¹„ข​สถานี"
+#define qtn_ir_options_equalizer "อีควอไลเซอร์"
+#define qtn_ir_options_exit "ออà¸"
+#define qtn_ir_options_findnmusicstore "ค้น​หา​ใน​ร้าน​ค้า​เพลง"
+#define qtn_ir_options_fmtrans "เครื่องส่ง FM"
+#define qtn_ir_options_gotomusicstore "ไป​ที่​ร้าน​ค้า​เพลง"
+#define qtn_ir_options_help "วิธี​ใช้"
+#define qtn_ir_options_history "ประวัติ"
+#define qtn_ir_options_info "ข้อมูล​สถานี"
+#define qtn_ir_options_mainview "ไป​ที่​มุมมอง​หลัà¸"
+#define qtn_ir_options_mark "เลือà¸"
+#define qtn_ir_options_markall "เลือà¸à¸—ั้งหมด"
+#define qtn_ir_options_markunmark "เลือà¸/ไม่เลือà¸"
+#define qtn_ir_options_now "ไป​ที่​à¸à¸³à¸¥à¸±à¸‡â€‹à¹€à¸¥à¹ˆà¸™â€‹à¸•à¸­à¸™â€‹à¸™à¸µà¹‰"
+#define qtn_ir_options_off "ปิด"
+#define qtn_ir_options_on "เปิด"
+#define qtn_ir_options_searchag "ค้นหาอีà¸"
+#define qtn_ir_options_select "เลือà¸"
+#define qtn_ir_options_settings "à¸à¸²à¸£â€‹à¸•à¸±à¹‰à¸‡â€‹à¸„่า"
+#define qtn_ir_options_station "สถานี"
+#define qtn_ir_options_stereowidening "ขยายà¹à¸–บเสียงสเตอริโอ"
+#define qtn_ir_options_unmark "ไม่เลือà¸"
+#define qtn_ir_options_unmarkall "ไม่เลือà¸à¸—ั้งหมด"
+#define qtn_ir_playfail_err "เล่น​วิทยุ​ไม่​สำเร็จ"
+#define qtn_ir_playlist_title "ลิงค์​ที่​ได้​รับ"
+#define qtn_ir_popup_no_results "ไม่​พบ​ผลลัพธ์"
+#define qtn_ir_popup_toomany_results "ให้​ผลลัพธ์​มาà¸â€‹à¹€à¸à¸´à¸™â€‹à¹„ป à¸à¸³à¸«à¸™à¸”​คำ​ที่​ใช้​ค้น​หา​ใหม่"
+#define qtn_ir_results_none "ไม่​มี​สถานี​ที่​ตรง​à¸à¸±à¸™ ค้น​หา​อีà¸â€‹à¸„รั้ง"
+#define qtn_ir_search_result "%0U[10]:%1N ผลลัพธ์"
+#define qtn_ir_search_results "%0U[08]:%1N ผลลัพธ์"
+#define qtn_ir_set_folder_internetradio "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_set_folder_irradio "วิทยุ​อินเทอร์เน็ต"
+#define qtn_ir_settings_3g "บิต​เรต​à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­ 3G"
+#define qtn_ir_settings_connec_softkey_ok "ตà¸à¸¥à¸‡"
+#define qtn_ir_settings_gprs "บิต​เรต​à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­ GPRS"
+#define qtn_ir_settings_network "à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­â€‹à¹€à¸„รือข่าย"
+#define qtn_ir_settings_snap_default "à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­â€‹à¸—ี่​ตั้ง​ไว้"
+#define qtn_ir_settings_title "à¸à¸²à¸£â€‹à¸•à¸±à¹‰à¸‡â€‹à¸„่า"
+#define qtn_ir_settings_wifi "บิต​เรต​à¸à¸²à¸£â€‹à¹€à¸Šà¸·à¹ˆà¸­à¸¡â€‹à¸•à¹ˆà¸­ Wi-Fi"
+#define qtn_ir_softkey_back "à¸à¸¥à¸±à¸š"
+#define qtn_ir_softkey_cancel "ยà¸à¹€à¸¥à¸´à¸"
+#define qtn_ir_softkey_done "เรียบร้อยà¹à¸¥à¹‰à¸§"
+#define qtn_ir_softkey_no "ไม่"
+#define qtn_ir_softkey_options "ตัว​เลือà¸"
+#define qtn_ir_softkey_select "เลือà¸"
+#define qtn_ir_softkey_yes "ใช่"
+#define qtn_ir_station_saved "จัด​เà¸à¹‡à¸šâ€‹à¸ªà¸–านี​à¹à¸¥à¹‰à¸§"
+#define qtn_ir_stationlist_nomatches "(ไม่พบ)"
+#define qtn_ir_stations_popup_delete "ลบ\n%U[85]?"
+#define qtn_ir_stations_popup_delete_many "ลบ %N สถานี?"
+#define qtn_ir_stations_popup_removed "ลบ %U[83] à¹à¸¥à¹‰à¸§"
+#define qtn_ir_stations_popup_removed_many "ลบ %N สถานี​à¹à¸¥à¹‰à¸§"
+#define qtn_ir_stations_popup_save "จัด​เà¸à¹‡à¸šâ€‹à¸ªà¸–านี​ใน​รายà¸à¸²à¸£â€‹à¹‚ปรด?"
+#define qtn_ir_suboptions_delete "ลบ"
+#define qtn_ir_suboptions_details "ข้อมูล"
+#define qtn_ir_suboptions_move "ย้าย"
+#define qtn_ir_terms_details "ด้วย​à¸à¸²à¸£â€‹à¸¢à¸­à¸¡à¸£à¸±à¸šâ€‹à¹ƒà¸™â€‹à¹€à¸‡à¸·à¹ˆà¸­à¸™à¹„ข​à¹à¸¥à¸°â€‹à¸‚้อ​à¸à¸³à¸«à¸™à¸”​ด้าน​ล่าง คุณ​ได้​เข้า​สู่​สัà¸à¸à¸²â€‹à¸•à¸²à¸¡â€‹à¸‚อบ​ข่าย​ที่​อนุà¸à¸²à¸•â€‹à¹‚ดย​à¸à¸Žà¸«à¸¡à¸²à¸¢ à¹à¸¥à¸°â€‹à¹„ม่​ได้​จำà¸à¸±à¸”​หรือ​เป็น​ข้อห้าม​เมื่อ​พิจารณา​จาà¸â€‹à¸ªà¸´à¸—ธิ์​ทั้งหมด​ใน​วัสดุ"
+#define qtn_ir_terms_heading "เงื่อนไข​à¹à¸¥à¸°â€‹à¸‚้อ​à¸à¸³à¸«à¸™à¸”"
+#define qtn_ir_terms_softkey_accept "ยอมรับ"
+#define qtn_ir_terms_softkey_decline "ปà¸à¸´à¹€à¸ªà¸˜"
+#define qtn_ir_title_history "ประวัติ"
+#define qtn_ir_tooltip_addalltofav "เพิ่ม​ใน​รายà¸à¸²à¸£â€‹à¹‚ปรด"
+#define qtn_ir_tooltip_addstation "เพิ่ม​สถานี​ด้วย​ตนเอง"
+#define qtn_ir_tooltip_addtofav "เพิ่ม​ใน​รายà¸à¸²à¸£â€‹à¹‚ปรด"
+#define qtn_ir_tooltip_copy "คัดลอà¸"
+#define qtn_ir_tooltip_findnstore "ค้น​หา​ใน​ร้าน​ค้า​เพลง"
+#define qtn_ir_tooltip_findst "ค้น​หา​สถานี"
+#define qtn_ir_tooltip_history "ประวัติ"
+#define qtn_ir_tooltip_listen "ฟัง"
+#define qtn_ir_tooltip_paste "วาง"
+#define qtn_ir_tooltip_stationde "ข้อมูล​สถานี"
+#define qtn_ir_top_title "สถานี​ชั้น​นำ"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "ชื่อ"
+#define qtn_ir_url_title "เพิ่ม​สถานี"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/33/internetradioai_33.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "วิทยุ​อินเทอร์เน็ต">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/33/terms_33.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>บริà¸à¸²à¸£ Nokia Internet Radio (“บริà¸à¸²à¸£â€) ช่วยให้คุณสามารถค้นหาà¹à¸¥à¸°à¸£à¸±à¸šà¸Ÿà¸±à¸‡à¸‚้อมูลข่าวสารในสถานีวิทยุบนอินเตอร์เน็ต à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸ˆà¸°à¹€à¸›à¹‡à¸™à¸à¸²à¸£à¸¢à¸­à¸¡à¸£à¸±à¸šà¸§à¹ˆà¸²à¸„ุณได้อ่าน ทำความเข้าใจ à¹à¸¥à¸°à¸¢à¸­à¸¡à¸£à¸±à¸šà¹ƒà¸™à¸‚้อตà¸à¸¥à¸‡ à¹à¸¥à¸°à¹€à¸‡à¸·à¹ˆà¸­à¸™à¹„ขต่างๆ ที่ระบุไว้ในข้อตà¸à¸¥à¸‡à¸‰à¸šà¸±à¸šà¸™à¸µà¹‰à¹à¸¥à¹‰à¸§ ถ้าคุณไม่เห็นชอบ  โปรดทราบว่าคุณไม่ได้รับอนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰</p>
+
+<p></p>
+
+<h1>1. คำจำà¸à¸±à¸”ความ</h1>
+
+<p></p>
+
+<p>สถานีวิทยุบนอินเตอร์เน็ตหมายถึง องค์ประà¸à¸­à¸šà¸—ี่ผลิตà¹à¸¥à¸°à¹€à¸œà¸¢à¹à¸žà¸£à¹ˆà¸‚้อมูลเสียง à¹à¸¥à¸°à¸‚้อมูลประà¸à¸­à¸šà¸—ี่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องผ่านทางอินเตอร์เน็ตในลัà¸à¸©à¸“ะที่เป็นสตรีม</p>
+
+<p></p>
+
+<p>à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยงà¸à¸±à¸šà¸ªà¸–านีวิทยุบนอินเทอร์เน็ตหมายถึง ตัวระบุตำà¹à¸«à¸™à¹ˆà¸‡à¸‚องทรัพยาà¸à¸£ หรือชุดของตัวระบุตำà¹à¸«à¸™à¹ˆà¸‡à¸‚องทรัพยาà¸à¸£ ที่ช่วยให้ผู้ใช้สามารถเข้าถึงเนื้อหาที่ถูà¸à¸ªà¸•à¸£à¸µà¸¡à¹‚ดยสถานีวิทยุบนอินเตอร์เน็ต</p>
+
+<p></p>
+
+<h1>2. บริà¸à¸²à¸£</h1>
+
+<p></p>
+
+<p>บริà¸à¸²à¸£à¸›à¸£à¸°à¸à¸­à¸šà¸”้วยบริà¸à¸²à¸£à¸¢à¹ˆà¸­à¸¢à¸”ังต่อไปนี้:</p>
+<p>1. à¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¸”ูลิงค์ไปยังสถานีวิทยุบนอินเตอร์เน็ต</p>
+<p>2. à¸à¸²à¸£à¹€à¸‚้าถึงเนื้อหาของสถานีวิทยุบนอินเตอร์เน็ต</p>
+
+<p></p>
+
+<h1>3. à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰</h1>
+
+<p></p>
+
+<p>อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰à¹€à¸‰à¸žà¸²à¸°à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¹ˆà¸§à¸™à¸šà¸¸à¸„คลหรือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸—ี่มิใช่เชิงพาณิชย์ โนเà¸à¸µà¸¢à¹€à¸›à¹‡à¸™à¹€à¸ˆà¹‰à¸²à¸‚องลิขสิทธิ์à¹à¸¥à¸°à¸—รัพย์สินทางปัà¸à¸à¸²à¸—ั้งหมด รวมถึงบริà¸à¸²à¸£à¸™à¸µà¹‰</p>
+
+<p></p>
+
+<p>โนเà¸à¸µà¸¢à¸‚อสงวนสิทธิ์ในà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸‡à¸·à¹ˆà¸­à¸™à¹„ขà¹à¸¥à¸°à¸‚้อตà¸à¸¥à¸‡à¹ƒà¸”ๆ โดยจะà¹à¸ˆà¹‰à¸‡à¹ƒà¸«à¹‰à¸„ุณทราบถึงà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸”ังà¸à¸¥à¹ˆà¸²à¸§</p>
+
+<p></p>
+
+<h1>4. ความเป็นส่วนบุคคล</h1>
+
+<p></p>
+
+<p>โนเà¸à¸µà¸¢à¸¡à¸¸à¹ˆà¸‡à¸¡à¸±à¹ˆà¸™à¸—ี่จะปà¸à¸›à¹‰à¸­à¸‡à¸„วามเป็นส่วนบุคคลของผู้ใช้งานโดยà¸à¸²à¸£à¸­à¸­à¸à¸™à¹‚ยบายว่าด้วยความลับของข้อมูลที่เข้มงวด</p>
+
+<p></p>
+
+<p>เพื่อที่จะควบคุมดูà¹à¸¥à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰  โนเà¸à¸µà¸¢à¸­à¸²à¸ˆà¸ˆà¸°à¸£à¸§à¸šà¸£à¸§à¸¡à¸‚้อมูลà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸•à¹ˆà¸²à¸‡à¹†  รวมถึงข้อมูลเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸–านีวิทยุทางอินเตอร์เน็ตที่ถูà¸à¹€à¸‚้าถึง  เวลาที่ใช้ในà¹à¸•à¹ˆà¸¥à¸°à¸ªà¸–านี à¹à¸¥à¸°à¸£à¸²à¸¢à¸à¸²à¸£à¸—ี่ได้รับà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”เป็นรายà¸à¸²à¸£à¹‚ปรด</p>
+
+<p></p>
+
+<p>โนเà¸à¸µà¸¢à¸¡à¸´à¹„ด้รวบรวมข้อมูลที่อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¸¡à¸µà¸à¸²à¸£à¸—วนสอบหรือบ่งชี้ไปถึงผู้ใช้งานในบริà¸à¸²à¸£à¸™à¸µà¹‰</p>
+
+<p></p>
+
+<h1>5. บริà¸à¸²à¸£à¸—ี่เผยà¹à¸žà¸£à¹ˆ</h1>
+
+<p></p>
+
+<p>บริà¸à¸²à¸£à¸™à¸µà¹‰à¹€à¸›à¹‡à¸™à¸šà¸£à¸´à¸à¸²à¸£à¸—ี่เอื้ออำนวยความสะดวà¸à¹ƒà¸«à¹‰à¸à¸±à¸šà¸„ุณ เป็นบริà¸à¸²à¸£à¸—ี่ให้ในลัà¸à¸©à¸“ะ "ที่เป็น" à¹à¸¥à¸°à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£ "ตามที่มี" โนเà¸à¸µà¸¢à¸¡à¸´à¹„ด้รับประà¸à¸±à¸™à¸§à¹ˆà¸²à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰à¸ˆà¸°à¸›à¸£à¸²à¸¨à¸ˆà¸²à¸à¸à¸²à¸£à¸‚ัดจังหวะหรือข้อผิดพลาด โนเà¸à¸µà¸¢à¸‚อสงวนสิทธิ์ในà¸à¸²à¸£à¸—บทวนบริà¸à¸²à¸£ หรือ ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸‚้าถึง ณ เวลาใดๆ</p>
+
+<p></p>
+
+<p>โนเà¸à¸µà¸¢à¸­à¸²à¸ˆà¸ˆà¸°à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸­à¸±à¸›à¹€à¸à¸£à¸”ซอฟต์à¹à¸§à¸£à¹Œà¸—ี่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¸à¸²à¸£à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£ ตามà¸à¸²à¸£à¸žà¸´à¸ˆà¸²à¸£à¸“าของโนเà¸à¸µà¸¢</p>
+
+<p></p>
+
+<h1>6. ความไม่รับผิดชอบ</h1>
+
+<p></p>
+
+<p>เพื่อให้ง่ายà¹à¸à¹ˆà¸à¸²à¸£à¹€à¸‚้าถึง  โนเà¸à¸µà¸¢à¸­à¸²à¸ˆà¸£à¸§à¸¡à¸¥à¸´à¸‡à¸„์à¸à¸²à¸£à¹€à¸‚้าถึงสถานีวิทยุบนอินเตอร์เน็ตที่บุคคลที่สามเป็นเจ้าของà¹à¸¥à¸°à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸­à¸¢à¸¹à¹ˆ โนเà¸à¸µà¸¢à¸ˆà¸°à¹„ม่รับผิดชอบว่าลิงค์ที่เชื่อมโยงไปยังสถานีวิทยุบนอินเตอร์เน็ตจะทำงานได้ตลอดเวลา นอà¸à¸ˆà¸²à¸à¸™à¸µà¹‰  เนื้อหาที่ไม่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¹‚นเà¸à¸µà¸¢à¸¡à¸´à¹„ด้หมายความว่า โนเà¸à¸µà¸¢à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¹€à¸«à¸¥à¹ˆà¸²à¸™à¸±à¹‰à¸™ หรือสนับสนุนผลิตภัณฑ์à¹à¸¥à¸°à¸šà¸£à¸´à¸à¸²à¸£à¸—ี่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¹€à¸«à¸¥à¹ˆà¸²à¸™à¸±à¹‰à¸™</p>
+
+<p></p>
+
+<p>คุณจะต้องทบทวนà¹à¸¥à¸°à¸›à¸à¸´à¸šà¹‰à¸•à¸´à¸•à¸²à¸¡à¸à¸Žà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸‚องà¹à¸•à¹ˆà¸¥à¸°à¸ªà¸–านี  à¸à¹ˆà¸­à¸™à¸—ี่จะเข้าถึงสถานีนั้น คุณเห็นด้วยว่า โนเà¸à¸µà¸¢à¸¡à¸´à¹„ด้มีอำนาจในà¸à¸²à¸£à¸„วบคุมเนื้อหาของบริà¸à¸²à¸£à¸‚องบุคคลที่สาม à¹à¸¥à¸°à¹„ม่สามารถรับผิดชอบต่อเนื้อหาที่เผยà¹à¸žà¸£à¹ˆà¹‚ดยสถานีวิทยุบนอินเตอร์เน็ตเหล่านั้น</p>
+
+<p></p>
+
+<p>à¸à¸²à¸£à¹€à¸‚้าถึงเนื้อหาของสถานีวิทยุบนอินเตอร์เน็ตผ่านทางบริà¸à¸²à¸£à¸™à¸µà¹‰ อาจเà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸‚้อมูลจำนวนมาà¸à¹„ปยังเครือข่ายผู้ให้บริà¸à¸²à¸£à¸‚องคุณ โปรดติดต่อผู้บริà¸à¸²à¸£à¸‚องคุณเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸­à¸±à¸•à¸£à¸²à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸‚้อมูลดังà¸à¸¥à¹ˆà¸²à¸§ โปรดทราบว่า บริà¸à¸²à¸£à¸ªà¸–านีวิทยุบนอินเตอร์เน็ตจำเป็นต้องใช้อัตราà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸‚้อมูลสูง ซึ่งเป็นผลให้มีค่าใช้จ่ายที่สูงขึ้นเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸à¸²à¸£à¸ˆà¸£à¸²à¸ˆà¸£à¸‚้อมูล</p>
+
+<p></p>
+
+<p>à¸à¸²à¸£à¸ˆà¸£à¸²à¸ˆà¸£à¸‚้อมูลที่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰à¸­à¸²à¸ˆà¸£à¸§à¸¡à¸–ึงสิ่งต่อไปนี้: à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¸‚องรายà¸à¸²à¸£à¸ªà¸–านีวิทยุ  à¸à¸²à¸£à¸ªà¸•à¸£à¸µà¸¡à¸‚้อมูลจาà¸à¸ªà¸–านีวิทยุบนอินเตอร์เน็ต  à¸à¸²à¸£à¸£à¸§à¸šà¸£à¸§à¸¡à¸‚้อมูลสถิติ  à¹à¸¥à¸°à¸à¸²à¸£à¸­à¸±à¸›à¹€à¸à¸£à¸”โปรà¹à¸à¸£à¸¡à¸§à¸´à¸—ยุบนอินเตอร์เน็ต</p>
+
+<p></p>
+
+<p>โนเà¸à¸µà¸¢à¸ˆà¸°à¹„ม่รับผิดชอบต่อค่าใช้จ่ายของจราจรข้อมูลที่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸‚องคุณ</p>
+
+<p></p>
+
+<p>โนเà¸à¸µà¸¢à¹„ม่มีà¸à¸²à¸£à¸£à¸±à¸šà¸›à¸£à¸°à¸à¸±à¸™à¹ƒà¸”ๆ ทั้งà¹à¸šà¸šà¸Šà¸±à¸”à¹à¸ˆà¹‰à¸‡à¸«à¸£à¸·à¸­à¹€à¸›à¹‡à¸™à¸™à¸±à¸¢  รวมถึงà¸à¸²à¸£à¸£à¸±à¸šà¸›à¸£à¸°à¸à¸±à¸™à¸§à¹ˆà¸²à¸ˆà¸°à¹„ม่มีà¸à¸²à¸£à¸¥à¸°à¹€à¸¡à¸´à¸” หรือ à¸à¸²à¸£à¸£à¸±à¸šà¸›à¸£à¸°à¸à¸±à¸™à¹à¸šà¸šà¹€à¸›à¹‡à¸™à¸™à¸±à¸¢à¹€à¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸„วามสามารถเชิงพาณิชย์ หรือ ความเหมาะสมในà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸§à¸±à¸•à¸–ุประสงค์เฉพาะใดๆ  ที่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¸„วามสามารถในà¸à¸²à¸£à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£ ความถูà¸à¸•à¹‰à¸­à¸‡  ความเชื่อถือได้ หรือเนื้อหาของบริà¸à¸²à¸£ โนเà¸à¸µà¸¢à¸ˆà¸°à¹„ม่รับผิดชอบต่อความเสียหายที่เà¸à¸´à¸”ขึ้น ทั้งทางตรง ทางอ้อม พิเศษ หรือผลเสียหายที่เà¸à¸´à¸”ตามมา  รวมถึง à¸à¸²à¸£à¸ªà¸¹à¸à¹€à¸ªà¸µà¸¢à¸œà¸¥à¸à¸³à¹„ร หรือà¸à¸²à¸£à¸‚ัดจังหวะทางธุรà¸à¸´à¸ˆ ที่เà¸à¸´à¸”ขึ้นจาà¸à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸«à¸£à¸·à¸­à¸„วามไม่สามารถในà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸šà¸£à¸´à¸à¸²à¸£à¸™à¸µà¹‰  à¹à¸¡à¹‰à¸§à¹ˆà¸²à¹‚นเà¸à¸µà¸¢à¸ˆà¸°à¹„ด้รับà¸à¸²à¸£à¹à¸™à¸°à¸™à¸³à¸§à¹ˆà¸²à¸¡à¸µà¸„วามเสี่ยงในà¸à¸²à¸£à¹€à¸à¸´à¸”ความเสียหายดังà¸à¸¥à¹ˆà¸²à¸§à¹à¸¥à¹‰à¸§à¸à¹‡à¸•à¸²à¸¡ ศาลปà¸à¸„รองบางà¹à¸«à¹ˆà¸‡à¹„ม่อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¸¡à¸µà¸à¸²à¸£à¸¢à¸à¹€à¸§à¹‰à¸™à¸à¸²à¸£à¸£à¸±à¸šà¸›à¸£à¸°à¸à¸±à¸™à¸šà¸²à¸‡à¸­à¸¢à¹ˆà¸²à¸‡ หรือจำà¸à¸±à¸”ความรับผิดชอบ  ดังนั้น ข้อจำà¸à¸±à¸”หรือข้อยà¸à¹€à¸§à¹‰à¸™à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸‚้างต้นอาจใช้ไม่ได้à¸à¸±à¸šà¸„ุณ ดังนั้น ความรับผิดชอบของโนเà¸à¸µà¸¢à¸•à¹ˆà¸­à¸à¸£à¸“ีดังà¸à¸¥à¹ˆà¸²à¸§à¸ˆà¸°à¸–ูà¸à¸ˆà¸³à¸à¸±à¸”มีขอบเขตสูงสุดที่อนุà¸à¸²à¸•à¹‚ดยà¸à¸Žà¸«à¸¡à¸²à¸¢</p>
+
+<p></p>
+
+<p>ไม่มีข้อà¸à¸³à¸«à¸™à¸”ใดๆ ในที่นี้ที่ทำให้เà¸à¸´à¸”ข้อเสียหายต่อสิทธิ์ทางà¸à¸Žà¸«à¸¡à¸²à¸¢à¸‚องบุคคลที่เป็นลูà¸à¸„้า ไม่มีข้อà¸à¸³à¸«à¸™à¸”ใดๆ ในที่นี้ที่จำà¸à¸±à¸”ความรับผิดชอบของโนเà¸à¸µà¸¢à¸—ี่มีต่อคุณ ในà¸à¸£à¸“ีที่เà¸à¸´à¸”อันตรายถึงตาย จาà¸à¸„วามประมาทเลินเล่อของโนเà¸à¸µà¸¢</p>
+
+<p></p>
+
+<h1>7. นโยบายที่เà¸à¸µà¹ˆà¸¢à¸§à¸‚้องà¸à¸±à¸šà¸‚้อà¸à¸¥à¹ˆà¸²à¸§à¸«à¸²à¹€à¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸à¸²à¸£à¸¥à¸°à¹€à¸¡à¸´à¸”ลิขสิทธิ์</h1>
+
+<p></p>
+
+<p>ถ้าคุณเชื่อว่างานลิขสิทธิ์ของคุณถูà¸à¸¥à¸°à¹€à¸¡à¸´à¸”  คุณจะต้องà¹à¸ˆà¹‰à¸‡à¹ƒà¸«à¹‰à¹‚นเà¸à¸µà¸¢à¸—ราบ โดยà¹à¸™à¸šà¸‚้อมูลหลัà¸à¸à¸²à¸™à¸”ังต่อไปนี้:</p>
+
+<p></p>
+
+<p>(1) ลายมือที่เซ็นลงà¸à¸£à¸°à¸”าษหรืออิเล็à¸à¸—รอนิà¸à¸ªà¹Œ ของบุคคลที่มีสิทธิ์เป็นตัวà¹à¸—นของเจ้าของลิขสิทธิ์ที่ถูà¸à¸à¸¥à¹ˆà¸²à¸§à¸«à¸²à¸§à¹ˆà¸²à¸¡à¸µà¸à¸²à¸£à¸¥à¸°à¹€à¸¡à¸´à¸”;</p>
+
+<p></p>
+
+<p>(2) รายละเอียดของงานลิขสิทธิ์ที่ถูà¸à¸à¸¥à¹ˆà¸²à¸§à¸­à¹‰à¸²à¸‡à¸§à¹ˆà¸²à¸¡à¸µà¸à¸²à¸£à¸¥à¸°à¹€à¸¡à¸´à¸”;</p>
+
+<p></p>
+
+<p>(3) รายละเอียดของเอà¸à¸ªà¸²à¸£à¸«à¸£à¸·à¸­à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¸—ี่ถูà¸à¸à¸¥à¹ˆà¸²à¸§à¸­à¹‰à¸²à¸‡à¸§à¹ˆà¸²à¸¡à¸µà¸à¸²à¸£à¸¥à¸°à¹€à¸¡à¸´à¸” à¹à¸¥à¸°à¸‚้อมูลที่เพียงพอในà¸à¸²à¸£à¸Šà¸µà¹‰à¸šà¹ˆà¸‡à¹€à¸­à¸à¸ªà¸²à¸£à¸«à¸£à¸·à¸­à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¸™à¸±à¹‰à¸™à¹†;</p>
+
+<p></p>
+
+<p>(4) ชื่อ ที่อยู่ โทรศัพท์ à¹à¸¥à¸°à¸—ี่อยู่อีเมลของคุณ รวมทั้งข้อมูลอื่นๆ ที่ช่วยให้โนเà¸à¸µà¸¢à¸ªà¸²à¸¡à¸²à¸£à¸–ติดต่อà¸à¸±à¸šà¸„ุณ;</p>
+
+<p></p>
+
+<p>(5) ข้อความที่à¹à¸ªà¸”งว่าคุณมีเจตนาที่ดี à¹à¸¥à¸°à¹€à¸Šà¸·à¹ˆà¸­à¸§à¹ˆà¸²à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‚้อมูลในลัà¸à¸©à¸“ะที่à¸à¸¥à¹ˆà¸²à¸§à¸­à¹‰à¸²à¸‡à¸™à¸±à¹‰à¸™ ไม่ได้รับอนุà¸à¸²à¸•à¹‚ดยเจ้าของลิขสิทธิ์ ตัวà¹à¸—น  หรือตามà¸à¸Žà¸«à¸¡à¸²à¸¢  à¹à¸¥à¸°</p>
+
+<p></p>
+
+<p>(6) ข้อความที่รับรองว่า ข้อมูลà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¸™à¸±à¹‰à¸™à¸¡à¸µà¸„วามถูà¸à¸•à¹‰à¸­à¸‡ à¹à¸¥à¸°à¸«à¸²à¸à¹à¸ˆà¹‰à¸‡à¸‚้อความเท็จ จะต้องถูà¸à¸£à¸°à¸§à¸²à¸‡à¹‚ทษ  รวมทั้งคุณจะต้องรับรองว่า คุณมีสิทธิ์ในà¸à¸²à¸£à¹€à¸›à¹‡à¸™à¸•à¸±à¸§à¹à¸—นของเจ้าของลิขสิทธิ์นั้นà¹à¸•à¹ˆà¹€à¸žà¸µà¸¢à¸‡à¸œà¸¹à¹‰à¹€à¸”ียวในà¸à¸²à¸£à¸à¸¥à¹ˆà¸²à¸§à¸«à¸²à¸à¸²à¸£à¸¥à¸°à¹€à¸¡à¸´à¸”นั้นๆ</p>
+
+<p></p>
+
+<p>จดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸ˆà¸°à¸•à¹‰à¸­à¸‡à¸–ูà¸à¸ªà¹ˆà¸‡à¹„ปที่ตัวà¹à¸—นที่ได้รับมอบหมายของเรา:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. à¸à¸Žà¸«à¸¡à¸²à¸¢à¸—ี่ควบคุม</h1>
+
+<p></p>
+
+<p>ตามที่ใช้ในเงื่อนไขà¹à¸¥à¸°à¸‚้อตà¸à¸¥à¸‡ "โนเà¸à¸µà¸¢" หมายถึง Nokia Corporation โนเà¸à¸µà¸¢à¹€à¸›à¸´à¸”ดำเนินà¸à¸²à¸£à¹à¸¥à¸°à¸„วบคุมบริà¸à¸²à¸£à¸™à¸µà¹‰à¸ˆà¸²à¸à¸ªà¸–านที่ในประเทศฟินà¹à¸¥à¸™à¸”์ ดังนั้น ข้อมูลที่อยู่ในบริà¸à¸²à¸£à¸™à¸µà¹‰à¸–ือว่าให้บริà¸à¸²à¸£à¹ƒà¸™à¸›à¸£à¸°à¹€à¸—ศฟินà¹à¸¥à¸™à¸”์</p>
+
+<p></p>
+
+<p>ลิขสิทธิ์ถูà¸à¸•à¹‰à¸­à¸‡ © Nokia Corporation 2006 สงวนลิขสิทธิ์</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/37/internetradio_37.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "السؤال دائمًا"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "تم Ø­Ùظ %N محطة"
+#define qtn_ir_added_single "تم Ø­Ùظ %U[78]"
+#define qtn_ir_addmanually_unnamed "بلا اسم"
+#define qtn_ir_addst_description "الوصÙ"
+#define qtn_ir_addst_streamurl "عنوان URL التدÙÙ‚"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U -%2U: %3U"
+#define qtn_ir_ai_iradio_title "راديو الإنترنت"
+#define qtn_ir_ai_radio_not_active "الراديو غير نشط"
+#define qtn_ir_app_general_err "خطأ داخلي. أعد بدء تشغيل التطبيق."
+#define qtn_ir_apps_grid "راديو الإنترنت"
+#define qtn_ir_apps_list "راديو الإنترنت"
+#define qtn_ir_apps_skey "راديو الإنترنت"
+#define qtn_ir_apps_standby "راديو الإنترنت"
+#define qtn_ir_apps_swins "راديو الإنترنت"
+#define qtn_ir_apps_wheel "راديو الإنترنت"
+#define qtn_ir_bitrate_best "Ø£Ùضل جودة"
+#define qtn_ir_bitrate_high "جودة عالية"
+#define qtn_ir_bitrate_standard "جودة قياسية"
+#define qtn_ir_cost_heading "ملاحظة هامة"
+#define qtn_ir_cost_softkey_continue "استمرار"
+#define qtn_ir_cost_softkey_exit "خروج"
+#define qtn_ir_cost_title "راديو الإنترنت"
+#define qtn_ir_cost_warning "يستخدم راديو الإنترنت اتصال بيانات هاتÙÙƒ لعمليات إرسال الراديو. يوصى بذلك Ùقط ÙÙŠ حالة وجود خطة رسوم بيانات محددة. وإذا لم تكن متأكدًا من تكالي٠بياناتك، Ùقم بمراجعة المشغل قبل المتابعة."
+#define qtn_ir_country_list_expanded "%N محطة"
+#define qtn_ir_countryregion_title "البلدان/المناطق"
+#define qtn_ir_discover_beststations "اختيار Ø£Ùضل المحطات"
+#define qtn_ir_discover_country_region "استعراض حسب البلد/المنطقة"
+#define qtn_ir_discover_genre "استعراض حسب النوع"
+#define qtn_ir_discover_genre_expanded "المحطات مصنÙØ© حسب النوع"
+#define qtn_ir_discover_langauge "استعراض حسب اللغة"
+#define qtn_ir_discover_language_expanded "المحطات مصنÙØ© حسب اللغة"
+#define qtn_ir_discover_staticountryreg "المحطا. مصنÙØ© حسب البلد/المناط"
+#define qtn_ir_discover_title "دليل المحطات"
+#define qtn_ir_discover_top "المحطات الأشهر"
+#define qtn_ir_edit_title "تعديل محطة"
+#define qtn_ir_err_operation "خطأ ÙÙŠ التشغيل. أعد المحاولة."
+#define qtn_ir_err_url_unavail "عنوان URL غير متاح"
+#define qtn_ir_error_address "عنوان غير صحيح لمحطة راديو الإنترنت"
+#define qtn_ir_error_connection "انتهت مهلة الاتصال. أعد المحاولة."
+#define qtn_ir_error_favourites "لا توجد مساحة كاÙية ÙÙŠ المÙضلة لحÙظ اختيارك"
+#define qtn_ir_error_general "يتعذر الاتصال بالمحطة"
+#define qtn_ir_error_isds_unavailable "خدمة دليل محطة الإنترنت غير متاحة مؤقتًا"
+#define qtn_ir_error_notavailable "لا توجد ارتباطات تدÙÙ‚ متاحة"
+#define qtn_ir_error_notinisds "لم يعد العنصر متاحًا"
+#define qtn_ir_error_search "أدخل كلمة بحث"
+#define qtn_ir_findst_addstation "إضاÙØ© المحطة يدويًا"
+#define qtn_ir_findst_addtofav "أض٠محطتك إلى المÙضلة"
+#define qtn_ir_findst_browsesds "استعراض دليل المحطات"
+#define qtn_ir_findst_search_ensrhterm "أدخل كلمة بحث"
+#define qtn_ir_findst_softkey_search "بحث"
+#define qtn_ir_findstation_title "البحث عن محط"
+#define qtn_ir_firstuse_title "راديو الإنترنت: مرحبًا"
+#define qtn_ir_genre_list_expanded "%N محطة"
+#define qtn_ir_genre_title "الأنواع"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "لا توجد محÙوظات"
+#define qtn_ir_homescreen_buffering "جار٠التخزين المؤقت"
+#define qtn_ir_homescreen_lastplayed "آخر محطة تم تشغيلها"
+#define qtn_ir_info_details_bitrate "%N ك.ب/ث:"
+#define qtn_ir_info_details_countryregi "البلد/المنطقة:"
+#define qtn_ir_info_details_description "الوصÙ:"
+#define qtn_ir_info_details_genre "النوع (الأنواع):"
+#define qtn_ir_info_details_language "اللغة:"
+#define qtn_ir_info_details_name "الاسم:"
+#define qtn_ir_info_details_streams "التدÙقات:"
+#define qtn_ir_info_details_title "معلومات المحطة"
+#define qtn_ir_info_details_type "النوع:"
+#define qtn_ir_info_details_type_isds "د. المحطات"
+#define qtn_ir_info_details_type_manual "حدد المس."
+#define qtn_ir_info_details_unnamed "بلا اسم"
+#define qtn_ir_info_softkey_close "إغلاق"
+#define qtn_ir_language_list_expanded "%N محطة"
+#define qtn_ir_language_title "اللغات"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "جار التحميل"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "جار البحث"
+#define qtn_ir_main_descriptive_text "استخدام \"البحث عن محطات\" بشريط الأدوات لإضاÙØ© محط"
+#define qtn_ir_main_discover_expanded "اكتش٠محطات راديو جديدة"
+#define qtn_ir_main_last "آخر مح. تم تشغيلها"
+#define qtn_ir_main_now "التشغيل الآن"
+#define qtn_ir_main_prog_deleting "جار حذ٠%N"
+#define qtn_ir_main_searchindir "بحث ÙÙŠ الدليل"
+#define qtn_ir_main_title "راديو الإنترنت"
+#define qtn_ir_main_unnamed_station "محطة بدون اسم"
+#define qtn_ir_memlo_ram_out_of_mem "الذاكرة لا تكÙÙŠ لإجراء العملية. امسح بعض البيانات أولاً."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N ك.ب/ث"
+#define qtn_ir_now_bitrate_mbps "%N م.ب/ث"
+#define qtn_ir_now_bytecountermb "%N م. ب"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N م.ب"
+#define qtn_ir_now_fm_frequency "%U[13] ميجاهرتز"
+#define qtn_ir_now_station_index "%N."
+#define qtn_ir_now_tooltip_next "المحطة التالية"
+#define qtn_ir_now_tooltip_play "تشغيل"
+#define qtn_ir_now_tooltip_previous "المحطة السابقة"
+#define qtn_ir_now_tooltip_stop "إيقاÙ"
+#define qtn_ir_now_wait_buffering "جار٠التخزين المؤقت"
+#define qtn_ir_now_wait_buffering_perc "جار تخزين %N% مؤقتاً"
+#define qtn_ir_nwcontroller_err_noconnectivity "لا يوجد اتصال بالشبكة"
+#define qtn_ir_nwcontroller_err_nosnaps "لم يتم تحديد نقطة وصول"
+#define qtn_ir_options_add "إضاÙØ© إلى المÙضلة"
+#define qtn_ir_options_add_manually "إضاÙØ© المحطة يدويًا"
+#define qtn_ir_options_change "تغيير"
+#define qtn_ir_options_clearhistory "مسح المحÙوظات"
+#define qtn_ir_options_editstation "تعديل محطة"
+#define qtn_ir_options_equalizer "معادل الصوت"
+#define qtn_ir_options_exit "خروج"
+#define qtn_ir_options_findnmusicstore "البحث ÙÙŠ Music store"
+#define qtn_ir_options_fmtrans "جهاز إرسال FM"
+#define qtn_ir_options_gotomusicstore "ذهاب إلى Music store"
+#define qtn_ir_options_help "تعليمات"
+#define qtn_ir_options_history "المحÙوظات"
+#define qtn_ir_options_info "معلومات المحطة"
+#define qtn_ir_options_mainview "ذهاب للعرض الرئيسي"
+#define qtn_ir_options_mark "تحديد"
+#define qtn_ir_options_markall "تحديد الكل"
+#define qtn_ir_options_markunmark "تحديد/إلغاء تحديد"
+#define qtn_ir_options_now "ذهاب للمحطة الجاري تشغيلها"
+#define qtn_ir_options_off "إيقاÙ"
+#define qtn_ir_options_on "تشغيل"
+#define qtn_ir_options_searchag "بحث مرة أخرى"
+#define qtn_ir_options_select "اختيار"
+#define qtn_ir_options_settings "الضبط"
+#define qtn_ir_options_station "المحطة"
+#define qtn_ir_options_stereowidening "زيادة مدى الاستيريو"
+#define qtn_ir_options_unmark "إلغاء التحديد"
+#define qtn_ir_options_unmarkall "إلغاء تحديد الكل"
+#define qtn_ir_playfail_err "Ùشل تشغيل الراديو"
+#define qtn_ir_playlist_title "الارتباطا المستلمة"
+#define qtn_ir_popup_no_results "لم يتم العثور على نتائج"
+#define qtn_ir_popup_toomany_results "تم العثور على كثير من النتائج. قم بتصÙية كلمة البحث."
+#define qtn_ir_results_none "لم يتم العثور على محطات متطابقة. ابحث مرة أخرى."
+#define qtn_ir_search_result "%0U[12]:%1N نتيجة"
+#define qtn_ir_search_results "%0U[12]:%1N نتائج"
+#define qtn_ir_set_folder_internetradio "راديو الإنترنت"
+#define qtn_ir_set_folder_irradio "راديو الإنترنت"
+#define qtn_ir_settings_3g "معدل البت لاتصال 3G"
+#define qtn_ir_settings_connec_softkey_ok "مواÙÙ‚"
+#define qtn_ir_settings_gprs "معدل البت لاتصال GPRS"
+#define qtn_ir_settings_network "اتصال الشبكة"
+#define qtn_ir_settings_snap_default "الاتصال الاÙتراضي"
+#define qtn_ir_settings_title "الضبط"
+#define qtn_ir_settings_wifi "معدل البت لاتصال Wi-Fi"
+#define qtn_ir_softkey_back "رجوع"
+#define qtn_ir_softkey_cancel "إلغاء"
+#define qtn_ir_softkey_done "تم"
+#define qtn_ir_softkey_no "لا"
+#define qtn_ir_softkey_options "خيارات"
+#define qtn_ir_softkey_select "اختيار"
+#define qtn_ir_softkey_yes "نعم"
+#define qtn_ir_station_saved "تم Ø­Ùظ المحطة"
+#define qtn_ir_stationlist_nomatches "(لا توجد نتائج مطابقة)"
+#define qtn_ir_stations_popup_delete "حذÙ\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "حذ٠%N محطة؟"
+#define qtn_ir_stations_popup_removed "تم حذ٠%U[78]"
+#define qtn_ir_stations_popup_removed_many "تم حذ٠%N محطة"
+#define qtn_ir_stations_popup_save "Ø­Ùظ المحطة ÙÙŠ المÙضلة؟"
+#define qtn_ir_suboptions_delete "حذÙ"
+#define qtn_ir_suboptions_details "التÙاصيل"
+#define qtn_ir_suboptions_move "نقل"
+#define qtn_ir_terms_details "بمواÙقتك على الشروط والبنود الواردة أدناه، تكون قد تعاقدت إلى الحد المسموح به ÙˆÙقًا للقانون المعمول به ولا يتم تقييدك أو حظرك لأي سبب يتعلق بكاÙØ© حقوق المادة"
+#define qtn_ir_terms_heading "البنود والشروط"
+#define qtn_ir_terms_softkey_accept "قبول"
+#define qtn_ir_terms_softkey_decline "رÙض"
+#define qtn_ir_title_history "المحÙوظات"
+#define qtn_ir_tooltip_addalltofav "إضاÙØ© الكل للمÙضلة"
+#define qtn_ir_tooltip_addstation "إضاÙØ© المحطة يدويًا"
+#define qtn_ir_tooltip_addtofav "إضاÙØ© إلى المÙضلة"
+#define qtn_ir_tooltip_copy "نسخ"
+#define qtn_ir_tooltip_findnstore "البحث ÙÙŠ Music store"
+#define qtn_ir_tooltip_findst "البحث عن محطات"
+#define qtn_ir_tooltip_history "المحÙوظات"
+#define qtn_ir_tooltip_listen "استماع"
+#define qtn_ir_tooltip_paste "لصق"
+#define qtn_ir_tooltip_stationde "تÙاصيل المحطة"
+#define qtn_ir_top_title "المحطات الأشهر"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "الاسم"
+#define qtn_ir_url_title "إضاÙØ© محطة"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/37/internetradioai_37.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "راديو إنترنت">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/37/terms_37.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>تتيح لك خدمة Nokia Internet Radio (محطات الراديو المتوÙرة عبر الإنترنت التابعة لـ Nokia) المشار إليها بـ "الخدمة" إمكانية التعر٠على محتوى محطات الراديو المتوÙرة عبر الإنترنت والاستمتاع بها. تواÙÙ‚ على أن استخدامك للخدمة يعد بمثابة إقرار منك بالاطلاع على هذه الاتÙاقية واستيعابها والمواÙقة على الالتزام بالبنود والشروط الواردة Ùيها. إذا لم تكن مواÙقًا، Ùالرجاء ملاحظة أنه غير مسموح لك باستخدام هذه الخدمة.</p>
+
+<p></p>
+
+<h1>1-	التعريÙات</h1>
+
+<p></p>
+
+<p>"محطات الراديو المتوÙرة عبر الإنترنت" عبارة عن وحدات تقوم عادة بإنتاج وتوزيع المحتوى الصوتي وبيانات التعري٠ذات الصلة عبر الإنترنت ÙÙŠ صورة دÙÙ‚.</p>
+
+<p></p>
+
+<p>ويقصد بالارتباط الخاص بمحطة الراديو المتوÙرة عبر الإنترنت محددَ موارد أو مجموعةً من محددات الموارد التي تمكّÙÙ† المستخدم من الوصول إلى المحتوى الذي يتم دÙقه من خلال محطة الراديو المتوÙرة عبر الإنترنت.</p>
+
+<p></p>
+
+<h1>2-	الخدمة</h1>
+
+<p></p>
+
+<p>تتيح الخدمة إمكانية القيام بما يلى:</p>
+<p>1. استعراض ارتباطات محطات الراديو المتوÙرة عبر الإنترنت،</p>
+<p>2. الوصول إلى محتوى محطات الراديو المتوÙرة عبر الإنترنت.</p>
+
+<p></p>
+
+<h1>3-	استخدام الخدمة</h1>
+
+<p></p>
+
+<p>ÙŠÙصرح باستخدام الخدمة للأغراض الشخصية Ùقط دون الأغراض التجارية. وتحتÙظ Nokia بكاÙØ© حقوق الملكية الÙكرية المتعلقة بالخدمة.</p>
+
+<p></p>
+
+<p>تحتÙظ Nokia بالحق ÙÙŠ تغيير هذه البنود والشروط بموجب إشعار يتم إرساله إليك.</p>
+
+<p></p>
+
+<h1>4-	الخصوصية</h1>
+
+<p></p>
+
+<p>تلتزم Nokia بحماية خصوصية المستخدم عن طريق تطبيق سياسات صارمة للحÙاظ على السرية. </p>
+
+<p></p>
+
+<p>ولمراقبة الاستخدام وتحسين الخدمة؛ يمكن لـ Nokia جمع البيانات المتعلقة بالاستخدام –على سبيل المثال لا الحصر– المعلومات الخاصة بمحطات الراديو المتوÙرة عبر الإنترنت والتي تم الوصول إليها، والوقت المستغرق ÙÙŠ استعراض المحطة والعناصر التي تم تصنيÙها باعتبارها عناصر Ù…Ùضلة.</p>
+
+<p></p>
+
+<p>لا تقوم Nokia بجمع أي معلومات قد تؤدي إلى كش٠هوية مستخدم الخدمة.</p>
+
+<p></p>
+
+<h1>5-	توÙر الخدمة</h1>
+
+<p></p>
+
+<p>تم توÙير هذه الخدمة من أجل راحتك. تتوÙر الخدمة "كما هي" ويتم التعامل معها على أساس أنها "متوÙرة". لا تضمن Nokia عدم انقطاع الخدمة أو خلوها من الأعطال. تحتÙظ Nokia بالحق ÙÙŠ تعديل الخدمة أو عدم إتاحة إمكانية الوصول إليها ÙÙŠ أي وقت.</p>
+
+<p></p>
+
+<p>قد توÙر Nokia ترقيات لتطبيقات البرامج المتعلقة بالخدمة حسبما يتراءى لها ذلك.</p>
+
+<p></p>
+
+<h1>6-	إخلاء المسئولية والموثوقية</h1>
+
+<p></p>
+
+<p>لتسهيل إمكانية الوصول، قد توÙر Nokia ارتباطات لمحطات راديو متوÙرة عبر الإنترنت تؤول ملكيتها أو يتم تشغيلها  من قبل أطرا٠خارجية. لا تضمن Nokia صلاحية هذه الارتباطات لمحطات الراديو المتوÙرة عبر الإنترنت للتشغيل. وعلاوة على ذلك، لا يشير المحتوي الذي لا يتعلق بـ Nokia بأي شكل من الأشكال ضمنًا إلى مصادقة Nokia لهذا المحتوى أو للمنتجات أو الخدمات المشار إليها ÙÙŠ هذا المحتوى.</p>
+
+<p></p>
+
+<p>يتعين عليك مراجعة قواعد الاستخدام الخاصة بكل محطة –إن وجدت– والمواÙقة عليها قبل محاولة الوصول إليها. وتواÙÙ‚ كذلك على أنه ليس لـ Nokia الحق ÙÙŠ التحكم بمحتوى الخدمات التابعة لجهات خارجية؛ ومن ثم لا تتحمل أي مسئولية عن المحتوى المتوÙر ÙÙŠ محطات الراديو المتوÙرة عبر الإنترنت.</p>
+
+<p></p>
+
+<p>وقد يتضمن الوصول إلى محتوى محطات الراديو المتوÙرة عبر الإنترنت نقل كميات كبيرة من البيانات عبر الشبكة التابعة لموÙر الخدمة الخاص بك. اتصل بموÙر الخدمة الخاص بك للحصول على المعلومات المتعلقة بتكالي٠نقل البيانات. لاحظ أن استخدام الخدمة مع محطات الراديو المتوÙرة عبر الإنترنت التي تقوم بإخراج دÙÙ‚ مرتÙع لمعدل "البت" قد يتطلب تكاليÙًا أعلى نتيجة لنقل البيانات.</p>
+
+<p></p>
+
+<p>قد تتضمن عملية نقل البيانات المصاحبة لاستخدام الخدمة على الأقل ما يلي: تحديث محتوى دليل المحطات ودÙÙ‚ البيانات من محطة الراديو المتوÙرة عبر الإنترنت وجمع البيانات الإحصائية وترقية تطبيق الراديو المتوÙر عبر الإنترنت.</p>
+
+<p></p>
+
+<p>لا تتحمل Nokia تكالي٠عملية نقل البيانات المصاحبة لاستخدامك للخدمة.</p>
+
+<p></p>
+
+<p>لا يتم تقديم أي ضمان من أي نوع -صريحًا كان أم ضمنيًا- Ùيما يتعلق بتوÙر الخدمة ودقتها وموثوقيتها ومحتواها –على سبيل المثال لا الحصر– الضمانات المتعلقة بالعناوين أو عدم الانتهاك أو الضمانات الضمنية لقابلية التداول أو الملاءمة لغرض معين. لا تعد Nokia مسئولة عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو خاصة أو لاحقة أو Ùقدان الأرباح أو حدوث توق٠لسير العمل نتيجة لاستخدام الخدمة أو عدم القدرة على استخدامها، حتى إذا تمت إحاطة Nokia علمًا باحتمال وقوع هذه الأضرار. لا تسمح بعض الاختصاصات القانونية باستثناء ضمانات معينة أو قيود محددة للمسئولية؛ وعليه Ùقد لا تنطبق القيود أو الاستثناءات الواردة أعلاه عليك. وتقتصر المسئولية القانونية لـ Nokia ÙÙŠ مثل هذه الحالات على أقصى حد يسمح به القانون.</p>
+
+<p></p>
+
+<p>لا يرد شيء ÙÙŠ هذا المستند من شأنه المساس بالحقوق القانونية لأي طر٠يمثل أحد العملاء. لا يوجد ÙÙŠ هذا المستند ما يحد من المسئولية القانونية لـ Nokia ÙÙŠ حالة حدوث الوÙاة أو الإصابة الجسدية جراء الإهمال من جانبها.</p>
+
+<p></p>
+
+<h1>7- النهج المتبع تجاه ادّعاءات انتهاك حقوق الطبع والنشر</h1>
+
+<p></p>
+
+<p>إذا كنت تعتقد أنه قد تم إجراء الأعمال المحمية بموجب قوانين حقوق الطبع والنشر والخاصة بك بشكل يمثل انتهاكًا لحقوق الطبع والنشر، Ùيمكنك إبلاغ Nokia من خلال إشعار يتضمن ما يلي:</p>
+
+<p></p>
+
+<p>(1) توقيع خطي أو إلكتروني لشخص معتمد من جانب مالك الحق الحصري الذي تم ادّعاء انتهاكه.</p>
+
+<p></p>
+
+<p>(2) تعري٠أو وص٠الأعمال المحمية بموجب حقوق الطبع والنشر والتي يتم الادعاء بانتهاكها.</p>
+
+<p></p>
+
+<p>(3) تعري٠أو وص٠المواد التي يتم الادعاء بانتهاكها والمعلومات الكاÙية بالقدر المعقول لتحديد هذه المواد.</p>
+
+<p></p>
+
+<p>(4) اسمك وعنوانك ورقم هاتÙÙƒ وعنوان البريد الإلكتروني الخاص بك وأي معلومات أخرى قد تتيح لـ Nokia إمكانية الاتصال بك.</p>
+
+<p></p>
+
+<p>(5) إقرار بأنك تعتقد اعتقادًا تامًا ÙÙŠ أن استخدام المواد بالأسلوب موضع الشكوى غير مصرح به من قبل مالك حقوق الطبع والنشر أو الوكيل الخاص به أو القانون، Ùˆ</p>
+
+<p></p>
+
+<p>(6) إقرار بدقة المعلومات الورادة ÙÙŠ الإشعار وأنك تمتع بالتخويل اللازم للقيام بأي إجراء نيابةً عن مالك الحق الحصري الذي تم ادّعاء انتهاكه.</p>
+
+<p></p>
+
+<p>يجب إرسال الإشعار إلى "الوكيل المعين على عنوان البريد الإلكتروني" التالي:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8- القانون المعمول به</h1>
+
+<p></p>
+
+<p>حسبما هو مستخدم ÙÙŠ هذه البنود والشروط، Ùإن Nokia تعني Nokia Corporation (شركة Nokia). تقوم Nokia بتشغيل الخدمة والتحكم Ùيها من مواقع موجودة داخل دولة Ùنلندا. وبناءً عليه، Ùقد تعتبر المعلومات الواردة ÙÙŠ هذه "الخدمة" متوÙرة ÙÙŠ دولة Ùنلندا.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006.. جميع الحقوق محÙوظة.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/39/internetradio_39.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Laging itanong"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N istasyon nai-save"
+#define qtn_ir_added_single "%U[88] nai-save"
+#define qtn_ir_addmanually_unnamed "Wla ngln"
+#define qtn_ir_addst_description "Paglalarawan"
+#define qtn_ir_addst_streamurl "URL ng Stream"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radyo hindi aktibo"
+#define qtn_ir_app_general_err "Panloob na error. Simulan muli ang application."
+#define qtn_ir_apps_grid "Net radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Pnkmhusay kal."
+#define qtn_ir_bitrate_high "Mataas na kalid."
+#define qtn_ir_bitrate_standard "Standard kalid."
+#define qtn_ir_cost_heading "Mahalagang paunawa"
+#define qtn_ir_cost_softkey_continue "Ituloy"
+#define qtn_ir_cost_softkey_exit "Lumabas"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Ginagamit ng Internet radio ang koneksyong pang-data ng iyong telepono para sa pagsasahimpapawid ng radyo. Ito ay inirerekumenda lamang kung mayroon kang isang flat fee data plan. Kung hindi ka nakatitiyak sa iyong mga gastos sa data, tiyakin sa iyong operator bago magpatuloy."
+#define qtn_ir_country_list_expanded "%N mga istasyon"
+#define qtn_ir_countryregion_title "Bansa/rehiyon"
+#define qtn_ir_discover_beststations "Pinakamagagandang ist."
+#define qtn_ir_discover_country_region "Mag-browse sa bnsa/reh."
+#define qtn_ir_discover_genre "Mag-browse sa genre"
+#define qtn_ir_discover_genre_expanded "Ist. na pinaghiwalay sa genre"
+#define qtn_ir_discover_langauge "Brwse ayon sa wika"
+#define qtn_ir_discover_language_expanded "Ist. na pinaghiwalay sa wika"
+#define qtn_ir_discover_staticountryreg "Mga ist. ayon sa bansa/reh."
+#define qtn_ir_discover_title "Direkt. ng ist."
+#define qtn_ir_discover_top "Nangungunang istasyon"
+#define qtn_ir_edit_title "I-edit istasyon"
+#define qtn_ir_err_operation "Error sa pagpapatakbo. Subukang muli."
+#define qtn_ir_err_url_unavail "Hindi magagamit ang URL"
+#define qtn_ir_error_address "Maling address ng istasyon ng Internet radio"
+#define qtn_ir_error_connection "Naubusan ng oras sa koneksyon. Subukan ulit."
+#define qtn_ir_error_favourites "Walang sapat na espasyo sa mga paborito upang mai-save ang pinili"
+#define qtn_ir_error_general "Hindi makakonekta sa istasyon"
+#define qtn_ir_error_isds_unavailable "Pansamantalang hindi magamit ang serbisyo ng direktoryo ng Internet station"
+#define qtn_ir_error_notavailable "Walang magamit na mga streamling link"
+#define qtn_ir_error_notinisds "Item ay hindi na magamit"
+#define qtn_ir_error_search "Magpasok ng isang item sa paghanap"
+#define qtn_ir_findst_addstation "Mano-mano dgdg ist."
+#define qtn_ir_findst_addtofav "Idag. ist. mo sa mga paborito"
+#define qtn_ir_findst_browsesds "I-browse direkt. ng ist."
+#define qtn_ir_findst_search_ensrhterm "Magpasok ng search term"
+#define qtn_ir_findst_softkey_search "Maghanap"
+#define qtn_ir_findstation_title "Mghnap ng ist."
+#define qtn_ir_firstuse_title "Intern. radio: Welcome"
+#define qtn_ir_genre_list_expanded "%N mga istasyon"
+#define qtn_ir_genre_title "Mga genre"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Walang kasaysayan"
+#define qtn_ir_homescreen_buffering "Bina-buffer"
+#define qtn_ir_homescreen_lastplayed "Huling pinatugtog"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Bansa/Rehiyon:"
+#define qtn_ir_info_details_description "Paglalarawan:"
+#define qtn_ir_info_details_genre "(Mga) genre:"
+#define qtn_ir_info_details_language "Wika:"
+#define qtn_ir_info_details_name "Pangalan:"
+#define qtn_ir_info_details_streams "Mga stream:"
+#define qtn_ir_info_details_title "Info ng istasyon"
+#define qtn_ir_info_details_type "Uri:"
+#define qtn_ir_info_details_type_isds "Dir. ng ist."
+#define qtn_ir_info_details_type_manual "Tkoy-user"
+#define qtn_ir_info_details_unnamed "Wla ngln"
+#define qtn_ir_info_softkey_close "Isara"
+#define qtn_ir_language_list_expanded "%N mga istasyon"
+#define qtn_ir_language_title "Mga wika"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Nilo-load"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Naghahanap"
+#define qtn_ir_main_descriptive_text "Gmtn 'Hanap ist.' sa tlbar upng mgdgdg ng istasyon"
+#define qtn_ir_main_discover_expanded "Tuklasn bagong ist. ng radyo"
+#define qtn_ir_main_last "Huli pinatugtog"
+#define qtn_ir_main_now "Tugtog ngayon"
+#define qtn_ir_main_prog_deleting "Tinatanggal %N"
+#define qtn_ir_main_searchindir "Hanapin sa direktoryo"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Wlng-ngln ist."
+#define qtn_ir_memlo_ram_out_of_mem "Kulang ang memorya para sa pagpapatakbo. Magtanggal muna ng ilang data."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Susunod na istasyon"
+#define qtn_ir_now_tooltip_play "I-play"
+#define qtn_ir_now_tooltip_previous "Nakaraang istasyon"
+#define qtn_ir_now_tooltip_stop "Itigil"
+#define qtn_ir_now_wait_buffering "Bina-buffer"
+#define qtn_ir_now_wait_buffering_perc "Nagba-buffer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Walang koneksyon sa network"
+#define qtn_ir_nwcontroller_err_nosnaps "Walang tinukoy na access point"
+#define qtn_ir_options_add "Idagdag sa mga paborito"
+#define qtn_ir_options_add_manually "Mano-mano dgdg ist."
+#define qtn_ir_options_change "Palitan"
+#define qtn_ir_options_clearhistory "I-clear ang history"
+#define qtn_ir_options_editstation "I-edit ang istasyon"
+#define qtn_ir_options_equalizer "Equalizer"
+#define qtn_ir_options_exit "Lumabas"
+#define qtn_ir_options_findnmusicstore "Hanapin sa Music store"
+#define qtn_ir_options_fmtrans "FM transmitter"
+#define qtn_ir_options_gotomusicstore "Magpunta sa Music store"
+#define qtn_ir_options_help "Tulong"
+#define qtn_ir_options_history "Kasaysayan"
+#define qtn_ir_options_info "Impormasyon sa ist."
+#define qtn_ir_options_mainview "Magpunta sa main view"
+#define qtn_ir_options_mark "Markahan"
+#define qtn_ir_options_markall "Markahan lahat"
+#define qtn_ir_options_markunmark "Markahan/Alisan marka"
+#define qtn_ir_options_now "Punta sa Tumut. ngyn"
+#define qtn_ir_options_off "Sarado"
+#define qtn_ir_options_on "Bukas"
+#define qtn_ir_options_searchag "Maghanap uli"
+#define qtn_ir_options_select "Piliin"
+#define qtn_ir_options_settings "Mga setting"
+#define qtn_ir_options_station "Istasyon"
+#define qtn_ir_options_stereowidening "Stereo widening"
+#define qtn_ir_options_unmark "Alisan ng marka"
+#define qtn_ir_options_unmarkall "Alisan ng marka lahat"
+#define qtn_ir_playfail_err "Bigo ang pagpatugtog ng radio"
+#define qtn_ir_playlist_title "Ntnggp na link"
+#define qtn_ir_popup_no_results "Walang nahanap na resulta"
+#define qtn_ir_popup_toomany_results "Masyadong maraming resulta. Pinuhin ang iyong search term."
+#define qtn_ir_results_none "Walang natagpuang tumutugmang istasyon. Maghanap ulit."
+#define qtn_ir_search_result "%0U[10]:%1N resulta"
+#define qtn_ir_search_results "%0U[09]:%1N resulta"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "Bitrate ng koneksyong 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Bitrate ng konek. GPRS"
+#define qtn_ir_settings_network "Koneksyon sa network"
+#define qtn_ir_settings_snap_default "Default na koneksyon"
+#define qtn_ir_settings_title "Mga setting"
+#define qtn_ir_settings_wifi "Bitrate ng kon. Wi-Fi"
+#define qtn_ir_softkey_back "Balik"
+#define qtn_ir_softkey_cancel "Ikansela"
+#define qtn_ir_softkey_done "Tapos na"
+#define qtn_ir_softkey_no "Hindi"
+#define qtn_ir_softkey_options "Opsyon"
+#define qtn_ir_softkey_select "Piliin"
+#define qtn_ir_softkey_yes "Oo"
+#define qtn_ir_station_saved "Istasyon nai-save"
+#define qtn_ir_stationlist_nomatches "(walang katugma)"
+#define qtn_ir_stations_popup_delete "Tanggalin\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Tanggalin ang %N istasyon?"
+#define qtn_ir_stations_popup_removed "%U[87] tinanggal"
+#define qtn_ir_stations_popup_removed_many "%N istasyon tinanggal"
+#define qtn_ir_stations_popup_save "I-save ang istasyon sa Mga Paborito?"
+#define qtn_ir_suboptions_delete "Tanggalin"
+#define qtn_ir_suboptions_details "Mga detalye"
+#define qtn_ir_suboptions_move "Ilipat"
+#define qtn_ir_terms_details "Sa pamamagitan ng pagsang-ayon sa Mga tuntunin at Kundisyon sa ibaba ay pumapasok ka sa isang kontrata ayon sa saklaw na pinahihintulutan ng naaangkop na batas at nang walang karagdagang limitasyon o pagpigil patungkol sa lahat ng anumang karapatang pang-materyal"
+#define qtn_ir_terms_heading "Tuntunin at Kundisyon"
+#define qtn_ir_terms_softkey_accept "Tnggpin"
+#define qtn_ir_terms_softkey_decline "Tnggihan"
+#define qtn_ir_title_history "Kasaysayan"
+#define qtn_ir_tooltip_addalltofav "Idag. lht sa pabor."
+#define qtn_ir_tooltip_addstation "Mano-mano dgdg ist."
+#define qtn_ir_tooltip_addtofav "Idag. lht sa pabor."
+#define qtn_ir_tooltip_copy "Kopyahin"
+#define qtn_ir_tooltip_findnstore "Hanapin sa Music store"
+#define qtn_ir_tooltip_findst "Hanapin mga istasyon"
+#define qtn_ir_tooltip_history "Kasaysayan"
+#define qtn_ir_tooltip_listen "Makinig"
+#define qtn_ir_tooltip_paste "Idikit"
+#define qtn_ir_tooltip_stationde "Detalye ng istasyon"
+#define qtn_ir_top_title "Nangungun. Ist."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Pangalan"
+#define qtn_ir_url_title "Dgdg ist."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/39/internetradioai_39.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/39/terms_39.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Ang serbisyo (“Serbisyoâ€) ng Nokia Internet Radio ay hahayaan kang matuklasan at maranasan ang nilalaman ng mga station ng radyo sa internet. IKAW AY SUMANG-AYON NA ANG PAGGAMIT MO NG SERBISYO AY TUMATANGGAP NA NABASA MO ANG KASUNDUANG ITO, NAUNAWAAN ITO, AT SUMANG-AYON NA MATATALI SA MGA TUNTUNIN AT KUNDISYONG ITO. Kung ikaw ay hindi sumang-ayon, mangyaring pansinin na ikaw ay hindi pinahihintulutang gumamit ng Serbisyo.</p>
+
+<p></p>
+
+<h1>1. MGA KAHULUGAN</h1>
+
+<p></p>
+
+<p>Ang mga istasyon ng radyo sa internet ay nangangahulugang mga nilalang na nagbubunga at namamahagi ng nilalamang audio at may-kaugnayang metadata sa internet sa isang stream.</p>
+
+<p></p>
+
+<p>Ang link sa istasyon ng radyo sa internet ay nangangahulugang ang isang taga-hanap ng pinagkukunan na nagpapagana sa gumagamit upang makapag-access ng nilalaman na na-stream sa pamamagitan ng station ng radyo sa internet.</p>
+
+<p></p>
+
+<h1>2. ANG SERBISYO</h1>
+
+<p></p>
+
+<p>Ang Serbisyo ay nagpapagana ng sumusunod:</p>
+<p>1. ang pagbra-browse ng mga link sa mga istasyon ng radyo sa internet;</p>
+<p>2. ang pag-a-access ng nilalaman ng mga istasyon ng radyo sa internet;</p>
+
+<p></p>
+
+<h1>3. GAMIT NG SERBISYO</h1>
+
+<p></p>
+
+<p>Ang gamit ng Serbisyo ay pinahintulutan lamang para sa iyong pribado at hindi-komersyal na gamit. Ang Nokia ay magmamay-ari ng lahat ng karapatan sa pag-aaring intelektwal sa at ng Serbisyo.</p>
+
+<p></p>
+
+<p>Ang Nokia ay nagtatabi ng karapatang magbago ng mga tuntunin at kundisyon sa pamamagitan ng pagpapaalam sa iyo ng naturang pagbabago.</p>
+
+<p></p>
+
+<h1>4. PAGKAPRIBADO</h1>
+
+<p></p>
+
+<p>Ang Nokia ay nakatuon sa pagprotekta sa pagkapribado ng user sa pamamagitan ng pagpapatupad ng malakas na mga patakaran ng pagkakumpidensyal.</p>
+
+<p></p>
+
+<p>Upang masubaybayan ang gamit at upang mapagbuti ang Serbisyo, ang Nokia ay maaaring kumolekta ng gamit ng data kasama ngunit hindi limitado sa, impormasyon tungkol sa pag-access ng mga istasyon ng radyo sa internet, ang ginugol na oras sa bawat istasyon at ang mga item na ni-rate bilang mga paborito.</p>
+
+<p></p>
+
+<p>Ang Nokia ay hindi kumukolekta ng anumang impormasyon na nagpapahintulot sa pagpapakilala ng user ng Serbisyo.</p>
+
+<p></p>
+
+<h1>5. MAGAGAMIT NA SERBISYO</h1>
+
+<p></p>
+
+<p>Ang Serbisyo ay ibinigay bilang isang kaginhawahan sa iyo. Ito ay ibinigay "bilang gayundin" at sa isang batayang "na magagamit". Ang Nokia ay hindi nagwawarantiya na ang Serbisyo ay hindi magagambala o walang pagkakamali. Ang Nokia ay naglalaan ng karapatan upang mabago ang Serbisyo o matanggal ang pag-access dito sa anumang oras.</p>
+
+<p></p>
+
+<p>Ang Nokia ay maaaring magbigay ng mga pag-a-upgrade para sa mga application sa software na may kaugnayan sa software na Serbisyo sa nag-iisa nitong maingat na pagpapasya.</p>
+
+<p></p>
+
+<h1>6. PAGWAWAKSI AT PANANAGUTAN</h1>
+
+<p></p>
+
+<p>Para sa iyong madaling pag-aaccess, ang Nokia ay maaaring magsama ng mga link sa mga istasyon ng radyo sa internet na pag-aari o pagpapatakbo ng ikatlong partido. Ang Nokia ay hindi nagwawarantiya na ang mga link sa mga istasyon ng radyo sa internet ay mapapatakbo. Bilang karagdagan, ang nilalaman na walang kaugnayan sa Nokia ay hindi nagpapahiwatig na ang anuman na iniendorsong nilalaman ng Nokia ng naturan o ng mga produkto o serbisyo na sumangguni sa naturang nilalaman.</p>
+
+<p></p>
+
+<p>Dapat mong repasuhin at sang-ayunan na ang mga bawat patakaran sa paggamit ng istasyon, bago ma-access ito. Ikaw ay sumang-ayon din na ang Nokia ay walang kontrol sa nilalaman ng mga serbisyo ng ikatlong partido at hindi maaaring magpalagay ng responsibilidad para sa nilalamang ibinigay ng mga istasyon ng radyo sa internet.</p>
+
+<p></p>
+
+<p>Ang pag-access ng nilalaman ng mga istasyon ng radyo sa internet gamit ang Serbisyo ay maaaring magsangkot ng malaking mga halaga ng data sa pamamagitan ng iyong service provider sa network. Makipag-ugnayan sa iyong service provider para sa impormasyon tungkol sa mga pagsingil sa paglilipat ng data, Tandaan na ang paggamit ng Serbisyo na may mga istasyon ng radyo sa internet na naghahatid ng mas mataas na mga stream ng bitrate sa iyo ay maaaring mapatawan ng mas mataas na gastos na iniugnay sa trapiko ng data.</p>
+
+<p></p>
+
+<p>Ang trapiko ng data na iniugnay sa gamit ng Serbisyo ay maaaring magsama ng hindi bababa sa sumusunod: pag-update ng nilalaman ng direktoryo ng istasyon, pag-stream ng data mula sa istasyon ng radyo sa internet, pagkolekta ng data ng istatistika at pag-upgrade ng application ng radyo sa internet.</p>
+
+<p></p>
+
+<p>Ang Nokia ay hindi mananagot para sa mga gastos sa trapiko ng data na iniuugnay sa iyong gamit ng Serbisyo.</p>
+
+<p></p>
+
+<p>WALANG WARANTIYA NG ANUMANG URI, MAGING IPINAHAYAG O IPINAHIWATIG, KASAMA NGUNIT HINDI LIMITADO SA MGA WARANTIYA NG PAMAGAT O HINDI PAGNANAKAW O IPINAHIWATIG NA MGA WARANTIYA NG KAKAYAHANG MAGNEGOSYO O TIKAS PARA SA ISANG PARTIKULAR NA HANGARIN, AY GINAWA NANG MAY KAUGNAYAN SA PAGKAKAROON NG GAMIT, KATUMPAKAN, KAKAYAHANG MAASAHAN O NILALAMAN NG SERBISYO. ANG NOKIA AY HINDI MANANAGOT SA ANUMANG DIREKTA, HINDI DIREKTA, INSIDENTAL, ESPESYAL O MAY IBUBUNGANG MGA PINSALA, NAWALANG MGA KITA O PARA SA PAGKAGAMBALA SA NEGOSYO NA NAGMUMULA SA GAMIT O PAGKAWALA NG KAKAYAHANG MAGAMIT ANG SERBISYO, KAHIT NA ANG NOKIA AY NASABIHAN NG MGA POSIBILIDAD NG MGA NATURANG PINSALA. ANG ILANG MGA NASASAKUPAN NG KAPANGYARIHAN AY HINDI NAGPAPAHINTULOT SA PAGBUKOD NG TIYAK NA MGA WARANTIYA O LIMITASYON NG PANANAGUTAN, NANG SA GAYON ANG NASA ITAAS NA MGA LIMITASYON O PAGBUBUKOD AY MAAARING HINDI MAILAPAT SA IYO. ANG PANANAGUTAN NG NOKIA SA NATURANG KASO AY LIMITADO SA PINAKAMALAWAK NA SAKOP NA PINAHIHINTULUTAN NG BATAS.</p>
+
+<p></p>
+
+<p>Walang inilaman dito ang napangunahang husga ang umiiral na karapatan ng anumang partido na nakikitungo bilang isang taga-tangkilik. Walang inilaman dito ang naglilimita sa pananagutan ng Nokia sa kaganapan ng kamatayan o pansariling kapinsalaan na nagresulta mula sa kapabayaan ng Nokia.</p>
+
+<p></p>
+
+<h1>7. PATAKARAN NA MAY KINALAMAN SA MGA PAGHIHINALA NG PAGNANAKAW SA COPYRIGHT</h1>
+
+<p></p>
+
+<p>Kung ikaw ay naniniwala na ang iyong gawaing nagkaroon ng karapatang-kopya ay napanghawakan sa isang paraan na bumubuo ng pagnanakaw ng karapatang-kopya, maaari mong abisuhin ang Nokia sa pamamagitan ng pagbibigay ng isang abiso kasama ang sumusunod:</p>
+
+<p></p>
+
+<p>(1) Ang isang pisikal o elektronikong lagda ng isang tao na awtorisadong gumawa sa ngalan ng may-ari ng eksklusibong karapatan na hininalang ninakaw;</p>
+
+<p></p>
+
+<p>(2) Ang pagkakakilanlan o paglalarawan ng gawaing nabigyan ng karapatang-kopya ay nanakaw;</p>
+
+<p></p>
+
+<p>(3) Ang pagkakakilanlan o paglalarawan ng materyales na naangkin na nananakaw at impormasyong makatwiran na sapat na mahanap ang materyales;</p>
+
+<p></p>
+
+<p>(4) Ang iyong pangalan, address, numero ng telepono, e-mail address at anumang impormasyon na magpapahintulot ng Nokia upang makipag-uganayan sa iyo;</p>
+
+<p></p>
+
+<p>(5) Ang isang pahayag na ikaw ay may isang mabuting paniniwala sa pagtitiwala na gumamit ng materyales sa pag-uugaling inirereklamo ay hindi awtorisado ng may-ari ng karapatang-kopya, ahente nito, o ng batas, at</p>
+
+<p></p>
+
+<p>(6) Ang isang pahayag na ang impormasyon sa abiso ay tumpak, at nasa ilalim ng parusa ng pagsisinungaling, na inawtorisa sa iyo upang makagawa ka sa ngalan ng may-ari ng isang eksklusibong karapatan na hininalang ninakaw.</p>
+
+<p></p>
+
+<p>Ang abiso ay dapat na maipadala sa address ng aming Itinalagang Ahente sa:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. NAMAMAHALANG BATAS</h1>
+
+<p></p>
+
+<p>Gaya ng ginamit sa mga tuntunin at kundisyong ito, ang "Nokia" ay nangangahulugan ng Nokia Corporation. Ang Nokia ay nagpapatakbo at nagkokontrol ng Serbisyo mula sa mga kinalalagyan sa loob ng Finland. Tulad ng naturan, ang impormasyon na inilaman sa Serbisyo ay ipinagpalagay na binigay sa Finland.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Lahat ng karapatan ay inilaan.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/401/internetradio_401.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Galdetu beti"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N irrati kate gordeta"
+#define qtn_ir_added_single "%U[88] gordeta"
+#define qtn_ir_addmanually_unnamed "Izenik ez"
+#define qtn_ir_addst_description "Deskribapena"
+#define qtn_ir_addst_streamurl "Transmisioaren URLa"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet irratia"
+#define qtn_ir_ai_radio_not_active "Irratia ez dago aktibo"
+#define qtn_ir_app_general_err "Barneko errorea. Berrabiarazi aplikazioa."
+#define qtn_ir_apps_grid "Int. irratia"
+#define qtn_ir_apps_list "Internet irratia"
+#define qtn_ir_apps_skey "Internet irratia"
+#define qtn_ir_apps_standby "Internet irratia"
+#define qtn_ir_apps_swins "Internet irratia"
+#define qtn_ir_apps_wheel "Internet irratia"
+#define qtn_ir_bitrate_best "Kalitate onena"
+#define qtn_ir_bitrate_high "Kalitate ona"
+#define qtn_ir_bitrate_standard "Kalitate arrunta"
+#define qtn_ir_cost_heading "Ohar garrantzitsua"
+#define qtn_ir_cost_softkey_continue "Jarraitu"
+#define qtn_ir_cost_softkey_exit "Irten"
+#define qtn_ir_cost_title "Internet irratia"
+#define qtn_ir_cost_warning "Interneteko irratiak zure telefonoaren datu konexioa erabiltzen du irrati transmisioetarako. Datu tarifa finkoa baduzu bakarrik gomendatzen da. Aplikatuko zaizun tarifaz ziur ez bazaude, egiaztatu zure operadorearekin jarraitu aurretik."
+#define qtn_ir_country_list_expanded "%N kate"
+#define qtn_ir_countryregion_title "Herrialdeak"
+#define qtn_ir_discover_beststations "Kate onenen aukeraketa"
+#define qtn_ir_discover_country_region "Arakatu herrial. arabera"
+#define qtn_ir_discover_genre "Arakatu gener. arabera"
+#define qtn_ir_discover_genre_expanded "Generoaren arabera"
+#define qtn_ir_discover_langauge "Arakatu hizkun. arabera"
+#define qtn_ir_discover_language_expanded "Hizkuntzaren arabera"
+#define qtn_ir_discover_staticountryreg "Herrialdearen arabera"
+#define qtn_ir_discover_title "Kateak"
+#define qtn_ir_discover_top "Entzunenak"
+#define qtn_ir_edit_title "Editatu katea"
+#define qtn_ir_err_operation "Errorea eragiketan. Saiatu berriro."
+#define qtn_ir_err_url_unavail "URLa ez dago eskuragarri"
+#define qtn_ir_error_address "Interneteko irrati katearen helbide okerra"
+#define qtn_ir_error_connection "Konexioa denboraz kanpo. Saiatu berriro."
+#define qtn_ir_error_favourites "Aukeraketa gordetzeko toki gutxiegi Gogokoak atalean"
+#define qtn_ir_error_general "Ezin da katera konektatu"
+#define qtn_ir_error_isds_unavailable "Interneteko irrati kateen zerrenda eskuragaitz dago aldi baterako"
+#define qtn_ir_error_notavailable "Ez dago transmisiorako esteka eskuragarririk"
+#define qtn_ir_error_notinisds "Elementua eskuragaitz"
+#define qtn_ir_error_search "Idatzi bilaketa hitz bat"
+#define qtn_ir_findst_addstation "Gehitu katea eskuz"
+#define qtn_ir_findst_addtofav "Gehitu Gogokoak atalean"
+#define qtn_ir_findst_browsesds "Arakatu kateak"
+#define qtn_ir_findst_search_ensrhterm "Idatzi bilaketa hitz bat"
+#define qtn_ir_findst_softkey_search "Bilatu"
+#define qtn_ir_findstation_title "Bilatu kateak"
+#define qtn_ir_firstuse_title "Internet irratia"
+#define qtn_ir_genre_list_expanded "%N kate"
+#define qtn_ir_genre_title "Generoak"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Historiarik ez"
+#define qtn_ir_homescreen_buffering "Bufer. gordetzen"
+#define qtn_ir_homescreen_lastplayed "Erreprod. azkena"
+#define qtn_ir_info_details_bitrate "%N kbp:"
+#define qtn_ir_info_details_countryregi "Herrialdea:"
+#define qtn_ir_info_details_description "Deskribapena:"
+#define qtn_ir_info_details_genre "Generoak:"
+#define qtn_ir_info_details_language "Hizkuntza:"
+#define qtn_ir_info_details_name "Izena:"
+#define qtn_ir_info_details_streams "Iturriak:"
+#define qtn_ir_info_details_title "Katearen datuak"
+#define qtn_ir_info_details_type "Mota:"
+#define qtn_ir_info_details_type_isds "Kateak"
+#define qtn_ir_info_details_type_manual "Pertsonal."
+#define qtn_ir_info_details_unnamed "Izenik ez"
+#define qtn_ir_info_softkey_close "Itxi"
+#define qtn_ir_language_list_expanded "%N kate"
+#define qtn_ir_language_title "Hizkuntzak"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Kargatzen"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Bilatzen"
+#define qtn_ir_main_descriptive_text "Aukeratu \"Bilatu kateak\" kateak gehitzeko"
+#define qtn_ir_main_discover_expanded "Ezagutu irrati kate berriak"
+#define qtn_ir_main_last "Azkena"
+#define qtn_ir_main_now "Orain entzungai"
+#define qtn_ir_main_prog_deleting "%N ezabatzen"
+#define qtn_ir_main_searchindir "Bilatu zerrendan"
+#define qtn_ir_main_title "Internet irratia"
+#define qtn_ir_main_unnamed_station "Izenik ez"
+#define qtn_ir_memlo_ram_out_of_mem "Ez dago eragiketa egiteko adina memoriarik. Lehenik, ezabatu zenbait datu."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbp"
+#define qtn_ir_now_bitrate_mbps "%N mbp"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Hurrengo katea"
+#define qtn_ir_now_tooltip_play "Erreproduzitu"
+#define qtn_ir_now_tooltip_previous "Aurreko katea"
+#define qtn_ir_now_tooltip_stop "Gelditu"
+#define qtn_ir_now_wait_buffering "Bufferrean gordetzen"
+#define qtn_ir_now_wait_buffering_perc "% %N buferreratzen"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ez dago sare konexiorik"
+#define qtn_ir_nwcontroller_err_nosnaps "Ez da sargunerik zehaztu"
+#define qtn_ir_options_add "Gehitu Gogokoak atalean"
+#define qtn_ir_options_add_manually "Gehitu katea eskuz"
+#define qtn_ir_options_change "Aldatu"
+#define qtn_ir_options_clearhistory "Ezabatu historia"
+#define qtn_ir_options_editstation "Editatu katea"
+#define qtn_ir_options_equalizer "Ekualizadorea"
+#define qtn_ir_options_exit "Irten"
+#define qtn_ir_options_findnmusicstore "Bilatu musika dendan"
+#define qtn_ir_options_fmtrans "FM transmisorea"
+#define qtn_ir_options_gotomusicstore "Joan musika dendara"
+#define qtn_ir_options_help "Laguntza"
+#define qtn_ir_options_history "Historia"
+#define qtn_ir_options_info "Katearen datuak"
+#define qtn_ir_options_mainview "Joan ikuspegi nagusira"
+#define qtn_ir_options_mark "Markatu"
+#define qtn_ir_options_markall "Markatu guztiak"
+#define qtn_ir_options_markunmark "Markatu/Kendu marka"
+#define qtn_ir_options_now "Joan erreprodukziora"
+#define qtn_ir_options_off "Desaktibatuta"
+#define qtn_ir_options_on "Aktibatuta"
+#define qtn_ir_options_searchag "Bilatu berriro"
+#define qtn_ir_options_select "Aukeratu"
+#define qtn_ir_options_settings "Ezarpenak"
+#define qtn_ir_options_station "Irrati katea"
+#define qtn_ir_options_stereowidening "Estereo zabalketa"
+#define qtn_ir_options_unmark "Desmarkatu"
+#define qtn_ir_options_unmarkall "Desmarkatu guztiak"
+#define qtn_ir_playfail_err "Erreprodukzio errorea"
+#define qtn_ir_playlist_title "Jasotakoak"
+#define qtn_ir_popup_no_results "Ez da emaitzarik lortu"
+#define qtn_ir_popup_toomany_results "Emaitza gehiegi. Zehaztu bilaketa."
+#define qtn_ir_results_none "Ez da bat datorren katerik aurkitu. Bilatu berriro."
+#define qtn_ir_search_result "%0U[09]:%1N emaitza"
+#define qtn_ir_search_results "%0U[08]:%1N emaitza"
+#define qtn_ir_set_folder_internetradio "Internet irratia"
+#define qtn_ir_set_folder_irradio "Internet irratia"
+#define qtn_ir_settings_3g "3G konexioko bit tasa"
+#define qtn_ir_settings_connec_softkey_ok "Ados"
+#define qtn_ir_settings_gprs "GPRS konexioko bit tasa"
+#define qtn_ir_settings_network "Sare konexioa"
+#define qtn_ir_settings_snap_default "Konexio lehenetsia"
+#define qtn_ir_settings_title "Ezarpenak"
+#define qtn_ir_settings_wifi "Wi-Fi konexioko bit tasa"
+#define qtn_ir_softkey_back "Atzera"
+#define qtn_ir_softkey_cancel "Utzi"
+#define qtn_ir_softkey_done "Eginda"
+#define qtn_ir_softkey_no "Ez"
+#define qtn_ir_softkey_options "Aukerak"
+#define qtn_ir_softkey_select "Aukeratu"
+#define qtn_ir_softkey_yes "Bai"
+#define qtn_ir_station_saved "Katea gordeta"
+#define qtn_ir_stationlist_nomatches "(bat-etortzerik ez)"
+#define qtn_ir_stations_popup_delete "%U[74]\nezabatu?"
+#define qtn_ir_stations_popup_delete_many "%N kate ezabatu?"
+#define qtn_ir_stations_popup_removed "%U[87] ezabatuta"
+#define qtn_ir_stations_popup_removed_many "%N irrati kate ezabatuta"
+#define qtn_ir_stations_popup_save "Katea Gogokoak atalean gorde?"
+#define qtn_ir_suboptions_delete "Ezabatu"
+#define qtn_ir_suboptions_details "Xehetasunak"
+#define qtn_ir_suboptions_move "Mugitu"
+#define qtn_ir_terms_details "Ondorengo Baldintzak onartuz gero, kontratu batera batzen zara, lege aplikagariak baimendutakora mugatuta dagoena eta eskubide materialak ukatzen dituena"
+#define qtn_ir_terms_heading "Baldintzak"
+#define qtn_ir_terms_softkey_accept "Onartu"
+#define qtn_ir_terms_softkey_decline "Baztertu"
+#define qtn_ir_title_history "Historia"
+#define qtn_ir_tooltip_addalltofav "Guztiak Gogokoetan"
+#define qtn_ir_tooltip_addstation "Gehitu katea eskuz"
+#define qtn_ir_tooltip_addtofav "Gehitu Gogokoetan"
+#define qtn_ir_tooltip_copy "Kopiatu"
+#define qtn_ir_tooltip_findnstore "Bilatu musika dendan"
+#define qtn_ir_tooltip_findst "Bilatu kateak"
+#define qtn_ir_tooltip_history "Historia"
+#define qtn_ir_tooltip_listen "Entzun"
+#define qtn_ir_tooltip_paste "Itsatsi"
+#define qtn_ir_tooltip_stationde "Katearen datuak"
+#define qtn_ir_top_title "Entzunenak"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Izena"
+#define qtn_ir_url_title "Gehitu katea"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/401/internetradioai_401.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet irratia">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/401/terms_401.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Internet Radio zerbitzuak (“Zerbitzua") internet irrati estazioak aurkitzeko eta haien edukinaz gozatzeko aukera emango dizu. ZERBITZUA ERABILTZEAK HITZARMEN HAU IRAKURRI ETA ULERTU DUZULA ETA HONEN TERMINO ETA BALDINTZAK ONARTZEN DITUZULA SUPOSATZEN DU ETA, HAU GUZTIAREKIN ADOS ZAUDELARIK. Ados ez bazaude, Zerbitzua erabiltzeko baimenik ez daukazula jakin ezazu.</p>
+
+<p></p>
+
+<h1>1. DEFINIZIOAK</h1>
+
+<p></p>
+
+<p>Internet irrati estazioak orokorrean irratizko edukina eta honi lotutako metadatuak ekoiztu eta interneten sare baten bidez banatzen dituzten entitateak dira</p>
+
+<p></p>
+
+<p>Internet irrati estazioarekiko esteka errekurtso bilatzaile bat edo multzo bat da, erabiltzaileari internet irrati estazioak sarez banatutako edukinari sarbidea ematen diona.</p>
+
+<p></p>
+
+<h1>2. ZERBITZUA</h1>
+
+<p></p>
+
+<p>Zerbitzuak honako hau burutzeko aukera ematen du:</p>
+<p>1. Internet irrati estazioekiko estekak bilatu;</p>
+<p>2. internet irrati estazioetan sartu;</p>
+
+<p></p>
+
+<h1>3. ZERBITZUAREN ERABILERA</h1>
+
+<p></p>
+
+<p>Zerbitzuaren baimendutako erabilera bakarra pribatua eta ez-komertziala da. Nokiak Zerbitzuaren eta Zerbitzuari lotutako jabetza intelektual eskubide guztiak gordetzen ditu.</p>
+
+<p></p>
+
+<p>Nokiak termino eta baldintza hauek aurretik jakinaraziz aldatzeko eskubidea gordetzen du.</p>
+
+<p></p>
+
+<h1>4. PRIBATUTASUNA</h1>
+
+<p></p>
+
+<p>Nokiak erabiltzaileen pribatutasuna bermatuko duela hitzematen du, konfidentzialtasun politika gogorrak inplementatuz.</p>
+
+<p></p>
+
+<p>Erabilera kontrolatzeko eta Zerbitzua hobetzeko xedeaz, Nokiak erabilerari buruzko informazioa jaso lezake, horren barne baina honi ez mugatuta bisitatutako internet irrati estazioei buruzko informazioa, estazio bakoitzean emandako denbora eta gogokoenak bezala sailkatutako elementuak daudela.</p>
+
+<p></p>
+
+<p>Nokiak ez du Zerbitzuaren erabiltzaileen nortasuna adierazten duen informaziorik jasoko.</p>
+
+<p></p>
+
+<h1>5. ZERBITZUAREN ERABILGARRITASUNA</h1>
+
+<p></p>
+
+<p>Zerbitzua erosotasun gisa eskaintzen zaizu. “Den bezala†eta “erabilgarritasunaren arabera†eskaintzen zaizu. Nokiak ez du bermatzen Zerbitzua etengabekoa edota akatsgabea izango delarik. Nokiak Zerbitzua edoizein momentutan berrikusteko edota harenganako sarbidea etentzeko eskubidea gordetzen du.</p>
+
+<p></p>
+
+<p>Nokiak Zerbitzuari lotutako aplikazioen eguneratzeak eskaintzea erabaki lezake.</p>
+
+<p></p>
+
+<h1>6. UKO EGITEA ETA ERANTZUNKIZUNA</h1>
+
+<p></p>
+
+<p>Zure sarbidea errazteko, Nokiak hirugarren parteek jabetutako edo kudeatutako internet irrati estazioekiko estekak eskaini ditzake. Nokia ez du bermatzen internet irrati estazioekiko estekak erabilgarri izango direla. Bestalde, Nokiarekin loturarik ez duen edukinak ez du harekiko Nokiaren adostasuna suposatzen, ez eta edukin horrekin lotatutako produktu edota zerbitzuekiko adostasuna ere.</p>
+
+<p></p>
+
+<p>Edozein estaziotan sartu baino lehen, bere arauak irakurri eta onartu beharko dituzu. Nokiak hirugarren parteek eskainitako edukinen gaineko kontrolik ez duela eta internet irrati estazioek eskainitako edukinen gaineko erantzunkizunik izan ahal ez duela onartzen duzu.</p>
+
+<p></p>
+
+<p>Zerbitzua erabiliz internet irrati estazioetan sartuz gero, zure zerbitzu hornitzailearen sarearen bidez datu kopuru handiak transmititu behar izatea gerta liteke. Datuak igortzeko tarifei buruzko informazioa jasotzeko jo ezazu zure zerbitzu-hornitzailearengana. Kontuan izan Zerbitzua bit abiadura altuagoa duten sareak bidaltzen dituzten internet irrati estazioekin erabiliz gero, datu trafikoari lotutako gastu altuagoak izatea ekar lezakeela.</p>
+
+<p></p>
+
+<p>Zerbitzuaren erabilerari lotutako datu trafikoak honako ekar lezake gutxienez: estazioen direktorioaren edukina eguneratzea, internet irrati estazioetatik datozen datuak zabaltzea, informazio estatistikoa jasotzea eta internet irrati aplikazioa eguneratzea.</p>
+
+<p></p>
+
+<p>Nokiak ez du zuk egindako Zerbitzuaren erabilerari lotutako datu trafikoak sortutako gastuenganako erantzunkizunik.</p>
+
+<p></p>
+
+<p>EZ DA INOLAKO BERME BERARIAZKO EZ INPLIZITURIK ESKAINI EDO AURKEZTU, ONDORENGO ALDERDIEI DAGOKIENEZ (EZ HORIEI BAKARRIK, ORDEA). JABEGO-BERMEAK, HELBURU JAKIN BATERAKO SALEROSTEKO AUKERA EDO EGOKITASUNA ETA APLIKAZIOAK BESTE INOREN PATENTERIK, COPYRIGHTIK, MERKATARITZA-MARKARIK EDO BESTELAKO ESKUBIDERIK URRATZEN EZ DUELA, ZERBITZUAREN ERABILGARRITASUNARI, DOITASUNARI, FIDAGARRITASUNARI EDOTA EDUKINARI DAGOKIONEZ. NOKIAK EZ DU INONDIK INORA ERANTZUKIZUNIK IZANGO, EDOZEIN DATU EDO IRABAZIEN GALERAGATIK EDO EDONOLA SORTUTAKO KALTE ZUZEN, ZEHARKAKO, BEREZI, INTZIDENTIAL EDO KONSEKUENTZIALENGATIK, EZTA ZERBITZUAREN ERABILERAK EDO EZGAITASUNAK SORTUTAKO NEGOZIOEN ETENALDIENGATIK ERE, NOKIARI HALAKO KALTEEI BURUZ JAKINARAZI BADIOTE ERE. HAINBAT JURISDIKZIOK EZ DU BERME EDOTA ERANTZUNKIZUN BAZTERTZEA BAIMENTZEN, BERAZ AIPATUTAKO MUGAKETAK EDO BAZTERTZEAK ZURI EZ ATXIKITITZEA GERTA LITEKE.  HALA GERTATUZ GERO, NOKIAREN ERANTZUNKIZUNA LEGEAK BAIMENDUTAKO IRISMEN HANDIENERA MUGATUTA LEGOKE.</p>
+
+<p></p>
+
+<p>Hemen adierazitako ezerk ez du kontsumitzaile den edozein parteren arauzko eskubideei kalterik egingo. Hemen adierazitako ezerk ez du Nokiaren erantzunkizuna mogatuko, ezta Nokiaren oharkabetasunak sortutako heriotzak edota kalteak ere.</p>
+
+<p></p>
+
+<h1>7. COPYRIGHTAK URRATZEAREN ALEGAZIOEI BURUZKO POLITIKA</h1>
+
+<p></p>
+
+<p>Copyrighta duen zure lana beste inork edonola eta copyrighta urratuz erabili duela uste baduzu, Nokiari jakinarazi diezaiokezu honako hau adieraziz:</p>
+
+<p></p>
+
+<p>(1) Urratu den eskubide esklusiboaren jabea ordezkatzeko baimena duen pertsona baten sinadura fisiko edo elektronikoa.</p>
+
+<p></p>
+
+<p>(2) Urratuta izan dela uste den copyrighta duen lanarean identifikatze edota deskribapena.</p>
+
+<p></p>
+
+<p>(3) Urratzailea dela uste den materialaren identifikatze edota deskribapena eta materiala aurkitzeko beharrezko informazioa.</p>
+
+<p></p>
+
+<p>(4) Zure izena, helbidea, telefono zenbakia eta Nokia zurekin kontaktuan jartzeko beharrezko bestelako informazioa.</p>
+
+<p></p>
+
+<p>(5) Material horren bidez egindako erabilera hura copyrightaren jabeak, bere agenteak edota legeak baimentzen ez duelaren jakinean zaudela dioen zure adierazpena.</p>
+
+<p></p>
+
+<p>(6) Jakinarazpenean agertzen den informazioa zehatza dela eta, hala ez izanez gero zinauste zigorra ezarriko delarik, urratua izan den eskubide esklusibo baten jabearen ordezko izateko baimena daukazula dioen adierazpena.</p>
+
+<p></p>
+
+<p>Jakinarazpena Berariazko Agentearen helbide honetara bidali ezazu:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. INDARREKO LEGEA</h1>
+
+<p></p>
+
+<p>Termino eta baldintza hauetan erabili den moduan, “Nokiaâ€-k Nokia Corporation-i egiten dio erreferentzia. Nokiak Finlandian egiten du lan eta kontrolatzen du Zerbitzua. Hala, Zerbitzu honek barne duen informazioa Finlandian hornitutakoa kontsideratuko da.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Eskubide guztiak erreserbatuta.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/402/internetradio_402.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Preguntar sempre"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N emisoras gardadas"
+#define qtn_ir_added_single "%U[88] gardada"
+#define qtn_ir_addmanually_unnamed "Sen nome"
+#define qtn_ir_addst_description "Descrición"
+#define qtn_ir_addst_streamurl "URL transmisión secuencia"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio non activa"
+#define qtn_ir_app_general_err "Erro interno. Reiniciar a aplicación."
+#define qtn_ir_apps_grid "Radio Inter."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio por Internet"
+#define qtn_ir_apps_swins "Radio por Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Calidade óptima"
+#define qtn_ir_bitrate_high "Alta calidade"
+#define qtn_ir_bitrate_standard "Calidade estándar"
+#define qtn_ir_cost_heading "Aviso importante"
+#define qtn_ir_cost_softkey_continue "Continuar"
+#define qtn_ir_cost_softkey_exit "Saír"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "A radio por Internet emprega a conexión de datos do teléfono para as transmisións de radio. Só se recomenda se dispón dunha tarifa plana de datos. Se non está seguro dos custos dos datos, consulte co seu operador antes de continuar."
+#define qtn_ir_country_list_expanded "%N emisoras"
+#define qtn_ir_countryregion_title "País/rexións"
+#define qtn_ir_discover_beststations "Selección das mellores emis."
+#define qtn_ir_discover_country_region "Buscar por país/rexión"
+#define qtn_ir_discover_genre "Buscar por xénero"
+#define qtn_ir_discover_genre_expanded "Emis. clasificadas por xénero"
+#define qtn_ir_discover_langauge "Buscar por idioma"
+#define qtn_ir_discover_language_expanded "Emis. clasificadas por idioma"
+#define qtn_ir_discover_staticountryreg "Emis. ordenadas país/rexión"
+#define qtn_ir_discover_title "Directorio emis."
+#define qtn_ir_discover_top "As mellores emisoras"
+#define qtn_ir_edit_title "Editar emisora"
+#define qtn_ir_err_operation "Erro na operación. Ténteo de novo."
+#define qtn_ir_err_url_unavail "URL non dispoñible"
+#define qtn_ir_error_address "Enderezo de emisora de radio por Internet incorrecto"
+#define qtn_ir_error_connection "Tempo de espera da conexión rematado. Ténteo de novo."
+#define qtn_ir_error_favourites "Non hai suficiente espazo en favoritos para gardar a selección"
+#define qtn_ir_error_general "Imposible conectar á emisora"
+#define qtn_ir_error_isds_unavailable "Servizo de directorio de emisora da Internet non dispoñible temporalmente"
+#define qtn_ir_error_notavailable "Non hay ligazóns de transmisión en secuencia dispoñibles"
+#define qtn_ir_error_notinisds "Elemento xa non está dispoñible"
+#define qtn_ir_error_search "Introducir termo de busca"
+#define qtn_ir_findst_addstation "Eng. emis. manualm."
+#define qtn_ir_findst_addtofav "Engadir emisora a favoritas"
+#define qtn_ir_findst_browsesds "Buscar directorio emiso."
+#define qtn_ir_findst_search_ensrhterm "Introducir termo de busca"
+#define qtn_ir_findst_softkey_search "Buscar"
+#define qtn_ir_findstation_title "Buscar emisoras"
+#define qtn_ir_firstuse_title "Radio Intern.: Benvido"
+#define qtn_ir_genre_list_expanded "%N emisoras"
+#define qtn_ir_genre_title "Xéneros"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Non hai historial"
+#define qtn_ir_homescreen_buffering "Almacen. no búfer"
+#define qtn_ir_homescreen_lastplayed "Pistas recentes"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/Rexión:"
+#define qtn_ir_info_details_description "Descrición:"
+#define qtn_ir_info_details_genre "Xénero(s):"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nome:"
+#define qtn_ir_info_details_streams "Transmisións:"
+#define qtn_ir_info_details_title "Info. emisora"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "Dir. emis."
+#define qtn_ir_info_details_type_manual "Defi. usu."
+#define qtn_ir_info_details_unnamed "Sen nom."
+#define qtn_ir_info_softkey_close "Pechar"
+#define qtn_ir_language_list_expanded "%N emisoras"
+#define qtn_ir_language_title "Idiomas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Cargando"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Buscando"
+#define qtn_ir_main_descriptive_text "Use \"Busc. emis.\" da barr. ferr. para eng. emis."
+#define qtn_ir_main_discover_expanded "Descubrir novas emis. radio"
+#define qtn_ir_main_last "Pistas recentes"
+#define qtn_ir_main_now "Reproducindo"
+#define qtn_ir_main_prog_deleting "Borrando %N"
+#define qtn_ir_main_searchindir "Buscar no directorio"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Emis. sen nome"
+#define qtn_ir_memlo_ram_out_of_mem "Non hai memoria abondo para efectuar a operación. Borre datos."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Seguinte emisora"
+#define qtn_ir_now_tooltip_play "Reproducir"
+#define qtn_ir_now_tooltip_previous "Emisora anterior"
+#define qtn_ir_now_tooltip_stop "Deter"
+#define qtn_ir_now_wait_buffering "Almacenando no búfer"
+#define qtn_ir_now_wait_buffering_perc "Almacenando no búfer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Sen conexión de rede"
+#define qtn_ir_nwcontroller_err_nosnaps "Ningún punto de acceso definido"
+#define qtn_ir_options_add "Engadir a Favoritas"
+#define qtn_ir_options_add_manually "Engadir emisora manual."
+#define qtn_ir_options_change "Cambiar"
+#define qtn_ir_options_clearhistory "Borrar historial"
+#define qtn_ir_options_editstation "Editar emisora"
+#define qtn_ir_options_equalizer "Ecualizador"
+#define qtn_ir_options_exit "Saír"
+#define qtn_ir_options_findnmusicstore "Atopar en Music store"
+#define qtn_ir_options_fmtrans "Transmisor FM"
+#define qtn_ir_options_gotomusicstore "Ir a Music store"
+#define qtn_ir_options_help "Axuda"
+#define qtn_ir_options_history "Historial"
+#define qtn_ir_options_info "Información emisora"
+#define qtn_ir_options_mainview "Ir á vista principal"
+#define qtn_ir_options_mark "Marcar"
+#define qtn_ir_options_markall "Marcar todo"
+#define qtn_ir_options_markunmark "Marcar/Desmarcar"
+#define qtn_ir_options_now "Ir a Reproducindo"
+#define qtn_ir_options_off "Desactivar"
+#define qtn_ir_options_on "Activar"
+#define qtn_ir_options_searchag "Buscar de novo"
+#define qtn_ir_options_select "Seleccionar"
+#define qtn_ir_options_settings "Axustes"
+#define qtn_ir_options_station "Emisora"
+#define qtn_ir_options_stereowidening "Ampliación de estéreo"
+#define qtn_ir_options_unmark "Desmarcar"
+#define qtn_ir_options_unmarkall "Desmarcar todo"
+#define qtn_ir_playfail_err "Erro ó reproducir a radio"
+#define qtn_ir_playlist_title "Ligazóns recib."
+#define qtn_ir_popup_no_results "Non se atoparon resultados"
+#define qtn_ir_popup_toomany_results "Demasiados resultados. Limite a busca."
+#define qtn_ir_results_none "Non se atoparon emisoras coincidentes. Buscar de novo."
+#define qtn_ir_search_result "%0U[10]:%1N results."
+#define qtn_ir_search_results "%0U[09]:%1N results."
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Velocid. bits conexión 3G"
+#define qtn_ir_settings_connec_softkey_ok "Aceptar"
+#define qtn_ir_settings_gprs "Velocid. bits conex. GPRS"
+#define qtn_ir_settings_network "Conexión de rede"
+#define qtn_ir_settings_snap_default "Conexión por defecto"
+#define qtn_ir_settings_title "Axustes"
+#define qtn_ir_settings_wifi "Velocid. bits conex. Wi-Fi"
+#define qtn_ir_softkey_back "Atrás"
+#define qtn_ir_softkey_cancel "Cancelar"
+#define qtn_ir_softkey_done "Feito"
+#define qtn_ir_softkey_no "Non"
+#define qtn_ir_softkey_options "Opcións"
+#define qtn_ir_softkey_select "Seleccionar"
+#define qtn_ir_softkey_yes "Si"
+#define qtn_ir_station_saved "Emisora gardada"
+#define qtn_ir_stationlist_nomatches "(ningunha coincidencia)"
+#define qtn_ir_stations_popup_delete "Borrar\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Borrar %N emisoras?"
+#define qtn_ir_stations_popup_removed "%U[88] borrada"
+#define qtn_ir_stations_popup_removed_many "%N emisoras borradas"
+#define qtn_ir_stations_popup_save "Gardar emisora en Favoritas?"
+#define qtn_ir_suboptions_delete "Borrar"
+#define qtn_ir_suboptions_details "Detalles"
+#define qtn_ir_suboptions_move "Mover"
+#define qtn_ir_terms_details "Ao aceptar os Termos e condicións seguintes vostede asina un contrato na medida permitida pola lexislación aplicable e sen máis limitacións e prohibicións con respecto aos dereitos materiais"
+#define qtn_ir_terms_heading "Termos e condicións"
+#define qtn_ir_terms_softkey_accept "Aceptar"
+#define qtn_ir_terms_softkey_decline "Rexeitar"
+#define qtn_ir_title_history "Historial"
+#define qtn_ir_tooltip_addalltofav "Engad. tod. a favoritas"
+#define qtn_ir_tooltip_addstation "Eng. emis. manualm."
+#define qtn_ir_tooltip_addtofav "Engadir a favoritas"
+#define qtn_ir_tooltip_copy "Copiar"
+#define qtn_ir_tooltip_findnstore "Buscar en Music store"
+#define qtn_ir_tooltip_findst "Buscar emisoras"
+#define qtn_ir_tooltip_history "Historial"
+#define qtn_ir_tooltip_listen "Escoitar"
+#define qtn_ir_tooltip_paste "Pegar"
+#define qtn_ir_tooltip_stationde "Detalles da emisora"
+#define qtn_ir_top_title "As mellor. emis."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nome"
+#define qtn_ir_url_title "Engadir emisora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/402/internetradioai_402.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/402/terms_402.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>O servizo Nokia Internet Radio (“Servizoâ€) permítelle experimentar e descubrir os contidos das estacións de radio de internet. VOSTEDE ACEPTA QUE O SEU USO DO SERVIZO SIGNIFICA QUE LIU ESTE ACORDO, O ENTENDE E QUE ACEPTA SOMETERSE ÓS SEUS TERMOS E CONDICIÓNS. Se non acepta, non terá permiso para empregar o Servizo.</p>
+
+<p></p>
+
+<h1>1. DEFINICIÓNS</h1>
+
+<p></p>
+
+<p>As estacións de radio de internet son entidades que xeralmente producen e distribúen contidos de audio e metadatos relacionados a través de internet mediante un fluxo de datos.</p>
+
+<p></p>
+
+<p>O enlace ás estacións de radio de internet é un localizador de recursos ou un conxunto de localizadores de recursos que permiten ó usuario acceder ós contidos difundidos pola estación de radio de internet.</p>
+
+<p></p>
+
+<h1>2. O SERVIZO</h1>
+
+<p></p>
+
+<p>O Servizo permite:</p>
+<p>1. explorar enlaces de estacións de radio de internet;</p>
+<p>2. acceder ós contidos de estación de radio de internet;</p>
+
+<p></p>
+
+<h1>3. USO DO SERVIZO</h1>
+
+<p></p>
+
+<p>O Servizo so se permite para uso privado e non comercial. Nokia será propietaria de todos os dereitos de propiedade intelectual no e para o Servizo.</p>
+
+<p></p>
+
+<p>Nokia resérvase o dereito de modificar estes termos e condicións informándolle sobre o cambio.</p>
+
+<p></p>
+
+<h1>4. PRIVACIDADE</h1>
+
+<p></p>
+
+<p>Nokia comprométese a protexer a privacidade do usuario mediante a execución estrita de políticas de confidencialidade.</p>
+
+<p></p>
+
+<p>Para controlar o uso e mellorar o Servizo, Nokia pode recoller datos do usuario, incluíndo pero sen se limitar a información sobre o acceso as estacións de radio, o tempo dedicado en cada unha das estacións e as favoritas.</p>
+
+<p></p>
+
+<p>Nokia non recolle información que permita identificar ó usuario do Servizo.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILIDADE DO SERVIZO</h1>
+
+<p></p>
+
+<p>O presente Servizo de entretemento proporcionáselle “tal cal†e está suxeito a "disponibilidade". Nokia non garante a non interrupción ou fiabilidade do Servizo. Nokia resérvase o dereito a revisar o Servizo ou a retirar o seu acceso en calquera momento.</p>
+
+<p></p>
+
+<p>Nokia resérvase o dereito de proporcionar actualizacións para o Servizo no relativo ás aplicacións de software.</p>
+
+<p></p>
+
+<h1>6. LIMITACIÓN DE RESPONSABILIDADE</h1>
+
+<p></p>
+
+<p>Para facilitar o acceso, Nokia pode incluír enlaces a estacións de radio de internet que pertencen ou son operadas por terceiras partes. Nokia non garante que os enlaces a estacións de radio de internet sexan operativos. Ademais, o contido que non ten relación con Nokia non implica que Nokia aprobe o seu contido, produtos ou servizos indicados nese contido.</p>
+
+<p></p>
+
+<p>En caso de existir, vostede debe revisar e aceptar as normas de uso de cada estación de radio antes de acceder a ela. Vostede tamén acepta que Nokia non ten control sobre el contido dos servizos de terceiros e non pode asumir ningunha responsabilidade para o contido proporcionado por estacións de radio de internet.</p>
+
+<p></p>
+
+<p>O acceso ó contido dunha estación de radio mediante o uso do Servizo pode incluír a transmisión de gran cantidade de datos mediante o seu provedor de rede. Contacte co seu provedor de servizo para obter información sobre os prezos de transmisión de datos. O uso do Servizo con estacións de radio de internet cun fluxo de datos de alta velocidade pode implicar un maior custo asociado ó tráfico de datos.</p>
+
+<p></p>
+
+<p>O tráfico de datos asociado ó uso do Servizo pode incluír polo menos: actualizar o directorio de contidos de estacións, fluxo de datos da estación de radio de internet, recoller estatísticas de datos e mellorar a aplicación de radio de internet.</p>
+
+<p></p>
+
+<p>Nokia non é responsable dos custos de tráfico de datos asociados ó seu uso do Servizo.</p>
+
+<p></p>
+
+<p>NON EXISTE NINGUNHA GARANTÃA DE NINGÚN TIPO, TANTO EXPRESA COMO IMPLÃCITA, INCLUÃNDO PERO SEN SE LIMITAR A GARANTÃAS DE TÃTULO OU DE NON INFRACCIÓN OU ÃS IMPLÃCITAS DE COMERCIALIZACIÓN OU CAPACIDADE PARA UN PROPÓSITO PARTICULAR, EN RELACIÓN A DISPONIBILIDADE, EXACTITUDE, FIABILIDADE OU CONTIDO DO SERVIZO. NOKIA NON SE RESPONSABILIZA DE NINGÚN DANO DIRECTO, INDIRECTO, FORTUITO, ESPECIAL OU CONSEGUINTE, PÉRDIDA DE BENEFICIOS OU INTERRUPCIÓN DE NEGOCIO PROVOCADO POLO USO OU INCAPACIDADE DE USO DO SERVIZO, INCLUSO SE NOKIA FOI AVISADA DA POSIBILIDADE DESTE DANO. ALGUNHAS XURISDICCIÓNS NON PERMITEN A EXCLUSIÓN DE ALGUNHAS GARANTÃAS OU LIMITACIÓNS DE RESPONSABILIDADE, ASà QUE AS LIMITACIÓN OU EXCLUSIÓNS INDICADAS ARRIBA PODEN NON APLICARSE A VOSTEDE. A RESPONSABILIDADE DE NOKIA NESTE CASO SE LIMITA à MAIOR EXTENSIÓN PERMITIDA POLA LEI.</p>
+
+<p></p>
+
+<p>Nada do contido no presente documento pode prexudicar os dereitos establecidos pola lei para ningunha parte na súa actuación coma consumidor. Nada do contido no presente documento limita a responsabilidade de Nokia en caso de morte ou dano persoal resultante dunha neglixencia por parte de Nokia.</p>
+
+<p></p>
+
+<h1>7. POLÃTICA RELATIVA AS RECLAMACIÓNS DE INFRACCIÓN DO DEREITO DE REPRODUCCIÓN</h1>
+
+<p></p>
+
+<p>Se pensa que o seu traballo con dereitos de reprodución se tratou dunha forma que constitúe unha infracción, pode informar a Nokia mediante unha notificación con:</p>
+
+<p></p>
+
+<p>(1) Unha firma física ou dixital dunha persoa autorizada para actuar en nome do propietario do dereito exclusivo que supostamente se infrinxiu.</p>
+
+<p></p>
+
+<p>(2) Identificación ou descrición do traballo con dereitos de reprodución do que se reclama a infracción.</p>
+
+<p></p>
+
+<p>(3) Identificación ou descrición do material coa suposta infracción e información razoablemente suficiente para localizar o material.</p>
+
+<p></p>
+
+<p>(4) O seu nome, enderezo, número de teléfono, enderezo de correo electrónico e calquera información que permita a Nokia contactar con vostede.</p>
+
+<p></p>
+
+<p>(5) Unha declaración na que indique de boa fe que segundo vostede se está a facer un uso do material dunha forma non permitida polo propietario, o seu axente, ou a lei, e</p>
+
+<p></p>
+
+<p>(6) Unha declaración de que a información na notificación é exacta, e baixo pena de perxurio, que está autorizado para actuar en nome do propietario do dereito exclusivo que se infrinxe supostamente.</p>
+
+<p></p>
+
+<p>A notificación débese enviar ó noso enderezo de axente designado:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. XURISDICCIÓN</h1>
+
+<p></p>
+
+<p>Tal e como se usa nestes termos e condicións, “Nokia†significa Nokia Corporation. Nokia opera e controla o Servizo dende instalacións en Finlandia. Desta forma, a información contida no presente Servizo se considera como provista en Finlandia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Todos os dereitos reservados.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/42/internetradio_42.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Винаги питай"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "ЗапиÑани Ñа %N Ñтанции"
+#define qtn_ir_added_single "%U[85] е запиÑана"
+#define qtn_ir_addmanually_unnamed "Без име"
+#define qtn_ir_addst_description "ОпиÑание"
+#define qtn_ir_addst_streamurl "URL за Ñтийминг"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Интернет радио"
+#define qtn_ir_ai_radio_not_active "Радиото не е активно"
+#define qtn_ir_app_general_err "Вътрешна грешка. РеÑтартирайте приложението."
+#define qtn_ir_apps_grid "Инт. радио"
+#define qtn_ir_apps_list "Интернет радио"
+#define qtn_ir_apps_skey "Интерн. радио"
+#define qtn_ir_apps_standby "Интернет радио"
+#define qtn_ir_apps_swins "Интернет радио"
+#define qtn_ir_apps_wheel "Интернет радио"
+#define qtn_ir_bitrate_best "Ðай-добро качеÑтво"
+#define qtn_ir_bitrate_high "ВиÑоко качеÑтво"
+#define qtn_ir_bitrate_standard "Стандартно качеÑтво"
+#define qtn_ir_cost_heading "Важно Ñъобщение"
+#define qtn_ir_cost_softkey_continue "Продължи"
+#define qtn_ir_cost_softkey_exit "Изход"
+#define qtn_ir_cost_title "Интерн. радио"
+#define qtn_ir_cost_warning "Интернет радиото използва връзката за данни на телефона за радио предаваниÑ. Това Ñе препоръчва Ñамо ако имате план за данни, който не отчита трафика. Ðко не Ñте Ñигурни за цените Ñи за данни, попитайте оператора, преди да продължите."
+#define qtn_ir_country_list_expanded "%N Ñтанции"
+#define qtn_ir_countryregion_title "Страни/рег."
+#define qtn_ir_discover_beststations "Избор най-добри Ñтанции"
+#define qtn_ir_discover_country_region "Преглед по Ñтрана/рег."
+#define qtn_ir_discover_genre "Преглед по жанр"
+#define qtn_ir_discover_genre_expanded "Станции, Ñортирани по жанр"
+#define qtn_ir_discover_langauge "Преглед по език"
+#define qtn_ir_discover_language_expanded "Станции, Ñортирани по език"
+#define qtn_ir_discover_staticountryreg "Станции по град/регион"
+#define qtn_ir_discover_title "Указател Ñтанц."
+#define qtn_ir_discover_top "Топ Ñтанции"
+#define qtn_ir_edit_title "Ред. ÑтанциÑ"
+#define qtn_ir_err_operation "Грешка в операциÑта. Опитайте пак."
+#define qtn_ir_err_url_unavail "ÐедоÑтъпен URL"
+#define qtn_ir_error_address "Ðеправилен Ð°Ð´Ñ€ÐµÑ Ð½Ð° ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð½Ð° Интернет радио"
+#define qtn_ir_error_connection "Таймаут на връзката. Опитайте отново."
+#define qtn_ir_error_favourites "ÐÑма доÑтатъчно мÑÑто в предпочитаните, за да запишете избора"
+#define qtn_ir_error_general "Ðе мога да Ñе Ñвържа ÑÑŠÑ ÑтанциÑта"
+#define qtn_ir_error_isds_unavailable "УÑлугата указател на Интернет Ñтанции временно е ÑпрÑна"
+#define qtn_ir_error_notavailable "ÐÑма линкове за Ñтрийминг"
+#define qtn_ir_error_notinisds "Елементът вече не е наличен"
+#define qtn_ir_error_search "Въведете елемент за Ñ‚ÑŠÑ€Ñене"
+#define qtn_ir_findst_addstation "Доб. ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ€ÑŠÑ‡Ð½Ð¾"
+#define qtn_ir_findst_addtofav "Доб. ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¿."
+#define qtn_ir_findst_browsesds "Преглед указател"
+#define qtn_ir_findst_search_ensrhterm "Въведете за Ñ‚ÑŠÑ€Ñене"
+#define qtn_ir_findst_softkey_search "ТърÑи"
+#define qtn_ir_findstation_title "Ðамир. Ñтанции"
+#define qtn_ir_firstuse_title "Инт. радио: Поздрав"
+#define qtn_ir_genre_list_expanded "%N Ñтанции"
+#define qtn_ir_genre_title "Жанрове"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "ÐÑма хронологиÑ"
+#define qtn_ir_homescreen_buffering "Буфериране"
+#define qtn_ir_homescreen_lastplayed "ПоÑледно изпълн."
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Страна/регион:"
+#define qtn_ir_info_details_description "ОпиÑание:"
+#define qtn_ir_info_details_genre "Жанр(ове):"
+#define qtn_ir_info_details_language "Език:"
+#define qtn_ir_info_details_name "Име:"
+#define qtn_ir_info_details_streams "Потоци:"
+#define qtn_ir_info_details_title "Инфо ÑтанциÑ"
+#define qtn_ir_info_details_type "Тип:"
+#define qtn_ir_info_details_type_isds "Указател"
+#define qtn_ir_info_details_type_manual "Зад.потр."
+#define qtn_ir_info_details_unnamed "Без име"
+#define qtn_ir_info_softkey_close "Затвори"
+#define qtn_ir_language_list_expanded "%N Ñтанции"
+#define qtn_ir_language_title "Езици"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Зареждам"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "ТърÑÑ"
+#define qtn_ir_main_descriptive_text "От \"Ðамир. Ñтанции\" добавете Ñтанции"
+#define qtn_ir_main_discover_expanded "Открийте нови Ñтанции"
+#define qtn_ir_main_last "ПоÑл. изпълн."
+#define qtn_ir_main_now "Звучи Ñега"
+#define qtn_ir_main_prog_deleting "Изтриване на %N"
+#define qtn_ir_main_searchindir "ТърÑене в указателÑ"
+#define qtn_ir_main_title "Интерн. радио"
+#define qtn_ir_main_unnamed_station "Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ Ð±ÐµÐ· име"
+#define qtn_ir_memlo_ram_out_of_mem "Ðе доÑтига памет за операциÑта. Първо изтрийте нÑкои данни."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Следваща ÑтанциÑ"
+#define qtn_ir_now_tooltip_play "ПуÑкане"
+#define qtn_ir_now_tooltip_previous "Предходна ÑтанциÑ"
+#define qtn_ir_now_tooltip_stop "Стоп"
+#define qtn_ir_now_wait_buffering "Буфериране"
+#define qtn_ir_now_wait_buffering_perc "Буфериране %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "ÐÑма връзка Ñ Ð¼Ñ€ÐµÐ¶Ð°Ñ‚Ð°"
+#define qtn_ir_nwcontroller_err_nosnaps "ÐÑма зададена точка за доÑтъп"
+#define qtn_ir_options_add "Доб. към Предпочитани"
+#define qtn_ir_options_add_manually "Доб. ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ€ÑŠÑ‡Ð½Ð¾"
+#define qtn_ir_options_change "ПромÑна"
+#define qtn_ir_options_clearhistory "ИзчиÑти хронологиÑта"
+#define qtn_ir_options_editstation "Редактиране ÑтанциÑ"
+#define qtn_ir_options_equalizer "Еквалайзер"
+#define qtn_ir_options_exit "Изход"
+#define qtn_ir_options_findnmusicstore "ТърÑене в Муз. магазин"
+#define qtn_ir_options_fmtrans "FM предавател"
+#define qtn_ir_options_gotomusicstore "Отиди в Муз. магазин"
+#define qtn_ir_options_help "Помощ"
+#define qtn_ir_options_history "ХронологиÑ"
+#define qtn_ir_options_info "Инфо за ÑтанциÑ"
+#define qtn_ir_options_mainview "Към Ð³Ð»Ð°Ð²Ð½Ð¸Ñ ÐµÐºÑ€Ð°Ð½"
+#define qtn_ir_options_mark "Маркиране"
+#define qtn_ir_options_markall "Маркиране вÑички"
+#define qtn_ir_options_markunmark "Маркиране/демаркир."
+#define qtn_ir_options_now "Отиди на \"Звучат Ñега\""
+#define qtn_ir_options_off "Изключено"
+#define qtn_ir_options_on "Включено"
+#define qtn_ir_options_searchag "ТърÑи отново"
+#define qtn_ir_options_select "Избор"
+#define qtn_ir_options_settings "ÐаÑтройки"
+#define qtn_ir_options_station "СтанциÑ"
+#define qtn_ir_options_stereowidening "Стерео разширение"
+#define qtn_ir_options_unmark "Демаркиране"
+#define qtn_ir_options_unmarkall "Демаркир. вÑички"
+#define qtn_ir_playfail_err "ПуÑкането на радиото е неуÑпешно"
+#define qtn_ir_playlist_title "Получ. връзки"
+#define qtn_ir_popup_no_results "ÐÑма резултат от Ñ‚ÑŠÑ€Ñенето"
+#define qtn_ir_popup_toomany_results "Твърде много резултати. Уточнете Ñ‚ÑŠÑ€Ñенето."
+#define qtn_ir_results_none "Ðе Ñа намерени Ñъвпадащи Ñтанции. ПотърÑете отново."
+#define qtn_ir_search_result "%0U[08]:%1N резултат"
+#define qtn_ir_search_results "%0U[12]:%1N рез."
+#define qtn_ir_set_folder_internetradio "Интернет радио"
+#define qtn_ir_set_folder_irradio "Интернет радио"
+#define qtn_ir_settings_3g "СкороÑÑ‚ за 3G връзка"
+#define qtn_ir_settings_connec_softkey_ok "ОК"
+#define qtn_ir_settings_gprs "СкороÑÑ‚ за GPRS връзка"
+#define qtn_ir_settings_network "Връзка Ñ Ð¼Ñ€ÐµÐ¶Ð°Ñ‚Ð°"
+#define qtn_ir_settings_snap_default "Връзка по подразб."
+#define qtn_ir_settings_title "ÐаÑтройки"
+#define qtn_ir_settings_wifi "СкороÑÑ‚ за Wi-Fi връзка"
+#define qtn_ir_softkey_back "Ðазад"
+#define qtn_ir_softkey_cancel "ОтмÑна"
+#define qtn_ir_softkey_done "Готово"
+#define qtn_ir_softkey_no "Ðе"
+#define qtn_ir_softkey_options "Опции"
+#define qtn_ir_softkey_select "Избор"
+#define qtn_ir_softkey_yes "Да"
+#define qtn_ir_station_saved "СтанциÑта е запиÑана"
+#define qtn_ir_stationlist_nomatches "(нÑма ÑъвпадениÑ)"
+#define qtn_ir_stations_popup_delete "Изтриване на\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Изтриване на %N Ñтанции?"
+#define qtn_ir_stations_popup_removed "%U[87] е изтрита"
+#define qtn_ir_stations_popup_removed_many "%N Ñтанции Ñа изтрити"
+#define qtn_ir_stations_popup_save "ЗапиÑване на ÑтанциÑта в Предпочитани?"
+#define qtn_ir_suboptions_delete "Изтрий"
+#define qtn_ir_suboptions_details "Детайли"
+#define qtn_ir_suboptions_move "ПремеÑти"
+#define qtn_ir_terms_details "Като приемате Правилата и уÑловиÑта по-долу, вие Ñключвате договор до Ñтепента, разрешена от дейÑтващото законодателÑтво, без други Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ забрани по отношение на вÑички вещеÑтвени права"
+#define qtn_ir_terms_heading "Правила и уÑловиÑ"
+#define qtn_ir_terms_softkey_accept "Приеми"
+#define qtn_ir_terms_softkey_decline "Откажи"
+#define qtn_ir_title_history "ХронологиÑ"
+#define qtn_ir_tooltip_addalltofav "Доб. вÑички в Предп."
+#define qtn_ir_tooltip_addstation "Доб. ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ€ÑŠÑ‡Ð½Ð¾"
+#define qtn_ir_tooltip_addtofav "Доб. към Предпоч."
+#define qtn_ir_tooltip_copy "Копиране"
+#define qtn_ir_tooltip_findnstore "Ðамиране в Муз. маг."
+#define qtn_ir_tooltip_findst "Ðамиране на Ñтанции"
+#define qtn_ir_tooltip_history "ХронологиÑ"
+#define qtn_ir_tooltip_listen "Слушане"
+#define qtn_ir_tooltip_paste "Залепване"
+#define qtn_ir_tooltip_stationde "Данни за ÑтанциÑ"
+#define qtn_ir_top_title "Топ Ñтанции"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Име"
+#define qtn_ir_url_title "Доб. ÑтанциÑ"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/42/internetradioai_42.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Интернет радио">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/42/terms_42.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>УÑлугата на Nokia за интернет радио („УÑлугатаâ€) ви позволÑва да откривате и Ñлушате интернет радиоÑтанции. ВИЕ ПРИЕМÐТЕ, ЧЕ С ИЗПОЛЗВÐÐЕТО ÐРТÐЗИ УСЛУГРПОТВЪРЖДÐÐ’ÐТЕ, ЧЕ СТЕ ПРОЧЕЛИ ÐÐСТОЯЩИЯ ДОГОВОР, ЧЕ ГО РÐЗБИРÐТЕ И СЕ ОБВЪРЗВÐТЕ С УСЛОВИЯТРМУ. Ðко не приемате уÑловиÑта, нÑмате право да използвате уÑлугата.</p>
+
+<p></p>
+
+<h1>1. ОПРЕДЕЛЕÐИЯ</h1>
+
+<p></p>
+
+<p>Интернет радиоÑтанциите предÑтавлÑват продукт, който като цÑло произвежда и разпроÑтранÑва аудиоÑъдържание и Ñвързани Ñ Ñ‚Ð¾Ð²Ð° метаданни в интернет чрез излъчване в реално време (Ñтрийминг).</p>
+
+<p></p>
+
+<p>Линк към интернет радиоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°Ð²Ð° локатор на реÑурÑи (адреÑ) или набор от адреÑи, които дават на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð´Ð¾Ñтъп до Ñъдържание, излъчвано в реално време чрез интернет радиоÑтанциите.</p>
+
+<p></p>
+
+<h1>2. ОПИСÐÐИЕ ÐРУСЛУГÐТÐ</h1>
+
+<p></p>
+
+<p>УÑлугата дава възможноÑÑ‚ за Ñледното:</p>
+<p>1. браузване на линкове към интернет радиоÑтанции;</p>
+<p>2. оÑъщеÑтвÑване на доÑтъп до интернет радиоÑтанции;</p>
+
+<p></p>
+
+<h1>3. ИЗПОЛЗВÐÐЕ ÐРУСЛУГÐТÐ</h1>
+
+<p></p>
+
+<p>УÑлугата може да Ñе използва Ñамо за лични и нетърговÑки цели. Nokia притежава вÑички интелектуални права, Ñвързани Ñ Ð£Ñлугата.</p>
+
+<p></p>
+
+<p>Nokia Ñи запазва правото на промÑна на наÑтоÑщите уÑловиÑ, като ви уведоми за неÑ.</p>
+
+<p></p>
+
+<h1>4. ЗÐЩИТРÐРЛИЧÐИТЕ ДÐÐÐИ</h1>
+
+<p></p>
+
+<p>Nokia Ñе ангажира да защитава личните данни на потребителите, като прилага Ñтрога политика на поверителноÑÑ‚.</p>
+
+<p></p>
+
+<p>С цел наблюдаване на използването и за подобрÑване на УÑлугата Nokia може да Ñъбира данни по отношение на употребата включително, но не Ñамо, Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° интернет радиоÑтанциите, до които е оÑъщеÑтвен доÑтъп, Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° това колко време е Ñлушана вÑÑка ÑтанциÑ, както и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° продуктите, които Ñа клаÑирани като фаворити.</p>
+
+<p></p>
+
+<p>Nokia не Ñъбира информациÑ, коÑто позволÑва Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð° Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð½Ð° УÑлугата.</p>
+
+<p></p>
+
+<h1>5. ÐÐЛИЧÐОСТ ÐРУСЛУГÐТÐ</h1>
+
+<p></p>
+
+<p>УÑлугата Ñе предоÑÑ‚Ð°Ð²Ñ ÐºÐ°Ñ‚Ð¾ удобÑтво за ваÑ. Ð¢Ñ Ñе предоÑÑ‚Ð°Ð²Ñ Ð²ÑŠÐ² вида, в който е, и Ñпоред доÑтъпноÑтта й. Nokia не гарантира, че нÑма да Ñе поÑвÑват прекъÑÐ²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ грешки в уÑлугата. Nokia запазва правото Ñи да внеÑе промени в УÑлугата или да преуÑтанови доÑтъпа до Ð½ÐµÑ Ð¿Ð¾ вÑÑко време.</p>
+
+<p></p>
+
+<p>Nokia може да оÑигури Ð½Ð°Ð´Ð³Ñ€Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð½Ð° Ñофтуерните Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° УÑлугата по Ñвое уÑмотрение.</p>
+
+<p></p>
+
+<h1>6. ОГРÐÐИЧЕÐИЕ ÐРГÐРÐÐЦИЯТРИ ОТГОВОРÐОСТ</h1>
+
+<p></p>
+
+<p>За да ви оÑигури леÑен доÑтъп, Nokia може да включи линкове към интернет радиоÑтанции, които Ñе притежават и управлÑват от трети Ñтрани. Nokia не дава гаранциÑ, че линковете към интернет радиоÑтанциите ще работÑÑ‚. ОÑвен това Ñъдържанието, което не е Ñвързано Ñ Nokia, не предполага по никакъв начин, че Nokia одобрÑва и потвърждава Ñъдържанието по Ñамата му ÑъщноÑÑ‚ или продуктите и уÑлугите, упоменати в това Ñъдържание.</p>
+
+<p></p>
+
+<p>Преди да оÑъщеÑтвите доÑтъп до дадена ÑтанциÑ, Ñ‚Ñ€Ñбва да прегледате и приемете правилата й на използване, ако има такива. С наÑтоÑщото приемате Ñъщо, че Nokia нÑма контрол над Ñъдържанието на уÑлуги на трети Ñтрани и не може да поема отговорноÑÑ‚ за Ñъдържанието, предоÑтавено от интернет радиоÑтанциите.</p>
+
+<p></p>
+
+<p>ДоÑтъпът чрез УÑлугата до Ñъдържанието на интернет радиоÑтанции може да включва Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð½Ð° големи количеÑтва данни през мрежата на Ð²Ð°ÑˆÐ¸Ñ Ð´Ð¾Ñтавчик на уÑлуги. Свържете Ñе Ñ Ð²Ð°ÑˆÐ¸Ñ Ð´Ð¾Ñтавчик на уÑлуги за Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно такÑите за Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð½Ð° данни. Имайте предвид, че използването на УÑлугата Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚ радиоÑтанции, които предоÑтавÑÑ‚ по-виÑока ÑкороÑÑ‚ на Ñтрийминг (излъчване в реално време) може да доведе до по-виÑоки такÑи, Ñвързани Ñ Ð¿Ñ€ÐµÐ½Ð¾Ñа на данни.</p>
+
+<p></p>
+
+<p>Трафикът на данни, породен от използването на УÑлугата, може да включва най-малко Ñледното: актуализиране на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° Ñтанции, излъчване в реално време на данни от интернет радиоÑтанциÑ, Ñъбиране на ÑтатиÑтичеÑки данни и надграждане на интернет радиоприложение.</p>
+
+<p></p>
+
+<p>Nokia не ноÑи отговорноÑÑ‚ за такÑите за трафик на данни, Ñвързан Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½ÐµÑ‚Ð¾ на УÑлугата.</p>
+
+<p></p>
+
+<p>ÐИКÐКВРГÐРÐÐЦИЯ, ÐИТО ИЗРИЧÐÐ, ÐИТО ПОДРÐЗБИРÐЩРСЕ, ВКЛЮЧИТЕЛÐО, ÐО ÐЕ СÐМО, ГÐРÐÐЦИИ ЗРСОБСТВЕÐОСТ ИЛИ ГÐРÐÐЦИЯ ЗРОТСЪСТВИЕ ÐÐ ÐÐРУШЕÐИЕ ÐРПРÐВРЗРИÐТЕЛЕКТУÐЛÐРСОБСТВЕÐОСТ, ИЛИ ПОДРÐЗБИРÐЩИ СЕ ГÐРÐÐЦИИ ЗРТЪРГОВСКИ КÐЧЕСТВРИЛИ ПРИГОДÐОСТ ЗРОПРЕДЕЛЕÐРЦЕЛ, ÐЕ СЕ ДÐВРПО ОТÐОШЕÐИЕ ÐÐ ÐÐЛИЧÐОСТТÐ, ПРЕЦИЗÐОСТТÐ, ÐÐДЕЖДÐОСТТРИЛИ СЪДЪРЖÐÐИЕТО ÐРУСЛУГÐТÐ. NOKIA ÐЕ ÐОСИ ОТГОВОРÐОСТ ЗРПРЕКИ, ÐЕПРЕКИ, ИÐЦИДЕÐТÐИ, СПЕЦИÐЛÐИ ИЛИ КОСВЕÐИ ЩЕТИ, ПРОПУСÐÐТИ ПОЛЗИ ИЛИ ПРЕКЪСВÐÐЕ ÐРБИЗÐЕС ДЕЙÐОСТ, ПОРОДЕÐИ ОТ ИЗПОЛЗВÐÐЕТО ИЛИ ÐЕВЪЗМОЖÐОСТТРЗРИЗПОЛЗВÐÐЕ ÐРУСЛУГÐТÐ, ДОРИ NOKIA ДРЕ БИЛРУВЕДОМЕÐРЗРВЪЗМОЖÐОСТТРОТ ТÐКИВРЩЕТИ. ÐЯКОИ ЮРИСДИКЦИИ ÐЕ ПОЗВОЛЯВÐТ ИЗКЛЮЧВÐÐЕТО ÐРОПРЕДЕЛЕÐИ ГÐРÐÐЦИИ ИЛИ ОГРÐÐИЧЕÐИЯ ÐРОТГОВОРÐОСТ, СЛЕДОВÐТЕЛÐО ГОРЕСПОМЕÐÐТИТЕ ОГРÐÐИЧЕÐИЯ ИЛИ ИЗКЛЮЧВÐÐИЯ МОЖЕ ДРÐЕ Ð’ÐЖÐТ ЗРВÐС. ОТГОВОРÐОСТТРÐÐ NOKIA Ð’ ТЕЗИ СЛУЧÐИ ЩЕ БЪДЕ ОГРÐÐИЧЕÐРДО ÐœÐКСИМÐЛÐÐТРПОЗВОЛЕÐРОТ ЗÐКОÐРСТЕПЕÐ.</p>
+
+<p></p>
+
+<p>Ðикой от Ñъдържащите Ñе в наÑтоÑщото текÑтове нÑма да накърни законовите права на Ñтрана, предÑтавлÑваща потребител. Ðикой от Ñъдържащите Ñе в наÑтоÑщото текÑтове не ограничава отговорноÑтта на Nokia в Ñлучай на Ñмърт или физичеÑка травма, породени от небрежноÑÑ‚ от Ñтрана на Nokia.</p>
+
+<p></p>
+
+<h1>7. ПОЛИТИКРПО ОТÐОШЕÐИЕ ÐРТВЪРДЕÐИЯ ЗРÐÐРУШÐÐ’ÐÐЕ ÐÐ ÐВТОРСКИ ПРÐÐ’Ð</h1>
+
+<p></p>
+
+<p>Ðко ÑмÑтате, че ваша работа, ноÑеща авторÑко право, е манипулирана по начин, който предÑтавлÑва нарушаване на авторÑко право, можете да информирате Nokia, като изпратите уведомление, Ñъдържащо Ñледното:</p>
+
+<p></p>
+
+<p>(1) автентичен или електронен Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð½Ð° лицето, упълномощено да дейÑтва от името на ÑобÑтвеника на изключителното право, за което Ñе твърди, че е нарушено;</p>
+
+<p></p>
+
+<p>(2) Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ опиÑание на работата, защитена Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ñко право, за което Ñе претендира, че е нарушено;</p>
+
+<p></p>
+
+<p>(3) Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ опиÑание на материала, за чиито авторÑки права Ñе претендира че Ñа нарушени, и информациÑ, доÑтатъчна за локализирането на материала;</p>
+
+<p></p>
+
+<p>(4) име, адреÑ, телефонен номер, електронен Ð°Ð´Ñ€ÐµÑ Ð¸ друга информациÑ, коÑто да позволи на Nokia да уÑтанови връзка Ñ Ð²Ð°Ñ;</p>
+
+<p></p>
+
+<p>(5) декларациÑ, че имате доброÑъвеÑтната увереноÑÑ‚, че използването на материала, по отношение на който подавате оплакването, не е оторизирано от ÑобÑтвеника на авторÑкото право, от негов предÑтавител или от закона; и</p>
+
+<p></p>
+
+<p>(6) декларациÑ, че информациÑта в уведомлението е вÑрна, и че под клетва заÑвÑвате, че Ñте упълномощен да дейÑтвате от името на ÑобÑтвеника на изключителното право, за което Ñе твърди, че е нарушено.</p>
+
+<p></p>
+
+<p>Уведомлението Ñ‚Ñ€Ñбва да бъде изпратено на адреÑа на определеното от Ð½Ð°Ñ Ð¿Ñ€ÐµÐ´ÑтавителÑтво:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. ВОДЕЩО ЗÐКОÐОДÐТЕЛСТВО</h1>
+
+<p></p>
+
+<p>Както е употребено в наÑтоÑщите уÑловиÑ, "Nokia" означава Nokia Corporation. Nokia управлÑва и контролира УÑлугата от меÑÑ‚Ð¾Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² границите на ФинландиÑ. И като такава, Ñъдържащата Ñе тук Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° УÑлугата Ñе Ñчита за предоÑтавена във ФинландиÑ.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Ð’Ñички права запазени.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/44/internetradio_44.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Pregunta sempre"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N emissores desades"
+#define qtn_ir_added_single "%U[89] desada"
+#define qtn_ir_addmanually_unnamed "Sense nom"
+#define qtn_ir_addst_description "Descripció"
+#define qtn_ir_addst_streamurl "Transmet URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Ràdio d'Internet"
+#define qtn_ir_ai_radio_not_active "La ràdio no està activa"
+#define qtn_ir_app_general_err "Error intern. Reinicieu l'aplicació."
+#define qtn_ir_apps_grid "Ràd. Int."
+#define qtn_ir_apps_list "Ràdio d'Internet"
+#define qtn_ir_apps_skey "Ràdio d'Internet"
+#define qtn_ir_apps_standby "Ràdio d'Internet"
+#define qtn_ir_apps_swins "Ràdio d'Internet"
+#define qtn_ir_apps_wheel "Ràdio d'Internet"
+#define qtn_ir_bitrate_best "Qualitat òptima"
+#define qtn_ir_bitrate_high "Qualitat alta"
+#define qtn_ir_bitrate_standard "Qualitat estàndard"
+#define qtn_ir_cost_heading "Avís important"
+#define qtn_ir_cost_softkey_continue "Continua"
+#define qtn_ir_cost_softkey_exit "Surt"
+#define qtn_ir_cost_title "Ràdio d'Internet"
+#define qtn_ir_cost_warning "La ràdio d'Internet utilitza la connexió de dades del telèfon per a les transmissions de ràdio. Aquesta aplicació és recomanable si disposeu d'un pla de dades de tarifa plana. Si no esteu segur dels costos de dades, poseu-vos en contacte amb l'operador abans de continuar."
+#define qtn_ir_country_list_expanded "%N emissores"
+#define qtn_ir_countryregion_title "Països/regions"
+#define qtn_ir_discover_beststations "Les millors emissores"
+#define qtn_ir_discover_country_region "Cerca per país/regió"
+#define qtn_ir_discover_genre "Cerca per gènere"
+#define qtn_ir_discover_genre_expanded "Emiss. ordenades per gènere"
+#define qtn_ir_discover_langauge "Cerca per idioma"
+#define qtn_ir_discover_language_expanded "Emiss. ordenades per idioma"
+#define qtn_ir_discover_staticountryreg "Emissores per país/regió"
+#define qtn_ir_discover_title "Directori emiss."
+#define qtn_ir_discover_top "Emiss. més escoltades"
+#define qtn_ir_edit_title "Edita l'emissora"
+#define qtn_ir_err_operation "Error operació. Torneu-ho a provar."
+#define qtn_ir_err_url_unavail "URL no disponible"
+#define qtn_ir_error_address "L'adreça de l'emissora de ràdio d'Internet no és correcta"
+#define qtn_ir_error_connection "El temps d'espera de la connexió s'ha esgotat. Torneu-ho a provar."
+#define qtn_ir_error_favourites "No hi ha prou espai a les favorites per desar la selecció"
+#define qtn_ir_error_general "No es pot connectar amb l'emissora"
+#define qtn_ir_error_isds_unavailable "En aquests moments, el servei de directori de l'emissora d'Internet no està disponible"
+#define qtn_ir_error_notavailable "No hi ha enllaços de transmissió disponibles"
+#define qtn_ir_error_notinisds "L'element ja no està disponible"
+#define qtn_ir_error_search "Introduïu el terme de cerca"
+#define qtn_ir_findst_addstation "Afegir emiss. manualm."
+#define qtn_ir_findst_addtofav "Afegiu emiss. a favorites"
+#define qtn_ir_findst_browsesds "Cerca directori emissora"
+#define qtn_ir_findst_search_ensrhterm "Introduïu el terme de cerca"
+#define qtn_ir_findst_softkey_search "Cerca"
+#define qtn_ir_findstation_title "Cerca emissores"
+#define qtn_ir_firstuse_title "Ràd. Int.: Benvingut"
+#define qtn_ir_genre_list_expanded "%N emissores"
+#define qtn_ir_genre_title "Gèneres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "L'historial és buit"
+#define qtn_ir_homescreen_buffering "Desant a mem. int."
+#define qtn_ir_homescreen_lastplayed "Últim reproduït"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/regió:"
+#define qtn_ir_info_details_description "Descripció:"
+#define qtn_ir_info_details_genre "Gèneres:"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nom:"
+#define qtn_ir_info_details_streams "Transmissions:"
+#define qtn_ir_info_details_title "Inf. emissora"
+#define qtn_ir_info_details_type "Tipus:"
+#define qtn_ir_info_details_type_isds "Dir. emis."
+#define qtn_ir_info_details_type_manual "Def. us."
+#define qtn_ir_info_details_unnamed "Sen. nom"
+#define qtn_ir_info_softkey_close "Tanca"
+#define qtn_ir_language_list_expanded "%N emissores"
+#define qtn_ir_language_title "Idiomes"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "S'està carregant"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "S'està cercant"
+#define qtn_ir_main_descriptive_text "Per afegir emiss., feu clic a \"Cerca emissores\""
+#define qtn_ir_main_discover_expanded "Descobriu noves emissores"
+#define qtn_ir_main_last "Últ. reprod."
+#define qtn_ir_main_now "En reproducció"
+#define qtn_ir_main_prog_deleting "S'estan suprimint %N emissores"
+#define qtn_ir_main_searchindir "Cerca al directori"
+#define qtn_ir_main_title "Ràdio d'Internet"
+#define qtn_ir_main_unnamed_station "Emis. sense nom"
+#define qtn_ir_memlo_ram_out_of_mem "No hi ha prou memòria per realitzar l'operació. Suprimiu algunes dades."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Emissora següent"
+#define qtn_ir_now_tooltip_play "Reprodueix"
+#define qtn_ir_now_tooltip_previous "Emissora anterior"
+#define qtn_ir_now_tooltip_stop "Atura"
+#define qtn_ir_now_wait_buffering "S'està desant a la memòria intermèdia"
+#define qtn_ir_now_wait_buffering_perc "Copiant al búfer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Cap connexió de xarxa"
+#define qtn_ir_nwcontroller_err_nosnaps "No s'ha definit cap punt d'accés"
+#define qtn_ir_options_add "Afegeix a les favorites"
+#define qtn_ir_options_add_manually "Afegir emiss. manualm."
+#define qtn_ir_options_change "Canvia"
+#define qtn_ir_options_clearhistory "Esborra l'historial"
+#define qtn_ir_options_editstation "Edita l'emissora"
+#define qtn_ir_options_equalizer "Equalitzador"
+#define qtn_ir_options_exit "Surt"
+#define qtn_ir_options_findnmusicstore "Cerca a botiga música"
+#define qtn_ir_options_fmtrans "Transmissor FM"
+#define qtn_ir_options_gotomusicstore "Vés a la botiga de música"
+#define qtn_ir_options_help "Ajuda"
+#define qtn_ir_options_history "Historial"
+#define qtn_ir_options_info "Informació d'emissora"
+#define qtn_ir_options_mainview "Vés a la vista principal"
+#define qtn_ir_options_mark "Marca"
+#define qtn_ir_options_markall "Marca-ho tot"
+#define qtn_ir_options_markunmark "Marca/desmarca"
+#define qtn_ir_options_now "Anar a Reproduint ara"
+#define qtn_ir_options_off "Desactiva"
+#define qtn_ir_options_on "Activa"
+#define qtn_ir_options_searchag "Torna a cercar"
+#define qtn_ir_options_select "Selecciona"
+#define qtn_ir_options_settings "Configuració"
+#define qtn_ir_options_station "Emissora"
+#define qtn_ir_options_stereowidening "Ampliació estèreo"
+#define qtn_ir_options_unmark "Desmarca"
+#define qtn_ir_options_unmarkall "Desmarca-ho tot"
+#define qtn_ir_playfail_err "Error en reproduir la ràdio"
+#define qtn_ir_playlist_title "Enllaços rebuts"
+#define qtn_ir_popup_no_results "No s'han trobat resultats"
+#define qtn_ir_popup_toomany_results "Hi ha massa resultats. Afineu la cerca."
+#define qtn_ir_results_none "No s'ha trobat cap emissora coincident. Torneu a fer la cerca."
+#define qtn_ir_search_result "%0U[10]:%1N resultat"
+#define qtn_ir_search_results "%0U[08]:%1N resultats"
+#define qtn_ir_set_folder_internetradio "Ràdio d'Internet"
+#define qtn_ir_set_folder_irradio "Ràdio d'Internet"
+#define qtn_ir_settings_3g "Veloc. bits connexió 3G"
+#define qtn_ir_settings_connec_softkey_ok "D'acord"
+#define qtn_ir_settings_gprs "Veloc. bits connexió GPRS"
+#define qtn_ir_settings_network "Connexió de xarxa"
+#define qtn_ir_settings_snap_default "Connexió predet."
+#define qtn_ir_settings_title "Configuració"
+#define qtn_ir_settings_wifi "Veloc. bits connexió Wi-Fi"
+#define qtn_ir_softkey_back "Enrere"
+#define qtn_ir_softkey_cancel "Cancel·la"
+#define qtn_ir_softkey_done "Fet"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Opcions"
+#define qtn_ir_softkey_select "Selecciona"
+#define qtn_ir_softkey_yes "Sí"
+#define qtn_ir_station_saved "Emissora desada"
+#define qtn_ir_stationlist_nomatches "(cap coincidència)"
+#define qtn_ir_stations_popup_delete "Voleu suprimir\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Voleu suprimir %N emissores?"
+#define qtn_ir_stations_popup_removed "S'ha suprimit l'emissora %U[61]"
+#define qtn_ir_stations_popup_removed_many "%N emissores suprimides"
+#define qtn_ir_stations_popup_save "Voleu desar l'emissora a les favorites?"
+#define qtn_ir_suboptions_delete "Suprimeix"
+#define qtn_ir_suboptions_details "Detalls"
+#define qtn_ir_suboptions_move "Desplaça"
+#define qtn_ir_terms_details "Si accepteu les condicions generals, accepteu un contracte fins al grau permès per la llei aplicable, i no limitat ni prohibit respecte de tots els drets materials"
+#define qtn_ir_terms_heading "Condicions generals"
+#define qtn_ir_terms_softkey_accept "Accepta"
+#define qtn_ir_terms_softkey_decline "Rebutja"
+#define qtn_ir_title_history "Historial"
+#define qtn_ir_tooltip_addalltofav "Afeg. totes a favorites"
+#define qtn_ir_tooltip_addstation "Afeg. emiss. manual."
+#define qtn_ir_tooltip_addtofav "Afegeix a les favorites"
+#define qtn_ir_tooltip_copy "Copia"
+#define qtn_ir_tooltip_findnstore "Cerca a botiga música"
+#define qtn_ir_tooltip_findst "Cerca emissores"
+#define qtn_ir_tooltip_history "Historial"
+#define qtn_ir_tooltip_listen "Escolta"
+#define qtn_ir_tooltip_paste "Enganxa"
+#define qtn_ir_tooltip_stationde "Detalls de l'emissora"
+#define qtn_ir_top_title "Més escoltades"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nom"
+#define qtn_ir_url_title "Afeg. emissora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/44/internetradioai_44.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Ràdio d'Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/44/terms_44.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>El servei Nokia Internet Radio (d’ara endavant, “el Serveiâ€) us permet descobrir y explorar el contingut d’emissores de ràdio per Internet. L’UTILITZACIÓ DEL SERVEI IMPLICA QUE HEU LLEGIT I ENTÈS EL PRESENT CONTRACTE, I QUE ACCEPTEU COMPLIR-NE LES CONDICIONS. En cas de no acceptar les condicions del contracte, la utilització del Servei resta prohibida.</p>
+
+<p></p>
+
+<h1>1. DEFINICIONS</h1>
+
+<p></p>
+
+<p>Per “emissores de ràdio per Internet†s’entén entitats que produeixen i distribueixen contingut sonor i metadades relacionades a través d’Internet en un flux d’informació.</p>
+
+<p></p>
+
+<p>L’enllaç a l’emissora de ràdio per Internet és un localitzador de recursos o un conjunt de localitzadors de recursos que permeten l’usuari accedir al contingut transmès a través d’Internet per l’emissora de ràdio.</p>
+
+<p></p>
+
+<h1>2. EL SERVEI</h1>
+
+<p></p>
+
+<p>El Servei permet:</p>
+<p>1. explorar enllaços a emissores de ràdio per Internet;</p>
+<p>2. accedir al contingut de les emissores de ràdio per Internet;</p>
+
+<p></p>
+
+<h1>3. ÚS DEL SERVEI</h1>
+
+<p></p>
+
+<p>Només podreu emprar el Servei de manera privada i sense fins comercials. Nokia posseeix tots els drets de propietat intel•lectual relatius al Servei.</p>
+
+<p></p>
+
+<p>Nokia es reserva el dret a modificar les presents condicions, cas en el qual Nokia ha de comunicar-vos-en els canvis.</p>
+
+<p></p>
+
+<h1>4. CONFIDENCIALITAT</h1>
+
+<p></p>
+
+<p>Nokia té el compromís de protegir les dades personals de l’usuari mitjançant polítiques de confidencialitat eficaces.</p>
+
+<p></p>
+
+<p>Per tal de controlar-ne l’ús i millorar el Servei, Nokia pot recollir dades relatives a l’ús, com ara informació sobre les emissores de ràdio per Internet emprades, el temps dedicat a cada emissora i els elements etiquetats com a favorits, entre d’altres.</p>
+
+<p></p>
+
+<p>Nokia no recull cap dada que permeti identificar l’usuari del Servei.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILITAT DEL SERVEI</h1>
+
+<p></p>
+
+<p>Nokia subministra el Servei per a la vostra conveniència. S’ofereix "tal com és" i en funció de la disponibilitat. Nokia no garanteix que el Servei sigui ininterromput ni que no presenti cap error. Nokia es reserva el dret a revisar el Servei i a retirar-ne l’accés en qualsevol moment.</p>
+
+<p></p>
+
+<p>Nokia pot proporcionar actualitzacions del programari relacionat amb el Servei a la seva discreció.</p>
+
+<p></p>
+
+<h1>6. EXEMPCIÓ DE RESPONSABILITAT</h1>
+
+<p></p>
+
+<p>Per tal de facilitar-vos-en l’accessibilitat, Nokia pot incloure-hi enllaços a emissores de ràdio per Internet la propietat o la gestió de les quals correspongui a tercers. Nokia no garanteix que els enllaços a emissores de ràdio per Internet estiguin operatius. A més a més, el contingut que no estigui relacionat amb Nokia no implica de cap manera que Nokia recolzi el contingut com a tal ni els productes o serveis a què es faci referència en el contingut mencionat.</p>
+
+<p></p>
+
+<p>És la vostra responsabilitat llegir i acceptar les normes d’ús de cada emissora abans d’accedir-hi. També accepteu que Nokia no exerceix cap mena de control sobre el contingut dels serveis de tercers i que no pot assumir cap mena de responsabilitat respecte el contingut ofert per les emissores de ràdio per Internet.</p>
+
+<p></p>
+
+<p>El fet d’accedir al contingut de les emissores de ràdio per Internet mitjançant el Servei pot implicar que es transmetin grans quantitats de dades a través de la xarxa del vostre proveïdor de serveis. Poseu-vos en contacte amb el proveïdor de serveis per informar-vos de les tarifes de transmissió de dades. Tingueu present que l’ús del Servei per accedir a emissores de ràdio per Internet que transmetin fluxos de dades a taxes de bits elevades pot implicar uns costos més elevats relatius al trànsit de dades.</p>
+
+<p></p>
+
+<p>El trànsit de dades relatiu a l’ús del Servei pot incloure, com a mínim, les accions següents: actualització del contingut del directori de les emissores, transmissió de dades des de l’emissora de ràdio per Internet, recollida de dades estadístiques i actualització del programari de les emissores de ràdio.</p>
+
+<p></p>
+
+<p>Nokia no es fa responsable dels costos del trànsit de dades relacionat amb l’ús del Servei.</p>
+
+<p></p>
+
+<p>NO S’OFEREIX CAP MENA DE GARANTIA, NI EXPRESSA NI IMPLÃCITA, COM, ENTRE D’ALTRES, GARANTIES DE TÃTOL O NO-INFRACCIÓ, NI GARANTIES IMPLÃCITES DE CAPACITAT COMERCIAL NI DE IDONEÃTAT PER A CAP PROPÃ’SIT ESPECÃFIC, EN RELACIÓ AMB LA DISPONIBILITAT, EXACTITUD, FIABILITAT I CONTINGUT DEL SERVEI. NOKIA NO ÉS RESPONSABLE DE CAP MENA DE DANYS DIRECTES, INDIRECTES, INCIDENTALS, ESPECIALS NI CONSEQÃœENTS, INCLOSOS LA PÈRDUA DE BENEFICIS I EL LUCRE CESSANT, QUE ES DERIVIN DE L’ÚS O LA IMPOSSIBILITAT D’ÚS DEL SERVEI, NI ENCARA QUE NOKIA TINGUI CONEIXEMENT DE LA POSSIBILITAT DELS DANYS MENCIONATS. COM QUE ALGUNES JURISDICCIONS NO PERMETEN EXCLOURE DETERMINADES GARANTIES O LIMITACIONS DE RESPONSABILITAT, POT SER QUE LES LIMITACIONS O EXCLUSIONS MENCIONADES NO US AFECTIN. EN AQUEST CAS, LA RESPONSABILITAT DE NOKIA QUEDA LIMITADA EN LA MÀXIMA MESURA PERMESA PER LA LEGISLACIÓ APLICABLE.</p>
+
+<p></p>
+
+<p>Cap de les clàusules incloses en el present contracte ha de vulnerar els drets legals de la part que actuï com consumidor. Cap de les clàusules del present contracte ha de limitar la responsabilitat de Nokia en cas de mort o danys personals com a conseqüència de la negligència de Nokia.</p>
+
+<p></p>
+
+<h1>7. NORMATIVA RELATIVA A ACUSACIONS DE VIOLACIÓ DE DRETS D’AUTOR</h1>
+
+<p></p>
+
+<p>Si creieu que s’han violat els drets d’autor del vostre treball, notifiqueu-ho a Nokia amb la informació següent:</p>
+
+<p></p>
+
+<p>(1) Firma física o electrònica d’una persona autoritzada a actuar en nom del propietari del dret exclusiu presumptament infringit;</p>
+
+<p></p>
+
+<p>(2) Identificació o descripció del treball protegit per drets d’autor que presumptament s’ha manipulat de forma il•legal;</p>
+
+<p></p>
+
+<p>(3) Identificació o descripció del material que presumptament infringeix els drets d’autor, i informació raonablement suficient per localitzar el material;</p>
+
+<p></p>
+
+<p>(4) El vostre nom, adreça, número de telèfon, adreça de correu electrònic i qualsevol altra informació que permeti a Nokia contactar-vos;</p>
+
+<p></p>
+
+<p>(5) Una declaració que afirmi que creieu de bona fe que l’ús del material descrit no està permès pel propietari dels drets d’autor respectius, el seu representant o la legislació; i</p>
+
+<p></p>
+
+<p>(6) Una declaració que afirmi que el contingut de la notificació és exacta i que, sota pena de fals testimoni, esteu autoritzats a actuar en nom del propietari del dret exclusiu presumptament infringit.</p>
+
+<p></p>
+
+<p>La notificació s’ha d’enviar a l’adreça del representant designat per Nokia:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LLEI APLICABLE</h1>
+
+<p></p>
+
+<p>En el present contracte, "Nokia" es refereix a Nokia Corporation. Nokia gestiona i controla el Servei des d’unes instal•lacions situades a Finlàndia. Per tant, per la present es considera que la informació inclosa en el Servei es proporciona a Finlàndia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Reservats tots els drets.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/45/internetradio_45.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Uvijek pitati"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stanica spremljeno"
+#define qtn_ir_added_single "%U[86] spremljeno"
+#define qtn_ir_addmanually_unnamed "Bez naziva"
+#define qtn_ir_addst_description "Opis"
+#define qtn_ir_addst_streamurl "URL prijenosa"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internetski radio"
+#define qtn_ir_ai_radio_not_active "Radio nije aktiviran"
+#define qtn_ir_app_general_err "Interna pogreška. Ponovno pokrenite aplik."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internetski radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internetski radio"
+#define qtn_ir_apps_swins "Internetski radio"
+#define qtn_ir_apps_wheel "Internetski radio"
+#define qtn_ir_bitrate_best "Najbolja kvaliteta"
+#define qtn_ir_bitrate_high "Visoka kvaliteta"
+#define qtn_ir_bitrate_standard "Standardna kvaliteta"
+#define qtn_ir_cost_heading "Važna napomena"
+#define qtn_ir_cost_softkey_continue "Nastavi"
+#define qtn_ir_cost_softkey_exit "Izlaz"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internetski radio koristi podatkovnu vezu telefona za radio prijenos. To se preporuÄuje samo ako imate podatkovni plan s fiksnom naknadom. Ako niste sigurni koliki su podatkovni troÅ¡kovi, prije nastavka provjerite kod svog operatera."
+#define qtn_ir_country_list_expanded "%N stanica"
+#define qtn_ir_countryregion_title "Države/regije"
+#define qtn_ir_discover_beststations "Odabir najboljih stanica"
+#define qtn_ir_discover_country_region "Pregled po državi/regiji"
+#define qtn_ir_discover_genre "Pregled po žanru"
+#define qtn_ir_discover_genre_expanded "Stanice sortirane po žanru"
+#define qtn_ir_discover_langauge "Pregled po jeziku"
+#define qtn_ir_discover_language_expanded "Stanice sortirane po jeziku"
+#define qtn_ir_discover_staticountryreg "Stanice sortirane po drž./reg."
+#define qtn_ir_discover_title "Direkt. stanica"
+#define qtn_ir_discover_top "Najbolje stanice"
+#define qtn_ir_edit_title "Uredi stanicu"
+#define qtn_ir_err_operation "Pogreška u radu. Pokušajte ponovno."
+#define qtn_ir_err_url_unavail "URL nedostupan"
+#define qtn_ir_error_address "Neispravna adresa internetske radio stanice"
+#define qtn_ir_error_connection "Veza je obustavljena. Pokušajte opet."
+#define qtn_ir_error_favourites "Nedovoljno mjesta u omiljenima za spremanje odabira"
+#define qtn_ir_error_general "Nije moguće povezivanje sa stanicom"
+#define qtn_ir_error_isds_unavailable "Usluga direktorija internetske stanice privremeno nedostupna"
+#define qtn_ir_error_notavailable "Nema dostupnih veza za prijenos"
+#define qtn_ir_error_notinisds "Stavka više nije dostupna"
+#define qtn_ir_error_search "Unesite termin pretraživanja"
+#define qtn_ir_findst_addstation "Dodaj stanicu ruÄno"
+#define qtn_ir_findst_addtofav "Dodaj stanicu u omiljene"
+#define qtn_ir_findst_browsesds "Pregled direkt. stanica"
+#define qtn_ir_findst_search_ensrhterm "Unesite termin pretraživanja"
+#define qtn_ir_findst_softkey_search "Traži"
+#define qtn_ir_findstation_title "Pronađi stanice"
+#define qtn_ir_firstuse_title "Internet radio: pozdrav"
+#define qtn_ir_genre_list_expanded "%N stanica"
+#define qtn_ir_genre_title "Žanrovi"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Nema povijesti"
+#define qtn_ir_homescreen_buffering "Međuspremanje"
+#define qtn_ir_homescreen_lastplayed "Zadnja reprod."
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "Država/regija:"
+#define qtn_ir_info_details_description "Opis:"
+#define qtn_ir_info_details_genre "Žanr(ovi):"
+#define qtn_ir_info_details_language "Jezik:"
+#define qtn_ir_info_details_name "Ime:"
+#define qtn_ir_info_details_streams "Prijenosi:"
+#define qtn_ir_info_details_title "Podaci o stanici"
+#define qtn_ir_info_details_type "Vrsta:"
+#define qtn_ir_info_details_type_isds "Dir. stan."
+#define qtn_ir_info_details_type_manual "Def. koris."
+#define qtn_ir_info_details_unnamed "Bez naz."
+#define qtn_ir_info_softkey_close "Zatvori"
+#define qtn_ir_language_list_expanded "%N stanica"
+#define qtn_ir_language_title "Jezici"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "UÄitavanje"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Pretraživanje"
+#define qtn_ir_main_descriptive_text "Dodaj stan. pomoću \"Nađi stanice\" s alatne trake"
+#define qtn_ir_main_discover_expanded "Otkrijte nove radio stanice"
+#define qtn_ir_main_last "Zadnja reprod."
+#define qtn_ir_main_now "Reproducira se"
+#define qtn_ir_main_prog_deleting "Brisanje %N"
+#define qtn_ir_main_searchindir "Traži u direktoriju"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Stan. bez naziva"
+#define qtn_ir_memlo_ram_out_of_mem "Za ovu radnju nedostaje memorije. Najprije izbrišite neke podatke."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Sljedeća stanica"
+#define qtn_ir_now_tooltip_play "Reproduciraj"
+#define qtn_ir_now_tooltip_previous "Prethodna stanica"
+#define qtn_ir_now_tooltip_stop "Prekini"
+#define qtn_ir_now_wait_buffering "Međuspremanje"
+#define qtn_ir_now_wait_buffering_perc "Međuspremanje %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Nema veze na mrežu"
+#define qtn_ir_nwcontroller_err_nosnaps "Nema definirane pristupne toÄke"
+#define qtn_ir_options_add "Dodaj u omiljene"
+#define qtn_ir_options_add_manually "Dodaj stanicu ruÄno"
+#define qtn_ir_options_change "Promijeni"
+#define qtn_ir_options_clearhistory "Izbriši povijest"
+#define qtn_ir_options_editstation "Uredi stanicu"
+#define qtn_ir_options_equalizer "Ekvilizator"
+#define qtn_ir_options_exit "Izlaz"
+#define qtn_ir_options_findnmusicstore "Pronađi u glazb. trgovini"
+#define qtn_ir_options_fmtrans "FM odaÅ¡iljaÄ"
+#define qtn_ir_options_gotomusicstore "Idi u glazbenu trgovinu"
+#define qtn_ir_options_help "Pomoć"
+#define qtn_ir_options_history "Povijest"
+#define qtn_ir_options_info "Informacije o stanici"
+#define qtn_ir_options_mainview "Idi na glavni prikaz"
+#define qtn_ir_options_mark "OznaÄi"
+#define qtn_ir_options_markall "OznaÄi sve"
+#define qtn_ir_options_markunmark "OznaÄi/odznaÄi"
+#define qtn_ir_options_now "Idi na trenutno reprod."
+#define qtn_ir_options_off "IskljuÄen"
+#define qtn_ir_options_on "UkljuÄen"
+#define qtn_ir_options_searchag "Traži opet"
+#define qtn_ir_options_select "Odaberi"
+#define qtn_ir_options_settings "Postavke"
+#define qtn_ir_options_station "Stanica"
+#define qtn_ir_options_stereowidening "Stereo proširenje"
+#define qtn_ir_options_unmark "Poništi"
+#define qtn_ir_options_unmarkall "Poništi sve"
+#define qtn_ir_playfail_err "Reprodukcija radija nije uspjela"
+#define qtn_ir_playlist_title "Primljene veze"
+#define qtn_ir_popup_no_results "Nema rezultata"
+#define qtn_ir_popup_toomany_results "Previše rezultata. Proširite izraz za pretraživanje."
+#define qtn_ir_results_none "Nema odgovarajućih stanica. Traži ponovno."
+#define qtn_ir_search_result "%0U[10]:%1N rezultat"
+#define qtn_ir_search_results "%0U[08]:%1N rezultata"
+#define qtn_ir_set_folder_internetradio "Internetski radio"
+#define qtn_ir_set_folder_irradio "Internetski radio"
+#define qtn_ir_settings_3g "Brzina prijenosa 3G veze"
+#define qtn_ir_settings_connec_softkey_ok "U redu"
+#define qtn_ir_settings_gprs "Brz. prijenosa GPRS veze"
+#define qtn_ir_settings_network "Veza na mrežu"
+#define qtn_ir_settings_snap_default "Zadana veza"
+#define qtn_ir_settings_title "Postavke"
+#define qtn_ir_settings_wifi "Brz. prijen. Wi-Fi veze"
+#define qtn_ir_softkey_back "Natrag"
+#define qtn_ir_softkey_cancel "Otkaži"
+#define qtn_ir_softkey_done "Izvršeno"
+#define qtn_ir_softkey_no "Ne"
+#define qtn_ir_softkey_options "Opcije"
+#define qtn_ir_softkey_select "Odaberi"
+#define qtn_ir_softkey_yes "Da"
+#define qtn_ir_station_saved "Stanica spremljena"
+#define qtn_ir_stationlist_nomatches "(ništa nije pronađeno)"
+#define qtn_ir_stations_popup_delete "Izbrisati\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Izbrisati %N stanica?"
+#define qtn_ir_stations_popup_removed "%U[87] izbrisano"
+#define qtn_ir_stations_popup_removed_many "%N stanica izbrisano"
+#define qtn_ir_stations_popup_save "Spremiti stanicu u omiljene?"
+#define qtn_ir_suboptions_delete "Izbriši"
+#define qtn_ir_suboptions_details "Pojedinosti"
+#define qtn_ir_suboptions_move "Premjesti"
+#define qtn_ir_terms_details "Pristajući na Uvjete i odredbe u nastavku ulazite u ugovorni odnos do mjere dopuÅ¡tene zakonima na snazi koji nije dodatno ograniÄen ili zabranjen u pogledu svih bitnih prava"
+#define qtn_ir_terms_heading "Uvjeti i odredbe"
+#define qtn_ir_terms_softkey_accept "Prihvati"
+#define qtn_ir_terms_softkey_decline "Odbij"
+#define qtn_ir_title_history "Povijest"
+#define qtn_ir_tooltip_addalltofav "Dodaj sve u omiljene"
+#define qtn_ir_tooltip_addstation "Dodaj stanicu ruÄno"
+#define qtn_ir_tooltip_addtofav "Dodaj u omiljene"
+#define qtn_ir_tooltip_copy "Kopiraj"
+#define qtn_ir_tooltip_findnstore "Nađi u glazb. trgovini"
+#define qtn_ir_tooltip_findst "Pronađi stanice"
+#define qtn_ir_tooltip_history "Povijest"
+#define qtn_ir_tooltip_listen "Slušaj"
+#define qtn_ir_tooltip_paste "Zalijepi"
+#define qtn_ir_tooltip_stationde "Pojedinosti o stanici"
+#define qtn_ir_top_title "Najbolje stanice"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Naziv"
+#define qtn_ir_url_title "Dodaj stanicu"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/45/internetradioai_45.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Net radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/45/terms_45.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,160 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Usluga Nokia Internet Radio (u daljnjem tekstu "Usluga") omogućuje vam otkrivanje sadržaja internetskih radiopostaja i uživanje u njemu. PRIHVAĆATE ČINJENICU DA UPORABA USLUGE ZNAČI DA STE PROČITALI OVAJ UGOVOR, DA GA RAZUMIJETE I DA PRIHVAĆATE OBVEZE IZ ODREDBI I UVJETA UGOVORA. Ako se s time ne slažete, imajte na umu da vam nije dopuštena uporaba Usluge.</p>
+
+<p></p>
+
+<h1>1. DEFINICIJE</h1>
+
+<p></p>
+
+<p>Pojam "internetske radiopostaje" oznaÄava postaje koje uglavnom stvaraju i distribuiraju audiosadržaj te srodne metapodatke reproduciranjem uživo putem interneta.</p>
+
+<p></p>
+
+<p>Veza na internetsku radiopostaju oznaÄava lokator resursa ili skup lokatora resursa koji korisniku omogućuju pristup sadržaju koji internetska radiopostaja reproducira uživo.</p>
+
+<p></p>
+
+<h1>2. USLUGA</h1>
+
+<p></p>
+
+<p>Usluga omogućuje sljedeće:</p>
+<p>1. pretraživanje veza na internetske radiopostaje</p>
+<p>2. pristup sadržaju internetskih radiopostaja</p>
+
+<p></p>
+
+<h1>3. UPORABA USLUGE</h1>
+
+<p></p>
+
+<p>Uporaba usluge dopuštena je samo u osobne i nekomercijalne svrhe. Nokia posjeduje sva prava na intelektualno vlasništvo vezana uz uslugu.</p>
+
+<p></p>
+
+<p>Nokia pridržava pravo izmjene ovih uvjeta i odredbi obavještavajući vas o takvim promjenama.</p>
+
+<p></p>
+
+<h1>4. PRIVATNOST</h1>
+
+<p></p>
+
+<p>Nokia predano radi na zaštiti privatnosti svojih korisnika implementacijom strogih pravila o povjerljivosti.</p>
+
+<p></p>
+
+<p>Da bi nadziralo uporabu te unaprijedilo uslugu, druÅ¡tvo Nokia može prikupljati informacije o uporabi, ukljuÄujući ali ne ograniÄavajući se na informacije o posjećenim internetskim radiopostajama, vremenu provedenom na svakoj postaji te stavkama ocijenjenim kao favoritima.</p>
+
+<p></p>
+
+<p>Nokia ne prikuplja informacije koje omogućuju identifikaciju korisnika Usluge.</p>
+
+<p></p>
+
+<h1>5. DOSTUPNOST USLUGE</h1>
+
+<p></p>
+
+<p>Uslugu vam pružamo kao dodatnu pogodnost. Nudi se u stanju "kakva jest" i "kad je dostupna".Nokia ne jamÄi da će usluga neprekidno biti dostupna niti bez pogreÅ¡ke. Nokia zadržava pravo izmjene i povlaÄenja Usluge u bilo kojem trenutku.</p>
+
+<p></p>
+
+<p>Nokia može ponuditi nadogradnje za softverske programe povezane s Uslugom prema vlastitoj procjeni.</p>
+
+<p></p>
+
+<h1>6. ODRICANJE OD ODGOVORNOSTI</h1>
+
+<p></p>
+
+<p>Nokia može, radi jednostavnije dostupnosti, ponuditi veze na internetske radiopostaje koje su u vlasniÅ¡tvu trećih strana ili kojima upravljaju treće strane. Nokia ne jamÄi da će veze na internetske radiopostaje funkcionirati. Uz to, sadržaj koji nije povezan s druÅ¡tvom Nokia ni u kojem sluÄaju ne podrazumijeva da Nokia podržava sadržaj kao takav, kao ni proizvode ili usluge navedene u takvom sadržaju.
+</p>
+
+<p></p>
+
+<p>Prije pristupanja postajama morate proÄitati njihova pravila uporabe (ako postoje) i prihvatiti ih. Prihvaćate i Äinjenicu da Nokia nema nadzor nad sadržajem usluga treće strane i ne može prihvatiti nikakvu odgovornost za sadržaj ponuÄ‘en putem internetskih radiopostaja.</p>
+
+<p></p>
+
+<p>Tijekom pristupanja sadržaju internetskih radiopostaja putem Usluge može doći do prijenosa velike koliÄine podataka putem mreže vaÅ¡eg davatelja usluga. Informacije o cijenama prijenosa podataka zatražite od svojeg davatelja usluga. Imajte na umu da uporaba Usluge s internetskim radiopostajama koje nude reprodukciju viÅ¡om brzinom prijenosa može uzrokovati veće troÅ¡kove povezane s protokom podataka.</p>
+
+<p></p>
+
+<p>Protok podataka povezan s uporabom Usluge može obuhvaćati barem sljedeće: ažuriranje sadržaja direktorija postaja, reprodukciju podataka s internetskih radiopostaja uživo, prikupljanje statistiÄkih podataka i nadogradnju programa internetskih radiopostaja.</p>
+
+<p></p>
+
+<p>Nokia nije odgovorna za troškove protoka podataka povezane s uporabom Usluge.</p>
+
+<p></p>
+
+<p>NE DAJU SE NIKAKVA JAMSTVA, IZRIÄŒITA ILI PODRAZUMIJEVANA, UKLJUÄŒUJUĆI ALI NE OGRANIÄŒAVAJUĆI SE NA JAMSTVA VEZANA UZ PRAVA NA VLASNIÅ TVO ILI NEKRÅ ENJE ILI PAK IMPLICIRANA JAMSTVA GLEDE PRIKLADNOSTI ZA PRODAJU I PRIKLADNOSTI ZA ODREÄENU NAMJENU, A KOJA BI SE ODNOSILA NA DOSTUPNOST, TOÄŒNOST, POUZDANOST ILI SADRŽAJ USLUGE. NOKIA NE SNOSI ODGOVORNOST ZA BILO KAKVE IZRAVNE, NEIZRAVNE, SLUÄŒAJNE, POSEBNE ILI POSLJEDIÄŒNE Å TETE, GUBITAK ZARADE ILI PREKID POSLOVANJA USLIJED UPORABE ILI NEMOGUĆNOSTI UPORABE USLUGE, ÄŒAK I AKO JE NOKIA BILA UPOZORENA NA MOGUĆNOST TAKVE Å TETE. NEKE JURISDIKCIJE NE DOPUÅ TAJU ISKLJUÄŒENJE ODREÄENIH JAMSTAVA ILI OGRANIÄŒENJA ODGOVORNOSTI, STOGA GORE NAVEDENA OGRANIÄŒENJA ILI ISKLJUÄŒENJA MOŽDA NEĆE VRIJEDITI. U TAKVIM ĆE SLUÄŒAJEVIMA ODGOVORNOST DRUÅ TVA NOKIA BITI OGRANIÄŒENA U NAJVEĆOJ MJERI DOPUÅ TENOJ ZAKONOM.</p>
+
+<p></p>
+
+<p>NiÅ¡ta ovdje navedeno neće utjecati na zakonska prava bilo koje strane koja nastupa u svojstvu klijenta. NiÅ¡ta ovdje navedeno neće ograniÄavati odgovornost druÅ¡tva Nokia u sluÄaju smrti ili ozljede uzrokovane nepažnjom druÅ¡tva Nokia.</p>
+
+<p></p>
+
+<h1>7. PRAVILA GLEDE PRITUŽBI O KRŠENJU AUTORSKIH PRAVA</h1>
+
+<p></p>
+
+<p>Ako sumnjate da je s vaÅ¡im djelom zaÅ¡tićenim autorskim pravima postupano na naÄin koji obuhvaća krÅ¡enje autorskih prava, druÅ¡tvu Nokia možete poslati obavijest koja sadrži sljedeće: </p>
+
+<p></p>
+
+<p>(1) fiziÄki ili elektroniÄki potpis osobe ovlaÅ¡tene za djelovanje u ime vlasnika autorskih prava koja su navodno krÅ¡ena</p>
+
+<p></p>
+
+<p>(2) identifikaciju ili opis djela zaštićenog autorskim pravima za koje se sumnja da su kršena</p>
+
+<p></p>
+
+<p>(3) identifikaciju ili opis materijala za koji se tvrdi da krši autorska prava te informacije dovoljne za lociranje materijala</p>
+
+<p></p>
+
+<p>(4) vaše ime, adresu, telefonski broj, adresu e-pošte i ostale informacije koje će društvu Nokia omogućiti da vam se obrati</p>
+
+<p></p>
+
+<p>(5) izjavu da u dobroj vjeri smatrate da vlasnik autorskih prava, njegov agent ili zakon nisu dali ovlaštenje za uporabu materijala</p>
+
+<p></p>
+
+<p>(6) izjavu da su informacije u obavijesti toÄne te da ste, pod odgovornošću zbog krivokletstva, ovlaÅ¡teni djelovati u ime vlasnika ekskluzivnih prava koja su navodno krÅ¡ena</p>
+
+<p></p>
+
+<p>Obavijest je potrebno poslati našem ovlaštenom predstavniku na adresu</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. VAŽEĆI ZAKON</h1>
+
+<p></p>
+
+<p>Kao Å¡to je navedeno u uvjetima i odredbama, "Nokia" oznaÄava druÅ¡tvo Nokia Corporation. Nokia pruža Uslugu i upravlja njome s lokacija u Finskoj. Smatra se da ovdje navedene informacije o Usluzi potjeÄu iz Finske.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Sva prava pridržana.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/49/internetradio_49.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Küsi alati"
+#define qtn_ir_active_idle_data "%0U: %1U - %2U"
+#define qtn_ir_added_multi "%N jaama on salvestatud"
+#define qtn_ir_added_single "%U[83] on salvestatud"
+#define qtn_ir_addmanually_unnamed "Nimetu"
+#define qtn_ir_addst_description "Kirjeldus"
+#define qtn_ir_addst_streamurl "Voogesituse URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U: %3U - %2U"
+#define qtn_ir_ai_iradio_title "Interneti-raadio"
+#define qtn_ir_ai_radio_not_active "Raadio pole aktiveer."
+#define qtn_ir_app_general_err "Sisemine tõrge. Käivitage rakendus uuesti."
+#define qtn_ir_apps_grid "Int.-raadio"
+#define qtn_ir_apps_list "Interneti-raadio"
+#define qtn_ir_apps_skey "Interneti-raadio"
+#define qtn_ir_apps_standby "Interneti-raadio"
+#define qtn_ir_apps_swins "Interneti-raadio"
+#define qtn_ir_apps_wheel "Interneti-raadio"
+#define qtn_ir_bitrate_best "Parim kvaliteet"
+#define qtn_ir_bitrate_high "Kõrge kvaliteet"
+#define qtn_ir_bitrate_standard "Standardkvaliteet"
+#define qtn_ir_cost_heading "Oluline teadaanne"
+#define qtn_ir_cost_softkey_continue "Jätka"
+#define qtn_ir_cost_softkey_exit "Välju"
+#define qtn_ir_cost_title "Interneti-raadio"
+#define qtn_ir_cost_warning "Interneti-raadio kasutab raadiosaadete edastamiseks telefoni andmesideühendust. See on soovitatav ainult juhul, kui teil on fikseeritud andmeedastustasud. Kui te pole andmeedastustasudes kindel, võtke enne jätkamist ühendust võrguoperaatoriga."
+#define qtn_ir_country_list_expanded "%N jaama"
+#define qtn_ir_countryregion_title "Riigid/piirkon."
+#define qtn_ir_discover_beststations "Valik parimaid jaamu"
+#define qtn_ir_discover_country_region "Sirvi riigi/piirkonna järgi"
+#define qtn_ir_discover_genre "Sirvi žanrite järgi"
+#define qtn_ir_discover_genre_expanded "Jaamade sort. žanrite järgi"
+#define qtn_ir_discover_langauge "Sirvi keelte järgi"
+#define qtn_ir_discover_language_expanded "Jaamade sort. keelte järgi"
+#define qtn_ir_discover_staticountryreg "Jaamade sort. riigi/piirk. järgi"
+#define qtn_ir_discover_title "Jaamakataloog"
+#define qtn_ir_discover_top "Populaarsed jaamad"
+#define qtn_ir_edit_title "Jaama muutm."
+#define qtn_ir_err_operation "Toimingutõrge. Proovige uuesti."
+#define qtn_ir_err_url_unavail "URL pole saadaval"
+#define qtn_ir_error_address "Vale Interneti-raadiojaama aadress"
+#define qtn_ir_error_connection "Ühenduse ajalõpp. Proovige uuesti."
+#define qtn_ir_error_favourites "Lemmikute loendis pole valiku salvestamiseks piisavalt ruumi"
+#define qtn_ir_error_general "Jaamaga ei saa ühendust luua"
+#define qtn_ir_error_isds_unavailable "Jaamakataloogi­teenus pole ajutiselt saadaval"
+#define qtn_ir_error_notavailable "Voogesituslinke pole saadaval"
+#define qtn_ir_error_notinisds "Ãœksus pole enam saadaval"
+#define qtn_ir_error_search "Sisestage otsingusõna"
+#define qtn_ir_findst_addstation "Lisa jaam käsitsi"
+#define qtn_ir_findst_addtofav "Jaama lisam. lemmikutesse"
+#define qtn_ir_findst_browsesds "Sirvi jaamakataloogi"
+#define qtn_ir_findst_search_ensrhterm "Otsimine otsingusõna abil"
+#define qtn_ir_findst_softkey_search "Otsi"
+#define qtn_ir_findstation_title "Jaamade otsim."
+#define qtn_ir_firstuse_title "Tere tulemast!"
+#define qtn_ir_genre_list_expanded "%N jaama"
+#define qtn_ir_genre_title "Žanrid"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Ajalugu pole"
+#define qtn_ir_homescreen_buffering "Puhverdamine"
+#define qtn_ir_homescreen_lastplayed "Viimati esitatud"
+#define qtn_ir_info_details_bitrate "%N kbit/s:"
+#define qtn_ir_info_details_countryregi "Riik/piirkond:"
+#define qtn_ir_info_details_description "Kirjeldus:"
+#define qtn_ir_info_details_genre "Žanrid:"
+#define qtn_ir_info_details_language "Keel:"
+#define qtn_ir_info_details_name "Nimi:"
+#define qtn_ir_info_details_streams "Voogesit. kiirus:"
+#define qtn_ir_info_details_title "Jaama teave"
+#define qtn_ir_info_details_type "Tüüp:"
+#define qtn_ir_info_details_type_isds "Jaam.kat."
+#define qtn_ir_info_details_type_manual "Kas. valit."
+#define qtn_ir_info_details_unnamed "Nimetu"
+#define qtn_ir_info_softkey_close "Sule"
+#define qtn_ir_language_list_expanded "%N jaama"
+#define qtn_ir_language_title "Keeled"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Laadimine"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Otsimine"
+#define qtn_ir_main_descriptive_text "Jaama lis. kasut. töör.riba nuppu Jaamade otsimine"
+#define qtn_ir_main_discover_expanded "Tutvumine raadiojaamadega"
+#define qtn_ir_main_last "Viimati esitatud"
+#define qtn_ir_main_now "Praegu esitusel"
+#define qtn_ir_main_prog_deleting "%N jaama kustutamine"
+#define qtn_ir_main_searchindir "Otsi kataloogist"
+#define qtn_ir_main_title "Interneti-raadio"
+#define qtn_ir_main_unnamed_station "Nimetu jaam"
+#define qtn_ir_memlo_ram_out_of_mem "Toimingu sooritamiseks pole piisavalt mälu. Kustutage esmalt mõned andmed."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbit/s:"
+#define qtn_ir_now_bitrate_mbps "%N Mbit/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Järgmine jaam"
+#define qtn_ir_now_tooltip_play "Esita"
+#define qtn_ir_now_tooltip_previous "Eelmine jaam"
+#define qtn_ir_now_tooltip_stop "Lõpeta"
+#define qtn_ir_now_wait_buffering "Puhverdamine"
+#define qtn_ir_now_wait_buffering_perc "Puhverdamine: %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Võrguühendust pole"
+#define qtn_ir_nwcontroller_err_nosnaps "Pöörduspunkt määramata"
+#define qtn_ir_options_add "Lisa lemmikutesse"
+#define qtn_ir_options_add_manually "Lisa jaam käsitsi"
+#define qtn_ir_options_change "Muuda"
+#define qtn_ir_options_clearhistory "Tühjenda ajalugu"
+#define qtn_ir_options_editstation "Muuda jaama"
+#define qtn_ir_options_equalizer "Ekvalaiser"
+#define qtn_ir_options_exit "Välju"
+#define qtn_ir_options_findnmusicstore "Otsi muusikapoest"
+#define qtn_ir_options_fmtrans "FM-saatja"
+#define qtn_ir_options_gotomusicstore "Ava muusikapood"
+#define qtn_ir_options_help "Abi"
+#define qtn_ir_options_history "Ajalugu"
+#define qtn_ir_options_info "Jaama teave"
+#define qtn_ir_options_mainview "Ava põhivaade"
+#define qtn_ir_options_mark "Märgi"
+#define qtn_ir_options_markall "Märgi kõik"
+#define qtn_ir_options_markunmark "Märgi / tühista märkim."
+#define qtn_ir_options_now "Ava praegu esitatav"
+#define qtn_ir_options_off "Väljas"
+#define qtn_ir_options_on "Sees"
+#define qtn_ir_options_searchag "Otsi uuesti"
+#define qtn_ir_options_select "Vali"
+#define qtn_ir_options_settings "Seaded"
+#define qtn_ir_options_station "Jaam"
+#define qtn_ir_options_stereowidening "Stereolaiendus"
+#define qtn_ir_options_unmark "Tühista märkimine"
+#define qtn_ir_options_unmarkall "Tühista kõik märkim."
+#define qtn_ir_playfail_err "Raadio esitamine nurjus"
+#define qtn_ir_playlist_title "Saabunud lingid"
+#define qtn_ir_popup_no_results "Tulemeid pole"
+#define qtn_ir_popup_toomany_results "Liiga palju tulemeid. Täpsustage otsingusõna."
+#define qtn_ir_results_none "Sobivaid jaamu ei leitud. Otsige uuesti."
+#define qtn_ir_search_result "%0U[11]: %1N tulem"
+#define qtn_ir_search_results "%0U[08]: %1N tulemit"
+#define qtn_ir_set_folder_internetradio "Interneti-raadio"
+#define qtn_ir_set_folder_irradio "Interneti-raadio"
+#define qtn_ir_settings_3g "3G-üh. andmesidekiirus"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "GPRS-üh. andmes.kiirus"
+#define qtn_ir_settings_network "Võrguühendus"
+#define qtn_ir_settings_snap_default "Vaikeühendus"
+#define qtn_ir_settings_title "Seaded"
+#define qtn_ir_settings_wifi "Wi-Fi-üh. andmes.kiirus"
+#define qtn_ir_softkey_back "Tagasi"
+#define qtn_ir_softkey_cancel "Tühista"
+#define qtn_ir_softkey_done "Valmis"
+#define qtn_ir_softkey_no "Ei"
+#define qtn_ir_softkey_options "Valikud"
+#define qtn_ir_softkey_select "Vali"
+#define qtn_ir_softkey_yes "Jah"
+#define qtn_ir_station_saved "Jaam on salvestatud"
+#define qtn_ir_stationlist_nomatches "(tulemeid pole)"
+#define qtn_ir_stations_popup_delete "Kas soovite kustutada jaama\n%U[60]?"
+#define qtn_ir_stations_popup_delete_many "Kas soovite kustutada %N jaama?"
+#define qtn_ir_stations_popup_removed "%U[83] on kustutatud"
+#define qtn_ir_stations_popup_removed_many "%N jaama on kustutatud"
+#define qtn_ir_stations_popup_save "Kas soovite salvestada jaama lemmikutesse?"
+#define qtn_ir_suboptions_delete "Kustuta"
+#define qtn_ir_suboptions_details "Andmed"
+#define qtn_ir_suboptions_move "Teisalda"
+#define qtn_ir_terms_details "Allpool esitatud tingimustega nõustudes astute lepingusse kohaldatavates õigusaktides lubatud määral ning lisapiirangute ja -keeldudeta mis tahes materiaalsete õiguste suhtes"
+#define qtn_ir_terms_heading "Tingimused"
+#define qtn_ir_terms_softkey_accept "Nõustun"
+#define qtn_ir_terms_softkey_decline "Keeldun"
+#define qtn_ir_title_history "Ajalugu"
+#define qtn_ir_tooltip_addalltofav "Lisa kõik lemmik-sse"
+#define qtn_ir_tooltip_addstation "Jaama käsitsi lisam."
+#define qtn_ir_tooltip_addtofav "Lemmik-sse lisamine"
+#define qtn_ir_tooltip_copy "Kopeerimine"
+#define qtn_ir_tooltip_findnstore "Muusikapoest otsim."
+#define qtn_ir_tooltip_findst "Jaamade otsimine"
+#define qtn_ir_tooltip_history "Ajalugu"
+#define qtn_ir_tooltip_listen "Kuulamine"
+#define qtn_ir_tooltip_paste "Kleepimine"
+#define qtn_ir_tooltip_stationde "Jaama andmed"
+#define qtn_ir_top_title "Popul. jaamad"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nimi"
+#define qtn_ir_url_title "Jaama lisamine"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/49/internetradioai_49.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Interneti-raadio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/49/terms_49.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Internet Radio teenus (“Teenusâ€) võimaldab teil tutvuda ja kogeda Interneti raadijaamade sisuga. TEENUSE KASUTAMISEGA KINNITATE, ET OLETE KÄESOLEVA LEPINGU LÄBI LUGENUD, SELLEST ARU SAANUD NING OLETE NÕUS SELLE TINGIMUSTEGA. Kui te ei ole sellega nõus siis ei ole teil õigust Teenust kasutada.</p>
+
+<p></p>
+
+<h1>1. MÕISTED</h1>
+
+<p></p>
+
+<p>Interneti raadiojaamad kujutavad endast ettevõtteid mis toodavad ja levitavad interneti kaudu audiosisuga sõnumeid ja sellega seotud metaandmeid.</p>
+
+<p></p>
+
+<p>Ühendus Interneti raadiojaamaga tähendab ressursi lokaliseerimist või ressursi lokaliseerimise seadistamist mis võimaldab kasutajal ligipääsu interneti raadiojaama andmevoolule.</p>
+
+<p></p>
+
+<h1>2. TEENUS</h1>
+
+<p></p>
+
+<p>Teenus võimaldab:</p>
+<p>1. sirvida interneti raadiojaamade linke,</p>
+<p>2. ligipääsu interneti raadiojaamade sisule;</p>
+
+<p></p>
+
+<h1>3. TEENUSE KASUTAMINE</h1>
+
+<p></p>
+
+<p>Teenuse kasutamine on lubatud ainult teie isiklikel ja mittekommertslikel eesmärkidel. Nokia on kõikide Teenusega seotud intellektuaalsete õiguste omanik.</p>
+
+<p></p>
+
+<p>Nokial on õigus muuta neid tingimusi antud muudatustest teavitamise teel.</p>
+
+<p></p>
+
+<h1>4. PRIVAATSUS</h1>
+
+<p></p>
+
+<p>Nokia kohustub kaitsma kasutaja privaatsust rakendades tõhusat turvalisuse poliitikat.</p>
+
+<p></p>
+
+<p>Teenuse kasutamise monitoorimiseks ja selle täiustamiseks võib Nokia koguda andmeid kasutamise kohta mis sisaldavad teavet interneti raadiojaamade kuulamise kohta, kulutatud aja kohta ning teavet lemmikraadiojaamade kohta.</p>
+
+<p></p>
+
+<p>Nokia ei kogu andmeid, mis võimaldavad identifitseerida Teenuse kasutajat.</p>
+
+<p></p>
+
+<h1>5. TEENUSE KÄTTESAADAVUS</h1>
+
+<p></p>
+
+<p>Teenust pakutakse teie mugavuse huvides. Seda pakutakse “nagu ta on†ja vastavalt â€kättesaadavusele† Nokia ei garanteeri Teenuse katkematust ja veatust.  Nokial on õigus igal ajal teostada Teenuse ülevaatust või tühistada ligipääs.</p>
+
+<p></p>
+
+<p>Nokia võib omal äranägemisel teostada Teenusega seotud tarkvararakenduste uuendusi.</p>
+
+<p></p>
+
+<h1>6. VASTUTUS</h1>
+
+<p></p>
+
+<p>Juurdepääsu lihtsustamiseks võib Nokia lisada linke kolmandate poolte poolt opereeritavate interneti raadiojaamadele. Nokia ei garanteeri antud interneti raadiojaamade linkide toimimist. Nokiaga mitteseotud sisu kasutamine ei mõjuta mingilgi määral seda et Nokia kiidab heaks nende toodete ja teenustega seotud sisu.</p>
+
+<p></p>
+
+<p>Enne raadiojaamadele juurdepääsu peate tutvuma ja nõustuma olemasolu korral raadiojaamade kasutamistingimustega. Te peate arvestama sellega, et Nokial puudub kontroll kolmandate osapoolte teenuste üle ning Nokia ei saa võtta mingit vastutust interneti raadiojaamade poolt pakutavate teenuste sisu suhtes.</p>
+
+<p></p>
+
+<p>Ligipääs interneti raadiojaamade sisule Teenuse kasutamise ajal võib olla seotud suurte andmemahtude edastamisega läbi teie teenusepakkuja arvutivõrgu. Andmeside tasude osas võtke ühendust oma teenusepakkujaga. Pidage meeles, et Teenuse kasutamine koos suuri bitikiirusi kasutatavate interneti raadijaamade kasutamisega võib olla seotud suuremate andmeedastamise kuludega.</p>
+
+<p></p>
+
+<p>Teenuse kasutamisega seotud andmeedastus võib sisaldada: raadiojaamade kataloogide uuendamist, interneti raadiojaamade andmevoogu, statistiliste andmete kogumist ja interneti raadiojaama rakenduste uuendamist.</p>
+
+<p></p>
+
+<p>Nokia ei kanna vastutust Teenuse kasutamisega seotud andmeedastustasude eest.</p>
+
+<p></p>
+
+<p>NIIVÕRD, KUI KOHALDATAVAD ÕIGUSAKTID SEDA VÕIMALDAVAD, EI ANTA TEENUSE KASUTATAVUSE, TÄPSUSE JA USALDUSVÄÄRSUSE SUHTES MINGIT OTSEST EGA KAUDSET GARANTIID. NOKIA EI VASTUTA OTSESTE, KAUDSETE, ÕNNETUSJUHTUMITEST TULENEVATE, SPETSIAALSETE VÕI JUHUSLIKE KAHJUDE, KASUMI VÄHENEMISE VÕI ÄRI KATKEMISTE EEST MIS ON PÕHJUSTATUD TEENUSE KASUTAMISEST VÕI SUUTMATUSEST SEDA KASUTADA, ISEGI SIIS, KUI NOKIA ON HOIATANUD SELLISTE KAHJUDE VÕIMALIKKUSEST. MÕNED SEADUSANDJAD EI LUBA TEATUD GARANTIIDE VÕI PIIRANGUTE VÄLISTAMIST, SEEGA VÕIVAD EELPOOL MAINITUD PIIRANGUD VÕI VÄLISTUSED  TEID MITTE PUUDUTADA. ANTUD JUHUL ON NOKIA VASTUTUS PIIRATUD SEADUSES ETTENÄHTUD MAKSIMAALSE MÄÄRAGA.</p>
+
+<p></p>
+
+<p>Käesolava dokumendi sisu ei kahjusta tarbijana tegutseva poole seaduses ettenähtud õigusi. Käesoleva dokumendi sisu ei piira Nokia vastutust Nokia hooletusest tingitud surma või isikliku vigastuse korral.</p>
+
+<p></p>
+
+<h1>7. AUTORIÕIGUSTE RIKKUMISTEGA SEOTUD POLIITIKA</h1>
+
+<p></p>
+
+<p>Kui te arvate, et teie autoriõigusi on kasutatud viisil mida võib pidada autoriõiguste rikkumiseks, siis võite Nokiat teavitada alljärgnevat teavet sisaldava teatisega:</p>
+
+<p></p>
+
+<p>(1) Rikutut eksklusiivset õigust omava isiku volitusel tegutseva isiku füüsiline või elektrooniline allkiri.</p>
+
+<p></p>
+
+<p>(2) Autoriõiguse rikkumisega seotud teose kirjeldus;</p>
+
+<p></p>
+
+<p>(3) Rikkumisega seotud materjali kirjeldus ja piisav teave materjali asukoha kindlaksmääramiseks;</p>
+
+<p></p>
+
+<p>(4) Teie nimi, aadress, telefon, e-posti aadress  ja muu teave mille järgi on Nokial võimalik teiega kontakteeruda;</p>
+
+<p></p>
+
+<p>(5) Avaldus selle kohta, et olete heauskselt veendunud, et  materjali kasutamine kaubuses esitatud viisil ei ole volitatud autoriõiguse omaniku poolt, tema esindaja poolt või seadus alusel, ja</p>
+
+<p></p>
+
+<p>(6) Avaldus selle kohta, et teade on täpne ning et tegutsete rikutud eksklusiivse autoriõiguse omaniku volituse alusel.</p>
+
+<p></p>
+
+<p>Teade tuleb saata meie volitatud esindajale, aadressile:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. RAKENDATAV SEADUS</h1>
+
+<p></p>
+
+<p>Antud tingimustes kasutatav mõiste “Nokia†tähendab Nokia ettevõtet (Nokia Corporation). Nokia juhib ja kontrollib Teenust Soome territooriumilt. Teenustes sisalduv teave hangitakse Soomes.</p>
+
+<p></p>
+
+<p>Autoriõigus © Nokia Corporation 2006. Kõik õigused kaitstud.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/50/internetradio_50.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "همیشه سؤال شود"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N ایستگاه ذخیره شد"
+#define qtn_ir_added_single "â€%U[88] ذخیره شد"
+#define qtn_ir_addmanually_unnamed "بی نام"
+#define qtn_ir_addst_description "مشخصات"
+#define qtn_ir_addst_streamurl "â€URL جریانی"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "رادیو اینترنتی"
+#define qtn_ir_ai_radio_not_active "رادیو Ùعال نیست"
+#define qtn_ir_app_general_err "خطای اینترنت. برنامه را مجدداً راه اندازی کنید."
+#define qtn_ir_apps_grid "رادیو اینترنتی"
+#define qtn_ir_apps_list "رادیو اینترنتی"
+#define qtn_ir_apps_skey "رادیو اینترنتی"
+#define qtn_ir_apps_standby "رادیو اینترنتی"
+#define qtn_ir_apps_swins "رادیو اینترنتی"
+#define qtn_ir_apps_wheel "رادیو اینترنتی"
+#define qtn_ir_bitrate_best "بهترین Ú©ÛŒÙیت"
+#define qtn_ir_bitrate_high "Ú©ÛŒÙیت بالا"
+#define qtn_ir_bitrate_standard "Ú©ÛŒÙیت استاندارد"
+#define qtn_ir_cost_heading "توجه مهم"
+#define qtn_ir_cost_softkey_continue "ادامه"
+#define qtn_ir_cost_softkey_exit "خروج"
+#define qtn_ir_cost_title "رادیو اینترنتی"
+#define qtn_ir_cost_warning "رادیو اینترنتی از اتصال داده تلÙÙ† شما برای انتقال رادیویی استÙاده Ù…ÛŒ کند. تنها در صورتی پیشنهاد Ù…ÛŒ شود Ú©Ù‡ دارای طرح داده با هزینه یکنواخت هستید. درصورتیکه از هزینه داده های خود مطمئن نیستید، قبل از ادامه با اپراتور خود بررسی کنید."
+#define qtn_ir_country_list_expanded "%N ایستگاه"
+#define qtn_ir_countryregion_title "کشورها/مناطق"
+#define qtn_ir_discover_beststations "انتخاب بهترین ایستگاه ها"
+#define qtn_ir_discover_country_region "براساس کشور/منطقه"
+#define qtn_ir_discover_genre "جستجو بر اساس نوع"
+#define qtn_ir_discover_genre_expanded "ایستگاه‌ها براساس‌نوع‌ذخیره شدند"
+#define qtn_ir_discover_langauge "جستجو بر اساس زبان"
+#define qtn_ir_discover_language_expanded "ایستگاه‌هابراساس‌زبان‌ذخیره شدند"
+#define qtn_ir_discover_staticountryreg "ذخیره‌ایستگاه‌توسط‌کشور/منطقه"
+#define qtn_ir_discover_title "راهنمای ایستگاه"
+#define qtn_ir_discover_top "ایستگاه های برتر"
+#define qtn_ir_edit_title "ویرایش ایستگاه"
+#define qtn_ir_err_operation "خطا در عملکرد. دوباره امتحان کنید."
+#define qtn_ir_err_url_unavail "URL غیر قابل دسترس است"
+#define qtn_ir_error_address "آدرس نادرست ایستگاه رادیو اینترنتی"
+#define qtn_ir_error_connection "زمان اتصال پایان یاÙت. دوباره سعی کنید."
+#define qtn_ir_error_favourites "در موارد برگزیده برای ذخیره انتخاب Ùضای کاÙÛŒ وجود ندارد"
+#define qtn_ir_error_general "اتصال به ایستگاه ممکن نیست"
+#define qtn_ir_error_isds_unavailable "سرویس Ùهرست ایستگاه اینترنتی موقتاً در دسترس نیست"
+#define qtn_ir_error_notavailable "هیچ پیوند جریانی موجود نیست"
+#define qtn_ir_error_notinisds "مورد دیگر در دسترس نیست"
+#define qtn_ir_error_search "وارد نمودن واژه جستجو"
+#define qtn_ir_findst_addstation "اÙزودن دستی ایستگاه"
+#define qtn_ir_findst_addtofav "اÙزودن ایستگاه به موارد برگزیده"
+#define qtn_ir_findst_browsesds "جستجوی Ùهرست ایستگاه"
+#define qtn_ir_findst_search_ensrhterm "وارد نمودن واژه جستجو"
+#define qtn_ir_findst_softkey_search "جستجو"
+#define qtn_ir_findstation_title "یاÙتن ایستگاه ها"
+#define qtn_ir_firstuse_title "رادیو اینترنتی: خوشآمد"
+#define qtn_ir_genre_list_expanded "%N ایستگاه"
+#define qtn_ir_genre_title "انواع"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "بدون تاریخچه"
+#define qtn_ir_homescreen_buffering "در حال باÙر کردن"
+#define qtn_ir_homescreen_lastplayed "آخرین پخش شده"
+#define qtn_ir_info_details_bitrate "%N کیلوبیت در ثانیه:"
+#define qtn_ir_info_details_countryregi "کشور/منطقه:"
+#define qtn_ir_info_details_description "توضیحات:"
+#define qtn_ir_info_details_genre "نوع(ها):"
+#define qtn_ir_info_details_language "زبان:"
+#define qtn_ir_info_details_name "نام:"
+#define qtn_ir_info_details_streams "جریانها:"
+#define qtn_ir_info_details_title "اطلاعات ایستگاه"
+#define qtn_ir_info_details_type "نوع:"
+#define qtn_ir_info_details_type_isds "راهنما"
+#define qtn_ir_info_details_type_manual "تع. با کاربر"
+#define qtn_ir_info_details_unnamed "بی نام"
+#define qtn_ir_info_softkey_close "بستن"
+#define qtn_ir_language_list_expanded "%N ایستگاه"
+#define qtn_ir_language_title "زبانها"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "در حال بارگیری"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "در حال جستجو"
+#define qtn_ir_main_descriptive_text "\"یاÙتن ایستگاه ها\" از نوار ابزار برای اÙزودن ایستگاه ها"
+#define qtn_ir_main_discover_expanded "یاÙتن ایستگاه های رادیویی جدید"
+#define qtn_ir_main_last "آخرین پخش شده"
+#define qtn_ir_main_now "در حال پخش"
+#define qtn_ir_main_prog_deleting "حذ٠%N"
+#define qtn_ir_main_searchindir "جستجو در Ùهرست"
+#define qtn_ir_main_title "رادیو اینترنتی"
+#define qtn_ir_main_unnamed_station "ایستگاه بی نام"
+#define qtn_ir_memlo_ram_out_of_mem "حاÙظه كاÙÛŒ برای اجرای عملیات وجود ندارد. ابتدا تعدادی داده را حذ٠كنید."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N م.ب"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N م.ب"
+#define qtn_ir_now_fm_frequency "%U[14] مگاهرتز"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "ایستگاه بعدی"
+#define qtn_ir_now_tooltip_play "پخش"
+#define qtn_ir_now_tooltip_previous "ایستگاه قبلی"
+#define qtn_ir_now_tooltip_stop "توقÙ"
+#define qtn_ir_now_wait_buffering "در حال باÙر کردن"
+#define qtn_ir_now_wait_buffering_perc "در حال باÙر كردن %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Ùاقد اتصال شبکه"
+#define qtn_ir_nwcontroller_err_nosnaps "هیچ نقطه دستیابی تعیین نشده است"
+#define qtn_ir_options_add "اÙزودن به موارد برگزیده"
+#define qtn_ir_options_add_manually "اÙزودن دستی ایستگاه"
+#define qtn_ir_options_change "تغییر"
+#define qtn_ir_options_clearhistory "پاک کردن تاریخچه"
+#define qtn_ir_options_editstation "ویرایش ایستگاه"
+#define qtn_ir_options_equalizer "همسان ساز"
+#define qtn_ir_options_exit "خروج"
+#define qtn_ir_options_findnmusicstore "یاÙتن در Ùروشگاه موسیقی"
+#define qtn_ir_options_fmtrans "Ùرستنده FM"
+#define qtn_ir_options_gotomusicstore "رÙتن به Ùر.وشگاه موسیقی"
+#define qtn_ir_options_help "راهنما"
+#define qtn_ir_options_history "تاریخچه"
+#define qtn_ir_options_info "اطلاعات ایستگاه"
+#define qtn_ir_options_mainview "رÙتن به نمای اصلی"
+#define qtn_ir_options_mark "علامت زدن"
+#define qtn_ir_options_markall "علامت همه"
+#define qtn_ir_options_markunmark "علامت دار/ بی علامت کردن"
+#define qtn_ir_options_now "برو به در حال پخش"
+#define qtn_ir_options_off "خاموش"
+#define qtn_ir_options_on "روشن"
+#define qtn_ir_options_searchag "جستجوی دوباره"
+#define qtn_ir_options_select "انتخاب"
+#define qtn_ir_options_settings "تنظیمات"
+#define qtn_ir_options_station "ایستگاه"
+#define qtn_ir_options_stereowidening "پهن سازی استریو"
+#define qtn_ir_options_unmark "بی علامت کردن"
+#define qtn_ir_options_unmarkall "بی علامت کردن همه"
+#define qtn_ir_playfail_err "پخش رادیویی انجام نشد"
+#define qtn_ir_playlist_title "پیوند دریاÙتی"
+#define qtn_ir_popup_no_results "نتیجه ای یاÙت نشد"
+#define qtn_ir_popup_toomany_results "نتایج بسیار زیاد است. واژه جستجو را تصحیح کنید."
+#define qtn_ir_results_none "هیچ ایستگاه مرتبطی یاÙت نشد. جستجوی دوباره"
+#define qtn_ir_search_result "%0U[12]:%1N نتیجه"
+#define qtn_ir_search_results "%0U[11]:%1N نتیجه"
+#define qtn_ir_set_folder_internetradio "رادیو اینترنتی"
+#define qtn_ir_set_folder_irradio "رادیو اینترنتی"
+#define qtn_ir_settings_3g "نرخ بیت اتصال ۳G"
+#define qtn_ir_settings_connec_softkey_ok "تأیید"
+#define qtn_ir_settings_gprs "نرخ بیت اتصال GPRS"
+#define qtn_ir_settings_network "اتصال پیش Ùرض"
+#define qtn_ir_settings_snap_default "اتصال پیش Ùرض"
+#define qtn_ir_settings_title "تنظیمات"
+#define qtn_ir_settings_wifi "نرخ بیت اتصال Wi-Fi"
+#define qtn_ir_softkey_back "بازگشت"
+#define qtn_ir_softkey_cancel "لغو"
+#define qtn_ir_softkey_done "انجام شد"
+#define qtn_ir_softkey_no "خیر"
+#define qtn_ir_softkey_options "گزینه ها"
+#define qtn_ir_softkey_select "انتخاب"
+#define qtn_ir_softkey_yes "بله"
+#define qtn_ir_station_saved "ایستگاه ذخیره شد"
+#define qtn_ir_stationlist_nomatches "â€(موردی یاÙت نشد)"
+#define qtn_ir_stations_popup_delete "\nâ€%U[70]حذ٠شود؟"
+#define qtn_ir_stations_popup_delete_many "%N ایستگاه حذ٠شود؟"
+#define qtn_ir_stations_popup_removed "â€%U[88] حذ٠شد"
+#define qtn_ir_stations_popup_removed_many "%N ایستگاه حذ٠شد"
+#define qtn_ir_stations_popup_save "ذخیره ایستگاه در موارد برگزیده؟"
+#define qtn_ir_suboptions_delete "حذÙ"
+#define qtn_ir_suboptions_details "جزئیات"
+#define qtn_ir_suboptions_move "انتقال"
+#define qtn_ir_terms_details "با تواÙÙ‚ بر شرایط Ùˆ ضوابط زیر شما با حداکثر مجوز قانون کاربردی وارد قرارداد Ù…ÛŒ شوید Ùˆ با توجه به همه حقوق هیچ محدودیت یا ممنوعیتی وجود ندارد"
+#define qtn_ir_terms_heading "شرایط و ضوابط"
+#define qtn_ir_terms_softkey_accept "پذیرÙتن"
+#define qtn_ir_terms_softkey_decline "رد کردن"
+#define qtn_ir_title_history "تاریخچه"
+#define qtn_ir_tooltip_addalltofav "اÙزودن همه به برگزیده"
+#define qtn_ir_tooltip_addstation "اÙزودن دستی ایستگاه"
+#define qtn_ir_tooltip_addtofav "اÙزودن به موارد برگزیده"
+#define qtn_ir_tooltip_copy "کپی"
+#define qtn_ir_tooltip_findnstore "یاÙتن‌درÙروشگاه‌موسیقی"
+#define qtn_ir_tooltip_findst "یاÙتن ایستگاه ها"
+#define qtn_ir_tooltip_history "تاریخچه"
+#define qtn_ir_tooltip_listen "گوش دادن"
+#define qtn_ir_tooltip_paste "چسباندن"
+#define qtn_ir_tooltip_stationde "جزئیات ایستگاه"
+#define qtn_ir_top_title "ایستگاه های برتر"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "نام"
+#define qtn_ir_url_title "اÙزودن ایستگاه"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/50/internetradioai_50.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "رادیو اینترنتی">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/50/terms_50.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>خدمات رادیوی اینترنتی Nokia («خدمات») شما را قادر Ù…ÛŒ سازد محتویات ایستگاه های رادیویی اینترنتی را یاÙته Ùˆ از آنها استÙاده نمایید. بدینوسیله تواÙÙ‚ Ù…ÛŒ نمایید Ú©Ù‡ استÙاده شما از این خدمات بدین Ù…Ùهوم است Ú©Ù‡ این تواÙÙ‚ نامه را مطالعه نموده اید، آن را درک کرده اید، Ùˆ مواÙقت نموده اید Ú©Ù‡ به شرایط Ùˆ ضوابط آن متعهد بمانید. لطÙاً توجه داشته باشید Ú©Ù‡ در صورت عدم مواÙقت، مجاز به استÙاده از این «خدمات» نیستید.</p>
+
+<p></p>
+
+<h1>1. تعاریÙ</h1>
+
+<p></p>
+
+<p>ایستگاه های رادیویی اینترنتی به معنای مجموعه هایی است که غالباً محتوای صوتی و داده های اطلاعات مربوطه را از طریق اینترنت به صورت جریان، تولید و پخش می کنند.</p>
+
+<p></p>
+
+<p>پیوند به ایستگاه رادیویی اینترنتی، به معنای مکان یاب منبع یا مجموعه ای از مکان یاب های منبع است که کاربر را قادر می سازند به محتوایی که توسط ایستگاه رادیویی اینترنتی جریان می یابد، دسترسی پیدا کند.</p>
+
+<p></p>
+
+<h1>2. خدمات</h1>
+
+<p></p>
+
+<p>«خدمات»، امکانات زیر را Ùراهم Ù…ÛŒ کند:</p>
+<p>1. مرور پیوندهای ایستگاه های رادیویی اینترنتی؛</p>
+<p>2. دسترسی به محتویات ایستگاه های رادیویی اینترنتی،</p>
+
+<p></p>
+
+<h1>3. استÙاده از خدمات</h1>
+
+<p></p>
+
+<p>استÙاده از «خدمات»، Ùقط برای کاربردهای شخصی Ùˆ غیرتجاری شما مجاز است.  Nokiaمالک تمام حقوق مالکیت معنوی مربوط به «خدمات» Ùˆ ارائه آن است.</p>
+
+<p></p>
+
+<p>Nokia این حق را برای خود محÙوظ Ù…ÛŒ داند Ú©Ù‡ این شرایط Ùˆ ضوابط را بدون اطلاع رسانی به شما، تغییر دهد</p>
+
+<p></p>
+
+<h1>4. Ø­Ùظ حریم خصوصی</h1>
+
+<p></p>
+
+<p>Nokia با اجرای خط مشی های سختگیرانه در زمینه محرمانه بودن اطلاعات، متعهد به Ø­Ùظ حریم خصوصی کاربر است</p>
+
+<p></p>
+
+<p>Nokia ممکن است به منظور نظارت بر استÙاده Ùˆ همچنین بهبود «خدمات»، اطلاعات مربوط به کاربرد، بدون قید محدودیت شامل اطلاعات مربوط به ایستگاه های رادیویی اینترنتی استÙاده شده، زمان صر٠شده در هر ایستگاه Ùˆ موارد تعیین شده به عنوان برگزیده ها، را گردآوری کند.</p>
+
+<p></p>
+
+<p>Nokia هیچ گونه اطلاعاتی گردآوری نمی کند Ú©Ù‡ امکان شناسایی کاربر «خدمات» را Ùراهم سازد.</p>
+
+<p></p>
+
+<h1>5. موجود بودن خدمات</h1>
+
+<p></p>
+
+<p>این «خدمات» برای آسایش Ùˆ رÙاه شما عرضه شده Ùˆ «به همان صورتی Ú©Ù‡ هست» Ùˆ «در صورت موجود بودن» ارائه Ù…ÛŒ گردد. Nokia تضمین نمی کند Ú©Ù‡ این «خدمات» بدون وقÙÙ‡ یا عاری از ایراد خواهد بود.  Nokiaاین حق را برای خود محÙوظ Ù…ÛŒ داند Ú©Ù‡ در هر زمان دلخواه، این «خدمات» را تغییر دهد یا دسترسی به آن را متوق٠کند.</p>
+
+<p></p>
+
+<p>Nokia ممکن است با اختیار تام Ùˆ صلاحدید خود، ارتقاءهایی را برای برنامه های نرم اÙزاری مربوط به این «خدمات» ارائه نماید.</p>
+
+<p></p>
+
+<h1>6. بیانیه سلب مسئولیت و پاسخگویی</h1>
+
+<p></p>
+
+<p>Nokia ممکن است پیوندهایی را به ایستگاه های رادیویی اینترنتی Ú©Ù‡ توسط اشخاص ثالث اداره Ù…ÛŒ شوند یا متعلق به آنهاست، برای سهولت دسترسی شما عرضه نماید. Nokia تضمین نمی کند Ú©Ù‡ پیوندهای به ایستگاه های رادیویی اینترنتی، کار خواهند کرد. اÙزون بر این، محتوایی Ú©Ù‡ به Nokia ارتباطی ندارد به هیچ وجه به این معنای ضمنی نیست Ú©Ù‡ Nokia محتویات مزبور یا محصولات یا خدمات مورد اشاره در این محتویات را تأیید Ù…ÛŒ کند.</p>
+
+<p></p>
+
+<p>باید قوانین استÙاده هر ایستگاه را در صورت وجود، پیش از استÙاده از ایستگاه مورد نظر مطالعه نموده Ùˆ مواÙقت خود را با آن اعلام کنید. همچنین تواÙÙ‚ Ù…ÛŒ نمایید Ú©Ù‡ Nokia هیچ کنترلی بر محتویات خدمات اشخاص ثالث نداشته Ùˆ نمی تواند در قبال محتویات عرضه شده توسط ایستگاه های رادیویی اینترنتی، هیچگونه مسئولیتی بپذیرد.</p>
+
+<p></p>
+
+<p>دسترسی به محتویات ایستگاه های رادیویی اینترنتی با استÙاده از این «خدمات»، ممکن است مستلزم ارسال مقدار زیادی داده از طریق شبکه ارائه دهنده خدمات شما باشد. برای اطلاع از هزینه های ارسال داده با ارائه دهنده خدمات خود تماس بگیرید. توجه داشته باشید Ú©Ù‡ استÙاده از این «خدمات» با ایستگاه های رادیویی اینترنتی Ú©Ù‡ جریان های داده را با سرعت بیت بیشتری برای شما ارسال Ù…ÛŒ کنند، ممکن است هزینه های بیشتری در زمینه تراÙیک داده را برای شما در Ù¾ÛŒ داشته باشد.</p>
+
+<p></p>
+
+<p>تراÙیک داده مربوط به استÙاده از این «خدمات» ممکن است حداقل مستلزم موارد زیر باشد: روزآمدسازی محتویات Ùهرست ایستگاه ها، جریان داده از ایستگاه رادیویی اینترنتی، گردآوری اطلاعات آماری Ùˆ ارتقاء برنامه رادیوی اینترنتی.</p>
+
+<p></p>
+
+<p>Nokia در قبال هزینه های تراÙیک داده مربوط به استÙاده شما از «خدمات» مسئولیتی ندارد.</p>
+
+<p></p>
+
+<p>هیچگونه ضمانتی، اعم از تصریحی یا ضمنی، بدون قید محدودیت شامل ضمانت های مربوط به عنوان یا عدم نقض یا ضمانت های ضمنی مربوط به قابلیت Ùروش یا تناسب برای یک منظور خاص، در رابطه با موجود بودن، دقت، قابلیت اطمینان یا محتویات این «خدمات» داده نمی شود. NOKIA مسئول هیچگونه از دست رÙتن سود یا ایجاد وقÙÙ‡ در کسب Ùˆ کار Ùˆ خسارت مستقیم، غیرمستقیم، تصادÙی، ویژه یا پیامد ناشی از استÙاده یا عدم امکان استÙاده از این «خدمات» نخواهد بود، حتی اگر NOKIA از امکان بروز چنین خساراتی مطلع شده باشد. برخی از حوزه های قضایی اجازه نمی دهند بعضی ضمانت ها یا محدودیت های مسئولیت پذیری مستثنی شوند، بنابراین ممکن است محدودیت ها یا استثناءهای Ùوق برای شما صادق نباشند. مسئولیت NOKIA در چنین مواردی محدود به حداکثر میزان مجاز تعیین شده توسط قانون مربوطه خواهد بود.</p>
+
+<p></p>
+
+<p>هیچ یک از مطالب مندرج در این نوشته، Ù†ÙÛŒ کننده حقوق قانونی هر طرÙÛŒ Ú©Ù‡ به عنوان مصر٠کننده است، نخواهد بود. هیچ یک از مطالب مندرج در این نوشته، محدودیتی در زمینه مسئولیت Nokia در صورت Ùوت یا جراحات ناشی از اهمال Nokia به شمار نمی رود.</p>
+
+<p></p>
+
+<h1>7. خط مشی مربوط به ادعادهای نقض قانون حق نسخه برداری</h1>
+
+<p></p>
+
+<p>در صورتی که اعتقاد دارید با اثر دارای حق نسخه برداری شما به گونه ای برخورد شده که نقض حق نسخه برداری به شمار می رود، می توانید با ارسال اطلاعیه ای شامل اطلاعات زیر، Nokia را مطلع سازید:</p>
+
+<p></p>
+
+<p>(1) امضای عادی یا دیجیتالی شخصی که از سوی مالک حق انحصاری مورد ادعای نقض، مجاز به اقدام است؛</p>
+
+<p></p>
+
+<p>(2) هویت یا توصی٠اثر دارای حق نسخه برداری مورد ادعای نقض؛</p>
+
+<p></p>
+
+<p>(3) هویت یا توصی٠مطلبی Ú©Ù‡ ادعا Ù…ÛŒ شود ناقض حق نسخه برداری است Ùˆ اطلاعاتی Ú©Ù‡ از نظر منطقی برای یاÙتن مطلب مورد نظر کاÙÛŒ باشد؛</p>
+
+<p></p>
+
+<p>(4) نام، نشانی، شماره تلÙن، نشانی پست الکترونیکی Ùˆ سایر اطلاعاتی Ú©Ù‡ به Nokia امکان Ù…ÛŒ دهد با شما تماس بگیرد؛</p>
+
+<p></p>
+
+<p>(5) بیانیه ای مبنی بر اینکه شما با حسن نیت اعتقاد دارید استÙاده از مطلب مورد نظر به شرح مورد شکایت، از سوی مالک حق نسخه برداری، نماینده وی، یا قانون مجاز دانسته نشده است؛ Ùˆ</p>
+
+<p></p>
+
+<p>(6) بیانیه ای مبنی بر اینکه اطلاعات موجود در اطلاعیه دقیق بوده و اینکه با علم به شهادت دروغ، شما از سوی مالک حق انحصاری مورد ادعای نقض، مجاز به اقدام درباره آن هستید.</p>
+
+<p></p>
+
+<p>این اطلاعیه باید به نشانی نماینده اختصاصی ما ارسال گردد:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. قانون حاکم</h1>
+
+<p></p>
+
+<p>Nokia در این شرایط Ùˆ ضوابط به معنای شرکت Nokia است. Nokia از داخل خاک Ùنلاند، «خدمات» را اداره Ùˆ کنترل Ù…ÛŒ کند. بنابراین، اطلاعاتی Ú©Ù‡ در اینجا درباره «خدمات» درج شده، تصور Ù…ÛŒ شود Ú©Ù‡ در Ùنلاند عرضه شده است.</p>
+
+<p></p>
+
+<p>حق نسخه برداری © Nokia Corporation 2006. تمام حقوق محÙوظ است.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/51/internetradio_51.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Toujours demander"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stations enregistrées"
+#define qtn_ir_added_single "%U[85] enregistrée"
+#define qtn_ir_addmanually_unnamed "Sans nom"
+#define qtn_ir_addst_description "Description"
+#define qtn_ir_addst_streamurl "Liens de transm. en continu"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio inactive"
+#define qtn_ir_app_general_err "Erreur interne. Redémarrez l'application."
+#define qtn_ir_apps_grid "Radio Inter."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Meilleure qualité"
+#define qtn_ir_bitrate_high "Haute qualité"
+#define qtn_ir_bitrate_standard "Qualité standard"
+#define qtn_ir_cost_heading "Avis important"
+#define qtn_ir_cost_softkey_continue "Continuer"
+#define qtn_ir_cost_softkey_exit "Quitter"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "La radio Internet utilise la connexion de données de votre téléphone pour les transmissions radio. Cette option n'est recommandée que si vous disposez d'un plan de transmission de données à montant fixe. Si vous n'êtes pas certain de vos coûts pour les données, informez-vous auprès de votre fournisseur de services avant de continuer."
+#define qtn_ir_country_list_expanded "%N stations"
+#define qtn_ir_countryregion_title "Pays/régions"
+#define qtn_ir_discover_beststations "Sélection meilleures stations"
+#define qtn_ir_discover_country_region "Parcourir par pays/région"
+#define qtn_ir_discover_genre "Parcourir par genre"
+#define qtn_ir_discover_genre_expanded "Stations triées par genre"
+#define qtn_ir_discover_langauge "Parcourir pas langue"
+#define qtn_ir_discover_language_expanded "Stations triées par langue"
+#define qtn_ir_discover_staticountryreg "Stations triées par pays/rég."
+#define qtn_ir_discover_title "Répert. stations"
+#define qtn_ir_discover_top "Principales stations"
+#define qtn_ir_edit_title "Modifier station"
+#define qtn_ir_err_operation "Erreur durant l'opération. Réessayez."
+#define qtn_ir_err_url_unavail "URL non disponible"
+#define qtn_ir_error_address "Adresse de station de radio Internet incorrecte"
+#define qtn_ir_error_connection "Expiration du délai de la connexion. Réessayez."
+#define qtn_ir_error_favourites "Espace insuffisant dans les favoris pour enregistrer la sélection"
+#define qtn_ir_error_general "Connexion à la station impossible"
+#define qtn_ir_error_isds_unavailable "Répertoire des stations Internet temporairement non disponible"
+#define qtn_ir_error_notavailable "Aucun lien de transmission en continu"
+#define qtn_ir_error_notinisds "Cet élément n'est plus disponible"
+#define qtn_ir_error_search "Entrez un objet de recherche"
+#define qtn_ir_findst_addstation "Ajouter station manuell."
+#define qtn_ir_findst_addtofav "Ajouter la station aux favoris"
+#define qtn_ir_findst_browsesds "Parcourir répert. stations"
+#define qtn_ir_findst_search_ensrhterm "Entrez un objet de recherche"
+#define qtn_ir_findst_softkey_search "Rechercher"
+#define qtn_ir_findstation_title "Chercher stat."
+#define qtn_ir_firstuse_title "Radio Int.: Bienvenue"
+#define qtn_ir_genre_list_expanded "%N stations"
+#define qtn_ir_genre_title "Genres"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Aucun historique"
+#define qtn_ir_homescreen_buffering "Mise mém. tampon"
+#define qtn_ir_homescreen_lastplayed "Dernière écoutée"
+#define qtn_ir_info_details_bitrate "%N Kbps:"
+#define qtn_ir_info_details_countryregi "Pays/région:"
+#define qtn_ir_info_details_description "Description:"
+#define qtn_ir_info_details_genre "Genre(s):"
+#define qtn_ir_info_details_language "Langue:"
+#define qtn_ir_info_details_name "Nom:"
+#define qtn_ir_info_details_streams "Trans. en continu:"
+#define qtn_ir_info_details_title "Infos station"
+#define qtn_ir_info_details_type "Type:"
+#define qtn_ir_info_details_type_isds "Rép. stat."
+#define qtn_ir_info_details_type_manual "Déf. util."
+#define qtn_ir_info_details_unnamed "Sans nom"
+#define qtn_ir_info_softkey_close "Fermer"
+#define qtn_ir_language_list_expanded "%N stations"
+#define qtn_ir_language_title "Langues"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Chargement en cours"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Recherche en cours"
+#define qtn_ir_main_descriptive_text "Utilisez 'Chercher stat.' ds b. outils pour en ajouter"
+#define qtn_ir_main_discover_expanded "Découvrez nouvelles stations"
+#define qtn_ir_main_last "Dernière écoutée"
+#define qtn_ir_main_now "Lecture en cours"
+#define qtn_ir_main_prog_deleting "Suppression de %N"
+#define qtn_ir_main_searchindir "Rechercher dans répert."
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Station sans nom"
+#define qtn_ir_memlo_ram_out_of_mem "Mémoire insuffisante pour exécuter l'opération. Supprimez d'abord des données."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N Kbps"
+#define qtn_ir_now_bitrate_mbps "%N Mbps"
+#define qtn_ir_now_bytecountermb "%N Mo"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N Mo"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Station suivante"
+#define qtn_ir_now_tooltip_play "Lire"
+#define qtn_ir_now_tooltip_previous "Station précédente"
+#define qtn_ir_now_tooltip_stop "Arrêter"
+#define qtn_ir_now_wait_buffering "Mise en mémoire tampon"
+#define qtn_ir_now_wait_buffering_perc "Mise en mémoire tampon %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Aucune connexion au réseau"
+#define qtn_ir_nwcontroller_err_nosnaps "Aucun point d'accès défini"
+#define qtn_ir_options_add "Ajouter aux favoris"
+#define qtn_ir_options_add_manually "Ajouter station manuell."
+#define qtn_ir_options_change "Changer"
+#define qtn_ir_options_clearhistory "Effacer l'historique"
+#define qtn_ir_options_editstation "Modifier la station"
+#define qtn_ir_options_equalizer "Égalisateur"
+#define qtn_ir_options_exit "Quitter"
+#define qtn_ir_options_findnmusicstore "Chercher dans Boutique"
+#define qtn_ir_options_fmtrans "Émetteur FM"
+#define qtn_ir_options_gotomusicstore "Aller à Boutique musique"
+#define qtn_ir_options_help "Aide"
+#define qtn_ir_options_history "Historique"
+#define qtn_ir_options_info "Infos sur la station"
+#define qtn_ir_options_mainview "Aller à l'affichage princ."
+#define qtn_ir_options_mark "Marquer"
+#define qtn_ir_options_markall "Marquer tout"
+#define qtn_ir_options_markunmark "Marquer/Annul. marque"
+#define qtn_ir_options_now "Aller à Lecture en cours"
+#define qtn_ir_options_off "Désactiver"
+#define qtn_ir_options_on "Activer"
+#define qtn_ir_options_searchag "Nouvelle recherche"
+#define qtn_ir_options_select "Sélectionner"
+#define qtn_ir_options_settings "Paramètres"
+#define qtn_ir_options_station "Station"
+#define qtn_ir_options_stereowidening "Amplification stéréo"
+#define qtn_ir_options_unmark "Annuler la marque"
+#define qtn_ir_options_unmarkall "Annuler ttes marques"
+#define qtn_ir_playfail_err "Échec d'écoute de la radio"
+#define qtn_ir_playlist_title "Liens reçus"
+#define qtn_ir_popup_no_results "Aucun résultat trouvé"
+#define qtn_ir_popup_toomany_results "Trop de résultats. Affinez votre critère de recherche."
+#define qtn_ir_results_none "Aucune station correspondante trouvée. Cherchez de nouveau."
+#define qtn_ir_search_result "%0U[09]: %1N résultat"
+#define qtn_ir_search_results "%0U[09]: %1N résult."
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Débit de connexion 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Débit de connexion GPRS"
+#define qtn_ir_settings_network "Connexion réseau"
+#define qtn_ir_settings_snap_default "Connexion par défaut"
+#define qtn_ir_settings_title "Paramètres"
+#define qtn_ir_settings_wifi "Débit de connexion Wi-Fi"
+#define qtn_ir_softkey_back "Retour"
+#define qtn_ir_softkey_cancel "Annuler"
+#define qtn_ir_softkey_done "Terminé"
+#define qtn_ir_softkey_no "Non"
+#define qtn_ir_softkey_options "Options"
+#define qtn_ir_softkey_select "Sélectionner"
+#define qtn_ir_softkey_yes "Oui"
+#define qtn_ir_station_saved "Station enregistrée"
+#define qtn_ir_stationlist_nomatches "(aucun résultat)"
+#define qtn_ir_stations_popup_delete "Supprimer\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Supprimer %N stations?"
+#define qtn_ir_stations_popup_removed "%U[86] supprimée"
+#define qtn_ir_stations_popup_removed_many "%N stations supprimées"
+#define qtn_ir_stations_popup_save "Enregistrer la station dans les favoris?"
+#define qtn_ir_suboptions_delete "Supprimer"
+#define qtn_ir_suboptions_details "Détails"
+#define qtn_ir_suboptions_move "Déplacer"
+#define qtn_ir_terms_details "En acceptant les Modalités et conditions ci-dessous, vous vous engagez par contrat dans la limite des lois applicables, sans limitation ou prohibition additionnelle en matière de droits du matériel"
+#define qtn_ir_terms_heading "Modalités et conditions"
+#define qtn_ir_terms_softkey_accept "Accepter"
+#define qtn_ir_terms_softkey_decline "Refuser"
+#define qtn_ir_title_history "Historique"
+#define qtn_ir_tooltip_addalltofav "Ajouter tout aux fav."
+#define qtn_ir_tooltip_addstation "Ajouter stat. manuell."
+#define qtn_ir_tooltip_addtofav "Ajouter aux favoris"
+#define qtn_ir_tooltip_copy "Copier"
+#define qtn_ir_tooltip_findnstore "Chercher ds Boutique"
+#define qtn_ir_tooltip_findst "Chercher des stations"
+#define qtn_ir_tooltip_history "Historique"
+#define qtn_ir_tooltip_listen "Écouter"
+#define qtn_ir_tooltip_paste "Coller"
+#define qtn_ir_tooltip_stationde "Détails de la station"
+#define qtn_ir_top_title "Princip. stations"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nom"
+#define qtn_ir_url_title "Ajouter station"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/51/internetradioai_51.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/51/terms_51.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Le service Radio Internet de Nokia (« Service ») vous permet de découvrir le contenu des stations de radio sur Internet et d’en profiter. EN UTILISANT LE SERVICE, VOUS RECONNAISSEZ AVOIR LU ET COMPRIS CET ACCORD, EN PLUS D’ÊTRE LIÉ PAR SES DISPOSITIONS ET MODALITÉS. Si vous êtes en désaccord, veuillez noter que vous n’êtes pas autorisé à utiliser le Service.</p>
+
+<p></p>
+
+<h1>1. DÉFINITIONS</h1>
+
+<p></p>
+
+<p>Les Stations de radio Internet désignent les entités qui produisent et distribuent, de manière générale par une émission sur Internet, un contenu audio et des métadonnées qui y sont reliées.</p>
+
+<p></p>
+
+<p>Le lien à la Station de radio Internet désigne une adresse Internet ou un ensemble d’adresses Internet qui permettent à l’utilisateur d’accéder au contenu émis par la Station de radio Internet.</p>
+
+<p></p>
+
+<h1>2. LE SERVICE</h1>
+
+<p></p>
+
+<p>Le Service permet :</p>
+<p>1. la navigation au moyen de liens aux Stations de radio Internet;</p>
+<p>2. l’accès au contenu des Stations de radio Internet;</p>
+
+<p></p>
+
+<h1>3. L’UTILISATION DU SERVICE</h1>
+
+<p></p>
+
+<p>L’utilisation du Service n’est permise qu’à des fins personnelles, individuelles et non-lucratives. Nokia détient la totalité des droits de propriété intellectuelle reliés au Service.</p>
+
+<p></p>
+
+<p>Nokia se réserve le droit de modifier ces conditions et modalités après vous en avoir avisé.</p>
+
+<p></p>
+
+<h1>4. CONFIDENTIALITÉ</h1>
+
+<p></p>
+
+<p>Nokia s’engage à protéger le droit à la vie privée de l’utilisateur en mettant en œuvre des politiques de confidentialité strictes.</p>
+
+<p></p>
+
+<p>Afin d’améliorer le service et d’en surveiller l’utilisation, Nokia peut recueillir des données sur l’utilisation, notamment des renseignements sur d’autres stations de radio Internet qui ont été visitées, le temps consacré à sur chacune d’elles et les éléments du contenu identifiés comme favoris.</p>
+
+<p></p>
+
+<p>Nokia ne recueille aucun renseignement pouvant mener à l’identification de l’utilisateur du service.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILITÉ DU SERVICE</h1>
+
+<p></p>
+
+<p>Le Service est offert pour votre agrément. Il est offert tel quel et selon sa disponibilité. Nokia ne peut garantir une ininterruption du Service, ni que celui-ci sera exempt d’erreurs. Nokia se réserve le droit de passer le Service en revue ou d’en retirer l’accès en tout temps.</p>
+
+<p></p>
+
+<p>Nokia pourra, à son gré, apporter des mises à niveau aux logiciels et aux applications qui sont reliés au Service.</p>
+
+<p></p>
+
+<h1>6. LIMITATION ET EXONÉRATION DE RESPONSABILITÉ</h1>
+
+<p></p>
+
+<p>Pour vous en faciliter l’accès, Nokia peut choisir d’inclure des liens vers des Stations de radio Internet qui sont détenues et exploitées par des tiers. Nokia ne garantit en rien que ces liens seront opérationnels. En outre, le contenu qui n’est pas expressément relié à Nokia n’indique en rien que cette dernière apporte son appui à ce contenu tel qu’il est ou les produits et services auxquels il fait référence.</p>
+
+<p></p>
+
+<p>Vous devez passer en revue et accepter les règles d’utilisation de chaque Station, le cas échéant, avant d’y accéder. Vous reconnaissez également que Nokia ne détient aucun contrôle sur le contenu des services offerts par les tiers et n’est en aucun cas responsable du contenu des Stations de radio Internet.</p>
+
+<p></p>
+
+<p>Accéder au contenu des Stations de radio Internet en utilisant le Service peut entraîner le transfert d’une grande quantité de données sur le réseau de votre fournisseur de service. Communiquez avec votre fournisseur de service afin d’obtenir plus de détails sur les frais de transfert de données. Prenez note qu’en utilisant le Service avec les Stations de radio Internet qui émettent à plus grand débit binaire, vous pouvez encourir des frais supplémentaires reliés au trafic des données.</p>
+
+<p></p>
+
+<p>Le trafic des données relié à l’utilisation du Service peut inclure à tout le moins les éléments suivants : la mise à jour du contenu du répertoire des Stations, l’émission de données provenant des Stations de radio Internet, la collecte de données statistiques et la mise à niveau de l’application de radio Internet.</p>
+
+<p></p>
+
+<p>Nokia ne sera pas tenue responsable des coûts de trafic de données liés à votre utilisation du Service.</p>
+
+<p></p>
+
+<p>AUCUNE GARANTIE DE TOUTE SORTE, QU’ELLE SOIT IMPLICITE OU EXPRESSE, NOTAMMENT UNE GARANTIE DE TITRE, D’ABSENCE DE CONTRE-FAÇON OU GARANTIE IMPLICITE DE VALEUR MARCHANDE OU D’APTITUDE À UN USAGE PARTICULIER N’EST ÉMISE RELATIVEMENT À LA DISPONIBILITÉ, LA FIABILITÉ OU L’EXACTITUDE DU CONTENU DU SERVICE. NOKIA NE POURRA ÊTRE TENUE RESPONSABLE DE TOUT DOMMAGE, QU’IL SOIT DIRECT, INDIRECT, INCIDENT, ACCESSOIRE OU EXEMPLAIRE, DE TOUTE PERTE DE PROFITS OU D’UNE INTERRUPTION DE RENDEMENT RÉSULTANT DE L’IMPOSSIBILITÉ D’UTILISER LE SERVICE, MÊME SI NOKIA AVAIT ÉTÉ AVISÉ DE LA POSSIBILITÉ QUE DE TELS DOMMAGES SURVIENNENT. DES ÉTATS ONT LÉGIFÉRÉ SUR CERTAINES EXCLUSIONS DE GARANTIES ET SUR L’EXONÉRATION DE RESPONSABILITÉ; CONSÉQUEMMENT, CERTAINES DES EXCLUSIONS ET DES EXONÉRATIONS CI-DESSUS POURRAIENT NE PAS S’APPLIQUER À VOUS. EN DE TELS CAS, LA RESPONSABILITÉ DE NOKIA NE POURRAIT ÊTRE INVOQUÉE QUE DANS LA PLEINE MESURE PRÉVUE PAR LA LOI.</p>
+
+<p></p>
+
+<p>Aucune disposition de la présente ne peut porter atteinte aux droits que la loi confère aux consommateurs. Aucune disposition de la présente ne peut exonérer Nokia de sa responsabilité dans l’éventualité de mort ou de préjudice corporel résultant de sa négligence.</p>
+
+<p></p>
+
+<h1>7. POLITIQUE RELATIVE AUX ALLÉGATIONS DE VIOLATION DE DROITS DE PROPRIÉTÉ INTELLECTUELLE</h1>
+
+<p></p>
+
+<p>Si vous croyez qu’une ou plusieurs de vos œuvres ont été manipulées de façon à violer vos droits de propriété intellectuelle, vous pouvez en notifier Nokia en lui faisant parvenir un avis contenant les informations suivantes :</p>
+
+<p></p>
+
+<p>(1) la signature électronique ou manuscrite d’une personne autorisée à agir au nom du détenteur des droits exclusifs faisant l’objet de l’allégation;</p>
+
+<p></p>
+
+<p>(2) l’identification ou la description de l’œuvre sur laquelle l’allégation de violation des droits porte;</p>
+
+<p></p>
+
+<p>(3) l’identification ou la description des éléments matériels et des pièces qui sont reliés à l’allégation de violation, avec l’information raisonnablement suffisante pour les localiser;</p>
+
+<p></p>
+
+<p>(4) votre nom, adresse, numéro de téléphone, adresse électronique et toute autre information qui permettra à Nokia de communiquer avec vous;</p>
+
+<p></p>
+
+<p>(5) Une déclaration à l’effet que vous croyez de bonne foi que l’utilisation des éléments matériels et des pièces mentionnés à laquelle vous vous opposez n’est pas autorisée par le détenteur des droits de propriété intellectuelle, ses mandataires ou par la loi; et</p>
+
+<p></p>
+
+<p>(6) une déclaration sous serment à l’effet que l’information notifiée est exacte et que mandat vous a été confié de représenter les intérêts du détenteur des droits de propriété intellectuelle faisant objet de l’allégation de violation des droits.</p>
+
+<p></p>
+
+<p>L’avis doit être envoyé à notre mandataire attitré à l’adresse suivante :</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. DROIT APPLICABLE</h1>
+
+<p></p>
+
+<p>Aux termes de ces dispositions, « Nokia » désigne Nokia Corporation. Nokia exploite et contrôle le Service à partir d’installations situées en Finlande. Par conséquent, l’information contenue au présent Service est réputée être fournie en Finlande.</p>
+
+<p></p>
+
+<p>© Nokia Corporation 2006. Tous droits réservés.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/54/internetradio_54.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "ΕÏώτηση πάντα"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N σταθμοί αποθηκευμένοι"
+#define qtn_ir_added_single "Ο σταθμός %U[66] αποθηκεÏτηκε"
+#define qtn_ir_addmanually_unnamed "Ανώνυμο"
+#define qtn_ir_addst_description "ΠεÏιγÏαφή"
+#define qtn_ir_addst_streamurl "URL Ïοής"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Ραδιόφ. Διαδικτ."
+#define qtn_ir_ai_radio_not_active "Ραδιόφ. μη ενεÏγό"
+#define qtn_ir_app_general_err "ΕσωτεÏικό σφάλμα. Επανεκκινήστε την εφαÏμογή."
+#define qtn_ir_apps_grid "Ραδ. Διαδ."
+#define qtn_ir_apps_list "Ραδιόφ. Διαδικτ."
+#define qtn_ir_apps_skey "Ραδ. Διαδικτ."
+#define qtn_ir_apps_standby "Ραδιόφωνο Διαδικτ."
+#define qtn_ir_apps_swins "Ραδιόφωνο Διαδικτ."
+#define qtn_ir_apps_wheel "Ραδιόφ. Διαδικτ."
+#define qtn_ir_bitrate_best "ΆÏιστη ποιότητα"
+#define qtn_ir_bitrate_high "Υψηλή ποιότητα"
+#define qtn_ir_bitrate_standard "Τυπική ποιότητα"
+#define qtn_ir_cost_heading "Σημαντική σημείωση"
+#define qtn_ir_cost_softkey_continue "Συνέχεια"
+#define qtn_ir_cost_softkey_exit "Έξοδος"
+#define qtn_ir_cost_title "Ραδ. Διαδικτ."
+#define qtn_ir_cost_warning "Το Ïαδιόφωνο ΔιαδικτÏου χÏησιμοποιεί τη σÏνδεση δικτÏου του τηλεφώνου για Ïαδιοφωνικές μεταδόσεις. Αυτό συνιστάται μόνο εάν έχετε πάγια χÏέωση δεδομένων. Εάν δεν είστε βέβαιοι για τις χÏεώσεις δεδομένων, επικοινωνήστε με το φοÏέα δκτÏου Ï€Ïιν να συνεχίσετε."
+#define qtn_ir_country_list_expanded "%N σταθμοί"
+#define qtn_ir_countryregion_title "ΧώÏες/πεÏιοχές"
+#define qtn_ir_discover_beststations "Οι καλÏτεÏοι σταθμοί"
+#define qtn_ir_discover_country_region "Αναζ. κατά χώÏα/πεÏιοχ."
+#define qtn_ir_discover_genre "Αναζήτηση κατά είδος"
+#define qtn_ir_discover_genre_expanded "Ταξινόμηση κατά είδος"
+#define qtn_ir_discover_langauge "Αναζήτηση κατά γλώσσα"
+#define qtn_ir_discover_language_expanded "Ταξινόμηση κατά γλώσσα"
+#define qtn_ir_discover_staticountryreg "Σταθμοί κατά χώÏα/πεÏιοχή"
+#define qtn_ir_discover_title "Κατάλ. σταθμ."
+#define qtn_ir_discover_top "ΚοÏυφαίοι σταθμοί"
+#define qtn_ir_edit_title "Επεξ. σταθμοÏ"
+#define qtn_ir_err_operation "Σφάλμα λειτουÏγίας. ΠÏοσπαθήστε πάλι."
+#define qtn_ir_err_url_unavail "Η διεÏθυνση URL δεν είναι διαθέσιμη"
+#define qtn_ir_error_address "Εσφαλμένη διεÏθυνση ÏÎ±Î´Î¹Î¿ÏƒÏ„Î±Î¸Î¼Î¿Ï Î”Î¹Î±Î´Î¹ÎºÏ„Ïου"
+#define qtn_ir_error_connection "Η σÏνδεση έληξε. ΠÏοσπαθήστε πάλι."
+#define qtn_ir_error_favourites "Δεν επαÏκεί ο χώÏος στα Αγαπημένα για την αποθήκευση της επιλογής"
+#define qtn_ir_error_general "ΑδÏνατη η σÏνδεση με το σταθμό"
+#define qtn_ir_error_isds_unavailable "Η υπηÏεσία καταλόγου σταμών ΔιαδικτÏου Ï€ÏοσωÏινά δεν είναι διαθέσιμη"
+#define qtn_ir_error_notavailable "Δεν υπάÏχουν διαθέσιμοι σÏνδεσμοι Ïοής"
+#define qtn_ir_error_notinisds "Το στοιχείο δεν είναι πλέον διαθέσιμο"
+#define qtn_ir_error_search "Εισαγάγετε στοιχείο αναζήτησης"
+#define qtn_ir_findst_addstation "Μη αυτ. Ï€Ïοσθ. σταθμ."
+#define qtn_ir_findst_addtofav "ΠÏοσθ. ÏƒÏ„Î±Î¸Î¼Î¿Ï ÏƒÏ„Î± Αγαπ."
+#define qtn_ir_findst_browsesds "Αναζ/ση στον κατάλογο"
+#define qtn_ir_findst_search_ensrhterm "Εισαγ. στοιχείο αναζήτησης"
+#define qtn_ir_findst_softkey_search "Αναζήτηση"
+#define qtn_ir_findstation_title "ΕÏÏ. σταθμών"
+#define qtn_ir_firstuse_title "Ραδιόφ. ΔιαδικτÏου"
+#define qtn_ir_genre_list_expanded "%N σταθμοί"
+#define qtn_ir_genre_title "Είδη"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Καμία καταχώÏιση"
+#define qtn_ir_homescreen_buffering "ΠÏοσωÏινή αποθ."
+#define qtn_ir_homescreen_lastplayed "Τελευτ. ακÏόαση"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "ΧώÏα/πεÏιοχή:"
+#define qtn_ir_info_details_description "ΠεÏιγÏαφή:"
+#define qtn_ir_info_details_genre "Είδη:"
+#define qtn_ir_info_details_language "Γλώσσα:"
+#define qtn_ir_info_details_name "Όνομα:"
+#define qtn_ir_info_details_streams "Ροές:"
+#define qtn_ir_info_details_title "ΠληÏ. σταθμοÏ"
+#define qtn_ir_info_details_type "ΤÏπος:"
+#define qtn_ir_info_details_type_isds "Κατ.σταθ."
+#define qtn_ir_info_details_type_manual "ΧÏήστης"
+#define qtn_ir_info_details_unnamed "Ανώνυμο"
+#define qtn_ir_info_softkey_close "Κλείσιμο"
+#define qtn_ir_language_list_expanded "%N σταθμοί"
+#define qtn_ir_language_title "Γλώσσες"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "ΦόÏτωση"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Γίνεται αναζήτηση"
+#define qtn_ir_main_descriptive_text "Επιλ. 'ΕÏÏεση σταθμών' για Ï€Ïοσθήκη σταθμών"
+#define qtn_ir_main_discover_expanded "ΑνακαλÏψτε νέους σταθμοÏÏ‚"
+#define qtn_ir_main_last "Τελευτ. ακÏόαση"
+#define qtn_ir_main_now "Παίζονται Ï„ÏŽÏα"
+#define qtn_ir_main_prog_deleting "ΔιαγÏαφή %N"
+#define qtn_ir_main_searchindir "Αναζήτ. στον κατάλογο"
+#define qtn_ir_main_title "Ραδ. Διαδικτ."
+#define qtn_ir_main_unnamed_station "Ανών. σταθμός"
+#define qtn_ir_memlo_ram_out_of_mem "ΑνεπαÏκής μνήμη για την ενέÏγεια αυτή. ΔιαγÏάψτε δεδομένα Ï€Ïώτα."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Επόμενος σταθμός"
+#define qtn_ir_now_tooltip_play "ΑναπαÏαγωγή"
+#define qtn_ir_now_tooltip_previous "ΠÏοηγοÏμ. σταθμός"
+#define qtn_ir_now_tooltip_stop "Διακοπή"
+#define qtn_ir_now_wait_buffering "ΠÏοσωÏινή αποθήκευση"
+#define qtn_ir_now_wait_buffering_perc "ΠÏοσωÏινή αποθήκευση %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Δεν υπάÏχει σÏνδεση δικτÏου"
+#define qtn_ir_nwcontroller_err_nosnaps "Δεν έχει οÏιστεί σημείο Ï€Ïόσβασης"
+#define qtn_ir_options_add "ΠÏοσθ. στα Αγαπημένα"
+#define qtn_ir_options_add_manually "Μη αυτ. Ï€Ïοσθ. σταθμ."
+#define qtn_ir_options_change "Αλλαγή"
+#define qtn_ir_options_clearhistory "Σβήσιμο ιστοÏικοÏ"
+#define qtn_ir_options_editstation "ΕπεξεÏγασία σταθμοÏ"
+#define qtn_ir_options_equalizer "Ισοσταθμιστής"
+#define qtn_ir_options_exit "Έξοδος"
+#define qtn_ir_options_findnmusicstore "ΕÏÏ. στο Κατάστ. μουσ."
+#define qtn_ir_options_fmtrans "Πομπός FM"
+#define qtn_ir_options_gotomusicstore "Μετάβ. στο Κατ. μουσ."
+#define qtn_ir_options_help "Βοήθεια"
+#define qtn_ir_options_history "ΙστοÏικό"
+#define qtn_ir_options_info "ΠληÏοφοÏίες σταθμοÏ"
+#define qtn_ir_options_mainview "Μετάβ. στην κÏÏια Ï€Ïοβ."
+#define qtn_ir_options_mark "Επιλογή"
+#define qtn_ir_options_markall "Επιλογή όλων"
+#define qtn_ir_options_markunmark "Επιλογή/ΕξαίÏεση"
+#define qtn_ir_options_now "Μετάβ. στα 'Παίζ. Ï„ÏŽÏα'"
+#define qtn_ir_options_off "ΑπενεÏγοποίηση"
+#define qtn_ir_options_on "ΕνεÏγοποίηση"
+#define qtn_ir_options_searchag "Επανάληψη αναζήτ."
+#define qtn_ir_options_select "Επιλογή"
+#define qtn_ir_options_settings "Ρυθμίσεις"
+#define qtn_ir_options_station "Σταθμός"
+#define qtn_ir_options_stereowidening "ΔιεÏÏυνση stereo"
+#define qtn_ir_options_unmark "ΕξαίÏεση"
+#define qtn_ir_options_unmarkall "ΕξαίÏεση όλων"
+#define qtn_ir_playfail_err "Η αναπαÏαγωγή απέτυχε"
+#define qtn_ir_playlist_title "Ληφθ. σÏνδεσμ."
+#define qtn_ir_popup_no_results "Δεν βÏέθηκαν αποτελέσματα"
+#define qtn_ir_popup_toomany_results "ΠάÏα πολλά αποτελέσματα: ΠεÏιοÏίστε το εÏÏος αναζήτησης."
+#define qtn_ir_results_none "Δεν βÏέθηκαν σταθμοί. Επαναλάβετε την αναζήτηση."
+#define qtn_ir_search_result "%0U[10]:%1N αποτέλ."
+#define qtn_ir_search_results "%0U[09]:%1N αποτελ."
+#define qtn_ir_set_folder_internetradio "Ραδιόφ. Διαδικτ."
+#define qtn_ir_set_folder_irradio "Ραδιόφ. Διαδικτ."
+#define qtn_ir_settings_3g "Bitrate σÏνδεσης 3G"
+#define qtn_ir_settings_connec_softkey_ok "Εντάξει"
+#define qtn_ir_settings_gprs "Bitrate σÏνδεσης GPRS"
+#define qtn_ir_settings_network "ΣÏνδεση δικτÏου"
+#define qtn_ir_settings_snap_default "ΠÏοεπιλεγμ. σÏνδεση"
+#define qtn_ir_settings_title "Ρυθμίσεις"
+#define qtn_ir_settings_wifi "Bitrate σÏνδεσης Wi-Fi"
+#define qtn_ir_softkey_back "Πίσω"
+#define qtn_ir_softkey_cancel "ΑκÏÏωση"
+#define qtn_ir_softkey_done "Εντάξει"
+#define qtn_ir_softkey_no "Όχι"
+#define qtn_ir_softkey_options "Επιλογές"
+#define qtn_ir_softkey_select "Επιλογή"
+#define qtn_ir_softkey_yes "Îαι"
+#define qtn_ir_station_saved "Ο σταθμός αποθηκεÏτηκε"
+#define qtn_ir_stationlist_nomatches "(καμία αντιστοιχία)"
+#define qtn_ir_stations_popup_delete "ΔιαγÏαφή\n%U[78];"
+#define qtn_ir_stations_popup_delete_many "ΔιαγÏαφή %N σταθμών;"
+#define qtn_ir_stations_popup_removed "Ο σταθμός %U[67] διαγÏάφτηκε"
+#define qtn_ir_stations_popup_removed_many "ΔιαγÏάφτηκαν %N σταθμοί"
+#define qtn_ir_stations_popup_save "Αποθήκευση στα Αγαπημένα;"
+#define qtn_ir_suboptions_delete "ΔιαγÏαφή"
+#define qtn_ir_suboptions_details "ΛεπτομέÏειες"
+#define qtn_ir_suboptions_move "Μετακίνηση"
+#define qtn_ir_terms_details "Αποδεχόμενοι τους παÏακάτω ÎŒÏους και ΠÏοϋποθέσεις δεσμεÏεστε με σÏμβαση στο βαθμό που επιτÏέπει η ισχÏουσα νομοθεσία, χωÏίς πεÏαιτέÏω πεÏιοÏισμοÏÏ‚ ή απαγοÏεÏσεις ως Ï€Ïος κάθε δικαίωμα"
+#define qtn_ir_terms_heading "ÎŒÏοι και Ï€Ïοϋποθέσεις"
+#define qtn_ir_terms_softkey_accept "Αποδοχή"
+#define qtn_ir_terms_softkey_decline "ΑπόÏÏιψ."
+#define qtn_ir_title_history "ΙστοÏικό"
+#define qtn_ir_tooltip_addalltofav "Όλα στα Αγαπημένα"
+#define qtn_ir_tooltip_addstation "Μη αυτόμ. Ï€Ï. σταθμ."
+#define qtn_ir_tooltip_addtofav "ΠÏοσθ. στα Αγαπημ."
+#define qtn_ir_tooltip_copy "ΑντιγÏαφή"
+#define qtn_ir_tooltip_findnstore "ΕÏÏ. στο Κατ. μουσ."
+#define qtn_ir_tooltip_findst "ΕÏÏεση σταθμών"
+#define qtn_ir_tooltip_history "ΙστοÏικό"
+#define qtn_ir_tooltip_listen "ΑκÏόαση"
+#define qtn_ir_tooltip_paste "Επικόλληση"
+#define qtn_ir_tooltip_stationde "Στοιχεία σταθμοÏ"
+#define qtn_ir_top_title "ΚοÏυφ. σταθμ."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Όνομα"
+#define qtn_ir_url_title "ΠÏοσθ. σταθμ."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/54/internetradioai_54.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Ραδ/νο Διαδ.">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/54/terms_54.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Η υπηÏεσία Î´Î¹Î±Î´Î¹ÎºÏ„Ï…Î±ÎºÎ¿Ï Ïαδιοφώνου της Nokia (“ΥπηÏεσίαâ€) σας επιτÏέπει να ανακαλÏψετε και να ζήσετε το πεÏιεχόμενο των διαδικτυακών Ïαδιοφωνικών σταθμών. ΣΥΜΦΩÎΕΙΤΕ ΟΤΙ ΜΕ ΤΗ ΧΡΗΣΗ ΤΗΣ ΥΠΗΡΕΣΙΑΣ ΑΠΟΔΕΧΕΣΤΕ ΟΤΙ ΕΧΕΤΕ ΔΙΑΒΑΣΕΙ ΚΑΙ ΚΑΤΑÎΟΗΣΕΙ ΤΗΠΠΑΡΟΥΣΑ ΣΥΜΦΩÎΙΑ ΚΑΙ ΟΤΙ ΣΥΜΦΩÎΕΙΤΕ ΟΤΙ ΔΕΣΜΕΥΕΣΤΕ ΑΠΟ ΤΟΥΣ ΟΡΟΥΣ ΚΑΙ ΤΙΣ ΠΡΟΫΠΟΘΕΣΕΙΣ ΤΗΣ. Εάν δεν συμφωνείτε, παÏακαλείστε αν λάβετε υπόψη ότι η χÏήση της ΥπηÏεσίας δεν σάς επιτÏέπεται.</p>
+
+<p></p>
+
+<h1>1. ΟΡΙΣΜΟΙ:</h1>
+
+<p></p>
+
+<p>Ως Διαδικτυακοί Ïαδιοφωνικοί σταθμοί οÏίζονται οντότητες οι οποίες παÏάγουν και διαδίδουν γενικά ακουστικό πεÏιεχόμενο και σχετικά μεταδεδομένα μέσω διαδικτÏου σε μια Ïοή.</p>
+
+<p></p>
+
+<p>Ως σÏνδεσμος Ï€Ïος το διαδικτυακό Ïαδιοφωνικό σταθμό οÏίζεται μια λειτουÏγία ÎµÎ½Ï„Î¿Ï€Î¹ÏƒÎ¼Î¿Ï Ï€Î·Î³Î®Ï‚ ή ένα σÏνολο λειτουÏγιών ÎµÎ½Ï„Î¿Ï€Î¹ÏƒÎ¼Î¿Ï Ï€Î·Î³Î®Ï‚ που επιτÏέπουν στο χÏήστη την Ï€Ïόσβαση στο πεÏιεχόμενο που μεταδίδεται από το διαδικτυακό Ïαδιοφωνικό σταθμό.</p>
+
+<p></p>
+
+<h1>2. Η ΥΠΗΡΕΣΙΑ</h1>
+
+<p></p>
+
+<p>Η ΥπηÏεσία παÏέχει τα παÏακάτω:</p>
+<p>1. πεÏιήγηση σε συνδέσμους διαδικτυακών Ïαδιοφωνικών σταθμών,</p>
+<p>2. Ï€Ïόσβαση στο πεÏιεχόμενο των διαδικτυακών Ïαδιοφωνικών σταθμών</p>
+
+<p></p>
+
+<h1>3. ΧΡΗΣΗ ΤΗΣ ΥΠΗΡΕΣΙΑΣ</h1>
+
+<p></p>
+
+<p>Η χÏήση της  ΥπηÏεσίας επιτÏέπεται μόνο για ιδιωτική και μη εμποÏική χÏήση. Η Nokia διατηÏεί όλα τα δικαιώματα πνευματικής ιδιοκτησίας τόσο για όσο και Ï€Ïος την ΥπηÏεσία.</p>
+
+<p></p>
+
+<p>Η Nokia διατηÏεί το δικαίωμα αλλαγής των παÏόντων ÏŒÏων και Ï€Ïοϋποθέσεων παÏέχοντας σε εσάς ενημέÏωση για αυτές τις αλλαγές.</p>
+
+<p></p>
+
+<h1>4. ΑΠΟΡΡΗΤΟ</h1>
+
+<p></p>
+
+<p>Η Nokia δεσμεÏεται να Ï€ÏοστατεÏει την ιδιοτικότητα του χÏήστη εφαÏμόζοντας Ïητές πολιτικές αποÏÏήτου.</p>
+
+<p></p>
+
+<p>ΠÏοκειμένου για έλεγχο της χÏήσης και βελτίωση της ΥπηÏεσίας, η Nokia ενδέχεται να συλλέγει δεδομένα χÏήσης που πεÏιλαμβάνουν, ενδεικτικά, πληÏοφοÏίες για τους διαδικτυακοÏÏ‚ ÏαδιοφωνικοÏÏ‚ σταθμοÏÏ‚ Ï€Ïόσβασης, το χÏόνο παÏαμονής σε κάθε σταθμό και τα στοιχεία που οÏίζονται ως αγαπημένα.</p>
+
+<p></p>
+
+<p>Η Nokia δεν συλλέγει καμία πληÏοφοÏία που επιτÏέπει την αναγνώÏιση του χÏήστη της ΥπηÏεσίας.</p>
+
+<p></p>
+
+<h1>5. ΔΙΑΘΕΣΙΜΟΤΗΤΑ ΥΠΗΡΕΣΙΑΣ</h1>
+
+<p></p>
+
+<p>Η ΥπηÏεσία παÏέχεται ως μέσο διευκόλυνσης Ï€Ïος εσάς. ΠαÏέχεται "ως έχει" και "βάσει διαθεσιμότητας". Η Nokia δεν εγγυάται την αδιάλειπτη ή την χωÏίς σφάλματα λειτουÏγία της ΥπηÏεσίας. Η Nokia διατηÏεί το δικαίωμα να Ï„Ïοποποιήσει την ΥπηÏεσία ή να αποσÏÏει την Ï€Ïόσβαση σε αυτή ανά πάσα στιγμή.</p>
+
+<p></p>
+
+<p>Η Nokia μποÏεί να παÏέχει αναβάθμιση για τις σχετικές εφαÏμογές Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï Ï„Î·Ï‚ ΥπηÏεσίας κατά την αποκλειστική της ευχέÏεια.</p>
+
+<p></p>
+
+<h1>6. ΑΠΟΠΟΙΗΣΗ ΕΥΘΥÎΩΠΚΑΙ ΥΠΟΧΡΕΩΣΕΙΣ</h1>
+
+<p></p>
+
+<p>Για δική σας εÏκολη Ï€Ïόσβαση, η Nokia ενδέχεται να συμπεÏιλάβει συνδέσμους Ï€Ïος τους διαδικτυακοÏÏ‚ ÏαδιοφωνικοÏÏ‚ σταθμοÏÏ‚ οι οποίοι αποτελοÏν ιδιοκτησία άλλων οντοτήτων ή η λειτουÏγία τους παÏέχεται από άλλες οντότητες. Η Nokia δεν εγγυάται την λειτουÏγία των συνδέσμων Ï€Ïος τους διαδικτυακοÏÏ‚ ÏαδιοφωνικοÏÏ‚ σταθμοÏÏ‚. Επίσης, η Nokia σε καμία πεÏίπτωση δεν υιοθετεί στο ακέÏαιο το πεÏιεχόμενο που δεν σχετίζεται με αυτήν οÏτε τις υπηÏεσίες που αναφέÏονται σε πεÏιεχόμενο τέτοιου είδους.</p>
+
+<p></p>
+
+<p>ΠÏιν την Ï€Ïόσβαση, οφείλετε να επανεξετάσετε και να συμφωνήσετε με τους ÏŒÏους χÏήσης κάθε σταθμοÏ, εάν παÏέχονται. Συμφωνείτε επίσης ότι η Nokia δεν ελέγχει το πεÏιεχόμενο των υπηÏεσιών που παÏέχονται από άλλες οντότητες και δεν αναλαμβάνει καμία ευθÏνη για το πεÏιεχόμενο που παÏέχεται από τους διαδικτυακοÏÏ‚ ÏαδιοφωνικοÏÏ‚ σταθμοÏÏ‚.</p>
+
+<p></p>
+
+<p>Η Ï€Ïόσβαση στο πεÏιχεόμενο των διαδικτυακών Ïαδιοφωνικών σταθμών με χÏήση της ΥπηÏεσίας ενδέχεται να μην καλÏπτει τη μεταφοÏά μεγάλου όγκου δεδομένων μέσω δικτÏου του φοÏέα παÏοχής υπηÏεσιών. Επικοινωνήστε με το φοÏέα παÏοχής υπηÏεσιών δικτÏου για πληÏοφοÏίες σχετικά με τις χÏεώσεις μετάδοσης δεδομένων. Σημειώστε ότι η χÏήση της ΥπηÏεσίας με τους διαδικτυακοÏÏ‚ ÏαδιοφωνικοÏÏ‚ σταθμοÏÏ‚ οι οποίοι μεταφέÏουν υψηλότεÏους ÏυθμοÏÏ‚ Ïοής δεδομένων ενδέχεται να επιφέÏει υψηλότεÏα κόστη που αποÏÏέουν από τη συμφόÏηση δεδομένων.</p>
+
+<p></p>
+
+<p>Η συμφόÏηση δεδομένων που σχετίζεται με τη χÏήση της ΥπηÏεσίας μποÏεί να πεÏιλαμβάνει τουλάχιστον τα εξής: ΜεταφόÏτωση του πεÏιεχομένου καταλόγου των Ïαδιοφωνικών σταθμών, μεταφοÏά δεδομένων από τον διαδικτυακό Ïαδιοφωνικό σταθμό, συλλογή στατικών δεδομένων και αναβάθμιση της εφαÏμογής του Î´Î¹Î±Î´Î¹ÎºÏ„Ï…Î±ÎºÎ¿Ï Ïαδιοφώνου.</p>
+
+<p></p>
+
+<p>Η Nokia δεν ευθÏνεται για τα κόστη συμφόÏησης δεδομένων που αφοÏοÏν τη δική σας χÏήση της ΥπηÏεσίας.</p>
+
+<p></p>
+
+<p>ΔΕΠΠΑΡΕΧΟÎΤΑΙ ΟΠΟΙΕΣΔΗΠΟΤΕ ΕΓΓΥΗΣΕΙΣ, ΡΗΤΕΣ Ή ΣΙΩΠΗΡΕΣ, ΣΥΜΠΕΡΙΛΑΜΒΑÎΟΜΕÎΩÎ, ΕÎΔΕΙΚΤΙΚΑ, ΤΩΠΕΓΓΥΗΣΕΩΠΠΕΡΙ ΤΙΤΛΩΠΉ ΜΗ ΠΑΡΑΒΙΑΣΗΣ Ή ΣΙΩΠΗΡΩΠΕΓΓΥΗΣΕΩΠΠΕΡΙ ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ΚΑΙ ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΕÎΑ ΣΥΓΚΕΚΡΙΜΕÎΟ ΣΚΟΠΟ, ΟΣΟΠΑΦΟΡΑ ΤΗ ΔΙΑΘΕΣΙΜΟΤΗΤΑ, ΤΗΠΑΚΡΙΒΕΙΑ, ΤΗΠΑΞΙΟΠΙΣΤΙΑ Η ΤΟ ΠΕΡΙΕΧΟΜΕÎΟ ΤΗΣ ΠΑΡΟΥΣΑΣ ΥΠΗΡΕΣΙΑΣ. Η NOKIA ΔΕΠΕΥΘΥÎΕΤΑΙ ΓΙΑ ΚΑΜΙΑ ΑΜΕΣΗ Ή ΕΜΜΕΣΗ, ΤΥΧΑΙΑ, ΕΙΔΙΚΗ Ή ΕΠΑΚΟΛΟΥΘΗ ΖΗΜΙΑ, ΑΠΩΛΕΙΑ ΚΕΡΔΟΥΣ Ή ΓΙΑ ΠΑΥΣΗ ΕΠΙΧΕΙΡΗΣΗΣ ΠΟΥ ΕΠΕΡΧΕΤΑΙ ΜΕΤΑ ΑΠΟ ΧΡΗΣΗ Ή ΑÎΙΚΑÎΟΤΗΤΑ ΧΡΗΣΗΣ ΤΗΣ ΥΠΗΡΕΣΙΑΣ, ΑΚΟΜΑ ΚΑΙ ΣΕ ΠΕΡΙΠΤΩΣΗ ΠΟΥ Η NOKIA ΕΙΧΕ ΕÎΗΜΕΡΩΘΕΙ ΓΙΑ ΤΗΠΠΙΘΑÎΟΤΗΤΑ ΤΕΤΟΙΟΥ ΕΙΔΟΥΣ ΖΗΜΙΑΣ. ΟΡΙΣΜΕÎΕΣ ΔΙΚΑΙΟΔΟΣΙΕΣ ΔΕΠΕΠΙΤΡΕΠΟΥΠΑΠΟΚΛΕΙΣΜΟ ΑΠΟ ΣΥΓΚΕΚΡΙΜΕÎΕΣ ΕΓΓΥΗΣΕΙΣ Ή ΠΕΡΙΟΡΙΣΜΟΥΣ ΕΥΘΥÎΗΣ, ΕΠΟΜΕÎΩΣ ΟΙ ΑÎΩΘΙ ΠΕΡΙΟΡΙΣΜΟΙ ΕΥΘΥÎΗΣ Ή ΑΠΟΚΛΕΙΣΜΟΙ ΕÎΔΕΧΟΜΕÎΩΣ ÎΑ ΜΗΠΑΦΟΡΟΥΠΕΣΑΣ. ΣΕ ΑΥΤΗΠΤΗΠΠΕΡΙΠΤΩΣΗ, Η ΕΥΘΥÎΗ ΤΗΣ NOKIA ΠΕΡΙΟΡΙΖΕΤΑΙ ΣΤΟ ΜΕΓΙΣΤΟ ΕΠΙΤΡΕΠΟΜΕÎΟ ΑΠΟ ΤΟΠÎΟΜΟ ΒΑΘΜΟ.</p>
+
+<p></p>
+
+<p>Κανένας ÏŒÏος που πεÏιέχεται στην παÏοÏσα δεν θα θίξει τα κατοχυÏωμένα δικαιώματα κανενός άλλου συμβαλλόμενου μέÏους το οποίο αντιμετωπίζεται ως καταναλωτής. Κανένας ÏŒÏος που πεÏιέχεται στην παÏοÏσα δεν πεÏιοÏίζει την ευθÏνη της Nokia σε πεÏίπτωση θανάτου ή Ï€ÏÎ¿ÏƒÏ‰Ï€Î¹ÎºÎ¿Ï Ï„ÏÎ±Ï…Î¼Î±Ï„Î¹ÏƒÎ¼Î¿Ï Ï€Î¿Ï… Ï€ÏοκÏπτει από αμέλεια της Nokia.</p>
+
+<p></p>
+
+<h1>7. ΠΟΛΙΤΙΚΗ ΠΕΡΙ ΙΣΧΥΡΙΣΜΟΥ ΑÎΤΙΠΟΙΗΣΗΣ ΔΙΚΑΙΩΜΑΤΩΠΠÎΕΥΜΑΤΙΚΗΣ ΙΔΙΟΚΤΗΣΙΑΣ</h1>
+
+<p></p>
+
+<p>Εάν θωÏείτε ότι το κατοχυÏωμένο σας έÏγο χÏησιμοποιείται με Ï„Ïόπο που αντιβαίνει τους νόμους πεÏί πνευματικής ιδιοκτησίας, μποÏείτε να ενημεÏώσετε τη Nokia παÏέχοντας ειδοποίηση που θα πεÏιλαμβάνει τα παÏακάτω:</p>
+
+<p></p>
+
+<p>(1) Μια φυσική ή ψηφιακή υπογÏαφή ενός ανθÏώπου που εξουσιοδοτείται να ενεÏγεί εκ μέÏους του ιδιοκτήτη του Î±Ï€Î¿ÎºÎ»ÎµÎ¹ÏƒÏ„Î¹ÎºÎ¿Ï Î´Î¹ÎºÎ±Î¹ÏŽÎ¼Î±Ï„Î¿Ï‚ που, κατ'ισχυÏισμόν, παÏαβιάζεται,</p>
+
+<p></p>
+
+<p>(2) ΟÏισμό ή πεÏιγÏαφή του κατοχυÏωμένου έÏγου που, κατ'ισχυÏισμόν, παÏαβιάζεται,</p>
+
+<p></p>
+
+<p>(3) ΟÏισμό ή πεÏιγÏαφή του Ï…Î»Î¹ÎºÎ¿Ï Ï€Î¿Ï…, κατ'ισχυÏισμόν, παÏαβιάζεται καθώς και επαÏκείς πληÏοφοÏίες για τον εντοπισμό του υλικοÏ,</p>
+
+<p></p>
+
+<p>(4) Το όνομα, τον τηλεφωνικό αÏιθμό, την ταχυδÏομική και ηλεκτÏονική διεÏθυνση και κάθε άλλη πληÏοφοÏία η οποία θα επιτÏέψει στη Nokia να επικοινωνήσει μαζί σας,</p>
+
+<p></p>
+
+<p>(5) Μια δήλωση καλής πίστης σÏμφωνα με την οποία η χÏήση του Ï…Î»Î¹ÎºÎ¿Ï Î¼Îµ ανεπιθÏμητο Ï„Ïόπο δεν πιστοποιείται από τον κάτοχο των πνευματικών δικαιωμάτων, τον εκπÏόσωπό του ή τον νόμο καθώς και</p>
+
+<p></p>
+
+<p>(6) Μια δήλωση ότι οι πληÏοφοÏίες στην ειδοποίηση είναι ακÏιβείς και, δυνάμει της ποινής για ψευδείς δηλώσεις, ότι είστε εξουσιοδοτημένος να ενεÏγείτε εκ μέÏους του ιδιοκτήτη των αποκλειστικών δικαιωμάτων που, κατ'ισχυÏισμόν, παÏαβιάζονται.</p>
+
+<p></p>
+
+<p>Η ειδοποίηση Ï€Ïέπει να αποσταλεί στην διεÏθυνση του Î‘Ï€Î¿ÎºÎ»ÎµÎ¹ÏƒÏ„Î¹ÎºÎ¿Ï Ï†Î¿Ïέα μας στο:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. ΕΦΑΡΜΟΣΤΕΟ ΔΙΚΑΙΟ</h1>
+
+<p></p>
+
+<p>Ο ÏŒÏος "Nokia", όπως χÏησιμοποιείται στους παÏόντες ÏŒÏους και Ï€Ïοϋποθέσεις, σημαίνει Nokia Corporation. Η Nokia παÏέχει και ελέγχει την ΥπηÏεσία από τοποθεσίες εντός της Φινλανδίας. Ως εκ τοÏτου, οι πληÏοφοÏίες που πεÏιέχονται στην παÏοÏσα και αφοÏοÏν την ΥπηÏεσία θεωÏείται ότι παÏέχονται στη Φινλανδία.</p>
+
+<p></p>
+
+<p>Πνευματική Iδιoκτησία © Nokia Corporation 2004. Με την επιφÏλαξη παντός δικαιώματος.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/57/internetradio_57.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "ש×ל תמיד"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "נשמרו %N תחנות"
+#define qtn_ir_added_single "%U[90] נשמרו"
+#define qtn_ir_addmanually_unnamed "×œ×œ× ×©×"
+#define qtn_ir_addst_description "תי×ור"
+#define qtn_ir_addst_streamurl "כתובת URL של זרימה"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "רדיו ×ינטרנט"
+#define qtn_ir_ai_radio_not_active "הרדיו ×ינו פעיל"
+#define qtn_ir_app_general_err "שגי××” פנימית. הפעל ×ת ×”×™×™×©×•× ×ž×—×“×©."
+#define qtn_ir_apps_grid "רדיו ×ינטרנט"
+#define qtn_ir_apps_list "רדיו ×ינטרנט"
+#define qtn_ir_apps_skey "רדיו ×ינטרנט"
+#define qtn_ir_apps_standby "רדיו ×ינטרנט"
+#define qtn_ir_apps_swins "רדיו ×ינטרנט"
+#define qtn_ir_apps_wheel "רדיו ×ינטרנט"
+#define qtn_ir_bitrate_best "×יכות מיטבית"
+#define qtn_ir_bitrate_high "×יכות גבוהה"
+#define qtn_ir_bitrate_standard "×יכות רגילה"
+#define qtn_ir_cost_heading "הודעה חשובה"
+#define qtn_ir_cost_softkey_continue "המשך"
+#define qtn_ir_cost_softkey_exit "יצי××”"
+#define qtn_ir_cost_title "רדיו ×ינטרנט"
+#define qtn_ir_cost_warning "רדיו ×ינטרנט משתמש בחיבור ×”× ×ª×•× ×™× ×©×œ הטלפון לשידורי רדיו. ×”×פשרות מומלצת רק ×× ×™×© לך תוכנית חיוב קבועה. ×× ×ינך בטוח ×‘×¡×›×•× ×”×—×™×•×‘ על הנתוני×, בדוק ×צל המפעיל לפני שתמשיך."
+#define qtn_ir_country_list_expanded "%N תחנות"
+#define qtn_ir_countryregion_title "מדינות/×זורי×"
+#define qtn_ir_discover_beststations "מבחר של התחנות הטובות ביותר"
+#define qtn_ir_discover_country_region "עיון לפי מדינה/×זור"
+#define qtn_ir_discover_genre "עיון לפי סגנון"
+#define qtn_ir_discover_genre_expanded "תחנות ממוינות לפי סגנון"
+#define qtn_ir_discover_langauge "עיון לפי שפה"
+#define qtn_ir_discover_language_expanded "תחנות ממוינות לפי שפה"
+#define qtn_ir_discover_staticountryreg "התחנות ממוינות לפי מדינה/×זור"
+#define qtn_ir_discover_title "מדריך תחנות"
+#define qtn_ir_discover_top "תחנות מובילות"
+#define qtn_ir_edit_title "עריכת תחנה"
+#define qtn_ir_err_operation "שגי××” בהפעלה. נסה שוב."
+#define qtn_ir_err_url_unavail "כתובת URL ×œ× ×–×ž×™× ×”"
+#define qtn_ir_error_address "כתובת שגויה של תחנת רדיו ×ינטרנט"
+#define qtn_ir_error_connection "פג תוקף החיבור. נסה שוב."
+#define qtn_ir_error_favourites "×ין די ×ž×§×•× ×‘×ž×•×¢×“×¤×™× ×œ×©×ž×™×¨×ª הבחירה"
+#define qtn_ir_error_general "×œ× × ×™×ª×Ÿ להתחבר לתחנה"
+#define qtn_ir_error_isds_unavailable "השירות של מדריך תחנות ×”×ינטרנט ×ינו זמין ב×ופן זמני"
+#define qtn_ir_error_notavailable "×ין קישורי זרימה זמיני×"
+#define qtn_ir_error_notinisds "הפריט ×ינו זמין עוד"
+#define qtn_ir_error_search "הזן מונח לחיפוש"
+#define qtn_ir_findst_addstation "הוספה ידנית של תחנה"
+#define qtn_ir_findst_addtofav "הוסף ×ת התחנה למועדפי×"
+#define qtn_ir_findst_browsesds "עיון במדריך התחנות"
+#define qtn_ir_findst_search_ensrhterm "הזן מונח לחיפוש"
+#define qtn_ir_findst_softkey_search "חיפוש"
+#define qtn_ir_findstation_title "חיפוש תחנות"
+#define qtn_ir_firstuse_title "רדיו ×ינטרנ': ברוך הב×"
+#define qtn_ir_genre_list_expanded "%N תחנות"
+#define qtn_ir_genre_title "סגנונות"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "×ין היסטוריה"
+#define qtn_ir_homescreen_buffering "מבצע ×גירה"
+#define qtn_ir_homescreen_lastplayed "הושמע ל×חרונה"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "מדינה/×זור:"
+#define qtn_ir_info_details_description "תי×ור:"
+#define qtn_ir_info_details_genre "סגנונות:"
+#define qtn_ir_info_details_language "שפה:"
+#define qtn_ir_info_details_name "ש×:"
+#define qtn_ir_info_details_streams "זרימות:"
+#define qtn_ir_info_details_title "פרטי תחנה"
+#define qtn_ir_info_details_type "סוג:"
+#define qtn_ir_info_details_type_isds "מד' תחנות"
+#define qtn_ir_info_details_type_manual "מוג' משת'"
+#define qtn_ir_info_details_unnamed "×œ×œ× ×©×"
+#define qtn_ir_info_softkey_close "סגירה"
+#define qtn_ir_language_list_expanded "%N תחנות"
+#define qtn_ir_language_title "שפות"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "טוען"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "מחפש"
+#define qtn_ir_main_descriptive_text "השתמש ב'חיפוש תחנות' בסרגל ×”×›×œ×™× ×œ×”×•×¡×¤×ª תחנות"
+#define qtn_ir_main_discover_expanded "גלה תחנות רדיו חדשות"
+#define qtn_ir_main_last "הושמעה ל×חרונה"
+#define qtn_ir_main_now "מושמע כעת"
+#define qtn_ir_main_prog_deleting "מוחק ×ת %N"
+#define qtn_ir_main_searchindir "חיפוש במדריך"
+#define qtn_ir_main_title "רדיו ×ינטרנט"
+#define qtn_ir_main_unnamed_station "תחנה ×œ×œ× ×©×"
+#define qtn_ir_memlo_ram_out_of_mem "×ין מספיק זיכרון לביצוע הפעולה. מחק חלק ×ž×”× ×ª×•× ×™× ×ª×—×™×œ×”."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "התחנה הב××”"
+#define qtn_ir_now_tooltip_play "השמעה"
+#define qtn_ir_now_tooltip_previous "תחנה קודמת"
+#define qtn_ir_now_tooltip_stop "עצירה"
+#define qtn_ir_now_wait_buffering "מבצע ×גירה"
+#define qtn_ir_now_wait_buffering_perc "מתבצעת ×גירה %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "×ין חיבור לרשת"
+#define qtn_ir_nwcontroller_err_nosnaps "×œ× ×”×•×’×“×¨×” נקודת גישה"
+#define qtn_ir_options_add "הוספה למועדפי×"
+#define qtn_ir_options_add_manually "הוספה ידנית של תחנה"
+#define qtn_ir_options_change "שינוי"
+#define qtn_ir_options_clearhistory "מחיקת היסטוריה"
+#define qtn_ir_options_editstation "עריכת תחנה"
+#define qtn_ir_options_equalizer "×קולייזר"
+#define qtn_ir_options_exit "יצי××”"
+#define qtn_ir_options_findnmusicstore "חיפוש בחנות המוסיקה"
+#define qtn_ir_options_fmtrans "משדר FM"
+#define qtn_ir_options_gotomusicstore "מעבר ×ל חנות המוסיקה"
+#define qtn_ir_options_help "עזרה"
+#define qtn_ir_options_history "היסטוריה"
+#define qtn_ir_options_info "מידע ×ודות תחנה"
+#define qtn_ir_options_mainview "מעבר ×ל התצוגה הר×שית"
+#define qtn_ir_options_mark "סימון"
+#define qtn_ir_options_markall "סימון הכל"
+#define qtn_ir_options_markunmark "סימון/ביטול סימון"
+#define qtn_ir_options_now "מעבר ×ל 'מושמע כעת'"
+#define qtn_ir_options_off "מופסקת"
+#define qtn_ir_options_on "מופעלת"
+#define qtn_ir_options_searchag "חיפוש חוזר"
+#define qtn_ir_options_select "בחירה"
+#define qtn_ir_options_settings "הגדרות"
+#define qtn_ir_options_station "תחנה"
+#define qtn_ir_options_stereowidening "הרחבת סטרי×ו"
+#define qtn_ir_options_unmark "הסרת סימון"
+#define qtn_ir_options_unmarkall "ביטול כל סימון"
+#define qtn_ir_playfail_err "כשל בהשמעת רדיו"
+#define qtn_ir_playlist_title "קישו' שהתקבלו"
+#define qtn_ir_popup_no_results "×œ× × ×ž×¦×ו תוצ×ות"
+#define qtn_ir_popup_toomany_results "נמצ×ו יותר מדי תוצ×ות. חדד ×ת מונח החיפוש."
+#define qtn_ir_results_none "×œ× × ×ž×¦×ו תחנות תו×מות. בצע חיפוש נוסף."
+#define qtn_ir_search_result "%0U[10]: תוצ××” %1N"
+#define qtn_ir_search_results "%0U[09]:%1N תוצ×ות"
+#define qtn_ir_set_folder_internetradio "רדיו ×ינטרנט"
+#define qtn_ir_set_folder_irradio "רדיו ×ינטרנט"
+#define qtn_ir_settings_3g "קצב סיביות של חיבור 3G"
+#define qtn_ir_settings_connec_softkey_ok "×ישור"
+#define qtn_ir_settings_gprs "קצב סיביות של חיבור GPRS"
+#define qtn_ir_settings_network "חיבור רשת"
+#define qtn_ir_settings_snap_default "חיבור ברירת מחדל"
+#define qtn_ir_settings_title "הגדרות"
+#define qtn_ir_settings_wifi "קצב סיביות של חיבור Wi-Fi"
+#define qtn_ir_softkey_back "חזרה"
+#define qtn_ir_softkey_cancel "ביטול"
+#define qtn_ir_softkey_done "בוצע"
+#define qtn_ir_softkey_no "ל×"
+#define qtn_ir_softkey_options "×פשרויות"
+#define qtn_ir_softkey_select "בחירה"
+#define qtn_ir_softkey_yes "כן"
+#define qtn_ir_station_saved "התחנה נשמרה"
+#define qtn_ir_stationlist_nomatches "(×ין הת×מות)"
+#define qtn_ir_stations_popup_delete "למחוק ×ת\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "למחוק %N תחנות?"
+#define qtn_ir_stations_popup_removed "התחנה %U[73] נמחקה"
+#define qtn_ir_stations_popup_removed_many "נמחקו %N תחנות"
+#define qtn_ir_stations_popup_save "לשמור תחנה ב'מועדפי×'?"
+#define qtn_ir_suboptions_delete "מחיקה"
+#define qtn_ir_suboptions_details "פרטי×"
+#define qtn_ir_suboptions_move "העברה"
+#define qtn_ir_terms_details "ל×חר ×©×ª×¡×›×™× ×œ×ª× ××™× ×•×œ×”×ª× ×™×•×ª שלהלן, תיכנס לחוזה לפי המידה המותרת בחוק, ×œ×œ× ×›×œ הגבלה ×ו ×יסור × ×•×¡×¤×™× ×ž×‘×—×™× ×ª כל הזכויות המהותיות"
+#define qtn_ir_terms_heading "תנ××™× ×•×”×ª× ×™×•×ª"
+#define qtn_ir_terms_softkey_accept "×ישור"
+#define qtn_ir_terms_softkey_decline "סירוב"
+#define qtn_ir_title_history "היסטוריה"
+#define qtn_ir_tooltip_addalltofav "הוספת הכל למועדפי×"
+#define qtn_ir_tooltip_addstation "הוספה ידנית של תחנה"
+#define qtn_ir_tooltip_addtofav "הוספה למועדפי×"
+#define qtn_ir_tooltip_copy "העתקה"
+#define qtn_ir_tooltip_findnstore "חיפוש בחנות המוסיקה"
+#define qtn_ir_tooltip_findst "חיפוש תחנות"
+#define qtn_ir_tooltip_history "היסטוריה"
+#define qtn_ir_tooltip_listen "×”××–× ×”"
+#define qtn_ir_tooltip_paste "הדבקה"
+#define qtn_ir_tooltip_stationde "פרטי תחנה"
+#define qtn_ir_top_title "תחנות מובילות"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "ש×"
+#define qtn_ir_url_title "הוספת תחנה"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/57/internetradioai_57.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "רדיו ×ינטרנט">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/57/terms_57.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>שירות רדיו ×ינטרנט (להלן "השירות") מ×פשר לך לגלות ולחוות ×ת התוכן של תחנות רדיו ×ינטרנט. בהחלטתך להשתמש בשירות ×תה מ×שר שקר×ת ×”×¡×›× ×–×”, הבנת ×ותו ו×תה ×ž×¡×›×™× ×œ×”×ª×—×™×™×‘ לתנ×יו. ×× ×ינך מ×שר, ×©×™× ×œ×‘ לכך ש×ינך מורשה להשתמש בשירות.</p>
+
+<p></p>
+
+<h1>1. הגדרות</h1>
+
+<p></p>
+
+<p>תחנות רדיו ×ינטרנט הן ישויות, שבדרך כלל מייצרות ומפיצות תוכני שמע ומטה-× ×ª×•× ×™× ×”×§×©×•×¨×™× ×‘×–×¨×™×ž×” דרך ×”×ינטרנט.</p>
+
+<p></p>
+
+<p>הקישור לתחנת רדיו ×ינטרנט ×”×•× ×ž×תר מש×בי×, ×ו קבוצה של מ×תרי מש×בי×, שמ××¤×©×¨×™× ×œ×ž×©×ª×ž×© לגשת לתוכן ×©×ž×•×–×¨× ×¢×œ ידי תחנת רדיו ×”×ינטרנט.</p>
+
+<p></p>
+
+<h1>2. השירות</h1>
+
+<p></p>
+
+<p>השירות מ×פשר:</p>
+<p>1. גלישה ×œ×§×™×©×•×¨×™× ×ל תחנות רדיו ×ינטרנט;</p>
+<p>2. גישה לתוכן של תחנות רדיו ×ינטרנט;</p>
+
+<p></p>
+
+<h1>3. שימוש בשירות</h1>
+
+<p></p>
+
+<p>השימוש בשירות ×–×” מותר ×œ×¦×¨×›×™× ×¤×¨×˜×™×™× ×‘×œ×‘×“, ש××™× × ×ž×¡×—×¨×™×™×. כל זכויות הקניין הרוחני בשירות ולשירות הן בבעלות Nokia.</p>
+
+<p></p>
+
+<p>Nokia שומרת לעצמה ×ת הזכות לשנות תנ××™× ×לה, ותיידע ×ותך על שינוי ×›×–×”.</p>
+
+<p></p>
+
+<h1>4. פרטיות</h1>
+
+<p></p>
+
+<p>Nokia מחויבת להגן על פרטיות ×”×ž×©×ª×ž×©×™× ×¢×œ ידי ×™×™×©×•× ×ž×“×™× ×™×•×ª חיסיון קפדנית.</p>
+
+<p></p>
+
+<p>כדי לנטר ×ת השימוש בשירות ולשפר ×ותו, עשויה Nokia ל×סוף נתוני שימוש, לרבות (×ך ×œ× ×¨×§) מידע על ×ודות תחנות רדיו ×”×ינטרנט שניגשו ×ליהן, הזמן שהוקדש לכל תחנה ×•×”×¤×¨×™×˜×™× ×©×“×•×¨×’×• כמועדפי×.</p>
+
+<p></p>
+
+<p>Nokia ××™× ×” ×וספת כל מידע שמ×פשר זיהוי של המשתמש בשירות.</p>
+
+<p></p>
+
+<h1>5. זמינות השירות</h1>
+
+<p></p>
+
+<p>השירות מוצע לנוחותך. ×”×•× ×ž×•×¦×¢ "כפי שהו×" (as is), ו"כפי ×©×”×•× ×–×ž×™×Ÿ" (as available). Nokia ××™× ×” מבטיחה שפעולת השירות ×œ× ×ª×•×¤×¨×¢, ×ו שתהיה חופשייה משגי×ות. Nokia שומרת לעצמה ×ת הזכות לשנות ×ת השירות ×ו לבטל ×ת הגישה ×ליו בכל עת.</p>
+
+<p></p>
+
+<p>Nokia עשויה לספק ×©×“×¨×•×’×™× ×œ×™×™×©×•×ž×™ תוכנה ×”×§×©×•×¨×™× ×œ×©×™×¨×•×ª על פי שיקול דעתה הבלעדי.</p>
+
+<p></p>
+
+<h1>6. כתב ויתור ו×חריות</h1>
+
+<p></p>
+
+<p>לנגישות קלה, Nokia עשויה לכלול ×§×™×©×•×¨×™× ×œ×ª×—× ×•×ª רדיו ×ינטרנט שנמצ×ות בבעלות צד-שלישי ×ו מופעלות על ידו. Nokia ××™× ×” ×חר×ית לכך ×©×”×§×™×©×•×¨×™× ×œ×ª×—× ×•×ª רדיו ×ינטרנט יהיו פעילי×. כמו כן, ×”×ª×›× ×™× ×©××™× × ×§×©×•×¨×™× ×œ-Nokia ××™× × ×ž×¨×ž×–×™× ×‘×©×•× ×“×¨×š ש-Nokia מעודדת ×ª×›× ×™× ×לה כשלעצמ×, ×ו ×ת המוצרי×/×”×©×™×¨×•×ª×™× ×©××œ×™×”× ×”× ×ž×ª×™×™×—×¡×™×.</p>
+
+<p></p>
+
+<p>עליך לסקור ×ת כללי השימוש של כל תחנה ול×שר ××•×ª× (×× ×§×™×™×ž×™×) לפני הגישה ×ליה. כמו כן, ×תה מ×שר של-Nokia ×ין ×©×•× ×‘×§×¨×” על ×”×ª×›× ×™× ×©×œ שירותי צד-שלישי וש-Nokia ××™× ×” יכולה לש×ת בכל ×חריות ×œ×ª×›× ×™× ×©×ž×•×¦×¢×™× ×¢×œ ידי תחנות רדיו ×ינטרנט.</p>
+
+<p></p>
+
+<p>גישה ×œ×ª×›× ×™× ×©×œ תחנות רדיו ×ינטרנט שמשתמשות בשירות עשויה להיות כרוכה בשידור כמויות גדולות של × ×ª×•× ×™× ×“×¨×š הרשת של ספק השירות שלך. למידע על החיוב עבור שידור × ×ª×•× ×™× ×¤× ×” לספק השירות שלך. ×©×™× ×œ×‘ לכך ששימוש בשירות ×¢× ×ª×—× ×•×ª רדיו ×ינטרנט שמשדרות זרימה בקצבי סיביות ×’×‘×•×”×™× ×¢×œ×•×œ להיות כרוך בעלויות גבוהות יותר שמשויכות לתעבורת נתוני×.</p>
+
+<p></p>
+
+<p>תעבורת ×”× ×ª×•× ×™× ×©×ž×©×•×™×›×ª לשימוש בשירות עשויה לכלול לפחות ×ת ×לה: עדכון תוכן ספריית התחנות, נתוני זרימה מתחנת רדיו ×”×ינטרנט, ×יסוף × ×ª×•× ×™× ×¡×˜×˜×™×¡×˜×™×™× ×•×©×“×¨×•×’ ×™×™×©×•× ×¨×“×™×• ×”×ינטרנט.</p>
+
+<p></p>
+
+<p>Nokia ××™× ×” ×חר×ית לעלויות של תעבורת × ×ª×•× ×™× ×©×ž×©×•×™×›×ª לשימוש שלך בשירות</p>
+
+<p></p>
+
+<p>×ין ×חריות מכל סוג שהו×, ב×ופן מפורש ×ו משתמע, לרבות, ×ך ×œ× ×¨×§, ×חריות לבעלות ×ו ל××™-הפרה ×ו ×חריות משתמעת על סחירות ×ו כשירות למטרה מסוימת, בקשר לזמינות, לדיוק, ל×מינות ×ו ×œ×ª×›× ×™× ×©×œ השירות. NOKIA ××™× ×” ×חר×ית לכל × ×–×§×™× ×™×©×™×¨×™×, עקיפי×, מקריי×, ×ž×™×•×—×“×™× ×ו תוצ×תיי×, להפסד ×¨×•×•×—×™× ×ו להפרעה לפעילות עסקית שייגרמו בשל השימוש ×ו בשל העדר היכולת להשתמש בשירות, ×’× ×× NOKIA יודעה על ×”×פשרות ×œ× ×–×§×™× ×›×לה. תחומי שיפוט ×ž×¡×•×™×ž×™× ××™× × ×ž××¤×©×¨×™× ×œ×•×•×ª×¨ על ×חריות ×ו על מגבלות ×חריות מסוימי×, כך שייתכן שהמגבלות ×ו ×”×•×•×™×ª×•×¨×™× ×”×לה ×œ× ×™×—×•×œ×• עליך. ×”×חריות של NOKIA תהיה מוגבלת ×‘×ž×§×¨×™× ×לה ×œ×ž×§×¡×™×ž×•× ×”×ž×•×ª×¨ על פי החוק.</p>
+
+<p></p>
+
+<p>דבר מהנ×מר ×›×ן ×œ× ×™×¤×’×¢ בזכויות המעוגנות בחוק של צד כלשהו, המשמש כצרכן. דבר מהנ×מר ×›×ן ×œ× ×™×’×‘×™×œ ×ת ×”×חריות של Nokia במקרה של מוות ×ו פגיעה גופנית שנגרמה כתוצ××” מרשלנות של Nokia.</p>
+
+<p></p>
+
+<h1>7. מדיניות לגבי טענות על הפרת זכויות יוצרי×</h1>
+
+<p></p>
+
+<p>×× ×תה מ×מין שהעבודה מוגנת זכויות ×”×™×•×¦×¨×™× ×©×œ×š טופלה ב×ופן שהופרו זכויות ×”×™×•×¦×¨×™× ×©×œ×”, תוכל להודיע על כך ל-Nokia ולכלול ×ת המידע הב×:</p>
+
+<p></p>
+
+<p>(1) חתימה פיזית ×ו ×לקטרונית של ××“× ×›×œ×©×”×•, שמורשה לייצג ×ת בעל הזכות הבלעדית שהופרה לכ×ורה;</p>
+
+<p></p>
+
+<p>(2) זיהוי ×ו תי×ור של העבודה מוגנת זכויות היוצרי×, שנטען שזכויותיה הופרו;</p>
+
+<p></p>
+
+<p>(3) זיהוי ×ו תי×ור של החומר שנטען שזכויותיו הופרו, ומידע שמספיק ל×יתור החומר;</p>
+
+<p></p>
+
+<p>(4) שמך, כתובתך, מספר הטלפון שלך, כתובת הדו×ר ×”×לקטרוני שלך וכל מידע ×חר שי×פשר ל-Nokia ליצור עמך קשר;</p>
+
+<p></p>
+
+<p>(5) הצהרה ש×תה מ×מין בתו×-לב שהשימוש בחומר ב×ופן ש×תה מתלונן עליו ×ינו מורשה על ידי בעל זכויות היוצרי×, סוכנו ×ו החוק; וג×</p>
+
+<p></p>
+
+<p>(6) הצהרה שהמידע בהודעה מדויק, ובכפוף ×œ×¢×•× ×©×™× ×”×§×‘×•×¢×™× ×‘×—×•×§ על מתן עדות שקר ×תה מורשה לייצג ×ת ×”×‘×¢×œ×™× ×©×œ זכות בלעדית כלשהי שהופרה לכ×ורה.</p>
+
+<p></p>
+
+<p>יש לשלוח ×ת ההודעה ×ל הנציג הממונה מטעמנו בכתובת:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. החוק החל</h1>
+
+<p></p>
+
+<p>בכל הנוגע לשימוש בתנ××™× ×לה, "Nokia" פירושו Nokia Corporation. Nokia מפעילה ×ת השירות ומפקחת עליו ×ž×ž×™×§×•×ž×™× ×‘×ª×•×š פינלנד. בשל כך, המידע שכלול בשירות נחשב כמסופק בפינלנד.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. כל הזכויות שמורות.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/59/internetradio_59.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Selalu tanya"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stasiun disimpan"
+#define qtn_ir_added_single "%U[87] disimpan"
+#define qtn_ir_addmanually_unnamed "Tanpa nama"
+#define qtn_ir_addst_description "Keterangan"
+#define qtn_ir_addst_streamurl "URL streaming"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio tidak aktif"
+#define qtn_ir_app_general_err "Kesalahan internal. Mulai ulang aplikasi."
+#define qtn_ir_apps_grid "Radio I'net"
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Kualitas terbaik"
+#define qtn_ir_bitrate_high "Kualitas tinggi"
+#define qtn_ir_bitrate_standard "Kualitas standar"
+#define qtn_ir_cost_heading "Pemberitahuan penting"
+#define qtn_ir_cost_softkey_continue "Lanjutkan"
+#define qtn_ir_cost_softkey_exit "Keluar"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet menggunakan sambungan data telepon untuk transmisi radio. Kondisi ini hanya disarankan jika Anda memiliki rencana data biaya tetap. Jika Anda tidak yakin dengan biaya data, hubungi operator sebelum melanjutkan."
+#define qtn_ir_country_list_expanded "%N stasiun"
+#define qtn_ir_countryregion_title "Neg./wilayah"
+#define qtn_ir_discover_beststations "Pilihan stasiun terbaik"
+#define qtn_ir_discover_country_region "Telusur b'dsrkn neg./wlyh"
+#define qtn_ir_discover_genre "Telusur b'dasarkan genre"
+#define qtn_ir_discover_genre_expanded "Stasiun diurut b'dsrkan genre"
+#define qtn_ir_discover_langauge "Telusur b'dsrkan bahasa"
+#define qtn_ir_discover_language_expanded "Stasiun diurut b'dsrkan bhs"
+#define qtn_ir_discover_staticountryreg "Sta. diurut b'dsrkn neg./wlyh"
+#define qtn_ir_discover_title "Dir. stasiun"
+#define qtn_ir_discover_top "Stasiun populer"
+#define qtn_ir_edit_title "Edit stasiun"
+#define qtn_ir_err_operation "Kesalahan saat operasi. Coba lagi."
+#define qtn_ir_err_url_unavail "URL tidak tersedia"
+#define qtn_ir_error_address "Alamat stasiun Radio Internet salah"
+#define qtn_ir_error_connection "Waktu sambungan habis. Coba lagi."
+#define qtn_ir_error_favourites "Kapasitas dalam favorit tidak cukup untuk menyimpan pilihan"
+#define qtn_ir_error_general "Tidak dapat menyambung ke stasiun"
+#define qtn_ir_error_isds_unavailable "Layanan direktori stasiun Internet tidak tersedia untuk sementara waktu"
+#define qtn_ir_error_notavailable "Tidak ada link streaming yang tersedia"
+#define qtn_ir_error_notinisds "Item tidak lagi tersedia"
+#define qtn_ir_error_search "Masukkan istilah pencarian"
+#define qtn_ir_findst_addstation "Tbh stasiun scr manual"
+#define qtn_ir_findst_addtofav "Tbh stasiun Anda ke favorit"
+#define qtn_ir_findst_browsesds "Telusur direktori stasiun"
+#define qtn_ir_findst_search_ensrhterm "Masukkan istilah pencarian"
+#define qtn_ir_findst_softkey_search "Cari"
+#define qtn_ir_findstation_title "Cari stasiun"
+#define qtn_ir_firstuse_title "Radio I'net: Slmt dtg"
+#define qtn_ir_genre_list_expanded "%N stasiun"
+#define qtn_ir_genre_title "Genre"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Tidak ada riwayat"
+#define qtn_ir_homescreen_buffering "Mem-buffer"
+#define qtn_ir_homescreen_lastplayed "Terakhir diputar"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Negara/Wilayah:"
+#define qtn_ir_info_details_description "Keterangan:"
+#define qtn_ir_info_details_genre "Genre:"
+#define qtn_ir_info_details_language "Bahasa:"
+#define qtn_ir_info_details_name "Nama:"
+#define qtn_ir_info_details_streams "Stream:"
+#define qtn_ir_info_details_title "Info stasiun"
+#define qtn_ir_info_details_type "Jenis:"
+#define qtn_ir_info_details_type_isds "Direk. sta."
+#define qtn_ir_info_details_type_manual "Dtnt. p'gn"
+#define qtn_ir_info_details_unnamed "Tnp nm"
+#define qtn_ir_info_softkey_close "Tutup"
+#define qtn_ir_language_list_expanded "%N stasiun"
+#define qtn_ir_language_title "Bahasa"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Memuat"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Mencari"
+#define qtn_ir_main_descriptive_text "Gnkan 'Cari stasiun' dari toolbar utk m'tbh stasiun"
+#define qtn_ir_main_discover_expanded "Temukan stasiun radio baru"
+#define qtn_ir_main_last "Terakhir diputar"
+#define qtn_ir_main_now "Sekarang diputar"
+#define qtn_ir_main_prog_deleting "Menghapus %N"
+#define qtn_ir_main_searchindir "Cari dalam direktori"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Stasiun tnp nm"
+#define qtn_ir_memlo_ram_out_of_mem "Memori tidak cukup untuk menjalankan pengoperasian. Hapus dulu sebagian data."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Stasiun berikutnya"
+#define qtn_ir_now_tooltip_play "Putar"
+#define qtn_ir_now_tooltip_previous "Stasiun sebelumnya"
+#define qtn_ir_now_tooltip_stop "Berhenti"
+#define qtn_ir_now_wait_buffering "Mem-buffer"
+#define qtn_ir_now_wait_buffering_perc "Mem-buffer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Tidak ada sambungan jaringan"
+#define qtn_ir_nwcontroller_err_nosnaps "Tidak ada jalur akses yang ditentukan"
+#define qtn_ir_options_add "Tambahkan ke Favorit"
+#define qtn_ir_options_add_manually "Tbh stasiun scr manual"
+#define qtn_ir_options_change "Ubah"
+#define qtn_ir_options_clearhistory "Hapus riwayat"
+#define qtn_ir_options_editstation "Edit stasiun"
+#define qtn_ir_options_equalizer "Ekualiser"
+#define qtn_ir_options_exit "Keluar"
+#define qtn_ir_options_findnmusicstore "Cari dalam Music store"
+#define qtn_ir_options_fmtrans "Pemancar FM"
+#define qtn_ir_options_gotomusicstore "Ke Music store"
+#define qtn_ir_options_help "Petunjuk"
+#define qtn_ir_options_history "Riwayat"
+#define qtn_ir_options_info "Informasi stasiun"
+#define qtn_ir_options_mainview "Ke tampilan utama"
+#define qtn_ir_options_mark "Tandai"
+#define qtn_ir_options_markall "Tandai semua"
+#define qtn_ir_options_markunmark "Tandai/Hapus tanda"
+#define qtn_ir_options_now "Ke Sekarang diputar"
+#define qtn_ir_options_off "Tidak aktif"
+#define qtn_ir_options_on "Aktif"
+#define qtn_ir_options_searchag "Cari lagi"
+#define qtn_ir_options_select "Pilih"
+#define qtn_ir_options_settings "Pengaturan"
+#define qtn_ir_options_station "Stasiun"
+#define qtn_ir_options_stereowidening "Pelebaran stereo"
+#define qtn_ir_options_unmark "Hapus tanda"
+#define qtn_ir_options_unmarkall "Hapus semua tanda"
+#define qtn_ir_playfail_err "Pemutaran radio gagal"
+#define qtn_ir_playlist_title "Link diterima"
+#define qtn_ir_popup_no_results "Tidak ada hasil yang ditemukan"
+#define qtn_ir_popup_toomany_results "Terlalu banyak hasil. Persempit istilah pencarian Anda."
+#define qtn_ir_results_none "Tidak ada stasiun yang cocok ditemukan. Cari lagi."
+#define qtn_ir_search_result "%0U[12]:%1N hasil"
+#define qtn_ir_search_results "%0U[11]:%1N hasil"
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Kecepatan bit samb. 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Kecepatan bit samb. GPRS"
+#define qtn_ir_settings_network "Sambungan jaringan"
+#define qtn_ir_settings_snap_default "Sambungan default"
+#define qtn_ir_settings_title "Pengaturan"
+#define qtn_ir_settings_wifi "Kecepatan bit samb. Wi-Fi"
+#define qtn_ir_softkey_back "Kembali"
+#define qtn_ir_softkey_cancel "Batal"
+#define qtn_ir_softkey_done "Selesai"
+#define qtn_ir_softkey_no "Tidak"
+#define qtn_ir_softkey_options "Pilihan"
+#define qtn_ir_softkey_select "Pilih"
+#define qtn_ir_softkey_yes "Ya"
+#define qtn_ir_station_saved "Stasiun disimpan"
+#define qtn_ir_stationlist_nomatches "(tidak ada yang cocok)"
+#define qtn_ir_stations_popup_delete "Hapus\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Hapus %N stasiun?"
+#define qtn_ir_stations_popup_removed "%U[88] dihapus"
+#define qtn_ir_stations_popup_removed_many "%N stasiun dihapus"
+#define qtn_ir_stations_popup_save "Simpan stasiun ke favorit?"
+#define qtn_ir_suboptions_delete "Hapus"
+#define qtn_ir_suboptions_details "Rincian"
+#define qtn_ir_suboptions_move "Pindah"
+#define qtn_ir_terms_details "Dengan menyetujui Persyaratan dan Ketentuan di bawah ini, Anda terikat dalam kontrak selama diizinkan oleh undang-undang yang berlaku dan tidak dibatasi atau dilarang lebih lanjut, terkait dengan semua hak utama"
+#define qtn_ir_terms_heading "P'syaratan dan Ketentuan"
+#define qtn_ir_terms_softkey_accept "Terima"
+#define qtn_ir_terms_softkey_decline "Tolak"
+#define qtn_ir_title_history "Riwayat"
+#define qtn_ir_tooltip_addalltofav "Tbhkan sm. ke favorit"
+#define qtn_ir_tooltip_addstation "Tbh sta. scr manual"
+#define qtn_ir_tooltip_addtofav "Tbhkan ke favorit"
+#define qtn_ir_tooltip_copy "Salin"
+#define qtn_ir_tooltip_findnstore "Cari dalam Music store"
+#define qtn_ir_tooltip_findst "Cari stasiun"
+#define qtn_ir_tooltip_history "Riwayat"
+#define qtn_ir_tooltip_listen "Dengar"
+#define qtn_ir_tooltip_paste "Tempel"
+#define qtn_ir_tooltip_stationde "Rincian stasiun"
+#define qtn_ir_top_title "Sta. populer"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nama"
+#define qtn_ir_url_title "Tbh stasiun"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/59/internetradioai_59.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/59/terms_59.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Layanan Radio Internet Nokia (“Layananâ€) memungkinkan Anda untuk menemukan dan mendengarkan konten program stasiun radio internet. ANDA SETUJU BAHWA DENGAN MENGGUNAKAN LAYANAN INI ANDA MENGAKUI BAHWA ANDA TELAH MEMBACA PERJANJIAN INI, MEMAHAMINYA DAN BERSEDIA TERIKAT OLEH SYARAT DAN KETENTUANNYA. Jika Anda tidak setuju, maka harap diperhatikan bahwa Anda tidak boleh menggunakan Layanan ini.</p>
+
+<p></p>
+
+<h1>1. KETENTUAN</h1>
+
+<p></p>
+
+<p>Stasiun radio internet artinya entitas yang secara umum menghasilkan dan mendistribusikan konten audio dan metadata terkait melalui internet dalam suatu pengaliran.</p>
+
+<p></p>
+
+<p>Link ke stasiun radio internet artinya bahwa pencari sumber daya atau seperangkat pencari sumberdaya yang memungkinkan pengguna untuk mengakses konten yang dialirkan oleh stasiun radio internet.</p>
+
+<p></p>
+
+<h1>2. LAYANAN</h1>
+
+<p></p>
+
+<p>Layanan memfungsikan yang berikut ini:</p>
+<p>1. link untuk browsing ke stasiun radio internet;</p>
+<p>2. mengakses konten stasiun radio internet;</p>
+
+<p></p>
+
+<h1>3. PENGGUNAAN LAYANAN</h1>
+
+<p></p>
+
+<p>Penggunaan Layanan diizinkan hanya untuk penggunaan Anda secara pribadi dan tidak komersial. Nokia akan memiliki semua hak kekayaan intelektual dalam dan pada Layanan.</p>
+
+<p></p>
+
+<p>Nokia berhak untuk mengubah syarat dan ketentuan ini dengan memberitahukan perubahan tersebut kepada Anda.</p>
+
+<p></p>
+
+<h1>4. PRIVASI</h1>
+
+<p></p>
+
+<p>Nokia memberikan komitmen untuk melindungi privasi pengguna dengan menerapkan kebijakan kerahasiaan yang ketat.</p>
+
+<p></p>
+
+<p>Agar dapat memantau penggunaan dan memperbaiki Layanan, Nokia dapat mengumpulkan data penggunaan, termasuk namun tidak terbatas pada informasi tentang stasiun radio internet yang diakses, waktu yang diluangkan pada masing-masing stasiun dan hal-hal yang diperingkatkan sebagai item favorit.</p>
+
+<p></p>
+
+<p>Nokia tidak mengumpulkan informasi apa pun yang dapat mengidentifikasi pengguna Layanan.</p>
+
+<p></p>
+
+<h1>5. KETERSEDIAAN LAYANAN</h1>
+
+<p></p>
+
+<p>Layanan ini tersedia untuk kenyamanan Anda. Layanan ini tersedia “apa adanya†dan berdasarkan “sebagaimana tersediaâ€. Nokia tidak memberikan jaminan bahwa Layanan akan bebas gangguan atau kesalahan. Nokia berhak mengubah Layanan atau meniadakan akses ke Layanan setiap saat.</p>
+
+<p></p>
+
+<p>Nokia dapat menyediakan peningkatan untuk aplikasi perangkat lunak terkait Layanan sesuai kebijaksanaannya sendiri.</p>
+
+<p></p>
+
+<h1>6. PELEPASAN HAK DAN KEWAJIBAN HUKUM</h1>
+
+<p></p>
+
+<p>Untuk kemudahan aksesibilitas bagi Anda, Nokia dapat menyertakan link ke stasiun radio internet yang dimiliki atau dioperasikan oleh pihak ketiga. Nokia tidak menjamin bahwa link ke stasiun radio internet itu akan beroperasi. Selain itu, konten yang tidak terkait ke Nokia, tidak menyiratkan apa pun bahwasanya Nokia menyokong konten tersebut, atau produk atau layanan yang dirujuk dalam konten tersebut.</p>
+
+<p></p>
+
+<p>Anda harus meninjau ulang dan menyetujui peraturan penggunaan dari masing-masing stasiun, sebelum mengaksesnya.  Anda juga setuju bahwa Nokia tidak memiliki kendali atas konten layanan pihak ketiga dan tidak dapat mengemban tanggung jawab apa pun untuk konten yang disediakan oleh stasiun radio internet.</p>
+
+<p></p>
+
+<p>Mengakses konten stasiun radio internet dengan menggunakan Layanan dapat mencakup pengiriman data dalam jumlah besar melalui jaringan penyedia layanan Anda. Hubungi penyedia layanan Anda untuk memperoleh informasi tentang biaya transmisi data. Harap diperhatikan, bahwa menggunakan Layanan dengan stasiun radio internet yang menghantarkan aliran bitrate yang lebih tinggi kepada Anda dapat menimbulkan biaya yang lebih tinggi, yang terkait dengan lalu lintas data.</p>
+
+<p></p>
+
+<p>Lalu lintas data yang terkait dengan penggunaan Layanan dapat mencakup sekurangnya hal berikut ini: memperbarui konten direktori stasiun, pengaliran data dari stasiun radio internet, pengumpulan data statistik dan peningkatan aplikasi radio internet.</p>
+
+<p></p>
+
+<p>Nokia tidak bertanggung jawab atas biaya lalu lintas data yang terkait dengan penggunaan Anda atas Layanan.</p>
+
+<p></p>
+
+<p>TIDAK ADA JAMINAN JENIS APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN HAK ATAU NON-PELANGGARAN ATAU JAMINAN TERSIRAT ATAS KELAYAKAN BARANG DAGANG ATAU KESELARASAN UNTUK TUJUAN TERTENTU YANG DIBUAT SEHUBUNGAN DENGAN KETERSEDIAAN, KEAKURATAN, KEANDALAN ATAU KONTEN LAYANAN. NOKIA TIDAK BERTANGGUNG JAWAB ATAS KERUSAKAN LANGSUNG, TIDAK LANGSUNG, INSIDENTAL, KHUSUS ATAU KONSEKUENSIAL, HILANGNYA LABA ATAU GANGGUAN BISNIS YANG DITIMBULKAN DARI PENGGUNAAN ATAU TIDAK DAPAT DIGUNAKANNYA LAYANAN, MESKIPUN NOKIA SUDAH DIBERITAHU MENGENAI KEMUNGKINAN KERUSAKAN TERSEBUT. BEBERAPA JURISDIKSI TIDAK MENGIZINKAN PENGECUALIAN JAMINAN TERTENTU ATAU PEMBATASAN TANGGUNG JAWAB, SEHINGGA PEMBATASAN ATAU PENGECUALIAN DI ATAS MUNGKIN TIDAK BERLAKU BAGI ANDA.  KEWAJIBAN NOKIA DALAM KASUS TERSEBUT AKAN SEBATAS YANG DIIZINKAN SEPENUH-PENUHNYA OLEH HUKUM.</p>
+
+<p></p>
+
+<p>Tidak ada satu ketentuan pun di dalam perjanjian ini yang mengurangi hak sah pihak manapun yang bertindak sebagai konsumen. Tidak ada satu ketentuan pun di dalam perjanjian ini yang membatasi kewajiban Nokia dalam hal terjadinya kematian atau cedera perorangan yang diakibatkan dari kelalaian Nokia.</p>
+
+<p></p>
+
+<h1>7. KEBIJAKAN MENGENAI DUGAAN PELANGGARAN HAK CIPTA</h1>
+
+<p></p>
+
+<p>Jika Anda yakin bahwa karya berhak cipta telah ditangani sedemikian rupa sehingga menghasilkan pelanggaran hak cipta, Anda dapat memberitahu Nokia dengan menyediakan pemberitahuan berikut ini yang meliputi:</p>
+
+<p></p>
+
+<p>(1) Tanda tangan secara fisik atau elektronik dari orang yang berwenang untuk bertindak atas nama pemilik hak eksklusif yang diduga telah dilanggar tersebut;</p>
+
+<p></p>
+
+<p>(2) Identifikasi atau keterangan karya berhak cipta yang diklaim telah dilanggar;</p>
+
+<p></p>
+
+<p>(3) dentifikasi atau deskripsi materi yang diklaim sebagai pelanggaran dan informasi yang memadai secara wajar untuk menemukan materi tersebut;</p>
+
+<p></p>
+
+<p>(4) Nama, alamat, nomor telepon, alamat e-mail Anda dan informasi lain apa pun yang akan mengizinkan Nokia untuk menghubungi Anda;</p>
+
+<p></p>
+
+<p>(5) Pernyataan bahwa dengan niat baik, Anda yakin bahwa penggunaan materi dengan cara yang dikeluhkan tersebut, memang tidak diberikan wewenang oleh pemilik hak cipta, agennya atau secara hukum; dan</p>
+
+<p></p>
+
+<p>(6) Pernyataan bahwa informasi dalam pemberitahuan tersebut memang akurat, dan dapat dihukum bila ternyata pemberitahuan itu palsu, bahwa Anda berwenang untuk bertindak atas nama pemilik hak eksklusif yang diduga telah dilanggar.</p>
+
+<p></p>
+
+<p>Pemberitahuan harus dikirim ke alamat Agen Yang Ditunjuk oleh kami di:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. HUKUM YANG BERLAKU</h1>
+
+<p></p>
+
+<p>Sebagaimana yang disebut dalam syarat dan ketentuan ini, “Nokia†berarti Nokia Corporation. Nokia mengoperasikan dan mengendalikan Layanan dari lokasi-lokasi di Finlandia. Oleh sebab itu, informasi yang dimuat pada Layanan di sini memang disediakan di Finlandia.</p>
+
+<p></p>
+
+<p>Hak cipta © Nokia Corporation 2006. Semua hak dilindungi undang-undang.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/67/internetradio_67.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "VienmÄ“r jautÄt"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "SaglabÄtas %N stacijas"
+#define qtn_ir_added_single "%U[87] saglabÄts"
+#define qtn_ir_addmanually_unnamed "Bez nosauk."
+#define qtn_ir_addst_description "Apraksts"
+#define qtn_ir_addst_streamurl "Plūsmas URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Interneta radio"
+#define qtn_ir_ai_radio_not_active "Radio nav aktīvs"
+#define qtn_ir_app_general_err "Iekšēja kļūda. Restartējiet programmu."
+#define qtn_ir_apps_grid "Int. radio"
+#define qtn_ir_apps_list "Interneta radio"
+#define qtn_ir_apps_skey "Interneta radio"
+#define qtn_ir_apps_standby "Interneta radio"
+#define qtn_ir_apps_swins "Interneta radio"
+#define qtn_ir_apps_wheel "Interneta radio"
+#define qtn_ir_bitrate_best "LabÄkÄ kvalitÄte"
+#define qtn_ir_bitrate_high "Augsta kvalitÄte"
+#define qtn_ir_bitrate_standard "Standarta kvalitÄte"
+#define qtn_ir_cost_heading "Svarīgs paziņojums"
+#define qtn_ir_cost_softkey_continue "TurpinÄt"
+#define qtn_ir_cost_softkey_exit "Iziet"
+#define qtn_ir_cost_title "Interneta radio"
+#define qtn_ir_cost_warning "Interneta radio izmanto radio pÄrraidei tÄlruņa datu savienojumu. To ieteicams izmantot vienÄ«gi tad, ja jums ir fiksÄ“tas maksas datu plÄns. Ja neesat pÄrliecinÄts par datu pÄrraides izmaksÄm, pirms turpinÄÅ¡anas sazinieties ar savu operatoru."
+#define qtn_ir_country_list_expanded "%N stacijas"
+#define qtn_ir_countryregion_title "Valstis/reģioni"
+#define qtn_ir_discover_beststations "LabÄko staciju izlase"
+#define qtn_ir_discover_country_region "PÄrlÅ«k. pÄ“c valsts/reÄ£."
+#define qtn_ir_discover_genre "PÄrlÅ«kot pÄ“c žanra"
+#define qtn_ir_discover_genre_expanded "Stacijas sakÄrtotas pÄ“c žanra"
+#define qtn_ir_discover_langauge "PÄrlÅ«kot pÄ“c valodas"
+#define qtn_ir_discover_language_expanded "Stacijas sakÄrtot. pÄ“c valodas"
+#define qtn_ir_discover_staticountryreg "PÄ“c valsts/reÄ£. kÄrtotas stac."
+#define qtn_ir_discover_title "Staciju katalogs"
+#define qtn_ir_discover_top "PopulÄrÄkÄs stacijas"
+#define qtn_ir_edit_title "Stacijas rediģēš."
+#define qtn_ir_err_operation "Darbības kļūda. Mēģiniet vēlreiz."
+#define qtn_ir_err_url_unavail "URL nav pieejams"
+#define qtn_ir_error_address "Nepareiza interneta radio stacijas adrese"
+#define qtn_ir_error_connection "Savienojuma taimauts. Mēģiniet vēlreiz."
+#define qtn_ir_error_favourites "IzlasÄ“ nepietiek vietas, lai saglabÄtu izvÄ“li"
+#define qtn_ir_error_general "Nevar izveidot savienojumu ar staciju"
+#define qtn_ir_error_isds_unavailable "Interneta staciju kataloga pakalpojums īslaicīgi nav pieejams"
+#define qtn_ir_error_notavailable "Straumēšanas saites nav pieejamas"
+#define qtn_ir_error_notinisds "Objekts vairs nav pieejams"
+#define qtn_ir_error_search "Ievadiet meklējamo virkni"
+#define qtn_ir_findst_addstation "Pievienot staciju manuÄli"
+#define qtn_ir_findst_addtofav "Pievienot staciju izlasei"
+#define qtn_ir_findst_browsesds "PÄrlÅ«kot staciju katalogu"
+#define qtn_ir_findst_search_ensrhterm "Ievadiet meklējamo virkni"
+#define qtn_ir_findst_softkey_search "Meklēt"
+#define qtn_ir_findstation_title "Staciju meklēš."
+#define qtn_ir_firstuse_title "Int. radio: sveicinÄti!"
+#define qtn_ir_genre_list_expanded "%N stacijas"
+#define qtn_ir_genre_title "Žanri"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "VÄ“stures nav"
+#define qtn_ir_homescreen_buffering "Raksta buferī"
+#define qtn_ir_homescreen_lastplayed "PÄ“dÄ“jÄ atskaņotÄ"
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "Valsts vai reģions:"
+#define qtn_ir_info_details_description "Apraksts:"
+#define qtn_ir_info_details_genre "Žanrs(i):"
+#define qtn_ir_info_details_language "Valoda:"
+#define qtn_ir_info_details_name "Nosaukums:"
+#define qtn_ir_info_details_streams "Straumes:"
+#define qtn_ir_info_details_title "Stacijas dati"
+#define qtn_ir_info_details_type "Veids:"
+#define qtn_ir_info_details_type_isds "Stac. kat."
+#define qtn_ir_info_details_type_manual "Liet. def."
+#define qtn_ir_info_details_unnamed "Bez nos."
+#define qtn_ir_info_softkey_close "Aizvērt"
+#define qtn_ir_language_list_expanded "%N stacijas"
+#define qtn_ir_language_title "Valodas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "IelÄdÄ“"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Meklē"
+#define qtn_ir_main_descriptive_text "Liet. rÄ«kjoslÄ \"Staciju mekl.\", lai pievien. stac."
+#define qtn_ir_main_discover_expanded "Jaunu radiostaciju atrašana"
+#define qtn_ir_main_last "PÄ“d. atskaņotÄ"
+#define qtn_ir_main_now "Tagad atskaņo"
+#define qtn_ir_main_prog_deleting "Dzēš %N"
+#define qtn_ir_main_searchindir "MeklÄ“t katalogÄ"
+#define qtn_ir_main_title "Interneta radio"
+#define qtn_ir_main_unnamed_station "Stacija bez nos."
+#define qtn_ir_memlo_ram_out_of_mem "Nepietiek atmiņas darbÄ«bas veikÅ¡anai. Vispirms jÄizdzÄ“Å¡ daļa datu."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "NÄkamÄ stacija"
+#define qtn_ir_now_tooltip_play "Atskaņot"
+#define qtn_ir_now_tooltip_previous "IepriekÅ¡Ä“jÄ stacija"
+#define qtn_ir_now_tooltip_stop "PÄrtraukt"
+#define qtn_ir_now_wait_buffering "Raksta buferī"
+#define qtn_ir_now_wait_buffering_perc "Raksta buferī %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Nav tīkla savienojuma"
+#define qtn_ir_nwcontroller_err_nosnaps "Nav definēts neviens piekļuves punkts"
+#define qtn_ir_options_add "Pievienot izlasei"
+#define qtn_ir_options_add_manually "Pievien. staciju manuÄli"
+#define qtn_ir_options_change "Mainīt"
+#define qtn_ir_options_clearhistory "Nodzēst vēsturi"
+#define qtn_ir_options_editstation "Rediģēt staciju"
+#define qtn_ir_options_equalizer "Ekvalaizers"
+#define qtn_ir_options_exit "Iziet"
+#define qtn_ir_options_findnmusicstore "MeklÄ“t MÅ«zikas veikalÄ"
+#define qtn_ir_options_fmtrans "FM raidÄ«tÄjs"
+#define qtn_ir_options_gotomusicstore "Atvērt Mūzikas veikalu"
+#define qtn_ir_options_help "Palīdzība"
+#define qtn_ir_options_history "VÄ“sture"
+#define qtn_ir_options_info "Stacijas dati"
+#define qtn_ir_options_mainview "Atvērt galveno skatu"
+#define qtn_ir_options_mark "Atzīmēt"
+#define qtn_ir_options_markall "Atzīmēt visu"
+#define qtn_ir_options_markunmark "Atzīmēt/noņemt atzīmi"
+#define qtn_ir_options_now "Atvērt Tagad atskaņo"
+#define qtn_ir_options_off "Izslēgt"
+#define qtn_ir_options_on "Ieslēgt"
+#define qtn_ir_options_searchag "Meklēt vēlreiz"
+#define qtn_ir_options_select "Izvēlēties"
+#define qtn_ir_options_settings "UzstÄdÄ«jumi"
+#define qtn_ir_options_station "Stacija"
+#define qtn_ir_options_stereowidening "Stereo paplaÅ¡inÄjums"
+#define qtn_ir_options_unmark "Noņemt atzīmi"
+#define qtn_ir_options_unmarkall "Noņemt visu"
+#define qtn_ir_playfail_err "Radio atskaņoÅ¡ana neizdevÄs"
+#define qtn_ir_playlist_title "SaņemtÄs saites"
+#define qtn_ir_popup_no_results "Nekas nav atrasts"
+#define qtn_ir_popup_toomany_results "PÄrÄk daudz rezultÄtu. PrecizÄ“jiet meklÄ“Å¡anas virkni."
+#define qtn_ir_results_none "Atbilstošas stacijas nav atrastas. Meklējiet vēlreiz."
+#define qtn_ir_search_result "%0U[09]:%1N rezultÄts"
+#define qtn_ir_search_results "%0U[08]:%1N rezultÄti"
+#define qtn_ir_set_folder_internetradio "Interneta radio"
+#define qtn_ir_set_folder_irradio "Interneta radio"
+#define qtn_ir_settings_3g "3G savien. bitu Ätrums"
+#define qtn_ir_settings_connec_softkey_ok "Labi"
+#define qtn_ir_settings_gprs "GPRS savien. bitu Ätrums"
+#define qtn_ir_settings_network "TÄ«kla savienojums"
+#define qtn_ir_settings_snap_default "Noklusētais savienoj."
+#define qtn_ir_settings_title "UzstÄdÄ«jumi"
+#define qtn_ir_settings_wifi "Wi-Fi savien. bitu Ätrums"
+#define qtn_ir_softkey_back "Atpakaļ"
+#define qtn_ir_softkey_cancel "Atcelt"
+#define qtn_ir_softkey_done "Gatavs"
+#define qtn_ir_softkey_no "NÄ“"
+#define qtn_ir_softkey_options "Iespējas"
+#define qtn_ir_softkey_select "Izvēlēties"
+#define qtn_ir_softkey_yes "JÄ"
+#define qtn_ir_station_saved "Stacija saglabÄta"
+#define qtn_ir_stationlist_nomatches "(atbilstību nav)"
+#define qtn_ir_stations_popup_delete "Dzēst\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Vai izdzēst %N stacijas?"
+#define qtn_ir_stations_popup_removed "%U[88] izdzēsta"
+#define qtn_ir_stations_popup_removed_many "Izdzēstas %N stacijas"
+#define qtn_ir_stations_popup_save "Vai saglabÄt staciju izlasÄ“?"
+#define qtn_ir_suboptions_delete "Dzēst"
+#define qtn_ir_suboptions_details "Dati"
+#define qtn_ir_suboptions_move "PÄrvietot"
+#define qtn_ir_terms_details "PiekrÄ«tot zemÄk minÄ“tajiem noteikumiem un nosacÄ«jumiem, jÅ«s uzņematies lÄ«gumsaistÄ«bas, ciktÄl to pieļauj piemÄ“rojamie likumdoÅ¡anas akti un neierobežo vai neaizliedz visas mantiskÄs tiesÄ«bas"
+#define qtn_ir_terms_heading "Noteikumi un nosacījumi"
+#define qtn_ir_terms_softkey_accept "Akceptēt"
+#define qtn_ir_terms_softkey_decline "Atteikt"
+#define qtn_ir_title_history "VÄ“sture"
+#define qtn_ir_tooltip_addalltofav "Pievienot visu izlasei"
+#define qtn_ir_tooltip_addstation "Piev. staciju manuÄli"
+#define qtn_ir_tooltip_addtofav "Pievienot izlasei"
+#define qtn_ir_tooltip_copy "Kopēt"
+#define qtn_ir_tooltip_findnstore "Mekl. MÅ«zikas veikalÄ"
+#define qtn_ir_tooltip_findst "Meklēt stacijas"
+#define qtn_ir_tooltip_history "VÄ“sture"
+#define qtn_ir_tooltip_listen "Klausīties"
+#define qtn_ir_tooltip_paste "Ielikt"
+#define qtn_ir_tooltip_stationde "Stacijas dati"
+#define qtn_ir_top_title "Popul. stacijas"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nosaukums"
+#define qtn_ir_url_title "Stacijas pievien."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/67/internetradioai_67.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Interneta radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/67/terms_67.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia interneta radio pakalpojums (Pakalpojums) paredz, ka lietotÄji var iepazÄ«t un klausÄ«ties interneta radio stacijas. JŪS PIEKRĪTAT, KA PIRMS PAKALPOJUMA LIETOÅ ANAS ESAT IZLASĪJIS UN SAPRATIS Å O LĪGUMU, UN PIEKRĪTAT IEVÄ’ROT TÄ€ NOTEIKUMUS UN NOSACĪJUMUS. IegaumÄ“jiet: ja nepiekrÄ«tat noteikumiem un nosacÄ«jumiem, jÅ«s nedrÄ«kstat lietot Å¡o Pakalpojumu.</p>
+
+<p></p>
+
+<h1>1. TERMINI</h1>
+
+<p></p>
+
+<p>Interneta radio stacijas nozīmē uzņēmumus, kas producē un izplata audio saturu un saistītus metadatus, izmantojot interneta straumi.</p>
+
+<p></p>
+
+<p>Saite uz interneta radio staciju nozÄ«mÄ“ avota noteicÄ“ju vai avota noteicÄ“ju kopu, kas lietotÄjam ļauj piekļūt saturam, ko straumÄ“ interneta radio stacija.</p>
+
+<p></p>
+
+<h1>2. PAKALPOJUMS</h1>
+
+<p></p>
+
+<p>Pakalpojums nodrošina:</p>
+<p>1. interneta radio staciju saiÅ¡u pÄrlÅ«koÅ¡anu;</p>
+<p>2. piekļuvi interneta radio staciju saturam.</p>
+
+<p></p>
+
+<h1>3. PAKALPOJUMA LIETOÅ ANA</h1>
+
+<p></p>
+
+<p>Pakalpojumu drÄ«kst lietot tikai privÄtiem un nekomerciÄliem mÄ“rÄ·iem. Nokia pieder visas intelektuÄlÄ Ä«paÅ¡uma tiesÄ«bas PakalpojumÄ un uz Pakalpojumu.</p>
+
+<p></p>
+
+<p>Nokia patur tiesÄ«bas mainÄ«t Å¡os noteikumus un nosacÄ«jumus, informÄ“jot jÅ«s par Å¡ÄdÄm izmaiņÄm.</p>
+
+<p></p>
+
+<h1>4. KONFIDENCIALITÄ€TE</h1>
+
+<p></p>
+
+<p>Nokia ir apņēmusies aizsargÄt lietotÄju konfidencialitÄti, Ä«stenojot stingras konfidencialitÄtes politikas.</p>
+
+<p></p>
+
+<p>Lai pÄrraudzÄ«tu Pakalpojuma lietoÅ¡anu un pilnveidotu to, Nokia var apkopot lietoÅ¡anas datus, ieskaitot, bet neaprobežojoties ar informÄciju par atvÄ“rtajÄm interneta radio stacijÄm, katrÄ stacijÄ pavadÄ«to laika periodu un objektiem, kas pievienoti izlasÄ“m.</p>
+
+<p></p>
+
+<p>Nokia neapkopo nekÄdu informÄciju, kas ļautu noteikt Pakalpojuma lietotÄju.</p>
+
+<p></p>
+
+<h1>5. PAKALPOJUMA PIEEJAMĪBA</h1>
+
+<p></p>
+
+<p>Pakalpojums tiek piedÄvÄts jÅ«su Ä“rtÄ«bu labad. Tas tiek piedÄvÄts tÄds, “kÄds tas ir†un “kÄds tas ir pieejamsâ€. Nokia nesniedz garantiju, ka Pakalpojuma darbÄ«ba bÅ«s nepÄrtraukta un bez traucÄ“jumiem. Nokia patur tiesÄ«bas jebkurÄ laikÄ pÄrstrÄdÄt Pakalpojumu vai anulÄ“t piekļuvi Pakalpojumam.</p>
+
+<p></p>
+
+<p>Nokia pÄ“c saviem ieskatiem var nodroÅ¡inÄt Pakalpojuma jauninÄjumus, kas saistÄ«ti ar lietojumprogrammatÅ«ru.</p>
+
+<p></p>
+
+<h1>6. ATRUNA UN SAISTĪBAS</h1>
+
+<p></p>
+
+<p>Lai nodroÅ¡inÄtu vieglu piekļuvi, Nokia var iekļaut interneta radio saites, kas pieder treÅ¡ajÄm personÄm vai ko tÄs darbina. Nokia nesniedz garantijas, ka interneta radio staciju saites darbosies. TurklÄt saturs, kas neattiecas uz Nokia, nekÄdÄ veidÄ nenozÄ«mÄ“, ka Nokia ir apstiprinÄjusi Å¡o saturu vai produktus un pakalpojumus, uz kuriem Å¡ajÄ saturÄ ir atsauce.</p>
+
+<p></p>
+
+<p>Lai piekļūtu stacijai, jums jÄpÄrskata un jÄpiekrÄ«t katras stacijas lietoÅ¡anas noteikumiem. JÅ«s arÄ« piekrÄ«tat, ka Nokia nekontrolÄ“ treÅ¡o personu pakalpojumu saturu un neuzņemas atbildÄ«bu par saturu, ko nodroÅ¡ina interneta radio stacijas.</p>
+
+<p></p>
+
+<p>Pakalpojuma izmantoÅ¡ana, lai piekļūtu interneta radio staciju saturam var bÅ«t saistÄ«ta ar lielu datu apjoma pÄrsÅ«tÄ«Å¡anu pakalpojumu sniedzÄ“ja tÄ«klÄ. InformÄciju par pÄrsÅ«tÄ«Å¡anas izmaksÄm lÅ«dziet savam pakalpojumu sniedzÄ“jam. IegaumÄ“jiet, ka Pakalpojuma lietoÅ¡ana interneta radio stacijÄs, kuras jums nosÅ«ta lielÄka bitu Ätruma straumes, var radÄ«t lielÄkas datu pÄrsÅ«tÄ«Å¡anas izmaksas.</p>
+
+<p></p>
+
+<p>Datu pÄrsÅ«tÄ«Å¡ana, kas saistÄ«ta ar Pakalpojuma lietoÅ¡anu, var ietvert: staciju direktorija satura atjauninÄÅ¡anu, datu straumÄ“Å¡anu no interneta radio stacijas, statistikas datu apkopoÅ¡anu un interneta radio programmu jauninÄÅ¡anu.</p>
+
+<p></p>
+
+<p>Nokia nav atbildÄ«ga par datu pÄrsÅ«tÄ«Å¡anas izmaksÄm, kas saistÄ«tas ar Pakalpojuma lietoÅ¡anu.</p>
+
+<p></p>
+
+<p>NETIEK SNIEGTAS NEKĀDA VEIDA GARANTIJAS, NEDZ TIEŠAS, NEDZ NETIEŠAS, IESKAITOT, BET NEAPROBEŽOJOTIES AR NETIEŠĀS KVALITĀTES VAI DERĪGUMA GARANTIJĀM ATTIECĪBĀ UZ ŠĪ PAKALPOJUMA SATURU, PAREIZĪBU VAI TICAMĪBU. NOKIA NEATBILD PAR TIEŠIEM, NETIEŠIEM, NEJAUŠIEM, TĪŠIEM VAI IZRIETOŠIEM BOJĀJUMIEM, ZAUDĒTIEM IENĀKUMIEM VAI UZŅĒMĒJDARBĪBAS PĀRTRAUKŠANU, KAS RODAS NO PAKALPOJUMA IZMANTOŠANAS VAI NO NESPĒJAS TO IZMANTOT, PAT TAD, JA NOKIA IR BRĪDINĀTA PAR ŠĀDU BOJĀJUMU IESPĒJAMĪBU. DAŽĀS JURISDIKCIJĀS NAV ATĻAUTS ATTEIKTIES NO ATSEVIŠĶĀM GARANTIJĀM VAI IEROBEŽOT ATBILDĪBU, TĀPĒC IEPRIEKŠ MINĒTIE IEROBEŽOJUMI VAI IZŅĒMUMI UZ JUMS VAR NEATTIEKTIES. NOKIA ATBILDĪBA ŠĀDOS GADĪJUMOS IR IEROBEŽOTA LIELĀKAJĀ APMĒRĀ, KĀDU NOSAKA LIKUMS.</p>
+
+<p></p>
+
+<p>Nekas no Å¡eit minÄ“tÄ nemazina likumÄ noteiktÄs tiesÄ«bas nevienai no pusÄ“m, kas darbojas kÄ klients. Nekas no Å¡eit minÄ“tÄ neierobežo Nokia atbildÄ«bu gadÄ«jumÄ, ja Nokia nolaidÄ«bas dēļ iestÄjas nÄve vai rodas trauma.</p>
+
+<p></p>
+
+<h1>7. POLITIKA ATTIECĪBĀ UZ LIECĪBĀM PAR AUTORTIESĪBU PĀRKĀPUMU</h1>
+
+<p></p>
+
+<p>Ja uzskatÄt, ka jÅ«su ar autortiesÄ«bÄm aizsargÄtais darbs ir izmantots, pÄrkÄpjot autortiesÄ«bas, varat ziņot par to Nokia, iesniedzot iesniegumu, kurÄ iekļauta Å¡Äda informÄcija:</p>
+
+<p></p>
+
+<p>(1) fizisks vai elektronisks tÄs personas paraksts, kas ir tiesÄ«gs darboties Ä«paÅ¡nieka vÄrdÄ, kam pieder ekskluzÄ«vÄs tiesÄ«bas, par kuru pÄrkÄpumu tiek ziņots iesniegumÄ;</p>
+
+<p></p>
+
+<p>(2) ar autortiesÄ«bÄm aizsargÄtÄ un par pÄrkÄpto uzskatÄ«tÄ darba identifikÄcija vai apraksts;</p>
+
+<p></p>
+
+<p>(3) par pÄrkÄpto uzskatÄ«tÄ materiÄla identifikÄcija vai apraksts un pietiekama informÄcija, lai varÄ“tu atrast Å¡o materiÄlu;</p>
+
+<p></p>
+
+<p>(4) jÅ«su vÄrs/uzvÄrds, adrese, tÄlruņa numurs, e-pasta adrese un cita informÄcija, kas nodroÅ¡ina, ka Nokia var ar jums sazinÄties;</p>
+
+<p></p>
+
+<p>(5) paziņojums, kurÄ pausta jÅ«su pÄrliecÄ«ba, ka autortiesÄ«bu Ä«paÅ¡nieks, tÄ aÄ£ents nav pilnvarojis vai likums nav atļÄvis izmantot materiÄlu veidÄ, par kuru tiek iesniegts Å¡is iesniegums;</p>
+
+<p></p>
+
+<p>(6) paziņojums, ka iesniegumÄ iekļautÄ informÄcija ir pareiza un jÅ«s, apzinoties nepatiesas liecÄ«bas gadÄ«jumÄ piemÄ“rojamÄ soda iespÄ“ju, esat tiesÄ«gs darboties Ä«paÅ¡nieka vÄrdÄ, kam pieder ekskluzÄ«vÄs tiesÄ«bas, par kuru pÄrkÄpumu tiek ziņots iesniegumÄ.</p>
+
+<p></p>
+
+<p>Iesniegums jÄnosÅ«ta aÄ£entam uz e-pasta adresi:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. REGULÄ’JOÅ AIS LIKUMS</h1>
+
+<p></p>
+
+<p>Å ajos noteikumos un nosacÄ«jumos Nokia nozÄ«mÄ“ Nokia Corporation. Nokia vada un kontrolÄ“ Pakalpojumu, atrodoties SomijÄ. LÄ«dz ar to tiek pieņemts, ka Å¡eit paustÄ informÄcija par Pakalpojumu ir sniegta SomijÄ.</p>
+
+<p></p>
+
+<p>Autortiesības © Nokia Corporation 2006. Visas tiesības paturētas.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/68/internetradio_68.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Visada klausti"
+#define qtn_ir_active_idle_data "%0U – %1U: %2U"
+#define qtn_ir_added_multi "IÅ¡saugota stoÄių: %N"
+#define qtn_ir_added_single "IÅ¡saugota %U[78]"
+#define qtn_ir_addmanually_unnamed "Be pavadinimo"
+#define qtn_ir_addst_description "Aprašas"
+#define qtn_ir_addst_streamurl "Transliavimo URL"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U – %2U (%3U)"
+#define qtn_ir_ai_iradio_title "Interneto radijas"
+#define qtn_ir_ai_radio_not_active "Radijo stotis neįjungta"
+#define qtn_ir_app_general_err "Vidinė klaida. Paleiskite programą iš naujo."
+#define qtn_ir_apps_grid "Int. radijas"
+#define qtn_ir_apps_list "Interneto radijas"
+#define qtn_ir_apps_skey "Intern. radijas"
+#define qtn_ir_apps_standby "Interneto radijas"
+#define qtn_ir_apps_swins "Interneto radijas"
+#define qtn_ir_apps_wheel "Interneto radijas"
+#define qtn_ir_bitrate_best "Geriausia kokybÄ—"
+#define qtn_ir_bitrate_high "Aukšta kokybė"
+#define qtn_ir_bitrate_standard "Įprasta kokybė"
+#define qtn_ir_cost_heading "Svarbus pranešimas"
+#define qtn_ir_cost_softkey_continue "Tęsti"
+#define qtn_ir_cost_softkey_exit "Uždar. progr."
+#define qtn_ir_cost_title "Intern. radijas"
+#define qtn_ir_cost_warning "Interneto radijas naudoja jÅ«sų telefono duomemų ryÅ¡ius radijo transliavimui. Tai rekomenduojama tik tuo atveju, jei turite neriboto duomenų perdavimo planÄ…. Jei nesate tikri dÄ—l jums taikomų duomenų mokesÄių, prieÅ¡ tÄ™sdami, apie tai sužinokite iÅ¡ savo operatoriaus."
+#define qtn_ir_country_list_expanded "StoÄių: %N"
+#define qtn_ir_countryregion_title "Å alys / regionai"
+#define qtn_ir_discover_beststations "Geriausių stoÄių rinkinys"
+#define qtn_ir_discover_country_region "Ieškoti pagal šalį/regioną"
+#define qtn_ir_discover_genre "Ieškoti pagal žanrą"
+#define qtn_ir_discover_genre_expanded "Pagal žanrą surūš. stotys"
+#define qtn_ir_discover_langauge "Ieškoti pagal kalbą"
+#define qtn_ir_discover_language_expanded "Pagal kalbą surūš. stotys"
+#define qtn_ir_discover_staticountryreg "Pagal šalį / reg. surūš. stotys"
+#define qtn_ir_discover_title "Radijo st. katal."
+#define qtn_ir_discover_top "Populiariausios stotys"
+#define qtn_ir_edit_title "Stoties redagav."
+#define qtn_ir_err_operation "Atliekant veiksmą įvyko laida. Bandykite dar kartą."
+#define qtn_ir_err_url_unavail "URL nÄ—ra"
+#define qtn_ir_error_address "Netikslus interneto radijo stoties adresas"
+#define qtn_ir_error_connection "Baigėsi ryšiui skirtas laikas. Bandykite dar kartą."
+#define qtn_ir_error_favourites "Parankinių kataloge nepakanka vietos pasirinktai (-oms) stoÄiai (-ims) iÅ¡saugoti"
+#define qtn_ir_error_general "Neįmanoma prisijungti prie stoties"
+#define qtn_ir_error_isds_unavailable "Interneto stoties kategorijų paslauga šiuo metu neteikiama"
+#define qtn_ir_error_notavailable "Transliavimo saitų nėra"
+#define qtn_ir_error_notinisds "Elemento nebÄ—ra"
+#define qtn_ir_error_search "Įvesti paieškos terminą"
+#define qtn_ir_findst_addstation "Įtr. stotį rankiniu būdu"
+#define qtn_ir_findst_addtofav "Įtraukite stotį į parankines"
+#define qtn_ir_findst_browsesds "Naršyti stoties kataloge"
+#define qtn_ir_findst_search_ensrhterm "Įveskite paieškos terminą"
+#define qtn_ir_findst_softkey_search "Ieškoti"
+#define qtn_ir_findstation_title "StoÄių paieÅ¡ka"
+#define qtn_ir_firstuse_title "Intern. radijas. Sveiki!"
+#define qtn_ir_genre_list_expanded "StoÄių: %N"
+#define qtn_ir_genre_title "Žanrai"
+#define qtn_ir_history_artist_song "%0U – %1U"
+#define qtn_ir_history_no_history "TuÅ¡Äia"
+#define qtn_ir_homescreen_buffering "Kaupiami duomen."
+#define qtn_ir_homescreen_lastplayed "Leista paskiausiai"
+#define qtn_ir_info_details_bitrate "%N kb per sek.:"
+#define qtn_ir_info_details_countryregi "Å alis / Regionas:"
+#define qtn_ir_info_details_description "Aprašas:"
+#define qtn_ir_info_details_genre "Žanras (-ai):"
+#define qtn_ir_info_details_language "Kalba:"
+#define qtn_ir_info_details_name "Pavadinimas:"
+#define qtn_ir_info_details_streams "Transliacijos:"
+#define qtn_ir_info_details_title "Inf. apie stotį"
+#define qtn_ir_info_details_type "RÅ«Å¡is:"
+#define qtn_ir_info_details_type_isds "St. katal."
+#define qtn_ir_info_details_type_manual "Nst. vart."
+#define qtn_ir_info_details_unnamed "Be pavad."
+#define qtn_ir_info_softkey_close "Uždaryti"
+#define qtn_ir_language_list_expanded "StoÄių: %N"
+#define qtn_ir_language_title "Kalbos"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Įkeliama"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Ieškoma"
+#define qtn_ir_main_descriptive_text "Kad įtr. nj. st., mygt. juost. pasir. „StoÄių paieÅ¡ka“."
+#define qtn_ir_main_discover_expanded "Atraskite naujas radijo stotis"
+#define qtn_ir_main_last "Klaus. paskiaus."
+#define qtn_ir_main_now "Transliuoja"
+#define qtn_ir_main_prog_deleting "IÅ¡trinama %N"
+#define qtn_ir_main_searchindir "Ieškoti kataloge"
+#define qtn_ir_main_title "Intern. radijas"
+#define qtn_ir_main_unnamed_station "Stotis be pavad."
+#define qtn_ir_memlo_ram_out_of_mem "Trūksta atminties veiksmui atlikti. Pirma ištrinkite kai kuriuos duomenis."
+#define qtn_ir_now_artist_song "%0U – %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N mb/s"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Kita radijo stotis"
+#define qtn_ir_now_tooltip_play "Atkurti"
+#define qtn_ir_now_tooltip_previous "AnkstesnÄ— radijo stotis"
+#define qtn_ir_now_tooltip_stop "Sustabdyti"
+#define qtn_ir_now_wait_buffering "Kaupiami duomenys"
+#define qtn_ir_now_wait_buffering_perc "Kaupiami duomenys – %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Nėra ryšio su tinklu"
+#define qtn_ir_nwcontroller_err_nosnaps "Nenustatytas prieigos kodas"
+#define qtn_ir_options_add "Įtraukti į parankines"
+#define qtn_ir_options_add_manually "Įtr. stotį rankiniu būdu"
+#define qtn_ir_options_change "Keisti"
+#define qtn_ir_options_clearhistory "IÅ¡trinti istorijÄ…"
+#define qtn_ir_options_editstation "Stoties redagavimas"
+#define qtn_ir_options_equalizer "Ekvalaizeris"
+#define qtn_ir_options_exit "Uždaryti programą"
+#define qtn_ir_options_findnmusicstore "Ieškoti muz. Parduot-je"
+#define qtn_ir_options_fmtrans "FM siųstuvas"
+#define qtn_ir_options_gotomusicstore "Eiti į muzikos parduotuvę"
+#define qtn_ir_options_help "Paaiškinimas"
+#define qtn_ir_options_history "Istorija"
+#define qtn_ir_options_info "Informacija apie stotį"
+#define qtn_ir_options_mainview "Eiti į pagrindinį rodinį"
+#define qtn_ir_options_mark "Žymėti"
+#define qtn_ir_options_markall "Žymėti visas"
+#define qtn_ir_options_markunmark "Pažymėti (atžymėti)"
+#define qtn_ir_options_now "Eiti į Dabar atkuria"
+#define qtn_ir_options_off "IÅ¡jungti"
+#define qtn_ir_options_on "Įjungti"
+#define qtn_ir_options_searchag "Ieškoti dar kartą"
+#define qtn_ir_options_select "Pasirinkti"
+#define qtn_ir_options_settings "Parametrai"
+#define qtn_ir_options_station "Radijo stotis"
+#define qtn_ir_options_stereowidening "Stereoefekto gerinimas"
+#define qtn_ir_options_unmark "Atžymėti"
+#define qtn_ir_options_unmarkall "Atžymėti visas"
+#define qtn_ir_playfail_err "Radijo atkūrimas nepavyko"
+#define qtn_ir_playlist_title "Gauti saitai"
+#define qtn_ir_popup_no_results "Nerasta"
+#define qtn_ir_popup_toomany_results "Per daug rezultatų. Įveskite tikslesnį paieškos žodį."
+#define qtn_ir_results_none "Atitinkamų stoÄių nerasta. IeÅ¡kokite dar kartÄ…."
+#define qtn_ir_search_result "%0U[08]:%1N rezultatas"
+#define qtn_ir_search_results "%0U[10]:%1N rezult."
+#define qtn_ir_set_folder_internetradio "Interneto radijas"
+#define qtn_ir_set_folder_irradio "Interneto radijas"
+#define qtn_ir_settings_3g "3G ryšio sparta"
+#define qtn_ir_settings_connec_softkey_ok "Gerai"
+#define qtn_ir_settings_gprs "GPRS ryšio sparta"
+#define qtn_ir_settings_network "Interneto ryšys"
+#define qtn_ir_settings_snap_default "Numatytasis ryšys"
+#define qtn_ir_settings_title "Parametrai"
+#define qtn_ir_settings_wifi "„Wi-Fi“ ryšio sparta"
+#define qtn_ir_softkey_back "Atgal"
+#define qtn_ir_softkey_cancel "Atšaukti"
+#define qtn_ir_softkey_done "Atlikta"
+#define qtn_ir_softkey_no "Ne"
+#define qtn_ir_softkey_options "Funkcijos"
+#define qtn_ir_softkey_select "Pasirinkti"
+#define qtn_ir_softkey_yes "Taip"
+#define qtn_ir_station_saved "Radijo stotis išsaugota"
+#define qtn_ir_stationlist_nomatches "(atitikmenų nėra)"
+#define qtn_ir_stations_popup_delete "IÅ¡trinti\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "IÅ¡trinti %N stot.?"
+#define qtn_ir_stations_popup_removed "%U[89] ištrinta"
+#define qtn_ir_stations_popup_removed_many "IÅ¡trinta stoÄių: '%N"
+#define qtn_ir_stations_popup_save "Išsaugoti stotį kaip parankinę?"
+#define qtn_ir_suboptions_delete "IÅ¡trinti"
+#define qtn_ir_suboptions_details "Informacija"
+#define qtn_ir_suboptions_move "Perkelti"
+#define qtn_ir_terms_details "Sutikdami su toliau pateiktomis naudojimo sąlygomis, sudarote sutartį naudoti programą pagal taikomus įstatymus leidžiamu mastu, toliau neribojamu ir draudžiamu, atsižvelgdami į visas su medžiaga susijusias teises"
+#define qtn_ir_terms_heading "Naudojimo sÄ…lygos"
+#define qtn_ir_terms_softkey_accept "Sutikti"
+#define qtn_ir_terms_softkey_decline "Nesutikti"
+#define qtn_ir_title_history "Istorija"
+#define qtn_ir_tooltip_addalltofav "Įtraukti visas į parank."
+#define qtn_ir_tooltip_addstation "Įtr. stotį rankiniu būdu"
+#define qtn_ir_tooltip_addtofav "Įtraukti į parankines"
+#define qtn_ir_tooltip_copy "Kopijuoti"
+#define qtn_ir_tooltip_findnstore "Ieškoti muz. pard-je"
+#define qtn_ir_tooltip_findst "StoÄių paieÅ¡ka"
+#define qtn_ir_tooltip_history "Istorija"
+#define qtn_ir_tooltip_listen "Klausyti"
+#define qtn_ir_tooltip_paste "Įdėti"
+#define qtn_ir_tooltip_stationde "Informacija apie stotį"
+#define qtn_ir_top_title "Populiar. stotys"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Pavadinimas"
+#define qtn_ir_url_title "Stot. įtraukimas"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/68/internetradioai_68.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Interneto radijas">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/68/terms_68.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>„Nokia“ interneto radijo paslauga („Paslauga“) suteikia jums galimybÄ™ surasti ir mÄ—gautis interneto radijo stoÄių turiniu. JŪS SUTINKATE, KAD PASLAUGOS NAUDOJIMAS PATVIRTINA, KAD JŪS PERSKAITÄ–TE Å IÄ„ SUTARTÄ®, SUPRANTATE JÄ„ IR SUTINKATE SU JOS SÄ„LYGOMIS. Jei nesutinkate, turÄ—kite galvoje, kad jums neleidžiama naudotis Paslauga.</p>
+
+<p></p>
+
+<h1>1. APIBRĖŽIMAI</h1>
+
+<p></p>
+
+<p>Interneto radijo stotimis vadinami subjektai, kurie išleidžia ir srautinės transliacijos būdu platina garso medžiagą bei susijusią papildomą informaciją (metaduomenis) internetu.</p>
+
+<p></p>
+
+<p>Interneto radijo stoties nuoroda reiškia adresą ar adresų rinkinį, kuriuo vartotojas gali gauti interneto radijo stoties transliuojamos medžiagos.</p>
+
+<p></p>
+
+<h1>2. PASLAUGA</h1>
+
+<p></p>
+
+<p>Naudojantis Paslauga, galima:</p>
+<p>1) narÅ¡yti interneto radijo stoÄių nuorodas;</p>
+<p>2) gauti interneto radijo stoÄių transliuojamos medžiagos.</p>
+
+<p></p>
+
+<h1>3. PASLAUGOS NAUDOJIMAS</h1>
+
+<p></p>
+
+<p>Paslauga galite naudotis tik savo asmeniniais ir nekomerciniais tikslais. „Nokia“ bus visų Paslaugos ir su ja susijusių intelektinės nuosavybės teisių savininkė.</p>
+
+<p></p>
+
+<p>„Nokia“ pasilieka teisę pakeisti šias nuostatas ir sąlygas, pateikusi jums informaciją apie tokį pakeitimą.</p>
+
+<p></p>
+
+<h1>4. PRIVATUMAS</h1>
+
+<p></p>
+
+<p>„Nokia“ įsipareigoja saugoti vartotojo privatumą įgyvendindama griežtas slaptumo taisykles.</p>
+
+<p></p>
+
+<p>Siekdama stebėti, kaip naudojamasi Paslauga, ir ją gerinti, „Nokia“ gali rinkti įvairius Paslaugos naudojimo duomenis: informaciją apie interneto radijo stotis, prie kurių buvo prisijungta, kiekvieno tokio prisijungimo trukmę, kas buvo pasirinkta kaip mėgstama ir kt.</p>
+
+<p></p>
+
+<p>„Nokia“ nerenka jokios informacijos, iš kurios būtų įmanoma atpažinti Paslaugos vartotoją.</p>
+
+<p></p>
+
+<h1>5. PASLAUGOS PRIEINAMUMAS</h1>
+
+<p></p>
+
+<p>Paslauga teikiama jūsų patogumui kaip papildoma priemonė. Ji teikiama esamos būsenos ir esamo prieinamumo. „Nokia“ negarantuoja, kad Paslauga bus teikiama nepertraukiamai ar be klaidų. „Nokia†pasilieka teisę bet kada Paslaugą peržiūrėti arba nutraukti prieigą prie jos.</p>
+
+<p></p>
+
+<p>Su Paslauga susijusių programų atnaujinimus „Nokia“ gali tiekti savo vienašališku sprendimu.</p>
+
+<p></p>
+
+<h1>6. ATSAKOMYBÄ– IR JOS APRIBOJIMAI</h1>
+
+<p></p>
+
+<p>Kad galÄ—tumÄ—te lengviau rasti interneto radijo stotis, kurių savininkÄ—s arba valdytojos yra treÄiosios Å¡alys, „Nokia“ gali pateikti tokių stoÄių nuorodų. „Nokia“ negarantuoja, kad interneto radijo stoÄių nuorodos veiks. Be to, su „Nokia“ nesusijusi medžiaga jokiu bÅ«du nereiÅ¡kia, kad „Nokia“ tarpininkauja dÄ—l jos arba dÄ—l Å¡ioje medžiagoje nurodytų gaminių ar paslaugų.</p>
+
+<p></p>
+
+<p>PrieÅ¡ prisijungdami prie kiekvienos stoties, turite peržiÅ«rÄ—ti ir sutikti su jos naudojimo taisyklÄ—mis. JÅ«s taip pat sutinkate, kad „Nokia“ nevaldo treÄiųjų Å¡alių paslaugų turinio ir negali prisiimti jokios atsakomybÄ—s dÄ—l interneto radijo stoÄių pateikiamos medžiagos.</p>
+
+<p></p>
+
+<p>Naudojantis su Paslauga susijusių interneto radijo stoÄių medžiaga, jÅ«sų paslaugų teikÄ—jo tinklu gali bÅ«ti perduodami dideli duomenų kiekiai. Informacijos apie duomenų perdavimo mokesÄius kreipkitÄ—s į savo paslaugų teikÄ—jÄ…. TurÄ—kite galvoje, kad naudojantis Paslauga ir prisijungiant prie interneto radijo stoÄių, kurios transliuoja didesne sparta, dÄ—l didesnio duomenų srauto galite patirti didesnių iÅ¡laidų.</p>
+
+<p></p>
+
+<p>Naudojantis Paslauga, gali bÅ«ti perduodami įvairÅ«s duomenų srautai: stoÄių katalogo turinio atnaujinimas, interneto radijo stoties srautinÄ— transliacija, statistinių duomenų rinkimas, interneto radijo programos atnaujinimas ir kt.</p>
+
+<p></p>
+
+<p>„Nokia“ neatsako už išlaidas dėl perduodamų duomenų srauto, kurias patyrėte naudodamiesi Paslauga.</p>
+
+<p></p>
+
+<p>DĖL ŠIOS PASLAUGOS PRIEINAMUMO, TIKSLUMO, PATIKIMUMO AR TURINIO NEPATEIKIAME JOKIOS GARANTIJOS, NEI KONKREČIAI IŠREIKŠTOS, NEI NUMANOMOS, BE KITŲ GARANTIJŲ ĮSKAITANT NUOSAVYBĖS AR NEPAŽEIDŽIAMUMO GARANTIJAS ARBA NUMANOMAS TINKAMUMO PREKYBAI AR TAM TIKRAM TIKSLUI GARANTIJAS. „NOKIA“ NEBUS ATSAKINGA UŽ TIESIOGINIUS, NETIESIOGINIUS, NETYČINIUS, TYČINIUS AR PASEKMINIUS NUOSTOLIUS, NEGAUTĄ PELNĄ AR VERSLO SUSTABDYMĄ DĖL PASLAUGOS NAUDOJIMO AR NEGALĖJIMO JĄ NAUDOTI, NET JEIGU „NOKIA“ BUVO PERSPĖTA APIE TOKIŲ NUOSTOLIŲ GALIMYBĘ. KAI KURIOSE ADMINISTRACINĖSE TERITORIJOSE NELEIDŽIAMA IŠSKIRTI TAM TIKRŲ GARANTIJŲ AR ATSAKOMYBĖS APRIBOJIMŲ, TODĖL ANKSČIAU APRAŠYTI APRIBOJIMAI AR IŠSKIRTINUMAI JUMS GALI BŪTI NETAIKOMI. TOKIU ATVEJU „NOKIA“ ATSAKOMYBĖ BUS RIBOJAMA TIEK, KIEK DAUGIAUSIA LEIDŽIAMA ĮSTATYMŲ.</p>
+
+<p></p>
+
+<p>ÄŒia pateiktos sÄ…lygos negali apriboti jokių įstatyminių vartotojų teisių. Jokios Äia pateiktos sÄ…lygos neapriboja „Nokia“ atsakomybÄ—s mirties ar sužeidimo dÄ—l bendrovÄ—s „Nokia“ neatsargumo atveju.</p>
+
+<p></p>
+
+<h1>7. VEIKSMAI KILUS ĮTARIMAMS DĖL AUTORINIŲ TEISIŲ PAŽEIDIMŲ</h1>
+
+<p></p>
+
+<p>Jei manote, kad jūsų autorinių teisių apsaugotu darbu buvo pasinaudota pažeidžiant autorines teises, galite pranešti apie tai bendrovei „Nokia“ ir pateikti šią informaciją:</p>
+
+<p></p>
+
+<p>1) tikrą arba elektroninį asmens, kuriam suteiktas įgaliojimas veikti išskirtinės teisės, kuri yra įtariama esanti pažeista, savininko vardu, parašą;</p>
+
+<p></p>
+
+<p>2) autorinių teisių saugomo darbo, kurio teisės, kaip įtariama, yra pažeistos, tapatybės informaciją arba aprašą;</p>
+
+<p></p>
+
+<p>3) medžiagos, kuri, kaip įtariama, pažeidė teises, tapatybės informaciją arba aprašą ir informaciją, kurios pakanka tokiai medžiagai rasti;</p>
+
+<p></p>
+
+<p>4) savo vardą, pavardę, adresą, telefono numerį, el. pašto adresą ir bet kokią kitą informaciją, kuria naudodamasi „Nokia“ galės su jumis susisiekti;</p>
+
+<p></p>
+
+<p>5) pareiškimą, kad sąžiningai tikite, jog medžiagos naudoti nurodytu būdu autorinių teisių savininkas, jo agentas arba įstatymas neleido;</p>
+
+<p></p>
+
+<p>6) pareiškimą, kad pranešime pateikta informacija yra tiksli ir, žinodami apie atsakomybę už melagingus parodymus, kad esate įgaliotas veikti išskirtinės teisės, kuri yra įtariama esanti pažeista, savininko vardu.</p>
+
+<p></p>
+
+<p>Pranešimą reikia siųsti mūsų specialiajam agentui šiuo adresu:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. TAIKOMA TEISÄ–</h1>
+
+<p></p>
+
+<p>Å iose nuostatose ir sÄ…lygose „Nokia“ reiÅ¡kia „Nokia Corporation“. „Nokia“ veikia ir valdo PaslaugÄ… iÅ¡ Suomijoje esanÄių vietų. Laikoma, kad Äia esanti informacija apie PaslaugÄ… yra pateikta Suomijoje.</p>
+
+<p></p>
+
+<p>© „Nokia Corporation“, 2006. Visos teisės išsaugotos.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/70/internetradio_70.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Sentiasa tanya"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N stesen disimpan"
+#define qtn_ir_added_single "%U[87] disimpan"
+#define qtn_ir_addmanually_unnamed "Tidak bernama"
+#define qtn_ir_addst_description "Penerangan"
+#define qtn_ir_addst_streamurl "URL strim"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio tidak aktif"
+#define qtn_ir_app_general_err "Ralat dalaman. Mulakan semula aplikasi."
+#define qtn_ir_apps_grid "Radio Intrnt"
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Kualiti terbaik"
+#define qtn_ir_bitrate_high "Berkualiti tinggi"
+#define qtn_ir_bitrate_standard "Kualiti standard"
+#define qtn_ir_cost_heading "Notis penting"
+#define qtn_ir_cost_softkey_continue "Teruskan"
+#define qtn_ir_cost_softkey_exit "Keluar"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet menggunakan sambungan data telefon anda untuk pemancaran radio. Ini hanya disyorkan jika anda mempunyai pelan data bayaran tetap. Jika anda tidak pasti tentang kos data anda, periksa dengan operator anda sebelumnya meneruskan."
+#define qtn_ir_country_list_expanded "%N stesen"
+#define qtn_ir_countryregion_title "Negara/wilayah"
+#define qtn_ir_discover_beststations "Pilih stesen terbaik"
+#define qtn_ir_discover_country_region "S/imbs ikt negara/wilayh"
+#define qtn_ir_discover_genre "Semak imbas ikut genre"
+#define qtn_ir_discover_genre_expanded "Stesen disusun ikut genre"
+#define qtn_ir_discover_langauge "Semak imbas ikut bahasa"
+#define qtn_ir_discover_language_expanded "Stesen disusun ikut bahasa"
+#define qtn_ir_discover_staticountryreg "Stsn diisih m'ikt negara/r'tau"
+#define qtn_ir_discover_title "Direktori stesen"
+#define qtn_ir_discover_top "Stesen paling popular"
+#define qtn_ir_edit_title "Edit stesen"
+#define qtn_ir_err_operation "Ralat dalam operasi. Cuba lagi."
+#define qtn_ir_err_url_unavail "URL tidak tersedia"
+#define qtn_ir_error_address "Alamat stesen radio Internet yang tidak betul"
+#define qtn_ir_error_connection "Sambungan tamat masa. Cuba lagi."
+#define qtn_ir_error_favourites "Tidak cukup ruang dalam kegemaran untuk menyimpan pilihan"
+#define qtn_ir_error_general "Gagal menyambung kepada stesen"
+#define qtn_ir_error_isds_unavailable "Perkhidmatan direktori stesen Internet tidak tersedia untuk sementara waktu"
+#define qtn_ir_error_notavailable "Tiada pautan penstriman tersedia"
+#define qtn_ir_error_notinisds "Item tidak lagi tersedia"
+#define qtn_ir_error_search "Masukkan istilah carian"
+#define qtn_ir_findst_addstation "Tmbh stsn s'cra manual"
+#define qtn_ir_findst_addtofav "T'bah stesen anda ke kegmrn"
+#define qtn_ir_findst_browsesds "S/imbas direktori stesen"
+#define qtn_ir_findst_search_ensrhterm "Masukkan istilah carian"
+#define qtn_ir_findst_softkey_search "Cari"
+#define qtn_ir_findstation_title "Cari stesen"
+#define qtn_ir_firstuse_title "Radio Intr.: S/Dtng"
+#define qtn_ir_genre_list_expanded "%N stesen"
+#define qtn_ir_genre_title "Genre"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Tiada sejarah"
+#define qtn_ir_homescreen_buffering "Menimbal"
+#define qtn_ir_homescreen_lastplayed "T'akhir dimainkn"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Negara/Wilayah:"
+#define qtn_ir_info_details_description "Penerangan:"
+#define qtn_ir_info_details_genre "Genre:"
+#define qtn_ir_info_details_language "Bahasa:"
+#define qtn_ir_info_details_name "Nama:"
+#define qtn_ir_info_details_streams "Strim:"
+#define qtn_ir_info_details_title "Mklumat stesen"
+#define qtn_ir_info_details_type "Jenis:"
+#define qtn_ir_info_details_type_isds "D'ktr stsn"
+#define qtn_ir_info_details_type_manual "T'rfn p'gn"
+#define qtn_ir_info_details_unnamed "Tdk b'nm."
+#define qtn_ir_info_softkey_close "Tutup"
+#define qtn_ir_language_list_expanded "%N stesen"
+#define qtn_ir_language_title "Bahasa"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Memuat"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Mencari"
+#define qtn_ir_main_descriptive_text "Gunakan 'Cari stesen' dr bar alat utk m'nmbh stsn"
+#define qtn_ir_main_discover_expanded "Temui stesen radio baru"
+#define qtn_ir_main_last "T'akhir dimainkn"
+#define qtn_ir_main_now "Kini dimainkan"
+#define qtn_ir_main_prog_deleting "Memadam %N"
+#define qtn_ir_main_searchindir "Cari dalam direktori"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Stesen tdk b'nma"
+#define qtn_ir_memlo_ram_out_of_mem "Tidak cukup memori untuk menjalankan operasi. Padam sesetengah data dulu."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Stesen seterusnya"
+#define qtn_ir_now_tooltip_play "Main"
+#define qtn_ir_now_tooltip_previous "Stesen sebelumnya"
+#define qtn_ir_now_tooltip_stop "Henti"
+#define qtn_ir_now_wait_buffering "Menimbal"
+#define qtn_ir_now_wait_buffering_perc "Menimbal %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Tiada sambungan rangkaian"
+#define qtn_ir_nwcontroller_err_nosnaps "Tiada pusat akses ditentukan"
+#define qtn_ir_options_add "Tamb. pd. Kegemaran"
+#define qtn_ir_options_add_manually "Tmbh stsn s'cra manual"
+#define qtn_ir_options_change "Tukar"
+#define qtn_ir_options_clearhistory "Kosongkan sejarah"
+#define qtn_ir_options_editstation "Edit stesen"
+#define qtn_ir_options_equalizer "Penyama"
+#define qtn_ir_options_exit "Keluar"
+#define qtn_ir_options_findnmusicstore "Cari dalam Kedai muzik"
+#define qtn_ir_options_fmtrans "Pemancar FM"
+#define qtn_ir_options_gotomusicstore "Pergi ke Kedai muzik"
+#define qtn_ir_options_help "Bantuan"
+#define qtn_ir_options_history "Sejarah"
+#define qtn_ir_options_info "Maklumat stesen"
+#define qtn_ir_options_mainview "Pergi ke paparan utama"
+#define qtn_ir_options_mark "Tanda"
+#define qtn_ir_options_markall "Tanda semua"
+#define qtn_ir_options_markunmark "Tanda/Buang tanda"
+#define qtn_ir_options_now "Pergi ke Kini dimainkan"
+#define qtn_ir_options_off "Tak aktif"
+#define qtn_ir_options_on "Aktif"
+#define qtn_ir_options_searchag "Cari lagi"
+#define qtn_ir_options_select "Pilih"
+#define qtn_ir_options_settings "Tetapan"
+#define qtn_ir_options_station "Stesen"
+#define qtn_ir_options_stereowidening "Perluasan stereo"
+#define qtn_ir_options_unmark "Buang tanda"
+#define qtn_ir_options_unmarkall "Buang semua tanda"
+#define qtn_ir_playfail_err "Gagal main balik radio"
+#define qtn_ir_playlist_title "P'tn yg diterima"
+#define qtn_ir_popup_no_results "Tiada hasil dijumpai"
+#define qtn_ir_popup_toomany_results "Terlalu banyak hasil. Perhaluskan istilah carian anda."
+#define qtn_ir_results_none "Tiada stesen radio sepadan yang ditemui. Cari lagi."
+#define qtn_ir_search_result "%0U[12]:%1N hasil"
+#define qtn_ir_search_results "%0U[11]:%1N hasil"
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Kadar bit sambungan 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Kadar bit sambungn GPRS"
+#define qtn_ir_settings_network "Sambungan rangkaian"
+#define qtn_ir_settings_snap_default "Sambungan lalai"
+#define qtn_ir_settings_title "Tetapan"
+#define qtn_ir_settings_wifi "Kadar bit sambungn Wi-Fi"
+#define qtn_ir_softkey_back "Balik"
+#define qtn_ir_softkey_cancel "Batal"
+#define qtn_ir_softkey_done "Selesai"
+#define qtn_ir_softkey_no "Tidak"
+#define qtn_ir_softkey_options "Pilihan"
+#define qtn_ir_softkey_select "Pilih"
+#define qtn_ir_softkey_yes "Ya"
+#define qtn_ir_station_saved "Stesen disimpan"
+#define qtn_ir_stationlist_nomatches "(tiada padanan)"
+#define qtn_ir_stations_popup_delete "Padam\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Padam %N stesen?"
+#define qtn_ir_stations_popup_removed "%U[88] dipadam"
+#define qtn_ir_stations_popup_removed_many "%N stesen dipadam"
+#define qtn_ir_stations_popup_save "Simpan stesen ke kegemaran?"
+#define qtn_ir_suboptions_delete "Padam"
+#define qtn_ir_suboptions_details "Butiran"
+#define qtn_ir_suboptions_move "Pindah"
+#define qtn_ir_terms_details "Dengan bersetuju pada Terma dan Syarat di bawah anda memasuki kontrak ke takat yang diizinkan oleh undang-undang yang boleh diguna pakai dan tidak dihadkan atau dihalang selanjutnya berkaitan dengan semua hak bahan"
+#define qtn_ir_terms_heading "Terma dan Syarat"
+#define qtn_ir_terms_softkey_accept "Terima"
+#define qtn_ir_terms_softkey_decline "Tolak"
+#define qtn_ir_title_history "Sejarah"
+#define qtn_ir_tooltip_addalltofav "T'bh semua ke kgmrn"
+#define qtn_ir_tooltip_addstation "T'bh stsn s'cra manual"
+#define qtn_ir_tooltip_addtofav "Tmbah ke kegemaran"
+#define qtn_ir_tooltip_copy "Salin"
+#define qtn_ir_tooltip_findnstore "Cari dalm Kedai muzik"
+#define qtn_ir_tooltip_findst "Cari stesen"
+#define qtn_ir_tooltip_history "Sejarah"
+#define qtn_ir_tooltip_listen "Dengar"
+#define qtn_ir_tooltip_paste "Tampal"
+#define qtn_ir_tooltip_stationde "Butiran stesen"
+#define qtn_ir_top_title "Stsn plng poplr"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nama"
+#define qtn_ir_url_title "Tambah stesen"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/70/internetradioai_70.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/70/terms_70.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Khidmat Nokia Internet Radio (“Khidmatâ€) membolehkan anda mengetahui dan mengalami kandungan stesen radio internet. ANDA BERSETUJU BAHAWA DENGAN PENGGUNAAN KHIDMAT INI MENGESAHKAN BAHAWA ANDA TELAH MEMBACA PERJANJIAN INI, MEMAHAMINYA, DAN BERSETUJU UNTUK TERIKAT KEPADA TERMA DAN SYARATNYA. Jika anda tidak bersetuju, sila maklum bahawa anda tidak dibenarkan untuk menggunakan Khidmat.</p>
+
+<p></p>
+
+<h1>1. DEFINISI</h1>
+
+<p></p>
+
+<p>Stesen radio internet bermakna entiti yang pada amnya mengeluarkan dan mengedarkan kandungan audio dan metadata berkaitan melalui internet dalam strim.</p>
+
+<p></p>
+
+<p>Pautan ke stesen radio internet bermakna pencari sumber atau set pencari sumber yang membolehkan pengguna untuk mengakses kandungan yang distrimkan oleh stesen radio internet.</p>
+
+<p></p>
+
+<h1>2. KHIDMAT</h1>
+
+<p></p>
+
+<p>Khidmat membolehkan yang berikut:</p>
+<p>1. menyemak seimbas pautan ke stesen radio internet;</p>
+<p>2. mengakses kandungan stesen radio internet;</p>
+
+<p></p>
+
+<h1>3. PENGGUNAAN KHIDMAT</h1>
+
+<p></p>
+
+<p>Penggunaan khidmat dibenarkan hanya untuk penggunaan persendirian anda dan bukan komersial. Nokia akan memiliki semua hak harga intelektual dalam dan kepada Khidmat.</p>
+
+<p></p>
+
+<p>Nokia merizabkan hak untuk menukar terma dan syarat dengan memaklumkan anda perubahan tersebut.</p>
+
+<p></p>
+
+<h1>4. PRIVASI</h1>
+
+<p></p>
+
+<p>Nokia adalah komited untuk melindungi privasi pengguna dengan melaksanakan dasar rahsia yang kukuh.</p>
+
+<p></p>
+
+<p>Untuk memantau penggunaan dan meningkatkan Khidmat, Nokia mungkin mengumpul data termasuk tetapi tidak terhad kepada, maklumat tentang stesen radio internet yang diakses, masa yang digunakan dan item ditaraf sebagai kegemaran.</p>
+
+<p></p>
+
+<p>Nokia tidak mengumpul apa-apa maklumat yang membolehkan pengenalan pengguna Khidmat.</p>
+
+<p></p>
+
+<h1>5. KETERSEDIAAN KHIDMAT.</h1>
+
+<p></p>
+
+<p>Khidmat disediakan sebagai kemudahan kepada anda. Ia disediakan "sedia ada†dan pada asas “sebagaimana tersediaâ€. Vendor tidak menjamin bahawa Khidmat tidak akan terganggu atau tanpa ralat. Nokia merizabkan hak untuk menyemak Khidmat atau menarik balik akses kepadanya pada bila-bila masa.</p>
+
+<p></p>
+
+<p>Nokia mungkin menyediakan naik taraf untuk Khidmat berkaitan aplikasi perisian mengikut budi bicara mutlak.</p>
+
+<p></p>
+
+<h1>6. PENAFIAN DAN LIABILITI</h1>
+
+<p></p>
+
+<p>Untuk akses mudah anda, Nokia mungkin memasukkan pautan kepada stesen radio internet yang dimiliki atau dikendalikan oleh pihak ketiga. Nokia tidak menjamin bahawa pautan kepada stesen radio internet akan beroperasi. Selain itu, kandungan yang tidak berkaitan dengan Nokia tidak tersirat dengan apa jua Nokia endors kandungan sedemikian atau produk atau perkhidmatan yang dirujuk dalam kandungan sedemikian.</p>
+
+<p></p>
+
+<p>Anda mesti menyemak dan bersetuju kepada setiap peraturan penggunaan stesen, sebelum mengaksesnya. Anda mesti bersetuju bahawa Nokia tidak mempunyai kawalan ke atas kandungan perkhidmatan pihak ketiga dan tidak bertanggungjawab untuk kandungan yang disediakan oleh stesen radio internet.</p>
+
+<p></p>
+
+<p>Mengakses kandungan stesen radio internet menggunakan Khidmat mungkin melibatkan penghantaran jumlah data yang besar melalui rangkaian pembekal khidmat anda.  Hubungi penyedia khidmat anda bagi maklumat selanjutnya tentang bayaran penghantaran data. Sila maklum bahawa menggunakan Khidmat dengan stesen radio internet yang menyediakan strim kadar bit lebih tinggi mungkin menanggung kos lebih tinggi berkaitan dengan trafik data.</p>
+
+<p></p>
+
+<p>Trafik data berkaitan dengan penggunaan Khidmat mungkin termasuk sekurang-kurangnya yang berikut: Mengemas kini kandungan direktori stesen, menstrim data dari stesen radio internet, mengumpul data statistik dan menaik taraf aplikasi radio internet.</p>
+
+<p></p>
+
+<p>Nokia tidak bertanggungjawab untuk kos berkaitan trafik data dengan penggunaan Khidmat anda.</p>
+
+<p></p>
+
+<p>TIDAK ADA SEBARANG BENTUK JAMINAN, SAMA ADA TERSURAT ATAU TERSIRAT, TERMASUK, TETAPI TIDAK TERHAD KEPADA JAMINAN HAK MILIK ATAU KETIDAKLANGGARAN ATAU JAMINAN TERSIRAT MENGENAI KEBOLEHJUALAN DAN KESESUAIAN BAGI TUJUAN TERTENTU, DIBUAT BERKAITAN KETERSEDIAAN, KETEPATAN, BOLEH DIHARAP ATAU KANDUNGAN KHIDMAT. NOKIA TIDAK AKAN BERTANGGUNGJAWAB BAGI APA-APA KERUGIAN LANGSUNG, TIDAK LANGSUNG, BERKAITAN DENGAN, KHAS ATAU AKIBAT DARIPADA, KEHILANGAN KEUNTUNGAN ATAU GANGGUAN PERNIAGAAN YANG TIMBUL DARIPADA PENGGUNAAN ATAU TIDAK UPAYA MENGGUNAKAN KHIDMAT, WALAU PUN NOKIA TELAH DINASIHATKAN KEMUNGKINAN KEROSAKAN TERSEBUT. SESETENGAH BIDANG KUASA TIDAK MEMBENARKAN KETIDAKMASUKAN JAMINAN TERTENTU ATAU PEMBATASAN LIABILITI, MAKA PEMBATASAN ATAU KETIDAKMASUKAN DI ATAS MUNGKIN TIDAK TERPAKAI KEPADA ANDA. LIABILITI NOKIA AKAN DALAM HAL TERSEBUT ADALAH TERBATAS KEPADA TAKAT PALING BESAR YANG DIBENARKAN OLEH UNDANG-UNDANG.</p>
+
+<p></p>
+
+<p>Tidak ada sesuatu yang terkandung di dalam Perjanjian ini akan memprejudiskan hak-hak statutori mana-mana pihak yang berurusan sebagai seorang pengguna. Tidak ada sesuatu yang terkandung di dalam Perjanjian ini membatas liabiliti Nokia sekiranya berlaku kematian atau kecederaan diri akibat kecuaian Nokia.</p>
+
+<p></p>
+
+<h1>7. POLISI MENGENAI DAKWAAN PELANGGARAN HAK CIPTA</h1>
+
+<p></p>
+
+<p>Jika anda percaya bahawa kerja hak dicipta telah dikendalikan dalam cara yang membentuk pelanggaran hak cipta, anda boleh memaklumkan Nokia dengan menyediakan pemberitahuan termasuk yang berikut:</p>
+
+<p></p>
+
+<p>(1) Tandatangan fizikal atau elektronik orang yang dibenarkan untuk bertindak bagi pihak pemilik hak eksklusif yang didakwa melanggar;</p>
+
+<p></p>
+
+<p>(2) Pengenalan atau penerangan kerja yang dihak cipta yang didakwa telah melanggar;</p>
+
+<p></p>
+
+<p>(3) Pengenalan atau penerangan bahan yang didakwa telah melanggar dan maklumat munasabah yang mencukupi untuk mengesan bahan;</p>
+
+<p></p>
+
+<p>(4) Nama anda, alamat, nombor telefon, alamat e-mel dan apa-apa maklumat lain yang akan membenarkan Nokia untuk menghubungi anda;</p>
+
+<p></p>
+
+<p>(5) Penyata yang mempunyai kepercayaan suci hati yang menggunakan bahan dengan cara yang didakwa tidak dibenarkan oleh pemilik hak cipta, ejennya, atau undang-undang, dan</p>
+
+<p></p>
+
+<p>(6) Penyataan bahawa maklumat dalam pemberitahuan adalah tepat, dan di bawah penalti sumpah bohong, bahawa anda dibenarkan untuk bertindak bagi pihak pemilik eksklusif yang didakwa dilanggar didakwa melanggar;</p>
+
+<p></p>
+
+<p>Pemberitahuan mesti dihantar kepada alamat Ejen yang Ditetapkan di:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. UNDANG-UNDANG MENTADBIR</h1>
+
+<p></p>
+
+<p>Sebagaimana yang digunakan dalam terma dan syarat ini, "Nokia" bermakna Nokia Corporation. Nokia mengendalikan dan mengawal Khidmat dari lokasi di Finland. Oleh yang demikian, maklumat yang terkandung pada Khidmat dengan ini dianggap disediakan di Finland.</p>
+
+<p></p>
+
+<p>Hak cipta © Nokia Corporation 2006. Semua hak-hak terpelihara.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/76/internetradio_76.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Sempre perguntar"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N estações salvas"
+#define qtn_ir_added_single "%U[88] foi salva"
+#define qtn_ir_addmanually_unnamed "Sem nome"
+#define qtn_ir_addst_description "Descrição"
+#define qtn_ir_addst_streamurl "URL da taxa de fluxo contínuo"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Rádio Internet"
+#define qtn_ir_ai_radio_not_active "Rádio não ativo"
+#define qtn_ir_app_general_err "Erro interno. Reinicie o aplicativo."
+#define qtn_ir_apps_grid "Rád. Intern."
+#define qtn_ir_apps_list "Rádio Internet"
+#define qtn_ir_apps_skey "Rádio Internet"
+#define qtn_ir_apps_standby "Rádio na Internet"
+#define qtn_ir_apps_swins "Rádio na Internet"
+#define qtn_ir_apps_wheel "Rádio Internet"
+#define qtn_ir_bitrate_best "Melhor qualidade"
+#define qtn_ir_bitrate_high "Alta qualidade"
+#define qtn_ir_bitrate_standard "Qualidade padrão"
+#define qtn_ir_cost_heading "Aviso importante"
+#define qtn_ir_cost_softkey_continue "Continuar"
+#define qtn_ir_cost_softkey_exit "Sair"
+#define qtn_ir_cost_title "Rádio Internet"
+#define qtn_ir_cost_warning "O rádio na Internet usa a conexão de dados do telefone para as transmissões de rádio. Isso só é recomendável se você tiver um plano de dados econômico. Se você não conhecer os custos do seu plano, verifique com a operadora antes de continuar."
+#define qtn_ir_country_list_expanded "%N estações"
+#define qtn_ir_countryregion_title "Países/regiões"
+#define qtn_ir_discover_beststations "Seleção melhores estações"
+#define qtn_ir_discover_country_region "Procurar por país/região"
+#define qtn_ir_discover_genre "Procurar por gênero"
+#define qtn_ir_discover_genre_expanded "Estações classific. por gênero"
+#define qtn_ir_discover_langauge "Procurar por idioma"
+#define qtn_ir_discover_language_expanded "Estações classific. por idioma"
+#define qtn_ir_discover_staticountryreg "Estações classif. país/região"
+#define qtn_ir_discover_title "Diret. estações"
+#define qtn_ir_discover_top "Estações em destaque"
+#define qtn_ir_edit_title "Editar estação"
+#define qtn_ir_err_operation "Erro na operação. Tente novamente."
+#define qtn_ir_err_url_unavail "URL indisponível"
+#define qtn_ir_error_address "Endereço de estação de rádio na Internet incorreto"
+#define qtn_ir_error_connection "Tempo da conexão esgotado. Tente novamente."
+#define qtn_ir_error_favourites "Espaço insuficiente na listas Favoritos para salvar a seleção"
+#define qtn_ir_error_general "Impossível conectar à estação"
+#define qtn_ir_error_isds_unavailable "Serviço de diretório de estações da Internet temporariamente indisponível"
+#define qtn_ir_error_notavailable "Nenhum link de taxa de fluxo contínuo disponível"
+#define qtn_ir_error_notinisds "O item não está mais disponível"
+#define qtn_ir_error_search "Digite um termo de pesquisa"
+#define qtn_ir_findst_addstation "Adic. estação manualm."
+#define qtn_ir_findst_addtofav "Adicionar estação a Favoritos"
+#define qtn_ir_findst_browsesds "Procurar em diret. estaçs."
+#define qtn_ir_findst_search_ensrhterm "Digite um termo de busca"
+#define qtn_ir_findst_softkey_search "Procurar"
+#define qtn_ir_findstation_title "Localizar estaçs."
+#define qtn_ir_firstuse_title "Rád. Inter.: Bem-vindo"
+#define qtn_ir_genre_list_expanded "%N estações"
+#define qtn_ir_genre_title "Gêneros"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Sem histórico"
+#define qtn_ir_homescreen_buffering "Armazenando"
+#define qtn_ir_homescreen_lastplayed "Último item reprod."
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/região:"
+#define qtn_ir_info_details_description "Descrição:"
+#define qtn_ir_info_details_genre "Gênero(s):"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nome:"
+#define qtn_ir_info_details_streams "Taxas fluxo cont.:"
+#define qtn_ir_info_details_title "Inform. estação"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "D. estaçs."
+#define qtn_ir_info_details_type_manual "Def. usuá."
+#define qtn_ir_info_details_unnamed "S/ nome"
+#define qtn_ir_info_softkey_close "Fechar"
+#define qtn_ir_language_list_expanded "%N estações"
+#define qtn_ir_language_title "Idiomas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Carregando"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Procurando"
+#define qtn_ir_main_descriptive_text "Use 'Localizar estaçs.' na barra fer. p/ adic. ests."
+#define qtn_ir_main_discover_expanded "Descubra novas estações"
+#define qtn_ir_main_last "Última reprod."
+#define qtn_ir_main_now "Em reprodução"
+#define qtn_ir_main_prog_deleting "Excluindo %N"
+#define qtn_ir_main_searchindir "Procurar em diretório"
+#define qtn_ir_main_title "Rádio Internet"
+#define qtn_ir_main_unnamed_station "Estação s/ nome"
+#define qtn_ir_memlo_ram_out_of_mem "Memória insuficiente para realizar a operação. Exclua primeiro alguns dados."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Próxima estação"
+#define qtn_ir_now_tooltip_play "Reproduzir"
+#define qtn_ir_now_tooltip_previous "Estação anterior"
+#define qtn_ir_now_tooltip_stop "Parar"
+#define qtn_ir_now_wait_buffering "Armazenando"
+#define qtn_ir_now_wait_buffering_perc "Armazenando %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Sem conexão com a rede"
+#define qtn_ir_nwcontroller_err_nosnaps "Nenhum ponto de acesso definido"
+#define qtn_ir_options_add "Adicionar a Favoritos"
+#define qtn_ir_options_add_manually "Adic. estação manualm."
+#define qtn_ir_options_change "Alterar"
+#define qtn_ir_options_clearhistory "Apagar histórico"
+#define qtn_ir_options_editstation "Editar estação"
+#define qtn_ir_options_equalizer "Equalizador"
+#define qtn_ir_options_exit "Sair"
+#define qtn_ir_options_findnmusicstore "Localizar na Loja música"
+#define qtn_ir_options_fmtrans "Transmissor FM"
+#define qtn_ir_options_gotomusicstore "Ir para a Loja de música"
+#define qtn_ir_options_help "Ajuda"
+#define qtn_ir_options_history "Histórico"
+#define qtn_ir_options_info "Inform. sobre a estação"
+#define qtn_ir_options_mainview "Ir para visualiz. principal"
+#define qtn_ir_options_mark "Marcar"
+#define qtn_ir_options_markall "Marcar todas"
+#define qtn_ir_options_markunmark "Marcar/desmarcar"
+#define qtn_ir_options_now "Ir para Em reprodução"
+#define qtn_ir_options_off "Desativado"
+#define qtn_ir_options_on "Ativado"
+#define qtn_ir_options_searchag "Procurar novamente"
+#define qtn_ir_options_select "Selecionar"
+#define qtn_ir_options_settings "Configurações"
+#define qtn_ir_options_station "Estação"
+#define qtn_ir_options_stereowidening "Estéreo"
+#define qtn_ir_options_unmark "Desmarcar"
+#define qtn_ir_options_unmarkall "Desmarcar todos"
+#define qtn_ir_playfail_err "Falha ao reproduzir rádio"
+#define qtn_ir_playlist_title "Links recebidos"
+#define qtn_ir_popup_no_results "Os resultados não foram encontrados"
+#define qtn_ir_popup_toomany_results "Muitos itens. Refine o termo de pesquisa."
+#define qtn_ir_results_none "Nenhuma estação correspondente encontrada. Busque de novo."
+#define qtn_ir_search_result "%0U[10]: %1N result."
+#define qtn_ir_search_results "%0U[09]: %1N resuls."
+#define qtn_ir_set_folder_internetradio "Rádio Internet"
+#define qtn_ir_set_folder_irradio "Rádio Internet"
+#define qtn_ir_settings_3g "Taxa de bits conexão 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Taxa bits conexão GPRS"
+#define qtn_ir_settings_network "Conexão com a rede"
+#define qtn_ir_settings_snap_default "Conexão padrão"
+#define qtn_ir_settings_title "Configurações"
+#define qtn_ir_settings_wifi "Taxa bits conexão Wi-Fi"
+#define qtn_ir_softkey_back "Voltar"
+#define qtn_ir_softkey_cancel "Cancelar"
+#define qtn_ir_softkey_done "Concluído"
+#define qtn_ir_softkey_no "Não"
+#define qtn_ir_softkey_options "Opções"
+#define qtn_ir_softkey_select "Selecionar"
+#define qtn_ir_softkey_yes "Sim"
+#define qtn_ir_station_saved "Estação salva"
+#define qtn_ir_stationlist_nomatches "(sem correspondências)"
+#define qtn_ir_stations_popup_delete "Excluir\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Excluir %N estações?"
+#define qtn_ir_stations_popup_removed "%U[88] excluída"
+#define qtn_ir_stations_popup_removed_many "%N estações excluídas"
+#define qtn_ir_stations_popup_save "Salvar estação em Favoritos?"
+#define qtn_ir_suboptions_delete "Excluir"
+#define qtn_ir_suboptions_details "Detalhes"
+#define qtn_ir_suboptions_move "Mover"
+#define qtn_ir_terms_details "Ao concordar com os Termos e condições abaixo, você assina um contrato até a extensão permitida pela legislação aplicável e não limitado ou proibido em relação a todos os direitos materiais"
+#define qtn_ir_terms_heading "Termos e condições"
+#define qtn_ir_terms_softkey_accept "Aceitar"
+#define qtn_ir_terms_softkey_decline "Recusar"
+#define qtn_ir_title_history "Histórico"
+#define qtn_ir_tooltip_addalltofav "Adic. todas a Favoritos"
+#define qtn_ir_tooltip_addstation "Adic. estaç. manualm."
+#define qtn_ir_tooltip_addtofav "Adicionar a Favoritos"
+#define qtn_ir_tooltip_copy "Copiar"
+#define qtn_ir_tooltip_findnstore "Localiz. na Loja música"
+#define qtn_ir_tooltip_findst "Localizar estações"
+#define qtn_ir_tooltip_history "Histórico"
+#define qtn_ir_tooltip_listen "Ouvir"
+#define qtn_ir_tooltip_paste "Colar"
+#define qtn_ir_tooltip_stationde "Detalhes da estação"
+#define qtn_ir_top_title "Estaçs. destaque"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nome"
+#define qtn_ir_url_title "Adicion. estação"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/76/internetradioai_76.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Rádio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/76/terms_76.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>O serviço de Rádio pela Internet da Nokia (“Serviçoâ€) permite a você conhecer e usar o conteúdo de estações de rádio pela Internet. VOCÊ CONCORDA QUE O FATO DE VOCÊ USAR O SERVIÇO INDICA QUE VOCÊ LEU E ENTENDEU ESTE CONTRATO E QUE CONCORDA EM CUMPRI-LO SEGUNDO SEUS TERMOS E CONDIÇÕES. Se você não concordar, note que você não terá permissão para usar o Serviço.</p>
+
+<p></p>
+
+<h1>1. DEFINIÇÕES</h1>
+
+<p></p>
+
+<p>As estações de rádio pela Internet significam pessoas jurídicas que, de modo geral, produzem e distribuem conteúdo de rádio e metadados a ele relacionados pela Internet em um fluxo.</p>
+
+<p></p>
+
+<p>O link para a estação de rádio pela Internet significa um localizador de recursos ou um conjunto de localizadores de recursos que possibilitam ao usuário o acesso ao conteúdo transmitido por fluxo pela estação de rádio pela Internet.</p>
+
+<p></p>
+
+<h1>2. O SERVIÇO</h1>
+
+<p></p>
+
+<p>O Serviço permite o seguinte:</p>
+<p>1. navegar por links a estações de rádio pela Internet;</p>
+<p>2. ter acesso ao conteúdo de estações de rádio pela Internet.</p>
+
+<p></p>
+
+<h1>3. USO DO SERVIÇO</h1>
+
+<p></p>
+
+<p>O uso do serviço é permitido somente para seu uso particular e não comercial. A Nokia será titular de todos os direitos de propriedade intelectual relativos ao Serviço.</p>
+
+<p></p>
+
+<p>A Nokia reserva-se o direito de alterar estes termos e condições mediante informação enviada a você sobre a respectiva alteração.</p>
+
+<p></p>
+
+<h1>4. PRIVACIDADE</h1>
+
+<p></p>
+
+<p>A Nokia está empenhada em proteger a privacidade do usuário através da implementação de políticas rigorosas de confidencialidade.</p>
+
+<p></p>
+
+<p>Para monitorar o uso e para melhorar o Serviço, a Nokia pode obter dados de uso, com inclusão, sem limitação, de informações sobre as estações de rádio pela Internet acessadas, o tempo empregado em cada estação e os artigos classificados como Favoritos.</p>
+
+<p></p>
+
+<p>A Nokia não obtém nenhuma informação que permita a identificação do usuário do Serviço.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILIDADE DO SERVIÇO</h1>
+
+<p></p>
+
+<p>O Serviço é oferecido a você como uma conveniência. Ele é oferecido "no estado em que está" e "conforme a disponibilidade". A Nokia não garante que o Serviço seja ininterrupto nem isento de erros. A Nokia reserva-se o direito de alterar o Serviço ou retirar o acesso a ele a qualquer momento.</p>
+
+<p></p>
+
+<p>A Nokia pode fornecer atualizações para os aplicativos relativos ao Serviço exclusivamente a seu critério.</p>
+
+<p></p>
+
+<h1>6. ISENÇÃO E RESPONSABILIDADE</h1>
+
+<p></p>
+
+<p>Para facilitar seu acesso, a Nokia pode incluir links a estações de rádio pela Internet que pertencem a terceiros ou que são operados por terceiros. A Nokia não garante que os links a estações de rádio pela Internet sejam operacionais. Além disso, o conteúdo que não é relativo à Nokia não implica de nenhuma forma que a Nokia aprova esse conteúdo nem os produtos ou serviços mencionados em tal conteúdo.</p>
+
+<p></p>
+
+<p>Antes de acessar uma estação, você deverá consultar as respectivas regras de uso e aceitá-las. Você também declara estar ciente de que a Nokia não tem controle sobre o conteúdo de serviços prestados por terceiros e não pode assumir nenhuma responsabilidade pelo conteúdo fornecido por estações de rádio pela Internet.</p>
+
+<p></p>
+
+<p>O acesso ao conteúdo de estações de rádio pela Internet por meio do Serviço pode acarretar a transmissão de grandes quantidades de dados através da rede do seu provedor de serviços de Internet. Entre em contato com o seu provedor de serviços para obter informações sobre as tarifas de transmissão de dados. Note que o uso do Serviço com estações de rádio pela Internet que forneçam a você fluxos com taxas de bits mais altas pode acarretar custos mais altos relativos ao tráfego de dados.</p>
+
+<p></p>
+
+<p>O tráfego de dados associado ao uso do Serviço pode incluir, no mínimo, uma das seguintes ações: atualização do diretório do conteúdo da estação, recebimento de fluxo de dados proveniente da estação de rádio pela Internet, levantamento de dados estatísticos e atualização do aplicativo de rádio pela Internet.</p>
+
+<p></p>
+
+<p>A Nokia não é responsável pelos custos de tráfego de dados relativos ao seu uso do Serviço.</p>
+
+<p></p>
+
+<p>NENHUMA GARANTIA DE NENHUM TIPO, SEJA EXPLÃCITA OU IMPLÃCITA, COM INCLUSÃO, SEM LIMITAÇÃO, DE GARANTIAS DE TITULARIDADE OU NÃO-INFRINGÊNCIA OU GARANTIAS IMPLÃCITAS DE MERCANTILIDADE OU ADEQUAÇÃO A UM PROPÓSITO DETERMINADO É OFERECIDA COM RELAÇÃO À DISPONIBILIDADE, EXATIDÃO, CONFIABILIDADE OU CONTEÚDO DO SERVIÇO. A NOKIA SÃO SERà RESPONSÃVEL POR NENHUM DANO DIRETO, INDIRETO, INCIDENTAL, ESPECIAL OU CONSEQÃœENTE, LUCROS CESSANTES OU POR INTERRUPÇÕES DE ATIVIDADES DECORRENTES DO USO OU DA INABILIDADE DE USO DO SERVIÇO, MESMO QUE A NOKIA TENHA SIDO ADVERTIDA DA POSSIBILIDADE DE OCORRÊNCIA DE TAIS DANOS. ALGUMAS JURISDIÇÕES NÃO PERMITEM EXCLUSÃO DE CERTAS GARANTIAS OU LIMITAÇÕES DE RESPONSABILIDADE, PORTANTO AS LIMITAÇÕES OU EXCLUSÕES ACIMA PODERÃO NÃO SE APLICAR A VOCÊ. NESSE CASO, A RESPONSABILIDADE DA NOKIA SERà LIMITADA À MÃXIMA EXTENSÃO PERMITIDA POR LEI.</p>
+
+<p></p>
+
+<p>Nada contido neste documento prejudicará os direitos garantidos por lei a qualquer parte que aja como consumidor. Nada contido neste documento limita a responsabilidade da Nokia na eventualidade de morte ou lesões corporais resultantes de negligência da Nokia.</p>
+
+<p></p>
+
+<h1>7. POLÃTICA RELATIVA A ALEGAÇÕES DE INFRINGÊNCIA DE COPYRIGHT</h1>
+
+<p></p>
+
+<p>Se você acreditar que um trabalho seu protegido por copyright tenha sido tratado de um modo que constitua infringência a copyright, você poderá enviar à Nokia notificação com o seguinte conteúdo:</p>
+
+<p></p>
+
+<p>(1) Uma assinatura física ou eletrônica de uma pessoa autorizada a atuar em nome do proprietário do direito exclusivo que supostamente tenha sido infringido;</p>
+
+<p></p>
+
+<p>(2) Identificação ou descrição do trabalho protegido por copyright que é objeto da alegação de ter sido infringido;</p>
+
+<p></p>
+
+<p>(3) Identificação ou descrição do material sob o qual pesa a alegação de causar a infringência e informações cabivelmente suficientes para localizar esse material;</p>
+
+<p></p>
+
+<p>(4) Seu nome, endereço, número de telefone, endereço de e-mail e qualquer outra informação que permita à Nokia entrar em contato com você;</p>
+
+<p></p>
+
+<p>(5) Uma declaração de que você acredita de boa-fé que o uso do material, do modo que é objeto da reclamação, não é autorizado pelo proprietário do direito autoral, seu agente nem por lei; e</p>
+
+<p></p>
+
+<p>(6) Uma declaração de que as informações contidas na notificação são precisas e, sob pena de perjúrio, de que você está autorizado a atuar em nome do proprietário de um direito exclusivo que supostamente foi infringido.</p>
+
+<p></p>
+
+<p>A notificação deve ser enviada ao nosso Agente Designado, cujo endereço é:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LEGISLAÇÃO APLICÃVEL</h1>
+
+<p></p>
+
+<p>A expressão "Nokia", como empregada nestes termos e condições, significa Nokia Corporation. A Nokia opera e controla o serviço de localidades situadas na Finlândia. Portanto, as informações sobre o Serviço contidas neste documento são consideradas fornecidas na Finlândia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Todos os direitos reservados.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/78/internetradio_78.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Întreabă întotdeauna"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N posturi memorate"
+#define qtn_ir_added_single "%U[87] memorat"
+#define qtn_ir_addmanually_unnamed "Fără nume"
+#define qtn_ir_addst_description "Descriere"
+#define qtn_ir_addst_streamurl "URL stream"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio inactiv"
+#define qtn_ir_app_general_err "Eroare internă. Reporniţi aplicaţia."
+#define qtn_ir_apps_grid "Radio Int."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio Internet"
+#define qtn_ir_apps_swins "Radio Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Calitate optimă"
+#define qtn_ir_bitrate_high "Calitate bună"
+#define qtn_ir_bitrate_standard "Calitate standard"
+#define qtn_ir_cost_heading "Notă importantă"
+#define qtn_ir_cost_softkey_continue "Continuare"
+#define qtn_ir_cost_softkey_exit "IeÅŸire"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "Radio Internet utilizează conexiunea de date a telefonului pentru transmisii radio. Aceasta se recomandă numai dacă aveţi un plan tarifar constant. Dacă nu sunteţi sigur care sunt costurile transmisiilor de date, luaţi legătura cu operatorul înainte de a continua."
+#define qtn_ir_country_list_expanded "%N posturi"
+#define qtn_ir_countryregion_title "Ţări/regiuni"
+#define qtn_ir_discover_beststations "Sel. cele mai bune posturi"
+#define qtn_ir_discover_country_region "Răsfoire după ţară/reg."
+#define qtn_ir_discover_genre "Răsfoire după gen"
+#define qtn_ir_discover_genre_expanded "Posturi sortate după gen"
+#define qtn_ir_discover_langauge "Răsfoire după limbă"
+#define qtn_ir_discover_language_expanded "Posturi sortate după limbă"
+#define qtn_ir_discover_staticountryreg "Posturi sort. după ţară/reg."
+#define qtn_ir_discover_title "Rep. posturi"
+#define qtn_ir_discover_top "Cele mai populare"
+#define qtn_ir_edit_title "Editare post"
+#define qtn_ir_err_operation "Eroare. Încercaţi din nou."
+#define qtn_ir_err_url_unavail "URL indisponibil"
+#define qtn_ir_error_address "Adresă post radio Internet incorectă"
+#define qtn_ir_error_connection "Conexiune expirată. Încercaţi din nou."
+#define qtn_ir_error_favourites "Spaţiu insuficient în preferinţe pentru a memora selecţia."
+#define qtn_ir_error_general "Imposibil de conectat la post"
+#define qtn_ir_error_isds_unavailable "Serviciul repertoar de posturi Internet este temporar indisponibil"
+#define qtn_ir_error_notavailable "Nicio legătură de streaming disponibilă"
+#define qtn_ir_error_notinisds "Articolul nu mai este disponibil"
+#define qtn_ir_error_search "Introduceţi un termen de căutat"
+#define qtn_ir_findst_addstation "Adăugare manuală post"
+#define qtn_ir_findst_addtofav "Adăugare post la preferinţe"
+#define qtn_ir_findst_browsesds "Răsfoire rep. posturi"
+#define qtn_ir_findst_search_ensrhterm "Introd. un termen căutat"
+#define qtn_ir_findst_softkey_search "Căutare"
+#define qtn_ir_findstation_title "Găsire posturi"
+#define qtn_ir_firstuse_title "Radio Int.: Bun venit"
+#define qtn_ir_genre_list_expanded "%N posturi"
+#define qtn_ir_genre_title "Genuri"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Istoric gol"
+#define qtn_ir_homescreen_buffering "Acumul. în mem."
+#define qtn_ir_homescreen_lastplayed "Ultimul ascultat"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Ţară/regiune:"
+#define qtn_ir_info_details_description "Descriere:"
+#define qtn_ir_info_details_genre "Genuri:"
+#define qtn_ir_info_details_language "Limbă:"
+#define qtn_ir_info_details_name "Nume:"
+#define qtn_ir_info_details_streams "Streaming:"
+#define qtn_ir_info_details_title "Info post"
+#define qtn_ir_info_details_type "Tip:"
+#define qtn_ir_info_details_type_isds "Rep. pst."
+#define qtn_ir_info_details_type_manual "Def. util."
+#define qtn_ir_info_details_unnamed "F. nume"
+#define qtn_ir_info_softkey_close "ÃŽnchidere"
+#define qtn_ir_language_list_expanded "%N posturi"
+#define qtn_ir_language_title "Limbi"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Încărcare în curs"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Căutare în curs"
+#define qtn_ir_main_descriptive_text "Ad. posturi cu „Găsire posturi†din bara de instr."
+#define qtn_ir_main_discover_expanded "Descoperiţi noi posturi radio"
+#define qtn_ir_main_last "Ultimul ascultat"
+#define qtn_ir_main_now "Redare în curs"
+#define qtn_ir_main_prog_deleting "Se ÅŸterge %N"
+#define qtn_ir_main_searchindir "Căutare în director"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Post fără nume"
+#define qtn_ir_memlo_ram_out_of_mem "Memorie insuficientă pentru efectuarea operaţiei. Ştergeţi mai întâi unele date."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Postul următor"
+#define qtn_ir_now_tooltip_play "Redare"
+#define qtn_ir_now_tooltip_previous "Postul anterior"
+#define qtn_ir_now_tooltip_stop "Stop"
+#define qtn_ir_now_wait_buffering "Acumulare în memorie"
+#define qtn_ir_now_wait_buffering_perc "Memorare temporară %N% în curs"
+#define qtn_ir_nwcontroller_err_noconnectivity "Lipsă conexiune la reţea"
+#define qtn_ir_nwcontroller_err_nosnaps "Niciun punct de acces definit"
+#define qtn_ir_options_add "Adăugare la Preferinţe"
+#define qtn_ir_options_add_manually "Adăugare manuală post"
+#define qtn_ir_options_change "Modificare"
+#define qtn_ir_options_clearhistory "Golire istoric"
+#define qtn_ir_options_editstation "Editare post"
+#define qtn_ir_options_equalizer "Egalizator"
+#define qtn_ir_options_exit "IeÅŸire"
+#define qtn_ir_options_findnmusicstore "Găsire în Mag. de muzică"
+#define qtn_ir_options_fmtrans "Emiţător FM"
+#define qtn_ir_options_gotomusicstore "Salt la Mag. de muzică"
+#define qtn_ir_options_help "Ajutor"
+#define qtn_ir_options_history "Istoric"
+#define qtn_ir_options_info "Informaţii post"
+#define qtn_ir_options_mainview "Salt la ecranul principal"
+#define qtn_ir_options_mark "Marcare"
+#define qtn_ir_options_markall "Marcare totală"
+#define qtn_ir_options_markunmark "Marcare/Anulare marcaj"
+#define qtn_ir_options_now "Salt la Se redă acum"
+#define qtn_ir_options_off "Dezactivare"
+#define qtn_ir_options_on "Activare"
+#define qtn_ir_options_searchag "Repetare căutare"
+#define qtn_ir_options_select "Selectare"
+#define qtn_ir_options_settings "Setări"
+#define qtn_ir_options_station "Post"
+#define qtn_ir_options_stereowidening "Stereo spaţial"
+#define qtn_ir_options_unmark "Anulare marcaj"
+#define qtn_ir_options_unmarkall "Anul. tut. marcaj."
+#define qtn_ir_playfail_err "Redare radio nereuşită"
+#define qtn_ir_playlist_title "Legăt. recepţ."
+#define qtn_ir_popup_no_results "Niciun rezultat"
+#define qtn_ir_popup_toomany_results "Prea multe rezultate. Rafinaţi termenul de căutare."
+#define qtn_ir_results_none "Nu s-a găsit niciun post potrivit. Căutaţi din nou."
+#define qtn_ir_search_result "%0U[09]:%1N rezultate"
+#define qtn_ir_search_results "%0U[08]:%1N rezultate"
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Rată de biţi conexiune 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Rată biţi conexiune GPRS"
+#define qtn_ir_settings_network "Conexiune de reţea"
+#define qtn_ir_settings_snap_default "Conexiune implicită"
+#define qtn_ir_settings_title "Setări"
+#define qtn_ir_settings_wifi "Rată biţi conexiune Wi-Fi"
+#define qtn_ir_softkey_back "ÃŽnapoi"
+#define qtn_ir_softkey_cancel "Anulare"
+#define qtn_ir_softkey_done "Realizat"
+#define qtn_ir_softkey_no "Nu"
+#define qtn_ir_softkey_options "Opţiuni"
+#define qtn_ir_softkey_select "Selectare"
+#define qtn_ir_softkey_yes "Da"
+#define qtn_ir_station_saved "Post memorat"
+#define qtn_ir_stationlist_nomatches "(nicio potrivire)"
+#define qtn_ir_stations_popup_delete "Ştergeţi\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Ştergeţi %N posturi?"
+#define qtn_ir_stations_popup_removed "%U[91] ÅŸters"
+#define qtn_ir_stations_popup_removed_many "%N posturi ÅŸterse"
+#define qtn_ir_stations_popup_save "Memoraţi postul în Preferinţe?"
+#define qtn_ir_suboptions_delete "Åžtergere"
+#define qtn_ir_suboptions_details "Detalii"
+#define qtn_ir_suboptions_move "Mutare"
+#define qtn_ir_terms_details "Dacă acceptaţi Termenii şi condiţiile de mai jos, încheiaţi un contract în limitele permise de legislaţia în vigoare, fără limitare sau interdicţii în privinţa drepturilor materiale"
+#define qtn_ir_terms_heading "Termeni şi condiţii"
+#define qtn_ir_terms_softkey_accept "Acceptare"
+#define qtn_ir_terms_softkey_decline "Refuz"
+#define qtn_ir_title_history "Istoric"
+#define qtn_ir_tooltip_addalltofav "Adăug. tuturor la pref."
+#define qtn_ir_tooltip_addstation "Adăug. manuală post"
+#define qtn_ir_tooltip_addtofav "Adăugare la preferinţe"
+#define qtn_ir_tooltip_copy "Copiere"
+#define qtn_ir_tooltip_findnstore "Găsire în Mag. de muz."
+#define qtn_ir_tooltip_findst "Găsire posturi"
+#define qtn_ir_tooltip_history "Istoric"
+#define qtn_ir_tooltip_listen "Ascultare"
+#define qtn_ir_tooltip_paste "Inserare"
+#define qtn_ir_tooltip_stationde "Detalii post"
+#define qtn_ir_top_title "Posturi pop."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nume"
+#define qtn_ir_url_title "Adăugare post"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/78/internetradioai_78.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/78/terms_78.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Serviciul Radio prin Internet oferit de Nokia („Serviciulâ€) vă permite să descoperiÅ£i ÅŸi să beneficiaÅ£i de conÅ£inutul posturilor radio care transmit prin Internet. SUNTEÅ¢I DE ACORD CU FAPTUL CÄ‚ UTILIZAREA SERVICIULUI REPREZINTÄ‚ O CONFIRMARE A FAPTULUI CÄ‚ AÅ¢I CITIT PREZENTUL CONTRACT, CÄ‚ ÃŽL ÃŽNÅ¢ELEGEÅ¢I ÅžI CÄ‚ SUNTEÅ¢I DE ACORD CU TERMENII ÅžI CONDIÅ¢IILE ACESTUIA. Dacă nu sunteÅ£i de acord, vă rugăm să reÅ£ineÅ£i că nu aveÅ£i dreptul de a utiliza Serviciul.</p>
+
+<p></p>
+
+<h1>1. DEFINIÅ¢II</h1>
+
+<p></p>
+
+<p>Posturile de radio care transmit prin Internet reprezintă entităţi care, în general, produc şi distribuie conţinut audio şi metadate conexe prin Internet.</p>
+
+<p></p>
+
+<p>Linkul către postul de radio cu transmisie prin Internet reprezintă un locator de resurse sau un set de locatori de resurse care permit utilizatorului să acceseze conţinutul difuzat de postul de radio cu transmisie prin Internet.</p>
+
+<p></p>
+
+<h1>2. SERVICIUL</h1>
+
+<p></p>
+
+<p>Serviciul permite următoarele:</p>
+<p>1. parcurgerea linkurilor către posturi de radio cu transmisie prin Internet;</p>
+<p>2. accesarea conţinutului posturilor de radio cu transmisie prin Internet;</p>
+
+<p></p>
+
+<h1>3. UTILIZAREA SERVICIULUI</h1>
+
+<p></p>
+
+<p>Utilizarea Serviciului este permisă numai pentru utilizare personală şi necomercială. Nokia va deţine toate drepturile de proprietate intelectuală asupra Serviciului şi legate de acesta.</p>
+
+<p></p>
+
+<p>Nokia îşi rezervă dreptul de a modifica termenii şi condiţiile prezente, informându-vă asupra modificării respective.</p>
+
+<p></p>
+
+<h1>4. CONFIDENÅ¢IALITATE</h1>
+
+<p></p>
+
+<p>Politica Nokia este aceea de protejare a confidenţialităţii utilizatorului prin implementarea unor politici de confidenţialitate ferme.</p>
+
+<p></p>
+
+<p>Pentru supravegherea utilizării şi pentru îmbunătăţirea Serviciului, Nokia poate colecta date referitoare la utilizare, inclusiv, dar fără a se limita la informaţii legate de posturile Internet accesate, intervalul de timp alocat fiecărui post şi articolele marcate ca favorite.</p>
+
+<p></p>
+
+<p>Nokia nu colectează niciun fel de informaţii care să permită identificarea utilizatorului serviciului.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILITATEA SERVICIULUI</h1>
+
+<p></p>
+
+<p>Serviciul vă este furnizat ca o facilitate pentru Dvs. El este furnizat „ca atare", în funcţie de „disponibilitate". Nokia nu garantează furnizarea serviciului fără întreruperi sau fără erori. Nokia îşi rezervă dreptul de a revizui Serviciul sau de a retrage dreptul de acces la acesta în orice moment.</p>
+
+<p></p>
+
+<p>Nokia poate furniza, după cum consideră necesar şi util, actualizări ale Serviciului legate de aplicaţii.</p>
+
+<p></p>
+
+<h1>6. RÄ‚SPUNDEREA ÅžI EXONERAREA DE RÄ‚SPUNDERE</h1>
+
+<p></p>
+
+<p>Pentru accesibilitate facilă, Nokia poate include linkuri către posturi de radio cu transmisie prin Internet, care sunt deţinute sau utilizate de terţe părţi. Nokia nu garantează că linkurile către posturile de radio cu emisie prin Internet vor fi funcţionale. În plus, conţinutul care nu are legătură cu Nokia nu implică în niciun fel faptul că Nokia sprijină conţinutul ca atare sau produsele şi serviciile legate de conţinutul respectiv.</p>
+
+<p></p>
+
+<p>Trebuie să parcurgeţi şi să fiţi de acord cu regulamentul de utilizare al fiecărui post, dacă este cazul, înainte de a-l accesa. Sunteţi, de asemenea, de acord cu faptul că Nokia nu deţine niciun fel de control asupra conţinutului serviciilor furnizate de terţe părţi şi că nu îşi poate asuma niciun fel de răspundere cu privire la conţinutul oferit de posturile radio cu transmisie prin Internet.</p>
+
+<p></p>
+
+<p>Accesarea conţinutului posturilor radio cu transmisie prin Internet prin intermediul Serviciului poate implica transmisia de cantităţi mari de date prin reţeaua furnizorului de servicii. Pentru informaţii referitoare la taxele de transmisie a datelor, contactaţi furnizorul Dvs. de servicii. Vă rugăm să reţineţi că utilizarea Serviciului pentru posturi radio cu transmisie prin Internet care au o viteză mai mare de transmisie a datelor poate implica o creştere a costurilor legată de traficul de date.</p>
+
+<p></p>
+
+<p>Traficul de date asociat cu utilizarea Serviciului poate include cel puţin următoarele: actualizarea conţinutului listei de posturi, transferul de date de la postul de radio cu transmisie prin Internet, colectarea de date statistice şi actualizarea aplicaţiei radio prin Internet.</p>
+
+<p></p>
+
+<p>Nokia nu este răspunzătoare pentru costurile de trafic de date asociate utilizării Serviciului de către Dvs.</p>
+
+<p></p>
+
+<p>NU SE OFERĂ NICIUN FEL DE GARANŢIE, NICI IMPLICITĂ, NICI EXPLICITĂ, INCLUSIV, DAR FĂRĂ A SE LIMITA LA GARANŢIILE DE TITLU SAU DE NEÎNCĂLCARE SAU GARANŢIILE IMPLICITE DE VANDABILITATE SAU ADECVARE PENTRU UN ANUMIT SCOP, CU PRIVIRE LA DISPONIBILITATEA, ACURATEŢEA, FIABILITATEA SAU CONŢINUTUL SERVICIULUI. NOKIA NU VA FI ŢINUTĂ RESPONSABILĂ PENTRU NICIUN FEL DE DAUNE, INDIRECTE, INCIDENTE, SPECIALE SAU SUBSEVCVENTE, PIERDERI DE PROFIT SAU ÎNTRERUPERI ALE ACTIVITĂŢII CAUZATE DE UTILIZAREA SERVICIULUI SAU CA URMARE A IMPOSIBILITĂŢII DE UTILIZARE A SERVICIULUI, CHIAR DACĂ NOKIA A FOST INFORMATĂ CU PRIVIRE LA POSIBILITATEA UNOR ASTFEL DE DAUNE. UNELE JURISDICŢII NU PERMIT EXCLUDEREA ANUMITOR GARANŢII SAU LIMITĂRI DE RĂSPUNDERE, ASTFEL ÎNCÂT ESTE POSIBIL CA LIMITĂRILE SAU EXCLUDERILE DE MAI SUS SĂ NU SE APLICE ÎN CAZUL DVS. RĂSPUNDEREA NOKIA VA FI LIMITATĂ, ÎN ACEST CAZ, ÎN LIMITELE MAXIME PERMISE DE LEGE.</p>
+
+<p></p>
+
+<p>Niciuna dintre prevederile prezentului document nu va prejudicia drepturile legale ale niciunei părţi, având calitatea de utilizator. Niciuna dintre prevederile prezentului document nu limitează răspunderea Nokia în caz de deces sau rănire personală survenite ca urmare a neglijenţei Nokia.</p>
+
+<p></p>
+
+<h1>7. POLITICA REFERITOARE LA DECLARAÅ¢IILE DE ÃŽNCÄ‚LCARE A DREPTURILOR DE AUTOR</h1>
+
+<p></p>
+
+<p>În cazul în care consideraţi că lucrările Dvs. aflate sub incidenţa drepturilor de autor au fost tratate într-un mod care reprezintă o încălcare a acestor drepturi, puteţi informa Nokia printr-o notificare incluzând:</p>
+
+<p></p>
+
+<p>(1) Semnătura fizică sau electronică a unei persoane autorizate să acţioneze în numele deţinătorului dreptului exclusiv despre care se presupune că a fost încălcat;</p>
+
+<p></p>
+
+<p>(2) Identificarea sau descrierea lucrărilor aflate sub incidenţa drepturilor de autor care se susţine că au fost încălcate;</p>
+
+<p></p>
+
+<p>(3) Identificarea sau descrierea materialului despre care se susţine că ar reprezenta o încălcare şi informaţii suficiente pentru localizarea materialului;</p>
+
+<p></p>
+
+<p>(4) Numele Dvs., adresa, numărul de telefon, adresa e-mail şi orice alte informaţii care vor permite Nokia să vă contacteze;</p>
+
+<p></p>
+
+<p>(5) O declaraţie că Dvs. consideraţi, de bună credinţă, că utilizarea materialului în modul reclamat nu este permisă de către deţinătorul drepturilor de autor, de reprezentantul acestuia, sau de lege; şi</p>
+
+<p></p>
+
+<p>(6) O declaraţie conform căreia informaţiile din notificare sunt corecte şi, sub incidenţa sancţiunilor aplicabile, Dvs. sunteţi autorizat să acţionaşi în numele deţinătorului unui drept exclusiv încălcat în mod evident.</p>
+
+<p></p>
+
+<p>Notificarea se va expedia la adresa reprezentantului nostru desemnat:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LEGISLAÅ¢IA APLICABILÄ‚</h1>
+
+<p></p>
+
+<p>În cadrul termenilor şi condiţiilor prezente, „Nokia" înseamnă Nokia Corporation. Nokia utilizează şi controlează Serviciul din locaţii din Finlanda. Ca atare, informaţiile cuprinse în Serviciu se consideră a fi furnizate în Finlanda.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. All rights reserved.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/79/internetradio_79.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Uvek pitaj"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "SaÄuvano stanica: %N"
+#define qtn_ir_added_single "SaÄuvana: %U[78]"
+#define qtn_ir_addmanually_unnamed "Neimen."
+#define qtn_ir_addst_description "Opis"
+#define qtn_ir_addst_streamurl "URL adresa strima"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Internet radio"
+#define qtn_ir_ai_radio_not_active "Radio nije aktivan"
+#define qtn_ir_app_general_err "Interna greška. Ponovo pokrenite aplikaciju."
+#define qtn_ir_apps_grid "Intern. radio"
+#define qtn_ir_apps_list "Internet radio"
+#define qtn_ir_apps_skey "Internet radio"
+#define qtn_ir_apps_standby "Internet radio"
+#define qtn_ir_apps_swins "Internet radio"
+#define qtn_ir_apps_wheel "Internet radio"
+#define qtn_ir_bitrate_best "Najbolji kvalitet"
+#define qtn_ir_bitrate_high "Visok kvalitet"
+#define qtn_ir_bitrate_standard "Standardni kv."
+#define qtn_ir_cost_heading "Važna napomena"
+#define qtn_ir_cost_softkey_continue "Nastavi"
+#define qtn_ir_cost_softkey_exit "Izađi"
+#define qtn_ir_cost_title "Internet radio"
+#define qtn_ir_cost_warning "Internet radio povezuje se sa podacima u vaÅ¡em telefonu za emitovanje radio programa. Ovo se preporuÄuje samo ukoliko imate plan o korišćenju podataka sa osnovnom cenom. Ukoliko niste sigurni kolika je cena vaÅ¡ih podataka, obratite se operateru pre nego Å¡to nastavite."
+#define qtn_ir_country_list_expanded "Stanica: '%N"
+#define qtn_ir_countryregion_title "Države/regioni"
+#define qtn_ir_discover_beststations "Izbor najboljih stanica"
+#define qtn_ir_discover_country_region "Pretraga po državi/reg."
+#define qtn_ir_discover_genre "Traženje po žanrovima"
+#define qtn_ir_discover_genre_expanded "Stanice sortirane po žanr."
+#define qtn_ir_discover_langauge "Traženje po jezicima"
+#define qtn_ir_discover_language_expanded "Stanice sortirane po jezicima"
+#define qtn_ir_discover_staticountryreg "Stanice sortirane po drž./reg."
+#define qtn_ir_discover_title "Direktor. stanica"
+#define qtn_ir_discover_top "Najpopularnije stanice"
+#define qtn_ir_edit_title "Izmeni stanicu"
+#define qtn_ir_err_operation "Greška tokom operacije. Pokušajte ponovo."
+#define qtn_ir_err_url_unavail "URL adresa nije dostupna"
+#define qtn_ir_error_address "Pogrešna adresa Internet radio stanice"
+#define qtn_ir_error_connection "Vreme za uspost. veze isteklo. Pokušajte ponovo."
+#define qtn_ir_error_favourites "Na listi najdražih stanica nema dovoljno mesta da bi se saÄuvale izabrane"
+#define qtn_ir_error_general "Povezivanje sa stanicom nije moguće"
+#define qtn_ir_error_isds_unavailable "Usluga direktorijuma Internet stanica trenutno nije dostupna"
+#define qtn_ir_error_notavailable "Nisu dostupni linkovi za striming"
+#define qtn_ir_error_notinisds "Stavka više nije dostupna"
+#define qtn_ir_error_search "Unesite pojam za traženje"
+#define qtn_ir_findst_addstation "Dodaj stanicu ruÄno"
+#define qtn_ir_findst_addtofav "Dodajte stanicu najdražim"
+#define qtn_ir_findst_browsesds "Pregl. dir. stanica"
+#define qtn_ir_findst_search_ensrhterm "Unesite pojam za traženje"
+#define qtn_ir_findst_softkey_search "Nađi"
+#define qtn_ir_findstation_title "Nađi stanice"
+#define qtn_ir_firstuse_title "Int. radio: dobrodošli"
+#define qtn_ir_genre_list_expanded "Stanica: %N"
+#define qtn_ir_genre_title "Žanrovi"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Nema istorije"
+#define qtn_ir_homescreen_buffering "Baferuje se"
+#define qtn_ir_homescreen_lastplayed "Posled. reproduk."
+#define qtn_ir_info_details_bitrate "%N kb/s:"
+#define qtn_ir_info_details_countryregi "Država/region:"
+#define qtn_ir_info_details_description "Opis:"
+#define qtn_ir_info_details_genre "Žanr(ovi):"
+#define qtn_ir_info_details_language "Jezik:"
+#define qtn_ir_info_details_name "Ime:"
+#define qtn_ir_info_details_streams "Strimovi:"
+#define qtn_ir_info_details_title "Info o stanici"
+#define qtn_ir_info_details_type "Tip:"
+#define qtn_ir_info_details_type_isds "Dir. stan."
+#define qtn_ir_info_details_type_manual "Koris. def."
+#define qtn_ir_info_details_unnamed "Neimen."
+#define qtn_ir_info_softkey_close "Zatvori"
+#define qtn_ir_language_list_expanded "Stanica: %N"
+#define qtn_ir_language_title "Jezici"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "UÄitavam"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Traži se"
+#define qtn_ir_main_descriptive_text "Opc. „Nađi stanice“ na tr. s alat. za dodav. stanice"
+#define qtn_ir_main_discover_expanded "Otkivanje novih radio stanica"
+#define qtn_ir_main_last "Posled. reproduk."
+#define qtn_ir_main_now "Sada slušate"
+#define qtn_ir_main_prog_deleting "Brisanje %N"
+#define qtn_ir_main_searchindir "Potraži u direktorijumu"
+#define qtn_ir_main_title "Internet radio"
+#define qtn_ir_main_unnamed_station "Neimen. stanica"
+#define qtn_ir_memlo_ram_out_of_mem "Nema dovoljno memorije za obavljanje operacije. Prvo izbrišite neke podatke."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kb/s"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Naredna stanica"
+#define qtn_ir_now_tooltip_play "Pusti"
+#define qtn_ir_now_tooltip_previous "Prethodna stanica"
+#define qtn_ir_now_tooltip_stop "Zaustavi"
+#define qtn_ir_now_wait_buffering "Baferuje se"
+#define qtn_ir_now_wait_buffering_perc "Baferuje se %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Nema veze sa mrežom"
+#define qtn_ir_nwcontroller_err_nosnaps "Nema definisane pristupne taÄke"
+#define qtn_ir_options_add "Dodaj u Najdraže"
+#define qtn_ir_options_add_manually "Dodaj stanicu ruÄno"
+#define qtn_ir_options_change "Promeni"
+#define qtn_ir_options_clearhistory "Obriši istoriju"
+#define qtn_ir_options_editstation "Izmenite stanicu"
+#define qtn_ir_options_equalizer "Ekvilajzer"
+#define qtn_ir_options_exit "Izađi"
+#define qtn_ir_options_findnmusicstore "Pron. u Muz. prodavnici"
+#define qtn_ir_options_fmtrans "FM prenos"
+#define qtn_ir_options_gotomusicstore "Idi u MuziÄki prodavnicu"
+#define qtn_ir_options_help "Pomoć"
+#define qtn_ir_options_history "Istorija"
+#define qtn_ir_options_info "Informacije o stanici"
+#define qtn_ir_options_mainview "Idi u glavni prikaz"
+#define qtn_ir_options_mark "OznaÄi"
+#define qtn_ir_options_markall "OznaÄi sve"
+#define qtn_ir_options_markunmark "Markiraj/Demarkiraj"
+#define qtn_ir_options_now "Idi u Sad se pušta"
+#define qtn_ir_options_off "IskljuÄeno"
+#define qtn_ir_options_on "UkljuÄeno"
+#define qtn_ir_options_searchag "Traži ponovo"
+#define qtn_ir_options_select "Izaberi"
+#define qtn_ir_options_settings "Podešavanja"
+#define qtn_ir_options_station "Stanica"
+#define qtn_ir_options_stereowidening "Prošireni stereo"
+#define qtn_ir_options_unmark "OdznaÄi"
+#define qtn_ir_options_unmarkall "Skini sve oznake"
+#define qtn_ir_playfail_err "Radio plejbek nije uspeo"
+#define qtn_ir_playlist_title "Primljene veze"
+#define qtn_ir_popup_no_results "Nije nađeno ništa"
+#define qtn_ir_popup_toomany_results "Previše rezultata. Podesi termin pretrage."
+#define qtn_ir_results_none "Nisu pronađene odgovarajuće stanice. Potraži ponovo."
+#define qtn_ir_search_result "%0U[09]:%1N rezultata"
+#define qtn_ir_search_results "%0U[08]:%1N rezultata"
+#define qtn_ir_set_folder_internetradio "Internet radio"
+#define qtn_ir_set_folder_irradio "Internet radio"
+#define qtn_ir_settings_3g "Brzina prenosa za 3G vezu"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "Brzina pren. za GPRS vezu"
+#define qtn_ir_settings_network "Mrežna veza"
+#define qtn_ir_settings_snap_default "Podrazumevana veza"
+#define qtn_ir_settings_title "Podešavanja"
+#define qtn_ir_settings_wifi "Brzina pren. za Wi-Fi vezu"
+#define qtn_ir_softkey_back "Nazad"
+#define qtn_ir_softkey_cancel "Obustavi"
+#define qtn_ir_softkey_done "Gotovo"
+#define qtn_ir_softkey_no "Ne"
+#define qtn_ir_softkey_options "Opcije"
+#define qtn_ir_softkey_select "Izaberi"
+#define qtn_ir_softkey_yes "Da"
+#define qtn_ir_station_saved "Stanica saÄuvana"
+#define qtn_ir_stationlist_nomatches "(nema sliÄnih)"
+#define qtn_ir_stations_popup_delete "Izbrisati\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Brisanje %N stanica?"
+#define qtn_ir_stations_popup_removed "Izbrisano: %U[78]"
+#define qtn_ir_stations_popup_removed_many "Izbrisano stanica: %N"
+#define qtn_ir_stations_popup_save "SaÄuvati stanicu kao najdražu?"
+#define qtn_ir_suboptions_delete "Obriši"
+#define qtn_ir_suboptions_details "Detalji"
+#define qtn_ir_suboptions_move "Premesti"
+#define qtn_ir_terms_details "Slaganjem sa uslovima korišćenja sklapate ugovor u okvirima primenjivog zakona i nadalje ne podležete ograniÄavanju ili zabranama koja se odnose na sva materijalna prava"
+#define qtn_ir_terms_heading "Uslovi korišćenja"
+#define qtn_ir_terms_softkey_accept "Prihvati"
+#define qtn_ir_terms_softkey_decline "Odbij"
+#define qtn_ir_title_history "Istorija"
+#define qtn_ir_tooltip_addalltofav "Dodaj sve u najdraže"
+#define qtn_ir_tooltip_addstation "Dodaj stanicu ruÄno"
+#define qtn_ir_tooltip_addtofav "Dodaj u najdraže"
+#define qtn_ir_tooltip_copy "Kopiraj"
+#define qtn_ir_tooltip_findnstore "Pron. u Muz. prodav."
+#define qtn_ir_tooltip_findst "Pronađi stanice"
+#define qtn_ir_tooltip_history "Istorija"
+#define qtn_ir_tooltip_listen "Preslušaj"
+#define qtn_ir_tooltip_paste "Prenesi"
+#define qtn_ir_tooltip_stationde "Detalji o stanici"
+#define qtn_ir_top_title "Najpop. stanice"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Ime"
+#define qtn_ir_url_title "Dodav. stanice"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/79/internetradioai_79.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/79/terms_79.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>Nokia Internet Radio servis (u daljem tekstu, "Servis") Vam omogućava da pronalazite i uživate u sadržajima Internet radio stanica. SAGLASNI STE DA KORIŠĆENJEM OVOG SERVISA POTVRÄUJETE DA STE PROÄŒITALI OVAJ SPORAZUM, DA STE GA RAZUMELI I DA PRIHVATATE KAO OBAVEZUJUĆE NJEGOVE ODREDBE. Ukoliko sa time niste saglasni, nije Vam dozvoljeno korišćenje ovog Servisa.</p>
+
+<p></p>
+
+<h1>1. DEFINICIJE</h1>
+
+<p></p>
+
+<p>Internet radio stanice su subjekti koji proizvode i distribuiraju za strimovanje preko Interneta audio sadržaje i odgovarajuće dopunske informacione podatke (meta podatke).</p>
+
+<p></p>
+
+<p>Link Internet radio stanice oznaÄava lokator resursa ili skup lokatora resursa koji korisniku omogućavaju pristup sadržaju koji strimuje ta Internet radio stanica.</p>
+
+<p></p>
+
+<h1>2. SERVIS</h1>
+
+<p></p>
+
+<p>Ovaj Servis omogućava:</p>
+<p>1. pretraživanje linkova Internet radio stanica,</p>
+<p>2. pristup sadržajima Internet radio stanica.</p>
+
+<p></p>
+
+<h1>3. KORIŠĆENJE SERVISA</h1>
+
+<p></p>
+
+<p>Korišćenje ovog Servisa Vam je dopuÅ¡teno samo za liÄnu i nekomercijalnu upotrebu. Nokia će posedovati sva prava intelektualne svojine na Servis, kao i ona proistekla iz njega.</p>
+
+<p></p>
+
+<p>Nokia zadržava pravo da promeni ove uslove tako što će Vas o tim promenama obavestiti.</p>
+
+<p></p>
+
+<h1>4. PRIVATNOST</h1>
+
+<p></p>
+
+<p>Nokia se obavezuje na zaštitu privatnosti korisnika implementacijom strogih polisa poverljivosti.</p>
+
+<p></p>
+
+<p>U cilju praćenja korišćenja Servisa i njegovog poboljÅ¡anja, Nokia može da prikuplja korisniÄke podatke koji obuvataju, ali se ne ograniÄavaju na, informacije o pristupanju Internet radio stanicama, vremenu provedenom na svakoj stanici i sadržajima koji se klasifikuju kao omiljeni.</p>
+
+<p></p>
+
+<p>Nokia ne prikuplja nikakve informacije koje omogućavaju identifikaciju korisnika Servisa.</p>
+
+<p></p>
+
+<h1>5. DOSTUPNOST SERVISA</h1>
+
+<p></p>
+
+<p>Ovaj Servis Vam se pruža kao dodatna pogodnost. On se pruža po principu "kao Å¡to jeste" i "gde je dostupan". Nokia ne garantuje da će Servis biti bez prekida i greÅ¡aka. Nokia zadržava pravo da u svakom trenutku revidira Servis ili da povuÄe mogućnost pristupa Servisu.</p>
+
+<p></p>
+
+<p>Nokia, po svojoj želji, može da nudi nadgradnje softverskih aplikacija vezanih za Servis.</p>
+
+<p></p>
+
+<h1>6. ODGOVORNOST I ODRICANJE ODGOVORNOSTI</h1>
+
+<p></p>
+
+<p>Da biste im lakÅ¡e pristupali, Nokia može da stavlja na raspolaganje i linkove Internet radio stanica koje su u vlasniÅ¡tvu i koje drže treće strane. Nokia ne garantuje da će ti linkovi Internet stanica biti u funkciji. Pored toga, za sadržaje koji ne potiÄu od Nokije se ni na koji naÄin ne može smatrati da ih Nokia potvrÄ‘uje kao takve, niti proizvode i servise koji se u njima pominju.</p>
+
+<p></p>
+
+<p>Pre pristupanja svakoj stanici, morate pogledati i saglasiti se sa pravilima korišćenja, ako ona postoje. Takođe ste saglasni sa time da Nokia nema kontrolu nad sadržajima servisa trećih strana, i da ne može da prihvati bilo kakvu odgovornost za sadržaje koje obezbeđuju Internet radio stanice.</p>
+
+<p></p>
+
+<p>Pristupanje sadržajima Internet radio stanica korišćenjem ovog Servisa može da podrazumeva prenos velike koliÄine podataka preko mreže VaÅ¡eg provajdera servisa. Za informacije o cenama prenosa podataka se obratite svom provajderu servisa. Imajte na umu da korišćenje ovog Servisa za praćenje Internet radio stanica koje emituju strimove viÅ¡eg kvaliteta (sa većim bitnim gustinama) može da nosi i veće troÅ¡kove prenosa podataka.</p>
+
+<p></p>
+
+<p>Obim razmene podataka (saobraćaj) pri korišćenju ovog Servisa obuhvata najmanje: ažuriranje sadržaja imenika (registra) stanica, strimovanje (preuzimanje) podataka sa Internet radio stanice, sakupljanje statistiÄkih podataka i ažuriranje aplikacije Internet radio.</p>
+
+<p></p>
+
+<p>Nokia nije odgovorna za troškove razmene podataka (saobraćaja) vezanog za korišćenje ovog Servisa.</p>
+
+<p></p>
+
+<p>NE DAJU SE NIKAKVE GARANCIJE, BILO IZRIÄŒITE BILO ONE KOJE SE PODRAZUMEVAJU, UKLJUÄŒUJUĆI, ALI NE OGRANIÄŒAVAJUĆI SE NA NJIH, I GARANCIJE SVOJINE ILI NEPOSTOJANJA POVREDE PRAVA, KAO I PODRAZUMEVAJUĆE GARANCIJE KOMERCIJALNE PODOBNOSTI I PODOBNOSTI ZA POSEBNU NAMENU, U ODNOSU NA DOSTUPNOST, TAÄŒNOST, POUZDANOST ILI SADRŽAJ OVOG SERVISA. NOKIA NIJE ODGOVORNA ZA MA KAKVE DIREKTNE, INDIREKTNE, SLUÄŒAJNE, POSEBNE ILI POSLEDIÄŒNE Å TETE, ZA GUBITAK DOBITI ILI PREKIDE U POSLOVANJU KOJI NASTANU KAO REZULTAT KORIŠĆENJA ILI NEMOGUĆNOSTI KORIŠĆENJA OVOG SERVISA, ÄŒAK I AKO JE NOKIA BILA PRETHODNO OBAVEÅ TENA O MOGUĆNOSTI NASTANKA TIH Å TETA. NEKI PRAVNI SISTEMI NE DOPUÅ TAJU IZUZEĆE ODREÄENIH GARANCIJA ILI OGRANIÄŒENJE ODGOVORNOSTI, PA SE GORNJA OGRANIÄŒENJA ILI IZUZEĆA NA VAS MOŽDA NE ODNOSE. ODGOVORNOST NOKIJE JE U TIM SLUÄŒAJEVIMA OGRANIÄŒENA NAJVIÅ IM STEPENOM KOJI ZAKON DOPUÅ TA.</p>
+
+<p></p>
+
+<p>NiÅ¡ta od ovoga ne može da ugrozi zakonska prava strane u ulozi potroÅ¡aÄa. NiÅ¡ta od ovoga ne može da ograniÄi odgovornost Nokije u sluÄaju smrti ili liÄne povrede nastalih usled nemara Nokije.</p>
+
+<p></p>
+
+<h1>7. POLITIKA U VEZI NAVODA O POVREDI AUTORSKIH PRAVA</h1>
+
+<p></p>
+
+<p>Ako verujete da je VaÅ¡e delo koje je zaÅ¡tićeno autorskim pravom tretirano na naÄin koji predstavlja krÅ¡enje autorskog prava, možete se obratiti Nokiji obaveÅ¡tenjem koje će sadržati sledeće:</p>
+
+<p></p>
+
+<p>(1) FiziÄki ili elektronski potpis osobe ovlašćene da zastupa vlasnika ekskluzivnog prava koje je po navodu povreÄ‘eno,</p>
+
+<p></p>
+
+<p>(2) Imenovanje ili opis dela zaštićenog autorskim pravom koje je po navodu povređeno,</p>
+
+<p></p>
+
+<p>(3) Imenovanje ili opis materijala za koji se tvrdi da predstavlja povredu prava i informacije normalno dovoljne da se taj materijal locira,</p>
+
+<p></p>
+
+<p>(4) Vaše ime, adresu, broj telefona, e-mail adresu i druge podatke koji će omogućiti Nokiji da sa Vama stupi u kontakt,</p>
+
+<p></p>
+
+<p>(5) Izjavu da dobronamerno verujete da za korišćenje tog materijala na osporeni naÄin ne postoji ovlašćenje nosioca autorskog prava, njegovog zastupnika ili zakonsko, i</p>
+
+<p></p>
+
+<p>(6) Izjavu da su podaci u obaveÅ¡tenju taÄni, pod odgovornošću za davanje lažnog iskaza, da ste ovlašćeni da postupate u ime nosioca autorskog prava koje je po navodu povreÄ‘eno.</p>
+
+<p></p>
+
+<p>Obaveštenje se mora poslati našem imenovanom zastupniku na adresu:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. ZAKON</h1>
+
+<p></p>
+
+<p>Za potrebe ovih uslova, "Nokia" oznaÄava privredno druÅ¡tvo "Nokia Corporation". Nokia pruža i kontroliÅ¡e ovaj Servis sa lokacija u Finskoj. Shodno tome, informacije dostupne na Servisu se ovime imaju smatrati datim u Finskoj.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Sva prava zadržana.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/83/internetradio_83.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Siempre preguntar"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "%N estaciones guardadas"
+#define qtn_ir_added_single "%U[87] guardada"
+#define qtn_ir_addmanually_unnamed "Sin nombre"
+#define qtn_ir_addst_description "Descripción"
+#define qtn_ir_addst_streamurl "URL de stream"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio Internet"
+#define qtn_ir_ai_radio_not_active "Radio inactiva"
+#define qtn_ir_app_general_err "Error interno. Reinicie la aplicación."
+#define qtn_ir_apps_grid "Rad. Intern."
+#define qtn_ir_apps_list "Radio Internet"
+#define qtn_ir_apps_skey "Radio Internet"
+#define qtn_ir_apps_standby "Radio de Internet"
+#define qtn_ir_apps_swins "Radio de Internet"
+#define qtn_ir_apps_wheel "Radio Internet"
+#define qtn_ir_bitrate_best "Mejor calidad"
+#define qtn_ir_bitrate_high "Alta calidad"
+#define qtn_ir_bitrate_standard "Calidad estándar"
+#define qtn_ir_cost_heading "Aviso importante"
+#define qtn_ir_cost_softkey_continue "Continuar"
+#define qtn_ir_cost_softkey_exit "Salir"
+#define qtn_ir_cost_title "Radio Internet"
+#define qtn_ir_cost_warning "La radio de Internet usa la conexión de datos de su teléfono para transmisiones de radio. Esto sólo se recomienda si cuenta con un plan de datos de tarifa plana. Si no está seguro de los costos de sus datos, consulte a su operador antes de continuar."
+#define qtn_ir_country_list_expanded "%N estaciones"
+#define qtn_ir_countryregion_title "Países/regiones"
+#define qtn_ir_discover_beststations "Selección de mejores estac."
+#define qtn_ir_discover_country_region "Explorar por país/región"
+#define qtn_ir_discover_genre "Explorar por género"
+#define qtn_ir_discover_genre_expanded "Estac. ordenadas por género"
+#define qtn_ir_discover_langauge "Explorar por idioma"
+#define qtn_ir_discover_language_expanded "Estac. ordenadas por idioma"
+#define qtn_ir_discover_staticountryreg "Estac. orden. por país/región"
+#define qtn_ir_discover_title "Directorio estac."
+#define qtn_ir_discover_top "Estaciones principales"
+#define qtn_ir_edit_title "Editar estación"
+#define qtn_ir_err_operation "Error en operación. Reintente."
+#define qtn_ir_err_url_unavail "URL no disponible"
+#define qtn_ir_error_address "Dirección incorrecta de estación de radio de Internet"
+#define qtn_ir_error_connection "Límite de tiempo de conexión. Reintente."
+#define qtn_ir_error_favourites "No hay suficiente espacio en favoritos para guardar la selección"
+#define qtn_ir_error_general "Imposible conectar a estación"
+#define qtn_ir_error_isds_unavailable "Servicio de directorio de estaciones de Internet temporalmente no disponible"
+#define qtn_ir_error_notavailable "No hay enlaces de streaming disponibles"
+#define qtn_ir_error_notinisds "El elemento ya no está disponible"
+#define qtn_ir_error_search "Ingresar un término de búsqueda"
+#define qtn_ir_findst_addstation "Agreg. estación manual."
+#define qtn_ir_findst_addtofav "Agregar su estac. a favoritos"
+#define qtn_ir_findst_browsesds "Explorar por direc. estac."
+#define qtn_ir_findst_search_ensrhterm "Ingresar término búsqueda"
+#define qtn_ir_findst_softkey_search "Buscar"
+#define qtn_ir_findstation_title "Buscar estac."
+#define qtn_ir_firstuse_title "Radio Intern.: Bienven."
+#define qtn_ir_genre_list_expanded "%N estaciones"
+#define qtn_ir_genre_title "Géneros"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "No hay historial"
+#define qtn_ir_homescreen_buffering "Procesando búfer"
+#define qtn_ir_homescreen_lastplayed "Última reproduc."
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "País/Región:"
+#define qtn_ir_info_details_description "Descripción:"
+#define qtn_ir_info_details_genre "Género(s):"
+#define qtn_ir_info_details_language "Idioma:"
+#define qtn_ir_info_details_name "Nombre:"
+#define qtn_ir_info_details_streams "Secuencias:"
+#define qtn_ir_info_details_title "Info. estación"
+#define qtn_ir_info_details_type "Tipo:"
+#define qtn_ir_info_details_type_isds "Dir. estac."
+#define qtn_ir_info_details_type_manual "Def. usr."
+#define qtn_ir_info_details_unnamed "Sin nomb."
+#define qtn_ir_info_softkey_close "Cerrar"
+#define qtn_ir_language_list_expanded "%N estaciones"
+#define qtn_ir_language_title "Idiomas"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Cargando"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Buscando"
+#define qtn_ir_main_descriptive_text "Usar 'Busc. estac.' desde barr. herr. para agr. est."
+#define qtn_ir_main_discover_expanded "Detectar nuevas estac. radio"
+#define qtn_ir_main_last "Última reprod."
+#define qtn_ir_main_now "En reproducción"
+#define qtn_ir_main_prog_deleting "Eliminando %N"
+#define qtn_ir_main_searchindir "Buscar en directorio"
+#define qtn_ir_main_title "Radio Internet"
+#define qtn_ir_main_unnamed_station "Estac. sin nomb."
+#define qtn_ir_memlo_ram_out_of_mem "No hay suficiente memoria para efectuar la operación. Elimine antes algunos datos."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Estación siguiente"
+#define qtn_ir_now_tooltip_play "Reproducir"
+#define qtn_ir_now_tooltip_previous "Estación anterior"
+#define qtn_ir_now_tooltip_stop "Detener"
+#define qtn_ir_now_wait_buffering "Procesando búfer"
+#define qtn_ir_now_wait_buffering_perc "Procesando búfer %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "No hay conexión de red"
+#define qtn_ir_nwcontroller_err_nosnaps "No hay punto de acceso definido"
+#define qtn_ir_options_add "Agregar a favoritos"
+#define qtn_ir_options_add_manually "Agreg. estación manual."
+#define qtn_ir_options_change "Cambiar"
+#define qtn_ir_options_clearhistory "Borrar historial"
+#define qtn_ir_options_editstation "Editar estación"
+#define qtn_ir_options_equalizer "Ecualizador"
+#define qtn_ir_options_exit "Salir"
+#define qtn_ir_options_findnmusicstore "Buscar en Tienda música"
+#define qtn_ir_options_fmtrans "Transmisor FM"
+#define qtn_ir_options_gotomusicstore "Ir a Tienda de música"
+#define qtn_ir_options_help "Ayuda"
+#define qtn_ir_options_history "Historial"
+#define qtn_ir_options_info "Información de estación"
+#define qtn_ir_options_mainview "Ir a vista principal"
+#define qtn_ir_options_mark "Marcar"
+#define qtn_ir_options_markall "Marcar todos"
+#define qtn_ir_options_markunmark "Marcar/Desmarcar"
+#define qtn_ir_options_now "Ir a En reproducción"
+#define qtn_ir_options_off "Desactivar"
+#define qtn_ir_options_on "Activar"
+#define qtn_ir_options_searchag "Buscar otra vez"
+#define qtn_ir_options_select "Seleccionar"
+#define qtn_ir_options_settings "Configuraciones"
+#define qtn_ir_options_station "Estación"
+#define qtn_ir_options_stereowidening "Ampliación de estéreo"
+#define qtn_ir_options_unmark "Desmarcar"
+#define qtn_ir_options_unmarkall "Desmarcar todos"
+#define qtn_ir_playfail_err "Falló reproducción de radio"
+#define qtn_ir_playlist_title "Enlaces recib."
+#define qtn_ir_popup_no_results "No se encontró ningún resultado"
+#define qtn_ir_popup_toomany_results "Muchos resultados. Refina su término de búsqueda."
+#define qtn_ir_results_none "No hay estaciones que coincidan. Busque nuevamente."
+#define qtn_ir_search_result "%0U[08]:%1N resultado"
+#define qtn_ir_search_results "%0U[10]:%1N result."
+#define qtn_ir_set_folder_internetradio "Radio Internet"
+#define qtn_ir_set_folder_irradio "Radio Internet"
+#define qtn_ir_settings_3g "Velocidad bits conex. 3G"
+#define qtn_ir_settings_connec_softkey_ok "Aceptar"
+#define qtn_ir_settings_gprs "Velocid. bits conex. GPRS"
+#define qtn_ir_settings_network "Conexión de red"
+#define qtn_ir_settings_snap_default "Conexión pred."
+#define qtn_ir_settings_title "Configuraciones"
+#define qtn_ir_settings_wifi "Velocid. bits conex. Wi-Fi"
+#define qtn_ir_softkey_back "Atrás"
+#define qtn_ir_softkey_cancel "Cancelar"
+#define qtn_ir_softkey_done "Listo"
+#define qtn_ir_softkey_no "No"
+#define qtn_ir_softkey_options "Opciones"
+#define qtn_ir_softkey_select "Seleccionar"
+#define qtn_ir_softkey_yes "Sí"
+#define qtn_ir_station_saved "Estación guardada"
+#define qtn_ir_stationlist_nomatches "(no existen coincidencias)"
+#define qtn_ir_stations_popup_delete "¿Eliminar\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "¿Eliminar %N estaciones?"
+#define qtn_ir_stations_popup_removed "%U[87] eliminada"
+#define qtn_ir_stations_popup_removed_many "%N estaciones eliminadas"
+#define qtn_ir_stations_popup_save "¿Guardar estación en favoritos?"
+#define qtn_ir_suboptions_delete "Eliminar"
+#define qtn_ir_suboptions_details "Detalles"
+#define qtn_ir_suboptions_move "Mover"
+#define qtn_ir_terms_details "Si acepta los siguientes Términos y condiciones, significa que usted celebra un contrato hasta el límite permitido por la ley vigente, y no tiene más limitaciones o prohibiciones con respecto a los derechos materiales"
+#define qtn_ir_terms_heading "Términos y condiciones"
+#define qtn_ir_terms_softkey_accept "Aceptar"
+#define qtn_ir_terms_softkey_decline "Rechazar"
+#define qtn_ir_title_history "Historial"
+#define qtn_ir_tooltip_addalltofav "Agr. todo a favoritos"
+#define qtn_ir_tooltip_addstation "Agreg. estac. manual."
+#define qtn_ir_tooltip_addtofav "Agregar a favoritos"
+#define qtn_ir_tooltip_copy "Copiar"
+#define qtn_ir_tooltip_findnstore "Buscar en Tienda mús."
+#define qtn_ir_tooltip_findst "Buscar estaciones"
+#define qtn_ir_tooltip_history "Historial"
+#define qtn_ir_tooltip_listen "Escuchar"
+#define qtn_ir_tooltip_paste "Pegar"
+#define qtn_ir_tooltip_stationde "Detalles de estación"
+#define qtn_ir_top_title "Estac. princip."
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Nombre"
+#define qtn_ir_url_title "Agregar estac."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/83/internetradioai_83.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/83/terms_83.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>El servicio de Radio por Internet (“Servicioâ€) le permite descubrir y escuchar el contenido de las estaciones de radio por Internet. MEDIANTE LA UTILIZACIÓN DEL SERVICIO, USTED RECONOCE QUE HA LEÃDO Y ENTENDIDO EL PRESENTE ACUERDO Y QUE ACEPTA TODOS SUS TÉRMINOS Y CONDICIONES. Si no los acepta, no se encuentra autorizado a utilizar el Servicio.</p>
+
+<p></p>
+
+<h1>1. DEFINICIONES</h1>
+
+<p></p>
+
+<p>La estaciones de radio por Internet son compañías que generalmente producen y distribuyen contenidos de audio y metadatos relacionados en un flujo a través de Internet.</p>
+
+<p></p>
+
+<p>El enlace a la estación de radio por Internet es un localizador de recursos o un grupo de localizadores de recursos que permite al usuario acceder al contenido distribuido por la estación de radio a través de Internet.</p>
+
+<p></p>
+
+<h1>2. EL SERVICIO</h1>
+
+<p></p>
+
+<p>El Servicio permite lo siguiente:</p>
+<p>1. realizar una búsqueda de enlaces a estaciones de radio por Internet;</p>
+<p>2. acceder al contenido distribuido por estaciones de radio a través de Internet.</p>
+
+<p></p>
+
+<h1>3. UTILIZACIÓN DEL SERVICIO</h1>
+
+<p></p>
+
+<p>El usuario sólo podrá utilizar el Servicio con fines privados y no comerciales. Nokia será el titular de todos los derechos de propiedad intelectual sobre el Servicio.</p>
+
+<p></p>
+
+<p>Nokia se reserva el derecho de modificar los presentes términos y condiciones, lo que se le informará a los usuarios.</p>
+
+<p></p>
+
+<h1>4. PRIVACIDAD</h1>
+
+<p></p>
+
+<p>Nokia se compromete a proteger la privacidad del usuario mediante la implementación de serias políticas de confidencialidad.</p>
+
+<p></p>
+
+<p>A fin de monitorear la utilización del Servicio y mejorarlo, Nokia podrá recopilar datos sobre la utilización del servicio, incluyendo sin limitación, información sobre las estaciones de radio de Internet a las que se accede, el tiempo de conexión establecido con dichas estaciones y los elementos seleccionados como favoritos.</p>
+
+<p></p>
+
+<p>Nokia no recopilará información que permita identificar al usuario del Servicio.</p>
+
+<p></p>
+
+<h1>5. DISPONIBILIDAD DEL SERVICIO</h1>
+
+<p></p>
+
+<p>La prestación del Servicio se realiza como un beneficio para el usuario. El servicio se presta tal como se encuentre disponible al momento de acceder al mismo. Nokia no garantiza la continuidad del servicio ni la ausencia de errores durante su utilización. Nokia se reserva el derecho de revisar el Servicio o de dejar de prestarlo en cualquier momento.</p>
+
+<p></p>
+
+<p>Nokia, a su entera discreción, podrá realizar actualizaciones de las aplicaciones de software relacionadas con el Servicio.</p>
+
+<p></p>
+
+<h1>6. LIMITACIÓN DE RESPONSABILIDAD</h1>
+
+<p></p>
+
+<p>Para facilitar el acceso del usuario, Nokia podrá incluir enlaces a estaciones de radio por Internet que sean propiedad de terceros o cuya operación esté a cargo de terceros. Nokia no garantiza el funcionamiento de dichos enlaces. Por otra parte, bajo ninguna circunstancia se entenderá que Nokia aprueba los contenidos de terceros ni los productos o servicios a los que tales contenidos hagan referencia.</p>
+
+<p></p>
+
+<p>Usted deberá revisar y aceptar las normas de uso de cada estación de radio, si existieren, antes de acceder a ella. Usted acepta que Nokia no tiene control alguno sobre el contenido de los servicios prestados por terceros y que Nokia no asume responsabilidad alguna sobre el contenido transmitido por las estaciones de radio por Internet.</p>
+
+<p></p>
+
+<p>El acceso al contenido de las estaciones de radio por Internet mediante la utilización del Servicio puede significar la transmisión de importantes cantidades de datos a través de la red de su proveedor de servicios. Sírvase contactar a su proveedor de servicios para obtener información sobre los cargos por transmisión de datos. Informamos que el uso del Servicio para acceder a estaciones de radio por Internet con altos flujos de tasa binaria puede significar un costo más alto derivado del tráfico de datos.</p>
+
+<p></p>
+
+<p>El tráfico de datos derivado de la utilización del Servicio puede incluir al menos lo siguiente: la actualización de los contenidos del directorio de las estaciones, el flujo de datos desde la estación de radio por Internet, la recolección de datos estadísticos y la actualización de la aplicación de radio por Internet.</p>
+
+<p></p>
+
+<p>Nokia no asume responsabilidad por los costos correspondientes al tráfico de datos ocasionados por la utilización del Servicio que realicen los usuarios.</p>
+
+<p></p>
+
+<p>NO SE OTORGA GARANTÃA DE NINGUNA NATURALEZA, NI EXPRESA NI IMPLÃCITA, INCLUYENDO SIN LIMITACIÓN, GARANTÃAS SOBRE TÃTULO O DE NO VIOLACIÓN DE DERECHOS O GARANTÃAS TÃCITAS DE COMERCIABILIDAD O APTITUD PARA UN PROPÓSITO ESPECÃFICO, RESPECTO DE LA DISPONIBILIDAD, EXACTITUD, CONFIABILIDAD O CONTENIDOS DEL SERVICIO. NOKIA NO ASUME RESPONSABILIDAD ALGUNA POR CUALQUIER DAÑO DIRECTO, INDIRECTO, FORTUITO, CUANTIFICALBE O EMERGENTE, LUCRO CESANTE O INTERRUPCIÓN DE NEGOCIOS QUE SE ORIGINE POR EL USO O POR LA IMPOSIBILIDAD DE USAR EL SERVICIO, AUN CUANDO A NOKIA LE HAYAN ADVERTIDO DE LA POSIBLE OCURRENCIA DE DICHO DAÑO. EN ALGUNAS JURISDICCIONES LA EXENCIÓN DE CIERTAS GARANTÃAS O LA LIMITACIÓN DE CIERTAS RESPONSABILIDADES SE ENCUENTRA PROHIBIDA, POR LO CUAL, LAS EXENCIONES O LIMITACIONES ANTES MENCIONADAS PUEDEN NO SER APLICABLES A USTED. EN TAL CASO, LA RESPONSABILIDAD DE NOKIA SE ENCONTRARà LIMITADA EN LA MAYOR MEDIDA PERMITIDA POR LA LEY.</p>
+
+<p></p>
+
+<p>Ninguno de los términos y condiciones aquí establecidos afectará los derechos legales de ninguna persona considerada como consumidor. Tampoco limitará la responsabilidad de Nokia en caso de fallecimiento o lesiones que resulten de un accionar negligente por parte de Nokia.</p>
+
+<p></p>
+
+<h1>7. POLÃTICA RESPECTO DE SUPUESTAS VIOLACIONES A DERECHOS DE AUTOR</h1>
+
+<p></p>
+
+<p>Si considera que algún material al amparo de derechos de autor ha sido utilizado de manera tal que constituya una violación a tales derechos, Usted puede informar dicha situación a Nokia mediante una notificación que contenga lo siguiente:</p>
+
+<p></p>
+
+<p>(1) Firma física o electrónica de la persona autorizada a actuar en nombre del titular del derecho que se considera infringido;</p>
+
+<p></p>
+
+<p>(2) Identificación o descripción del material cuyo derecho se considera infringido;</p>
+
+<p></p>
+
+<p>(3) Identificación o descripción del material que se alega viola el derecho protegido e información razonablemente suficiente para localizar dicho material;</p>
+
+<p></p>
+
+<p>(4) Su nombre, domicilio, número de teléfono, dirección de correo electrónico y cualquier otro dato que permita a Nokia contactarse con Usted;</p>
+
+<p></p>
+
+<p>(5) Una declaración por la que usted considera de buena fe que el uso del material no se encuentra autorizado por el titular de los derechos de autor, su agente o la ley; y</p>
+
+<p></p>
+
+<p>(6) Una declaración por la cual manifiesta que los datos proporcionados en la notificación son correctos y, bajo pena de condena por falso testimonio, que se encuentra autorizado para actuar en nombre del titular del derecho que se considera infringido.</p>
+
+<p></p>
+
+<p>La notificación deberá ser cursada al domicilio de nuestro Agente Designado sito en:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LEY APLICABLE</h1>
+
+<p></p>
+
+<p>Tal como se menciona en los presentes términos y condiciones, "Nokia" significa Nokia Corporation. Nokia opera y controla el Servicio desde sus oficinas sitas en Finlandia. Por lo tanto, se considera que la información sobre el Servicio que aquí se brinda, es proporcionada en Finlandia.</p>
+
+<p></p>
+
+<p>Copyright © Nokia Corporation 2006. Todos los derechos reservados.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/93/internetradio_93.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Завжди запитувати"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "Збережено Ñтанцій: %N"
+#define qtn_ir_added_single "%U[85] збережено"
+#define qtn_ir_addmanually_unnamed "Без назви"
+#define qtn_ir_addst_description "ОпиÑ"
+#define qtn_ir_addst_streamurl "URL-адреÑа потоку"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Інтернет-радіо"
+#define qtn_ir_ai_radio_not_active "Радіо неактивне"
+#define qtn_ir_app_general_err "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. ПерезапуÑÑ‚Ñ–Ñ‚ÑŒ програму."
+#define qtn_ir_apps_grid "Інт.-радіо"
+#define qtn_ir_apps_list "Інтернет-радіо"
+#define qtn_ir_apps_skey "Інтернет-радіо"
+#define qtn_ir_apps_standby "Інтернет-радіо"
+#define qtn_ir_apps_swins "Інтернет-радіо"
+#define qtn_ir_apps_wheel "Інтернет-радіо"
+#define qtn_ir_bitrate_best "Краща ÑкіÑÑ‚ÑŒ"
+#define qtn_ir_bitrate_high "ВиÑока ÑкіÑÑ‚ÑŒ"
+#define qtn_ir_bitrate_standard "Звичайна ÑкіÑÑ‚ÑŒ"
+#define qtn_ir_cost_heading "Важлива примітка"
+#define qtn_ir_cost_softkey_continue "Продовжити"
+#define qtn_ir_cost_softkey_exit "Вихід"
+#define qtn_ir_cost_title "Інтернет-радіо"
+#define qtn_ir_cost_warning "Інтернет-радіо викориÑтовує Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… телефону Ð´Ð»Ñ Ñ€Ð°Ð´Ñ–Ð¾Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡. Це рекомендовано лише у випадку фікÑованого тарифного плану. Якщо ви не впевнені щодо вартоÑÑ‚Ñ– передачі даних, проконÑультуйтеÑÑ Ð· оператором, перш ніж продовжити."
+#define qtn_ir_country_list_expanded "Станцій: %N"
+#define qtn_ir_countryregion_title "Країни/регіони"
+#define qtn_ir_discover_beststations "Добірка кращих Ñтанцій"
+#define qtn_ir_discover_country_region "Шукати за країною/рег."
+#define qtn_ir_discover_genre "Шукати за жанром"
+#define qtn_ir_discover_genre_expanded "Станції відÑорт. за жанром"
+#define qtn_ir_discover_langauge "Шукати за мовою"
+#define qtn_ir_discover_language_expanded "Станції відÑортов. за мовою"
+#define qtn_ir_discover_staticountryreg "Станц. відÑорт. за країн./рег."
+#define qtn_ir_discover_title "Каталог Ñтанцій"
+#define qtn_ir_discover_top "Кращі Ñтанції"
+#define qtn_ir_edit_title "Редагув. Ñтанції"
+#define qtn_ir_err_operation "Помилка операції. Спробуйте ще раз."
+#define qtn_ir_err_url_unavail "URL-адреÑа недоÑтупна"
+#define qtn_ir_error_address "Ðеправильна адреÑа Інтернет-радіоÑтанції"
+#define qtn_ir_error_connection "Таймаут з'єднаннÑ. Спробуйте ще раз."
+#define qtn_ir_error_favourites "ÐедоÑтатньо міÑÑ†Ñ Ð² папці \"Обране\" Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… елементів"
+#define qtn_ir_error_general "Ðеможливо з'єднатиÑÑ Ð·Ñ– Ñтанцією"
+#define qtn_ir_error_isds_unavailable "ПоÑлуга каталогу Інтернет-Ñтанцій тимчаÑово недоÑтупна"
+#define qtn_ir_error_notavailable "Ðемає потокових поÑилань"
+#define qtn_ir_error_notinisds "Об'єкт більше не доÑтупний"
+#define qtn_ir_error_search "Введіть шукане Ñлово"
+#define qtn_ir_findst_addstation "Додати Ñтанцію вручну"
+#define qtn_ir_findst_addtofav "Додав. Ñтанції до обраного"
+#define qtn_ir_findst_browsesds "Шукати в катал. Ñтанцій"
+#define qtn_ir_findst_search_ensrhterm "Ð’Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÑˆÑƒÐºÐ°Ð½Ð¸Ñ… Ñлів"
+#define qtn_ir_findst_softkey_search "Пошук"
+#define qtn_ir_findstation_title "Пошук Ñтанцій"
+#define qtn_ir_firstuse_title "Інтерн.-радіо: вітаємо"
+#define qtn_ir_genre_list_expanded "Станцій: %N"
+#define qtn_ir_genre_title "Жанри"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Ðемає запиÑів журналу"
+#define qtn_ir_homescreen_buffering "БуферизаціÑ"
+#define qtn_ir_homescreen_lastplayed "ОÑтаннє відтвор."
+#define qtn_ir_info_details_bitrate "%N кбіт/Ñ:"
+#define qtn_ir_info_details_countryregi "Країна/регіон:"
+#define qtn_ir_info_details_description "ОпиÑ:"
+#define qtn_ir_info_details_genre "Жанри:"
+#define qtn_ir_info_details_language "Мова:"
+#define qtn_ir_info_details_name "Ðазва:"
+#define qtn_ir_info_details_streams "Потоки:"
+#define qtn_ir_info_details_title "Інф. про Ñтанц."
+#define qtn_ir_info_details_type "Тип:"
+#define qtn_ir_info_details_type_isds "Кат. Ñтан."
+#define qtn_ir_info_details_type_manual "КориÑÑ‚."
+#define qtn_ir_info_details_unnamed "Без назв."
+#define qtn_ir_info_softkey_close "Закрити"
+#define qtn_ir_language_list_expanded "Станцій: %N"
+#define qtn_ir_language_title "Мови"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Триває завантаженнÑ"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Триває пошук"
+#define qtn_ir_main_descriptive_text "Виб. \"Пошук Ñтанцій\" на пан. інÑÑ‚Ñ€. Ð´Ð»Ñ Ð´Ð¾Ð´. Ñтан."
+#define qtn_ir_main_discover_expanded "Пошук нових радіоÑтанцій"
+#define qtn_ir_main_last "ОÑÑ‚Ð°Ð½Ð½Ñ ÑтанціÑ"
+#define qtn_ir_main_now "Поточна ÑтанціÑ"
+#define qtn_ir_main_prog_deleting "Триває Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ %N"
+#define qtn_ir_main_searchindir "Шукати в каталогу"
+#define qtn_ir_main_title "Інтернет-радіо"
+#define qtn_ir_main_unnamed_station "Станц. без назви"
+#define qtn_ir_memlo_ram_out_of_mem "ÐедоÑтатньо пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ—. Спочатку видаліть деÑкі дані."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N кбіт/Ñ"
+#define qtn_ir_now_bitrate_mbps "%N мбіт/Ñ"
+#define qtn_ir_now_bytecountermb "%N Mб"
+#define qtn_ir_now_deci_bytecountermb "%0N,%1N Мб"
+#define qtn_ir_now_fm_frequency "%U[16] МГц"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "ÐаÑтупна ÑтанціÑ"
+#define qtn_ir_now_tooltip_play "Відтворити"
+#define qtn_ir_now_tooltip_previous "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ ÑтанціÑ"
+#define qtn_ir_now_tooltip_stop "Зупинити"
+#define qtn_ir_now_wait_buffering "Триває буферизаціÑ"
+#define qtn_ir_now_wait_buffering_perc "Ð‘ÑƒÑ„ÐµÑ€Ñ–Ð·Ð°Ñ†Ñ–Ñ %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "ВідÑутнє Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею"
+#define qtn_ir_nwcontroller_err_nosnaps "Ðе визначено точку доÑтупу"
+#define qtn_ir_options_add "Додати до обраного"
+#define qtn_ir_options_add_manually "Додати Ñтанцію вручну"
+#define qtn_ir_options_change "Змінити"
+#define qtn_ir_options_clearhistory "ОчиÑтити журнал"
+#define qtn_ir_options_editstation "Редагувати Ñтанцію"
+#define qtn_ir_options_equalizer "Еквалайзер"
+#define qtn_ir_options_exit "Вихід"
+#define qtn_ir_options_findnmusicstore "Шукати в Муз. магазині"
+#define qtn_ir_options_fmtrans "FM-передавач"
+#define qtn_ir_options_gotomusicstore "До Музичного магазину"
+#define qtn_ir_options_help "Довідка"
+#define qtn_ir_options_history "Журнал"
+#define qtn_ir_options_info "Інформ. про Ñтанцію"
+#define qtn_ir_options_mainview "До головного вікна"
+#define qtn_ir_options_mark "Позначити"
+#define qtn_ir_options_markall "Позначити вÑÑ–"
+#define qtn_ir_options_markunmark "Позначити/СкаÑ. позн."
+#define qtn_ir_options_now "До поточної Ñтанції"
+#define qtn_ir_options_off "Вимкнути"
+#define qtn_ir_options_on "Увімкнути"
+#define qtn_ir_options_searchag "Шукати знову"
+#define qtn_ir_options_select "Вибрати"
+#define qtn_ir_options_settings "УÑтановки"
+#define qtn_ir_options_station "СтанціÑ"
+#define qtn_ir_options_stereowidening "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñтерео"
+#define qtn_ir_options_unmark "СкаÑув. позначеннÑ"
+#define qtn_ir_options_unmarkall "СкаÑувати вÑÑ– познач."
+#define qtn_ir_playfail_err "Помилка Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð°Ð´Ñ–Ð¾"
+#define qtn_ir_playlist_title "Отрим. поÑил."
+#define qtn_ir_popup_no_results "Результатів не знайдено"
+#define qtn_ir_popup_toomany_results "Занадто багато результатів. Уточніть шуканий термін."
+#define qtn_ir_results_none "Ðе знайдено відповідних Ñтанцій. Повторіть пошук."
+#define qtn_ir_search_result "%0U[09]:%1N результ."
+#define qtn_ir_search_results "%0U[08]:%1N результ."
+#define qtn_ir_set_folder_internetradio "Інтернет-радіо"
+#define qtn_ir_set_folder_irradio "Інтернет-радіо"
+#define qtn_ir_settings_3g "ШвидкіÑÑ‚ÑŒ з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ 3G"
+#define qtn_ir_settings_connec_softkey_ok "ОК"
+#define qtn_ir_settings_gprs "ШвидкіÑÑ‚ÑŒ з'єдн. GPRS"
+#define qtn_ir_settings_network "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею"
+#define qtn_ir_settings_snap_default "Стандартне з'єднаннÑ"
+#define qtn_ir_settings_title "УÑтановки"
+#define qtn_ir_settings_wifi "ШвидкіÑÑ‚ÑŒ з'єдн. Wi-Fi"
+#define qtn_ir_softkey_back "Ðазад"
+#define qtn_ir_softkey_cancel "СкаÑувати"
+#define qtn_ir_softkey_done "Готово"
+#define qtn_ir_softkey_no "ÐÑ–"
+#define qtn_ir_softkey_options "Опції"
+#define qtn_ir_softkey_select "Вибрати"
+#define qtn_ir_softkey_yes "Так"
+#define qtn_ir_station_saved "Станцію збережено"
+#define qtn_ir_stationlist_nomatches "(немає збігів)"
+#define qtn_ir_stations_popup_delete "Видалити\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Видалити Ñтанції (%N)?"
+#define qtn_ir_stations_popup_removed "%U[86] видалено"
+#define qtn_ir_stations_popup_removed_many "Видалено Ñтанцій: %N"
+#define qtn_ir_stations_popup_save "Зберегти Ñтанцію в папці \"Обране\"?"
+#define qtn_ir_suboptions_delete "Видалити"
+#define qtn_ir_suboptions_details "Деталі"
+#define qtn_ir_suboptions_move "ПереміÑтити"
+#define qtn_ir_terms_details "ПогоджуючиÑÑŒ із викладеними нижче умовами, Ви укладаєте угоду в такій мірі, Ñка дозволена заÑтоÑовним законодавÑтвом, без додаткових обмежень або заборон, що ÑтоÑуютьÑÑ Ð²ÑÑ–Ñ… матеріальних прав"
+#define qtn_ir_terms_heading "Умови та положеннÑ"
+#define qtn_ir_terms_softkey_accept "ПрийнÑти"
+#define qtn_ir_terms_softkey_decline "Відхилити"
+#define qtn_ir_title_history "Журнал"
+#define qtn_ir_tooltip_addalltofav "Дод. вÑе до обраного"
+#define qtn_ir_tooltip_addstation "Додати Ñтанц. вручну"
+#define qtn_ir_tooltip_addtofav "Додати до обраного"
+#define qtn_ir_tooltip_copy "Копіювати"
+#define qtn_ir_tooltip_findnstore "Шукати в Муз. магаз."
+#define qtn_ir_tooltip_findst "Пошук Ñтанцій"
+#define qtn_ir_tooltip_history "Журнал"
+#define qtn_ir_tooltip_listen "ПроÑлухати"
+#define qtn_ir_tooltip_paste "Ð’Ñтавити"
+#define qtn_ir_tooltip_stationde "Деталі Ñтанції"
+#define qtn_ir_top_title "Кращі Ñтанції"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Ðазва"
+#define qtn_ir_url_title "Додав. Ñтанції"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/93/internetradioai_93.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Інтернет-радіо">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/93/terms_93.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>ПоÑлуга Інтернет-радіо (“ПоÑлугаâ€) від компанії Nokia дозволÑÑ” знаходити Інтернет-радіоÑтанції та наÑолоджуватиÑÑ Ð¿Ñ€Ð¾ÑлуховуваннÑм вміÑту, Ñкий вони пропонують. ВИКОРИСТОВУЮЧИ ЦЮ ПОСЛУГУ ВИ ПІДТВЕРДЖУЄТЕ, ЩО ОЗÐÐЙОМИЛИСЯ З ДÐÐОЮ УГОДОЮ, ЗРОЗУМІЛИ ЇЇ ТРПОГОДЖУЄТЕСЯ З ВИКЛÐДЕÐИМИ У ÐІЙ ПОЛОЖЕÐÐЯМИ ТРУМОВÐМИ. Зауважте, що незгода з положеннÑми та умовами угоди позбавлÑÑ” Ð’Ð°Ñ Ð¿Ñ€Ð°Ð²Ð° кориÑтуватиÑÑ ÐŸÐ¾Ñлугою.</p>
+
+<p></p>
+
+<h1>1. ВИЗÐÐЧЕÐÐЯ</h1>
+
+<p></p>
+
+<p>Інтернет-радіоÑтанції – це організації, Ñкі Ñтворюють та розповÑюджують аудіо-вміÑÑ‚ Ñ– пов’Ñзані з ним метадані через Інтернет у виглÑді потоку.</p>
+
+<p></p>
+
+<p>ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Інтернет-радіоÑтанцію – це вказівник або набір вказівників на міÑÑ†ÐµÐ·Ð½Ð°Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ€ÐµÑурÑу, Ñкі дозволÑÑŽÑ‚ÑŒ кориÑтувачеві отримати доÑтуп до вміÑту, що передаєтьÑÑ Ð†Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-радіоÑтанцією.</p>
+
+<p></p>
+
+<h1>2. ПОСЛУГÐ</h1>
+
+<p></p>
+
+<p>ПоÑлуга дозволÑÑ” виконувати такі дії:</p>
+<p>1. переглÑдати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Інтернет-радіоÑтанції;</p>
+<p>2. отримувати доÑтуп до вміÑту, що передаєтьÑÑ Ð†Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-радіоÑтанціÑми;</p>
+
+<p></p>
+
+<h1>3. ВИКОРИСТÐÐÐЯ ПОСЛУГИ</h1>
+
+<p></p>
+
+<p>ВикориÑÑ‚Ð°Ð½Ð½Ñ ÐŸÐ¾Ñлуги дозволене лише Ð´Ð»Ñ Ð²Ð»Ð°Ñних потреб та у некомерційних цілÑÑ…. Права інтелектуальної влаÑноÑÑ‚Ñ– на ПоÑлугу належать компанії Nokia.</p>
+
+<p></p>
+
+<p>ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia залишає за Ñобою право змінювати ці Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° умови, вчаÑно інформуючи Ð’Ð°Ñ Ð¿Ñ€Ð¾ відповідні зміни.</p>
+
+<p></p>
+
+<h1>4. КОÐФІДЕÐЦІЙÐІСТЬ</h1>
+
+<p></p>
+
+<p>ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia зобов’ÑзуєтьÑÑ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸ конфіденційніÑÑ‚ÑŒ інформації кориÑтувачів шлÑхом заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ–Ñ”Ð²Ð¸Ñ… заÑобів захиÑту приватноÑÑ‚Ñ–.</p>
+
+<p></p>
+
+<p>З метою Ð²Ð¸Ð²Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÐ½Ð´ÐµÐ½Ñ†Ñ–Ð¹ викориÑтаннÑ, а також Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¾Ð³Ð¾ вдоÑÐºÐ¾Ð½Ð°Ð»ÐµÐ½Ð½Ñ ÐŸÐ¾Ñлуги ÐºÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia може збирати дані кориÑтувачів, включаючи, але не обмежуючиÑÑŒ, такими даними: перелік Інтернет-радіоÑтанцій, до Ñких отримувавÑÑ Ð´Ð¾Ñтуп, Ñ‡Ð°Ñ Ð¿Ñ€Ð¾ÑÐ»ÑƒÑ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— радіоÑтанції та об’єкти, Ñким було надано ÑÑ‚Ð°Ñ‚ÑƒÑ â€œÐ’Ð¸Ð±Ñ€Ð°Ð½Ðµâ€.</p>
+
+<p></p>
+
+<p>ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia не збирає жодних даних, Ñкі б дозволÑли ідентифікувати кориÑтувачів ПоÑлуги.</p>
+
+<p></p>
+
+<h1>5. ДОСТУПÐІСТЬ ПОСЛУГИ</h1>
+
+<p></p>
+
+<p>ПоÑлуга надаєтьÑÑ Ð´Ð»Ñ Ð’Ð°ÑˆÐ¾Ñ— зручноÑÑ‚Ñ–. Вона надаєтьÑÑ Ð½Ð° умовах "Ñк Ñ”" та "Ñк доÑтупно".  ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia не гарантує неперервноÑÑ‚Ñ– ПоÑлуги та відÑутноÑÑ‚Ñ– у ній помилок. ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia залишає за Ñобою право в будь-Ñкий Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½ÑŽÐ²Ð°Ñ‚Ð¸ ПоÑлугу або ÑкаÑовувати до неї доÑтуп.</p>
+
+<p></p>
+
+<p>ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia може на влаÑний розÑуд надавати Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ забезпеченнÑ, пов’Ñзаного з ПоÑлугою.</p>
+
+<p></p>
+
+<h1>6. ЗÐЯВРПРО ОБМЕЖЕÐÐЯ ВІДПОВІДÐЛЬÐОСТІ</h1>
+
+<p></p>
+
+<p>Ð”Ð»Ñ Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð·Ñ€ÑƒÑ‡Ð½Ð¾ÑÑ‚Ñ– роботи з ПоÑлугою ÐºÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia може передбачити у ній поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Інтернет-радіоÑтанції, Ñкі Ñ” влаÑніÑÑ‚ÑŽ третіх оÑіб або підпорÑдковуютьÑÑ Ñ—Ð¼. ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia не гарантує робочий Ñтан поÑилань на Інтернет-радіоÑтанції. Крім того, поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° вміÑÑ‚, не пов’Ñзаний із Nokia, не означає, що Nokia Ñхвалює Ñам вміÑÑ‚ або продукти чи поÑлуги, на Ñкі цей вміÑÑ‚ поÑилаєтьÑÑ.</p>
+
+<p></p>
+
+<p>Перед отриманнÑм доÑтупу до Інтернет-радіоÑтанції необхідно ознайомитиÑÑ Ñ‚Ð° погодитиÑÑ Ð· правилами Ñ—Ñ— викориÑтаннÑ, Ñкщо такі Ñ”. Зауважте, що Nokia не контролює вміÑÑ‚ поÑлуг третіх оÑіб Ñ– не неÑе жодної відповідальноÑÑ‚Ñ– за вміÑÑ‚, Ñкий надаєтьÑÑ Ð†Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-радіоÑтанціÑми.</p>
+
+<p></p>
+
+<p>ДоÑтуп до вміÑту Інтернет-радіоÑтанцій за допомогою ПоÑлуги може призвеÑти до передачі великих обÑÑгів даних через мережу Вашого поÑтачальника поÑлуг. ВартіÑÑ‚ÑŒ передачі даних Ви можете дізнатиÑÑ Ñƒ Ñвого поÑтачальника поÑлуг. Зауважте, що викориÑÑ‚Ð°Ð½Ð½Ñ ÐŸÐ¾Ñлуги Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÐ»ÑƒÑ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¼Ñ–Ñту Інтернет-радіоÑтанцій, Ñкі передбачають виÑоку швидкіÑÑ‚ÑŒ передачі даних, може призвеÑти до Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð¾Ð¿Ð»Ð°Ñ‚Ð¸, що залежить від обÑÑгу переданих даних.</p>
+
+<p></p>
+
+<p>ВикориÑÑ‚Ð°Ð½Ð½Ñ ÐŸÐ¾Ñлуги може передбачати передачу даних у таких цілÑÑ…:  Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¼Ñ–Ñту каталогу Інтернет-радіоÑтанцій, передача даних з Інтернет-радіоÑтанції, збір ÑтатиÑтичних даних та Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Інтернет-радіо.</p>
+
+<p></p>
+
+<p>ÐšÐ¾Ð¼Ð¿Ð°Ð½Ñ–Ñ Nokia не неÑе відповідальноÑÑ‚Ñ– за вартіÑÑ‚ÑŒ передачі даних, пов’Ñзаних із викориÑтаннÑм ПоÑлуги.</p>
+
+<p></p>
+
+<p>КОМПÐÐІЯ NOKIA ÐЕ ÐÐДÐЄ ЖОДÐИХ ГÐРÐÐТІЙ СТОСОВÐО ДОСТУПÐОСТІ, ТОЧÐОСТІ, ÐÐДІЙÐОСТІ ÐБО ВМІСТУ ПОСЛУГИ, ВИРÐЖЕÐИХ ЯВÐО ÐБО ТÐКИХ, ЩО ÐœÐЮТЬСЯ ÐРУВÐЗІ, ВКЛЮЧÐЮЧИ, ÐЛЕ ÐЕ ОБМЕЖУЮЧИСЬ ÐИМИ, ГÐРÐÐТІЇ ПРÐВОВОГО ТИТУЛУ ÐБО ВІДСУТÐОСТІ ПОРУШЕÐÐЯ ПРÐÐ’ ЧИ ÐЕЯВÐІ ГÐРÐÐТІЇ ПРИДÐТÐОСТІ ДО ПРОДÐЖУ ÐБО ВИКОРИСТÐÐÐЯ У ПЕВÐИХ ЦІЛЯХ. КОМПÐÐІЯ NOKIA  ÐЕ ÐЕСЕ ВІДПОВІДÐЛЬÐОСТІ ЗРБУДЬ- ЯКІ ПРЯМІ, ÐЕПРЯМІ, ВИПÐДКОВІ, ФÐКТИЧÐІ ÐБО ОПОСЕРЕДКОВÐÐІ ЗБИТКИ, ВТРÐЧЕÐІ ПРИБУТКИ ÐБО ПЕРЕРВИ Ð’ РОБОТІ, СПРИЧИÐЕÐІ ВИКОРИСТÐÐÐЯМ ÐБО ÐЕМОЖЛИВІСТЮ ВИКОРИСТÐÐÐЯ ПОСЛУГИ, ÐÐВІТЬ ЯКЩО КОМПÐÐІЮ NOKIA БУЛО ПОВІДОМЛЕÐО ПРО МОЖЛИВІСТЬ ТÐКИХ ЗБИТКІВ. У ДЕЯКИХ ЮРИСДИКЦІЯХ ÐЕ ДОЗВОЛЯЮТЬСЯ ОБМЕЖЕÐÐЯ ВІДПОВІДÐЛЬÐОСТІ ÐБО ВІДМОВРВІД ПЕВÐИХ ГÐРÐÐТІЙ, ТОМУ ÐÐВЕДЕÐІ ВИЩЕ ОБМЕЖЕÐÐЯ ÐБО ВІДМОВИ МОЖУТЬ ДЛЯ Ð’ÐС ÐЕ ДІЯТИ. У ТÐКОМУ ВИПÐДКУ ВІДПОВІДÐЛЬÐІСТЬ КОМПÐÐІЇ NOKIA ОБМЕЖУВÐТИМЕТЬСЯ ДО ÐÐЙБІЛЬШОЇ МІРИ, ДОЗВОЛЕÐОЇ ЗÐКОÐОМ.</p>
+
+<p></p>
+
+<p>Ðічого із зазначеного тут не має обмежувати законні права будь-Ñкої Ñторони, що виÑтупає у ролі клієнта. Ðічого із зазначеного тут не обмежує відповідальніÑÑ‚ÑŒ компанії Nokia у випадку Ñмерті або Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ‚Ñ€Ð°Ð²Ð¼Ð¸ внаÑлідок виÑву халатноÑÑ‚Ñ– з боку компанії Nokia.</p>
+
+<p></p>
+
+<h1>7. ПОРЯДОК ДІЙ У ВИПÐДКУ ЗВИÐУВÐЧЕÐÐЯ У ПОРУШЕÐÐІ ÐВТОРСЬКИХ ПРÐÐ’</h1>
+
+<p></p>
+
+<p>Якщо Ви впевнені, що Ваша захищена авторÑьким правом робота була викориÑтана у ÑпоÑіб, що призвів до Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ñьких прав, Ви можете повідомити про це компанію Nokia, зазначивши у повідомленні наÑтупне:</p>
+
+<p></p>
+
+<p>(1) Фізичний або електронний Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð¾Ñоби, уповноваженої діÑти від імені влаÑника винÑткового права, Ñке, згідно звинуваченнÑ, було порушене;</p>
+
+<p></p>
+
+<p>(2) Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð°Ð±Ð¾ Ð¾Ð¿Ð¸Ñ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— авторÑьким правом роботи, права на Ñку були порушені;</p>
+
+<p></p>
+
+<p>(3) Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð°Ð±Ð¾ Ð¾Ð¿Ð¸Ñ Ð¼Ð°Ñ‚ÐµÑ€Ñ–Ð°Ð»Ñƒ, Ñкий, згідно звинуваченнÑ, порушує права та інформаціÑ, доÑÑ‚Ð°Ñ‚Ð½Ñ Ð´Ð»Ñ Ð²Ð¸ÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†ÐµÐ·Ð½Ð°Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ матеріалу;</p>
+
+<p></p>
+
+<p>(4) Ваше ім’Ñ, адреÑа, номер телефону, адреÑа електронної пошти та будь-Ñкі інші відомоÑÑ‚Ñ–, Ñкі дозволÑÑ‚ÑŒ предÑтавникам компанії Nokia з Вами зв’ÑзатиÑÑ;</p>
+
+<p></p>
+
+<p>(5) Ð¡Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð’Ð°ÑˆÐ¾Ñ— абÑолютної впевненоÑÑ‚Ñ– у тому, що викориÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ñ‚ÐµÑ€Ñ–Ð°Ð»Ñƒ у ÑпоÑіб, зазначений у звинуваченні, не був дозволений влаÑником авторÑьких прав, його агентом або законом; та</p>
+
+<p></p>
+
+<p>(6) ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾ÑÑ‚Ñ– наданої у повідомленні інформації та заÑва, зроблена з уÑвідомленнÑм відповідальноÑÑ‚Ñ– за дачу неправдивих Ñвідчень, про те, що Ви уповноважені діÑти від імені влаÑника винÑткового права, Ñке, згідно звинуваченнÑ, було порушене.</p>
+
+<p></p>
+
+<p>ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¾ надіÑлати нашому Ñпеціально призначеному агентові на адреÑу:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. ЗÐСТОСОВУВÐÐИЙ ЗÐКОÐ</h1>
+
+<p></p>
+
+<p>ВикориÑтовувана у цих положеннÑÑ… та умовах назва "Nokia" означає Nokia Corporation. Nokia забезпечує роботу та здійÑнює керівництво ПоÑлугою з офіÑів у межах ФінлÑндії. Таким чином інформаціÑ, що міÑтитьÑÑ Ñƒ ПоÑлузі, вважаєтьÑÑ Ð½Ð°Ð´Ð°Ð½Ð¾ÑŽ у ФінлÑндії.</p>
+
+<p></p>
+
+<p>ÐвторÑькі права належать © Nokia Corporation, 2006 Ñ€. УÑÑ– права захищені.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/94/internetradio_94.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Ú¾Ù…ÛŒØ´Û Ø¯Ø±ÛŒØ§Ùت کریں"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "â€%N اسٹیشن Ø­Ùظ Ûوگئے"
+#define qtn_ir_added_single "â€%U[86] Ø­Ùظ Ûوگئے"
+#define qtn_ir_addmanually_unnamed "بے نام"
+#define qtn_ir_addst_description "وضاحت"
+#define qtn_ir_addst_streamurl "â€URL اسٹریم"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U -%2U: %3U"
+#define qtn_ir_ai_iradio_title "انٹرنیٹ ریڈیو"
+#define qtn_ir_ai_radio_not_active "ریڈیو Ùعال Ù†ÛÙŠÚº"
+#define qtn_ir_app_general_err "داخلی غلطی۔ اضاÙÛŒ پروگرام Ø¯ÙˆØ¨Ø§Ø±Û Ú†Ø§Ù„Ùˆ کریں۔"
+#define qtn_ir_apps_grid "انٹرنیٹ ریڈیو"
+#define qtn_ir_apps_list "انٹرنیٹ ریڈیو"
+#define qtn_ir_apps_skey "انٹرنیٹ ریڈیو"
+#define qtn_ir_apps_standby "انٹرنیٹ ریڈیو"
+#define qtn_ir_apps_swins "انٹرنیٹ ریڈیو"
+#define qtn_ir_apps_wheel "انٹرنیٹ ریڈیو"
+#define qtn_ir_bitrate_best "بÛترین کوالٹی"
+#define qtn_ir_bitrate_high "اعلی کوالٹی"
+#define qtn_ir_bitrate_standard "معیاری کوالٹی"
+#define qtn_ir_cost_heading "اھم نوٹس"
+#define qtn_ir_cost_softkey_continue "جاری"
+#define qtn_ir_cost_softkey_exit "باھر نکلیں"
+#define qtn_ir_cost_title "انٹرنیٹ ریڈیو"
+#define qtn_ir_cost_warning "انٹرنیٹ ریڈيو ریڈيو ترسیل Ú©Û’ لئے آپ Ú©Û’ Ùون کا ڈيٹا کنکشن استعمال کرتا ÛÛ’- ÛŒÛ ØµØ±Ù Ø§Ø³ وقت تجویز Ú©Ø±Ø¯Û ÛÛ’ اگر آپ Ú©Û’ پاس Ûموار ÙÛŒ کا ڈيٹا پلین ÛÛ’ اگر آپ Ú©Ùˆ اپنے ڈيٹا Ú©ÛŒ قیمتوں Ú©Û’ بارے میں Ø´Ú© ÛÙˆ تو جاری رکھنے سے Ù¾ÛÙ„Û’ اپنے آپریٹر سے رجوع کریں"
+#define qtn_ir_country_list_expanded "%N اسٹیشن"
+#define qtn_ir_countryregion_title "ملک/علاقے"
+#define qtn_ir_discover_beststations "بÛترین اسٹیشن Ú©ÛŒ تلاش"
+#define qtn_ir_discover_country_region "براؤز کریں بلحاظ ملک/منطقÛ"
+#define qtn_ir_discover_genre "بلحاظ جنرے براؤز کریں"
+#define qtn_ir_discover_genre_expanded "بلحاظ جنرے چھانٹے گئے اسٹیشن"
+#define qtn_ir_discover_langauge "بلحاظ زبان براؤز کریں"
+#define qtn_ir_discover_language_expanded "بلحاظ زبان چھانٹے گئے اسٹیشن"
+#define qtn_ir_discover_staticountryreg "ملک/علاقے بلحاظ ترتیب"
+#define qtn_ir_discover_title "اسٹیشن ڈائرک۔"
+#define qtn_ir_discover_top "چوٹی کے اسٹیشن"
+#define qtn_ir_edit_title "اسٹیشن ترمیم"
+#define qtn_ir_err_operation "Ø¹Ù…Ù„ÛŒÛ Ù…ÛŒÚº نقص۔ Ø¯ÙˆØ¨Ø§Ø±Û Ú©ÙˆØ´Ø´ کریں۔"
+#define qtn_ir_err_url_unavail "URL دستیاب Ù†Ûیں"
+#define qtn_ir_error_address "غلط انٹرنیٹ ریڈیو اسٹیشن کا پتÛ"
+#define qtn_ir_error_connection "اتصال Ûونے کا وقت ختم Ûوگیا۔ Ø¯ÙˆØ¨Ø§Ø±Û Ú©ÙˆØ´Ø´ کریں۔"
+#define qtn_ir_error_favourites "انتخاب محÙوظ کرنے Ú©Û’ لئے پسندیدگان میں Ø¬Ú¯Û Ù†ÛÙŠÚº"
+#define qtn_ir_error_general "اسٹیشن سے متصل Ûونے سے قاصر"
+#define qtn_ir_error_isds_unavailable "انٹرنیٹ اسٹیشن ذائر خدمت عارضی طور پر عدم دستیاب"
+#define qtn_ir_error_notavailable "کوئی اسٹریمنگ لنک دستیاب Ù†ÛÙŠÚº"
+#define qtn_ir_error_notinisds "آئیٹم اب اور دستیاب Ù†Ûیں ÛÛ’"
+#define qtn_ir_error_search "تلاش کرنے کی اصطلاح داخل کریں"
+#define qtn_ir_findst_addstation "اسٹیشن اپنے Ûاتھ سے شامل"
+#define qtn_ir_findst_addtofav "پسندیدگان میں شامل"
+#define qtn_ir_findst_browsesds "اسٹیشن ڈائریکٹری براؤز"
+#define qtn_ir_findst_search_ensrhterm "تلاش کی اصطلاح داخل کریں"
+#define qtn_ir_findst_softkey_search "تلاش"
+#define qtn_ir_findstation_title "اسٹیشن تلاش"
+#define qtn_ir_firstuse_title "انٹرنیٹ ریڈیو"
+#define qtn_ir_genre_list_expanded "%N اسٹیشن"
+#define qtn_ir_genre_title "جنریس"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "کوئی Ûسٹری Ù†ÛÙŠÚº"
+#define qtn_ir_homescreen_buffering "بÙر کررÛا ÛÛ’"
+#define qtn_ir_homescreen_lastplayed "آخری پلے کیا گیا"
+#define qtn_ir_info_details_bitrate "â€%N Ú© ب/س :"
+#define qtn_ir_info_details_countryregi "ملک/منطقÛ:"
+#define qtn_ir_info_details_description "تÙصیل:"
+#define qtn_ir_info_details_genre "جنریس:"
+#define qtn_ir_info_details_language "زبان:"
+#define qtn_ir_info_details_name "نام:"
+#define qtn_ir_info_details_streams "بÛاؤ:"
+#define qtn_ir_info_details_title "معلومات"
+#define qtn_ir_info_details_type "قسم:"
+#define qtn_ir_info_details_type_isds "ڈائر"
+#define qtn_ir_info_details_type_manual "صار٠کا "
+#define qtn_ir_info_details_unnamed "بے نام"
+#define qtn_ir_info_softkey_close "بند کریں"
+#define qtn_ir_language_list_expanded "%N اسٹیشن"
+#define qtn_ir_language_title "زبانیں"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "لوڈ کررÛا ÛÛ’"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "تلاش کررھاھے"
+#define qtn_ir_main_descriptive_text "شامل کرنے کے لئے ٹول بار سے اسٹیشن تلاش"
+#define qtn_ir_main_discover_expanded "نئے ریڈیو اسٹیشن دریاÙت کریں"
+#define qtn_ir_main_last "آخری پلے کیا گیا"
+#define qtn_ir_main_now "اب چلا رÛا ÛÛ’"
+#define qtn_ir_main_prog_deleting "%N مٹارÛا ÛÛ’"
+#define qtn_ir_main_searchindir "ڈائریکٹری میں تلاش"
+#define qtn_ir_main_title "انٹرنیٹ ریڈیو"
+#define qtn_ir_main_unnamed_station "بے نام اسٹیشن"
+#define qtn_ir_memlo_ram_out_of_mem "عملیات انجام دینے کیلئے حاÙØ¸Û Ú©Ø§ÙÛŒ Ù†Ûیں۔ Ù¾ÛÙ„Û’ Ú©Ú†Ú¾ ڈیٹا مٹائیں۔"
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "â€%N Ú© ب"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "اگلا چینل"
+#define qtn_ir_now_tooltip_play "پلے کریں"
+#define qtn_ir_now_tooltip_previous "Ø³Ø§Ø¨Ù‚Û Ø§Ø³Ù¹ÛŒØ´Ù†"
+#define qtn_ir_now_tooltip_stop "روکیں"
+#define qtn_ir_now_wait_buffering "بÙر کررÛا ÛÛ’"
+#define qtn_ir_now_wait_buffering_perc "بÙرنگ %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "کوئی نیٹورک اتصال Ù†Ûیں ÛÛ’"
+#define qtn_ir_nwcontroller_err_nosnaps "کوئی Ù†Ù‚Ø·Û Ø±Ø³Ø§Ø¦ÛŒ واضح Ù†ÛÙŠÚº"
+#define qtn_ir_options_add "Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ù…ÛŒÚº شامل"
+#define qtn_ir_options_add_manually "اسٹیشن اپنے Ûاتھ سے شامل"
+#define qtn_ir_options_change "تبدیل کریں"
+#define qtn_ir_options_clearhistory "Ûسٹری صاÙ"
+#define qtn_ir_options_editstation "اسٹیشن ترمیم"
+#define qtn_ir_options_equalizer "ایکولائزر"
+#define qtn_ir_options_exit "باھر نکلیں"
+#define qtn_ir_options_findnmusicstore "میوزک کی دکان میں تلاش"
+#define qtn_ir_options_fmtrans "â€FM ٹرانسمیٹر"
+#define qtn_ir_options_gotomusicstore "میوزک کی دکان پر جائيں"
+#define qtn_ir_options_help "معاونت"
+#define qtn_ir_options_history "تاریخ"
+#define qtn_ir_options_info "اسٹیشن معلومات"
+#define qtn_ir_options_mainview "مرکزی ویو پر جائيں"
+#define qtn_ir_options_mark "نشان لگانا"
+#define qtn_ir_options_markall "سب پر نشان لگانا"
+#define qtn_ir_options_markunmark "نشان لگائیں/نشان Ûٹائیں"
+#define qtn_ir_options_now "اب پلے کررÛا ÛÛ’ پر جائیں"
+#define qtn_ir_options_off "بند"
+#define qtn_ir_options_on "چالو"
+#define qtn_ir_options_searchag "Ø¯ÙˆØ¨Ø§Ø±Û ØªÙ„Ø§Ø´ کرو"
+#define qtn_ir_options_select "منتخب کریں"
+#define qtn_ir_options_settings "ترتیبات"
+#define qtn_ir_options_station "اسٹیشن"
+#define qtn_ir_options_stereowidening "اسٹیریو کی چوڑائی"
+#define qtn_ir_options_unmark "نشان ھٹانا"
+#define qtn_ir_options_unmarkall "سب غیر واضح"
+#define qtn_ir_playfail_err "ریڈیو پلے بیک ناکام Ûوگیا"
+#define qtn_ir_playlist_title "Ù…ÙˆØµÙˆÙ„Û Ù„Ù†Ú©Ø³"
+#define qtn_ir_popup_no_results "تلاش کا کوئی Ù†ØªÛŒØ¬Û Ù†Ûیں نکلا"
+#define qtn_ir_popup_toomany_results "بÛت سارے نتائج تلاش Ú©ÛŒ اصطلاح Ú©Ùˆ واضح کریں"
+#define qtn_ir_results_none "کوئی ملتے Ûوئے اسٹیشن Ù†ÛÙŠÚº ملیں Ø¯ÙˆØ¨Ø§Ø±Û ØªÙ„Ø§Ø´"
+#define qtn_ir_search_result "%0U[12]:%1N نتیجÛ"
+#define qtn_ir_search_results "%0U[12]:%1N نتائج"
+#define qtn_ir_set_folder_internetradio "انٹرنیٹ ریڈیو"
+#define qtn_ir_set_folder_irradio "انٹرنیٹ ریڈیو"
+#define qtn_ir_settings_3g "â€3G اتصال بٹریٹ"
+#define qtn_ir_settings_connec_softkey_ok "ٹھیک ÛÛ’"
+#define qtn_ir_settings_gprs "â€GPRS اتصال بٹریٹ"
+#define qtn_ir_settings_network "نیٹورک کنکشن"
+#define qtn_ir_settings_snap_default "ÚˆÙŠÙالٹ کنکشن"
+#define qtn_ir_settings_title "ترتیبات"
+#define qtn_ir_settings_wifi "â€Wi-Fi اتصال بٹریٹ"
+#define qtn_ir_softkey_back "واپس"
+#define qtn_ir_softkey_cancel "منسوخ"
+#define qtn_ir_softkey_done "مکمل‌ھوا"
+#define qtn_ir_softkey_no "Ù†Ûیں"
+#define qtn_ir_softkey_options "اختیارات"
+#define qtn_ir_softkey_select "منتخب"
+#define qtn_ir_softkey_yes "ھاں"
+#define qtn_ir_station_saved "اسٹیشن Ø­Ùظ Ûوگیا"
+#define qtn_ir_stationlist_nomatches "â€(ملتا جلتا کوئی Ù†Ûیں)"
+#define qtn_ir_stations_popup_delete "\nâ€%U[73] مٹائيں؟"
+#define qtn_ir_stations_popup_delete_many "%N اسٹیشن مٹائیں؟"
+#define qtn_ir_stations_popup_removed "â€%U[88] مٹائے گئے"
+#define qtn_ir_stations_popup_removed_many "â€%N اسٹیشن مٹادئے"
+#define qtn_ir_stations_popup_save "اسٹیشن Ú©Ùˆ Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ù…ÛŒÚº محÙوظ کریں؟"
+#define qtn_ir_suboptions_delete "مٹائیں"
+#define qtn_ir_suboptions_details "تÙصیلات"
+#define qtn_ir_suboptions_move "منتقل کرو"
+#define qtn_ir_terms_details "شرائط Ùˆ ضوابط سے متÙÙ‚ ÛÙˆ کر آپ قابل اطلاق قانون Ú©ÛŒ Ù…Ù…Ú©Ù†Û Ø­Ø¯ تک معاÛدے پر راضی Ûوتے ÛÙŠÚº جو تمام مواد حقوق Ú©Û’ لحاظ سے مزید محدود یا ممنوع Ù†ÛÙŠÚº ÛÛ’"
+#define qtn_ir_terms_heading "شرائط و ضوابط"
+#define qtn_ir_terms_softkey_accept "قبول کریں"
+#define qtn_ir_terms_softkey_decline "انکار کریں"
+#define qtn_ir_title_history "تاریخ"
+#define qtn_ir_tooltip_addalltofav "تمام پسندیدگان میں شامل"
+#define qtn_ir_tooltip_addstation "اسٹیشن Ûاتھ سے شامل"
+#define qtn_ir_tooltip_addtofav "پسندیدگان میں شامل"
+#define qtn_ir_tooltip_copy "نقل"
+#define qtn_ir_tooltip_findnstore "میوزک کی دکان میں"
+#define qtn_ir_tooltip_findst "اسٹیشن تلاش کریں"
+#define qtn_ir_tooltip_history "تاریخ"
+#define qtn_ir_tooltip_listen "سنیۓ"
+#define qtn_ir_tooltip_paste "پیسٹ"
+#define qtn_ir_tooltip_stationde "تÙصیلات اسٹیشن"
+#define qtn_ir_top_title "چوٹی"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "نام"
+#define qtn_ir_url_title "اسٹیشن شامل"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/94/internetradioai_94.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "نیٹ ریڈیو">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/94/terms_94.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>نوکیا انٹرنیٹ ریڈیو خدمت ("خدمت") آپ Ú©Ùˆ اس قابل بناتی ÛÛ’ Ú©Û Ø¢Ù¾ انٹرنیٹ ریڈیو اسٹیشن Ú©Û’ اجزاء کا انکشا٠کریں نیز ان Ú©Ùˆ ØªØ¬Ø±Ø¨Û Ù…ÛŒÚº لائیں۔ آپ اس بات کا اقرار کرتے Ûیں Ú©Û Ø¢Ù¾ اس خدمت Ú©Ùˆ استعمال کررÛÛ’ Ûیں جو اس بات Ú©Ùˆ تسلیم کرتی ÛÛ’ Ú©Û Ø¢Ù¾ Ù†Û’ اس عÛØ¯Ù†Ø§Ù…Û Ú©Ùˆ پڑھا ÛÛ’ اور اسے سمجھا ÛÛ’ اور آپ ÛŒÛ Ø§Ù‚Ø±Ø§Ø± کرتے Ûیں Ú©Û Ø¢Ù¾ اس Ú©ÛŒ شرائطوں کا پاس Ùˆ لحاظ کریں Ú¯Û’Û” اگر آپ اقرار Ù†Ûیں کرتے Ûیں تو Ø¨Ø±Ø§Û Ú©Ø±Ù… ÛŒÛ Ø¯Ú¾ÛŒØ§Ù† رکھیں Ú©Û Ø¢Ù¾ اس خدمت Ú©Ùˆ استعمال کرنے Ú©Û’ مجاز Ù†Ûیں Ûیں۔</p>
+
+<p></p>
+
+<h1>1. تحدیدات</h1>
+
+<p></p>
+
+<p>انٹرنیٹ ریڈیو کا مطلب ÙˆÛ Ù…ÙˆØ¬ÙˆØ¯ اشیاء Ûیں جو عام طور پر ÙÛرست میں انٹرنیٹ پر آڈیو جزء اور Ù…ØªØ¹Ù„Ù‚Û ÚˆÛŒÙ¹Ø§ میٹا بناتی اور ان Ú©Ùˆ تقسیم کرتی Ûیں۔</p>
+
+<p></p>
+
+<p>انٹرنیٹ ریڈیو اسٹیشن سے Ù…ØªØ¹Ù„Ù‚Û Ø±Ø¨Ø· کا مطلب ÙˆÛ Ù…Ø­Ù„ وقوع Ú©ÛŒ تحدید کرنے والا ÙˆÛ Ù…ØµØ¯Ø± یا محل وقوع Ú©Û’ مصدر Ú©ÛŒ ÙˆÛ ÙÛرست ÛÛ’ جو صار٠کو اس قابل بناتی ÛÛ’ Ú©Û ÙˆÛ Ø§Ù† اجزاء پر رسائی کرے جسے انٹرنیٹ ریڈیو اسٹیشن Ù†Û’ ÙÛرست وار پیش کیا ÛÛ’Û”</p>
+
+<p></p>
+
+<h1>2. خدمت</h1>
+
+<p></p>
+
+<p>خدمت درج ذیل Ú©Ùˆ قابل بناتی ÛÛ’:</p>
+<p>1. انٹرنیٹ ریڈیو اسٹیشن کے رابطوں پر براؤزنگ کرنا؛</p>
+<p>2. انٹرنیٹ ریڈیو اسٹیشن کے جزء پر رسائی حاصل کرنا؛</p>
+
+<p></p>
+
+<h1>3. خدمت کا استعمال</h1>
+
+<p></p>
+
+<p>خدمت کا استعال صر٠آپ Ú©Û’ ذاتی اور غیرتجارتی استعمال Ú©Û’ لئے مجاز ÛÛ’Û” خدمت Ú©Û’ سارے Ùکری پراپرٹی حقوق نوکیا Ú©Û’ پاس محÙوظ Ûیں۔</p>
+
+<p></p>
+
+<p>نوکیا ÛŒÛ Ø­Ù‚ رکھتا ÛÛ’ Ú©Û ÙˆÛ Ø¢Ù¾ Ú©Ùˆ باخبر رکھتے Ûوئے ان شرائط میں تغیر Ùˆ تبدل کرے</p>
+
+<p></p>
+
+<h1>4. اخÙاء</h1>
+
+<p></p>
+
+<p>نوکیا Ú©ÛŒ ÛŒÛ Ø°Ù…Û Ø¯Ø§Ø±ÛŒ ÛÛ’ Ú©Û ÙˆÛ Ø³Ø®Øª Ù¾ÙˆØ´ÛŒØ¯Û Ù¾Ø§Ù„ÛŒØ³ÛŒÙˆÚº Ú©Ùˆ بروئے کار لاتے Ûوئے صار٠کے اخÙاء Ú©ÛŒ Ø­Ùاظت کرے</p>
+
+<p></p>
+
+<p>ØªØ§Ú©Û Ø®Ø¯Ù…Øª استعمال کرنے اور اسے ترقی دینے پر نظر رکھی جائے، نوکیا غیرمحدود ڈیٹا جمع کرسکتا ÛÛ’ جس میں رسائی Ø´Ø¯Û Ø§Ù†Ù¹Ø±Ù†ÛŒÙ¹ ریڈیو اسٹیشن Ú©ÛŒ معلومات، اور ÙˆÛ ÙˆÙ‚Øª جو بطور Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ûر اسٹیشن اور شرح آئیٹمز پر لگایا گیا ÛÛ’ØŒ مشتمل Ûیں۔</p>
+
+<p></p>
+
+<p>نوکیا ایسی کوئي معلومات جمع Ù†Ûیں کرتا جو تعیین برائے صار٠خدمت Ú©ÛŒ اجازت دے</p>
+
+<p></p>
+
+<h1>5. خدمت کی دستیابی</h1>
+
+<p></p>
+
+<p>خدمت آپ Ú©ÛŒ سÛولت Ú©Û’ اعتبار سے Ù…Ûیا Ûوتی ÛÛ’Û” ÛŒÛ "جیسے ÛÛ’" اور "بطور دستیاب" Ú©ÛŒ بنیاد پر Ù…Ûیا Ú©ÛŒ جاتی ÛÛ’Û” نوکیا اس بات Ú©ÛŒ گارنٹی Ù†Ûیں دیتا ÛÛ’ Ú©Û Ø®Ø¯Ù…Øª غلطیوں سے خالی Ûوگی۔ نوکیا ÛŒÛ Ø­Ù‚ رکھتا ÛÛ’ Ú©Û ÙˆÛ Ú©Ø³ÛŒ بھی وقت خدمت پر نظرثانی کرے نیز اس پر رسائي بند کردے۔</p>
+
+<p></p>
+
+<p>نوکیا خدمت سے Ù…ØªØ¹Ù„Ù‚Û Ø³Ø§ÙÙ¹ وئیر اضاÙÛŒ پروگراموں Ú©ÛŒ بلاشرکت غیرے تجدیدات Ù…Ûیا کرسکتا ÛÛ’Û”</p>
+
+<p></p>
+
+<h1>6. دست برداری اور Ø°Ù…Û Ø¯Ø§Ø±ÛŒ</h1>
+
+<p></p>
+
+<p>Ù¾ Ú©ÛŒ آسان رسائی Ú©ÛŒ خاطر نوکیا تیسری پارٹی Ú©Û’ زیرانتظام Ú†Ù„ رÛÛ’ رابطوں Ú©Ùˆ انٹرنیٹ ریڈیو اسٹیشن  میں شامل کرسکتا ÛÛ’Û” نوکیا اس بات Ú©ÛŒ گارنٹی Ù†Ûیں دیتا ÛÛ’ Ú©Û Ø§Ù†Ù¹Ø±Ù†ÛŒÙ¹ ریڈیو اسٹیشن Ú©Û’ رابطے قابل عمل Ûونگے۔ مزید براں ÙˆÛ Ø§Ø¬Ø²Ø§Ø¡ جو نوکیا سے متعلق Ù†Ûیں Ûیں یا ÙˆÛ Ù…ØµÙ†ÙˆØ¹Ø§Øª یا خدمتیں جو اس طرح Ú©Û’ اجزاء میں بیان Ú©ÛŒ گئی ÛÙˆÚº کسی بھی صورت میں انکی گارنٹی Ù†Ûیں دی جائے Ú¯ÛŒ Ú©Û Ù†ÙˆÚ©ÛŒØ§ انکی تصدیق کرے</p>
+
+<p></p>
+
+<p>استعمال کرنے سے قبل آپ Ú©Ùˆ Ûر اسٹیشن Ú©Û’ استعمال Ú©Û’ قانوں Ú©ÛŒ پابندی اور اس پر نظرثانی کرنا ضروری ÛÛ’Û” آپ ÛŒÛ Ø¨Ú¾ÛŒ اقرار کرتے Ûیں Ú©Û Ù†ÙˆÚ©ÛŒØ§ Ú©Ùˆ تیسری پارٹی Ú©ÛŒ خدمات Ú©Û’ اجزاء پر کوئی اختیار Ù†Ûیں ÛÛ’ نیز نوکیا انٹرنیٹ ریڈیو اسٹیشن Ú©Û’ Ø°Ø±ÛŒØ¹Û Ù…ÛÛŒØ§Ø´Ø¯Û Ø§Ø¬Ø²Ø§Ø¡ Ú©Û’ لئے کسی قسم Ú©ÛŒ کوئی Ø°Ù…Û Ø¯Ø§Ø±ÛŒ قبول Ù†Ûیں کرسکتا</p>
+
+<p></p>
+
+<p>خدمت استعمال کرتے Ûوئے انٹرنیٹ ریڈیو اسٹیشن Ú©Û’ اجزاء پر رسائی حاصل کرنا آپ Ú©Û’ خدمت Ù…Ûیاکار Ú©Û’ نیٹ ورک Ú©Û’ Ø°Ø±ÛŒØ¹Û ÚˆÛŒÙ¹Ø§ Ú©ÛŒ کثیر تعداد Ú©ÛŒ ترسیل شامل Ûوسکتی ÛÛ’Û” ڈیٹا ترسیل Ú©ÛŒ قیمتوں Ú©Û’ متعلق اپنے خدمت Ù…Ûیاکرنے والے سے Ø±Ø§Ø¨Ø·Û Ù‚Ø§Ø¦Ù… کریں۔ دھیان دیں Ú©Û Ø§Ù†Ù¹Ø±Ù†ÛŒÙ¹ ریڈیو اسٹیشن Ú©Û’ ساتھ ÙˆÛ Ø®Ø¯Ù…Øª استعمال کرنا جو آپ Ú©Ùˆ اعلی بٹ ریٹ سلسلے تقسیم کررÛÛ’ ÛÙˆÚº ÛŒÛ ÚˆÛŒÙ¹Ø§ ٹریÙÚ© Ú©Û’ ساتھ شریک Ø²ÛŒØ§Ø¯Û Ù‚ÛŒÙ…ØªÙˆÚº کا بار ڈال سکتے Ûیں۔</p>
+
+<p></p>
+
+<p>خدمت Ú©Û’ استعمال Ú©Û’ ساتھ شریک ڈیٹا ٹریÙÚ© Ú©Ù… از Ú©Ù… درج ذیل پر مشتمل Ûوسکتا ÛÛ’: اسٹیشن ڈائرکٹری Ú©Û’ اجزاء Ú©ÛŒ تجدید کرنا، انٹرنیٹ ریڈیو اسٹیشن سے ڈیٹا Ú©ÛŒ ÙÛرست بنانا، عددی ڈیٹا Ú©Ùˆ جمع کرنا اور انٹرنیٹ ریڈیو اضاÙÛŒ پروگرام Ú©ÛŒ تجدید کرنا۔</p>
+
+<p></p>
+
+<p>آپ Ú©ÛŒ خدمت Ú©Û’ استعمال Ú©Û’ ساتھ شریک ڈیٹا ٹریÙÚ© Ú©ÛŒ قیمتوں کا نوکیا Ø°Ù…Û Ø¯Ø§Ø± Ù†Ûیں ÛÛ’Û”</p>
+
+<p></p>
+
+<p>دستیابگي، درستگی، قابل اعتمادی یا خدمت Ú©Û’ اجزاء سے متعلق کسی طرح Ú©ÛŒ کوئی بھی Ø°Ù…Û Ø¯Ø§Ø±ÛŒ Ù†Ûیں ÛÛ’ چاÛÛ’ ÛÙˆ بیان Ú©ÛŒ گئی ÛÙˆ یا ضمنی ÛÙˆ جس میں کسی خاص مقصد Ú©Û’ لئے مناسبت یا مرچنٹ صلاحیت Ú©ÛŒ ضمنی گارنٹیاں یا غیرانتÛاپسندی یا عنوان Ú©ÛŒ گارنٹیاں بھی غیرمحدود حد تک مشتمل Ûیں۔ نوکیا خدمت Ú©Û’ استعمال Ú©ÛŒ نااÛلیت یا استعمال Ú©Û’ Ù†ØªÛŒØ¬Û Ù…ÛŒÚº کسی قسم Ú©ÛŒ کاروباری مداخلت Ú©Û’ لئے یا آمدنی Ú©Û’ نقصان یا کسی خاص اتÙاقی نتیجتا یا Ø¨Ù„Ø§ÙˆØ§Ø³Ø·Û Ù†Ù‚ØµØ§Ù†Ø§Øª کا Ø°Ù…Û Ø¯Ø§Ø± Ù†Ûیں Ûوگا، حتی Ú©Û Ø§Ú¯Ø± نوکیا Ú©Ùˆ اس جیسے نقصانات Ú©Û’ امکانات Ú©Û’ متعلق Ù…Ø´ÙˆØ±Û Ø¨Ú¾ÛŒ دیا گيا ÛÙˆÛ” بعض عدالتی اختیار Ø°Ù…Û Ø¯Ø§Ø±ÛŒ Ú©Û’ حدود یا متعدد گارنٹیوں Ú©Û’ اخراج Ú©ÛŒ اجازت Ù†Ûیں دیتے Ûیں Ù„Ûذا درج بالا حدود یا اخراج آپ پر لاگو Ù†Ûیں Ûونگے۔ نوکیا Ú©ÛŒ Ø°Ù…Û Ø¯Ø§Ø±ÛŒ ان حالات میں قانوی اجازت Ú©Û’ Ø°Ø±ÛŒØ¹Û Ø¨Ú‘Û’ عدالتی تÙویض پر محدود ÛÙˆÚ¯ÙŠÛ”</p>
+
+<p></p>
+
+<p>ÛŒÛاں مشتمل کوئي بھی شق کسی بھی ایسی پارٹی Ú©Û’ قانونی حقوق Ú©Ùˆ پامال Ù†Ûیں کرے Ú¯ÛŒ جو اس Ú©Û’ ساتھ بطور ØµØ§Ø±Ù Ù…Ø¹Ø§Ù…Ù„Û Ú©Ø±Ø±ÛÛ’ ÛÙˆÚºÛ” ÛŒÛاں کوئي بھی ایسی چیز مشتمل Ù†Ûیں ÛÛ’ جو نوکیا Ú©ÛŒ غÙلت Ú©Û’ Ù†ØªÛŒØ¬Û Ù…ÛŒÚº کسی شخص Ú©Û’ مرنے یا زخمی Ûونے Ú©ÛŒ حالت میں نوکیا Ú©ÛŒ Ø°Ù…Û Ø¯Ø§Ø±ÛŒ Ú©Ùˆ محدود کرے</p>
+
+<p></p>
+
+<h1>7. حقوق کی خلا٠ورزی کے الزام سے متعلق پالیسی</h1>
+
+<p></p>
+
+<p>اگر آپ Ú©Ùˆ یقین ÛÙˆ Ú©Û Ø¢Ù¾ Ú©Û’ حقوق Ø´Ø¯Û Ú©Ø§Ù… Ú©Û’ ساتھ ایسا Ø±ÙˆÛŒÛ Ø§Ø®ØªÛŒØ§Ø± کیا گيا ÛÛ’ جس سے حقوق Ú©ÛŒ خلا٠ورزی ثابت ÛورÛÛŒ تو آپ درج ذیل پر مشتمل ایک اطلاع Ù…Ûیا کرتے Ûوئے نوکیا Ú©Ùˆ مطلع کرسکتے Ûیں:</p>
+
+<p></p>
+
+<p>(1) کسی ایسے شخص Ú©ÛŒ دستی یا مشینی دستخط جو اس مخصوص حقوق Ú©Û’ مالک Ú©ÛŒ Ø°Ù…Û Ø¯Ø§Ø±ÛŒ پر عمل کرنے کا مجاز ÛÙˆ جس Ù†Û’ Ù…Ø¨ÛŒÙ†Û Ø·ÙˆØ± پر خلا٠ورزی Ú©ÛŒ ÛÛ’Ø›</p>
+
+<p></p>
+
+<p>(2) اس حقوق Ø´Ø¯Û Ú©Ø§Ù… Ú©ÛŒ شناخت یا بیان جس Ù†Û’ خلا٠ورزی Ûونے کا دعوی کیا ÛÛ’Ø›</p>
+
+<p></p>
+
+<p>(3) اس سامان Ú©ÛŒ شناخت یا بیان جس Ú©Û’ متعلق خلا٠ورزی Ûونے کا دعوی کیا جارÛا ÛÙˆ نیز سامان Ú©Û’ محل وقوع بتانے Ú©Û’ لئے کاÙÛŒ معقول معلومات؛</p>
+
+<p></p>
+
+<p>(4) آپ کا نام، پتÛØŒ Ùون نمبر، ای میل Ù¾ØªÛ Ø§ÙˆØ± دوسری معلومات جس Ú©Û’ Ø°Ø±ÛŒØ¹Û Ù†ÙˆÚ©ÛŒØ§ آپ سے Ø±Ø§Ø¨Ø·Û Ù‚Ø§Ø¦Ù… کرے؛</p>
+
+<p></p>
+
+<p>(5) ایک بیان Ú©Û Ø¢Ù¾ Ú©Ùˆ پورا یقین ÛÛ’ Ú©Û Ø¯Ø±Ø¬ Ø´Ø¯Û Ø´Ú©Ø§ÛŒØª Ú©Û’ پیرائے میں سامان کا استعمال حقوق Ú©Û’ مالک اس Ú©Û’ ایجنٹ یا قانون Ú©Û’ Ø°Ø±ÛŒØ¹Û Ù…ØµØ¯Ù‚Û Ù†Ûیں ÛÛ’ØŒ اور</p>
+
+<p></p>
+
+<p>(6) ایک بیان Ú©Û Ø¯ÛŒ Ûوئی اطلاع کا بیان درست اور جھوٹی قسم Ú©Û’ Ø¬Ø±Ù…Ø§Ù†Û Ú©Û’ تحت ÛÛ’ØŒ اور ÛŒÛ Ú©Û Ø¢Ù¾ ایک ایسے معقول حقوق Ú©Û’ مالک Ú©ÛŒ Ø°Ù…Û Ø¯Ø§Ø±ÛŒ پر کام کرنے Ú©Û’ مجاز Ûیں جس حقوق Ú©ÛŒ Ù…Ø¨ÛŒÙ†Û Ø·ÙˆØ± پر خلا٠ورزی Ú©ÛŒ گئی ÛÛ’Û”</p>
+
+<p></p>
+
+<p>اطلاع Ûمارے Ù…Ø¬ÙˆØ²Û Ø§ÛŒØ¬Ù†Ù¹ Ú©Û’ Ù¾ØªÛ Ù¾Ø± Ø±ÙˆØ§Ù†Û Ú©ÛŒ جانی چاÛیئے:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. عمل داری قانون</h1>
+
+<p></p>
+
+<p>جیسے Ú©Û Ø§Ù† شرائط میں استعمال Ûوا ÛÛ’ØŒ "نوکیا" کا مطلب نوکیا کارپوریشن۔ نوکیا Ùنلڈ Ú©Û’ اندر محل وقوع سے خدمت Ú©Ùˆ چلاتی اور اس پر کنٹرول رکھتی ÛÛ’Û” اسی طرح ÛŒÛاں خدمت Ú©Û’ متعلق درج مشتمل معلومات باور Ú©ÛŒ جاتی ÛÛ’ Ú©Û ÙˆÛ Ùنلڈ میں Ù…Ûیا Ú©ÛŒ گئی ÛÛ’Û”</p>
+
+<p></p>
+
+<p>کاپی رائٹ © نوکیا کارپوریشن 2006. Ø¬Ù…Ù„Û Ø­Ù‚ÙˆÙ‚ محÙوظ Ûیں.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/96/internetradio_96.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* 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:
+*
+*/
+CHARACTER_SET UTF8
+#define qtn_ir_access_ask "Luôn há»i"
+#define qtn_ir_active_idle_data "%0U - %1U: %2U"
+#define qtn_ir_added_multi "Äã lÆ°u %N Ä‘aÌ€i phaÌt"
+#define qtn_ir_added_single "Äã lÆ°u %U[78]"
+#define qtn_ir_addmanually_unnamed "Không tên"
+#define qtn_ir_addst_description "Mô tả"
+#define qtn_ir_addst_streamurl "URL trực tuyến"
+#define qtn_ir_ai_info_nometadata "%0N. %1U"
+#define qtn_ir_ai_info_stationdata "%0N. %1U - %2U: %3U"
+#define qtn_ir_ai_iradio_title "Radio internet"
+#define qtn_ir_ai_radio_not_active "Radio ko hoạt động"
+#define qtn_ir_app_general_err "Lỗi nội bộ. Khởi động lại ứng dụng."
+#define qtn_ir_apps_grid "Radio intern"
+#define qtn_ir_apps_list "Radio internet"
+#define qtn_ir_apps_skey "Radio internet"
+#define qtn_ir_apps_standby "Radio internet"
+#define qtn_ir_apps_swins "Radio internet"
+#define qtn_ir_apps_wheel "Radio internet"
+#define qtn_ir_bitrate_best "Chất lượng tốt nhất"
+#define qtn_ir_bitrate_high "Chất lượng cao"
+#define qtn_ir_bitrate_standard "Chất lượng chuẩn"
+#define qtn_ir_cost_heading "Thông báo quan trá»ng"
+#define qtn_ir_cost_softkey_continue "Tiếp tục"
+#define qtn_ir_cost_softkey_exit "Thoát"
+#define qtn_ir_cost_title "Radio internet"
+#define qtn_ir_cost_warning "Radio internet sá»­ dụng kết nối dữ liệu của Ä‘iện thoại để truyá»n radio. Bạn chỉ nên sá»­ dụng khi có dá»± kiến phí dữ liệu cố định. Nếu bạn không chắc chắc vá» chi phí dữ liệu, hãy kiểm tra vá»›i nhà Ä‘iá»u hành trÆ°á»›c khi tiếp tục."
+#define qtn_ir_country_list_expanded "%N đài phát"
+#define qtn_ir_countryregion_title "Qu.gia/khu vá»±c"
+#define qtn_ir_discover_beststations "Lá»±a chá»n đài phát tốt nhất"
+#define qtn_ir_discover_country_region "Duyệt theo q.gia/khu vực"
+#define qtn_ir_discover_genre "Duyệt theo thể loại"
+#define qtn_ir_discover_genre_expanded "Ä.phát được xếp theo th.loại"
+#define qtn_ir_discover_langauge "Duyệt theo ngôn ngữ"
+#define qtn_ir_discover_language_expanded "Ä.phát được xếp theo ng.ngữ"
+#define qtn_ir_discover_staticountryreg "Lưu đ.phát theo q.gia/k.vực"
+#define qtn_ir_discover_title "Th.mục đài phát"
+#define qtn_ir_discover_top "Äài phát hàng đầu"
+#define qtn_ir_edit_title "Ch.sửa đài phát"
+#define qtn_ir_err_operation "Lỗi thao tác. Thử lại."
+#define qtn_ir_err_url_unavail "Không có sẵn URL"
+#define qtn_ir_error_address "Äịa chỉ đài phát radio Internet sai"
+#define qtn_ir_error_connection "Hết giỠkết nối. Thử lại."
+#define qtn_ir_error_favourites "Không đủ khoảng trống trong mục Æ°a thích để lÆ°u lá»±a chá»n"
+#define qtn_ir_error_general "Không thể kết nối vá»›i Ä‘aÌ€i phaÌt"
+#define qtn_ir_error_isds_unavailable "Dịch vụ thÆ° mục đài phát internet tạm thá»i không có sẵn"
+#define qtn_ir_error_notavailable "Không có liên kết trực tuyến"
+#define qtn_ir_error_notinisds "Mục không còn tồn tại"
+#define qtn_ir_error_search "Nhập từ cần tìm"
+#define qtn_ir_findst_addstation "Thêm Ä‘aÌ€i phaÌt thủ công"
+#define qtn_ir_findst_addtofav "Thêm đ.phát vào mục ư.thích"
+#define qtn_ir_findst_browsesds "Duyệt thư mục đài phát"
+#define qtn_ir_findst_search_ensrhterm "Nhập từ cần tìm"
+#define qtn_ir_findst_softkey_search "Tìm"
+#define qtn_ir_findstation_title "Tìm đài phát"
+#define qtn_ir_firstuse_title "Radio intern.: Ch.mừng"
+#define qtn_ir_genre_list_expanded "%N đài phát"
+#define qtn_ir_genre_title "Thể loại"
+#define qtn_ir_history_artist_song "%0U - %1U"
+#define qtn_ir_history_no_history "Không có lịch sử"
+#define qtn_ir_homescreen_buffering "Äang đệm"
+#define qtn_ir_homescreen_lastplayed "Phát lần cuối"
+#define qtn_ir_info_details_bitrate "%N kbps:"
+#define qtn_ir_info_details_countryregi "Quốc gia/Khu vực:"
+#define qtn_ir_info_details_description "Mô tả:"
+#define qtn_ir_info_details_genre "(Các) thể loại:"
+#define qtn_ir_info_details_language "Ngôn ngữ:"
+#define qtn_ir_info_details_name "Tên:"
+#define qtn_ir_info_details_streams "ÄÆ°á»ng truyá»n:"
+#define qtn_ir_info_details_title "Th.tin đài phát"
+#define qtn_ir_info_details_type "Loại:"
+#define qtn_ir_info_details_type_isds "TM đ.phát"
+#define qtn_ir_info_details_type_manual "Ng.dg x.Ä‘"
+#define qtn_ir_info_details_unnamed "Ko tên"
+#define qtn_ir_info_softkey_close "Äóng"
+#define qtn_ir_language_list_expanded "%N đài phát"
+#define qtn_ir_language_title "Ngôn ngữ"
+#define qtn_ir_list_memory_location "%N. "
+#define qtn_ir_loading_loading "Äang tải"
+#define qtn_ir_loading_percent_sign "%N%"
+#define qtn_ir_loading_searching "Äang tìm"
+#define qtn_ir_main_descriptive_text "Sử dụng 'Tìm đài phát' trg thanh cg cụ để thêm đ.ph"
+#define qtn_ir_main_discover_expanded "Khám phá đài phát radio mới"
+#define qtn_ir_main_last "Phát lần cuối"
+#define qtn_ir_main_now "Äang phát"
+#define qtn_ir_main_prog_deleting "Äang xóa %N"
+#define qtn_ir_main_searchindir "Tìm trong thư mục"
+#define qtn_ir_main_title "Radio internet"
+#define qtn_ir_main_unnamed_station "Äài phát ko tên"
+#define qtn_ir_memlo_ram_out_of_mem "Không đủ bộ nhớ để thực thi tác vụ. Xóa bớt một số dữ liệu trước."
+#define qtn_ir_now_artist_song "%0U - %1U"
+#define qtn_ir_now_bitrate "%N kbps"
+#define qtn_ir_now_bitrate_mbps "%N mbps"
+#define qtn_ir_now_bytecountermb "%N MB"
+#define qtn_ir_now_deci_bytecountermb "%0N.%1N MB"
+#define qtn_ir_now_fm_frequency "%U[16] MHz"
+#define qtn_ir_now_station_index "%N. "
+#define qtn_ir_now_tooltip_next "Kênh kÃªÌ tiêÌp"
+#define qtn_ir_now_tooltip_play "Phát"
+#define qtn_ir_now_tooltip_previous "Kênh trÆ°Æ¡Ìc"
+#define qtn_ir_now_tooltip_stop "Dừng"
+#define qtn_ir_now_wait_buffering "Äang đệm"
+#define qtn_ir_now_wait_buffering_perc "Äang đệm %N%"
+#define qtn_ir_nwcontroller_err_noconnectivity "Không có kết nối mạng"
+#define qtn_ir_nwcontroller_err_nosnaps "Chưa thiết lập điểm truy cập"
+#define qtn_ir_options_add "Thêm vào mục ưa thích"
+#define qtn_ir_options_add_manually "Thêm Ä‘aÌ€i phaÌt thủ công"
+#define qtn_ir_options_change "Thay đổi"
+#define qtn_ir_options_clearhistory "Xóa trang cũ"
+#define qtn_ir_options_editstation "Chỉnh sửa đài phát"
+#define qtn_ir_options_equalizer "Chỉnh tần số"
+#define qtn_ir_options_exit "Thoát"
+#define qtn_ir_options_findnmusicstore "Tìm trong lưu trữ Nhạc"
+#define qtn_ir_options_fmtrans "Bộ phát FM"
+#define qtn_ir_options_gotomusicstore "Chuyển đến lưu trữ Nhạc"
+#define qtn_ir_options_help "Trợ giúp"
+#define qtn_ir_options_history "Trang cũ"
+#define qtn_ir_options_info "Thông tin Ä‘aÌ€i phaÌt"
+#define qtn_ir_options_mainview "Chuyển đến gi.diện chính"
+#define qtn_ir_options_mark "Chá»n"
+#define qtn_ir_options_markall "Chá»n tất cả"
+#define qtn_ir_options_markunmark "Chá»n/Bá» chá»n"
+#define qtn_ir_options_now "Chuyển đến Äang phát"
+#define qtn_ir_options_off "Tắt"
+#define qtn_ir_options_on "Bật"
+#define qtn_ir_options_searchag "Tìm lại"
+#define qtn_ir_options_select "Chá»n"
+#define qtn_ir_options_settings "Cài đặt"
+#define qtn_ir_options_station "ÄaÌ€i phaÌt"
+#define qtn_ir_options_stereowidening "Tăng âm thanh nổi"
+#define qtn_ir_options_unmark "Bá» chá»n"
+#define qtn_ir_options_unmarkall "Bá» chá»n tất cả"
+#define qtn_ir_playfail_err "Không phát lại radio được"
+#define qtn_ir_playlist_title "L.kết nhận được"
+#define qtn_ir_popup_no_results "Không có kết quả"
+#define qtn_ir_popup_toomany_results "Quá nhiá»u kết quả. Tinh chỉnh từ tìm kiếm của bạn."
+#define qtn_ir_results_none "Không tìm thấy đài phát phù hợp. Tìm lại."
+#define qtn_ir_search_result "%0U[12]:%1N k.quả"
+#define qtn_ir_search_results "%0U[11]:%1N k.quả"
+#define qtn_ir_set_folder_internetradio "Radio internet"
+#define qtn_ir_set_folder_irradio "Radio internet"
+#define qtn_ir_settings_3g "Tốc độ kết nối 3G"
+#define qtn_ir_settings_connec_softkey_ok "OK"
+#define qtn_ir_settings_gprs "TôÌc độ kết nối GPRS"
+#define qtn_ir_settings_network "Kết nối mạng"
+#define qtn_ir_settings_snap_default "Kết nối mặc định"
+#define qtn_ir_settings_title "Cài đặt"
+#define qtn_ir_settings_wifi "TôÌc độ kết nối Wi-Fi"
+#define qtn_ir_softkey_back "Trở vá»"
+#define qtn_ir_softkey_cancel "Hủy"
+#define qtn_ir_softkey_done "Xong"
+#define qtn_ir_softkey_no "Không"
+#define qtn_ir_softkey_options "Tùy chọn"
+#define qtn_ir_softkey_select "Chá»n"
+#define qtn_ir_softkey_yes "Có"
+#define qtn_ir_station_saved "Äã lÆ°u đài phát"
+#define qtn_ir_stationlist_nomatches "(không tìm thấy)"
+#define qtn_ir_stations_popup_delete "Xóa\n%U[77]?"
+#define qtn_ir_stations_popup_delete_many "Xóa %N Ä‘aÌ€i phaÌt?"
+#define qtn_ir_stations_popup_removed "Äã xóa %U[78]"
+#define qtn_ir_stations_popup_removed_many "Äã xóa %N Ä‘aÌ€i phaÌt"
+#define qtn_ir_stations_popup_save "Lưu đài phát vào mục ưa thích?"
+#define qtn_ir_suboptions_delete "Xóa"
+#define qtn_ir_suboptions_details "Chi tiết"
+#define qtn_ir_suboptions_move "Chuyển"
+#define qtn_ir_terms_details "Bằng cách đồng ý vá»›i Äiá»u khoản và Äiá»u kiện bên dÆ°á»›i là bạn có thể ký kết hợp đồng vá» phạm vi được phép theo luật pháp hiện hành và không còn bị giá»›i hạn hay bị cấm vá»›i việc tuân thủ tất cả bản quyá»n tài liệu nữa"
+#define qtn_ir_terms_heading "Äiá»u khoản và Äiá»u kiện"
+#define qtn_ir_terms_softkey_accept "Chấp nhận"
+#define qtn_ir_terms_softkey_decline "Từ chối"
+#define qtn_ir_title_history "Trang cũ"
+#define qtn_ir_tooltip_addalltofav "Thêm t.c vào mục ư.th"
+#define qtn_ir_tooltip_addstation "Thêm Ä‘.phaÌt thủ công"
+#define qtn_ir_tooltip_addtofav "Thêm vaÌ€o muÌ£c Æ°.thiÌch"
+#define qtn_ir_tooltip_copy "Sao chép"
+#define qtn_ir_tooltip_findnstore "Tìm trg lưu trữ Nhạc"
+#define qtn_ir_tooltip_findst "Tìm đài phát"
+#define qtn_ir_tooltip_history "Trang cũ"
+#define qtn_ir_tooltip_listen "Nghe"
+#define qtn_ir_tooltip_paste "Dán"
+#define qtn_ir_tooltip_stationde "Chi tiết Ä‘aÌ€i phaÌt"
+#define qtn_ir_top_title "Äài phát hg đầu"
+#define qtn_ir_url_http "http://"
+#define qtn_ir_url_name "Tên"
+#define qtn_ir_url_title "Thêm Ä‘aÌ€i phaÌt"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/96/internetradioai_96.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Radio Internet">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/96/terms_96.html	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,159 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+
+<body>
+
+<p>DiÌ£ch vuÌ£ Nokia Radio Internet (“DiÌ£ch vuÌ£â€) cho pheÌp baÌ£n khaÌm phaÌ vaÌ€ thưởng thÆ°Ìc nội dung của caÌc Ä‘aÌ€i phaÌt thanh internet. BAÌ£N ÄỒNG YÌ RÄ‚Ì€NG VIỆC SỬ DỤNG DIÌ£CH VUÌ£ CỦA BẠN XÃC NHẬN BAÌ£N Äà ÄOÌ£C HỢP ÄỒNG NAÌ€Y, HIỂU NOÌ VAÌ€ Äá»’NG à BIÌ£ RAÌ€NG BUỘC BỞI NHỮNG ÄIỀU KHOẢN VAÌ€ ÄIỀU KIỆN CỦA HỢP ÄỒNG. NêÌu baÌ£n không đồng yÌ, xin lÆ°u yÌ rằng baÌ£n không Ä‘Æ°Æ¡Ì£c pheÌp sử duÌ£ng DiÌ£ch vuÌ£.</p>
+
+<p></p>
+
+<h1>1. CÃC ÄIÌ£NH NGHĨA</h1>
+
+<p></p>
+
+<p>CaÌc Ä‘aÌ€i phaÌt thanh internet coÌ nghĩa laÌ€ những thá»±c thể thÆ°Æ¡Ì€ng sản xuâÌt vaÌ€ phân phôÌi nội dung âm thanh vaÌ€ siêu dữ liệu liên quan qua internet theo một doÌ€ng.</p>
+
+<p></p>
+
+<p>Liên kêÌt tá»›i Ä‘aÌ€i phaÌt thanh internet coÌ nghĩa laÌ€ bá»™ định vị tài nguyên hoặc tập hÆ¡Ì£p caÌc bá»™ định vị tài nguyên cho pheÌp ngÆ°Æ¡Ì€i duÌ€ng truy cập nội dung Ä‘Æ°Æ¡Ì£c traÌ£m phaÌt thanh internet truyá»n trá»±c tiếp.</p>
+
+<p></p>
+
+<h1>2. DIÌ£CH VUÌ£</h1>
+
+<p></p>
+
+<p>DiÌ£ch vuÌ£ cho pheÌp:</p>
+<p>1. duyệt qua liên kêÌt tá»›i các Ä‘aÌ€i phaÌt thanh internet;</p>
+<p>2. truy cập nội dung của các Ä‘aÌ€i phaÌt thanh internet;</p>
+
+<p></p>
+
+<h1>3. SỬ DỤNG DỊCH VỤ</h1>
+
+<p></p>
+
+<p>DiÌ£ch vuÌ£ naÌ€y chỉ cho pheÌp bạn  sử duÌ£ng vÆ¡Ìi muÌ£c Ä‘iÌch caÌ nhân vaÌ€ phi thÆ°Æ¡ng maÌ£i. Nokia sẽ sở hữu tâÌt cả các quyền sở hữu triÌ tuệ trong vaÌ€ đôÌi vÆ¡Ìi DiÌ£ch vuÌ£.</p>
+
+<p></p>
+
+<p>Nokia bảo lÆ°u quyền thay đổi caÌc Ä‘iều khoản vaÌ€ Ä‘iều kiện này bằng caÌch thông baÌo cho baÌ£n về những thay đổi Ä‘oÌ.</p>
+
+<p></p>
+
+<h1>4. QUYỀN RIÊNG TƯ</h1>
+
+<p></p>
+
+<p>Nokia cam kêÌt bảo vệ quyền riêng tÆ° của ngÆ°Æ¡Ì€i duÌ€ng bằng caÌch thÆ°Ì£c hiện caÌc chiÌnh saÌch bảo mật nghiêm ngặt.</p>
+
+<p></p>
+
+<p>Äể giaÌm saÌt việc sử duÌ£ng vaÌ€ nâng cao chất lượng DiÌ£ch vuÌ£, Nokia coÌ thể thu thập dữ liệu sử duÌ£ng bao gồm nhÆ°ng không giÆ¡Ìi haÌ£n thông tin về caÌc Ä‘aÌ€i phaÌt thanh internet Ä‘Æ°Æ¡Ì£c truy cập, thÆ¡Ì€i gian sử duÌ£ng trên mỗi Ä‘aÌ€i vaÌ€ caÌc muÌ£c Ä‘Æ°Æ¡Ì£c xêÌp hạng theo sở thiÌch.</p>
+
+<p></p>
+
+<p>Nokia không thu thập bâÌt cÆ°Ì thông tin naÌ€o cho pheÌp nhận daÌ£ng ngÆ°Æ¡Ì€i duÌ€ng DiÌ£ch vuÌ£.</p>
+
+<p></p>
+
+<h1>5. TIÌNH KHẢ DỤNG CỦA DIÌ£CH VUÌ£</h1>
+
+<p></p>
+
+<p>DiÌ£ch vuÌ£ naÌ€y được cung cấp để mang lại sá»± thuận tiện cho baÌ£n. Nó Ä‘Æ°Æ¡Ì£c cung câÌp “nguyên trạng†vaÌ€ trên cÆ¡ sở “khả dụngâ€. Nokia không Ä‘ảm bảo rằng DiÌ£ch vuÌ£ sẽ không bị ngăÌt quãng hoặc không coÌ lỗi. Nokia bảo lÆ°u quyền sá»­a đổi DiÌ£ch vuÌ£ hoặc huỷ bỏ truy quyá»n cập diÌ£ch vuÌ£ bâÌt cÆ°Ì khi naÌ€o.</p>
+
+<p></p>
+
+<p>Nokia coÌ thể nâng câÌp caÌc Æ°Ìng duÌ£ng phần mềm liên quan đến DiÌ£ch vuÌ£ theo yÌ của riêng mình.</p>
+
+<p></p>
+
+<h1>6. KHƯỚC TỪ VAÌ€ NGHĨA VUÌ£ PHAÌP LYÌ</h1>
+
+<p></p>
+
+<p>Äể baÌ£n dễ daÌ€ng truy cập, Nokia coÌ thể Ä‘Æ°a caÌc liên kêÌt tá»›i caÌc Ä‘aÌ€i phaÌt thanh internet do bên thÆ°Ì ba sở hữu hoặc vận hành. Nokia không Ä‘ảm bảo rằng caÌc liên kêÌt tá»›i Ä‘aÌ€i phaÌt thanh internet naÌ€y sẽ coÌ thể hoaÌ£t động. NgoaÌ€i ra, nội dung không liên quan đêÌn Nokia không haÌ€m yÌ bâÌt cÆ°Ì Ä‘iá»u gì cho rằng Nokia xaÌc nhận ná»™i dung đó hoặc sản phẩm hoặc diÌ£ch vuÌ£ coÌ noÌi đêÌn trong nội dung Ä‘oÌ.</p>
+
+<p></p>
+
+<p>BaÌ£n phải xem xeÌt vaÌ€ đồng yÌ vÆ¡Ìi những quy tăÌc sá»­ dụng của mỗi Ä‘aÌ€i phaÌt thanh nêÌu coÌ trÆ°Æ¡Ìc khi truy cập đài phát thanh đó. BaÌ£n cũng đồng yÌ rằng Nokia không kiểm soát nội dung diÌ£ch vuÌ£ của bên thÆ°Ì ba vaÌ€ không thể chiÌ£u bất cứ traÌch nhiệm gì về nội dung do caÌc Ä‘aÌ€i phaÌt thanh internet cung câÌp.</p>
+
+<p></p>
+
+<p>Việc truy cập nội dung của caÌc Ä‘aÌ€i phaÌt thanh internet qua DiÌ£ch vuÌ£ coÌ thể liên quan đêÌn việc truyền lÆ°Æ¡Ì£ng dữ liệu lá»›n qua maÌ£ng của nhaÌ€ cung câÌp diÌ£ch vuÌ£ cho baÌ£n. Liên hệ vÆ¡Ìi nhaÌ€ cung câÌp diÌ£ch vuÌ£ của bạn để biêÌt thông tin về phiÌ truyền dữ liệu. ChuÌ yÌ rằng sá»­ dụng DiÌ£ch vuÌ£ vÆ¡Ìi Ä‘aÌ€i phaÌt thanh internet phát các dòng coÌ tôÌc độ bit cao hÆ¡n cho bạn coÌ thể laÌ€m tăng chi phiÌ liên quan đêÌn lÆ°u lÆ°Æ¡Ì£ng dữ liệu.</p>
+
+<p></p>
+
+<p>LÆ°u lÆ°Æ¡Ì£ng dữ liệu liên quan đêÌn việc sá»­ dụng DiÌ£ch vuÌ£ coÌ thể bao gồm iÌt nhâÌt lÆ°u lượng cho những việc sau: cập nhật danh muÌ£c ná»™i dung của caÌc Ä‘aÌ€i, truyá»n trá»±c tiếp dữ liệu tÆ°Ì€ Ä‘aÌ€i phaÌt thanh internet, thu thập dữ liệu thôÌng kê vaÌ€ nâng câÌp Æ°Ìng duÌ£ng phaÌt thanh internet.</p>
+
+<p></p>
+
+<p>Nokia không chiÌ£u traÌch nhiệm pháp lý về chi phiÌ cho lÆ°u lượng dữ liệu liên quan đêÌn việc sá»­ dụng DiÌ£ch vuÌ£ của baÌ£n.</p>
+
+<p></p>
+
+<p>KHÔNG COÌ BÂÌT KYÌ€ SỰ ÄẢM BẢO NAÌ€O DUÌ€ LAÌ€ TƯỜNG MINH HAY NGẦM ÄIÌ£NH, BAO Gá»’M NHƯNG KHÔNG GIÆ ÌI HAÌ£N SỰ ÄẢM BẢO DANH TIÌNH HAY KHÔNG XÂM PHAÌ£M HAY ÄẢM BẢO NGẦM ÄỊNH VỀ KHẢ NÄ‚NG CÓ THỂ BÃN ÄƯỢC, HOẶC Sá»° THÃCH HỢP CHO MỤC ÄÃCH CỤ THỂ NÀO ÄÓ, LIÊN QUAN ÄÊÌN TIÌNH KHẢ DỤNG, TIÌNH CHIÌNH XAÌC, TIÌNH TIN CẬY HOÄ‚Ì£C NỘI DUNG CỦA DIÌ£CH VUÌ£ ÄƯỢC ÄƯA RA. NOKIA SẼ KHÔNG CHIÌ£U TRAÌCH NHIỆM PHÃP Là VỀ BÂÌT CÆ¯Ì THIỆT HẠI TRỰC TIÊÌP, GIAÌN TIÊÌP, NGẪU NHIÊN, ÄÄ‚Ì£C BIỆT HOÄ‚Ì£C HỆ QUẢ NAÌ€O, VỀ VIỆC MÂÌT MAÌT LỢI NHUẬN HOÄ‚Ì£C GIAÌN ÄOAÌ£N CÔNG VIỆC KINH DOANH DO SỬ DUÌ£NG HOÄ‚Ì£C KHÔNG THỂ SỬ DUÌ£NG DIÌ£CH VUÌ£, NGAY CẢ KHI NOKIA Äà ÄƯỢC KHUYÊÌN CAÌO VỀ KHẢ NÄ‚NG CỦA NHá»®NG THIỆT HẠI NOÌI TRÊN. MỘT SÃ”Ì CÆ  QUAN PHAÌP QUYỀN KHÔNG CHO PHEÌP MIỄN TRỪ MỘT SÃ”Ì ÄẢM BẢO HOÄ‚Ì£C HAÌ£N CHÃŠÌ VỀ TRAÌCH NHIỆM PHÃP LÃ, NÊN NHỮNG HAÌ£N CHÃŠÌ VAÌ€ MIỄN TRỪ TRÊN COÌ THỂ KHÔNG AÌP DUÌ£NG VÆ ÌI BAÌ£N. TRAÌCH NHIỆM PHÃP Là CỦA NOKIA TRONG TRƯỜNG HỢP ÄOÌ SẼ ÄƯỢC GIỚI HẠN Ở PHAÌ£M VI TÔÌI ÄA DO PHAÌP LUẬT CHO PHEÌP.</p>
+
+<p></p>
+
+<p>Không có Ä‘iá»u gì trong văn bản này xâm phaÌ£m đến các quyền do phaÌp luật quy Ä‘iÌ£nh của bâÌt cÆ°Ì bên naÌ€o giao dịch vá»›i tÆ° cách khaÌch haÌ€ng. Không coÌ Ä‘iều giÌ€ trong văn bản này haÌ£n chÃªÌ traÌch nhiệm pháp lý của Nokia trong trÆ°Æ¡Ì€ng hÆ¡Ì£p có tử vong hoặc thÆ°Æ¡ng tiÌch caÌ nhân do sÆ¡ suâÌt của Nokia.</p>
+
+<p></p>
+
+<h1>7. CHÃNH SÃCH VỀ CÃO BUỘC XÂM PHAÌ£M BẢN QUYỀN</h1>
+
+<p></p>
+
+<p>NêÌu baÌ£n tin rằng sản phẩm coÌ bản quyền của baÌ£n đã bị xá»­ lý theo caÌch cấu thành hành vi xâm phaÌ£m bản quyền, baÌ£n coÌ thể cung cấp cho Nokia má»™t bản thông baÌo bao gồm caÌc thông tin sau:</p>
+
+<p></p>
+
+<p>(1) Chữ kyÌ tay hoặc Ä‘iện tử của ngÆ°Æ¡Ì€i Ä‘Æ°Æ¡Ì£c uỷ quyền hành Ä‘á»™ng thay mặt cho chủ sở hữu quyền có bảo há»™ được coi là biÌ£ xâm phaÌ£m;</p>
+
+<p></p>
+
+<p>(2) Thông tin nhận dạng hoặc mô tả tác phẩm coÌ bản quyền Ä‘Æ°Æ¡Ì£c khẳng định là laÌ€ biÌ£ xâm phaÌ£m;</p>
+
+<p></p>
+
+<p>(3) Thông tin nhận dạng hoặc mô tả taÌ€i liệu Ä‘Æ°Æ¡Ì£c khẳng định là xâm phaÌ£m vaÌ€ thông tin Ä‘ủ để xaÌc Ä‘iÌ£nh viÌ£ triÌ taÌ€i liệu Ä‘oÌ;</p>
+
+<p></p>
+
+<p>(4) Tên, Ä‘iÌ£a chỉ, số Ä‘iện thoaÌ£i, Ä‘iÌ£a chỉ email của baÌ£n vaÌ€ bâÌt cÆ°Ì thông tin naÌ€o khaÌc cho pheÌp Nokia liên hệ Ä‘Æ°Æ¡Ì£c vÆ¡Ìi baÌ£n;</p>
+
+<p></p>
+
+<p>(5) Tuyên bố rằng baÌ£n tin việc sá»­ dụng taÌ€i liệu theo caÌch bị khiếu nại nhÆ° trên không Ä‘Æ°Æ¡Ì£c chủ sở hữu bản quyền, đại diện của chủ sở hữu bản quyá»n, hay luật phaÌp cho phép; vaÌ€</p>
+
+<p></p>
+
+<p>(6) Tuyên bố rằng caÌc thông tin trong thông baÌo naÌ€y laÌ€ chiÌnh xaÌc, vaÌ€ theo hình phạt của tá»™i khai man, rằng baÌ£n Ä‘Æ°Æ¡Ì£c uỷ quyá»n hành Ä‘á»™ng thay mặt chủ sở hữu quyền có bảo há»™ được coi laÌ€ biÌ£ xâm phaÌ£m.</p>
+
+<p></p>
+
+<p>Thông baÌo này phải Ä‘Æ°Æ¡Ì£c gửi đêÌn Ä‘iÌ£a chỉ CÆ¡ quan Ä‘Æ°Æ¡Ì£c Chỉ Ä‘iÌ£nh taÌ£i:</p>
+
+<p></p>
+
+<p>Copyright.Notices@nokia.com</p>
+
+<p></p>
+
+<h1>8. LUẬT PHÃP ÄIỀU CHỈNH</h1>
+
+<p></p>
+
+<p>Khi Ä‘Æ°Æ¡Ì£c duÌ€ng trong caÌc Ä‘iều khoản vaÌ€ Ä‘iều kiện naÌ€y, “Nokia†coÌ nghĩa laÌ€ Nokia Corporation. Nokia vận hành vaÌ€ kiểm soát DiÌ£ch vuÌ£ taÌ£i caÌc Ä‘iÌ£a Ä‘iểm trong phaÌ£m vi nÆ°Æ¡Ìc Phần Lan. NhÆ° vậy, thông tin coÌ trong DiÌ£ch vuÌ£ ở đây Ä‘Æ°Æ¡Ì£c coi laÌ€ cung câÌp ở Phần Lan.</p>
+
+<p></p>
+
+<p>Bản quyá»n © Nokia Corporation 2006. MoÌ£i quyền Ä‘Æ°Æ¡Ì£c bảo lÆ°u.</p>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/internetradio.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1535 @@
+/*
+* Copyright (c) 2007-2007 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:  This is a localisation file for Series 60 Internet Radio.
+*                A .loc file is the one and only place where the logical strings
+*                to be localised are defined.
+*
+*/
+
+
+/*
+*  --------------------------------------------------------------------
+* Syntax of a logical name entry in this file is the following:
+*
+* // d:context description (line 1)
+* // d:context description (line N)
+* // l:P_No
+* //
+* #define qtn_?feature/?module_name_?freetext "?text"
+*
+*   where
+*         "qtn_" starts a logical name, which does not
+*          not contain dots.
+*         "d:" starts description line(s), which
+*              clarify entry's context with information like:
+*              1. Is a word a verb in imperative or is it a noun ?
+*                   - what does text "Set" mean ?
+*              2. What will replace %U (unicode text parameter) or
+*                 %N (number parameter) included in texts ?
+*                   - is it phone number or email address ?
+*         "l:" starts a layout information (one line).
+*              "P" and "No" are symbols in LAF's information table
+*                 - "P" is parent pane or current pane
+*                 - "No" is reference number in table
+*/
+
+#ifdef LANGUAGE_01
+#include "01/internetradio_01.loc"
+#elif LANGUAGE_02
+#include "02/internetradio_02.loc"
+#elif LANGUAGE_03
+#include "03/internetradio_03.loc"
+#elif LANGUAGE_04
+#include "04/internetradio_04.loc"
+#elif LANGUAGE_05
+#include "05/internetradio_05.loc"
+#elif LANGUAGE_06
+#include "06/internetradio_06.loc"
+#elif LANGUAGE_07
+#include "07/internetradio_07.loc"
+#elif LANGUAGE_08
+#include "08/internetradio_08.loc"
+#elif LANGUAGE_09
+#include "09/internetradio_09.loc"
+#elif LANGUAGE_10
+#include "10/internetradio_10.loc"
+#elif LANGUAGE_13
+#include "13/internetradio_13.loc"
+#elif LANGUAGE_14
+#include "14/internetradio_14.loc"
+#elif LANGUAGE_15
+#include "15/internetradio_15.loc"
+#elif LANGUAGE_16
+#include "16/internetradio_16.loc"
+#elif LANGUAGE_17
+#include "17/internetradio_17.loc"
+#elif LANGUAGE_18
+#include "18/internetradio_18.loc"
+#elif LANGUAGE_25
+#include "25/internetradio_25.loc"
+#elif LANGUAGE_26
+#include "26/internetradio_26.loc"
+#elif LANGUAGE_27
+#include "27/internetradio_27.loc"
+#elif LANGUAGE_28
+#include "28/internetradio_28.loc"
+#elif LANGUAGE_29
+#include "29/internetradio_29.loc"
+#elif LANGUAGE_30
+#include "30/internetradio_30.loc"
+#elif LANGUAGE_31
+#include "31/internetradio_31.loc"
+#elif LANGUAGE_32
+#include "32/internetradio_32.loc"
+#elif LANGUAGE_33
+#include "33/internetradio_33.loc"
+#elif LANGUAGE_37
+#include "37/internetradio_37.loc"
+#elif LANGUAGE_39
+#include "39/internetradio_39.loc"
+#elif LANGUAGE_42
+#include "42/internetradio_42.loc"
+#elif LANGUAGE_44
+#include "44/internetradio_44.loc"
+#elif LANGUAGE_45
+#include "45/internetradio_45.loc"
+#elif LANGUAGE_49
+#include "49/internetradio_49.loc"
+#elif LANGUAGE_50
+#include "50/internetradio_50.loc"
+#elif LANGUAGE_51
+#include "51/internetradio_51.loc"
+#elif LANGUAGE_54
+#include "54/internetradio_54.loc"
+#elif LANGUAGE_57
+#include "57/internetradio_57.loc"
+#elif LANGUAGE_59
+#include "59/internetradio_59.loc"
+#elif LANGUAGE_67
+#include "67/internetradio_67.loc"
+#elif LANGUAGE_68
+#include "68/internetradio_68.loc"
+#elif LANGUAGE_70
+#include "70/internetradio_70.loc"
+#elif LANGUAGE_76
+#include "76/internetradio_76.loc"
+#elif LANGUAGE_78
+#include "78/internetradio_78.loc"
+#elif LANGUAGE_79
+#include "79/internetradio_79.loc"
+#elif LANGUAGE_83
+#include "83/internetradio_83.loc"
+#elif LANGUAGE_93
+#include "93/internetradio_93.loc"
+#elif LANGUAGE_94
+#include "94/internetradio_94.loc"
+#elif LANGUAGE_96
+#include "96/internetradio_96.loc"
+#elif LANGUAGE_102
+#include "102/internetradio_102.loc"
+#elif LANGUAGE_103
+#include "103/internetradio_103.loc"
+#elif LANGUAGE_129
+#include "129/internetradio_129.loc"
+#elif LANGUAGE_157
+#include "157/internetradio_157.loc"
+#elif LANGUAGE_158
+#include "158/internetradio_158.loc"
+#elif LANGUAGE_159
+#include "159/internetradio_159.loc"
+#elif LANGUAGE_160
+#include "160/internetradio_160.loc"
+#elif LANGUAGE_161
+#include "161/internetradio_161.loc"
+#elif LANGUAGE_230
+#include "230/internetradio_230.loc"
+#elif LANGUAGE_326
+#include "326/internetradio_326.loc"
+#elif LANGUAGE_327
+#include "327/internetradio_327.loc"
+#elif LANGUAGE_401
+#include "401/internetradio_401.loc"
+#elif LANGUAGE_402
+#include "402/internetradio_402.loc"
+
+#else
+
+//
+// Application names
+//
+
+// d: Menu item for Internet Radio in grid view.
+// l: cell_app_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_apps_grid				"Internet Radio"
+
+// d: Menu item for Internet Radio in list view.
+// l: list_single_large_graphic_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_apps_list                        "Internet Radio"
+
+// d: Menu item for Internet Radio in Application wheel.
+// l: list_single_large_graphic_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_apps_wheel                        "Internet Radio"
+
+// d: Menu item for Internet Radio in General Settings
+// l: list_single_large_graphic_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_set_folder_internetradio            "Internet Radio"
+
+// d: Menu item for downgraded Internet Radio in General Settings
+// l: list_single_large_graphic_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_set_folder_irradio                   "Internet Radio"
+
+// d: Softkey text for Internet Radio in idle state.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_apps_skey                         "Internet Radio"    
+
+// d: Text for setting standby application.
+// l: list_set_graphic_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_apps_standby                         "Internet Radio"              
+
+// d: Internet Radio name in Installer and Application manager
+// d: Displayed in 
+// d: a) Install\n%U?' confirmation note (qtn_swins_note_inst_conf_head/appinstui), replaces %U 
+// d: b) 'Details' (qtn_swins_heading_det/appinst) view in App. manager, value for 'Name' (qtn_swins_lsh2_apps_name/appinstui).
+// d: As the same text is used in both cases, the string must not be hyphenated or truncated.
+// l: list_double_pane_t2_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_apps_swins                        "Internet Radio"
+
+//
+// Cost Warning
+//
+
+// d: Title for Cost warning  view
+// d: This is shown as title pane text in the status pane
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_cost_title			      "Internet Radio"
+
+// d: Main pane string in Text Viewer(Rich text editor).
+// d: Heading of Cost Warning.
+// l: heading_main_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_cost_heading 				"Important notice"
+
+// d: Main pane string in Text Viewer(Rich text editor).
+// d: Description of Cost Warning.
+// l: msg_body_pane_t3/opt2
+// r: 3.2, Inc5
+//
+#define qtn_ir_cost_warning				"Internet radio uses your phone's data connection for radio transmissions. This is only recommended if you have a flat fee data plan. If you are not sure of your data costs, check with your operator before continuing."
+
+//
+// Terms & Conditions
+//
+
+// d: Main pane string in rText Viewer(Rich text editor).
+// d: Heading of Terms And Conditions
+// l: heading_main_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_terms_heading				"Terms and Conditions"
+
+// d: Main pane string in Text Viewer(Rich text editor).
+// d: This is the descriptive text for terms& conditions which is shown in the Main pane
+// l: msg_body_pane_t1/opt2
+// r: 3.2, Inc5
+//
+#define qtn_ir_terms_details				"By agreeing to the Terms and Conditions below you enter into a contract to the extent permitted by applicable law and not further limited or prohibited with respect to all material rights."
+
+//
+// First time view and Find stations view
+//
+
+// d: Title for First Time View.
+// l: title_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_firstuse_title                  "Internet radio: Welcome"
+
+// d: Find stations view title.
+// l: title_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_findstation_title		     "Find stations"
+
+// d: Listitem of First time/Find stations view.
+// d: 1st item and 1st row
+// l: list_logical_template_2_title
+// l: list_double_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_findst_browsesds			"Browse station directory"
+
+// d: Listitem of First time/Find stations view.
+// d: 1st item and 2nd row
+// l: list_logical_template_2_detail
+// l: list_double_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_main_discover_expanded           "Discover new radio stations"
+
+// d: Listitem of First time/Find stations view.
+// d: 2nd item and 1st row
+// l: list_logical_template_2_title
+// l: list_double_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_main_searchindir			"Search in directory"
+
+// d: Listitem of First time/Find stations view.
+// d: 2nd item and 2nd row
+// l: list_logical_template_10_detail
+// l: list_double_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_findst_search_ensrhterm       	"Enter a search term"
+
+// d: Listitem of First time/Find stations view.
+// d: 3rd item and 1st row
+// l: list_logical_template_2_title
+// l: list_double_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_findst_addstation			"Add station manually"
+
+// d: Listitem of First time/Find stations view.
+// d: 3rd item and 2nd row
+// l: list_logical_template_2_detail
+// l: list_double_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_findst_addtofav       		"Add your own station to favourites"
+
+
+//
+// Soft keys-All views
+//
+
+// d: Left Softkey
+// d: A text for a softkey to accept Cost warning.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_cost_softkey_continue                   "Continue"
+
+// d: Right Softkey
+// d: A text for a softkey to exit Cost warning.
+// l: control_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_cost_softkey_exit                 	 "Exit"
+
+// d: Left Softkey
+// d: A text for a softkey to accept Terms & Conditions.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_terms_softkey_accept                   	"Accept"
+
+// d: Right Softkey
+// d: A text for a softkey to exit Terms & Conditions.
+// l: control_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_terms_softkey_decline                	"Decline"
+
+// d: Left Softkey
+// d: A text for a softkey to open Options menu.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_options                 "Options"
+
+// d: Right Softkey
+// d: A text for a softkey to switch to previous view.
+// l: control_pane_t2
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_back                    "Back"
+
+// d: Left Softkey
+// d: A text for a softkey to open select the items in options menu.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_select                  "Select"
+
+// d: Right Softkey
+// d: A text for a softkey to close the options menu.
+// l: control_pane_t2
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_cancel                  "Cancel"
+
+// d: Left Softkey-Confirmatory query pop-up
+// d: A text for a softkey to accept the confirmation text.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_yes              	     "Yes"
+
+// d: Right Softkey-Confirmatory query pop-up
+// d: A text for a softkey to reject the confirmation text.
+// l: control_pane_t2
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_no               	      "No"
+
+// d: Left Softkey-Move
+// d: A text for a softkey to accept the Move query pop-up.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define   qtn_ir_softkey_done             		"Done"
+
+// d: Search view left soft key.
+// l: control_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_findst_softkey_search	     		"Search"
+
+// d: Right Softkey text for Station information view.
+// l: control_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_softkey_close                         "Close"
+
+// d: Left Softkey-Connection type based bit rates
+// d: A text for a softkey to select the connection type based bitrate.
+// l: control_pane_t1
+// r: 3.2, Inc5
+//
+#define   qtn_ir_settings_connec_softkey_ok             		"OK"
+
+//
+// Main View
+//
+
+// d: Title for Main View.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_main_title                  "Internet radio"
+
+// d: Header text of list item named Last played.
+// l: list_logical_template_6_title
+// l: list_double_large_grpahic_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_main_last                       "Last played station"
+
+// d: Descriptive text in the empty list
+// l: list_view_text_empty
+// l: main_list_empty_pane
+// r: 5.0, Inc2
+//
+#define qtn_ir_main_descriptive_text           "Use Find stations from the toolbar to add new stations"
+
+// d: Header text of list item named Unnamed.
+// l: list_logical_template_3_title
+// l: list_double_large_grpahic_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_main_unnamed_station            "Unnamed station"
+
+// d: Progress bar dialogue string
+// d: Main view, Notes-Progress bar
+// l: popup_note_wait_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_main_prog_deleting			  	  "Deleting... %N"
+
+// d: Listitems index
+// l: list_logical_template_3_title
+// l: list_double_large_grpahic_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_list_memory_location             "%N. "
+
+//
+// Now playing view
+//
+
+// d: Station index shown just before the station name in Now playing view
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Reference-NowPlayingView_Portrait_Landscape_LAF.doc
+// l: irradio_now_playing_station_index
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_station_index             "%N. "
+
+// d: Data counter in the area of main pane.
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Reference-NowPlayingView_Portrait_Landscape_LAF.doc
+// l: irradio_now_playing_deci_bytecountermb
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_deci_bytecountermb           "%N.%N MB"
+
+// d: Data counter in the area of main pane.
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Reference-NowPlayingView_Portrait_Landscape_LAF.doc
+// l: irradio_now_playing_bytecountermb
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_bytecountermb                 "%N MB"
+
+// d: Bitrate in the area of main pane.
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Reference-NowPlayingView_Portrait_Landscape_LAF.doc
+// l: irradio_now_playing_bitrate
+// r: 3.2, Inc5
+#define qtn_ir_now_bitrate                       "%N kbps"
+
+// d: Bitrate in the area of main pane.
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Reference-NowPlayingView_Portrait_Landscape_LAF.doc
+// l: irradio_now_playing_bitrate_mbps
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_bitrate_mbps                  "%N mbps"
+
+// d: Buffering wait bar dialogue string-Aakash
+// d: Wait bar dialogue string-Avkon
+// d: This is shown when buffering is on going on Now playing view.
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// l: popup_note_wait_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_loading_percent_sign			  "%N %"
+
+// d: Frequency of a channel in the status pane of Now Palying View.
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT
+// d: R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT 
+// l: vradio_frequency_info_pane_t1 
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_fm_frequency              	  "%U MHz"
+
+// d: Now playing view main pane string.
+// d: %0U is the artist name and %1U is the song name
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Reference-NowPlayingView_Portrait_Landscape_LAF.doc
+// l: irradio_now_playing_artist_song
+// r: 5.0, Inc2 
+//
+#define qtn_ir_now_artist_song			  "%0U - %1U"
+
+// d: This is shown when buffering is ongoing in now playing view-Aakash
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// d: Nseries_common_now_playing_view_DeSWrel8_v0.4
+// l: mui_detail
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_buffering			  	  "Buffering..."
+
+// d: Wait bar dialogue string-Avkon
+// d: Now palying view-Layout given in Internet Radio UISpecification.
+// l: popup_note_wait_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_wait_buffering			  	  "Buffering..."
+
+
+//
+// Options menu
+//
+
+// d: General context specific options menu string.
+// d: Switches back to the Now Playing View for current palying radio station.
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_now             		   "Go to now playing"
+
+// d: Main view options menu string.
+// d: Launches Add station view. 
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_add_manually            	   "Add station manually"
+
+// d: Main view options menu string.
+// d: Saves the last played station to favourites list
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_add           		   "Add to favourites"
+
+// d: Main view context specific options menu string
+// d: Launches Edit station view
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_editstation         	   "Edit station"
+
+// d: Main view options menu string
+// d: Launches station sub-menu.
+// l: list_single_pane_t1_cp2/opt3
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_station        		   "Station"
+
+
+// d: Main view context specific sub options menu string.
+// d: Launches station information view
+// l: list_single_popup_submenu_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_suboptions_details                  "Details"
+
+// d: Main view context specific sub options menu string.
+// d: Moves station to another location in the list.
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_suboptions_move                     "Move"
+
+// d: Main view context specific sub options menu string.
+// d: Prompts for deleting selected station.
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_suboptions_delete                   "Delete"
+
+// d: Main view options menu string
+// d: Launches Mark/Unmark sub-menu.
+// l: list_single_pane_t1_cp2/opt3
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_markunmark      		    "Mark/Unmark"
+
+// d: Main view context specific sub options menu string.
+// d: Marks the highlighted favourite in the list.
+// l: list_single_popup_submenu_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_mark                   	     "Mark"
+
+// d: Main view context specific sub options menu string.
+// d: Unmarks the marked favourite in the list.
+// l: list_single_popup_submenu_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_unmark                        "Unmark"
+
+// d: Main view context specific sub options menu string.
+// d: Marks all the favourites in the list.
+// l: list_single_popup_submenu_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_markall                       "Mark all"
+
+// d: Main view context specific sub options menu string.
+// d: Unmarks all the marked favourite in the list.
+// l: list_single_popup_submenu_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_unmarkall                     "Unmark all"
+
+// d: Now playing view options menu string.
+// d: Launches station information view.
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_info            		     "Station information"
+
+// d: Now playing view options menu string.
+// d: Launches FM transmitter application
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_fmtrans          		     "FM transmitter"
+
+// d: Now playing view options menu string.
+// d: Launches Nokia music store
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_findnmusicstore         	     "Find in Music store"
+
+// d: Now playing view options menu string.
+// d: Launches Nokia music store
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_gotomusicstore         	     "Go to Music store"
+
+// d: Now playing view options menu string.
+// d: Launches Stereo widening sub-menu
+// l: list_single_pane_t1_cp2/opt2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_stereowidening        	     "Stereo widening"
+
+// d: Now playing view sub options menu string.
+// d: Activates stereo widening
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_on                  	     "On"
+
+// d: Now playing view sub options menu string.
+// d: Deactivates stereo widening
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_off                  	    "Off"
+
+// d: Now playing view options menu string.
+// d: Launches Equalizer view
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_equalizer        		   "Equalizer"
+
+// d: Now playing view options menu string.
+// d: Launches History view.
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_history        		   "History"
+
+// d: General context specific options menu string.
+// d: Selects the highlighted item in the list.
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_select          		   "Select"
+
+// d: General context specific options menu string.
+// d: Launches Main View 
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_mainview             	   "Go to main view"
+
+// d: History view options menu string.
+// d: Deletes all the entries in the History view.
+// l: list_single_pane_t1_cp2
+// r: 5.0, Inc2
+//
+#define qtn_ir_options_clearhistory         	    "Clear history"
+
+// d: Search results view options menu string.
+// d: Launches Search view to perform the search.
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_searchag          		    "Search again"
+
+// d: General options menu string.
+// d: Launches Settings view
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_settings             	   "Settings"
+
+// d: General options menu string.
+// d: Launches view specific Help file
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_help            	   	   "Help"
+
+// d: General options menu string.
+// d: Launches view specific Help file
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_exit           	   	   "Exit"
+
+//
+// Add station/Edit station
+//
+
+// d: Add station view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_url_title		        	   "Add station"
+
+// d: Form item of Add station/Edit station view.
+// d: 1st item and 1st row
+// d: Always editable form
+// l: form_field_data_wide_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_addst_streamurl         		   "Stream URL "
+
+// d: Form item of Add station view.
+// d: 2nd item and 2nd row
+// d: Always editable form
+// l: list_form_graphic_pane_t1/opt1
+// r: 3.2, Inc5
+//
+#define qtn_ir_url_http        			   "http://"
+
+// d: Form item of Add station/Edit station view.
+// d: 2nd item and 1st row
+// d: Always editable form
+// l: form_field_data_wide_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_url_name        			   "Name"
+
+// d: Form item of Add station view.
+// d: 2nd item and 2nd row
+// d: Always editable form
+// l: list_form_graphic_pane_t1/opt1
+// r: 3.2, Inc5
+//
+#define qtn_ir_addmanually_unnamed       		   "Unnamed"
+
+// d: Form item of Add station/Edit station view.
+// d: 3rd item and 1st row
+// d: Always editable form
+// l: form_field_data_wide_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_addst_description       		   "Description"
+
+// d: Edit station view title.
+// l: title_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_edit_title		        	   "Edit station"
+
+//
+// Station directory view
+//
+
+// d: Station directory view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_discover_title		        	   "Station Directory"
+
+// d: Listitem of Station directory view.
+// d: 1st item and 1st row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_discover_genre   			   "Browse by genre"
+
+// d: Listitem of Station directory view.
+// d: 1st item and 2nd row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_discover_genre_expanded   		   "Stations sorted by genre"
+
+// d: Listitem of Station directory view.
+// d: 2nd item and 1st row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_discover_langauge   			   "Browse by language"
+
+// d: Listitem of Station directory view.
+// d: 2nd item and 2nd row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_discover_language_expanded   	   "Stations sorted by language"
+
+// d: Listitem of Station directory view.
+// d: 3rd item and 1st row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_discover_country_region       	   "Browse by country/region"
+
+// d: Listitem of Station directory view.
+// d: 3rd item and 2nd row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_discover_staticountryreg   	   "Stations sorted by country or region "	
+
+// d: Listitem of Station directory view.
+// d: 4th item and 1st row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_discover_top   			   "Top stations"
+
+// d: Listitem of Station directory view.
+// d: 4th item and 2nd row
+// l: list_logical_template_5_detail
+// l: list_double_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_discover_beststations   		    "A selection of the best stations"
+
+//
+// List of Genres
+//
+
+// d: List of Genres view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_genre_title		    		    "Genres"
+
+// d: Listitem of List of Genres view.
+// d: 2nd row of every item in the list
+// d: %N is the number of stations
+// l: list_logical_template_2_detail
+// l: list_double_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_genre_list_expanded   		    "%N Stations"
+
+//
+// List of Languages
+//
+
+// d: List of Langugaes view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_language_title		    		    "Languages"
+
+// d: Listitem of List of Languages view.
+// d: 2nd row of every item in the list
+// d: %N is the number of stations
+// l: list_logical_template_2_detail
+// l: list_double_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_language_list_expanded   		    "%N Stations"
+
+//
+// List of Countries/Regions
+//
+
+// d: List of Cuntries/Regions view title.
+// l: title_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_countryregion_title	    		    "Countries/Regions"
+
+// d: Listitem of List of Countries/Regions view.
+// d: 2nd row of every item in the list
+// d: %N is the number of Stations
+// l: list_logical_template_2_detail
+// l: list_double_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_country_list_expanded   		    "%N Stations"
+
+//
+// Top stations
+//
+
+// d: Top stations view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_top_title	    			    "Top stations"
+
+// d: Main pane text
+// d: Shown when no matches are found for the entered characters in the Find pane.
+// l: list_view_text_empty
+// l: main_list_empty_pane
+// r: 5.0, Inc2
+//
+#define qtn_ir_stationlist_nomatches	    			    "(no matches)"
+
+//
+// Search results 
+//
+
+// d: Search results view title.
+// l: title_pane_t2/opt9
+// r: 5.0, Inc2
+//
+#define qtn_ir_search_results	    			    "%0U:%1N Results"
+
+// d: Search results view title.
+// l: title_pane_t2/opt9
+// r: 5.0, Inc2
+//
+#define qtn_ir_search_result	    			    "%0U:%1N Result"
+
+//
+// History
+//
+
+// d: History view title.
+// l: title_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_title_history	    	     		    "History"
+
+// d: Sub-Listitem of History view.
+// d: %0U is the artist name and %1U is the song name
+// l: sublist_logical_template_1_detail
+// l: hierarchical_coloumn_list_core_data
+// r: 5.0, Inc2
+//
+#define qtn_ir_history_artist_song       		    "%0U-1U%"
+
+// d: Descriptive text in the empty list of history view
+// l: list_view_text_empty
+// l: main_list_empty_pane
+// r: 5.0, Inc2
+//
+#define qtn_ir_history_no_history        		    "No history"
+
+//
+// Station information view
+//
+
+// d: Station information view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_title	    		    "Station information"
+
+// d: Station information view main pane string.
+// d: Name text in station information view.
+// d: This is shown just below the station logo in the Main pane. Or it is shown as first item in the Main pane if station logo is not available.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_name   			    "Name:"
+
+// d: Station information view main pane string.
+// d: Unnamed text in station information view.
+// d: This is shown as the deafult name for the user defined station if user has not given any name to the station.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_info_details_unnamed          	    "Unnamed station"
+
+// d: Station information view main pane string.
+// d: Description text in station information view.
+// d: This is shown just below the Name of the station.
+// l: Text viewer(Rich text editor)
+// r: 5.0, Inc2
+//
+#define qtn_ir_info_details_description		    "Description:"
+
+// d: Station information view main pane string.
+// d: Genre text in station information view.
+// d: This is shown just below the Description of the station.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_genre			    "Genre(s):"
+
+// d: Station information view main pane string.
+// d: Language text in station information view.
+// d: This is shown just below the Genre(s) of the station.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_language		    "Language:"
+
+// d: Station information view main pane string.
+// d: Country/Region text in station information view.
+// d: This is shown just below the Language of the station.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 5.0, Inc2
+//
+#define qtn_ir_info_details_countryregi		    "Country/Region:" 
+
+// d: Station information view main pane string
+// d: Type text in station information view.
+// d: This is shown just below the Country/Region of the station.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_type			    "Type:"
+
+// d: Station information view main pane string.
+// d: Station directory text in station information view.
+// d: This is shown just below the type of the station.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_type_isds		   "Station Directory"
+
+// d: Station information view main pane string
+// d: User-defined text in station information view.
+// d: This is shown for the User defined stations
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_type_manual		   "User Defined"
+
+// d: Station information view main pane string
+// d: Streams text in station information view.
+// d: This is shown just below the type of the station in the Main pane.
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_streams			   "Streams:"
+
+// d: Station information view main pane string
+// d: Streams text in station information view.
+// d: This is shown just below the Streams text in the Main pane Where %U is the station bit rate from ISDS, shown in kbps, and %N is the station URL, without the http identifier
+// d: Text viewer(Rich text editor)
+// l: msg_header_pane_t2
+// r: 3.2, Inc5
+//
+#define qtn_ir_info_details_bitrate			   "%N kbps:"
+
+//
+// Settings view
+//
+
+// d: Settings view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_settings_title	    			  "Settings"
+
+// d: Listitem of Settings view.
+// d: 1st item and 1st line.
+// l: Settings list and Pop-up settings list.
+// l: list_setting_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_settings_network   			  "Network connection"
+
+// d: Setting item value in Settings view.
+// d: 1st item and 2nd line
+// d: Settings list and Pop-up settings list
+// l: set_value_pane_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_settings_snap_default		  "Default connection "
+
+// d: Listitem of Settings view.
+// d: 1st item and 1st line.
+// d: Settings list and Pop-up settings list.
+// l: list_setting_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_settings_gprs		 	 	  "GPRS connection bit rate"	
+
+// d: Listitem of Settings view.
+// d: 2nd item and 1st line.
+// d: Settings list and Pop-up settings list.
+// l: list_setting_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_settings_3g			  	  "3G connection bit rate"
+
+// d: Listitem of Settings view.
+// d: 3rd item and 1st line.
+// d: Settings list and Pop-up settings list.
+// l: list_setting_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_settings_wifi				  "Wifi connection bit rate"
+
+// d: Settings view options menu string.
+// d: Opens the respective view to change the setting or toggles the value of the setting
+// l: list_single_pane_t1_cp2
+// r: 3.2, Inc5
+//
+#define qtn_ir_options_change           		  "Change"
+
+// d: Asks connection every time from user.
+// l: Settings list and Pop-up settings list
+// l: list_set_graphic_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_access_ask                  	  "Always ask "
+
+// d: Setting item value in Settings view.
+// d: List item in the Pop-up setting list for GPRS,3G,Wi-Fi.
+// d: Possible value.
+// l: list_set_graphic_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_bitrate_standard                  "Standard quality"
+
+// d: Setting item value in Settings view.
+// d: List item in the Pop-up setting list for GPRS,3G,Wi-Fi.
+// d: Possible value.
+// l: list_set_graphic_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_bitrate_high                      "High quality"
+
+// d: Setting item value in Settings view.
+// d: List item in the Pop-up setting list for GPRS,3G,Wi-Fi.
+// d: Possible value.
+// l: list_set_graphic_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_bitrate_best                      "Best quality"
+
+//
+// Play list view
+//
+
+// d: Play list view title.
+// l: title_pane_t1
+// r: 3.2, Inc5
+//
+#define qtn_ir_playlist_title    			"Received Links"
+
+//
+//Internet radio active idle
+//
+
+// d: Internet radio active idle 
+// d: Active idle plug-in textNavigation 
+// l: ai_gene_pane_1_t1
+// r: 5.0, Inc2
+//
+#define qtn_ir_active_idle_data    			"%0U - %1U : %2U"
+
+// d: Internet radio active idle Station name, artist name and currently playin gtrack name. 
+// d: bar active idle plug-in text
+// l: heading_ai2_gene_pane_t1/opt1
+// r: 5.0, Inc2
+//
+#define qtn_ir_ai_iradio_title    			"Internet Radio"
+
+// d: Internet radio active idle Station name, artist name and currently playin gtrack name. 
+// d: Active idle plug-in text
+// l: list_ai2_gene_pane_t2/opt1
+// r: 5.0, Inc2
+//
+#define qtn_ir_ai_radio_not_active    			"Radio not active"
+
+
+//
+// Notes
+//
+
+// d: Wait note.
+// d: This text is shown in waitbar note, when searching process is ongoing.
+// l: popup_note_wait_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_loading_searching             	"Searching…"
+
+// d: Wait note.
+// d: This text is shown in waitbar note, during the process of fetching the stations from ISDS
+// l: popup_note_wait_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_loading_loading             	"Loading…"
+
+// d: Information note.
+// d: If zero results are found for the search term, then an information note with this text is shown
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_results_none                	"No matching stations were found. Please search again"
+
+// d: Confirmation note.
+// d: Single station saved to favourites list.
+// d: %U is name of the station saved to favourites list.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_added_single                      "%U saved"
+
+// d: Confirmation note.
+// d: Multiple stations saved to favourites list
+// d: %N is the number of stations saved to favourites list.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_added_multi                       "%N stations saved"
+
+// d: Confirmation note.
+// d: This is shown when a single Station ULR is saved to favourites list.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_station_saved                     "Station saved"
+
+// d: Confirmation note.
+// d: Stations deleted.
+// d: %N is the number of stations deleted from the favourites list.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_stations_popup_removed_many       "%N stations deleted"
+
+// d: Confirmation note.
+// d: Station deleted.
+// d: %U is the name of the station deleted from the favourites list.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_stations_popup_removed            "%U deleted"
+
+// d: Information note.
+// d: Shown when user tries to open .pls file with no streaming links.
+// l: popup_note_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_error_notavailable       		 "No streaming links available"
+
+// d: Error note.
+// d: Shown when user performs the search without entering any charater in the Search input box.-Aakash
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_error_search                  	 "Please enter a search term"
+
+// d: Error note.
+// d: Shown when there are 50 items in the favourites list and user tries to add 51 item(station) to favourites list.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_error_favourites                  "Not enough space in favourites to save selection"
+
+// d: Error note.
+// d: Shown when the network connection is timed out during search process or fetching the data from ISDS.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_error_connection                  "Connection timed out. Try again"
+
+// d: Error note.
+// d: Shown when user tries to connect to an incorrect radio staion address.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_error_address               	 "Incorrect Internet Radio station address"
+
+// d: Error note.
+// d: Shown when connection to a particular station is not successful.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_error_general               	 "Unable to connect to station"
+
+// d: Error note.
+// d: Shown when an error ocuurs.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_app_general_err                   "Internal error. Please restart application"
+
+// d: Error note.
+// d: Shown when a radio playback is failed
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_playfail_err                      "Radio playback failed"
+
+// d: Error note.
+// d: Shown when there is no network connectivity
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_nwcontroller_err_noconnectivity   "No network connectivity "
+
+// d: Error note.
+// d: Shown when no snap is defined
+// l: popup_note_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_nwcontroller_err_nosnaps           "No access point defined"
+
+// d: Error note.
+// d: Shown when user selects an item which is not available in isds
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_error_notinisds            	  "Item no longer available"
+
+// d: Information note.
+// d: Shown when there are no search results found for the entered term
+// l: popup_note_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_popup_no_results                    "No results found"
+
+// d: Information note.
+// d: Shown when there are more than 50 results found for the entered term 
+// l: popup_note_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_popup_toomany_results               "Too many results, refine your search term"
+
+// d: Information note.
+// d: Shown when Internet Station Directory Service is temporarily unavailable
+// l: popup_note_window
+// r: 5.0, Inc2
+//
+#define qtn_ir_error_isds_unavailable              "Internet Station Directory Service temporarily unavailable"
+
+
+//
+// Queries
+//
+
+// d: Confirmation query
+// d: Shown, when user selects Add to favorites option.
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_stations_popup_save	          	   "Save station to favorites?"
+
+// d: Confirmation query
+// d: Shown when user tries to delete multiple stations
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_stations_popup_delete_many          "Delete %N stations?"
+
+// d: Confirmation query
+// d: Shown when user tries to delete a single station
+// l: popup_note_window
+// r: 3.2, Inc5
+//
+#define qtn_ir_stations_popup_delete               "Delete %U?"
+
+
+//
+// Toolbar items tips
+//
+
+// d: Tips for previous station
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_tooltip_previous         	   "Previous station"
+
+// d: Tips for next station
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_tooltip_next                    "Next station"
+
+// d: Tips for Play
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_tooltip_play                    "Play"
+
+// d: Tips for Stop
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_now_tooltip_stop                    "Stop"
+
+// d: Tips for Copy
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_copy                        "Copy"
+
+// d: Tips for Paste
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_paste                       "Paste"
+
+// d: Tips for Add to favourites
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_addtofav                    "Add to favourites"
+
+// d: Tips for Find stations
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_findst                      "Find stations"
+
+// d: Tips for History
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_history                     "History"
+
+// d: Tips for Listen
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+// 
+#define qtn_ir_tooltip_listen                     "Listen"
+
+// d: Tips for Station details 
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_stationde       		  "Station details"
+
+// d: Tips for Add station manually  
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_addstation       		  "Add station manually"
+
+// d: Tips for Find in Music store
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_findnstore      		  "Find in Music store"
+
+// d: Tips for Add all to favourites  
+// l: toolbar_text_tooltip
+// r: 5.0, Inc2
+//
+#define qtn_ir_tooltip_addalltofav			  "Add all to favourites"
+
+//advertisemnt and Click through URL is not available
+
+// l: popup_note_window
+// r: 5.0, Inc2
+//
+#define	qtn_ir_err_url_unavail		"URL unavailable "
+
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/internetradio.rh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 2006-2007 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:  Resource headers for project S60VisualRAdio
+*
+*/
+
+
+#ifndef VISUALRADIO_RH
+#define VISUALRADIO_RH
+
+#include <avkon.hrh>
+#include <aknsconstants.hrh>
+#include "ir.hrh"
+
+// ---------------------------------------------------------------------------
+// Visual Radio layout guide specific struct.
+// The layout rect is defined by giving four of the positioning or size values.
+// For initializing TAknTextComponentLayout, which can be
+// used to layout CEikLabel with CAknLayoutUtils::LayoutLabel
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_TEXT_LAYOUT
+    {
+    WORD C = 215;			// color, default is black
+    WORD l = ELayoutEmpty;	// left
+    WORD t = ELayoutEmpty;	// top
+    WORD r = ELayoutEmpty;	// right
+    WORD b = ELayoutEmpty;	// bottom
+    WORD H = ELayoutEmpty;	// height
+    WORD W = ELayoutEmpty;	// width
+    WORD J;					// justification
+    WORD font;				// font ID
+    }
+
+// ---------------------------------------------------------------------------
+// Struct for defining the bitmap button control
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_BITMAPBUTTON_CONTROL_DATA
+    {
+    LTEXT bmpfile;
+    STRUCT items[];
+    }
+
+// ---------------------------------------------------------------------------
+// Struct for defining the layout and key to react on for bitmap button
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_BITMAP_BUTTON_LAYOUT
+    {
+    WORD keys; // The keys on which this button reacts on.
+    DOUBLE relative_x; // Relative value for x coordinate
+    DOUBLE relative_y; // Relative value for y coordinate
+    DOUBLE relative_width; // Relative value for width in relation to parent layout's width
+    DOUBLE relative_height; // Relative value for height in relation to parent layout's height
+    }
+
+// ---------------------------------------------------------------------------
+// Struct for defining a bitmap button item
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_BITMAPBUTTON_ITEM
+    {
+    LONG cmdid; // Command to execute when the button is pressed
+    LTEXT bmpfile;
+    LONG enabledbmpid;
+    LONG enabledmaskid;
+    LONG disabledbmpid;
+    LONG disabledmaskid;
+    LONG pressedbmpid;
+    LONG pressedmaskid;
+    STRUCT portrait_layout; // IR_BITMAP_BUTTON_LAYOUT
+    STRUCT landscape_layout; // IR_BITMAP_BUTTON_LAYOUT
+    }
+
+// ---------------------------------------------------------------------------
+// Layouts for the bitmap buttons
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_BITMAPBUTTON_LAYOUT_ARRAY
+    {
+    LLINK layouts[];
+    }
+
+// ---------------------------------------------------------------------------
+// Frequency editor struct
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_FREQUENCY_EDITOR
+    {
+    BYTE flags = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// Struct for defining a fadable icon
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_FADABLE_ICON
+    {
+    LTEXT bmpfile;
+    LONG bitmap;
+    LONG mask;
+    WORD fadetime = 1000; // fading time in milliseconds, defaults to one second
+    BYTE invisible_percentage = 0; // Percentage how much the icon is shown when it is faded out
+    }
+
+// ---------------------------------------------------------------------------
+// Struct for defining a bitmap animation composed of fadable icons.
+// ---------------------------------------------------------------------------
+//
+STRUCT IR_BITMAP_ANIMATION
+    {
+    LONG frameInterval;         // Interval between frames.
+    STRUCT frames[];            // Bitmap animation frames of type IR_FADABLE_ICON.
+    }
+    STRUCT PBK2_ICON_INFO
+    {
+    /// Version number
+    BYTE version = 0;
+
+    /// Icon info id
+    /// @see PHONEBOOK2_ICON_ID
+    STRUCT pbk2IconInfoId;
+
+    /// MBM file name
+    LTEXT mbmFileName;
+
+    /// Icon bitmap id
+    LONG iconId;
+
+    /// Mask bitmap id
+    LONG maskId;
+
+    /// Major skin id of the icon
+    LONG skinIdMajor = EAknsMajorNone;
+
+    /// Minor skin id of the icon
+    LONG skinIdMinor = EAknsMinorNone;
+
+    /// Major color table id of the icon
+    LONG colorIdMajor = EAknsMajorNone;
+
+    /// Minor color table id of the icon
+    LONG colorIdMinor = EAknsMinorNone;
+
+    /// Index of the icon color in color table
+    LONG colorIndex = 0;
+
+    /// Index of the default color
+    LONG defaultColorIndex = 0;
+    }
+
+    
+    // --------------------------------------------------------------------------
+// PBK2_ICON_ARRAY resource structure
+// --------------------------------------------------------------------------
+//
+STRUCT PBK2_ICON_ARRAY
+    {
+    /// An id for the icon array
+    /// @see TPbk2IconArrayId
+    BYTE arrayId = ENow2NullIconArrayId;//EPbk2NullIconArrayId
+
+    /// Array of PHONEBOOK2_ICON_ID structures
+    /// @see PHONEBOOK2_ICON_ID
+    STRUCT icons[];
+    }
+
+    STRUCT PHONEBOOK2_ICON_ID
+    {
+    /// The UID that specifies whose icon this is. It is used to identify
+    // icons from different components that are used in the same data
+    // structure. The UID could be e.g a Phonebook 2 UID for application
+    // defined icons and an ECom implementation UID for UI extension icons.
+    LONG ownerUid = KPbk2NullIconIdOwnerUid;
+
+    /// The id of the icon inside the component.
+    BYTE id = EPbk2NullIconId;
+    }
+
+    
+    
+
+#endif // VISUALRADIO_RH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/internetradio.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,2702 @@
+/*
+* Copyright (c) 2006-2008 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:  
+*
+*/
+
+NAME IRAP
+
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.hrh>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <appinfo.rh>
+#include <e32keys.h>
+#include <avkon.mbg>        // Icon in save query
+#include <avkonicons.hrh>
+#include <aknsconstants.hrh>
+#include <data_caging_paths_strings.hrh>
+#include <bldvariant.hrh>
+
+
+#include "internetradio.rh"
+#include "ir.hrh"
+#include "internetradio.loc"
+#include "internetradioterms.loc"
+#include <internetradio.mbg>
+
+
+// AVKON status pane heights in portrait and landscape. 
+// Used when calculating layout positions on now playing view. LAF values
+// are defined by using the screen area. To set the layouts on the right
+// places, AVKON status pane height must be subtracted from the top/left
+// y -coordinate. 
+// In code side layout positions are defined relative to the parent layout.
+#define KIRStatusPaneHeightPortrait 47 
+#define KIRStatusPaneHeightLandscape 61 
+// Bitmap file path
+#define KInternetRadioBitmapFile APP_RESOURCE_DIR"\\InternetRadio.mif"
+#define KIntertRadioAifMifFile APP_RESOURCE_DIR"\\InternetRadio_aif.mif"
+
+// ---------------------------------------------------------
+//	
+//    Define the resource file signature 
+//    This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE { }
+
+// ---------------------------------------------------------
+//   
+//    Default Document Name
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name { buf=""; }
+
+// ---------------------------------------------------------
+//   
+//    Define default menu and CBA key.
+//
+// ---------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+    {
+    menubar = r_main_menubar;
+    cba = r_irapp_softkeys_options_back_cba;        
+    }
+    
+ RESOURCE LOCALISABLE_APP_INFO r_internetradio_localisable_app_info
+	{
+	short_caption = qtn_ir_apps_grid;
+	caption_and_icon = 
+	CAPTION_AND_ICON_INFO
+		{
+		caption = qtn_ir_apps_list;
+		number_of_icons = 1;
+		icon_file = KIntertRadioAifMifFile;
+		};
+	}
+    
+    
+//------------------------------------------
+//    Resource definition for pls view
+//----------------------------------------------------
+RESOURCE AVKON_VIEW r_ir_plsview
+    {
+    menubar = r_ir_menubar_pls;
+    cba = r_irapp_softkeys_options_back_cba;  
+    toolbar =r_now_plslist_white_toolbar;
+    toolbar =r_now_plslist_black_toolbar;   
+    }
+//---------------------------------------------------
+//   Resource definition for Settings View
+//---------------------------------------------------
+RESOURCE AVKON_VIEW r_ir_settingsview
+    {
+    menubar = r_ir_menubar_settings;
+    cba = r_irapp_softkeys_options_back_cba;    
+    }
+
+//----------------------------------------------------
+//    Resource definition for Terms and conditions view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_tandcview
+    {
+    cba = r_ir_cba_continue_exit; 
+    cba = r_ir_cba_accept_decline;   
+    }
+    
+RESOURCE TBUF r_ir_now_tooltip_next
+    {
+    buf = qtn_ir_now_tooltip_next;
+    }
+
+RESOURCE TBUF r_ir_now_tooltip_play
+    {
+    buf = qtn_ir_now_tooltip_play;
+    }
+RESOURCE TBUF r_ir_now_tooltip_previous
+    {
+    buf = qtn_ir_now_tooltip_previous;
+    }
+RESOURCE TBUF r_ir_now_tooltip_stop
+    {
+    buf = qtn_ir_now_tooltip_stop;
+    }
+    
+RESOURCE TBUF r_ir_now_artist_song
+    {
+    buf = qtn_ir_now_artist_song;
+    }
+    
+RESOURCE TBUF r_ir_history_artist_song
+    {
+    buf = qtn_ir_history_artist_song;
+    }
+    
+RESOURCE AVKON_TOOLBAR r_now_nameslist_toolbar
+	{
+	flags = KAknToolbarFixed; 
+	items =
+	    {
+	    // Toolbar is currently created dynamically
+	    };
+	}
+    
+//---------------------------------------------------------------
+//    Resource definition for toolbar of pls view for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_now_plslist_white_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = ESaveCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen_white;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_white_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = ESaveAllCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_saveall_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_saveall_white_mask;
+						helptxt = qtn_ir_tooltip_addalltofav;
+						}  
+					};            
+				};
+			}
+		};
+	}
+//---------------------------------------------------------------
+//    Resource definition for toolbar of pls view for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_now_plslist_black_toolbar 
+    {
+    flags = KAknToolbarTransparent |  KAknToolbarFixed;
+    items =
+        {
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = ESaveCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_mask;
+                        helptxt = qtn_ir_tooltip_addtofav;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EListenCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen;
+                        bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_mask;
+                        helptxt = qtn_ir_tooltip_listen;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = ESaveAllCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_saveall;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_saveall_mask;
+                        helptxt = qtn_ir_tooltip_addalltofav;
+                        }  
+                    };            
+                };
+            }
+        };
+    }
+ 
+//---------------------------------------------------------------
+//    Resource definition for toolbar of history view for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_history_black_toolbar 
+    {
+    flags = KAknToolbarTransparent |  KAknToolbarFixed;
+    items =
+        {
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EFindInShop;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_findnshop;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_findnshop_mask;
+                        helptxt = qtn_ir_tooltip_findnstore;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EListenCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen;
+                        bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_mask;
+                        helptxt = qtn_ir_tooltip_listen;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EAddStationManuallyCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_addstation;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addstation_mask;
+                        helptxt = qtn_ir_tooltip_addstation;
+                        }  
+                    };            
+                };
+            }
+        };
+    }
+//---------------------------------------------------------------
+//    Resource definition for toolbar of history view for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_history_white_toolbar 
+    {
+    flags = KAknToolbarTransparent |  KAknToolbarFixed;
+    items =
+        {
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EFindInShop;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_findnshop_white;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white_mask;
+                        helptxt = qtn_ir_tooltip_findnstore;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EListenCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen_white;
+                        bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_white_mask;
+                        helptxt = qtn_ir_tooltip_listen;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EAddStationManuallyCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_addstation_white;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addstation_white_mask;
+                        helptxt = qtn_ir_tooltip_addstation;
+                        }  
+                    };            
+                };
+            }
+        };
+    }
+//---------------------------------------------------------------
+//    Resource definition for toolbar of searchresults view for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_searchresults_white_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddtoFavouritesCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen_white;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_white_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddStationManuallyCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addstation_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addstation_white_mask;
+						helptxt = qtn_ir_tooltip_addstation;
+						}  
+					};            
+				};
+			}
+		};
+	}
+//---------------------------------------------------------------
+//    Resource definition for toolbar of searchresults view for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_searchresults_black_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddtoFavouritesCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddStationManuallyCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addstation;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addstation_mask;
+						helptxt = qtn_ir_tooltip_addstation;
+						}  
+					};            
+				};
+			}
+		};
+	}
+//---------------------------------------------------------------
+//    Resource definition for toolbar of mainview for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_mainview_white_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EFindStationsCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_find_white;
+						bmpmask = EMbmInternetradioQgn_indi_tb_find_white_mask;
+						helptxt = qtn_ir_tooltip_findst;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen_white;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_white_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EHistoryCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_history_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_history_white_mask;
+						helptxt = qtn_ir_tooltip_history;
+						}  
+					};            
+				};
+			}
+		};
+	}
+//---------------------------------------------------------------
+//    Resource definition for toolbar of mainview for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_mainview_black_toolbar 
+    {
+    flags = KAknToolbarTransparent |  KAknToolbarFixed;
+    items =
+        {
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EFindStationsCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_tb_find;
+                        bmpmask = EMbmInternetradioQgn_indi_tb_find_mask;
+                        helptxt = qtn_ir_tooltip_findst;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EListenCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen;
+                        bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_mask;
+                        helptxt = qtn_ir_tooltip_listen;
+                        }  
+                    };            
+                };
+            },
+        TBAR_CTRL
+            {
+            type = EAknCtButton;
+            id = EHistoryCmd;
+            control = AVKON_BUTTON
+                {
+                states =
+                    {
+                    AVKON_BUTTON_STATE
+                        {
+                        bmpfile = KInternetRadioBitmapFile;
+                        bmpid = EMbmInternetradioQgn_indi_irradio_tb_history;
+                        bmpmask = EMbmInternetradioQgn_indi_irradio_tb_history_mask;
+                        helptxt = qtn_ir_tooltip_history;
+                        }  
+                    };            
+                };
+            }
+        };
+    }
+ 
+//---------------------------------------------------------------
+//    Resource definition for toolbar of topstations view for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_topstations_white_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddtoFavouritesCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen_white;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_white_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddStationManuallyCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addstation_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addstation_white_mask;
+						helptxt = qtn_ir_tooltip_addstation;
+						}  
+					};            
+				};
+			}
+		};
+	}
+ 
+//---------------------------------------------------------------
+//    Resource definition for toolbar of topstations view for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_topstations_black_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddtoFavouritesCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddStationManuallyCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addstation;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addstation_mask;
+						helptxt = qtn_ir_tooltip_addstation;
+						}  
+					};            
+				};
+			}
+		};
+	}
+
+//---------------------------------------------------------------
+//    Resource definition for toolbar of stationsview view for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_stationsview_white_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddtoFavouritesCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen_white;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_white_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EStationDetailsCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_details_white;
+						bmpmask = EMbmInternetradioQgn_indi_tb_details_white_mask;
+						helptxt = qtn_ir_tooltip_stationde;
+						}  
+					};            
+				};
+			}
+		};
+	}
+ 
+//---------------------------------------------------------------
+//    Resource definition for toolbar of stationsview view for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_stationsview_black_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EAddtoFavouritesCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EListenCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_fmradio_tb_listen;
+						bmpmask = EMbmInternetradioQgn_indi_fmradio_tb_listen_mask;
+						helptxt = qtn_ir_tooltip_listen;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EStationDetailsCmd;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_details;
+						bmpmask = EMbmInternetradioQgn_indi_tb_details_mask;
+						helptxt = qtn_ir_tooltip_stationde;
+						}  
+					};            
+				};
+			}
+		};
+	}
+
+//---------------------------------------------------------------
+//    Resource definition for toolbar of addmanually view for dark theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_addmanually_white_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EButton1;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_copy_white;
+						bmpmask = EMbmInternetradioQgn_indi_tb_copy_white_mask;
+						helptxt = qtn_ir_tooltip_copy;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EButton2;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_white_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EButton3;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_paste_white;
+						bmpmask = EMbmInternetradioQgn_indi_tb_paste_white_mask;
+						helptxt = qtn_ir_tooltip_paste;
+						}  
+					};            
+				};
+			}
+		};
+	}
+ 
+//---------------------------------------------------------------
+//    Resource definition for toolbar of addmanually view for light theme.
+//----------------------------------------------------------------
+//
+RESOURCE AVKON_TOOLBAR r_ir_addmanually_black_toolbar 
+	{
+	flags = KAknToolbarTransparent |  KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EButton1;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_copy;
+						bmpmask = EMbmInternetradioQgn_indi_tb_copy_mask;
+						helptxt = qtn_ir_tooltip_copy;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EButton2;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_irradio_tb_addtofav;
+						bmpmask = EMbmInternetradioQgn_indi_irradio_tb_addtofav_mask;
+						helptxt = qtn_ir_tooltip_addtofav;
+						}  
+					};            
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EButton3;
+			control = AVKON_BUTTON
+				{
+				states =
+					{
+					AVKON_BUTTON_STATE
+						{
+						bmpfile = KInternetRadioBitmapFile;
+						bmpid = EMbmInternetradioQgn_indi_tb_paste;
+						bmpmask = EMbmInternetradioQgn_indi_tb_paste_mask;
+						helptxt = qtn_ir_tooltip_paste;
+						}  
+					};            
+				};
+			}
+		};
+	}
+
+    
+//----------------------------------------------------
+//    Resource definition for Add url view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_addurl
+    {
+    menubar = r_ir_menubar_addurl;
+    cba = r_irapp_softkeys_options_back_cba;
+    toolbar =r_ir_addmanually_white_toolbar;
+    toolbar =r_ir_addmanually_black_toolbar;
+    } 
+    
+//----------------------------------------------------
+//    Resource definition for Search Results view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_searchresults
+    {
+    menubar = r_ir_menubar_searchresults;
+    cba = r_irapp_softkeys_options_back_cba;
+    toolbar =r_ir_searchresults_white_toolbar;
+    toolbar =r_ir_searchresults_black_toolbar;
+    }
+//----------------------------------------------------
+//    Resource definition for Category view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_category
+    {
+    menubar = r_ir_menubar_category;
+    cba = r_irapp_softkeys_options_back_cba;
+    }
+
+//----------------------------------------------------
+//    Resource definition for Stations view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_stations
+    {
+    menubar = r_ir_menubar_stations;
+    cba = r_irapp_softkeys_options_back_cba;
+    toolbar = r_ir_topstations_white_toolbar;
+    toolbar = r_ir_topstations_black_toolbar;
+    toolbar = r_ir_stationsview_white_toolbar;
+    toolbar = r_ir_stationsview_black_toolbar;
+    }
+   
+//----------------------------------------------------
+//    Resource definition for Station information view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_stationinfo
+    {
+    menubar = r_ir_menubar_empty;
+    cba = r_irapp_softkey_close_cba;
+    }   
+    
+//----------------------------------------------------
+//    Resource definition for Favourites view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_fav
+    {
+    menubar = r_ir_menubar_fav;
+    cba = r_irapp_softkeys_options_back_cba;
+    toolbar = r_ir_mainview_white_toolbar;
+    toolbar = r_ir_mainview_black_toolbar;
+    }
+    
+//----------------------------------------------------
+//    Resource definition for History view
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_ir_history
+    {
+    menubar = r_ir_menubar_history;
+    cba = r_irapp_softkeys_options_back_cba;
+    toolbar = r_ir_history_white_toolbar;
+    toolbar = r_ir_history_black_toolbar;
+    }  
+
+
+//-----------------------------------------------------
+//    Resource definition for First Time View
+//-----------------------------------------------------
+ RESOURCE AVKON_VIEW r_ir_firsttime_view
+	{
+	menubar = r_ir_firsttime_menu_bar;
+	cba = r_irapp_softkeys_options_back_cba;
+	}   
+ 
+//------------------------------------------------------
+// Menubar for first time view
+//------------------------------------------------------
+RESOURCE MENU_BAR r_ir_firsttime_menu_bar
+	{
+	titles = 
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_ir_firsttime_menu; 
+			}
+		};
+	} 
+   
+RESOURCE MENU_PANE r_ir_firsttime_menu
+	{
+	items = 
+		{
+		MENU_ITEM
+			{
+			command = EFirstTimeSelectCmd;
+			txt = qtn_ir_options_select; 
+			},
+		MENU_ITEM 
+			{
+			command = EGotoNowPlayingViewCmd; 
+			txt = qtn_ir_options_now;
+			},
+		MENU_ITEM
+			{
+			command = EFirstTimeSettingsCmd;
+			txt = qtn_ir_options_settings; 
+			},
+		MENU_ITEM
+			{
+			command = EHelpCmd;   
+			txt = qtn_ir_options_help;
+			},
+		MENU_ITEM
+			{
+			command = EExitCmd; 
+			txt = qtn_ir_options_exit; 
+			}
+		};
+	}   
+    
+        
+       
+// ---------------------------------------------------------
+//   
+//   r_main_menubar
+//   Main menubar
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_main_menubar
+    {
+    titles =
+        {
+        MENU_TITLE 
+            {
+            menu_pane = r_main_menu;
+            }
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_main_menu
+//   Menu for "Options"
+//   See BookstoreDb.hrh for commands
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_main_menu
+    {
+    items = 
+        {
+        MENU_ITEM { command = ESelectCmd; txt = qtn_ir_options_select; },
+	MENU_ITEM { command = EExitCmd; txt = qtn_ir_options_exit; }
+        };
+    } 
+/////////////////////////////////////////////////////////////////////////////////
+// EMPTY MENU BAR
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_empty
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_empty;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_empty
+    {
+    items = 
+        {
+        };
+    }
+    
+/////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR MAIN CHOICE VIEW;
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_mainchoice
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_IR_menu_mainchoice;}
+        };
+    }
+
+RESOURCE MENU_PANE r_IR_menu_mainchoice
+    {
+    items = 
+        {
+		MENU_ITEM {command = ESelectCmd; txt = qtn_ir_options_select;},
+        MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+        MENU_ITEM {command = EAddStationManuallyCmd;   txt = qtn_ir_options_add_manually;},
+        MENU_ITEM {command = EAddtoStationsCmd;   txt = qtn_ir_options_add;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings ;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help ;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }
+ 
+/////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR PLS VIEW;
+//////////////////////////////////////////////////////////////////////////////////// 
+    
+RESOURCE MENU_BAR r_ir_menubar_pls
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_IR_menu_pls;}
+        };
+    }
+ RESOURCE MENU_PANE r_IR_menu_pls
+    {
+    items = 
+        {
+    	MENU_ITEM {command = EGotoNowPlayingViewCmd; txt = qtn_ir_options_now;},
+        MENU_ITEM {command = EGotoMainView;   txt = qtn_ir_options_mainview;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }
+//////////////////////////////////////////////////////////////////////////////////// 
+// MENUBAR FOR STATION DIRECTORY VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_directory
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_directory;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_directory
+    {
+    items = 
+        {
+		MENU_ITEM {command = ESelectCmd; txt = qtn_ir_options_select;},
+        MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},	
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings ;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help ;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR CATEGORY VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_category
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_category;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_category
+    {
+    items = 
+        {
+		MENU_ITEM {command = ESelectCmd; txt = qtn_ir_options_select;},
+        MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    } 
+    
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR STATIONS VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_stations
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_stations;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_stations
+    {
+    items = 
+        {
+		MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},	
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings ;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help ;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }
+    
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR NOW PLAYING VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_ByteCounter_layout
+// Portrait layout for the ByteCounter . 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_ByteCounter_layout
+	{
+	l=5; t=56-KIRStatusPaneHeightPortrait; W = 115; H = 30;
+	}
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_ByteCounter_layout_mirrored
+// Portrait layout for the ByteCounter . 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_ByteCounter_layout_mirrored
+	{
+	t=56-KIRStatusPaneHeightPortrait; r=120; W = 115; H = 30;
+	}
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_ByteCounter_layout_Landscape
+// LandScape layout for the ByteCounter . 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_ByteCounter_layout_Landscape
+	{
+	l=275; t=90-KIRStatusPaneHeightLandscape; W = 115; H = 30;
+	}
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_ByteCounter_layout_Landscape_mirrored
+// LandScape layout for the ByteCounter . 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_ByteCounter_layout_Landscape_mirrored
+	{
+	t=90-KIRStatusPaneHeightLandscape; r=390; W = 115; H = 30;
+	}
+
+//--------------------------------------------------------------------------
+// r_ir_nowplaying_view_BitRate_layout
+// Portrait layout for the BitRate . 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_BitRate_layout
+	{
+	l=255; t=56-KIRStatusPaneHeightPortrait; W = 115; H = 30;
+	}
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_BitRate_layout_mirrored
+// Portrait layout for the Bitrate. 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_BitRate_layout_mirrored
+	{
+	t=56-KIRStatusPaneHeightPortrait; r= 385;W = 115; H = 30;
+	}
+
+// r_ir_nowplaying_view_BitRate_layout_LandScape
+// LandScape layout for the BitRate . 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_BitRate_layout_LandScape
+	{
+	l=400; t=90-KIRStatusPaneHeightLandscape; W = 115; H = 30;
+	}
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_BitRate_layout_LandScape_mirrored
+// LandScape layout for the Bitrate. 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_BitRate_layout_LandScape_mirrored
+	{
+	t=90-KIRStatusPaneHeightLandscape;r=515; W = 115; H = 30;
+	}
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_logo_bitmap_layout
+// Portrait layout for the logo bitmap. 
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_logo_bitmap_layout
+    {
+    l = 0; t = 99 - KIRStatusPaneHeightPortrait; W = 360; H = 360;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_logo_bitmap_layout_mirrored
+// Mirrored portrait layout for the logo bitmap.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_logo_bitmap_layout_mirrored
+    {
+    t = 99 - KIRStatusPaneHeightPortrait; r = 360; W = 360; H = 360; 
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_logo_bitmap_layout_landscape
+// Landscape layout for the logo bitmap.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_logo_bitmap_layout_landscape
+    {
+    l = 0; t = 84 - KIRStatusPaneHeightLandscape; W = 265; H = 265;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_logo_bitmap_layout_landscape_mirrored
+// Mirrored landscape layout for the logo bitmap.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_logo_bitmap_layout_landscape_mirrored
+    {
+    t = 84 - KIRStatusPaneHeightLandscape; r = 265; W = 265; H = 265;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_station_information_layout
+// Portrait layout for the station information container.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_station_information_layout
+    {
+    l = 10; t = 460 - KIRStatusPaneHeightPortrait; W = 340; H = 58;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_station_information_layout_mirrored
+// Mirrored portrait layout for the station information container.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_station_information_layout_mirrored
+    {
+    t = 460 - KIRStatusPaneHeightPortrait; r = 350; W = 340; H = 58;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_station_information_layout_landscape
+// Landscape layout for the station information container.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_station_information_layout_landscape
+    {
+    l = 275; t = 174 - KIRStatusPaneHeightLandscape; W = 220; H = 28;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_station_information_layout_landscape_mirrored
+// Mirrored landscape layout for the station information container.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_station_information_layout_landscape_mirrored
+    {
+    t = 174 - KIRStatusPaneHeightLandscape; r = 495; W = 220; H = 28;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_metadata_layout_landscape
+// Landscape layout for the rds data layout.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_metadata_layout_landscape
+    {
+    l = 275; t = 204 - KIRStatusPaneHeightLandscape; W = 220; H = 28;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_nowplaying_view_metadata_layout_landscape_mirrored
+// Mirrored landscape layout for the rds data layout.
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_nowplaying_view_metadata_layout_landscape_mirrored
+    {
+    t = 204 - KIRStatusPaneHeightLandscape; r = 495; W = 220; H = 27;
+    }
+
+RESOURCE MENU_BAR r_ir_menubar_nowplaying
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_nowplaying;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_nowplaying
+    {
+    items = 
+        {
+        MENU_ITEM {command = EGotoMainView;   txt = qtn_ir_options_mainview;},
+    	MENU_ITEM {command = EStationDetailsCmd;   txt = qtn_ir_options_info;},
+        MENU_ITEM {command = EFmRecOrPhone;   txt = qtn_ir_options_fmtrans;},
+        MENU_ITEM {command = EAddtoStationsCmd;   txt = qtn_ir_options_add ;},
+        MENU_ITEM {command = EStereoMode;   txt = qtn_ir_options_stereowidening;
+        											cascade=R_NOW_SUBMENU;},
+        MENU_ITEM {command = EEqualizer;   txt = qtn_ir_options_equalizer;},
+        MENU_ITEM {command = EHistory;   txt = qtn_ir_options_history;},
+        MENU_ITEM {command = EFindInShop; txt = qtn_ir_options_findnmusicstore;},
+	    MENU_ITEM {command = EGotoMusicStore; txt = qtn_ir_options_gotomusicstore;},//To be included in the code in Now playing view
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }  
+RESOURCE MENU_PANE R_NOW_SUBMENU
+    {
+    items = 
+        {
+		MENU_ITEM {command = EOnCmd; txt = qtn_ir_options_on; flags=EEikMenuItemCheckBox;},
+		MENU_ITEM {command = EOffCmd; txt = qtn_ir_options_off; flags = EEikMenuItemCheckBox ;}
+        };
+    }
+    
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR ADD URL VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_addurl
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_addurl;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_addurl
+    {
+    items = 
+        {
+        MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings ;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help ;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    } 
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR SEARCH VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_search
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_search;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_search
+    {
+    items = 
+        {
+		MENU_ITEM {command = ESearchCmd; txt = qtn_ir_options_search;},
+		MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+		MENU_ITEM {command = EAddStationManuallyCmd;   txt = qtn_ir_options_add_manually;},
+		MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+		MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help;},
+		MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    } 
+
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR SEARCH RESULTS VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_searchresults
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_searchresults;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_searchresults
+    {
+    items = 
+        {
+	  	MENU_ITEM {command = ESearchCmd; txt = qtn_ir_options_searchag;},
+        MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    } 
+/////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR SETTINGS VIEW;
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_settings
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_IR_menu_settings;}
+        };
+    }
+
+RESOURCE MENU_PANE r_IR_menu_settings
+    {
+    items = 
+        {
+		MENU_ITEM {command = EIRCmdChangeSetting; txt = qtn_ir_options_change;},
+		MENU_ITEM {command = EGotoNowPlayingViewCmd; txt = qtn_ir_options_now;},
+		MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help;},
+		MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }
+
+RESOURCE MENU_BAR r_ir_menubar_fav
+    {
+    titles =
+        {
+         MENU_TITLE {menu_pane = r_ir_menu_fav;}
+        };
+    }
+RESOURCE MENU_PANE r_ir_menu_fav
+    {
+    items = 
+        {
+		MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+	    MENU_ITEM {command = EAddStationManuallyCmd; txt = qtn_ir_options_add_manually;},	
+	    MENU_ITEM {command = EAddtoStationsCmd;   txt = qtn_ir_options_add ;},
+        MENU_ITEM {command = EDeleteCmd;   txt = qtn_ir_suboptions_delete;}	,
+		MENU_ITEM {command = EEditStationsCmd;   txt = qtn_ir_options_editstation;},
+		MENU_ITEM {command = EStationsCmd; txt = qtn_ir_options_station; 
+										cascade = R_IR_MENU_STATIONS_SUB_MENU;},
+		MENU_ITEM {command = EMarkUnmark;cascade = r_ir_menupane_markable_list;
+											txt = qtn_ir_options_markunmark;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help ;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}        };
+    }
+    
+  
+     
+
+RESOURCE MENU_PANE R_IR_MENU_STATIONS_SUB_MENU
+    {
+    items = 
+        {
+		MENU_ITEM {command = EStationDetailsCmd; txt = qtn_ir_suboptions_details;},
+		MENU_ITEM {command = EMoveCmd; txt = qtn_ir_suboptions_move;},
+        MENU_ITEM {command = EDeleteCmd;   txt = qtn_ir_suboptions_delete;}	
+        };
+    }
+
+////////////////////////////////////////////////////////////////////////////////////////////    
+// CBA for Terms and condtions view
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE CBA r_ir_cba_continue_exit
+	{
+	buttons =
+		{ 
+		CBA_BUTTON { txt =qtn_ir_cost_softkey_continue; id = EIRContinue; },
+		CBA_BUTTON { txt =qtn_ir_cost_softkey_exit; id = EIRExit;}
+		};
+	}
+
+RESOURCE CBA r_ir_cba_done_cancel
+	{
+	buttons =
+		{ 
+		CBA_BUTTON { txt =qtn_ir_softkey_done; id = EAknSoftkeyDone; },
+		CBA_BUTTON { txt =qtn_ir_softkey_cancel; id = EAknSoftkeyCancel;}
+		};
+	}
+
+RESOURCE CBA r_ir_cba_accept_decline 
+	{
+	buttons = 
+		{ 
+		CBA_BUTTON { txt =qtn_ir_terms_softkey_accept; id = EIRAccept; },
+		CBA_BUTTON { txt =qtn_ir_terms_softkey_decline; id = EIRExit;}
+		};
+	}
+
+//////////////////////////////////////////////
+////for query dialog
+///////////////////////////////////////////////////
+
+RESOURCE DIALOG R_QUERY_DELETION
+  {
+    flags = EGeneralQueryFlags;
+ 	buttons = R_AVKON_SOFTKEYS_YES_NO;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout = EConfirmationQueryLayout;
+                };
+            }
+        };
+    }
+
+//---------FOR OPERATION SETTINGS
+
+//ISDS BASE URL
+RESOURCE TBUF r_irapp_base_isds_url {buf="http://djmagnus.edelkey.net/isds";}
+//------------------------------
+//Text for Cost warning view
+RESOURCE TBUF r_irapp_cost_warning_title {buf = qtn_ir_cost_title;}
+
+RESOURCE TBUF r_irapp_cost_warning_info {buf = qtn_ir_cost_warning;} 
+RESOURCE TBUF r_irapp_cost_warning_heading {buf = qtn_ir_cost_heading;}
+
+
+//-------Terms&Conditions
+RESOURCE TBUF r_irapp_terms_conditions_heading {buf = qtn_ir_terms_heading;}
+RESOURCE TBUF r_irapp_mainheading {buf= qtn_ir_apps_grid;}
+
+
+//-------Main Menu
+
+RESOURCE TBUF r_irapp_main_menu_title {buf =qtn_ir_main_title;}
+
+RESOURCE TBUF r_irapp_main_discover_expand {buf = qtn_ir_main_discover_expanded;}
+RESOURCE TBUF r_irapp_findstation_directory {buf =qtn_ir_findst_browsesds ;}
+
+RESOURCE TBUF r_irapp_main_menu_search {buf = qtn_ir_main_searchindir;}
+RESOURCE TBUF r_irapp_main_search_expand {buf = qtn_ir_findst_search_ensrhterm;}
+RESOURCE TBUF r_irapp_findstation_search_expand {buf =qtn_ir_findst_search_ensrhterm;}  
+
+RESOURCE TBUF r_irapp_main_menu_last {buf = qtn_ir_main_last;}
+RESOURCE TBUF r_irapp_main_menu_now {buf = qtn_ir_main_now;}
+RESOURCE TBUF r_irapp_findstation_addstationmanually {buf = qtn_ir_options_add_manually ;}
+RESOURCE TBUF r_irapp_findstation_addstationmanually_expand {buf = qtn_ir_findst_addtofav ;}
+RESOURCE TBUF r_irapp_favourites_list_empty {buf = qtn_ir_main_descriptive_text ;}
+RESOURCE TBUF r_irapp_favourites_prog_deleting {buf = qtn_ir_main_prog_deleting ;}
+RESOURCE TBUF r_irapp_stationlist_nomatches {buf = qtn_ir_stationlist_nomatches ;}
+//---------Settings view
+RESOURCE TBUF r_irapp_settings {buf = qtn_ir_settings_title;}
+RESOURCE TBUF r_irapp_settings_accessPoint {buf = qtn_ir_settings_access;}
+RESOURCE TBUF r_irapp_settings_accessPoint_expand {buf = qtn_ir_access_ask;}
+RESOURCE TBUF r_irapp_settings_select_accesspoint {buf = qtn_ir_access_title;}
+
+RESOURCE TBUF r_irapp_settings_gprsbitrate {buf = qtn_ir_settings_gprs;}
+RESOURCE TBUF r_irapp_settings_3gbitrate {buf = qtn_ir_settings_3g;}
+RESOURCE TBUF r_irapp_settings_wifibitrate {buf = qtn_ir_settings_wifi;}
+
+RESOURCE TBUF r_irapp_settings_standardquality {buf = qtn_ir_bitrate_standard;}
+RESOURCE TBUF r_irapp_settings_highquality {buf = qtn_ir_bitrate_high;}
+RESOURCE TBUF r_irapp_settings_bestquality {buf = qtn_ir_bitrate_best;}
+
+
+//--------------------------------New Settings view ---------------------------------------
+
+
+//---------Station Directory
+RESOURCE TBUF r_irapp_stat_dir_title {buf = qtn_ir_discover_title;}
+RESOURCE TBUF r_irapp_stat_dir_genre {buf = qtn_ir_discover_genre;}
+RESOURCE TBUF r_irapp_stat_dir_genre_expand {buf = qtn_ir_discover_genre_expanded;}
+RESOURCE TBUF r_irapp_stat_dir_language {buf = qtn_ir_discover_langauge;}
+RESOURCE TBUF r_irapp_stat_dir_language_Expand {buf = qtn_ir_discover_language_expanded;}
+RESOURCE TBUF r_irapp_stat_dir_country {buf = qtn_ir_discover_country_region;}
+RESOURCE TBUF r_irapp_stat_dir_country_expand {buf = qtn_ir_discover_staticountryreg;}
+RESOURCE TBUF r_irapp_stat_dir_top {buf = qtn_ir_discover_top;}
+RESOURCE TBUF r_irapp_stat_dir_top_expand {buf = qtn_ir_discover_beststations;}
+
+//-----Genre Station List
+RESOURCE TBUF r_irapp_genre_statlist_title {buf = qtn_ir_genre_title;}
+RESOURCE TBUF r_irapp_genre_statlist_title_expand {buf = qtn_ir_genre_list_expanded;}
+RESOURCE TBUF r_irapp_language_statlist_title {buf = qtn_ir_language_title;}
+RESOURCE TBUF r_irapp_language_statlist_title_Expand {buf = qtn_ir_language_list_expanded;}
+RESOURCE TBUF r_irapp_country_statlist_title {buf = qtn_ir_countryregion_title;}
+RESOURCE TBUF r_irapp_country_statlist_title_Expand {buf = qtn_ir_country_list_expanded;}
+RESOURCE TBUF r_irapp_top_statlist_title {buf = qtn_ir_top_title;}
+
+
+//----------Loading Overlay
+RESOURCE TBUF r_irapp_loading_buffering {buf = qtn_ir_now_wait_buffering;}
+RESOURCE TBUF r_irapp_loading_loading {buf = qtn_ir_loading_loading;}
+RESOURCE TBUF r_irapp_loading_searching {buf = qtn_ir_loading_searching;}
+RESOURCE TBUF r_irapp_loading_buffering_percentage {buf = qtn_ir_now_wait_buffering_perc;}
+
+//----------------Now playing
+RESOURCE TBUF r_irapp_nowplaying_title {buf = qtn_ir_main_title;}
+RESOURCE TBUF r_irapp_nowplaying_bitrate {buf = qtn_ir_now_bitrate;}
+RESOURCE TBUF r_irapp_nowplaying_bytecounter {buf = qtn_ir_now_bytecountermb;}
+RESOURCE TBUF r_irapp_nowplaying_bytecounter_deci {buf = qtn_ir_now_deci_bytecountermb;}
+
+
+//--------------Add Manually
+RESOURCE TBUF r_irapp_addmanually_title {buf =  qtn_ir_url_title;}
+RESOURCE TBUF r_irapp_cancel {buf =  qtn_ir_softkey_cancel;}
+RESOURCE TBUF r_irapp_save {buf = qtn_ir_tooltip_addtofav;}
+RESOURCE TBUF r_irapp_copy {buf = qtn_ir_tooltip_copy;}
+RESOURCE TBUF r_irapp_paste {buf = qtn_ir_tooltip_paste;}
+RESOURCE TBUF r_irapp_addmanually_intro {buf = qtn_ir_url_intro;}
+RESOURCE TBUF r_irapp_addmanually_address {buf = qtn_ir_url_address;}
+RESOURCE TBUF r_irapp_addmanually_http {buf = qtn_ir_url_http;}
+RESOURCE TBUF r_irapp_addmanually_name {buf = qtn_ir_url_name;}
+RESOURCE TBUF r_irapp_editstation_title{buf = qtn_ir_edit_title;}
+
+
+//--------------Stations(Favourites)
+RESOURCE TBUF  r_irapp_stations_title {buf =  qtn_ir_stations_title;}
+RESOURCE TBUF  r_irapp_stations_default {buf =  qtn_ir_stations_default;}
+RESOURCE TBUF  r_irapp_stations_find {buf = qtn_ir_stations_find;}
+RESOURCE TBUF  r_irapp_stations_numbering {buf = qtn_ir_list_memory_location;}
+
+//----------Station Information view
+RESOURCE TBUF  r_irapp_stationinfo_title  		{buf = qtn_ir_info_details_title;}
+RESOURCE TBUF  r_irapp_stationinfo_name 		{buf = qtn_ir_info_details_name;}
+RESOURCE TBUF  r_irapp_stationinfo_description  {buf = qtn_ir_info_details_description;}
+RESOURCE TBUF  r_irapp_stationinfo_genre 		{buf = qtn_ir_info_details_genre;}
+RESOURCE TBUF  r_irapp_stationinfo_language 	{buf = qtn_ir_info_details_language;}
+RESOURCE TBUF  r_irapp_stationinfo_country 		{buf = qtn_ir_info_details_countryregi;}
+RESOURCE TBUF  r_irapp_stationinfo_type 		{buf = qtn_ir_info_details_type;}
+RESOURCE TBUF  r_irapp_stationinfo_stream 		{buf = qtn_ir_info_details_streams;}
+RESOURCE TBUF  r_irapp_stationinfo_typemanual 	{buf = qtn_ir_info_details_type_manual;}
+RESOURCE TBUF  r_irapp_stationinfo_typeisds 	{buf = qtn_ir_info_details_type_isds;}
+RESOURCE TBUF  r_irapp_stationinfo_bitrate 		{buf = qtn_ir_info_details_bitrate;}
+RESOURCE TBUF  r_irapp_stationinfo_unnamed 		{buf = qtn_ir_info_details_unnamed;}
+
+RESOURCE TBUF r_irapp_results_none {buf = qtn_ir_results_none;}
+RESOURCE TBUF r_irapp_Search_String{buf = qtn_ir_findst_search_ensrhterm;}
+
+
+//------General
+RESOURCE TBUF r_irapp_continue {buf = qtn_ir_cost_softkey_continue;}
+RESOURCE TBUF r_irapp_exit {buf = qtn_ir_cost_softkey_exit;}
+RESOURCE TBUF r_irapp_accept {buf = qtn_ir_terms_softkey_accept;}
+RESOURCE TBUF r_irapp_decline {buf = qtn_ir_terms_softkey_decline;}
+RESOURCE TBUF r_irapp_options {buf = qtn_ir_softkey_options;}
+RESOURCE TBUF r_irapp_select {buf = qtn_ir_softkey_select;}
+RESOURCE TBUF r_irapp_back {buf = qtn_ir_softkey_back;}
+RESOURCE TBUF r_irapp_close {buf = qtn_ir_info_softkey_close;}
+RESOURCE TBUF r_irapp_yes {buf = qtn_ir_softkey_yes;}
+RESOURCE TBUF r_irapp_no {buf = qtn_ir_softkey_no;}
+RESOURCE TBUF r_irapp_ok {buf = qtn_ir_settings_connec_softkey_ok;}
+RESOURCE TBUF r_irapp_search {buf = qtn_ir_findst_softkey_search;}
+RESOURCE TBUF r_irapp_memlo_ram_out_of_mem {buf = qtn_ir_memlo_ram_out_of_mem;}
+
+//Added for First time/Find stations view
+RESOURCE TBUF r_irapp_firsttime_title {buf = qtn_ir_firstuse_title;}
+RESOURCE TBUF r_irapp_findstations_title {buf = qtn_ir_findstation_title;}
+
+
+//ToolBar resources
+RESOURCE TBUF r_irapp_addtofavorites {buf = qtn_ir_options_add;}
+
+
+
+//--------------Pls Veiw
+RESOURCE TBUF r_irapp_feature_file_title {buf = qtn_ir_playlist_title;}
+RESOURCE TBUF r_irapp_streaming_links { buf = qtn_ir_error_notavailable;}
+RESOURCE TBUF r_irapp_tooltip_addtofav { buf = qtn_ir_tooltip_addtofav;}
+RESOURCE TBUF r_irapp_tooltip_addalltofav { buf = qtn_ir_tooltip_addalltofav;}
+RESOURCE TBUF r_irapp_tooltip_listen { buf = qtn_ir_tooltip_listen;}
+RESOURCE TBUF r_irapp_tooltip_stationde { buf = qtn_ir_tooltip_stationde;}
+RESOURCE TBUF r_irapp_tooltip_addstation { buf = qtn_ir_tooltip_addstation;}
+RESOURCE TBUF r_irapp_station_saved { buf = qtn_ir_station_saved;}
+//--------------Error Notes
+RESOURCE TBUF r_irapp_error_connection {buf =  qtn_ir_error_connection;}
+RESOURCE TBUF r_irapp_mediaengine_buffer_empty {buf = qtn_ir_error_buffer ;}
+RESOURCE TBUF r_irapp_error_address {buf = qtn_ir_error_address ;}
+RESOURCE TBUF r_irapp_error_general {buf = qtn_ir_error_general;}
+RESOURCE TBUF r_irapp_addfavourites_error {buf = qtn_ir_error_favourites;}
+RESOURCE TBUF r_irapp_suboption_delete {buf = qtn_ir_suboptions_delete;}
+RESOURCE TBUF r_irapp_error_notinisds {buf = qtn_ir_error_notinisds; }
+RESOURCE TBUF r_irapp_error_name_already_exists {buf = qtn_ir_name_already_exists;}
+RESOURCE TBUF r_irapp_error_url_unavailable {buf = qtn_ir_err_url_unavail;}
+RESOURCE TBUF r_irapp_error_isds_unavailable {buf = qtn_ir_error_isds_unavailable;}
+RESOURCE TBUF r_irapp_error_operation {buf = qtn_ir_err_operation;}
+
+//Information Note
+RESOURCE TBUF r_irapp_infonote_update  {buf = qtn_ir_favourites_popup_removed;}
+
+//Confirmation Note
+RESOURCE TBUF r_irapp_note_delete {buf = qtn_ir_stations_popup_delete;}
+RESOURCE TBUF r_irapp_note_popup_save {buf = qtn_ir_stations_popup_save;}
+RESOURCE TBUF128 r_irapp_note_removed {buf = qtn_ir_stations_popup_removed;}
+RESOURCE TBUF128 r_irapp_note_removed_many {buf = qtn_ir_stations_popup_removed_many;}
+RESOURCE TBUF r_irapp_confirm_saved {buf = qtn_ir_added_single;}
+RESOURCE TBUF r_irapp_stations_saved {buf = qtn_ir_added_multi;} 
+RESOURCE TBUF r_irapp_note_delete_many {buf = qtn_ir_stations_popup_delete_many;}
+RESOURCE TBUF r_irapp_stations_popup_saved {buf = qtn_ir_added_single;}
+
+//Progress Dialog
+RESOURCE TBUF64 r_irapp_searching_progress{ buf=qtn_ir_loading_searching;}
+
+//----Error Note---Not in UI spec
+RESOURCE TBUF r_irapp_search_error {buf = qtn_ir_error_search;}
+RESOURCE TBUF r_irapp_irgeneral_error {buf =  qtn_ir_app_general_err;}
+RESOURCE TBUF r_irapp_nw_noconn_error {buf =  qtn_ir_nwcontroller_err_noconnectivity;}
+RESOURCE TBUF r_irapp_networkcontroller_noap  {buf = qtn_ir_nwcontroller_err_noaccesspoint; }
+RESOURCE TBUF r_irapp_addmanually_error {buf = qtn_ir_addmanually_err_data;}
+RESOURCE TBUF r_irapp_addmanually_noname {buf = qtn_ir_addmanually_unnamed;}
+RESOURCE TBUF r_irapp_addmanually_notext { buf =qtn_ir_main_unnamed_station ; }
+RESOURCE TBUF r_irapp_play_fail_error {buf = qtn_ir_playfail_err;}
+
+//--------------------History------------------
+RESOURCE TBUF r_irapp_clear_history {buf = qtn_ir_history_no_history;}
+RESOURCE TBUF r_irapp_history_title {buf = qtn_ir_title_history;}
+RESOURCE TBUF r_irapp_history_query {buf = qtn_ir_options_clearhistory;}
+RESOURCE TBUF r_irapp_tooltip_find_in_shop  {buf = qtn_ir_tooltip_findnstore;}
+RESOURCE TBUF r_irapp_history_tooltip {buf = qtn_ir_tooltip_history;}
+RESOURCE TBUF r_irapp_tooltip_findstation {buf = qtn_ir_tooltip_findst;}
+
+
+
+RESOURCE TBUF r_irapp_percentage_loading {buf = qtn_ir_loading_percent_sign;}
+
+
+//-----------------GeneralSettings--------------
+RESOURCE TBUF r_irapp_general_settings_plugin_title{buf = qtn_ir_main_title;}
+RESOURCE TBUF r_irapp_general_settings_plugin_listbox_caption
+{
+buf = qtn_ir_set_folder_internetradio;
+}
+
+
+RESOURCE LABEL r_tc_label
+{
+horiz_align = EEikLabelAlignHLeft;
+vert_align=EEikLabelAlignVTop;
+standard_font=EEikLabelFontNormal;
+reserve_length=0;
+}   
+
+// ---------------------------------------------------------
+//   
+//   SETTING ITEM LIST
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_SETTING_ITEM_LIST r_entry_settings_list
+	{
+	title = qtn_ir_settings_title;
+	}
+
+// ---------------------------------------------------------
+//   
+//   RADIO BUTTON SETTING PAGE
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_SETTING_PAGE r_enumeratedtext_setting_page
+	{
+	type = EAknCtPopupSettingList;
+	editor_resource_id = r_popup_setting_list;
+	}
+	
+RESOURCE POPUP_SETTING_LIST r_popup_setting_list
+    {
+	flags = 0;
+    }
+    
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_setting_texts
+	{
+    setting_texts_resource = r_texts;
+	}
+	
+RESOURCE ARRAY r_texts
+    {
+    items =
+        {
+        AVKON_ENUMERATED_TEXT { value=0; text = "";}
+        };
+    } 
+
+RESOURCE TBUF r_irapp_terms_file {buf = ir_terms_file;}
+
+
+// ---------------------------------------------------------------------------
+//    r_ir_channel_list
+//    List box of channel list view.
+//    Contains the visible items of the view.
+// ---------------------------------------------------------------------------
+//
+RESOURCE LISTBOX r_ir_channel_list
+    {
+     flags = EAknListBoxMarkableList;
+    }
+
+    
+// ---------------------------------------------------------
+//    r_ir_nowplaying_view
+// ---------------------------------------------------------------------------
+RESOURCE AVKON_VIEW r_ir_nowplaying_view
+    {
+    menubar = r_ir_nowplaying_view_menu_bar;
+    cba = r_irapp_softkeys_options_back_cba;
+    toolbar =r_now_nameslist_toolbar;
+    }
+    
+// ---------------------------------------------------------------------------
+//    r_ir_main_view_menu_bar
+// ---------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_ir_nowplaying_view_menu_bar
+    {
+    titles=
+        {
+        MENU_TITLE
+            { 
+            menu_pane = r_ir_menu_nowplaying; 
+            }
+        };
+    }
+    
+/////////////////////////////////////////////////////////////////////////////////////////
+///
+///
+///
+///            INTERNET RADIO STATIONS DIRECTORY VIEW RESOURCES -- START
+///
+///
+///
+/////////////////////////////////////////////////////////////////////////////////////////
+
+// ---------------------------------------------------------------------------
+//    r_ir_qtn_station_directory_title
+//    Stations directory view title.
+// ---------------------------------------------------------------------------
+//
+
+RESOURCE TBUF r_ir_station_directory_title { buf = "qtn_ir_discover_title"; }
+  
+
+// ---------------------------------------------------------------------------
+//    r_ir_station_directory_view
+//    Station direcoty view.
+// ---------------------------------------------------------------------------
+//
+
+RESOURCE AVKON_VIEW r_ir_station_directory
+    {
+    menubar = r_ir_station_directory_menu_bar;
+    cba = r_irapp_softkeys_options_back_cba;
+    }
+    
+
+// ---------------------------------------------------------------------------
+//    r_ir_station_directory_menu_bar
+//    Station directory view menu bar.
+// ---------------------------------------------------------------------------
+//
+
+RESOURCE MENU_BAR r_ir_station_directory_menu_bar
+    {
+    titles=
+        {
+        MENU_TITLE
+            { 
+            menu_pane = r_ir_station_directory_menu;
+            }
+        };
+    }
+// ---------------------------------------------------------------------------
+//    r_ir_station_directory_menu
+//    Station directory view menu.
+// ---------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_ir_station_directory_menu
+    {
+    items=
+        {
+        MENU_ITEM { command = ESelectCmd; txt = qtn_ir_options_select; },
+        MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+        MENU_ITEM {command = ESettingsCmd; txt = qtn_ir_options_settings;},
+        MENU_ITEM { command = EHelpCmd; txt = qtn_ir_options_help; },
+        MENU_ITEM { command = EExitCmd; txt = qtn_ir_options_exit; }
+        };
+    }
+    
+    
+///////////////////////////////////////////////////////////////////////////////////////////
+// MENUBAR FOR HISTORY VIEW
+//////////////////////////////////////////////////////////////////////////////////// 
+
+RESOURCE MENU_BAR r_ir_menubar_history
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_ir_menu_history;}
+        };
+    }
+
+RESOURCE MENU_PANE r_ir_menu_history
+    {
+    items = 
+        {
+	
+		MENU_ITEM {command = EGotoNowPlayingViewCmd;   txt = qtn_ir_options_now;},
+		MENU_ITEM {command = EAddtoFavouritesCmd;   txt = qtn_ir_options_add;},
+		MENU_ITEM {command = EClearCmd; txt = qtn_ir_options_clearhistory;},
+        MENU_ITEM {command = ESettingsCmd;   txt = qtn_ir_options_settings;},
+        MENU_ITEM {command = EHelpCmd;   txt = qtn_ir_options_help ;},
+        MENU_ITEM {command = EExitCmd;   txt = qtn_ir_options_exit;}
+        };
+    }    
+    
+// ---------------------------------------------------------------------------
+//    r_ir_searchresults_list
+//    List box of search results view.
+//    Contains the visible items of the view.
+// ---------------------------------------------------------------------------
+//
+RESOURCE LISTBOX r_ir_searchresults_list
+ {
+    flags = EAknListBoxSelectionList;
+    }   
+
+
+
+RESOURCE LISTBOX r_station_directory
+    {
+    flags = EAknListBoxSelectionList;
+    }   
+//--------------------------------------------------------------------
+//    
+//resource for search results view title pane
+//------------------------------------------------------------------
+RESOURCE TBUF R_IRAPP_SEARCHRESULTS_TITLETEXT { buf = qtn_ir_search_results; }
+
+
+//--------------------------------------------------------------------
+//    
+//resource for search results view title pane
+//------------------------------------------------------------------
+RESOURCE TBUF R_IRAPP_SEARCHRESULT_TITLETEXT { buf = qtn_ir_search_result; }
+
+
+// -----------------------------------------------------------------------------
+//
+//    Resources for PROGRESS DIALOG r_irapp_progress_dialog
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_irapp_progress_dialog
+    {
+    flags = EAknWaitNoteFlags;
+    buttons = r_irapp_softkey_cancel_cba;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EProgressDialog;
+            control= AVKON_NOTE 
+                { 
+                layout = EWaitLayout;
+                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+        };
+    }
+// ---------------------------------------------------------------------------
+//    r_ir_findstation
+//    List box of findstations/first time view.
+//    Contains the visible items of the view.
+// ---------------------------------------------------------------------------
+//
+RESOURCE LISTBOX r_ir_findstation
+    {
+    flags = EAknListBoxSelectionList;
+    }  
+
+RESOURCE AVKON_SETTING_ITEM_LIST r_ir_setting_list
+    {
+    title = qtn_ir_options_settings;
+    items =
+        {
+        AVKON_SETTING_ITEM
+            {
+            identifier = EIRSettingItemSnapSelectionID;
+            setting_page_resource = r_snap_selection_setting_page;
+            associated_resource = r_popup_snap_selection_list;
+            name = qtn_ir_settings_network;
+            },
+   
+        AVKON_SETTING_ITEM
+            {
+            identifier = EIRSettingItemGprsConnBitRateID;
+            setting_page_resource = r_gprs_conn_bitrate_setting_page;
+            associated_resource = r_popup_gprs_conn_bitrate_list;
+            name = qtn_ir_settings_gprs;
+            },
+
+        AVKON_SETTING_ITEM
+            {
+            identifier = EIRSettingItem3GConnBitRateID;
+            setting_page_resource = r_3g_conn_bitrate_setting_page;
+            associated_resource = r_popup_3g_conn_bitrate_list;
+            name = qtn_ir_settings_3g;
+            },
+
+        AVKON_SETTING_ITEM
+            {
+            identifier = EIRSettingItemWiFiConnBitRateID;
+            setting_page_resource = r_wifi_conn_bitrate_setting_page;
+            associated_resource = r_popup_wifi_conn_bitrate_list;
+            name = qtn_ir_settings_wifi;
+            }
+        };
+
+
+    }
+
+RESOURCE AVKON_SETTING_PAGE r_snap_selection_setting_page
+    {   
+    softkey_resource    = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+    type = EAknCtPopupSettingList;
+    editor_resource_id = r_ir_settings_empty_list;
+    }
+
+RESOURCE AVKON_SETTING_PAGE r_gprs_conn_bitrate_setting_page
+    {   
+    softkey_resource    = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+    label = qtn_ir_settings_gprs;
+    type = EAknCtPopupSettingList;
+    editor_resource_id = r_ir_settings_empty_list;
+    }
+
+RESOURCE AVKON_SETTING_PAGE r_3g_conn_bitrate_setting_page
+    {   
+    softkey_resource    = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+    label = qtn_ir_settings_3g;
+    type = EAknCtPopupSettingList;
+    editor_resource_id = r_ir_settings_empty_list;
+    }
+
+RESOURCE AVKON_SETTING_PAGE r_wifi_conn_bitrate_setting_page
+    {   
+    softkey_resource    = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+    label = qtn_ir_settings_wifi;
+    type = EAknCtPopupSettingList;
+    editor_resource_id = r_ir_settings_empty_list;
+    }
+
+
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_snap_selection_list
+    {
+    setting_texts_resource = r_settinglist_snap_page_list;
+    }
+
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_gprs_conn_bitrate_list
+    {
+    setting_texts_resource = r_settinglist_gprs_page_list;
+    }
+
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_3g_conn_bitrate_list
+    {
+    setting_texts_resource = r_settinglist_3g_page_list;
+    }
+
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_wifi_conn_bitrate_list
+    {
+    setting_texts_resource = r_settinglist_wifi_page_list;
+    }
+
+
+RESOURCE ARRAY r_settinglist_snap_page_list
+    {
+    items =
+        {
+  
+        };
+    }
+
+RESOURCE ARRAY r_settinglist_gprs_page_list
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT {value = 0; text = qtn_ir_bitrate_standard;},
+		AVKON_ENUMERATED_TEXT {value = 1; text = qtn_ir_bitrate_high;},
+		AVKON_ENUMERATED_TEXT {value = 2; text = qtn_ir_bitrate_best;}
+		};
+	}
+
+
+RESOURCE ARRAY r_settinglist_3g_page_list
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT {value = 0; text = qtn_ir_bitrate_standard;},
+		AVKON_ENUMERATED_TEXT {value = 1; text = qtn_ir_bitrate_high;},
+		AVKON_ENUMERATED_TEXT {value = 2; text = qtn_ir_bitrate_best;}
+		};
+	}
+
+
+RESOURCE ARRAY r_settinglist_wifi_page_list
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT {value = 0; text = qtn_ir_bitrate_standard;},
+		AVKON_ENUMERATED_TEXT {value = 1; text = qtn_ir_bitrate_high;},
+		AVKON_ENUMERATED_TEXT {value = 2; text = qtn_ir_bitrate_best;}
+		};
+	}
+// ---------------------------------------------------------------------------
+// r_vr_settings_empty_list
+// Empty popup setting list resource.
+// ---------------------------------------------------------------------------
+//
+RESOURCE POPUP_SETTING_LIST r_ir_settings_empty_list
+    {
+    }
+
+RESOURCE CBA r_ir_softkeys_exit
+    {
+    buttons=
+        {
+        CBA_BUTTON { id = EAknSoftkeyExit; txt = qtn_ir_options_exit; },
+        CBA_BUTTON { txt = ""; }
+        };
+	}
+// -----------------------------------------------------------------------------
+//
+//   r_ir_menupane_markable_list
+//   Menu for "Markable List"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_ir_menupane_markable_list
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EMark;
+			txt = qtn_ir_options_mark;
+			},
+		MENU_ITEM
+			{
+			command = EMarkAll;
+			txt = qtn_ir_options_markall;
+			},
+		MENU_ITEM
+			{
+			command = EUnmark;
+			txt = qtn_ir_options_unmark;
+			},
+		MENU_ITEM
+			{
+			command = EUnmarkAll;
+			txt = qtn_ir_options_unmarkall;
+			}
+		};
+	}
+     
+ RESOURCE DIALOG r_add_station_form_dialog
+    {
+    flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect |
+            EEikDialogFlagNoTitleBar | EEikDialogFlagNoBorder |
+            EEikDialogFlagCbaButtons | EEikDialogFlagWait;
+    buttons = r_addstation_form_cba;
+    form = r_add_station_form;
+    }
+
+// --------------------------------------------------------------------------
+// DIALOG
+// Deletion wait note with cancel button
+// --------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_irapp_progress_dialog_cancel
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = r_irapp_softkeys_empty_cba;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EDeleteInProgress;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                imagefile = AVKON_ICON_FILE;
+                imageid   = EMbmAvkonQgn_note_erased;
+                imagemask = EMbmAvkonQgn_note_erased_mask;
+                };
+            }
+        };
+    }
+//-----------------------------------------------------------------------------
+//
+// r_eve_newevent_form
+// New event form resource for the dialog
+//
+//-----------------------------------------------------------------------------
+//
+RESOURCE FORM r_add_station_form
+    {
+    flags = EEikFormUseDoubleSpacedFormat | EEikFormEditModeOnly;
+   
+    items =
+        {
+        
+        DLG_LINE
+            {
+            type = EEikCtEdwin;
+            prompt = qtn_ir_addst_streamurl;
+            id = EAddStaionURL;
+            itemflags = EEikDlgItemTakesEnterKey  |EEikDlgItemOfferAllHotKeys;
+            control = EDWIN
+                {
+                flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable  |
+                EEikEdwinNoAutoSelection |EEikEdwinJustAutoCurEnd  ;
+                maxlength = 100;
+                };
+            },
+        DLG_LINE
+            {
+            type = EEikCtEdwin;
+            prompt = qtn_ir_url_name;
+            id =EAddStaionName;
+            itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
+            control = EDWIN
+                {
+                flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable |
+                EEikEdwinAutoSelection  ;
+                maxlength = 100;
+                };
+            },
+            DLG_LINE
+            {
+            type = EEikCtEdwin;
+            prompt =qtn_ir_addst_description;
+            id = EAddStaionDescription;
+            itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
+            control = EDWIN
+                {
+                flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable |EEikEdwinNoAutoSelection;
+                maxlength = 100;
+                };
+            }
+        };
+         
+    }   
+RESOURCE MENU_BAR r_form_menubar
+    {
+    titles =
+        {
+        MENU_TITLE 
+            {
+            menu_pane = r_form_menu;
+            }
+        };
+    }
+
+
+RESOURCE CBA r_addstation_form_cba
+	{
+	buttons =
+		{
+		
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyOptions; 
+			txt = qtn_ir_softkey_options;
+			},
+		CBA_BUTTON 
+			{
+			id = EAddExit;
+			txt = qtn_ir_softkey_cancel;
+			}
+		};
+	}
+RESOURCE MENU_PANE r_form_menu
+	{
+	items = 
+		{
+		MENU_ITEM
+			{
+			command = EGotoNowPlayingViewCmd;  
+			txt = qtn_ir_options_now;
+			},
+		MENU_ITEM
+			{
+			command = EHelpCmd;
+			txt = qtn_ir_options_help;
+			},
+		MENU_ITEM 
+			{
+			command = EExitCmd;
+			txt = qtn_ir_options_exit;
+			}
+		};
+	}
+
+//Added for ALR/SNAP
+
+RESOURCE TBUF r_ir_settings_snap_default
+    {
+    buf = qtn_ir_settings_snap_default;
+    }
+    
+RESOURCE TBUF r_ir_access_ask
+    {
+    buf = qtn_ir_access_ask;
+    }   
+
+RESOURCE CBA r_search_dialog_cba
+	{
+	buttons =
+		{
+		AVKON_CBA_BUTTON { txt=qtn_ir_findst_softkey_search; id=EAknSoftkeyOk; },
+		AVKON_CBA_BUTTON { txt=qtn_ir_softkey_cancel; id=EAknSoftkeyCancel; }
+		};
+	}
+  
+RESOURCE DIALOG R_SEARCH_STRING_DIALOG
+    {
+    flags = EGeneralQueryFlags;
+    buttons = r_search_dialog_cba;
+      
+    items=
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            control= AVKON_DATA_QUERY 
+                { 
+                layout = EDataLayout;
+                control = EDWIN
+                    { 
+                    flags= EEikEdwinNoHorizScrolling | EEikEdwinResizable; 
+                    maxlength = 250; 
+                    width = 10; 
+                    lines = 1; 
+                    };
+                };
+            }
+        };
+    }
+    
+RESOURCE CBA r_irapp_softkey_cancel_cba
+	{
+	buttons =
+		{
+		
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyEmpty; 
+			txt = "";
+			},
+		CBA_BUTTON 
+			{
+			id = EIRCancel;
+			txt = qtn_ir_softkey_cancel;
+			}
+		};
+	}
+RESOURCE CBA r_irapp_softkeys_options_back_cba
+	{
+	buttons =
+		{
+		
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyOptions; 
+			txt = qtn_ir_softkey_options;
+			},
+		CBA_BUTTON 
+			{
+			id = EAknSoftkeyBack;
+			txt = qtn_ir_softkey_back;
+			}
+		};
+	}
+RESOURCE CBA r_irapp_softkeys_empty_cba
+	{
+	buttons =
+		{
+		
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyEmpty; 
+			txt = "";
+			},
+		CBA_BUTTON 
+			{
+			id = EAknSoftkeyEmpty; 
+			txt = "";
+			}
+		};
+	}
+RESOURCE CBA r_irapp_softkey_close_cba
+	{
+	buttons =
+		{
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyEmpty; 
+			txt = "";
+			},
+		CBA_BUTTON 
+			{
+			id = EIRBack;
+			txt = qtn_ir_info_softkey_close;
+			}
+		};
+	}
+// ---------------------------------------------------------------------------
+//    r_ir_advertisement_size
+//    Size of the advertisement used in station directory
+// ---------------------------------------------------------------------------
+//
+RESOURCE AVKON_LAYOUT_CONTROL r_ir_advertisement_size
+    {
+    l=0; t=0; W = 350; H = 64;
+    }
+
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/internetradio_reg.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <bldvariant.hrh>
+#include <appinfo.rh>
+#include "internetradio.loc"
+#include <internetradio.rsg>
+#include "ir.hrh"
+
+
+UID2 KUidAppRegistrationResourceFile
+
+UID3 0x2000B499 
+
+#define STRING_InternetRadio_loc_resource_file_1 "\\resource\\apps\\InternetRadio"
+
+RESOURCE APP_REGISTRATION_INFO
+
+    {
+#ifndef __DISABLE_RADIO_LAUNCHER
+    // hidden=KAppIsHidden;
+    hidden=KAppNotHidden;
+#endif
+    app_file = "InternetRadio";
+
+    localisable_resource_file = STRING_InternetRadio_loc_resource_file_1;
+
+    localisable_resource_id = R_INTERNETRADIO_LOCALISABLE_APP_INFO;
+
+    embeddability=KAppNotEmbeddable;
+    newfile=KAppDoesNotSupportNewFile;
+    datatype_list= 
+	    {
+	    DATATYPE { priority=EDataTypePriorityHigh; type="audio/x-scpls"; }
+	    };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/internetradioai.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+<FileName: "internetradioai.dtd">
+<PartOf  : "ActiveIdle2">
+
+<FileDescription: "Localization strings for ActiveIdle2 Navi Bar XUIKON theme">
+<FileVersion    : >
+
+<Copyright:
+"Copyright © 2005 Nokia Corporation.
+This material, including documentation and any related
+computer programs, is protected by copyright controlled by
+Nokia Corporation. All rights are reserved. Copying,
+including reproducing, storing,  adapting or translating, any
+or all of this material requires the prior written consent of
+Nokia Corporation. This material also contains confidential
+information which may not be disclosed to others without the
+prior written consent of Nokia Corporation.">
+============================================================================
+-->
+
+<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
+
+<!--  LOCALISATION STRINGS  -->
+
+<!--
+qtn_ir_ai_irapp_title.attributes
+qtn_ir_ai_irapp_title.layout "heading_ai2_gene_pane_t1/opt1"
+qtn_ir_ai_irapp_title.release "3.2"
+qtn_ir_ai_irapp_title.description "InternetRadio title in Active Idle"
+qtn_ir_ai_irapp_title.parents "heading_ai2_gene_pane"
+-->
+<!ENTITY qtn_ir_ai_irapp_title "Internet Radio">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/internetradioterms.loc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2007 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:  Localization of terms and conditions for project InternetRadio
+*                This cannot be implemented by normal localization  process, so 
+*                this file MUST NOT be delivered for localization team!
+*
+*/
+
+
+#ifdef LANGUAGE_01
+#define ir_terms_file "terms_01.html"
+#define qtn_memlo_ram_out_of_mem "Memory full. Close some applications and try again."
+#elif LANGUAGE_02
+#define ir_terms_file "terms_02.html"
+#define qtn_memlo_ram_out_of_mem "Mémoire pleine. Fermez certaines applications puis réessayez."
+#elif LANGUAGE_03
+#define ir_terms_file "terms_03.html"
+#define qtn_memlo_ram_out_of_mem "Speicher voll. Programme schlie­ßen und Versuch wiederholen."
+#elif LANGUAGE_04
+#define ir_terms_file "terms_04.html"
+#define qtn_memlo_ram_out_of_mem "La memoria está llena. Cierre algunas aplicaciones e inténtelo de nuevo."
+#elif LANGUAGE_05
+#define ir_terms_file "terms_05.html"
+#define qtn_memlo_ram_out_of_mem "Memoria piena. Chiudere alcune applicazioni e riprovare."
+#elif LANGUAGE_06
+#define ir_terms_file "terms_06.html"
+#define qtn_memlo_ram_out_of_mem "Minnet fullt. Stäng några program och försök igen."
+#elif LANGUAGE_07
+#define ir_terms_file "terms_07.html"
+#define qtn_memlo_ram_out_of_mem "Hukommelsen er fuld. Luk nogle programmer, og prøv igen."
+#elif LANGUAGE_08
+#define ir_terms_file "terms_08.html"
+#define qtn_memlo_ram_out_of_mem "Minne fullt. Lukk noen programmer og prøv igjen."
+#elif LANGUAGE_09
+#define ir_terms_file "terms_09.html"
+#define qtn_memlo_ram_out_of_mem "Muisti täynnä. Sulje sovelluksia ja yritä uudelleen."
+#elif LANGUAGE_10
+#define ir_terms_file "terms_10.html"
+#define qtn_memlo_ram_out_of_mem "Memory full. Close some applications and try again."
+#elif LANGUAGE_13
+#define ir_terms_file "terms_13.html"
+#define qtn_memlo_ram_out_of_mem "Memória cheia. Fechar algumas aplicações e tentar de novo."
+#elif LANGUAGE_14
+#define ir_terms_file "terms_14.html"
+#define qtn_memlo_ram_out_of_mem "Hafıza dolu. Bazı uygulamaları kapatın ve yeniden deneyin."
+#elif LANGUAGE_15
+#define ir_terms_file "terms_15.html"
+#define qtn_memlo_ram_out_of_mem "Minni fullt. Loka einhverjum forritum og reyna aftur."
+#elif LANGUAGE_16
+#define ir_terms_file "terms_16.html"
+#define qtn_memlo_ram_out_of_mem "ПамÑÑ‚ÑŒ запол-\nнена. Закройте другие приложениÑ\nи повторите."
+#elif LANGUAGE_17
+#define ir_terms_file "terms_17.html"
+#define qtn_memlo_ram_out_of_mem "A memória megtelt. Zárjon be néhány alkalmazást, és próbálja újra."
+#elif LANGUAGE_18
+#define ir_terms_file "terms_18.html"
+#define qtn_memlo_ram_out_of_mem "Geheugen vol. Sluit enkele toe-\npassingen en probeer 't opnieuw."
+#elif LANGUAGE_25
+#define ir_terms_file "terms_25.html"
+#define qtn_memlo_ram_out_of_mem "Paměť je plná. UkonÄete nÄ›které aplikace a opakujte akci."
+#elif LANGUAGE_26
+#define ir_terms_file "terms_26.html"
+#define qtn_memlo_ram_out_of_mem "Pamäť plná. Zatvorte nejaké aplikácie a skúste znova."
+#elif LANGUAGE_27
+#define ir_terms_file "terms_27.html"
+#define qtn_memlo_ram_out_of_mem "Brak pamięci. Zamknij niektóre aplikacje i ponów próbę."
+#elif LANGUAGE_28
+#define ir_terms_file "terms_28.html"
+#define qtn_memlo_ram_out_of_mem "Pomnilnik poln. Zaprite nekaj aplikacij in poskusite znova."
+#elif LANGUAGE_29
+#define ir_terms_file "terms_29.html"
+#define qtn_memlo_ram_out_of_mem "記憶體已滿。\n請關閉部份\n應用程å¼ï¼Œ\nå†è©¦ä¸€æ¬¡ã€‚"
+#elif LANGUAGE_30
+#define ir_terms_file "terms_30.html"
+#define qtn_memlo_ram_out_of_mem "記憶已滿。\n請關閉一些應用\n程å¼å¾Œé‡è©¦ã€‚"
+#elif LANGUAGE_31
+#define ir_terms_file "terms_31.html"
+#define qtn_memlo_ram_out_of_mem "内存ä¸è¶³ã€‚请\n关闭一些应用\n程åºåŽå†è¯•ã€‚"
+#elif LANGUAGE_32
+#define ir_terms_file "terms_32.html"
+#define qtn_memlo_ram_out_of_mem "メモリãŒã„ã£ã±ã„ã§\nã™ã€‚アプリケーショï¾ã‚’ã„ãã¤ã‹çµ‚了ã—ã¦ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
+#elif LANGUAGE_33
+#define ir_terms_file "terms_33.html"
+#define qtn_memlo_ram_out_of_mem "หน่วย​ความ​จำ​เต็ม ปิà¸â€Ã¢â‚¬â€¹Ã Â¸Å¡Ã Â¸Â²Ã Â¸â€¡Ã¢â‚¬â€¹Ã Â¹Âอป​พลิเคชั่น​à¹Âละ​ลอง​อีà¸Â​ครั้ง"
+#elif LANGUAGE_37
+#define ir_terms_file "terms_37.html"
+#define qtn_memlo_ram_out_of_mem "الذاكرة ممتلئة. اغلق بعض التطبيقات وحاول ثانية."
+#elif LANGUAGE_39
+#define ir_terms_file "terms_39.html"
+#define qtn_memlo_ram_out_of_mem "Memorya puno. Isara ang ibang aplikasyon at sumubok uli."
+#elif LANGUAGE_42
+#define ir_terms_file "terms_42.html"
+#define qtn_memlo_ram_out_of_mem "Паметта е пълна. Затворете нÑкои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ опитайте отново."
+#elif LANGUAGE_44
+#define ir_terms_file "terms_44.html"
+#elif LANGUAGE_45
+#define ir_terms_file "terms_45.html"
+#define qtn_memlo_ram_out_of_mem "Memorija puna. Zatvorite neke programe i pokušajte ponovo."
+#elif LANGUAGE_49
+#define ir_terms_file "terms_49.html"
+#define qtn_memlo_ram_out_of_mem "Mälu on täis. Sulge mõned rakendused ja proovi uuesti."
+#elif LANGUAGE_50
+#define ir_terms_file "terms_50.html"
+#define qtn_memlo_ram_out_of_mem "حاÙظه پر است. تعدادی از برنامه ها را ببندید Ùˆ مجدداً امتحان كنید."
+#elif LANGUAGE_51
+#define ir_terms_file "terms_51.html"
+#define qtn_memlo_ram_out_of_mem "Mémoire pleine. Fermez certaines applications puis réessayez."
+#elif LANGUAGE_54
+#define ir_terms_file "terms_54.html"
+#define qtn_memlo_ram_out_of_mem "Μνήμη πλήÏης. Κλείστε κάποιες εφαÏμογές και ξαναδοκιμάστε."
+#elif LANGUAGE_57
+#define ir_terms_file "terms_57.html"
+#define qtn_memlo_ram_out_of_mem "הזיכרון מל×. סגרו מספר ×™×™×©×•×ž×™× ×•× ×¡×• שוב."
+#elif LANGUAGE_58
+#define ir_terms_file "terms_58.html"
+#define qtn_memlo_ram_out_of_mem "सà¥Âमृति पूरà¥Âण। कà¥Âछ अनà¥Âपà¥Âरयोगों को बंद करें तथा पà¥Âनः पà¥Âरयास करें।"
+#elif LANGUAGE_59
+#define ir_terms_file "terms_59.html"
+#define qtn_memlo_ram_out_of_mem "Memori penuh. Tutup sebagian aplikasi dan coba lagi."
+#elif LANGUAGE_67
+#define ir_terms_file "terms_67.html"
+#define qtn_memlo_ram_out_of_mem "Atmiņa ir pilna. Aizveriet dažas programmas un mēģiniet vēlreiz."
+#elif LANGUAGE_68
+#define ir_terms_file "terms_68.html"
+#define qtn_memlo_ram_out_of_mem "Visa atmintis už-\nimta. Uždarykite kai kurias programas ir kartokite veiksmą."
+#elif LANGUAGE_70
+#define ir_terms_file "terms_70.html"
+#define qtn_memlo_ram_out_of_mem "Memori penuh. Tutup beberapa aplikasi dan cuba semula."
+#elif LANGUAGE_76
+#define ir_terms_file "terms_76.html"
+#define qtn_memlo_ram_out_of_mem "Memória cheia. Feche alguns aplicativos e tente outra vez."
+#elif LANGUAGE_78
+#define ir_terms_file "terms_78.html"
+#define qtn_memlo_ram_out_of_mem "Memorie plină. Închideţi unele aplicaţii şi încercaţi din nou."
+#elif LANGUAGE_79
+#define ir_terms_file "terms_79.html"
+#define qtn_memlo_ram_out_of_mem "Memorija puna. Zatvoriti neke aplikacije i pokušati ponovo."
+#elif LANGUAGE_83
+#define ir_terms_file "terms_83.html"
+#define qtn_memlo_ram_out_of_mem "La memoria está llena. Cierre algunas aplicaciones e inténtelo de nuevo."
+#elif LANGUAGE_93
+#define ir_terms_file "terms_93.html"
+#define qtn_memlo_ram_out_of_mem "Пам'ÑÑ‚ÑŒ повна. Закрийте деÑкі програми та Ñпробуйте ще раз."
+#elif LANGUAGE_94
+#define ir_terms_file "terms_94.html"
+#define qtn_memlo_ram_out_of_mem "حاÙØ¸Û Ø¨Ú¾Ø± گیا ÛÛ’Û” Ú©Ú†Ú¾ اضاÙÛŒ پروگرام بند کرکے Ø¯ÙˆØ¨Ø§Ø±Û Ú©ÙˆØ´Ø´ کریں۔"
+#elif LANGUAGE_96
+#define ir_terms_file "terms_96.html"
+#define qtn_memlo_ram_out_of_mem "Bá»™ nhá»› đầy. Äóng má»™t số ứng dụng và thá»­ lại."
+#elif LANGUAGE_401
+#define ir_terms_file "terms_401.html"
+#elif LANGUAGE_402
+#define ir_terms_file "terms_402.html"
+#else
+#define ir_terms_file "terms_01.html"
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/ir.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2006-2008 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:  Resource headers for project InternetRadio
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 21, Tue Mar 11 20:00:00 2008 by Rohit
+*  Ref:
+*  Merged IRv1.0 Engine code changes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IR_HRH
+#define IR_HRH
+
+#include <bldvariant.hrh>
+#define KPbk2NullIconIdOwnerUid     0
+
+/** 
+IR enumerate command codes 
+*/
+enum TIRIds
+	{
+	EIRMainChoiceView = 1,			// start value must not be 0
+	EIRDiscoverStationsView,
+	EIRBrowsebyStationMap,
+	EIRBrowseByGenreView,
+	EIRBrowseByLanguageView,
+	EIRBrowseByCountryView,
+	EIRStationsView,
+	EIRSavedStationsView,
+	EIRNowPlayingView,
+	EIRAddManuallyStationView,
+	EIRSearchView,
+	EIRSearchListView,
+	EIRProgressBarView,
+	EIRBufferingView,
+	ESelectCmd,
+	EGotoNowPlayingViewCmd,
+	EAddStationManuallyCmd,
+	EAddtoStationsCmd,
+	EAddtoFavouritesCmd,
+	ESendtoFriendCmd,
+	EUpdateAppCmd,
+	ESettingsCmd,
+	EHelpCmd,
+	EChangeCmd,
+	EExitCmd,
+	EIRBack,
+	EIRExit,
+	EListenCmd,
+	EStationsCmd,
+	EStationDetailsCmd,
+	EMoveCmd,
+	EDeleteCmd,
+	EAddStationCmd,
+	EStopCmd,
+	EPlayCmd,
+	//EStationInfoCmd,
+	ESaveStationCmd,
+	ESearchCmd,
+	//EIRStationInformationView,
+	EIROk,
+	EIRCancel,
+	EIRAccept,
+	EIRRequestGenreData,
+	EIRRequestLanguageData,
+	EIRRequestCountryData,
+	EIRRequestTopStationsData,
+	EIRRequestECatagoryData,
+	EIRRequestChannelData,
+	EIROkayCmd,
+	ESaveCmd,
+	ESaveAllCmd,
+	ESettingsEditCmd,
+	ESearchAgainCmd, 	//Search again if search fails.
+	EStationInformationCmd,	// Launch Station Info view
+	EProgressDialog,    //Added For Search Progress Bar
+	EIRMoveCancel, // Cancel for saved stations view move option
+	EIRDelayedPlayStation,
+	EVRCmdListenChannel,
+	EAdvertisementUrl,
+	EVRCmdShowVisualContent,
+	EVRCmdOpenSetupView,
+	EVRCmdMoveChannel,
+	EVRCmdDeleteChannel,
+	EExportFavCmd,
+	EEditStationsCmd,
+	EClearCmd,
+	EFirstTimeSelectCmd,
+	EUpdateApplicationCmd,
+	EFirstTimeSettingsCmd,
+	EFindStationsCmd,
+	EHistoryCmd,
+	EDeleteInProgress,
+    EIRCmdShowVisualContent,	// 9 enums used by Now Playing view
+	EIRCmdStepNextPreset,
+	EIRCmdStepPrevPreset,
+	EIRCmdTuneUp,
+	EIRCmdTuneDown,
+	EIRCmdPlay,
+	EIRCmdStop,
+	EPrevCmd,
+	ENextCmd,
+	
+	EISDSRec,			// Added for Byte Counter testing (to be rmoved)
+	EISDSSend,
+	EAudioRec,
+	EAudioSend,
+	EIRContinue, 	
+	EPbk2qgn_indi_tb_prev,	
+	EPbk2qgn_indi_tb_play,
+	EPbk2qgn_indi_tb_avail_next,
+	EIRCmdChangeSetting,
+	EIRSettingItemSnapSelectionID,
+	EIRSettingItemGprsConnBitRateID,
+	EIRSettingItem3GConnBitRateID,
+    EIRSettingItemWiFiConnBitRateID,
+    EFmRecOrPhone,
+    EStereoMode,
+    EEqualizer,
+    EFindInShop,
+    EGotoMusicStore,
+    EHistory,
+    EOnCmd,
+    EOffCmd,
+    EMarkUnmark,
+    EMark,
+    EMarkAll,
+    EUnmark,
+    EUnmarkAll,
+    EGoToMainView,
+    EIRCmdVolumeControl,
+    EGotoMainView,
+    	
+    	
+    EIRAddManuallyStationCommand1,
+    EaddstaionCommand2, 
+      EAddStaionName,
+    EAddStaionURL,
+   // EAddStaionName,
+    EAddStaionDescription, // start value must not be 0
+    EGoToNowPlaying,
+    EUpdateApplication,
+    EAddHelp,
+    EAddExit ,
+    EButton1,
+    EButton2,
+    EButton3	
+	};
+	
+	//----- BatteryIndicator Start
+
+enum TSysInfoCommandIds
+	{
+	ESysInfoCmdAppTest = 1
+	};
+
+enum TSysInfoTabViewId
+	{
+	ESysInfoView1Tab= 1,
+	ESysInfoView2Tab,
+	ESysInfoView3Tab
+	};
+
+	
+enum TState
+	{
+	EStateBatteryInfo = 0,
+	EStateCurrentNetwork,
+	EStateHomeOperator,
+	EStateNetworkType
+	};
+	
+enum TChargerStatus
+	{
+	EChargerStatusOff = 0,
+	EChargerStatusOn,
+	EChargerStatusAlmostFull,
+	EChargerStatusFull,
+	EChargerStatusError
+	};
+
+// Use these flags in IR_BITMAP_BUTTON_LAYOUT keys field. These values are bitwise flags
+#define EIRRockerButtonKeyRight         0x0001
+#define EIRRockerButtonKeyRightLong     0x0002
+#define EIRRockerButtonKeyLeft          0x0004
+#define EIRRockerButtonKeyLeftLong      0x0008
+#define EIRRockerButtonKeyMiddle        0x0010
+#define EIRRockerButtonKeyMiddleLong    0x0020
+#define EIRRockerButtonKeyUp            0x0040
+#define EIRRockerButtonKeyUpLong        0x0080
+#define EIRRockerButtonKeyDown          0x0100
+#define EIRRockerButtonKeyDownLong      0x0200
+#define EPbk2NullIconId                  -1
+#define ENow2NullIconArrayId             -1
+ 
+//---Battery Indicator End
+
+// Disable Radio Launcher for others than S60 3.2 environment.
+// #undef __DISABLE_RADIO_LAUNCHER
+// #ifndef __S60_32__
+// #define __DISABLE_RADIO_LAUNCHER
+// #endif // __S60_32__
+
+// Enable the removal of Internet Radio Updater that is used to remove 
+// 1.0/1.1 installations.
+//#define __SHIPPING_METHOD_UPDATER
+
+
+#endif // __IR_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/iractionhandler.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2008-2008 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:  
+*     This file contains declarations for resources of IRActionHandler.
+*     The file can be included in C++ or resource file.
+*
+*/
+
+
+#ifndef IRACTIONHANDLER_HRH
+#define IRACTIONHANDLER_HRH
+
+// Ecom DLL UID for IR Action Handler plugin.
+#define KIRActionHandlerDllUid 0x2001A962
+
+// Ecom implementation UID for VR Action Handler plugin.
+#define KIRActionHandlerImplementationUid 0x2001A962
+
+#endif /* IRACTIONHANDLER_HRH */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/iractiveidle.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2007-2007 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:  Resource definitions for project IRActiveIdle
+*
+*/
+
+
+#include <uikon.rh>
+
+#include "internetradio.loc"
+
+NAME IRAI
+
+RESOURCE RSS_SIGNATURE { }
+RESOURCE TBUF { buf = ""; }
+
+
+RESOURCE TBUF r_irapp_ai_info_full {buf = qtn_ir_ai_info_full; }
+RESOURCE TBUF r_irapp_ai_info_noindex {buf = qtn_ir_ai_info_noindex; }
+RESOURCE TBUF r_irapp_ai_info_nometadata {buf = qtn_ir_ai_info_nometadata; }
+    
+//--------------------------ActiveIdle----------------------
+RESOURCE TBUF r_irapp_activeidle_stationdata {buf = qtn_ir_ai_info_stationdata; }
+RESOURCE TBUF r_irapp_ai_noindex_stationdata {buf = qtn_ir_active_idle_data; }
+RESOURCE TBUF r_irapp_activeidle_nostationdata {buf = qtn_ir_ai_info_nometadata; }
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/irgeneralsettings.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006-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:  Resource headers for project ?myapp
+*
+*/
+
+
+#ifndef IRGENERALSETTINGS_HRH
+#define IRGENERALSETTINGS_HRH
+
+/** The UID of the general settings plugin DLL. */
+#define IRGENERAL_SETTINGS_PLUGIN_DLL_UID       0x2001A930 // This id is take from the mmp file,SS file is name after this.
+/** The UID of the general settings plugin interface implementation. */
+#define IRGENERAL_SETTINGS_INTERFACE_IMPL_UID   0x0FF75A22 // RSS file is name after this.Variable is in rss file.
+
+#endif //  IRGENERALSETTINGS_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/irgeneralsettings.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2006-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:  Resource definitions for project vrgeneralsettings
+*
+*/
+
+
+NAME VRGS
+
+#include <avkon.loc>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <commondialogs.rh>
+#include <eikon.rh>
+#include <uikon.rh>
+
+#include <internetradio.loc>
+
+// ---------------------------------------------------------------------------
+// The signature of the resource file.
+// ---------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// The default document name of the application.
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF
+    {
+    buf = "";
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_general_settings_plugin_title
+// Title of the plugin, visible when the plugin is activated.
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_ir_general_settings_plugin_title
+    {
+    buf = qtn_ir_main_title;
+    }
+
+// ---------------------------------------------------------------------------
+// r_ir_general_settings_plugin_listbox_caption
+// Caption of the plugin in the listbox view.
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_ir_general_settings_plugin_listbox_caption
+    {
+    buf = qtn_ir_set_folder_internetradio;
+    }
+    
+
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/irmcpplugin.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2008-2008 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:  
+*     This file contains declarations for resources of IR Music Content Publisher Plugin.
+*     The file can be included in C++ or resource file.
+*
+*/
+
+
+#ifndef IRMCPPLUGIN_HRH
+#define IRMCPPLUGIN_HRH
+
+// Ecom DLL UID for IR Music Content Publisher Plugin.
+#define KIRMCPPluginDllUid 0x2001A961        
+
+// Ecom implementation UID for IR Music Content Publisher Plugin.
+#define KIRMCPPluginImplementationUid 0x2001A961        
+
+#endif /* IRMCPPLUGIN_HRH */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/irmcpplugin.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2007-2007 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:  Resource definitions for project IRActiveIdle
+*
+*/
+
+
+#include <uikon.rh>
+
+#include "internetradio.loc"
+
+NAME IRAI
+
+RESOURCE RSS_SIGNATURE { }
+RESOURCE TBUF { buf = ""; }
+
+RESOURCE TBUF128 r_ir_mcp_lastplayed { buf = qtn_ir_homescreen_lastplayed; }    
+    
+RESOURCE TBUF128 r_ir_mcp_buffering { buf = qtn_ir_homescreen_buffering; }      
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/irsettings.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,240 @@
+/*
+* Copyright (c)  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:  Resource definitions for project ?myapp
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Tue Mar 11 20:00:00 2008 by Rohit
+*  Ref:
+*  Merged IRv1.0 Engine code changes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <uikon.rh>
+
+NAME IRST
+
+RESOURCE RSS_SIGNATURE { }
+RESOURCE TBUF { buf = ""; }
+
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_ir_default_setting_irapp_version
+    {
+    buf = "iRAPP/1.3.0";
+    }
+
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_ir_default_setting_isds_base_url
+    {
+    buf = "http://djmagnus.edelkey.net/isds";
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_max_preset_count
+    {
+    value = 20;
+    }
+
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_volume_level
+    {
+    value = 5;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_display_access_point
+    {
+    value = 1;
+    }
+
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_time_out
+    {
+    //value = 60000000;
+    //Changed by Snigdha to decrease timeout value to 30 secs
+    value = 30000000;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_running_channel_id
+    {
+    value = 1;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_log_running_number
+    {
+    value = 1;
+    }
+
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_gprs_bit_rate_quality
+    {
+    value = 0;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_wcdma_bit_rate_quality
+    {
+    value = 1;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_wireless_bit_rate_quality
+    {
+    value = 2;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_running_channel_index
+    {
+    value = 1;
+    }
+
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_bearer_id
+    {
+    value = -18;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_network_id
+    {
+    value = -18;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_access_point_id
+    {
+    value = -18;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_settings_view_bearer_id
+    {
+    value = -18;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_settings_view_network_id
+    {
+    value = -18;
+    }
+    
+// ---------------------------------------------------------------------------
+// ?resource_name
+// ?description
+// ---------------------------------------------------------------------------
+//
+RESOURCE NUMBER_INT32 r_ir_default_setting_settings_view_access_point_id
+    {
+    value = -18;
+    }
+    
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/resources/vraudioutils.hrh	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c)  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:  Declaration of audio utils related enumerations
+*
+*/
+
+
+#ifndef VRAUDIOUTILS_HRH
+#define VRAUDIOUTILS_HRH
+
+/**
+* Output sources.
+*/
+enum TVROutputDestination
+	{
+	EVRHeadset = 0,  /**< Headset in use. */
+	EVRSpeaker = 1   /**< Speaker in use. */
+	};
+
+#endif // VRAUDIOUTILS_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rfsplugininc/irrfsplugin.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2007-2007 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:  RFS ECOM plugin for Internet Radio
+*
+*/
+
+
+#ifndef C_IRRFSPLUGIN_H
+#define C_IRRFSPLUGIN_H
+
+#include <rfsPlugin.h>
+
+/**
+ *  Internet Radio RFS ECOM plugin implementation.
+ *
+ *  Handles deleting of Internet Radio files when RFS operation is invoked.
+ *
+ *  @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CIRRfsPlugin ) : public CRFSPlugin
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @since   S60 v3.2
+     * @param   aInitParams   Initialisation parameters.
+     * @return  The created object.
+     */
+    static CIRRfsPlugin* NewL( TAny* aInitParams );
+
+    /**
+     * Destructor.
+     *
+     * @since   S60 v3.2
+     */
+    ~CIRRfsPlugin();
+
+private:
+
+    /**
+     * Constructor.
+     *
+     * @since   S60 v3.2
+     * @param   aInitParams   Initialisation parameters.
+     */
+    CIRRfsPlugin( TAny* aInitParams );
+
+    /**
+     * Second-phase constructor.
+     *
+     * @since   S60 v3.2
+     */
+    void ConstructL();
+
+// from base class CRFSPlugin
+
+    void RestoreFactorySettingsL( const TRfsReason aType );
+    void GetScriptL( const TRfsReason aType, TDes& aPath );
+    void ExecuteCustomCommandL( const TRfsReason aType, TDesC& aCommand );
+
+    };
+
+#endif // C_CIRRFSPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rfspluginsrc/irrfsplugin.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2007-2007 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:  Internet Radio RFS ECOM plugin implementation
+*
+*/
+
+
+#include <apacmdln.h>
+#include <apgcli.h>
+
+#include "irrfsplugin.h"
+
+// Files that are deleted upon RFS.
+_LIT( KIRLastPlayedFile, "c:\\private\\2000b499\\lastPlayed.dat" );
+_LIT( KIRCacheDatabaseFile, "c:\\private\\2000b499\\cacheDb.db" );
+_LIT( KIRSdsResponseFile, "c:\\private\\2000b499\\iSdsResponse.xml" );
+_LIT( KIRSessionFile, "c:\\private\\2000b499\\Session" );
+_LIT( KIRRadioReportFile, "c:\\private\\2000b499\\RadioReport.xml" );
+_LIT( KIRLogUsageFile, "c:\\private\\2000b499\\LogUsage.gz" );
+_LIT( KIRSettingsFile, "c:\\private\\2000b499\\irsettings.ini" );
+_LIT( KIRBackedUpSettingsFile, "c:\\private\\2000b499\\irsettings_backed_up.ini" );
+_LIT( KIRSettingscreFile, "c:\\private\\10202be9\\persists\\2000B499.cre" );
+
+//for History Database Deletion
+_LIT(KSongHistoryDbFile,"songhistoryDb.db");
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRRfsPlugin* CIRRfsPlugin::NewL( TAny* aInitParams )
+    {
+    CIRRfsPlugin* self = new ( ELeave ) CIRRfsPlugin( aInitParams );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRRfsPlugin::CIRRfsPlugin( TAny* /*aInitParams*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRRfsPlugin::ConstructL()
+    {
+	return;
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRRfsPlugin::~CIRRfsPlugin()
+    {
+    // Base class handles the ECOM cleanup.
+    }
+
+// ---------------------------------------------------------------------------
+// From base class CRFSPlugin
+// ---------------------------------------------------------------------------
+//
+void CIRRfsPlugin::RestoreFactorySettingsL( const TRfsReason aType )
+    {
+    if ( aType == ENormalRfs )
+        {
+        RFs fsSession;
+        User::LeaveIfError( fsSession.Connect() );
+
+        fsSession.Delete( KIRLastPlayedFile );
+        fsSession.Delete( KIRCacheDatabaseFile );
+        fsSession.Delete( KIRSdsResponseFile );
+        fsSession.Delete( KIRSessionFile );
+        fsSession.Delete( KIRRadioReportFile );
+        fsSession.Delete( KIRLogUsageFile );
+
+        fsSession.Delete( KIRSettingsFile );
+        fsSession.Delete( KIRBackedUpSettingsFile );
+        fsSession.Delete( KIRSettingscreFile );
+    	fsSession.Delete(KSongHistoryDbFile);
+        
+        fsSession.Close();
+        }
+    else
+        {
+        // RFS type not supported.
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From base class CRFSPlugin
+// ---------------------------------------------------------------------------
+//
+void CIRRfsPlugin::GetScriptL( const TRfsReason /*aType*/, TDes& aPath )
+    {
+    aPath.Zero();
+	return;
+	}
+
+// ---------------------------------------------------------------------------
+// From base class CRFSPlugin
+// ---------------------------------------------------------------------------
+//
+void CIRRfsPlugin::ExecuteCustomCommandL( const TRfsReason /*aType*/, TDesC& /*aCommand*/ )
+    {
+	return;
+	}
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rfspluginsrc/irrfspluginproxy.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007-2007 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 of the RFS ECOM plugin proxy
+*
+*/
+
+
+#include <implementationproxy.h>
+
+#include "irrfsplugin.h"
+
+// The implementation proxy table that lists all interfaces and their implementations contained within this plugin.
+const TImplementationProxy KIRRfsPluginImplementationTable[] =
+    {
+    /*lint -save -e611 (Warning -- Suspicious cast)*/
+    IMPLEMENTATION_PROXY_ENTRY( 0x2000B4DD, CIRRfsPlugin::NewL )
+    /*lint -restore*/
+    };
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ======== GLOBAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Entry point for ECOM plugins.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof( KIRRfsPluginImplementationTable ) / sizeof( TImplementationProxy );
+    return KIRRfsPluginImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rom/internetradio.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2006-2007 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 __INTERNETRADIO_IBY__
+#define __INTERNETRADIO_IBY__
+
+ECOM_PLUGIN(irfilerecognizer.dll, 2000B4A9.rsc)
+ECOM_PLUGIN(presetplugin.dll, 2000B4AA.rsc)
+ECOM_PLUGIN(irrfsplugin.dll, 2000b4ac.rsc)
+
+data=ZPRIVATE\2000B499\backup_registration.xml                  private\2000B499\backup_registration.xml
+
+data=DATAZ_\RESOURCE_FILES_DIR\irsettings.rsc	                RESOURCE_FILES_DIR\irsettings.rsc
+
+file=ABI_DIR\BUILD_DIR\irdatastructures.dll                      SHARED_LIB_DIR\irdatastructures.dll
+file=ABI_DIR\BUILD_DIR\irdataprovider.dll			 SHARED_LIB_DIR\irdataprovider.dll
+file=ABI_DIR\BUILD_DIR\irxmlparser.dll				 SHARED_LIB_DIR\irxmlparser.dll
+file=ABI_DIR\BUILD_DIR\isdsclientinterface.dll                   SHARED_LIB_DIR\isdsclientinterface.dll
+file=ABI_DIR\BUILD_DIR\irfavoritesdb.dll                         SHARED_LIB_DIR\irfavoritesdb.dll
+file=ABI_DIR\BUILD_DIR\ircachemgmt.dll                           SHARED_LIB_DIR\ircachemgmt.dll
+file=ABI_DIR\BUILD_DIR\irnetworkcontroller.dll                   SHARED_LIB_DIR\irnetworkcontroller.dll
+file=ABI_DIR\BUILD_DIR\irsettings.dll                          SHARED_LIB_DIR\irsettings.dll
+file=ABI_DIR\BUILD_DIR\irsessionlog.dll                          SHARED_LIB_DIR\irsessionlog.dll
+file=ABI_DIR\BUILD_DIR\irsonghistory.dll                    SHARED_LIB_DIR\irsonghistory.dll 
+
+data=DATAZ_\RESOURCE_FILES_DIR\apps\irnetworkcontroller.rsc		RESOURCE_FILES_DIR\apps\irnetworkcontroller.rsc
+
+data=DATAZ_\RESOURCE_FILES_DIR\plugins\presetplugin.rsc         	RESOURCE_FILES_DIR\plugins\presetplugin.rsc
+data=DATAZ_\RESOURCE_FILES_DIR\plugins\irrfsplugin.rsc  			RESOURCE_FILES_DIR\plugins\irrfsplugin.rsc
+data=DATAZ_\RESOURCE_FILES_DIR\plugins\irfilerecognizer.rsc			RESOURCE_FILES_DIR\plugins\irfilerecognizer.RSC
+
+#endif  // __INTERNETRADIO_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rom/internetradio_backup.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2006-2007 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 __INTERNETRADIO_IBY__
+#define __INTERNETRADIO_IBY__
+
+S60_APP_EXE(InternetRadio)
+
+S60_APP_AIF_ICONS(InternetRadio)
+data=DATAZ_\PRIVATE\10003A3F\IMPORT\APPS\InternetRadio_reg.rsc        Private\10003a3f\import\apps\InternetRadio_reg.rsc
+
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,InternetRadio)
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,InternetRadioEdwinSkin)
+
+ECOM_PLUGIN(IRMediaEngine.dll, 2000B4A8.rsc)
+ECOM_PLUGIN(IRFileRecognizer.dll, 2000B4A9.rsc)
+ECOM_PLUGIN(PresetPlugin.dll, 2000B4AA.rsc)
+//ECOM_PLUGIN(IRActiveIdle.dll, 2000B4AB.rsc)
+ECOM_PLUGIN(irrfsplugin.dll, 2000b4ac.rsc)
+ECOM_PLUGIN(irgeneralsettings200.dll, 2001A930.rsc)
+
+//data=ZPRIVATE\10003A3F\import\apps\InternetRadio_reg.rsc        private\10003A3F\import\apps\InternetRadio_reg.rsc        // this file is very important for displaying IR App in AppShell.
+data=DATAZ_\system\install\InternetRadioStub.sis                    system\install\InternetRadioStub.sis                // used for eclipsing ROM files and upgrading the same.
+data=ZPRIVATE\2000B499\backup_registration.xml                  private\2000B499\backup_registration.xml
+data=ZPRIVATE\10207254\themes\271012080\270513751\271063147\1.0\sources\irclassicidle.mif PRIVATE\10207254\themes\271012080\270513751\271063147\1.0\sources\irclassicidle.mif
+
+data=DATAZ_\RESOURCE_FILES_DIR\irsettings.rsc	                RESOURCE_FILES_DIR\irsettings.rsc
+//data=DATAZ_\RESOURCE_FILES_DIR\iractiveidle.rsc	                RESOURCE_FILES_DIR\iractiveidle.rsc
+
+data=ZPRIVATE\2000b499\terms_01.html                            private\2000b499\terms_01.html
+data=ZPRIVATE\2000b499\terms_02.html                            private\2000b499\terms_02.html
+data=ZPRIVATE\2000b499\terms_03.html                            private\2000b499\terms_03.html
+data=ZPRIVATE\2000b499\terms_04.html                            private\2000b499\terms_04.html
+data=ZPRIVATE\2000b499\terms_05.html                            private\2000b499\terms_05.html
+data=ZPRIVATE\2000b499\terms_06.html                            private\2000b499\terms_06.html
+data=ZPRIVATE\2000b499\terms_07.html                            private\2000b499\terms_07.html
+data=ZPRIVATE\2000b499\terms_08.html                            private\2000b499\terms_08.html
+data=ZPRIVATE\2000b499\terms_09.html                            private\2000b499\terms_09.html
+data=ZPRIVATE\2000b499\terms_10.html                            private\2000b499\terms_10.html
+data=ZPRIVATE\2000b499\terms_13.html                            private\2000b499\terms_13.html
+data=ZPRIVATE\2000b499\terms_14.html                            private\2000b499\terms_14.html
+data=ZPRIVATE\2000b499\terms_15.html                            private\2000b499\terms_15.html
+data=ZPRIVATE\2000b499\terms_16.html                            private\2000b499\terms_16.html
+data=ZPRIVATE\2000b499\terms_17.html                            private\2000b499\terms_17.html
+data=ZPRIVATE\2000b499\terms_18.html                            private\2000b499\terms_18.html
+data=ZPRIVATE\2000b499\terms_25.html                            private\2000b499\terms_25.html
+data=ZPRIVATE\2000b499\terms_26.html                            private\2000b499\terms_26.html
+data=ZPRIVATE\2000b499\terms_27.html                            private\2000b499\terms_27.html
+data=ZPRIVATE\2000b499\terms_28.html                            private\2000b499\terms_28.html
+data=ZPRIVATE\2000b499\terms_29.html                            private\2000b499\terms_29.html
+data=ZPRIVATE\2000b499\terms_30.html                            private\2000b499\terms_30.html
+data=ZPRIVATE\2000b499\terms_31.html                            private\2000b499\terms_31.html
+data=ZPRIVATE\2000b499\terms_32.html                            private\2000b499\terms_32.html
+data=ZPRIVATE\2000b499\terms_33.html                            private\2000b499\terms_33.html
+data=ZPRIVATE\2000b499\terms_37.html                            private\2000b499\terms_37.html
+data=ZPRIVATE\2000b499\terms_39.html                            private\2000b499\terms_39.html
+data=ZPRIVATE\2000b499\terms_42.html                            private\2000b499\terms_42.html
+data=ZPRIVATE\2000b499\terms_44.html                            private\2000b499\terms_44.html
+data=ZPRIVATE\2000b499\terms_45.html                            private\2000b499\terms_45.html
+data=ZPRIVATE\2000b499\terms_49.html                            private\2000b499\terms_49.html
+data=ZPRIVATE\2000b499\terms_50.html                            private\2000b499\terms_50.html
+data=ZPRIVATE\2000b499\terms_51.html                            private\2000b499\terms_51.html
+data=ZPRIVATE\2000b499\terms_54.html                            private\2000b499\terms_54.html
+data=ZPRIVATE\2000b499\terms_57.html                            private\2000b499\terms_57.html
+data=ZPRIVATE\2000b499\terms_59.html                            private\2000b499\terms_59.html
+data=ZPRIVATE\2000b499\terms_67.html                            private\2000b499\terms_67.html
+data=ZPRIVATE\2000b499\terms_68.html                            private\2000b499\terms_68.html
+data=ZPRIVATE\2000b499\terms_70.html                            private\2000b499\terms_70.html
+data=ZPRIVATE\2000b499\terms_76.html                            private\2000b499\terms_76.html
+data=ZPRIVATE\2000b499\terms_78.html                            private\2000b499\terms_78.html
+data=ZPRIVATE\2000b499\terms_79.html                            private\2000b499\terms_79.html
+data=ZPRIVATE\2000b499\terms_83.html                            private\2000b499\terms_83.html
+data=ZPRIVATE\2000b499\terms_93.html                            private\2000b499\terms_93.html
+data=ZPRIVATE\2000b499\terms_94.html                            private\2000b499\terms_94.html
+data=ZPRIVATE\2000b499\terms_96.html                            private\2000b499\terms_96.html
+data=ZPRIVATE\2000b499\terms_401.html                           private\2000b499\terms_401.html
+data=ZPRIVATE\2000b499\terms_402.html                           private\2000b499\terms_402.html
+
+file=ABI_DIR\BUILD_DIR\IRDataStructures.dll                      SHARED_LIB_DIR\IRDataStructures.dll
+file=ABI_DIR\BUILD_DIR\IRCommandChannel.dll                      SHARED_LIB_DIR\IRCommandChannel.dll
+file=ABI_DIR\BUILD_DIR\IRDataProvider.dll			 SHARED_LIB_DIR\IRDataProvider.dll
+file=ABI_DIR\BUILD_DIR\IRXMLParser.dll				 SHARED_LIB_DIR\IRXMLParser.dll
+file=ABI_DIR\BUILD_DIR\isdsclientinterface.dll                   SHARED_LIB_DIR\isdsclientinterface.dll
+file=ABI_DIR\BUILD_DIR\IRStreamSource.dll                        SHARED_LIB_DIR\IRStreamSource.dll
+file=ABI_DIR\BUILD_DIR\IRFavoritesDb.dll                         SHARED_LIB_DIR\IRFavoritesDb.dll
+file=ABI_DIR\BUILD_DIR\IRCacheMgmt.dll                           SHARED_LIB_DIR\IRCacheMgmt.dll
+file=ABI_DIR\BUILD_DIR\IRNetworkController.dll                   SHARED_LIB_DIR\IRNetworkController.dll
+file=ABI_DIR\BUILD_DIR\irsettings.dll                          SHARED_LIB_DIR\irsettings.dll
+file=ABI_DIR\BUILD_DIR\IRSessionLog.dll                          SHARED_LIB_DIR\IRSessionLog.dll
+//file=ABI_DIR\BUILD_DIR\IRActiveIdleEngine.dll                    SHARED_LIB_DIR\IRActiveIdleEngine.dll 
+file=ABI_DIR\BUILD_DIR\IRSongHistory.dll                    SHARED_LIB_DIR\IRSongHistory.dll 
+file=ABI_DIR\BUILD_DIR\IRSettingsView.dll                    SHARED_LIB_DIR\IRSettingsView.dll 
+
+#endif  // __INTERNETRADIO_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rom/internetradioresources.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006-2008 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 __INTERNETRADIORESOURCES_IBY__
+#define __INTERNETRADIORESOURCES_IBY__
+
+S60_APP_RESOURCE(InternetRadio)
+data=DATAZ_\RESOURCE_FILES_DIR\irgeneralsettings.rsc	        RESOURCE_FILES_DIR\irgeneralsettings.rsc
+
+#ifdef FF_HOMESCREEN_COMMON_IDLEFW
+data=DATAZ_\RESOURCE_FILES_DIR\irmcpplugin.rsc              RESOURCE_FILES_DIR\irmcpplugin.rsc
+#else
+data=DATAZ_\RESOURCE_FILES_DIR\iractiveidle.rsc             RESOURCE_FILES_DIR\iractiveidle.rsc
+#endif
+#endif  // __INTERNETRADIORESOURCES_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rom/internetradioresources_backup.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2006-2008 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 __INTERNETRADIORESOURCES_IBY__
+#define __INTERNETRADIORESOURCES_IBY__
+
+S60_APP_RESOURCE(InternetRadio)
+data=DATAZ_\RESOURCE_FILES_DIR\irgeneralsettings.rsc	        RESOURCE_FILES_DIR\irgeneralsettings.rsc
+
+#endif  // __INTERNETRADIORESOURCES_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/rom/internetradiosettings.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2006-2007 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 __INTERNETRADIOSETTINGS_IBY__
+#define __INTERNETRADIOSETTINGS_IBY__
+
+//Cenrep additon....
+data=\epoc32\data\Z\private\10202BE9\2000B499.txt		private\10202BE9\2000B499.txt
+
+#endif  // __INTERNETRADIOSETTINGS_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irdbstatusobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2008-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:  ?Description
+*
+*/
+
+
+#ifndef MIRDBSTATUSOBSERVER_H
+#define MIRDBSTATUSOBSERVER_H
+
+class MIRLogDbStatusObserver
+	{
+public:
+	virtual void LogDbNeedFlush() = 0;
+	};
+
+
+#endif //MIRDBSTATUSOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irnmslogdb.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRNMSLOGDB_H
+#define IRNMSLOGDB_H
+
+#include <d32dbms.h>
+
+class CIRNmsLogger;
+
+NONSHARABLE_CLASS(CIRNmsLogDb) : public CBase
+	{												
+										//member functions
+public:
+
+	/**
+	* Function : NewL()
+	* Two phased construction
+	* @return instance of CIRNmsLogDb
+	*/
+	static CIRNmsLogDb* NewL();
+	
+	/**
+	* Function : NewLC()
+	* Two phased construction
+	* @return instance of CIRNmsLogDb
+	*/	
+	static CIRNmsLogDb* NewLC();
+	
+	/**
+	* Function : ~CIRNmsLogDb()
+	* default destructor
+	*/	
+	~CIRNmsLogDb();
+
+	/**
+	* Function : CreateDbConditional()
+	* Creates both the dbms files conditionally(only if not yet created)
+	* @param session database file
+	* @return errcode
+	*/	
+	TInt CreateDbConditional(TFileName &aNmsLog);
+
+	/**
+	* Function : AddNmsLogStartL()
+	* adds the NmsLog log entry into data base
+	* @param NmsLog data instance
+	*/
+	void AddNmsLogStartL(CIRNmsLogger& aNmsLog);
+	
+	/**
+	* CIRNmsLogDb::GetAllNmsLogL()
+	* gets all the preset into an array 
+	*/
+	void GetAllNmsLogL(CArrayPtrFlat<CIRNmsLogger>& aNmsLogDataList);
+	
+	/**
+	* Function : DeleteAllNmsLogL
+	* delete all the NmsLog from NmsLog log entry
+	*/
+	void DeleteAllNmsLogL();
+
+private: 
+
+	/**
+	* Function : ConstructL()
+	* two phase construction
+	*/   
+    void ConstructL();
+    
+    /**
+	* Function : CloseDb()
+	* Closes the database 
+	*/
+	void CloseDb();
+	
+	/**
+	* Function : CreateNmsLogTableL
+	* creates NmsLoglogtable with two column one is NmsLogid and rest of NmsLog
+	* log data
+	* ---------------------------------------------------------------------------
+	* NmsLogTable
+	*---------------------------
+	*| KID   |	 KNmsLogCol |
+	*---------------------------
+	*|TInt32 | EDbColLongText8 |
+	*---------------------------
+	*/	
+    void CreateNmsLogTableL();
+    
+	/**
+	* Function : CreateNmsLogIndexL
+	* sets NmsLogid as the primary key
+	*/  
+    void CreateNmsLogIndexL();
+    
+	/**
+	* Function : OpenDbL()
+	* opening the data base 
+	*/
+	void OpenDbL();
+	
+	/**
+	* Function : CreateDbL()
+	* creates both the dbms files 
+	* database filename
+	*/	
+	void CreateDbL(TFileName& aNmsLog);
+
+										//data members
+										
+private:
+
+	/**
+	* database file
+	*/
+	TFileName iDbFile;
+	
+	/**
+	* file session
+	*/
+    RFs iFsSession;
+    
+	/**
+	* data base handler
+	*/
+    RDbNamedDatabase iNmsLogDb;
+    
+    };
+
+#endif  //IRNMSLOGDB_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irnmslogger.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRNMSLOGGER_H
+#define IRNMSLOGGER_H
+
+#include <e32base.h>
+
+#include "irsessionparams.h"
+
+class RReadStream;
+class RWriteStream;
+
+/**
+* This class can hold data for Nms log 
+*/
+
+NONSHARABLE_CLASS(CIRNmsLogger) : public CBase
+	{
+public:
+	/**
+	* Function: NewL
+	* Two phase constructor returns the instance of CIRNmsLogger
+	* @returns instance of CIRNmsLogger
+	*/
+	static CIRNmsLogger* NewL();
+
+	/**
+	* Function: NewLC
+	* Two phase constructor creates the instance of CIRNmsLogger
+	* @returns instance of CIRNmsLogger
+	*/
+	static CIRNmsLogger* NewLC(); 
+
+	/**
+	* Function: ~CIRNmsLogger
+	* default destructor
+	*/	
+	~CIRNmsLogger();
+	
+private:
+	/**
+	* Function: ConstructL
+	* Two phase constructor
+	*/	
+	void ConstructL();
+	
+	/**
+	* Function: CIRNmsLogger
+	* default constructor
+	*/	
+	CIRNmsLogger();	
+
+public:
+	
+
+	/**
+	* Function: ResetResource
+	* reset data from channel server
+	*/
+	void ResetResource();
+
+
+	/**
+	* Function: UpdateChannelID
+	* updates the channel id
+	* @param channel id
+	*/	
+	void UpdateChannelID(TInt aChanneldID);
+	
+	/**
+	* Function: UpdateCurrentNetwork
+	* updates the current network
+	* @param current network
+	*/
+	void UpdateCurrentNetwork(TInt aCurrentNetwork);
+	
+	/**
+	* Function: UpdateHomeOperator
+	* updates the home network
+	* @param home network
+	*/
+	void UpdateHomeOperator(TInt aHomeOperator);
+
+	/**
+	* Function : UpdateNmsStartGMTTime
+	* function updates Nms start time with current GMT time
+	*/
+	void UpdateNmsStartGMTTime();
+	
+	/**
+	* Function: UpdateNmsType
+	* updates the nms type
+	* @param nms type
+	*/
+	void UpdateNmsType(const TDesC& aNmsType);
+
+	/**	
+	* Function: ChannelID
+	* return the channel id
+	* @return channel id
+	*/	
+	TInt ChannelID() const;
+	
+	/**
+	* Function: CurrentNetwork
+	* returns the Current Network
+	* @return Current Network
+	*/	
+	TInt CurrentNetwork() const;
+	
+	/**
+	* Function: HomeOperator
+	* returns the home network
+	* @return home network
+	*/
+	TInt HomeOperator() const;
+	
+	
+	/**
+	* Function: StartTime
+	* returns the start time
+	* @return start time
+	*/	
+	TDes& StartTime();
+	
+	/**
+	* Function: NmsType
+	* returns the nms type
+	* @return nms type
+	*/	
+	TDesC& NmsType();
+
+	/**
+	* Function: NmsLogId
+	* returns the nmslog id
+	* @return n nmslog id
+	*/	
+	
+	TInt NmsLogId() const;
+	
+	
+	/**
+	* Function: FileName
+	* returns file name
+	* @return file name
+	*/
+	TFileName FileName();
+	
+	/** 
+	* Function: DateTime
+	* returns Nms start time
+	* @return Nms start time
+	*/
+	TTime DateTime();
+	
+	/**
+	* Function: GetBackedUp
+	* Back up the given Nms, copies the data of the Nms
+	* @param Nms logs instance which to be copied
+	*/
+	void GetBackedUp( CIRNmsLogger& aNms );
+	
+	/**
+	* Function: ExternalizeL
+	* externialize the stream to the given stream
+	* @param write stream
+	*/
+	void ExternalizeL(RWriteStream& aWriteStream);
+	
+	/**
+	* Function: InternalizeL
+	* gets the data from the stream
+	* @param read stream
+	*/
+	void InternalizeL(RReadStream& aReadStream);
+	
+
+private:  
+	/**									
+	* file name 
+	*/									
+	TFileName iFilePath;
+	
+	/**
+	* Nms start time
+	*/
+	TTime iStartNmsTime;
+	
+	/**
+	* time current Nms become active started
+	*/
+	TTime iActiveNmsTime;
+	
+	
+	/**
+	* start time is stored
+	*/
+	TBuf<64> iStartTime;
+	
+
+	/**
+	* NmsLog id
+	*/
+	TInt iNmsLogId;
+	
+	/**
+	* channel id
+	*/
+	TInt iChannelId;
+	
+	/**
+	* home operator mcc+mnc
+	*/
+	TInt iHomeOperator;
+	
+	/**
+	* current operator mcc+mnc
+	*/
+	TInt iNmsCurrentNetwork;
+	
+	/**
+	* nms type information	
+	*/
+	TBuf<16> iNmsType;
+	};
+
+
+#endif //IRNMSLOGGER_H
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irphoneinfo.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:  ?Description
+*
+*/
+
+
+#ifndef IRPHONEINFO_H
+#define IRPHONEINFO_H
+
+#include <e32base.h>
+#include <etel3rdparty.h>
+
+class CTelephony;
+class MIRPhoneInfoObserver;
+
+NONSHARABLE_CLASS(CPhoneInfo) : public CActive
+    {
+public:
+    static CPhoneInfo* NewL(MIRPhoneInfoObserver* aObserver);
+    ~CPhoneInfo();
+
+    void StartUpdating();
+
+private:
+    CPhoneInfo(MIRPhoneInfoObserver* aObserver);
+    void ConstructL();
+
+    void RunL();
+    void DoCancel();
+
+private:
+    CTelephony::TPhoneIdV1 iPhoneIdV1;
+    CTelephony::TPhoneIdV1Pckg iPhoneIdV1Pckg;
+
+    CTelephony* iTelephony;
+    MIRPhoneInfoObserver* iObserver;
+    };
+
+#endif // IRPHONEINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irreportsettings.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRREPORTSETTINGS_H
+#define IRREPORTSETTINGS_H
+
+#include <e32def.h>
+
+_LIT(KSession,"Session");
+
+_LIT(KNmsLog,"NmsLog");
+
+_LIT(KLogFileName,"RadioReport.xml");
+
+_LIT(KGZipLogFileName,"LogUsage.gz");
+
+_LIT(KField,"Field");
+
+_LIT(KXmlHeader,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+
+
+//RadioReport
+
+_LIT(KRPSTARTTAG,"<radioReport ver=\"Field\"  IRID=\"Field\" id=\"Field\">");
+
+_LIT(KRPENDTAG,"</radioReport>");
+
+//Session log
+
+_LIT(KSESSIONSTARTTAG,"<session starttime=\"Field\" duration=\"Field\" terminatedBy=\"Field\" connectedFrom=\"Field\" id=\"Field\"><channelid>Field</channelid>");
+
+_LIT(KSERVERRESULTTAG,"<serverResult url=\"Field\">Field</serverResult>");
+
+_LIT(KCONNECTIONTAG,"<connection type=\"Field\"><operator currentNetwork=\"Field\" homeOperator=\"Field\"/></connection>");
+
+_LIT(KSESSIONENDTAG,"</session>");
+
+//Browse log
+
+_LIT(KBROWSESTARTTAG,"<browseLog>");
+
+_LIT(KBROWSEENDTAG,"</browseLog>");
+
+_LIT(KBROWSETAG,"<browse url=\"Field\" timeStamp=\"Field\" currentNetwork=\"Field\"/>");
+
+
+/**
+ * for nmsLogs (Nokia Music Store Logs Information)
+ * 
+ */
+_LIT(KNMSLOGSTARTTAG, "<nmsLog>");
+_LIT(KNMSLOGENDTAG, "</nmsLog>");
+_LIT(KNMSEVENTTAG, "<nmsEvent timeStamp=\"Field\" channelId=\"Field\" type=\"Field\"><operator currentNetwork=\"Field\" homeOperator=\"Field\"/></nmsEvent>" );
+
+/**
+ * for song recognition Logs (Shazam Logs Information)
+ * 
+ */
+_LIT(KSONGRECOGLOGSTARTTAG, "<songRecogLog>");
+_LIT(KSONGRECOGLOGENDTAG, "</songRecogLog>");
+_LIT(KSONGRECOGEVENTTAG, "<songRecogEvent timeStamp=\"Field\"></songRecogEvent>");
+
+
+//Advertisement log
+
+//Terminatedby
+_LIT(KUSER,"user");
+
+_LIT(KNOCONNECTIONTOSERVER,"noConnectionToServer");
+
+_LIT(KNOCONNECTIONTONETWORK,"noConnectionToNetwork");
+
+	//Connected from
+
+_LIT(KISDS,"isds");
+
+_LIT(KPRESETADHOC,"preset-adhoc");
+
+_LIT(KPRESETISDS,"preset-isds");
+
+_LIT(KHISTORYADHOC,"history-adhoc");
+
+_LIT(KHISTORYISDS,"history-isds");
+
+_LIT(KADHOCMANUAL,"adhoc-manual");
+
+_LIT(KADHOCEXTERNAL,"adhoc-external");
+
+//Connection type
+
+//ServerResult
+_LIT(KConnected,"Connected");
+
+_LIT(KFull,"ServerFull");
+
+_LIT(KConnTimeOut,"ConnectionTimeOut");
+
+_LIT(KConnectionFailed,"ConnectionFailed");
+
+#endif //IRREPORTSETTINGS_H
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irsessiondb.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSESSIONDB_H
+#define IRSESSIONDB_H
+
+#include <d32dbms.h>
+
+class CIRSessionLogger;
+
+NONSHARABLE_CLASS(CIRSessionDb) : public CBase
+	{												
+										//member functions
+public:
+
+	/**
+	* Function : NewL()
+	* Two phased construction
+	* @return instance of CIRSessionDb
+	*/
+	static CIRSessionDb* NewL();
+	
+	/**
+	* Function : NewLC()
+	* Two phased construction
+	* @return instance of CIRSessionDb
+	*/	
+	static CIRSessionDb* NewLC();
+	
+	/**
+	* Function : ~CIRSessionDb()
+	* default destructor
+	*/	
+	~CIRSessionDb();
+
+	/**
+	* Function : CreateDbConditional()
+	* Creates both the dbms files conditionally(only if not yet created)
+	* @param session database file
+	* @return errcode
+	*/	
+	TInt CreateDbConditional(TFileName &aSession);
+
+	/**
+	* Function : AddSessionStartL()
+	* adds the session log entry into data base
+	* @param session data instance
+	*/
+	void AddSessionStartL(CIRSessionLogger& aSession);
+	
+	/**
+	* CIRSessionDb::GetAllPresetL()
+	* gets all the preset into an array 
+	*/
+	void GetAllSessionL(CArrayPtrFlat<CIRSessionLogger>& aSessionDataList);
+	
+	/**
+	* Function : DeleteAllSessionL
+	* delete all the session from session log entry
+	*/
+	void DeleteAllSessionL();
+
+private: 
+
+	/**
+	* Function : ConstructL()
+	* two phase construction
+	*/   
+    void ConstructL();
+    
+    /**
+	* Function : CloseDb()
+	* Closes the database 
+	*/
+	void CloseDb();
+	
+	/**
+	* Function : CreateSessionTableL
+	* creates sessionlogtable with two column one is sessionid and rest of session
+	* log data
+	* ---------------------------------------------------------------------------
+	* SessionTable
+	*---------------------------
+	*| KID   |	 KSessionLogCol |
+	*---------------------------
+	*|TInt32 | EDbColLongText8 |
+	*---------------------------
+	*/	
+    void CreateSessionTableL();
+    
+	/**
+	* Function : CreateSessionIndexL
+	* sets sessionid as the primary key
+	*/  
+    void CreateSessionIndexL();
+    
+	/**
+	* Function : OpenDbL()
+	* opening the data base 
+	*/
+	void OpenDbL();
+	
+	/**
+	* Function : CreateDbL()
+	* creates both the dbms files 
+	* database filename
+	*/	
+	void CreateDbL(TFileName& aSession);
+
+										//data members
+										
+private:
+
+	/**
+	* database file
+	*/
+	TFileName iDbFile;
+	
+	/**
+	* file session
+	*/
+    RFs iFsSession;
+    
+	/**
+	* data base handler
+	*/
+    RDbNamedDatabase iSessionDb;
+    
+    };
+
+#endif  //IRSESSIONDB_H
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irsessionlogger.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,566 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSESSIONLOGGER_H
+#define IRSESSIONLOGGER_H
+
+#include <f32file.h>
+
+#include "irsessionparams.h"
+#include "mirphoneinfoobserver.h"
+
+class CIRSessionDb;
+class CIRSessionLogger;
+class CIRSettings;
+class CIRNmsLogDb;
+class CIRNmsLogger;
+class CPhoneInfo;
+class MIRLogDbStatusObserver;
+
+/**
+ * This class is used to provide usage log, various function are to log session
+ * information as well as others, like browse log information. Session logs can be 
+ * stored in internel data base for last 5 session, it is deleted only if the 
+ * response is given. If more than 5 session is happening at any point of time
+ * first one based on session id is removed.
+ * When you end a session a gzip file is generated in private path
+ * This zip file has (xml file) session log in xml format
+ * This is single ton implementation use DeleteInstance to delete its 
+ * instance
+ *
+ * @lib irsessionlog.lib
+ * @since S_60 3.0
+ *
+ */
+
+//============================ class declaration ========================
+
+
+NONSHARABLE_CLASS(CIRReportGenerator) : public CObject,
+                                        public MIRPhoneInfoObserver
+	{
+//member function
+public:
+
+	/**
+	* Function: NewL
+	* Two phase constructor returns the instance of CIRReportGenerator
+	* this is a single ton implementation
+	* @note Deleting this object directly is not allowed. Please use Close().
+	* @note CleanupClosePushL(generator) must be used if the object is to be pushed onto cleanup stack.
+	* @returns instance of CIRReportGenerator
+	*/	
+	IMPORT_C static CIRReportGenerator* OpenL();
+	
+private:	
+	/**
+	* Function: ~CIRReportGenerator
+	* default destructor
+	*/	
+	~CIRReportGenerator();
+	
+	/**
+	* Function: ConstructL
+	* Two phase constructor
+	*/	
+	void ConstructL();
+	
+	/**
+	* Function: CIRReportGenerator
+	* default constructor
+	*/	
+	CIRReportGenerator();
+
+public:
+
+	/**
+	* Function: LogServerResult
+	* logs server connection result
+	* @param URL to which connection is attempted
+	* @param response from server
+	*/		
+	IMPORT_C void LogServerResult(const TDesC& aUrl,TResponse aResult);	
+	
+    /**
+    * Function: LogSongRecog
+    * logs song recog
+    */  
+	IMPORT_C void LogSongRecog();
+    
+	/**
+	* Function: UpdateCurrentBrowseNetwork
+	* logs network during browsing
+	* @param mcc+ mnc code of current network
+	*/	
+	IMPORT_C void UpdateCurrentBrowseNetwork(TInt aNetwork);
+		
+	/**
+	* Function: LogBrowse
+	* logs browse url and status information
+	* @param browse url
+	* @param status information
+	*/	
+	IMPORT_C void LogBrowse(const TDesC8& aUrl,TInt aStatus);
+			
+	/**
+	* Function: SessionStartedL
+	* starts a new session
+	*/	
+	IMPORT_C void SessionStartedL();
+	/**
+	* Function: NmsLogStartedL
+	* starts a new nmslog
+	*/	
+	IMPORT_C void NmsLogStartedL();
+	/**
+	* Function: SessionEnd
+	* marks the a session
+	*/		
+	IMPORT_C void SessionEndL( TBool aForcedTermination );
+	
+	/**
+	* Function: MarkSessionStart
+	* marks the a start of a session
+	*/	
+	IMPORT_C void MarkSessionStart();
+	
+	/**
+	* Function: HandleStopEvents
+	* function handle session state change events
+	* @param ETrue if session is progressing and EFalse if not progressing
+	*/
+	IMPORT_C void HandleStopEvents(TBool aIsSessionProgressing );
+	
+	/**
+	* Function: ReStorePreviousSession
+	* restore the previous session
+	* @return ETrue if restoring is possible else returns EFalse
+	*/
+	IMPORT_C TBool ReStorePreviousSession();
+
+	
+	/**
+	* Function: UpdateTerminatedBy
+	* updates the termination status
+	* @param terminated by information
+	*/	
+	IMPORT_C void UpdateTerminatedBy(TTerminationStatus aTerminatedBy);
+	
+	/**
+	* Function: UpdateConnectedFrom
+	* connected information is stored
+	* @param connected from information
+	*/		
+	IMPORT_C void UpdateConnectedFrom(TConnectedFrom aConnectedFrom);
+	
+	/**
+	* Function: BrowseUrl
+	* logs browse url and result
+	* @param URL to which connection is attempted
+	* @param response from server
+	*/	
+	IMPORT_C void BrowseUrl(const TDesC& aBrowseUrl,TInt aStatus);
+	
+	/**
+	* Function: UpdateChannelID
+	* updates the channel id
+	* @param channel id
+	*/	
+	IMPORT_C void UpdateChannelID(TInt aChanneldID);
+	
+	/**
+	* Function: UpdateCurrentNetwork
+	* updates the current network
+	* @param current network
+	*/	
+	IMPORT_C void UpdateCurrentNetwork(TInt aCurrentNetwork);
+	
+	/**
+	* Function: UpdateHomeOperator
+	* updates the home network
+	* @param home network
+	*/	
+	IMPORT_C void UpdateHomeOperator(TInt aHomeOperator);
+	
+	/**
+	* Function: UpdateConnectionType
+	* updates the connection type
+	* @param connection type
+	*/	
+	IMPORT_C void UpdateConnectionType(const TDesC& aConnectionType);	
+	
+	/**
+	* Function : ReponseFromISDSObtained
+	* This function is called when session log is successfully sent
+	* removes all session log entries from sessiondb
+	*/	
+	IMPORT_C void ReponseFromISDSObtained();
+	
+	
+	/**
+	 * The following methods are for Nms Event Usage Logging 
+	 */
+	
+	
+	/**
+	 * Function: UpdateNmsCurrentNetwork
+	 * logs network during Music Store launching
+	 * @param mcc+ mnc code of current network
+	 */	
+	IMPORT_C void UpdateNmsCurrentNetwork(TInt aNetwork);
+	
+	/**
+	 * Function: UpdateNmsHomeOperator
+	 * logs network during Music Store launching
+	 */	
+	IMPORT_C void UpdateNmsHomeOperator(TInt aNetwork);
+	
+	/**
+	 * Function: WriteNmsLogtoXmlL
+	 * logs nmsEvents to Xml file
+	 */	
+	IMPORT_C void WriteNmsLogtoXmlL();
+	/**
+	* Function: UpdateNmsType
+	* updates the Nms type
+	* @param Nms type
+	*/	
+	IMPORT_C void UpdateNmsType(const TDesC& aNmsType);		
+	/**
+	* Function: UpdateNmsChannelID
+	* updates the Nms channel id
+	* @param Nms channel id
+	*/	
+	IMPORT_C void UpdateNmsChannelID(TInt aChanneldID);
+
+    /**
+     * The following methods are for Song Recog Event Usage Logging 
+     */
+	
+    /**
+     * The following methods are used for sending out Usage Logging 
+     */
+    
+	/**
+	* Function: SetDbStatusObserser
+	* @param Db Status Observer
+	*/	
+	IMPORT_C void SetDbStatusObserser(MIRLogDbStatusObserver *aDbStatusObserver);
+	
+	/**
+	* Function: ReportSent();
+	* notify that the usage report is just sent out to isds server
+	*/	
+	IMPORT_C void ReportSent();	
+private:
+
+	/**
+	* Function: CollectSettingsData
+	* collect information during starting of session
+	* like irid, version information.
+	*/		
+	void CollectSettingsData();
+	
+	/**
+	* Function: WriteToXmlL
+	* gathers the information and generates sesion log file and zip file
+	* file will be stored in private path
+	*/	
+	void WriteToXmlL();		
+	
+	/**
+	* Function: WriteSessionData
+	* gathers session log data and writes to XML file
+	* @param no of urls tried to connect in that particular session
+	*/		
+	void WriteSessionData(TInt aIndex);
+	
+	/**
+	* Function: WriteBrowseLog
+	* gathers browse log data and writes to XML file
+	*/	
+	void WriteBrowseLog();
+	
+	/**
+	* Function: ZipFileL
+	* generates the zip file from the input xml file
+	* output file is in gzip format and is stored in private path
+	*/	
+	void ZipFileL();
+	
+	/**
+	* Function: FormatDateTime
+	* formats the date time given in "%d-%d-%d %d:%d:%d GMT\n" format
+	* copies the result to a descriptor
+	* @param reference of descriptor to which the data is to be copied
+	* @param time to be copied
+	*/	
+	void FormatDateTime(TDes& aBuffer,TDateTime aDateTime);
+	
+	/**
+	* Function : WriteSessionLog
+	* Write buffer content to log file
+	*/
+	void WriteBufferToLogFile();
+	
+	/**
+	* Function : UnForceSessionEndedL
+	* Write session log
+	* @param instance of session which ended
+	*/
+	void UnForceSessionEndedL( CIRSessionLogger* aSession );
+	
+	/**
+	* Function : ForcedSessionEndedL
+	* Write session log
+	*/
+	void ForcedSessionEndedL();
+
+
+    /**
+	 * The following methods are for Nms Event Usage Logging 
+	 */
+		
+	/**
+	* Function: WriteNmsLogData
+	* gathers Nmslog data and writes to XML file
+	* @param position of the log in the log data array
+	*/		
+	void WriteNmsLogData(TInt aIndex);
+    
+    /**
+     * From MIRPhoneInfoObserver
+     */
+	void ImeiUpdatedL(const TDesC& aImei);
+    
+private:	
+
+	/**
+	* opsetting instance 
+	*/
+	CIRSettings* iSettingsData;
+    
+    /**
+    * Phone Info 
+    */	
+	CPhoneInfo* iPhoneInfo;
+	
+	/**
+	* instance of session logger
+	*/
+	CIRSessionLogger* iSessionLog;
+	
+	/**
+	* instance of nms logger
+	*/
+	CIRNmsLogger* iNmsLog;
+    
+	/**
+	* instance of previous session 
+	*/
+	CIRSessionLogger* iPreviousSessionLog;
+	/**
+	* instance of previous session 
+	*/
+	CIRNmsLogger* iPreviousNmsLog;
+	
+	/**
+	* instance of sessiondb
+	*/ 
+	CIRSessionDb* iLogSessionDb;
+	/**
+	* instance of NmsLogdb
+	*/ 
+	CIRNmsLogDb* iNmsLogDb;
+	
+	/**
+	* instance of Db Status Observer
+	*/
+	MIRLogDbStatusObserver *iDbStatusObserver;
+	/**
+	* Indicate whether Nms Log Db has been updated
+	*/
+	TBool iNmsLogDbUpdated;
+	/**
+	* Indicate whether Session Log Db has been updated
+	*/
+	TBool iSessionLogDbUpdated;
+	/**
+	* Indicate whether usage report sent to isds server has received successful response
+	*/
+	TBool iUnComfirmedReportSent;
+	/**
+	* it holds the sessions
+	*/
+	CArrayPtrFlat<CIRSessionLogger> *iSessionData;
+	/**
+	* it holds the NmsLog
+	*/
+	CArrayPtrFlat<CIRNmsLogger> *iNmsLogData;
+    
+	/**
+	* position in xml file
+	*/
+	TInt iFileWritePos;
+
+	/**
+	* stores the network during browsing
+	*/
+	TInt iCurrentBrowseNetwork;
+	
+	/**
+	* Checks whether any error has occured while 
+	* writing or retriving from data base
+	*/
+	TBool iSessionLogUpdationFailed;
+	/**
+	* Checks whether any error has occured while 
+	* writing or retriving from data base
+	*/
+	TBool iNmsLogUpdationFailed;    
+	/**
+	* Checks whether db creation is failure or success
+	*/
+	TBool iSessionDbCreationFailed;
+	/**
+	* Checks whether db creation is failure or success
+	*/
+	TBool iNmsDbCreationFailed;
+    
+	/*
+	* sets when an nms event is generated
+	*/
+	TBool iNmsEventFlag;
+	
+	/**
+	* log file
+	*/
+	RFile iLogFile;
+	
+	/*
+	* file session
+	*/
+	RFs iFsSession;
+	
+	/**
+	* unicode buffer
+	*/ 
+	TBuf<256> iUniCodeBuf;  //Unicode
+	
+	/**
+	* utf 8 buffer
+	*/
+	TBuf8<256> iUTF8Buffer; //UTF-8
+	
+	/**
+	* version number
+	*/
+	TBuf<5> iReportVersion;
+	
+	/**
+	* irid
+	*/
+	TBuf<30>  iIRId;
+	
+    /**
+    * Base64 encoded IMEI
+    */
+    HBufC *iImeiBase64;
+	
+	/**
+	* session database file
+	*/
+	TFileName iSessFile;
+	/**
+	* session database file
+	*/
+	TFileName iNmsLogFile;    
+	/**
+	* log files path
+	*/
+	TFileName iLogFilePath;
+	
+	/**
+	* instance of browse log	
+	*/
+	TIRBrowseLog iRBrowseLog;
+	
+	/**
+	* session start time
+	*/
+	TTime iSessionStartTime;
+	
+    /**
+     * Timestamp
+     */
+    TTime iSongRecogTimestamp; 	
+	
+	/**
+	* time stamp
+	*/
+	TTime iBrowseLogTimeStamp;
+	
+	/**
+	* date
+	*/
+	TDateTime iDate;
+	
+	/**
+	* array for storing browse log
+	*/	
+	RArray<TIRBrowseLog> iBrowseLog;
+	
+	/**
+	* number of browse logs written to xml
+	*/
+	TInt iBrowseLogsCntToXml;
+
+	
+	/**
+	 * The following methods are for Nms Event Usage Logging 
+	 */
+		
+	/**
+	 * Timestamp
+	 */
+	TTime iNmsTimestamp; 
+    
+	/**
+	 * Type of Event (i.e., "find" or "launch")
+	 */
+	TInt iNmsType;
+	
+	/**
+	 * Nms Event Current netwrok type
+	 */
+	TInt iNmsCurrentNetwork;
+	
+	/**
+	 * Nms Event Home Operator
+	 */
+	TInt iNmsHomeOperator;  
+	/**
+	 * The number of times session end called
+	 */
+	TInt iSessionEndCalled;  	 
+	};
+
+#endif //IRSESSIONLOGGER_H
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irsessionloggerutility.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,426 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSESSIONLOGGERUTILITY_H
+#define IRSESSIONLOGGERUTILITY_H
+
+#include <e32base.h>
+
+#include "irsessionparams.h"
+
+class RReadStream;
+class RWriteStream;
+
+/**
+* This class can hold data for session log 
+*/
+
+NONSHARABLE_CLASS(CIRSessionLogger) : public CBase
+	{
+public:
+	/**
+	* Function: NewL
+	* Two phase constructor returns the instance of CIRSessionLogger
+	* @returns instance of CIRSessionLogger
+	*/
+	static CIRSessionLogger* NewL();
+
+	/**
+	* Function: NewLC
+	* Two phase constructor creates the instance of CIRSessionLogger
+	* @returns instance of CIRSessionLogger
+	*/
+	static CIRSessionLogger* NewLC(); 
+
+	/**
+	* Function: ~CIRSessionLogger
+	* default destructor
+	*/	
+	~CIRSessionLogger();
+	
+private:
+	/**
+	* Function: ConstructL
+	* Two phase constructor
+	*/	
+	void ConstructL();
+	
+	/**
+	* Function: CIRSessionLogger
+	* default constructor
+	*/	
+	CIRSessionLogger();	
+
+public:
+	/**
+	* Function: EndLogging
+	* logs the termination condition
+	*/
+	void EndLogging();
+	
+	/**
+	* Function: HandleStartEvents
+	* functtion handles start events
+	*/
+	void HandleStartEvents();
+	
+	/**
+	* Function: HandleStopEvents
+	* functtion handles stop events
+	*/
+	void HandleStopEvents();
+	
+	/**
+	* Function: MarkSession
+	* Marks the start of a session
+	*/
+	void MarkSession();
+
+	/**
+	* Function: UnMarkSession
+	* UnMarks the start of a sessiom
+	*/
+	void UnMarkSession();
+	
+	/**
+	* Function: SessionMarked
+	* Returns whether session is marked or not
+	* @return session marked flag
+	*/	
+	TBool SessionMarked();
+	
+	/**
+	* Function: LogServerResult
+	* logs server connection result
+	* @param URL to which connection is attempted
+	* @param response from server
+	*/
+	void LogServerResult(const TDesC& aUrl,TResponse aResult);
+	
+    /**
+    * Function: LogSongRecog
+    * logs song recog
+    * @param aTimeStamp song recog timestamp.
+    */	
+	void LogSongRecog(const TDesC& aTimeStamp);
+	
+	/**
+	* Function: GetConnectedFrom
+	* connected information is stored
+	* @param connected from information
+	*/
+	void GetConnectedFrom(TConnectedFrom aConnectedFrom);
+	
+	/**
+	* Function: UpdateSessionLog
+	* update the session logs
+	* @param TIRServer structure which holds url response and cound
+	*/
+	void UpdateSessionLog(TIRServer& aServer);
+	
+	/**
+	* Function: ResetResource
+	* reset data from channel server
+	*/
+	void ResetResource();
+
+	/**
+	* Function: IsSessionProgressing
+	* checks whether session is active or not
+	* @return EFalse if session is currently not progressing
+	*/
+	TBool IsSessionProgressing();
+
+	/**
+	* Function: CompensationTime
+	* returns time at which session become active
+	* @return time at which session become active
+	*/	
+	TTime CompensationTime();
+
+	/**
+	* Function: UpdateSessionId
+	* updates the session id
+	* @param session id
+	*/
+	void UpdateSessionId(TInt aSessionId);
+	
+	/**
+	* Function: UpdateTerminationStatus
+	* updates the termination status
+	* @param terminated by information
+	*/	
+	void UpdateTerminationStatus(TTerminationStatus aTerminatedBy);
+	
+	/**
+	* Function: UpdateChannelID
+	* updates the channel id
+	* @param channel id
+	*/	
+	void UpdateChannelID(TInt aChanneldID);
+	
+	/**
+	* Function: UpdateCurrentNetwork
+	* updates the current network
+	* @param current network
+	*/
+	void UpdateCurrentNetwork(TInt aCurrentNetwork);
+	
+	/**
+	* Function: UpdateHomeOperator
+	* updates the home network
+	* @param home network
+	*/
+	void UpdateHomeOperator(TInt aHomeOperator);
+	
+	/**
+	* Function: UpdateConnectionType
+	* updates the connection type
+	* @param connection type
+	*/
+	void UpdateConnectionType(const TDesC& aConnectionType);
+	
+	/**
+	* Function : UpdateSessionStartGMTTime
+	* function updates session start time with current GMT time
+	*/
+	void UpdateSessionStartGMTTime();
+	
+	/**
+	* Function: TerminationStatus
+	* returns termination status
+	* @return termination status
+	*/
+	TDesC& TerminationStatus();
+		
+	/**	
+	* Function: ChannelID
+	* return the channel id
+	* @return channel id
+	*/	
+	TInt ChannelID() const;
+	
+	/**
+	* Function: CurrentNetwork
+	* returns the Current Network
+	* @return Current Network
+	*/	
+	TInt CurrentNetwork() const;
+	
+	/**
+	* Function: HomeOperator
+	* returns the home network
+	* @return home network
+	*/
+	TInt HomeOperator() const;
+	
+	/**
+	* Function: ConnectionType
+	* returns the connection type
+	* @return connection type
+	*/	
+	TDesC& ConnectionType();
+	
+	/**
+	* Function: StartTime
+	* returns the start time
+	* @return start time
+	*/	
+	TDes& StartTime();
+	
+	/**
+	* Function: ConnectionType
+	* returns the connection type
+	* @return connection type
+	*/	
+	TDesC& ConnectedFrom();
+	
+	/**
+	* Function: SessionId
+	* returns the session id
+	* @return session id
+	*/	
+	TInt SessionId() const;
+	
+	
+	/**
+	* Function: SessionDuration
+	* returns the duration of the session
+	* @return duration of the session
+	*/	
+	TInt SessionDuration() const;
+	
+	/**
+	* Function: FileName
+	* returns file name
+	* @return file name
+	*/
+	TFileName FileName();
+	
+	/** 
+	* Function: DateTime
+	* returns session start time
+	* @return session start time
+	*/
+	TTime DateTime();
+	
+	/** 
+	*  Function: SessionData
+	*  function returns instance session log array
+	*  @return session log RArray of session log
+	*/
+	const RArray<TIRServer>& SessionData()const;
+
+    /** 
+    *  Function: SongRecogLog
+    *  function returns instance song recog log array
+    *  @return song recog log RArray of song recog log
+    */
+    const RArray<TIRSongRecogLog>& SongRecogLog()const;
+    
+	/**
+	* Function: GetBackedUp
+	* Back up the given session, copies the data of the session
+	* @param session logs instance which to be copied
+	*/
+	void GetBackedUp( CIRSessionLogger& aSession );
+	
+	/**
+	* Function: ExternalizeL
+	* externialize the stream to the given stream
+	* @param write stream
+	*/
+	void ExternalizeL(RWriteStream& aWriteStream);
+	
+	/**
+	* Function: InternalizeL
+	* gets the data from the stream
+	* @param read stream
+	*/
+	void InternalizeL(RReadStream& aReadStream);
+	
+	/**
+	* Function: DurationValue
+	* Duration value
+	* @return duration
+	*/
+	TTimeIntervalSeconds DurationValue();
+	
+private:  
+	/**									
+	* file name 
+	*/									
+	TFileName iFilePath;
+	
+	/**
+	* session start time
+	*/
+	TTime iStartSessionTime;
+	
+	/**
+	* time current session become active started
+	*/
+	TTime iActiveSessionTime;
+	
+	/**
+	* session duration
+	*/
+	TTimeIntervalSeconds iDurationValue;
+	
+	/**
+	* start time is stored
+	*/
+	TBuf<64> iStartTime;
+	
+	/**
+	* terminated by status is stored
+	*/
+	TBuf<32> iTerminatedBy;
+	
+	/**
+	* connected from information
+	*/
+	TBuf<32> iConnectedFrom;
+	
+	/**
+	* connection type information	
+	*/
+	TBuf<32> iSessionConnectionType;
+	
+	/**
+	* session duration
+	*/
+	TInt iDuration;
+	
+	/**
+	* Termination status
+	*/
+	TTerminationStatus iTerminateBy;
+	
+	/**
+	* Session id
+	*/
+	TInt iSessionId;
+	
+	
+	/**
+	* NmsLog id
+	*/
+	TInt iNmsLogId;
+	
+	/**
+	* channel id
+	*/
+	TInt iChannelId;
+	
+	/**
+	* home operator mcc+mnc
+	*/
+	TInt iHomeOperator;
+	
+	/**
+	* current operator mcc+mnc
+	*/
+	TInt iSessionCurrentNetwork;
+	
+	/**
+	* Checks whether session is actually started 
+	*/	
+	TBool iSessionMarked;	
+	
+	/**
+	* Checks whether application is playing or not 
+	*/	
+	TBool iIsSessionProgressing;	
+	
+	/**
+	* session log holder's array
+	*/
+	RArray<TIRServer> iRServer;
+		
+    /**
+    * song recog log holder's array
+    */
+    RArray<TIRSongRecogLog> iRSongRecogLog;
+	};
+
+
+#endif //IRSESSIONLOGGERUTILITY_H
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/irsessionparams.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSESSIONPARAMS_H
+#define IRSESSIONPARAMS_H
+
+#include <e32cmn.h>
+
+// Browse Log Url Class
+class TIRBrowseLog
+	{	
+public:
+	//browse url	
+	TBuf<256> 	iBrowseUrl;
+	//time stamp
+	TBuf<32> 	iTimeStamp;	
+	//connected from
+	TBuf<16> 	iCurrentNetwork;
+	TInt  		iStatus;    //TO check the status for browse url,1 for channel BRowse url
+	}; 
+
+
+// Channel Server Results
+class TIRServer
+	{
+public:
+	//channel url
+	TBuf<256> iServerUrl;
+	//channel url connection result
+	TBuf<32>  iServerResult;
+	TInt 	  iCount;
+	};
+
+// Song Recog Log
+class TIRSongRecogLog
+    {
+public:
+    TBuf<64> iTimeStamp;
+    };
+
+enum TTerminationStatus
+	{
+	//terminated by user
+	EUserTerminated = 0,
+	//no connection to the server
+	ENoConnectionToServer,
+	//no connection to the network
+	ENoConnectionToNetwork,	
+	};
+	
+enum TConnectedFrom
+	{
+    //when session started straight from station details in iSDS
+    EIRIsds = 0,
+    //when session started from a station details saved to iRAPP favorites and the station is not from iSDS (channel_Id = 0 )
+    EIRPresetAdhoc,
+    //when session started from a station details saved to iRAPP favorites and the station is from iSDS (channel_ID is iSDS channel_ID)
+    EIRPresetIsds,
+    //when session started from iRAPP 'station play history' and the station is not from iSDS (channel_Id = 0 )
+    EIRHistoryAdhoc,
+    //when session started from iRAPP 'station play history' and the station is from iSDS (channel_ID is iSDS channel_ID )
+    EIRHistoryIsds,
+    //when session started from manually entered stream url
+    EIRAdhocManual,
+    //when iRAPP session started/triggered from any iRAPP external client e.g. Browser or SMS/MMS
+    EIRAdhocExternal
+	};
+
+enum TResponse
+	{
+	//connected 
+	EIRConnected = 0,
+	//connection failed because server is full (not responding)
+	EIRFull,
+	//connection timed out
+	EIRConnTimeOut,
+	//connection failed generic senerio like invalid url	
+	EIRConnFailed,
+	};
+
+#endif //IRSESSIONLOGGER_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/mirphoneinfoobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* 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:  ?Description
+*
+*/
+
+
+#ifndef MIRPHONEINFOOBSERVER_H
+#define MIRPHONEINFOOBSERVER_H
+
+class MIRPhoneInfoObserver
+	{
+public:
+	virtual void ImeiUpdatedL(const TDesC& aImei) = 0;
+	};
+
+
+#endif //MIRPHONEINFOOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionloginc/mirsessionobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef MIRSESSIONOBSERVER_H
+#define MIRSESSIONOBSERVER_H
+
+class MIRSessionObserver
+	{
+public:
+	virtual void CollectSessionData() = 0;
+	virtual void CollectPresetData(TInt aChannelType) = 0;
+	virtual void CollectBrowseLog(const TDesC& aBrowseUrl,TInt aStatus) = 0;
+	};
+
+
+#endif //MIRSESSIONOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionlogsrc/irnmslogdb.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,449 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <bautils.h>
+
+#include "irdebug.h" 
+#include "irnmslogdb.h"
+#include "irnmslogger.h"
+
+_LIT(KNmsLogTable,"NmsLog"); 
+_LIT(KID,"id");
+_LIT(KNmsLogCol,  "NmsLogData");
+_LIT(KNmsLogIndex,"NmsLogIndex");
+
+const TInt KMaxNoNmsLog = 15;
+
+
+// ======== LOCAL FUNCTIONS ========
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Function : NewL()
+// two phased construction
+// ---------------------------------------------------------------------------
+//
+  CIRNmsLogDb* CIRNmsLogDb::NewL()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::NewL" );
+	CIRNmsLogDb* self;
+	self=CIRNmsLogDb::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNmsLogDb::NewL - Exiting." );
+	return self;
+	}
+ 
+ 
+// ---------------------------------------------------------------------------
+// Function : NewLC()
+// Two phased construction
+// ---------------------------------------------------------------------------
+//
+  CIRNmsLogDb* CIRNmsLogDb::NewLC()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::NewLC" );
+	CIRNmsLogDb *self;
+	self=new(ELeave)CIRNmsLogDb;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRNmsLogDb::NewLC - Exiting." );
+	return self;
+	}
+ 
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::~CIRNmsLogDb()
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRNmsLogDb::~CIRNmsLogDb()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::~CIRNmsLogDb" );
+	CloseDb();
+	iFsSession.Close();
+	IRLOG_DEBUG( "CIRNmsLogDb::~CIRNmsLogDb - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::CreateDbConditional()
+// Creates both the dbms files conditionally(only if not yet created)
+// calls CreateDbL()
+// ---------------------------------------------------------------------------
+//
+ TInt CIRNmsLogDb::CreateDbConditional(TFileName &aNmsLog)
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateDbConditional" );
+	iDbFile.Copy(aNmsLog);
+	if( !BaflUtils::FileExists(iFsSession, iDbFile) )
+		{
+		TRAPD(error,CreateDbL(iDbFile));
+		if( error )
+			{
+			IRLOG_DEBUG( "CIRNmsLogDb::CreateDbConditional - Exiting (1)." );
+			return error;
+			}	
+		}
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateDbConditional - Exiting (2)." );
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb:AddNmsLogStartL()
+// adds the NmsLog log entry into data base
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogDb::AddNmsLogStartL(CIRNmsLogger& aNmsLog)
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::AddNmsLogStartL" );
+	OpenDbL();
+	RDbTable nmsLogtable;
+	TInt error=nmsLogtable.Open(iNmsLogDb,KNmsLogTable,nmsLogtable.
+		EUpdatable);
+	CleanupClosePushL(nmsLogtable);
+	if( error )
+		{
+		CloseDb();
+		User::LeaveIfError(error);	
+		}
+	
+	//! arrange the presets in incresing order of index
+	nmsLogtable.SetIndex(KNmsLogIndex);
+	nmsLogtable.Reset();
+
+	//if NmsLog log is greater or equal to than 5
+	if( nmsLogtable.CountL() >= KMaxNoNmsLog )
+		{
+		//first row is selected
+		nmsLogtable.FirstL();
+		//the current row is selected
+		nmsLogtable.GetL();
+		//delete that entry
+		nmsLogtable.DeleteL();
+		}	
+    CleanupStack::PopAndDestroy(&nmsLogtable);
+	//Algorithm : else condition need not handle seperatly
+	//Algorithm : add NmsLogid and informations like
+	//starttime,connectedfrom,NmsLogid,connectiontype,channelid
+	//currentnetwork,homenetwork,NmsLogtable 
+	//Algorithm: if no. of NmsLog is greater than 5
+
+	_LIT(query,"SELECT * FROM %S");	
+    HBufC* sqlStr=HBufC::NewLC(query().Length() + KNmsLogTable().Length());
+	sqlStr->Des().Format(query,&KNmsLogTable);
+	
+	// Create a view on the database
+    RDbView view;     
+    error = view.Prepare(iNmsLogDb,*sqlStr);
+    if( error )
+		{
+		CloseDb();
+		User::LeaveIfError(error);	
+		}
+    CleanupStack::PopAndDestroy(sqlStr);     
+    CleanupClosePushL(view);
+    error = view.EvaluateAll();
+    if( error )
+		{
+		CloseDb();
+		User::LeaveIfError(error);	
+		}
+    CDbColSet* columns = view.ColSetL();
+    CleanupStack::PushL(columns);
+    
+    RDbColWriteStream writeStream;
+	TRAP(error,//trap start
+	   // Insert a row. Column order matches sql select statement
+	    view.InsertL();
+		//get index
+		view.SetColL(columns->ColNo(KID), aNmsLog.NmsLogId());	
+		//!open stream
+		writeStream.OpenLC(view,columns->ColNo(KNmsLogCol));
+		aNmsLog.ExternalizeL(writeStream);
+		writeStream.CommitL();
+		CleanupStack::PopAndDestroy(&writeStream);
+ 		);
+ 		
+ 	CleanupStack::PopAndDestroy(columns);
+ 	if( error!=KErrNone )
+	 	{
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+	view.PutL();
+ 	CleanupStack::PopAndDestroy(&view);
+ 	CloseDb();
+ 	IRLOG_DEBUG( "CIRNmsLogDb::AddNmsLogStartL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::GetAllNmsLogL()
+// gets all the preset into an array 
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogDb::GetAllNmsLogL(
+	CArrayPtrFlat<CIRNmsLogger>& aNmsLogDataList)
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::GetAllNmsLogL" );
+	OpenDbL();
+	//not sure about this resetanddestroy
+	 //! Open for preset master
+	aNmsLogDataList.ResetAndDestroy();	    
+	//! temp item for holding the retrived data
+	CIRNmsLogger *item;
+	RDbColReadStream instream;    
+	RDbTable table;
+	TInt error = table.Open(iNmsLogDb, KNmsLogTable, table.EReadOnly);
+	CleanupClosePushL(table);
+	if( error!=KErrNone )
+	 	{
+	 	//if open fails function leaves
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+
+	CDbColSet* colSet = table.ColSetL();
+	CleanupStack::PushL(colSet);
+
+	//! arrange the presets in incresing order of index
+	table.SetIndex(KNmsLogIndex);
+	table.Reset();
+	//! recursively retrive the preset data from the master table
+	for (table.FirstL(); table.AtRow(); table.NextL())
+	    {
+	    item=CIRNmsLogger::NewL();
+	    CleanupStack::PushL(item);
+	    table.GetL();
+	    instream.OpenLC( table, colSet->ColNo( KNmsLogCol ) );
+		item->InternalizeL(instream);
+		//update NmsLogid
+	    aNmsLogDataList.AppendL(item);
+	    CleanupStack::PopAndDestroy(&instream);
+	    CleanupStack::Pop(item);
+	    }
+	    
+	CleanupStack::PopAndDestroy(colSet);
+	//!close the master table
+	CleanupStack::PopAndDestroy(&table);
+	CloseDb();
+	IRLOG_DEBUG( "CIRNmsLogDb::GetAllNmsLogL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : DeleteAllNmsLog
+// delete all the NmsLog from NmsLog log entry
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogDb::DeleteAllNmsLogL()
+	{ 
+	IRLOG_DEBUG( "CIRNmsLogDb::DeleteAllNmsLogL" ); 
+	//opening a data base 
+	OpenDbL();
+	RDbTable nmsLogtable;
+	//data base table opened
+    TInt error=nmsLogtable.Open(iNmsLogDb,KNmsLogTable,nmsLogtable.
+    	EUpdatable);
+    CleanupClosePushL(nmsLogtable);
+    if( error!=KErrNone )
+	 	{
+	 	//if error we leave
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+	//data base begin 	
+    error = iNmsLogDb.Begin();
+    if( error!=KErrNone )
+	 	{
+	 	//if open fails function leaves
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+
+    //! arrange the presets in incresing order of index
+    nmsLogtable.SetIndex(KNmsLogIndex);
+    nmsLogtable.Reset();
+    nmsLogtable.FirstL();
+    while(nmsLogtable.AtRow())
+	    {
+	    //deleting all the rows in the table
+	    nmsLogtable.GetL();
+	    nmsLogtable.DeleteL();
+		nmsLogtable.FirstL();
+	    }
+	//saving the change
+	CleanupStack::PopAndDestroy(&nmsLogtable);
+    iNmsLogDb.Commit();
+    CloseDb();	
+    IRLOG_DEBUG( "CIRNmsLogDb::DeleteAllNmsLogL - Exiting." );
+	}   
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::ConstructL()
+// Standard 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogDb::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::ConstructL" );
+	User::LeaveIfError(iFsSession.Connect());
+	IRLOG_DEBUG( "CIRNmsLogDb::ConstructL- Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::CloseDb()
+// Closes the database 
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogDb::CloseDb()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::CloseDb" );
+	iNmsLogDb.Close();
+	IRLOG_DEBUG( "CIRNmsLogDb::CloseDb - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function : CreateNmsLogTableL
+// creates NmsLogtable with two column one is NmsLogid and rest of NmsLog
+// log data
+// ---------------------------------------------------------------------------
+//NmsLogTable
+//---------------------------
+//| KID   |	 KNmsLogCol |
+//---------------------------
+//|TInt32 | EDbColLongText8 |
+//---------------------------
+//
+void CIRNmsLogDb::CreateNmsLogTableL()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogTableL" );
+	//start time of NmsLog
+	TDbCol nmsLogid(KID, EDbColInt32);
+	nmsLogid.iAttributes = TDbCol::ENotNull; 
+	
+    //!this column is used to store preset data
+    //!The column stores a potentially large amount of non-Unicode text data.
+    TDbCol nmsLogcol(KNmsLogCol, EDbColLongText8);
+   	nmsLogcol.iAttributes = TDbCol::ENotNull; 
+   	
+	CDbColSet* nmsLogcolset = CDbColSet::NewLC();
+	nmsLogcolset->AddL(nmsLogid);
+	nmsLogcolset->AddL(nmsLogcol);
+
+	// Create the NmsLoglog table with two columns
+	
+	User::LeaveIfError(iNmsLogDb.CreateTable(KNmsLogTable,
+		 *nmsLogcolset));
+	
+	//Create the KeyIndex for the table
+	CreateNmsLogIndexL();
+	CleanupStack::PopAndDestroy(nmsLogcolset);
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogTableL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CreateNmsLogIndexL
+// sets NmsLogid as the primary key
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogDb::CreateNmsLogIndexL()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogIndexL" );
+	TDbKeyCol nmsLogid(KID);
+	CDbKey* index = CDbKey::NewLC();
+	index->AddL(nmsLogid);
+	User::LeaveIfError(iNmsLogDb.CreateIndex( KNmsLogIndex, KNmsLogTable,
+		*index));
+	CleanupStack::PopAndDestroy(index);
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogIndexL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::OpenDbL()
+// opening the data base 
+// ---------------------------------------------------------------------------
+//
+ void CIRNmsLogDb::OpenDbL()
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::OpenDbL" );
+	CloseDb();
+	TInt error = KErrNone;
+	if( !BaflUtils::FileExists(iFsSession, iDbFile) )
+	    {
+	    //if file doesn't exist function leaves with error code
+	    //KErrNotFound
+	    error = KErrNotFound;
+	    User::LeaveIfError(error);
+	    }
+
+	error = iNmsLogDb.Open(iFsSession,iDbFile);	
+	if( error!=KErrNone )
+		{
+		//if database is failed to open then 
+		//function leaves
+		IRLOG_ERROR2( "CIRNmsLogDb::OpenDbL - Opening NmsLog database failed (%d)", error );
+		User::LeaveIfError(error);
+		}
+	if( iNmsLogDb.IsDamaged() || !iNmsLogDb.InTransaction() )
+		{
+		//if data base is damaged then 
+		//it tried to recover
+		//if recovery is not possible function leaves
+		error = iNmsLogDb.Recover();
+		if ( KErrNone == error)
+			{
+			//if recovered data base is compacted
+			error = iNmsLogDb.Compact();	
+			}
+	    User::LeaveIfError(error);	
+		}
+	IRLOG_DEBUG( "CIRNmsLogDb::OpenDbL - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRNmsLogDb::CreateDbL()
+// Creates both the dbms files 
+// calls CreateFavMasterTableL(),CreateFavUrlTableL
+// database filename
+// ---------------------------------------------------------------------------
+//
+ void CIRNmsLogDb::CreateDbL(TFileName& aNmsLog)
+	{
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateDbL" );
+	CloseDb();
+	TInt error = iNmsLogDb.Replace(iFsSession,aNmsLog);
+	if ( error != KErrNone )
+	    {
+	    IRLOG_ERROR2( "CIRNmsLogDb::CreateDbL - Creating NmsLog database failed (%d)", error );
+	    }
+	User::LeaveIfError(error);
+	CreateNmsLogTableL();
+	IRLOG_DEBUG( "CIRNmsLogDb::CreateDbL - Exiting." );
+	}
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionlogsrc/irnmslogger.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irdebug.h"
+#include "irreportsettings.h"
+#include "irnmslogger.h"
+
+//const TInt KMaxUrlLength = 256
+
+// ============================== Function declaration =======================
+
+// ---------------------------------------------------------------------------
+// Function: NewL
+// Two phase constructor returns the instance of CIRNmsLogger
+// ---------------------------------------------------------------------------
+//
+CIRNmsLogger* CIRNmsLogger::NewL()
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::NewL" );
+	CIRNmsLogger* self = CIRNmsLogger::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNmsLogger::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function: NewLC
+// Two phase constructor creates the instance of CIRNmsLogger
+// ---------------------------------------------------------------------------
+//
+CIRNmsLogger* CIRNmsLogger::NewLC()
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::NewLC" );
+	CIRNmsLogger* self = new (ELeave) CIRNmsLogger;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRNmsLogger::NewLC - Exiting." );
+	return self;
+	}	
+
+// ---------------------------------------------------------------------------
+// Function: ~CIRNmsLogger
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRNmsLogger::~CIRNmsLogger()	
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConstructL
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::ConstructL()		
+	{
+	//No implementation
+	//return;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CIRNmsLogger
+// default constructor
+// ---------------------------------------------------------------------------
+//
+CIRNmsLogger::CIRNmsLogger()	
+	{
+	//No implementation
+	}
+
+	
+// ---------------------------------------------------------------------------
+// Function: ResetResource
+// reset data from channel server
+// ---------------------------------------------------------------------------
+//	
+void CIRNmsLogger::ResetResource()
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::ResetResource" );
+	//reseting of resource
+	}
+
+
+	
+// ---------------------------------------------------------------------------
+// Function: UpdateChannelID
+// updates the channel id
+// ---------------------------------------------------------------------------
+//	
+void CIRNmsLogger::UpdateChannelID(TInt aChanneldID)
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::UpdateChannelID" );
+	iChannelId = aChanneldID;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateCurrentNetwork
+// updates the current network
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::UpdateCurrentNetwork(TInt aCurrentNetwork)
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::UpdateCurrentNetwork" );
+	iNmsCurrentNetwork = aCurrentNetwork;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateHomeOperator
+// updates the home network
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::UpdateHomeOperator(TInt aHomeOperator)
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::UpdateHomeOperator" );
+	iHomeOperator = aHomeOperator;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : UpdateNmsStartGMTTime
+// function updates Nms start time with current GMT time
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::UpdateNmsStartGMTTime()
+	{
+	iStartNmsTime.UniversalTime();	
+	}
+// ---------------------------------------------------------------------------
+// CIRNmsLogger: UpdateNmsType
+// updates the Nms type
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::UpdateNmsType(const TDesC& aNmsType)
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::UpdateNmsType" );
+	iNmsType.Copy(aNmsType);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ChannelID
+// returns the channel id
+// ---------------------------------------------------------------------------
+//	
+TInt CIRNmsLogger::ChannelID() const
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::ChannelID" );
+	return iChannelId;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CurrentNetwork
+// returns the Current Network
+// ---------------------------------------------------------------------------
+//	
+TInt CIRNmsLogger::CurrentNetwork() const
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::CurrentNetwork" );
+	return iNmsCurrentNetwork;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: HomeOperator
+// returns the home network
+// ---------------------------------------------------------------------------
+//
+TInt CIRNmsLogger::HomeOperator() const
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::HomeOperator" );
+	return iHomeOperator;
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function: StartTime
+// returns the start time
+// ---------------------------------------------------------------------------
+//	
+TDes& CIRNmsLogger::StartTime()
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::StartTime" );
+	return iStartTime;	
+	}
+// ---------------------------------------------------------------------------
+// Function: NmsLogId
+// returns the NmsLog id
+// ---------------------------------------------------------------------------
+//	
+TInt CIRNmsLogger::NmsLogId() const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::NmsLogId" );
+	return iNmsLogId;
+	}
+// ---------------------------------------------------------------------------
+// Function: NmsType
+// returns the Nms type
+// ---------------------------------------------------------------------------
+//	
+TDesC& CIRNmsLogger::NmsType()
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::ConnectionType" );
+	return iNmsType;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: FileName
+// returns file name
+// ---------------------------------------------------------------------------
+//
+TFileName CIRNmsLogger::FileName()
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::FileName" );
+	return iFilePath;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: DateTime
+// returns Nms start time
+// ---------------------------------------------------------------------------
+//
+TTime CIRNmsLogger::DateTime()
+	{
+	return iStartNmsTime;	
+	}
+	
+
+	
+// ---------------------------------------------------------------------------
+// Function: GetBackedUp
+// Back up the Nms log of a Nms
+// ---------------------------------------------------------------------------
+//	
+void CIRNmsLogger::GetBackedUp( CIRNmsLogger& aNms )
+	{
+	//Nms start time
+	iStartNmsTime = aNms.DateTime();
+	//start time 
+	iStartTime.Copy( aNms.StartTime() );
+	//channel id
+	iChannelId = aNms.ChannelID();
+	//home operator
+	iHomeOperator = aNms.HomeOperator();
+	//current network
+	iNmsCurrentNetwork = aNms.CurrentNetwork();
+	// Newly added	
+	ResetResource();
+	}
+			
+// ---------------------------------------------------------------------------
+// Function: ExternalizeL
+// externialize the stream to the given stream
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::ExternalizeL(RWriteStream& aWriteStream)
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::ExternalizeL" );
+	TInt length;
+	//start time
+	length = iStartTime.Length();
+	aWriteStream.WriteInt32L(length);
+	aWriteStream.WriteL(iStartTime,length);
+	
+	//channel id
+	aWriteStream.WriteInt32L(iChannelId);
+
+	//Type
+	length = iNmsType.Length();
+	aWriteStream.WriteInt32L(length);
+	aWriteStream.WriteL(iNmsType,length);
+	
+	//current network
+	aWriteStream.WriteInt32L(iNmsCurrentNetwork);
+	
+	//home operator
+	aWriteStream.WriteInt32L(iHomeOperator);
+
+	IRLOG_DEBUG( "CIRNmsLogger::ExternalizeL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: InternalizeL
+// gets the data from the stream
+// ---------------------------------------------------------------------------
+//
+void CIRNmsLogger::InternalizeL(RReadStream& aReadStream)
+	{
+	IRLOG_DEBUG( "CIRNmsLogger::InternalizeL" );
+	TInt length;
+	
+	//Start Time
+	length = aReadStream.ReadInt32L();
+	aReadStream.ReadL(iStartTime,length);
+	
+	
+	//Channel Id
+	iChannelId = aReadStream.ReadInt32L();
+
+	//Nms Type
+	length = aReadStream.ReadInt32L();
+	aReadStream.ReadL(iNmsType,length);
+
+	//Nms Current Network
+	iNmsCurrentNetwork = aReadStream.ReadInt32L();
+	
+	//Home Operator
+	iHomeOperator = aReadStream.ReadInt32L();
+			
+	IRLOG_DEBUG( "CIRNmsLogger::InternalizeL - Exiting." );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionlogsrc/irphoneinfo.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:  ?Description
+*
+*/
+
+
+#include "irphoneinfo.h"
+#include "mirphoneinfoobserver.h"
+
+// ---------------------------------------------------------------------------
+// Function: NewL
+// ---------------------------------------------------------------------------
+//
+CPhoneInfo* CPhoneInfo::NewL(MIRPhoneInfoObserver* aObserver)
+    {
+    CPhoneInfo* self = new(ELeave) CPhoneInfo(aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Function: ~CPhoneInfo
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CPhoneInfo::~CPhoneInfo()
+    {
+    Cancel();
+    delete iTelephony;
+    iTelephony = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Function: StartUpdatingL
+// ---------------------------------------------------------------------------
+//
+void CPhoneInfo::StartUpdating()
+    {
+    // Retrieves the model information and unique identification of the mobile device.
+    if(!IsActive() && iTelephony)
+        {    
+        iTelephony->GetPhoneId(iStatus, iPhoneIdV1Pckg);
+        SetActive();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Function: CPhoneInfo
+// default constructor
+// ---------------------------------------------------------------------------
+//
+CPhoneInfo::CPhoneInfo(MIRPhoneInfoObserver* aObserver)
+    : CActive(EPriorityLow),
+      iPhoneIdV1Pckg(iPhoneIdV1),
+      iTelephony(NULL),
+      iObserver(aObserver)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Function: ConstructL
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CPhoneInfo::ConstructL()
+    {
+    iTelephony = CTelephony::NewL();
+    CActiveScheduler::Add(this);
+    }
+
+// ---------------------------------------------------------------------------
+// Function: RunL
+// From CActive
+// ---------------------------------------------------------------------------
+//
+void CPhoneInfo::RunL()
+    {
+    if(NULL != iObserver)
+        {
+        if(KErrNone == iStatus.Int())
+            {
+            TRAP_IGNORE(iObserver->ImeiUpdatedL(iPhoneIdV1.iSerialNumber));
+            }
+        else
+            {
+            TRAP_IGNORE(iObserver->ImeiUpdatedL(KNullDesC));
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Function: DoCancel
+// From CActive
+// ---------------------------------------------------------------------------
+//
+void CPhoneInfo::DoCancel()
+    {
+    // Cancels an outstanding asynchronous request.
+    if(IsActive() && iTelephony)
+        {    
+        iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionlogsrc/irsessiondb.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,449 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <bautils.h>
+
+#include "irdebug.h" 
+#include "irsessiondb.h"
+#include "irsessionloggerutility.h"
+
+_LIT(KSessionTable,"Session"); 
+_LIT(KID,"id");
+_LIT(KSessionLogCol,  "SessionData");
+_LIT(KSessionIndex,"SessionIndex");
+
+const TInt KMaxNoSession = 15;
+
+
+// ======== LOCAL FUNCTIONS ========
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Function : NewL()
+// two phased construction
+// ---------------------------------------------------------------------------
+//
+  CIRSessionDb* CIRSessionDb::NewL()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::NewL" );
+	CIRSessionDb* self;
+	self=CIRSessionDb::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRSessionDb::NewL - Exiting." );
+	return self;
+	}
+ 
+ 
+// ---------------------------------------------------------------------------
+// Function : NewLC()
+// Two phased construction
+// ---------------------------------------------------------------------------
+//
+  CIRSessionDb* CIRSessionDb::NewLC()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::NewLC" );
+	CIRSessionDb *self;
+	self=new(ELeave)CIRSessionDb;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRSessionDb::NewLC - Exiting." );
+	return self;
+	}
+ 
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb::~CIRSessionDb()
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRSessionDb::~CIRSessionDb()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::~CIRSessionDb" );
+	CloseDb();
+	iFsSession.Close();
+	IRLOG_DEBUG( "CIRSessionDb::~CIRSessionDb - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb::CreateDbConditional()
+// Creates both the dbms files conditionally(only if not yet created)
+// calls CreateDbL()
+// ---------------------------------------------------------------------------
+//
+ TInt CIRSessionDb::CreateDbConditional(TFileName &aSession)
+	{
+	IRLOG_DEBUG( "CIRSessionDb::CreateDbConditional" );
+	iDbFile.Copy(aSession);
+	if( !BaflUtils::FileExists(iFsSession, iDbFile) )
+		{
+		TRAPD(error,CreateDbL(iDbFile));
+		if( error )
+			{
+			IRLOG_DEBUG( "CIRSessionDb::CreateDbConditional - Exiting (1)." );
+			return error;
+			}	
+		}
+	IRLOG_DEBUG( "CIRSessionDb::CreateDbConditional - Exiting (2)." );
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb:AddSessionStartL()
+// adds the session log entry into data base
+// ---------------------------------------------------------------------------
+//
+void CIRSessionDb::AddSessionStartL(CIRSessionLogger& aSession)
+	{
+	IRLOG_DEBUG( "CIRSessionDb::AddSessionStartL" );
+	OpenDbL();
+	RDbTable sessionlogtable;
+	TInt error=sessionlogtable.Open(iSessionDb,KSessionTable,sessionlogtable.
+		EUpdatable);
+	CleanupClosePushL(sessionlogtable);
+	if( error )
+		{
+		CloseDb();
+		User::LeaveIfError(error);	
+		}
+	
+	//! arrange the presets in incresing order of index
+	sessionlogtable.SetIndex(KSessionIndex);
+	sessionlogtable.Reset();
+
+	//if session log is greater or equal to than 5
+	if( sessionlogtable.CountL() >= KMaxNoSession )
+		{
+		//first row is selected
+		sessionlogtable.FirstL();
+		//the current row is selected
+		sessionlogtable.GetL();
+		//delete that entry
+		sessionlogtable.DeleteL();
+		}	
+    CleanupStack::PopAndDestroy(&sessionlogtable);
+	//Algorithm : else condition need not handle seperatly
+	//Algorithm : add sessionid and informations like
+	//starttime,connectedfrom,sessionid,connectiontype,channelid
+	//currentnetwork,homenetwork,sessiontable 
+	//Algorithm: if no. of session is greater than 5
+
+	_LIT(query,"SELECT * FROM %S");	
+    HBufC* sqlStr=HBufC::NewLC(query().Length() + KSessionTable().Length());
+	sqlStr->Des().Format(query,&KSessionTable);
+	
+	// Create a view on the database
+    RDbView view;     
+    error = view.Prepare(iSessionDb,*sqlStr);
+    if( error )
+		{
+		CloseDb();
+		User::LeaveIfError(error);	
+		}
+    CleanupStack::PopAndDestroy(sqlStr);     
+    CleanupClosePushL(view);
+    error = view.EvaluateAll();
+    if( error )
+		{
+		CloseDb();
+		User::LeaveIfError(error);	
+		}
+    CDbColSet* columns = view.ColSetL();
+    CleanupStack::PushL(columns);
+    
+    RDbColWriteStream writeStream;
+	TRAP(error,//trap start
+	   // Insert a row. Column order matches sql select statement
+	    view.InsertL();
+		//get index
+		view.SetColL(columns->ColNo(KID), aSession.SessionId());	
+		//!open stream
+		writeStream.OpenLC(view,columns->ColNo(KSessionLogCol));
+		aSession.ExternalizeL(writeStream);
+		writeStream.CommitL();
+		CleanupStack::PopAndDestroy(&writeStream);
+ 		);
+ 		
+ 	CleanupStack::PopAndDestroy(columns);
+ 	if( error!=KErrNone )
+	 	{
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+	view.PutL();
+ 	CleanupStack::PopAndDestroy(&view);
+ 	CloseDb();
+ 	IRLOG_DEBUG( "CIRSessionDb::AddSessionStartL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb::GetAllPresetL()
+// gets all the preset into an array 
+// ---------------------------------------------------------------------------
+//
+void CIRSessionDb::GetAllSessionL(
+	CArrayPtrFlat<CIRSessionLogger>& aSessionDataList)
+	{
+	IRLOG_DEBUG( "CIRSessionDb::GetAllSessionL" );
+	OpenDbL();
+	//not sure about this resetanddestroy
+	 //! Open for preset master
+	aSessionDataList.ResetAndDestroy();	    
+	//! temp item for holding the retrived data
+	CIRSessionLogger *item;
+	RDbColReadStream instream;    
+	RDbTable table;
+	TInt error = table.Open(iSessionDb, KSessionTable, table.EReadOnly);
+	CleanupClosePushL(table);
+	if( error!=KErrNone )
+	 	{
+	 	//if open fails function leaves
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+
+	CDbColSet* colSet = table.ColSetL();
+	CleanupStack::PushL(colSet);
+
+	//! arrange the presets in incresing order of index
+	table.SetIndex(KSessionIndex);
+	table.Reset();
+	//! recursively retrive the preset data from the master table
+	for (table.FirstL(); table.AtRow(); table.NextL())
+	    {
+	    item=CIRSessionLogger::NewL();
+	    CleanupStack::PushL(item);
+	    table.GetL();
+	    instream.OpenLC( table, colSet->ColNo( KSessionLogCol ) );
+		item->InternalizeL(instream);
+		//update sessionid
+	    aSessionDataList.AppendL(item);
+	    CleanupStack::PopAndDestroy(&instream);
+	    CleanupStack::Pop(item);
+	    }
+	    
+	CleanupStack::PopAndDestroy(colSet);
+	//!close the master table
+	CleanupStack::PopAndDestroy(&table);
+	CloseDb();
+	IRLOG_DEBUG( "CIRSessionDb::GetAllSessionL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : DeleteAllSession
+// delete all the session from session log entry
+// ---------------------------------------------------------------------------
+//
+void CIRSessionDb::DeleteAllSessionL()
+	{ 
+	IRLOG_DEBUG( "CIRSessionDb::DeleteAllSessionL" ); 
+	//opening a data base 
+	OpenDbL();
+	RDbTable sessionlogtable;
+	//data base table opened
+    TInt error=sessionlogtable.Open(iSessionDb,KSessionTable,sessionlogtable.
+    	EUpdatable);
+    CleanupClosePushL(sessionlogtable);
+    if( error!=KErrNone )
+	 	{
+	 	//if error we leave
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+	//data base begin 	
+    error = iSessionDb.Begin();
+    if( error!=KErrNone )
+	 	{
+	 	//if open fails function leaves
+	 	CloseDb();
+	 	User::LeaveIfError(error);
+	 	}
+
+    //! arrange the presets in incresing order of index
+    sessionlogtable.SetIndex(KSessionIndex);
+    sessionlogtable.Reset();
+    sessionlogtable.FirstL();
+    while(sessionlogtable.AtRow())
+	    {
+	    //deleting all the rows in the table
+	    sessionlogtable.GetL();
+	    sessionlogtable.DeleteL();
+		sessionlogtable.FirstL();
+	    }
+	//saving the change
+	CleanupStack::PopAndDestroy(&sessionlogtable);
+    iSessionDb.Commit();
+    CloseDb();	
+    IRLOG_DEBUG( "CIRSessionDb::DeleteAllSessionL - Exiting." );
+	}   
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb::ConstructL()
+// Standard 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRSessionDb::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::ConstructL" );
+	User::LeaveIfError(iFsSession.Connect());
+	IRLOG_DEBUG( "CIRSessionDb::ConstructL- Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb::CloseDb()
+// Closes the database 
+// ---------------------------------------------------------------------------
+//
+void CIRSessionDb::CloseDb()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::CloseDb" );
+	iSessionDb.Close();
+	IRLOG_DEBUG( "CIRSessionDb::CloseDb - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function : CreateSessionTableL
+// creates sessionlogtable with two column one is sessionid and rest of session
+// log data
+// ---------------------------------------------------------------------------
+//SessionTable
+//---------------------------
+//| KID   |	 KSessionLogCol |
+//---------------------------
+//|TInt32 | EDbColLongText8 |
+//---------------------------
+//
+void CIRSessionDb::CreateSessionTableL()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::CreateSessionTableL" );
+	//start time of session
+	TDbCol sessionid(KID, EDbColInt32);
+	sessionid.iAttributes = TDbCol::ENotNull; 
+	
+    //!this column is used to store preset data
+    //!The column stores a potentially large amount of non-Unicode text data.
+    TDbCol sessionlogcol(KSessionLogCol, EDbColLongText8);
+   	sessionlogcol.iAttributes = TDbCol::ENotNull; 
+   	
+	CDbColSet* sessionlogcolset = CDbColSet::NewLC();
+	sessionlogcolset->AddL(sessionid);
+	sessionlogcolset->AddL(sessionlogcol);
+
+	// Create the sessionlog table with two columns
+	
+	User::LeaveIfError(iSessionDb.CreateTable(KSessionTable,
+		 *sessionlogcolset));
+	
+	//Create the KeyIndex for the table
+	CreateSessionIndexL();
+	CleanupStack::PopAndDestroy(sessionlogcolset);
+	IRLOG_DEBUG( "CIRSessionDb::CreateSessionTableL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CreateSessionIndexL
+// sets sessionid as the primary key
+// ---------------------------------------------------------------------------
+//
+void CIRSessionDb::CreateSessionIndexL()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::CreateSessionIndexL" );
+	TDbKeyCol sessionid(KID);
+	CDbKey* index = CDbKey::NewLC();
+	index->AddL(sessionid);
+	User::LeaveIfError(iSessionDb.CreateIndex( KSessionIndex, KSessionTable,
+		*index));
+	CleanupStack::PopAndDestroy(index);
+	IRLOG_DEBUG( "CIRSessionDb::CreateSessionIndexL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRSessionDb::OpenDbL()
+// opening the data base 
+// ---------------------------------------------------------------------------
+//
+ void CIRSessionDb::OpenDbL()
+	{
+	IRLOG_DEBUG( "CIRSessionDb::OpenDbL" );
+	CloseDb();
+	TInt error = KErrNone;
+	if( !BaflUtils::FileExists(iFsSession, iDbFile) )
+	    {
+	    //if file doesn't exist function leaves with error code
+	    //KErrNotFound
+	    error = KErrNotFound;
+	    User::LeaveIfError(error);
+	    }
+
+	error = iSessionDb.Open(iFsSession,iDbFile);	
+	if( error!=KErrNone )
+		{
+		//if database is failed to open then 
+		//function leaves
+		IRLOG_ERROR2( "CIRSessionDb::OpenDbL - Opening session database failed (%d)", error );
+		User::LeaveIfError(error);
+		}
+	if( iSessionDb.IsDamaged() || !iSessionDb.InTransaction() )
+		{
+		//if data base is damaged then 
+		//it tried to recover
+		//if recovery is not possible function leaves
+		error = iSessionDb.Recover();
+		if ( KErrNone == error)
+			{
+			//if recovered data base is compacted
+			error = iSessionDb.Compact();	
+			}
+	    User::LeaveIfError(error);	
+		}
+	IRLOG_DEBUG( "CIRSessionDb::OpenDbL - Exiting." );
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRSessionDb::CreateDbL()
+// Creates both the dbms files 
+// calls CreateFavMasterTableL(),CreateFavUrlTableL
+// database filename
+// ---------------------------------------------------------------------------
+//
+ void CIRSessionDb::CreateDbL(TFileName& aSession)
+	{
+	IRLOG_DEBUG( "CIRSessionDb::CreateDbL" );
+	CloseDb();
+	TInt error = iSessionDb.Replace(iFsSession,aSession);
+	if ( error != KErrNone )
+	    {
+	    IRLOG_ERROR2( "CIRSessionDb::CreateDbL - Creating session database failed (%d)", error );
+	    }
+	User::LeaveIfError(error);
+	CreateSessionTableL();
+	IRLOG_DEBUG( "CIRSessionDb::CreateDbL - Exiting." );
+	}
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionlogsrc/irsessionlogger.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1224 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <coemain.h>
+#include <ezgzip.h>
+#include <sysutil.h>
+#include <utf.h>
+#include <etel3rdparty.h>
+#include <imcvcodc.h>
+#include "irdebug.h"
+#include "irreportsettings.h"
+#include "irsessiondb.h"
+#include "irsessionlogger.h"
+#include "irsessionloggerutility.h"
+#include "irsettings.h"
+#include "irnmslogdb.h"
+#include "irnmslogger.h"
+#include "irdbstatusobserver.h"
+#include "irphoneinfo.h"
+
+const TUint KFieldPosition = 5;
+const TInt KAmpMaxLength = 5;
+const TInt KFormatBuffMaxLength = 6;
+const TInt KMaxUrlSize = 256;
+
+const TUint KSessionLogGranularity = 4;
+const TUint KNmsLogGranularity = 5;
+
+const TUint KSessionLogThreshold = 5; // Session Log Maximum 15
+const TUint KNmsLogThreshold = 5;     // Nms Log Maximum 15
+
+// ---------------------------------------------------------------------------
+// Function: OpenL
+// Two phase constructor returns the instance of CIRReportGenerator
+// this is a single ton implementation
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRReportGenerator* CIRReportGenerator::OpenL()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::OpenL" );
+    CIRReportGenerator* reportGenerator = reinterpret_cast<CIRReportGenerator*>(Dll::Tls());
+    
+    if (reportGenerator)
+        {
+        User::LeaveIfError(reportGenerator->Open());
+	    IRLOG_INFO( "CIRReportGenerator::OpenL - Opened singleton for new user." );
+        }
+    else
+        {
+        reportGenerator = new (ELeave) CIRReportGenerator;
+        CleanupClosePushL(*reportGenerator);
+        reportGenerator->ConstructL();
+        User::LeaveIfError(Dll::SetTls(reportGenerator));
+        CleanupStack::Pop(reportGenerator);
+	    IRLOG_INFO( "CIRSessionLogger::OpenL - Created the CIRReportGenerator singleton." );
+        }
+	IRLOG_DEBUG( "CIRReportGenerator::OpenL - Exiting." );
+    return reportGenerator;
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function: ~CIRReportGenerator
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRReportGenerator::~CIRReportGenerator()	
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::~CIRReportGenerator" );
+	
+	delete iImeiBase64;
+	iImeiBase64 = NULL;
+	
+	delete iPhoneInfo;
+	iPhoneInfo = NULL;
+	
+	//operation settings instance is removed
+	if( iSettingsData )
+		{
+		iSettingsData->Close(); // delete is handled like this.
+		}
+	
+	delete iSessionLog;
+	delete iNmsLog;
+	
+	delete iLogSessionDb;
+	delete iNmsLogDb;
+	
+	//session data is also removed
+	if (iSessionData)
+	    {
+	    iSessionData->ResetAndDestroy();
+	    }
+	delete iSessionData;
+	
+	//NmsLog data is also removed
+	if (iNmsLogData)
+	    {
+	    iNmsLogData->ResetAndDestroy();
+	    }
+	delete iNmsLogData;
+    
+	iBrowseLog.Close(); //browse log array is closed
+	iLogFile.Close();
+	//file session is closed
+	iFsSession.Close();
+	delete iPreviousSessionLog;
+	delete iPreviousNmsLog;
+	Dll::FreeTls();
+	IRLOG_DEBUG( "CIRReportGenerator::~CIRReportGenerator - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConstructL
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//	
+void CIRReportGenerator::ConstructL()		
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::ConstructL" );
+	iSessionEndCalled = 0;
+	//file session is connected
+	//Create the IROperation Settings Instance
+	iSettingsData = CIRSettings::OpenL();
+	
+	User::LeaveIfError(iFsSession.Connect());
+	
+	//session logger is created
+	iSessionLog = CIRSessionLogger::NewL();
+   	//session logger is created
+	iNmsLog = CIRNmsLogger::NewL();
+	
+    //session db is created
+    iLogSessionDb = CIRSessionDb::NewL();
+    //NmsLog db is created
+    iNmsLogDb = CIRNmsLogDb::NewL();
+    
+    iSessFile =iSettingsData->PrivatePath();
+	iSessFile.Append(KSession);
+  	TInt error = iLogSessionDb->CreateDbConditional(iSessFile);
+	if ( error )
+		{
+		iSessionDbCreationFailed = ETrue;
+		}
+	else
+		{
+		iSessionDbCreationFailed = EFalse;	
+		}
+  
+    iNmsLogFile =iSettingsData->PrivatePath();
+	iNmsLogFile.Append(KNmsLog);
+  	TInt nmsError = iNmsLogDb->CreateDbConditional(iNmsLogFile);
+	if ( nmsError )
+		{
+		iNmsDbCreationFailed = ETrue;
+		}
+	else
+		{
+		iNmsDbCreationFailed = EFalse;	
+		}
+  
+  	//session log for five session are to be stored
+  	//and is stored in session data  	
+	iSessionData = new (ELeave) CArrayPtrFlat<CIRSessionLogger>(KSessionLogGranularity);
+	iNmsLogData = new (ELeave) CArrayPtrFlat<CIRNmsLogger>(KNmsLogGranularity);
+		
+	iPhoneInfo = CPhoneInfo::NewL(this);
+	iPhoneInfo->StartUpdating();
+	
+	IRLOG_DEBUG( "CIRReportGenerator::ConstructL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CIRReportGenerator
+// default constructor
+// ---------------------------------------------------------------------------
+//
+CIRReportGenerator::CIRReportGenerator():iPhoneInfo(NULL),
+                                         iDbStatusObserver(NULL),
+                                         iNmsLogDbUpdated(EFalse),
+                                         iSessionLogDbUpdated(EFalse),
+                                         iUnComfirmedReportSent(EFalse),
+                                         iSessionLogUpdationFailed(EFalse),
+                                         iNmsLogUpdationFailed(EFalse),
+                                         iSessionDbCreationFailed(EFalse),
+                                         iNmsDbCreationFailed(EFalse),
+                                         iImeiBase64(NULL)
+	{
+	//No Implementation	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: LogServerResult
+// logs server connection result
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::LogServerResult(const TDesC& aUrl,TResponse aResult)	
+	{
+	iSessionLog->LogServerResult(aUrl,aResult);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: LogSongRecog
+// logs song recog
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::LogSongRecog()  
+    {
+    //taking the session start time in GMT    
+    iSongRecogTimestamp.UniversalTime();
+    TTimeIntervalSeconds offset(iSettingsData->TimeCorrection());
+    iSongRecogTimestamp -= offset;
+    iDate = iSongRecogTimestamp.DateTime();
+    TBuf<64> songRecogTimestamp;
+    FormatDateTime(songRecogTimestamp,iDate);
+    iSessionLog->LogSongRecog(songRecogTimestamp);
+    }
+
+// ---------------------------------------------------------------------------
+// Function: UpdateCurrentBrowseNetwork
+// logs network browsing
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateCurrentBrowseNetwork(TInt aNetwork)
+	{
+	iCurrentBrowseNetwork = aNetwork;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: LogBrowse
+// logs browse url and status information
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CIRReportGenerator::LogBrowse(const TDesC8& aUrl,TInt aStatus)	
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::LogBrowse" );
+	//browse url is copied
+	iRBrowseLog.iBrowseUrl.Copy(aUrl);
+	//time stamp in GMT is onbtained
+	iBrowseLogTimeStamp.UniversalTime();
+
+	TInt time_val = 0;
+    time_val = iSettingsData->TimeCorrection();
+	TTimeIntervalSeconds offset(time_val);
+
+	iBrowseLogTimeStamp -= offset;
+	iDate = iBrowseLogTimeStamp.DateTime();
+	//formated
+	FormatDateTime(iRBrowseLog.iTimeStamp,iDate);
+	_LIT(KFormat,"%d");
+	(iRBrowseLog.iCurrentNetwork).Format(KFormat,
+									iCurrentBrowseNetwork);	
+	//status is stored
+	iRBrowseLog.iStatus = aStatus;
+	TRAP_IGNORE(iBrowseLog.AppendL(iRBrowseLog))
+	IRLOG_DEBUG( "CIRReportGenerator::LogBrowse - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: SessionStartedL
+// starts a new session
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::SessionStartedL()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL" );
+	//gets the session id for new session
+	iSessionLog->ResetResource();
+	
+	iSessionLog->UpdateSessionId(iSettingsData->GetLogRunningNo());
+	iSettingsData->SetLogRunningNoL();
+	iFileWritePos = 0;	
+	
+	iLogFilePath = iSettingsData->PrivatePath();
+	iLogFilePath.Append(KLogFileName);
+    //taking the session start time in GMT    
+	iSessionStartTime.UniversalTime();
+	iSessionLog->UpdateSessionStartGMTTime();
+	TTimeIntervalSeconds offset(iSettingsData->TimeCorrection());
+	iSessionStartTime -= offset;
+	iDate = iSessionStartTime.DateTime();
+	FormatDateTime(iSessionLog->StartTime(),iDate);
+	iSessionLog->UnMarkSession();
+	//collect the neccessary information	
+	CollectSettingsData();
+	iSessionLogUpdationFailed = EFalse;
+	//start adding the intial information in db	
+	IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL - Exiting." );	
+	}
+// ---------------------------------------------------------------------------
+// Function: NmsLogStartedL
+// starts a new nmslog
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::NmsLogStartedL()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL" );
+	iNmsTimestamp.UniversalTime();
+	TInt time_val = 0;
+	time_val = iSettingsData->TimeCorrection();
+	TTimeIntervalSeconds offset(time_val);
+
+	iNmsTimestamp -= offset;
+	iDate = iNmsTimestamp.DateTime();
+	//formated
+	FormatDateTime(iNmsLog->StartTime(),iDate);	
+	iNmsLogUpdationFailed = EFalse;
+	//start adding the intial information in db	
+	IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: SessionEnd
+// marks the a session
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::SessionEndL( TBool aForcedTermination )
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::SessionEndL" );
+	iSessionEndCalled++;
+	//session end
+	if( aForcedTermination )
+		{
+		//forced ending of session log
+		ForcedSessionEndedL();
+		}
+	else
+		{
+		//unforced ending of session log
+		iSessionLog->EndLogging();
+		UnForceSessionEndedL(iSessionLog);	
+		}	
+
+	IRLOG_DEBUG( "CIRReportGenerator::SessionEndL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateTerminatedBy
+// updates the termination status
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateTerminatedBy(TTerminationStatus 
+	aTerminatedBy)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateTerminatedBy" );
+	iSessionLog->UpdateTerminationStatus(aTerminatedBy);		
+	}
+
+// ---------------------------------------------------------------------------
+// Function: GetConnectedFrom
+// connected information is stored
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CIRReportGenerator::UpdateConnectedFrom(TConnectedFrom aConnectedFrom)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateConnectedFrom" );
+	iSessionLog->GetConnectedFrom(aConnectedFrom);
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: BrowseUrl
+// logs browse url and result
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::BrowseUrl(const TDesC& aBrowseUrl,
+													TInt aStatus)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::BrowseUrl" );
+	_LIT(KAmp,"&amp;");
+	TBuf8<KAmpMaxLength> amp;
+	amp.Copy(KAmp);	
+	TBuf8<KMaxUrlSize> url;
+	url.Copy(aBrowseUrl);
+	_LIT8(KAmpnd,"&");
+	TInt pos = url.Find(KAmpnd);
+	if(pos > 0)
+		{
+		url.Replace(pos,1,amp);	
+		}
+	LogBrowse(url,aStatus);
+	IRLOG_DEBUG( "CIRReportGenerator::BrowseUrl - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateChannelID
+// updates the channel id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateChannelID(TInt aChanneldID)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateChannelID" );
+	iSessionLog->UpdateChannelID(aChanneldID);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateCurrentNetwork
+// updates the current network
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateCurrentNetwork(TInt aCurrentNetwork)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateCurrentNetwork" );
+	iSessionLog->UpdateCurrentNetwork(aCurrentNetwork);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateHomeOperator
+// updates the home network
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateHomeOperator(TInt aHomeOperator)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateHomeOperator" );
+	iSessionLog->UpdateHomeOperator(aHomeOperator);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: MarkSessionStart
+// updates the termination status
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::MarkSessionStart()
+	{
+	iSessionStartTime.UniversalTime();
+
+	TInt time_val = 0;
+	time_val = iSettingsData->TimeCorrection();
+	TTimeIntervalSeconds offset(time_val);
+	
+	iSessionStartTime -= offset; 
+	iDate = iSessionStartTime.DateTime();
+	FormatDateTime(iSessionLog->StartTime(),iDate);
+	//setting session start time
+	iSessionLog->UpdateSessionStartGMTTime();
+	iSessionLog->MarkSession();		
+	if( iPreviousSessionLog )
+		{
+		//if previous session exist it added to the log
+		TRAP_IGNORE( UnForceSessionEndedL(iPreviousSessionLog) )
+		delete iPreviousSessionLog;
+		iPreviousSessionLog = NULL;	
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Function: HandleStopEvents
+// function handles session state changes
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::HandleStopEvents(TBool aIsSessionProgressing )
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::HandleStopEvents" );
+	if( !aIsSessionProgressing )
+		{
+		iSessionLog->HandleStopEvents();
+		}
+	else
+		{
+		iSessionLog->HandleStartEvents();
+		}
+	IRLOG_DEBUG( "CIRReportGenerator::HandleStopEvents - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ReStorePreviousSession
+// restore the previous session
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRReportGenerator::ReStorePreviousSession()
+	{
+	if( iPreviousSessionLog )
+		{
+		//if previous session exist that is restored
+		//ETrue is returned.
+		iSessionLog->GetBackedUp(*iPreviousSessionLog);
+		delete iPreviousSessionLog;
+		iPreviousSessionLog = NULL;
+		return ETrue;	
+		}
+	else
+		{
+		//if previous session doesn't exist EFalse is returned
+		return EFalse;	
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateConnectionType
+// updates the connection type
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateConnectionType(const TDesC& 
+	aConnectionType)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateConnectionType" );
+	iSessionLog->UpdateConnectionType(aConnectionType);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateNmsType
+// updates the connection type
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateNmsType(const TDesC& aNmsType)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateNmsType" );
+	iNmsLog->UpdateNmsType(aNmsType);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: SetDbStatusObserser
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::SetDbStatusObserser(MIRLogDbStatusObserver *aDbStatusObserver)
+{
+    iDbStatusObserver = aDbStatusObserver;
+}	
+
+// ---------------------------------------------------------------------------
+// Function: reportSent
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::ReportSent()
+{
+    iUnComfirmedReportSent = ETrue;
+}	
+
+
+// ---------------------------------------------------------------------------
+// Function : ReponseFromISDSObtained
+// This function is called when session log is successfully sent
+// removes all session log entries from sessiondb
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::ReponseFromISDSObtained()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::ReponseFromISDSObtained" );
+	iUnComfirmedReportSent = EFalse;
+	TRAP_IGNORE(iLogSessionDb->DeleteAllSessionL())
+	TRAP_IGNORE(iNmsLogDb->DeleteAllNmsLogL())
+	for(TInt i = 0; i < iBrowseLogsCntToXml; i++)
+		{
+		if(iBrowseLog.Count() > 0)
+			iBrowseLog.Remove(0);
+		}
+	}	
+
+// ---------------------------------------------------------------------------
+// Function: CollectSettingsData
+// collect information during starting of session
+// like irid, version information.
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::CollectSettingsData()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::CollectSettingsData" );
+	_LIT(KData,"1.0");
+	_LIT(KIRID,"NO IRID");
+	
+	
+
+		//gets irid from opsetting
+		TRAP_IGNORE( iIRId.Copy(iSettingsData->GetIRIDL()) );
+		//if length of irid is zero "no irid" is assigned
+		if((iIRId).Length() == 0)
+			{
+			iIRId.Copy(KIRID);
+			}
+		//version copied
+		iReportVersion.Copy(KData);
+	IRLOG_DEBUG( "CIRReportGenerator::CollectSettingsData - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: WriteToXmlL
+// gathers the information and generates sesion log file and zip file
+// file will be stored in private path
+// ---------------------------------------------------------------------------
+//	
+void CIRReportGenerator::WriteToXmlL()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::WriteToXmlL" );	
+	//1. log file is created
+    User::LeaveIfError(iLogFile.Replace(iFsSession,iLogFilePath,EFileWrite));	
+	iLogFile.Seek(ESeekStart,iFileWritePos);
+	
+	
+    //2. Write file header.
+    iUniCodeBuf.Copy(KXmlHeader);
+    CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);	
+	WriteBufferToLogFile();
+	
+	//3. Write Version + IRID + IMEI
+	iUniCodeBuf.Copy(KRPSTARTTAG);
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	//3.1 Write Version
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,iReportVersion);
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	//3.2 Write IRID
+	RBuf tempIRID;
+	TRAP_IGNORE( tempIRID.Create(iSettingsData->GetIRIDL()) );
+	if((tempIRID).Length() != 0)
+		{
+		iIRId.Copy(tempIRID);
+		}
+	tempIRID.Close();
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,iIRId);
+    //3.3 Write IMEI
+	iFileWritePos = iUniCodeBuf.Find(KField);
+	if(NULL == iImeiBase64)
+	    {
+	    iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,KNullDesC);
+	    }
+	else
+	    {
+	    iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,*iImeiBase64);	    
+	    }    
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	WriteBufferToLogFile();
+	
+	//4. Write session log
+	if(!iSessionLogUpdationFailed)
+		{
+		for(TInt count = 0; count<(iSessionData->Count()); count++)
+			{
+			WriteSessionData(count);		
+			}
+		}
+	
+	//5. Write browse log			
+	WriteBrowseLog();
+
+	//6. Write nms log  
+	if(!iNmsLogUpdationFailed)
+		{
+		iUniCodeBuf.Copy(KNMSLOGSTARTTAG);
+		CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+		WriteBufferToLogFile();
+
+		for(TInt count = 0; count<(iNmsLogData->Count()); count++)
+			{
+			WriteNmsLogData(count);		
+			}
+		iUniCodeBuf.Copy(KNMSLOGENDTAG);
+		CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+		WriteBufferToLogFile();		
+		}
+
+	//7. Write file ending
+	iUniCodeBuf.Copy(KRPENDTAG);
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	WriteBufferToLogFile();
+	
+	iLogFile.Close();
+	ZipFileL();
+	
+	iBrowseLogsCntToXml = iBrowseLog.Count();
+	
+	IRLOG_DEBUG( "CIRReportGenerator::WriteToXmlL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// Function: WriteNmsLogtoXmlL
+// logs nmsEvents to Xml file
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::WriteNmsLogtoXmlL()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogtoXmlL" );
+	if(iSessionEndCalled == 0)
+		{
+		ForcedSessionEndedL();
+		iSessionEndCalled++;
+		}
+	iNmsEventFlag = ETrue;
+	UnForceSessionEndedL(iSessionLog);
+	iNmsEventFlag = EFalse;
+	IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogtoXmlL - Leaving" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: WriteSessionData
+// gathers session log data and writes to XML file
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::WriteSessionData(TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::WriteSessionData" );
+	
+	ASSERT( aIndex >= 0 && aIndex < iSessionData->Count() );
+	TBuf<KFormatBuffMaxLength> FormatBuff;
+	_LIT(KConvert,"%d");
+	
+	// 1. session start time is copied
+	iUniCodeBuf.Copy(KSESSIONSTARTTAG);
+	iFileWritePos =	iUniCodeBuf.Find(KField);	
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+		At(aIndex))->StartTime());
+	
+	// 2. session duration is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);	
+	TInt duration = (iSessionData->At(aIndex))->SessionDuration();
+	FormatBuff.Format(KConvert,duration);
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+	
+	// 3. termination status is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+		At(aIndex))->TerminationStatus());
+	
+	// 4. connected from information is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+		At(aIndex))->ConnectedFrom());
+	
+	// 5. session id is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->SessionId());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+	
+	// 6. channel id is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->ChannelID());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	
+	WriteBufferToLogFile();
+		
+	// 8. Write ServerResult    
+	TInt ServerResultCount = (iSessionData->At(aIndex))->
+		SessionData().Count();
+	for(TInt count=0; count < ServerResultCount;count++)
+		{
+		//channel server urls are copied for the session			
+		iUniCodeBuf.Copy(KSERVERRESULTTAG);
+		iFileWritePos =	iUniCodeBuf.Find(KField);
+		iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+		At(aIndex)->SessionData()[count].iServerUrl));
+			
+		//status is copied
+		iFileWritePos =	iUniCodeBuf.Find(KField);
+		iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+			At(aIndex)->SessionData()[count].iServerResult));
+		CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+		//writting the information to the xml file	
+		WriteBufferToLogFile();
+		}
+    
+	// 9. connection type is copied
+	iUniCodeBuf.Copy(KCONNECTIONTAG);
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+		At(aIndex))->ConnectionType());
+	
+	// 10. current network is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->
+			CurrentNetwork());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+	
+    // 11. home operator is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->HomeOperator());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	
+	WriteBufferToLogFile();
+	
+    // 12. Write Song Recog Log
+    iUniCodeBuf.Copy(KSONGRECOGLOGSTARTTAG);	
+    CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+    WriteBufferToLogFile();	
+	
+    TInt songRecogLogCount = (iSessionData->At(aIndex))->
+        SongRecogLog().Count();
+    for(TInt count=0; count < songRecogLogCount; count++)
+        {        
+        iUniCodeBuf.Copy(KSONGRECOGEVENTTAG);
+        iFileWritePos = iUniCodeBuf.Find(KField);
+        iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
+        At(aIndex)->SongRecogLog()[count].iTimeStamp));
+        CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+        WriteBufferToLogFile();
+        }
+
+    iUniCodeBuf.Copy(KSONGRECOGLOGENDTAG);
+    CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+    WriteBufferToLogFile();
+    
+    // write ending tag </session>
+	iUniCodeBuf.Copy(KSESSIONENDTAG);
+	//tags are also written into xml file
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	WriteBufferToLogFile();
+	IRLOG_DEBUG( "CIRReportGenerator::WriteSessionData - Exiting." );			
+	}	
+
+// ---------------------------------------------------------------------------
+// Function: WriteBrowseLog
+// gathers browse log data and writes to XML file
+// ---------------------------------------------------------------------------
+//	
+ void CIRReportGenerator::WriteBrowseLog()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::WriteBrowseLog" );
+	//browse log
+	//browse log tag is written
+	iUniCodeBuf.Copy(KBROWSESTARTTAG);
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	WriteBufferToLogFile();
+	for(TInt count = 0; count < (iBrowseLog.Count());count++)
+		{
+		//browse log url is copied				
+		iUniCodeBuf.Copy(KBROWSETAG);
+		iFileWritePos =	iUniCodeBuf.Find(KField);
+		iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,
+			(iBrowseLog).operator[](count).iBrowseUrl);
+		iFileWritePos =	iUniCodeBuf.Find(KField);
+		//browse log time stamp is copied
+		iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,
+			(iBrowseLog).operator[](count).iTimeStamp);
+		iFileWritePos =	iUniCodeBuf.Find(KField);
+		//browse log current network is copied
+		iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,
+			(iBrowseLog).operator[](count).iCurrentNetwork);
+	    CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	    //browse log is written to xml
+		WriteBufferToLogFile();
+		}
+	
+	//browse log end tag is copied	
+	iUniCodeBuf.Copy(KBROWSEENDTAG);
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	WriteBufferToLogFile();
+	IRLOG_DEBUG( "CIRReportGenerator::WriteBrowseLog - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ZipFileL
+// generates the zip file from the input xml file
+// output file is in gzip format and is stored in private path
+// ---------------------------------------------------------------------------
+//	
+ void CIRReportGenerator::ZipFileL()
+ 	{
+ 	IRLOG_DEBUG( "CIRReportGenerator::ZipFileL" );
+ 	//input file is the xml file in private path and output is a gzip file stored 
+ 	//private path
+ 	//xml file
+	RFile iplogfile;
+	//getting path of zip file
+	TFileName gzipfilepath = iSessionLog->FileName();
+	gzipfilepath.Append(KGZipLogFileName);
+	
+		iLogFilePath = iSettingsData->PrivatePath();
+		iLogFilePath.Append(KLogFileName);
+
+	//input file is opened
+	TInt error = iplogfile.Open(iFsSession,iLogFilePath,EFileStream | EFileRead);
+	CleanupClosePushL( iplogfile );
+	
+	if( KErrNone != error )
+		{
+		User::LeaveIfError(error);	
+		}
+	
+	//generating zip file
+	
+	TInt fileSize(0);
+	TInt err = iplogfile.Size( fileSize );
+	
+	if(!err)
+		{	
+		TParse zipParse;
+		zipParse.Set( iLogFilePath, NULL, NULL );
+		
+		TPtrC zipDrive = zipParse.Drive();
+		
+		TChar driveChar = zipDrive[0];
+		TInt driveNum(0);
+		RFs::CharToDrive( driveChar, driveNum );
+		
+		TDriveInfo driveInfo;
+		TInt driveErr = iplogfile.Drive( driveNum, driveInfo );
+	       if( !driveErr
+	    	&& driveNum != EDriveZ
+	    	&& !SysUtil::DiskSpaceBelowCriticalLevelL(
+	    			 &CCoeEnv::Static()->FsSession(), iUTF8Buffer.Size(), driveNum ) )
+			{
+			// disk space is not below critical level
+			// Next generate the zip file
+			CEZFileToGZip* zip = CEZFileToGZip::NewLC(iFsSession,gzipfilepath, iplogfile);
+ 	while(zip->DeflateL())
+		{
+		}
+	CleanupStack::PopAndDestroy(zip);
+			}
+		else
+			{
+			// disk space is below critical level
+			// Do not generate the zip file
+			}
+		}
+
+	//file is closed 
+	CleanupStack::PopAndDestroy(); // iplogfile
+	IRLOG_DEBUG( "CIRReportGenerator::ZipFileL - Exiting." );	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: FormatDateTime
+// formats the date time given in "%d-%d-%d %d:%d:%d GMT\n" format
+// copies the result to a descriptor
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::FormatDateTime(TDes& aBuffer,TDateTime aDateTime)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::FormatDateTime" );          
+	_LIT(KFormatTxt,"%d-%d-%d %d:%d:%d GMT\n");
+    aBuffer.Format(KFormatTxt,aDateTime.Year(),TInt(aDateTime.Month()+1), 
+		//Format the month as a TInt to preserve locale independence
+        //aDateTime.Day()+1, 
+        aDateTime.Day()+1, 
+        // Day and month ranges begin at zero (0-30 and 0-11), 
+        // so add one when formatting
+        aDateTime.Hour(), aDateTime.Minute(), aDateTime.Second()
+        //aDateTime.MicroSecond()
+        );
+    IRLOG_DEBUG( "CIRReportGenerator::FormatDateTime - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: WriteBufferToLogFile
+// Writes the content of iUTF8Buffer to iLogFile
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::WriteBufferToLogFile()
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::WriteBufferToLogFile" );   
+	// Get the drive where iLogFile is located.
+
+	TInt driveNumber(0);
+	TDriveInfo driveInfo;
+	
+	TInt err = iLogFile.Drive( driveNumber, driveInfo );
+
+	// Write the log file only if:
+	// Drive was fetched successflly,
+	// the drive is not Z
+	// and free disk space is not below critical level (128kB)
+
+	if( !err && driveNumber!=EDriveZ )
+		{
+		TBool ret = ETrue;
+	    TRAP_IGNORE( ret = SysUtil::DiskSpaceBelowCriticalLevelL( 
+	    &CCoeEnv::Static()->FsSession(),iUTF8Buffer.Size(), driveNumber ))
+	    if( !ret )
+			{
+			iLogFile.Write( iUTF8Buffer );
+			}
+		else
+			{
+			// Do not write the session log.
+			}
+		}
+	else
+		{
+		// Do not write the session log.
+		}
+	IRLOG_DEBUG( "CIRReportGenerator::WriteBufferToLogFile - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UnForceSessionEndedL
+// Handles Unforced end of the session
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::UnForceSessionEndedL( CIRSessionLogger* aSession )
+	{
+	// 1. retrieve session log from db
+	if(iSessionDbCreationFailed)
+		{
+		iSessionLogUpdationFailed = ETrue;	
+		}
+	else
+		{
+		if(iNmsEventFlag)
+			{
+			TRAPD(error,
+			//count is stored	
+			iLogSessionDb->GetAllSessionL(*iSessionData);
+			);
+			if(error)
+				{
+				iSessionLogUpdationFailed = ETrue;	
+				}	
+			}
+		else
+			{
+			TRAPD( error,
+                    //loads the information into the db at the end of the session
+                    iLogSessionDb->AddSessionStartL(*aSession);
+                    //count is stored	
+                    iLogSessionDb->GetAllSessionL(*iSessionData);
+                 );
+            if(error)
+                {
+                iSessionLogUpdationFailed = ETrue;	
+                }	
+            else
+			    {
+                TInt count = iSessionData->Count();
+                if((count>0) && (count%KSessionLogThreshold == 0))
+                    {
+                    iSessionLogDbUpdated = ETrue;
+                    }
+                }
+			}
+		}
+
+    // 2. retrieve nms log from db	
+	if(iNmsDbCreationFailed)
+		{
+		iNmsLogUpdationFailed = ETrue;	
+		}
+	else
+		{
+		if(!iNmsEventFlag)
+			{
+			TRAPD( error, iNmsLogDb->GetAllNmsLogL(*iNmsLogData) );
+			if(error)
+				{
+				iNmsLogUpdationFailed = ETrue;	
+				}	
+			}
+		else
+			{
+			TRAPD( error,
+                    //loads the information into the db at the end of the session
+                    iNmsLogDb->AddNmsLogStartL(*iNmsLog);
+                    //count is stored	
+                    iNmsLogDb->GetAllNmsLogL(*iNmsLogData);
+                 );
+			if(error)
+				{
+				iNmsLogUpdationFailed = ETrue;	
+				}
+            else
+                {
+                TInt count = iNmsLogData->Count();
+                if((count>0) && (count%KNmsLogThreshold == 0))
+                    {
+                    iNmsLogDbUpdated = ETrue;
+                    }
+                }
+			}
+		}
+
+	//xml file is created and is zipped
+	WriteToXmlL();
+	
+	if( iDbStatusObserver && 
+	       ( iNmsLogDbUpdated ||
+	         iSessionLogDbUpdated ||
+	         iUnComfirmedReportSent
+	       )
+	  )
+	    {
+	  	iDbStatusObserver->LogDbNeedFlush();
+	  	iNmsLogDbUpdated = EFalse;
+	  	iSessionLogDbUpdated = EFalse;
+	    }
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ForcedSessionEndedL
+// Handles forced end of the session
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::ForcedSessionEndedL()
+	{
+	iSessionLog->EndLogging();
+	iPreviousSessionLog = CIRSessionLogger::NewL();
+	iPreviousSessionLog->GetBackedUp(*iSessionLog);
+	iPreviousNmsLog = CIRNmsLogger::NewL();
+	iPreviousNmsLog->GetBackedUp(*iNmsLog);
+	}
+
+/**
+ * The following methods are for Nms Event Usage Logging 
+ */
+// ---------------------------------------------------------------------------
+// Function: UpdateNmsCurrentNetwork
+// logs network during Music Store launching
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateNmsCurrentNetwork(TInt aNetwork)
+	{
+	iNmsLog->UpdateCurrentNetwork(aNetwork);
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: UpdateNmsHomeOperator
+// logs network during Music Store Launching
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateNmsHomeOperator(TInt aNetwork)
+	{
+	iNmsLog->UpdateHomeOperator(aNetwork);
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: UpdateNmsChannelID
+// updates the channel id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRReportGenerator::UpdateNmsChannelID(TInt aChanneldID)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::UpdateNmsChannelID" );
+	iNmsLog->UpdateChannelID(aChanneldID);
+	}
+
+// ---------------------------------------------------------------------------
+// Function: WriteNmsLogData
+// gathers Nmslog data and writes to XML file
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::WriteNmsLogData(TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogData" );
+	TBuf<KFormatBuffMaxLength> FormatBuff;
+	_LIT(KConvert,"%d");
+
+	//NmsEvent Tag is written
+	iUniCodeBuf.Copy(KNMSEVENTTAG);
+
+	iFileWritePos =	iUniCodeBuf.Find(KField);	
+	//Nms Event timestamp is copied
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iNmsLogData->
+	At(aIndex))->StartTime());
+
+	//channel id is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+    ASSERT( aIndex >= 0 && aIndex < iNmsLogData->Count() );
+	FormatBuff.Format(KConvert,(iNmsLogData->At(aIndex))->ChannelID());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+
+	//type is copied
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iNmsLogData->
+	At(aIndex))->NmsType());
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+
+	//current network is copied
+	ASSERT( aIndex >= 0 && aIndex < iNmsLogData->Count() );
+	FormatBuff.Format(KConvert,(iNmsLogData->At(aIndex))->
+	CurrentNetwork());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+	iFileWritePos =	iUniCodeBuf.Find(KField);
+
+	//home operator is copied
+	ASSERT( aIndex >= 0 && aIndex < iNmsLogData->Count() );
+	FormatBuff.Format(KConvert,(iNmsLogData->At(aIndex))->HomeOperator());
+	iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
+
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
+	//writting the information to the xml file	
+	WriteBufferToLogFile();
+
+	IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogData - Exiting." );
+	}	
+
+// ---------------------------------------------------------------------------
+// Function: ImeiUpdated
+// From MIRPhoneInfoObserver
+// ---------------------------------------------------------------------------
+//
+void CIRReportGenerator::ImeiUpdatedL(const TDesC& aImei)
+    {
+    if(0 == aImei.Length())
+        {
+        iPhoneInfo->StartUpdating();
+        return;
+        }
+    // prepare base64 codec input
+    HBufC8 *imei = HBufC8::NewLC( aImei.Length() );
+    TPtr8 imeiPtr = imei->Des();    
+    imeiPtr.Copy(aImei);
+    
+    // prepare base64 codec output
+    HBufC8 *buffer = HBufC8::NewLC( aImei.Length() * 2 );
+    TPtr8 bufferPtr = buffer->Des();
+    
+    // Encoding
+    TImCodecB64 base64Codec;
+    base64Codec.Initialise();
+    base64Codec.Encode(*imei, bufferPtr);
+    
+    // store to data member
+    if(NULL == iImeiBase64)
+        {
+        iImeiBase64 = HBufC16::NewL( aImei.Length() * 2 );
+        }
+    TPtr imeiBase64Ptr = iImeiBase64->Des();
+    imeiBase64Ptr.Copy(bufferPtr);
+    
+    CleanupStack::PopAndDestroy(buffer);
+    CleanupStack::PopAndDestroy(imei);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/sessionlogsrc/irsessionloggerutility.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,832 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "irdebug.h"
+#include "irreportsettings.h"
+#include "irsessionloggerutility.h"
+
+const TInt KMaxUrlLength = 256;
+const TInt KMaxTimeStampLength = 64;
+
+// ============================== Function declaration =======================
+
+// ---------------------------------------------------------------------------
+// Function: NewL
+// Two phase constructor returns the instance of CIRSessionLogger
+// ---------------------------------------------------------------------------
+//
+CIRSessionLogger* CIRSessionLogger::NewL()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::NewL" );
+	CIRSessionLogger* self = CIRSessionLogger::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRSessionLogger::NewL - Exiting." );
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function: NewLC
+// Two phase constructor creates the instance of CIRSessionLogger
+// ---------------------------------------------------------------------------
+//
+CIRSessionLogger* CIRSessionLogger::NewLC()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::NewLC" );
+	CIRSessionLogger* self = new (ELeave) CIRSessionLogger;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRSessionLogger::NewLC - Exiting." );
+	return self;
+	}	
+
+// ---------------------------------------------------------------------------
+// Function: ~CIRSessionLogger
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRSessionLogger::~CIRSessionLogger()	
+	{
+	iRServer.Reset();
+	iRServer.Close();	
+	iRSongRecogLog.Reset();
+	iRSongRecogLog.Close();	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConstructL
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::ConstructL()		
+	{
+	//No implementation
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CIRSessionLogger
+// default constructor
+// ---------------------------------------------------------------------------
+//
+CIRSessionLogger::CIRSessionLogger()	
+	{
+	//No implementation
+	}
+
+// ---------------------------------------------------------------------------
+// Function: EndLogging
+// logs the termination condition
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::EndLogging()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::EndLogging" );	
+	if( iSessionMarked )
+		{
+		HandleStopEvents();
+		}
+	else
+		{
+		iDuration = 0;	
+		}
+	switch(iTerminateBy)
+		{
+		case EUserTerminated:
+			{
+			//error condition for termination is disconnected by the user
+			iTerminatedBy.Copy(KUSER);
+			break;
+			}
+		case ENoConnectionToServer:
+			{
+			//error condition for termination is no connection to server			
+			iTerminatedBy.Copy(KNOCONNECTIONTOSERVER);
+			break;
+			}
+		case ENoConnectionToNetwork:
+			{
+			//error condition for termination is no connection to network
+			iTerminatedBy.Copy(KNOCONNECTIONTONETWORK);
+			break;
+			}
+		default:
+			{
+			break;	
+			}								
+		}
+	IRLOG_DEBUG( "CIRSessionLogger::EndLogging - Exiting." );		
+	}
+
+	
+// ---------------------------------------------------------------------------
+// Function: HandleStopEvents
+// logs the termination condition
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::HandleStartEvents()
+	{
+	if( !iIsSessionProgressing )
+		{
+		iActiveSessionTime.UniversalTime();
+		iIsSessionProgressing = ETrue;
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: HandleStartEvents
+// logs the termination condition
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::HandleStopEvents()
+	{
+	if( iIsSessionProgressing )
+		{
+		TTime endtime;	
+		//endtime has session end time in GMT format
+		endtime.UniversalTime();
+		//session duration compensation value is calculated 
+		//as difference between Compensation Time [time when it stopped] and
+		//end time
+		TTimeIntervalSeconds timeelaspsed;
+		endtime.SecondsFrom(iActiveSessionTime,timeelaspsed);
+		//compensation value session duration is converted to integer
+		iDuration += timeelaspsed.Int();
+		iIsSessionProgressing = EFalse;
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: MarkSession
+// Marks the start of a session
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::MarkSession()
+	{
+	iSessionMarked = ETrue;	
+	iDuration = 0;
+	HandleStartEvents();
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UnMarkSession
+// UnMarks the start of a sessiom
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UnMarkSession()
+	{
+	iSessionMarked = EFalse;	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: SessionMarked
+// Returns the session mark flag
+// ---------------------------------------------------------------------------
+//	
+TBool CIRSessionLogger::SessionMarked()
+	{
+	return iSessionMarked;	
+	}	
+// ---------------------------------------------------------------------------
+// Function: ResetResource
+// reset data from channel server
+// ---------------------------------------------------------------------------
+//	
+void CIRSessionLogger::ResetResource()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::ResetResource" );
+	//reseting of resource
+	iRServer.Reset();
+	iRSongRecogLog.Reset();
+	}
+// ---------------------------------------------------------------------------
+// Function: IsSessionProgressing
+// checks whether session is progressing or not
+// ---------------------------------------------------------------------------
+//
+TBool CIRSessionLogger::IsSessionProgressing()
+	{
+	return iIsSessionProgressing;	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: CompensationTime
+// Returns the session mark flag
+// ---------------------------------------------------------------------------
+//	
+TTime CIRSessionLogger::CompensationTime()
+	{
+	return iActiveSessionTime;	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: LogServerResult
+// logs server connection result
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::LogServerResult(const TDesC& aUrl,TResponse aResponse)
+	{
+	IRLOG_INFO3( "CIRSessionLogger::LogServerResult - %S (%d)", &aUrl, aResponse );
+	TIRServer tempServer;
+	if( aUrl.Length() <= KMaxUrlLength )
+		{
+		//channel server url is copied
+		tempServer.iServerUrl.Copy(aUrl);
+		}
+	switch(aResponse)
+		{
+		//connected to the channel server
+		case EIRConnected:
+			{
+			tempServer.iServerResult.Copy(KConnected);
+			}
+			break;
+		//not connected to channel server
+		//since server is not responding
+		case EIRFull:
+			{
+			tempServer.iServerResult.Copy(KFull);
+			}
+			break;
+		//not connected to channel server
+		//since connection time out 	
+		case EIRConnTimeOut:
+			{
+			tempServer.iServerResult.Copy(KConnTimeOut);
+			}
+			break;
+		//not connected to channel server (may be invalid urls)
+		case EIRConnFailed:
+			{
+			tempServer.iServerResult.Copy(KConnectionFailed);
+			}
+			break;
+		default:
+			{
+			break;	
+			}	
+		}
+	UpdateSessionLog(tempServer);
+	IRLOG_DEBUG( "CIRSessionLogger::LogServerResult - Exiting." );			
+	}
+
+// ---------------------------------------------------------------------------
+// Function: LogSongRecog
+// logs song recog
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::LogSongRecog(const TDesC& aTimeStamp)
+    {
+    if( aTimeStamp.Length() <= KMaxTimeStampLength )
+        {
+        TIRSongRecogLog tempSongRecogLog;
+        tempSongRecogLog.iTimeStamp.Copy(aTimeStamp);   
+        TRAP_IGNORE(iRSongRecogLog.AppendL(tempSongRecogLog));
+        }    
+
+    }
+
+// ---------------------------------------------------------------------------
+// Function: GetConnectedFrom
+// connected information is stored
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::GetConnectedFrom(TConnectedFrom aConnectedFrom)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::GetConnectedFrom" );
+	switch(aConnectedFrom)
+		{
+		case EIRIsds:
+			{
+			iConnectedFrom.Copy(KISDS);
+			break;
+			}
+		case EIRPresetAdhoc:
+			{
+			iConnectedFrom.Copy(KPRESETADHOC);
+			break;
+			}
+		case EIRPresetIsds:
+			{
+			iConnectedFrom.Copy(KPRESETISDS);
+			break;
+			}
+        case EIRHistoryAdhoc:
+            {
+            iConnectedFrom.Copy(KHISTORYADHOC);
+            break;
+            }
+        case EIRHistoryIsds:
+            {
+            iConnectedFrom.Copy(KHISTORYISDS);
+            break;
+            }
+        case EIRAdhocManual:
+            {
+            iConnectedFrom.Copy(KADHOCMANUAL);
+            break;
+            }
+        case EIRAdhocExternal:
+            {
+            iConnectedFrom.Copy(KADHOCEXTERNAL);
+            break;
+            }            
+		default:
+			{
+			break;	
+			}									
+		}
+	IRLOG_DEBUG( "CIRSessionLogger::GetConnectedFrom - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateSessionLog
+// update the session logs
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateSessionLog(TIRServer& aServer)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateSessionLog" );
+
+    TBool found = EFalse;
+
+    // Only one entry per URL may be in the session log.
+	for ( TInt i = 0; i < iRServer.Count() && !found; i++ )
+	    {
+        TIRServer& server = iRServer[i];
+        if ( server.iServerUrl == aServer.iServerUrl )
+            {
+            // If an entry for this URL already exists, it is replaced
+            // by the newer status code.
+            server = aServer;
+            found = ETrue;
+            }
+	    }
+	
+	if ( !found )
+	    {
+    	// Creates a new entry into the session log for this URL.
+    	TRAP_IGNORE(iRServer.AppendL(aServer))	
+	    }
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function: UpdateSessionId
+// updates the session id
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateSessionId(TInt aSessionId)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateSessionId" );
+	iSessionId = aSessionId;	
+	}
+
+	
+// ---------------------------------------------------------------------------
+// Function: UpdateTerminationStatus
+// updates the termination status
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateTerminationStatus(TTerminationStatus aTerminatedBy)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateTerminationStatus" );
+	iTerminateBy = aTerminatedBy;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateChannelID
+// updates the channel id
+// ---------------------------------------------------------------------------
+//	
+void CIRSessionLogger::UpdateChannelID(TInt aChanneldID)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateChannelID" );
+	iChannelId = aChanneldID;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateCurrentNetwork
+// updates the current network
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateCurrentNetwork(TInt aCurrentNetwork)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateCurrentNetwork" );
+	iSessionCurrentNetwork = aCurrentNetwork;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateHomeOperator
+// updates the home network
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateHomeOperator(TInt aHomeOperator)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateHomeOperator" );
+	iHomeOperator = aHomeOperator;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: UpdateConnectionType
+// updates the connection type
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateConnectionType(const TDesC& aConnectionType)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::UpdateConnectionType" );
+	iSessionConnectionType.Copy(aConnectionType);
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : UpdateSessionStartGMTTime
+// function updates session start time with current GMT time
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::UpdateSessionStartGMTTime()
+	{
+	iStartSessionTime.UniversalTime();	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: TerminationStatus
+// returns termination status
+// ---------------------------------------------------------------------------
+//
+TDesC& CIRSessionLogger::TerminationStatus()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::TerminationStatus" );
+	return iTerminatedBy;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ChannelID
+// returns the channel id
+// ---------------------------------------------------------------------------
+//	
+TInt CIRSessionLogger::ChannelID() const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::ChannelID" );
+	return iChannelId;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: CurrentNetwork
+// returns the Current Network
+// ---------------------------------------------------------------------------
+//	
+TInt CIRSessionLogger::CurrentNetwork() const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::CurrentNetwork" );
+	return iSessionCurrentNetwork;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: HomeOperator
+// returns the home network
+// ---------------------------------------------------------------------------
+//
+TInt CIRSessionLogger::HomeOperator() const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::HomeOperator" );
+	return iHomeOperator;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConnectionType
+// returns the connection type
+// ---------------------------------------------------------------------------
+//	
+TDesC& CIRSessionLogger::ConnectionType()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::ConnectionType" );
+	return iSessionConnectionType;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: StartTime
+// returns the start time
+// ---------------------------------------------------------------------------
+//	
+TDes& CIRSessionLogger::StartTime()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::StartTime" );
+	return iStartTime;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: ConnectionType
+// returns the connection type
+// ---------------------------------------------------------------------------
+//	
+TDesC& CIRSessionLogger::ConnectedFrom()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::ConnectedFrom" );
+	return iConnectedFrom;
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: SessionId
+// returns the session id
+// ---------------------------------------------------------------------------
+//	
+TInt CIRSessionLogger::SessionId() const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::SessionId" );
+	return iSessionId;
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: SessionDuration
+// returns the duration of the session
+// ---------------------------------------------------------------------------
+//	
+TInt CIRSessionLogger::SessionDuration() const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::SessionDuration" );
+	return iDuration;
+	}
+
+// ---------------------------------------------------------------------------
+// Function: FileName
+// returns file name
+// ---------------------------------------------------------------------------
+//
+TFileName CIRSessionLogger::FileName()
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::FileName" );
+	return iFilePath;	
+	}
+
+// ---------------------------------------------------------------------------
+// Function: DateTime
+// returns session start time
+// ---------------------------------------------------------------------------
+//
+TTime CIRSessionLogger::DateTime()
+	{
+	return iStartSessionTime;	
+	}
+	
+
+// ---------------------------------------------------------------------------
+//  Function: SessionData
+//  function returns instance session log array
+// ---------------------------------------------------------------------------
+//
+const RArray<TIRServer>& CIRSessionLogger::SessionData()const
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::SessionData" );
+	return iRServer;	
+	}
+
+// ---------------------------------------------------------------------------
+//  Function: SongRecogLog
+//  function returns instance song recog log array
+// ---------------------------------------------------------------------------
+//
+const RArray<TIRSongRecogLog>& CIRSessionLogger::SongRecogLog()const
+    {
+    IRLOG_DEBUG( "CIRSessionLogger::SongRecogLog" );
+    return iRSongRecogLog;    
+    }
+
+// ---------------------------------------------------------------------------
+//  Function: DurationValue
+//  function returns duration value
+// ---------------------------------------------------------------------------
+//
+TTimeIntervalSeconds CIRSessionLogger::DurationValue()
+	{
+	return iDurationValue;	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: GetBackedUp
+// Back up the session log of a session
+// ---------------------------------------------------------------------------
+//	
+void CIRSessionLogger::GetBackedUp( CIRSessionLogger& aSession )
+	{
+	//copies the file path
+	iFilePath = aSession.FileName();
+	//session start time
+	iStartSessionTime = aSession.DateTime();
+	//duration 
+	iDurationValue = aSession.DurationValue();
+	//start time 
+	iStartTime.Copy( aSession.StartTime() );
+	//termination status
+	iTerminatedBy.Copy( aSession.TerminationStatus() );
+	//connected from information
+	iConnectedFrom.Copy( aSession.ConnectedFrom() );
+	//connection type
+	iSessionConnectionType.Copy( aSession.ConnectionType() );
+	//session duration
+	iDuration = aSession.SessionDuration();
+	//state of the player
+	iIsSessionProgressing = aSession.IsSessionProgressing();
+	//Compensation time
+	iActiveSessionTime = aSession.CompensationTime();
+	//session id
+	iSessionId = aSession.SessionId();
+	//channel id
+	iChannelId = aSession.ChannelID();
+	//home operator
+	iHomeOperator = aSession.HomeOperator();
+	//current network
+	iSessionCurrentNetwork = aSession.CurrentNetwork();
+	//session mark checking flag
+	iSessionMarked = aSession.SessionMarked();
+	
+	ResetResource();
+	//getting session data	
+	for(TInt iter = 0 ;iter < aSession.SessionData().Count(); iter++)
+		{
+		//session data
+		iRServer.Append(aSession.SessionData().operator[](iter));
+		}
+    //getting song recog log data  
+    for(TInt iter = 0 ;iter < aSession.SongRecogLog().Count(); iter++)
+        {
+        //song recog log data
+        iRSongRecogLog.Append(aSession.SongRecogLog().operator[](iter));
+        }	
+	}
+			
+// ---------------------------------------------------------------------------
+// Function: ExternalizeL
+// externialize the stream to the given stream
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::ExternalizeL(RWriteStream& aWriteStream)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::ExternalizeL" );
+	TInt length;
+	//start time
+	length = iStartTime.Length();
+	aWriteStream.WriteInt32L(length);
+	aWriteStream.WriteL(iStartTime,length);
+	
+	//connected from
+	length = iConnectedFrom.Length();
+	aWriteStream.WriteInt32L(length);
+	aWriteStream.WriteL(iConnectedFrom,length);
+	
+	//session id
+	aWriteStream.WriteInt32L(iSessionId);
+	
+	//connection type
+	length = iSessionConnectionType.Length();
+	aWriteStream.WriteInt32L(length);
+	aWriteStream.WriteL(iSessionConnectionType,length);
+	
+	//channel id
+	aWriteStream.WriteInt32L(iChannelId);
+	
+	//current network
+	aWriteStream.WriteInt32L(iSessionCurrentNetwork);
+	
+	//home operator
+	aWriteStream.WriteInt32L(iHomeOperator);
+	
+	//duration
+	aWriteStream.WriteInt32L(iDuration);
+	
+	//terminated by
+	length = iTerminatedBy.Length();
+	aWriteStream.WriteInt32L(length);
+	aWriteStream.WriteL(iTerminatedBy,length);
+	
+	//count
+	aWriteStream.WriteInt32L(iRServer.Count());
+	
+	//session duration
+	//Session Data
+	for(TInt iter=0;iter<iRServer.Count();iter++)
+		{
+		//channel Server Url;
+		length = iRServer[iter].iServerUrl.Length();
+		aWriteStream.WriteInt32L(length);
+		aWriteStream.WriteL(iRServer[iter].iServerUrl,length);	
+		//channel server result
+		length = iRServer[iter].iServerResult.Length();
+		aWriteStream.WriteInt32L(length);
+		aWriteStream.WriteL(iRServer[iter].iServerResult,length);
+		//count
+		aWriteStream.WriteInt32L(iRServer[iter].iCount);
+		}
+	
+    //count
+    aWriteStream.WriteInt32L(iRSongRecogLog.Count());
+    
+    //session duration
+    //Session Data
+    for(TInt iter=0;iter<iRSongRecogLog.Count();iter++)
+        {
+        //channel Server Url;
+        length = iRSongRecogLog[iter].iTimeStamp.Length();
+        aWriteStream.WriteInt32L(length);
+        aWriteStream.WriteL(iRSongRecogLog[iter].iTimeStamp,length);  
+        }	
+	IRLOG_DEBUG( "CIRSessionLogger::ExternalizeL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: InternalizeL
+// gets the data from the stream
+// ---------------------------------------------------------------------------
+//
+void CIRSessionLogger::InternalizeL(RReadStream& aReadStream)
+	{
+	IRLOG_DEBUG( "CIRSessionLogger::InternalizeL" );
+	TInt length;
+	
+	//Start Time
+	length = aReadStream.ReadInt32L();
+	aReadStream.ReadL(iStartTime,length);
+	
+	//Connected From	
+	length = aReadStream.ReadInt32L();
+	aReadStream.ReadL(iConnectedFrom,length);
+	
+	//Session Id
+	iSessionId=aReadStream.ReadInt32L();
+	
+	//Session Connection Type
+	length = aReadStream.ReadInt32L();
+	aReadStream.ReadL(iSessionConnectionType,length);
+	
+	//Channel Id
+	iChannelId = aReadStream.ReadInt32L();
+	
+	//Session Current Network
+	iSessionCurrentNetwork = aReadStream.ReadInt32L();
+	
+	//Home Operator
+	iHomeOperator = aReadStream.ReadInt32L();
+	
+	//Duration
+	iDuration = aReadStream.ReadInt32L();
+	
+	//Terminated By
+	length = aReadStream.ReadInt32L();
+	aReadStream.ReadL(iTerminatedBy,length);
+	
+	//count
+	TInt count = aReadStream.ReadInt32L();
+	//Session Data
+	iRServer.Reset();
+	for(TInt iter=0;iter<count;iter++)
+		{
+		TIRServer hold;
+		
+		//Server Url
+		length = aReadStream.ReadInt32L();
+		hold.iServerUrl.Zero();
+		aReadStream.ReadL(hold.iServerUrl,length);
+
+		//Server Result
+		length = aReadStream.ReadInt32L();
+		hold.iServerResult.Zero();
+		aReadStream.ReadL(hold.iServerResult,length);
+		
+		//Count
+		hold.iCount = aReadStream.ReadInt32L();
+		iRServer.Append(hold);
+		}
+
+    //count
+    count = aReadStream.ReadInt32L();	
+    //Song Recog Data
+    iRSongRecogLog.Reset();
+    for(TInt iter=0;iter<count;iter++)
+        {
+        TIRSongRecogLog hold;
+        
+        //Server Url
+        length = aReadStream.ReadInt32L();
+        hold.iTimeStamp.Zero();
+        aReadStream.ReadL(hold.iTimeStamp,length);
+        
+        iRSongRecogLog.Append(hold);
+        }
+    
+	IRLOG_DEBUG( "CIRSessionLogger::InternalizeL - Exiting." );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsinc/ircodecmanager.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2008 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:  Maintains the set of supported codecs 
+*
+*/
+
+
+#ifndef C_IRCODECMANAGER_H
+#define C_IRCODECMANAGER_H
+
+#include <sounddevice.h>
+
+/**
+ *  Maintains the list of supported codecs in a terminal.
+ * 
+ *
+ */
+NONSHARABLE_CLASS( CIRCodecManager ): public CBase, public MDevSoundObserver
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * @return Instance of CIRCodecManager
+     */
+    static CIRCodecManager* NewL();
+
+    /**
+     * Two-phased constructor.
+     * @return Instance of CIRCodecManager
+     */
+    static CIRCodecManager* NewLC();
+    
+    /**
+     * Destructor.
+     */
+    ~CIRCodecManager();
+
+    /**
+     * Tells if the codec provided as argument is supported by the terminal 
+     * and by Internet Radio.
+     * 
+     * @param aCodec The codec that's support is tested.
+     * @return ETrue if the codec is supported, EFalse if not.
+     */
+    TBool IsSupportedCodec( TFourCC aCodec ) const;
+    
+private:
+    /**
+     * C++ Default constructor.
+     */
+    CIRCodecManager();
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private: // From MDevSoundObserver
+    /**
+     * @see MDevSoundObserver::InitializeComplete
+     */
+    void InitializeComplete(TInt aError);
+    
+    /**
+     * @see MDevSoundObserver::ToneFinished
+     */
+    void ToneFinished(TInt aError);
+    
+    /**
+     * @see MDevSoundObserver::BufferToBeFilled
+     */
+    void BufferToBeFilled(CMMFBuffer* aBuffer);
+
+    /**
+     * @see MDevSoundObserver::PlayError
+     */
+    void PlayError(TInt aError);
+
+    /**
+     * @see MDevSoundObserver::BufferToBeEmptied
+     */
+    void BufferToBeEmptied(CMMFBuffer* aBuffer);
+
+    /**
+     * @see MDevSoundObserver::RecordError
+     */
+    void RecordError(TInt aError);
+
+    /**
+     * @see MDevSoundObserver::ConvertError
+     */
+    void ConvertError(TInt aError);
+
+    /**
+     * @see MDevSoundObserver::DeviceMessage
+     */
+    void DeviceMessage(TUid aMessageType, const TDesC8& aMsg);
+
+private:
+    /**
+     * Initialises the set of supported codecs.
+     */
+    void LoadSupportedCodecsL();
+
+    /**
+     * Checks that the codec is in the set of Internet Radio's supported codecs
+     * and verifies that DevSound can be initialised with the codec.
+     * 
+     * @param aCodec The codec to be tested.
+     * @return ETrue if the codec is really supported, EFalse otherwise.
+     */
+    TBool VerifySupportL( TFourCC aCodec );
+
+private: 
+    /**
+     * The set of codecs that are supported.
+     * Owned.
+     */
+    RArray<TFourCC> iSupportedDataTypes;
+    
+    };
+#endif // C_IRCODECMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsinc/irsettings.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,233 @@
+/*
+* 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 C_CIRSETTINGS_H
+#define C_CIRSETTINGS_H
+
+#include <etelmm.h>
+#include <f32file.h>
+#include <centralrepository.h>
+
+// CLEANUP REQUIRED
+
+const TInt KMaxLengthIAPID = 256;
+const TInt KMaxLengthIRAppVersion = 50;
+const TInt KMaxLengthIrId = 32;
+const TInt KMaxLengthSilencePeriod = 32;
+const TInt KMaxLengthUrl = 500;
+const TInt KMaxLengthFileName = 500;
+
+// END CLEANUP
+
+NONSHARABLE_CLASS( CIRSettings ) : public CObject
+    {
+
+public:
+
+    IMPORT_C static CIRSettings* OpenL();
+    ~CIRSettings();
+
+// CLEANUP REQUIRED
+
+    IMPORT_C TBool IsFlagCostWarningL();
+    IMPORT_C void SetFlagCostWarningL();
+    IMPORT_C void ReSetFlagCostWarningL();
+    IMPORT_C TBool IsFlagTermsAndConditionsL();
+    IMPORT_C void SetFlagTermsAndConditionsL();
+    IMPORT_C void ReSetFlagTermsAndConditionsL();
+    IMPORT_C void SetIrappVersionL(const TDesC& aIRAppVersion);
+    IMPORT_C const TDesC& GetIrappVersionL() const;
+        
+    IMPORT_C void SetIRIDL(const TDesC& aIrid);
+    IMPORT_C const TDesC& GetIRIDL() const;
+    IMPORT_C const  TDesC& GetISDSBaseUrlL() const;
+    IMPORT_C void SetISDSBaseUrlL(const TDesC& aIsdsUrl);
+    IMPORT_C TInt GetVolumeSetting() const;
+    IMPORT_C void SetVolumeSettingL(TInt aPlayVolume);
+    IMPORT_C TInt GetManuallyAddedChId() const;
+    IMPORT_C void SetManuallyAddedChIdL();
+    IMPORT_C TBool IsUpdateAvailableL();
+    IMPORT_C void SetUpdateAvailableL();
+	IMPORT_C void ReSetUpdateAvailableL();
+    IMPORT_C TInt GetLogRunningNo() const;
+    IMPORT_C void SetLogRunningNoL();
+    IMPORT_C void SetTimeOutL(TInt aTimeOut);
+    IMPORT_C TInt GetTimeOut() const;
+    IMPORT_C void SetSilencePeriodL(TUint aSilencePeriod);
+    IMPORT_C TUint GetSilencePeriodL() const;
+    IMPORT_C void SetSilencePeriodStartL(const TDesC& aSilencePeriodStart);
+    IMPORT_C const TDesC& GetSilencePeriodStartL() const;
+    IMPORT_C TBool DisplayAccessPointL() const;
+    IMPORT_C void SetDisplayAccessPointL();
+    IMPORT_C void ReSetDisplayAccessPointL();
+    IMPORT_C void SetBearerIdL(TUint32 aBearerId);
+    IMPORT_C TUint32 GetBearerIdL() const;
+    IMPORT_C void SetNetworkIdL(TUint32 aBearerId);
+    IMPORT_C TUint32 GetNetworkIdL() const;
+    IMPORT_C void SetApIdL(TUint32 aBearerId);
+    IMPORT_C TUint32 GetApIdL() const;
+    IMPORT_C void SetUserSavedApSettingsL( TUint32 aBearerId,TUint32 aNetworkId,TUint32 aApId);
+    IMPORT_C void GetUserSavedApSettingsL( TUint32& aBearerId,
+    				TUint32& aNetworkId,TUint32& aApId) const;
+    IMPORT_C void SetGPRSBitrateQualityL(TInt aBitrate);
+    IMPORT_C TInt GetGPRSBitrateQuality() const;
+    IMPORT_C void SetWiFiBitrateQualityL(TInt aBitrate);
+    IMPORT_C TInt GetWiFiBitrateQuality() const;
+    IMPORT_C void Set3GBitrateQualityL(TInt aBitrate);
+    IMPORT_C TInt Get3GBitrateQuality() const;
+    IMPORT_C void SetPreferredQualityL(TInt aQualityValue);
+    IMPORT_C TInt GetPreferredQuality() const; 
+    IMPORT_C void SetSongHisotryShowL(TInt aShowFlag);
+    IMPORT_C TInt GetSongHistoryShow() const;
+    IMPORT_C void SetMaxPresetCountL(TInt aMaxCount);
+    IMPORT_C TInt MaxPresetCount();
+    IMPORT_C void SetTimeCorrectionL(TInt aCorrection);
+    IMPORT_C TInt TimeCorrection() const;
+    IMPORT_C const TDesC& PrivatePath() const;
+    IMPORT_C void SetStereoModeL(TInt val);
+    IMPORT_C TInt GetStereoMode();
+
+
+	//Methods to determine if any channel was added to favorites
+	IMPORT_C TBool IsFlagIfAnyFavL();
+    IMPORT_C void SetFlagIfAnyFavL();
+    
+    //Added for ALR/SNAP
+    /**
+     * SetUserDefinedSelectionL()
+     * Sets the UserDefinedSelection in cenrep
+     */
+    IMPORT_C void SetUserDefinedSelectionL(TUint32 aUserDefinedSelection);
+    
+    /**
+     * GetUserDefinedSelectionL()
+     * Gets the UserDefinedSelection from cenrep
+     */
+    IMPORT_C TUint32 GetUserDefinedSelectionL() const;
+    
+    /**
+     * SetDestinationIdL()
+     * Sets the DestinationId in cenrep
+     */
+    IMPORT_C void SetDestinationIdL(TUint32 aDestinationId);
+    
+    /**
+     * GetDestinationIdL()
+     * Gets the DestinationId from cenrep
+     */
+    IMPORT_C TUint32 GetDestinationIdL() const;
+
+
+// END CLEANUP
+
+    /**
+     * Returns the current saved subscriber identifier (IMSI code).
+     *
+     * @return  The saved subscriber identifier.
+     */
+    IMPORT_C const RMobilePhone::TMobilePhoneSubscriberId& SubscriberIdL() const;
+    
+    /**
+     * Sets the subscriber identifier (IMSI code).
+     *
+     * @param   Subscriber identifier to set.
+     */
+    IMPORT_C void SetSubscriberIdL( const RMobilePhone::TMobilePhoneSubscriberId& aSubscriberId );
+    
+	// Methods for starting view
+    /**
+     * SetStartingViewIdL()
+     * Sets the starting view Id in cenrep
+     */
+    IMPORT_C void SetStartingViewIdL(TUint32 aStartingViewId);
+   
+    /**
+     * GetStartingViewIdL()
+     * Gets the starting view Id from cenrep
+     */
+    IMPORT_C TUint32 GetStartingViewIdL() const;
+   
+    /**
+     * SetStartingViewParameterL()
+     * Sets the starting view parameter in cenrep
+     */
+    IMPORT_C void SetStartingViewParameterL(TUint32 aParameter);
+  
+    /**
+     * GetStartingViewParameterL()
+     * Gets the starting view parameter from cenrep
+     */
+    IMPORT_C TUint32 GetStartingViewParameterL() const;
+	
+	/**
+     * SetStickyViewFlagL()
+     * Sets the sticky view flag in cenrep
+     */
+    IMPORT_C void SetStickyViewFlagL(TBool aFlag);
+	
+	/**
+     * GetStickyViewFlagL()
+     * Gets the sticky view flag from cenrep
+     */
+	IMPORT_C TBool GetStickyViewFlagL();
+
+	/**
+	 * GetGlobalAdvFlagL()
+	 * Gets the global advertisement flag from cenrep
+	 */
+	IMPORT_C TBool GetGlobalAdvFlagL();
+
+private:
+
+    CIRSettings();
+    void ConstructL();
+
+private:
+
+	CRepository *iRepository;
+    RFs iFs;
+
+// CLEANUP REQUIRED
+
+ 	//key KAccessPoints
+      TInt iAccessPoints;//!number of accesspoints available 
+	//key KRunningChId
+      TInt iRunningChId; //! Channelid for isds channels 
+    // zero once it reaches the value.
+    // to arrange the preset data,
+	//key KIrappVersion
+      TBuf<KMaxLengthIRAppVersion> iIrappVersion;//! irapp version number, 
+    //key KIRID
+      TBuf<KMaxLengthIrId> iIRID;//! ir-id supplied by isds. cannot change
+    // key KSilencePeriodStartTime
+      TBuf<KMaxLengthSilencePeriod> iSilencePeriodStartTime; //!Universal timestamp for the time of decline of an Update
+    //key KISDSBaseUrl
+      TBuf<KMaxLengthUrl> iISDSBaseUrl;//!the base url of isds
+    TBuf<KMaxLengthFileName> iPrivatePath;
+    
+// END CLEANUP
+
+    /** The current subscriber identifier (IMSI code). */
+    RMobilePhone::TMobilePhoneSubscriberId iSubscriberId;
+
+    TInt iResourceFileOffset;
+
+    TFileName iSettingsFileName;
+    TFileName iBackedUpSettingsFileName;
+
+    };
+    
+#endif // C_CIRSETTINGS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsinc/irsettingsutility.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c)  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:  ?Description
+*
+*/
+
+
+#ifndef IRSETTINGSUTILITY_H
+#define IRSETTINGSUTILITY_H
+
+#include <e32cmn.h>
+
+class CDictionaryStore;
+
+NONSHARABLE_CLASS( IRSettingsUtility )
+    {
+
+public:
+
+    static void WriteIntL( CDictionaryStore& aDictionary, TUid aUid, TInt aValue );
+    static void WriteInt64L( CDictionaryStore& aDictionary, TUid aUid, TInt64 aValue );
+    static void WriteUintL( CDictionaryStore& aDictionary, TUid aUid, TUint aValue );
+    static void WriteBoolL( CDictionaryStore& aDictionary, TUid aUid, TBool aValue );
+    static void WriteStringL( CDictionaryStore& aDictionary, TUid aUid, const TDesC& aValue );
+
+    static TInt ReadIntL( CDictionaryStore& aDictionary, TUid aUid );
+    static TInt64 ReadInt64L( CDictionaryStore& aDictionary, TUid aUid );
+    static TUint ReadUintL( CDictionaryStore& aDictionary, TUid aUid );
+    static TBool ReadBoolL(  CDictionaryStore& aDictionary, TUid aUid );
+    static HBufC* ReadStringL( CDictionaryStore& aDictionary, TUid aUid );
+
+    };
+
+#endif // IRSETTINGSUTILITY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingssrc/ircodecmanager.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2008 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:  Maintains the set of supported codecs
+*
+*/
+
+#include <e32base.h>
+
+#include <eikenv.h>
+#include <f32file.h>
+
+
+#include "ircodecmanager.h"
+#include "irdebug.h"
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::NewL
+// ---------------------------------------------------------------------------
+//
+CIRCodecManager* CIRCodecManager::NewL()
+    {
+    CIRCodecManager* self = CIRCodecManager::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRCodecManager* CIRCodecManager::NewLC()
+    {
+    CIRCodecManager* self = new (ELeave) CIRCodecManager();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::CIRCodecManager
+// ---------------------------------------------------------------------------
+//
+CIRCodecManager::CIRCodecManager()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::~CIRCodecManager
+// ---------------------------------------------------------------------------
+//
+CIRCodecManager::~CIRCodecManager()
+    {
+    iSupportedDataTypes.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRCodecManager::ConstructL" );
+    LoadSupportedCodecsL();
+    IRLOG_DEBUG( "CIRCodecManager::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::IsSupportedCodec
+// ---------------------------------------------------------------------------
+//
+TBool CIRCodecManager::IsSupportedCodec( TFourCC aCodec ) const
+    {
+    IRLOG_DEBUG( "CIRCodecManager::::IsSupportedCodec" );
+    TBool supported( EFalse );
+    if ( iSupportedDataTypes.Find( aCodec ) != KErrNotFound )
+        {
+        supported = ETrue;
+        }
+    IRLOG_INFO3( "CIRCodecManager::IsSupportedCodec - Returning %d for codec %d",
+                  supported, aCodec.FourCC() );
+    return supported;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::InitializeComplete
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::InitializeComplete(TInt /* aError */)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::ToneFinished
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::ToneFinished(TInt /* aError */)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::BufferToBeFilled
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::BufferToBeFilled(CMMFBuffer* /* aBuffer */ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::PlayError
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::PlayError(TInt /* aError */ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::BufferToBeEmptied
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::BufferToBeEmptied(CMMFBuffer* /* aBuffer */ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::RecordError
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::RecordError(TInt /* aError */ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::ConvertError
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::ConvertError(TInt /* aError */ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::DeviceMessage
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::DeviceMessage(TUid /* aMessageType */, const TDesC8& /* aMsg */ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::LoadSupportedCodecsL
+// ---------------------------------------------------------------------------
+//
+void CIRCodecManager::LoadSupportedCodecsL()
+    {
+    IRLOG_DEBUG( "CIRCodecManager::LoadSupportedCodecsL" );
+    CMMFDevSound* devSound = CMMFDevSound::NewL();
+    CleanupStack::PushL( devSound );
+    TMMFPrioritySettings prioritySettings;
+
+    prioritySettings.iPriority = 0;
+    prioritySettings.iPref = EMdaPriorityPreferenceNone;
+    prioritySettings.iState = EMMFStatePlaying;
+
+    devSound->GetSupportedInputDataTypesL( iSupportedDataTypes, prioritySettings );
+    CleanupStack::PopAndDestroy( devSound );
+
+    // CMMFDevSound returns also other codecs than those supported by IR.
+    TInt tempCount = iSupportedDataTypes.Count();
+    IRRDEBUG2("CIRCodecManager::LoadSupportedCodecsL() - codecs count = %d",tempCount);
+    for ( TInt i = iSupportedDataTypes.Count() - 1; i >= 0; i-- )
+        {
+        if ( !VerifySupportL( iSupportedDataTypes[i] ) )
+            {
+            IRLOG_DEBUG2( "CIRCodecManager::LoadSupportedCodecsL - %x not supported.",
+                        iSupportedDataTypes[i].FourCC() );
+            iSupportedDataTypes.Remove( i );
+            }
+        else
+            {
+            IRLOG_INFO2( "CIRCodecManager::LoadSupportedCodecsL - %x supported.",
+                        iSupportedDataTypes[i].FourCC() );
+            }
+        }
+
+#ifdef __WINS__
+    // In emulator there is typically only 16 bit PCM supported.
+    if ( iSupportedDataTypes.Count() == 0 )
+        {
+        TFourCC codec( KMMFFourCCCodeMP3 );
+        iSupportedDataTypes.Append( codec );
+        }
+#endif
+
+
+    IRLOG_DEBUG( "CIRCodecManager::LoadSupportedCodecsL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCodecManager::VerifySupportL
+// ---------------------------------------------------------------------------
+//
+TBool CIRCodecManager::VerifySupportL( TFourCC aCodec )
+    {
+    IRLOG_DEBUG2( "CIRCodecManager::VefifySupportL - aCodec=%x", aCodec.FourCC() );
+    TInt supported( EFalse );
+    switch( aCodec.FourCC() )
+        {
+#ifndef __SERIES60_30__
+        case KMMFFourCCCodeWMA: // fall through
+#endif
+        case KMMFFourCCCodeAAC: // fall through
+        case KMMFFourCCCodeMP3:
+            supported = ETrue;
+            break;
+        default:
+            break;
+        }
+    if ( supported )
+        {
+        // Test initialisation to see that the codec really is supported.
+        CMMFDevSound* devSound = CMMFDevSound::NewL();
+        CleanupStack::PushL( devSound );
+
+        TMMFState mmfState( EMMFStatePlaying );
+        TRAPD( err, devSound->InitializeL( *this, aCodec, mmfState ) );
+        if ( err != KErrNone )
+            {
+            supported = EFalse;
+            }
+        CleanupStack::PopAndDestroy( devSound );
+        }
+    IRLOG_DEBUG( "CIRCodecManager::VefifySupportL" );
+    return supported;
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingssrc/irsettings.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1049 @@
+/*
+* 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 <barsc.h>
+#include <bautils.h>
+#include <coemain.h>
+#include <data_caging_path_literals.hrh>
+#include <irsettings.rsg>
+#include <pathinfo.h>
+#include <s32file.h>
+#include <StringLoader.h>
+
+#include "irdebug.h"
+#include "irsettings.h"
+#include "irinternalcrkeys.h"
+
+// Constants
+_LIT( KIRSettingsResourceFileName, "irsettings.rsc" );
+const TInt KSix = 6;
+const TInt KFifty = 50;
+const TInt KTimeSize = 60000000 ;
+const TInt KOne = 1;
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSettings* CIRSettings::OpenL()
+    {
+    IRLOG_DEBUG( "CIRSettings::OpenL() - Entering" );
+    CIRSettings* self = static_cast<CIRSettings*>( Dll::Tls() );
+
+    if ( self )
+        {
+        User::LeaveIfError( self->Open() );
+        }
+    else
+        {
+        self = new ( ELeave ) CIRSettings;
+        CleanupClosePushL( *self );
+        self->ConstructL();
+        CleanupStack::Pop( self );
+        }
+    IRLOG_DEBUG( "CIRSettings::OpenL() - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+CIRSettings::CIRSettings()
+    : iResourceFileOffset( KErrNotFound )
+    {
+    IRLOG_DEBUG( "CIRSettings::CIRSettings" );
+    }
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CIRSettings::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRSettings::ConstructL() - Enter" );
+
+	iRepository = CRepository::NewL(KCRUidInternetRadio);
+		
+    User::LeaveIfError( iFs.Connect() );
+
+    TParse parse;
+
+    // Parses out the resource file name and path to it.
+
+    TFileName resourceFileNameAndPath;
+    Dll::FileName( resourceFileNameAndPath );
+
+    parse.Set( KIRSettingsResourceFileName, &KDC_RESOURCE_FILES_DIR, &resourceFileNameAndPath );
+    resourceFileNameAndPath = parse.FullName();
+
+    BaflUtils::NearestLanguageFile( iFs, resourceFileNameAndPath );
+
+    IRLOG_DEBUG2("CIRSettings::ConstructL - resourceFileNameAndPath = %S", &resourceFileNameAndPath );
+    
+    iResourceFileOffset = CCoeEnv::Static()->AddResourceFileL( resourceFileNameAndPath );
+
+    // Parses out the private path of the running process.
+	
+    User::LeaveIfError( iFs.PrivatePath( iPrivatePath ) );
+    
+    TParsePtrC phoneMemoryRootPath( PathInfo::PhoneMemoryRootPath() );
+    TPtrC drive( phoneMemoryRootPath.Drive() );
+    User::LeaveIfError( parse.Set( iPrivatePath, &drive, NULL ) );
+    iPrivatePath = parse.FullName();
+
+    BaflUtils::EnsurePathExistsL( iFs, parse.FullName() );
+
+    IRLOG_DEBUG2("CIRSettings::ConstructL - iPrivatePath = %S", &iPrivatePath );
+    
+    User::LeaveIfError( Dll::SetTls( this ) );
+    
+    IRLOG_DEBUG( "CIRSettings::ConstructL() - Exit" );
+    }
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+CIRSettings::~CIRSettings()
+    {
+    IRLOG_DEBUG( "CIRSettings::~CIRSettings() - Entering" );
+	delete iRepository;
+    iFs.Close();
+
+    if ( iResourceFileOffset != KErrNotFound )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset );
+        }
+    
+    Dll::FreeTls();
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::IsFlagCostWarningL()
+    {
+      IRLOG_DEBUG( "CIRSettings::IsFlagCostWarningL() - Entering" );
+      TBool value = ETrue;
+      User::LeaveIfError( iRepository->Get(KIRCostWarningFlag, value) );
+      IRLOG_DEBUG( "CIRSettings::IsFlagCostWarningL() - Exiting" );
+      return value; 
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetFlagCostWarningL()
+    {
+      IRLOG_DEBUG( "CIRSettings::SetFlagCostWarningL() - Entering" );
+      User::LeaveIfError ( iRepository->Set(KIRCostWarningFlag, 1));
+      IRLOG_DEBUG( "CIRSettings::SetFlagCostWarningL() - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::ReSetFlagCostWarningL()
+    {
+    	IRLOG_DEBUG( "CIRSettings::ReSetFlagCostWarningL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRCostWarningFlag, 0));
+        IRLOG_DEBUG( "CIRSettings::ReSetFlagCostWarningL() - Exiting" );
+     }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::IsFlagTermsAndConditionsL()
+    {
+       IRLOG_DEBUG( "CIRSettings::IsFlagTermsAndConditionsL() - Entering" );
+       TBool value = ETrue;
+       User::LeaveIfError( iRepository->Get(KIRTermsAndConditionsFlag, value) );
+       IRLOG_DEBUG( "CIRSettings::IsFlagTermsAndConditionsL() - Exiting" );
+       return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetFlagTermsAndConditionsL()
+    {
+       IRLOG_DEBUG( "CIRSettings::SetFlagTermsAndConditionsL() - Entering" );
+       User::LeaveIfError ( iRepository->Set(KIRTermsAndConditionsFlag, 1));
+       IRLOG_DEBUG( "CIRSettings::SetFlagTermsAndConditionsL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::ReSetFlagTermsAndConditionsL()
+    {
+    	IRLOG_DEBUG( "CIRSettings::ReSetFlagTermsAndConditionsL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRTermsAndConditionsFlag, 0));
+        IRLOG_DEBUG( "CIRSettings::ReSetFlagTermsAndConditionsL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetIrappVersionL(const TDesC& aIRAppVersion)
+    {
+    	 IRLOG_DEBUG( "CIRSettings::SetIrappVersionL() - Entering" );
+         User::LeaveIfError ( iRepository->Set(KIRIrappVer, aIRAppVersion) );
+         IRLOG_DEBUG( "CIRSettings::SetIrappVersionL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRSettings::GetIrappVersionL() const
+    {
+    		IRLOG_DEBUG( "CIRSettings::GetIrappVersionL() - Entering" );
+    		User::LeaveIfError( iRepository->Get(KIRIrappVer, (TDes&)iIrappVersion) );
+    		IRLOG_DEBUG( "CIRSettings::GetIrappVersionL() - Exiting" );
+    		return iIrappVersion;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetIRIDL(const TDesC& aIrid)
+    {
+    		IRLOG_DEBUG( "CIRSettings::SetIRIDL() - Entering" );
+            User::LeaveIfError ( iRepository->Set(KIRDefaultIrId, aIrid) );
+            IRLOG_DEBUG( "CIRSettings::SetIRIDL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRSettings::GetIRIDL() const
+    {
+    		IRLOG_DEBUG( "CIRSettings::GetIRIDL() - Entering" );
+    		User::LeaveIfError( iRepository->Get(KIRDefaultIrId, (TDes&)iIRID) );
+    		IRLOG_DEBUG( "CIRSettings::GetIRIDL() - Exiting" );
+    		return iIRID;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const  TDesC& CIRSettings::GetISDSBaseUrlL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetISDSBaseUrlL() - Entering" );
+    	User::LeaveIfError( iRepository->Get(KIRDefaultIsdsUrl, (TDes&)iISDSBaseUrl) );
+    	IRLOG_DEBUG( "CIRSettings::GetISDSBaseUrlL() - Exiting" );
+       	return iISDSBaseUrl;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetISDSBaseUrlL(const TDesC& aIsdsUrl)
+    {
+    	IRLOG_DEBUG( "CIRSettings::SetISDSBaseUrlL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRDefaultIsdsUrl, aIsdsUrl) );
+        IRLOG_DEBUG( "CIRSettings::SetISDSBaseUrlL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetVolumeSetting() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetVolumeSetting() - Entering" );
+    TInt value = KSix;
+    TInt err = iRepository->Get(KIRDefaultPlayVolume, value);
+    if(err)
+	    {
+        IRLOG_DEBUG( "CIRSettings::GetVolumeSetting() - Error" );
+	    }
+ 
+    IRLOG_DEBUG( "CIRSettings::GetVolumeSetting() - Exiting" );
+    return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetVolumeSettingL(TInt aPlayVolume)
+    {
+      IRLOG_DEBUG( "CIRSettings::SetVolumeSettingL() - Entering" );
+      User::LeaveIfError ( iRepository->Set(KIRDefaultPlayVolume, aPlayVolume));
+      IRLOG_DEBUG( "CIRSettings::SetVolumeSettingL() - Exiting" );
+    }
+    
+
+    
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetManuallyAddedChId() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetManuallyAddedChId() - Entering" );
+    TInt value = KOne;
+    TInt err = iRepository->Get(KIRUserDefinedRunningChannelId, value);
+    if(err)
+	    {
+        IRLOG_DEBUG( "CIRSettings::GetManuallyAddedChId() - Error" );
+	    }
+    IRLOG_DEBUG( "CIRSettings::GetManuallyAddedChId() - Exiting" );
+    return value;
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetManuallyAddedChIdL()
+    {
+    IRLOG_DEBUG( "CIRSettings::SetManuallyAddedChIdL() - Entering" );
+    iRunningChId++;
+    User::LeaveIfError ( iRepository->Set(KIRUserDefinedRunningChannelId, iRunningChId));
+    IRLOG_DEBUG( "CIRSettings::SetManuallyAddedChIdL() - Exiting" );
+    }
+    
+
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::IsUpdateAvailableL()
+    {
+    	IRLOG_DEBUG( "CIRSettings::IsUpdateAvailableL() - Entering" );
+       TBool value = ETrue;
+       User::LeaveIfError( iRepository->Get(KIRUpdateAvailablity, value) );
+       IRLOG_DEBUG( "CIRSettings::IsUpdateAvailableL() - Exiting" );
+       return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetUpdateAvailableL()
+    {
+    	IRLOG_DEBUG( "CIRSettings::SetUpdateAvailableL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRUpdateAvailablity, 1));
+        IRLOG_DEBUG( "CIRSettings::SetUpdateAvailableL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::ReSetUpdateAvailableL()
+    {
+    	IRLOG_DEBUG( "CIRSettings::ReSetUpdateAvailableL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRUpdateAvailablity, 0));
+        IRLOG_DEBUG( "CIRSettings::ReSetUpdateAvailableL() - Exiting" );
+    }
+    
+ 
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetLogRunningNo() const
+    {
+		IRLOG_DEBUG( "CIRSettings::GetLogRunningNo() - Entering" );
+        TInt value = 1;
+        TInt err = iRepository->Get(KIRUserDefinedLogRunningNumber, value);
+        if(err)
+	        {
+    	    IRLOG_DEBUG( "CIRSettings::GetLogRunningNo() - Error" );
+    	    }
+    	IRLOG_DEBUG( "CIRSettings::GetLogRunningNo() - Exiting" );
+    	return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetLogRunningNoL()
+    {
+    IRLOG_DEBUG( "CIRSettings::SetLogRunningNoL() - Entering" );
+    TInt value = GetLogRunningNo();
+    value++;
+    User::LeaveIfError ( iRepository->Set(KIRUserDefinedLogRunningNumber,value));
+    IRLOG_DEBUG( "CIRSettings::SetLogRunningNoL() - Exiting" );
+    }
+    
+  
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetTimeOutL(TInt aTimeOut)
+    {
+       IRLOG_DEBUG( "CIRSettings::SetTimeOutL() - Entering" );
+       User::LeaveIfError ( iRepository->Set(KIRTimeOutDuration, aTimeOut) );
+       IRLOG_DEBUG( "CIRSettings::SetTimeOutL() - Exiting" );
+       }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetTimeOut() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetTimeOut() - Entering" );
+    TInt value = KTimeSize;
+    TInt err = iRepository->Get(KIRTimeOutDuration, value) ;
+    if(err)
+	    {
+        IRLOG_DEBUG( "CIRSettings::GetTimeOut() - Error" );
+	    }
+
+    IRLOG_DEBUG( "CIRSettings::GetTimeOut() - Exiting" );
+    return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetSilencePeriodL(TUint aSilencePeriod)
+    {
+    	IRLOG_DEBUG( "CIRSettings::SetSilencePeriodL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRSilencePeriodDuration, (TInt)aSilencePeriod) );
+        IRLOG_DEBUG( "CIRSettings::SetSilencePeriodL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint CIRSettings::GetSilencePeriodL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetSilencePeriodL() - Entering" );
+    	TInt value =0;
+    	User::LeaveIfError( iRepository->Get(KIRSilencePeriodDuration, value) );
+    	IRLOG_DEBUG( "CIRSettings::GetSilencePeriodL() - Exiting" );
+    	return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetSilencePeriodStartL(const TDesC& aSilencePeriodStart)
+    {
+    	IRLOG_DEBUG( "CIRSettings::SetSilencePeriodStartL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRSilencePeriodStartingTime, aSilencePeriodStart) );
+        IRLOG_DEBUG( "CIRSettings::SetSilencePeriodStartL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRSettings::GetSilencePeriodStartL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetSilencePeriodStartL() - Entering" );
+    	User::LeaveIfError( iRepository->Get(KIRSilencePeriodStartingTime,
+    					  (TDes&)iSilencePeriodStartTime) );
+    	IRLOG_DEBUG( "CIRSettings::GetSilencePeriodStartL() - Exiting" );
+        return iSilencePeriodStartTime;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::DisplayAccessPointL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::DisplayAccessPointL() - Entering" );
+      	TBool value = ETrue;
+        User::LeaveIfError( iRepository->Get(KIRDefaultAccessPoint, value) );
+        IRLOG_DEBUG( "CIRSettings::DisplayAccessPointL() - Exiting" );
+    	return value; 
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetDisplayAccessPointL()
+    {
+    IRLOG_DEBUG( "CIRSettings::SetDisplayAccessPointL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRDefaultAccessPoint, 1) );
+    IRLOG_DEBUG( "CIRSettings::SetDisplayAccessPointL() - Exiting" );
+    }
+    
+EXPORT_C void CIRSettings::SetStereoModeL(TInt val)
+{
+	IRLOG_DEBUG( "CIRSettings::SetStereoModeL() - Entering" );
+	User::LeaveIfError ( iRepository->Set(KIRStereoMode, val));
+	IRLOG_DEBUG( "CIRSettings::SetStereoModeL() - Exiting" );
+	
+}
+
+EXPORT_C TInt CIRSettings::GetStereoMode()
+{
+		IRLOG_DEBUG( "CIRSettings::GetStereoMode() - Entering" );
+	    TInt value = 0;
+	    TInt err = iRepository->Get(KIRStereoMode, value);
+	    if(err)
+		    {
+	        IRLOG_DEBUG( "CIRSettings::GetStereoMode() - Error" );
+		    }
+	    IRLOG_DEBUG( "CIRSettings::GetStereoMode() - Exiting" );
+    	return value;
+}
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::ReSetDisplayAccessPointL()
+    {
+    IRLOG_DEBUG( "CIRSettings::ReSetDisplayAccessPointL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRDefaultAccessPoint, 0) );
+    IRLOG_DEBUG( "CIRSettings::ReSetDisplayAccessPointL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetBearerIdL(TUint32 aBearerId)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetBearerIdL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRUserDefinedBearerID, (TInt)aBearerId));
+    IRLOG_DEBUG( "CIRSettings::SetBearerIdL() - Exiting" );        
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetBearerIdL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetBearerIdL() - Entering" );
+    	TInt value = 0;
+	    User::LeaveIfError( iRepository->Get(KIRUserDefinedBearerID, value) );
+	    IRLOG_DEBUG( "CIRSettings::GetBearerIdL() - Exiting" );
+    	return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetNetworkIdL(TUint32 aBearerId)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetNetworkIdL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRUserDefinedNetworkID, (TInt)aBearerId) );
+    IRLOG_DEBUG( "CIRSettings::SetNetworkIdL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetNetworkIdL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetNetworkIdL() - Entering" );
+    	TInt value = 0;
+	    User::LeaveIfError( iRepository->Get(KIRUserDefinedNetworkID, value) );
+	    IRLOG_DEBUG( "CIRSettings::GetNetworkIdL() - Exiting" );
+    	return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetApIdL(TUint32 aBearerId)
+    {
+      IRLOG_DEBUG( "CIRSettings::SetApIdL() - Entering" );
+      User::LeaveIfError ( iRepository->Set(KIRUserDefinedAccessPoint , (TInt)aBearerId) );
+      IRLOG_DEBUG( "CIRSettings::SetApIdL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetApIdL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetApIdL() - Entering" );
+    	TInt value = 0;
+	  	User::LeaveIfError( iRepository->Get(KIRUserDefinedAccessPoint, value) );
+	  	IRLOG_DEBUG( "CIRSettings::GetApIdL() - Exiting" );
+    	return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetUserSavedApSettingsL( TUint32 aBearerId,TUint32 aNetworkId,
+													TUint32 aApId)
+    {
+    	IRLOG_DEBUG( "CIRSettings::SetUserSavedApSettingsL() - Entering" );
+    	SetBearerIdL( aBearerId );
+    	SetNetworkIdL( aNetworkId );
+    	SetApIdL( aApId );
+    	IRLOG_DEBUG( "CIRSettings::SetUserSavedApSettingsL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::GetUserSavedApSettingsL( TUint32& aBearerId,TUint32& aNetworkId,
+												    TUint32& aApId) const
+    {
+      IRLOG_DEBUG( "CIRSettings::GetUserSavedApSettingsL() - Entering" );
+      TInt value = 0;
+      User::LeaveIfError( iRepository->Get(KIRUserDefinedAccessPoint, value) );
+      aApId = value;
+      
+      value =0;
+      User::LeaveIfError( iRepository->Get(KIRUserDefinedNetworkID, value) );
+      aNetworkId = value;
+      
+      value =0;
+      User::LeaveIfError( iRepository->Get(KIRUserDefinedBearerID, value) );
+      aBearerId = value; 
+      IRLOG_DEBUG( "CIRSettings::GetUserSavedApSettingsL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetGPRSBitrateQualityL(TInt aBitrate)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetGPRSBitrateQualityL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRGprsBitRate, aBitrate) );
+    IRLOG_DEBUG( "CIRSettings::SetGPRSBitrateQualityL() - Exiting" );
+    }
+   
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetGPRSBitrateQuality() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetGPRSBitrateQuality() - Entering" );
+    TInt value =0;
+    TInt err = iRepository->Get(KIRGprsBitRate, value);
+    if(err)
+	    {
+   	    IRLOG_DEBUG( "CIRSettings::GetGPRSBitrateQuality() - Error" );
+	    }
+   	IRLOG_DEBUG( "CIRSettings::GetGPRSBitrateQuality() - Exiting" );
+    return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetWiFiBitrateQualityL(TInt aBitrate)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetWiFiBitrateQualityL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRWifiBitRate, aBitrate) );
+    IRLOG_DEBUG( "CIRSettings::SetWiFiBitrateQualityL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetWiFiBitrateQuality() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetWiFiBitrateQuality() - Entering" );
+    TInt value =2;
+    TInt err = iRepository->Get(KIRWifiBitRate, value);
+    if(err)
+	    {
+        IRLOG_DEBUG( "CIRSettings::GetWiFiBitrateQuality() - Error" );
+	    }
+
+    IRLOG_DEBUG( "CIRSettings::GetWiFiBitrateQuality() - Exiting" );
+    return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::Set3GBitrateQualityL(TInt aBitrate)
+    {
+    IRLOG_DEBUG( "CIRSettings::Set3GBitrateQualityL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIR3GBitRate, aBitrate) );
+    IRLOG_DEBUG( "CIRSettings::Set3GBitrateQualityL() - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::Get3GBitrateQuality() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::Get3GBitrateQuality() - Entering" );
+    	TInt value = 1;
+    	TInt err = iRepository->Get(KIR3GBitRate, value);
+    	if(err)
+	    	{
+	        IRLOG_DEBUG( "CIRSettings::Get3GBitrateQuality() - Error" );
+	    	}
+
+	    IRLOG_DEBUG( "CIRSettings::Get3GBitrateQuality() - Exiting" );
+    	return value;
+    }
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetPreferredQualityL(TInt aQualityValue)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetPreferredQualityL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRPreferredQuality, aQualityValue) );
+    IRLOG_DEBUG( "CIRSettings::SetPreferredQualityL() - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::GetPreferredQuality() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::GetPreferredQuality() - Entering" );
+    	TInt value = 0;
+    	TInt err = iRepository->Get(KIRPreferredQuality, value);
+    	if(err)
+	    	{
+	        IRLOG_DEBUG( "CIRSettings::GetPreferredQuality() - Error" );
+	    	}
+
+	    IRLOG_DEBUG( "CIRSettings::GetPreferredQuality() - Exiting" );
+    	return value;
+    }
+
+EXPORT_C TInt CIRSettings::GetSongHistoryShow() const
+{
+    IRLOG_DEBUG( "CIRSettings::GetSongHistoryShow() - Entering" );
+    TInt value = 0;
+    TInt err = iRepository->Get(KIRSongHistoryShow, value);
+    if(err)
+        {
+        IRLOG_DEBUG( "CIRSettings::GetSongHistoryShow() - Error" );
+        }
+
+    IRLOG_DEBUG( "CIRSettings::GetSongHistoryShow() - Exiting" );
+    return value;
+}
+
+EXPORT_C void CIRSettings::SetSongHisotryShowL(TInt aShowFlag)
+{
+    IRLOG_DEBUG( "CIRSettings::SetSongHisotryShow() - Entering" );
+    User::LeaveIfError(iRepository->Set(KIRSongHistoryShow, aShowFlag));
+    IRLOG_DEBUG( "CIRSettings::SetSongHisotryShow() - Exiting" );
+}
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetMaxPresetCountL(TInt aMaxCount)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetMaxPresetCountL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRDefaultMaxPresetCount, aMaxCount) );
+    IRLOG_DEBUG( "CIRSettings::SetMaxPresetCountL() - Exiting" );    
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::MaxPresetCount()
+    {
+    	IRLOG_DEBUG( "CIRSettings::MaxPresetCount() - Entering" );
+    	TInt value = KFifty;
+    	TInt err = iRepository->Get(KIRDefaultMaxPresetCount, value) ;
+    	if(err)
+	    	{
+	        IRLOG_DEBUG( "CIRSettings::MaxPresetCount() - Error" );
+	    	}
+
+	    IRLOG_DEBUG( "CIRSettings::MaxPresetCount() - Exiting" );
+    	return value;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetTimeCorrectionL(TInt aCorrection)
+    {
+    	IRLOG_DEBUG( "CIRSettings::SetTimeCorrectionL() - Entering" );
+        User::LeaveIfError ( iRepository->Set(KIRDefaultTimeCorrection, aCorrection) );
+        IRLOG_DEBUG( "CIRSettings::SetTimeCorrectionL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSettings::TimeCorrection() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::TimeCorrection() - Entering" );
+        TInt value = 0;
+        TInt err = iRepository->Get(KIRDefaultTimeCorrection, value) ;
+        if(err)
+	        {
+	        IRLOG_DEBUG( "CIRSettings::TimeCorrection() - Error" );
+	        }
+
+	    IRLOG_DEBUG( "CIRSettings::TimeCorrection() - Exiting" );
+    	return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CIRSettings::PrivatePath() const
+    {
+    IRLOG_DEBUG( "CIRSettings::PrivatePath" );
+    return iPrivatePath;
+    }
+    
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const RMobilePhone::TMobilePhoneSubscriberId& CIRSettings::SubscriberIdL() const
+    {
+    	IRLOG_DEBUG( "CIRSettings::SubscriberIdL() - Entering" );
+        User::LeaveIfError( iRepository->Get(KIRUserDefinedSubscriberId, (TDes&)iSubscriberId) );
+	    IRLOG_DEBUG( "CIRSettings::SubscriberIdL() - Exiting" );
+        return iSubscriberId;
+    }
+
+// ---------------------------------------------------------------------------
+// description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetSubscriberIdL( const RMobilePhone::TMobilePhoneSubscriberId& 
+											 aSubscriberId )
+    {
+       IRLOG_DEBUG( "CIRSettings::SetSubscriberIdL() - Entering" );
+       User::LeaveIfError ( iRepository->Set(KIRUserDefinedSubscriberId, (TDes&)aSubscriberId) );
+       IRLOG_DEBUG( "CIRSettings::SetSubscriberIdL() - Exiting" );
+    }
+
+
+//Added for ALR/SNAP
+
+    
+// ---------------------------------------------------------------------------
+// SetUserDefinedSelectionL()
+// Sets the UserDefinedSelection in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetUserDefinedSelectionL(TUint32 aUserDefinedSelection)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetUserDefinedSelectionL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRUserDefinedSelection, (TInt)aUserDefinedSelection) );
+    IRLOG_DEBUG( "CIRSettings::SetUserDefinedSelectionL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// GetUserDefinedSelectionL()
+// Gets the UserDefinedSelection from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetUserDefinedSelectionL() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetUserDefinedSelectionL() - Entering" );
+	TInt value = 0;
+    User::LeaveIfError( iRepository->Get(KIRUserDefinedSelection, value) );
+    IRLOG_DEBUG( "CIRSettings::GetUserDefinedSelectionL() - Exiting" );
+	return value;
+    }
+
+// ---------------------------------------------------------------------------
+// SetDestinationIdL()
+// Sets the DestinationId in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetDestinationIdL(TUint32 aDestinationId)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetDestinationIdL() - Entering" );
+	User::LeaveIfError ( iRepository->Set(KIRUserDefinedDestinationId, (TInt)aDestinationId) );
+	IRLOG_DEBUG( "CIRSettings::SetDestinationIdL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// GetDestinationIdL()
+// Gets the DestinationId from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetDestinationIdL() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetDestinationIdL() - Entering" );
+    TInt value = 0;
+    User::LeaveIfError( iRepository->Get(KIRUserDefinedDestinationId, value) );
+    IRLOG_DEBUG( "CIRSettings::GetDestinationIdL() - Exiting" );
+	return value;
+    } 
+    
+// ---------------------------------------------------------------------------
+// IsFlagIfAnyFavL()
+// Method to determine if any channel was added to favorites
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::IsFlagIfAnyFavL()
+    {
+	  IRLOG_DEBUG( "CIRSettings::IsFlagIfAnyFavL() - Entering" );
+	  TBool value = EFalse;
+	  User::LeaveIfError( iRepository->Get(KIRIfAnyFavFlag, value) );
+	  IRLOG_DEBUG( "CIRSettings::IsFlagIfAnyFavL() - Exiting" );
+	  return value;
+    }
+    
+// ---------------------------------------------------------------------------
+// SetFlagIfAnyFavL()
+//  Method to set boolean value when any channel was added to favorites
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetFlagIfAnyFavL()
+    {
+      IRLOG_DEBUG( "CIRSettings::SetFlagIfAnyFavL() - Entering" );
+      User::LeaveIfError ( iRepository->Set(KIRIfAnyFavFlag, 1));
+      IRLOG_DEBUG( "CIRSettings::SetFlagIfAnyFavL() - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// SetStartingViewIdL()
+// Sets the starting view Id in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetStartingViewIdL(TUint32 aStartingViewId)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetStartingViewIdL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRStartingViewId, (TInt)aStartingViewId) );
+    IRLOG_DEBUG( "CIRSettings::SetStartingViewIdL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// GetStartingViewIdL()
+// Gets the starting view Id from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetStartingViewIdL() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetStartingViewIdL() - Entering" );
+    TInt value = 0;
+    User::LeaveIfError( iRepository->Get(KIRStartingViewId, value) );
+    IRLOG_DEBUG( "CIRSettings::GetStartingViewIdL() - Exiting" );
+    return value;
+    } 
+
+// ---------------------------------------------------------------------------
+// SetStartingViewParameterL()
+// Sets the starting view parameter in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetStartingViewParameterL(TUint32 aParameter)
+    {
+    IRLOG_DEBUG( "CIRSettings::SetStartingViewParameterL() - Entering" );
+    User::LeaveIfError ( iRepository->Set(KIRStartingViewParameter, (TInt)aParameter) );
+    IRLOG_DEBUG( "CIRSettings::SetStartingViewParameterL() - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// GetStartingViewParameterL()
+// Gets the starting view parameter from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CIRSettings::GetStartingViewParameterL() const
+    {
+    IRLOG_DEBUG( "CIRSettings::GetStartingViewParameterL() - Entering" );
+    TInt value = 0;
+    User::LeaveIfError( iRepository->Get(KIRStartingViewParameter, value) );
+    IRLOG_DEBUG( "CIRSettings::GetStartingViewParameterL() - Exiting" );
+    return value;
+    } 
+
+// ---------------------------------------------------------------------------
+// SetStickyViewFlagL()
+// Sets the sticky view flag in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettings::SetStickyViewFlagL(TBool aFlag)
+    {
+      IRLOG_DEBUG( "CIRSettings::SetStickyViewFlagL() - Entering" );
+      User::LeaveIfError ( iRepository->Set(KIRStickyViewFlag, aFlag));
+      IRLOG_DEBUG( "CIRSettings::SetStickyViewFlagL() - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// GetStickyViewFlagL()
+// Gets the sticky view flag from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::GetStickyViewFlagL()
+    {
+	  IRLOG_DEBUG( "CIRSettings::GetStickyViewFlagL() - Entering" );
+	  TBool value = EFalse;
+	  User::LeaveIfError( iRepository->Get(KIRStickyViewFlag, value) );
+	  IRLOG_DEBUG( "CIRSettings::GetStickyViewFlagL() - Exiting" );
+	  return value;
+    }
+
+// ---------------------------------------------------------------------------
+// GetGlobalAdvFlagL()
+// Gets the global advertisement flag from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSettings::GetGlobalAdvFlagL()
+{
+  IRLOG_DEBUG( "CIRSettings::GetGlobalAdvFlagL() - Entering" );
+  TBool value = ETrue;
+  User::LeaveIfError( iRepository->Get(KIRGlobalAdvFlag, value) );
+  IRLOG_DEBUG( "CIRSettings::GetGlobalAdvFlagL() - Exiting" );
+  return value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsviewinc/ircommonsettingscontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2006-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:  Container class for the settings UI
+*
+*/
+
+
+#ifndef C_CIRCOMMONSETTINGSCONTAINER_H
+#define C_CIRCOMMONSETTINGSCONTAINER_H
+
+#include <aknsettingitemlist.h>
+#include <cmapplicationsettingsui.h>
+#include "irsettings.h"
+class CIRNetworkController;
+
+using namespace CMManager;
+
+//Added for ALR/SNAP
+enum TUserSelection
+   {
+    EUserSelectionAlwaysAsk = 0,
+    EUserSelectionDefaultConnection,
+    EUserSelectionDestination,
+    EUserSelectionConnectionMethod
+    };
+
+/**
+ * The container that holds all the setting items.
+ */
+class CIRCommonSettingsContainer : public CAknSettingItemList
+    {
+public:  // Methods
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param   aModel          The model that provides writing and reading of the settings.
+     */
+    IMPORT_C static CIRCommonSettingsContainer* NewL( );
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C ~CIRCommonSettingsContainer();
+
+    /**
+     * Starts editing the item at the current index.
+     */
+    void EditCurrentItemL( TBool aCalledFromMenu );
+    
+    /**
+     * GetCurrentSelection()
+     * Getter function for the currently selected item in the list
+     */    
+    TInt GetCurrentSelection();
+    
+    /**
+     * UpdateStatusL()
+     * Fetches the new settings values from iIRSettings and updates the list
+     */  
+    void UpdateStatusL();
+    
+    /**
+     * GetUserSelectionL()
+     * Queries the Settings and returns the user selected IAP/SNAP
+     */
+    TCmSettingSelectionMode GetUserSelectionL();
+    
+    /**
+     * SetAccessPointDetailsL()
+     * Sets the details of the chosen IAP in cenrep
+     */
+    void SetAccessPointDetailsL(TUint aId);
+    
+    /**
+     * SetListBoxTextL()
+     * Sets the text of the Network Selection in the Settings UI
+     */
+    void SetListBoxTextL();
+
+protected:
+
+    /**
+     * Constructor.
+     *
+     * @param   aModel      The model that provides writing and reading of the settings.
+     */
+    IMPORT_C CIRCommonSettingsContainer();
+
+    /**
+     * Second-phase constructor.
+     */
+    IMPORT_C void BaseConstructL();
+
+// from base class CAknSettingItemList.
+
+	/**
+     * CreateSettingItemL()
+     * Creates a setting item based upon the user id aSettingId
+     */
+    IMPORT_C virtual CAknSettingItem* CreateSettingItemL( TInt aSettingId );
+    
+    /**
+     * EditItemL()
+     * Launches the setting page for the current item 
+     */
+    IMPORT_C virtual void EditItemL( TInt aIndex, TBool aCalledFromMenu );
+
+// from base class CCoeControl
+
+	/**
+     * GetHelpContext()
+     * Gets the control's help context
+     */
+    IMPORT_C void GetHelpContext( TCoeHelpContext& aContext ) const;
+    
+    /**
+     * SizeChanged()
+     * Responds to changes to the size and position of the contents of this control.
+     */
+    IMPORT_C void SizeChanged();
+    
+    
+    /**
+     * ShowConnectionSettingsUiL()
+     * Displays the connection settings ui
+     */
+    void ShowConnectionSettingsUiL();
+
+private:
+
+    /**
+     * iIRSettings
+     * An instance of the CIRSettings class
+     */
+    CIRSettings* iIRSettings;
+    
+    /**
+     * iAccessPointIndex
+     * Index of the AccessPoint setting
+     */
+    TInt iAccessPointIndex;
+    
+    /**
+     * iWifiBitRateIndex
+     * Index of the WifiBitRate setting
+     */
+    TInt iWifiBitRateIndex;
+    
+    /**
+     * i3GBitRateIndex
+     * Index of the 3GBitRate setting
+     */
+    TInt i3GBitRateIndex;
+    
+    /**
+     * iGprsBitRateIndex
+     * Index of the GprsBitRate setting
+     */
+    TInt iGprsBitRateIndex;
+    
+    /**
+     * iNetworkController
+     * An instance of the CIRNetworkController class
+     */
+	CIRNetworkController* iNetworkController;
+	
+	/** 
+	 * iIapArray
+	 * An array of Available IAP IDs 
+	 */
+	const CDesCArray* iIapArray;
+
+	/** 
+	 * iDestinationSelected
+	 * A Boolean value to indicate if the selection is a Destination
+	 */
+	TBool iDestinationSelected;
+    };
+
+#endif // C_CIRCOMMONSETTINGSCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsviewinc/irsettingsviewbase.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2006-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:  Base class for the Settings View
+*
+*/
+
+
+#ifndef C_CIRSETTINGSVIEWBASE_H
+#define C_CIRSETTINGSVIEWBASE_H
+
+#include <coneresloader.h>
+#include <gsplugininterface.h>
+
+
+class CIRCommonSettingsContainer;
+
+/**
+ * Implements the common settings view for internet Radio.
+ * Inherited from the general settings plugin interface so that 
+ * common behaviour can be shared between General Settings View and 
+ * internet Radio's own settings view.
+ */
+
+  class CIRSettingsViewBase : public CGSPluginInterface
+    {
+
+public:
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C virtual ~CIRSettingsViewBase();
+    
+    /**
+     * ResolveDriveL()
+     * Static version of ResolveDriveL.
+     */
+    IMPORT_C void ResolveDriveL( const RFs& aFs, TFileName& aFileName );
+        
+     /**
+     * SetTitleL()
+     * Sets the Title of the View
+     */
+
+    IMPORT_C void SetTitleL( TInt aResourceId );
+    
+        
+     /**
+     * HandleForegroundEventL()
+     * Handles changes in keyboard focus when an application switches to 
+     * foreground
+     */
+
+    IMPORT_C void HandleForegroundEventL( TBool aForeground );
+
+protected:
+
+    /**
+     * Constructor.
+     */
+    IMPORT_C CIRSettingsViewBase();
+
+    /**
+     * Second-phase constructor.
+     */
+    IMPORT_C void BaseConstructL();
+
+    /**
+     * Loads resource file with given resource loader
+     *
+     * @param aResourceLoader A reference to resource loader
+     * @param aFileName The resource file to be opened, no path included
+     */
+    IMPORT_C void LoadResourcesL( RConeResourceLoader& aResourceLoader, const TDesC& aFileName );
+    
+// from base class CAknView
+
+    
+     /**
+     * DoActivateL()
+     * View activation
+     */
+
+    IMPORT_C virtual void DoActivateL( const TVwsViewId& aPrevViewId,
+    		 TUid aCustomMessageId, const TDesC8& aCustomMessage );
+    		 
+    		     
+     /**
+     * DoDeactivate()
+     * View Deactivation
+     */
+
+    IMPORT_C virtual void DoDeactivate();
+    
+        
+     /**
+     * HandleCommandL()
+     * Command Handler
+     */
+
+    IMPORT_C virtual void HandleCommandL( TInt aCommand );
+    
+    // from base class CGSPluginInterface
+    
+        
+     /**
+     * GetCaptionL()
+     * Gets the caption
+     */
+
+    IMPORT_C virtual void GetCaptionL( TDes& aCaption ) const;
+
+   
+private:
+
+    /**
+     * DeleteContainer()
+     * Deletes the container and removes it from the view stack.
+     */
+    void DeleteContainer();
+
+    /**
+     * CreateContainerL()
+     * Constructs new container
+     */
+    virtual void CreateContainerL() = 0;
+    
+    
+
+protected:
+
+    
+     /**
+     * iContainer
+     * Static version of ResolveDriveL.
+     */
+
+	CIRCommonSettingsContainer* iContainer;
+    
+private:
+
+   
+    /** 
+     * iSettingsBaseResourceLoader
+     * The resource loader for the resource file.
+     */
+    RConeResourceLoader iSettingsBaseResourceLoader;
+
+	/** 
+	 * iPrevViewUid
+	 * The UID of the view that activated this one. 
+	 */
+    TUid iPrevViewUid;
+    };
+
+#endif // C_CIRSETTINGSVIEWBASE_H 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsviewsrc/ircommonsettingscontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,540 @@
+/*
+* Copyright (c) 2006-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:  Container class for the settings UI
+*
+*/
+
+
+#include <aknnotewrappers.h>
+#include <e32property.h>
+#include <stringloader.h>
+#include <akntitle.h> 
+#include <cmmanager.h>
+#include <cmdestination.h>
+#include "ircommonsettingscontainer.h"
+#include "ir.hrh"
+#include <internetradio.rsg>
+#include "irnetworkcontroller.h"
+#include "iraap.hlp.hrh"
+#include "irdebug.h" //  PC-Lint comments :: SPP
+
+#define KUIDIRAPP 0x2000B499
+const TUid KIRMCVUid = {KUIDIRAPP};
+
+const TInt KBufSize = 256;
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// NewL()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCommonSettingsContainer* CIRCommonSettingsContainer::NewL()
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::NewL - Entering" );
+    CIRCommonSettingsContainer* self = new ( ELeave ) CIRCommonSettingsContainer(/*aAccessPointList, aDefaultAccessPoint*/);
+    CleanupStack::PushL( self );
+    self->BaseConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::NewL - Exiting" );
+    return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCommonSettingsContainer::CIRCommonSettingsContainer( ) 
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::CIRCommonSettingsContainer" );
+    }
+
+// ---------------------------------------------------------------------------
+// BaseConstructL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCommonSettingsContainer::BaseConstructL()
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::BaseConstructL - Entering" );
+    iNetworkController = CIRNetworkController::OpenL();
+    iIRSettings = CIRSettings::OpenL();
+    ConstructFromResourceL( R_IR_SETTING_LIST );
+    iDestinationSelected = EFalse;
+    SetListBoxTextL() ;
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::BaseConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRCommonSettingsContainer::~CIRCommonSettingsContainer()
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::~CIRCommonSettingsContainer - Entering" );
+	if(iIRSettings) 
+		{
+		iIRSettings->Close();
+		iIRSettings = NULL;
+		}
+	if(iNetworkController) 
+		{
+		iNetworkController->Close();
+		iNetworkController = NULL;	
+		}
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::~CIRCommonSettingsContainer - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// EditCurrentItemL()
+// Starts editing of the current item.
+// ---------------------------------------------------------------------------
+//
+void CIRCommonSettingsContainer::EditCurrentItemL( TBool aCalledFromMenu )
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::EditCurrentItemL - Entering" );
+    EditItemL( ListBox()->CurrentItemIndex(), aCalledFromMenu );
+    DrawDeferred();
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::EditCurrentItemL - Exiting" );
+    }
+ 
+TInt CIRCommonSettingsContainer::GetCurrentSelection()
+	{
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::GetCurrentSelection - Entering" );
+	TInt current = ListBox()->CurrentItemIndex();
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::GetCurrentSelection - Exiting" );
+	if((current >= 0) && (current < SettingItemArray()->Count()))
+		{
+		return SettingItemArray()->At( current )->Identifier();
+		}
+	else 
+		{
+		return 0;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CreateSettingItemL()
+// From CAknSettingItemList.
+// Creates a setting item based upon the user id aSettingId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknSettingItem* CIRCommonSettingsContainer::CreateSettingItemL( TInt aSettingId )
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::CreateSettingItemL - Entering" );
+    CAknSettingItem* item = NULL;
+ 
+    switch ( aSettingId )
+        {
+        case EIRSettingItemSnapSelectionID:
+			{
+			iAccessPointIndex = 0;
+			// Need to use this class later
+			item = new (ELeave) CAknEnumeratedTextPopupSettingItem(aSettingId, 
+													iAccessPointIndex);
+			}
+        break;
+            
+        case EIRSettingItemGprsConnBitRateID:
+			{
+			iGprsBitRateIndex = 0;
+			item = new (ELeave) CAknEnumeratedTextPopupSettingItem(aSettingId, 
+															iGprsBitRateIndex);
+			iGprsBitRateIndex = iIRSettings->GetGPRSBitrateQuality();
+			}
+		break;
+	           
+        case EIRSettingItem3GConnBitRateID:
+			{
+			i3GBitRateIndex = 0;
+			item = new (ELeave) CAknEnumeratedTextPopupSettingItem(aSettingId, 
+															i3GBitRateIndex);                
+			i3GBitRateIndex = iIRSettings->Get3GBitrateQuality();
+			}
+        break;
+               
+        case EIRSettingItemWiFiConnBitRateID:
+			{
+			iWifiBitRateIndex = 0;
+			item = new (ELeave) CAknEnumeratedTextPopupSettingItem(aSettingId, 
+														iWifiBitRateIndex);                
+			iWifiBitRateIndex = iIRSettings->GetWiFiBitrateQuality();
+			}
+        break;
+        
+        default:
+            break;
+        }
+     
+    LoadSettingsL();
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::CreateSettingItemL - Exiting" );
+    return item;
+
+    }
+
+// ---------------------------------------------------------------------------
+// EditItemL()
+// Called when an item is being edited.
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRCommonSettingsContainer::EditItemL( TInt aIndex, TBool aCalledFromMenu )
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::EditItemL - Entering" );
+	if((aIndex >= 0) && (aIndex < SettingItemArray()->Count()))
+    {
+	    TInt settingId = SettingItemArray()->At( aIndex )->Identifier();
+	    
+	    switch ( settingId )
+	        {
+	        case EIRSettingItemGprsConnBitRateID:
+	        	{
+	           	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+	        	SettingItemArray()->At( aIndex )->StoreL();
+            iIRSettings->SetGPRSBitrateQualityL(iGprsBitRateIndex);
+	            break;
+	        	}
+	        case EIRSettingItem3GConnBitRateID:
+	        	{
+	        	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+	  	   		SettingItemArray()->At( aIndex )->StoreL();
+            iIRSettings->Set3GBitrateQualityL(i3GBitRateIndex);
+	            break;
+	        	}
+	        case EIRSettingItemWiFiConnBitRateID:
+	        	{
+	        	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+	  			SettingItemArray()->At( aIndex )->StoreL();
+            iIRSettings->SetWiFiBitrateQualityL(iWifiBitRateIndex);
+	            break;
+	        	}
+	        case EIRSettingItemSnapSelectionID:
+	        	{
+	           	ShowConnectionSettingsUiL();
+	        	break;
+	        	}
+	        default:
+	            break;
+	        }
+	    IRLOG_DEBUG( "CIRCommonSettingsContainer::EditItemL - Exiting" );
+	    }
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the help context.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRCommonSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::GetHelpContext - Entering" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_SETTINGS );
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::GetHelpContext - Exiting" );
+    }
+  
+// -----------------------------------------------------------------------------
+// CIRCommonSettingsContainer::SizeChanged
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CIRCommonSettingsContainer::SizeChanged()
+    {
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::SizeChanged - Entering" );
+    CAknSettingItemList::SizeChanged();
+    CEikListBox* lb = ListBox();
+    if( lb )
+        {
+        lb->SetRect( Rect() );  // Needed to update listbox after portrait-landscape change
+        }
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::SizeChanged - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// ShowConnectionSettingsUiL
+// Displays the connection settings ui
+// ---------------------------------------------------------------------------
+//
+void CIRCommonSettingsContainer::ShowConnectionSettingsUiL()
+	{
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::ShowConnectionSettingsUiL - Entering" );
+	TCmSettingSelection userSelection;
+	userSelection.iResult = GetUserSelectionL() ;
+	if(userSelection.iResult == EDestination)
+		{
+		userSelection.iId = iIRSettings->GetDestinationIdL();	
+		}
+	else if(userSelection.iResult == EConnectionMethod)
+		{
+		userSelection.iId = iIRSettings->GetApIdL();	
+		}
+	else
+		{
+		userSelection.iId =0;	
+		}
+
+	CCmApplicationSettingsUi* settings = CCmApplicationSettingsUi::NewL();
+	CleanupStack::PushL( settings );
+
+	TUint listedItems = EShowAlwaysAsk | EShowDefaultConnection |
+						EShowDestinations | EShowConnectionMethods;
+
+	TBearerFilterArray filter;
+	TBool selected = EFalse;
+
+	TRAPD( settingsErr, selected = settings->RunApplicationSettingsL( userSelection, 
+																		listedItems, filter ) );
+
+	CleanupStack::PopAndDestroy( settings );
+
+	if((selected == EFalse) || (settingsErr != KErrNone) )
+		{
+		return;
+		}
+
+	switch ( userSelection.iResult )
+		{
+		case EAlwaysAsk:
+			{
+			iIRSettings->SetUserDefinedSelectionL(EUserSelectionAlwaysAsk);
+			iIRSettings->SetDisplayAccessPointL();
+			break;
+			}
+		case EDefaultConnection:
+			{
+			iIRSettings->SetUserDefinedSelectionL(EUserSelectionDefaultConnection);
+			break;
+			} 
+		
+		case EDestination:
+			{
+			iIRSettings->SetUserDefinedSelectionL(EUserSelectionDestination);
+			iIRSettings->SetDestinationIdL(userSelection.iId);
+			iDestinationSelected = ETrue;
+			break;
+			}
+			
+		case EConnectionMethod:
+			{
+			iIRSettings->SetUserDefinedSelectionL(EUserSelectionConnectionMethod);
+			SetAccessPointDetailsL(userSelection.iId);
+			iDestinationSelected = EFalse;
+			break;
+			}
+		default:
+			{
+			break;
+			} 
+		}
+		SetListBoxTextL();
+		IRLOG_DEBUG( "CIRCommonSettingsContainer::ShowConnectionSettingsUiL - Exiting" );
+	}
+
+
+
+
+    
+// ---------------------------------------------------------------------------
+// UpdateStatusL()
+// Fetches the new settings values from iIRSettings and updates the list
+// ---------------------------------------------------------------------------
+//
+void CIRCommonSettingsContainer::UpdateStatusL()
+	{	
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::UpdateStatusL - Entering" );
+	iGprsBitRateIndex = iIRSettings->GetGPRSBitrateQuality();
+    i3GBitRateIndex = iIRSettings->Get3GBitrateQuality();
+    iWifiBitRateIndex = iIRSettings->GetWiFiBitrateQuality();
+    LoadSettingsL();
+    SetListBoxTextL();
+    IRLOG_DEBUG( "CIRCommonSettingsContainer::UpdateStatusL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// GetUserSelectionL()
+// Queries the Settings and returns the user selected IAP/SNAP
+// ---------------------------------------------------------------------------
+//
+TCmSettingSelectionMode CIRCommonSettingsContainer::GetUserSelectionL()
+	{
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::GetUserSelectionL - Entering" );
+	TUint32 userSelection;
+	userSelection = iIRSettings->GetUserDefinedSelectionL();
+	TCmSettingSelectionMode ret = EAlwaysAsk;	
+	switch(userSelection)
+		{
+		case EUserSelectionAlwaysAsk:
+			ret = EAlwaysAsk;
+			break;
+			
+		case EUserSelectionDefaultConnection:
+			ret = EDefaultConnection ;
+			break;
+			
+		case EUserSelectionDestination:
+			ret = EDestination;
+			break;
+			
+		case EUserSelectionConnectionMethod:
+			ret = EConnectionMethod;
+			break;
+			
+		default:
+			ret = EAlwaysAsk;
+			break;	
+		
+		}
+	    IRLOG_DEBUG( "CIRCommonSettingsContainer::GetUserSelectionL - Exiting" );
+		return ret;
+	}
+
+
+// ---------------------------------------------------------------------------
+// SetAccessPointDetailsL()
+// Sets the details of the chosen IAP in cenrep
+// ---------------------------------------------------------------------------
+//
+void CIRCommonSettingsContainer::SetAccessPointDetailsL(TUint aId)
+	{
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::SetAccessPointDetailsL - Entering" );
+	//Get All the bearer IDs(RArray)
+	const RArray<TUint32>& bearerIDArray = iNetworkController->GetBearerList();
+	const RArray<TUint32>& networkIDArray = iNetworkController->GetNetworkList();
+	const RArray<TUint32>& accessPointIDArray = iNetworkController->GetApList();
+	
+	TInt index =0;
+	//Get access point index, that matches the access point stored in 
+	// settings previously
+	for(TInt i=0; i<accessPointIDArray.Count(); i++ )
+		{
+		if(accessPointIDArray[i] == aId )	
+			{
+			index = i;	
+			}
+		}	
+
+	TUint32 bearerId = bearerIDArray[index];
+	TUint32 networkId = networkIDArray[index];
+	TUint32 accessPointId = accessPointIDArray[index];
+
+	//This stores the settings in Central Repository
+	iIRSettings->SetUserSavedApSettingsL(bearerId, networkId,accessPointId);
+
+	// Save the settings for use by IRNetworkContorller			
+	iIRSettings->SetBearerIdL(bearerId);
+	iIRSettings->SetNetworkIdL(networkId);
+	iIRSettings->SetApIdL(accessPointId);
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::SetAccessPointDetailsL - Exiting" );
+	}
+	
+// ---------------------------------------------------------------------------
+// SetListBoxTextL()
+// Sets the text of the Network Selection in the Settings UI
+// ---------------------------------------------------------------------------
+//	
+void CIRCommonSettingsContainer::SetListBoxTextL()
+	{
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::SetListBoxTextL - Entering" );
+	if(SettingItemArray()->Count()>0)
+		    {
+		    switch(GetUserSelectionL())
+				{
+				case EAlwaysAsk:
+					{
+					HBufC* stringholder = StringLoader::LoadLC( R_IR_ACCESS_ASK);
+					SettingItemArray()->At( 0 )->SetEmptyItemTextL(*stringholder);
+					CleanupStack::PopAndDestroy(stringholder);
+					HandleChangeInItemArrayOrVisibilityL();
+					ActivateL();		
+					break;	
+					}
+					
+				case EDefaultConnection:
+					{
+					HBufC* stringholder = StringLoader::LoadLC( R_IR_SETTINGS_SNAP_DEFAULT);
+					SettingItemArray()->At( 0 )->SetEmptyItemTextL(*stringholder);
+					CleanupStack::PopAndDestroy(stringholder);
+					HandleChangeInItemArrayOrVisibilityL();
+					ActivateL();
+					break;
+					}
+					
+				case EDestination:
+					{
+					RCmManager cmManager;
+					cmManager.OpenL();
+			TRAPD(err, RCmDestination dest = cmManager.DestinationL( iIRSettings->GetDestinationIdL() ));
+		    		if (err == KErrNone)
+			    		{
+				RCmDestination dest = cmManager.DestinationL(iIRSettings->GetDestinationIdL());
+						CleanupClosePushL( dest );
+					
+						HBufC* destName = dest.NameLC();
+						TBuf<KBufSize> item;
+						_LIT( KStringFormat, "%S" );
+						item.Format( KStringFormat,destName );
+						
+						SettingItemArray()->At( 0 )->SetEmptyItemTextL(item);
+						HandleChangeInItemArrayOrVisibilityL();
+						ActivateL();
+						CleanupStack::PopAndDestroy( destName ); // destName, dest
+						CleanupStack::PopAndDestroy( &dest);
+			    		}
+			    	cmManager.Close();
+					break;
+					}
+				
+				case EConnectionMethod:
+					{
+					if(!iDestinationSelected)
+						{
+						iIapArray = iNetworkController->GetAccessPointList();
+						const RArray<TUint32>& accessPointIDArray = iNetworkController->GetApList();
+		
+						TInt index = 0;
+						//Get access point index, that matches the access point stored in 
+						// settings previously
+						for(TInt i=0; i<accessPointIDArray.Count(); i++ )
+							{
+					if(accessPointIDArray[i] == iIRSettings->GetApIdL())	
+								{
+								index = i;	
+								}
+							}		
+						TPtrC list;
+						list.Set(iIapArray->MdcaPoint(index));
+						HBufC* itemText = HBufC::NewLC(list.Length());
+						itemText->Des().Copy(list);	
+								
+						SettingItemArray()->At( 0 )->SetEmptyItemTextL(list);
+						HandleChangeInItemArrayOrVisibilityL();
+						ActivateL();
+						CleanupStack::PopAndDestroy(itemText);	
+						}
+			
+					break;
+					}
+				default:
+					break;
+				
+				} 
+		    }
+	IRLOG_DEBUG( "CIRCommonSettingsContainer::SetListBoxTextL - Exiting" );
+	}
+
+
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/settingsviewsrc/irsettingsviewbase.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,305 @@
+/*
+* Copyright (c) 2006-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:  Base class for the Settings View
+*
+*/
+
+
+#include <bldvariant.hrh>
+#include <featmgr.h>
+#include <hlplch.h>
+#include <pathinfo.h>
+#include <stringloader.h>
+#include <bautils.h>
+#include "ir.hrh"
+#include "ircommonsettingscontainer.h"
+#include "irsettingsviewbase.h"
+#include "irdebug.h"
+#include <internetradio.rsg>
+#include <aknappui.h>
+#include <akntitle.h> 
+
+
+
+
+// Settings view resource file.
+_LIT( KIRSettingsViewResourceFile, "apps\\internetradio.rsc" );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+    
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSettingsViewBase::CIRSettingsViewBase()
+    : iSettingsBaseResourceLoader( *iCoeEnv )
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::CIRSettingsViewBase " );
+    }
+    
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettingsViewBase::BaseConstructL()
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::BaseConstructL - Entering " );
+    FeatureManager::InitializeLibL();
+    LoadResourcesL( iSettingsBaseResourceLoader, KIRSettingsViewResourceFile );
+    CAknView::BaseConstructL( R_IR_SETTINGSVIEW );
+    IRLOG_DEBUG( "CIRSettingsViewBase::BaseConstructL - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSettingsViewBase::~CIRSettingsViewBase()
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::~CIRSettingsViewBase - Entering " );
+	DeleteContainer();
+    FeatureManager::UnInitializeLib();
+    iSettingsBaseResourceLoader.Close();
+    IRLOG_DEBUG( "CIRSettingsViewBase::~CIRSettingsViewBase - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// LoadResourcesL()
+// Loads the required resources.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettingsViewBase::LoadResourcesL( RConeResourceLoader& aResourceLoader, 
+                                                   const TDesC& aFileName )
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::LoadResourcesL - Entering " );
+    TFileName resourceFileName( KDC_RESOURCE_FILES_DIR );
+    resourceFileName.Append(aFileName);
+	   
+    ResolveDriveL( iCoeEnv->FsSession(), resourceFileName );
+
+    aResourceLoader.OpenL( resourceFileName );
+    IRLOG_DEBUG( "CIRSettingsViewBase::LoadResourcesL - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// DoActivateL()
+// View activation
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettingsViewBase::DoActivateL( const TVwsViewId& aPrevViewId,
+				 TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::DoActivateL - Entering." );
+    
+    CreateContainerL();
+    
+    StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
+    
+    iContainer->SetMopParent( this );
+    AppUi()->AddToViewStackL( *this, iContainer );
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+    
+    iPrevViewUid = aPrevViewId.iViewUid;
+    IRLOG_DEBUG( "CIRSettingsViewBase::DoActivateL - Exiting " );
+    
+	}
+
+// ---------------------------------------------------------------------------
+// DoDeactivate()
+// View deactivation
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettingsViewBase::DoDeactivate()
+    {
+	IRLOG_DEBUG( "CIRSettingsViewBase::DoDeactivate - Entering " );
+    DeleteContainer();
+    IRLOG_DEBUG( "CIRSettingsViewBase::DoDeactivate - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// HandleCommandL()
+// Command handler.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettingsViewBase::HandleCommandL( TInt aCommand )
+    {
+    IRRDEBUG2( " *** Internet Radio -- CIRSettingsViewBase::HandleCommandL(%d)", aCommand );
+    switch ( aCommand )
+        {
+		case EIRCmdChangeSetting: //Falls through
+		case EAknSoftkeyChange:
+			{
+			TBool calledFromMenu = ( aCommand == EIRCmdChangeSetting);
+			iContainer->EditCurrentItemL( calledFromMenu );
+			break;
+        	}
+          
+        case EHelpCmd:
+        	{
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+            				 AppUi()->AppHelpContextL() );
+        	}
+            break;
+            
+        //Only if invoked from settings plugin
+        case EAknSoftkeyBack:
+		case EIRBack:
+			{
+			AppUi()->ActivateLocalViewL( iPrevViewUid );	
+			}
+			break;
+		
+		case EEikCmdExit:
+		case EExitCmd:  //lint -fallthrough
+        case EIRExit:
+		case EAknSoftkeyExit:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+		
+		break;
+		
+        default:
+        	AppUi()->HandleCommandL(aCommand);
+        break;
+        }
+	    IRLOG_DEBUG( "CIRSettingsViewBase::HandleCommandL - Exiting " );
+    }
+ 
+// ---------------------------------------------------------------------------
+// HandleForegroundEventL()
+// Handles changes in keyboard focus when an application switches to foreground
+// ---------------------------------------------------------------------------
+// 
+ 
+ EXPORT_C void CIRSettingsViewBase::HandleForegroundEventL( TBool aForeground )
+	 {
+	 IRLOG_DEBUG( "CIRSettingsViewBase::HandleForegroundEventL - Entering " );
+	 	if(aForeground)
+	 		{
+	 		iContainer->UpdateStatusL();
+	 		}
+	 	IRLOG_DEBUG( "CIRSettingsViewBase::HandleForegroundEventL - Exiting " );
+	 }
+ 
+ 
+// ---------------------------------------------------------------------------
+// SetTitleL()
+// Sets the Title of the View
+// ---------------------------------------------------------------------------
+// 
+ 
+ EXPORT_C void CIRSettingsViewBase::SetTitleL( TInt aResourceId )
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::SetTitleL - Entering " );
+    HBufC* title = StringLoader::LoadLC(aResourceId);
+    static_cast<CAknTitlePane*>( StatusPane()->ControlL(
+    			 TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( *title );
+    CleanupStack::PopAndDestroy( title );
+    IRLOG_DEBUG( "CIRSettingsViewBase::SetTitleL - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// DeleteContainer()
+// Deletes container
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsViewBase::DeleteContainer()
+    {
+	IRLOG_DEBUG( "CIRSettingsViewBase::DeleteContainer - Entering " );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer = NULL;
+    	}
+    IRLOG_DEBUG( "CIRSettingsViewBase::DeleteContainer - Exiting " );
+    }
+    
+// ---------------------------------------------------------------------------
+// Static version of ResolveDriveL.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSettingsViewBase::ResolveDriveL( const RFs& aFs, TFileName& aFileName ) 
+    {
+    IRRDEBUG2( "CIRSettingsViewBase::ResolveDriveL( aFileName = %S )", &aFileName );
+
+    _LIT( resourceFileExt, ".rsc" );
+    
+    TParsePtrC romDrive( PathInfo::RomRootPath() );
+    TParsePtrC phoneDrive( PathInfo::PhoneMemoryRootPath() );
+    TParsePtrC mmcDrive( PathInfo::MemoryCardRootPath() );
+    
+    TParse parse;
+    User::LeaveIfError( parse.Set( mmcDrive.Drive(), NULL, &aFileName ) );
+    
+    TBool isResourceFile = (parse.Ext() == resourceFileExt());
+    
+    aFileName = parse.FullName();
+    
+    if ( isResourceFile )
+        {
+        BaflUtils::NearestLanguageFile( aFs, aFileName );
+        }
+    
+    if ( !BaflUtils::FileExists( aFs, aFileName ) )
+        { 
+        User::LeaveIfError( parse.Set( phoneDrive.Drive(), NULL, &aFileName ) );
+        aFileName = parse.FullName();
+        
+        if ( isResourceFile )
+            {
+            BaflUtils::NearestLanguageFile( aFs, aFileName );
+            }
+        
+        if ( !BaflUtils::FileExists( aFs, aFileName ) )
+            {
+            User::LeaveIfError( parse.Set( romDrive.Drive(), NULL, &aFileName ) );
+            aFileName = parse.FullName();
+            
+            if ( isResourceFile )
+                {
+                BaflUtils::NearestLanguageFile( aFs, aFileName );
+                }
+            
+            if ( !BaflUtils::FileExists( aFs, aFileName ) )
+                {
+                IRRDEBUG2( "CVRSettings::ResolveDriveL - File %S not found!", &aFileName );
+                User::Leave( KErrNotFound );
+                }
+            }
+        }
+
+    IRRDEBUG2( "CIRSettingsViewBase::ResolveDriveL( aFileName = %S )", &aFileName );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// GetCaptionL()
+// Gets the caption
+// ---------------------------------------------------------------------------
+//    
+
+EXPORT_C void CIRSettingsViewBase::GetCaptionL( TDes& aCaption ) const
+    {
+    IRLOG_DEBUG( "CIRSettingsViewBase::GetCaptionL - Entering " );
+    aCaption.Zero();
+    IRLOG_DEBUG( "CIRSettingsViewBase::GetCaptionL - Exiting " );
+	return;
+    }
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistoryinc/irsonghistorydb.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,318 @@
+/*
+* Copyright (c) 2006-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:  Song History database used for stroing song history entries.
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Thu Apr 14 12:00:00 2008 by Rohit
+*  Ref:
+*  Pc lint fixes
+*
+*  Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef CIRSONGHISTORYDB_H
+#define CIRSONGHISTORYDB_H
+
+#include <d32dbms.h>
+#include "irsettings.h"
+
+class CIRSongHistoryInfo;
+class CIRSettings;
+ 
+
+// Maximum no of entries to be stored in the history list.
+const TInt KMaxNoChannelHistoryDbEntries = 30;
+const TInt KMaxNoSongHistoryDbEntries = 100;
+
+// Maximum length of Dbms field string
+const TInt KIRDbMaxStrLen = 255;
+
+const TInt KIRDbMaxChType = 2;
+
+
+
+NONSHARABLE_CLASS(CIRSongHistoryDb) : public RDbNamedDatabase
+	{
+//member functions
+public:
+
+	/**
+	* Function : NewL()
+	* Two phased construction
+	* @return instance of CIRSongHistoryDb
+	*/
+		static CIRSongHistoryDb* NewL();
+
+	/**
+	* Function : NewLC()
+	* Two phased construction
+	* @return instance of CIRSongHistoryDb
+	*/
+		static CIRSongHistoryDb* NewLC();
+
+	/**
+	* Function : ~CIRSongHistoryDb()
+	* default destructor
+	*/
+		~CIRSongHistoryDb();
+
+
+
+	/**
+	* Function : AddToSongHistoryDbL()
+	* adds the song history entry into data base
+	* @param various channel information 
+	*/
+	TBool AddToSongHistoryDbL( const TDesC& aSongName,
+								const TDesC& aArtistName, 
+								const TDesC& aChannelName, 
+								const TDesC& aChannelUrl,
+								RBuf& aDelSongName, 
+								RBuf& aDelArtistname, 
+								RBuf& aDelChannelName, 
+								RBuf& aDelChannelUrl,
+								TInt  aChannelType,
+								TInt aChannelId,
+								TInt aBitrate,
+								const TDesC& aChannelDesc,
+								const TDesC& aImageUrl,
+								const TDesC& aMusicFlag);
+	 /**
+	 * Function : AddToSongHistoryDb2L()
+	 * adds the song history entry into data base
+	 * @param various song information 
+	 */
+	 TBool AddToSongHistoryDb2L( const TDesC& aSongName,
+	                             const TDesC& aArtistName, 	                                
+	                             const TDesC& aMusicFlag);
+
+
+	/**
+	* CIRSongHistoryDb::GetAllSongHistoryListL()
+	* gets all the song history entries  into an array
+	* @param aSongHistoryEntries is the array which is to be filled by the SongHistoryDb. 
+	*/
+
+		void GetAllSongHistoryListL(RPointerArray<CIRSongHistoryInfo>& aSongHistoryEntries);
+    /**
+	* CIRSongHistoryDb::GetAllSongHistoryList2L()
+	* gets all the song history entries  into an array
+	* @param aSongEntries is the array which is to be filled by the SongHistoryDb. 
+	*/
+		void GetAllSongHistoryList2L(RPointerArray<CIRSongHistoryInfo>& aSongEntries);
+	/**
+	* Function : ClearAllSongHistoryFromDb
+	* delete all the song entries from the database.
+	*/
+
+		TInt ClearAllSongHistoryFromDb();
+		
+	/**
+	* Function : ClearAllSongHistoryFromDb2
+	* delete all the song entries from the database.
+	*/
+		TInt ClearAllSongHistoryFromDb2();
+
+	/**
+	* Function : CountSongHistoryDb()
+	* count the database entries
+	*/
+
+		TInt CountSongHistoryDb();
+		
+	/**
+	* Function : CountSongHistoryDb2()
+	* count the database entries
+	*/
+		TInt CountSongHistoryDb2();
+
+	/**
+	* Function : GetLastHistoryItemL()
+	* Gives the last added entry in the database
+	* @param Channel data to be filled .
+	*/
+	void GetLastHistoryItemL(RBuf& aSongName, RBuf& aArtistName,
+					 RBuf& aChannelName, RBuf& aChannelUrl);
+
+	/**
+	* Function : GetChannelSongsCount()
+	* Returns SongsCount for given channel
+	*/
+	TUint GetChannelSongsCountL( const RBuf& aChannelName, const RBuf& aChannelUrl );
+	
+	/**
+	* Function : GetChannelSongsCount()
+	* Updates the song history DB when there is a channel removed in the isds.
+	*/
+    void SyncSongHistoryDbL(TInt aChannelId) ;
+    
+	/**
+	* Function : GetIdPresentInDb()
+	* Gets whether the particular channel ID is present in history DB or not. 
+	*/
+    TBool GetIdPresentInDbL(TInt aChannelId) ;
+    
+	/**
+	* Function : UpdateSongHistoryDb()
+	* Updates the song history DB when there is a channel change in the isds.
+	*/
+    TInt UpdateSongHistoryDbL( TInt aChannelId,
+    	                      const TDesC& aChannelName, 
+						      const TDesC& aChannelUrl,
+						      const TDesC& aImageUrl,
+							  const TDesC& aMusicFlag);
+
+    /*
+     * search if a record already exists in database. If yes, delete it.
+     */
+    void SearchAndDeleteRecordL(const TDesC& aChannelName, const TDesC& aChannelUrl,
+                                TInt aChannelType);
+    
+    /*
+     * delete a recorder by the index
+     * */
+    TInt DeleteOneHistory(TInt aIndex);
+    
+
+private:
+
+	/**
+	* Function : ConstructL()
+	* two phase construction
+	*/
+    void ConstructL();
+
+    /**
+	* Function : CloseSongHistoryDb()
+	* Closes the database
+	*/
+	void CloseSongHistoryDb();
+
+	/**
+	* Function : CreateSongHistoryTablesL()
+	* creates songhistory table with three columns
+	* log data
+	* ---------------------------------------------------------------------------
+	* SongHistoryTable
+	*---------------------------
+	*| SongName | ArtistName | ChannelName | ChannelUrl | ChannelType | ChannelId | Bitrate | ChannelDesc | ImageUrl
+	*---------------------------
+	*|EDbColText| EDbColText | EDbColText | EDbColText | EDbColUint8 | EDbColUint16 | EDbColUint16 | EDbColText | EDbColText
+	*----------------------------------------------------------------------------
+	*/
+	void CreateSongHistoryTablesL();
+	
+    /**
+	* Function : CreateSongHistoryTables2L()
+	* creates songhistory table with three columns
+	* log data
+	* ---------------------------------------------------------------------------
+	* SongHistoryTable
+	*---------------------------
+	*| SongName | ArtistName | MusicStatusFlag
+	*---------------------------
+	*|EDbColText| EDbColText | EDbColText |
+	*----------------------------------------------------------------------------
+	*/
+	void CreateSongHistoryTables2L();
+
+   /**
+	* Function : CreateDbCondition()
+	* Creates  the dbms file conditionally(only if not yet created)
+	* @param aSongHistoryDbFile the Database file name
+	*/
+	void CreateDbCondition(const TFileName& aSongHistoryDbFile);
+
+
+	/**
+	* Function : OpenSongHistoryDbL()
+	* @param aSongHistoryDbFile the Database file name
+	* opening the data base
+	*/
+	void OpenSongHistoryDbL(const TFileName& aSongHistoryDbFile);
+
+	/**
+	* Function : CreateSongHistoryDb()
+	* creates the dbms files
+	* @param aSongHistoryDbFile database filename
+	*/
+	TInt CreateSongHistoryDb(const TFileName& aSongHistoryDbFile);
+	
+	/**
+	 * to wrapper the delete leaving
+	 */
+	TInt DeleteOneHistoryL(TInt aIndex);
+
+	/**
+	* Data-structure to hold unique channel info
+	*/
+	class CIRChannelInfo : public CBase
+	{
+	public:
+		~CIRChannelInfo()
+		{
+			iChannelUrl.Close();
+			iChannelName.Close();
+		}
+		RBuf iChannelUrl;
+		RBuf iChannelName;
+		TInt iChannelType;
+	};
+	
+
+
+	/**
+	* Comparer function to compare two CIRChannelInfo's
+	*/
+	static TBool CompareChannelInfos(const CIRChannelInfo& aFirst, const CIRChannelInfo& aSecond);
+	 
+//data members
+
+private:
+
+	//	File session
+
+    RFs iFsSession;
+
+
+     //	Table which stores History information
+
+    RDbTable iSongHistoryTable;
+
+    // only save the song info for the song history view.
+	RDbTable iSongHistoryTable2;
+
+    };
+
+#endif  //CIRSONGHISTORYDB_H
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistoryinc/irsonghistoryengine.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2006-2007 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:  Engine class to notify channel name/metadata changes to SongHistoryDb and UI
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Thu Apr 14 12:00:00 2008 by Rohit
+*  Ref:
+*  Pc lint fixes
+*
+*  Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+
+#ifndef CIRSONGHISTORYENGINE_H
+#define CIRSONGHISTORYENGINE_H
+
+#include "irsonghistoryengpubsubnotifyhandler.h"
+#include "irsonghistorydb.h"
+
+
+class CIRSongHistoryEngPubSub;
+class MSongHistoryUINotifyHandler;
+class CIRMetaData;
+class CIRSongHistoryInfo;
+class RSongHistoryDb;
+class MIRSongHistoryEngPubSubNotifyHandler;
+
+
+enum TSongHistoryItemChange
+{
+	ENOCHANGE = 0,
+	ECHANNELCHANGED,
+	EMETADATACHANGED,
+	EBLANKENTRIES
+};
+
+/**
+* Engine component for Internet Radio SongHistory.
+* This class is responsible for listening to relevant P&S keys and notifying the UI code whenever the listened keys change.
+*/
+NONSHARABLE_CLASS(CIRSongHistoryEngine) : public CBase,public MIRSongHistoryEngPubSubNotifyHandler
+    {
+    public:
+
+    /**
+    * Static constructor.
+    * @param    aUiObserver   The observer to be notified of the changes in the keys.
+    * @return   The newly created CIRSongHistoryEngine object.
+    */
+    	IMPORT_C static CIRSongHistoryEngine* NewL( MSongHistoryUINotifyHandler& aUiObserver );
+
+    /**
+    * Static constructor.
+    * @param    aUiObserver   The observer to be notified of the changes in the keys.
+    * @return   The newly created CIRSongHistoryEngine object.
+    */
+
+    	IMPORT_C static CIRSongHistoryEngine* NewLC( MSongHistoryUINotifyHandler& aUiObserver );
+
+    /**
+    * Destructor.
+    */
+ 	   IMPORT_C ~CIRSongHistoryEngine();
+
+    /**
+    * Construction finalizer.
+    * Must be called after CIRSongHistoryEngine::NewL.
+    */
+	   void ConstructL();
+
+
+	//APIs to serve UI request
+
+    /**
+    * Invoked when UI request.
+    * @param    aArray<CIRSongHistoryInfo>
+    */
+    	IMPORT_C void GetAllHistoryL( RPointerArray<CIRSongHistoryInfo>& aSongHistoryInfo );
+
+    /**
+    * Invoked when UI request.
+    */
+    	IMPORT_C TInt ClearAllHistory( );
+
+    /**
+    * Invoked when UI request.
+    */
+    	IMPORT_C TInt GetHistoryCount( );
+    	
+    /**
+    * Called by the UI when a particular channel has been removed from the ISDS.
+    */
+        IMPORT_C TInt SyncHistory(TInt aChannelId);
+        
+    /**
+    * Called by the UI when a particular channel has been changed in the ISDS.
+    */
+        
+        IMPORT_C void UpdateSongHistoryDb( TInt aChannelId,
+    	                          const TDesC& aChannelName, 
+						          const TDesC& aChannelUrl,
+							      const TDesC& aMusicFlag);
+        
+        /* called by the UI when delete a particular channel
+         * */
+        IMPORT_C TInt DeleteOneHistory(TInt aIndex);
+
+
+  public:
+  //this function made public for our internal testing. Has to be private without IMPORT_C
+		/**
+		* Invoked when the listened key is changed.
+		* @param    aCategory   The category of the key that changed.
+		* @param    aKey        The key that changed.
+		* @param    aText       The new value of the key.
+		*/
+
+			IMPORT_C void HandleMetaDataReceivedL( const CIRMetaData& aMetaData );
+
+	private:
+
+		/**
+		* Invoked when the listened key is changed.
+		* @param    aCategory   The category of the key that changed.
+		* @param    aKey        The key that changed.
+		* @param    aText       The new value of the key.
+		* Single wrapper function to be implemented in the engine class instead of two.
+		*/
+			void HandlePropertyChangeL( const TUid& aCategory, TUint aKey,
+											   const TDesC8& aText ) ;
+
+
+		/**
+		* Invoked when the listened key is changed.
+		* @param    aCategory   The category of the key that changed.
+		* @param    aKey        The key that changed.
+		* @param    aError      The error value.
+		*/
+			void HandlePropertyChangeErrorL( const TUid& aCategory, TUint aKey,
+										 TInt aError );
+
+		/**
+		 * Invoked when data needs to be added
+		 * @param	aMetaData	MetaData that needs to be added
+		 * @param	aChannelName Channel name that needs to be added
+		 */
+		TSongHistoryItemChange DetectSongHistoryItemChangesL(const CIRMetaData& aMetaData,
+					 const RBuf& aChannelName, const RBuf& aChannelUrl);
+
+	private:
+
+		/**
+		* Constructor.
+		* @param    aObserver   The observer to be notified of the changes
+		* in the keys.
+		*/
+			CIRSongHistoryEngine( MSongHistoryUINotifyHandler & aUiObserver );
+
+
+    private:
+
+		/** An instance of songhistory database. */
+		CIRSongHistoryDb* iSongHistoryDb;
+
+
+        /** The observer to be notified of the database changes to the UI */
+		MSongHistoryUINotifyHandler & iUiObserver;
+
+        /** CIRSongHistoryEngPubSub objects subscribing for propery change */
+        CIRSongHistoryEngPubSub *iChannelNameSub;
+        
+        CIRSongHistoryEngPubSub *iMetaDataSub;
+
+    };
+
+#endif//CIRSONGHISTORYENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistoryinc/irsonghistoryengpubsub.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2006-2007 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:  Active class notifying metada and channel name changes to SongHistoryDb engine
+*
+*/
+
+#ifndef CIRSONGHISTORYENGPUBSUB_H
+#define CIRSONGHISTORYENGPUBSUB_H
+
+#define KMAXLENGTH 250
+#include <e32base.h>
+#include <e32property.h>
+
+class MIRSongHistoryEngPubSubNotifyHandler;
+
+
+
+/**
+* Listens to one specified Publish & Subscribe key, notifying the observer whenever that key is changed.
+*/
+NONSHARABLE_CLASS(CIRSongHistoryEngPubSub) : public CActive
+    {
+    public:
+
+        /**
+        * Static constructor.
+        * @param    aObserver   The observer to be notified of the changes in the listened key.
+        * @param    aCategory   The category of the key.
+        * @param    aKey        The key to listen to.
+        */
+    static CIRSongHistoryEngPubSub* NewL( MIRSongHistoryEngPubSubNotifyHandler&
+    		aPubSubObserver, const TUid& aCategory, TUint aKey ,
+    		const RProperty::TType aPropertyType  );
+        /**
+        * Static constructor.
+        * @param    aObserver   The observer to be notified of the changes in the listened key.
+        * @param    aCategory   The category of the key.
+        * @param    aKey        The key to listen to.
+        */
+    static CIRSongHistoryEngPubSub* NewLC( MIRSongHistoryEngPubSubNotifyHandler&
+    		aPubSubObserver, const TUid& aCategory, TUint aKey ,
+    		const RProperty::TType aPropertyType  );
+        /**
+        * Destructor.
+        */
+        ~CIRSongHistoryEngPubSub();
+
+
+    protected: // From CActive
+
+        /**
+    *void RunL()
+    *The function is called by the active scheduler
+    *when a request completion event occurs,
+        */
+        void RunL();
+
+        /**
+    *void DoCancel()
+    *Invoked when the active object is cancelled.
+        */
+        void DoCancel();
+
+    private:
+
+        /**
+        * Constructor.
+        * @param    aObserver   The observer to be notified of the changes in the listened key.
+        * @param    aCategory   The category of the key.
+        * @param    aKey        The key to listen to.
+        */
+    CIRSongHistoryEngPubSub( MIRSongHistoryEngPubSubNotifyHandler& aPubSubObserver,
+    	const TUid& aCategory, TUint aKey, const RProperty::TType aPropertyType );
+
+        /**
+        * Second-phase constructor.
+        */
+        void ConstructL();
+
+    protected:
+
+        /** Handle to the property. */
+        RProperty iProperty;
+        RProperty::TType iPropertyType;
+
+        /** The observer to be notified of the changes in the listened key. */
+        MIRSongHistoryEngPubSubNotifyHandler& iPubSubObserver;
+
+        /** The category of the key to listen to. */
+        TUid iCategory;
+
+        /** The key to listen to. */
+        TUint iKey;
+
+        /** The cached value of the key. */
+        mutable TBuf8<KMAXLENGTH> iText;
+
+
+    };
+
+#endif//IR_SONGHISTORYENGPUBSUB
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistoryinc/irsonghistoryengpubsubnotifyhandler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2006-2007 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:  Interface class to notify channelName/metadata changes CIRSongHistoryDbEngine
+*
+*/
+
+
+#ifndef CIRSONGHISTORYENGPUBSUBNOTIFYHANDLER_H
+#define CIRSONGHISTORYENGPUBSUBNOTIFYHANDLER_H
+
+#include <e32cmn.h>
+
+/**
+* Observer interface for CIRSongHistoryEngPubSub.
+* The observer is notified whenever the listened key is changed. If there was an error in getting the new value of the key,
+* the observer will be notified of it as well.
+*/
+NONSHARABLE_CLASS(MIRSongHistoryEngPubSubNotifyHandler)
+    {
+    public:
+
+        /**
+        * Invoked when the listened key is changed.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aValue      The new value of the key.
+        */
+    /*virtual void HandleChannelNameChangeL( const TUid& aCategory, TUint aKey,
+    									   const TDesC8& aText ) = 0; */
+
+        /**
+        * Invoked when the listened key is changed.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aText       The new value of the key.
+        */
+    /*virtual void HandleMetaDataChangeL( const TUid& aCategory, TUint aKey,
+    	 								const TDesC8& aText ) = 0; */
+
+         /**
+        * Invoked when the listened (property MetaData / ChannelName) key is changed.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aText       The new value of the key.
+        */
+    virtual void HandlePropertyChangeL( const TUid& aCategory, TUint aKey,
+    	 								const TDesC8& aText ) = 0;
+
+
+        /**
+        * Invoked when an error occurred while retrieving the new value of the key.
+        * @param    aCategory   The category of the key that changed.
+        * @param    aKey        The key that changed.
+        * @param    aError      The error code.
+        */
+    virtual void HandlePropertyChangeErrorL( const TUid& aCategory,TUint aKey,
+    										 TInt aError ) = 0;
+    };
+
+#endif//IR_SONGHISTORYDBENGPUBSUBNOTIFYHANDLER
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistoryinc/irsonghistoryinfo.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2007-2007 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 for the songhistory information class
+*
+*/
+
+
+#ifndef C_CIRSONGHISTORYINFO_H
+#define C_CIRSONGHISTORYINFO_H
+
+#include <s32mem.h>
+
+/**
+ * SongHistory meta data information wrapper.
+ */
+NONSHARABLE_CLASS( CIRSongHistoryInfo ) : public CBase
+    {
+
+public:
+
+	/**
+	*Function : NewL
+	*Function returns an instance of CIRSongHistoryInfo
+	*Two phase constructor
+	*@return instance of CIRSongHistoryInfo
+	*/
+    	IMPORT_C static CIRSongHistoryInfo * NewL();
+
+	/**
+	*CIRSongHistoryInfo::NewLC()
+	*Static function
+	*standard two phased constructor
+	*@return *CIRSongHistoryInfo
+	*/
+		IMPORT_C static CIRSongHistoryInfo* NewLC();
+
+	/**
+	*CIRSongHistoryInfo::~CIRSongHistoryInfo()
+	*standard C++ destructor
+	*/
+		IMPORT_C ~CIRSongHistoryInfo();
+
+	/**
+	*CIRSongHistoryInfo::SetHistoryInfoL()
+	*Function to set songhistory ingo from a RBuf
+	*/
+
+		IMPORT_C void SetHistoryInfo(RBuf& aSongName,
+									 RBuf& aArtist, 
+									 RBuf& aStreamUrl, 
+									 RBuf& aChannelName,
+									 TInt aChannelType , 
+									 TInt aChannelId,
+									 TInt aBitrate,
+									 RBuf& aChannelDesc,
+									 RBuf& aImageUrl,
+									 RBuf& aMusicStoreStatus );
+
+	/**
+	*CIRSongHistoryInfo::SetChannelName()
+	*Function to set channel name from a RBuf
+	*@param RBuf aChannelName
+	*/
+
+		void SetChannelName(RBuf& aChannelName);
+
+	/**
+	*CIRSongHistoryInfo::SetArtist()
+	*Function to set artist name from a RBuf
+	*@param RBuf aArtist
+	*/
+
+		void SetArtist(RBuf& aArtist);
+
+	/**
+	*CIRSongHistoryInfo::SetSongName()
+	*Function to set song name from a RBuf
+	*@param RBuf aSongName
+	*/
+
+  		void SetSongName (RBuf& aSongName);
+
+	/**
+	*CIRSongHistoryInfo::SetStreamUrl()
+	*Function to set stream url from a RBuf
+	*@param RBuf aStreamUrl
+	*/
+
+		void SetStreamUrl(RBuf& aStreamUrl);
+
+	/**
+	*CIRSongHistoryInfo::GetSongInfo()
+	*Function to get song name from a TDesC
+	*@return RBuf& instance 
+	*/
+
+		IMPORT_C const RBuf& GetSongInfo() const;
+
+	/**
+	*CIRSongHistoryInfo::GetArtistName()
+	*Function to get artist name from a TDesC
+	*@return RBuf& instance
+	*/
+
+		IMPORT_C const RBuf& GetArtistInfo() const;
+
+	/**
+	*CIRSongHistoryInfo::GetStreamUrl()
+	*Function to get url name from a TDesC
+	*@return RBuf& instance
+	*/
+
+		 IMPORT_C const RBuf& GetStreamUrl() const;
+
+	/**
+	*CIRSongHistoryInfo::GetChannelName()
+	*Function to get channel name from a TDesC
+	*@return RBuf& instance
+	*/
+
+		IMPORT_C const RBuf& GetChannelName() const;
+		
+	/**
+	*CIRSongHistoryInfo::GetChannelType()
+	*Function to get channel Type
+	*@return TInt channeltype
+	*/
+	    IMPORT_C  TInt GetChannelType() const;
+	    
+	/**
+	*CIRSongHistoryInfo::SetChannelType()
+	*Function to set channel Type
+	*@param TInt aChannelImgUrl
+	*/
+	    void SetChannelType(TInt aChannelImgUrl);
+	/**
+	*CIRSongHistoryInfo::SetChannelId()
+	*Function to set channel Id
+	*@param TInt aChannelId
+	*/
+	    void SetChannelId(TInt aChannelId);
+	/**
+	*CIRSongHistoryInfo::GetChannelId()
+	*Function to get channel Id
+	*@return TInt channelId
+	*/
+	    IMPORT_C  TInt GetChannelId() const;
+	/**
+	*CIRSongHistoryInfo::SetBitrate()
+	*Function to set bitrate
+	*@param TInt aBitrate
+	*/
+        void SetBitrate(TInt aBitrate);
+    /**
+    *CIRSongHistoryInfo::GetBitrate()
+    *Function to get bitrate
+    *@return TInt aBitrate
+    */
+        IMPORT_C  TInt GetBitrate() const;
+	/**
+	*CIRSongHistoryInfo::GetChannelDesc()
+	*Function to get channel Description
+	*@return RBuf& instance
+	*/
+        IMPORT_C const RBuf& GetChannelDesc() const ;
+	/**
+	*CIRSongHistoryInfo::SetChannelDesc()
+	*Function to set channel Description
+	* @param RBuf aChannelDesc
+	*/
+        void SetChannelDesc(RBuf& aChannelDesc) ;
+    /**
+    *CIRSongHistoryInfo::GetImageUrl()
+    *Function to get channel image Url
+    *@return RBuf& instance
+    */
+        IMPORT_C const RBuf& GetImageUrl() const ;
+    /**
+    *CIRSongHistoryInfo::SetImageUrl()
+    *Function to set channel image Url
+    * @param RBuf aImageUrl
+    */
+        void SetImageUrl(RBuf& aImageUrl) ;
+	/**
+	*CIRSongHistoryInfo::SetChannelMusicStatus()
+	*Function to set Channel MusicStoreStatus
+	*@param RBuf aChannelMusicStatus
+	*/
+        void SetChannelMusicStatus(RBuf& aChannelMusicStatus) ;
+	/**
+	*CIRSongHistoryInfo::GetChannelMusicStatus()
+	*Function to get channel MusicStoreStatus
+	*@return RBuf& instance
+	*/
+        IMPORT_C const RBuf& GetChannelMusicStatus() const ;
+private:
+
+    /**
+     * Default constructor.
+     */
+
+		CIRSongHistoryInfo();
+
+
+private: //data
+
+	/**
+     * The name of the artist.
+     */
+		RBuf iArtistInfo;
+
+    /**
+     * The name of the song.
+     */
+		RBuf iSongInfo;
+
+    /**
+     * The stream URL.
+	 */
+		RBuf iStreamUrlInfo;
+
+    /**
+     * Channel Name.
+     */
+		RBuf iChannelInfo;
+		
+    /**
+     * Channel Type.
+     */
+		TInt iChannelType;
+		
+		
+    /**
+     * Channel Description.
+     */
+		RBuf iChannelDescription;
+    /**
+	 * Channel Description.
+     */
+		RBuf iImageUrl;
+    /**
+     * Channel Id.
+     */
+		TInt iChannelId;
+
+	/**
+	 * Channel bitrate.
+	 */
+	TInt iBitrate;
+		
+    /**
+     * Channel's MusicStoreStatus.
+     */
+		RBuf iMusicStoreStatus;
+
+    };
+
+#endif // C_CIRSONGHISTORYINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistorysrc/irsonghistorydb.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1221 @@
+/*
+* Copyright (c) 2006-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:  Implementation of the songhistory database
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+* 
+*  Version: 3, Thu Apr 14 12:00:00 2008 by Rohit
+*  Ref:
+*  Pc lint fixes
+*
+*  Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <bautils.h>
+#include <badesca.h>    // CDesCArrayFlat
+#include <s32file.h>    // CFileStore & CPermanentFileStore
+#include <bautils.h>    // file helpers
+#include <eikenv.h>
+
+#include "irsonghistorydb.h"
+#include "irsonghistoryinfo.h"
+#include "irdebug.h"
+#include "irsettings.h"
+
+
+ 
+_LIT( KSongHistoryDBTable,              "ChannelHistoryTable"  );
+_LIT( KSongHistoryDBTable2,             "SongHistoryTable"  );
+_LIT( KSongHistoryDBSongNameColumn,     "SongName"	   );
+_LIT( KSongHistoryDBArtistNameColumn,   "ArtistName"   );
+_LIT( KSongHistoryDBChannelNameColumn,  "ChannelName"  );
+_LIT( KSongHistoryDBChannelUrlColumn,   "ChannelUrl"  );
+_LIT( KSongHistoryDBChannelTypeColumn,   "ChannelType"  );
+_LIT( KSongHistoryDBChannelIdColumn,   "ChannelId"  );
+_LIT( KSongHistoryDBBitrateColumn,   "Bitrate"  );
+_LIT( KSongHistoryDBChannelDescColumn,   "ChannelDescription"  );
+_LIT( KSongHistoryDBImageUrlColumn,   "ImageUrl"  );
+_LIT( KSongHistoryDBMusicStatusColumn,   "MusicStoreStatus"  );
+
+_LIT(KSongHistoryDbFile,"songhistoryDb.db");
+_LIT(KNo , "No") ;
+
+const TInt KMaxSize = 255;
+
+const TInt KMaxColumnLength = 255;
+TBool CIRSongHistoryDb::CompareChannelInfos(const CIRChannelInfo& aFirst,
+						 const CIRChannelInfo& aSecond)
+{
+   return ( aFirst.iChannelName == aSecond.iChannelName && 
+   					aFirst.iChannelUrl == aSecond.iChannelUrl &&
+   					aFirst.iChannelType == aSecond.iChannelType);
+}
+
+ 
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Function : NewL()
+// two phased construction
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryDb* CIRSongHistoryDb::NewL()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::NewL" );
+	CIRSongHistoryDb* self=CIRSongHistoryDb::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRSongHistoryDb::NewL - Exiting." );
+	return self;
+}
+
+
+// ---------------------------------------------------------------------------
+// Function : NewLC()
+// Two phased construction
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryDb* CIRSongHistoryDb::NewLC()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::NewLC" );
+	CIRSongHistoryDb *self=new(ELeave)CIRSongHistoryDb;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRSongHistoryDb::NewLC - Exiting." );
+	return self;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::~CIRSongHistoryDb()
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryDb::~CIRSongHistoryDb()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::~CIRSongHistoryDb" );
+
+	CloseSongHistoryDb();
+	iFsSession.Close();
+	IRLOG_DEBUG( "CIRSongHistoryDb::~CIRSongHistoryDb - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CreateDbCondition()
+// Creates both the dbms files conditionally(only if not yet created)
+// calls CreateSongHistoryDb()
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::CreateDbCondition(const TFileName& aSongHistoryDbFile)
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateDbCondition" );
+
+
+	if( !BaflUtils::FileExists(iFsSession, aSongHistoryDbFile) )
+	{
+		TInt error = CreateSongHistoryDb(aSongHistoryDbFile);
+		if( error )
+		{
+			IRLOG_DEBUG( "CIRSongHistoryDb::CreateDbCondition - Exiting (1)." );
+			
+		}
+	}
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateDbCondition - Exiting (2)." );
+	
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb:AddToSongHistoryDbL()
+// adds the session log entry into data base
+// Returns ETure if songHistory count exceeds 30, else EFalse
+// ---------------------------------------------------------------------------
+//
+TBool CIRSongHistoryDb::AddToSongHistoryDbL(const TDesC& aSongName,
+											const TDesC& aArtistName, 
+											const TDesC& aChannelName, 
+											const TDesC& aChannelUrl,
+											RBuf& aDelSongName, 
+											RBuf& aDelArtistName, 
+											RBuf& aDelChannelName, 
+											RBuf& aDelChannelUrl,
+											TInt  aChannelType,
+											TInt aChannelId,
+											TInt aBitrate,
+											const TDesC& aChannelDesc,
+											const TDesC& aImageUrl,
+											const TDesC& aMusicFlag
+											)
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::AddSongHistoryStartL" );
+
+	TBool bRetval = EFalse;
+	TInt error= 0;
+
+	iSongHistoryTable.Reset();
+
+	//if song history entries are  greater than or equal to 30
+	if( iSongHistoryTable.CountL() >= KMaxNoChannelHistoryDbEntries )
+	{
+		//first row is selected
+		iSongHistoryTable.FirstL();
+
+		//the current row is selected
+		iSongHistoryTable.GetL();
+
+		//delete that entry
+		CDbColSet* columns = iSongHistoryTable.ColSetL();
+		TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+		TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+		TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+		TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+
+		delete columns;
+		columns = NULL;
+
+        aDelSongName.Create(iSongHistoryTable.ColDes( songColumn ));
+        aDelArtistName.Create(iSongHistoryTable.ColDes( artistColumn ));
+        aDelChannelName.Create(iSongHistoryTable.ColDes( channelColumn ));
+        aDelChannelUrl.Create(iSongHistoryTable.ColDes( channelUrlColumn ));
+        
+        iSongHistoryTable.DeleteL();
+        Compact();
+
+        bRetval = ETrue;
+	}
+
+    CDbColSet* columns = iSongHistoryTable.ColSetL();
+    CleanupStack::PushL(columns);
+
+	const TPtrC &songName = aSongName.Left(KIRDbMaxStrLen);
+	const TPtrC &artistName = aArtistName.Left(KIRDbMaxStrLen);
+	const TPtrC &channelName = aChannelName.Left(KIRDbMaxStrLen);
+	const TPtrC &channelUrl = aChannelUrl.Left(KIRDbMaxStrLen);
+    const TPtrC &channelDesc = aChannelDesc.Left(KIRDbMaxStrLen);
+    const TPtrC &imageUrl = aImageUrl.Left(KIRDbMaxStrLen);
+	
+	TInt songLen = aSongName.Length();
+	TInt artistLen = aArtistName.Length();
+	if(  songLen + artistLen > KMaxSize )
+	{
+		IRLOG_DEBUG3( "CIRSongHistoryDb::AddSongHistoryStartL - LONG METADATA %d, %d", songLen, artistLen );
+	}
+	
+	TRAP(error,//trap start
+
+  		iSongHistoryTable.InsertL();
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBSongNameColumn ), songName);
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBArtistNameColumn ), artistName);
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelNameColumn ), channelName);
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelUrlColumn ), channelUrl);
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelTypeColumn ), aChannelType);
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelIdColumn ), aChannelId);
+		iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBBitrateColumn ), aBitrate);
+        iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelDescColumn ), channelDesc);
+        iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBImageUrlColumn ), imageUrl);
+        iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBMusicStatusColumn ), aMusicFlag);
+		iSongHistoryTable.PutL();
+		);
+
+ 	CleanupStack::PopAndDestroy(columns); 
+ 	if( error!=KErrNone )
+ 	{
+	 	User::LeaveIfError(error);
+ 	}
+    
+ 	iSongHistoryTable.Reset();
+ 	IRLOG_DEBUG( "CIRSongHistoryDb::AddSongHistoryStartL - Exiting." );
+
+	return bRetval;
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb:AddToSongHistoryDb2L()
+// adds the history song into the db
+// Returns ETure if songHistory count exceeds 100, else EFalse
+// ---------------------------------------------------------------------------
+ 
+TBool CIRSongHistoryDb::AddToSongHistoryDb2L( const TDesC& aSongName,
+                                    const TDesC& aArtistName,                                   
+                                    const TDesC& aMusicFlag)
+{
+    IRLOG_DEBUG( "CIRSongHistoryDb::AddToSongHistoryDb2L" );
+
+    TBool bRetval = EFalse;
+    TInt error= 0;
+    TInt songCompareFlag = 0;
+    TInt artistCompareFlag = 0;    
+     
+
+    iSongHistoryTable2.Reset();    
+    
+    CDbColSet* columns = iSongHistoryTable2.ColSetL();
+    CleanupStack::PushL(columns);
+    
+    /* the following is to judge wether the song is already in the db */    
+    if ( iSongHistoryTable2.CountL() >= 1 )
+    {
+        TInt songNameColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+        TInt artistNameColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );     
+
+        for ( iSongHistoryTable2.LastL(); iSongHistoryTable2.AtRow(); iSongHistoryTable2.PreviousL() )
+        {
+            iSongHistoryTable2.GetL();
+            RBuf songName;
+            RBuf artistName;
+            
+            songName.Create(iSongHistoryTable2.ColDes( songNameColumn ));
+            songName.CleanupClosePushL();
+            
+            artistName.Create(iSongHistoryTable2.ColDes( artistNameColumn ));
+            artistName.CleanupClosePushL();    
+            
+            songCompareFlag = (songName).Compare(aSongName);
+            artistCompareFlag = (artistName).Compare(aArtistName);
+            
+            CleanupStack::PopAndDestroy(&artistName);       
+            CleanupStack::PopAndDestroy(&songName);
+            
+            if( 0 == songCompareFlag && 0 == artistCompareFlag )
+            {
+                CleanupStack::PopAndDestroy(columns); 
+                iSongHistoryTable2.Reset();
+                return bRetval;
+            }
+        }        
+    }
+	/* end  */
+    
+    //if song history entries are  greater than or equal to 100
+    if( iSongHistoryTable2.CountL() >= KMaxNoSongHistoryDbEntries )
+    {
+        //first row is selected
+        iSongHistoryTable2.FirstL();
+        //the current row is selected
+        iSongHistoryTable2.GetL();       
+        //delete the current row
+        iSongHistoryTable2.DeleteL();
+        Compact();     
+        bRetval = ETrue;   
+    }
+    
+    const TPtrC &songName = aSongName.Left(KIRDbMaxStrLen);
+    const TPtrC &artistName = aArtistName.Left(KIRDbMaxStrLen);
+    const TPtrC &musicFlag = aMusicFlag.Left(KIRDbMaxStrLen);
+     
+    
+    TInt songLen = aSongName.Length();
+    TInt artistLen = aArtistName.Length();
+    if(  songLen + artistLen > KMaxSize )
+    {
+        IRLOG_DEBUG3( "CIRSongHistoryDb::AddSongHistoryStartL - LONG METADATA %d, %d", songLen, artistLen );
+    }
+    
+    TRAP(error,//trap start
+
+        iSongHistoryTable2.InsertL();
+        iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBSongNameColumn ), songName);
+        iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBArtistNameColumn ), artistName);        
+        iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBMusicStatusColumn ), musicFlag);
+        iSongHistoryTable2.PutL();
+        );
+
+    CleanupStack::PopAndDestroy(columns); 
+    if( error!=KErrNone )
+    {
+        User::LeaveIfError(error);
+    }
+    
+    iSongHistoryTable2.Reset();
+    IRLOG_DEBUG( "CIRSongHistoryDb::AddSongHistoryStartL - Exiting." );
+
+    return bRetval;  
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetAllSongHistoryListL()
+//  gets all the song history entries  into an array
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::GetAllSongHistoryListL(RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr)
+{
+ 	IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryListL" );
+
+ 	TInt error = KErrNone;
+
+    if(iSongHistoryTable.CountL() < 1)
+    {
+    	return;
+    }
+
+    CDbColSet* columns = iSongHistoryTable.ColSetL();
+    TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+    TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+    TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+    TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+    TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+    TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+    TInt bitrateColumn = columns->ColNo( KSongHistoryDBBitrateColumn );
+    TInt channelDescColumn = columns->ColNo( KSongHistoryDBChannelDescColumn );
+    TInt imageUrlColumn = columns->ColNo( KSongHistoryDBImageUrlColumn );
+    TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+    delete columns;
+    columns = NULL;
+
+	// Comparer function to find channel in channelHistoryArr
+	TIdentityRelation<CIRChannelInfo> comparer( CIRSongHistoryDb::CompareChannelInfos );
+	
+ 	// Find out channels in order
+ 	RPointerArray<CIRChannelInfo> channelHistoryArr;
+    for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+    {
+        iSongHistoryTable.GetL();
+
+		CIRChannelInfo *pChannelInfo = new ( ELeave ) CIRChannelInfo;
+		CleanupStack::PushL( pChannelInfo );
+		pChannelInfo->iChannelName.Create(iSongHistoryTable.ColDes( channelColumn ));
+		pChannelInfo->iChannelUrl.Create(iSongHistoryTable.ColDes( channelUrlColumn ));
+		pChannelInfo->iChannelType = iSongHistoryTable.ColUint16( channelTypeColumn );
+       
+		// Verify the channel is not in our list already
+		if( channelHistoryArr.Find(pChannelInfo, comparer) == KErrNotFound )
+		{
+			error = channelHistoryArr.Append( pChannelInfo );
+		 	if( error!=KErrNone )
+		 	{
+		 		CleanupStack::PopAndDestroy( pChannelInfo );
+		 		channelHistoryArr.ResetAndDestroy();
+			 	User::LeaveIfError(error);
+		 	}
+
+			CleanupStack::Pop( pChannelInfo );
+
+
+		}
+		else
+		{
+			CleanupStack::PopAndDestroy( pChannelInfo );
+		}
+	}
+
+	// Find out songs for each channel in order
+
+	TInt song = 0;
+	for( TInt channelIndex = 0; channelIndex < channelHistoryArr.Count(); ++channelIndex )
+	{
+		for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+		{
+			iSongHistoryTable.GetL();
+			// Extracting the values from the database.
+			if(song < aHistoryDataArr.Count())
+			{
+				RBuf songName;
+				RBuf artistName;
+				RBuf channelName;
+				RBuf channelUrl;
+				TInt channelType;
+				TInt channelId;
+				TInt bitrate;
+                RBuf channelDesc;
+                RBuf imageUrl;
+                RBuf channelMusicStatus;
+                
+				songName.Create(iSongHistoryTable.ColDes( songColumn ));
+				songName.CleanupClosePushL();
+				
+				artistName.Create(iSongHistoryTable.ColDes( artistColumn ));
+				artistName.CleanupClosePushL();
+				
+				channelName.Create(iSongHistoryTable.ColDes( channelColumn ));
+				channelName.CleanupClosePushL();
+				
+				channelUrl.Create(iSongHistoryTable.ColDes( channelUrlColumn ));
+				channelUrl.CleanupClosePushL();
+				
+				channelType=iSongHistoryTable.ColUint8( channelTypeColumn );
+				
+				channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+				
+				bitrate=iSongHistoryTable.ColUint16( bitrateColumn );
+                
+                channelDesc.Create(iSongHistoryTable.ColDes( channelDescColumn ));
+                channelDesc.CleanupClosePushL();
+
+                imageUrl.Create(iSongHistoryTable.ColDes( imageUrlColumn ));
+                imageUrl.CleanupClosePushL();
+
+                channelMusicStatus.Create(iSongHistoryTable.ColDes( musicStatusColumn ));
+                channelMusicStatus.CleanupClosePushL();
+                
+				if( channelHistoryArr[channelIndex]->iChannelName == channelName && 
+							channelHistoryArr[channelIndex]->iChannelUrl == channelUrl &&
+							channelHistoryArr[channelIndex]->iChannelType == channelType
+							)
+				{
+					aHistoryDataArr[song]->SetHistoryInfo(songName, artistName, channelUrl,
+								 channelName,channelType,channelId,bitrate,channelDesc ,
+								 imageUrl, channelMusicStatus);
+					++song;
+				}
+                
+                CleanupStack::PopAndDestroy(&channelMusicStatus);
+                CleanupStack::PopAndDestroy(&imageUrl);
+				CleanupStack::PopAndDestroy(&channelDesc);
+				CleanupStack::PopAndDestroy(&channelUrl);
+				CleanupStack::PopAndDestroy(&channelName);
+				CleanupStack::PopAndDestroy(&artistName);
+				CleanupStack::PopAndDestroy(&songName);
+
+			}
+			else
+			{
+				//Should not enter this scenario as aHistoryDataArr is suppose to give
+				//required memory allocated. But should it enter here should appendL into
+				//the list and increment "iSong"
+			}
+		}
+	}
+
+	channelHistoryArr.ResetAndDestroy();
+
+	IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryListL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetAllSongHistoryList2L()
+//  gets all the song history entries  into an array
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::GetAllSongHistoryList2L(RPointerArray<CIRSongHistoryInfo>& aSongEntries)
+{
+    IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryList2L" );    
+
+    if(iSongHistoryTable2.CountL() < 1)
+    {
+        return;
+    }
+
+    CDbColSet* columns = iSongHistoryTable2.ColSetL();
+    TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+    TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );     
+    TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+    delete columns;
+    columns = NULL;
+    
+    TInt song = 0;
+    
+    for ( iSongHistoryTable2.LastL(); iSongHistoryTable2.AtRow(); iSongHistoryTable2.PreviousL() )
+    {
+        iSongHistoryTable2.GetL();
+         
+        RBuf songName;
+        RBuf artistInfo;
+        RBuf musicStatus;
+        
+        songName.Create(iSongHistoryTable2.ColDes( songColumn ));
+        songName.CleanupClosePushL();
+        
+        artistInfo.Create(iSongHistoryTable2.ColDes( artistColumn ));
+        artistInfo.CleanupClosePushL();
+        
+        musicStatus.Create(iSongHistoryTable2.ColDes(musicStatusColumn));
+        musicStatus.CleanupClosePushL();
+        
+        aSongEntries[song]->SetSongName(songName);
+        aSongEntries[song]->SetArtist(artistInfo);
+        aSongEntries[song]->SetChannelMusicStatus(musicStatus);
+        ++song;         
+        
+        CleanupStack::PopAndDestroy(&musicStatus);
+        CleanupStack::PopAndDestroy(&artistInfo);
+        CleanupStack::PopAndDestroy(&songName);        
+    }
+     
+    IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryListL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// Function : ClearAllSongHistoryFromDb
+// delete all the entries from the database.
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::ClearAllSongHistoryFromDb(/*RPointerArray<CIRSongHistoryInfo>& aSongHistoryInfoArr*/)
+{
+
+	TInt error = KErrNone;
+
+	IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb - Entering" );
+	TRAP(error, iSongHistoryTable.FirstL());
+	if(error != KErrNone)
+	{
+		return error;
+	}
+
+    while (iSongHistoryTable.AtRow())
+	{
+		TRAPD(error,
+		iSongHistoryTable.GetL();
+		iSongHistoryTable.DeleteL();
+		iSongHistoryTable.NextL(););
+		if(error)
+		{
+		    Compact();
+		    return error;
+		}
+	}
+	
+    Compact();
+    IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb - Exiting." );
+	return KErrNone;
+
+}
+
+TInt CIRSongHistoryDb::DeleteOneHistory(TInt aIndex)
+{
+    IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistory - Entering" );
+    
+    TInt retValue = 0;
+    TRAPD(error,(retValue = DeleteOneHistoryL(aIndex)));
+    
+    if( KErrNone != error )
+    {
+        return error;
+    }
+    
+    if( KErrNone != retValue)
+    {
+        return retValue;
+    }    
+    IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistory - exiting" );    
+    return KErrNone;
+}
+
+TInt CIRSongHistoryDb::DeleteOneHistoryL(TInt aIndex)
+{
+    IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistoryL - Entering" );
+    TInt totalCount = iSongHistoryTable.CountL();     
+    if (aIndex < 0 || aIndex >= totalCount)
+    {
+        return KErrArgument;
+    }
+    
+    iSongHistoryTable.FirstL();
+    TInt tempIndex = 0;     
+    while (tempIndex < aIndex)
+    {
+        TRAPD(error,iSongHistoryTable.NextL(););
+        if (KErrNone != error)
+        {
+            Compact();
+            return error;
+        }
+        tempIndex++;
+    }
+    
+    iSongHistoryTable.GetL();
+    iSongHistoryTable.DeleteL();
+    IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistoryL - exiting" );   
+    return KErrNone;    
+}
+
+// ---------------------------------------------------------------------------
+// Function : ClearAllSongHistoryFromDb2
+// delete all the entries from the database.
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::ClearAllSongHistoryFromDb2()
+{
+
+    TInt error = KErrNone;
+
+    IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb2 - Entering" );
+    TRAP(error, iSongHistoryTable2.FirstL());
+    if(error != KErrNone)
+    {
+        return error;
+    }
+
+    while (iSongHistoryTable2.AtRow())
+    {
+        TRAPD(error,
+        iSongHistoryTable2.GetL();
+        iSongHistoryTable2.DeleteL();
+        iSongHistoryTable2.NextL(););
+        if(error)
+        {
+            Compact();
+            return error;
+        }
+
+    }
+    Compact();
+    IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb - Exiting." );
+    return KErrNone;
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::ConstructL()
+// Standard 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::ConstructL()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::ConstructL" );
+	User::LeaveIfError(iFsSession.Connect());
+
+	CIRSettings* settings = CIRSettings::OpenL();
+
+	TFileName songHistoryDbFile = settings->PrivatePath();
+	songHistoryDbFile.Append(KSongHistoryDbFile);
+
+	CreateDbCondition(songHistoryDbFile);
+	OpenSongHistoryDbL(songHistoryDbFile);
+
+	settings->Close();
+
+	IRLOG_DEBUG( "CIRSongHistoryDb::ConstructL- Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CloseSongHistoryDb()
+// Closes the database
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::CloseSongHistoryDb()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::CloseSongHistoryDb" );
+	iSongHistoryTable.Close();
+	iSongHistoryTable2.Close();
+	Close();
+	IRLOG_DEBUG( "CIRSongHistoryDb::CloseSongHistoryDb - Exiting." );
+}
+
+
+/**
+* Function : CreateSongHistoryTablesL()
+* creates songhistory table with three columns
+* log data
+* ---------------------------------------------------------------------------
+* SongHistoryTable
+*---------------------------
+*| SongName | ArtistName | ChannelName | ChannelUrl | ChannelType | ChannelId | Bitrate | ChannelDesc | ImageUrl 
+*---------------------------
+*|EDbColText| EDbColText | EDbColText | EDbColText | EDbColUint8 | EDbColUint16 | EDbColUint16 | EDbColText | EDbColText
+*----------------------------------------------------------------------------
+*/
+void CIRSongHistoryDb::CreateSongHistoryTablesL()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL" );
+    CDbColSet* columns = CDbColSet::NewLC();
+
+    TRAPD( error,
+    columns->AddL( TDbCol( KSongHistoryDBSongNameColumn, EDbColText, KMaxColumnLength ) );
+    columns->AddL( TDbCol( KSongHistoryDBArtistNameColumn, EDbColText, KMaxColumnLength) );
+    columns->AddL( TDbCol( KSongHistoryDBChannelNameColumn, EDbColText, KMaxColumnLength ) );
+    columns->AddL( TDbCol( KSongHistoryDBChannelUrlColumn, EDbColText, KMaxColumnLength ) );
+    columns->AddL( TDbCol( KSongHistoryDBChannelTypeColumn, EDbColUint8 ) );
+    columns->AddL( TDbCol( KSongHistoryDBChannelIdColumn, EDbColUint16 ) );
+    columns->AddL( TDbCol( KSongHistoryDBBitrateColumn, EDbColUint16 ) );
+    columns->AddL( TDbCol( KSongHistoryDBChannelDescColumn, EDbColText, KMaxColumnLength ) );
+    columns->AddL( TDbCol( KSongHistoryDBImageUrlColumn, EDbColText, KMaxColumnLength ) );
+    columns->AddL( TDbCol( KSongHistoryDBMusicStatusColumn, EDbColText, KMaxColumnLength ) );
+    );
+	User::LeaveIfError( error );
+
+    User::LeaveIfError( CreateTable( KSongHistoryDBTable, *columns ) );
+
+    CleanupStack::PopAndDestroy( columns );
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL - Exiting." );
+}
+
+/**
+* Function : CreateSongHistoryTables2L()
+* creates songhistory table with three columns
+* log data
+* ---------------------------------------------------------------------------
+* SongHistoryTable
+*---------------------------
+*| SongName | ArtistName | MusicStatusFlag 
+*---------------------------
+*|EDbColText| EDbColText | EDbColText 
+*----------------------------------------------------------------------------
+*/
+void CIRSongHistoryDb::CreateSongHistoryTables2L()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL" );
+    CDbColSet* columns = CDbColSet::NewLC();
+
+    TRAPD( error,
+    columns->AddL( TDbCol( KSongHistoryDBSongNameColumn, EDbColText, KMaxColumnLength ) );
+    columns->AddL( TDbCol( KSongHistoryDBArtistNameColumn, EDbColText, KMaxColumnLength) );     
+    columns->AddL( TDbCol( KSongHistoryDBMusicStatusColumn, EDbColText, KMaxColumnLength ) );
+    );
+	User::LeaveIfError( error );
+
+    User::LeaveIfError( CreateTable( KSongHistoryDBTable2, *columns ) );
+
+    CleanupStack::PopAndDestroy( columns );
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL - Exiting." );
+}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::OpenSongHistoryDbL()
+// opening the data base
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::OpenSongHistoryDbL(const TFileName& aSongHistoryDbFile)
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::OpenSongHistoryDbL" );
+	CloseSongHistoryDb(); //Ensure that the database is closed before trying to open it.
+
+	 
+    TInt error  = KErrNone;
+ 
+	error = Open(iFsSession,aSongHistoryDbFile);
+	if( error!=KErrNone )
+	{
+		//if database is failed to open then
+		//function leaves
+		IRLOG_ERROR2( "CIRSongHistoryDb::OpenSongHistoryDbL - Opening session database failed (%d)", error );
+		User::LeaveIfError(error);
+	}
+	if( IsDamaged() || !InTransaction() )
+	{
+		//if data base is damaged then
+		//it tried to recover
+		//if recovery is not possible function leaves
+		error = Recover();
+		if ( KErrNone == error)
+			{
+			//if recovered data base is compacted
+			error = Compact();
+			}
+	    User::LeaveIfError(error);
+	}
+
+	//open the table
+	error = iSongHistoryTable.Open(*this, KSongHistoryDBTable, iSongHistoryTable.EUpdatable);
+	if( error )
+	{
+		User::LeaveIfError(error);
+	}
+
+	error = iSongHistoryTable2.Open(*this, KSongHistoryDBTable2, iSongHistoryTable2.EUpdatable);
+	if( error )
+	{
+	    iSongHistoryTable.Close();
+		User::LeaveIfError(error);
+	} 
+
+	IRLOG_DEBUG( "CIRSongHistoryDb::OpenSongHistoryDbL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CreateSongHistoryDb()
+// @database filename
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::CreateSongHistoryDb(const TFileName& aSongHistoryDbFile )
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryDb" );
+
+
+	TInt error = Replace(iFsSession,aSongHistoryDbFile);
+	if ( error != KErrNone )
+    {
+	    IRLOG_ERROR2( "CIRSongHistoryDb::CreateSongHistoryDb - Creating history database failed (%d)", error );
+	    return error;
+    }
+
+	TRAPD(err1,CreateSongHistoryTablesL());
+	if(err1)
+	{
+	    return err1;
+	}
+
+	//if error, no handling 
+	TRAPD(err2, CreateSongHistoryTables2L());
+	if( err2 )
+	{
+	    return err2;	  
+	}	
+	IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryDb - Exiting." );
+	return KErrNone;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CountSongHistoryDb()
+// count the database entries
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRSongHistoryDb::CountSongHistoryDb()
+{
+	IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb" );
+	TInt historyCount = 0;
+	iSongHistoryTable.Reset();
+	TRAPD(error,historyCount= iSongHistoryTable.CountL());
+	if(error)
+	{
+		
+	}
+	IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb - Exiting." );
+ 	return historyCount;
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CountSongHistoryDb2()
+// count the database entries
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::CountSongHistoryDb2()
+{
+    IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb" );
+    TInt historyCount = 0;
+    iSongHistoryTable2.Reset();
+    TRAPD(error,historyCount= iSongHistoryTable2.CountL());
+    if(error)
+    {
+        historyCount = -1;
+    }
+    IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb - Exiting." );
+    return historyCount;
+}
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetLastHistoryItemL()
+// Gets the last song history item
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::GetLastHistoryItemL(RBuf& aSongName, RBuf& aArtistName,
+				 RBuf& aChannelName, RBuf& aChannelUrl)
+{
+	if( iSongHistoryTable.IsEmptyL() || iSongHistoryTable.LastL() == EFalse)
+	{
+		return;
+	}
+
+	iSongHistoryTable.GetL();
+
+	CDbColSet* columns = iSongHistoryTable.ColSetL();
+	TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+	TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+	TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+	TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+
+	delete columns;
+    columns = NULL;
+
+    aSongName.Create(iSongHistoryTable.ColDes( songColumn ));
+    aArtistName.Create(iSongHistoryTable.ColDes( artistColumn ));
+    aChannelName.Create(iSongHistoryTable.ColDes( channelColumn ));
+    aChannelUrl.Create(iSongHistoryTable.ColDes( channelUrlColumn ));
+
+
+    iSongHistoryTable.Reset();
+}
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetChannelSongsCountL()
+// Gets the channel's song count.
+// ---------------------------------------------------------------------------
+//
+
+TUint CIRSongHistoryDb::GetChannelSongsCountL( const RBuf& aChannelName, const RBuf& aChannelUrl )
+{
+	_LIT( strQuery, "Select SongName from SongHistoryTable where ChannelName='%S' AND ChannelUrl='%S'");
+
+	TBuf<KMaxSize>  bufQuery;
+	bufQuery.Format( strQuery, &aChannelName, &aChannelUrl );
+
+	TDbQuery	querySearchChannel( bufQuery );
+	RDbView		dbView;
+
+	TInt error = dbView.Prepare( *this, querySearchChannel );
+	User::LeaveIfError(error);
+
+	error = dbView.Evaluate();	// 0, evaluation is complete 
+	User::LeaveIfError(error);
+
+	TInt cRows = dbView.CountL();
+
+	dbView.Close();
+
+	return cRows;
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::SyncSongHistoryDb()
+// Synchronises the History DB with removed channel entry in the ISDS
+// ---------------------------------------------------------------------------
+//
+
+void CIRSongHistoryDb::SyncSongHistoryDbL(TInt aChannelId)
+{
+ 	IRLOG_DEBUG( "CIRSongHistoryDb::SyncSongHistoryDbL" );
+
+
+    if(iSongHistoryTable.CountL() < 1)
+    {
+    	return;
+    }
+
+    CDbColSet* columns = iSongHistoryTable.ColSetL();
+    TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+    TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+    TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+    TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+    TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+    TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+    TInt bitrateColumn = columns->ColNo( KSongHistoryDBBitrateColumn );
+    TInt channelDescColumn = columns->ColNo( KSongHistoryDBChannelDescColumn );
+    TInt imageUrlColumn = columns->ColNo( KSongHistoryDBImageUrlColumn );
+    TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+    delete columns;
+    columns = NULL;
+
+	// Find out the channel to be changed 
+		for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+		{
+			iSongHistoryTable.GetL();
+			// Extracting the values from the database.
+				TInt channelId;
+				RBuf imageUrl;
+                RBuf channelMusicStatus;
+                
+				channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+				imageUrl.Create(iSongHistoryTable.ColDes( imageUrlColumn ));
+				imageUrl.CleanupClosePushL();
+				channelMusicStatus.Create(iSongHistoryTable.ColDes( musicStatusColumn ));
+                channelMusicStatus.CleanupClosePushL();
+
+                
+                if(aChannelId == channelId)
+	                {
+	                iSongHistoryTable.UpdateL();
+		            iSongHistoryTable.SetColL(channelTypeColumn, 0);
+		            iSongHistoryTable.SetColL(channelIdColumn, 0);
+		            iSongHistoryTable.SetColL(imageUrlColumn, KNo);
+		            iSongHistoryTable.SetColL(musicStatusColumn, KNo);
+		            iSongHistoryTable.PutL();
+	                }
+                CleanupStack::PopAndDestroy(&channelMusicStatus);
+                CleanupStack::PopAndDestroy(&imageUrl);
+		}
+	iSongHistoryTable.Reset();
+		
+	IRLOG_DEBUG( "CIRSongHistoryDb::SyncSongHistoryDbL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetIdPresentInDb()
+// Gets whether that particular channel id is present in Db or not.
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRSongHistoryDb::GetIdPresentInDbL(TInt aChannelId)
+{
+ 	IRLOG_DEBUG( "CIRSongHistoryDb::GetIdPresentInDbL" );
+
+ 	TBool value = EFalse;
+
+    if(iSongHistoryTable.CountL() < 1)
+    {
+    	return value;
+    }
+
+    CDbColSet* columns = iSongHistoryTable.ColSetL();
+    TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+
+    delete columns;
+    columns = NULL;
+
+	// Find out the channel to be changed 
+		for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+		{
+			iSongHistoryTable.GetL();
+				TInt channelId;
+				
+				channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+                if(aChannelId == channelId)
+	                {
+	                value = ETrue;
+	                }
+
+		}
+		
+	iSongHistoryTable.Reset();
+	
+	IRLOG_DEBUG( "CIRSongHistoryDb::GetIdPresentInDbL - Exiting." );
+	return value ;
+}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::UpdateSongHistoryDb()
+// Updates the song history DB when there is a channel change in the isds.
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRSongHistoryDb::UpdateSongHistoryDbL(	TInt aChannelId,
+											const TDesC& aChannelName, 
+											const TDesC& aChannelUrl,
+											const TDesC& aImageUrl,
+											const TDesC& aMusicFlag)
+{
+ 	IRLOG_DEBUG( "CIRSongHistoryDb::UpdateSongHistoryDbL" );
+
+ 	TBool channelChanged = EFalse ;
+ 	TInt compFlagName ;
+ 	TInt compFlagUrl ;
+ 	TInt compFlagImageUrl ;
+ 	TInt compFlagMusic ;
+ 	TInt compUrlChange ;
+
+    if(iSongHistoryTable.CountL() < 1)
+    {
+    	return EFalse;
+    }
+
+    CDbColSet* columns = iSongHistoryTable.ColSetL();
+    TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+    TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+    TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+    TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+    TInt channelDescColumn = columns->ColNo( KSongHistoryDBChannelDescColumn );
+    TInt imageUrlColumn = columns->ColNo( KSongHistoryDBImageUrlColumn );
+    TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+    delete columns;
+    columns = NULL;
+
+	// Find out the channel to be changed 
+	
+		for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+		{
+			iSongHistoryTable.GetL();
+			// Extracting the values from the database.
+				RBuf channelName;
+				RBuf channelUrl;
+				RBuf imageUrl;
+				TInt channelId;
+                RBuf channelMusicStatus;
+				channelName.Create(iSongHistoryTable.ColDes( channelColumn ));
+				channelName.CleanupClosePushL();
+				
+				channelUrl.Create(iSongHistoryTable.ColDes( channelUrlColumn ));
+				channelUrl.CleanupClosePushL();
+				
+				imageUrl.Create(iSongHistoryTable.ColDes( imageUrlColumn ));
+				imageUrl.CleanupClosePushL();
+
+				channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+                
+                channelMusicStatus.Create(iSongHistoryTable.ColDes( musicStatusColumn ));
+                channelMusicStatus.CleanupClosePushL();
+                
+                if(aChannelId == channelId)
+	                {
+					compFlagName =  (channelName).Compare(aChannelName);
+	                compFlagUrl =   (channelUrl).Compare(aChannelUrl);
+	                compFlagImageUrl = (imageUrl).Compare(aImageUrl);
+	                compFlagMusic = (channelMusicStatus).Compare(aMusicFlag);
+	                if(compFlagName)
+		                {
+	                    iSongHistoryTable.UpdateL();
+		                iSongHistoryTable.SetColL(channelColumn, aChannelName);
+		                iSongHistoryTable.PutL();
+		                channelChanged = ETrue ;
+		                }
+		            compUrlChange = (aChannelUrl).Compare(KNo);
+		                
+	                if(compFlagUrl && compUrlChange)
+		                {
+		                iSongHistoryTable.UpdateL();
+		                iSongHistoryTable.SetColL(channelUrlColumn, aChannelUrl);
+		                iSongHistoryTable.PutL();
+		                channelChanged = ETrue ;
+		                }
+	                if(compFlagImageUrl)
+	                    {
+	                    iSongHistoryTable.UpdateL();
+	                    iSongHistoryTable.SetColL(imageUrlColumn, aImageUrl);
+	                    iSongHistoryTable.PutL();
+	                    channelChanged = ETrue ;
+	                    }
+	                if(compFlagMusic)
+		                {
+		                iSongHistoryTable.UpdateL();
+		                iSongHistoryTable.SetColL(musicStatusColumn, aMusicFlag);
+		                iSongHistoryTable.PutL();
+		                channelChanged = ETrue ;
+		                }
+	                
+	                }
+                CleanupStack::PopAndDestroy(&channelMusicStatus);
+                CleanupStack::PopAndDestroy(&imageUrl);
+				CleanupStack::PopAndDestroy(&channelUrl);
+				CleanupStack::PopAndDestroy(&channelName);
+
+		}
+	iSongHistoryTable.Reset();
+	IRLOG_DEBUG( "CIRSongHistoryDb::UpdateSongHistoryDbL - Exiting." );
+	return channelChanged;
+}
+
+void CIRSongHistoryDb::SearchAndDeleteRecordL(const TDesC& aChannelName, const TDesC& aChannelUrl,
+                                              TInt aChannelType)
+{
+    CDbColSet* columns = iSongHistoryTable.ColSetL();
+    TInt channelNameColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+    TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+    TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+    
+    delete columns;
+    columns = NULL;
+    
+    for (iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL())
+    {
+        iSongHistoryTable.GetL();
+        TPtrC channelName = iSongHistoryTable.ColDes(channelNameColumn);
+        TPtrC channelUrl  = iSongHistoryTable.ColDes(channelUrlColumn);
+        TInt channelType = iSongHistoryTable.ColInt(channelTypeColumn);
+        
+        if (aChannelName == channelName && aChannelUrl == channelUrl && aChannelType == channelType)
+        {
+            iSongHistoryTable.DeleteL();  
+            return;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistorysrc/irsonghistoryengine.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,491 @@
+/*
+* Copyright (c) 2006-2007 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:  Engine class to notify channel name/metadata changes to SongHistoryDb and UI
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Thu Apr 14 12:00:00 2008 by Rohit
+*  Ref:
+*  Pc lint fixes
+*
+*  Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include "irpubsubkeys.h"
+#include "irsonghistoryengine.h"
+#include "uinotifyhandler.h"
+#include "irsonghistoryengpubsub.h"
+#include "irmetadata.h"
+#include "irdebug.h"
+
+class CIRSongHistoryDb;
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::CIRSongHistoryEngine
+// Default Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryEngine::CIRSongHistoryEngine(MSongHistoryUINotifyHandler& aUiObserver )
+						:iUiObserver( aUiObserver )
+{
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::ConstructL
+// Second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryEngine::ConstructL()
+{
+    IRLOG_DEBUG( "CIRSongHistoryEngine::ConstructL" );
+
+	iSongHistoryDb = CIRSongHistoryDb::NewL();
+
+
+
+    //Subsciber for the meta data
+    iMetaDataSub = CIRSongHistoryEngPubSub::NewL( *this,
+    		KUidActiveInternetRadioApp,KIRPSMetaData, RProperty::ELargeText) ;
+
+    IRLOG_DEBUG( "CIRSongHistoryEngine::ConstructL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::NewL()
+// Static constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSongHistoryEngine* CIRSongHistoryEngine::NewL( 
+				MSongHistoryUINotifyHandler & aUiObserver)
+{
+    IRLOG_DEBUG( "CIRSongHistoryEngine::NewL - Entering" );
+	CIRSongHistoryEngine* self = NewLC( aUiObserver);
+	CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRSongHistoryEngine::NewL - Exiting." );
+    return self;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::NewLC()
+// Static constructor.
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C CIRSongHistoryEngine* CIRSongHistoryEngine::NewLC( 
+							MSongHistoryUINotifyHandler & aUiObserver)
+{
+    IRLOG_DEBUG( "CIRSongHistoryEngine::NewLC - Entering" );
+    CIRSongHistoryEngine* self = new ( ELeave ) CIRSongHistoryEngine( aUiObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+	IRLOG_DEBUG( "CIRSongHistoryEngine::NewLC - Exiting." );
+    return self;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::~CIRSongHistoryEngine()
+// standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSongHistoryEngine::~CIRSongHistoryEngine()
+{
+    IRLOG_DEBUG( "CIRSongHistoryEngine::~CIRSongHistoryEngine - Entering" );
+
+    delete iSongHistoryDb;
+    delete iChannelNameSub;
+    delete iMetaDataSub;
+
+    IRLOG_DEBUG( "CIRSongHistoryEngine::~CIRSongHistoryEngine - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::HandleMetaDataReceivedL()
+// Invoked when any listened P&S key is changed.
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C void CIRSongHistoryEngine::HandleMetaDataReceivedL( const CIRMetaData& aMetaData )
+{
+	IRLOG_DEBUG( "CIRSongHistoryEngine::HandleMetaDataChangeL - Entering" );
+
+	// Read Channel Name
+	RBuf 			 channelName;
+
+	TBuf<KMAXLENGTH> channelNameBuffer;
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannel, channelNameBuffer);
+	channelName.Create(channelNameBuffer.Length());
+	channelName.CleanupClosePushL();
+	channelName.Copy(channelNameBuffer);
+
+	TInt channelType;
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelType, channelType);
+
+	TInt channelId;
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelId, channelId);
+
+	// Read Channel Url
+	RBuf 			 channelUrl;
+	
+	TBuf<KMAXLENGTH> channelUrlBuffer;
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelUrl, channelUrlBuffer);
+	channelUrl.Create(channelUrlBuffer.Length());
+	channelUrl.CleanupClosePushL();
+	channelUrl.Copy(channelUrlBuffer);
+	
+
+	
+	RBuf 			 channelDesc;
+
+	TBuf<KMAXLENGTH> channelDescBuffer;
+
+		RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannelDesc, channelDescBuffer);
+		channelDesc.Create(channelDescBuffer.Length());
+		channelDesc.CleanupClosePushL();
+		channelDesc.Copy(channelDescBuffer);
+
+    RBuf             imageUrl;
+    imageUrl.Create(KNullDesC().Length());
+    imageUrl.CleanupClosePushL();
+    imageUrl.Copy(KNullDesC);
+
+	RBuf 			 musicFlag;
+
+	TBuf<KMAXLENGTH> musicFlagBuffer;
+	
+	if(channelType==1)
+		{
+		RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelMusicFlag, musicFlagBuffer);
+		musicFlag.Create(musicFlagBuffer.Length());
+		musicFlag.CleanupClosePushL();
+		musicFlag.Copy(musicFlagBuffer);
+		}
+	else
+		{
+		musicFlag.Create(KNullDesC().Length());
+		musicFlag.CleanupClosePushL();
+		musicFlag.Copy(KNullDesC);
+		}	
+    
+    if(channelType==1)
+	    {
+	    TInt ret = iSongHistoryDb->GetIdPresentInDbL( channelId );
+	    if(ret)
+		    {
+		    TInt modified = iSongHistoryDb->UpdateSongHistoryDbL( channelId ,
+		    		 channelName ,channelUrl ,imageUrl ,musicFlag);	
+		    if(modified)
+			    {
+    	        iUiObserver.ChannelChangedL( aMetaData.Song(),aMetaData.Artist(),
+    	        		 channelName, channelUrl );
+			    }
+		    }
+	    	
+	    }
+
+	TSongHistoryItemChange changeCode = DetectSongHistoryItemChangesL(aMetaData,
+							 channelName, channelUrl);
+
+    if(changeCode==EBLANKENTRIES || changeCode == ENOCHANGE )
+    {
+    
+        CleanupStack::PopAndDestroy(&musicFlag);
+        CleanupStack::PopAndDestroy(&imageUrl);
+        CleanupStack::PopAndDestroy(&channelDesc);
+        CleanupStack::PopAndDestroy(&channelUrl);
+        CleanupStack::PopAndDestroy(&channelName);
+    	return;
+    }
+
+	RBuf delSongName;
+	delSongName.CleanupClosePushL();
+	RBuf delArtistName;
+	delArtistName.CleanupClosePushL();
+	RBuf delChannelName;
+	delChannelName.CleanupClosePushL();
+	RBuf delChannelUrl;
+	delChannelUrl.CleanupClosePushL();
+	TBool bExceededMax = iSongHistoryDb->AddToSongHistoryDbL( aMetaData.Song(),
+															  aMetaData.Artist(),
+															  channelName,
+															  channelUrl, 
+															  delSongName, 
+															  delArtistName, 
+															  delChannelName, 
+															  delChannelUrl ,
+															  channelType,
+															  channelId,
+															  64,
+															  channelDesc,
+															  imageUrl,
+															  musicFlag
+															  );
+	if( bExceededMax )
+	{
+		if( 0 == iSongHistoryDb->GetChannelSongsCountL(delChannelName,delChannelUrl) )
+		{
+			iUiObserver.RemoveChannelEntry(delSongName, delArtistName, delChannelName, delChannelUrl);
+		}
+		else
+		{
+			iUiObserver.RemoveSongEntry(delSongName, delArtistName, delChannelName, delChannelUrl);
+		}
+	}
+
+
+	if( changeCode == ECHANNELCHANGED ) // channel change detected
+    {
+    	iUiObserver.ChannelChangedL( aMetaData.Song(),aMetaData.Artist(), channelName, channelUrl );
+    }
+    else	// same channel playing next song
+    {
+		iUiObserver.NextSongReceivedL( aMetaData.Song(),aMetaData.Artist(), channelName, channelUrl );
+    }
+    
+   	CleanupStack::PopAndDestroy(&delChannelUrl);
+	CleanupStack::PopAndDestroy(&delChannelName);
+	CleanupStack::PopAndDestroy(&delArtistName);
+	CleanupStack::PopAndDestroy(&delSongName);
+
+    CleanupStack::PopAndDestroy(&musicFlag);
+    CleanupStack::PopAndDestroy(&imageUrl);
+    CleanupStack::PopAndDestroy(&channelDesc);
+    CleanupStack::PopAndDestroy(&channelUrl);
+    CleanupStack::PopAndDestroy(&channelName);
+
+    
+	IRLOG_DEBUG( "CIRSongHistoryEngine::HandleMetaDataChangeL - Exiting." );
+}
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::DetectSongHistoryItemChangesL()
+// To detect any change in the song history items.
+// ---------------------------------------------------------------------------
+//
+
+TSongHistoryItemChange CIRSongHistoryEngine::DetectSongHistoryItemChangesL(
+			const CIRMetaData& aMetaData, const RBuf& aChannelName, const RBuf& aChannelUrl)
+{
+	if(aChannelName.Length() == 0)
+	{
+		return EBLANKENTRIES;
+	}
+
+	//If the meta data is not available
+	if(((aMetaData.Song()).Length() == 0) && ((aMetaData.Artist()).Length() == 0))
+	{
+		return EBLANKENTRIES;
+	}
+
+	RBuf song;
+	song.CleanupClosePushL();
+	RBuf artist;
+	artist.CleanupClosePushL();
+	RBuf channel;
+	channel.CleanupClosePushL();
+	RBuf url;
+	url.CleanupClosePushL();
+
+	TRAPD( error, iSongHistoryDb->GetLastHistoryItemL(song, artist, channel, url));
+	if( error )
+	{
+		IRLOG_DEBUG( "CIRSongHistoryEngine::DetectSongHistoryItemChangesL() - Failed while GetLastHistoryItemL()" );
+	}
+
+	TSongHistoryItemChange retval = ENOCHANGE;	// pc-lint # 644 fix
+
+	if((song == aMetaData.Song() ) && (artist == aMetaData.Artist()) &&
+						 (channel == aChannelName)  && (url == aChannelUrl))
+	{
+		retval = ENOCHANGE;
+	}
+	else if( channel != aChannelName  || url != aChannelUrl )
+	{
+		retval = ECHANNELCHANGED;
+	}
+	else if( song != aMetaData.Song() || artist != aMetaData.Artist() )
+	{
+		retval = EMETADATACHANGED;
+	}
+	else
+	{
+		// pc-lint # 961 fix
+	}
+
+	CleanupStack::PopAndDestroy(&url);
+    CleanupStack::PopAndDestroy(&channel);
+    CleanupStack::PopAndDestroy(&artist);
+    CleanupStack::PopAndDestroy(&song);
+
+	return retval;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::HandlePropertyChangeErrorL
+// Invoked when an error has occured while fetching the new value of any listened P&S key.
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryEngine::HandlePropertyChangeErrorL( const TUid& /*aCategory*/,
+	TUint /*aKey*/, TInt aError )
+{
+    IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeErrorL" );
+    if (aError < 0)
+    	{
+    		//Some action has to be taken
+    	}
+    IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeErrorL" );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::HandlePropertyChangeL
+// Invoked when any listened P&S key is changed.
+// ---------------------------------------------------------------------------
+
+void CIRSongHistoryEngine::HandlePropertyChangeL( const TUid& aCategory,
+			 TUint aKey, const TDesC8& aText )
+{
+	IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeL" );
+	if ( aCategory == KUidActiveInternetRadioApp )
+	{
+		if( aKey == KIRPSDataChannel )
+		{
+		}
+		else if( aKey == KIRPSMetaData )
+		{
+			CIRMetaData* metaData = CIRMetaData::NewL( aText );
+			CleanupStack::PushL( metaData );
+			HandleMetaDataReceivedL( *metaData );
+			CleanupStack::PopAndDestroy( metaData );
+		}
+		else
+		{
+		// To avoid PC lint error
+		}
+	}
+	IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::GetAllHistoryL
+// Invoked when when UI request.
+// Getting the data from SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+EXPORT_C void CIRSongHistoryEngine::GetAllHistoryL( 
+				RPointerArray<CIRSongHistoryInfo>& aSongHistoryInfo )
+{
+	iSongHistoryDb->GetAllSongHistoryListL(aSongHistoryInfo);
+	
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::ClearAllHistory
+// Invoked when when UI request.
+// Clears the SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+EXPORT_C TInt CIRSongHistoryEngine::ClearAllHistory( )
+{	
+	TInt ret = 0;
+	ret = iSongHistoryDb->ClearAllSongHistoryFromDb();
+	return ret;
+}
+
+EXPORT_C TInt CIRSongHistoryEngine::DeleteOneHistory(TInt aIndex)
+{     
+    return iSongHistoryDb->DeleteOneHistory(aIndex);
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::GetHistoryCount
+// Invoked when when UI request.
+// Gets the count of the SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+EXPORT_C TInt CIRSongHistoryEngine::GetHistoryCount()
+{
+	TInt HistoryCount = 0;
+	HistoryCount = iSongHistoryDb->CountSongHistoryDb();
+	return HistoryCount;
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::SyncHistory
+// Invoked when when UI request.
+// Synchronises the Song history DB with the new data in the ISDS.
+// ---------------------------------------------------------------------------
+
+EXPORT_C TInt CIRSongHistoryEngine::SyncHistory(TInt aChannelId)
+{
+	IRLOG_DEBUG( "CIRSongHistoryEngine::SyncHistory - Entering." );
+	TRAPD(err,iSongHistoryDb->SyncSongHistoryDbL(aChannelId));
+	if(err)
+	{
+	
+	}
+	IRLOG_DEBUG( "CIRSongHistoryEngine::SyncHistory - Exiting." );
+    return KErrNone;
+}
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngine::UpdateSongHistoryDB
+// Invoked when when UI request.
+// Synchronises the Song history DB with the new data in the ISDS.
+// ---------------------------------------------------------------------------
+
+EXPORT_C void CIRSongHistoryEngine::UpdateSongHistoryDb(TInt aChannelId,
+											const TDesC& aChannelName, 
+											const TDesC& aChannelUrl,
+											const TDesC& aMusicFlag)
+{
+	IRLOG_DEBUG( "CIRSongHistoryEngine::UpdateSongHistoryDb - Entering." );
+	TInt ret = KErrNone ;
+	TRAPD(err,ret =	iSongHistoryDb->GetIdPresentInDbL( aChannelId ));
+	if(err)
+	{
+	return;
+	}
+	if(ret)
+		{
+		TRAPD(err,iSongHistoryDb->UpdateSongHistoryDbL( aChannelId ,
+		                                                aChannelName ,
+		                                                aChannelUrl ,
+		                                                aChannelUrl,
+		                                                aMusicFlag));
+		if(err)
+			{
+			return ;
+			}
+		}
+		
+	IRLOG_DEBUG( "CIRSongHistoryEngine::UpdateSongHistoryDb - Exiting." );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistorysrc/irsonghistoryengpubsub.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2006-2007 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:  Publish / Subscriber class for ChannelName and MetaData
+*
+*/
+
+
+#include "irsonghistoryengpubsub.h"
+#include "irsonghistoryengpubsubnotifyhandler.h"
+#include "irdebug.h"
+
+
+// ==================== MEMBER FUNCTIONS ===================
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngPubSub::CIRSongHistoryEngPubSub
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryEngPubSub::CIRSongHistoryEngPubSub(
+	MIRSongHistoryEngPubSubNotifyHandler& aPubSubObserver, const TUid& aCategory,
+	TUint aKey , const RProperty::TType aPropertyType): CActive( CActive::
+	EPriorityStandard ),  iPropertyType(aPropertyType),iPubSubObserver( aPubSubObserver ),
+	iCategory( aCategory ), iKey( aKey )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngPubSub::ConstructL
+// Second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryEngPubSub::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::ConstructL" );
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::ConstructL - Exiting." );
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRHistoryListContainer::NewL
+//  Creates a new instance of CIRSongHistoryEngPubSub
+//-----------------------------------------------------------------------------
+//
+CIRSongHistoryEngPubSub* CIRSongHistoryEngPubSub::NewL(
+	MIRSongHistoryEngPubSubNotifyHandler& aPubSubObserver, const TUid& aCategory,
+	TUint aKey, const RProperty::TType aPropertyType  )
+    {
+	IRLOG_DEBUG( "CIRSongHistoryEngPubSub::NewL - Entering" );
+    CIRSongHistoryEngPubSub* self = CIRSongHistoryEngPubSub::NewLC(aPubSubObserver,
+    					 aCategory,aKey, aPropertyType  );
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRSongHistoryEngPubSub::NewL - Exiting." );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRHistoryListContainer::NewLC
+//  Creates a new instance of CIRSongHistoryEngPubSub and leaves it on the cleanup stack.
+//-----------------------------------------------------------------------------
+//
+CIRSongHistoryEngPubSub* CIRSongHistoryEngPubSub::NewLC(
+	MIRSongHistoryEngPubSubNotifyHandler& aPubSubObserver, const TUid& aCategory,
+	TUint aKey, const RProperty::TType aPropertyType  )
+    {
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::NewLC - Entering" );
+    CIRSongHistoryEngPubSub* self = new (ELeave) CIRSongHistoryEngPubSub(
+    							aPubSubObserver, aCategory, aKey, aPropertyType);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+	IRLOG_DEBUG( "CIRSongHistoryEngPubSub::NewLC - Exiting." );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngPubSub::~CIRSongHistoryEngPubSub()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryEngPubSub::~CIRSongHistoryEngPubSub()
+    {
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::~CIRSongHistoryEngPubSub" );
+    Cancel();
+    iProperty.Close();
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::~CIRSongHistoryEngPubSub - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngPubSub::DoCancel()
+// Invoked when the active object is cancelled.
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryEngPubSub::DoCancel()
+    {
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::DoCancel" );
+    iProperty.Cancel();
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::DoCancel - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryEngPubSub::RunL()
+// The function is called by the active scheduler when a request completion event occurs,
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryEngPubSub::RunL()
+    {
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::RunL" );
+
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TInt err(KErrNone);
+
+
+	err = iProperty.Get( iText );
+	if (!err)
+		{
+			iPubSubObserver.HandlePropertyChangeL( iCategory, iKey, iText );
+		}
+
+    else
+    	{
+        	iPubSubObserver.HandlePropertyChangeErrorL(iCategory, iKey, err);
+    	}
+
+    IRLOG_DEBUG( "CIRSongHistoryEngPubSub::RunL - Exiting." );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/songhistorysrc/irsonghistoryinfo.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,297 @@
+/*
+* Copyright (c) 2004 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:  class for the songhistory information.
+*
+*/
+
+#include "irsonghistoryinfo.h"
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIRSongHistoryInfo
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+	EXPORT_C CIRSongHistoryInfo * CIRSongHistoryInfo::NewL()
+		{
+			CIRSongHistoryInfo* self =  CIRSongHistoryInfo :: NewLC();
+			CleanupStack::Pop( self );
+			return self;
+		}
+
+// ---------------------------------------------------------------------------
+//CIRLastPlayedSongs::NewLC()
+//Static function
+//standard two phased constructor
+// ---------------------------------------------------------------------------
+//
+	EXPORT_C CIRSongHistoryInfo * CIRSongHistoryInfo::NewLC()
+		{
+			CIRSongHistoryInfo* self = new( ELeave ) CIRSongHistoryInfo();
+			CleanupStack::PushL( self );
+			return self;
+		}
+// ---------------------------------------------------------------------------
+//CIRSongHistoryInfo::~CIRSongHistoryInfo()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSongHistoryInfo::~CIRSongHistoryInfo()
+	{
+		iArtistInfo.Close();
+
+		iSongInfo.Close();
+
+		iStreamUrlInfo.Close();
+
+		iChannelInfo.Close();
+		
+		iChannelDescription.Close();
+
+		iImageUrl.Close();
+		
+		iMusicStoreStatus.Close();
+		
+	}
+
+// ---------------------------------------------------------------------------
+//CIRSongHistoryInfo::~CIRSongHistoryInfo()
+//standard C++ constructor
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryInfo::CIRSongHistoryInfo()
+	 {
+		
+	 }
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetArtist
+// Sets Artist name
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetArtist(RBuf& aArtist)
+ {
+ 	iArtistInfo.Create(aArtist);
+ }
+ 
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetSongName
+// Sets Song name
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetSongName (RBuf& aSongName)
+ {
+ 	iSongInfo.Create(aSongName);
+ }
+ 
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetStreamUrl
+// Sets Stream url name
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetStreamUrl(RBuf& aStreamUrl)
+ {
+ 	iStreamUrlInfo.Create(aStreamUrl);
+ }
+ 
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetChannelName
+// Sets Channel name
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetChannelName(RBuf& aChannelName)
+ {
+ 	iChannelInfo.Create(aChannelName);
+ }
+ // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetChannelDesc
+// Sets Channel name
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetChannelDesc(RBuf& aChannelDesc)
+ {
+ 	iChannelDescription.Create(aChannelDesc);
+ }
+ // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetImageUrl
+// Sets Channel image Url
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetImageUrl(RBuf& aImageUrl)
+ {
+    iImageUrl.Create(aImageUrl);
+ }
+ // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetChannelMusicStatus
+// Sets Channel's MusicStoreStatus
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetChannelMusicStatus(RBuf& aChannelMusicStatus)
+ {
+ 	iMusicStoreStatus.Create(aChannelMusicStatus);
+ }
+// ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetChannelType
+// Sets Channel TYpe
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetChannelType(TInt aChannelType)
+ {
+ 	iChannelType=aChannelType;
+ }
+// ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetChannelId
+// Sets Channel Id
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetChannelId(TInt aChannelId)
+ {
+ 	iChannelId=aChannelId;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetBitrate
+// Sets bitrate
+// ---------------------------------------------------------------------------
+//
+ void CIRSongHistoryInfo::SetBitrate(TInt aBitrate)
+ {
+    iBitrate=aBitrate;
+ }
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::SetHistoryInfo
+// Sets Song History Information.
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C void CIRSongHistoryInfo::SetHistoryInfo(RBuf& aSongName,
+												  RBuf& aArtist, 
+												  RBuf& aStreamUrl, 
+												  RBuf& aChannelName ,
+												  TInt aChannelType, 
+												  TInt aChannelId,
+												  TInt aBitrate,
+												  RBuf& aChannelDesc,
+												  RBuf& aImageUrl,
+												  RBuf& aMusicStoreStatus
+												   )
+ {
+ 	SetSongName(aSongName);
+ 	SetArtist(aArtist);
+ 	SetStreamUrl(aStreamUrl);
+ 	SetChannelName(aChannelName);
+    SetChannelType(aChannelType);
+    SetChannelId(aChannelId);
+    SetBitrate(aBitrate);
+    SetChannelDesc(aChannelDesc);
+    SetImageUrl(aImageUrl);
+    SetChannelMusicStatus(aMusicStoreStatus);
+	
+ }
+ 
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetSongInfo
+// Gets the song information
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C const RBuf& CIRSongHistoryInfo::GetSongInfo() const
+ {
+ 	return iSongInfo;
+ }
+ 
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetArtistInfo
+// Gets Artist name
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C const RBuf& CIRSongHistoryInfo::GetArtistInfo() const
+ {
+ 	return iArtistInfo;
+ }
+ 
+// ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetStreamUrl
+// Gets StreamUrl name
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C const RBuf& CIRSongHistoryInfo::GetStreamUrl() const
+ {
+ 	return iStreamUrlInfo;
+ }
+ 
+ // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetChannelName
+// Gets Channel name
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C const RBuf& CIRSongHistoryInfo::GetChannelName() const
+ {
+ 	return iChannelInfo;
+ }
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetChannelDesc
+// Gets Channel name
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C const RBuf& CIRSongHistoryInfo::GetChannelDesc() const 
+ {
+ 	return iChannelDescription;
+ }
+
+ // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetImageUrl
+// Gets Channel image Url
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const RBuf& CIRSongHistoryInfo::GetImageUrl() const 
+{
+   return iImageUrl;
+}
+
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetChannelType
+// Gets Channel Type
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C TInt CIRSongHistoryInfo::GetChannelType() const
+ {
+ 	return iChannelType;
+ }
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetChannelId
+// Gets Channel Id
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C TInt CIRSongHistoryInfo::GetChannelId() const
+ {
+ 	return iChannelId;
+ }
+ // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetBitrate
+// Gets bitrate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRSongHistoryInfo::GetBitrate() const
+{
+   return iBitrate;
+}
+  // ---------------------------------------------------------------------------
+// CIRSongHistoryInfo::GetChannelMusicStatus
+// Gets Channel MusicStoreStatus
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C const RBuf& CIRSongHistoryInfo::GetChannelMusicStatus() const 
+ {
+ 	return iMusicStoreStatus;
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irasfplayer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2006-2007 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 of streaming and playback on ASF channel url
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 1, Fri Sep 19 13:00:00 2008 by Rohit
+*  Ref:
+*  Created
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IRASFPLAYER_H
+#define IRASFPLAYER_H
+
+//#include "ircontrolparams.h"
+//#include "irmediaenginedef.h"
+//#include "irmediaengineinterface.h"
+#include <mdaaudiosampleplayer.h>	// MMdaAudioPlayerCallback
+
+// Forward declarations
+class MIRCtrlCmdObserver;
+class MIRStreamSourceObserver;
+class CIRMetaData;
+
+//==============================class declaration CIRAsfPlayer==============================
+
+/*
+MIRCtrlCmdObserver functions invoked by AsfPlayer
+	FetchVolume
+
+MIRStreamSourceObserver functions invoked by AsfPlayer
+	Asf_ErrorConnecting
+	Asf_ConnectionEstablished
+	Asf_UpdateProgress
+	Asf_HandleMetaDataReceivedL
+*/
+
+
+/**
+ * This class is the implementation of Asf format streaming and playback
+ * 
+ * @code
+ * @endcode
+ */
+
+NONSHARABLE_CLASS(CIRAsfPlayer) : public MMdaAudioPlayerCallback,
+								  public MAudioLoadingObserver 
+	{
+public:
+									//Member Functions
+	/**
+	 * Function : NewL
+	 * function returns an instance of CIRAsfPlayer
+	 * Two phase constructor
+	 * @return instance of CIRAsfPlayer
+	 */
+	IMPORT_C static CIRAsfPlayer* NewL(MIRStreamSourceObserver& aStreamObserver, 
+									   MIRCtrlCmdObserver& aCtrlCmdObserver);
+
+	/**
+	 * Function : NewLC
+	 * function creates an instance of CIRAsfPlayer
+	 * Two phase constructor
+	 * @return instance of CIRAsfPlayer
+	 */
+	IMPORT_C static CIRAsfPlayer* NewLC(MIRStreamSourceObserver& aStreamObserver, 
+										MIRCtrlCmdObserver& aCtrlCmdObserver);
+
+	/**
+	 * Function : ~CIRAsfPlayer
+	 * Default Destructor
+	 */
+	virtual ~CIRAsfPlayer();
+
+//Function which control the play
+
+	/**
+	 * Function : Play
+	 * function to which intiate the player
+	 */
+	IMPORT_C void PlayL(const TDesC& aUri);
+
+	/**
+	 * Function : Play
+	 * function to which intiate the player
+	 */
+	IMPORT_C void Play();
+	
+	/**
+	 * Function : Stop
+	 * function to which stop the player
+	 */
+	IMPORT_C void Stop();   	     
+
+//Function to control the volume
+
+	IMPORT_C void SetVolume(TInt aVolume);
+
+	IMPORT_C TInt Volume() const;
+
+	IMPORT_C TInt MaxVolume() const;
+
+// Helper functions
+	IMPORT_C static TBool DetectAsfChannel(const TDesC& aUri);
+
+private:
+	/**
+	 * Function: CIRAsfPlayer
+	 * This function is the default constructor
+	 */
+	CIRAsfPlayer(MIRStreamSourceObserver& aStreamObserver, MIRCtrlCmdObserver& aCtrlCmdObserver);
+
+	/**
+	 * Function: ConstructL
+	 * Two phase constructor is used to intialize data members
+	 */
+	void ConstructL();
+
+	/**
+	 * Function: ReadMetadataL
+	 * Reads the meta data from the CMdaAudioPlayerUtility
+	 */
+	void ReadMetadataL();
+	
+//Call back functions
+public:	
+
+	// MMdaAudioPlayerCallback members
+	void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
+	void MapcPlayComplete(TInt aError);
+
+	// MAudioLoadingObserver
+	void MaloLoadingStarted();
+	void MaloLoadingComplete();
+
+private:	
+	//Enum for Play State
+	enum TState
+		{
+		ENotReady,    //Not ready to play
+		EReadyToPlay, //Ready to play
+		EPlaying      //Playing
+		};
+
+	//For implement Player functionalities
+
+    /**
+     * CMdaAudioPlayerUtility instance to stream Asf stream
+     * Owned
+     */
+    CMdaAudioPlayerUtility* iMdaAudioPlayer;
+
+    /**
+     * Current meta data information.
+     * Owned
+     */
+    CIRMetaData* iMetaData;
+	
+    /**
+     * URI of the station server
+     * Owned
+     */
+	RBuf	iStationUri;
+
+	// Observer for streaming and playback events
+
+	/**
+	 * MIRCtrlCmdObserver reference to get volume setting
+	 */
+    MIRCtrlCmdObserver& iCtrlCmdObserver;
+
+	/**
+	 * Reference of the Stream source observer
+	 */
+    MIRStreamSourceObserver& iStreamObserver;
+
+	// Player state	
+	TState iState; 		
+	};  
+
+#endif//IRASFPLAYER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/iricyflowinitiator.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2006-2007 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:  Initiates an ICY session.
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Tue Mar 11 20:00:00 2008 by Rohit
+*  Ref:
+*  Merged IRv1.0 Engine code changes
+*
+*  Version: 2, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi
+*  Ref:
+*  Added NetworkController instance for Byte Counter Impl
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IR_IRICYFLOWINITIATOR
+#define IR_IRICYFLOWINITIATOR
+
+#include <e32base.h>
+
+#include "irsockettimeouttimer.h"
+
+class RSocket;
+class CIRStationConnection;
+class TChannelInfo;
+class CIRNetworkController;
+
+/**
+* This class manages the connection to a channel server
+*/
+NONSHARABLE_CLASS ( CIRIcyFlowInitiator ) : public CActive,  public MIRSocketTimeoutNotifier
+    {
+public:
+
+    /**
+     * Standard Symbian two-phase construction
+     *
+     * @param aSocket       Socket to be read.
+     * @param aUri          The URI of the ICY source (channel server)
+     * @param aOwner        The owner of this CIRIcyFlowReader
+     * @param aChannelInfo  Information describing the ICY session (to be filled)
+     * @return Instance of CIRIcyFlowInitiator
+     */
+    static CIRIcyFlowInitiator* NewL( RSocket& aSocket, const TDesC& aUri,
+    			 CIRStationConnection& aOwner, TChannelInfo& aChannelInfo );
+
+    /**
+     * Default C++ destructor
+     */
+    ~CIRIcyFlowInitiator();
+
+    /**
+     * From base class MIRSocketTimeoutNotifier
+     */
+    void TimerExpired();
+
+	/**
+     * Send an ICY session request (ICY GET) to the channel server
+     */
+    void RequestFlow();
+
+protected:
+
+// From base class CActive
+
+    /**
+     * From base class CActive.
+     */
+    void RunL();
+
+    /**
+     * From base class CActive.
+     */
+	TInt RunError(TInt aError);
+
+    /**
+     * From base class CActive.
+     */
+    void DoCancel();
+
+private:
+	/**
+     * The states of the flow initiator
+     */
+    enum TIRIcyFlowInitiatorState
+		{
+		EIRIdle,
+        EIRSending,
+		EIRReceiving,
+		EIRFinished
+		};
+
+private:
+
+    /**
+     * C++ constructor.
+     *
+     * @param aSocket       Socket to be read.
+     * @param aUri          The URI of the ICY source (channel server)
+     * @param aOwner        The owner of this CIRIcyFlowReader
+     * @param aChannelInfo  Information describing the ICY session (to be filled)
+     * @return Instance of CIRIcyFlowInitiator
+     */
+    CIRIcyFlowInitiator( RSocket& aSocket, const TDesC& aUri, CIRStationConnection& aOwner,
+    						 TChannelInfo& aChannelInfo );
+
+    /**
+     * Standard Symbian second-phase construction.
+     */
+    void ConstructL();
+
+	/**
+     * Parse and validate the url
+     *
+     * @return ETrue if all the URI components could be extracted, EFalse otherwise.
+     */
+    TBool ExtractUriComponentsL();
+
+   	/**
+     * Validates the response from the channel server
+     *
+     * @return ETrue if channel server is acceptable.
+     */
+    TBool ValidateChannelServer();
+
+	/**
+     * Parses the channel headers to get the channel information
+     */
+	void ParseChannelInfoL();
+
+	/**
+	 * Extract the specified meta data information
+	 *
+	 * @param aMetaField Metafield to be extracted
+ 	 * @param aBuffer Buffer into which the meta data is to be extracted
+     * @return ETrue if extraction is sucessful, EFalse otherwise
+     */
+	TBool ExtractMetaInfoL(const TDesC8& aMetaField, TDes8 &aBuffer ) const;
+
+private:
+
+	/**
+     * Used for timeout mechanism.
+     * Owned.
+     */
+	CIRSocketTimeOutTimer* iSocketTimer;
+
+    /**
+     * Holds the resolved host information.
+     * Owned.
+     */
+	RBuf8 iHost;
+
+	/**
+     * Holds the resolved path information.
+     * Owned.
+     */
+	RBuf8 iPath;
+
+	/**
+	 * Incoming data buffer.
+	 * Owned.
+	 */
+	RBuf8 iBuffer;
+
+	/**
+	 * Buffer used to read the data from socket. 
+	 * Owned.
+	 */
+	RBuf8 iReadBuffer;	
+	
+	/** 
+	 * Holds the UAProf string.
+	 * Owned.
+	 */
+	RBuf8 iUAProfString;
+
+	/**
+	 * Indicates the state of this IRIcyFlowInitiator
+	 */
+	TIRIcyFlowInitiatorState iState;
+
+	/**
+	 * Socket connected to channel server
+	 */
+	RSocket& iSocket;
+
+    /**
+     * Reference to the URI associated with the channel server
+     */
+    const TDesC& iUri;
+
+    /**
+     * Owner of this object in whole-part relation.
+     */
+    CIRStationConnection& iOwner;
+
+	/**
+     * Information about the current ICY session.
+     */
+	TChannelInfo& iChannelInfo;
+
+	CIRNetworkController* iNetworkControllerHandle;
+    };
+
+#endif // IR_IRICYFLOWINITIATOR
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/iricyflowreader.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,342 @@
+/*
+* Copyright (c) 2006-2007 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:  Reads data from opened ICY session
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi
+*  Ref:
+*  Added NetworkController instance for Byte Counter Impl
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IR_IRICYFLOWREADER
+#define IR_IRICYFLOWREADER
+
+
+#include <e32base.h>
+#include <es_sock.h>
+
+class CIRMetaData;
+class CIRNetworkBuffer;
+class CIRStationConnection;
+class MIRStationDataObserver;
+class RSocket;
+class TChannelInfo;
+class CIRNetworkController;
+
+/**
+*  This class handles reading audio and metadata from a connected
+* ICY session. It assumes that the socket is connected, the
+* ICY session has been requested and initial ICY headers have been
+* processed.
+*
+*/
+NONSHARABLE_CLASS( CIRIcyFlowReader ) : public CActive
+    {
+public: // Constructors and destructors
+
+    /**
+     * Standard Symbian two-phase construction
+     *
+     * @param aSocket       Socket to be read.
+     * @param aOwner        The owner of this CIRIcyFlowReader
+     * @param aDataObserver The observer wishing to receive audio/metadata.
+     * @param aChannelInfo  Information describing the ICY session
+     * @return Instance of CIRIcyFlowReader
+     */
+	static CIRIcyFlowReader* NewL( RSocket& aSocket, CIRStationConnection& aOwner,
+	                               MIRStationDataObserver& aDataObserver, 
+	                               TChannelInfo& aChannelInfo );
+
+    /**
+     * Destructor
+     */
+	~CIRIcyFlowReader();
+
+public:
+
+	/**
+	 * Starts the reading from the socket
+	 */
+	void Start();
+
+	/**
+     * Fills the buffer with the streamed data
+     *
+     * @param aInputBuffer Buffer into which audio data is to be copied
+     */
+	void FillBuffer(TDes8& aInputBuffer);
+
+private: // Functions from base classes
+
+	/**
+	 * From CActive
+	 */
+	void RunL();
+
+	/**
+	 * From CActive
+	 */
+	void DoCancel();
+
+private:
+	/**
+	 * Copies the buffer to the mediaengine sink queue
+	 *
+	 * @param aData Data to copy.
+	 */
+	void AddToSinkQueue( const TDesC8& aData );
+
+	/**
+	 * Fills the media engine buffer with audio data upon request
+	 * by the media engine
+	 *
+	 * @param aInputBuffer Buffer into which audio data is to be copied
+	 */
+	void FillMediaEngineBuffer(const TDes8& aInputBuffer);
+
+	/**
+     * Fills the unfilled media engine buffers with the remaining audio data
+     */
+	void FillRemainingBuffers();
+
+	/**
+     * C++ default constructor
+     */
+	CIRIcyFlowReader( RSocket& aSocket, CIRStationConnection& aOwner,
+  	                  MIRStationDataObserver& aDataObserver, TChannelInfo& aChannelInfo );
+
+    /**
+     * Second phase construction
+     */
+	void ConstructL();
+
+private:
+
+    /**
+     * The parsing states
+     */
+    enum TIRParsingState
+        {
+        EIRReadingAudioData,        /**< Reading raw audio data. */
+        EIRReadingMetaDataLength,   /**< Reading the length of the meta data. */
+        EIRReadingMetaData          /**< Reading meta data. */
+        };
+
+	/**
+	 * Initiates a read from socket.
+	 */
+	void IssueRead();
+
+	/**
+     * Initializes the buffers that will be used for streaming
+     */
+	void InitializeBuffersL();
+
+	/**
+     * Extracts the meta data from the stream
+     */
+	void ExtractMetadataL();
+
+    /**
+     * Handles received data.
+     *
+     * Can contain any amount of audio and/or meta data mixed in with it.
+     *
+     * @param aData Data received.
+     */
+    void HandleReceivedDataL( const TDesC8& aData );
+
+    /**
+     * Handles received audio data.
+     *
+     * Can only contain raw audio data.
+     *
+     * @param aData Data received.
+     */
+    void HandleReceivedAudioData( const TDesC8& aData );
+
+    /**
+     * Handles received meta data.
+     *
+     * Can only contain meta data.
+     *
+     * @param aData Data received.
+     */
+    void HandleReceivedMetaData( const TDesC8& aData );
+    /**
+     * Recognizes if the string is UTF-8 encoded and decodes it,
+     * if required.
+     * 
+     * @param aString The string to be decoded.
+     * @return The string in Unicode/ISO-8859-1 format.
+     */
+    HBufC* DecodeMetadataStringLC( const TDesC8& aString ) const;
+    
+    /**
+     * Tests whether the string is UTF-8 encoded.
+     * 
+     * @param aString The string to be examined
+     * @return ETrue, if the string is UTF-8 encoded, EFalse otherwise. 
+     */
+    TBool IsUtf8Encoded( const TDesC8& aString ) const;
+
+private:
+
+	/**
+	 * The pointer to buffer which holds the audio data.
+	 * Owned.
+	 */
+	TUint8* iSongBuffer;
+
+	/**
+	 * Buffer that holds the data received over the network.
+	 * Owned.
+	 */
+	HBufC8* iSocketBuffer;
+
+    /**
+     * Buffer to contain unfinished song data.
+     * Owned.
+     */
+    HBufC8* iTempSongBuffer;
+
+    /**
+     * Buffer to contain unfinished meta data.
+     * Owned.
+     */
+    HBufC8* iTempMetaBuffer;
+
+    /**
+     * Current meta data information.
+     * Owned.
+     */
+    CIRMetaData* iMetaData;
+
+    /**
+	 * The socket that read.
+	 */
+    RSocket& iSocket;
+
+    /**
+     * The owner of this object in the whole-part relation.
+     */
+    CIRStationConnection& iOwner;
+
+    /**
+     * The observer wishing to receive audio/metadata
+     */
+    MIRStationDataObserver& iDataObserver;
+
+	/**
+	 * Queue of buffer which is filled
+	 */
+	TSglQue<CIRNetworkBuffer> iSourceQ;
+
+	/**
+	 * Queue of buffer which is empty
+	 */
+	TSglQue<CIRNetworkBuffer> iSinkQ;
+
+	/**
+	 * Temporary holder for network buffer.
+	 * Not owned.
+	 */
+	CIRNetworkBuffer* iTempBufferHolder;
+
+    /**
+     * Pointer descriptor to the network data buffer.
+     */
+    TPtr8 iSocketBufferPtr;
+
+	/**
+	 * Indicates the no. of bytes read from the socket
+     */
+	TSockXfrLength iSocketBytesRead;
+
+	/**
+	 * Indicates that stream source ( network side ) buffering is happening.
+	 */
+	TBool iInitialBuffering;
+
+	/**
+	 * Indicates rebuffering is occurring
+	 */
+	TBool iReBuffering;
+
+	/**
+	 * Indicates no of chunks of buffers to be copied
+	 */
+	TInt iNoOfChunks;
+
+	/**
+	 * Indicates the number of chunks are remaining
+	 */
+	TInt iChunksRemaining;
+
+    /**
+     * Length of the current meta data block in bytes.
+     */
+    TInt iMetaDataLength;
+
+	/**
+	 * Pointer to buffer to be filled.
+	 * Not owned.
+	 */
+	TUint8* iBufferFillPointer;
+
+	/**
+	 * Used to give buffer fill value to progress bar
+	 */
+	TInt iBufferCounter;
+
+	/**
+	 * Used to determine the metadata position
+	 */
+	TInt iAudioDataOffset;
+
+	/**
+	 * Indicates the data parsing state.
+	 */
+	TIRParsingState iParsingState;
+
+	/**
+	 * Holds the channel information
+	 */
+	TChannelInfo& iChannelInfo;
+
+	/**
+	 * Indicates if the channel info should be published or not
+	 */
+	TBool iPublishStationInfo;
+
+	/**
+	 * NetworkController singleton instance
+	 */
+	CIRNetworkController* iNetworkControllerHandle;
+	};
+
+#endif // IR_IRICYFLOWREADER
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irmetadata.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2007-2007 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 wrapper class
+*
+*/
+
+
+#ifndef C_CIRMETADATA_H
+#define C_CIRMETADATA_H
+
+#include <s32mem.h>
+
+/**
+ * Station meta data information wrapper.
+ *
+ * Supports all ICY protocol specified meta data information and provides
+ * internalization and externalization for passing the meta data via binary
+ * APIs, such as Publish & Subscribe.
+ */
+NONSHARABLE_CLASS( CIRMetaData ) : public CBase
+    {
+
+public:
+
+    /**
+     * Default two-phased constructor.
+     *
+     * Initializes the object to default values.
+     *
+     * @return  The created object. Ownership is transferred.
+     */
+    inline static CIRMetaData* NewL();
+
+    /**
+     * Two-phased constructor for direct internalization.
+     *
+     * Initializes the object by internalizing it from the supplied data.
+     *
+     * @param   aData   Binary data to be used for internalization.
+     * @return  The created object. Ownership is transferred.
+     */
+    inline static CIRMetaData* NewL( const TDesC8& aData );
+
+    /**
+     * Destructor.
+     *
+     * Frees all allocated resources.
+     */
+    inline ~CIRMetaData();
+
+    /**
+     * Copies values from the supplied meta data object.
+     *
+     * Resulting object is identical to the supplied one after the call
+     * has been successfully completed.
+     *
+     * @param   aMetaData   Meta data to copy information from.
+     */
+    inline void SetL( const CIRMetaData& aMetaData );
+
+    /**
+     * Sets the artist name.
+     *
+     * @param   aArtist     The artist name to set.
+     */
+    inline void SetArtistL( const TDesC& aArtist );
+
+    /**
+     * Sets the song name.
+     *
+     * @param   aSong       The song name to set.
+     */
+    inline void SetSongL( const TDesC& aSong );
+
+    /**
+     * Sets the stream URL.
+     *
+     * @param   aStreamUrl  The stream URL to set.
+     */
+    inline void SetStreamUrlL( const TDesC& aStreamUrl );
+
+    /**
+     * Returns the artist name.
+     *
+     * @return  The artist name.
+     */
+    inline const TDesC& Artist() const;
+
+    /**
+     * Returns the song name.
+     *
+     * @return  The song name.
+     */
+    inline const TDesC& Song() const;
+
+    /**
+     * Returns the stream URL.
+     *
+     * @return  The stream URL.
+     */
+    inline const TDesC& StreamUrl() const;
+
+    /**
+     * Internalizes the object from the supplied stream.
+     *
+     * @param   aStream     Stream to internalize the object from.
+     */
+    inline void InternalizeL( RReadStream& aStream );
+
+    /**
+     * Externalizes the object to the supplied stream.
+     *
+     * @param   aStream     Stream to externalize the object to.
+     */
+    inline void ExternalizeL( RWriteStream& aStream ) const;
+
+    /**
+     * Equality comparison operator.
+     *
+     * Compares two meta data objects and returns whether or not they are identical.
+     *
+     * @param   aMetaData   Meta data to be used for comparison.
+     * @return  <code>ETrue</code> if the objects are identical, <code>EFalse</code> otherwise.
+     */
+    inline TBool operator==( const CIRMetaData& aMetaData ) const;
+
+    /**
+     * Inequality comparison operator.
+     *
+     * Compares two meta data objects and returns whether or not they are not identical.
+     *
+     * @param   aMetaData   Meta data to be used for comparison.
+     * @return  <code>ETrue</code> if the objects are not identical, <code>EFalse</code> otherwise.
+     */
+    inline TBool operator!=( const CIRMetaData& aMetaData ) const;
+
+private:
+
+    /**
+     * Default constructor.
+     */
+    inline CIRMetaData();
+
+    /**
+     * Second-phase constructor.
+     */
+    inline void ConstructL();
+
+    /**
+     * Second-phase constructor from binary data.
+     *
+     * @param   aData   Binary data to internalize the object from.
+     */
+    inline void ConstructL( const TDesC8& aData );
+
+private:
+
+    /**
+     * The name of the artist.
+     * Owned.
+     */
+    RBuf iArtist;
+
+    /**
+     * The name of the song.
+     * Owned.
+     */
+    RBuf iSong;
+
+    /**
+     * The stream URL.
+     * Owned.
+     */
+    RBuf iStreamUrl;
+
+    };
+
+#include "irmetadata.inl"
+
+#endif // C_CIRMETADATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irmetadata.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2007-2007 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 information wrapper
+*
+*/
+
+
+// ---------------------------------------------------------------------------
+// Default two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+inline CIRMetaData* CIRMetaData::NewL()
+    {
+    CIRMetaData* self = new ( ELeave ) CIRMetaData;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor for direct internalization.
+// ---------------------------------------------------------------------------
+//
+inline CIRMetaData* CIRMetaData::NewL( const TDesC8& aData )
+    {
+    CIRMetaData* self = new ( ELeave ) CIRMetaData;
+    CleanupStack::PushL( self );
+    self->ConstructL( aData );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+inline CIRMetaData::CIRMetaData()
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::ConstructL()
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// Second-phase constructor from binary data.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::ConstructL( const TDesC8& aData )
+    {
+    RDesReadStream stream( aData );
+    CleanupClosePushL( stream );
+    InternalizeL( stream );
+    CleanupStack::PopAndDestroy( &stream );
+    }
+    
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+inline CIRMetaData::~CIRMetaData()
+    {
+    iArtist.Close();
+    iSong.Close();
+    iStreamUrl.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Copies values from the supplied meta data object.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::SetL( const CIRMetaData& aMetaData )
+    {
+    SetArtistL( aMetaData.Artist() );
+    SetSongL( aMetaData.Song() );
+    SetStreamUrlL( aMetaData.StreamUrl() );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the artist name.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::SetArtistL( const TDesC& aArtist )
+    {
+    iArtist.Close();
+    iArtist.CreateL( aArtist );
+    }
+    
+// ---------------------------------------------------------------------------
+// Sets the song name.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::SetSongL( const TDesC& aSong )
+    {
+    iSong.Close();
+    iSong.CreateL( aSong );
+    }
+    
+// ---------------------------------------------------------------------------
+// Sets the stream URL.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::SetStreamUrlL( const TDesC& aStreamUrl )
+    {
+    iStreamUrl.Close();
+    iStreamUrl.CreateL( aStreamUrl );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the artist name.
+// ---------------------------------------------------------------------------
+//
+inline const TDesC& CIRMetaData::Artist() const
+    {
+    return iArtist;
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the song name.
+// ---------------------------------------------------------------------------
+//
+inline const TDesC& CIRMetaData::Song() const
+    {
+    return iSong;
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the stream URL.
+// ---------------------------------------------------------------------------
+//
+inline const TDesC& CIRMetaData::StreamUrl() const
+    {
+    return iStreamUrl;
+    }
+    
+// ---------------------------------------------------------------------------
+// Internalizes the object from the supplied stream.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::InternalizeL( RReadStream& aStream )
+    {
+    // The order of internalization must not be changed, nor can any of these
+    // be removed. Futher data fields may be added.
+
+    iArtist.Close();
+    iArtist.CreateL( aStream, KMaxTInt );
+
+    iSong.Close();
+    iSong.CreateL( aStream, KMaxTInt );
+
+    iStreamUrl.Close();
+    iStreamUrl.CreateL( aStream, KMaxTInt );
+    }
+    
+// ---------------------------------------------------------------------------
+// Externalizes the object to the supplied stream.
+// ---------------------------------------------------------------------------
+//
+inline void CIRMetaData::ExternalizeL( RWriteStream& aStream ) const
+    {
+    // The order of externalization must not be changed, nor can any of these
+    // be removed. Futher data fields may be added.
+
+    aStream << iArtist;
+    aStream << iSong;
+    aStream << iStreamUrl;
+    
+    aStream.CommitL();
+    }
+
+// ---------------------------------------------------------------------------
+// Equality comparison operator.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMetaData::operator==( const CIRMetaData& aMetaData ) const
+    {
+    TBool ret = EFalse;
+
+    if ( iArtist == aMetaData.Artist() && iSong == aMetaData.Song() && iStreamUrl == aMetaData.StreamUrl() )
+        {
+        ret = ETrue;
+        }
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// Inequality comparison operator.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMetaData::operator!=( const CIRMetaData& aMetaData ) const
+    {
+    return !(*this == aMetaData);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irnetworkbuffer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2006-2007 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:  Network buffer
+*
+*/
+
+
+#ifndef IRNETWORKBUFFER_H
+#define IRNETWORKBUFFER_H
+
+#include <e32base.h>
+
+//========================================class declaration CIRNetworkBuffer============================================
+
+/**
+ * This class is wrapper class which can hold an address of a memory chunk
+ * and size (granularity) of memory chunk.
+ * This is implemented so as to use with queue like TSglQue
+ * iLink is public member and is of a member of type TSglQueLink
+ * The memory address is of TUint8* type and address is of type TInt
+ * you can assign the address and granularity only when you create an instance
+ * and retrive address and size using Des() and GetSize() respectively
+ * typical usage is as follows
+ * Note: This class DOESN'T take any responsibility of removing memory chunk
+ * associated to it when you delete the chunk, since it is not creating the memory
+ * chunk it doesn't do deallocation it has to taken care from where you create
+ * the memory chunk
+ *
+ * Since it may require changes we are not using irbuffercontainer.cpp present in IRMediaEngine
+ * however the logic is borrowed from IRMediaEngine
+ * @code
+ *
+ * TSglQue<CIRNetworkBuffer> Myque;
+ * TInt f_off = _FOFF(CIRNetworkBuffer,iLink);
+ * Myque.SetOffset(f_off);
+ * TUint8* buffer;
+ * TInt sizeofbuffer;
+ * CIRNetworkBuffer* bufferholder;
+ * bufferholder = CIRNetworkBuffer::NewL(buffer,sizeofbuffer);
+ * Myque.AddLast(*bufferholder);
+ * TUint8* ptr = bufferholder->Des();
+ * TInt size = bufferholder->GetSize();
+ * bufferholder = Myque.First();
+ * Myque.Remove(*bufferholder);
+ * delete bufferholder; //deleting bufferholder doesn't deletes memory allocated
+ *			            //to buffer is not getting deleted we have delete it explicitly
+ * 
+ * delete buffer;
+ *
+ * @endcode
+ *   
+ */
+
+NONSHARABLE_CLASS( CIRNetworkBuffer ) : public CBase
+	{
+											//member functions
+public :
+	
+	/**
+	 * Two Phase NewL
+	 * returns an instance CIRNetworkBuffer
+	 * Owned by CIRNetworkBuffer
+	 * @param aAddress Address of data chunk
+	 * @param aSize Size of data chunk
+	 * @return instance CIRNetworkBuffer
+	 */	
+	static CIRNetworkBuffer* NewL( TUint8* aAddress,TInt aSize );
+		
+	/**
+	 * Two Phase NewLC
+	 * Creates an instance CIRNetworkBuffer
+	 * Owned by CIRNetworkBuffer
+	 * @param aAddress Address of data chunk
+	 * @param aSize Size of data chunk
+	 * @return instance CIRNetworkBuffer
+	 */
+	static CIRNetworkBuffer* NewLC( TUint8* aAddress,TInt aSize );
+
+	/**
+	 * destructor function
+	 * Owned by CIRNetworkBuffer
+	 */ 
+	~CIRNetworkBuffer();
+	
+ 	/**	
+	 *  Des returns the Address of the chunk;
+	 *  Owned by CIRNetworkBuffer Class
+	 *  @return address
+	 */	
+	 TUint8* Des() const;
+	
+		 
+	/**	
+	 *  Size returns the size of the chunk;
+	 *  Owned by CIRNetworkBuffer Class
+	 *  @return size of chunk
+	 */
+	 TInt Size() const;	
+
+private:
+
+	/**
+	 * Function : CIRNetworkBuffer
+	 * default constructor
+	 */	
+	CIRNetworkBuffer();
+				
+	/**
+	 * Two Phase ConstructL
+	 * Owned by CIRNetworkBuffer
+	 * @param aAddress Address of data chunk
+	 * @param aSize Size of data chunk
+	 */
+ 	void ConstructL( TUint8* aAddress,TInt aSize );
+
+public:
+	/**
+	 * Queue Link owned by CIRNetworkBuffer
+	 */
+	TSglQueLink iLink; 
+
+private:
+		
+	/**
+	 * Queued buffer pointer owned by CIRNetworkBuffer
+	 */
+	 TUint8* iDataAddress;
+		
+	/**
+	 * Size of the chunk
+	 */
+	 TInt iSize;		
+	};
+
+#include "irnetworkbuffer.inl"
+	
+#endif //IRNETWORKBUFFER_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irnetworkbuffer.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006-2007 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:  Network buffer
+*
+*/
+
+
+
+#ifndef IR_BUFFERCONTAINER_INL
+#define IR_BUFFERCONTAINER_INL
+
+// -----------------------------------------------------------------------------	
+//  Des returns the Address of the chunk;
+//  Owned by CIRNetworkBuffer Class
+// -----------------------------------------------------------------------------
+//
+ inline TUint8* CIRNetworkBuffer::Des() const
+	{
+	return iDataAddress;	
+	} 
+	 
+// -----------------------------------------------------------------------------	
+//  Size returns the size of the chunk;
+//  Owned by CIRNetworkBuffer Class
+// -----------------------------------------------------------------------------
+//
+ inline TInt CIRNetworkBuffer::Size() const
+	{
+	return iSize;	
+	}
+	
+#endif //IR_BUFFERCONTAINER_INL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irsocketopener.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2006-2007 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:  Opens TCP connection.
+*
+*/
+
+
+#ifndef IRSOCKETOPENER_H
+#define IRSOCKETOPENER_H
+
+#include <e32base.h>
+#include <es_sock.h>
+
+#include "irsockettimeouttimer.h"
+
+class RSocket;
+class TSockAddr;
+class CIRStationConnection;
+
+
+/**
+ * Creates the socket connection a channel server
+ */
+NONSHARABLE_CLASS ( CIRSocketOpener ) : public CActive,	public MIRSocketTimeoutNotifier
+    {
+public:
+    
+    /**
+     * Standard Symbian two-phase construction
+     *
+     * @param aSocket Socket to be opened.
+     * @param aOwner The owner of this CIRSocketOpener
+     * @return Instance of CIRSocketOpener
+     */
+    static CIRSocketOpener* NewL( RSocket& aSocket, CIRStationConnection& aOwner );
+    
+    /**
+     * Default C++ destructor
+     */
+    ~CIRSocketOpener();
+    
+    /**
+     * Called when the timer times out
+     */
+    void TimerExpired();
+    
+    /**
+     * Connects to the channel server
+     *
+     * @param aUri URI of channel server.
+     */
+    void ConnectL( const TDesC& aUri );
+
+protected:
+	
+	 // from base class CActive
+	 
+    /**
+     * From base class CActive
+     *
+     * @see CActive::RunL();
+     */
+    void RunL();
+    
+    /**
+     * From base class CActive
+     *
+     * @see CActive::DoCancel();
+     */
+    void DoCancel();
+
+private:
+
+    /**
+    * Constructor.
+    */
+    CIRSocketOpener( RSocket& aSocket, CIRStationConnection& aOwner );
+
+    /**
+    * Standard Symbian second-phase construction.
+    */
+    void ConstructL();
+    
+    /**
+     * Issues asynchronous resolving of the DNS name to IP address
+     */
+    void ResolveAddress();
+	
+	/**
+     * Issues asynchronous connecting to the channel server
+     */
+	void ConnectToAddress();
+	
+	/**
+     * Extracts the relevant URI components to member variables.
+     *
+     * @param aUri URI of the channel server
+     */
+    TBool ExtractUriComponentsL(const TDesC& aUri);
+
+private:
+	
+	/**
+     * The states of CIRSocketOpener
+     */
+    enum TIRSocketOpenerState
+		{
+		EIRIdle,
+		EIRResolving,
+		EIRConnecting,
+		EIRReady
+		};
+
+private:
+		
+	/**
+     * Used for timeout mechanism. 
+     * Owned.
+     */
+	CIRSocketTimeOutTimer* iSocketTimer;    
+
+	/**
+     * Contains the host part of the URI. 
+     * Owned.
+     */
+	RBuf iHost;
+	
+	/**
+     * For DNS resolving. 
+     * Owned.
+     */
+	RHostResolver iResolver;
+    
+	/**
+     * The current state of CIRSocketOpener
+     */
+	TIRSocketOpenerState iState;
+
+	/**
+     * The address of the server in the form understood by the socket. 
+     * Contains the IP address and the port.
+     */
+	TSockAddr iSockAddr;
+	
+	/**
+     * Contains the resolved host information.
+     */
+	TNameEntry iResolvedHostInfo;
+
+    /**
+     * Contains the port of the URI.
+     */	
+	TInt iPort;
+	
+	/**
+	 * Socket to be opened.
+	 */
+	RSocket& iSocket;
+
+    /**
+     * The owner in the whole-part relation.
+     */	
+	CIRStationConnection& iOwner;
+    };
+
+#endif // IRSOCKETOPENER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irsockettimeouttimer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2006-2007 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:  A Timer.
+*
+*/
+
+
+#ifndef IRSOCKETTIMEOUTTIMER_H
+#define IRSOCKETTIMEOUTTIMER_H
+
+#include <e32base.h>
+
+/**
+ * A class for notifying of a timeout event.
+ */
+class MIRSocketTimeoutNotifier
+	{
+public:
+	/*
+	 * Called when the timer raises an event.
+	 */
+	virtual void TimerExpired() = 0;
+	};
+
+/**
+ * A class that raises timeout events.
+ */
+
+NONSHARABLE_CLASS ( CIRSocketTimeOutTimer ) : public CTimer
+	{
+public:
+	/**
+	 * Creates an object of CIRSocketTimeOutTimer 
+	 * @param aPriority Priority of the active object.
+	 * @param aNotify Timer observer.
+	 * @return Pointer to CIRSocketTimeOutTimer object
+	 */
+	static CIRSocketTimeOutTimer* NewL( const TInt aPriority,
+	MIRSocketTimeoutNotifier& aNotify );
+
+	/**
+	 * Default C++ Destructor
+	 */
+	virtual ~CIRSocketTimeOutTimer();
+
+protected: 
+
+	/**
+	 * Derived from CTimer
+	 */
+
+	/**
+	 * Active object post-request handling.
+	 */
+	void RunL();
+
+	/**
+	 * Handles a leave occurring in the request completion event handler RunL()
+	 */
+	TInt RunError( TInt aError );
+
+private:
+
+	/**
+	 * Creates an object of CIRSocketTimeOutTimer
+	 * @param aPriority Priority of the active object.
+	 * @param aNotify A handle to the class to be notified of a timeout event.
+	 */
+	static CIRSocketTimeOutTimer* NewLC( const TInt aPriority,
+	MIRSocketTimeoutNotifier& aNotify );
+
+	/**
+	 * @param aPriority Priority of the active object.
+	 * @param aNotify A handle to the class to be notified of a timeout event.
+	 */
+	CIRSocketTimeOutTimer( const TInt aPriority,
+		MIRSocketTimeoutNotifier& aNotify);
+
+	/**
+	 * Standard Symbian second-phase construction.
+	 */
+	void ConstructL();
+
+private:
+
+	/**
+	 * Handle to the class to be notified of a timeout event.
+	 */
+	MIRSocketTimeoutNotifier& iNotify;
+	
+};
+
+#endif // IRSOCKETTIMEOUTTIMER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irstationconnection.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2006-2007 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:  Represents a connection to a radio station.
+*
+*/
+
+
+#ifndef MIRSTATIONCONNECTIONOBSERVER_H
+#define MIRSTATIONCONNECTIONOBSERVER_H
+
+#include <e32base.h>
+#include <es_sock.h>
+
+class CIRStationConnection;
+class MIRStationDataObserver;
+class CIRSocketOpener;
+class CIRIcyFlowInitiator;
+class CIRIcyFlowReader;
+class TChannelInfo;
+
+/**
+ * Observer interface for the CIRStationConnection.
+ */
+class MIRStationConnectionObserver
+	{
+public:	
+	/**
+	 * Called to indicate sucessful connection
+	 *
+	 * @param aConnection Pointer to successful connection.
+	 */	
+	virtual void ConnectionSuccessful( CIRStationConnection* aConnection ) = 0;
+	
+	/*
+	 * Called to indicate failure in connection.
+	 *
+	 * @param aConnection The connection that failed.
+	 * @param aErrorCode Error code indicating the type of the error
+	 */
+	virtual void ConnectionError( CIRStationConnection* aConnection, TInt aErrorCode ) = 0;
+    };
+
+
+const TInt KMAXMETABUFLENGTH = 256;
+/**
+ * Holds the meta data information 
+ */
+class TChannelInfo
+	{
+public:
+	TBuf8<KMAXMETABUFLENGTH>	iStationName;
+	TBuf8<KMAXMETABUFLENGTH>	iGenre;
+	TBuf8<KMAXMETABUFLENGTH>	iBitRate;
+	TBuf8<KMAXMETABUFLENGTH>	iContentType;
+	TBuf8<KMAXMETABUFLENGTH> 	iSongTitle;
+	TBuf8<KMAXMETABUFLENGTH> 	iArtistName;
+	TInt iMetaInterval;
+	TInt iMetaDataTracker;
+	TInt iReadSize;
+	TInt iAudioDataOffset;
+	};
+
+/**
+ * Instance of the class encompasses the connection establishment, error handling and
+ * audio/meta data reading from the stream. 
+ *
+ *
+ */
+NONSHARABLE_CLASS ( CIRStationConnection ): public CBase
+	{
+public:
+    /**
+     * The type of the connection
+     */
+    enum TIRStationConnectionType
+		{
+		EIRUndefined,
+		EIRPermanent,
+		EIRCandidate,
+		EIRDying
+		};
+	
+public:
+
+
+	/** 
+	 * Creates an instance of CIRStationConnection
+	 *
+	 * @param aConnectionObserver   Observer for connection related events.
+	 * @param aDataObserver         Observer for the audio/meta data.
+	 * @return Instance of CIRStationConnection
+	 */	
+    static CIRStationConnection* NewL( MIRStationConnectionObserver& aConnectionObserver,
+    			 MIRStationDataObserver& aDataObserver );
+
+	/** 
+	 *  Initiates a connection to internet radio station specified by the URI.
+     *
+	 *  @param aUri URI of the radio station server.
+	 */
+    void ConnectL( const TDesC& aUri );
+
+    /**
+     * Closes the connection. First cancels any pending asynchronous request and 
+     * then closes the socket.
+     */
+    void Close();
+
+    /**
+     * Sets the connection type.
+     *
+     * @param aType New connection type 
+     */
+    void SetConnectionType( TIRStationConnectionType aType );
+    
+    /**
+     * Gets the connection type.
+     *
+     * @return The type of the connection.
+     */    
+    TIRStationConnectionType ConnectionType() const;
+    
+    /**
+     * Gets the URI associated with the connection.
+     *
+     * @return URI associated with the connection.
+     */
+    const TDesC& Uri() const;
+
+    /**
+     * Gets the content type of the connected stream.
+     *
+     * @return The content type of the connected stream.
+     */
+    const TDesC8& ContentType() const;
+    
+	/** 
+	 *  Fills the buffer with the data from the stream.
+	 *
+	 *  @param aInputBuffer Buffer into which the data is copied.
+	 */	
+    void FillBuffer( TDes8& aInputBuffer );
+
+	/** 
+	 *  Default C++ Destructor
+	 */
+	~CIRStationConnection();
+	
+public:
+    // Methods for composite parts to call
+    /**
+     * Called by a composite part when the transport layer session is ready.
+     */
+	void ConnectionReady();
+	
+	/**
+	 * Called by a composite part when the application layer session is ready.
+	 */
+	void FlowReady();		
+	
+	/*
+     * Called by a composite part to report an error in connection.
+     *
+	 * @param aErrorCode type of error
+	 */
+	void ConnectionError( TInt aErrorCode );
+
+private:
+
+	/** 
+	 *  Default Constructor
+	 * @param aConnectionObserver   Observer for connection related events.
+	 * @param aDataObserver         Observer for the audio/meta data.
+	 * @return Instance of CIRStationConnection
+     */
+	CIRStationConnection( MIRStationConnectionObserver& aStationConnectionObserver,
+					 MIRStationDataObserver& aDataObserver );
+
+	/** 
+	 *  2nd Phase construction.
+	 */
+	void ConstructL();
+
+
+private:
+
+	/**
+	 * Starts the TCP connection. 
+	 * Owned.
+	 */
+	CIRSocketOpener* iSocketOpener;
+
+    /**
+     * Starts the ICY session. 
+     * Owned.
+     */
+    CIRIcyFlowInitiator* iIcyFlowInitiator;
+
+	/**
+	 * Reads the ICY session. 
+	 * Owned.
+	 */
+	CIRIcyFlowReader* iIcyFlowReader;
+
+    /** 
+     * The socket. 
+     * Owned.
+     */
+	RSocket iSocket;
+	
+    /**
+     * URI of the radio channel. 
+     * Owned.
+     */
+    RBuf iUri;
+
+    /**
+     * The connection event observer 
+     */
+	MIRStationConnectionObserver& iConnectionObserver;
+	
+	/**
+	 * Audio/metadata observer.
+	 */
+	MIRStationDataObserver& iDataObserver;
+
+    /**
+     * Information related to connected ICY channel.
+     */
+    TChannelInfo iChannelInfo;
+
+    /**
+     * Type of the connection.
+     */    
+    TIRStationConnectionType iConnectionType;
+	};
+
+#endif // MIRSTATIONCONNECTIONOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irstationdataobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2006-2007 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:  Implementing class will receive meta/audiodata events.
+*
+*/
+
+
+#ifndef IRSTATIONDATAOBSERVER_H
+#define IRSTATIONDATAOBSERVER_H
+
+class CIRMetaData;
+
+/**
+ * Implementation of this interface will receive the Metadata (and someday audio data)
+ * and audio data related events.
+ */
+class MIRStationDataObserver
+	{
+public: 
+    /**
+	 * TIRAudioEvent.
+	 */ 
+	enum TIRAudioEvent
+		{
+		EBufferFilled,
+		EOpenComplete,
+        EBufferPercentage		
+		};    
+		
+public:
+    /**
+     * New metadata is received.
+     *
+     * @param aMetaData Received metadata.
+     */
+    virtual void MetadataReceived( const CIRMetaData& aMetaData ) = 0;
+
+	/**
+	 * Event related to that data has been received on the socket and read into a buffer.
+	 * This should be replaced by simple method providing the received audio data.	 
+	 */
+    virtual void AudioDataEvent( const TInt aResponseCode, TInt aValue ) = 0;
+	};
+
+#endif // IRSTATIONDATAOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irstreamsource.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2006-2007 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:  Manages the entire connection.
+*
+*/
+
+
+#ifndef IRSTREAMSOURCE_H
+#define IRSTREAMSOURCE_H
+
+#include <e32base.h>
+
+#include "irctrlcommand.h"
+#include "irsockettimeouttimer.h"
+#include "irstationconnection.h"
+#include "irstationdataobserver.h"
+
+
+// Constants
+const TInt KBufferingTimeOut = 60000000;
+
+class CIRMetadataHandler;
+class CIRNetworkController;
+class MIRStreamSourceObserver;
+
+/**
+ * This class acts as a manager class for the streamsource component
+ *
+ * @code
+ *
+ * // Create a stream source object which is used for streaming data
+ * // iObserver is the reference of the observer object which is called
+ * // for issuing call backs.
+ * CIRStreamSource iStreamSource = CIRStreamSource::NewL(iObserver);
+ *
+ * // Called to connect to the channel server iUrl specifying the 
+ * // url to be connect to.
+ * iStreamSource->ConnectToServerL(iUrl);
+ *
+ * // Called by the media engine to indicate that its buffers are to
+ * // to be filled and iInputBuffer is the reference of the buffer to
+ * // which data is to be copied
+ * iStreamSource->FilltheBuffer(iInputbuffer);
+ *
+ * // Called to cancel a channel server connection request
+ * iStreamSource->CancelRequest();
+ *
+ * // Called by the mediaclient to know the content-type
+ * // of the audio stream
+ * iStreamSource->ContentType();
+ *
+ * @endcode
+ */ 
+
+NONSHARABLE_CLASS ( CIRStreamSource ): public CBase, public MIRStreamFill,
+	public MIRSocketTimeoutNotifier, public MIRStationConnectionObserver,
+	 public MIRStationDataObserver
+	{
+public:
+
+	/** 
+	 *  Initiates a connection to the url.
+	 *
+	 *  @param aUrl Url of the channel server to connect to.
+	 */
+	IMPORT_C void ConnectToServerL(const TDesC& aUrl);
+
+	/** 
+	 *  Reinitiates a connection to the url by
+     *
+	 *  @param aUrl Url of the channel server to connect to.
+	 */
+	IMPORT_C void ReconnectL(const TDesC& aUrl );
+
+	/** 
+	 *  Creates an Instance of CIRStreamSource
+	 *  @param aObserver Reference to the StreamSource Observer
+	 *  @return CIRStreamSource* pointer to the created CIRStreamSource object
+	 */	
+	IMPORT_C static CIRStreamSource* NewL(MIRStreamSourceObserver& aObserver);
+
+	/** 
+	 *  Fills the buffer with the data from the stream
+	 *  @param aInputBuffer Reference to the Input Buffer
+	 */	
+	IMPORT_C void FilltheBuffer(TDes8& aInputBuffer);
+
+	/** 
+	 *  Cancels the connection request
+	 */	
+	IMPORT_C void CancelRequest();
+
+	/** 
+	 *  Returns the content type header information of the channel
+	 *  @return const TDesC8& content type header information of the channel
+	 */	
+	IMPORT_C const TDesC8& ContentTypeL();
+
+	/** 
+	 *  Default C++ Destructor
+	 */
+	virtual ~CIRStreamSource();
+
+private:
+
+	/** 
+	 *  Creates a connection object and initiates the connection
+	 *  to channel server
+	 */	
+	void DoConnectL(const TDesC& aUrl);
+
+	/** 
+	 *  Default Constructor
+	 *  @param aObserver Reference to StreamSource observer
+	 */
+	CIRStreamSource(MIRStreamSourceObserver& aObserver);
+
+	/** 
+	 *  2nd Phase construction.
+	 */
+	void ConstructL();
+
+//from base class MIRStationConnectionObserver
+
+    /**
+     * From base class MIRStationConnectionObserver.
+     *
+     * @see MIRStationConnectionObserver::ConnectionSuccessful()
+     */
+	void ConnectionSuccessful( CIRStationConnection* aConnection );
+
+    /**
+     * From base class MIRStationConnectionObserver.
+     *
+     * @see MIRStationConnectionObserver::ConnectionError()
+     */
+	void ConnectionError( CIRStationConnection* aConnection, TInt aErrorCode );
+
+//	from base class MIRSocketTimeoutNotifier
+     
+    /**
+     * From base class MIRSocketTimeoutNotifier.
+     *
+     * @see MIRSocketTimeoutNotifier::TimerExpired()
+     */
+	void TimerExpired();	
+
+// from base class MIRStationDataObserver
+
+    /**
+     * From base class MIRStationDataObserver.
+     *
+     * @see MIRStationDataObserver::MetadataReceived()
+     */
+    void MetadataReceived( const CIRMetaData& aMetaData );
+
+    /**
+     * From base class MIRStationDataObserver.
+     *
+     * @see MIRStationDataObserver::AudioDataEvent()
+     */
+    void AudioDataEvent( const TInt aResponseCode,	TInt aValue );
+
+    /**
+     * Schedules an asynchronous cleanup for given connection.
+     *
+     * @param aConnection The connection to be deleted.
+     */
+    void AsyncCleanupConnection( CIRStationConnection* aConnection );
+
+    /**
+     * Callback method that performs the actual deletion of connections.
+     *
+     * @param aSelfPtr Pointer argument given when the callback/timer is created.
+     * @return KErrNone Specified in the function pointer declaration.
+     */	
+    static TInt StaticConnectionCleanupCallback( TAny* aSelfPtr );	
+
+private:
+
+	/**
+	 * Handle to the Network controller used to get the reference
+	 * of the RSocketServ and RConnection. 
+	 * Not owned.
+	 */
+    CIRNetworkController* iNetworkControllerHandle;
+
+	/**
+	 * Timer for handling timeouts. 
+	 * Owned
+	 */
+    CIRSocketTimeOutTimer* iSocketTimer;
+
+	/**
+	 * Pointer to the connection to current channel server. 
+	 * Not owned.
+	 */
+    CIRStationConnection* iCurrentConnection;
+
+	/**
+	 * Pointer to the connection to previous channel server. 
+	 * Not owned.
+	 */
+    CIRStationConnection* iNewConnection;
+
+	/**
+	 * Array of pointers to connections. 
+	 * Owned.
+	 */
+    RPointerArray<CIRStationConnection> iConnections;
+    
+    /**
+     * Timer for delayed cleanup of connections. 
+     * Owned.
+     */	 
+    CPeriodic* iConnectionCleanupTimer;
+
+	/**
+	 * Reference of the Stream source observer
+	 */
+    MIRStreamSourceObserver& iStreamSourceObserver;
+	
+	/**
+	 * Is set when reconnecting to a channel and reset 
+	 * when connecting for the first time
+	 */
+    TBool iReConnecting;
+
+	};
+
+#endif //IRSTREAMSOURCE_H
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irstreamsourceerrors.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSTREAMSOURCEERRORS_H
+#define IRSTREAMSOURCEERRORS_H
+
+#include <e32def.h>
+
+/** 
+ * Base error code for Stream source component
+ */
+ 
+const TInt KIRStreamSourceErrorBase =  { 0xA1234B };
+
+/** 
+ * Error to indicate time out has occurred
+ */
+
+const TInt KIRStreamSourceTimeOut =  { KIRStreamSourceErrorBase	+ 0x00000000 };
+
+/** 
+ * Error code for DNS lookup error
+ */
+
+const TInt KIRStreamSourceLookupError =  { KIRStreamSourceErrorBase + 0x00000001 };
+
+/** 
+ * Error code for connecting to channel server
+ */
+
+const TInt KIRStreamSourceConnectionError =  { KIRStreamSourceErrorBase	+ 0x00000002 };
+
+/** 
+ * Error code for socket write error
+ */
+
+const TInt KIRStreamSourceWriteError =  { KIRStreamSourceErrorBase + 0x00000003 };
+
+/** 
+ * Error code for socket read error 
+ */
+const TInt KIRStreamSourceReadError =  { KIRStreamSourceErrorBase + 0x00000004 };
+
+/** 
+ * Error code for no response from channel server
+ */
+
+const TInt KIRStreamSourceNoResponse =  { KIRStreamSourceErrorBase + 0x00000005 };
+
+/** 
+ * Error code for invalid url 
+ */
+const TInt KIRStreamSourceInvalidUrl =  { KIRStreamSourceErrorBase + 0x00000006 };
+	
+/**
+ * Error code for disconnected connection
+ */	
+const TInt KIRStreamSourceDisconnected = { KIRStreamSourceErrorBase + 0x00000007 };
+
+/**
+ * Error code for application layer protocol errors. 
+ */
+const TInt KIRStreamSourceApplicationProtocolError =  { KIRStreamSourceErrorBase + 0x00000008 };
+
+#endif // IRSTREAMSOURCEERRORS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irstreamsourceliterals.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSTREAMSOURCELITERALS_H
+#define IRSTREAMSOURCELITERALS_H
+
+#include <e32def.h>
+
+const TInt KByteSpecifier = 1024;
+
+
+
+_LIT8( KIcyRequest, "GET %S HTTP/1.0\r\nHost: %S\r\nUser-Agent: %S\r\nAccept: */*\r\nIcy-MetaData:1\r\nConnection: close\r\n\r\n" );
+
+
+// Constants for specifying to the server to send meta info or not
+// Icy protocol specific http headers
+
+_LIT(KTcpProtocol,"tcp");
+_LIT8(KIcyName,"icy-name:");
+_LIT8(KIcyGenre,"icy-genre:");
+_LIT8(KIcyBitrate, "icy-br:");
+_LIT8(KIcyMetaint,"icy-metaint:");
+// RFC 2616 specifies this format
+_LIT8(KContentType,"Content-Type:");
+// This format is obtained from the channel server
+_LIT8(KContentTypeInvalid,"content-type:");
+_LIT8(KCarReturn,"\xD\xA");
+_LIT8(KHeaderEnd,"\xD\xA\xD\xA");
+
+// Supported content type is only of mime type audio
+_LIT8(KValidContentType,"audio/*");
+
+// Response validation
+_LIT8(KOkResponse,"200 OK");
+
+#endif //IRSTREAMSOURCELITERALS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourceinc/irstreamsourceobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRSTREAMSOURCEOBSERVER_H
+#define IRSTREAMSOURCEOBSERVER_H
+
+#include <e32def.h>
+
+class CIRMetaData;
+
+/**
+ * This MClass is to be implemented by the observer of streamsource
+ */
+
+class MIRStreamSourceObserver
+	{
+public:
+
+	/** 
+	 *  MIRStreamSourceObserver::OpenComplete()
+	 *  Called when connected to the channel server  
+	 *  To implement the fill of buffer
+	 */
+	virtual void OpenComplete() = 0; 
+
+	/** 
+	 *  MIRStreamSourceObserver::ErrorConnecting()
+	 *  Called when there is an error when connecting to the channel server  
+	 *  @Param aErrorCode Indicates the type of error as described in
+	 * 		   irstreamsourceerrors.h
+	 */
+	virtual void ErrorConnecting(TInt aErrorCode) = 0;
+
+	/** 
+	 *  MIRStreamSourceObserver::PlayNow()
+	 *  Called to indicate to the player to start playing
+	 */
+	virtual void PlayNow() = 0;
+
+	/** 
+	 *  MIRStreamSourceObserver::Play()
+	 *  Triggers the play after reconnecting to the channel
+	 */
+	virtual void Play() = 0;
+	
+	/** 
+	 *  MIRStreamSourceObserver::StopBuffering()
+	 *  Called to indicate to the player to stop buffering
+	 */
+	virtual void StopBuffering() = 0;
+
+	/** 
+	 *  MIRStreamSourceObserver::ConnectionEstablished(TInt aFeedValue)
+	 *  Called to indicate that the connection to channel server is sucessful
+	 */
+	virtual void ConnectionEstablished() = 0 ;
+
+	/** 
+	 *  MIRStreamSourceObserver::UpdateProgress()
+	 *  Called to provide teh buffer values
+	 *  @param aFeedValue used to pump the buffering value
+	 */
+	virtual void UpdateProgress(TInt aFeedValue) = 0;
+
+    /**
+     * Invoked when meta data is received.
+     *
+     * @param   aMetaData   The meta data that was received.
+     */
+    virtual void HandleMetaDataReceivedL( const CIRMetaData& aMetaData ) = 0;
+
+	// Added for ASF Player
+	
+	/** 
+	 *  MIRStreamSourceObserver::Asf_ErrorConnecting()
+	 *  Called when there is an error when connecting to the channel server  
+	 *  @Param aErrorCode Indicates the type of error as described in
+	 * 		   irstreamsourceerrors.h
+	 */
+	virtual void Asf_ErrorConnecting(TInt aErrorCode) = 0;
+
+	/** 
+	 *  MIRStreamSourceObserver::Asf_ConnectionEstablished(TInt aFeedValue)
+	 *  Called to indicate that the connection to channel server is sucessful
+	 */
+	virtual void Asf_ConnectionEstablished() = 0 ;
+
+	/** 
+	 *  MIRStreamSourceObserver::Asf_UpdateProgress()
+	 *  Called to provide teh buffer values
+	 *  @param aFeedValue used to pump the buffering value
+	 */
+	virtual void Asf_UpdateProgress(TInt aFeedValue) = 0;
+
+    /**
+     * MIRStreamSourceObserver::Asf_HandleMetaDataReceivedL
+     * Invoked when meta data is received.
+     *
+     * @param   aMetaData   The meta data that was received.
+     */
+    virtual void Asf_HandleMetaDataReceivedL( const CIRMetaData& aMetaData ) = 0;
+	};
+
+#endif // IRSTREAMSOURCEOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/irasfplayer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,431 @@
+/*
+* Copyright (c) 2006-2007 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 of streaming and playback on ASF channel url
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 1, Fri Sep 19 13:00:00 2008 by e0328782 Rohit
+*  Ref:
+*  Created
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <e32property.h>
+#include "irpubsubkeys.h"
+
+#include "irasfplayer.h"				// this class
+#include "irctrlcommand.h"				// MIRCtrlCmdObserver
+#include "irstreamsourceobserver.h"		// MIRStreamSourceObserver
+#include "irdebug.h"
+#include "irmetadata.h"
+
+//Constants
+_LIT8( KMimeTypeASF, "audio/x-ms-wma" );
+const TInt KFour = 4;
+_LIT( KIRSongTitle, "title" );
+_LIT( KIRSongArtist, "artist" );
+_LIT( KTrailingAsf, ".asf" );
+_LIT( KTrailingWma, ".wma" );
+_LIT( KTrailingWmv, ".wmv" );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::NewL
+// function returns an instance of CIRAsfPlayer
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRAsfPlayer* CIRAsfPlayer::NewL(MIRStreamSourceObserver& aStreamObserver,
+										  MIRCtrlCmdObserver& aCtrlCmdObserver)
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::NewL" );
+	CIRAsfPlayer* self = CIRAsfPlayer::NewLC(aStreamObserver, aCtrlCmdObserver );
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRAsfPlayer::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::NewLC
+// function creates an instance of CIRAsfPlayer
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRAsfPlayer* CIRAsfPlayer::NewLC(MIRStreamSourceObserver& aStreamObserver,
+								  MIRCtrlCmdObserver& aCtrlCmdObserver)
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::NewLC" );
+	CIRAsfPlayer* self = new (ELeave) CIRAsfPlayer(aStreamObserver, aCtrlCmdObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRAsfPlayer::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::~CIRAsfPlayer
+// Default Destructor
+// ---------------------------------------------------------------------------
+//
+CIRAsfPlayer::~CIRAsfPlayer()
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::~CIRAsfPlayer" );
+    if( iMdaAudioPlayer )
+	    {
+	    delete iMdaAudioPlayer;
+	    iMdaAudioPlayer = NULL;
+	    }
+
+	if( iMetaData )
+		{
+		delete 	iMetaData;
+		iMetaData = NULL;
+		}
+	iStationUri.Close();
+
+	IRLOG_DEBUG( "CIRAsfPlayer::~CIRAsfPlayer - Exiting." );
+	}
+
+//Function for Play control
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::PlayL
+// function to intiate the player and play the stream
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAsfPlayer::PlayL(const TDesC& aUri)
+	{
+	IRRDEBUG2( "CIRAsfPlayer::PlayL - Entering aUri=%S", &aUri );
+
+    iStationUri.Close();
+    iStationUri.CreateL( aUri );
+
+	User::LeaveIfNull( iMdaAudioPlayer );
+    if( iMdaAudioPlayer )
+	    {
+	    iMdaAudioPlayer->Close();
+    	iMdaAudioPlayer->OpenUrlL( iStationUri, KUseDefaultIap, KMimeTypeASF );
+	    }
+
+	IRLOG_DEBUG( "CIRAsfPlayer::PlayL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::Play
+// function to resume playing (AsfPlayer should already initiated using Play(url))
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAsfPlayer::Play()
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::Play" );
+
+	SetVolume( iCtrlCmdObserver.FetchVolume() );
+    if( iMdaAudioPlayer )
+	    {
+		iMdaAudioPlayer->Play();
+	    }
+
+	IRLOG_DEBUG( "CIRAsfPlayer::Play - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::Stop
+// function to which stop the player
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAsfPlayer::Stop()
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::Stop" );
+
+    if( iMdaAudioPlayer )
+	    {
+		iMdaAudioPlayer->Stop();
+	    }
+
+	IRLOG_DEBUG( "CIRAsfPlayer::Stop - Exiting." );
+	}
+
+										//Functions for Volume Control
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::SetVolume
+// function to set the volume
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAsfPlayer::SetVolume(TInt aVolume )
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::SetVolume" );
+
+    if( iMdaAudioPlayer )
+	    {
+		iMdaAudioPlayer->SetVolume( aVolume );
+	    }
+
+	IRLOG_DEBUG( "CIRAsfPlayer::SetVolume - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::Volume
+// function to returns the volume, integer level of volume is the Output
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRAsfPlayer::Volume() const
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::Volume" );
+
+	TInt volume = 0;
+    if( iMdaAudioPlayer )
+	    {
+		iMdaAudioPlayer->GetVolume( volume );
+	    }
+
+	return volume;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::MaxVolume
+// function to returns the maximum volume
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CIRAsfPlayer::MaxVolume() const
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::MaxVolume" );
+
+	TInt volume = 0;
+    if( iMdaAudioPlayer )
+	    {
+		volume = iMdaAudioPlayer->MaxVolume();
+	    }
+
+	return volume;
+	}
+
+// Helper functions
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::DetectAsfChannel
+// Function is used to detect ASF channel by its url ending in .asf/.wma/.wmv
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRAsfPlayer::DetectAsfChannel(const TDesC& aUri)
+	{
+	IRLOG_DEBUG("CIRAsfPlayer::DetectAsfChannel - Entering");
+	TPtrC ptr( aUri );
+	TPtrC UriTypePtr( ptr.Right(KFour) );
+
+	TBool bAsf = UriTypePtr == KTrailingAsf || UriTypePtr == KTrailingWma
+							   || UriTypePtr == KTrailingWmv;
+
+	IRRDEBUG2("CIRAsfPlayer::DetectAsfChannel - ASF Channel detected = %d", (TInt)bAsf);
+	IRLOG_DEBUG("CIRAsfPlayer::DetectAsfChannel - Exiting");
+	return bAsf;
+	}
+
+// Two-phase construction
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::CIRAsfPlayer
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRAsfPlayer::CIRAsfPlayer(MIRStreamSourceObserver& aStreamObserver,
+						   MIRCtrlCmdObserver& aCtrlCmdObserver):
+	iMdaAudioPlayer(NULL), iMetaData(NULL),
+	iCtrlCmdObserver( aCtrlCmdObserver ), iStreamObserver(aStreamObserver),
+	iState( ENotReady )
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::CIRAsfPlayer" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::ConstructL
+// Two phase constructor is used to intialize data members
+// Function can leave if CMdaAudioOutputStream::NewL leaves
+// ---------------------------------------------------------------------------
+//
+void CIRAsfPlayer::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::ConstructL" );
+
+	iMdaAudioPlayer = CMdaAudioPlayerUtility::NewL( *this );
+	User::LeaveIfNull( iMdaAudioPlayer );
+
+	iMdaAudioPlayer->RegisterForAudioLoadingNotification( *this );
+
+	iMetaData = CIRMetaData::NewL();
+	User::LeaveIfNull( iMdaAudioPlayer );
+
+	IRLOG_DEBUG( "CIRAsfPlayer::ConstructL - Exiting." );
+	}
+
+//Call back functions
+
+// ---------------------------------------------------------------------------
+// MMdaAudioPlayerCallback::MapcInitComplete
+// Invoked with OpenUrl() success/fail result
+// ---------------------------------------------------------------------------
+//
+void CIRAsfPlayer::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	IRRDEBUG2( "CIRAsfPlayer::MapcInitComplete - Entering. aError = %d", aError );
+    if( KErrNone == aError )
+	    {
+	    iState = EReadyToPlay;
+	    Play();
+	    iStreamObserver.Asf_ConnectionEstablished();
+    	}
+	else
+		{
+		iState = ENotReady;
+		iStreamObserver.Asf_ErrorConnecting(aError);
+		}
+	IRLOG_DEBUG( "CIRAsfPlayer::MapcInitComplete - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// MMdaAudioPlayerCallback::MapcPlayComplete
+// Invoked after playback of an audio sample completes success/fail
+// ---------------------------------------------------------------------------
+//
+void CIRAsfPlayer::MapcPlayComplete(TInt aError)
+	{
+	IRRDEBUG2( "CIRAsfPlayer::MapcPlayComplete - Entering. aError = %d", aError );
+	if( KErrNone != aError )
+		{
+		iState = ENotReady;
+		iStreamObserver.Asf_ErrorConnecting(aError);
+		}
+	else
+		{
+		// won't hit this as playing from stream
+		}
+	IRLOG_DEBUG( "CIRAsfPlayer::MapcPlayComplete - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// MAudioLoadingObserver::MaloLoadingStarted
+//
+// ---------------------------------------------------------------------------
+//
+void CIRAsfPlayer::MaloLoadingStarted()
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingStarted - Entering" );
+	TInt percentComplete = 0;
+
+	if( iMdaAudioPlayer )
+		{
+		iState = EReadyToPlay;
+
+		TRAPD( err, iMdaAudioPlayer->GetAudioLoadingProgressL( percentComplete ));
+		if(err == KErrNone)
+			iStreamObserver.Asf_UpdateProgress( percentComplete );
+		}
+	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingStarted - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// MAudioLoadingObserver::MaloLoadingComplete
+//
+// ---------------------------------------------------------------------------
+//
+void CIRAsfPlayer::MaloLoadingComplete()
+	{
+	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingComplete - Entering" );
+	TInt percentComplete = 0;
+
+	if( iMdaAudioPlayer )
+		{
+		iState = EPlaying;
+
+		TRAPD( err, iMdaAudioPlayer->GetAudioLoadingProgressL( percentComplete ));
+		if(err == KErrNone)
+			iStreamObserver.Asf_UpdateProgress( percentComplete );
+
+		TRAP( err, ReadMetadataL());
+		if(err != KErrNone)
+			{
+			IRLOG_WARNING( "CIRAsfPlayer::MaloLoadingComplete - Failed to read/publish metadata" );
+			}
+
+		// publish birtate
+		TUint bitrate = 0;
+		err = iMdaAudioPlayer->GetBitRate( bitrate );
+		RProperty::Set( KUidActiveInternetRadioApp, KIRPSBitrate, bitrate );
+		}
+	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingComplete - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAsfPlayer::ReadMetadataL
+// Reads the meta data from the CMdaAudioPlayerUtility
+// ---------------------------------------------------------------------------
+//
+void CIRAsfPlayer::ReadMetadataL()
+	{
+    IRLOG_DEBUG( "CIRAsfPlayer::ReadMetadataL - Entering" );
+
+	if(iMetaData)
+		{
+	    // Erases old meta data information.
+	    iMetaData->SetArtistL( KNullDesC );
+	    iMetaData->SetSongL( KNullDesC );
+	    iMetaData->SetStreamUrlL( KNullDesC );
+
+		// Stream Url
+		iMetaData->SetStreamUrlL( iStationUri );
+
+	    TInt nMetadata = 0;
+	    TInt err = iMdaAudioPlayer->GetNumberOfMetaDataEntries( nMetadata );
+	    for( TInt ctr=0; ctr < nMetadata; ++ctr )
+	        {
+	        CMMFMetaDataEntry* pMetadataEntry = iMdaAudioPlayer->GetMetaDataEntryL( ctr );
+
+	        // Song Title
+	        if( pMetadataEntry->Name() == KIRSongTitle )
+	        	{
+	        	iMetaData->SetSongL( pMetadataEntry->Value() );
+	        	}
+	        // Song Artist
+	        else if( pMetadataEntry->Name() == KIRSongArtist )
+	        	{
+	        	iMetaData->SetArtistL( pMetadataEntry->Value() );
+	        	}
+	        }
+
+		if( iMetaData->Song().Length() == 0 )
+			{
+			IRLOG_WARNING( "CIRAsfPlayer::ExtractMetaDataL - song \"title\" not found in metadata" );
+			}
+		if( iMetaData->Artist().Length() == 0 )
+			{
+			IRLOG_WARNING( "CIRAsfPlayer::ExtractMetaDataL - song \"artist\" not found in metadata" );
+			}
+
+		// Notify observer
+		iStreamObserver.Asf_HandleMetaDataReceivedL( *iMetaData );
+
+	    IRLOG_DEBUG4( "CIRAsfPlayer::ReadMetadataL - Exiting (artist=%S, song=%S, streamUrl=%S)",
+	    		     &iMetaData->Artist(), &iMetaData->Song(), &iMetaData->StreamUrl() );
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/iricyflowinitiator.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2006-2007 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:  ICY flow initiator implementation
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Tue Mar 11 20:00:00 2008 by Rohit
+*  Ref:
+*  Merged IRv1.0 Engine code changes
+*
+*  Version: 2, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi
+*  Ref:
+*  Setting RawDataTransferredL() into DataTransferTracker for Byte Counter Impl
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <e32property.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <uriutils.h>
+
+#include "iricyflowinitiator.h"
+#include "irdebug.h"
+#include "irnetworkcontroller.h"
+#include "irpubsubkeys.h"
+#include "irstationconnection.h"
+#include "irstreamsourceerrors.h"
+#include "irstreamsourceliterals.h"
+
+// Constants
+const TInt KIRFITimeOutValue = 10000000;
+const TInt KIRHeaderMaxSize = 256;
+_LIT8( KIRUriComponentSeparator, "/" );
+const TInt KFour = 4;
+const TInt KSixtyFour=64;
+const TInt KTwoZeroFourEight=2048;
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::NewL
+// ---------------------------------------------------------------------------
+//
+CIRIcyFlowInitiator* CIRIcyFlowInitiator::NewL( RSocket& aSocket, const TDesC& aUri,
+			 CIRStationConnection& aOwner, TChannelInfo& aChannelInfo )
+    {
+	CIRIcyFlowInitiator* self = new ( ELeave ) CIRIcyFlowInitiator( aSocket,
+							 aUri, aOwner, aChannelInfo );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::CIRIcyFlowInitiator
+// ---------------------------------------------------------------------------
+//
+CIRIcyFlowInitiator::CIRIcyFlowInitiator( RSocket& aSocket, const TDesC& aUri,
+			 CIRStationConnection& aOwner, TChannelInfo& aChannelInfo ) :
+    		CActive( CActive::EPriorityStandard ), iState( EIRIdle ),
+    		iSocket( aSocket ), iUri( aUri ), iOwner( aOwner ), iChannelInfo( aChannelInfo )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowInitiator::ConstructL()
+	{
+    IRLOG_DEBUG( "CIRIcyFlowInitiator::ConstructL." );
+	CActiveScheduler::Add( this );
+	iSocketTimer = CIRSocketTimeOutTimer::NewL(CActive::EPriorityHigh,*this);
+
+	iNetworkControllerHandle = CIRNetworkController::OpenL();
+	iUAProfString.CreateL( *iNetworkControllerHandle->GetUAProfString() );
+
+	iBuffer.CreateL( KIRHeaderMaxSize );
+    iReadBuffer.CreateL( 1 );
+    if ( !ExtractUriComponentsL() )
+        {
+        User::Leave( KErrCorrupt );
+        }
+    IRLOG_DEBUG( "CIRIcyFlowInitiator::ConstructL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::~CIRIcyFlowInitiator
+// ---------------------------------------------------------------------------
+//
+CIRIcyFlowInitiator::~CIRIcyFlowInitiator()
+	{
+	Cancel();
+	iHost.Close();
+	iPath.Close();
+
+	iBuffer.Close();
+	iReadBuffer.Close();
+	iUAProfString.Close();
+
+	delete iSocketTimer;
+	if(iNetworkControllerHandle)
+		{
+		iNetworkControllerHandle->Close();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::ExtractUriComponentsL
+// ---------------------------------------------------------------------------
+//
+TBool CIRIcyFlowInitiator::ExtractUriComponentsL()
+	{
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::ExtractUriComponentsL" );
+
+	TBool retMe = EFalse;
+
+	if( !UriUtils::HasInvalidChars( iUri ) )
+		{
+    	TUriParser uriParser;
+    	uriParser.Parse( iUri );
+
+        iHost.Close();
+    	iHost.CreateL( uriParser.Extract( EUriHost ).Size() );
+    	iHost.Copy( uriParser.Extract( EUriHost ) );
+    	iPath.Close();
+    	iPath.CreateL( uriParser.Extract( EUriPath ).Size() );
+    	iPath.Copy( uriParser.Extract( EUriPath ) );
+
+    	if ( iPath.Length() == 0 )
+    		{
+    		iPath.Close();
+    		iPath.CreateL( KIRUriComponentSeparator );
+    		}
+        retMe = ETrue;
+		}
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::ExtractUriComponentsL - Exiting." );
+	return retMe;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::RequestFlow
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowInitiator::RequestFlow()
+	{
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::RequestFlow" );
+	Cancel();
+
+	iBuffer.ReAlloc(iPath.Length() + iHost.Length() + iUAProfString.Length() 
+												+ KIcyRequest().Length());
+	iBuffer.Format( KIcyRequest, &iPath, &iHost, &iUAProfString );
+
+	// Cancel any pending timer requests
+	iSocketTimer->Cancel();
+	iSocketTimer->After( KIRFITimeOutValue );
+
+	iState = EIRSending;
+
+	IRDEBUGCODE(
+	    RBuf requestCopy;
+	    if ( requestCopy.Create( iBuffer.Length() ) == KErrNone  )
+	        {
+	        requestCopy.Copy( iBuffer );
+	        IRLOG_DEBUG2( "CIRIcyFlowInitiator::RequestFlow - request= %S", &requestCopy );
+	        requestCopy.Close();
+	        }
+    )
+
+	// HTTP GET METHOD sent to server
+	iSocket.Send( iBuffer, 0, iStatus );
+	SetActive();
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::RequestFlow - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::RunL
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowInitiator::RunL()
+	{
+	IRLOG_INFO3( "CIRIcyFlowInitiator::RunL - iStatus=%d, iState=%d", iStatus.Int(), iState );
+
+	if( iStatus == KErrNone )
+		{
+		switch( iState )
+			{
+			case EIRSending:
+				iSocketTimer->Cancel();
+				iSocketTimer->After( KIRFITimeOutValue );
+
+				// Byte Counter Impl
+                iNetworkControllerHandle->DataTransferTracker().RawDataTransferredL(
+                		iBuffer.Size(),0, MIRDataTransferTracker::EIRTransferCategoryAudio);
+
+                iBuffer.Zero();
+                iBuffer.ReAlloc( KIRHeaderMaxSize );
+                iState = EIRReceiving;
+                iSocket.Read( iReadBuffer, iStatus );
+                SetActive();
+				break;
+			case EIRReceiving:
+				iSocketTimer->Cancel();
+				if ( iBuffer.MaxLength() <= ( iBuffer.Length() + iReadBuffer.Length() ) )
+					{
+					iBuffer.ReAlloc( iBuffer.MaxLength() + KSixtyFour );
+					}
+				// Byte Counter Impl
+                iNetworkControllerHandle->DataTransferTracker().RawDataTransferredL( 0,
+                		 iBuffer.Size(), MIRDataTransferTracker::EIRTransferCategoryAudio);
+				iBuffer.Append(iReadBuffer);
+				iReadBuffer.Zero();
+				
+				// Check if we got the full header and if not, read more from the socket.
+				if ( iBuffer.Find( KHeaderEnd ) == KErrNotFound )
+					{
+					// if we have received 2kb's of headers, Then there is propably
+					// some sort error and its time to abort
+					if ( iBuffer.Length() >= KTwoZeroFourEight )
+						{
+						IRLOG_ERROR( "CIRIcyFlowInitiator::RunL - EIRReceiving. Got 2kb's of headers." ); 
+						// Cancel the timer if active
+						iSocketTimer->Cancel();
+						iOwner.ConnectionError( KIRStreamSourceReadError );
+						iState = EIRIdle;
+						break;
+						}
+					
+					iSocket.Read( iReadBuffer, iStatus );
+					SetActive();
+					iSocketTimer->After( KIRFITimeOutValue );
+					break;
+					}
+				ParseChannelInfoL();
+				if ( ValidateChannelServer() )
+					{
+					TInt bitRateInt(0);
+					TLex8 bitvariable( iChannelInfo.iBitRate );
+					bitvariable.Val( bitRateInt );
+					RProperty::Set( KUidActiveInternetRadioApp,
+						KIRPSBitrate, bitRateInt );
+					iOwner.FlowReady();
+				    iState = EIRFinished;
+					}
+				else
+					{
+				    IRLOG_ERROR( "CIRIcyFlowInitiator::RunL - Invalid server" );
+					iOwner.ConnectionError( KIRStreamSourceInvalidUrl );
+				    iState = EIRIdle;
+					}
+
+				break;
+			default:
+				__ASSERT_DEBUG( EFalse, User::Invariant() );
+                break;
+			}
+		}
+	else // An error has occurred
+		{
+		switch( iState )
+			{
+			case EIRSending:
+				IRLOG_ERROR( "CIRIcyFlowInitiator::RunL - EIRSending" );
+				// Cancel the timer if active
+				iSocketTimer->Cancel();
+				// Error in sending data to channel server
+				iOwner.ConnectionError( KIRStreamSourceWriteError );
+				break;
+			case EIRReceiving:
+				IRLOG_ERROR( "CIRIcyFlowInitiator::RunL - EIRReceiving" );
+				// Cancel the timer if active
+				iSocketTimer->Cancel();
+				//Error in response from channel server
+				if( iStatus.Int() == KErrEof )
+					{
+					iOwner.ConnectionError( KIRStreamSourceNoResponse );
+					}
+				else
+					{
+					iOwner.ConnectionError( KIRStreamSourceReadError );
+					}
+				break;
+			default:
+				IRLOG_FATAL2( "CIRIcyFlowInitiator::RunL - Error in unexpected state (%d)", iStatus.Int() );
+				__ASSERT_DEBUG( EFalse, User::Invariant() );
+				break;
+			}
+		}
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::RunL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CIRIcyFlowInitiator::RunError( TInt aError )
+    {
+    IRLOG_ERROR2( "CIRIcyFlowInitiator::RunError - aError=%d", aError );
+    iOwner.ConnectionError( aError );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowInitiator::DoCancel()
+    {
+	IRLOG_DEBUG2( "CIRIcyFlowInitiator::DoCancel - iState = %d.", iState );
+    iSocket.CancelAll();
+    iSocketTimer->Cancel();
+    iState = EIRIdle;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::TimerExpired
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowInitiator::TimerExpired()
+    {
+	IRLOG_ERROR( "CIRIcyFlowInitiator::TimerExpired." );
+    Cancel();
+    iOwner.ConnectionError( KIRStreamSourceTimeOut );
+    IRLOG_DEBUG( "CIRIcyFlowInitiator::TimerExpired - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::ValidateChannelServer
+// ---------------------------------------------------------------------------
+//
+TBool CIRIcyFlowInitiator::ValidateChannelServer()
+	{
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::ValidateChannelServer" );
+	TBool retMe = EFalse;
+
+	if ( iChannelInfo.iContentType.Match(KValidContentType) != KErrNotFound )
+		{
+		retMe = ETrue;
+		}
+	IRLOG_DEBUG2( "CIRIcyFlowInitiator::ValidateChannelServer - Exiting (%d).", retMe );
+	return retMe;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::ParseChannelInfoL
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowInitiator::ParseChannelInfoL()
+    {
+    IRLOG_DEBUG( "CIRIcyFlowInitiator::ParseChannelInfoL" );
+
+    TInt offsetPositionStart( 0 );
+    offsetPositionStart = iBuffer.Find( KHeaderEnd );
+    if ( offsetPositionStart == KErrNotFound )
+        {
+        IRLOG_ERROR( "CIRIcyFlowInitiator::ParseChannelInfoL - Header delimiter not found." );
+        User::Leave( KIRStreamSourceApplicationProtocolError );
+        }
+    offsetPositionStart += KFour;
+    TPtrC8 start = iBuffer.Mid( offsetPositionStart );
+    iChannelInfo.iAudioDataOffset = start.Length();
+    // Call ExtractMetaInfo function for each Meta Field
+    ExtractMetaInfoL( KIcyName, iChannelInfo.iStationName );
+    ExtractMetaInfoL( KIcyGenre, iChannelInfo.iGenre );
+    ExtractMetaInfoL( KIcyBitrate, iChannelInfo.iBitRate );
+    // Extract the Content-Type header
+	ExtractMetaInfoL( KContentType, iChannelInfo.iContentType );
+	// Extract the content-type header ( invalid header name handling )
+	ExtractMetaInfoL( KContentTypeInvalid, iChannelInfo.iContentType );
+    RBuf8 metaIntervalBuf;
+    metaIntervalBuf.CreateL( KMAXMETABUFLENGTH );
+    metaIntervalBuf.CleanupClosePushL();
+
+	ExtractMetaInfoL( KIcyMetaint, metaIntervalBuf );
+
+	TLex8 convert( metaIntervalBuf );
+    convert.Val( iChannelInfo.iMetaInterval );
+
+    if ( iChannelInfo.iMetaInterval <= 0 ) // Invalid meta interval specified, the stream is corrupt and cannot be played.
+        {
+        IRLOG_ERROR( "CIRIcyFlowInitiator::ParseChannelInfoL - Invalid metainterval." );
+        User::Leave( KIRStreamSourceApplicationProtocolError );
+        }
+    CleanupStack::PopAndDestroy();
+
+    IRLOG_DEBUG( "CIRIcyFlowInitiator::ParseChannelInfoL - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowInitiator::ExtractMetaInfoL
+// ---------------------------------------------------------------------------
+//
+TBool CIRIcyFlowInitiator::ExtractMetaInfoL(const TDesC8& aMetaField, TDes8 &aBuffer ) const
+    {
+    IRLOG_DEBUG2( "CIRIcyFlowInitiator::ExtractMetaInfoL - aMetaField = %S", &aMetaField );
+    // This function contains the logic for parsing the
+    // buffer obtained from RecieveMetaInfo() and
+    // appends the Meta info into the ChannelInfo structure
+    TInt offsetPositionStart( 0 );
+    TInt offsetPositionEnd( 0 );
+    TPtr8 startPos( NULL, 0 );
+
+    offsetPositionStart = iBuffer.Find( aMetaField );
+
+    if ( offsetPositionStart < 0 )
+	    {
+	    IRLOG_DEBUG( "CIRIcyFlowInitiator::ExtractMetaInfoL - Field not found, Exiting." );
+        return EFalse;
+        }
+    // Increment the offset by the length of meta field
+    offsetPositionStart += aMetaField.Length();
+
+    TPtrC8 start = iBuffer.Mid( offsetPositionStart );
+
+    offsetPositionEnd = start.Find( KCarReturn );
+
+    if ( offsetPositionEnd == KErrNotFound )
+        {
+        IRLOG_ERROR( "CIRIcyFlowInitiator::ExtractMetaInfoL - Field delimiter not found." );
+        User::Leave( KIRStreamSourceApplicationProtocolError );
+        }
+    // Extract the actual data
+    TPtrC8 data = start.Left( offsetPositionEnd );
+
+    // too large field for this implementation.
+    if (data.Length() > aBuffer.MaxLength() )
+        {
+        IRLOG_ERROR3( "CIRIcyFlowInitiator::ExtractMetaInfoL - Received field was too large (%d, allowed maximum = %d)",
+                      data.Length(), aBuffer.Length() );
+        User::Leave( KIRStreamSourceApplicationProtocolError );
+        }
+
+    aBuffer.Copy( data );
+    aBuffer.TrimAll();
+	IRLOG_DEBUG( "CIRIcyFlowInitiator::ExtractMetaInfoL - Exiting." );
+    return ETrue;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/iricyflowreader.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,714 @@
+/*
+* Copyright (c) 2006-2007 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:  ICY flow reader implementation
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi
+*  Ref:
+*  Setting RawDataTransferredL() into DataTransferTracker for Byte Counter Impl
+*
+*  </ccm_history>
+* ============================================================================
+*/
+#include <utf.h>
+
+#include "iricyflowreader.h"
+#include "irdebug.h"
+#include "irmediaenginebuffer.h"
+#include "irmetadata.h"
+#include "irnetworkbuffer.h"
+#include "irstationconnection.h"
+#include "irstationdataobserver.h"
+#include "irstreamsourceerrors.h"
+#include "irnetworkcontroller.h"
+
+const TInt KMaxSongBufferSize = 61440;
+const TInt KNoInputBuffers = 60;
+const TInt KMaxBufferChunkSize = 1024;
+const TInt KMaxSocketBufferSize = 1024;
+const TInt KBufferPercentageInc = 1;
+const TInt KSixteen = 16;
+const TInt KThree=3;
+_LIT8( KIRStreamTitle, "StreamTitle='" );
+_LIT8( KIRStreamUrl, "StreamUrl='" );
+_LIT8( KIRMetaDataEndIdentifier, "';" );
+_LIT8( KIRSongDelimiter, " - " );
+
+// masks and prefices used in UTF-8 recognition
+const TInt KIRUtf8_2B1stByteMask = 0xE0;
+const TInt KIRUtf8_3B1stByteMask = 0xF0;
+const TInt KIRUtf8_4B1stByteMask = 0xF8;
+const TInt KIRUtf8FollowingByteMask = 0xC0;
+
+const TInt KIRUtf8_2B1stBytePrefix = 0xC0;
+const TInt KIRUtf8_3B1stBytePrefix = 0xE0;
+const TInt KIRUtf8_4B1stBytePrefix = 0xF0;
+const TInt KIRUtf8FollowingBytePrefix = 0x80;
+// ========================= MEMBER FUNCTIONS ================================
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::NewL
+// ---------------------------------------------------------------------------
+//
+CIRIcyFlowReader* CIRIcyFlowReader::NewL( RSocket& aSocket, CIRStationConnection& aOwner,
+	               MIRStationDataObserver& aDataObserver, TChannelInfo& aChannelInfo )
+    {
+    CIRIcyFlowReader* self = new ( ELeave ) CIRIcyFlowReader( aSocket, aOwner,
+    					 aDataObserver, aChannelInfo );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::CIRIcyFlowReader
+// ---------------------------------------------------------------------------
+//
+CIRIcyFlowReader::CIRIcyFlowReader( RSocket& aSocket, CIRStationConnection& aOwner,
+	              MIRStationDataObserver& aDataObserver, TChannelInfo& aChannelInfo )
+    :CActive( EPriorityStandard ), iSocket( aSocket ), iOwner( aOwner ),
+    				 iDataObserver( aDataObserver ),
+      iSocketBufferPtr( NULL, 0 ), iChannelInfo( aChannelInfo )
+    {
+
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::~CIRIcyFlowReader
+// ---------------------------------------------------------------------------
+//
+CIRIcyFlowReader::~CIRIcyFlowReader()
+	{
+	Cancel();
+	while(!iSinkQ.IsEmpty())
+		{
+		//Deleting all the entries in sink buffers queue
+		iTempBufferHolder = iSinkQ.First();
+		iSinkQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		}
+	while(!iSourceQ.IsEmpty())
+		{
+		//deleting all the entries in source buffers queue
+		iTempBufferHolder = iSourceQ.First();
+		iSourceQ.Remove(*iTempBufferHolder);
+		delete iTempBufferHolder;
+		}
+	delete[] iSongBuffer;
+	delete iSocketBuffer;
+	delete iTempSongBuffer;
+	delete iTempMetaBuffer;
+    delete iMetaData;
+	if(iNetworkControllerHandle)
+		{
+		iNetworkControllerHandle->Close();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRIcyFlowReader::ConstructL" );
+    iAudioDataOffset = iChannelInfo.iAudioDataOffset;
+    TInt f_off = _FOFF( CIRNetworkBuffer, iLink ); //for the buffer queue which is maintained
+    iSourceQ.SetOffset( f_off ); 	// It is Queue of buffer given to socket to fill
+    iSinkQ.SetOffset( f_off );  // It is Queue of buffer given to media engine
+    InitializeBuffersL();
+    iMetaData = CIRMetaData::NewL();
+    CActiveScheduler::Add( this );
+    iNetworkControllerHandle = CIRNetworkController::OpenL();
+    IRLOG_DEBUG( "CIRIcyFlowReader::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::HandleReceivedDataL
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::HandleReceivedDataL( const TDesC8& aData )
+    {
+    switch ( iParsingState )
+        {
+        case EIRReadingAudioData:
+            {
+            if ( iAudioDataOffset + aData.Length() > iChannelInfo.iMetaInterval )
+                {
+                // Part of this data contains meta data information already.
+                TInt audioDataAmount = iChannelInfo.iMetaInterval - iAudioDataOffset;
+                // Only the audio part of the data is added to the song buffer.
+                HandleReceivedAudioData( aData.Left( audioDataAmount ) );
+                iParsingState = EIRReadingMetaDataLength;
+                iAudioDataOffset = 0; // Resets the audio data offset, will start increment again after meta data is handled.
+                HandleReceivedDataL( aData.Mid( audioDataAmount ) ); // Recursive call to handle meta data mixed in with this audio data block.
+                }
+            else // All of it is data is audio data.
+                {
+                HandleReceivedAudioData( aData );
+                }
+            break;
+            }
+        case EIRReadingMetaDataLength:
+            {
+            // ICY protocol specifies that meta data length is the first byte of the data multiplied by 16.
+            iMetaDataLength = aData[0] * KSixteen;
+
+            delete iTempMetaBuffer;
+            iTempMetaBuffer = NULL;
+
+            if ( iMetaDataLength > 0 ) // Meta data is provided, so we have to parse it.
+                {
+                iTempMetaBuffer = HBufC8::NewL( iMetaDataLength );
+                iParsingState = EIRReadingMetaData;
+                }
+            else // No meta data available, so resume reading audio data.
+                {
+                iParsingState = EIRReadingAudioData;
+                }
+
+            if ( aData.Length() > 1 ) // Just to check that the data doesn't only contain the length byte.
+                {
+                HandleReceivedDataL( aData.Mid( 1 ) ); // Strips off the length byte. Recursive call as data can also contain audio data.
+                }
+
+            break;
+            }
+        case EIRReadingMetaData:
+            {
+            if ( iTempMetaBuffer->Length() + aData.Length() > iMetaDataLength )
+                {
+                // All of the meta data block is now received, and part of it is continuation to the audio data.
+                TInt metaDataAmount = iMetaDataLength - iTempMetaBuffer->Length();
+                HandleReceivedMetaData( aData.Left( metaDataAmount ) );
+                ExtractMetadataL(); // Extracts the meta data from the temporary meta data buffer.
+                iParsingState = EIRReadingAudioData;
+                HandleReceivedDataL( aData.Mid( metaDataAmount ) ); // Strips off the meta data from the descriptor.
+                }
+            else // All of it is meta data.
+                {
+                HandleReceivedMetaData( aData );
+                }
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::HandleReceivedAudioData
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::HandleReceivedAudioData( const TDesC8& aData )
+    {
+    // Check to see if we've got enough audio data to fill a buffer.
+    if ( iTempSongBuffer->Length() + aData.Length() >= KMaxBufferChunkSize )
+        {
+		// Data contains more audio data than the buffer can handle.
+		TInt amountToAdd = KMaxBufferChunkSize - iTempSongBuffer->Length();
+
+		// Enough audio data to fill the buffer is added.
+		iTempSongBuffer->Des().Append( aData.Left( amountToAdd ) );
+
+		AddToSinkQueue( *iTempSongBuffer );
+		
+		//while loop is written for only if left over amount in aData is 
+		//greater then 1024, then it should be again added into SinkQueue
+		while(1)
+			{
+			iTempSongBuffer->Des().Zero();
+	 		//calculates the length of the leftover amount to be added
+			TInt length = aData.Length() - amountToAdd;
+
+			if(length <= 0)
+				{
+				break;	
+				}
+			else if(length >= KMaxBufferChunkSize) //if the left over amount is >= 1024 then add to SinkQueue
+				{
+				iTempSongBuffer->Des().Append( aData.Mid( amountToAdd,KMaxBufferChunkSize ) );
+		 		// updates the amountToAdd value by 1024
+				amountToAdd += KMaxBufferChunkSize;
+
+				AddToSinkQueue( *iTempSongBuffer );
+				}
+			else //if the left over amount is < 1024 then append to tempSongBuffer & break
+				{
+				// Then the overflowing audio data part is added to the new clean buffer.
+				iTempSongBuffer->Des().Append( aData.Mid( amountToAdd ) );
+				break;	
+				}
+			}
+        }
+    else // There is enough room in the temporary audio buffer to hold all of the data.
+        {
+        iTempSongBuffer->Des().Append( aData );
+        }
+
+    iAudioDataOffset += aData.Length();
+
+
+
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::HandleReceivedMetaData
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::HandleReceivedMetaData( const TDesC8& aData )
+    {
+    iTempMetaBuffer->Des().Append( aData );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::RunL
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::RunL()
+    {
+     // Active object request complete handler
+    switch ( iStatus.Int() )
+        {
+        case KErrNone:
+            {
+			// Byte Counter Impl
+			iNetworkControllerHandle->DataTransferTracker().RawDataTransferredL( 0,
+					 iSocketBufferPtr.Size(), MIRDataTransferTracker::EIRTransferCategoryAudio);
+
+            HandleReceivedDataL( *iSocketBuffer );
+
+            if ( !iSourceQ.IsEmpty() )
+            	{
+            	//issue a read on empty buffer
+            	IssueRead();
+            	}
+            else
+            	{
+            	if( iReBuffering )
+            		{
+            		//	if rebuffering call continue using sink buffer
+            		FillRemainingBuffers();
+            		}
+            	if( iInitialBuffering )
+            		{
+            		//  if first time intimate media client to fill the buffer
+            		iDataObserver.AudioDataEvent( MIRStationDataObserver::EBufferFilled, KErrNone );
+            		iInitialBuffering = EFalse;
+            		}
+            	}
+
+		 	break;
+			}
+        case KErrDisconnected:
+        	{
+        	IRLOG_ERROR( "CIRIcyFlowReader::RunL - KErrDisconnected");
+        	iOwner.ConnectionError( KIRStreamSourceDisconnected );
+        	}
+            break;
+        case KErrEof:
+        	{
+        	IRLOG_INFO( "CIRIcyFlowReader::RunL - KErrEof" );
+        	iOwner.ConnectionError( KIRStreamSourceNoResponse );
+        	}
+        	break;
+        default:
+        	{
+        	IRLOG_ERROR2( "CIRIcyFlowReader::RunL - Error (%d)", iStatus.Int() );
+            iOwner.ConnectionError( KIRStreamSourceReadError );
+        	}
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::DoCancel()
+    {
+    iSocket.CancelRead();
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::IssueRead
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::IssueRead()
+    {
+	if( !IsActive() )
+		{
+	    iSocketBufferPtr.Zero();
+	    iSocket.Read( iSocketBufferPtr, iStatus );
+	    SetActive();
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::Start
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::Start()
+    {
+    IRLOG_INFO( "CIRIcyFlowReader::Start" );
+    // Initiate a new read from socket into iBuffer
+    iInitialBuffering = ETrue;
+    iBufferCounter = 0;
+    iPublishStationInfo = ETrue;
+	IssueRead();
+	IRLOG_DEBUG( "CIRIcyFlowReader::Start - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::InitializeBuffersL
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::InitializeBuffersL()
+	{
+	IRLOG_DEBUG( "CIRIcyFlowReader::InitializeBuffersL" );
+	// Allocate the buffer for audio data on heap
+	iSongBuffer = new TUint8[KMaxSongBufferSize];
+	User::LeaveIfNull( iSongBuffer );
+
+	IRLOG_INFO2( "CIRIcyFlowReader::InitializeBuffersL - Reserved %d bytes of memory", KMaxSongBufferSize );
+	TUint8* bufferaddress = iSongBuffer;
+	// since sink buffers are not created initially all buffers are filled with data and appended to sink buffer
+	// Create buffers ans append to source buffer queue
+	for(TInt buffercount = 0; buffercount < KNoInputBuffers; buffercount++ )
+		{
+		iTempBufferHolder = CIRNetworkBuffer::NewL(bufferaddress,
+			KMaxBufferChunkSize);
+		iSourceQ.AddLast(*iTempBufferHolder);
+		bufferaddress += KMaxBufferChunkSize;
+		}
+	// Create a buffer for the data read from socket
+	iSocketBuffer = HBufC8::NewL( KMaxSocketBufferSize );
+	iSocketBufferPtr.Set( iSocketBuffer->Des() );
+    iTempSongBuffer = HBufC8::NewL( KMaxSocketBufferSize );
+	IRLOG_DEBUG( "CIRIcyFlowReader::InitializeBuffersL - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::FillBuffer
+// Fills the mediaengine buffer and rebuffers if necessary
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::FillBuffer(TDes8& aInputBuffer)
+	{
+	FillMediaEngineBuffer(aInputBuffer);
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::AddToSinkQueue
+// Adds the filled buffers to the sink Q so that it can be copied to media
+// engine buffer
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::AddToSinkQueue( const TDesC8& aData )
+	{
+	//call from runL
+	//removes the buffer from source queue and put in sink queue
+
+	if( !iSourceQ.IsEmpty() )
+		{
+		iTempBufferHolder = iSourceQ.First();
+		TPtr8 bufferPointer(iTempBufferHolder->Des() ,KMaxBufferChunkSize,
+			KMaxBufferChunkSize );
+		bufferPointer.Copy(aData);
+		iSourceQ.Remove(*iTempBufferHolder);
+		iSinkQ.AddLast(*iTempBufferHolder);
+		if( iInitialBuffering )
+			{
+			iBufferCounter += KBufferPercentageInc;
+			iDataObserver.AudioDataEvent( MIRStationDataObserver::EBufferPercentage, iBufferCounter );
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::FillMediaEngineBuffer
+// Fills the data into media engine's buffer
+// aInputBuffer Buffer into which data is to be filled
+// ---------------------------------------------------------------------------
+//
+
+void CIRIcyFlowReader::FillMediaEngineBuffer(const TDes8& aInputBuffer)
+	{
+
+	if( !iReBuffering )
+		{
+		//Determine no of bytes of data to be filled
+		TInt copyLength = aInputBuffer.MaxLength();
+		// Calculate the no of 1K chunks
+		iNoOfChunks = copyLength/KMaxBufferChunkSize;
+		// Initiailly remaining chunks to be filled is same as total no of
+		// chunks to be filled
+		iChunksRemaining = iNoOfChunks;
+		IRLOG_DEBUG3( "CIRIcyFlowReader::FillMediaEngineBuffer - Copying %d bytes/%d chunks", copyLength, iNoOfChunks );
+		// Store the starting address of buffer into which data is to be
+		// copied
+		iBufferFillPointer = (TUint8 *)aInputBuffer.Ptr();
+		// Start filling of the empty media engine buffers
+		FillRemainingBuffers();
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::FillRemainingBuffers
+// Fills the data into media engine's remaining buffers
+// called when the stream source runs out of buffers and
+// there is a pending request to media engine
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::FillRemainingBuffers()
+	{
+	TUint8* mediaBufferAddress = iBufferFillPointer;
+	TInt chunksFilled = iNoOfChunks - iChunksRemaining;
+	mediaBufferAddress += ( chunksFilled * KMaxBufferChunkSize );
+
+	TInt bufferNumber = iChunksRemaining;
+	while ( bufferNumber )
+		{
+		if ( !iSinkQ.IsEmpty() )
+			{
+			iTempBufferHolder = iSinkQ.First();
+			TPtr8 mediaBufferPointer(mediaBufferAddress,KMaxBufferChunkSize,
+				KMaxBufferChunkSize );
+			mediaBufferPointer.Copy( iTempBufferHolder->Des() ,
+				KMaxBufferChunkSize);
+			TPtr8 tempBufferPointer(iTempBufferHolder->Des(),
+				KMaxBufferChunkSize,KMaxBufferChunkSize );
+			tempBufferPointer.Delete(KMaxBufferChunkSize,
+				KMaxBufferChunkSize);
+			iSinkQ.Remove(*iTempBufferHolder);
+			iSourceQ.AddLast(*iTempBufferHolder);
+			iChunksRemaining--;
+			bufferNumber--;
+			iReBuffering = EFalse;
+			mediaBufferAddress += KMaxBufferChunkSize;
+			//issue  source rebuffering here if source is not empty
+			if( !iSourceQ.IsEmpty() )
+				{
+				IssueRead();
+				}
+			}
+		else
+			{
+			//rebuffer if sink buffer is empty
+			bufferNumber = 0;
+			iReBuffering = ETrue;
+			//issue  source rebuffering here if source is not empty
+			if( !iSourceQ.IsEmpty() )
+				{
+				IssueRead();
+				}
+			//break from for loop
+			}
+		}
+	iBufferCounter += (K100Percentage - KNoInputBuffers) / KIRInputBufferCount;
+    if ( iBufferCounter > K100Percentage )
+        {
+        iBufferCounter = K100Percentage;
+        }
+    iDataObserver.AudioDataEvent( MIRStationDataObserver::EBufferPercentage, iBufferCounter );
+	if( !iReBuffering )
+		{
+        iDataObserver.AudioDataEvent( MIRStationDataObserver::EOpenComplete, KErrNone );
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::ExtractMetadataL
+// Extracts the meta data from the stream
+// ---------------------------------------------------------------------------
+//
+void CIRIcyFlowReader::ExtractMetadataL()
+	{
+    IRLOG_DEBUG( "CIRIcyFlowReader::ExtractMetaDataL" );
+
+    // Erases old meta data information.
+    iMetaData->SetArtistL( KNullDesC );
+    iMetaData->SetSongL( KNullDesC );
+    iMetaData->SetStreamUrlL( KNullDesC );
+
+    TPtrC8 ptr( *iTempMetaBuffer );
+
+    TInt streamTitleIndex = ptr.Find( KIRStreamTitle );
+    TInt streamUrlIndex = ptr.Find( KIRStreamUrl );
+
+    // Extracts the "StreamTitle" part of the meta data.
+    if ( streamTitleIndex >= 0 )
+        {
+        TPtrC8 streamTitlePtr( ptr.Mid( streamTitleIndex + KIRStreamTitle().Length() ) );
+        TInt streamTitleEndIndex = streamTitlePtr.Find( KIRMetaDataEndIdentifier );
+        if ( streamTitleEndIndex >= 0 )
+            {
+            streamTitlePtr.Set( streamTitlePtr.Left( streamTitleEndIndex ) );
+
+            TPtrC8 artistPtr( KNullDesC8 );
+            TPtrC8 songPtr( KNullDesC8 );
+
+            TInt songDelimiterIndex = streamTitlePtr.Find( KIRSongDelimiter );
+            if ( songDelimiterIndex >= 0 )
+                {
+                artistPtr.Set( streamTitlePtr.Left( songDelimiterIndex ) );
+                songPtr.Set( streamTitlePtr.Mid( songDelimiterIndex + 
+                					KIRSongDelimiter().Length() ) );
+                }
+            else
+                {
+                IRLOG_WARNING( "CIRIcyFlowReader::ExtractMetaDataL - Song delimiter was not found" );
+                artistPtr.Set( streamTitlePtr );
+                }
+
+            HBufC* artist = DecodeMetadataStringLC( artistPtr );
+            iMetaData->SetArtistL( *artist );
+            CleanupStack::PopAndDestroy( artist );
+
+            HBufC* song = DecodeMetadataStringLC( songPtr );
+            iMetaData->SetSongL( *song );
+            CleanupStack::PopAndDestroy( song );
+            }
+        else
+            {
+            IRLOG_WARNING( "CIRIcyFlowReader::ExtractMetaDataL - \"StreamTitle\" end was not found" );
+            }
+        }
+    else
+        {
+        IRLOG_WARNING( "CIRIcyFlowReader::ExtractMetaDataL - \"StreamTitle\" was not found" );
+        }
+
+    // Extracts the "StreamUrl" part of the meta data.
+    if ( streamUrlIndex >= 0 )
+        {
+        TPtrC8 streamUrlPtr( ptr.Mid( streamUrlIndex + KIRStreamUrl().Length() ) );
+
+        TInt streamUrlEndIndex = streamUrlPtr.Find( KIRMetaDataEndIdentifier );
+        if ( streamUrlEndIndex >= 0 )
+            {
+            streamUrlPtr.Set( streamUrlPtr.Left( streamUrlEndIndex ) );
+            HBufC* streamUrl = HBufC::NewLC( streamUrlPtr.Length() );
+            streamUrl->Des().Copy( streamUrlPtr );  // 8 bit to 16 bit descriptor conversion.
+            iMetaData->SetStreamUrlL( *streamUrl );
+            CleanupStack::PopAndDestroy( streamUrl );
+            }
+        else
+            {
+            IRLOG_WARNING( "CIRIcyFlowReader::ExtractMetaDataL - \"StreamUrl\" end was not found" );
+            }
+        }
+    else
+        {
+        IRLOG_WARNING( "CIRIcyFlowReader::ExtractMetaDataL - \"StreamUrl\" was not found" );
+        }
+
+    iDataObserver.MetadataReceived( *iMetaData );
+
+    IRLOG_INFO4( "CIRIcyFlowReader::ExtractMetaDataL - Exit (artist=%S, song=%S, streamUrl=%S)", &iMetaData->Artist(), &iMetaData->Song(), &iMetaData->StreamUrl() );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::DecodeMetadataStringLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CIRIcyFlowReader::DecodeMetadataStringLC( const TDesC8& aString ) const
+    {
+    IRLOG_DEBUG( "CIRIcyFlowReader::DecodeMetadataStringLC" );
+    HBufC* decodedString = NULL;
+    if ( IsUtf8Encoded( aString ) )
+        {
+        TRAPD( err, 
+              IRLOG_DEBUG( "CIRIcyFlowReader::DecodeMetadataStringLC - String is UTF-8 encoded" );
+              decodedString = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aString );
+             )
+        if ( err != KErrNone )
+            {
+            IRLOG_ERROR2( "CIRIcyFlowReader::DecodeMetadataStringLC - UTF-8 conversion failed, err=%d", err );
+            decodedString = HBufC::NewL( aString.Length() ); 
+            decodedString->Des().Copy( aString ); // 8 bit to 16 bit descriptor conversion (ISO-8859-1).    
+            }
+        }
+    else
+        {
+        decodedString = HBufC::NewL( aString.Length() ); 
+        decodedString->Des().Copy( aString ); // 8 bit to 16 bit descriptor conversion (ISO-8859-1).    
+        }
+    CleanupStack::PushL( decodedString );
+    IRLOG_DEBUG2( "CIRIcyFlowReader::DecodeMetadataStringLC - Returning %S", decodedString );    
+    return decodedString;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRIcyFlowReader::IsUtf8Encoded
+// ---------------------------------------------------------------------------
+//
+TBool CIRIcyFlowReader::IsUtf8Encoded( const TDesC8& aData ) const
+    {
+    IRLOG_DEBUG( "CIRIcyFlowReader::IsUtf8Encoded" );    
+    TBool foundUtf8( EFalse );
+    
+    for ( TInt i(0); i + 1 < aData.Length() && !foundUtf8; i++ )
+        {
+        if ( ( aData[i] & KIRUtf8_2B1stByteMask ) == KIRUtf8_2B1stBytePrefix )
+            {
+            // Two-byte presentation: 110yyyyy 10zzzzzz
+            if ( ( aData[i + 1] & KIRUtf8FollowingByteMask ) == KIRUtf8FollowingBytePrefix )
+                {
+                foundUtf8 = ETrue;
+                }
+            }
+        else if ( ( aData[i] & KIRUtf8_3B1stByteMask ) == KIRUtf8_3B1stBytePrefix && 
+                  i + 2 < aData.Length() )
+            {
+            // Three-byte presentation: 1110xxxx 10yyyyyy 10zzzzzz
+            if ( ( aData[i + 1] & KIRUtf8FollowingByteMask ) == KIRUtf8FollowingBytePrefix && 
+                 ( aData[i + 2] & KIRUtf8FollowingByteMask ) == KIRUtf8FollowingBytePrefix )
+                {
+                foundUtf8 = ETrue;
+                }
+            }
+        else if ( ( aData[i] & KIRUtf8_4B1stByteMask ) == KIRUtf8_4B1stBytePrefix &&
+                i + KThree < aData.Length() )
+            {
+            // Four-byte presentation: 11110www 10xxxxxx 10yyyyyy 10zzzzzz
+            if ( ( aData[i + 1] & KIRUtf8FollowingByteMask ) == KIRUtf8FollowingBytePrefix && 
+                 ( aData[i + 2] & KIRUtf8FollowingByteMask ) == KIRUtf8FollowingBytePrefix && 
+                 ( aData[i + KThree] & KIRUtf8FollowingByteMask ) == KIRUtf8FollowingBytePrefix )
+                {
+                foundUtf8 = ETrue;
+                }
+            }
+        else
+            {
+            // NOP
+            }
+        }
+    IRLOG_DEBUG2( "CIRIcyFlowReader::IsUtf8Encoded - Returning %d", foundUtf8 );    
+    return foundUtf8;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/irnetworkbuffer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdebug.h"
+#include "irnetworkbuffer.h"
+
+// ---------------------------------------------------------------------------
+// Two Phase NewL
+// returns an instance CIRNetworkBuffer
+// Owned by CIRNetworkBuffer
+// ---------------------------------------------------------------------------
+//
+CIRNetworkBuffer* CIRNetworkBuffer::NewL(TUint8* aAddress,TInt aSize)
+	{
+	IRLOG_DEBUG( "CIRNetworkBuffer::NewL" );
+	CIRNetworkBuffer* self = CIRNetworkBuffer::NewLC( aAddress, aSize );
+	CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRNetworkBuffer::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two Phase NewLC
+// Creates an instance CIRNetworkBuffer
+// Owned by CIRNetworkBuffer
+// ---------------------------------------------------------------------------
+//
+CIRNetworkBuffer* CIRNetworkBuffer::NewLC( TUint8* aAddress, TInt aSize )
+	{
+	IRLOG_DEBUG( "CIRNetworkBuffer::NewLC" );
+	CIRNetworkBuffer* self = new (ELeave) CIRNetworkBuffer;
+	CleanupStack::PushL( self );
+	self->ConstructL( aAddress, aSize );
+	IRLOG_DEBUG( "CIRNetworkBuffer::NewLC - Exiting." );
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : CIRNetworkBuffer
+// default constructor
+// ---------------------------------------------------------------------------
+//
+ CIRNetworkBuffer::CIRNetworkBuffer()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// Two Phase ConstructL
+// Owned by CIRNetworkBuffer
+// ---------------------------------------------------------------------------
+//
+void CIRNetworkBuffer::ConstructL( TUint8* aAddress,TInt aSize )
+	{
+	IRLOG_DEBUG3( "CIRNetworkBuffer::ConstructL - address=0x%x, size=%d", aAddress, aSize );
+	//address of memory chunk
+	iDataAddress = aAddress;
+	//granularity of each chunk
+	iSize = aSize;
+	IRLOG_DEBUG( "CIRNetworkBuffer::ConstructL - Exiting." );
+	return;
+	}
+
+// ---------------------------------------------------------------------------
+// destructor function
+// Owned by CIRNetworkBuffer
+// ---------------------------------------------------------------------------
+//
+CIRNetworkBuffer::~CIRNetworkBuffer ()
+	{
+	IRLOG_DEBUG( "CIRNetworkBuffer::~CIRNetworkBuffer" );
+	//No implementation
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/irsocketopener.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2006-2007 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:  Socket opener implementation
+*
+*/
+
+
+#include <e32property.h>
+#include <HttpDownloadMgrCommon.h>
+#include <in_sock.h>
+#include <uriutils.h>
+
+#include "irpubsubkeys.h"
+#include "irdebug.h"
+#include "irnetworkcontroller.h"
+#include "irsocketopener.h"
+#include "irstationconnection.h"
+#include "irstreamsourceerrors.h"
+#include "irstreamsourceliterals.h"
+
+const TInt KIRSOTimeOutValue = 10000000;
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::NewL
+// ---------------------------------------------------------------------------
+//
+CIRSocketOpener* CIRSocketOpener::NewL( RSocket& aSocket, CIRStationConnection& aOwner )
+	{
+	CIRSocketOpener* self = new ( ELeave ) CIRSocketOpener( aSocket, aOwner );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::CIRSocketOpener
+// ---------------------------------------------------------------------------
+//
+CIRSocketOpener::CIRSocketOpener( RSocket& aSocket, CIRStationConnection& aOwner )
+	:CActive( EPriorityStandard ), iPort( KDefaultPort ), iSocket( aSocket), iOwner( aOwner )
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRSocketOpener::ConstructL" );	
+	CActiveScheduler::Add( this );
+	iState = EIRIdle;
+	iSocketTimer = CIRSocketTimeOutTimer::NewL( CActive::EPriorityHigh,*this );
+
+	CIRNetworkController* networkControllerHandle = CIRNetworkController::OpenL();
+	CleanupClosePushL( *networkControllerHandle );
+
+    TProtocolName protocolName( KTcpProtocol );
+	TProtocolDesc protocolInfo;
+	
+	networkControllerHandle->GetIRSocketServer().FindProtocol( protocolName, protocolInfo );
+	
+	iResolver.Close();
+
+	User::LeaveIfError( iResolver.Open( networkControllerHandle->GetIRSocketServer(),
+	                                   protocolInfo.iAddrFamily, protocolInfo.iProtocol,
+	                                   networkControllerHandle->GetIRConnection() ) );
+
+	IRLOG_DEBUG( "CIRSocketOpener::ConstructL - Opened resolver." );
+	User::LeaveIfError( iSocket.Open( networkControllerHandle->GetIRSocketServer(),
+				 protocolInfo.iAddrFamily,protocolInfo.iSockType,protocolInfo.iProtocol,
+	                                  networkControllerHandle->GetIRConnection() ) );
+    IRLOG_DEBUG( "CIRSocketOpener::ConstructL - Opened socket." );
+	                                   
+    CleanupStack::PopAndDestroy();
+	IRLOG_DEBUG( "CIRSocketOpener::ConstructL - Exiting." );	    
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::CIRSocketOpener
+// ---------------------------------------------------------------------------
+//
+CIRSocketOpener::~CIRSocketOpener()
+	{
+	Cancel();
+//	iResolver.Close()	
+    iHost.Close();	
+	delete iSocketTimer;	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::ResolveAddress()
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::ResolveAddress()
+	{
+	IRLOG_INFO2( "CIRSocketOpener::ResolveAddress - %S", &iHost );
+    Cancel();
+	iState = EIRResolving;
+
+	iSocketTimer->Cancel();
+	iSocketTimer->After( KIRSOTimeOutValue );
+	
+	iResolver.GetByName( iHost, iResolvedHostInfo, iStatus );
+	SetActive();
+
+	IRLOG_DEBUG( "CIRSocketOpener::ResolveAddress - Exiting." );                
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::ConnectToAddress()
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::ConnectToAddress()
+	{
+	IRLOG_INFO( "CIRSocketOpener::ConnectToAddress" );
+    Cancel();
+	iState = EIRConnecting;
+
+	iSocketTimer->Cancel();
+	iSocketTimer->After( KIRSOTimeOutValue );
+	
+	iSocket.Connect( iSockAddr, iStatus );
+	SetActive();
+
+	IRLOG_DEBUG( "CIRSocketOpener::ConnectToAddress - Exiting." );    
+    }   
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::ExtractUriComponents
+// ---------------------------------------------------------------------------
+//
+TBool CIRSocketOpener::ExtractUriComponentsL(const TDesC& aUrl)
+	{
+	IRLOG_DEBUG( "CIRSocketOpener::ExtractUriComponentsL" );    
+
+    TBool retMe = EFalse;
+
+	if( !UriUtils::HasInvalidChars( aUrl ) )
+		{
+    	// Initialize the Uri Parser
+    	CUri8* uri = UriUtils::CreateUriL( aUrl );
+    	CleanupStack::PushL( uri );
+    	
+    	const TUriC8& accessorUri = uri->Uri(); 
+
+        iHost.Close();
+    
+        const TDesC8& host = accessorUri.Extract( EUriHost ); 
+        if ( host.Length() > 0 )
+            {
+            if ( iHost.Create( host.Length() ) == KErrNone )
+                {
+                iHost.Copy( host );
+            
+	            TLex8 uriLex( accessorUri.Extract( EUriPort ) );
+	            if ( uriLex.Val( iPort ) != KErrNone )
+	                {
+    	            iPort = KDefaultPort;
+	                }
+                retMe = ETrue;	            
+                }
+            }
+        CleanupStack::PopAndDestroy( uri );
+		}
+	IRLOG_DEBUG2( "CIRSocketOpener::ExtractUriComponentsL - Returning %d.", retMe );        
+	return retMe;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::RunL
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::RunL()
+	{
+	IRLOG_INFO3( "CIRSocketOpener::RunL - iStatus = %d, iState = %d", iStatus.Int(), iState );
+
+	if( iStatus == KErrNone )
+		{
+		switch( iState )
+			{
+			case EIRResolving:
+				iSocketTimer->Cancel();
+				iSockAddr = ( iResolvedHostInfo() ).iAddr;
+				iSockAddr.SetPort( iPort );
+				ConnectToAddress();
+				break;
+			case EIRConnecting:
+    			iSocketTimer->Cancel();
+				iState = EIRReady;
+				iOwner.ConnectionReady();
+				break;
+			default:
+                __ASSERT_DEBUG( EFalse, User::Invariant() );
+    			break;
+			}
+		}
+	else 
+		{
+		switch( iState )
+			{
+			case EIRResolving:
+				IRLOG_ERROR( "CIRConnectionHandler::RunL - EIRResolving" );
+				iSocketTimer->Cancel();
+				iOwner.ConnectionError( KIRStreamSourceLookupError );
+				break;
+			case EIRConnecting: 
+				IRLOG_ERROR( "CIRConnectionHandler::RunL - EConnecting"); 
+				iSocketTimer->Cancel();
+				iOwner.ConnectionError( KIRStreamSourceConnectionError );
+				break;
+			default:
+				IRLOG_FATAL2( "CIRConnectionHandler::RunL - Error in unexpected state (%d)", iStatus.Int() );
+                __ASSERT_DEBUG( EFalse, User::Invariant() );				
+				break;
+			}
+		}
+	IRLOG_DEBUG( "CIRSocketOpener::RunL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::Connect
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::ConnectL( const TDesC& aUrl )
+	{
+    IRLOG_INFO2( "CIRSocketOpener::ConnectL - %S", &aUrl );
+	if( ExtractUriComponentsL( aUrl ) )
+		{
+		ResolveAddress();		  	
+		}
+	else
+		{
+		IRLOG_ERROR( "CIRConnectionHandler::ConnectL - Invalid URL" );
+		iOwner.ConnectionError( KIRStreamSourceInvalidUrl );		  		
+		}  
+	IRLOG_DEBUG( "CIRSocketOpener::ConnectL - Exiting." );		
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::TimerExpired
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::TimerExpired()
+	{
+	switch( iState )
+		{
+		case EIRResolving: 
+			Cancel();
+			IRLOG_ERROR( "CIRSocketOpener::TimerExpired - Timed out while looking up server." );
+			iOwner.ConnectionError( KIRStreamSourceTimeOut );
+			break;
+		
+		case EIRConnecting: 
+		    Cancel();
+			IRLOG_ERROR( "CIRSocketOpener::TimerExpired - Connecting to server timed out." );   	 		    
+			iOwner.ConnectionError( KIRStreamSourceTimeOut );
+			break;
+		default:
+            __ASSERT_DEBUG( EFalse, User::Invariant() );				
+			break;
+		} 
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRSocketOpener::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CIRSocketOpener::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRSocketOpener::DoCancel." );	
+	iResolver.Cancel();
+	iSocket.CancelAll();
+	
+	iSocketTimer->Cancel();
+	IRLOG_DEBUG( "CIRSocketOpener::DoCancel - Exiting." );		
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/irsockettimeouttimer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdebug.h"
+#include "irsockettimeouttimer.h"
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRSocketTimeOutTimer::CIRSocketTimeOutTimer( const TInt aPriority, 
+	MIRSocketTimeoutNotifier& aNotify) : CTimer( aPriority ),
+	iNotify( aNotify )
+	{
+	// Definition not required
+	}
+
+// ---------------------------------------------------------------------------
+// Default destructor
+// ---------------------------------------------------------------------------
+//
+CIRSocketTimeOutTimer::~CIRSocketTimeOutTimer()
+	{
+	// Cancel any pending requests
+	Cancel();
+	}
+
+// ---------------------------------------------------------------------------
+// Creates the CTimer object
+// ---------------------------------------------------------------------------
+//
+void CIRSocketTimeOutTimer::ConstructL()
+	{
+	// Create the Timer
+	CTimer::ConstructL();
+	// Add the active object active scheduler 
+	CActiveScheduler::Add( this );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketTimeOutTimer::NewL
+// Creates an object of CIRSocketTimeOutTimer 
+// ---------------------------------------------------------------------------
+//
+CIRSocketTimeOutTimer* CIRSocketTimeOutTimer::NewL( const TInt aPriority,
+	MIRSocketTimeoutNotifier& aNotify )
+	{
+	CIRSocketTimeOutTimer* self = CIRSocketTimeOutTimer::NewLC( aPriority,
+		aNotify );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketTimeOutTimer::NewLC
+// Creates an object of CIRSocketTimeOutTimer 
+// ---------------------------------------------------------------------------
+//
+CIRSocketTimeOutTimer* CIRSocketTimeOutTimer::NewLC( const TInt aPriority, 
+	MIRSocketTimeoutNotifier& aNotify )
+	{
+	CIRSocketTimeOutTimer* self = new (ELeave) CIRSocketTimeOutTimer( 
+		aPriority, aNotify );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketTimeOutTimer::RunL
+// Called when the timer expires 
+// This is used to notify the observer that timer has expired
+// ---------------------------------------------------------------------------
+//    
+void CIRSocketTimeOutTimer::RunL()
+	{
+	IRLOG_INFO2( "CIRSocketTimeOutTimer::RunL - Timer expired (%d).", iStatus.Int() );	
+	if( iStatus == KErrNone )
+		{
+		iNotify.TimerExpired();
+		}
+	else
+		{
+		User::Leave(iStatus.Int());
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSocketTimeOutTimer::RunError
+// Called if RunL leaves
+// ---------------------------------------------------------------------------
+//    
+TInt CIRSocketTimeOutTimer::RunError( TInt /*aError*/ )
+	{
+	// Ignore any timer expiry errors as they are not critical in this case
+	IRLOG_DEBUG( "CIRSocketTimeOutTimer::RunError" );
+	return KErrNone;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/irstationconnection.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2006-2007 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:  Station connection implementation
+*
+*/
+
+
+#include "irstationconnection.h"
+#include "irdebug.h"
+#include "iricyflowinitiator.h"
+#include "iricyflowreader.h"
+#include "irsocketopener.h"
+#include "irstationdataobserver.h"
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::NewL
+// ---------------------------------------------------------------------------
+//
+CIRStationConnection* CIRStationConnection::NewL( 
+												MIRStationConnectionObserver& aConnectionObserver, 
+                                                  MIRStationDataObserver& aDataObserver )
+    {
+	CIRStationConnection* self = new ( ELeave ) CIRStationConnection( aConnectionObserver, 
+																	aDataObserver );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+    CleanupStack::Pop(self);
+	return self;
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::~CIRStationConnection
+// ---------------------------------------------------------------------------
+//
+CIRStationConnection::~CIRStationConnection()
+    {
+    delete iSocketOpener;
+    
+    delete iIcyFlowInitiator;
+    
+    delete iIcyFlowReader;
+    
+    iSocket.Close();
+    iUri.Close();
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::CIRStationConnection
+// ---------------------------------------------------------------------------
+//
+CIRStationConnection::CIRStationConnection( MIRStationConnectionObserver& aConnectionObserver, 
+											MIRStationDataObserver& aDataObserver ) :
+    iConnectionObserver( aConnectionObserver ), iDataObserver( aDataObserver )
+    {
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRStationConnection::ConstructL" );    
+    iConnectionType = EIRUndefined;
+    }
+    
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::ConnectL
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::ConnectL( const TDesC& aUri )
+    {
+	IRLOG_DEBUG( "CIRStationConnection::ConnectL" );        
+    iUri.Close();
+    iUri.CreateL( aUri );
+    
+    iConnectionType = EIRCandidate;
+
+    delete iSocketOpener;	
+    iSocketOpener = NULL;
+    
+    iSocketOpener = CIRSocketOpener::NewL( iSocket, *this );
+    iSocketOpener->ConnectL( iUri );
+	IRLOG_DEBUG( "CIRStationConnection::ConnectL - Exiting" );            
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::Close
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::Close()
+    {
+	IRLOG_DEBUG( "CIRStationConnection::Close" );    
+    if ( iSocketOpener )
+        {
+        iSocketOpener->Cancel();
+        }
+
+    if ( iIcyFlowInitiator )
+        {
+        iIcyFlowInitiator->Cancel();
+        }
+    
+	iChannelInfo.iStationName.Zero();
+	iChannelInfo.iGenre.Zero();
+    iChannelInfo.iBitRate.Zero();
+    iChannelInfo.iContentType.Zero();
+    iChannelInfo.iSongTitle.Zero();
+    iChannelInfo.iArtistName.Zero();
+    iChannelInfo.iMetaInterval = 0;
+    iChannelInfo.iMetaDataTracker = 0;
+    iChannelInfo.iReadSize = 0;
+    iChannelInfo.iAudioDataOffset = 0;
+    
+    if ( iIcyFlowReader )
+        {
+        iIcyFlowReader->Cancel();
+        }
+        
+    iSocket.Close(); 
+	IRLOG_DEBUG( "CIRStationConnection::Close - Exiting." );           
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::SetConnectionType
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::SetConnectionType( TIRStationConnectionType aType )
+    {
+    iConnectionType = aType;
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::ConnectionType
+// ---------------------------------------------------------------------------
+//
+CIRStationConnection::TIRStationConnectionType CIRStationConnection::ConnectionType() const
+    {
+    return iConnectionType;
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::Uri
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRStationConnection::Uri() const
+    {
+    return iUri;
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::ContentType
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CIRStationConnection::ContentType() const
+	{
+	return iChannelInfo.iContentType;
+	}
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::FillBuffer
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::FillBuffer( TDes8& aInputBuffer )
+    {
+	__ASSERT_DEBUG( iIcyFlowReader, User::Invariant() );				    
+
+/*lint -save -e774 (Info -- Boolean within 'if' always evaluates to True )*/
+    if ( iIcyFlowReader )    
+        {
+        iIcyFlowReader->FillBuffer( aInputBuffer );
+        }
+/*lint -restore*/        
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::ConnectionReady
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::ConnectionReady()
+    {
+	IRLOG_INFO2( "CIRStationConnection::ConnectionReady (%d).", this );
+    delete iIcyFlowInitiator;    
+    iIcyFlowInitiator = NULL;
+    TRAPD( err, iIcyFlowInitiator = CIRIcyFlowInitiator::NewL( iSocket, iUri, *this, 
+    															iChannelInfo ) )
+    if ( err == KErrNone )
+        {
+        iIcyFlowInitiator->RequestFlow();           
+        }
+    else
+        {
+        ConnectionError( err );
+        }
+	IRLOG_DEBUG( "CIRStationConnection::ConnectionReady - Exiting." );
+    }
+    
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::FlowReady
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::FlowReady()    
+    {
+	IRLOG_INFO2( "CIRStationConnection::FlowReady (conn=%d).", this );    
+    delete iIcyFlowReader;
+    iIcyFlowReader = NULL;
+    TRAPD( err, iIcyFlowReader = CIRIcyFlowReader::NewL( iSocket, *this, iDataObserver,
+    																 iChannelInfo ) )
+    if ( err == KErrNone )
+        {
+        iIcyFlowReader->Start();        
+        iConnectionObserver.ConnectionSuccessful( this );        
+        }
+    else
+        {
+        ConnectionError( err );
+        }
+	IRLOG_DEBUG( "CIRStationConnection::FlowReady - Exiting." );        
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStationConnection::ConnectionError
+// ---------------------------------------------------------------------------
+//
+void CIRStationConnection::ConnectionError( TInt aErrorCode )
+    {
+	IRLOG_ERROR3( "CIRStationConnection::ConnectionError - err=%d, conn=%d.", aErrorCode, this );            
+    Close();
+    iConnectionObserver.ConnectionError( this, aErrorCode );
+	IRLOG_DEBUG( "CIRStationConnection::ConnectionError - Exiting." ); 
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/streamsourcesrc/irstreamsource.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,425 @@
+/*
+* Copyright (c) 2006-2007 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:  Stream source main class implementation
+*
+*/
+
+
+#include <e32property.h>
+#include "irpubsubkeys.h"
+
+#include "irdebug.h"
+#include "irnetworkcontroller.h"
+#include "irstreamsource.h"
+#include "irstreamsourceerrors.h"
+#include "irstreamsourceobserver.h"
+#include "irstationconnection.h"
+
+
+// Constants
+const TInt KIRSCConnectionCleanupDelay = 10000000;
+const TInt KHundred = 100;
+
+// ---------------------------------------------------------------------------
+//  CIRStreamSource::ConnectToServerL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRStreamSource::ConnectToServerL( const TDesC& aUrl )
+    {
+    IRLOG_INFO2( "CIRStreamSource::ConnectToServerL - aUrl=%S", &aUrl );
+	#ifndef __WINS__
+	 					 	 
+    //Connecting for the first time
+ /*****************************testing*****************/
+    	/*if ( iCurrentConnection )	
+	    {
+	    iCurrentConnection->Close();
+	    }
+	AsyncCleanupConnection( iCurrentConnection );
+    iCurrentConnection = NULL;*/
+/*****************************************************/
+   	
+   		#endif //__WINS__
+    if ( iNetworkControllerHandle->GetNetworkStatus() )
+        {
+        iReConnecting = EFalse;
+        DoConnectL( aUrl );    
+        }
+    else
+	    {
+		iStreamSourceObserver.ErrorConnecting( KIRStreamSourceConnectionError );
+	    }
+    IRLOG_DEBUG( "CIRStreamSource::ConnectToServerL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+//  CIRStreamSource::ReconnectL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRStreamSource::ReconnectL( const TDesC& aUrl )
+    {
+    IRLOG_INFO( "CIRStreamSource::ReconnectL" );
+	if ( iNetworkControllerHandle->GetNetworkStatus() )
+	    {
+        iReConnecting = ETrue;
+        DoConnectL( aUrl );
+	    }
+	else
+		{
+		iStreamSourceObserver.ErrorConnecting( KIRStreamSourceConnectionError );
+		}
+    IRLOG_DEBUG( "CIRStreamSource::ReconnectL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+//  CIRStreamSource::DoConnectL
+//  Creates the connection object which initiates the connection
+//  to the channel server
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::DoConnectL( const TDesC& aUrl )
+	{
+    IRLOG_INFO2( "CIRStreamSource::DoConnectL iCurrentConn=%d", iCurrentConnection );	
+
+    AsyncCleanupConnection( iNewConnection );
+    iNewConnection = NULL;        
+    StaticConnectionCleanupCallback( this ); // delete it (and them) now
+
+    CIRStationConnection* connection = CIRStationConnection::NewL( *this, *this );
+    CleanupStack::PushL( connection );
+    iConnections.AppendL( connection );
+    CleanupStack::Pop( connection );
+    iNewConnection = connection;
+    
+    iNewConnection->ConnectL( aUrl );
+    
+	IRLOG_INFO2( "CIRStreamSource::DoConnectL - Exiting, iNewConnection=%d.", iNewConnection );
+	}
+
+// ---------------------------------------------------------------------------
+//  CIRStreamSource::CIRStreamSource
+//  Default Constructor
+// ---------------------------------------------------------------------------
+//
+CIRStreamSource::CIRStreamSource( MIRStreamSourceObserver &aObserver ):
+	iStreamSourceObserver( aObserver )
+    {
+	// no implementation
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::~CIRStreamSource
+// Default Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStreamSource::~CIRStreamSource()
+    {    
+    IRLOG_DEBUG( "CIRStreamSource::~CIRStreamSource" );
+	
+    // close the network controller handle	
+	if( iNetworkControllerHandle )
+		{
+		iNetworkControllerHandle->Close();	
+        }
+	delete iSocketTimer;
+    
+    delete iConnectionCleanupTimer;
+    
+    iConnections.ResetAndDestroy();
+    iConnections.Close();
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStreamSource::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRStreamSource *CIRStreamSource::NewL( MIRStreamSourceObserver   &aObserver )
+    {
+    CIRStreamSource *self = new( ELeave ) CIRStreamSource( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::ConstructL()
+    {
+    // Open handle to network controller
+    iNetworkControllerHandle = CIRNetworkController::OpenL();
+    // create a timer for timeouts
+    iSocketTimer = CIRSocketTimeOutTimer::NewL( CActive::EPriorityHigh,	*this ); 
+    }
+
+// --------------------------------------------------------------------------- 
+//  CIRStreamSource::FilltheBuffer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRStreamSource::FilltheBuffer( TDes8& aInputBuffer )
+    {
+    IRLOG_DEBUG( "CIRStreamSource::FilltheBuffer" );
+
+    if( iCurrentConnection )
+    	{
+   	 	iCurrentConnection->FillBuffer( aInputBuffer );
+    	}
+    else
+    	{
+    	iReConnecting = ETrue;
+    	iStreamSourceObserver.ErrorConnecting( KIRStreamSourceNoResponse );
+    	}
+    IRLOG_DEBUG( "CIRStreamSource::FilltheBuffer - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::TimerExpired
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::TimerExpired()
+	{
+	// CancelRequest gets called by UI.We could of course call it here, but you never
+	// know what it would cause in UI without thorough testing.
+	iStreamSourceObserver.ErrorConnecting( KIRStreamSourceTimeOut );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::TimerExpired
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::MetadataReceived( const CIRMetaData& aMetaData )
+    {
+    TRAP_IGNORE( iStreamSourceObserver.HandleMetaDataReceivedL( aMetaData ) )
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::AudioDataEvent
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::AudioDataEvent( const TInt aResponseCode,	TInt aValue )
+	{
+	IRLOG_DEBUG3( "CIRStreamSource::AudioDataEvent - aResponseCode=%d, aFeedValue=%d", aResponseCode, aValue );
+	switch( aResponseCode )
+		{
+		case EBufferFilled:
+			{
+			IRLOG_DEBUG( "CIRStreamSource::AudioDataEvent - EBufferFilled" );
+			// Indicate the observer
+			if( !iReConnecting )
+				{
+				iStreamSourceObserver.PlayNow();
+				}
+			else
+				{
+				iStreamSourceObserver.Play();	
+				}
+			}
+			break;
+		case EOpenComplete:
+			{
+			IRLOG_DEBUG( "CIRStreamSource::AudioDataEvent - EOpenComplete" );
+			// Indicate the observer that streamsource buffering complete	
+			iStreamSourceObserver.OpenComplete();
+			}
+			break;
+		case EBufferPercentage:
+			{
+			// Indicate buffering progress to observer
+			iStreamSourceObserver.UpdateProgress( aValue );
+			if ( aValue == KHundred )
+				{
+			    IRLOG_INFO( "CIRStreamSource::AudioDataEvent - 100 percent EBufferPercentage" );				
+				iSocketTimer->Cancel();
+				} 
+			}
+			break;
+		default:
+			{
+			__ASSERT_DEBUG( EFalse, User::Invariant() );
+			}
+			break;	
+		}
+	IRLOG_DEBUG( "CIRStreamSource::AudioDataEvent - Exiting." );	
+	}
+	
+// ---------------------------------------------------------------------------
+//  CIRStreamSource::ContentTypeL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CIRStreamSource::ContentTypeL()
+	{
+    __ASSERT_ALWAYS( iCurrentConnection, User::Leave( KErrNotReady ) );
+
+    return iCurrentConnection->ContentType();
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::CancelRequest
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRStreamSource::CancelRequest()
+	{
+	IRLOG_INFO3( "CIRStreamSource::CancelRequest - iNewConnection=%d, iCurrentConnection=%d", iNewConnection, iCurrentConnection );	
+	iSocketTimer->Cancel();
+		
+    if ( iNewConnection )		
+        {
+        iNewConnection->Close();
+        AsyncCleanupConnection( iNewConnection );
+        iNewConnection = NULL;
+        }
+    else
+        {
+		if ( iCurrentConnection )
+		    {
+		    iCurrentConnection->Close();		    
+		    }
+		AsyncCleanupConnection( iCurrentConnection );
+		iCurrentConnection = NULL;
+        }        
+	IRLOG_DEBUG( "CIRStreamSource::CancelRequest - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::ConnectionSuccessfulL
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::ConnectionSuccessful( CIRStationConnection* aConnection )
+	{
+	IRLOG_INFO3( "CIRStreamSource::ConnectionSuccessful aConnection=%d, iCurrentConn=%d", 
+	             aConnection, iCurrentConnection );	
+	__ASSERT_DEBUG( aConnection->ConnectionType() == CIRStationConnection::EIRCandidate,
+	                User::Invariant() );
+	                
+    // publish the url
+    RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelUrl, aConnection->Uri() );	
+
+	if( !iReConnecting )
+		{
+		iStreamSourceObserver.StopBuffering();
+	    }	
+	    
+	if ( iCurrentConnection )	
+	    {
+	    iCurrentConnection->Close();
+	    }
+	AsyncCleanupConnection( iCurrentConnection );
+    iCurrentConnection = NULL;
+
+    aConnection->SetConnectionType( CIRStationConnection::EIRPermanent );
+    iCurrentConnection = aConnection;
+    iNewConnection = NULL;
+
+    iStreamSourceObserver.ConnectionEstablished();
+    // Buffering starts now, so let's set the timer.
+	TTimeIntervalMicroSeconds32 timeOut( KBufferingTimeOut );
+	iSocketTimer->Cancel();
+	iSocketTimer->After( timeOut );
+
+	IRLOG_DEBUG( "CIRStreamSource::ConnectionSuccessful - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::ConnectionError
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::ConnectionError( CIRStationConnection* aConnection, TInt aErrorCode )
+	{
+	IRLOG_ERROR3( "CIRStreamSource::ConnectionError - aConnection=%d, aErrorCode=%d", aConnection, aErrorCode );
+    
+	if ( aConnection->ConnectionType() == CIRStationConnection::EIRCandidate )
+	    {
+        AsyncCleanupConnection( aConnection );
+        iNewConnection = NULL; // To Do: implement more sophisticated pending connection handling.	    
+		iReConnecting = ETrue;        
+	    }
+    else
+        {
+        if ( aErrorCode == KIRStreamSourceDisconnected )
+            {
+			CancelRequest();            
+            }
+        }	    
+	iStreamSourceObserver.ErrorConnecting( aErrorCode );
+	IRLOG_DEBUG( "CIRStreamSource::ConnectionError - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::AsyncCleanupConnection
+// ---------------------------------------------------------------------------
+//
+void CIRStreamSource::AsyncCleanupConnection( CIRStationConnection* aConnection )
+    {
+    IRLOG_DEBUG2( "CIRStreamSource::AsyncCleanupConnection - aConnection=%d.", aConnection );    
+    // let's not double-add any connections.
+    if ( aConnection )
+        {
+        IRLOG_INFO2( "CIRStreamSource::AsyncCleanupConnection - Scheduled deletion of connection %d.", aConnection );            
+        delete iConnectionCleanupTimer;
+        iConnectionCleanupTimer = NULL;
+        TRAPD( err, iConnectionCleanupTimer = CPeriodic::NewL( CActive::EPriorityStandard ) )
+        if ( err == KErrNone )
+            {
+            iConnectionCleanupTimer->Start( KIRSCConnectionCleanupDelay, 0,
+            			 TCallBack( StaticConnectionCleanupCallback, this ) );
+            }
+        else
+            {
+            IRLOG_ERROR2( "CIRStreamSource::AsyncCleanupConnection - CPeriodic creation left with %d.", err );
+            // delete the existing dying connections.
+            StaticConnectionCleanupCallback( this );    
+            }
+        aConnection->SetConnectionType( CIRStationConnection::EIRDying );                    
+        }
+    IRLOG_DEBUG( "CIRStreamSource::AsyncCleanupConnection - Exiting." );                    
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStreamSource::StaticConnectionCleanupCallback
+// ---------------------------------------------------------------------------
+//
+TInt CIRStreamSource::StaticConnectionCleanupCallback( TAny* aSelfPtr )
+	{
+	CIRStreamSource* self = reinterpret_cast<CIRStreamSource*>( aSelfPtr );
+	if ( self )
+		{
+	IRRDEBUG2("CIRStreamSource::StaticConnectionCleanupCallback - Entering", KNullDesC );
+
+        IRLOG_DEBUG( "CIRStreamSource::StaticConnectionCleanupCallback." );
+		delete self->iConnectionCleanupTimer;
+		self->iConnectionCleanupTimer = NULL;
+		TInt it = self->iConnections.Count() - 1;
+		while ( it >= 0 )
+		    {
+		    if ( self->iConnections[it]->ConnectionType() == CIRStationConnection::EIRDying )
+		        {
+		 IRRDEBUG2("CIRStreamSource::StaticConnectionCleanupCallback - Entering1", KNullDesC );
+        IRLOG_INFO2( "CIRStreamSource::StaticConnectionCleanupCallback - Deleting connection %d.", 
+                self->iConnections[it] );		    		        
+        delete self->iConnections[it];
+        self->iConnections.Remove( it );
+		 IRRDEBUG2("CIRStreamSource::StaticConnectionCleanupCallback - Exiting1", KNullDesC );
+
+		        }
+		    it--;
+		    }
+	IRRDEBUG2("CIRStreamSource::StaticConnectionCleanupCallback - Exiting", KNullDesC );
+
+        IRLOG_DEBUG( "CIRStreamSource::StaticConnectionCleanupCallback - Exiting." );		    
+		}
+	return KErrNone;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/iradvertisinglistbox.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,405 @@
+/*
+* Copyright (c) 2008-2008 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:  Listbox implementation supporting advertisement element. 
+*
+*/
+
+
+#ifndef IRADVERTISINGLISTBOX_H
+#define IRADVERTISINGLISTBOX_H
+
+#include <aknlists.h>
+#include <eikfrlb.h>
+ 
+
+
+class CIRAdvertisingListBox;
+class CIRCategoryAdvertisingListBox;
+
+//class CIRFilteredModel;
+/**
+ * CIRAdvertisingListBoxData
+ * 
+ * Extends the functionality of CFormattedCellListBoxData by providing placeholder
+ * for advertisement bitmaps.
+ * 
+ */
+class CIRAdvertisingListBoxData : public CFormattedCellListBoxData
+    {
+public:
+    /**
+     * Static constructor.
+     */
+    static CIRAdvertisingListBoxData* NewL();
+    
+    /**
+     * Sets the current advertisement icon. Deletes the previous if it exists.
+     * 
+     * @param aIcon The current advertisement icon to be displayed. Takes ownership.
+     */
+    void SetAdvertisementIcon( CGulIcon* aIcon );
+    
+    /**
+     * Gets the current advertisement icon.
+     * 
+     * @return Current advertisement icon. Ownership is not transferred.
+     */
+    CGulIcon* AdvertisementIcon();
+    
+	/*
+	* DrawEmptyListL
+	* Draws the text on the listbox
+	*/
+	void DrawEmptyListL(CWindowGc &aGc,TPtrC aText,TRect aParentRect) const;
+	/*
+	* DrawEmptyListDrawUpToTwoLinesL
+	* Draws the text on the listbox
+	*/
+	void DrawEmptyListDrawUpToTwoLinesL(CWindowGc &aGc,
+										  TPtrC aText,
+                                          TAknLayoutText &aLine1,
+                                          TAknLayoutText &aLine2,
+                                          TInt aLine1length,
+                                          TInt aLine2length,
+                                          const CFont* aFont,
+                                          TRgb aColor,
+                                          TDes& aBuffer,
+                                          TRect aParentRect) const;
+
+	/*
+	* DrawEmptyListDrawMoreThanTwoLinesL
+	* Draws the text on the listbox
+	*/
+	void DrawEmptyListDrawMoreThanTwoLinesL( CWindowGc &aGc,
+												  TRect &aParentRect,
+                                                  TPtrC aText,
+                                                  TRgb aColor,
+                                                  TDes& buffer ) const;
+	/**
+	* SetControlFlag
+	* sets the iControlFlag value
+	*/
+	void SetControlFlag(TBool aControlFlag);
+
+	/**
+	* GetControlFlag
+	* gets the iControlFlag value
+	*/
+	TBool GetControlFlag();
+private:
+    /**
+     * C++ default constructor
+     */
+    CIRAdvertisingListBoxData();
+    
+    /**
+     * Destructor.
+     */
+    ~CIRAdvertisingListBoxData();    
+    
+    /**
+     * The advertisement icon. 
+     * Owned.
+     */
+    CGulIcon* iIcon;
+    
+	/**
+	* iControlFlag
+	* holds whether controls have been created
+	*/
+    TBool iControlFlag;
+
+    };
+
+
+/**
+ * CIRAdvertisingListBoxDrawer
+ * 
+ * Draws the advertisement icon owned by the CIRAdvertisingListBoxData.
+ * 
+ */
+class CIRAdvertisingListBoxDrawer : public CFormattedCellListBoxItemDrawer
+    {
+public:
+    
+    /**
+     * C++ constructor.
+     * 
+     * @param aTextListBoxModel The model od the associated listbox
+     * @param aFont The font to be used in drawing.
+     * @param aFormattedCellData The listbox data to be drawn.
+     */ 
+    CIRAdvertisingListBoxDrawer( MTextListBoxModel* aTextListBoxModel,
+                                 const CFont* aFont,
+                                 CIRAdvertisingListBoxData* aFormattedCellData,
+                                 CIRAdvertisingListBox* aListBox =NULL,
+                      			 CIRCategoryAdvertisingListBox* aCatListBox =NULL );
+
+private:
+    // From CTextListItemDrawer
+
+    /**
+     * Draws the advertisement and then lets CTextListItemDrawer to draw the 
+     * actual list items.
+     * 
+     * @see CTextListItemDrawer::DrawActualItem
+     */
+    void DrawActualItem( TInt aItemIndex, 
+                         const TRect& aActualItemRect, 
+                         TBool aItemIsCurrent, 
+                         TBool aViewIsEmphasized, 
+                         TBool aViewIsDimmed,
+                         TBool aItemIsSelected ) const;
+private:                         
+                         
+    /*
+    * iListBox
+    * instance of CCustomListBox
+    */
+   CIRAdvertisingListBox* iListBox;
+   
+   /**
+    * iCatListBox
+    * instance of CIRCategoryCustomListBox
+    */
+   CIRCategoryAdvertisingListBox* iCatListBox;
+                     
+    };
+
+/**
+ * CIRAdvertisingListBox
+ * 
+ * Listbox displaying a special advertisement item at the top of the list.
+ * Provides accessor methods for getting and setting the advertisement icon, 
+ * to expose neat interface towards callers.
+ * 
+ * Currently supports displaying of only one advertisement.
+ */
+class CIRAdvertisingListBox : public CAknDoubleLargeStyleListBox
+    {
+public:
+    /**
+     * C++ default constructor.
+     */ 
+    CIRAdvertisingListBox();
+    
+    /**
+     * Destructor
+     */
+    ~CIRAdvertisingListBox();
+
+    /**
+     * Sets the format used in the super class to represent a list item.
+     * 
+     * @param aItemFormat The list item format
+     */
+    void SetListItemFormat( HBufC* aItemFormat);
+    
+    /**
+     * Sets the advertisement for the listbox.
+     * 
+     * If there is no advertisement element present in the listbox, 
+     * inserts it as a new element on top of the list. Otherwise, only updates
+     * the advertisement icon.
+     * 
+     * @param aIcon The advertisement icon. Ownership is transferred. 
+     */
+    void SetAdvertisementIconL( CGulIcon* aIcon,TBool aMainView = EFalse );
+    
+    /**
+     * Clears (deletes) the current advertisement icon. 
+     */
+    void ClearAdvertisementIcon();
+    
+    /**
+     * Gets the current advertisement icon.
+     * 
+     * @return The current advertisement icon. Ownership is not transferred.
+     */
+    CGulIcon* AdvertisementIcon();        
+     /*
+    * ConstructL()
+    * constructs the listbox
+    */
+	void ConstructL(const CCoeControl* aParent, 
+					TInt aFlags,CAknFilteredTextListBoxModel* aFilteredmodel);
+       
+	/**
+	* SetLastPlayed()
+	* Sets the status of lastplayed i.e., whether lastplayed is present r not 
+	*/
+	void SetLastPlayed(TBool aLastPlayed);
+	/**
+	* GetLastPlayed
+	* returns the status of lastplayed i.e., whether lastplayed is present r not
+	*/
+	TBool GetLastPlayed() const;
+	/**
+	* GetFavouritesCount
+	* returns the number of stations present in the favourites preset.
+	*/
+	TInt  GetFavouritesCount() const;
+	/**
+	* GetActiveView
+	* returns whether the mainview is active r not.
+	*/
+	TBool GetActiveView() const;
+	/**
+	* GetFilteredFlag()
+	* returns  the filtered flag 
+	*/
+	TBool GetFilteredFlag() const;
+	/*
+	* Draw
+	*/
+	void Draw(const TRect& aRect) const ;
+
+	/*
+	* SetGC
+	* Sets the Graphic Context
+	*/
+	void SetGC(CWindowGc& aGc);
+	/*
+	* SetControlFlag
+	* Tests whether all controls are created
+	*/
+	void SetControlFlag(TBool aControlFlag);
+
+private:
+    // From CAknDoubleLargeStyleListBox
+
+    /**
+     * @see CAknDoubleLargeStyleListBox::CreateItemDrawerL
+     */
+    void CreateItemDrawerL();
+
+    /**
+     * The format of the list item.
+     * Owned. 
+     */
+    HBufC* iItemFormat;
+    /*
+    * iLastPlayed
+    * 
+    */
+	TBool iLastPlayed;
+    /**
+     * iNoMatchesTextResource
+     * Data for the resource string 
+     */
+	HBufC* iNoMatchesTextResource;
+	
+    /**
+     * iFindStationsTextResource
+     * Data for the resource string 
+     */
+	HBufC* iFindStationsTextResource;
+    /**
+     * iGc
+     * Data for the Graphics Context 
+     */
+	CWindowGc* iGc;
+    };
+
+//  Advertisement Listbox for Category view
+class CIRCategoryAdvertisingListBox : public CAknDoubleStyleListBox
+    {
+public:
+    /**
+     * C++ default constructor.
+     */ 
+    CIRCategoryAdvertisingListBox();
+    
+    /**
+     * Destructor
+     */
+    ~CIRCategoryAdvertisingListBox();
+
+    /**
+     * Sets the format used in the super class to represent a list item.
+     * 
+     * @param aItemFormat The list item format
+     */
+    void SetListItemFormat(  HBufC* aItemFormat );
+    
+    /**
+     * Sets the advertisement for the listbox.
+     * 
+     * If there is no advertisement element present in the listbox, 
+     * inserts it as a new element on top of the list. Otherwise, only updates
+     * the advertisement icon.
+     * 
+     * @param aIcon The advertisement icon. Ownership is transferred. 
+     */
+    void SetAdvertisementIconL( CGulIcon* aIcon );
+    
+    /**
+     * Clears (deletes) the current advertisement icon. 
+     */
+    void ClearAdvertisementIcon();
+    
+    /**
+     * Gets the current advertisement icon.
+     * 
+     * @return The current advertisement icon. Ownership is not transferred.
+     */
+    CGulIcon* AdvertisementIcon();        
+     /*
+    * ConstructL()
+    * constructs the listbox
+    */
+	void ConstructL(const CCoeControl* aParent, 
+					TInt aFlags,CAknFilteredTextListBoxModel* aFilteredmodel);
+       
+	/*
+	* Draw
+	*/
+	void Draw(const TRect& aRect) const ;
+	/*
+	* SetGC
+	* Sets the Graphic Context
+	*/
+	void SetGC(CWindowGc& aGc);
+	/*
+	* SetControlFlag
+	* Tests whether all controls are created
+	*/
+	void SetControlFlag(TBool aControlFlag);
+
+private:
+    // From CAknDoubleStyleListBox
+
+    /**
+     * @see CAknDoubleStyleListBox::CreateItemDrawerL
+     */
+    void CreateItemDrawerL();
+
+    /**
+     * The format of the list item.
+     * Owned. 
+     */
+    HBufC* iItemFormat;
+    /**
+     * iTextResource
+     * Data for the resource string 
+     */
+	HBufC* iTextResource;
+    /**
+     * iGc
+     * Data for the Graphics Context 
+     */
+	CWindowGc* iGc;
+
+    };
+#endif /*IRADVERTISINGLISTBOX_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/iriconloader.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRICONLOADER_H
+#define IRICONLOADER_H
+
+#include <e32base.h>
+
+class CFbsBitmap;
+class CGulIcon;
+
+/**
+ *  This class Creates CIconFileProvider.
+ *
+*  Since the AknIconUtils cannot access the private directory of application,
+*  mix-in class MAknIconFileProvider is implemented to provide handle of the 
+*  icon files (ScalableScreenDrawingIcons.mbm in this case) to AknIconUtils.
+ *  Creates an icon.All the view will use this API to create the icons for the view.
+ *  
+ * @code
+ * 
+ * The icon is created by loading the image bitmap identified by aBitmapId 
+ * and the mask identified by aMaskId.
+ * AknIconUtils::CreateIconL(bitmap , mask , *iFilename, aBitmapId , aMaskId);    .
+ *
+ * Creates an icon.
+ * The icon is created by loading the image bitmap identified by aBitmapId.
+ * It returns a pointer to the icon and transfers ownership.
+ * AknIconUtils::CreateIconL(*iFilename, aBitmapId);
+ * 
+ * @endcode
+ *
+*/
+class CIconFileProvider : public CBase
+{	
+public:
+	/**
+	* CIconFileProvider().
+	* C++ default constructor.
+	*/
+	IMPORT_C CIconFileProvider();
+
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* Create a CIconFileProvider object, which will draw itself to 
+	* aRect.
+	* @param aFilename the path where the icon should be loaded.
+	* @return a pointer to the created instance of CIconFileProvider.
+	*/
+	IMPORT_C static CIconFileProvider* NewL(const TDesC& aFilename);
+
+	/**
+	* ConstructL
+	* 2nd phase constructor.
+	* Perform the second phase construction of a
+	* CIconFileProvider object.
+	* @param aFilename the path where the icon should be loaded.
+	*/
+	void ConstructL( const TDesC& aFilename);
+
+	/**
+	* ~CIconFileProvider
+	* Destructor.
+	*/
+	~CIconFileProvider();
+
+	/**
+	* CreateIconL().
+	* Creates the icons for the listbox.
+	* @param ID for the bitmap for which icon should be created.
+	* @param ID for the bitmap mask for which icon should be created.
+	*/
+	IMPORT_C CGulIcon* CreateIconL(TInt aBitmapId,TInt aMaskId) const;
+
+	/**
+	* CreateIconL().
+	* Creates the icons for the listbox.
+	* @param ID for the bitmap for which icon should be created.
+	*/
+	IMPORT_C CFbsBitmap* CreateIconL(TInt aBitmapId) const;
+private:
+	// Filename where the icon should be created.
+    HBufC* iFilename;
+};
+
+#endif//IRICONLOADER_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irimageconverter.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2008-2008 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:  Image converter
+*
+*/
+
+
+#ifndef CCIRIMAGECONVERTER_H
+#define CCIRIMAGECONVERTER_H
+
+#include <e32base.h>
+
+class CFbsBitmap;
+class MIRImageConverterObserver;
+
+/**
+ * Image converter.
+ * 
+ * This class is used to convert raw image data to more Symbian-friendly CFbsBitmap format, also
+ * providing scaling support at the same time.
+ * 
+ * Supported image types include, but are not limited to, BMP, GIF, JPEG, TIFF, PNG and SVG-T.
+ * 
+ * Full animation support is available for GIF and SVG-T image types.
+ */
+NONSHARABLE_CLASS( CIRImageConverter ) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * 
+     * By default, enables animations and maintains aspect ratio for all conversions.
+     * 
+     * @return  The created object. Ownership is transferred to the caller.
+     */
+    static CIRImageConverter* NewL();
+
+    /**
+     * Destructor.
+     * 
+     * Cancels any conversions currently in progress without notifying the observer.
+     */
+    ~CIRImageConverter();
+
+    /**
+     * Sets the raw image data to be converted.
+     * 
+     * Does not make a copy of the data supplied, so care must be taken to ensure its
+     * existence until image conversion is completed.
+     */
+    void SetDataL( const TDesC8& aData );
+    
+    /**
+     * Sets the image conversion observer.
+     * 
+     * If set, the observer is notified of all pertinent conversion events.
+     * 
+     * @param   aObserver           Observer to set.
+     */
+    void SetObserver( MIRImageConverterObserver* aObserver );
+    
+    /**
+     * Enables or disables animations.
+     * 
+     * Must be used before starting the conversion. Trying to toggle the animation
+     * state while the conversion is in progress will result in a panic in debug builds.
+     * 
+     * @param   aEnable             Flag to enable or disable animations. 
+     */
+    void EnableAnimations( TBool aEnable );
+
+    /**
+     * Return a flag indicating whether the current raw image data is animated.
+     * 
+     * @return  Flag indicating whether the current raw image data is animated.
+     */
+    TBool IsAnimated() const;
+    
+    /**
+     * Enables or disables maintaining the aspect ratio when scaling.
+     * 
+     * Must be used before starting the conversion. Trying to toggle the animation
+     * state while the conversion is in progress will result in a panic in debug builds.
+     *
+     * @param   aMaintain           Flag to enable or disable maintaining the aspect ratio. 
+     */
+    void MaintainAspectRatio( TBool aMaintain );
+    
+    /**
+     * Starts the image conversion.
+     * 
+     * Must be called after SetDataL has been successfully called to initiate the
+     * actual conversion. Trying to start a conversion when one is already in progress
+     * will cause a leave, so calling Stop beforehand is advisable.
+     * 
+     * @param   aTarget             Image target size in pixels.
+     * @param   aId                 Identifier used to notify the observer with. 
+     */
+    void StartL( const TSize& aTarget, TInt aId = KErrUnknown );
+
+    /**
+     * Stops the conversion.
+     * 
+     * Does nothing if no conversions are currently in progress. Notifies the observer
+     * with KErrCancel if a conversion was cancelled.
+     */
+    void Stop();
+
+    /**
+     * Returns the converted bitmap.
+     * 
+     * Returns a NULL pointer when a conversion has not yet completed successfully.
+     * 
+     * @return  The converted bitmap. Ownership is not transferred to the caller.
+     */
+    const CFbsBitmap* Bitmap() const;
+    
+    /**
+     * Returns the converted mask.
+     * 
+     * Returns a NULL pointer when a conversion has not yet completed successfully.
+     * 
+     * @return  The converted mask. Ownership is not transferred to the caller.
+     */
+    const CFbsBitmap* Mask() const;
+    
+    /**
+     * Transfers ownership of the converted bitmap and mask to the caller.
+     * 
+     * NULL pointers are returned if a conversion has not yet completed successfully.
+     * 
+     * Any calls to either Bitmap or Mask methods after this will return a NULL pointer
+     * until another conversion has been completed successfully.
+     * 
+     * @param   aBitmap             On return, contains the converted bitmap.
+     *                              Ownership is tranferred to the caller.
+     * @param   aBitmap             On return, contains the converted mask.
+     *                              Ownership is tranferred to the caller.
+     */
+    void TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+    
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRImageConverter();
+    
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+private:
+
+    /**
+     * Image converter private data.
+     * Owned.
+     */
+    struct TIRImageConverterPrivateData;
+    TIRImageConverterPrivateData* iData;
+    
+    };
+
+#endif // CCIRIMAGECONVERTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irimageconverterimpl.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,416 @@
+/*
+* Copyright (c) 2008-2008 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:  Internal image converter implementation
+*
+*/
+
+
+#ifndef C_IRIMAGECONVERTERIMPL_H
+#define C_IRIMAGECONVERTERIMPL_H
+
+#include <f32file.h>
+#include <svgrequestobserver.h>
+
+class CBitmapScaler;
+class CFbsBitmap;
+class CGulIcon;
+class CImageDecoder;
+class CSvgEngineInterfaceImpl;
+class MIRImageConverterObserver;
+
+/**
+ * Internal image converter implementation.
+ * 
+ * This class and some of its methods are document in more detail in irimageconverter.h,
+ * as indicated by the @see tags.
+ * 
+ * @see CIRImageConverter
+ */
+NONSHARABLE_CLASS( CIRImageConverterImpl ) : public CActive, public MSvgRequestObserver
+    {
+    
+public:
+
+    /**
+     * @see CIRImageConverter::NewL() 
+     */
+    static CIRImageConverterImpl* NewL();
+    
+    /**
+     * @see CIRImageConverter::~CIRImageConverter()
+     */
+    ~CIRImageConverterImpl();
+
+    /**
+     * @see CIRImageConverter::SetDataL( const TDesC8& aData )
+     */
+    void SetDataL( const TDesC8& aData );
+    
+    /**
+     * @see CIRImageConverter::SetObserver( MIRImageConverterObserver* aObserver )
+     */
+    void SetObserver( MIRImageConverterObserver* aObserver );
+    
+    /**
+     * @see CIRImageConverter::EnableAnimations( TBool aEnable )
+     */
+    void EnableAnimations( TBool aEnable );
+    
+    /**
+     * @see CIRImageConverter::IsAnimated() const
+     */
+    TBool IsAnimated() const;
+    
+    /**
+     * @see CIRImageConverter::MaintainAspectRatio( TBool aMaintain )
+     */
+    void MaintainAspectRatio( TBool aMaintain );
+    
+    /**
+     * @see CIRImageConverter::StartL( const TSize& aTarget, TInt aId )
+     */
+    void StartL( const TSize& aTarget, TInt aId );
+
+    /**
+     * @see CIRImageConverter::Stop()
+     */
+    void Stop();
+    
+    /**
+     * @see CIRImageConverter::Bitmap() const
+     */
+    const CFbsBitmap* Bitmap() const;
+
+    /**
+     * @see CIRImageConverter::Mask() const
+     */
+    const CFbsBitmap* Mask() const;
+
+    /**
+     * @see CIRImageConverter::TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+     */
+    void TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+    
+// from base class CActive
+    
+    void DoCancel();
+    void RunL();
+    TInt RunError( TInt aError );
+    
+// from base class MSvgRequestObserver
+    
+    void UpdateScreen();
+    TBool ScriptCall( const TDesC& aScript, CSvgElementImpl* aCallerElement );
+    TInt FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle );
+    TInt FetchFont( const TDesC& aUri, RFs& aSession, RFile& aFileHandle );
+    void UpdatePresentation( const TInt32& aNoOfAnimation );
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRImageConverterImpl();
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Performs cleanup on the converter object.
+     * 
+     * Thorough cleanup must not be used if the converter should remain usable without having
+     * to call SetDataL afterwards.
+     * 
+     * Should thorough cleanup be specified, everything, including the ICL image decoder and 
+     * the SVG-T engine are destroyed.
+     * 
+     * @param   aThorough           Flag to indicate if thorough cleanup should be used.
+     */
+    void Cleanup( TBool aThorough = EFalse );
+
+    /**
+     * Creates the proper handler for the raw image data.
+     * 
+     * The handler must be created whenever the raw image data is changed, even if
+     * the same type of handler would be used.
+     */
+    void CreateDataHandlerL();
+    
+    /**
+     * Creates new bitmaps of the given size.
+     * 
+     * Performs deletion on the supplied bitmaps before assigning the created bitmaps 
+     * on them, so calling this with bitmaps that already exists is acceptable.
+     * 
+     * Should creation of either of the new bitmaps fail, the supplied bitmaps are not modified.
+     * 
+     * @param   aSize               Size in pixels that the bitmaps are created to.
+     * @param   aBitmap             On return, contains the created bitmap. 
+     *                              Ownership is transferred to the caller.
+     * @param   aMask               On return, contains the created mask. 
+     *                              Ownership is transferred to the caller.
+     */ 
+    void CreateBitmapL( const TSize& aSize, CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+    
+    /**
+     * Creates exact copies of the supplied bitmaps.
+     * 
+     * Performs deletion on the supplied bitmaps before assigning the created bitmaps 
+     * on them, so calling this with bitmaps that already exists is acceptable.
+     * 
+     * Should creation of either of the new bitmaps fail, the supplied bitmaps are not modified.
+     *
+     * @param   aSourceBitmap       The bitmap to copy data from.
+     * @param   aSourceMask         The mask to copy data from.
+     * @param   aBitmap             On return, contains the copied bitmap. 
+     *                              Ownership is transferred to the caller.
+     * @param   aMask               On return, contains the copied mask. 
+     *                              Ownership is transferred to the caller.
+     */
+    void CreateBitmapCopyL( const CFbsBitmap& aSourceBitmap, const CFbsBitmap& aSourceMask, 
+    						CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+    
+    /**
+     * Starts the bitmap animation.
+     * 
+     * Requires that all the bitmap animation frames are prerendered successfully.
+     */
+    void StartBitmapAnimationL();
+    
+    /**
+     * Renders the current bitmap animation frame.
+     * 
+     * @param   aFirstTime          Flag to indicate if this is the very first frame of the animation
+     *                              to be rendered, ever.
+     */
+    void RenderBitmapAnimationFrameL( TBool aFirstTime = EFalse );
+    
+    /**
+     * Notifies the observer either synchronously or asynchronously.
+     * 
+     * @param   aError              Error code to notify the observer with.
+     * @param   aSynchronous        Flag to indicate if the notification should be synchronous or asynchronous.
+     */
+    void NotifyObserver( TInt aError, TBool aSynchronous = ETrue );
+    
+    /**
+     * Call back for notifying the observer.
+     * 
+     * @param   aSelf               The object that made the request.
+     * @return  KErrNone.
+     */
+    static TInt StaticNotifyObserverCallBack( TAny* aSelf );
+
+    /**
+     * Call back for advancing to the next frame when bitmap animations are used.
+     * 
+     * @param   aSelf               The object that made the request.
+     * @return  KErrNone.
+     */
+    static TInt StaticNextFrameCallBack( TAny* aSelf );
+    
+private:
+
+    /**
+     * Possible converter internal states.
+     */
+    enum TIRImageConverterState
+        {
+
+        /**
+         * Converter is idle; it cannot be used until SetDataL has been successfully called on it.
+         */
+        EIRStateIdle,
+        
+        /**
+         * Converter has been initialized and it is using the SVG-T engine for rendering the raw image data. 
+         */
+        EIRStateSvgEngineInitialized,
+        
+        /**
+         * Converter has been initialized and it is using ICL for rendering the raw image data. 
+         */
+        EIRStateBitmapDecoderInitialized,
+        
+        /**
+         * Converter is currently converting the raw image data with the SVG-T engine.
+         */
+        EIRStateConvertingSvg,
+        
+        /**
+         * Converter is currently converting the raw image data with ICL.
+         */
+        EIRStateConvertingBitmap,
+        
+        /**
+         * Converter is currently scaling the decoded bitmap.
+         */
+        EIRStateScalingBitmap,
+        
+        /**
+         * Converter is currently scaling the decoded bitmap's mask.
+         */
+        EIRStateScalingBitmapMask,
+        
+        /**
+         * Converter is currently waiting for the next bitmap animation frame to be rendered.
+         */
+        EIRStateBetweenBitmapAnimationFrames
+        
+        };
+    
+private:
+
+    /**
+     * ICL image decoder that is used to convert all bitmap raw image data formats.
+     * Owned.
+     */
+    CImageDecoder* iDecoder;
+    
+    /**
+     * Scaler that is used to scale the converter bitmap and its mask when using the ICL image decoder.
+     * Owned.
+     */
+    CBitmapScaler* iScaler;
+    
+    /**
+     * SVG-T engine that is used to convert SVG image data.
+     * Owned. 
+     */
+    CSvgEngineInterfaceImpl* iSvgEngine;
+
+    /**
+     * The actual resulting bitmap from the last successful conversion.
+     * 
+     * Note that the user of the class may take ownership of this object via the
+     * TransferBitmapOwnership method.
+     * 
+     * Owned.
+     */
+    CFbsBitmap* iProcessedBitmap;
+    
+    /**
+     * The actual resulting mask from the last successful conversion.
+     * 
+     * Note that the user of the class may take ownership of this object via the
+     * TransferBitmapOwnership method.
+     * 
+     * Owned.
+     */
+    CFbsBitmap* iProcessedMask;
+
+    /**
+     * Bitmap that is being currently worked on.
+     * Owned.
+     */
+    CFbsBitmap* iBitmap;
+    
+    /**
+     * Mask that is being currently worked on.
+     * Owned.
+     */
+    CFbsBitmap* iMask;
+
+    /**
+     * Bitmap of the last frame's state when using bitmap animations.
+     * Owned.
+     */
+    CFbsBitmap* iLastFrameBitmap;
+    
+    /**
+     * Mask of the last frame's state when using bitmap animations.
+     * Owned.
+     */
+    CFbsBitmap* iLastFrameMask;
+    
+    /**
+     * Original converted bitmap animation frames.
+     * 
+     * These are the, in most cases partial, bitmap animation frames that 
+     * have been converted via ICL. These are not of the required target size,
+     * but rather the size that has been defined for the frame in the bitmap
+     * animation data. The bitmaps in this array must not be scaled. 
+     * 
+     * Owned.
+     */
+    RPointerArray<CGulIcon> iFrames;
+    
+    /**
+     * Asynchronous call back to notify the observer.
+     * Owned. 
+     */
+    CAsyncCallBack* iNotifyObserverCallBack;
+    
+    /**
+     * Periodic timer used to display bitmap animations.
+     * Owned. 
+     */
+    CPeriodic* iFrameTimer;
+    
+    /**
+     * Observer that is notified of conversion events.
+     * Not owned.
+     */
+    MIRImageConverterObserver* iObserver;
+    
+    /**
+     * Flag used to indicate whether animations are enabled.
+     */
+    TBool iEnableAnimations;
+    
+    /**
+     * Flag to indicate whether aspect ratio should be maintained when scaling.
+     */
+    TBool iMaintainAspectRatio;
+    
+    /**
+     * Descriptor pointer to the raw image data supplied by the user.
+     */
+    TPtrC8 iData;
+    
+    /**
+     * Conversion identifier that is used when notifying the observer.
+     */
+    TInt iId;
+    
+    /**
+     * Target size of the converted bitmap in pixels.
+     */
+    TSize iTargetSize;
+
+    /**
+     * Flag to indicate whether the raw image data is animated.
+     */
+    TBool iIsAnimated;
+    
+    /**
+     * Current frame index when processing bitmap animations.
+     */
+    TInt iFrameIndex;
+    
+    /**
+     * Error code to notify the observer with.
+     */
+    TInt iError;
+    
+    /**
+     * Current internal image converter state.
+     */
+    TIRImageConverterState iState;
+    
+    };
+
+#endif // C_IRIMAGECONVERTERIMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irimageconverterobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2008-2008 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:  Observer interface for the image converter
+*
+*/
+
+
+#ifndef M_MIRIMAGECONVERTEROBSERVER_H
+#define M_MIRIMAGECONVERTEROBSERVER_H
+
+#include <e32def.h>
+
+/**
+ * Observer interface for the image converter.
+ */
+class MIRImageConverterObserver
+    {
+
+public:
+
+    /**
+     * Supported image conversion events.
+     */
+    enum TIRImageConversionEvent
+        {
+        
+        /**
+         * Frame has been converted successfully; this means that the converter will continue
+         * processing the data and sending out call backs as more frames are completed.
+         */
+        EIRFrameConversionCompleted,
+        
+        /**
+         * Image has been completely converter; no further call backs will occur.
+         */
+        EIRImageConversionCompleted
+        
+        };
+    
+public:
+
+    /**
+     * Call back method that is called when an image converion event occurs.
+     * 
+     * @param   aEvent          The event that occurred.
+     * @param   aId             Identifier for the conversion.
+     * @param   aError          One of the standard system error codes.
+     */
+    virtual void HandleImageConversionEventL( MIRImageConverterObserver::
+    										TIRImageConversionEvent aEvent,
+    										TInt aId, TInt aError ) = 0;
+    
+    };
+
+#endif // M_MIRIMAGECONVERTEROBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irlayoututils.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2008-2008 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:  Utilities for layouting purposes
+*
+*/
+
+
+#ifndef IRLAYOUTUTILS_H
+#define IRLAYOUTUTILS_H
+
+#include <e32cmn.h>
+
+/**
+ *  Utilities for layouting purposes
+ */
+class IRLayoutUtils
+    {
+public:
+
+    /**
+     * Returns the preferred size for the big logo stored for the preset
+     * 
+     * @return The size
+     */
+    static TSize PresetBigLogoSize();
+    
+    /**
+     * Returns the preferred size for the small logo stored for the preset
+     * 
+     * @return The size
+     */
+   // static TSize PresetSmallLogoSizeL()
+    
+    /**
+     * Returns the preferred size for the advertisement in SDS view.
+     * 
+     * @return The size
+     */
+    static TSize AdvertisementSizeL();
+    };
+
+
+#endif // IRLAYOUTUTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irmarqueeclet.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2007-2008 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:  Controlet to implement marquee functionality for visuals
+*
+*/
+
+
+#ifndef T_TIRMARQUEECLET_H
+#define T_TIRMARQUEECLET_H
+
+#include <alf/alfeventhandler.h>
+
+class CAlfControl;
+class CAlfViewportLayout;
+class CAlfTextVisual;
+/**
+ * Small controlet to implement marquee effects to visuals.
+ * 
+ * Responsible for managing the supplied viewport layout to achieve a marquee effect.
+ * Provides events to the control about scroll status changes.
+ */
+class TIRMarqueeClet : public MAlfEventHandler
+    {
+
+public:
+    
+    /**
+     * Supported scroll styles.
+     */
+    enum TIRScrollStyle
+        {
+        /**
+         * Scroll is performed only once.
+         * When scrolling is completed, the viewport is set to its original position.
+         * This is the default scroll style if no other is explicitly set.
+         */
+        EIRScrollStyleOnce,
+        /**
+         * Scroll is continuous scroll.
+         */
+        EIRScrollStyleLoop
+        };
+
+    /**
+     * Supported scroll directions.
+     */
+    enum TIRScrollDirection
+        {
+        /**
+         * Scrolling is performed to left (western).
+         * This is the default scroll direction if no other is explicitly set.
+         */
+        EIRScrollDirectionLeft,
+        /**
+         * Scrolling is performed to right (arabic).
+         */
+        EIRScrollDirectionRight
+        };
+
+public:
+
+    /**
+     * Constructor.
+     */
+    TIRMarqueeClet();
+
+    /**
+     * Destructor.
+     */
+    ~TIRMarqueeClet();
+
+    /**
+     * Sets the required information for this marquee controlet.
+     * 
+     * @param   aViewport       Viewport layout to use.
+     * @param   aTextVisual     Text visual to use.
+     */
+    void Set( CAlfViewportLayout& aViewport, CAlfTextVisual& aTextVisual );
+
+    /**
+     * Sets scroll speed in pixels per second.
+     * 
+     * The actual scroll time is calculated dynamically by the controlet to achieve
+     * smooth motion.
+     * 
+     * @param   aScrollSpeed    Pixels per second to scroll.
+     */
+    void SetScrollSpeed( TInt aScrollSpeed );
+
+    /**
+     * Sets the scroll direction.
+     * 
+     * @param   aScrollDirection    Scroll direction to use.
+     */
+    void SetScrollDirection( TIRScrollDirection aScrollDirection );
+
+    /**
+     * Sets the scroll style.
+     * 
+     * @param   aScrollStyle    Scroll style to use.
+     */
+    void SetScrollStyle( TIRScrollStyle aScrollStyle );
+
+    /**
+     * Starts scrolling.
+     * 
+     * Notifications of scroll start and stop events are sent to the registered control.
+     * 
+     * @param   aDelay      Delay in milliseconds after which the scroll is started.
+     * @param   aSnooze     Snooze period in milliseconds after scroll is completed.
+     *                      The use of the snooze period is dependant on the scroll style.
+     *                      When the scroll style is <code>EVRScrollStyleOnce</code>, the snooze
+     *                      period indicates the amount of time after scrolling is completed before
+     *                      the control is notified of the scroll complete event.
+     */
+    void StartL( TInt aDelay = 0, TInt aSnooze = 0 );
+    
+// from base class MAlfEventHandler
+    
+    TBool OfferEventL( const TAlfEvent& aEvent );
+
+private:
+    
+    /**
+     * Supported scroll notification events.
+     * Notification about these events are sent to the registered control when they occur.
+     * Pointer to the viewport layout for which the event completed is passed as custom event data.
+     */
+    enum TIRScrollEvent
+        {
+        /**
+         * Notification that is sent when the scroll starts.
+         * This is sent after the delay period, if any, expires.
+         */
+        EIRCustomEventScrollStarted = 0x00002000,
+        /**
+         * Notification that is sent when the scroll has completed.
+         * This is sent after scrolling is completed and after the snooze
+         * period has passed.
+         */
+        EIRCustomEventScrollCompleted
+        };
+
+    /**
+     * Viewport layout to manage.
+     * Not owned.
+     */
+    CAlfViewportLayout* iViewport;
+
+    /**
+     * Text visual.
+     * Not owned.
+     */
+    CAlfTextVisual* iTextVisual;
+
+    /**
+     * Text visual scroll size.
+     */
+    TSize iScrollSize;
+
+    /**
+     * Scroll speed in pixels per second.
+     */
+    TInt iScrollSpeed;
+
+    /**
+     * Scroll direction to use.
+     */
+    TIRScrollDirection iScrollDirection;
+
+    /**
+     * Scroll style to use.
+     */
+    TIRScrollStyle iScrollStyle;
+
+    /**
+     * The snooze period.
+     */
+    TInt iSnoozeTime;
+    
+    /**
+     * Point of origin for the viewport.
+     */
+    TAlfRealPoint iOrigin;
+
+    /**
+     * The width of the original text.
+     */
+    TInt iOriginalTextWidth;
+
+    };
+
+#endif // T_TVRMARQUEECLET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irstationinformationdata.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2007-2007 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:  Station information data container
+*
+*/
+
+
+#ifndef C_CIRSTATIONINFORMATIONDATA_H
+#define C_CIRSTATIONINFORMATIONDATA_H
+
+#include <e32base.h>
+
+/** Possible directionalities of the fade. */
+enum TIRFadeStyle
+    {
+    EIRFadeUnknown,         /**< Unknown directionality. This means that the data fades in or out with no position changes. */
+    EIRFadeLeftToRight,     /**< Position changes from left to right. */
+    EIRFadeRightToLeft,     /**< Position changes from right to left. */
+    EIRFadeTopToBottom,     /**< Position changes from top to bottom. */
+    EIRFadeBottomToTop,     /**< Position changes from bottom to top. */
+    EIRFadeNoFade           /**< No fading is performed. */
+    };
+
+/** Possible display styles. */
+enum TIRDisplayStyle
+    {
+    EIRDisplaySingleLine,   /**< Single line display. */
+    EIRDisplayDoubleLine,   /**< Double line display. */
+    EIRDisplayTripleLine,   /**< Triple line display. */
+    EIRDisplayTuning,       /**< Tuning display. */
+    EIRDisplayNoDisplay     /**< No display used. */
+    };
+
+/**
+ * Station information data container class.
+ *
+ * Holds all relevant "cacheable" station information data that is used to display the transitions between them
+ * in the station information display.
+ *
+ * @since   S60 v3.2
+ */
+class CIRStationInformationData : public CBase 
+    {
+
+public:
+
+    /**
+     * Static two-phased constructor.
+     *
+     * @since   S60 v3.2
+     * @param   aCoeEnv     Control environment to use.
+     * @return  The created object. Ownership is transferred.
+     */
+    static CIRStationInformationData* NewL( CCoeEnv& aCoeEnv );
+
+    /**
+     * Destructor.
+     *
+     * @since   S60 v3.2
+     */
+    ~CIRStationInformationData();
+
+    
+
+    /**
+     * Sets the name.
+     *
+     * @since   S60 v3.2
+     * @param   Name to set.
+     */
+    void SetNameL( const TDesC& aName );
+
+    /**
+     * Sets the RDS PS name.
+     *
+     * @since   S60 v3.2
+     * @param   RDS PS name to set.
+     */
+    void SetRdsPsNameL( const TDesC& aRdsPsName );
+
+    /**
+     * Sets the index.
+     *
+     * Formats the index to a descriptor.
+     *
+     * @since   S60 v3.2
+     * @param   aIndex  Index to set.
+     */
+    void SetIndexL( TInt aIndex );
+
+    
+
+    /**
+     * Sets the visual service enabled or disabled.
+     *
+     * @since   S60 v3.2
+     * @param   aServiceEnabled     <code>ETrue</code> if service is enabled, <code>EFalse</code> otherwise.
+     */
+    void SetServiceEnabled( TBool aServiceEnabled );
+
+    /**
+     * Sets the display style in use.
+     *
+     * @since   S60 v3.2
+     * @param   aDisplayStyle   Display style to use.
+     */
+    void SetDisplayStyle( TIRDisplayStyle aDisplayStyle );
+
+    /**
+     * Sets the fade directionality.
+     *
+     * @since   S60 v3.2
+     * @param   aFadeDirectionality     Directionality of the fade.
+     */
+    void SetFadeDirectionality( TIRFadeStyle aFadeDirectionality );
+
+    /**
+     * Returns the frequency as a descriptor.
+     *
+     * @since   S60 v3.2
+     * @return  Frequency as a descriptor.
+     */
+    const TDesC& Frequency() const;
+
+    /**
+     * Returns the name.
+     *
+     * @since   S60 v3.2
+     * @return  Name of the data.
+     */
+    const TDesC& Name() const;
+
+    /**
+     * Returns the RDS PS name.
+     *
+     * @since   S60 v3.2
+     * @return  RDS PS name of the data.
+     */
+    const TDesC& RdsPsName() const;
+
+    /**
+     * Returns the index as a descriptor.
+     *
+     * @since   S60 v3.2
+     * @return  Index as a descriptor.
+     */
+    const TDesC& Index() const;
+
+    /**
+     * Returns the location.
+     *
+     * @since   S60 v3.2
+     * @return  Location of the data.
+     */
+    const TDesC& Location() const;
+
+    /**
+     * Returns whether or not visual service is enabled.
+     *
+     * @since   S60 v3.2
+     * @return  <code>ETrue</code> if visual service is enabled, <code>EFalse</code> otherwise.
+     */
+    TBool ServiceEnabled() const;
+
+    /**
+     * Returns the display style.
+     *
+     * @since   S60 v3.2
+     * @return  Display style.
+     */
+    TIRDisplayStyle DisplayStyle() const;
+
+    /**
+     * Returns the fade directionality.
+     *
+     * @since   S60 v3.2
+     * @return  Fade directionality.
+     */
+    TIRFadeStyle FadeDirectionality() const;
+
+private:
+
+    /**
+     * Constructor.
+     *
+     * @since   S60 v3.2
+     * @param   aCoeEnv     Control environment to use.
+     */
+    CIRStationInformationData( CCoeEnv& aCoeEnv );
+
+    /**
+     * Second-phase constructor.
+     *
+     * @since   S60 v3.2
+     */
+    void ConstructL();
+
+private:
+
+    /**
+     * Frequency.
+     * Own.
+     */
+    RBuf iFrequency;
+
+    /**
+     * Name.
+     * Own.
+     */
+    RBuf iName;
+
+    /**
+     * RDS PS name.
+     * Own.
+     */
+    RBuf iRdsPsName;
+
+    /**
+     * Index.
+     * Own.
+     */
+    RBuf iIndex;
+
+    /**
+     * Location.
+     * Own.
+     */
+    RBuf iLocation;
+    
+    /**
+     * <code>ETrue</code> if visual service is enabled, <code>EFalse</code> otherwise.
+     */
+    TBool iServiceEnabled;
+
+    /**
+     * Display style.
+     */
+    TIRDisplayStyle iDisplayStyle;
+
+    /**
+     * Directionality of the fade.
+     */
+    TIRFadeStyle iFadeDirectionality;    
+
+    /**
+     * Control environment.
+     */
+
+
+    };
+
+#endif // C_CIRSTATIONINFORMATIONDATA_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irstationinformationdisplay.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2007-2008 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:  Control that displays current station information
+*
+*/
+
+
+#ifndef C_CIRSTATIONINFORMATIONDISPLAY_H
+#define C_CIRSTATIONINFORMATIONDISPLAY_H
+
+#include <alf/alfcontrol.h>
+
+#include "irmarqueeclet.h"
+#include "irstationinformationdata.h"
+
+class CAlfLayout;
+class CAlfDeckLayout;
+class CAlfGridLayout;
+class CIRStationInformationData;
+
+/**
+ * Control that displays current station information.
+ * 
+ * Responsible for handling fade effects and transitions for the station information.
+ */
+class CIRStationInformationDisplay : public CAlfControl
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * 
+     * The object's ownership is implicitly transferred to the supplied control group.
+     * 
+     * @param   aEnv                Alfred environment to use.
+     * @param   aControlGroupId     Control group into which this control is added.
+     * @param   aParentLayout       Parent layout to use.
+     *
+     * @return  The constructed object. Does not transfer ownership to the caller.
+     */
+    static CIRStationInformationDisplay* NewL( CAlfEnv& aEnv, TInt aControlGroupId,
+    											CAlfLayout* aParentLayout = NULL );
+
+    // <TUNING TEMP>
+    ~CIRStationInformationDisplay();
+   
+    // </TUNING TEMP>
+    
+    /**
+     * Sets the displayed data.
+     * 
+     * This causes an animation to take place that is determined by the supplied data's transition argument.
+     * 
+     * @param   aData   The data to set.
+     */
+    void SetDisplayedDataL( const CIRStationInformationData& aData );
+
+    /**
+     * Sets the RDS PS name.
+     * 
+     * Does not do anything if there is no data being displayed currently.
+     *
+     * @param   aRdsPsName      RDS PS name to set.
+     */
+    void RdsDataReceivedL( const TDesC& aRdsData );
+    
+    /**
+     * Called when orienattion of the display has changed.
+     * 
+     * @param   aRdsDataDisplay   RDS data display.
+     */
+    void SetDisplayOrientation( TBool aLandscape ); 
+    
+    /**
+     * Returns current fade style.
+     * 
+     * @return Fade style.
+     */
+    TIRFadeStyle FadeStyle(); 
+ 
+// from base class CAlfControl
+
+    void VisualLayoutUpdated( CAlfVisual& aVisual );
+    TBool OfferEventL( const TAlfEvent& aEvent );
+    
+private:
+
+    /**
+     * Supported custom events.
+     */
+    enum TIRDisplayCustomEvents
+        {
+        EIRCustomEventDisplayFadeInCompleted,     /**< Event that is executed when a display has faded in. */
+        EIRCustomEventDisplayFadeOutCompleted,    /**< Event that is executed when a display has faded out. */
+        EIRCustomEventVisualFadeOutCompleted   /**< Event that is executed when a display has faded out. */
+        };
+    
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRStationInformationDisplay( CAlfLayout& aParentLayout );
+
+    /**
+     * Second-phase constructor.
+     * 
+     * @param   aEnv                Alfred environment to use.
+     * @param   aControlGroupId     Control group into which this control is added.
+     * @param   aParentLayout       Parent layout to use.
+     */
+    void ConstructL( CAlfEnv& aEnv, TInt aControlGroupId,CAlfLayout* aParentLayout );
+
+    /**
+     * Creates a new display that is used to show the supplied data.
+     * 
+     * @param   aData       Station information data to display.
+     */
+    void CreateDisplayL( const CIRStationInformationData& aData );
+
+    /**
+     * Fades out the current display.
+     */
+    void FadeOutDisplay( const CIRStationInformationData& aData );
+
+    /**
+     * Fades in the current display.
+     */
+    void FadeInDisplay( const CIRStationInformationData& aData );
+    
+    /**
+     * Fades a single visual.
+     * 
+     * If the supplied visual is a text visual, its shadow opacity is also modified.
+     * 
+     * @param   aVisual     Visual to fade.
+     * @param   aOpacity    Target opacity.
+     */
+    void FadeVisual( CAlfVisual& aVisual, const TAlfTimedValue& aOpacity );
+
+    /**
+     * Fades all visuals contained within the supplied layout.
+     * 
+     * If the layout contains other layouts, also their child visuals will be modified.
+     * 
+     * @param   aLayout     Layout whose visuals to fade.
+     * @param   aOpacity    Target opacity.
+     */
+    void FadeLayout( CAlfLayout& aLayout, const TAlfTimedValue& aOpacity );
+
+    /**
+     * Starts to display RDS data.
+     */
+    void DisplayRdsDataL();
+private:
+    /**
+     * Parent anchor layout.
+     * Needed when creating own separate display for RDS data.
+     */
+    CAlfLayout& iParentAnchorLayout;
+
+    /**
+     * Base layout for the visuals.
+     * Not owned.
+     */
+    CAlfDeckLayout* iBaseLayout;
+
+    /**
+     * Layout that is currently being displayed.
+     * Contains all the visuals necessary to display any kind of station information data.
+     * Not owned.
+     */
+    CAlfGridLayout* iLayout;
+
+    /**
+     * Layout for the name and index number.
+     * Not owned.
+     */
+    CAlfGridLayout* iNameIndexLayout;
+
+    /**
+     * Layout for the RDS data.
+     * Not owned.
+     */
+    CAlfGridLayout* iRdsDataLayout;
+
+    /**
+     * Text visual for the station name.
+     * Not owned.
+     */
+    CAlfTextVisual* iName;
+
+    /**
+     * Text visual for the index number.
+     * Not owned.
+     */
+    CAlfTextVisual* iIndex;
+
+    /**
+     * Text visual for the RDS PS name.
+     * Not owned.
+     */
+    CAlfTextVisual* iRdsData;
+
+    /**
+     * Marquee controlet for the name.
+     */
+    TIRMarqueeClet iNameMarqueeClet;
+    
+    /**
+     * Marquee controlet for the PS name (and Radio Text).
+     */
+    TIRMarqueeClet iRdsDataMarqueeClet;
+    
+    
+    /**
+     * RDS data text.
+     * Owned.
+     */
+    RBuf iRdsDataText;
+
+    /**
+     * ETrue if orientation is landscape, otherwise EFalse.
+     */
+    TBool iLandscape;
+
+    /**
+     * Style of the logo fading.
+     */
+    TIRFadeStyle iFadeStyle;
+
+    TBool iLandScapSetFalg;
+    // </TUNING TEMP>
+    
+    };
+
+#endif // C_CIRSTATIONINFORMATIONDISPLAY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irstationlogocontrol.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2008-2008 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:  Control for single station logo
+*
+*/
+
+
+#ifndef C_CIRSTATIONLOGOCONTROL_H
+#define C_CIRSTATIONLOGOCONTROL_H
+
+#include <alf/alfcontrol.h>
+
+#include "irstationinformationdata.h"
+#include "irimageconverterobserver.h"
+
+class CAlfImageVisual;
+class CIRImageConverter;
+class CIRStationLogoData;
+class MIRLogoControlObserver;
+
+/**
+ * Station Logo Control
+ *
+ * @since   S60 v3.2
+ */
+class CIRStationLogoControl : public CAlfControl, 
+                              public MIRImageConverterObserver
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     * Adds the control to the control group and to layout hierarchy.
+     *
+     * @param aAlfEnv The Alfred environment.
+     * @param aControlGroupId The control group that this control is to be added to.
+     * @param aParentLayout The parent layout for the visuals.
+     */
+    static CIRStationLogoControl* NewL( CAlfEnv& aAlfEnv, TInt aControlGroupId, 
+    									CAlfLayout* aParentLayout = NULL );
+
+    /**
+     * Destructor.
+     */
+    ~CIRStationLogoControl();
+    
+    /**
+     * Prepares the logo graphics for specified ID.
+     * 
+     * @param aId The identifier for the logo.
+     */
+    void PrepareLogoL( TInt aId );
+    
+    /**
+     * Switches to specified logo.
+     * 
+     * @param aId   The identifier for the logo.
+     */
+    TBool SwitchToLogoL( TInt aId );
+    
+    /**
+     * Sets the raw data for all the logos.
+     * 
+     * @param aIdArray Identifiers to be used for the logos.
+     * @param aRawData The raw graphics data for each logo.
+     */
+    void SetLogosL( const RArray<TInt>& aIdArray, const CPtrC8Array& aRawData );
+    
+    /**
+     * Updates one logo.
+     * 
+     * @param   aId         The ID of the logo to be updated. 
+     *                      If such ID is not found, it is added.
+     * @param   aRawData    The raw data of the logo.
+     *                      If the data is a KNullDesC8, it is removed.
+     */
+    void UpdateLogoL( TInt aId, const TDesC8& aRawData );
+    
+    
+    /**
+     * Sets logo fade style.
+     * 
+     * @param   aFadeStyle  The style of the logo fading. 
+     */
+    void SetLogoFadeStyle( TIRFadeStyle aFadeStyle );
+    /**
+     * Sets the observer for this control.
+     * 
+     * @param   aObserver  The observer for this control. 
+     */
+    void SetLogoControlObserver( MIRLogoControlObserver& aObserver );
+
+    // from CAlfControl
+    void VisualLayoutUpdated( CAlfVisual& aVisual );
+
+
+    // from MVRImageConverterObserver
+    void HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
+                                      TInt aId, 
+                                      TInt aError );
+     void FadeOutLogo(TInt aId);                               
+
+private: // Methods
+
+    /**
+     * The types of delayed showing of logo.
+     */
+    enum TIRLogoFadeDelayType
+        {
+        EIRLogoNoDelay,
+        EIRDelayedTextureImage,
+        EIRDelayedDefaultImage
+        };
+
+    /**
+     * Default constructor.
+     */
+    CIRStationLogoControl();
+
+    /**
+     * Second phase constructor.
+     *
+     * @param aAlfEnv The Alfred environmennt.
+     * @param aControlGroupId The control group ID for the controls.
+     * @param aParentLayout The parent layout for the visuals.
+     */
+    void ConstructL( CAlfEnv& aAlfEnv, TInt aControlGroupId, CAlfLayout* aParentLayout );
+
+    /**
+     * Provides the station logo data for specified id.
+     * 
+     * @param aId The identifier for the logo.
+     */
+    CIRStationLogoData* LogoDataForId( TInt aId );
+
+    /**
+     * Starts to convert the graphics for specified logo
+     * 
+     * @param aLogoData The logo data to be converted
+     */
+    void StartConversionL( CIRStationLogoData& aLogoData );
+
+    /**
+     * Fades the station logo in.
+     * 
+     * @param aVisual The logo to be faded in.
+     */
+    void FadeInStationLogoL( CAlfVisual& aVisual );
+    
+    /**
+     * Fades the current logo out. If logo is not the default logo, deletes it's data
+     * after the fading (ansynchronously).
+     * 
+     * @param aVisual The logo to be faded out.
+     */
+    void FadeOutCurrentLogo( CAlfVisual& aVisual );
+
+    /**
+     * Returns target point for logo fade out.
+     * 
+     * @param aVisual The visual to be faded out.
+     * @return Target point.
+     */
+    TAlfTimedPoint FadeOutTargetPoint( CAlfVisual& aVisual ) const;
+
+    /**
+     * Returns start point for logo fade in.
+     * 
+     * @param aVisual The visual to be faded in.
+     * @return Start point.
+     */
+    TAlfTimedPoint FadeInStartPoint( CAlfVisual& aVisual ) const;
+
+
+    /**
+     * Updates iLogodata Array.
+     */
+     void DestroyPreviousLogosL( const RArray<TInt>& aIdArray, const CPtrC8Array& aRawData );
+     /**
+     * Updates iLogodata Array.
+     */
+     void DefaultlogoHandlingL( const RArray<TInt>& aIdArray, const CPtrC8Array& aRawData );
+
+
+private: // Members
+
+    /**
+     * The image converter.
+     * Owned.
+     */
+    CIRImageConverter* iCurrentImageConverter;
+
+    /**
+     * The logo data for all stations.
+     * Owned.
+     */
+    RPointerArray<CIRStationLogoData> iLogoData;
+
+    /**
+     * The parent layout for the logos.
+     * Not owned.
+     */
+    CAlfDeckLayout* iDeck;
+
+    /**
+     * The size that is used for image conversions
+     */
+    TSize iVisualSize;
+    
+    /**
+     * The mif bitmap id for default logo
+     */
+    TInt iBitmapId;
+    
+    /**
+     * The mif mask id for default logo
+     */
+    TInt iMaskId;
+    
+    /**
+     * The ID for the current logo. KErrNotFound for the default logo
+     */
+    TInt iCurrentId;
+    
+    /**
+     * The fading identification for situations when the graphics aren't ready
+     */
+    TIRLogoFadeDelayType iDelayedFadeIn;
+
+    /**
+     * Style of the logo fading.
+     */
+    TIRFadeStyle iFadeStyle;
+    /**
+     * Used to store logo.
+     */
+    TInt iCount;
+    /**
+     * Used for logo storage.
+     */
+     TInt iRet;
+     /**
+     * Used for logo storage.
+     */
+     TInt iLogoDisplay;
+    /**
+     * Used for Handling Error Conditions
+     * During Logo Conversion.
+     */
+     TInt iError;
+    /**
+     * Used for Handling Logo FadeOut
+     */
+     TBool iFadeOut;
+     
+    MIRLogoControlObserver* iLogoControlObserver;
+    };
+
+#endif // C_CIRSTATIONLOGOCONTROL_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irstationlogocontrolobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2008 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:  Observer interface for the logo control.
+*
+*/
+
+
+#ifndef M_IRSTATIONLOGOCONTROLOBSERVER_H
+#define M_IRSTATIONLOGOCONTROLOBSERVER_H
+
+/**
+ * Observer interface for the image converter.
+ */
+class MIRLogoControlObserver
+    {
+
+public:
+
+    /**
+     * Call back method that is called just before displaying the logo.
+     */
+    virtual void LogoReadyForDisplayL() = 0;
+
+    /**
+     * Call back method that is called when the logo conversion fails.
+     */
+    virtual void LogoConversionFailedL() = 0;
+    
+    };
+
+#endif // M_IRSTATIONLOGOCONTROLOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolsinc/irstationlogodata.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2008-2008 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:  Data for single station logo
+*
+*/
+
+
+#ifndef C_CIRSTATIONLOGODATA_H
+#define C_CIRSTATIONLOGODATA_H
+
+#include <alf/alfbitmapprovider.h>
+#include <alf/alfeventhandler.h>
+#include <e32base.h>
+
+class CAlfTexture;
+class CFbsBitmap;
+class CIRImageConverter;
+
+/**
+ * Station Logo Data
+ *
+ * @since   S60 v3.2
+ */
+class CIRStationLogoData : public CBase, 
+                           public MAlfBitmapProvider,
+                           public MAlfEventHandler
+    {
+public:
+
+    /**
+     * Logo related custom events
+     */
+    enum TIRLogoCustomEvents
+        {
+        EIRCustomEventLogoFadeOutComplete
+        };
+    
+    /**
+     * Two-phased constructor.
+     * Adds the control to the control group and to layout hierarchy
+     *
+     * @param aId The IID for this logo
+     * @param aRawData The graphics raw data for this logo
+     */
+    static CIRStationLogoData* NewLC( TInt aId, const TDesC8& aRawData );
+
+    /**
+     * Destructor.
+     */
+    ~CIRStationLogoData();
+
+    /**
+     * Sets the raw data for the graphics
+     * 
+     * @param aRawData reference to raw data
+     */
+    void SetRawData( const TDesC8& aRawData );
+
+    /**
+     * Provides the raw data for the graphics
+     * 
+     * @return reference to raw data
+     */
+    const TDesC8& RawData() const;
+    
+    /**
+     * Updates the texture according to the bitmaps provided. 
+     * Ownership of the bitmaps is transfered always, even if this method leaves.
+     * So the bitmap an mask must not be in cleanup stack
+     * 
+     * @param aBitmap The bitmap to be used
+     * @param aMask The mask to be used
+     */
+    void UpdateTextureL( CFbsBitmap* aBitmap, CFbsBitmap* aMask );
+
+    /**
+     * Destroys the texture and possible bitmaps
+     */
+    void DestroyTexture();
+
+    /**
+     * Sets the visual for this logo data.
+     * 
+     * @param aVisual The visual to be set. Transfers ownership
+     */
+    void SetVisual( CAlfImageVisual* aVisual );
+
+    /**
+     * Provides the image visual for this logo
+     * 
+     * @return Pointer to CAlfImageVisual, or NULL
+     */
+    CAlfImageVisual* Visual();
+
+    /**
+     * Destroys the visual for the logo
+     */
+    void DestroyVisual();
+
+    /**
+     * Provides the texture for this logo
+     * 
+     * @return The reference to texture
+     */
+    CAlfTexture* Texture();
+
+    /**
+     * Provides the ID for this logo
+     * 
+     * @return The ID
+     */
+    TInt Id() const ;
+
+    // from MAlfBitmapProvider
+    void ProvideBitmapL(TInt aId, CFbsBitmap*& aBitmap, CFbsBitmap*& aMaskBitmap);
+
+    // from MAlfEventHandler
+    TBool OfferEventL( const TAlfEvent& aEvent );
+
+private: // Methods
+
+    /**
+     * Default constructor
+     *
+     * @param aId The IID for this logo
+     * @param aRawData The graphics raw data for this logo
+     */
+    CIRStationLogoData( TInt aId, const TDesC8& aRawData );
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private: // Members
+
+    /**
+     * The logo as a bitmap.
+     * Owned.
+     */
+    CFbsBitmap* iBitmap;
+
+    /**
+     * The logo bitmap mask.
+     * Owned.
+     */
+    CFbsBitmap* iMask;
+
+    /**
+     * The logo represented as a texture.
+     * Owned.
+     */
+    CAlfTexture* iTexture;
+
+    /**
+     * The visual for the logo
+     * Owned.
+     */
+    CAlfImageVisual* iVisual;
+
+    /**
+     * The raw data of graphics.
+     */
+    TPtrC8 iData;
+    
+    /**
+     * The ID that is used to identify the logo
+     */
+    TInt iId;
+    
+    /**
+     * The texture ID provided by the texture manager
+     */
+    TInt iTextureId;
+    };
+
+#endif // C_CIRSTATIONLOGODATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/iradvertisinglistbox.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1060 @@
+/*
+* Copyright (c) 2008-2008 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:  Listbox implementation supporting bitmap advertisement.
+*
+*/
+
+
+#include <gulicon.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <aknbiditextutils.h> 
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknutils.h> 
+
+#include "irui.h"
+#include "irdebug.h"
+#include "irfavoritesdb.h"
+#include "irmainview.h"
+#include "irmaincontainer.h"
+#include "iradvertisinglistbox.h"
+
+const TInt KThree = 3;
+const TInt KFour = 4;
+const TInt KSix = 6;
+const TInt KTen = 10;
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::NewL
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBoxData* CIRAdvertisingListBoxData::NewL()
+    {
+    CIRAdvertisingListBoxData* self = new (ELeave) CIRAdvertisingListBoxData();
+    CleanupStack::PushL( self );
+    self->ConstructLD();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::SetAdvertisementIcon
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBoxData::SetAdvertisementIcon( CGulIcon* aIcon )
+    {
+    delete iIcon;
+    iIcon = aIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::AdvertisementIcon
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRAdvertisingListBoxData::AdvertisementIcon()
+    {
+    return iIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::SetControlFlag
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBoxData::SetControlFlag(TBool aControlFlag)
+    {
+    iControlFlag = aControlFlag;
+    }
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::GetControlFlag
+// ---------------------------------------------------------------------------
+//
+TBool CIRAdvertisingListBoxData::GetControlFlag()
+    {
+    return iControlFlag;
+    }
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::CIRAdvertisingListBoxData
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBoxData::CIRAdvertisingListBoxData()
+    {
+    }
+// ---------------------------------------------------------
+// CIRAdvertisingListBoxData::DrawNoMatchesText
+// Draws the NoMatches Text on the view
+// ---------------------------------------------------------
+//
+void CIRAdvertisingListBoxData::DrawEmptyListL(CWindowGc &aGc,
+											   TPtrC aText,
+											   TRect aParentRect) const 
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBoxData::DrawEmptyListL - Entering" );
+    
+	MAknsSkinInstance* skin = AknsUtils::SkinInstance () ;
+
+
+    TRgb color( KRgbBlack );
+    if ( AknsUtils::AvkonSkinEnabled() )
+        {
+        TRgb c;
+        MAknsSkinInstance *skin = AknsUtils::SkinInstance();
+        TInt err = AknsUtils::GetCachedColor( skin,
+                                              c,
+                                              KAknsIIDQsnTextColors,
+                                              EAknsCIQsnTextColorsCG6 );
+        if ( !err )
+            {
+            color = c;
+            }
+        }
+
+	
+    if ( !aText.Length() )
+        {
+        return;
+        }
+
+    HBufC* hbuf = HBufC::New( aText.Size() + 3 * ( KAknBidiExtraSpacePerLine  +1 )
+                              + KTen );  // reserve space for newlines
+    if ( !hbuf )
+        { // can't really do anything
+        return;
+        }
+
+    TPtr buffer(hbuf->Des());
+    
+
+    /*
+    * input text can be either
+    * - "line1"
+    * - "line1 which will be wrapped to 2 lines and truncated with..."
+    * - "line1\nline2"
+    * - "line1\nMany other lines which will be wrapped to several lines"
+    *
+    * there are 3 layouts
+    * - 1 line with big font,
+    * - 2 lines with big font
+    * - 1 line with big font + 1..3 lines with small font (not for popup lists)
+    *
+    *  so first we need to check if given text has a newline,
+    *  if so, then we need to check if given text fits to 2 lines or
+    *  should it be split to several small font lines
+    */
+
+    TInt i, n;
+    n = 0;
+    for (i = 0; i < aText.Length(); i ++)
+        {
+        if ( aText[i] == '\n' )
+            {
+            n++;
+            }
+        }
+
+    
+    TAknTextComponentLayout layout1( AknLayoutScalable_Avkon::main_pane_empty_t1( 0 ) );
+    TAknTextComponentLayout layout2( AknLayoutScalable_Avkon::main_pane_empty_t2( 0 ) );
+    TAknLayoutText line1;
+    TAknLayoutText line2;
+
+    line1.LayoutText( aParentRect, layout1 );
+    TInt line1length = line1.TextRect().Size().iWidth;
+
+    line2.LayoutText( aParentRect, layout2 ); 
+    TInt line2length = line2.TextRect().Size().iWidth;
+
+    const CFont *font = line1.Font();
+
+    if ( n == 0 )
+        { // one line, or one line which will be wrapped to two
+        DrawEmptyListDrawUpToTwoLinesL( aGc,aText, line1, line2,
+                                                 line1length, line2length,
+                                                 font, color, buffer,
+                                                 aParentRect );
+
+        delete hbuf;
+        return;
+        }
+    
+    CArrayFix<TInt>* wrapWidthArray = new( ELeave ) CArrayFixFlat<TInt>(KTen);
+    CleanupStack::PushL( wrapWidthArray );
+
+    wrapWidthArray->AppendL( line1length );
+    wrapWidthArray->AppendL( line2length );
+    wrapWidthArray->AppendL( line2length ); // allow wrap to 3 lines
+    
+    TRAPD( error,AknBidiTextUtils::ConvertToVisualAndWrapToStringL(
+        aText, *wrapWidthArray, *font, buffer, ETrue ));
+
+    CleanupStack::PopAndDestroy(wrapWidthArray); 
+
+
+    n = 0;
+    for ( i = 0; i < buffer.Length(); i ++)
+        {
+        if (buffer[i] == '\n')
+            {
+            n++;
+            }
+        }
+
+    // wrapping adds a \n to end of each line --> n < 3
+    
+    if ( error != KErrNone || n < KThree)
+        { // 2 lines which fit to 2 line space
+        DrawEmptyListDrawUpToTwoLinesL( aGc,aText, line1, line2,
+                                                 line1length, line2length,
+                                                 font, color, buffer,
+                                                 aParentRect );
+
+        }
+    else
+        { // 1 line with big font + 1..3 lines with small font
+        DrawEmptyListDrawMoreThanTwoLinesL( aGc,aParentRect, aText,
+        											 color, buffer );
+
+        }
+
+    delete hbuf;
+   
+    IRLOG_DEBUG( "CIRAdvertisingListBoxData::DrawEmptyListL - Exiting" );
+	}   
+// ---------------------------------------------------------
+// CIRAdvertisingListBoxData::DrawEmptyListDrawUpToTwoLines
+// 
+// ---------------------------------------------------------
+//
+void CIRAdvertisingListBoxData::DrawEmptyListDrawUpToTwoLinesL(CWindowGc &aGc,
+											  TPtrC aText,
+                                              TAknLayoutText &aLine1,
+                                              TAknLayoutText &aLine2,
+                                              TInt aLine1length,
+                                              TInt aLine2length,
+                                              const CFont* aFont,
+                                              TRgb aColor,
+                                              TDes& aBuffer,
+                                              TRect aParentRect) const 
+    {
+    IRLOG_DEBUG("CIRAdvertisingListBoxData::DrawEmptyListDrawUpToTwoLinesL-Entering" );
+    CArrayFix<TInt>* wrapWidthArray = new( ELeave ) CArrayFixFlat<TInt>(KTen);
+    CleanupStack::PushL( wrapWidthArray );
+
+    wrapWidthArray->AppendL( aLine1length );
+    wrapWidthArray->AppendL( aLine2length );
+    
+    TRAPD( error,AknBidiTextUtils::ConvertToVisualAndWrapToStringL( 
+        aText, *wrapWidthArray, *aFont, aBuffer, ETrue ));
+    
+    CleanupStack::PopAndDestroy(wrapWidthArray); 
+    
+    if ( error != KErrNone )
+        {
+        aBuffer = aText;
+        }
+    
+    // Drawing text
+    aGc.Reset();
+    TBool oneline( EFalse );
+    TPtrC ptr = aBuffer;
+    TPtrC top = ptr;
+    TInt off = ptr.Locate('\n');
+    if ( off >= 0 )
+        {
+        top.Set(ptr.Left(off));
+        ptr.Set(ptr.Mid(off+1));
+
+        TInt off1 = ptr.Locate('\n');
+        if ( off1 >= 0 )
+            {
+            ptr.Set(ptr.Left(off1));
+            }
+        else
+            {
+            oneline = ETrue;
+            }
+        }
+    
+    aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
+    aGc.SetOpaque( ETrue ); // transparency off
+
+    // no layout exist for popup list - mainpane layout is ok for X
+    // coords, center vertically.  Also need to calculate vertical
+    // position for mainpane lists, since laf is broken as designed.
+    // If you don't believe this, try using laf values in phonebook.
+    aGc.UseFont( aFont );
+    aGc.SetPenColor( aColor );
+    
+    // center horizontally
+    CGraphicsContext::TTextAlign textAlign( CGraphicsContext::ECenter );
+    
+    // center vertically
+    TInt h = aParentRect.Height();
+    TInt lineh = aLine1.TextRect().Height();
+    TRect r1( aLine1.TextRect() );
+    TRect r2( aLine2.TextRect() );
+
+    // gap between lines - must be calculated this way, since no other
+    // way really exists. Could be calculated from layout data, but
+    // data is wrong, as 1st line is calculated from top of parent
+    // rect, and 2nd line is calculated from bottom of the parent
+    // rect. iAvkonAppUi->ClientRect() as parent rect would otherwise
+    // be ok and give nice results, but in phonebook ClientRect() is
+    // not what it should be - it is some strange amount too large.
+    // This can not be fixed unless layout data is fixed to use only
+    // top marginals.
+    TInt lineGap( lineh / KSix );
+
+    TInt m;  // // middle point of texts
+    m = aParentRect.iTl.iY + h / 2;// + lineh + lineGap / 2;
+    if ( oneline )
+        {
+        m += lineh / 2;
+        }
+    TInt b1( m - lineGap / 2 );           // bottom of 1st line
+    TInt b2( m + lineh + lineGap / 2 );   // botton of 2nd line
+    
+    
+    // rects of texts
+    r1.iTl.iY = b1 - lineh;
+    r1.iBr.iY = b1;
+        
+    r2.iTl.iY = b2 - lineh;
+    r2.iBr.iY = b2;
+        
+	TInt baseLineOffset = ((r1.iBr.iY - r1.iTl.iY - aFont->HeightInPixels())/2
+				+ aFont->AscentInPixels());
+
+    aGc.DrawText( top, r1, baseLineOffset, textAlign );
+    if ( !oneline )
+        {
+        aGc.DrawText( ptr, r2, baseLineOffset, textAlign );
+        }
+    
+    
+    aGc.DiscardFont();
+    aGc.SetOpaque( EFalse ); // transparency back on
+    IRLOG_DEBUG("CIRAdvertisingListBoxData::DrawEmptyListDrawUpToTwoLinesL-Exiting" );
+    }    
+// ---------------------------------------------------------
+// CIRAdvertisingListBoxData::DrawEmptyListDrawMoreThanTwoLines
+// Draws the NoMatches Text on the view
+// ---------------------------------------------------------
+//
+void CIRAdvertisingListBoxData::DrawEmptyListDrawMoreThanTwoLinesL(CWindowGc &aGc,
+												  TRect &aParentRect,
+                                                  TPtrC aText,
+                                                  TRgb aColor,
+                                                  TDes& buffer ) const
+
+    {
+    IRLOG_DEBUG("CIRAdvertisingListBoxData::DrawEmptyListDrawMoreThanTwoLinesL-Entering" );
+    // fetch layouts
+    TAknLayoutText line[KFour];
+    
+    line[0].LayoutText( aParentRect, AknLayoutScalable_Avkon::main_pane_empty_t1(2) );
+    line[1].LayoutText( aParentRect, AknLayoutScalable_Avkon::main_pane_empty_t3(0) );
+    line[2].LayoutText( aParentRect, AknLayoutScalable_Avkon::main_pane_empty_t4(0) );
+    line[3].LayoutText( aParentRect, AknLayoutScalable_Avkon::main_pane_empty_t5(0) );
+
+    TInt lineLength[KFour];
+    TInt i;
+    for ( i = 0; i < KFour; i++ )
+        {
+        lineLength[i] = line[i].TextRect().Width();
+        }
+    
+    const CFont *bigFont = line[0].Font();
+    const CFont *smallFont = line[1].Font(); 
+
+    // wrap text
+    TInt off = aText.Locate('\n');
+    TPtrC rest( aText );
+    rest.Set( aText.Right(aText.Length() - off - 1 ));
+
+    HBufC* firstLine = NULL;
+    
+    TRAPD( error1, 
+            {
+            firstLine = HBufC::NewL(
+                aText.Left(off).Length() + KAknBidiExtraSpacePerLine );
+            });
+
+    if (error1 == KErrNone)
+        {
+        TPtr firstLinePtr = firstLine->Des();
+        AknBidiTextUtils::ConvertToVisualAndClip(
+                                aText.Left(off),
+                                firstLinePtr,
+                                *bigFont,
+                                lineLength[0],
+                                lineLength[0] );
+        }
+    
+    CArrayFix<TInt>* wrapWidthArray = new( ELeave ) CArrayFixFlat<TInt>(KTen);
+    CleanupStack::PushL( wrapWidthArray );
+    
+    // wrap small font lines
+    wrapWidthArray->Reset();
+    for ( i = 1; i < KFour; i++ )
+        {
+		TInt temp = lineLength[i];
+		if(wrapWidthArray->Count() >= 0  && wrapWidthArray->Count() < KTen)
+			{
+			wrapWidthArray->AppendL( temp );
+			}
+        }
+    
+    TRAPD( error2,AknBidiTextUtils::ConvertToVisualAndWrapToStringL( 
+        rest, *wrapWidthArray, *smallFont, buffer, ETrue ));
+    
+    CleanupStack::PopAndDestroy(wrapWidthArray);
+    
+    
+    TPtrC ptr[KFour];
+    TInt n = 0;
+    
+    if (error1 == KErrNone)
+        {
+        ptr[0].Set( firstLine->Des() );
+        }
+    if ( error1 != KErrNone || error2 != KErrNone )
+        {
+        ptr[0].Set(aText.Left(off));
+        }
+    else
+        {
+        TInt newlines[KThree];
+        n = 0;
+        for ( i = 0; i < buffer.Length(); i++ )
+            {
+            if ( buffer[i] != '\n' )
+                {
+                continue;
+                }
+            newlines[n] = i;
+            
+            n++;
+            if ( n >= KThree )
+                {
+                break;
+                }
+            }
+        
+        if ( n >= 1 )
+            {
+            ptr[1].Set( buffer.Left( newlines[0] ) );
+            }
+        if ( n >= 2 )
+            {
+            ptr[2].Set( buffer.Mid( newlines[0] + 1, newlines[1] - newlines[0] - 1 ) );
+            }
+        if ( n >= KThree )
+            {
+            ptr[3].Set( buffer.Mid( newlines[1] + 1, newlines[2] - newlines[1] - 1 ) );
+            }
+        }
+    
+    // draw texts
+    aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
+    aGc.SetOpaque( ETrue ); // transparency off
+    
+    for ( i = 0; i < KFour; i++ )
+        {
+        line[i].DrawText( aGc,ptr[i], EFalse, aColor );
+        }
+ 
+    aGc.SetOpaque( EFalse ); // transparency back on  
+    delete firstLine;
+    IRLOG_DEBUG("CIRAdvertisingListBoxData::DrawEmptyListDrawMoreThanTwoLinesL-Exiting" );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxData::~CIRAdvertisingListBoxData
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBoxData::~CIRAdvertisingListBoxData()
+    {
+    delete iIcon;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxDrawer::CIRAdvertisingListBoxDrawer
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBoxDrawer::CIRAdvertisingListBoxDrawer( MTextListBoxModel* aTextListBoxModel,
+                                                          const CFont* aFont,
+                                                          CIRAdvertisingListBoxData* 
+                                                          aFormattedCellData,
+                                                          CIRAdvertisingListBox* aListBox,
+                      									  CIRCategoryAdvertisingListBox* aCatListBox) 
+    : CFormattedCellListBoxItemDrawer( aTextListBoxModel, aFont, aFormattedCellData ),
+      iListBox(aListBox),
+      iCatListBox(aCatListBox)
+
+    {
+    }
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBoxDrawer::DrawActualItem
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBoxDrawer::DrawActualItem( TInt aItemIndex, 
+                                                  const TRect& aActualItemRect, 
+                                                  TBool aItemIsCurrent, 
+                                                  TBool aViewIsEmphasized, 
+                                                  TBool aViewIsDimmed,
+                                                  TBool aItemIsSelected) const
+	{
+	IRLOG_DEBUG( "CIRAdvertisingListBox::DrawActualItem - Entering" );
+	CIRAdvertisingListBoxData* formattedCellData = static_cast<CIRAdvertisingListBoxData*>
+														( FormattedCellData() );
+	if (aItemIndex == 0)
+		{
+		TBool flag(EFalse);
+		if (iListBox)
+			{
+			flag = iListBox->GetLastPlayed();
+			}
+		TBool selectedItem =aItemIsSelected;
+		if(flag)	
+			{
+			selectedItem = EFalse;	
+			}
+		CFormattedCellListBoxItemDrawer::DrawActualItem( aItemIndex, 
+		                                                 aActualItemRect, 
+		                                                 aItemIsCurrent, 
+		                                                 aViewIsEmphasized, 
+		                                                 aViewIsDimmed,
+		                                                 selectedItem);
+
+
+		// For MainView the folowing code is executed for hacking to make the
+		// (NoMatches) string to be visible. The icon used for drawing in main
+		// view is totally transparent, which makes it invisible.
+		if (aItemIndex == 0 && formattedCellData->AdvertisementIcon() )
+		    {
+		    const CFbsBitmap* bitmap = formattedCellData->AdvertisementIcon()->Bitmap();
+		    const CFbsBitmap* mask = formattedCellData->AdvertisementIcon()->Mask();
+		    TSize bitmapSize = bitmap->SizeInPixels();
+		    TRect maskRect;
+		    if ( mask )
+		        {
+		        maskRect.SetSize( mask->SizeInPixels() );
+		        }
+		    
+		    TPoint bitmapPos( aActualItemRect.iTl.iX + 
+		    				 (aActualItemRect.Width() - bitmapSize.iWidth)/2,
+		                      aActualItemRect.iTl.iY + 
+		                      (aActualItemRect.Height() - bitmapSize.iHeight)/2 );
+
+		    Gc()->BitBltMasked( bitmapPos, bitmap, maskRect, mask, EFalse );
+		    }
+
+		}
+	else
+		{
+		CFormattedCellListBoxItemDrawer::DrawActualItem( aItemIndex, 
+		                                                 aActualItemRect, 
+		                                                 aItemIsCurrent, 
+		                                                 aViewIsEmphasized, 
+		                                                 aViewIsDimmed,
+		                                                 aItemIsSelected);
+		}
+
+	IRLOG_DEBUG( "CIRAdvertisingListBox::DrawActualItem - Exiting" );
+	}
+        
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::CIRAdvertisingListBox
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBox::CIRAdvertisingListBox()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::SetGC
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::SetGC(CWindowGc& aGc)
+	{
+	iGc = &aGc;	
+	}
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::SetControlFlag
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::SetControlFlag(TBool aControlFlag)
+	{
+    CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+	irListBoxData->SetControlFlag(aControlFlag);	
+	}
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::Draw
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::Draw(const TRect& aRect) const 
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBox::Draw - Entering" );
+	CAknDoubleLargeStyleListBox::Draw(aRect);
+	
+    TInt count = Model()->NumberOfItems();
+    CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+	if(irListBoxData->GetControlFlag())
+		{
+		if(GetActiveView())
+			{	
+			if(GetFavouritesCount() != 0)
+				{
+				if(count == 0 && !GetLastPlayed())
+					{
+					TRAP_IGNORE(View()->SetListEmptyTextL(*iNoMatchesTextResource));
+					}
+				else if(count == 1 && GetLastPlayed())
+					{
+					TRAP_IGNORE(irListBoxData->DrawEmptyListL(*iGc,*iNoMatchesTextResource,Rect()));	
+					}
+				}
+			else
+				{
+				if(GetLastPlayed())
+					{
+					TRAP_IGNORE(irListBoxData->DrawEmptyListL(*iGc,*iFindStationsTextResource,Rect()));	
+					}
+				else
+					{
+					TRAP_IGNORE(View()->SetListEmptyTextL(*iFindStationsTextResource));	
+					}
+				}
+			}
+		else
+			{
+			if(count == 1 && irListBoxData->AdvertisementIcon())
+				{
+				TRAP_IGNORE(irListBoxData->DrawEmptyListL(*iGc,*iNoMatchesTextResource,Rect()));	
+				}
+			else
+				{
+				TRAP_IGNORE(View()->SetListEmptyTextL(*iNoMatchesTextResource));
+				}
+			}
+		irListBoxData->SetControlFlag(EFalse);
+		}
+
+    IRLOG_DEBUG( "CIRAdvertisingListBox::Draw - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::~CIRAdvertisingListBox
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBox::~CIRAdvertisingListBox()
+	{
+	IRLOG_DEBUG( "CIRAdvertisingListBox::~CIRAdvertisingListBox - Entering" );
+	if(iFindStationsTextResource)
+		{
+		delete iFindStationsTextResource;
+		iFindStationsTextResource = NULL;
+		}
+	if(iNoMatchesTextResource)
+		{
+		delete iNoMatchesTextResource;
+		iNoMatchesTextResource = NULL;	
+		}
+	IRLOG_DEBUG( "CIRAdvertisingListBox::~CIRAdvertisingListBox - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::SetListItemFormat
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::SetListItemFormat(  HBufC* aItemFormat)
+    {
+    IRLOG_DEBUG( "CIRAdvertisingListBox::SetListItemFormat - Entering" );
+	iItemFormat = aItemFormat;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::SetAdvertisementIconL
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::SetAdvertisementIconL( CGulIcon* aIcon,TBool aMainView )
+    {
+    IRLOG_DEBUG( "CIRAdvertisingListBox::SetAdvertisementIconL - Entering" );
+    
+    CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    
+    // add listitem only, if it doesn't exist yet.
+    if ( !aMainView && !irListBoxData->AdvertisementIcon() )
+        {
+        TInt currentItemIndex = CurrentItemIndex();
+        TInt topItemIndex = TopItemIndex();
+
+        
+        CAknFilteredTextListBoxModel* listBoxModel = static_cast<CAknFilteredTextListBoxModel*>
+        												( Model() );
+        CDesCArraySeg* items = static_cast<CDesCArraySeg*>( listBoxModel->ItemTextArray() );
+        items->InsertL( 0, *iItemFormat );
+        
+        HandleItemAdditionL();
+        if ( currentItemIndex >= 0 )
+            {
+            SetCurrentItemIndex( currentItemIndex + 1 );
+            }
+        if ( topItemIndex > 0 )
+            {
+            SetTopItemIndex( topItemIndex + 1 );
+            }
+        }
+    // always replace the existing image.
+    irListBoxData->SetAdvertisementIcon( aIcon );
+    
+    DrawDeferred();     
+    IRLOG_DEBUG( "CIRAdvertisingListBox::SetAdvertisementIconL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::ClearAdvertisementIcon
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::ClearAdvertisementIcon()
+    {
+    IRLOG_DEBUG( "CIRAdvertisingListBox::ClearAdvertisementIcon - Entering" );
+   CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    irListBoxData->SetAdvertisementIcon( NULL );
+    IRLOG_DEBUG( "CIRAdvertisingListBox::ClearAdvertisementIcon - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::AdvertisementIcon
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRAdvertisingListBox::AdvertisementIcon()
+    {
+    IRLOG_DEBUG( "CIRAdvertisingListBox::AdvertisementIcon - Entering" );
+  	CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    IRLOG_DEBUG( "CIRAdvertisingListBox::AdvertisementIcon - Exiting" );
+    return irListBoxData->AdvertisementIcon();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRAdvertisingListBox::CreateItemDrawerL
+// ---------------------------------------------------------------------------
+//
+void CIRAdvertisingListBox::CreateItemDrawerL()
+    {
+    IRLOG_DEBUG( "CIRAdvertisingListBox::CreateItemDrawerL - Entering" );
+    CIRAdvertisingListBoxData* formattedCellListBoxData = CIRAdvertisingListBoxData::NewL();
+    CleanupStack::PushL( formattedCellListBoxData );
+    const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont );
+    
+    iItemDrawer = new (ELeave) CIRAdvertisingListBoxDrawer( Model(), font,
+                                                            formattedCellListBoxData,this, NULL );
+    CleanupStack::Pop( formattedCellListBoxData );
+    IRLOG_DEBUG( "CIRAdvertisingListBox::CreateItemDrawerL - Exiting" );
+    }
+// --------------------------------------------------------------------------
+// CIRAdvertisingListBox::ConstructL()
+// 
+// --------------------------------------------------------------------------
+void CIRAdvertisingListBox::ConstructL(const CCoeControl* aParent, 
+                    TInt aFlags,CAknFilteredTextListBoxModel* aFilteredmodel)
+    {
+    IRLOG_DEBUG( "CIRAdvertisingListBox::ConstructL - Entering" );
+    iModel=aFilteredmodel;
+    CreateItemDrawerL();
+
+    EnableExtendedDrawingL();
+    iItemDrawer->SetDrawMark(EFalse);
+    
+	if(iFindStationsTextResource)
+		{
+		delete iFindStationsTextResource;
+		iFindStationsTextResource = NULL;
+		}
+	HBufC* findStationsTextResource = StringLoader::LoadLC(R_IRAPP_FAVOURITES_LIST_EMPTY);
+	iFindStationsTextResource = HBufC::NewL(findStationsTextResource->Length());
+	iFindStationsTextResource->Des().Append(findStationsTextResource->Des());
+	CleanupStack::PopAndDestroy( findStationsTextResource );
+	
+	if(iNoMatchesTextResource)
+		{
+		delete iNoMatchesTextResource;
+		iNoMatchesTextResource = NULL;	
+		}
+	HBufC* noMatchesTextResource = StringLoader::LoadLC(R_IRAPP_STATIONLIST_NOMATCHES);
+	iNoMatchesTextResource = HBufC::NewL(noMatchesTextResource->Length());
+	iNoMatchesTextResource->Des().Append(noMatchesTextResource->Des());
+	CleanupStack::PopAndDestroy( noMatchesTextResource );
+
+    CEikListBox::ConstructL(aParent,aFlags);
+    IRLOG_DEBUG( "CIRAdvertisingListBox::ConstructL - Exiting" );
+    }
+// --------------------------------------------------------------------------
+// CIRAdvertisingListBox::SetLastPlayed()
+// sets the status of lastplayed
+// --------------------------------------------------------------------------
+void CIRAdvertisingListBox::SetLastPlayed(TBool aLastPlayed)
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBox::SetLastPlayed " );
+	iLastPlayed = aLastPlayed;	
+	}
+
+// --------------------------------------------------------------------------
+// CIRAdvertisingListBox::GetLastPlayed()
+// return the status of lastplayed
+// --------------------------------------------------------------------------
+TBool  CIRAdvertisingListBox::GetLastPlayed() const
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetLastPlayed " );
+	return iLastPlayed;	
+	}
+// --------------------------------------------------------------------------
+// CIRAdvertisingListBox::GetFavouritesCount()
+// returns the number of favourates present.
+// --------------------------------------------------------------------------
+TInt CIRAdvertisingListBox::GetFavouritesCount() const
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetFavouritesCount " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+	TInt favCount = appUi->iFavPresets->iFavPresetList.Count();
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetFavouritesCount - Exiting" );
+    return favCount;
+	}
+// --------------------------------------------------------------------------
+// CIRAdvertisingListBox::GetFavouritesCount()
+// returns the number of favourates present.
+// --------------------------------------------------------------------------
+TBool CIRAdvertisingListBox::GetFilteredFlag() const
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetFavouritesCount " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+	TBool flag = appUi->iMainView->GetMainContainer()->GetFilteredFlag();
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetFavouritesCount - Exiting" );
+    return flag;
+	}
+// --------------------------------------------------------------------------
+// CIRAdvertisingListBox::GetActiveView()
+// returns whether the active view is mainView or not.
+// --------------------------------------------------------------------------
+TBool CIRAdvertisingListBox::GetActiveView() const
+	{
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetActiveView " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+    IRLOG_DEBUG( "CIRAdvertisingListBox::GetActiveView - Exiting" );
+	if(appUi->iMainView->GetMainContainer())
+		{
+		return ETrue;	
+		}
+	else
+		{
+		return EFalse;	
+		}
+	}
+/******************************Advertisement Listbox for Category View************/
+
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::CIRCategoryAdvertisingListBox
+// ---------------------------------------------------------------------------
+//
+CIRCategoryAdvertisingListBox::CIRCategoryAdvertisingListBox()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::SetGC
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::SetGC(CWindowGc& aGc)
+	{
+	iGc = &aGc;	
+	}
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::SetControlFlag
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::SetControlFlag(TBool aControlFlag)
+	{
+    CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+	irListBoxData->SetControlFlag(aControlFlag);	
+	}
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::Draw
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::Draw(const TRect& aRect) const 
+	{
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::Draw - Entering" );
+	CAknDoubleStyleListBox::Draw(aRect);
+
+    TInt count = Model()->NumberOfItems();
+    CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    if(irListBoxData->GetControlFlag())
+	    {
+	    if(count == 1 && irListBoxData->AdvertisementIcon())
+		    {
+			TRAP_IGNORE(irListBoxData->DrawEmptyListL(*iGc,*iTextResource,Rect()));	
+			}
+	    else if(count == 0)
+		    {
+			TRAP_IGNORE(View()->SetListEmptyTextL(*iTextResource));
+		    }
+		irListBoxData->SetControlFlag(EFalse);
+	    }
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::Draw - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::~CIRCategoryAdvertisingListBox
+// ---------------------------------------------------------------------------
+//
+CIRCategoryAdvertisingListBox::~CIRCategoryAdvertisingListBox()
+	{
+	IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::~CIRCategoryAdvertisingListBox - Entering" );
+	if(iTextResource)
+		{
+		delete iTextResource;
+		iTextResource = NULL;
+		}
+	IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::~CIRCategoryAdvertisingListBox - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::SetListItemFormat
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::SetListItemFormat(  HBufC* aItemFormat )
+    {
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::SetListItemFormat - Entering" );
+	__ASSERT_ALWAYS( !iItemFormat, User::Panic( KNullDesC, KErrCorrupt ) );
+    iItemFormat = aItemFormat;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::SetAdvertisementIconL
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::SetAdvertisementIconL( CGulIcon* aIcon )
+    {
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::SetAdvertisementIconL - Entering" );
+	__ASSERT_ALWAYS( iItemFormat, User::Panic( KNullDesC, KErrCorrupt  ) );
+    
+    CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    
+    // add listitem only, if it doesn't exist yet.
+    if ( !irListBoxData->AdvertisementIcon() )
+        {
+        TInt currentItemIndex = CurrentItemIndex();
+        TInt topItemIndex = TopItemIndex();
+
+     
+        CAknFilteredTextListBoxModel* listBoxModel = static_cast<CAknFilteredTextListBoxModel*>
+        											( Model() );
+        CDesCArraySeg* items = static_cast<CDesCArraySeg*>( listBoxModel->ItemTextArray() );
+        items->InsertL( 0, *iItemFormat );
+        
+        HandleItemAdditionL();
+        if ( currentItemIndex >= 0 )
+            {
+            SetCurrentItemIndex( currentItemIndex + 1 );
+            }
+        if ( topItemIndex > 0 )
+            {
+            SetTopItemIndex( topItemIndex + 1 );
+            }
+        }
+    // always replace the existing image.
+    irListBoxData->SetAdvertisementIcon( aIcon );
+    
+    DrawDeferred();     
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::SetAdvertisementIconL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::ClearAdvertisementIcon
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::ClearAdvertisementIcon()
+    {
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::ClearAdvertisementIcon - Entering" );
+   CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    irListBoxData->SetAdvertisementIcon( NULL );
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::ClearAdvertisementIcon - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::AdvertisementIcon
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRCategoryAdvertisingListBox::AdvertisementIcon()
+    {
+     IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::AdvertisementIcon - Entering" );
+  CIRAdvertisingListBoxData* irListBoxData = 
+        static_cast<CIRAdvertisingListBoxData*>( ItemDrawer()->FormattedCellData() );
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::AdvertisementIcon - Exiting" );
+    return irListBoxData->AdvertisementIcon();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::CreateItemDrawerL
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryAdvertisingListBox::CreateItemDrawerL()
+    {
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::CreateItemDrawerL - Entering" );
+    CIRAdvertisingListBoxData* formattedCellListBoxData = CIRAdvertisingListBoxData::NewL();
+    CleanupStack::PushL( formattedCellListBoxData );
+    const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont );
+    
+    iItemDrawer = new (ELeave) CIRAdvertisingListBoxDrawer( Model(), font,
+                                                            formattedCellListBoxData,NULL, this );
+    CleanupStack::Pop( formattedCellListBoxData );
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::CreateItemDrawerL - Exiting" );
+    }
+// --------------------------------------------------------------------------
+// CIRCategoryAdvertisingListBox::ConstructL()
+// 
+// --------------------------------------------------------------------------
+void CIRCategoryAdvertisingListBox::ConstructL(const CCoeControl* aParent, 
+                    TInt aFlags,CAknFilteredTextListBoxModel* aFilteredmodel)
+    {
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::ConstructL - Entering" );
+    iModel=aFilteredmodel;
+    CreateItemDrawerL();
+
+    EnableExtendedDrawingL();
+    iItemDrawer->SetDrawMark(EFalse);
+
+	if(iTextResource)
+		{
+		delete iTextResource;
+		iTextResource = NULL;
+		}
+	HBufC* textResource = StringLoader::LoadLC(R_IRAPP_STATIONLIST_NOMATCHES);
+	iTextResource = HBufC::NewL(textResource->Length());
+	iTextResource->Des().Append(textResource->Des());
+	CleanupStack::PopAndDestroy( textResource );
+
+    CEikListBox::ConstructL(aParent,aFlags);
+    IRLOG_DEBUG( "CIRCategoryAdvertisingListBox::ConstructL - Exiting" );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/iriconloader.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <akniconutils.h>
+#include <gulicon.h>
+
+#include "irdebug.h"
+#include "iriconloader.h"
+
+//---------------------------------------------------------------------------- 
+// Function:CIconFileProvider
+// this function is the Default constructor
+//---------------------------------------------------------------------------- 
+EXPORT_C CIconFileProvider::CIconFileProvider()
+	{
+	IRLOG_DEBUG( "CIconFileProvider::CIconFileProvider" );
+	}
+
+
+//---------------------------------------------------------------------------- 
+//  CIconFileProvider::NewL(..)
+//  Creates a new instance of CIconFileProvider view
+//  @param aRect Sets the control's extent, specifying a rectangle.
+//  @return An instance of CIconFileProvider
+//---------------------------------------------------------------------------- 
+//
+EXPORT_C CIconFileProvider* CIconFileProvider::NewL(const TDesC& aFilename)
+	{
+    IRLOG_DEBUG( "CIconFileProvider::NewL" );  
+    CIconFileProvider* self = new (ELeave) CIconFileProvider();
+    CleanupStack::PushL(self);
+    self->ConstructL(aFilename);
+    CleanupStack::Pop( self ); // self
+    IRLOG_DEBUG( "CIconFileProvider::NewL - Exiting." );
+    return self;
+	}
+
+//---------------------------------------------------------------------------- 
+//  CIconFileProvider::ConstructL(..)
+//  Second phase constructor
+//  @param aFilename Full private path of the application
+//  @return void
+//---------------------------------------------------------------------------- 
+//
+void CIconFileProvider::ConstructL(const TDesC& aFilename)
+	{
+    IRLOG_DEBUG( "CIconFileProvider::ConstructL" );
+	iFilename = aFilename.AllocL();
+    IRLOG_DEBUG( "CIconFileProvider::ConstructL - Exiting." );
+	}
+
+
+//---------------------------------------------------------------------------- 
+// CIconFileProvider:: ~CIconFileProvider()
+// Default Destructor
+//----------------------------------------------------------------------------
+CIconFileProvider::	~CIconFileProvider()
+	{
+	IRLOG_DEBUG( "CIconFileProvider::~CIconFileProvider" );
+	delete iFilename;
+	}
+
+
+//---------------------------------------------------------------------------- 
+//  CIconFileProvider::CreateIconL(..)
+//  Creates an icon.
+//  The icon is created by loading the image bitmap identified by aBitmapId 
+//  and the mask identified by aMaskId. It returns a pointer to the icon and 
+// transfers ownership.
+//---------------------------------------------------------------------------- 
+//
+EXPORT_C CGulIcon* CIconFileProvider::CreateIconL(TInt aBitmapId,
+	TInt aMaskId) const
+	{
+    IRLOG_DEBUG( "CIconFileProvider::CreateIconL" );
+	CGulIcon* icon = CGulIcon::NewL();
+	CFbsBitmap* mask = NULL;
+	CFbsBitmap* bitmap = NULL;
+	AknIconUtils::CreateIconL(bitmap , mask , *iFilename, aBitmapId , aMaskId);    
+	icon->SetBitmap(bitmap);
+	icon->SetMask(mask);
+    IRLOG_DEBUG( "CIconFileProvider::CreateIconL - Exiting." );
+	return icon;
+	}
+
+//---------------------------------------------------------------------------- 
+//  CIconFileProvider::CreateIconL(.)
+//  Creates an icon.
+//  The icon is created by loading the image bitmap identified by aBitmapId.
+//  It returns a pointer to the icon and transfers ownership.
+//  @param aBitmapId The bitmap ID.
+//  @param aMaskId The bitmap mask ID.
+//  @return A pointer to the icon
+//---------------------------------------------------------------------------- 
+//
+EXPORT_C CFbsBitmap* CIconFileProvider::CreateIconL(TInt aBitmapId) const
+	{
+    IRLOG_DEBUG( "CIconFileProvider::CreateIconL" );
+	if(aBitmapId!=-1)
+		{
+		CFbsBitmap* bitmap = NULL;
+		
+		//The icon is created by loading the image bitmap identified
+		// by aBitmapId.
+		bitmap = AknIconUtils::CreateIconL(*iFilename, aBitmapId);    
+		return bitmap;
+		}
+    IRLOG_DEBUG( "CIconFileProvider::CreateIconL - Exiting." );
+	return NULL;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irimageconverter.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2008-2008 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:  Image converter
+*
+*/
+
+
+#include "irimageconverter.h"
+#include "irimageconverterimpl.h"
+
+/**
+ * Image converter private data.
+ */ 
+struct CIRImageConverter::TIRImageConverterPrivateData
+    {
+    
+    /**
+     * Image converter implementation.
+     * Not owned.
+     */
+    CIRImageConverterImpl* iConverterImpl;
+    
+    };
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRImageConverter* CIRImageConverter::NewL()
+    {
+    CIRImageConverter* self = new ( ELeave ) CIRImageConverter;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRImageConverter::CIRImageConverter()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::ConstructL()
+    {
+    iData = new ( ELeave ) TIRImageConverterPrivateData;
+    
+    iData->iConverterImpl = CIRImageConverterImpl::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRImageConverter::~CIRImageConverter()
+    {
+    if ( iData )
+        {
+        delete iData->iConverterImpl;
+        }
+    delete iData;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the raw image data to be converted.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::SetDataL( const TDesC8& aData )
+    {
+    iData->iConverterImpl->SetDataL( aData );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the image conversion observer.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::SetObserver( MIRImageConverterObserver* aObserver )
+    {
+    iData->iConverterImpl->SetObserver( aObserver );
+    }
+
+// ---------------------------------------------------------------------------
+// Enables or disables animations.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::EnableAnimations( TBool aEnable )
+    {
+    iData->iConverterImpl->EnableAnimations( aEnable );
+    }
+
+// ---------------------------------------------------------------------------
+// Return a flag indicating whether the current raw image data is animated.
+// ---------------------------------------------------------------------------
+//
+TBool CIRImageConverter::IsAnimated() const
+    {
+    return iData->iConverterImpl->IsAnimated();
+    }
+
+// ---------------------------------------------------------------------------
+// Enables or disables maintaining the aspect ratio when scaling.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::MaintainAspectRatio( TBool aMaintain )
+    {
+    iData->iConverterImpl->MaintainAspectRatio( aMaintain );
+    }
+
+// ---------------------------------------------------------------------------
+// Starts the image conversion.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::StartL( const TSize& aTarget, TInt aId )
+    {
+    iData->iConverterImpl->StartL( aTarget, aId );
+    }
+
+// ---------------------------------------------------------------------------
+// Stops the conversion.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::Stop()
+    {
+    iData->iConverterImpl->Stop();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the converted bitmap.
+// ---------------------------------------------------------------------------
+//
+const CFbsBitmap* CIRImageConverter::Bitmap() const
+    {
+    return iData->iConverterImpl->Bitmap();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the converted mask.
+// ---------------------------------------------------------------------------
+//
+const CFbsBitmap* CIRImageConverter::Mask() const
+    {
+    return iData->iConverterImpl->Mask();
+    }
+
+// ---------------------------------------------------------------------------
+// Transfers ownership of the converted bitmap and mask to the caller.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverter::TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+    {
+    iData->iConverterImpl->TransferBitmapOwnership( aBitmap, aMask );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irimageconverterimpl.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,801 @@
+/*
+* Copyright (c) 2008-2008 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:  Internal image converter implementation
+*
+*/
+
+
+#include <aknlayoutfont.h>
+#include <aknutils.h>
+#include <bitmaptransforms.h>
+#include <coemain.h>
+#include <gulicon.h>
+#include <ihlbitmaputil.h>
+#include <imageconversion.h>
+#include <svgengineinterfaceimpl.h>
+
+
+#include "irimageconverterimpl.h"
+#include "irimageconverterobserver.h"
+#include "irdebug.h"
+// Image decoder options.
+const CImageDecoder::TOptions KIRImageDecoderOptions = CImageDecoder::EOptionAlwaysThread;
+// Bitmap scaler quality.
+const CBitmapScaler::TQualityAlgorithm KIRBitmapScalerQualityAlgorithm = 
+											CBitmapScaler::EMaximumQuality;
+const TInt KFour=4;
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::NewL()
+// ---------------------------------------------------------------------------
+//
+CIRImageConverterImpl* CIRImageConverterImpl::NewL()
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::NewL - Entering" );
+    CIRImageConverterImpl* self = new ( ELeave ) CIRImageConverterImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRImageConverterImpl::CIRImageConverterImpl()
+    : CActive( CActive::EPriorityStandard ),
+      iEnableAnimations( ETrue ),
+      iMaintainAspectRatio( ETrue )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::ConstructL - entering" );
+    iNotifyObserverCallBack = new ( ELeave ) CAsyncCallBack( 
+        TCallBack( StaticNotifyObserverCallBack, this ), CActive::EPriorityHigh );
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::~CIRImageConverter()
+// ---------------------------------------------------------------------------
+//
+CIRImageConverterImpl::~CIRImageConverterImpl()
+    {
+    Cancel();
+
+    iFrames.ResetAndDestroy();
+    iFrames.Close();
+    
+    delete iDecoder;
+    delete iScaler;
+    delete iSvgEngine;
+    delete iProcessedBitmap;
+    delete iProcessedMask;
+    delete iBitmap;
+    delete iMask;
+    delete iLastFrameBitmap;
+    delete iLastFrameMask;
+    delete iNotifyObserverCallBack;
+    delete iFrameTimer;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::SetDataL( const TDesC8& aData )
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::SetDataL( const TDesC8& aData )
+    {
+    IRRDEBUG2( "CIRImageConverterImpl::SetDataL - Entering", KNullDesC );
+    Cleanup( ETrue );
+    iData.Set( aData );
+    CreateDataHandlerL();
+    IRRDEBUG2( "CIRImageConverterImpl::SetDataL - Exiting", KNullDesC );
+   }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::SetObserver( MIRImageConverterObserver* aObserver )
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::SetObserver( MIRImageConverterObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::EnableAnimations( TBool aEnable )
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::EnableAnimations( TBool aEnable )
+    {
+    __ASSERT_DEBUG( iState == EIRStateIdle, User::Invariant() );
+    iEnableAnimations = aEnable;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::IsAnimated() const
+// ---------------------------------------------------------------------------
+//
+TBool CIRImageConverterImpl::IsAnimated() const
+    {
+    __ASSERT_DEBUG( iState != EIRStateIdle, User::Invariant() );
+    return iIsAnimated;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::MaintainAspectRatio( TBool aMaintain )
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::MaintainAspectRatio( TBool aMaintain )
+    {
+    __ASSERT_DEBUG( iState == EIRStateIdle, User::Invariant() );
+    iMaintainAspectRatio = aMaintain;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::StartL( const TSize& aTarget, TInt aId )
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::StartL( const TSize& aTarget, TInt aId )
+	{
+    IRRDEBUG2( "CIRImageConverterImpl::StartL - Entering", KNullDesC );
+	if ( iState != EIRStateBitmapDecoderInitialized && iState != EIRStateSvgEngineInitialized )
+		{
+		if ( iState == EIRStateIdle )
+			{
+		    IRRDEBUG2("CIRImageConverterImpl::StartL, leave with KErrNotReady", KNullDesC);
+			User::Leave( KErrNotReady );
+			}
+		else
+			{
+		    IRRDEBUG2("CIRImageConverterImpl::StartL, leave with KErrInUse", KNullDesC);
+			User::Leave( KErrInUse );
+			}
+		}
+	iTargetSize = aTarget;
+	iId = aId;
+	if ( iState == EIRStateSvgEngineInitialized )
+		{
+		// The SVG-T engine has been initialized with dummy 0x0 bitmaps, so updating those must be handled here.
+	    IRRDEBUG2( "CIRImageConverterImpl::StartL - if begin", KNullDesC );
+		CreateBitmapL( iTargetSize, iBitmap, iMask );
+		iSvgEngine->SetFrameBuffer( iBitmap );
+		iState = EIRStateConvertingSvg;
+		iSvgEngine->Start();
+		IRRDEBUG2( "CIRImageConverterImpl::StartL - if end", KNullDesC );
+		}
+	else
+		{
+	    IRRDEBUG2( "CIRImageConverterImpl::StartL - else begin", KNullDesC );
+		iState = EIRStateConvertingBitmap;
+		IRRDEBUG2( "CIRImageConverterImpl::StartL, iDecorder = %d", iDecoder);
+		iDecoder->Convert( &iStatus, *iBitmap, *iMask );
+		IRRDEBUG2( "CIRImageConverterImpl::StartL - else-exit call setactive", KNullDesC );
+		SetActive();
+		}
+	IRRDEBUG2( "CIRImageConverterImpl::StartL - Exiting", KNullDesC );
+	}
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::Stop()
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::Stop()
+	{
+    IRRDEBUG2( "CIRImageConverterImpl::Stop - Entering", KNullDesC );
+	Cancel();
+	if ( iSvgEngine )
+	    {
+	    iSvgEngine->Stop();
+	    }
+	TIRImageConverterState state = iState;
+	Cleanup();
+	if ( state != EIRStateIdle && state != EIRStateBitmapDecoderInitialized && 
+		state != EIRStateSvgEngineInitialized )
+	    {
+	    NotifyObserver( KErrCancel );
+	    }
+	IRRDEBUG2( "CIRImageConverterImpl::Stop - Exiting",KNullDesC );
+	}
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::Bitmap() const
+// ---------------------------------------------------------------------------
+//
+const CFbsBitmap* CIRImageConverterImpl::Bitmap() const
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::Bitmap - Entering" );
+    return iProcessedBitmap;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::Mask() const
+// ---------------------------------------------------------------------------
+//
+const CFbsBitmap* CIRImageConverterImpl::Mask() const
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::Mask - Entering" );
+    return iProcessedMask;
+    }
+
+// ---------------------------------------------------------------------------
+// @see CIRImageConverter::TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+    {
+    aBitmap = iProcessedBitmap;
+    iProcessedBitmap = NULL;
+    aMask = iProcessedMask;
+    iProcessedMask = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Invoked when the active object is cancelled.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::DoCancel()
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::DoCancel - Entering" );
+    if ( iDecoder )
+        {
+        iDecoder->Cancel();
+        }
+    if ( iScaler )
+        {
+        iScaler->Cancel();
+        }
+	IRLOG_DEBUG( "CIRImageConverterImpl::DoCancel - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Invoked when the active object completes an asynchronous request.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::RunL()
+	{
+	IRLOG_DEBUG( "CIRImageConverterImpl::RunL - Entering" );
+	if ( iStatus.Int() == KErrNone )
+		{
+		switch ( iState )
+			{
+			case EIRStateConvertingBitmap:
+				{
+				if ( iIsAnimated && iEnableAnimations )
+					{
+					CGulIcon* icon = CGulIcon::NewLC();
+
+					icon->SetBitmapsOwnedExternally( EFalse );
+					icon->SetBitmap( iBitmap );
+					icon->SetMask( iMask );
+
+					iBitmap = NULL;
+					iMask = NULL;
+
+					iFrames.AppendL( icon );
+					CleanupStack::Pop( icon );
+
+					if ( iFrames.Count() < iDecoder->FrameCount() )
+						{
+						CreateBitmapL( iDecoder->FrameInfo( iFrames.Count() ).iOverallSizeInPixels,
+								 iBitmap, iMask );
+
+						iDecoder->Convert( &iStatus, *iBitmap, *iMask, iFrames.Count() );
+						SetActive();
+						}
+					else
+						{
+						StartBitmapAnimationL();
+						}
+					}
+				else
+					{
+					iState = EIRStateScalingBitmap;
+					iScaler->Scale( &iStatus, *iBitmap, iTargetSize, iMaintainAspectRatio );
+					SetActive();
+					}
+				}
+			break;
+			case EIRStateScalingBitmap:
+			iState = EIRStateScalingBitmapMask;
+			iScaler->Scale( &iStatus, *iMask, iTargetSize, iMaintainAspectRatio );
+			SetActive();
+			break;
+			case EIRStateScalingBitmapMask:
+			NotifyObserver( KErrNone );
+			break;
+			default:
+			break;
+			}
+		}
+	else
+		{
+		NotifyObserver( iStatus.Int() );
+		}
+	IRLOG_DEBUG( "CIRImageConverterImpl::RunL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Invoked when RunL leaves.
+// ---------------------------------------------------------------------------
+//
+TInt CIRImageConverterImpl::RunError( TInt aError )
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::NewL - Entering" );
+    NotifyObserver( aError );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSvgRequestObserver.
+// Invoked when the bitmap has been updated by the SVG-T engine.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::UpdateScreen()
+    {
+    iSvgEngine->GenerateMask( iMask );
+    // SVG-T engine MUST NOT be destroyed here as its internal implementation
+    // relies on it existing after execution leaves this method. This means
+    // that the observer notification must be asynchronous
+    NotifyObserver( KErrNone, EFalse );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSvgRequestObserver.
+// Not implemented.
+// ---------------------------------------------------------------------------
+//
+TBool CIRImageConverterImpl::ScriptCall( const TDesC& /*aScript*/, CSvgElementImpl* 
+											/*aCallerElement*/ )
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSvgRequestObserver.
+// Not implemented.
+// ---------------------------------------------------------------------------
+//
+TInt CIRImageConverterImpl::FetchImage( const TDesC& /*aUri*/, RFs& /*aSession*/, RFile& 
+																		/*aFileHandle*/ )
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSvgRequestObserver.
+// Not implemented.
+// ---------------------------------------------------------------------------
+//
+TInt CIRImageConverterImpl::FetchFont( const TDesC& /*aUri*/, RFs& /*aSession*/, RFile& 
+																		/*aFileHandle*/ )
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSvgRequestObserver.
+// Not implemented.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::UpdatePresentation( const TInt32& /*aNoOfAnimation*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Performs cleanup on the converter object.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::Cleanup( TBool aThorough )
+    {
+    Cancel();
+    if ( aThorough )
+        {
+        delete iProcessedBitmap;
+        iProcessedBitmap = NULL;
+        
+        delete iProcessedMask;
+        iProcessedMask = NULL;
+        }
+    if(iDecoder)
+	    {
+	    delete iDecoder;
+	    iDecoder = NULL;
+	    }
+    if(iScaler)
+	    {
+	    delete iScaler;
+	    iScaler = NULL;
+	    }
+	    
+	if(iSvgEngine)
+		{
+	    delete iSvgEngine;
+	    iSvgEngine = NULL;
+		}
+	if(iFrameTimer)
+		{
+	    delete iFrameTimer;
+	    iFrameTimer = NULL;
+		}
+	if(iBitmap)
+		{
+	    delete iBitmap;
+	    iBitmap = NULL;
+		}
+	if(iMask)
+		{
+	    delete iMask;
+	    iMask = NULL;
+		}
+	if(iLastFrameBitmap)
+		{
+	    delete iLastFrameBitmap;
+	    iLastFrameBitmap = NULL;
+		}
+	if(iLastFrameMask)
+		{
+	    delete iLastFrameMask;
+	    iLastFrameMask = NULL;
+		}
+
+    iFrames.ResetAndDestroy();
+
+    iNotifyObserverCallBack->Cancel();
+
+    iFrameIndex = 0;
+    iIsAnimated = EFalse;
+    iError = KErrNone;
+    iState = EIRStateIdle;
+    }
+
+// ---------------------------------------------------------------------------
+// Creates the proper handler for the raw image data.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::CreateDataHandlerL()
+    {
+    IRRDEBUG2( "CIRImageConverterImpl::CreateDataHandlerL - Entering", KNullDesC );
+    TBuf8<KMaxDataTypeLength> mimeType;
+    TRAPD( err, CImageDecoder::GetMimeTypeDataL( iData, mimeType ) )
+
+	if ( err == KErrNone ) // Image decoder can handle this MIME type.
+		{
+
+		TRAPD(err1,iDecoder = CImageDecoder::DataNewL( CCoeEnv::Static()->FsSession(), iData,
+		KIRImageDecoderOptions );)
+		if(err1!=KErrNone)
+			{  
+			if ( iObserver )
+				{
+			    IRRDEBUG2( "CIRImageConverterImpl::CreateDataHandlerL, err = %d", err1);
+				NotifyObserver( err1 );
+				IRRDEBUG2( "CIRImageConverterImpl::CreateDataHandlerL, error is notified", KNullDesC);
+				}
+			}
+		else
+			{
+        iScaler = CBitmapScaler::NewL();
+        iScaler->SetQualityAlgorithm( KIRBitmapScalerQualityAlgorithm );
+        iScaler->UseLowMemoryAlgorithm( ETrue ); // Return value ignored on purpose; it's ok if low memory algorithm cannot be used when scaling.
+
+        if ( iDecoder->FrameCount() > 1 )
+            {
+            iFrameTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+            iIsAnimated = ETrue;
+            }
+
+        CreateBitmapL( iDecoder->FrameInfo().iOverallSizeInPixels, iBitmap, iMask );
+        }
+		}
+    else // Try using the SVG-T engine for decoding the image.
+        {
+        
+        TFontSpec fontSpec = AknLayoutUtils::LayoutFontFromId( 
+        						EAknLogicalFontSecondaryFont )->FontSpecInTwips();
+
+        // The SVG-T engine requires that the bitmap is created prior to its instantiation.
+        // As the dummy bitmaps created here are 0x0, StartL must take care of instantiating them to
+        // proper sizes and updating the SVG-T engine's frame buffer manually before starting the conversion.
+        
+        CreateBitmapL( TSize( 0, 0 ), iBitmap, iMask );
+        
+        iSvgEngine = CSvgEngineInterfaceImpl::NewL( iBitmap, this, fontSpec );
+        MSvgError* svgErr = iSvgEngine->Load( iData );
+        if ( svgErr && svgErr->HasError() )
+            {
+            err = svgErr->SystemErrorCode();
+            }
+        else
+            {
+            err = KErrNone;
+            iIsAnimated = iSvgEngine->SvgHasAnimation( iSvgEngine->SvgDocument() );
+            }
+        }
+
+    if ( err )
+        {
+        Cleanup( ETrue );
+        User::Leave( KErrNotSupported );
+        }
+    else
+        {
+        iState = iSvgEngine ? EIRStateSvgEngineInitialized : EIRStateBitmapDecoderInitialized;
+        }
+
+    IRRDEBUG2( "CIRImageConverterImpl::CreateDataHandlerL - Exiting" , KNullDesC);
+   }
+
+// ---------------------------------------------------------------------------
+// Creates new bitmaps of the given size.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::CreateBitmapL( const TSize& aSize, CFbsBitmap*& aBitmap, 
+										CFbsBitmap*& aMask )
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::CreateBitmapL - Entering" );
+    CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( bitmap );
+    User::LeaveIfError( bitmap->Create( aSize, CCoeEnv::Static()->ScreenDevice()
+    									->DisplayMode() ) );
+    
+    CFbsBitmap* mask = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( mask );
+    User::LeaveIfError( mask->Create( aSize, EGray256 ) );
+    
+    delete aBitmap;
+    aBitmap = bitmap;
+    
+    delete aMask;
+    aMask = mask;
+    
+    CleanupStack::Pop( 2, bitmap );
+	IRLOG_DEBUG( "CIRImageConverterImpl::CreateBitmapL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Creates exact copies of the supplied bitmaps.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::CreateBitmapCopyL( const CFbsBitmap& aSourceBitmap, 
+                                               const CFbsBitmap& aSourceMask, 
+                                               CFbsBitmap*& aBitmap, 
+                                               CFbsBitmap*& aMask )
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::CreateBitmapCopyL - Entering" );
+    CFbsBitmap* bitmap = IHLBitmapUtil::CopyBitmapLC( aSourceBitmap );
+    CFbsBitmap* mask = IHLBitmapUtil::CopyBitmapLC( aSourceMask );
+    
+    delete aBitmap;
+    aBitmap = bitmap;
+    
+    delete aMask;
+    aMask = mask;
+
+    CleanupStack::Pop( 2, bitmap );
+	IRLOG_DEBUG( "CIRImageConverterImpl::CreateBitmapCopyL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Starts the bitmap animation.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::StartBitmapAnimationL()
+    {
+    __ASSERT_DEBUG( iFrames.Count() == iDecoder->FrameCount(), User::Invariant() );
+    
+    RenderBitmapAnimationFrameL( ETrue );
+    }
+
+// ---------------------------------------------------------------------------
+// Renders the current bitmap animation frame.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::RenderBitmapAnimationFrameL( TBool aFirstTime )
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::RenderBitmapAnimationFrameL - Entering" );
+    __ASSERT_DEBUG( iFrames.Count() && iFrames.Count() > iFrameIndex, User::Invariant() );
+    
+    
+    const TGifImageControl* gifImageControl = static_cast<const TGifImageControl*>
+    							( iDecoder->FrameData( iFrameIndex ).GetFrameData( 0 ) );
+    if ( gifImageControl )
+        {
+        if ( aFirstTime )
+            {
+            // When rendering the animation for the very first time, we just make a copy of the first frame.
+            CreateBitmapCopyL( *iFrames[0]->Bitmap(), *iFrames[0]->Mask(), 
+            				iLastFrameBitmap, iLastFrameMask );
+            }
+        else
+            {
+            CFbsBitmapDevice* lastFrameBitmapDevice = CFbsBitmapDevice::NewL( iLastFrameBitmap );
+            CleanupStack::PushL( lastFrameBitmapDevice );
+            CFbsBitGc* lastFrameBitmapGc = CFbsBitGc::NewL();
+            CleanupStack::PushL( lastFrameBitmapGc );
+            lastFrameBitmapGc->Activate( lastFrameBitmapDevice );
+            
+            CFbsBitmapDevice* lastFrameMaskDevice = CFbsBitmapDevice::NewL( iLastFrameMask );
+            CleanupStack::PushL( lastFrameMaskDevice );
+            CFbsBitGc* lastFrameMaskGc = CFbsBitGc::NewL();
+            CleanupStack::PushL( lastFrameMaskGc );
+            lastFrameMaskGc->Activate( lastFrameMaskDevice );
+            
+            TRect rect = iDecoder->FrameInfo( iFrameIndex ).iFrameCoordsInPixels;
+            
+
+            switch ( gifImageControl->iDisposalMethod )
+                {
+                case TGifImageControl::ENone:
+                    // The new frame is completely self-sufficient, so no information about the previous frame is required.
+                    lastFrameBitmapGc->BitBlt( rect.iTl, iFrames[iFrameIndex]->Bitmap(), 
+                    							TRect( TPoint(), rect.Size() ) );
+                    lastFrameMaskGc->BitBlt( rect.iTl, iFrames[iFrameIndex]->Mask(),
+                    						 TRect( TPoint(), rect.Size() ) );
+                    break;
+                case TGifImageControl::ELeaveInPlace:
+                    // The new frame only contains a partial update on the image, so we have to retain the previous frame state.
+                    lastFrameBitmapGc->BitBltMasked( rect.iTl, iFrames[iFrameIndex]->Bitmap(), 
+                    								TRect( TPoint(), rect.Size() ),
+                    								iFrames[iFrameIndex]->Mask(), EFalse );
+                    break;
+                case TGifImageControl::ERestoreToBackground:
+                    // The new frame is restored to the background color defined in its data.
+                    lastFrameBitmapGc->SetBrushColor( 
+                    					iDecoder->FrameInfo( iFrameIndex ).iBackgroundColor );
+                    lastFrameBitmapGc->Clear();
+                    lastFrameMaskGc->SetBrushColor( KRgbBlack );
+                    lastFrameMaskGc->Clear();
+                    lastFrameBitmapGc->BitBlt( rect.iTl, iFrames[iFrameIndex]->Bitmap(), 
+                    						TRect( TPoint(), rect.Size() ) );
+                    lastFrameMaskGc->BitBlt( rect.iTl, iFrames[iFrameIndex]->Mask(),
+                    						 TRect( TPoint(), rect.Size() ) );
+                    break;
+                case TGifImageControl::ERestoreToPrevious:
+                    // The new frame is exactly the same as the previous one, so no special processing is required.
+                    break;
+                default:
+                    break;
+                }
+    
+            CleanupStack::PopAndDestroy( KFour, lastFrameBitmapDevice );
+            }
+        
+        CreateBitmapCopyL( *iLastFrameBitmap, *iLastFrameMask, iBitmap, iMask );
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+
+    iState = EIRStateScalingBitmap;
+    iScaler->Scale( &iStatus, *iBitmap, iTargetSize, iMaintainAspectRatio );
+    SetActive();
+	IRLOG_DEBUG( "CIRImageConverterImpl::RenderBitmapAnimationFrameL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Notifies the observer either synchronously or asynchronously.
+// ---------------------------------------------------------------------------
+//
+void CIRImageConverterImpl::NotifyObserver( TInt aError, TBool aSynchronous )
+    {
+    IRRDEBUG2( "CIRImageConverterImpl::NotifyObserver - Entering, aError = %d", aError );
+    iError = aError;
+    iNotifyObserverCallBack->Cancel();
+
+    if ( aSynchronous )
+        {
+        StaticNotifyObserverCallBack( this );
+        }
+    else
+        {
+        iNotifyObserverCallBack->CallBack();
+        }
+    IRRDEBUG2( "CIRImageConverterImpl::NotifyObserver - Exiting", KNullDesC );
+    }
+
+// ---------------------------------------------------------------------------
+// Call back for notifying the observer.
+// ---------------------------------------------------------------------------
+//
+TInt CIRImageConverterImpl::StaticNotifyObserverCallBack( TAny* aSelf )
+    {
+	IRLOG_DEBUG( "CIRImageConverterImpl::StaticNotifyObserverCallBack - Entering" );
+    CIRImageConverterImpl* self = static_cast<CIRImageConverterImpl*>( aSelf );
+    if ( self )
+        {
+        TInt err = self->iError;
+        MIRImageConverterObserver::TIRImageConversionEvent event = MIRImageConverterObserver::
+        														EIRImageConversionCompleted;
+        
+        if ( err == KErrNone )
+            {
+            if ( self->iSvgEngine && self->iIsAnimated && self->iEnableAnimations )
+                {
+                TRAP( err, self->CreateBitmapCopyL( *self->iBitmap, *self->iMask, 
+                		self->iProcessedBitmap, self->iProcessedMask ) )
+                }
+            else
+                {
+                delete self->iProcessedBitmap;
+                self->iProcessedBitmap = self->iBitmap;
+                self->iBitmap = NULL;
+                delete self->iProcessedMask;
+                self->iProcessedMask = self->iMask;
+                self->iMask = NULL;
+                }
+            
+            if ( !err && self->iIsAnimated && self->iEnableAnimations )
+                {
+                event = MIRImageConverterObserver::EIRFrameConversionCompleted;
+
+                if ( self->iDecoder )
+                    {
+                    self->iState = EIRStateBetweenBitmapAnimationFrames;
+                    
+                    self->iFrameTimer->Cancel();
+                    self->iFrameTimer->Start( static_cast<TInt>( self->iDecoder->
+                    				FrameInfo( self->iFrameIndex ).iDelay.Int64() ), 0, 
+                                              TCallBack( StaticNextFrameCallBack, self ) );
+
+                    self->iFrameIndex++;
+                    if ( self->iFrameIndex >= self->iDecoder->FrameCount() )
+                        {
+                        self->iFrameIndex = 0;
+                        }
+                    }
+                }
+            }
+
+        if ( err || event == MIRImageConverterObserver::EIRImageConversionCompleted )
+            {
+            self->Cleanup();
+            }
+        
+        if ( self->iObserver )
+            {
+            TRAP_IGNORE( self->iObserver->HandleImageConversionEventL( event, self->iId, err ) )
+            }
+        }
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Call back for advancing to the next frame when bitmap animations are used.
+// ---------------------------------------------------------------------------
+//
+TInt CIRImageConverterImpl::StaticNextFrameCallBack( TAny* aSelf )
+    {
+    CIRImageConverterImpl* self = static_cast<CIRImageConverterImpl*>( aSelf );
+    if ( self )
+        {
+        self->iFrameTimer->Cancel();
+        TRAPD( err, self->RenderBitmapAnimationFrameL() )
+        if ( err )
+            {
+            self->NotifyObserver( err );
+            }
+        }
+    return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irlayoututils.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2008-2008 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:  Utilities for layouting purposes
+*
+*/
+
+
+#include <aknutils.h>
+
+#include <internetradio.rsg>
+#include "irlayoututils.h"
+
+// ---------------------------------------------------------------------------
+// IRLayoutUtils::PresetBigLogoSize
+// The size for the big logo is calculated from the scren size
+// ---------------------------------------------------------------------------
+//
+TSize IRLayoutUtils::PresetBigLogoSize()
+    {
+    TSize screenSize;
+    AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EScreen, screenSize );
+    TInt side = Min( screenSize.iWidth, screenSize.iHeight );
+    return TSize( side, side );
+    }
+
+// ---------------------------------------------------------------------------
+// IRLayoutUtils::PresetSmallLogoSizeL
+// The size for the small logo is taken from the application settings
+// ---------------------------------------------------------------------------
+//
+/*TSize IRLayoutUtils::PresetSmallLogoSizeL()
+    {
+    TInt width = 0;
+    TInt height = 0;
+    CVRRepositoryManager::GetRepositoryValueL( KVRCRUid, KVRCRPresetSmallLogoWidth, width );
+    CVRRepositoryManager::GetRepositoryValueL( KVRCRUid, KVRCRPresetSmallLogoHeight, height );
+    return TSize( width, height );
+    }*/
+
+// ---------------------------------------------------------------------------
+// IRLayoutUtils::AdvertisementSizeL
+// ---------------------------------------------------------------------------
+//
+TSize IRLayoutUtils::AdvertisementSizeL()
+    {
+    TRect parentRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, parentRect );
+    
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( parentRect, R_IR_ADVERTISEMENT_SIZE );
+
+    return TSize( layoutRect.Rect().Size() );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irmarqueeclet.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2007-2008 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:  Controlet to implement marquee functionality for visuals
+*
+*/
+
+
+#include <alf/alfcontrol.h>
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alftimedvalue.h>
+#include <alf/alftextvisual.h>
+
+#include "irmarqueeclet.h"
+ 
+// Default scroll style.
+const TIRMarqueeClet::TIRScrollStyle KVRDefaultScrollStyle = TIRMarqueeClet::EIRScrollStyleOnce;
+// Default scroll direction.
+const TIRMarqueeClet::TIRScrollDirection KVRDefaultScrollDirection = 
+										TIRMarqueeClet::EIRScrollDirectionLeft;
+// Default scroll speed in pixels per second.
+const TInt KVRDefaultScrollSpeed = 30;
+//Default Scroll Time
+const TInt KVRScrollTime=1000;
+// Spaces needed when creating continuously scrolling text. 
+_LIT( KVRSpace, "     " );
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+TIRMarqueeClet::TIRMarqueeClet() :
+    iViewport( NULL ), iTextVisual( NULL ), iScrollSize(), 
+    iScrollSpeed( KVRDefaultScrollSpeed ), iScrollDirection( KVRDefaultScrollDirection ), 
+    iScrollStyle( KVRDefaultScrollStyle ), iSnoozeTime( 0 ), iOrigin(), iOriginalTextWidth( 0 )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+TIRMarqueeClet::~TIRMarqueeClet()
+    {
+    if ( iTextVisual )
+        {
+        iTextVisual->Owner().Env().CancelCustomCommands( this );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the required information for this marquee controlet.
+// ---------------------------------------------------------------------------
+//
+void TIRMarqueeClet::Set( CAlfViewportLayout& aViewport, CAlfTextVisual& aTextVisual )
+    {
+    aTextVisual.Owner().Env().CancelCustomCommands( this );
+
+    iViewport = &aViewport;
+    iTextVisual = &aTextVisual;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets scroll speed in pixels per second.
+// ---------------------------------------------------------------------------
+//
+void TIRMarqueeClet::SetScrollSpeed( TInt aScrollSpeed )
+    {
+    iScrollSpeed = aScrollSpeed;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the scroll direction.
+// ---------------------------------------------------------------------------
+//
+void TIRMarqueeClet::SetScrollDirection( TIRScrollDirection aScrollDirection )
+    {
+    iScrollDirection = aScrollDirection; 
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the scroll style.
+// ---------------------------------------------------------------------------
+//
+void TIRMarqueeClet::SetScrollStyle( TIRScrollStyle aScrollStyle )
+    {
+    iScrollStyle = aScrollStyle;
+    }
+
+// ---------------------------------------------------------------------------
+// Starts scrolling.
+// ---------------------------------------------------------------------------
+//
+void TIRMarqueeClet::StartL( TInt aDelay, TInt aSnooze )
+    {
+    ASSERT( iViewport );
+    ASSERT( iTextVisual );
+
+    iViewport->SetViewportSize( TAlfRealPoint( 1.0f, 1.0f ), 0 );
+    iViewport->SetVirtualSize( TAlfRealPoint( 1.0f, 1.0f ), 0 );
+    iViewport->SetViewportPos( TAlfRealPoint( 0.0f, 0.0f ), 0 );
+
+    iTextVisual->Owner().Env().CancelCustomCommands( this );
+
+    iSnoozeTime = aSnooze;
+
+    // Get original text width in pixels.
+    iOriginalTextWidth = iTextVisual->TextExtents().iWidth;
+    TInt targetWidth = iViewport->Size().Target().AsSize().iWidth;
+
+    // Check if loop scrolling and if the text does not fit to the viewport size.
+    if ( iScrollStyle == TIRMarqueeClet::EIRScrollStyleLoop && iOriginalTextWidth > targetWidth )
+        {
+        // Create continuously scrolling text (text + 5 spaces + text).
+        RBuf buffer;
+        CleanupClosePushL( buffer );
+        buffer.CreateL( 2 * iOriginalTextWidth + KVRSpace().Length() );
+        buffer.Append( iTextVisual->Text() );
+        buffer.Append( KVRSpace );
+        buffer.Append( iTextVisual->Text() );
+        iTextVisual->SetTextL( buffer );
+        CleanupStack::PopAndDestroy(&buffer);// buffer
+        }
+    
+    // Text size to display.
+    iScrollSize = iTextVisual->TextExtents();
+
+    // Check if text must be scrolled.
+    if ( iScrollSize.iWidth > targetWidth )
+        {
+        // Set line wrapping to truncate: if text does not fit to the viewport width, the text is
+        // truncated with ellipsis (...).
+        iTextVisual->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
+        // Decides the correct directionality for the scroll.
+        TBidiText::TDirectionality directionality = TBidiText::
+        					TextDirectionality( iTextVisual->Text() );
+        if ( directionality == TBidiText::ELeftToRight )
+            {
+            SetScrollDirection( TIRMarqueeClet::EIRScrollDirectionLeft ); 
+            }
+        else
+            {
+            SetScrollDirection( TIRMarqueeClet::EIRScrollDirectionRight ); 
+            }
+        // Align horizontally.
+        iTextVisual->SetAlign( EAlfAlignHLocale, EAlfAlignVCenter );
+        // Start scrolling.
+        iTextVisual->Owner().Env().Send( TAlfCustomEventCommand( 
+            TIRMarqueeClet::EIRCustomEventScrollStarted, this ), aDelay );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAlfControl.
+// Event handler.
+// ---------------------------------------------------------------------------
+//
+TBool TIRMarqueeClet::OfferEventL( const TAlfEvent& aEvent )
+    {
+    TBool eventHandled = EFalse;
+    
+    if ( aEvent.IsCustomEvent() && iViewport )
+        {
+        switch ( aEvent.CustomParameter() )
+            {
+            case TIRMarqueeClet::EIRCustomEventScrollCompleted:
+                {
+                // Viewport is reset.
+                iViewport->SetVirtualSize( TAlfRealPoint( 1.0f, 1.0f ), 0 );
+                iViewport->SetViewportPos( TAlfRealPoint( 0.0f, 0.0f ), 0 );
+                // Set line wrapping to truncate.
+                iTextVisual->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
+                eventHandled = ETrue;
+                break;
+                }
+            case TIRMarqueeClet::EIRCustomEventScrollStarted:
+                {
+                 // Visible scroll space width.
+                TReal32 visibleWidth = iViewport->Size().Target().iX;
+ 
+                // One scroll width.
+                TReal32 overflowWidth( 0.0f );
+                switch ( iScrollStyle )
+                    {
+                    case TIRMarqueeClet::EIRScrollStyleOnce:
+                        overflowWidth = iScrollSize.iWidth - visibleWidth;
+                        break;
+                    case TIRMarqueeClet::EIRScrollStyleLoop:
+                        // In EIRScrollStyleLoop mode, the scrolling width is 
+                        // the width of the original text + the trailing spaces.
+                        overflowWidth = iScrollSize.iWidth - iOriginalTextWidth;
+                        break;
+                    default:
+                        break;
+                    }
+
+                // Width ratio.
+                TReal32 widthRatio = overflowWidth / visibleWidth;
+                // Target position.
+                TAlfRealPoint target( iViewport->Pos().Target() );
+                // Coordinate space used for scrolling.
+                TAlfRealPoint virt( widthRatio + 1.0f, 1.0f );
+                // Start position.
+                iOrigin = iViewport->Pos().ValueNow();
+                // Scrolling time in milliseconds.
+                TInt scrollTime = KVRScrollTime *
+                				 static_cast<TInt>( overflowWidth / iScrollSpeed );
+                
+                switch ( iScrollDirection )
+                    {
+                    case TIRMarqueeClet::EIRScrollDirectionLeft:
+                        iOrigin.iX = 0.0f;
+                        target.iX = widthRatio;
+                        break;
+                    case TIRMarqueeClet::EIRScrollDirectionRight:
+                        iOrigin.iX = widthRatio;
+                        target.iX = 0.0f;
+                        break;
+                    default:
+                        break;
+                    }
+
+                // Set virtual size for scrolling.
+                iViewport->SetVirtualSize( virt, 0 );
+                // Set viewport to start position.
+                iViewport->SetViewportPos( iOrigin, 0 );
+                // Start scrolling to target position.
+                iViewport->SetViewportPos( target, scrollTime );
+
+                // Set line wrapping to manual.
+                iTextVisual->SetWrapping( CAlfTextVisual::ELineWrapManual );
+
+                switch ( iScrollStyle )
+                    {
+                    case TIRMarqueeClet::EIRScrollStyleOnce:
+                        // Send EIRCustomEventScrollCompleted after scrolling is ended.
+                        iTextVisual->Owner().Env().Send( TAlfCustomEventCommand(
+                            TIRMarqueeClet::EIRCustomEventScrollCompleted, this ), 
+                            scrollTime + iSnoozeTime );
+                        break;
+                    case TIRMarqueeClet::EIRScrollStyleLoop:
+                        // Start loop scrolling immediately after previous scrolling has ended.
+                        iTextVisual->Owner().Env().Send( TAlfCustomEventCommand(
+                            TIRMarqueeClet::EIRCustomEventScrollStarted, this ), scrollTime );
+                        break;
+                    default:
+                        break;
+                    }
+
+                eventHandled = ETrue;
+                break;
+                }
+             default:
+                break;
+            }
+        }
+
+
+    return eventHandled;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irstationinformationdata.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2007-2007 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:  Station information data container
+*
+*/
+
+
+#include <stringloader.h>
+#include <internetradio.rsg>
+
+#include "irstationinformationdata.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Static two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationData* CIRStationInformationData::NewL( CCoeEnv& aCoeEnv )
+    {
+    CIRStationInformationData* self = new ( ELeave ) CIRStationInformationData( aCoeEnv );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationData::CIRStationInformationData( CCoeEnv& /*aCoeEnv*/ )
+    //: iCoeEnv( aCoeEnv )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::ConstructL()
+    {
+    iName.CreateL( KNullDesC );
+    iRdsPsName.CreateL( KNullDesC );
+    iIndex.CreateL( KNullDesC );
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationData::~CIRStationInformationData()
+    {
+    
+
+    iName.Close();
+    iRdsPsName.Close();
+    iIndex.Close();
+
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Sets the name.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::SetNameL( const TDesC& aName )
+    {
+    iName.Close();
+    iName.CreateL( aName );
+    }
+    
+// ---------------------------------------------------------------------------
+// Sets the RDS PS name.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::SetRdsPsNameL( const TDesC& aRdsPsName )
+    {
+    iRdsPsName.Close();
+    iRdsPsName.CreateL( aRdsPsName );
+    }
+    
+// ---------------------------------------------------------------------------
+// Sets the index.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::SetIndexL( TInt aIndex )
+    {
+    if ( aIndex >= 0 )
+        {
+        HBufC* index = StringLoader::LoadLC( R_IRAPP_STATIONS_NUMBERING, aIndex + 1);
+        CleanupStack::Pop( index );
+        
+        iIndex.Close();
+        iIndex.Assign( index );
+        }
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Sets the visual service enabled or disabled.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::SetServiceEnabled( TBool aServiceEnabled )
+    {
+    iServiceEnabled = aServiceEnabled;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the display style in use.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::SetDisplayStyle( TIRDisplayStyle aDisplayStyle )
+    {
+    iDisplayStyle = aDisplayStyle;
+    }
+    
+// ---------------------------------------------------------------------------
+// Sets the fade directionality.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationData::SetFadeDirectionality( TIRFadeStyle aFadeDirectionality )
+    {
+    iFadeDirectionality = aFadeDirectionality;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the frequency as a descriptor.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRStationInformationData::Frequency() const
+    {
+    return iFrequency;
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the name.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRStationInformationData::Name() const
+    {
+    return iName;
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the RDS PS name.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRStationInformationData::RdsPsName() const
+    {
+    return iRdsPsName;
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the index as a descriptor.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRStationInformationData::Index() const
+    {
+    return iIndex;
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the location.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRStationInformationData::Location() const
+    {
+    return iLocation;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns whether or not visual service is enabled.
+// ---------------------------------------------------------------------------
+//
+TBool CIRStationInformationData::ServiceEnabled() const
+    {
+    return iServiceEnabled;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the display style.
+// ---------------------------------------------------------------------------
+//
+TIRDisplayStyle CIRStationInformationData::DisplayStyle() const
+    {
+    return iDisplayStyle;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the fade directionality.
+// ---------------------------------------------------------------------------
+//
+TIRFadeStyle CIRStationInformationData::FadeDirectionality() const
+    {
+    return iFadeDirectionality;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irstationinformationdisplay.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,633 @@
+/*
+* Copyright (c) 2007-2008 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:  Control that displays current station information
+*
+*/
+
+
+#include <aknsconstants.h>
+#include <aknutils.h>
+#include <biditext.h>
+
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alflayout.h>
+#include <alf/alfgridlayout.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfviewportlayout.h>
+
+
+//#include "vrdebug.h"
+#include "irstationinformationdata.h"
+#include "irstationinformationdisplay.h"
+#include "irdebug.h"
+
+// Tag to identify a text visual with.
+_LIT8( KVRTagTextVisual, "KVRTagTextVisual" );
+// Tag to identify a layout visual with.
+_LIT8( KVRTagLayout, "KVRTagLayout" );
+
+// Time in milliseconds to spend animating the displays moving in and out of the screen.
+const TInt KVRDisplayFadeTime = 400;
+
+// This is context-sensitive per scrollable visual, so the actual start time depends on the additional application logic.
+const TInt KVRScrollDelayTime = 1000;
+// Time in milliseconds to snooze after scrolling has completed.
+// This is used to halt the scrolling at the very end for a period of time, making it visually more pleasing.
+const TInt KVRScrollSnoozeTime = 1000;
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationDisplay* CIRStationInformationDisplay::NewL( CAlfEnv& aEnv, 
+								TInt aControlGroupId,CAlfLayout* aParentLayout )
+    {
+    
+    CIRStationInformationDisplay* self = new ( ELeave ) 
+    						CIRStationInformationDisplay( *aParentLayout );
+    CleanupStack::PushL( self );
+    self->ConstructL( aEnv, aControlGroupId, aParentLayout );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationDisplay::CIRStationInformationDisplay( CAlfLayout& aParentLayout )
+    : iParentAnchorLayout( aParentLayout )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::ConstructL( CAlfEnv& aEnv, TInt aControlGroupId, 
+												CAlfLayout* aParentLayout )
+    {
+    CAlfControl::ConstructL( aEnv );
+
+    
+    // Base layout is created here so the control can be as independent from the parent layout as possible.
+    iBaseLayout = CAlfDeckLayout::AddNewL( *this, aParentLayout );
+    
+    aEnv.ControlGroup( aControlGroupId ).AppendL( this ); // Takes ownership. No leaving code allowed after this call.
+    iLandScapSetFalg=EFalse;    
+    
+    }
+
+// <TUNING TEMP>
+CIRStationInformationDisplay::~CIRStationInformationDisplay()
+    {
+    Env().CancelCustomCommands( this );
+    iRdsDataText.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Sets the displayed data.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::SetDisplayedDataL( const CIRStationInformationData& aData )
+    {
+    FadeOutDisplay( aData );
+    CreateDisplayL( aData );
+    FadeInDisplay( aData );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the RDS data display which is used only in landscape.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::SetDisplayOrientation( TBool aLandscape )
+    {
+    if ( iLandscape && !aLandscape )
+         {
+         // Going from landscape to portrait: Remove separate display for RDS data.
+        iParentAnchorLayout.Remove( iRdsDataLayout, 0 );
+         }
+    iLandscape = aLandscape;
+    }
+
+TIRFadeStyle  CIRStationInformationDisplay::FadeStyle()
+    {
+    return iFadeStyle;
+    }
+// ---------------------------------------------------------------------------
+// Sets the RDS data.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::RdsDataReceivedL( const TDesC& aRdsData )
+    {
+
+    if ( iRdsData )
+        {
+        TBool rdsDataExisted = iRdsData->Text().Length() ? ETrue : EFalse;
+        TAlfTimedValue opacity( iRdsData->Opacity().ValueNow() );
+
+        if ( aRdsData.Length() )
+            {
+            if ( rdsDataExisted )
+                {
+                if( iRdsDataText != aRdsData )
+                    {
+                iRdsDataText.Close();
+                iRdsDataText.CreateL( aRdsData );
+                 // Fade out previous text.
+                opacity.SetTarget( 0.0f, KVRDisplayFadeTime );
+                FadeVisual( *iRdsData, opacity );
+                // Displaying RDS text will be started after fade out is done.
+                Env().Send( 
+                	TAlfCustomEventCommand( EIRCustomEventVisualFadeOutCompleted, this ),
+                	 KVRDisplayFadeTime );
+                    }
+
+                }
+            else
+                {
+                iRdsDataText.Close();
+                iRdsDataText.CreateL( aRdsData );
+                iRdsData->SetTextL( iRdsDataText );
+                // Start to display RDS text.
+                DisplayRdsDataL();
+                // Fade in.
+                if ( !iLandscape )
+                    {
+                    // Orientation is portrait.
+                    iLayout->SetRowsL( iLayout->RowCount() + 1 );
+                    iLayout->Reorder( *iRdsDataLayout, iLayout->RowCount() - 1, 
+                    				KVRDisplayFadeTime );
+                    iRdsData->SetFlag( EAlfVisualFlagManualPosition );
+                    iName->SetFlag( EAlfVisualFlagManualPosition );
+                    iLayout->UpdateChildrenLayout( KVRDisplayFadeTime );
+                    iRdsData->ClearFlag( EAlfVisualFlagManualPosition );
+                    iName->ClearFlag( EAlfVisualFlagManualPosition );
+                    }
+                opacity.SetTarget( 1.0f, KVRDisplayFadeTime );
+                FadeVisual( *iRdsData, opacity );
+                }
+            }
+        else // RDS data has been lost.
+            {
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAlfControl.
+// Called when a visual's layout has been updated.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::VisualLayoutUpdated( CAlfVisual& aVisual )
+    {
+    CAlfControl::VisualLayoutUpdated( aVisual );
+
+    // TO be done  Special handling for scrolling required while changing orientation...
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAlfControl.
+// Event handler.
+// ---------------------------------------------------------------------------
+//
+TBool CIRStationInformationDisplay::OfferEventL( const TAlfEvent& aEvent )
+    {
+    TBool eventHandled = EFalse;
+    
+    if ( aEvent.IsCustomEvent() )
+        {
+
+        
+        switch ( aEvent.CustomParameter() )
+            {
+            case EIRCustomEventDisplayFadeInCompleted:
+                {
+                 // When a display has faded in, its position will be handled by the framework and text scrolling should start.
+                reinterpret_cast<CAlfGridLayout*>( aEvent.CustomEventData() )->ClearFlag( 
+                												EAlfVisualFlagManualPosition );
+                // Start to display name.to be changed
+                iNameMarqueeClet.StartL( KVRScrollDelayTime, KVRScrollSnoozeTime );
+                // Start to display RDS data.
+                DisplayRdsDataL();
+                eventHandled = ETrue;
+                break;
+                }
+            case EIRCustomEventDisplayFadeOutCompleted:
+                {
+                // When display has faded out old layout needs to be destroyed
+                reinterpret_cast<CAlfGridLayout*>
+                			( aEvent.CustomEventData() )->RemoveAndDestroyAllD();
+                eventHandled = ETrue;
+                break;
+                }
+             case EIRCustomEventVisualFadeOutCompleted:
+                {
+                iRdsData->SetTextL( iRdsDataText );
+                if ( iRdsDataText.Length() )
+                    {
+                    // Start to display RDS data.
+                    DisplayRdsDataL();
+                    // Fade in.
+                    TAlfTimedValue opacity( iRdsData->Opacity().ValueNow() );
+                    opacity.SetTarget( 1.0f, KVRDisplayFadeTime );
+                    FadeVisual( *iRdsData, opacity );
+                    }
+                eventHandled = ETrue;
+                break;
+                }
+            default:
+                break;
+            }
+        }
+
+    return eventHandled;
+    }
+
+// ---------------------------------------------------------------------------
+// Creates a new display that is used to show the supplied data.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::CreateDisplayL( const CIRStationInformationData& aData )
+    {
+
+    iFadeStyle = aData.FadeDirectionality();
+    iLayout = CAlfGridLayout::AddNewL( *this, 1, 1, iBaseLayout );
+
+    // A separate layout has to be created for the station's index and its name as 
+    // the index has to be a separate entity from the name due to scrolling issues.
+    // This layout will contain both of these texts, but only the name can scroll.
+    // Index is never scrolled, and both fields are center-aligned to the display.
+    iNameIndexLayout = CAlfGridLayout::AddNewL( *this, 2, 1, iLayout );
+    iNameIndexLayout->SetTagL( KVRTagLayout );
+
+    iIndex = CAlfTextVisual::AddNewL( *this, iNameIndexLayout );
+    iIndex->SetTextL( aData.Index() );
+    iIndex->SetTagL( KVRTagTextVisual );
+    iIndex->SetOpacity( 0.0f );
+    iIndex->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+    iIndex->SetStyle( EAlfTextStyleSmall );
+    iIndex->SetAlign( EAlfAlignHLocaleMirrored, EAlfAlignVCenter ); // Right-aligned normally, left-aligned in mirrored.
+
+    CAlfViewportLayout* nameViewport = CAlfViewportLayout::AddNewL( *this, iNameIndexLayout );
+    nameViewport->SetFlag( EAlfVisualFlagLayoutUpdateNotification );
+    nameViewport->SetTagL( KVRTagLayout );
+    
+    iName = CAlfTextVisual::AddNewL( *this, nameViewport );
+    iName->SetTextL( aData.Name() );
+    iName->SetTagL( KVRTagTextVisual );
+    iName->SetOpacity( 0.0f );
+    iName->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+    iName->SetStyle( EAlfTextStyleSmall );
+    iName->SetAlign( EAlfAlignHLocale, EAlfAlignVCenter );
+    iName->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
+
+    // Forces the viewport marquee to use a linear interpolation style.
+    TAlfTimedPoint point( 0.0f, 0.0f );
+    point.SetStyle( EAlfTimedValueStyleLinear );
+    iName->SetPos( point );
+
+
+    if ( AknLayoutUtils::LayoutMirrored() ) 
+        {
+        // In mirrored layouts the name is on the left side.
+
+        iNameIndexLayout->Reorder( *nameViewport, 0, 0 );
+        }
+
+    // Decides the correct directionality for the scroll.
+    iNameMarqueeClet.Set( *nameViewport, *iName );
+
+// This is added due to possible scrolling issues.
+    // Grid layout (iRdsDataLayout) for RDS data is added due to possible scrolling issues.
+    // For some reason scrolling won’t work without this extra grid layout.
+    if ( iLandscape )
+        {
+        // Landscape: Create own separate display for RDS data.
+        iLandScapSetFalg=ETrue;
+        iRdsDataLayout = CAlfGridLayout::AddNewL( *this, 1, 1, &iParentAnchorLayout );
+        }
+    else
+        {
+        // Portrait: RDS data will be displayed below the station information.
+        iRdsDataLayout = CAlfGridLayout::AddNewL( *this, 1, 1, iLayout );
+        }
+    iRdsDataLayout->SetTagL( KVRTagLayout );
+
+    // RDS data view port.
+    CAlfViewportLayout* rdsDataViewport = CAlfViewportLayout::AddNewL( *this, iRdsDataLayout );
+    rdsDataViewport->SetFlag( EAlfVisualFlagLayoutUpdateNotification );
+    rdsDataViewport->SetTagL( KVRTagLayout );
+
+    // RDS data text visual.
+    iRdsDataText.Close();
+    iRdsDataText.CreateL( aData.RdsPsName() );
+    iRdsData = CAlfTextVisual::AddNewL( *this, rdsDataViewport );
+    iRdsData->SetTextL( iRdsDataText );
+    iRdsData->SetTagL( KVRTagTextVisual );
+    iRdsData->SetOpacity( 0.0f );
+    iRdsData->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+    iRdsData->SetStyle( EAlfTextStyleSmall );
+    iRdsData->SetWrapping( CAlfTextVisual::ELineWrapManual );
+    iRdsData->SetPos( point );
+
+    // Set RDS data.
+    iRdsDataMarqueeClet.Set( *rdsDataViewport, *iRdsData );
+    // RDS data scrolling style is continuous scrolling.
+    iRdsDataMarqueeClet.SetScrollStyle( TIRMarqueeClet::EIRScrollStyleLoop );
+
+    // Determining the initial row count for the grid and reordering its elements.
+    TInt rowCount = 1;//1
+	if ( iIndex->Text().Length() || iName->Text().Length() )
+        {
+        //rowCount++;
+        }
+    if ( iRdsData->Text().Length() && !iLandscape  )
+        {
+        rowCount++;
+        // RDS data will always be the last element in the grid.
+        iLayout->Reorder( *iRdsDataLayout, rowCount - 1, 0 );//3rd 0
+        }
+
+
+    iLayout->SetRowsL( rowCount );
+    // Calculates the layout for station index and name by using grid weights.
+    // Two cases are considered:
+    //      1) Index and name fit on the screen without scrolling.
+    //         In this case they are center-aligned on the screen.
+    //      2) Index and name do not fit on the screen, scrolling must be used.
+    //         In this case the index is aligned to either to the left or right,
+    //         depending on the used locale, and the name will scroll as a separate
+    //         entity.
+    
+    
+    TInt layoutWidth = static_cast<TInt>( iNameIndexLayout->Size().ValueNow().iX );
+
+    TInt indexWidth = iIndex->TextExtents().iWidth;
+    TInt nameWidth = iName->TextExtents().iWidth;
+    
+    if ( layoutWidth < indexWidth + nameWidth )
+        {
+        nameWidth = layoutWidth - indexWidth;
+        }
+    else
+        {
+        TInt overflow = layoutWidth - indexWidth - nameWidth;
+
+        // Overlowing part of the layout is split evenly between the index and the name.
+        indexWidth += overflow / 2;
+        nameWidth += overflow / 2;
+        }
+    
+    RArray<TInt> weights;
+    CleanupClosePushL( weights );
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        weights.AppendL( nameWidth );
+        weights.AppendL( indexWidth );
+        }
+    else
+        {
+        weights.AppendL( indexWidth );
+        weights.AppendL( nameWidth );
+        }
+    iNameIndexLayout->SetColumnsL( weights );
+    CleanupStack::PopAndDestroy( &weights );
+    iLayout->UpdateChildrenLayout();
+
+    }
+
+// ---------------------------------------------------------------------------
+// Fades in the current display.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::FadeInDisplay( const CIRStationInformationData& aData )
+    {
+    if ( iLayout )
+        {
+        TAlfRealPoint size = iLayout->Size().ValueNow();
+        TAlfRealPoint pos = iLayout->Pos().ValueNow();
+        
+        TAlfTimedValue opacity( 0.0f );
+        opacity.SetStyle( EAlfTimedValueStyleDecelerate );
+
+        TInt fadeTime = KVRDisplayFadeTime;
+        
+        TAlfTimedPoint point( pos.iX, pos.iY, KVRDisplayFadeTime );
+        point.SetStyle( EAlfTimedValueStyleDecelerate );
+        
+        switch ( aData.FadeDirectionality() )
+            {
+            case EIRFadeUnknown:
+                point.iX.SetValueNow( pos.iX );
+                point.iY.SetValueNow( pos.iY );
+                break;
+            case EIRFadeLeftToRight:
+                point.iX.SetValueNow( pos.iX - size.iX );
+                point.iY.SetValueNow( pos.iY );
+                break;
+            case EIRFadeRightToLeft:
+                point.iX.SetValueNow( pos.iX + size.iX );
+                point.iY.SetValueNow( pos.iY );
+                break;
+            case EIRFadeTopToBottom:
+                point.iX.SetValueNow( pos.iX );
+                point.iY.SetValueNow( pos.iY - size.iY );
+                break;
+            case EIRFadeBottomToTop:
+                point.iX.SetValueNow( pos.iX );
+                point.iY.SetValueNow( pos.iY + size.iY );
+                break;
+            case EIRFadeNoFade:
+                fadeTime = 0;
+                point.iX.SetValueNow( pos.iX );
+                point.iY.SetValueNow( pos.iY );
+                point.SetTarget( pos, fadeTime );
+                break;
+            default:
+                break;
+            }
+
+        opacity.SetTarget( 1.0f, fadeTime );
+
+        iLayout->SetFlag( EAlfVisualFlagManualPosition );
+        iLayout->SetPos( point );
+        FadeLayout( *iLayout, opacity );
+
+        if ( iLandscape )
+            {
+            // If the orientation is landscape the RDS text layout needs to be visible regardless
+            // how we got in this point, be it startup, orientation change, skin change or something
+            // else. This needs to be done here because RDS text may have already been available
+            // and if there is not a change in RDS text then there is no notification to update
+            // RDS text which leads to not showing the available RDS text
+            Env().Send( TAlfCustomEventCommand( EIRCustomEventVisualFadeOutCompleted, this ), 0 );
+            }
+        Env().Send( TAlfCustomEventCommand( EIRCustomEventDisplayFadeInCompleted, this,
+        			 reinterpret_cast<TInt>( iLayout ) ), 0 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Fades out the current display.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::FadeOutDisplay( const CIRStationInformationData& aData )
+    {
+    if ( iLayout )
+        {
+        TAlfRealPoint size = iLayout->Size().ValueNow();
+        TAlfRealPoint pos = iLayout->Pos().ValueNow();
+
+        TAlfTimedValue opacity( iLayout->Opacity().ValueNow() );
+        opacity.SetStyle( EAlfTimedValueStyleAccelerate );
+        opacity.SetTarget( 0.0f, KVRDisplayFadeTime );
+        
+        TAlfTimedPoint point( pos.iX, pos.iY );
+        point.SetStyle( EAlfTimedValueStyleAccelerate );
+
+        TAlfRealPoint target = iLayout->Pos().Target();
+
+        TInt fadeTime = KVRDisplayFadeTime;
+        
+        switch ( aData.FadeDirectionality() )
+            {
+            case EIRFadeUnknown:
+                point.SetTarget( TAlfRealPoint( target.iX, target.iY ), KVRDisplayFadeTime );
+                break;
+            case EIRFadeLeftToRight:
+                point.SetTarget( TAlfRealPoint( target.iX + size.iX, target.iY ),
+                				 KVRDisplayFadeTime );
+                break;
+            case EIRFadeRightToLeft:
+                point.SetTarget( TAlfRealPoint( -size.iX, target.iY ), KVRDisplayFadeTime );
+                break;
+            case EIRFadeTopToBottom:
+                point.SetTarget( TAlfRealPoint( target.iX, target.iY + size.iY ),
+                								 KVRDisplayFadeTime );
+                break;
+            case EIRFadeBottomToTop:
+                point.SetTarget( TAlfRealPoint( target.iX, target.iY - size.iY ), 
+                								KVRDisplayFadeTime );
+                break;
+            case EIRFadeNoFade:
+                fadeTime = 0;
+                point.SetTarget( TAlfRealPoint( target.iX, target.iY ), fadeTime );
+                opacity.SetTarget( 0.0f, fadeTime );
+                break;
+            default:
+                break;
+            }
+
+        iLayout->SetFlag( EAlfVisualFlagManualPosition );
+        iLayout->SetPos( point );
+        FadeLayout( *iLayout, opacity );
+
+        Env().CancelCustomCommands( this, EIRCustomEventDisplayFadeInCompleted );
+        if ( iRdsDataLayout && iLayout != iRdsDataLayout->Layout() )
+            {
+
+            // In landscape orientation RDS data is not part of the station information data and no fading out is needed.
+            // RDS data can be removed and destroyed at once.
+            Env().Send( TAlfCustomEventCommand( EIRCustomEventDisplayFadeOutCompleted, this,
+            			 reinterpret_cast<TInt>( iRdsDataLayout ) ), 0 );
+
+            }
+        Env().Send( TAlfCustomEventCommand( EIRCustomEventDisplayFadeOutCompleted, this,
+        			 reinterpret_cast<TInt>( iLayout ) ), fadeTime );
+        }
+
+    // Saved pointers to the visuals will later on be invalid, as they will get deleted in the custom event handler.
+    
+    iLayout = NULL;
+    iNameIndexLayout = NULL;
+    iRdsDataLayout = NULL;
+    iName = NULL;
+    iIndex = NULL;
+
+    iRdsData = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Fades a single visual.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::FadeVisual( CAlfVisual& aVisual,const TAlfTimedValue& aOpacity)
+    {
+    TAlfTimedValue opacity( aVisual.Opacity().ValueNow() );
+    opacity.SetTarget( aOpacity.Target(), aOpacity.TimeToTargetinMilliSeconds() );
+    
+    if ( aVisual.Tag() == KVRTagTextVisual )
+        {
+        CAlfTextVisual& visual = static_cast<CAlfTextVisual&>( aVisual );
+        if ( visual.Text().Length() )
+            {
+            visual.SetOpacity( opacity );
+            visual.SetShadowOpacity( opacity );
+            }
+        }
+    else
+        {
+        aVisual.SetOpacity( opacity );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Fades all visuals contained within the supplied layout.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::FadeLayout( CAlfLayout& aLayout, const TAlfTimedValue& aOpacity)
+    {
+    for ( TInt i = 0; i < aLayout.Count(); i++ )
+        {
+        CAlfVisual& visual = aLayout.Visual( i );
+        if ( visual.Tag() == KVRTagLayout )
+            {
+            FadeLayout( static_cast<CAlfLayout&>( visual ), aOpacity );
+            }
+        else
+            {
+            FadeVisual( visual, aOpacity );
+            }
+        }
+        
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// Starts to display RDS data.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInformationDisplay::DisplayRdsDataL()
+    {
+    // Set default alignment.
+    if ( iLandscape )
+        {
+        //iRdsData->SetAlign( EAlfAlignHLocale, EAlfAlignVCenter )
+        iRdsData->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter );
+
+        }
+    else
+        {
+        iRdsData->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter );
+        }
+    // Start displaying.
+    iRdsDataMarqueeClet.StartL( KVRScrollDelayTime + KVRDisplayFadeTime);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irstationlogocontrol.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,704 @@
+/*
+* Copyright (c) 2008-2008 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:  Control for single station logo
+*
+*/
+
+
+#include <alf/alfcommand.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfenv.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftexture.h>
+#include <alf/alftexturemanager.h>
+#include <alf/alftimedvalue.h>
+
+#include "irdebug.h"
+
+#include "irimageconverter.h"
+#include "irstationlogocontrolobserver.h"
+#include "irstationlogocontrol.h"
+#include "irstationlogodata.h"
+
+// Time in milliseconds to spend animating the displays moving in and out of the screen
+const TInt KVRLogoFadeTime = 400;
+const TInt KTwo=-2;
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoControl::CIRStationLogoControl() : iCurrentId( KErrNotFound ),iError(KErrNone)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::ConstructL( CAlfEnv& aAlfEnv, TInt aControlGroupId, 
+										CAlfLayout* aParentLayout )
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::ConstructL()");
+    CAlfControl::ConstructL( aAlfEnv );
+ 
+    iDeck = CAlfDeckLayout::AddNewL( *this, aParentLayout );
+	iFadeOut=EFalse;
+    iCurrentImageConverter = CIRImageConverter::NewL();
+    iCurrentImageConverter->SetObserver( this );
+	iVisualSize = DisplayArea().Size();
+
+    CAlfControlGroup& group = Env().ControlGroup( aControlGroupId );
+    group.AppendL( this ); // Transfers ownership
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoControl* CIRStationLogoControl::NewL( CAlfEnv& aAlfEnv, 
+                                                    TInt aControlGroupId, 
+                                                    CAlfLayout* aParentLayout )
+    {
+    CIRStationLogoControl* self = new( ELeave ) CIRStationLogoControl;
+    CleanupStack::PushL( self );
+    self->ConstructL( aAlfEnv, aControlGroupId, aParentLayout );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoControl::~CIRStationLogoControl()
+    {
+    iLogoControlObserver = NULL;
+    delete iCurrentImageConverter;
+    
+    for( TInt i = 0 ; i < iLogoData.Count() ; i++ )
+    {
+    Env().CancelCustomCommands( iLogoData[i] );
+    }
+    iLogoData.ResetAndDestroy();
+    iLogoData.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Prepares the graphics for the logo that is to be displayed
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::PrepareLogoL( TInt aId )
+    {
+    IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::PrepareLogoL(aId=%d)", aId);
+    CIRStationLogoData* logoData = LogoDataForId( aId );
+    if( logoData && !logoData->Texture() )
+        {
+        StartConversionL( *logoData );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Switches the logo that is to be displayed
+// ---------------------------------------------------------------------------
+//
+TBool CIRStationLogoControl::SwitchToLogoL( TInt aId )
+    {
+    IRLOG_DEBUG2(" CIRStationLogoControl::SwitchToLogoL(aId=%d)", aId);
+    // No need to fade out or load new logo.
+    if ( aId != KErrNotFound )
+        {
+        PrepareLogoL( aId );
+        }
+
+    CIRStationLogoData* previousLogoData = LogoDataForId( iCurrentId );
+    CIRStationLogoData* newData = LogoDataForId( aId );
+    
+    // No need to fade out or load new logo.
+    if ( aId == iCurrentId && previousLogoData && previousLogoData->Visual() )
+        {
+        return ETrue;
+        }
+    // To Do 
+    // Fade the current logo out.Handled in View
+    /*if ( previousLogoData && previousLogoData->Visual() )
+        {
+        // Station logo.
+        FadeOutCurrentLogo( *previousLogoData->Visual() );
+        }*/
+		if(iError!=KErrNone)
+		{
+		return EFalse;
+		}
+    TBool logoAdded = EFalse;
+    iCurrentId = aId;
+    if( newData )
+        {
+        Env().CancelCustomCommands( newData, 
+        		CIRStationLogoData::EIRCustomEventLogoFadeOutComplete );
+        if( !newData->Visual() )
+            {
+            iDelayedFadeIn = EIRLogoNoDelay;
+
+            CAlfImageVisual* visual = NULL;
+            if( !newData->Visual() )
+                {
+                visual = CAlfImageVisual::AddNewL( *this, iDeck );
+                visual->SetOpacity( TAlfTimedValue( 0.0f ) );
+                visual->SetScaleMode( CAlfImageVisual::EScaleFitInside );
+                newData->SetVisual( visual );
+                }
+            else
+                {
+                visual = newData->Visual();
+                }
+ 
+            if( newData->Texture() )
+                {
+                visual->SetImage( TAlfImage( *newData->Texture() ) );
+                    FadeInStationLogoL( *visual );
+                }
+            else
+                {
+                if( newData != previousLogoData )
+                    {
+                    iDelayedFadeIn = EIRDelayedTextureImage;
+                    }
+                else
+                    {
+                    visual->SetOpacity( TAlfTimedValue( 1.0f ) );
+                    }
+                }
+            }
+        logoAdded = ETrue;
+        }
+
+    return logoAdded;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// Setter for logo data
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::SetLogosL( const RArray<TInt>& aIdArray , const CPtrC8Array& aRawData )
+	{
+	IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::SetLogosL() -- %d items", aRawData.Count());
+	iFadeOut=EFalse;
+	iError=KErrNone;
+	DestroyPreviousLogosL(aIdArray, aRawData);
+	iRet=0;
+	iLogoDisplay=EFalse;
+	}
+
+void CIRStationLogoControl::UpdateLogoL( TInt aId, const TDesC8& aRawData )
+    {
+    IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::UpdateLogoL(aId=%d)", aId);
+    TBool idFound = EFalse;
+    for( TInt i = 0 ; i < iLogoData.Count() ; i++ )
+        {
+        if( aId == iLogoData[i]->Id() )
+            {
+            // Update existing logo
+            if( aRawData == KNullDesC8 )
+                {
+                delete iLogoData[i];
+                iLogoData.Remove( i );
+                }
+            else
+                {
+                iLogoData[i]->SetRawData( aRawData );
+                }
+            idFound = ETrue;
+            i = iLogoData.Count();
+            }
+        }
+    if( !idFound && aRawData != KNullDesC8 )
+        {
+        CIRStationLogoData* data = CIRStationLogoData::NewLC( aId, aRawData );
+        iLogoData.AppendL( data );
+        CleanupStack::Pop( data );
+        }
+    CIRStationLogoData* logoData = LogoDataForId( iCurrentId );
+    if( logoData && logoData->Id() == aId )
+        {
+        StartConversionL( *logoData );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Setter for logo fade style.
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::SetLogoFadeStyle( TIRFadeStyle aFadeStyle )
+    {
+    iFadeStyle = aFadeStyle;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAlfControl.
+// VisualLayoutUpdated
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::VisualLayoutUpdated( CAlfVisual& /*aVisual*/ )
+    {
+    IRLOG_DEBUG(" CIRStationLogoControl::VisualLayoutUpdated()");
+
+        // Start the converter for current logo for animation purposes
+        CIRStationLogoData* logoData = LogoDataForId( iCurrentId );
+        if( logoData )
+            {
+            TRAP_IGNORE( StartConversionL( *logoData ) )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationLogoControl::SetLogoControlObserver
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::SetLogoControlObserver( MIRLogoControlObserver& aObserver )
+    {
+    IRLOG_DEBUG(" CIRStationLogoControl::SetLogoControlObserver()");
+    iLogoControlObserver = &aObserver;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MVRImageConverterObserver.
+// HandleImageConversionEventL
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::HandleImageConversionEventL( MIRImageConverterObserver::
+														TIRImageConversionEvent /*aEvent*/, 
+                                                         TInt aId, 
+                                                         TInt aError )
+    {
+    IRLOG_DEBUG3(" *** S60VisualRadio -- CIRStationLogoControl::HandleImageConversionEventL(aId=%d, aError=%d)", aId, aError);
+    iError=aError;
+    if( aError == KErrNone )
+        {
+        CFbsBitmap* bitmap = NULL;
+        CFbsBitmap* mask = NULL;
+        iCurrentImageConverter->TransferBitmapOwnership( bitmap, mask );
+        CIRStationLogoData* convertedLogoData = LogoDataForId( aId );
+        if( convertedLogoData )
+            {
+            convertedLogoData->UpdateTextureL( bitmap, mask ); // transfers ownership
+            }
+        else
+            {
+            delete bitmap;
+            delete mask ;
+            }
+        CIRStationLogoData* currentLogoData = LogoDataForId( iCurrentId );
+        if( currentLogoData && currentLogoData->Visual() && currentLogoData == convertedLogoData )
+            {
+             // Logo is ready for display, check that everything is OK before displaying the logo.
+            iLogoControlObserver->LogoReadyForDisplayL();
+            // Display the logo.
+            currentLogoData->Visual()->SetImage( TAlfImage( *currentLogoData->Texture() ) );
+            if( iDelayedFadeIn == EIRDelayedTextureImage )
+                {
+                FadeInStationLogoL( *currentLogoData->Visual() );
+                }
+            }
+        }
+    else
+        {
+        iLogoControlObserver->LogoConversionFailedL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Maps the logo ID to station logo data
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoData* CIRStationLogoControl::LogoDataForId( TInt aId )
+    {
+    CIRStationLogoData* logo = NULL;
+    for( TInt i = 0 ; i < iLogoData.Count() ; i++ )
+        {
+        if( iLogoData[i]->Id() == aId )
+            {
+            logo = iLogoData[i];
+            i = iLogoData.Count();
+            }
+        }
+    return logo;
+    }
+
+// ---------------------------------------------------------------------------
+// Starts the conversion for hte current logo
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::StartConversionL( CIRStationLogoData& aLogoData )
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::StartConversionL()");
+    if( iVisualSize.iWidth && iVisualSize.iHeight )
+        {
+        iCurrentImageConverter->SetDataL( aLogoData.RawData() );
+        if(iError==KErrNone)
+	        {
+	        iCurrentImageConverter->StartL( iVisualSize, aLogoData.Id() );
+	        }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Fades the station logo in.
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::FadeInStationLogoL( CAlfVisual& aVisual )
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::FadeInCurrent()");
+
+    iDelayedFadeIn = EIRLogoNoDelay;
+
+    // Get start point and fade time.
+    TAlfTimedPoint point = FadeInStartPoint( aVisual );
+    TInt fadeTime = point.iX.TimeToTargetinMilliSeconds();
+
+    // Fade the logo in.
+    TAlfTimedValue opacity( 0.0f );
+    opacity.SetStyle( EAlfTimedValueStyleDecelerate );
+    opacity.SetTarget( 1.0f, fadeTime );
+
+    aVisual.SetFlag( EAlfVisualFlagManualPosition );
+    aVisual.SetPos( point );
+    aVisual.SetOpacity( opacity );
+
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// Fades the current logo out. If logo is not the default logo, deletes it's
+// data after the fading (ansynchronously).
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::FadeOutCurrentLogo( CAlfVisual& aVisual )
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoControl::FadeOutCurrentLogo");
+
+    CIRStationLogoData* logoData = LogoDataForId( iCurrentId );
+
+    // Get target point.
+    TAlfTimedPoint point = FadeOutTargetPoint( aVisual );
+    TInt fadeTime = point.iX.TimeToTargetinMilliSeconds();
+
+    // Fade the logo out.
+    TAlfTimedValue opacity( aVisual.Opacity().ValueNow() );
+    opacity.SetStyle( EAlfTimedValueStyleAccelerate );
+    opacity.SetTarget( 0.0f, fadeTime );
+
+    aVisual.SetFlag( EAlfVisualFlagManualPosition );
+    aVisual.SetPos( point );
+    aVisual.SetOpacity( opacity );
+
+    if( logoData ) 
+        {
+        // This is not default logo, send event to destroy logo data.
+        IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoControl::FadeOutAndDeleteCurrent() -- sending custom event to delete logo data: 0x%x", logoData);
+        Env().Send( TAlfCustomEventCommand( CIRStationLogoData::EIRCustomEventLogoFadeOutComplete, 
+                                            logoData, 
+                                            NULL), KVRLogoFadeTime );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Returns fades out target point.
+// ---------------------------------------------------------------------------
+//
+TAlfTimedPoint CIRStationLogoControl::FadeOutTargetPoint( CAlfVisual& aVisual ) const
+    {
+    TAlfTimedPoint point( 0.0f, 0.0f );
+    point.SetStyle( EAlfTimedValueStyleDecelerate );
+
+    TAlfRealPoint size = aVisual.Size().ValueNow();
+    TAlfRealPoint pos = aVisual.Pos().ValueNow();
+    
+    point = TAlfTimedPoint( pos.iX, pos.iY );
+
+    TAlfRealPoint target = aVisual.Pos().Target();
+    
+    switch ( iFadeStyle )
+        {
+        case EIRFadeUnknown:
+            point.SetTarget( TAlfRealPoint( target.iX, target.iY ), KVRLogoFadeTime );
+            break;
+        case EIRFadeLeftToRight:
+            point.SetTarget( TAlfRealPoint( target.iX + size.iX, target.iY ), KVRLogoFadeTime );
+            break;
+        case EIRFadeRightToLeft:
+            point.SetTarget( TAlfRealPoint( target.iX - size.iX, target.iY ), KVRLogoFadeTime );
+            break;
+        case EIRFadeTopToBottom:
+            point.SetTarget( TAlfRealPoint( target.iX, target.iY + size.iY ), KVRLogoFadeTime );
+            break;
+        case EIRFadeBottomToTop:
+            point.SetTarget( TAlfRealPoint( target.iX, target.iY - size.iY ), KVRLogoFadeTime );
+            break;
+        case EIRFadeNoFade:
+            point.SetTarget( TAlfRealPoint( target.iX, target.iY ), 0 );
+            break;
+        default:
+            break;
+        }
+    return point;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns fade in start point.
+// ---------------------------------------------------------------------------
+//
+TAlfTimedPoint CIRStationLogoControl::FadeInStartPoint( CAlfVisual& aVisual ) const
+    {
+    TAlfTimedPoint point( 0.0f, 0.0f );
+    point.SetStyle( EAlfTimedValueStyleDecelerate );
+
+    TAlfRealPoint size = aVisual.Size().ValueNow();
+    TAlfRealPoint pos = aVisual.Pos().ValueNow();
+    
+    point = TAlfTimedPoint( pos.iX, pos.iY, KVRLogoFadeTime );
+    
+    switch ( iFadeStyle )
+        {
+        case EIRFadeUnknown:
+            point.iX.SetValueNow( pos.iX );
+            point.iY.SetValueNow( pos.iY );
+            break;
+        case EIRFadeLeftToRight:
+            point.iX.SetValueNow( pos.iX - size.iX );
+            point.iY.SetValueNow( pos.iY );
+            break;
+        case EIRFadeRightToLeft:
+            point.iX.SetValueNow( pos.iX + size.iX );
+            point.iY.SetValueNow( pos.iY );
+            break;
+        case EIRFadeTopToBottom:
+            point.iX.SetValueNow( pos.iX );
+            point.iY.SetValueNow( pos.iY - size.iY );
+            break;
+        case EIRFadeBottomToTop:
+            point.iX.SetValueNow( pos.iX );
+            point.iY.SetValueNow( pos.iY + size.iY );
+            break;
+        case EIRFadeNoFade:
+            point.iX.SetValueNow( pos.iX );
+            point.iY.SetValueNow( pos.iY );
+            point.SetTarget( pos, 0 );
+            break;
+        default:
+            break;
+        }
+    return point;
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Sets the default image to the current visual
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::DestroyPreviousLogosL( const RArray<TInt>& aIdArray , 
+										const CPtrC8Array& aRawData )
+	{
+	
+	for(TInt value=0;value<iLogoData.Count();value++)
+	{
+	TInt Value=iLogoData[value]->Id();	
+	}
+	if(iCount==0)
+			{
+			iCurrentId=KTwo;
+			iCount++;
+			iLogoData.ResetAndDestroy();
+			for( TInt i = 0 ; i < aRawData.Count() ; i++ )
+				{
+				if(aIdArray.Count())
+					{
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+					iLogoData.AppendL( data );
+					CleanupStack::Pop( data );
+					}
+				}
+			}
+
+	else if(iCount==1)
+		{
+		if(aRawData.Count()==1)
+			{
+			iCurrentId=KTwo;
+			TInt i=0;
+			delete iLogoData[i];
+			iLogoData.Remove( i);
+			for( TInt i = 0 ; i < aRawData.Count() ; i++ )
+				{
+				if(aIdArray.Count())
+					{
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+					iLogoData.AppendL( data );
+					CleanupStack::Pop( data );
+					}	
+				}
+			}
+		else
+			{
+			for( TInt i = 1 ; i < aRawData.Count() ; i++ )
+				{
+				if(aIdArray.Count())
+					{
+
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+					iLogoData.AppendL( data );
+					CleanupStack::Pop( data );
+					}
+				}
+			}
+		iCount++;		
+		}
+
+	else if(iCount>1)
+		{
+		if(aRawData.Count()==1)
+			{
+			iLogoData.ResetAndDestroy();
+			iLogoDisplay=ETrue;
+
+			for( TInt i = 0 ; i < aRawData.Count() ; i++ )
+				{
+				if(aIdArray.Count())
+					{
+
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+					iLogoData.AppendL( data );
+					CleanupStack::Pop( data );
+					}
+				}
+			}
+		else if(aRawData.Count()==2 && iLogoData.Count()==1)
+			{
+			for( TInt i = 1 ; i < aRawData.Count() ; i++ )
+				{
+				if(aIdArray.Count())
+					{
+
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+					iLogoData.AppendL( data );
+					CleanupStack::Pop( data );
+					}
+				}
+			}
+		else if(iLogoData.Count()==1&&!iLogoDisplay)
+			{
+			for( TInt i = 1 ; i < aRawData.Count() ; i++ )
+				{
+				if(aIdArray.Count())
+					{
+
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+					iLogoData.AppendL( data );
+					CleanupStack::Pop( data );
+					}
+				}
+			iLogoDisplay=ETrue;
+			}
+		else if(!iLogoDisplay)
+			{
+
+
+			for(TInt j = 0;j<aRawData.Count();j++)
+				{
+				if(aIdArray.Count())
+					{
+
+					CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[j], aRawData[j] );
+
+					for(TInt i = 0;i<iLogoData.Count();i++)
+						{
+						if(!(data->Id()==iLogoData[i]->Id())&&(!iRet))
+							{
+							if(i==1)
+								{
+								DefaultlogoHandlingL(aIdArray, aRawData);
+								}
+							else
+								{
+								delete iLogoData[i];
+								iLogoData.Remove( i);
+								for( TInt i = 1 ; i < aRawData.Count() ; i++ )
+									{
+									if(aIdArray.Count())
+										{
+
+										CIRStationLogoData* data = CIRStationLogoData::
+											NewLC( aIdArray[i], aRawData[i] );
+										iLogoData.AppendL( data );
+										CleanupStack::Pop( data );
+										}
+									}
+								iRet++;
+								}
+
+							}
+
+
+						}
+
+					CleanupStack::PopAndDestroy( data );
+					}
+				}
+			}
+
+
+		}
+}
+// ---------------------------------------------------------------------------
+// Sets the default image to the current visual
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::DefaultlogoHandlingL( const RArray<TInt>& aIdArray , 
+								const CPtrC8Array& aRawData )
+	{
+	  for(TInt j = 0;j<aRawData.Count();j++)
+	  {
+	  	TInt i=0;
+	  	delete iLogoData[i];
+		iLogoData.Remove( i);
+		for( TInt i = 1 ; i < aRawData.Count() ; i++ )
+			{
+			if(aIdArray.Count())
+			{
+			CIRStationLogoData* data = CIRStationLogoData::NewLC( aIdArray[i], aRawData[i] );
+			iLogoData.AppendL( data );
+			CleanupStack::Pop( data );
+			}
+			}
+	  }
+	}
+
+// ---------------------------------------------------------------------------
+// Sets the default image to the current visual
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoControl::FadeOutLogo(TInt /*aId*/)
+	{
+	CIRStationLogoData* previousLogoData = LogoDataForId( iCurrentId );
+	// Fade the current logo out.
+    if ( previousLogoData && previousLogoData->Visual() )
+        {
+        // Station logo.
+        iFadeOut=ETrue;
+        FadeOutCurrentLogo( *previousLogoData->Visual() );
+        }
+	 iCurrentId=KTwo;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uicontrolssrc/irstationlogodata.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2008-2008 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:  Data for single station logo
+*
+*/
+
+
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftexture.h>
+#include "irdebug.h"
+
+#include "irstationlogodata.h"
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoData::CIRStationLogoData( TInt aId, const TDesC8& aRawData ) : 
+    iData( aRawData ),    
+    iId( aId ), 
+    iTextureId( KErrNotFound )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::ConstructL()
+    {
+ 	//TO DO :: The line can be removed in future nad written to fix
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoData* CIRStationLogoData::NewLC( TInt aId, const TDesC8& aRawData )
+    {
+    CIRStationLogoData* self = new( ELeave ) CIRStationLogoData( aId, aRawData );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoData::~CIRStationLogoData()
+    {
+    DestroyVisual();
+    DestroyTexture();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the raw data
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::SetRawData( const TDesC8& aRawData )
+    {
+    iData.Set( aRawData );
+    }
+
+// ---------------------------------------------------------------------------
+// Provides the raw data
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CIRStationLogoData::RawData() const
+    {
+    return iData;
+    }
+
+// ---------------------------------------------------------------------------
+// Updates the texture
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::UpdateTextureL( CFbsBitmap* aBitmap, CFbsBitmap* aMask )
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoData::UpdateTextureL()");
+    DestroyTexture();
+    iBitmap = aBitmap;
+    iMask = aMask;
+    iTexture = &CAlfEnv::Static()->TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, 
+    								this, EAlfTextureFlagRetainResolution );
+    }
+
+// ---------------------------------------------------------------------------
+// Destroys the texture
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::DestroyTexture()
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoData::DestroyTexture()");
+    if( iTextureId != KErrNotFound )
+        {
+        CAlfEnv::Static()->TextureManager().UnloadTexture( iTextureId );
+        }
+    delete iTexture;
+    iTexture = NULL;
+    
+    delete iBitmap;
+    iBitmap = NULL;
+    delete iMask;
+    iMask = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the visual for this logo data
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::SetVisual( CAlfImageVisual* aVisual )
+    {
+    DestroyVisual();
+    iVisual = aVisual;
+    }
+
+// ---------------------------------------------------------------------------
+// Provides the visual
+// ---------------------------------------------------------------------------
+//
+CAlfImageVisual* CIRStationLogoData::Visual()
+    {
+    return iVisual;
+    }
+
+// ---------------------------------------------------------------------------
+// Destroys the visual
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::DestroyVisual()
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoData::DestroyVisual()");
+    if( iVisual )
+        {
+        iVisual->RemoveAndDestroyAllD();
+        }
+    iVisual = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Provides the texture
+// ---------------------------------------------------------------------------
+//
+CAlfTexture* CIRStationLogoData::Texture()
+    {
+    return iTexture;
+    }
+
+// ---------------------------------------------------------------------------
+// Provides the ID
+// ---------------------------------------------------------------------------
+//
+TInt CIRStationLogoData::Id() const 
+    {
+    return iId;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MAlfBitmapProvider.
+// Provides the bitmap for the texture
+// ---------------------------------------------------------------------------
+//
+void CIRStationLogoData::ProvideBitmapL(TInt aId, CFbsBitmap*& aBitmap, CFbsBitmap*& aMaskBitmap)
+    {
+    IRLOG_DEBUG2(" *** S60VisualRadio -- CIRStationLogoData::ProvideBitmapL(aId=%d)", aId);
+    iTextureId = aId;
+    // Ownership is transfered so the members are NULLED
+    aBitmap = iBitmap;
+    iBitmap = NULL;
+    aMaskBitmap = iMask;
+    iMask = NULL;
+
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MAlfEventHandler.
+// Handles the Alf events
+// ---------------------------------------------------------------------------
+//
+TBool CIRStationLogoData::OfferEventL( const TAlfEvent& aEvent )
+    {
+    TBool eventHandled( EFalse );
+    if( aEvent.IsCustomEvent() && aEvent.CustomParameter() == EIRCustomEventLogoFadeOutComplete )
+        {
+        IRLOG_DEBUG(" *** S60VisualRadio -- CIRStationLogoData::OfferEventL() -- deleting visual and texture");
+        DestroyVisual();
+        DestroyTexture();
+        eventHandled = ETrue;
+        }
+
+    return eventHandled;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/iraccessoryobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2005-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:  Observer of accessory states.
+*
+*/
+
+
+#ifndef CIRACCESSORYOBSERVER_H
+#define CIRACCESSORYOBSERVER_H
+
+#include <accessoryserver.h>
+#include <accessorymode.h>
+#include <accpolaccessorymode.h>
+
+class MIRHeadsetEventObserver;
+
+/**
+ *  Observer of accessory states.  
+ *
+ *  Instance of this class observes notifications of headset state changes. 
+ *  In its turn it sends notifications to its observer of those changes.
+ *
+ */
+NONSHARABLE_CLASS( CIRAccessoryObserver ): public CActive
+    {
+public:  
+
+    /**
+     * C++ default constructor.
+     */
+    CIRAccessoryObserver();
+
+    /**
+     * Static constructor.
+     *
+     * @param aAccessoryServer Existing session for The Accessory Server.
+     */
+    static CIRAccessoryObserver* NewL();
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CIRAccessoryObserver();
+
+    /**
+     * Sets observer. The observer will be notified when headset has been 
+     * pressed or headset is connected/disconnected.
+      *
+     * @param aObserver Observer
+     */
+    void SetObserver(MIRHeadsetEventObserver* aObserver);
+
+    /**
+     * Returns accessory connection state.
+     *
+     * @return <code>ETrue </code> if accessory is connected, 
+     * <code>EFalse</code> otherwise
+     */
+    TBool IsHeadsetConnected() const;
+    
+    // from base class CActive
+    /**
+     * From CActive
+     *
+     * @see CActive::RunL()
+     */    
+    void RunL();
+
+    /**
+     * From CActive
+     *
+     * @see CActive::DoCancel()
+     */        
+    void DoCancel();
+    
+protected:  
+
+private: 
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     * 
+     * @param aAccessoryServer Existing session for The Accessory Server.
+     */
+    void ConstructL();
+
+public:
+
+protected:
+
+    /** 
+     * Instance that gets notifications of the headset state changes 
+     */
+    MIRHeadsetEventObserver* iObserver;
+
+private:    // Data
+
+    /** 
+     * Session for The Accessory Server. 
+     */
+    RAccessoryServer iAccessoryServer;
+    
+    /** 
+     * Accessory Mode sub-session 
+     */            
+    RAccessoryMode          iAccessoryModeSession;
+    
+    
+    /** 
+     * Accessory Mode structure, with active audio information. 
+     */
+    TAccPolAccessoryMode    iAccPolAccessoryMode;
+    };
+
+#endif      // CIRACCESSORYOBSERVER_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/iraddmanuallystationcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRAddManuallyContainer
+*
+*/
+
+
+#ifndef IRADDMANUALLYSTATIONCONTAINER_H
+#define IRADDMANUALLYSTATIONCONTAINER_H
+
+#include <aknlists.h>
+#include <AknsBasicBackgroundControlContext.h> 
+#include <aknsdrawutils.h>
+#include <aknscontrolcontext.h>
+#include <AknsSkinInstance.h>
+#include <aknsutils.h>
+#include <aknform.h>
+#include <eikedwin.h>
+#include <eikdialg.h> 
+class CIRBaseView;
+class CIRDialogLauncher;
+//class CEikEdwin;
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include <baclipb.h>
+#include <f32file.h>
+class CEikEdwin;
+class CGulIcon;
+
+class CIRAddManuallyStationView;
+
+class CIRDialogLauncher;
+class CAknNavigationControlContainer;
+class CAknNavigationDecorator;
+
+class Stateind_uid : public TUid
+{
+  public:
+   	Stateind_uid(int stateind)
+  	{ 
+  		iUid = stateind;
+  	}
+};
+
+
+
+/**
+ * Container class for Add Manually View.
+ */
+class CIRAddManuallyStationContainer : public CAknForm,public MCoeControlObserver
+    {
+    
+public:  // Methods
+  
+    /**
+	 * CIRAddManuallyStationContainer::NewL(const TRect& aRect)
+	 * Two phased constructor
+	 * Creates a CIRAddManuallyStationViewContainer object which
+	 * will draw itself to aRect
+	 * @param aRect. The rectangle to which this view will be drawn to
+	 * @return. A pointer to the created instance of 
+	 * CIRAddManuallyStationViewContainer.
+	 */
+     static CIRAddManuallyStationContainer* NewL(CIRAddManuallyStationView* aView); //(CAknToolbar* aToolbar)
+       
+    /**
+     * Destructor.
+     */
+    ~CIRAddManuallyStationContainer();
+
+	/**
+     * C++ default constructor.
+     *
+	 * @param aView View of this container.
+     */
+    CIRAddManuallyStationContainer( CIRAddManuallyStationView* aView );
+    
+
+	/**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	 */
+	IMPORT_C void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+  
+    
+ public:    // New functions
+    	/**
+        * To Handle the key events
+        */
+		void DefaultVauleL();
+		
+		/**
+        * copies to clipboard
+        */
+		void CopyDataL();
+		
+		/**
+        * paste from clipboard
+        */
+		void PasteDataL();
+		
+		/**
+        * Saves the URL name nd description of the station to be saved
+        */
+		void SaveDataL();
+		
+		/**
+		 * Edits the URL name and description of the station
+		 */
+		void EditStationL();
+		
+		/**	
+     	* Checks whether Name Field is empty or not. If it contains empty then 
+    	* replace with the default name ("Unnamed")
+    	*
+   		* @return NA
+        */
+		void ReplaceEmptyName( TDes& aUrlName );
+		
+		
+		/**
+		 * Replaces the ugly char symbols with space
+		 */
+		void ReplaceUglyChar(TDes& aUrlName);
+		
+	
+        /**	
+    	 * Checks if there is an URI that contains scheme (="http://")
+     	 * and at some characters after that.
+     	 *
+     	 * @return ETrue if Name text field contains a scheme and at least one character 
+     	 *         Otherwise EFalse.
+     	 */
+		TBool ValidateUrlL();
+		
+		/**
+		 * Checks if there are any invalid characters in URL
+		 * @return ETrue if URL contains invalid characters
+		 */
+		TBool HasInvalidCharsInUrl(TDes& aUrl);
+		
+    public: // Functions from base classes
+
+       /**
+        * To Handle the key events
+        */
+ 		void HandlePointerEventL  (const TPointerEvent &  aPointerEvent) ;
+ 		void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+    	void HandleResourceChange (TInt aType);
+   
+ 		/**
+        * From CAknForm, called just before options menu is displayed.
+        * @param aResourceId Resource ID identifying the menu pane to initialize
+        * @param aMenuPane The in-memory representation of the menu pane
+        */
+      	void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+        
+        /**
+        * From CAknForm, takes care of command handling.
+        * @param aCommand Command to be handled
+        */        
+        void ProcessCommandL( TInt aCommand );
+     	void SizeChanged();
+		 	
+    protected:
+
+        /**
+        * From CAknForm, called by the framework if user presses a button
+        * @param aButtonId The ID of the pressed button.
+        * @return Should the dialog exit (EFalse or ETrue)
+        */
+        TBool OkToExitL( TInt aButtonId );
+
+        /**
+        * From CAknForm, called by the framework just before form is shown
+        */
+        void PostLayoutDynInitL();
+		
+    private:
+
+       /**
+        * To save station information to favourites
+        */
+     	void AddToFavouritesL();
+     	
+     	
+     	void PreLayoutDynInitL();
+     	     	
+        
+    private:    // Data
+    	// True if it is edit station.
+    	TBool iIsEditStation;
+		TBool iIsSpaceEntered;
+		TBool iIsTextEntered;
+    	TBuf<10> iTextBoxValidateUrl;
+    	TBool iUnNamedFlag;
+    	
+    	CAknNavigationControlContainer* iNaviPane;
+        CAknNavigationDecorator* iNaviDecorator; 
+    public:
+    	CIRDialogLauncher*  iDialogLauncher;
+    	CIRIsdsPreset* iPreset;
+        
+        TBuf<256> 			iSelText;
+        TBuf<256> 			iStationURL;
+        TBuf<256> 			iStationName;
+        TBuf<256> 			iStationDescription;
+        TBool				iIsEnable;
+                          
+
+public:
+
+   
+    TUid iAddManPrevID;
+    CIRAddManuallyStationView* iView;
+    
+    
+    //Previous ViewId
+    TUid iAddManPrevId;
+    
+  	
+    };
+
+#endif      // IRADDMANUALLYSTATIONCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/iraddmanuallystationview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRAddManuallyStationView
+*
+*/
+
+
+#ifndef _CIRADDMANUALLYSTATIONVIEW_H
+#define _CIRADDMANUALLYSTATIONVIEW_H
+
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include <e32base.h>
+#include "irbaseview.h"
+
+
+class CIRAddManuallyStationContainer;
+class CIRAddStationsTimer;
+
+/**
+ * Add Manually View, adds radio channels to favorites.
+ */
+class CIRAddManuallyStationView : public CIRBaseView, public MAknToolbarObserver	
+    {
+    
+public: 
+
+    /**
+     * static constructor
+     */
+     static CIRAddManuallyStationView* NewL(const TRect& aRect);
+     
+    /**
+     * Static constructor.
+     */
+    static CIRAddManuallyStationView* NewLC(const TRect& aRect);
+    
+    /**
+     * Destructor.
+     */
+    ~CIRAddManuallyStationView();
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+
+
+	/**
+     * For Touch Toolbar
+     */
+	void DynInitToolbarL(TInt aResourceId, CAknToolbar* aToolbar );
+    void OfferToolbarEventL( TInt aCommand );
+  	void ConstructToolbarL();
+  	void SetToolbarItems();
+ 	void SetAddStationsTitleL();
+ 	
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+   	void HandleForegroundEventL( TBool aForeground );
+   	
+   	void RefreshView();
+   	
+protected:  
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId, 
+        TUid aCustomMessageId, 
+        const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+private: 
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL(const TRect& aRect);
+
+	/**
+     * C++ default constructor.
+     */
+    CIRAddManuallyStationView();
+
+
+private:    // Data
+
+	/** 
+	 * Container for this view. 
+	 */
+		
+	/** 
+	 * Moving item index. If KErrNotFound, no item is moving at the moment. 
+	 */
+	TInt iMovingFrom;
+
+    /**
+     * View Id of the previous view.  
+     */
+    TVwsViewId iPrevViewId;
+
+    /** 
+     * Is the start up of application ongoing. 
+     */    
+    TBool iStartUp;
+    
+ 	CIRAddStationsTimer* iAddStationsTimer; 
+ 	
+ 	  
+public:
+
+
+    CIRAddManuallyStationContainer* iContainer;
+    
+    /**
+ 	 * Checks whether any char is entered in URL and 
+ 	 * Name fields
+ 	 */
+ 	TBool iIsTextEntered;
+ 	
+ 	/**
+ 	 * Checks whether any space is entered in URL and 
+ 	 * Name fields
+ 	 */
+ 	TBool iIsSpaceEntered;
+ 	
+    TBool iIsCopied;
+    
+    };
+
+
+class CIRAddStationsTimer : public CActive
+	{
+public:
+									//Member Functions
+	public:
+        static CIRAddStationsTimer* NewL(CIRAddManuallyStationContainer& aContainer);
+        
+        void ConstructL();
+        
+        ~CIRAddStationsTimer();     // Destruction
+        
+        void IssueRequest();  // issue request
+       
+        void DoCancel();       // Cancel request
+        
+        // Defined as pure virtual by CActive
+        // implementation provided by this class.
+         void RunL();     
+        
+        // Defined as pure virtual by CActive
+        // implementation provided by this class.
+  		void ExecuteL();
+
+ 		void StopTimer();
+      
+    private:
+        
+        RTimer iTimer;      // Asynchronous service provider.
+        
+        TInt iCounter;
+        
+		CIRAddStationsTimer(CIRAddManuallyStationContainer& aContainer);        // Construction
+		
+	public:
+	
+		
+		CIRAddManuallyStationContainer& iContainer;
+	};  
+
+
+#endif      // _CIRADDMANUALLYSTATIONVIEW_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/iralarmobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2006-2007 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 IRALARMOBSERVER_H
+#define IRALARMOBSERVER_H
+
+#include <asclisession.h>
+//d #include <e32property.h>
+
+class CIRUi;
+ 
+	
+/**
+ * This is the alarm observer class is used for alarm observing
+ * When alarm is comes or made it calls HandleAlarmStart which does the call handling
+ * When call is disconnected it calls HandleAlarmEnd to handle the scenerio
+ *
+ * @code
+ * 
+ * CIRAlarmObserver* obj
+ * obj = CIRAlarmObserver::NewL(instance of CIRUi* aUi); //creating call observer
+ * obj->Start();//starting the observer
+ *
+ * @endcode
+ * 
+ */
+
+NONSHARABLE_CLASS(CIRAlarmObserver) : public CActive
+	{
+								//member functions
+public:
+
+	/**
+	 * Function : NewL
+	 * Function returns an instance of CIRAlarmObserver
+	 * Two phase constructor
+	 * @param CIRUi instance
+	 * @return instance of CIRAlarmObserver
+	 */
+	static CIRAlarmObserver* NewL(CIRUi* aUi);
+	
+	/**
+	 * Function : NewLC
+	 * Function returns an instance of CIRAlarmObserver
+	 * Two phase constructor
+	 * @param CIRUi instance
+	 * @return instance of CIRAlarmObserver
+	 */
+	static CIRAlarmObserver* NewLC(CIRUi* aUi);
+
+	/**
+	 * Function : ~CIRAlarmObserver
+	 * Default destructor calls Cancel function which cancel the active request 
+	 */
+	~CIRAlarmObserver();
+	
+	/**
+	 * Function : Start
+	 * Function starts the call observer
+	 */
+	void Start();
+	
+	/**
+	 * Function : RunL
+	 * This is the RunL function if a call is recieved or disconnected when the player 
+	 *	is active, is handled here
+	 */	
+	void RunL();
+	
+	/**
+	 * Function : DoCancel
+	 * Function stops the call observer if it is active
+	 */
+	void DoCancel();
+	
+	/**
+	 * Function : RunError
+	 * Function which handles RunL error
+	 * @param Error value 
+	 */
+	TInt RunError(TInt aError);
+
+private:	
+	/**
+	 * Function : ConstructL
+	 * Function does all the initializations
+	 * Two phase constructor
+	 * @param CIRNowPlayingView instance
+	 */
+	void ConstructL(CIRUi* aUi);
+	
+	/**
+	 * Function : CIRAlarmObserver
+	 * Function is the default constructor, sets the CActive priority, Line status
+	 */
+	CIRAlarmObserver();
+
+							//data member declaration
+private:
+	
+	//The client-side interface to the Symbian OS alarm server
+	RASCliSession iAlarmSession;
+	
+	//Alarm id
+	TAlarmId iAlarmId;
+	
+	//instance of Now Playing View 
+	CIRUi* iUi;
+	
+	//Checks whether alarm is on or off
+	TBool iAlarmOn;
+	};
+	
+#endif	//IRALARMOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irapplication.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRAPPLICATION_H
+#define IRAPPLICATION_H
+
+#include <aknapp.h>
+
+//========================================class declaration CIRApplication============================================
+
+/**
+ * This class Creates the document
+ * 
+ * @code
+ *
+ * Creates the document class.
+ * new (ELeave) CIRDocument(*this); 
+ * AppDllUid() - returns the UID for the IR application 
+ *
+ * @endcode
+ *
+ */
+     
+class CIRApplication : public CAknApplication
+    {
+private:
+    
+     /**
+	 * Function : CreateDocumentL()
+	 * Inherited from class CApaApplication
+     */
+    CApaDocument* CreateDocumentL();
+    
+     /**
+	 * Function : AppDllUid().
+	 * @return TUid,the UID for the IR application.
+     */
+    TUid AppDllUid() const;
+     /**
+	 * Function : PreDocConstructL().
+	 */
+    void PreDocConstructL();
+    
+public:
+
+     /**
+	 * Function : GetInstanceFlag().
+	 * @return the bool value for iSecondInstance
+     */
+    TBool GetInstanceFlag();
+    
+private:    
+     /**
+	 * iSecondInstance
+     */
+    TBool iSecondInstance;
+    };
+
+#endif // IRAPPLICATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/iraudioroutingobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2005-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:  Header for MIRAudioRoutingObserver. Interface for observing 
+*                audio routing events
+*
+*/
+
+
+#ifndef MIRAUDIOROUTINGOBSERVER_H
+#define MIRAUDIOROUTINGOBSERVER_H
+
+#include "vraudioutils.hrh"
+
+/**
+ *  Interface for observing audio routing events.
+ *
+ *  Implementer will be notified when audio routing changes
+ *  between IHF and headset.
+ *
+ */
+class MIRAudioRoutingObserver
+    {
+    
+public:  // Methods
+
+	/**
+	 * Notifies of a requested audio routing change. Changes requested
+	 * by other applications do not generate a notification.
+	 *
+	 * @param aOutputSource Current audio output source
+	 */
+    virtual void AudioRoutingChangedL(
+        TVROutputDestination aOutputDestination) = 0;
+
+    };
+
+#endif      // MIRAUDIOROUTINGOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irautomatedbitrateselection.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRAUTOMATEDBITRATESELECTION_H
+#define IRAUTOMATEDBITRATESELECTION_H
+
+#include <e32def.h>
+
+//high quality selection default for WLAN network
+const TInt KHighQuality = 2;
+
+//high quality selection default for 3G network
+const TInt KMediumQuality = 1;
+
+//high quality selection default for GPRS network
+const TInt KLowQuality = 0;
+
+//limit for high bit rate greater than or equals 128kbps
+const TInt KHighBitRateLimit = 128;
+
+//limit for medium bit rate between 128kbps and 48kps
+const TInt KMediumBitRateLimit = 48;
+
+#endif //IRAUTOMATEDBITRATESELECTION_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irbacksteppingservicewrapper.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2007 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 Back Stepping Service
+*
+*/
+
+
+#ifndef CIRBACKSTEPPINGSERVICEWRAPPER_H
+#define CIRBACKSTEPPINGSERVICEWRAPPER_H
+
+#include <e32base.h>
+#include <vwsdef.h>
+
+class MLiwInterface;
+class CLiwGenericParamList;
+class CLiwServiceHandler;
+
+/**
+ *  Back Stepping (BS) Service wrapper for Internet Radio.
+ */
+class CIRBackSteppingServiceWrapper : public CBase
+    {
+
+public:
+
+    /**
+     * Static constructor.
+     *
+     * @param aUid Application UID.
+     */
+    static CIRBackSteppingServiceWrapper* NewL( TUid aUid );
+
+    /**
+     * Destructor.
+     */
+     ~CIRBackSteppingServiceWrapper();
+
+    /**
+     * Forwards view activation event to BS Service.
+     *
+     * @param   aViewId View id of the view where back is called.
+     * @param   aEnter Indicates if it is entry or exit activation.
+     */
+    void HandleViewActivationEventL( const TVwsViewId aViewId, TBool aEnter );
+
+    /**
+     * Forwards back command to BS Service.
+     *
+     * @param   aViewId View id of the view where back is called.
+     * @return  Returns Etrue if BS Service consumed the command, otherwise returns EFalse.
+     */
+    TBool HandleBackCommandL( const TVwsViewId aViewId );
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CIRBackSteppingServiceWrapper();
+
+    /**
+     * 2nd phase constructor
+     *
+     * @param aUid Application UID.
+     */
+    void ConstructL( TUid aUid );
+
+    /**
+     * Initializes BS Service.
+     *
+     * @param aUid Application UID.
+     */
+    void InitializeL( TUid aUid );
+
+    /**
+     * Handles the result of a LIW command
+     *
+     * @return Returns ETrue if LIW command executed, otherwise returns EFalse.
+     */
+    TBool HandleResultL();
+
+private: // data
+
+    /**
+     * AIW Service Handler.
+     * Own.
+     */
+    CLiwServiceHandler* iServiceHandler;
+
+    /**
+     * BS Service interface returned by LIW.
+     * Own.
+     */
+    MLiwInterface* iBsInterface;
+
+    /**
+     * In param list.
+     * Not own.
+     */
+    CLiwGenericParamList* iInParamList;
+
+    /**
+     * Out param list.
+     * Not own.
+     */
+    CLiwGenericParamList* iOutParamList;
+    };
+
+#endif // CIRBACKSTEPPINGSERVICEWRAPPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irbaseview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2008-2008 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 CIRBaseView
+*
+*/
+
+
+#ifndef C_CIRBASEVIEW_H
+#define C_CIRBASEVIEW_H
+
+#include <aknview.h>
+
+#include "irsystemeventobserver.h"
+
+
+const TInt KIRIconSubCellIndex = 3;
+const TInt KAlphanumericStart = 48; //Scan code of '0' key on keypad.
+const TInt KAlphanumericEnd = 59;   //Scan code of 'w' key on keypad.
+const TInt KAphaUpperCaseStart = 65;
+const TInt KAphaUpperCaseEnd = 91;
+const TInt KAphaLowerCaseStart = 97;
+const TInt KAphaLowerCaseEnd = 122;
+const TInt KAknExListFindBoxTextLength = 10;
+
+const TInt KFont = 200;
+const TSize KBitmapSize = TSize(59, 59);
+
+class CIRIsdsWrapper;
+class CIRNowPlayingWrapper;
+class CIRUi;
+class CIRAddManuallyStationForm;
+class CIRDialogLauncher;
+/**
+ * Base View
+ *
+ * Base View, which is used to hold common functionality across different views.
+ * At the moment contains only some event handling and some view activation related functionality.
+ */
+class CIRBaseView :public CAknView,
+    public MIRSystemEventObserver
+    {
+public:
+
+ 	/**
+     * Available observers to be used in derived classes.
+     */
+    enum TIRObservers
+        {
+        EIRNone = 0x00000000,
+        EIRSystemEventObserver = 0x00000002
+        };
+
+    /**
+     * Destructor.
+     */
+    ~CIRBaseView();
+
+    /**
+     * Set the title of the current view. This is a utility method for more easy
+     * title setting. SetTitleL has two overloaded methods: one for resource
+     * based strings and one for descriptor based strings.
+     *
+     * @param aResourceid A resource id pointing to a text
+     */
+    void SetTitleL( TInt aResourceId );
+    /**
+     * @param aTitleText Descriptor which holds the title text
+     */
+    void SetTitleL( const TDesC& aTitleText );
+
+    /**
+     * Takes care of pushing and poping views for view backtracking
+     */
+    void HandleViewStackL(TUid aCustomMessageId);
+
+	// from base class CAknView
+    void HandleCommandL( TInt aCommand );
+    void HandleForegroundEventL( TBool aForeground );
+	// from base class MEikMenuObserver
+
+   
+    /**
+    * GetCurrentFocus
+    * Returns Data for the current focus in the Listbox
+    */
+    TInt GetCurrentFocus();
+    
+    /**
+    * GetCurrentTopItemInstance
+    * Returns Data for the top item index in the Listbox
+    */
+   
+    TInt GetCurrentTopItem();
+    
+    /**
+    * SetCurrentFocus
+    * Sets Data for the current focus in the Listbox
+    */
+    void SetCurrentFocus(TInt aCurrentFocus);
+    
+    /**
+    * SetCurrentTopItemInstance
+    * Sets Data for the top item index in the Listbox
+    */
+    void SetCurrentTopItem(TInt aTopItemIndex);
+    
+	//From the base class MIRSystemEventObserver    
+    void HandleSystemEventL(TIRSystemEventType aEventType);
+
+
+protected:
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     *
+     * @param aResourceId A resource id for BaseContructL
+     */
+    void ConstructL( TInt aResourceId );
+
+    /**
+     * C++ default constructor.
+     */
+    CIRBaseView();
+
+    /**
+     * Enable event observing.
+     *
+     * @param aObservers List of observers to be enabled
+     */
+     void EnableObserverL( TInt aObservers );
+
+    /**
+     * Disable event observing.
+     *
+     * @param aObservers List of observers to be disabled
+     */
+    void DisableObserver( TInt aObservers );
+
+
+	// from base class CAknView
+    void DoActivateL( const TVwsViewId& aPrevViewId,
+                      TUid aCustomMessageId,
+                      const TDesC8& aCustomMessage );
+    void DoDeactivate();
+
+private:
+
+    /**
+     * Saves information about which observers are currently enabled/disabled.
+     */
+    TInt iObserverEnabled;
+
+public:    //data
+    
+    CIRUi* iUi;
+
+    /**
+     * iIsdsWrapper
+     * instance of the IsdsWrapper class
+     * To be used by all the views
+     */
+	CIRIsdsWrapper *iIsdsWrapper;
+    /**
+     * iNowPlayingWrapper
+     * instance of the CIRNowPlayingWrapper class
+     * To be used by all the views
+     */
+	CIRNowPlayingWrapper *iNowPlayingWrapper;
+	
+	/**
+	* iCurrentFocus
+	* Data for the current focus in the Listbox
+	*/
+	TInt iCurrentFocus;
+	
+	/**
+	* iTopItemIndex
+	* Data for the top item index in the Listbox
+	*/
+	TInt iTopItemIndex;
+    };
+
+#endif /* C_CIRBASEVIEW_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irbat.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef	IRBAT_H
+#define	IRBAT_H
+
+#include <e32def.h>
+
+/**
+ * Callback for battery Status indicator 
+ * To display the battery level
+ */
+class MBatteryObserver
+	{
+public:
+   /**
+	* DisplayBatteryValueL() 
+	* Loads the image icon based on battery level
+	*/
+	virtual void DisplayBatteryValueL(TInt)=0;
+	};
+
+#endif //IRBAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irbsserviceconstants.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008 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:  Constants for Back Stepping Service Provider
+ *
+*/
+
+
+#ifndef IR_BS_SERVICE_CONSTANTS_H
+#define IR_BS_SERVICE_CONSTANTS_H
+
+// BS Service implementation UID
+const TInt KBSServiceImplUid( 0x2000F840);
+
+// from LIW
+_LIT8( KIRGenericParamServiceCmdIDStr, "cmd" );
+
+// BSS Service and Interface ID
+_LIT8( KIRBSServiceID, "Service.BackStepping" );
+_LIT8( KIRBSInterface, "IBackStepping" );
+
+// BSS commands
+_LIT8( KIRBSCmdInitialize, "Initialize" );
+_LIT8( KIRBSCmdForwardActivationEvent, "ForwardActivationEvent" );
+_LIT8( KIRBSCmdHandleBackCommand, "HandleBackCommand" );
+
+// BSS in param names
+_LIT8( KIRBSInParamAppUid, "AppUid" );
+_LIT8( KIRBSInParamState, "State" );
+_LIT8( KIRBSInParamEnter, "Enter" );
+_LIT8( KIRBSInParamCheckOnly, "CheckOnly" );
+
+// BSS out param names
+_LIT8( KIRBSOutParamStatusInfo, "StatusInfo" );
+
+#endif // IR_BS_SERVICE_CONSTANTS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/ircategoryview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRCategoryView
+*
+*/
+
+
+#ifndef CIRCATEGORYVIEW_H
+#define CIRCATEGORYVIEW_H
+
+#include "irbaseview.h"
+#include "MViewsResponseAndErrorObserver.h"
+
+#include "MLogoDownloadObserver.h"
+#include "IRActiveNetworkObserver.h"
+
+
+class CIRCategoryViewContainer;
+
+
+/**
+ * SearchResults View
+ */
+class CIRCategoryView : public CIRBaseView,public MViewsResponseAndErrorObserver,
+						public MLogoDownloadObserver,public MIRActiveNetworkObserver
+    {
+    
+public: //Methods
+
+	//ENums to indicate the currently selected item in the listbox.
+ 	enum TCurrentSelectedItem
+		{
+		EGenreData=0,
+		ELanguageData,
+		ECountryData,
+		ETopStationData
+		};
+    /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRCategoryView* NewL();
+
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRCategoryView* NewLC();
+    
+    /**
+     *~CIRCategoryView()
+     * Destructor.
+     */
+    ~CIRCategoryView();
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+	
+	/**
+	 * void SetStatusPaneTextL()
+	 * Sets the title pane of the search results view
+	 */
+	void SetStatusPaneTextL();
+
+	/**
+	* DoChannelRequestL
+	* Issues a Request to Isds for getting the Channels
+	*/
+	void DoChannelRequestL();
+	
+	/**
+	* void CIRCategoryView::ResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+	
+	/**
+	* ErrorL()
+	* Handles the errors from Isds
+	*/
+	void ErrorL();
+	
+	/**
+	* PresetResponseL
+	* Issues a listen request
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+
+	/**
+	* DynInitMenuPaneL
+	* Dynamically initialises a menu pane
+	*/
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+
+
+    /**
+     * From CAknView
+     */
+	void HandleStatusPaneSizeChange();
+	
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+	void HandleForegroundEventL( TBool aForeground );
+	/**
+    * PresetLogoDownloadedL()
+    * CallBack Function Returning the Preset With Logo
+    */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+	
+	/**
+    * PresetLogoDownloadError()
+    * CallBack Function Returning the Preset With no Logo/error while downloading logo
+    */
+	void PresetLogoDownloadError(CIRIsdsPreset* aPreset);
+	
+	/**
+	* LogoRequestL()
+	* Called by the container of this view
+	*/
+	void AdRequestL();
+	/*
+	* SetActualFilteredItemIndex()
+	* sets the original index of the filtered item
+	*/
+	void SetActualFilteredItemIndex(TInt aIndex);
+	
+	/**
+	* GetFilteredIndex()
+	* Returns the filtered Index
+	*/
+	TInt GetFilteredIndex();
+	
+	/*
+	 * GetFirstLaunchFlag()
+	 * returns the whether the view is launching for the first time/
+	 * coming back from that has been activated from this view
+	 */
+	TBool GetFirstLaunchFlag() ;
+	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+	
+	
+public:
+	//from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+
+protected:  //Methods
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	
+private: //Methods
+
+    /**
+     * ConstructL()
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+	/**
+     * CIRCategoryView()
+     * C++ default constructor.
+     */
+    CIRCategoryView();
+
+
+private:    // Data
+
+	/** 
+	 * iContainer
+	 * Container for this view. 
+	 */
+	CIRCategoryViewContainer* iContainer;
+
+ 
+	/**
+	* iLoadingCancelled
+	* Data whether loading has been cancelled
+	*/
+	TBool iLoadingCancelled;
+	/*
+	 * iIndex
+	 *  
+	 */
+	 TInt iIndex;
+	TInt iFilteredIndex;
+	
+	TBool iFirstTimeLaunchFlag;
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+	
+		
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	
+	/*
+	 * iRequestIssued
+	 * Checks whether the request has been issued
+	 */
+	TBool iRequestIssued;
+	
+	
+
+public:	
+	/**
+	 * iCategoryReqMade
+	 * boolean value to know whether the category request
+	 * has made to isds or not
+	 */
+	TBool iCategoryReqMade;
+	
+	 
+		
+    };
+
+#endif      // CIRCATEGORYVIEW_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/ircategoryviewcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRCategoryViewContainer
+*
+*/
+
+
+#ifndef CIRCATEGORYVIEWCONTAINER_H
+#define CIRCATEGORYVIEWCONTAINER_H
+
+#include <aknlists.h>
+#include <EIKLBX.H>
+#include <aknsfld.h> 
+#include <eikclb.h> 
+#include "irimageconverterobserver.h"
+
+
+class CIRCategoryView;
+class CIRCategoryViewContainer;
+/**
+ * This classes are used for Advertisements
+ */
+class CIRCategoryCustomListBox;
+class CIRImageConverter;
+class CIRFilteredModel;
+class MIRListBoxArray;
+class CIRCategoryAdvertisingListBox;
+/**
+ * Container for Search Results View.
+ */
+class CIRCategoryViewContainer : public CCoeControl/*public CAknDoubleStyleListBox*/ , public MEikListBoxObserver,
+                            public MIRImageConverterObserver
+    
+    {
+    
+public:  // Methods
+
+    /**
+    * NewL.
+    * Two-phased constructor.
+    * Create a CIRCategoryViewContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aCtaegoryView The Category view's instance.
+    * @return a pointer to the created instance of CIRCategoryViewContainer.
+    */
+    static CIRCategoryViewContainer* NewL( CIRCategoryView& aCtaegoryView, const TRect& aRect );
+
+    /**
+    * NewLC.
+    * Two-phased constructor.
+    * Create a CIRCategoryViewContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aCtaegoryView The Category view's instance.
+    * @return a pointer to the created instance of CIRCategoryViewContainer.
+    */
+    static CIRCategoryViewContainer* NewLC( CIRCategoryView& aCtaegoryView, const TRect& aRect );
+    
+    /**
+     * ConstructL
+     * 2nd phase constructor.
+     */
+     void ConstructL( const TRect& aRect);
+    
+	/**
+     * CIRCategoryViewContainer()
+     * C++ default constructor.
+	 * @param aView View of this container.
+     */
+    CIRCategoryViewContainer(CIRCategoryView& aCtaegoryView);
+    
+    /**
+     * ~CIRCategoryViewContainer()
+     * Destructor.
+     */
+    ~CIRCategoryViewContainer();
+
+	/**
+     * UpdateSearchResultsViewL()
+     * updates the search results data to the search results list
+     */
+ 	void UpdateCategoryViewL(CDesCArray* aCategory);
+ 	
+ 	
+	// from base class CCoeControl
+
+     /**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::OfferKeyEventL() 
+	 */    
+	
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+ 	/**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	 */
+	void GetHelpContext( TCoeHelpContext& aContext ) const;
+	
+	/**
+	 * GetCurrentItemIndex()
+	 * returns the index of the currently selected item
+	 */ 
+	TInt GetCurrentItemIndex() const;
+
+    /**
+     * From MEikListBoxObserver HandleListBoxEventL
+     */ 
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+    
+    
+	/**
+	 * GetListBoxTopIndex()
+	 * returns the index of the top item
+	 */ 
+	TInt GetListBoxTopIndex() const;
+	
+	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+
+	/**
+	* SizeChanged()
+	* Responds to changes to the size and position of the contents of this control.
+	*/
+	void SizeChanged(/*const TRect& aRect*/);
+	
+	/**
+	* HandleResourceChange()
+	* Handles a change to the control's resources.
+	*/
+	void HandleResourceChange(TInt aType);
+	/*
+	* CreateFindBoxL()
+	* Creates the find box for dynamic filtering
+	*/
+	CAknSearchField* CreateFindBoxL(CEikListBox* aListBox,
+	CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle);
+	/*
+	* DisableFindBox()
+	* disable the listbox when foxus is not present
+	*/
+	void DisableFindBox();
+	/**
+	* Function : StartTimer
+	* Function called to get the actual index of the station
+	*/
+	 void  Comparestrings();
+	
+ 	/**
+ 	* HandleImageConversionEventL()
+ 	* from base class MIRImageConverterObserver
+ 	*/
+	void HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent,
+				 TInt aId, TInt aError );
+ 	/**
+ 	* PresetLogoDownloadL()
+ 	* Used to download the  logos depending the preset values.
+ 	*/
+ 	void PresetLogoDownloadL(CIRIsdsPreset* aPreset);	
+ 	/**
+ 	* CreateCustomListBoxL()
+ 	* Creates the custom listbox and updates the list according to that
+ 	*/
+	void CreateCustomListBoxL();
+ 	/**
+ 	* CreateListBoxL()
+ 	* Creates ListBox depending upon the presence of Advertisement
+ 	*/
+	void CreateListBoxL();
+ 	/**
+ 	* OpenUrlL()
+ 	* Used to connect to advertisement url
+ 	*/
+	void OpenUrlL( const TDesC& aHttpLink );
+	
+	/**
+	* GetLogoNotSupported()
+	* returns whether the advertisement is supported by the sdk r not
+	*/
+	TBool GetLogoNotSupported();
+	/**
+	* HandleLogoErrorL()
+	* called from the iCategoryView when the logo is not downloaded
+	*/
+	void HandleLogoErrorL();
+private: //Methods
+
+
+	// from base class CCoeControl
+	/**
+     * From CCoeControl
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect ) const;
+
+private:    // Data
+    /**
+    * iCategoryView
+    * reference of the category view
+    */
+    CIRCategoryView &iCategoryView;
+	CFbsBitmap*     iAdBitmap;
+	/*
+	* iCurrentItemConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iCurrentItemConverter;
+   	/*
+   	* iLandScapeCount
+   	* used to call the aknfind s HandlePopupFindSizeChanged function only once
+   	*/
+	TInt iLandScapeCount;
+	TBool iFilteredFlag;
+	TInt iError;
+public:
+    
+  	 /**
+	 * iItemArray
+	 * array for the listbox model
+	 */ 
+	 CDesCArray* iItemArray;
+	 /**
+	 * iCategoryListBox
+	 * Instance of the Category ListBox
+	 */
+  	CIRCategoryAdvertisingListBox* iCategoryListBox;
+  	/*
+	* iFindString
+	* Used to Get the Entered Search string
+	*/
+	
+	TBuf<KSearchBoxTextLength> iFindString;
+	/*
+	* iSearchTextBox
+	* Instance for CAknSearchField;
+	*/
+	CAknSearchField* 			iSearchTextBox;	
+	/*
+	* iFilteredModel
+	* Instance for CAknFilteredTextListBoxModel;
+	*/
+	CIRFilteredModel* iFilteredModel;
+
+    /*
+	* iConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iConverter;
+	/**
+	* Temporary preset to store the raw data of Advertisements
+	*/
+	CIRIsdsPreset*  iAdvPreset;
+    /*
+    * iAdPresent
+    * returns whether the advetisment is present or not
+    */
+    TBool iAdPresent;
+    /*
+    * iBgContext
+    * Instance of CAknsBasicBackgroundControlContext
+    */
+    CAknsBasicBackgroundControlContext* iBgContext;
+    /*
+    * iAdvString
+    * sets the advertisement string
+    */
+    HBufC* iAdvString;
+    /*
+    * iListBoxArray
+    * Instance of MIRListBoxArray
+    */
+   	MIRListBoxArray* iListBoxArray;
+   	
+   	/*
+   	* iRequestForAdvertisement
+   	* sets when the request for advertisment conversation is made
+   	*/
+	TBool iRequestForAdvertisement;
+   	/*
+   	* iLogoDownloadError
+   	* sets when the  advertisment future is not supported
+   	*/
+	TBool iLogoDownloadError;
+    };
+
+#endif      // CIRCATEGORYVIEWCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irchangeobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRCHANGEOBSERVER_H
+#define IRCHANGEOBSERVER_H
+
+#include <e32base.h>
+#include <e32property.h>
+
+/**
+ * MIRChangeObserver
+ * Abstract interface for handling property change events.
+ */
+class MIRChangeObserver
+	{
+	public:
+	/**
+	 * This is a callback function which is called when a property value of type int is changed.
+	 * @param aCategory UID of Publish And Subscribe category
+	 * @param aKey subkey to specify the category event; to be used with Publish And Subscribe
+	 * @param aValue the new value
+	 */
+	 virtual void HandleChangeL(const TUid& aCategory, const TUint aKey, 
+	 	const TInt aValue) = 0;
+	};
+
+
+// CLASS DECLARATION
+
+/**
+ * CIRObserver Observer class that observes changes of Property values and propogates them further.
+ * The class defines a handle to a property, a single data value representing
+ * an item of state information.
+ *
+ * @Code
+ *
+ * Updates an int value reference in correspondence 
+ * with the current Property value
+ * CIRObserver::GetValue(TInt& aValue)
+ *
+ * @endcode
+ */
+class CIRObserver:public CActive
+	{
+public:
+	/**
+     * Two-phased constructor.
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+	static CIRObserver* NewL(MIRChangeObserver& aObserver,const TUid& aCategory, 
+		const TUint aKey,const RProperty::TType aPropertyType);
+		
+	/**
+     * Destructor.
+     */	
+	~CIRObserver();
+	
+	/**
+     * Updates an int value reference in correspondence with the current Property value
+     * @param aValue handle to a value which will be updated
+     */
+	void GetValue(TInt& aValue) const;
+	
+protected:  // Functions from base classes
+
+    /**
+     * From CActive
+     * Handles an active object’s request completion event
+     */
+    void RunL();
+
+    /**
+     * From CActive, 
+     * Cancels and outstanding request
+     */
+    void DoCancel();
+
+private:
+	/**
+     * C++ default constructor.
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with Publish And Subscribe
+     * @param aPropertyType property type to observe
+     **/
+	CIRObserver(MIRChangeObserver& aObserver, const TUid& aCategory, 
+		const TUint aKey, const RProperty::TType aPropertyType);
+		
+	/**
+     * default Symbian 2nd phase constructor.
+     */
+	void ConstructL();
+	
+
+private:
+
+	//Value of a subscribed category property of type int.
+ 	TInt                        iValueInt;
+	
+	// handle to Publish And Subscribe component
+    RProperty                   iProperty;
+
+	MIRChangeObserver&  iObserver;
+    // UID of Publish And Subscribe category
+    TUid                        iCategory;
+    // subkey to be used with Publish And Subscribe
+    TUint                       iKey;
+    //Type of the observed property.
+    RProperty::TType            iPropertyType;
+
+	};
+
+#endif // IRCHANGEOBSERVER_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/ircommon.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRCOMMON_H
+#define IRCOMMON_H
+
+#include <e32base.h>
+namespace
+    {
+
+    // ---------------------------------------------------------------------------
+    // Performs ResetAndDestroy() and Close() on the supplied object.
+    // ---------------------------------------------------------------------------
+    //
+    template <class T>
+    inline void DoCleanupResetAndDestroyClose( TAny* aSelf )
+        {
+        T* self = static_cast<T*>( aSelf );
+        if ( self )
+            {
+            self->ResetAndDestroy();
+            self->Close();
+            }
+        }
+
+    // ---------------------------------------------------------------------------
+    // Pushes an object onto the cleanup stack.
+    //
+    // Use this only for objects that you want to have ResetAndDestroy() and
+    // Close() called upon their destruction.
+    // ---------------------------------------------------------------------------
+    //
+    template <class T>
+    inline void CleanupResetAndDestroyClosePushL( T& aObject )
+        {
+        CleanupStack::PushL( TCleanupItem( DoCleanupResetAndDestroyClose<T>, &aObject ) );
+        }
+
+    }
+
+#define KUIDIRAPP 0x2000B499
+
+//violates PC Lint Warning 569: Loss of information
+//(initialization) (32 bits to 31 bits)
+
+/*
+* Application Uid
+*/
+static const TUid KUidInternetRadioApp = {KUIDIRAPP};
+
+/** Maximum UID for the views. If some view starts to use this id, this */
+/** value must be changed.                                              */ 
+const TUid KIRMaximumViewId = { 0x00000010 };
+
+/*
+* View IDs
+*/
+static const TUid KIRTandCViewID = {1};
+static const TUid KIRMainChoiceViewID = {2};
+static const TUid KIRDiscoverStationsViewID = {3};
+static const TUid KIRBrowseByCategoryViewID = {4};
+static const TUid KIRStationsViewID = {5};
+static const TUid KIRNowPlayingViewID = {6};
+static const TUid KIRStationInformationViewID = {7};
+static const TUid KIRSavedStationsViewID = {8};
+static const TUid KIRSearchViewID = {9};
+static const TUid KIRSearchResultsViewID = {10};
+static const TUid KIRAddManuallyStationViewID = {11};
+static const TUid KIRProgressBarViewID = {12};
+static const TUid KIRUpdateWarningViewID = {15};
+static const TUid KIRPlsViewID = {17};
+static const TUid KIRSettingsViewId = {18};
+static const TUid KIRSettingsPopupViewID = {19};
+static const TUid KIRAccessPointView = {20};
+static const TUid KIRGPRSBitRateView = {21};
+static const TUid KIR3GBitRateView = {22};
+static const TUid KIRWIFIBitRateView = {23};
+static const TUid KIRStationDirectoryViewId = {30};
+static const TUid KIRCostWarningViewId={26};
+static const TUid KIRCategoryViewId={27};
+static const TUid KIRStationsViewId={28};
+static const TUid KIRTopStationsViewId={29};
+/** UID of the Channel List View */
+const TUid KVRChannelListViewId = { 0x00000004 };
+const TUid KIRHistoryListViewId = { 24 };
+const TUid KIRFirstTimeViewId =   { 0x00000005 };
+static const TUid KIRStationInfoViewId = {31};
+
+static const TUid KIRNowPlayingViewCustomMessageId = {106};
+static const TUid KHistoryLaunch = {100};
+static const TUid KMainViewLaunch = {104};
+static const TUid KNowPlayingLaunch = {107};
+static const TUid KNowPlayingFrmMainView = {108};
+
+
+ 
+_LIT8(KIRNowPlayingViewCustomMessagePlayAfterActivation, "PlayAfterActivation");
+
+/*
+* Mif Files
+*/
+_LIT(KMIFFILE,"InternetRadio.mif");
+_LIT(KEDWINSKINFILE,"InternetRadioEdwinSkin.mif");
+
+/*
+* File path
+*/
+_LIT(KTAB,"\t");
+
+/*
+* Application name
+*/
+_LIT(KAPPNAME,"Internet Radio");
+
+/*
+* SVG name
+*/
+_LIT(KSVGLOADING,"qgn_ir_loading.svg");
+_LIT(KBUFFERING,"qgn_ir_buffering_anim.svg");
+
+//Different Bitrate ranges
+enum TIRBitRateQuality
+    {
+	EIRStandardQuality,
+	EIRHighQuality,
+	EIRBestQuality
+	};
+
+#endif // IRCOMMON_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/ircontroleventobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2005-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:  Header file for CIRControlEventObserver
+*
+*/
+
+
+#ifndef CIRCONTROLEVENTOBSERVER_H
+#define CIRCONTROLEVENTOBSERVER_H
+
+#include <e32base.h>
+#include <e32property.h>
+#include "irui.h"
+
+#define KMAXLENGTH 256
+
+
+NONSHARABLE_CLASS( CIRControlEventObserver ) : public CActive
+	{  
+	
+ public:
+
+    /**
+     * Property type. Cannot use RProperty::TType because EByteArray == EText.
+     */
+    enum TVRPropertyType
+    	{
+    	EVRPropertyInt, // Integral property type.
+    	EVRPropertyByteArray, // Byte-array (8 bit), max size 512 bytes
+    	EVRPropertyText // Text (16 bit), max size 512 bytes
+    	};
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+    IMPORT_C static CIRControlEventObserver* NewL(
+        CIRUi& aObserver, 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const RProperty::TType aPropertyType);
+
+    /**
+     * Destructor.
+     */
+    ~CIRControlEventObserver();
+        
+    /**
+     * Subscribes the object to listen to the specified key. Does nothing if already active.
+     * Must be called after construction, or after calling Cancel().
+     */
+    IMPORT_C void SecondConstructL();
+    
+ 	
+private:
+
+    /**
+     * C++ default constructor overload.
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+	CIRControlEventObserver(
+	    CIRUi& aObserver, 
+	    const TUid& aCategory, 
+	    const TUint aKey, 
+	    const RProperty::TType aPropertyType);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     **/
+    void ConstructL();
+
+protected:  
+    
+    // from base class Cactive
+    /**
+     * From CActive
+     *
+     * @see CActive::RunL()
+     */
+    void RunL();
+
+    /**
+     * From CActive, 
+     * 
+     * @see CActive::DoCancel()
+     */
+    void DoCancel();
+
+private: // data
+
+ 
+    /**
+     * Observer to be notified when particular Property value has changed
+     */
+    CIRUi& iObserver;
+    
+    /** 
+     * UID of Publish And Subscribe category
+     */
+    TUid iCategory;
+    
+    /**
+     * Subkey to be used with Publish And Subscribe
+     */
+    TUint iKey;
+    
+    RProperty iProperty;
+
+    RProperty::TType iPropertyType;
+
+ 	/** The cached value of the key. */
+        mutable TBuf8<KMAXLENGTH> iText;
+        TInt iValue;
+	};
+
+#endif  // CIRCONTROLEVENTOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/ircostwarningcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRCostWarningContainer
+*
+*/
+
+
+
+#ifndef CIRCOSTWARNINGCONTAINER_H
+#define CIRCOSTWARNINGCONTAINER_H
+
+#include <aknlists.h>
+#include <eikrted.h>
+
+class CIRCostWarningView;
+
+/**
+ * Container for cost warning View.
+ */
+class CIRCostWarningContainer :public CCoeControl 
+        
+    {
+    
+public:  // Methods
+
+    enum TIRTermsTextType
+        {
+        EIRTermsTextInvalid,
+        EIRTermsTextHeading,
+        EIRTermsTextNormal
+        };
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* Create a CIRPlsContainer object, which will draw itself to aRect.
+	* @param aRect The rectangle this view will be drawn to.
+    * @param aView which is a plsview's reference
+    * @return a pointer to the created instance of CIRPlsContainer.
+	*/
+	static CIRCostWarningContainer* NewL(const TRect& aRect ,CIRCostWarningView &aView );
+
+	/**
+	* NewLC.
+	* Two-phased constructor.
+	* Create a CIRPlsContainer object, which will draw itself
+	* to aRect.
+	* @param aRect Rectangle this view will be drawn to.
+	* @param aView which is a plsview's reference
+	* @return A pointer to the created instance of CIRPlsContainer.
+	*/
+	static CIRCostWarningContainer* NewLC(const TRect& aRect,CIRCostWarningView &aView);
+	
+    /**
+     * 2nd phase constructor.
+     *
+     */
+    void ConstructL( const TRect& aRect );
+    /**
+     * C++ default constructor.
+     *
+	 * @param aView View of this container.
+     */
+    CIRCostWarningContainer(CIRCostWarningView &View);
+    
+    /**
+     * Destructor.
+     */
+    ~CIRCostWarningContainer();
+
+		
+	// from base class CCoeControl
+
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+     /**
+	 * TandCAcceptL().
+	 * For setting the terms and conditions flag
+	 */
+    void TandCAcceptL() const;
+    
+    /**
+	 * CostWarningContinueL().
+	 * For displaying the soft keys
+	 */
+    void CostWarningContinueL();
+     
+    /**
+	 * UpdateTermsL().
+	 * To update the required data whenever called
+	 */
+	void UpdateTermsL();
+	
+	/**
+	 * CreateEditorL().
+	 * @no param .
+	 * Creates the CEikRichTextEditor object
+	 */
+	CEikRichTextEditor* CreateEditorL() const;
+	
+    
+    /**
+	 * SetReadOnly().
+	 * @aReaOnly param as ETrue or EFalse .
+	 * Making the editor as ReadOnly
+	 */
+    void SetReadOnly( TBool aReadOnly );
+    
+    /**
+	 * SetDataContentL().
+	 * @aText param is RichText object .
+	 * Setting the RichText into the Editor
+	 */
+    void SetDataContentL( CRichText& aText );
+    
+    /**
+	 * CreateRichTextDataL().
+	 * @no param .
+	 * Creating the CRichText object
+	 */
+    void CreateRichTextDataL();
+    
+    /**
+	 * GetEditor().
+	 * @no param .
+	 * Getting the contents of RichText to the Editor
+	 */
+    CRichText* GetEditor() const;
+    
+    /**
+	 * HandlePointerEventL().
+	 * Handles pointer events.
+	 */
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+    
+
+
+private: //Methods
+    
+    /**
+	 * ReadTermsFromFileL.
+	 * @no param .
+	 * Reads the text from a HTML file
+	 */
+    void ReadTermsFromFileL();
+     
+    /**
+	 * LayoutTermsL
+	 * @no param
+	 * Inserts the text into the RichText object (Heading of Terms & Conditions). 
+	 */
+     void LayoutTermsL();
+     
+    /**
+	 * GetNextTermsL
+	 * @param aCounter,aTermsText,aTermsType
+	 */
+     TBool GetNextTermsL(TInt& aCounter, TPtrC& aTermsText, TIRTermsTextType& aTermsType);
+     
+    // from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect ) const;
+	
+	/**
+	 * CountComponentControls()
+	 * @no param .
+	 */
+	TInt CountComponentControls() const;
+	
+	/**
+	 * SizeChanged().
+	 * @no param .
+	 */
+	void SizeChanged();
+	
+	/**
+	 * ComponentControl().
+	 * @aIndex as  param .
+	 */
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	
+	/**
+	 * HandleResourceChange().
+	 * Handles Changes in the Resources
+	 */
+	void HandleResourceChange(TInt aType);
+	
+    
+
+
+private:    // Data
+
+    /**
+	 * iTermsData.
+	 * Data extracted from the HTML file.
+	 */
+	HBufC* iTermsData;
+	
+    /**
+	 * iBackGroundControlContext.
+	 * 
+	 */
+	CAknsBasicBackgroundControlContext* iBackGroundControlContext;
+	
+	// Array of fonts of terms data.
+	CArrayFix<TAknLogicalFontId>* iTermsFonts;
+
+	// Array of lines of terms data.
+	CArrayFix<TPtrC>* iTermsLines;
+	
+    /**
+	 * iTotalTextHeight.
+	 * 
+	 */
+	TInt iTotalTextHeight;
+	
+    /**
+	 * iMsgView.
+	 * A reference to CIRCostWarningView view .
+	 */
+	CIRCostWarningView	&iMsgView;
+	
+    /**
+	 * iEditor.
+	 * CEikRichTextEditor object .
+	 */
+	CEikRichTextEditor* iEditor; 
+    /**
+	 * iRichText.
+	 * RichText object
+	 */
+	CRichText* iRichText;
+	
+	
+    };
+
+#endif      // CIRCOSTWARNINGCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/ircostwarningview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRCostWarningView
+*
+*/
+
+
+#ifndef CIRCOSTWARNINGVIEW_H
+#define CIRCOSTWARNINGVIEW_H
+
+
+#include "irbaseview.h"
+#include <aknview.h> 
+class CIRCostWarningContainer;
+
+
+class CIRCostWarningView : public CAknView
+    {
+    
+public: 
+
+    /**
+     * Static constructor.
+     */
+    static CIRCostWarningView* NewLC(const TRect& aRect);
+    
+    /**
+     * Destructor.
+     */
+    ~CIRCostWarningView();
+    
+    /**
+	 * Two-phased constructor.
+	 * Returns a pointer to the Cost Warning view
+	 */
+     static CIRCostWarningView* NewL(const TRect& aRect);
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+
+
+protected:  
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
+                      TUid /*aCustomMessageId*/, 
+                      const TDesC8& /*aCustomMessage */);
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleStatusPaneSizeChange()
+	 */
+	void HandleStatusPaneSizeChange();	
+
+private: 
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL(const TRect& /*aRect*/);
+
+	/**
+     * C++ default constructor.
+     */
+    CIRCostWarningView();
+
+private:    // Data
+
+	/** 
+	 * Container for this view. 
+	 */
+	CIRCostWarningContainer* iContainer;
+	
+	   
+    };
+
+#endif      // CIRCostWarningView_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irdelayedactionobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2007-2007 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:  Observer interface for delayed actions
+*
+*/
+
+
+#ifndef M_MIRDELAYEDACTIONOBSERVER_H
+#define M_MIRDELAYEDACTIONOBSERVER_H
+
+/**
+ * Observer interface for delayed actions.
+ *
+ * Delayed actions are used to process user actions that were done prior to 
+ * network connection being up as soon as the connection is established.
+ */
+class MIRDelayedActionObserver
+    {
+
+public:    
+    
+    /**
+     * Called when the network connection is up and ready to be used.
+     */
+    virtual void ExecuteDelayedActionL() = 0;
+
+    };
+
+#endif // M_MIRDELAYEDACTIONOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irdialoglauncher.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,149 @@
+/*
+* 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:  Header file for a class showing dialogs and notes.
+*
+*/
+
+
+#ifndef CIRDIALOGLAUNCHER_H
+#define CIRDIALOGLAUNCHER_H
+
+#include <e32base.h>
+#include <aknnotifystd.h>
+
+class CAknGlobalNote;
+class CAknInformationNote;
+
+/**
+ * Defines dialog launcher. 
+ *
+ * Helper class to show dialogs, notes etc.
+ */
+class CIRDialogLauncher : public CBase
+    {
+
+public:
+
+    /**
+     * Static constructor.     
+     */
+    static CIRDialogLauncher* NewL();
+
+    /**
+     * Destructor
+     */
+    ~CIRDialogLauncher();
+            
+	/**
+     * Displays a confirmation note
+     *
+     * @param aText Text to show.
+     * @param aWaiting If true the function blocks until the note is dismissed.
+     */    
+    void ShowConfirmationNoteL( const TDesC& aText, TBool aWaiting ) const;
+
+    /**
+     * Displays a confirmation note
+     *
+     * @param aTextResourceId Resource ID for the text string.
+     * @param aWaiting If true the function blocks until the note is dismissed.
+     */    
+    void ShowConfirmationNoteL( TInt aTextResourceId, TBool aWaiting ) const;
+
+    /**
+     * Displays an information note
+     *
+     * @param aTextResourceId Resource ID for the text string.
+     * @param aWaiting If true the function blocks until the note is dismissed.
+     * @param aDialogId The dialog ID for publishing its usage (given only if publishing is wanted).     
+     */    
+    void ShowInformationNoteL( TInt aTextResourceId, TBool aWaiting,
+    		 TInt aDialogId = KErrNotFound ) const;
+
+    /**
+     * Displays an information note
+     *
+     * @param   aErrorCode  The error code whose related text is being resolved.
+     */    
+    void ShowInformationNoteL( TInt aErrorCode ) const;
+
+    /**
+     * Displays an error note
+     *
+     * @param aTextResourceId Resource ID for the text string.
+     * @param aWaiting If true the function blocks until the note is dismissed.
+     */    
+    void ShowErrorNoteL( TInt aTextResourceId, TBool aWaiting ) const;
+
+    /**
+     * Displays a global note
+     *
+     * @param aType Note type.
+     * @param aTextResourceId Resource ID for the text string.
+     */    
+    void ShowGlobalNoteL( TAknGlobalNoteType aType, TInt aTextResourceId ) const;
+
+	
+	    
+	/**
+     * Launches a query dialog.
+     * @param aResourceId The resource ID of the dialog to load.
+     * @param aDialogId The dialog ID for publishing its usage (given only if publishing is wanted).
+     * @return ID of the button that closed the dialog, or zero if it was the cancel button.
+     */
+    void ShowQueryDialogL( TInt aResourceId, TInt& aValue,TInt aDialogId = KErrNotFound) const;
+
+	/**
+     * Launches a query dialog.
+     * @param aResourceId The resource ID of the dialog to load.
+     * @param aPrompt Text for prompt.
+     * @param aDialogId The dialog ID for publishing its usage (given only if publishing is wanted).
+     * @return ID of the button that closed the dialog, or zero if it was the cancel button.
+     */
+    void ShowQueryDialogL(TInt aResourceId,const TDesC& aPrompt, TInt& aValue,
+    			TInt aDialogId = KErrNotFound) const;
+
+    void ShowQueryDialogDeletionL(const TDesC& aMessage,TInt& aValue);
+
+   
+
+protected:
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRDialogLauncher();
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+	
+    /**
+     * Resolves the platform provided error text related to system errorcodes.
+     *
+     * @param   aErrorCode  The error code whose related text is being resolved.
+     * @return  The error text provided by platform.
+     */
+    HBufC* ResolveDefaultErrorTextLC( TInt aErrorCode ) const;
+
+private: // Data
+
+		
+    };
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irdiskspacesession.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRDiskSpaceSession
+*
+*/
+
+#ifndef C_IRDISKSPACESESSION_H
+#define C_IRDISKSPACESESSION_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+class MIRDiskSpaceWatcherObserver;
+
+/**
+ * Defines disk space observer. 
+ *
+ * Observers defined disk and notifies observer if disk space drops below
+ * certain level.
+ */
+NONSHARABLE_CLASS( CIRDiskSpaceSession ) : public CActive
+    {
+
+public:
+
+    /**
+     * Static constructor 
+     *
+     * @param aDiskSpaceSessionObserver Observer who is interested if disk 
+     * space drops below certain level.
+     * @param aDriveNumber drive to observe
+     * @param aCriticalLevel critical disk space level in bytes. If disk 
+     * space falls below this observer is notified.
+     */
+    static CIRDiskSpaceSession* NewL(MIRDiskSpaceWatcherObserver& 
+							         aDiskSpaceSessionObserver, 
+							         const TDriveNumber& aDriveNumber, 
+							         const TInt64& aCriticalLevel,
+							         RFs& aFs );
+
+    /**
+     * Destructor
+     */
+    ~CIRDiskSpaceSession();
+            
+    /**
+     * Tells observed drive.
+     *
+     * @return Drive number which is been observed by this session.
+     */
+    TDriveNumber DriveNumber();
+        
+    /**
+     * Sets observer count
+     *
+     * @param aObserverCount observer count
+     */
+    void SetObserverCount( TInt aObserverCount );
+
+    /**
+     * Returns observer count
+     *
+     * @return observer count
+     */    
+    TInt ObserverCount();
+    
+    /**
+     * IsBelowCriticalLevel Returns whether or disk defined by parameter 
+     * contains less than the critical level free disk space.
+     *
+     * @param aDriveNumber drive which space is checked
+     * @return ETrue if there is less free disk space than the critical 
+     * level, otherwise EFalse.
+     */
+    TBool IsBelowCriticalLevel( const TDriveNumber& aDriveNumber ) const;
+   
+protected:
+
+    // from base class CActive
+    /**
+     * From CActive 
+     * 
+     * @see CActive::DoCancel()
+     */
+    void DoCancel();
+
+    /**
+     * From CActive 
+     *
+     * Invoked when the observed disk's free disk space has run 
+     * below the supplied critical level.
+     * Notifies the observer and regenerates the request to RFs' 
+     * NotifyDiskSpace.
+     * @see CActive::RunL()
+     */
+    void RunL();
+
+private:
+
+    /**
+     * C++ default constructor. Sets references.
+     *
+     * @param aDiskSpaceSessionObserver Observer who is interested if disk 
+     * space drops below certain level.
+     * @param aDriveNumber drive to observe
+     * @param aCriticalLevel critical disk space level in bytes. If disk 
+     * space falls below this observer is notified.     
+     */
+    CIRDiskSpaceSession(MIRDiskSpaceWatcherObserver& 
+				        aDiskSpaceSessionObserver, 
+				        const TDriveNumber& aDriveNumber, 
+				        const TInt64& aCriticalLevel,
+				        RFs& aFs );
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private: 
+
+	/** 
+	 * The observer to be notified when critical disk space limit is reached. 
+	 */
+    MIRDiskSpaceWatcherObserver& iObserver;
+
+    /** 
+     * Drive to be observed. 
+     */
+    const TDriveNumber iDriveNumber;
+
+    /** 
+     * Critical disk space level. 
+     */
+    const TInt64 iCriticalLevel;
+
+    /** 
+     * Handle to the file system. 
+     */
+    RFs& iFs;
+
+    /** 
+     * Number of observers of this drive. When observer count drops to 
+     * zero drive observation can be stopped.
+     */
+    TInt iObserverCount;
+
+    };
+
+
+#endif // C_IRDISKSPACESESSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irdiskspacewatcher.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRDiskSpaceWatcher
+*
+*/
+
+#ifndef CIRDISKSPACEWATCHER_H
+#define CIRDISKSPACEWATCHER_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+#include "irdiskspacewatcherobserver.h"
+
+class CIRDiskSpaceSession;
+
+// Default drive. Used to save for example settings and cache files.
+const TDriveNumber KVRDefaultDrive = EDriveC;
+
+/**
+ *  CIRDiskSpaceWatcher. Watcher of disk space on defined disks.
+ *
+ *  Observes a disk and notifies the observer if the supplied critical disk 
+ *  space limit is reached. 
+ */
+NONSHARABLE_CLASS( CIRDiskSpaceWatcher ): public CBase, public MIRDiskSpaceWatcherObserver
+    {
+    
+public:  // Methods
+
+    /**
+     * Static constructor.     
+     * 
+     * @param aCriticalLevel, critical disk space level
+     * @param aDiskSpaceWatcherObserver observer of disk space status     
+     */
+    static CIRDiskSpaceWatcher* NewL( const TInt64& aCriticalLevel, 
+        MIRDiskSpaceWatcherObserver& aDiskSpaceWatcherObserver );
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CIRDiskSpaceWatcher();
+
+    /**
+     * IsBelowCriticalLevel Returns whether or disk defined by parameter 
+     * contains less than the critical level free disk space.
+     * Please note that StartObservingDriveL must have been called 
+     * before calling this. Otherwise method will return EFalse whetever
+     * disk space is below critical level or not.
+     *  
+     * @param aDriveNumber drive which space is checked
+     * @return ETrue if there is less free disk space than the critical 
+     * level, otherwise EFalse.
+     */
+    TBool IsBelowCriticalLevel( const TDriveNumber& aDriveNumber ) const;
+                        
+    /**
+     * Starts observing space of drive which is given as parameter
+     *
+     * @param aDriveNumber drive which will be observed
+     */
+    void StartObservingDriveL( const TDriveNumber& aDriveNumber );            
+            
+    /**
+     * Stops observing space of drive which is given as parameter.
+     * Please note that if drive is observed by some other object 
+     * it will be observed until all objects have asked 
+     * VRDiskSpaceWatcher to stop observing that drive.
+     *
+     * @param aDriveNumber drive which observing will be stopped. 
+     */
+    void StopObservingDrive( const TDriveNumber& aDriveNumber );    
+    
+    // From base class MIRDiskSpaceWatcherObserver
+    /** 
+     * From MIRDiskSpaceWatcherObserver
+     *
+     * @see MIRDiskSpaceWatcherObserver::NotifyLowDiskSpaceL()
+     */
+    
+    void NotifyLowDiskSpaceL();
+            
+protected:  
+
+private: 
+
+    /**
+     * C++ default constructor.
+     * 
+     * @param aCriticalLevel, critical disk space level
+     * @param aDiskSpaceWatcherObserver observer of disk space status
+     */
+    CIRDiskSpaceWatcher( const TInt64& aCriticalLevel, 
+        MIRDiskSpaceWatcherObserver& aDiskSpaceWatcherObserver );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+private:    // Data
+
+    /** 
+     * Handle to the file system. 
+     */
+    RFs iFs;
+
+    /** 
+     * Critical disk space level. 
+     */
+    const TInt64 iCriticalLevel;
+
+	/** 
+	 * The observer to be notified when critical disk space limit is reached.
+	 */
+    MIRDiskSpaceWatcherObserver& iObserver;
+
+    /** 
+     * Contains active objects which do the actual disk space checking 
+     */
+    RPointerArray<CIRDiskSpaceSession> iDiskSpaceSessions;
+    };
+
+#endif      // IRDISKSPACEWATCHER_H   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irdiskspacewatcherobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2006-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:  Disk space observer, information about low disk space.
+*
+*/
+
+
+#ifndef M_IRDISKSPACEWATCHEROBSERVER_H
+#define M_IRDISKSPACEWATCHEROBSERVER_H
+
+/**
+ *  Observer of low disk space 
+ *
+ *  Observer which is interested low disk space situations. 
+ */
+class MIRDiskSpaceWatcherObserver
+    {
+
+public:
+
+    /**
+     * NotifyLowDiskSpaceL Called when the observed disk's free disk space is
+     * less than the critical level. Because this method does not tell which
+     * drive is running out of space observer must check if it by asking from
+     * <code>CVRDiskSpaceWatcher</code>
+     */
+    virtual void NotifyLowDiskSpaceL() = 0;
+
+protected:
+
+    };
+
+#endif // M_IRDISKSPACEWATCHEROBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irdocument.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+#ifndef IRDOCUMENT_H
+#define IRDOCUMENT_H
+
+
+#include <akndoc.h>
+
+class CEikApplication;
+class CPeriodic;
+
+//========================================class declaration CIRDocument============================================
+
+/**
+ * This class creates the document class
+ * This class creates the IRUi class.
+ * @code
+ * CIRDocument* self = new (ELeave) CIRDocument(aApp) creates the document class.
+ * appui->ParsePlsDataL(aFileStore,aFile) //parses the pls data.
+ * @endcode
+ *
+ */
+ 
+class CIRDocument : public CAknDocument
+    {
+public:
+
+     /**
+	 * Function : NewL
+	 * function to return an instance of CIRDocument
+	 * Two phase constructor
+     */
+	static CIRDocument* NewL(CEikApplication& aApp);
+
+	 /**
+	 * Function : ConstructL()
+	 * Two phase constructor
+     */	
+	void ConstructL();
+
+	/**
+	 * Destructor.
+	 */
+	~CIRDocument();
+
+	 /**
+	 * Function : OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs).
+	 * @param aDoOpen,to check whether DB is already open or not.
+	 * @param aFilename,filename.
+	 * @param aFs,Handle to Filesession.
+     */
+    CFileStore* OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs);    
+    
+   	 /**
+	 * Function : OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs).
+	 * @param aFilename,filename.
+	 * @param aFile,RFile instance.
+     */
+    void OpenFileL(CFileStore*& aFileStore, RFile& aFile);	
+
+protected:
+
+    // from CEikDocument
+    void UpdateTaskNameL(CApaWindowGroupName* aWgName);
+
+private:
+
+    /**
+     * CIRDocument.
+     * C++ default constructor.
+     * @param instance of CEikApplication.
+     **/     
+  	 CIRDocument(CEikApplication& aApp);
+  	 
+   	/**
+     * CreateAppUiL.
+     * creates UI's instance..
+     * @return  CEikAppUi,instance of CEikApplication.
+     **/
+    CEikAppUi* CreateAppUiL();
+
+    /**
+     * Callback for memory check timer.
+     *
+     * @param aSelf pointer to CIRDocument instance.
+     * @return Always KErrNone
+     */
+    static TInt MemCheckTimerCallback(TAny* aSelf);
+
+private:
+
+    // Memory check timer.
+    CPeriodic*      iMemCheckTimer;
+    };
+
+
+#endif // IR_DOCUMENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irfilteredmodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* 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 __IRFILTEREDMODEL_H__
+#define __IRFILTEREDMODEL_H__
+
+#include <aknutils.h> 
+#include <bamdesca.h>
+#include "mirlistboxarray.h"
+
+
+
+class CIRFilteredModel : public CAknFilteredTextListBoxModel
+    {
+ public:
+    /**
+    * Implementation of @c CTextListBoxModel::NumberOfItems()
+    * @return The number of items the list box has.
+    */
+    TInt NumberOfItems() const;
+    /**
+    * Returns the text of the specified item.
+    * @param aItemIndex Index to the item.
+    * @return The text of item in given index.
+    */
+    TPtrC ItemText(TInt aItemIndex) const;
+    /**
+    * SetItemAtZero()
+  	* sets the lastplayed flag and string
+    */
+	void SetItemAtZero(TBool aAdFlag,HBufC& aAdvString,TBool aMainView= EFalse);
+    /**
+    * SetAdvFlag()
+  	* sets the advertisment flag and string
+    */
+	void SetAdvFlag(TBool aAdFlag,HBufC& aAdvString);
+	/*
+	* SetListArray()
+	* sets the listarray
+	*/
+ 	 void SetListArray( MIRListBoxArray* aListArray);
+ 	/*
+	* iLastPlayedString
+	* sets the lastplayed string into this
+	*/
+    HBufC* iLastPlayedString;
+ 	/*
+	* iAdFlag
+	* saves the lastplayed/advertisement status into this
+	*/
+   TBool iAdFlag;
+    /**
+    * iListBoxArray
+    * Instance of MIRListBoxArray
+    */
+  	MIRListBoxArray* iListBoxArray;
+    /**
+    * MatchableTextArray ()
+    * Implementation of  CTextListBoxModel::MatchableTextArray()
+    * return Pointer to the text array.
+    */
+	const  MDesCArray* MatchableTextArray  () const ;
+    };
+#endif // __IRFILTEREDMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irfirsttimecontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRFindStationsContainer
+*
+*/
+
+
+#ifndef C_CIRFIRSTTIMECONTAINER_H_
+#define C_CIRFIRSTTIMECONTAINER_H_
+
+#include <e32base.h>
+#include <eiklbo.h>
+#include <aknlists.h>
+
+
+class CIRFirstTimeView;
+class CAknDoubleStyleListBox;
+
+
+/**
+ * Container for First Time View.
+ */
+class CIRFirstTimeContainer :  public CCoeControl, public MEikListBoxObserver
+    {
+    
+public:  // Methods
+    
+    /**
+     * Second-phase constructor.
+     * 
+     * @param   aRect    Rect for Find Station Container
+     */
+    void ConstructL( const TRect& aRect );
+
+    /**
+     * C++ default constructor.
+     *
+     * @param aSetupStationsLaterItem Is Setup Station Later item in the list.
+     */
+    CIRFirstTimeContainer(CIRFirstTimeView& aFirstTimeView);
+
+    /**
+     * Destructor.
+     */
+    ~CIRFirstTimeContainer( );
+    
+     /**
+      * From CCoeControl
+      */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+    /**
+     * From CCoeControl
+     */
+    void GetHelpContext( TCoeHelpContext& aContext ) const;
+    
+    /**
+     * From MEikListBoxObserver HandleListBoxEventL
+     */ 
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+    
+ 	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+	
+	/**
+	* SizeChanged()
+	* Responds to changes to the size and position of the contents of this control.
+	*/
+	void SizeChanged();
+	
+    /**
+    * GetCurrentItemIndex
+    * Returns the Current Selected index of the ListBox
+    */
+	TInt GetCurrentItemIndex() const;
+  
+  	/**
+	* HandleResourceChange()
+	* Handles a change to the control's resources.
+	*/
+	void HandleResourceChange(TInt aType);
+private: //Methods
+
+
+	// from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect) const;
+    
+    
+
+public: //Methods
+    /**
+     * PopulateFirstTimeListL
+     * Sets items to the listbox.
+     */
+    void PopulateFindStationListL();
+    void CreateFindStationDataL(TInt aTitle,TInt aDescription);
+
+private:    // Data
+	/**
+	* List box used to display the list of items.
+	* Owned.
+	*/
+	CDesCArray* iItemArray;
+
+	/**
+	* iFirstTimeView
+	* Instance of FirstTimeView
+	*/
+	CIRFirstTimeView& iFirstTimeView;
+	/**
+	* iListbox
+	* Data for the StationDirectory Listbox
+	*/
+	CAknDoubleStyleListBox* iListbox;
+    
+};
+
+#endif /*C_CIRFirstTimeContainer_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irfirsttimeview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2005-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:  Header for CVRFindStationsView
+*
+*/
+
+
+#ifndef C_CIRFIRSTTIMEVIEW_H_
+#define C_CIRFIRSTTIMEVIEW_H_
+
+#include "irbaseview.h"
+#include "MViewsResponseAndErrorObserver.h"
+#include "IRActiveNetworkObserver.h"
+
+//#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+class CIRFirstTimeContainer;
+class CIRAddManuallyStationForm;
+class CIRDialogLauncher;
+class MIRActiveNetworkObserver;
+
+class CIRFirstTimeView : public CIRBaseView, 
+						 public MViewsResponseAndErrorObserver,
+						 public MIRActiveNetworkObserver //, public MAknToolbarObserver
+{
+
+public:
+
+	 /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRFirstTimeView* NewL();
+    
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRFirstTimeView* NewLC();
+    
+    /**
+     * Destructor.
+     */
+    ~CIRFirstTimeView();
+
+// from base class CVRBaseView    
+    
+    TUid Id() const;
+    void HandleCommandL( TInt aCommand );
+    
+    /**
+	  * void CIRFirstTimeView::DynInitMenuPaneL()
+ 	  * Dynamically initialises a menu pane
+	  */
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+       
+    /**
+	* void CIRSearchView::ResponseL()
+	* Activates the SearchResults view after getting the IsdsResponse
+	*/
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+	void ErrorL();
+    
+    void ShowQueryDialogL(const TDesC& aTitle, TDes& aBuffer);
+	
+	/* void CIRFirstTimeView::IssueSearchRequestL()
+	 * Issues a search request to the Isds Client
+	*/
+	void IssueSearchRequestL();
+ 	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+	/*
+	* RefreshView()
+	* Refreshes the view when layout changes.
+	*/
+	void RefreshView();
+protected:  
+
+// from base class CVRBaseView
+
+    void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+    				 const TDesC8& aCustomMessage );
+    void DoDeactivate( );
+    
+    /**
+     * From CAknView
+     */
+    void HandleStatusPaneSizeChange();  
+    
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+    void HandleForegroundEventL( TBool aForeground );
+    
+private:
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+    
+    /**
+     * C++ default constructor.
+     */
+    CIRFirstTimeView();
+    
+public:
+			//from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+	 
+	 
+	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+	 
+	 
+
+private:    
+    
+    /** 
+     * Container for this view. 
+     */
+    CIRFirstTimeContainer* iContainer;
+    
+    /**
+     * Are we first time in this view for this session
+     */
+    TBool iFirstTime;
+    /*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	
+	/*
+	 * iSearchValue
+	 * Used to determine if search is issued
+	 */
+	TInt iSearchValue;
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+
+};
+
+#endif /*C_CIRFirstTimeView_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irheadseteventobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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: 
+*     Accessory detection component for Internet Radio application
+*
+*/
+/*
+* ============================================================================
+*  Name     : IRHeadsetEventObserver.h
+*  Part of  : 
+*  Origin   : Internet Radio, Nokia
+*  Created  : 
+*  Description:
+*     Accessory detection component for Internet Radio application
+*  Version  :
+*  
+*  ---------------------------------------------------------------------------
+*  
+/** @file IRHeadsetEventObserver.h */
+
+#ifndef MIRHEADSETEVENTOBSERVER_H
+#define MIRHEADSETEVENTOBSERVER_H
+
+
+// CLASS DECLARATION
+/**
+*  
+*  Observer for the Headset button state. Implementer will be notified each time the headset button
+*  state has changed (button pressed).
+*/
+class MIRHeadsetEventObserver 
+    {
+
+    public: // New functions
+
+		/**
+		* This callback will notify of the Headset to be connected
+		*/        
+        virtual void HeadsetConnectedCallbackL() = 0;
+
+		/**
+		* This callback will notify of the Headset to be disconnected
+		*/
+		virtual void HeadsetDisconnectedCallbackL() = 0;
+    };
+
+#endif      // MIRHEADSETEVENTOBSERVER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irhistory.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRHISTORY_H
+#define IRHISTORY_H
+
+#include <e32base.h>
+
+class CIRIsdsPreset;
+class CIRUi;
+
+//========================================class declaration CIRLastPlayedStationInfo============================================
+
+/**
+ *  This class Creates CIRLastPlayedStationInfo.
+ *  //Please put brife about this class
+ * 
+ * @code
+ *
+ * 
+ * //Please put brife about this function
+ * 
+ * 
+ *
+ * @endcode
+ *
+ */
+	
+class CIRLastPlayedStationInfo:public CBase
+	{
+public:
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* Create a CIRLastPlayedStationInfo object 
+	* 
+	* @param 
+	* @return 
+	*/
+	static CIRLastPlayedStationInfo*NewL();
+	
+	/**
+	* NewLC.
+	* Two-phased constructor.
+	* Create a CIRLastPlayedStationInfo object
+	* 
+	* @param 
+	* @return 
+	*/
+	static CIRLastPlayedStationInfo* NewLC();
+	
+	/**
+	* ~CIRLastPlayedStationInfo
+	* Destructor.
+	*/
+	~CIRLastPlayedStationInfo();
+	
+	/**
+	* CommitLastPlayedChannelL
+	* 
+	*/
+	void CommitLastPlayedChannelL();
+	
+	/**
+	* RetriveLastPlayedChannelL
+	* 
+	*/
+	void RetriveLastPlayedChannelL();
+	
+	/**
+	* FileExists
+	* 
+	*/
+	TBool FileExists();
+	
+	/**
+	* RemoveLastPlayedFile
+	* 
+	*/
+	TInt RemoveLastPlayedFile();
+	
+protected:
+	/**
+	* ConstructL
+	* 2nd phase constructor.
+	* Perform the second phase construction of a
+	* CIRLastPlayedStationInfo object.
+	* @param 
+	*/
+	void ConstructL();
+	
+public:
+	CIRIsdsPreset *iLastPlayedStation;
+	CIRUi* ui;	
+	};
+	
+#endif	//IR_HISTORY_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irhistorylistcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,334 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRHistoryListContainer
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IRHISTORYLISTCONTAINER_H
+#define IRHISTORYLISTCONTAINER_H
+
+#include <akntreelistobserver.h>
+#include <akntreelist.h>
+
+class CIRHistoryListView;
+class CIRSongHistoryInfo;
+class CAknSingleStyleTreeList;
+
+/**
+ * Container for History List View.
+ */
+class CIRHistoryListContainer :public CCoeControl,public MAknTreeListObserver,
+					public MViewsResponseAndErrorObserver
+    
+    {
+    
+public:  // Methods
+
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* Create a CIRHistoryListContainer object, which will draw itself to aRect.
+    * @return a pointer to the created instance of CIRHistoryListContainer.
+	*/
+	static CIRHistoryListContainer* NewL(const TRect& aRect ,CIRHistoryListView &aView ,
+					RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr);
+
+	/**
+	* NewLC.
+	* Two-phased constructor.
+	* Create a CIRHistoryListContainer object, which will draw itself
+	* to aRect.
+	* @return A pointer to the created instance of CIRHistoryListContainer.
+	*/
+	static CIRHistoryListContainer* NewLC(const TRect& aRect,CIRHistoryListView &aView,
+					RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr);
+    /**
+     * 2nd phase constructor.
+     */
+    
+    void ConstructL( const TRect& aRect, RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr );
+    
+
+	/**
+     * C++ default constructor.
+     *
+	 * @param aView View of this container.
+     */
+    CIRHistoryListContainer( CIRHistoryListView& aHistoryListView );
+    
+    /**
+     * Destructor.
+     */
+    ~CIRHistoryListContainer();
+
+	/**
+	* SizeChanged()
+	* 
+	*/
+	void SizeChanged();
+	 
+
+	/**
+	 * UpdateAllL()
+	 * Updates all items of the list by reading data from preset data base.
+	 */
+	 
+ 	void UpdateAllL(RPointerArray<CIRSongHistoryInfo>  & aHistoryDataArr);
+
+    /**
+     * InsertSongEntryL()
+     * Adds the specified list item
+     * 
+     */
+     
+     void InsertSongEntry(const TDesC & aSongName, const TDesC & aArtistName,
+     			 const TDesC & aChannelName, const TDesC & aChannelUrl);
+     
+     /**
+     * RemoveListItemL()
+     * Removes the specified list item
+     * 
+     */
+       
+     void RemoveListItem(const TDesC &aSongName , const TDesC & aArtistName,
+     							 const TDesC & aChannelName);
+
+  
+     
+   // from base class CCoeControl
+
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+	
+	
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+	/**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	 */
+	void GetHelpContext( TCoeHelpContext& aContext ) const;
+	
+	/**
+	 * ClearHistoryList()	 
+	 * Clears the history list
+	 */
+	void ClearHistoryListL();
+
+	/**
+	 * ListenUrlL()
+	 * Connects to channel url and opens Now Playing view
+	 */
+	void ListenUrlL( TInt index );
+	
+	/**
+	* From MAknTreeListObserver.
+	* Handles tree list events.
+	*/
+    TBool HandleTreeListEvent( CAknTreeList& aList, TAknTreeItemID aItem,
+            TEvent aEvent );
+            
+	/**
+	 * HandleResourceChange()
+	 * Handles Changes in the resources 
+	 */
+    void HandleResourceChange( TInt aType ); 
+    
+	/**
+	 * GetCurrentFocussedNode()
+	 * To get the focus of Node of the treeList
+	 */
+    TInt GetCurrentFocussedNode();
+    
+	/**
+	* GetCurrentFocussedLeaf()
+	* To get the focus of Leaf of the treeList
+	*/
+    TInt GetCurrentFocussedLeaf();
+    
+	/**
+	* AddStationToFavorites()
+	* For Adding the Station name to the favorites DB.
+	*/
+    void AddStationToFavoritesL(TInt aCommand);
+    
+	/**
+	* DisplayErroronDBL()
+	* To show error note whenever the Fovorites DB is full
+	*/
+    void DisplayErroronDBL();
+    
+	/**
+	* ShowFocus()
+	* To return whether a leaf or node is focused 
+	*/
+    TInt ShowFocus();
+    
+    /**
+	* void ResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+	
+	/**
+	* void PresetResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+
+    /**
+	* ErrorL()
+	* Handles error Conditions
+	*/
+	void ErrorL();
+	
+    /**
+	* IsdsOrNot()
+	* Returns Whether ISDS channel or not.
+	*/
+    TBool IsdsOrNot();
+    
+    /**
+	* GetButtonDimmed()
+	* Returns Whether Find in Shop Button is dimmed or not.
+	*/
+    TBool GetButtonDimmed() ;
+    
+    /**
+	* RemovedIsdsChannel()
+	* Plays or AddtoFav the removed isds channel converting it to Userdefined.
+	*/
+    void RemovedIsdsChannelL() ;
+
+
+private: //Methods
+
+	 
+    // from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect ) const;
+	
+	
+	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+	
+	/**
+	* Retrieves an object of the same type as that encapsulated in aId.
+	*
+	* @param aId An encapsulated object type ID.
+	*/
+	
+	TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+	
+	
+
+
+
+private:    // Data
+
+	CIRHistoryListView & iHistoryListView;
+	
+    /** 
+	 * CAknSingleStyleTreeList object for hierarchical list
+	 */
+	CAknSingleStyleTreeList* iTreeListBox;
+    /** 
+	 * CAknsBasicBackgroundControlContext object 
+	 */
+	CAknsBasicBackgroundControlContext* iBgContext;
+    /** 
+	 * Array for storing the Node's TAknTreeItemID 
+	 */
+    RArray<TInt> iNodeArray;
+    /** 
+	 * Array for storing the Leaf's TAknTreeItemID
+	 */
+    RArray<TInt> iLeafArray;
+    /** 
+	 * Array for storing the URL Name for Listen scenario
+	 */
+    CDesC16ArrayFlat * iUrlArray;
+    /** 
+	 * Array for storing the Channel Name 
+	 */
+    CDesC16ArrayFlat * iChannelArray;
+    /** 
+	 * Array for storing the Channel Type
+	 */
+    RArray<TInt>  iChannelTypeArray;
+    
+    /** 
+	 * Array for storing the Channel Description 
+	 */
+    CDesC16ArrayFlat * iChannelDescriptionArray;
+    
+
+    TBool iLoadingCancelled;
+    
+    /** 
+	 * Array for storing the Channel Id
+	 */
+    RArray<TInt>  iChannelIdArray;
+    /** 
+	 * Array for storing the MusicStoreStatus of the channel
+	 */
+    CDesC16ArrayFlat * iMusicStoreStatus;
+    
+    TBool iDimmed; 
+    
+    /** 
+	 * Used to store the value of the Id when removed from the isds.
+	 */
+    TInt iChannelSyncId ;
+    /** 
+	 * Boolean to store whether Listen request from history view.
+	 */
+	TBool iListenFrmHistory;
+    /** 
+	 * Boolean to store whether AddToFav request from history view.
+	 */
+    TBool iAddFrmHistory;
+    /** 
+	 * Used to store the value of the current index of the view removed from the isds.
+	 */
+    TInt iChangedIndex ;
+    };
+
+#endif      // IRHISTORYLISTCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irhistorylistview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,336 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRHistoryListView
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IRHISTORYLISTVIEW_H
+#define IRHISTORYLISTVIEW_H
+
+
+
+#include <e32cmn.h>
+
+//For Touch Toolbar for find in shop
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#ifdef MUSICSHOP_AVAILABLE
+#include <MusicStoreUidConstants.h> //For Find in Shop
+#include <mpxfindinmusicshopcommon.h> //For Find in Shop
+#endif
+#include "irbaseview.h"
+#include "IRHistoryListContainer.h"
+#include "UINotifyHandler.h"
+#include "irdialoglauncher.h"
+#include "IRActiveNetworkObserver.h"
+
+class CIRHistoryListContainer;
+class MSongHistoryUINotifyHandler; 
+class CIRSongHistoryEngine;
+class CIRDialogLauncher;
+class MIRActiveNetworkObserver;
+
+class CMPXFindInMShop; //For Find in Shop
+
+class CIRHistoryListView : public CIRBaseView,
+						   public MSongHistoryUINotifyHandler,
+						   public MAknToolbarObserver,
+						   public MIRActiveNetworkObserver
+    {
+    
+public: 
+
+    /**
+     * Static constructor NewLC().
+     */
+    static CIRHistoryListView* NewLC();
+    /**
+     * Static constructor NewL().
+     */
+    static CIRHistoryListView* NewL();
+
+    /**
+     * Destructor.
+     */
+    ~CIRHistoryListView();
+
+     //MSongHistoryUINotifyHandler functions
+	/**
+     * NextSongReceivedL()
+     * Adds the currently playing song to the history's array.
+     */
+
+	void NextSongReceivedL( const TDesC& aSongName, const TDesC& sArtistName,
+					 const TDesC& aChannelName, const TDesC& aChannelUrl );
+	
+    /**
+     * ChannelChangedL( ).
+     * Moves the currently playing channel to the top.
+     */
+	void ChannelChangedL( const TDesC& aSongName, const TDesC& sArtistName,
+					 const TDesC& aChannelName, const TDesC& aChannelUrl );
+	
+	/**
+     * RemoveSongEntry().
+     * Removes the oldest song from History array.
+     */	
+	TInt RemoveSongEntry( const TDesC& /*aSongName*/, const TDesC& /*aArtistName*/,
+					const TDesC& /*aChannelName*/, const TDesC& /*aChannelUrl*/ );
+	
+	/**
+     * RemoveChannelEntry().
+     * Not in use now!
+     */
+	TInt RemoveChannelEntry( const TDesC& aSongName, const TDesC& aArtistName,
+					const TDesC& aChannelName, const TDesC& aChannelUrl );
+	
+	/**
+     * NotifyDataChangeToUIError().
+     * Notification to UI of any error Conditions.
+     */
+  	void NotifyDataChangeToUIError(TInt /*aError*/);
+
+	/**
+     * ClearSongHistoryItemL().
+     * Clears the Song History List Array
+     */
+	void ClearSongHistoryItemL();
+	
+	 /**
+     * GetAllListL().
+     * Getting the stored List from the History Db.
+     */
+	void GetAllListL();
+
+	/**
+     * Id().
+     */
+	 TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+	
+	/**
+     * DynInitMenuPaneL()
+     * For Dynamic Handling of the Menu Pane
+     */
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+	
+    /**
+     * HandleMetaDataReceived()
+     * Handling the Metadata Receving
+     */
+	void HandleMetaDataReceived( const CIRMetaData& aMetaData );
+	
+	/**
+     * For Touch Toolbar
+     * Handles the Dynamic changes on the toolBar
+     */
+	void DynInitToolbarL(TInt aResourceId, CAknToolbar* aToolbar );
+	/**
+     * OfferToolbarEventL()
+     * Handles any event on the Touch ToolBar
+     */
+    void OfferToolbarEventL( TInt aCommand );
+    /**
+     * For ConstructToolbarL();
+     * Constructs the Touch ToolBar
+     */
+  	void ConstructToolbarL();
+  	
+  	/**
+     * To Launch Find in Shop Option
+     * LaunchMusicShopL(); 
+     */
+    void LaunchMusicShopL();
+    
+    /**
+     * To Launch Find in Shop Option
+     * DoFindInMusicShopL() 
+     */
+    void DoFindInMusicShopL( const TDesC& aSongName, 
+                             const TDesC& aArtistName, 
+                             const TDesC& aAlbumName );
+    
+	/**
+	* To Launch Find in Shop Option when selected from the toolbar
+	* FindInShopOption() 
+	*/
+    void  FindInShopOptionL();
+
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+   	void HandleForegroundEventL( TBool aForeground );
+  	
+   	/**
+   	* Get the FindInShop Instance is null or not.
+   	* GetFindInShopInstance() 
+   	*/
+   	TBool GetFindInShopInstance();
+ 	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+    
+   	/**
+   	* Refreshes the view on synchronisation.
+   	* RefreshHistoryL() 
+   	*/
+    void RefreshHistoryL();
+    
+   	/**
+   	* Gets the History's engine instance.
+   	* HistoryEngineInstance() 
+   	*/
+    CIRSongHistoryEngine* HistoryEngineInstance() ;
+
+protected:  
+
+   
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId, 
+                      TUid              aCustomMessageId, 
+                      const TDesC8&      aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleStatusPaneSizeChange()
+	 */
+	void HandleStatusPaneSizeChange();	
+	
+	
+private: 
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+	/**
+     * C++ default constructor.
+     */
+    CIRHistoryListView();
+    
+
+public:
+			//from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+
+private:    // Data
+
+	/** 
+	 * Container for this view. 
+	 */
+	CIRHistoryListContainer* iContainer;
+	
+    /**
+     * View Id of the previous view.  
+     */
+    TVwsViewId iPrevViewId;
+    
+    /**
+     * RPointerArray of CIRSongHistoryInfo  
+     */
+    RPointerArray<CIRSongHistoryInfo> iHistoryDataArr;
+    
+    /**
+     * Pointer to CIRSongHistoryEngine 
+     */
+    CIRSongHistoryEngine* iHistoryEngine;  
+	
+        
+    /**
+     * For Find in Music Shop
+     *
+     */
+    CMPXFindInMShop* iMPXFindInShop; //For Find in Shop
+    
+    /*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	 /*
+	 * iAddToFav
+	 * Checks whether request is for adding to favorites
+	 */
+	TBool iAddToFav;
+  
+    /* iListenRequest
+	 * Checks whether request is for listen
+	 */
+	TBool iListenRequest;
+  
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+    
+                          
+    };
+
+#endif      // IRHISTORYLISTVIEW_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irisdswrapper.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,434 @@
+/*
+* Copyright (c) 2004 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 class for Isds functions
+*
+*/
+
+
+
+
+
+#ifndef IRISDSWRAPPER_H
+#define IRISDSWRAPPER_H
+
+#include <e32base.h>
+#include <BADESCA.H>
+#include "misdsresponseobserver.h"
+#include "isdsclientdll.h"
+#include <AknProgressDialog.h>
+
+const TInt KPresetsArrayMaxLength = 50;
+
+
+class CIRIsdsClient;
+class CIRBrowseCatagoryItems;
+class CIRBrowseChannelItems;
+class CIRSettings;
+class CIRFavoritesDb;
+class CIRIsdsPreset;
+class CIRDialogLauncher;
+class CAknWaitDialog;
+
+class MViewsResponseAndErrorObserver;
+class MSyncPresetObserver;
+
+class CIRIsdsWrapper:public CBase,public MIsdsResponseObserver,public MProgressDialogCallback
+{
+
+public:
+	/* Function : NewL
+	 * function to return an instance of CIRIsdsWrapper
+	 * Two phase constructor
+     */
+ 	static CIRIsdsWrapper* NewL(CIRSettings& aIRSettings,CIRFavoritesDb& aFavPresets);        
+    /**
+     * NewLC.
+     * Two-phased constructor.
+     * Create a CIRIsdsWrapper object, which will draw itself
+     * to aRect.
+     */
+    static CIRIsdsWrapper* NewLC(CIRSettings& aIRSettings,CIRFavoritesDb& aFavPresets);        
+    /**
+     * ~CIRIsdsWrapper
+     * Destructor.
+     */
+    ~CIRIsdsWrapper();
+ 
+   /**
+     * ConstructL
+     * 2nd phase constructor.
+     * Perform the second phase construction of a
+     * CIRSearchView object.
+     */
+    void ConstructL();
+		
+	/**
+     * CIRSearchView.
+     * C++ default constructor.
+     */
+    CIRIsdsWrapper(CIRSettings& aIRSettings,CIRFavoritesDb& aFavPresets);  
+	/**
+	* IsdsSearchRequestL
+	* Issues a search request to the Isds Client
+	*/
+	void IsdsSearchRequestL(MViewsResponseAndErrorObserver* aViewObserver,
+							const TDesC& aIsdsSearchString);
+
+	/**
+	* IsdsCategoryRequestL
+	* Issues a category request to the Isds Client
+	*/
+	void IsdsCategoryRequestL(MViewsResponseAndErrorObserver* aViewObserver,
+							CIRIsdsClient::TIRIsdsclientInterfaceIDs aIDType);
+
+	/**
+	* IsdsChannelRequestL
+	* Issues a channel request to the Isds Client
+	*/
+	void IsdsChannelRequestL(MViewsResponseAndErrorObserver* aViewObserver,TInt aIndex);
+
+	/**
+	* IsdsListenRequestL
+	* Issues a Listen request to the Isds Client
+	*/
+	void IsdsListenRequestL(MViewsResponseAndErrorObserver* aViewObserver,
+					TInt aCurrentIndex,TBool aHistoryBool=EFalse);
+	
+    /** 
+     * MIsdsResponseObserver::IsdsErrorL()
+	 * Used to Indiacte error in retrieving data from Isds
+	 * @param aErrCode- contains error code
+	 */
+    void IsdsErrorL(TInt aErrCode);
+    
+	/**
+	 * MIsdsResponseObserver::IsdsCatogoryDataReceivedL()
+	 * Called when catogory information is recieved from ISDS
+	 * @param aParsedStructure - contains catogory info
+	 */
+	void IsdsCatogoryDataReceivedL(
+		CArrayPtrFlat<CIRBrowseCatagoryItems> & aParsedStructure) ;
+    
+	/**
+	 * MIsdsResponseObserver::IsdsChannelDataReceivedL()
+	 * Called when channel information is recieved from ISDS
+	 * @param aParsedStructure - contains Channel info
+	 */
+	void IsdsChannelDataReceivedL(
+		CArrayPtrFlat<CIRBrowseChannelItems> & aParsedStructure);
+    
+	/**
+	 * MIsdsResponseObserver::IsdsPresetDataReceivedL()
+	 * Called when preset information is recieved from ISDS
+	 * @param aParsedStructure - contains Preset info
+	 */
+	void IsdsPresetDataReceivedL(
+		CArrayPtrFlat<CIRIsdsPreset> & aParsedStructure);
+    
+	/**
+	 * MIsdsResponseObserver::IsdsIRIDRecieved()
+	 * Called to provide IRID
+	 * @param aIRID  - contains IRID recived from Isds
+	 */
+	void IsdsIRIDRecieved(const TDesC& /*aIRID*/);
+
+	/**
+	 * MIsdsResponseObserver::IsdsOtaInfoRecieved()
+	 * called back when OTA info is recieved and Ui needs to be intimated
+	 * @param CIROTAUpdate&,the ota information 
+	 */
+	void IsdsOtaInfoRecieved( CIROTAUpdate &/*aOtaData*/);
+
+	/**
+	 * MIsdsResponseObserver::IsdsPresetRemovedL()
+	 * called back when the preset that is synced was removed from isds
+	 * @param TInt,the preset id
+	 */
+	void IsdsPresetRemovedL(TInt /*aId*/);
+
+	/**
+	 * MIsdsResponseObserver::IsdsPresetChangedL()
+	 * called back when the preset that is synced has been changed in the isds
+	 * @param CIRIsdsPreset&,the new preset data
+	 */
+	void IsdsPresetChangedL(CIRIsdsPreset& /*aPreset*/);
+	
+	/**
+	 * MIsdsResponseObserver::IsdsPresetNoChangeL()
+	 * called back when the preset that is synced has not been changed
+	 */
+	 void IsdsPresetNoChangeL();	
+	/**
+	 * IsdsPresetRequestL()
+	 * called by all the views to get preset data
+	 */
+	void IsdsPresetRequestL(MViewsResponseAndErrorObserver* aViewObserver,TInt aIndex,
+				TInt aCommand,TInt aReqForLogo = ETrue,TInt aHistoryBool=EFalse);
+	
+
+	/**
+	* CIRIsdsWrapper::GetISDSInstance()
+	* Returns the ISDS Instance
+	*/
+	CIRIsdsClient* GetISDSInstance();
+	
+	/**
+	* CIRIsdsWrapper::IsdsCancelRequest()
+	* Cancels the Isds request made by UI
+	*/
+	void IsdsCancelRequest();
+	
+	/**
+	* CIRIsdsWrapper::GetDialogLauncherInstance()
+	* Returns the Dialog Launcher Instance
+	*/
+    CIRDialogLauncher* GetDialogLauncherInstance();
+    
+    /**
+     * GetStationsData()
+     * returns the instance of iStationsData
+     */
+    CDesCArrayFlat* GetStationsData();
+    void CreateWaitDialogL();
+    	/**
+	* Called when the refresh dialog is dismissed.
+	* @param aButtonId The button that was used to dismiss the dialog.
+	*/
+	void DialogDismissedL( TInt aButtonId );
+	
+	
+	/**
+	* CIRIsdsWrapper::GetBannerUrl()
+	* Returns the BannerUrl
+	*/
+	HBufC* GetBannerUrl();
+
+	/**
+	* DestroyWaitDialogL()
+	* Destroys the Wait Dialog
+	*/
+	void DestroyWaitDialogL();
+	
+	/**
+	* CIRIsdsWrapper::SetCurrentPlayingIndex()
+	* Sets the Current Playing Index
+	*/
+	void SetCurrentPlayingIndex(TBool aCurrentPlayingIndex);
+
+	/**
+	* CIRIsdsWrapper::GetCurrentPlayingIndex()
+	* Returns The current Playing Index
+	*/
+	TBool GetCurrentPlayingIndex();
+
+	/**
+	* CIRIsdsWrapper::SetListenRequest()
+	* Sets The ListenRequest if Listen is Done
+	*/
+	void  SetListenRequest(TBool aListenRequest);
+
+	/**
+	* CIRIsdsWrapper::GetListenRequest()
+	* Returns the Listen Request Value
+	*/
+	TBool GetListenRequest();
+	/**
+	* CIRIsdsWrapper::ActiveWaitDialog();
+	* Returns checks Whether tHe IsdS waitDialog is Active or Not
+	*/
+	
+	TBool  ActiveWaitDialog();
+	
+	/**
+	* CIRIsdsWrapper::SetSyncPresetObserver()
+	* Notifies the sync preset call back to the observer
+	* @param MSyncPresetObserver, observer for the synchronization
+	*/
+	void SetSyncPresetObserver(MSyncPresetObserver* aSyncPresetObserver);
+	
+	void SetSyncPresetObserver(MSyncPresetObserver* aSyncPresetObserver,
+					MViewsResponseAndErrorObserver* aViewObserver);
+	
+	
+    TInt GetErrorCode();
+    
+    /**
+    * CIRIsdsWrapper::SetSyncReqFromMainView()
+    * called before the syncrequest is made form MAINVIEW
+    * once the reponse receives saying "preset removed",
+    * error note "item no longer available" should not be displayed
+	* @param aValue, to know whether the syncrequest is made form mainview or not
+	*/
+	void SetSyncReqFromMainView(TBool aValue);
+	
+public: 	//data
+
+	/**
+	* iStationsData
+	* Data for stationa data
+	*/
+	CDesCArrayFlat* iStationsData;
+	/**
+	* iCategoryData
+	* Data for category data
+	*/
+	CDesCArrayFlat* iCategoryData;
+	
+	/**
+	* iCategoryData
+	* Array which contains the data for imgUrl of each channel
+	*/
+	CDesCArrayFlat* iChannelImgUrl;
+	
+	
+	/**
+	* iChannelID
+	* stores the channel id of currently playing channel
+	*/
+	TInt iChannelID;
+	
+	/**
+	* iChannelIdArray
+	* for station id comparision
+	*/
+	RArray<TInt> iChannelIdArray;
+	
+	
+	/**
+	* iIRSettings
+	* Instance of CurrentOperationSettings
+	*/
+	CIRSettings& iIRSettings;
+	
+	/**
+	* iISDSClient
+	* ISDS INTERFACE
+	*/
+	CIRIsdsClient* iISDSClient;
+	
+	/**
+	* iViewObserver
+	* data of MViewsResponseAndErrorObserver class
+	*/
+	MViewsResponseAndErrorObserver *iViewObserver;	
+	
+	/**
+	* iFavPresets
+	* Instance of favoritesDb class
+	*/
+	CIRFavoritesDb& iFavPresets;
+	
+	/**
+	* iReqAddToFav
+	* Boolean value to determine whether add to favorites is requested
+	*/
+	TBool iReqAddToFav;
+	
+	/**
+	* iReqForLogo
+	* Boolean value to determine whether logo is requested
+	*/
+	TBool iReqForLogo;
+	
+	/**
+	* iSSearchRequest;
+	* Checks if the Isds request is for search
+	*/
+	TBool iSSearchRequest;
+	
+	/**
+	* iError
+	* Checks if there is any Isds error.
+	*/
+	TBool iError;
+	TBool iConnTimeOut;
+	TBool iDialogDismissed;
+	
+	/**
+	* iDiaologLauncher
+	* instance of CIRDiaologLauncher
+	*/
+	CIRDialogLauncher* iDiaologLauncher;
+	
+	 
+private:
+	 /**
+	  * iBannerUrl
+	  * Banner Url of the Advertisement for Channels
+	  */
+	  HBufC* iBannerUrl;
+	  
+	  /**
+	  * iWaitDialogWhileSearch
+	  * Set When request For Search
+	  */
+	  TBool iWaitDialogWhileSearch;
+	 
+	 /**
+	 *iCurrentPlayingIndex
+	 * index of currently playing item
+	 */
+	 TInt iCurrentPlayingIndex;
+
+	  /**
+	  * iListenRequest
+	  * Set When request For Listen
+	  */
+	  TBool iListenRequest;
+	  
+	  TBool iHistoryBool ;
+	  /**
+	  * iSyncPresetObserver
+	  * observer for the prest synchronization
+	  */
+	  MSyncPresetObserver* iSyncPresetObserver;
+	  TBool iKNotFound;
+	 
+public:
+	  
+	  /**
+	  * iCliokThroughUrl
+	  * ClickThroughUrl of the Advertisement for Channels
+	  */
+	  HBufC* iClickThroughUrl;
+	 /**
+	  * iBannerUrl
+	  * Banner Url of the Advertisement for Channels
+	  */
+	  HBufC* iCatBannerUrl;
+	  
+	  /**
+	  * iCliokThroughUrl
+	  * ClickThroughUrl of the Advertisement for Channels
+	  */
+	  HBufC* iCatClickThroughUrl;
+    /**
+	* iWaitDialog
+	* calls the waitdialog owned by
+	* CAknWaitDialog
+	*/   
+	CAknWaitDialog* iIsdsWaitDialog;
+	TBool iCatBannerTag;
+	TBool iChannelBannerTag;
+	
+	/**
+	* iSyncReqFromMainView
+	* used to know whether the sync request is made from mainview or not
+	*/
+	TBool iSyncReqFromMainView;
+
+	 
+};
+
+#endif //IRISDSWRAPPER_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irmaincontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,574 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRMainContainer
+*
+*/
+
+
+#ifndef CIRMAINCONTAINER_H
+#define CIRMAINCONTAINER_H
+
+#include <aknlists.h>
+#include <EIKLBX.H>
+#include <aknsfld.h> 
+#include <eikclb.h> 
+#include <aknprogressdialog.h>
+
+#include "irimageconverterobserver.h"
+
+class CIRMainView;
+class CIRMainContainer;
+class CAknIconArray;
+class CIRImageConverter;
+/**
+ * This classes are used for Advertisements
+ */
+class CIRFilteredModel;
+class MIRListBoxArray;
+class CIRAdvertisingListBox;
+ /**
+ * Container for Search Results View.
+ */
+class CIRMainContainer : public CCoeControl,
+						 public MEikListBoxObserver,
+                         public MIRImageConverterObserver,
+    					 MProgressDialogCallback
+    {
+    
+public:  // Methods
+
+    
+    /**
+    * NewL.
+    * Two-phased constructor.
+    * Create a CIRMainContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aView The MainView's instance.
+    * @return a pointer to the created instance of CIRMainContainer.
+    */
+    static CIRMainContainer* NewL( CIRMainView& aView, const TRect& aRect );
+
+    /**
+    * NewLC.
+    * Two-phased constructor.
+    * Create a CIRMainContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aView The MainView's instance.
+    * @return a pointer to the created instance of CIRMainContainer.
+    */
+    static CIRMainContainer* NewLC( CIRMainView& aView, const TRect& aRect );
+    /**
+     * ConstructL
+     * 2nd phase constructor.
+     */
+     void ConstructL( const TRect& aRect);
+    
+	/**
+     * CIRMainContainer()
+     * C++ default constructor.
+	 * @param aView View of this container.
+     */
+    CIRMainContainer(CIRMainView& aView);
+    
+    /**
+     * ~CIRMainContainer()
+     * Destructor.
+     */
+    ~CIRMainContainer();
+
+	
+	// from base class CCoeControl
+
+     /**
+	 * From CCoeControl
+	 * @see CCoeControl::OfferKeyEventL() 
+	 */    
+	
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+    /**
+     * From MEikListBoxObserver HandleListBoxEventL
+     */ 
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+	/**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	 */
+	void GetHelpContext( TCoeHelpContext& aContext ) const;
+	
+
+	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+
+	/**
+	* SizeChanged()
+	* Responds to changes to the size and position of the contents of this control.
+	*/
+	void SizeChanged();
+	
+	/**
+	* HandleResourceChange()
+	* Handles a change to the control's resources.
+	*/
+	void HandleResourceChange(TInt aType);
+	/*
+	* CreateFindBoxL()
+	* Creates the find box for dynamic filtering
+	*/
+	CAknSearchField* CreateFindBoxL(CEikListBox* aListBox,
+				CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle);
+	/*
+	* GetListPointer()
+	* returns List box pointer
+	*/
+	CIRAdvertisingListBox* GetListPointer();
+	/*
+	* GetFilterdModelPointer()
+	* returns filtered model pointer
+	*/
+	CIRFilteredModel* GetFilterdModelPointer();
+	/*
+	* GetSearchBoxPointer()
+	* returns Find  box pointer
+	*/
+	CAknSearchField* GetSearchBoxPointer();
+    /**
+    * Formats list item string with given arguments
+    * 
+    * @param aFirstRow text for first row
+    * @param aSecondRow text for second row
+    * @param aIconId Icon ID used on item
+    */
+    HBufC* FormatItemStringLC( const TDesC& aFirstRow, const TDesC& aSecondRow, TInt aIconId );
+	/**
+     * UpdateAllL()
+     * updates the search results data to the search results list
+     */
+ 	void UpdateAllL();
+	/*
+	* DisableFindBox()
+	* disable the listbox when foxus is not present
+	*/
+	void DisableFindBox();
+	
+	/**
+	* Function : Comparestrings
+	* Function called to get the actual index of the station
+	*/
+ 	void  Comparestrings();
+ 	
+ 	/**
+ 	* HandleImageConversionEventL()
+ 	* from base class MIRImageConverterObserver
+ 	*/
+	void HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent,
+						 TInt aId, TInt aError );
+ 	/**
+ 	* CreateCustomListBoxL()
+ 	* Creates the custom listbox and updates the list according to that
+ 	*/
+	void CreateCustomListBoxL();
+	/**
+	* StartConvertL()
+	* used to convert the images depending the index passed
+	*/
+	void LastPlayedDisplayL();
+	/**
+	* CIRSearchResultsViewContainer::cmdMarkL()
+	* implement the mark/unmark feature
+	*/
+	void cmdMarkL(TInt item,TBool mark);
+	/**
+	* DeleteMultiStationsL()
+	* Deletes multiple elements from preset
+	*/ 
+	void DeleteMultiStationsL();
+	/**
+	* DeleteChannelL()
+	* used to convert the images depending the index passed
+	*/
+	void DeleteChannelL( TInt aIndex ) ;
+	// from base class MIRPresetChangesObserver
+	/**
+	* From MPSPresetObserver
+	* 
+	* @see HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason )
+	*/
+	void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+	/**
+	* StartConvertL()
+	* used to convert the images depending the index passed
+	*/
+	void CheckConnectionL(TInt aUrlIndex);
+
+	/**
+	* DisplayFilterListBoxL()
+	* Displayin gof filter box depending on favourites
+	*/
+	void DisplayFilterListBoxL();
+    /**
+    * DialogDismissedL
+    * Called when/if the dialog has been dismissed.
+    * @param aButtonId
+    */
+    void DialogDismissedL( TInt aButtonId );
+	/**
+	* Function : FilteredIndexL
+	* Function called when mark all is called after dynamic filtering
+	*/
+	void FilteredIndexL();
+	/*
+	* CreateProgressBarL()
+	* creates a progress bar.
+	*/
+	void CreateProgressBarL();
+	/*
+	* SetIconsL()
+	* Set Icons to the List
+	*/
+	void SetIconsL();
+	/*
+	* RemoveFromLogoArray()
+	* Removes the station from the logoarray
+	*/
+	void RemoveFromLogoArray(TInt aIndex);
+	/*
+	* SetContextSenstiveFlag()
+	* Set context senstive flag when the element is marked and
+	* single clicked and resets when all the elements are unmarked
+	*/
+	void SetContextSenstiveFlag(TBool aContextSensitiveFlag);
+	/*
+	* EnableEmptyListBox()
+	* creates the empty listbox
+	*/
+	void EnableEmptyListBox();
+  	/**
+	* GetListBoxCount()
+	* returns the number of elements in the listbox
+	*/ 
+  	TInt GetListBoxCount();
+	/**
+	 * GetCurrentItemIndex()
+	 * returns the index of the currently selected item
+	 */ 
+	TInt GetCurrentItemIndex() const;
+	
+	/**
+	 * GetListBoxTopIndex()
+	 * returns the index of the top item
+	 */ 
+	TInt GetListBoxTopIndex() const;
+   	/**
+	* GetUrlIndex()
+	* returns the number of elements in the listbox
+	*/ 
+  	TInt GetUrlIndex();
+  	/**
+	* GetLastPlayedChannel()
+	* returns whether the last played station exists/not.
+	*/ 
+	TBool GetLastPlayedChannel();
+	/*
+	* GetContextSenstiveFlag()
+	* returns the context sensitive flag 
+	*/
+	TBool GetContextSenstiveFlag();
+	/*
+	* GetFilteredFlag()
+	* returns the filtered flag 
+	*/
+	TBool GetFilteredFlag();
+    /**
+     * Creates default (empty) icon
+     * 
+     * @return  Default icon
+     */
+    CGulIcon* CreateDefaultIconL();
+	void SendRequestForLastPlayedLogoL();
+ 	/*
+  	 * CIRIsdsPreset* GetTempPreset()
+  	 * returns the temporary preset 
+  	 */
+  	CIRIsdsPreset* GetTempPreset(); 
+	/**
+	* HandleLogoErrorL()
+	* called from the iSearchResultsView when the logo is not downloaded
+	*/
+	void HandleLogoErrorL();
+   	/**
+ 	* PresetLogoDownloadL()
+ 	* Used to download the  logos depending the preset values.
+ 	*/
+ 	void PresetLogoDownloadL(CIRIsdsPreset* aPreset);
+    /**
+ 	* RefreshViewL()
+ 	* Resets all the values and draws the view with new values.
+ 	*/
+	void RefreshViewL();
+    /**
+ 	* SetFilteredIndexArrayL()
+ 	* stores the indexs of all the filtered elements
+ 	*/
+	void  SetFilteredIndexArrayL();
+    /**
+ 	* CheckFiltered()
+ 	* checks whether the deleted index exists in the filteredindex array or not
+ 	*/
+	TBool CheckFiltered();
+	
+private: //Methods
+
+
+	// from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect ) const;
+	/**
+	* StartConvertL()
+	* used to convert the images depending the index passed
+	* 
+	*/
+	void StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt aId );	
+	
+	void ProcessPointerEventL( TInt /* aIndex */);
+
+private:    // Data
+	 /**
+	 * iItemArray
+	 * array for the listbox model
+	 */ 
+	 CDesCArray* iListArray;
+	 
+	 /**
+	 * iMainView
+	 * Data for CIRStationsView view
+	 */ 
+	 CIRMainView& iMainView;
+    /*
+	* iConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iConverter;
+	
+	/*
+	* iCurrentItemConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iCurrentItemConverter;
+    /*
+    * iBgContext
+    * Instance of CAknsBasicBackgroundControlContext
+    */
+    CAknsBasicBackgroundControlContext* iBgContext;
+	/**
+	* iFavouritesListBox
+	* Instance of the Stations ListBox
+	*/
+	CIRAdvertisingListBox* iFavouritesListBox;
+	/*
+	* iSearchTextBox
+	* Instance for CAknSearchField;
+	*/
+	CAknSearchField* 			iFavouritesSearchBox;	
+    /**
+    * iLabel
+    * instance for CAknDoubleNumberStyleListBox
+    */
+    CAknDoubleLargeStyleListBox* iEmptyListbox;
+     /**
+    * iProgressDialog
+    * Not owned by CAknExNoteContainer object.
+    */
+    CAknProgressDialog*             iProgressDialog;
+
+    /**
+    * iProgressInfo
+    * Not owned by CAknExNoteContainer object.
+    */
+    CEikProgressInfo*               iProgressInfo;
+ 	/*
+	* iFilteredModel
+	* Instance for CAknFilteredTextListBoxModel
+	*/ 
+	CIRFilteredModel* iFilteredModel;
+    /*
+    * iListBoxArray
+    * Instance of MIRListBoxArray
+    */
+   	MIRListBoxArray* iListBoxArray;
+	/**
+	* Temporary preset to store url and the logo data
+	*/
+	CIRIsdsPreset *iTempPreset;
+   /*
+    * iItem
+    * sets the itemfor filtered zeroth index
+    */
+	HBufC *iItem;
+    /*
+    * iLastplayed
+    * sets the Lastplayed string
+    */
+	HBufC *iLastplayed ;
+    /*
+    * iAdvString
+    * sets the advertisement string
+    */
+    HBufC* iAdvString;
+	/*
+	* iInvalidIconIndices
+	* instance of RArray
+	*/
+	RArray<TInt> iInvalidIconIndices;
+	/*
+	* iLogosArray
+	* instance of RArray
+	*/
+	RArray<TInt> iLogosArray;
+	/*
+	* iNoLogosArray
+	* instance of RArray
+	*/
+	RArray<TInt> iNoLogosArray;    
+	/*
+	* iInvalidIconIndices
+	* instance of RArray
+	*/
+	RArray<TInt> iFilterIndexExist;
+ 	/*
+	* iFindString
+	* Used to Get the Entered Search string
+	*/
+	TBuf<KSearchBoxTextLength> iFindString;
+    /**
+	* iMultiDeleteString
+	* contains the data that how many elements are deleted after mark
+	*/   
+	RBuf iMultiDeleteString;	
+    /**
+	* iFinalCount
+	* contains the final count to present after the deletion of marked items
+	*/   
+	TInt iFinalCount;
+	/*
+	* iUrlIndex
+	* contains the indx of the url
+	*/
+   	TInt iUrlIndex;
+    /**
+	* iProgressCount
+	* contains the number of counts the progress has incremented
+	*/   
+	TInt iProgressCount;
+ 	/*
+	* iDeletingCount
+	* contains the number of elements to be deleted
+	*/
+    TInt iDeletingCount;
+	/*
+	* iImageCount
+	* have the position of image that has to be placed in iconarray
+	*/
+    TInt iImageCount;
+    /*
+   	* iLandScapeCount
+   	* used to call the aknfind s HandlePopupFindSizeChanged function only once
+   	*/
+	TInt iLandScapeCount;
+   /**
+	* iAftertime
+	* contains the time after the deletion of station
+	*/   
+	TTime iAftertime;
+    /**
+	* iBeforetime
+	* contains the time before the deletion of stations started
+	*/   
+	TTime iBeforetime;
+    /**
+	* iIntervalsec
+	* contians the difference of time taken to delete the elements 
+	* i.e., (iAftertime-iBeforetime)
+	*/   
+	TTimeIntervalMicroSeconds iIntervalsec;
+    /**
+	* markedCount
+	* conatians the cunt of marked elements
+	*/   
+	TReal32 iMarkedElementsCount;
+   /**
+	* iProgress
+	* contains the amount of progress should be done inorder to update the progress dialog
+	*/   
+	TReal32 iProgress;
+	/*
+	* iFilteredFlag
+	* This flag is set when dynamic filtering is done and
+	* will be reseted when the characters in the filter box is deleted
+	*/
+	TBool iFilteredFlag;
+	/*
+	* iContextSensitiveFlag
+	* sets when any station is marked and the element is single clicked
+	*/
+    TBool iContextSensitiveFlag;
+	/*
+	* iImageLast
+	* sets when lastplayed has logo data
+	* and resets when the logo is dowmloaded
+	*/
+    TBool iImageLast;
+	/*
+	* iLastPlayedChannel
+	*  variable to set the lastplayed station
+	*/
+	TBool iLastPlayedChannel;
+    /*
+    *
+    * Flag for progress dialog status
+    */
+    TBool iProgressFlag;
+	/*
+	* iProgressStart
+	* this will be set when the progressdialog is created
+	*/
+	TBool iProgressStart;
+	/*
+	* iMoveFocusLast
+	* this will be set when the Move is enabled and the focus is on the lastplayed
+	*/
+	TBool iMoveFocusLast;
+   	/*
+   	* iLogoDownloadError
+   	* sets when the  advertisment future is not supported
+   	*/
+	TBool iLogoDownloadError;
+	TInt iError;
+	};
+
+#endif      // CIRMAINCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irmainview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,497 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRMainView
+*
+*/
+
+
+#ifndef CIRMAINVIEW_H
+#define CIRMAINVIEW_H
+
+
+#include "irbaseview.h"
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include <pspresetobserver.h>
+
+#include "irpreset.h"
+#include "MViewsResponseAndErrorObserver.h"
+#include "IRActiveNetworkObserver.h"
+#include "msyncpresetobserver.h"	// MSyncPresetObserver
+#include "MLogoDownloadObserver.h"
+
+class CIRMainContainer;
+class CAknWaitDialog;
+class MLogoDownloadObserver;
+
+
+/**
+ * SearchResults View
+ */
+class CIRMainView : public CIRBaseView,
+						   public MAknToolbarObserver,
+	   				       public MPSPresetObserver,
+	   				       public MIRActiveNetworkObserver,
+	   				       public MSyncPresetObserver,
+					       public MLogoDownloadObserver,
+					       public MViewsResponseAndErrorObserver
+
+    {
+    
+public: //Methods
+    /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRMainView* NewL();
+
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRMainView* NewLC();
+    
+    /**
+     *~CIRMainView()
+     * Destructor.
+     */
+    ~CIRMainView();
+    /**
+     * ConstructL()
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+	/**
+     * CIRMainView()
+     * C++ default constructor.
+     */
+    CIRMainView();
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+	
+	
+	/**
+	* DynInitMenuPaneL
+	* Dynamically initialises a menu pane
+	*/
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+    
+    /**
+    * ConstructToolbarL()
+    * Constructs a touch toolbar
+    */         
+   	virtual void ConstructToolbarL();
+   	
+   	
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+   	void HandleForegroundEventL( TBool aForeground );
+
+    /**
+     * From CAknView
+     */
+	void HandleStatusPaneSizeChange();
+
+	/*
+	* OfferToolbarEventL
+	* 
+	*/
+	void OfferToolbarEventL(TInt aCommand );
+	/*
+	* SetToolbarItems
+	* Sets the  touch tool bar items
+	*/
+    void SetToolbarItems();
+    
+	//from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+	 
+ 	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+	/**
+	 * HandlePresetChangedL
+	 * whenever their is any change in preset
+	 * the function will get invoked.
+	 */
+	 void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+	 /**
+	 * ConnectToLastPlayedStationL()
+	 * Connects to the last played station.
+	 */
+    void ConnectToLastPlayedStationL();
+	/*
+	* GetMainContainer()
+	* returns pointer to main container
+	*/
+	CIRMainContainer* GetMainContainer();
+	/**
+	 * SetUrlFromPresetL.
+	 */
+    void SetUrlFromPresetL(TInt aUrlIndex);
+	/**
+	 * DoConnectToChannelL
+	 * Connects to the  station .
+	 */
+    void DoConnectToChannelL( TInt aUrlIndex );
+	/**
+	 * SyncPresetL.
+	 */
+    void SyncPresetL(TInt aChid,const TDesC &aModifiedTime);
+	/**
+	* SetListBoxMarkedCount()
+	* sets the marked item count in the listbox
+	*/ 
+	void SetListBoxMarkedCount(TInt aMarkedItemCount);
+	/**
+	* SetMarkedFlag()
+	* sets the marked flag
+	*/ 
+	void SetMarkedFlag(TInt aMarkedFlag);
+	/**
+	* SetMarkedAllFlag()
+	* sets the marked All flag value.
+	*/ 
+	void SetMarkedAllFlag(TInt aMarkedAllFlag);
+	/*
+	* SetRequestPendingStatus()
+	* Sets the request pending state
+	*/
+	void SetRequestPendingStatus(TBool aRequestPending);
+	/*
+	* SetFavListen()
+	* Sets the listen is from favourites or not
+	*/
+	void SetFavListen(TBool aFavListen);
+	/*
+	* SetActualFilteredItemIndex()
+	* sets the original index of the filtered item
+	*/
+	void SetActualFilteredItemIndex(TInt aFilteredIndex);
+ 	/**
+	* SetMovingFlag()
+	* Sets the view is in move mode .
+	*/ 
+    void SetMovingFlag(TBool aValue);
+	/**
+	* GetMarkedIndexArray()
+	* returns the array of elements marked  in the listbox
+	*/ 
+	RArray<TInt> GetMarkedIndexArray();
+	/**
+	* GetListBoxMarkedCount()
+	* returns the number of elements marked  in the listbox
+	*/ 
+	TInt GetListBoxMarkedCount();
+	/**
+	* GetMarkedFlag()
+	* returns the iMarkedflag value
+	*/ 
+	TInt GetMarkedFlag();
+	/**
+	* GetMarkedAllFlag()
+	* returns the iMarkedAllflag value
+	*/ 
+	TInt GetMarkedAllFlag();
+	/**
+	* GetCurrentIndex()
+	* returns the index of the station.
+	*/ 
+	TInt GetCurrentIndex();
+	/**
+	* GetLastPlayedStatus()
+	* returns the iLastplayed value
+	*/ 
+	TBool GetLastPlayedStatus();
+	/**
+	* GetAddToFavouratesFlag()
+	* returns whether any station is added to favourates or not.
+	*/ 
+  	TBool GetAddToFavouratesFlag();
+	/*
+	* GetRequestPendingStatus()
+	* returns whether an active request is pending
+	*/
+	TBool GetRequestPendingStatus();
+	/*
+	* GetFavListen()
+	* returns /Checks whether request is listen to favorites.
+	*/
+	TBool GetFavListen();
+    /**
+	* GetAddDimmingStatus()
+	* returns the dimming status value for Enable/Disabling Add to favourites option
+	*/ 
+    TBool GetAddDimmingStatus();
+   
+    /**
+	* GetEditDimmingStatus()
+	* returns the dimming status value for Enable/Disabling Edit option
+	*/ 
+  	TBool GetEditDimmingStatus();
+ 	/**
+	* GetMovingFlag()
+	* Gets the view is in move mode or not.
+	*/ 
+    TBool GetMovingFlag();
+    
+	/**
+	 * from MSyncPresetObserver
+	 * SyncPresetRemovedL()
+	 * called back when the preset that is synced was removed from isds
+	 * @param TInt,the preset id
+	 */
+	void SyncPresetRemovedL(TInt aId);
+
+	/**
+	 * from MSyncPresetObserver	
+	 * SyncPresetChangedL()
+	 * called back when the preset that is synced has been changed in the isds
+	 * @param CIRIsdsPreset&,the new preset data
+	 */
+	void SyncPresetChangedL(CIRIsdsPreset& aPreset);
+	
+	/**
+	 * from MSyncPresetObserver	
+	 * SyncPresetNoChangeL()
+	 * called back when the preset that is synced has not been changed
+	 */
+	 void SyncPresetNoChangeL();
+	 
+	/**
+	 * ConnectToSelectedStationL()
+	 * Used to synchronize the LastPlayed preset before listen
+	 */
+	 void ConnectToSelectedStationL();
+	 
+	/**
+	 * AddStationtoFavoritesL()
+	 * Called when user selects AddtoStations cmd from the MainView options
+	 */ 
+	 void AddStationtoFavoritesL();
+    
+	/**
+    * PresetLogoDownloadedL()
+    * CallBack Function Returning the Preset With Logo
+    */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+	
+	/**
+    * PresetLogoDownloadError()
+    * CallBack Function Returning the Preset With no Logo/Error while downloading
+    */
+	void PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/);
+	
+	/**
+	* LogoRequestL()
+	* Called by the container of this view
+	*/
+	void LogoRequestL();
+	
+	/**
+	* ResponseL()
+	* From the class MViewsResponseAndErrorObserver
+	*/
+	void ResponseL(CIRIsdsPreset* aPreset = NULL );
+
+	/**
+	* PresetResponseL()
+	* From the class MViewsResponseAndErrorObserver
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+
+	/**
+	* ErrorL()
+	* From the class MViewsResponseAndErrorObserver
+	*/
+	void ErrorL();
+	
+	
+	
+	
+    
+protected:  //Methods
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+    			 const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+  	
+private:
+	/** 
+	* iContainer
+	* Container for this view. 
+	*/
+	CIRMainContainer* iContainer;
+	/** 
+	* iMarkedFlag
+	* returns bool value depending on mark/unmark state. 
+	*/    
+	TBool iMarkedFlag;
+	/** 
+	* iMarkedAllFlag
+	* returns bool value depending on whether all the elements are marked/unmarked state. 
+	*/    
+	TBool iMarkedAllFlag;
+	/*
+	* iAddToFavouratesFlag
+	* returns whether any station is added to favourates or not.
+	*/
+	TBool iAddToFavouratesFlag;
+	
+ 	/*
+	* iIndexExisting
+	*/
+	TBool iIndexExisting;
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	/*
+	 * iFavListen
+	 * Checks whether request is listen to favorites 
+	 */
+	TBool iFavListen;
+	/*
+	 * iStationDetailsCmd
+	 *  
+	 */
+    TBool iStationDetailsCmd;
+	
+	/** 
+	* iMoveMarkedFlag
+	* boolean flag to set the moving state 
+	*/
+	TBool iMoveMarkedFlag;
+	/**
+	* iMarkedItemCount
+	* Data to count the no.of items marked
+	* Used to Handle multiselection
+	*/
+	TInt iMarkedItemCount; 
+	/*
+	 * iFilteredIndex
+	 * the index that is obtained after the dynamic filtering of a station
+	 */
+	TInt iFilteredIndex;
+	/** 
+	* iMovedItemIndex
+	* flag to get the marked item 
+	*/
+    TInt iMovedItemIndex;
+	/** 
+	* iIndexTo
+	* Index of moved place 
+	*/
+    TInt iIndexTo;
+	/** 
+	* iIndexFrom
+	* Index of moving place
+	*/
+    TInt iIndexFrom;
+	/** 
+	* iChannelIdTo
+	* Id of the moved channel
+	*/
+    TInt iChannelIdTo;
+	/** 
+	* iChannelIdFrom
+	* Id of the moving channel
+	*/
+    TInt iChannelIdFrom;
+    
+     /* iListenRequest
+	 * Checks whether request is for listen
+	 */
+	TBool iListenRequest;
+	
+	/* iAddtoStationsCmd
+	* Checks whether request is for AddtoStations
+	*/
+	TBool iAddtoStationsCmd;
+  
+
+public:
+	/*
+	* iInvalidIconIndices
+	* instance of RArray
+	*/
+	RArray<TInt> iMarkedIndexArray;
+	/*
+	* iInvalidIconIndices
+	* instance of RArray
+	*/
+	RArray<TInt> iUnMarkedArray;
+	/*
+	* iEditStation
+	* instance for getting the Edit station index
+	*/
+	TBool iEditStation;
+	
+	/*
+	* iSyncReq
+	* to know the status whether the sync request is completed or not
+	*/	
+    TBool iSyncReq;
+    
+    
+    
+   };
+
+#endif      // CIRMAINVIEW_H
+            
+
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irmediaclient.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+
+#ifndef IRMEDIACLIENT_H
+#define IRMEDIACLIENT_H
+
+#include <e32base.h>
+
+#include "ircontrolparams.h"
+#include "irmediaenginedef.h"
+#include <mdaaudiooutputstream.h>
+
+class CIRCtrlCmdObserver;
+class CIRMediaEngineInterface;
+
+//========================================class declaration CIRMediaEngineInterface============================================
+
+/**
+ * This is client class for irmediaengine which a ecom dll 
+ * Any request to media engine is routed through media client
+ * This client creates proper player for mp3 or acc/accp according 
+ * to the mime type To start a player StartNewPlayerL function is to be
+ * used, which in turn trigger play and this should be called before 
+ * calling play or stop functions
+ * The buffers are created and filled with data. 
+ * media engines instance is created and associates the filled buffer
+ * to media engine, finally the media engine's and buffer associated is deleted
+ * for each format we delete and recreate the player and buffer
+ * This also interacts with ircommandchannel.dll for filling data,triggering
+ * audiofadeout etc.
+ * 
+ * @code
+ *
+ * CIRCtrlCmdObserver* channel; //instance of CIRCtrlCmdObserver defined
+ *							   //in ircommandchannel.dll 
+ * client = CIRMediaClient* NewL(); //instance of media client
+ * TConfig config;
+ * TBuf<20> format;
+ * _LIT(KFormat,"audio/mpeg");
+ * client->StartNewPlayer(config,KFormat,channel); //Initiates the player
+ *             //Creates buffer fills the buffer, Creates instance of player 
+ *             //and associates filled buffer with it triggers playing.
+ *			   //Once this done irmediaengine takes care of buffering issues
+ *			   //Deletes the old instance of player as well as buffer associated
+ *			   //before creating a new one
+ * client->Stop(); //stop the player
+ * client->Play(); //plays the player
+ * client->SetVolume(); //sets the volume
+ * client->MaxVolume(); //gives the maximum volume
+ * client->Volume(); //returns the current volume
+ * client->BufferFilled(); //is a call back when buffer is filled this has to be called
+ * client->StopMediaBuffering(); //stop buffering when buffering is handled in irmediaengine 
+ * client->StopInitialBuffering(); //stop buffering when buffering is handled in
+ * 									//irmediaclient
+ * @endcode
+ * 
+ */
+
+NONSHARABLE_CLASS(CIRMediaClient) : public CBase
+	{											// Function declaration
+	
+	//Constructor functions
+public:
+	
+	/**
+	 * Function : NewL
+	 * Two Phase Constructor - NewL
+	 * @return an instance of the player component	
+	 */	 
+ 	 static CIRMediaClient* NewL(CIRCtrlCmdObserver* aChannel);
+
+ 	/**
+	 * Function : NewLC
+	 * Two Phase Constructor - NewLC
+	 * @return an instance of the player component
+	 */	
+  	 static CIRMediaClient* NewLC(CIRCtrlCmdObserver* aChannel);
+
+	/**
+	 * destructor function
+	 * destructor of the player component
+	 */
+  	~CIRMediaClient();
+
+private:  	
+	//Constructor function
+	
+	/**	
+	 * This is default Constructor
+	 * for the class CIRMediaClient
+	 */			
+    CIRMediaClient();
+    	
+	/**	
+	 * Two phase ConstructL
+	 * network component is taken as input
+	 * @param instance of network
+	 */  	
+    void ConstructL(CIRCtrlCmdObserver* aChannel);
+
+
+public: 
+	
+												// Function to control the play
+	  
+	/**
+	 * Function : Play
+	 * Starts to play the stream
+	 * @return KErrNone if player is existing if not it returns KErrNotFound
+	 */ 
+	 TInt Play();  
+	    
+	/**
+	 * Function : Stop
+	 * Stops to play the stream
+	 */	      
+  	 void Stop();
+   	     
+     											//Function to control the volume
+       
+	/**
+	 * Function : SetVolume
+	 * function to set the volume, 
+	 * @param integer level of volume is the input
+	 */		
+	 void SetVolume(TInt aVolume);
+	 
+	/**
+	 * Function : MaxVolume
+	 * @returns the maximum volume , integer value is the Output
+	 */			
+	TInt MaxVolume() const;
+	
+	/**
+	 * Function : Volume
+	 * function to returns the volume
+	 * @return integer level of voume is the Output
+	 */		
+	 TInt Volume() const;    
+
+	/**
+	 * Function: BufferFilled
+	 * Set the whether a Fill Buffer is currently active
+	 */
+  	 void BufferFilled();
+
+	/**
+	 * Function: StartNewPlayerL
+	 * Set the whether a Fill Buffer is currently active
+	 * @param configuration settings
+	 * @param format type
+	 * @param command channel's instance
+	 */
+	 void StartNewPlayerL(TConfig& aConfig,const TDesC8& aFormat);
+  	 
+	 /**
+	 * Function: StopMediaBuffering
+	 * stops buffering of media engine 
+	 */
+  	 void StopMediaBuffering();
+
+	 /**
+	 * Function: StopMediaBuffering
+	 * stops buffering from media client, media engine is not stopped 
+	 */
+	 void StopInitialBuffering();
+	 
+	 /**
+	 * Function: StartMediaBuffering
+	 * starts buffering of media engine 
+	 */
+	 void StartMediaBuffering();
+	/**
+    * GetMediaClientInstance()
+    * Returns the Audio Player  Instance
+    */
+	CMdaAudioOutputStream* GetPlayerInstance();
+	 
+private:
+	
+    /**
+     * Creates instance of the media engine ECom plugin.
+     * 
+     * @return ETrue, if the creation succeeded, EFalse otherwise 
+     */
+    TBool CreatePlayer();
+    
+	/**
+	 * initializes the player with codec settings, initialised buffer 
+	 * and Control command instance.
+	 * 
+	 * @param configuration settings
+	 * @param command channel's instance
+	 */	
+	 void InitializePlayer( TConfig& aConfig,CIRCtrlCmdObserver* aChannel);
+						
+
+private:
+								    	//data members
+
+			
+	//Instance of Interface definision			
+	CIRMediaEngineInterface* iPlayer;
+	
+	//Instance of channel through with data is sent UI
+	CIRCtrlCmdObserver* iChannel;
+	
+	//The instance of buffer which is currently playing
+	TUint8* iCurrentBuffer;
+
+	//The pointer to buffer which being created for a new player
+	TUint8* iTempBuffer;
+
+	//pointer to buffer being filled
+	TUint8* iInputBufferPtr;
+
+	//holds the format type
+	TBuf8<20> iFormat;
+
+	//buffer which is being filled
+	TPtr8 iInputBuffer;
+	
+	//hold the configuration information
+	TConfig iConfig;
+	
+	//Holds the percentage of data in the buffer
+	TInt iBufferPercentage;	
+	
+	//Set of commands that can be sent to command channel
+	TIRControlCommmand iCommand;
+	
+	//checks whether the player is a newly created player
+	TBool iNewPlayer;
+
+	//checks whether the execution of code is required for only first time or not 
+	TBool iFirstTime;
+
+	//checks whether to stop buffering
+	TBool iStopBuffering;
+	};
+
+#endif //IRMEDIACLIENT_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irmessageobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2006-2007 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 IRMESSAGEOBSERVER_H
+#define IRMESSAGEOBSERVER_H
+
+#include <e32base.h>    // CBase
+#include <msvapi.h>     // MMsvSessionObserver
+
+
+class CIRUi;
+ 
+	
+/**
+ * This is the message observer class is used for sms observing
+ * When new message comes, the MMsvSessionObserver calls HandleSessionEventL which does the message handling
+ * 
+ * @code
+ * 
+ * CIRMessageObserver* obj
+ * obj = CIRMessageObserver::NewL(instance of CIRUi* aUi); //creating message observer
+ * 
+ * @endcode
+ * 
+ */
+
+ 
+class CIRMessageObserver : public CBase, public MMsvSessionObserver
+    {
+    public:
+        /**
+         * 2nd phase constructor.
+         * @param aUi the instance of CIRUi
+         * @return A pointer to the created instance of CIRMessageObserver
+         */
+        static CIRMessageObserver* NewL(CIRUi* aUi);
+    
+        /**
+         * 2nd phase constructor.
+         * @param aUi the instance of CIRUi
+         * @return A pointer to the created instance of CIRMessageObserver
+         */
+        static CIRMessageObserver* NewLC(CIRUi* aUi);
+    
+        /**
+         * Destructor.
+         */
+        ~CIRMessageObserver();
+ 
+    public:
+        /**
+         * From MMsvSessionObserver.
+         * Called when a session event occurs.
+         */
+        void HandleSessionEventL(TMsvSessionEvent aEvent,
+                TAny* aArg1,
+                TAny* aArg2,
+                TAny* aArg3);
+ 
+    private:
+        /**
+         * Symbian OS default constructor.
+         * @param aObserver the observer which gets notified when message
+         * events occur
+         */
+        CIRMessageObserver(CIRUi* aUi);
+ 
+        /**
+         * 2nd phase constructor.
+         * Initializes objects.
+         */
+        void ConstructL();
+ 
+    private:
+        // Session with the messaging server
+        CMsvSession* iMsvSession;
+
+		// instance of CIRUi
+		CIRUi* iUi;
+    };
+ 
+#endif /*IRMESSAGEOBSERVER_H*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irnowplayingview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,847 @@
+/*
+* Copyright (c) 2004-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:  Header file for CIRNowPlayingView
+*
+*/
+
+
+#ifndef C_CIRNOWPLAYINGVIEW_H
+#define C_CIRNOWPLAYINGVIEW_H
+
+#include "internetradioconfigurationflags.hrh"
+#include <coecobs.h>
+#ifdef MUSICSHOP_AVAILABLE
+#include <MusicStoreUidConstants.h> //For Find in Shop
+#include <mpxfindinmusicshopcommon.h> //For Find in Shop
+#endif
+#include <mdaaudiosampleplayer.h> //For future use
+#include <alf/alfenv.h>
+
+#include <aknvolumepopup.h>
+#include "irbaseview.h"
+#include "irui.h"
+#include "ir.hrh"
+#include "pspresetobserver.h"
+#include "MLogoDownloadObserver.h"
+#include "irstationinformationdata.h"
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include "IRFavoritesDb.h"
+#include "MViewsResponseAndErrorObserver.h"
+#include <AknProgressDialog.h>
+
+#include <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+#include "irstationlogocontrolobserver.h"
+
+#include "IRActiveNetworkObserver.h"
+#include "msyncpresetobserver.h"	// MSyncPresetObserver
+//Forward Declarations
+class CAlfEnv;
+class CIRNowPlayingViewContainer;
+class CIRIsdsPreset;
+class CIRLogoDownloadEngine;
+class MLogoDownloadObserver;
+class CIRIsdsPreset;
+class CEikMenuPane;
+
+#ifdef __IRA_FEATURE_EQUALIZER
+class CMPXViewPlugin;
+class CMPXFindInMShop; //For Find in Shop
+#endif
+
+class CMdaAudioPlayerUtility;
+class CStereoWidening;
+class CIRSettings;
+class CMPXFindInMShop; //For Find in Shop
+class CAknVolumePopup;
+class CAknWaitDialog;
+class CIRLogoTimer;
+/**
+ *  NowPlayingView View
+ *
+ *  NowPlayingView View, the  view displayed in Internet Radio  application,when
+ *  Listen is Done
+ */
+class CIRNowPlayingView :public CIRBaseView,public MPSPresetObserver,
+						public MLogoDownloadObserver,public MAknToolbarObserver,
+    					public MViewsResponseAndErrorObserver,public MCoeControlObserver,
+    					public MAlfActionObserver,private MRemConCoreApiTargetObserver,
+    					 public MIRLogoControlObserver,
+    					 public MSyncPresetObserver
+
+
+ 	{
+public:  // Methods
+
+    /**
+     * Function : NewL
+     * Function returns an instance of CIRNowPlayingView
+     * Two phase constructor
+     * @param aAlfEnv Alfred environment to use
+     * @return instance of CIRNowPlayingView
+     */
+	static CIRNowPlayingView* NewLC( CAlfEnv& aAlfEnv );
+
+	/**
+	* Two-phased constructor.
+	*
+	* Adds the control to the control group
+	*
+	* @param   aEnv    Alfred environment to use.
+	* @return  The created object. Ownership is not transferred.
+	*/
+	static CIRNowPlayingView* NewL( CAlfEnv& aEnv);
+	/**
+	* Destructor.
+	*/
+	~CIRNowPlayingView();
+
+	/**
+     * OfferToolbarEventL()
+   	 */
+	void OfferToolbarEventL(TInt aCommand );
+
+    /**
+     * Id()
+     * returns the id of the View
+     */
+	// from base class CAknView
+	TUid Id() const;
+
+	/**
+     * HandleCommandL()
+     */
+	void HandleCommandL( TInt aCommand );
+
+	/**
+     * DynInitMenuPaneL()
+     */
+	// from base class MEikMenuObserver
+	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+
+   	/**
+     * HandleForegroundEventL()
+  	 */
+	void HandleForegroundEventL( TBool aForeground );
+
+    /**
+     * Function : PresetLogoDownloadedL
+     * CallBack Function Returning the Preset With Logo
+     * @param aPreset to be filled with Logo
+     */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+
+	/**
+     * PresetLogoDownloadError()
+     * CallBack Function Returning the Preset Without Logo
+     * Called when an error/connection-fail occurs while downloading
+     * @param aPreset sent without Logo
+     */
+	void PresetLogoDownloadError(CIRIsdsPreset* aPreset);
+
+
+	/**
+     * Function :PlayAndStopControlL()
+     * Function Used to Play or Stop The Song
+     * User Play,Stop Functionality
+     */
+	void PlayAndStopControlL();
+
+	/**
+     * Function :ConnectToPreset()
+     * User For Connecting To Next or Prev Preset
+     * For Context Navigation
+     */
+	void ConnectToPresetL();
+
+	// from base class MCoeControlObserver
+	/**
+     * From MCoeControlObserver
+     *
+     * @see MCoeControlObserver::HandleControlEventL(
+     *    CCoeControl* aControl,
+     *    TCoeEvent aEventType )
+     */
+    void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+// from base class MAlfActionObserver
+    void HandleActionL(const TAlfActionCommand& aActionCommand);
+
+	/**
+     * Function :UpdateStationNameL()
+     * User For Updating Station Name
+     * @param aFadeStyle Used for setting Directionality
+     */
+	void UpdateStationNameL(TIRFadeStyle /*aFadeStyle*/) ;
+
+    /**
+     * Function :DisplayBitrate()
+     * Used for Displaying Bitrate
+     * @param aBitrate Value To show on the View
+     */
+	void DisplayBitrate(const TDesC& aBitrate) const;
+
+    /**
+     * Function :OnViewActivationL()
+     * Used for Setting the values On View Activation
+     */
+	void OnViewActivationL();
+
+    /**
+     * Function :DisplaySongArtistNameL()
+     * Displays the Song Name and Artist Name
+     * @param  aSongName To show on the View
+     * @param aArtistName To show on the View
+     */
+	void DisplaySongArtistNameL(const TDesC& aSongName,const TDesC& aArtistName);
+
+    /**
+     * Function :DisplayByteCounterL()
+     * Used for Displaying ByteCounter
+     * @param total_bytes Value To show on the View
+     */
+	void DisplayByteCounterL(TReal32  total_bytes);
+
+	 /**
+     * Function :SetRequestPendingWhenNoNetWork()
+     * Sets the Value of Request Pendind While Checking For Network
+     * @param aRequestPending Value To Set
+     */
+	void SetRequestPendingWhenNoNetWork(TBool aRequestPending);
+
+	 /**
+     * Function :GetRequestPending()
+     * Return the Request Pending Value
+     * @return Returns the Request Pending Value
+     */
+	TBool GetRequestPending();
+
+	 /**
+     * Function :SetRequestPendingWhenNoNetWorkForNextOrPrev()
+     * Sets the Value of Request Pendind While Checking For Network
+     * @param aRequestPending Value To Set
+     */
+	void SetRequestPendingWhenNoNetWorkForNextOrPrev(TBool aRequestPending);
+
+	 /**
+     * Function :GetRequestPendingForNextOrPreV()
+     * Return the Request Pending Value
+     * @return Returns the Request Pending Value
+     */
+	TBool GetRequestPendingForNextOrPreV();
+
+    /**
+     * Function :ConstructToolbarL()
+     * Used for Constructing ToolBar
+     */
+	void ConstructToolbarL();
+
+    /**
+     * Function :DisplaylogoL()
+     * Function User For Displaying the Logo
+     */
+	void DisplaylogoL() ;
+
+    /**
+     * Function :DrawViewL()
+     * Function User For Layouting Controls On the View
+     * @param aLogoStatus Value Used for Displaying
+     * Media idle Animation
+     */
+	void DrawViewL(TBool aLogoStatus) ;
+
+    /**
+     * Function :StartTimerL()
+     * Function User Updating Station Name When Next Is Pressed
+     */
+	void StartTimerL() ;
+    /**
+     * Function :ReFreshView()
+     * Function Used For Refreshing the View
+     */
+
+	void ReFreshViewL();
+	/**
+     * Function :AddStationsL()
+     * Function Used Used to Add the Currently Playing Channel To Fav
+     */
+	void AddStationsL();
+	/**
+     * ResponseL()
+     */
+	//from thr mixing class MViewsResponseAndErrorObserver
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+
+	/**
+     * PresetResponseL()
+     * CallBack From IsDs when Preset data is received
+     */
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+
+	/**
+     * ErrorL()
+     */
+	void ErrorL();
+
+	/**
+     * Function :GetStereoModeL()
+     * Used for getting Mode of Stereo whether it is On or Off
+     */
+
+	void GetStereoModeL();
+
+	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+
+    /**
+     * Function :SetVolumePopUpValue()
+     * Used for setting the VolumePop up Value
+     */
+	void SetVolumePopUpValue(TInt aValue);
+
+	 /**
+     * Function :GetVolumePopUpValue()
+     * Getting the volume Pop up Value
+     */
+    TInt GetVolumePopUpValue();
+
+   	 /**
+     * Function :UpdateLastplayedL()
+     * Updates the LastPlayed Station
+     */
+    void UpdateLastplayedL();
+
+
+    /**
+     * LaunchFMTransmitterL()
+     * Launch FM Transmitter application
+     */
+	void LaunchFMTransmitterL();
+	/**
+     * SetBitrate()
+     * Sets The Bitrates Value
+     */
+	void SetBitrate(TInt aError) ;
+
+	// from base class MRemConCoreApiTargetObserver
+
+    /**
+     * From MRemConCoreApiTargetObserver.
+     */
+    void MrccatoCommand(TRemConCoreApiOperationId aOperationId,
+        TRemConCoreApiButtonAction aButtonAct);
+
+    /**
+     * From MRemConCoreApiTargetObserver.
+     */
+    void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed,
+        TRemConCoreApiButtonAction aButtonAct);
+// from base class MIRLogoControlObserver
+    void LogoReadyForDisplayL();
+    void LogoConversionFailedL();
+
+	/**
+	 * from MSyncPresetObserver
+	 * SyncPresetRemovedL()
+	 * called back when the preset that is synced was removed from isds
+	 * @param TInt,the preset id
+	 */
+	void SyncPresetRemovedL(TInt aId);
+
+	/**
+	 * from MSyncPresetObserver
+	 * SyncPresetChangedL()
+	 * called back when the preset that is synced has been changed in the isds
+	 * @param CIRIsdsPreset&,the new preset data
+	 */
+	void SyncPresetChangedL(CIRIsdsPreset& aPreset);
+
+	/**
+	 * from MSyncPresetObserver
+	 * SyncPresetNoChangeL()
+	 * called back when the preset that is synced has not been changed
+	 */
+	 void SyncPresetNoChangeL();
+
+protected:
+
+	// from base class CAknView
+	 /**
+     * DoActivateL()
+     */
+	void DoActivateL( const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+					const TDesC8& aCustomMessage );
+
+	/**
+     * DoDeactivate()
+     */
+	void DoDeactivate();
+
+private: //Methods
+
+	/**
+	* By default Symbian 2nd phase constructor is private.
+	*/
+	void ConstructL();
+
+	/**
+	* C++ default constructor.
+	*/
+	CIRNowPlayingView( CAlfEnv& aAlfEnv );
+
+	/**
+	* Updates the station logos with preset data
+	*/
+	void UpdateStationLogosL();
+
+	/**
+     * HandlePresetChangedL()
+     * returns the instance of iStationsData
+     */
+	// from base class MPSPresetObserver
+	void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+
+	/**
+     * GetLogo()
+     * returns the instance of iStationsData
+     */
+	void GetLogoL();
+
+    /**
+     * To Launch Find in Shop Option
+     *
+     */
+    void LaunchMusicShopL();
+
+    /**
+     * To Launch Find in Shop Option
+     *
+     */
+    void DoFindInMusicShopL( const TDesC& aSongName,
+                             const TDesC& aArtistName,
+                             const TDesC& aAlbumName,
+                             TBool aMusicFlag );
+
+	/**
+	 *  Retrievs the string from Central Repository for the specified key and cen rep uid
+	 *  Transfers the ownership of the returned HBufC object
+	 *  The caller must takecare of deleting the returned object*
+	 *	@param aRepositoryUid specifies the Uid of the repository to be used
+	 *	@param aKey specifies the key to be used
+	 *	@return HufC* pointer to the retrieved string
+	 */
+	HBufC* CentralRepositoryStringValueL(const TUid& aRepositoryUid,
+		TUint32 aKey ) const;
+    /**
+     * ListenFromPls()
+     * To support Context Navigation
+     */
+	void ListenFromPlsL();
+
+	 /**
+    * HelpContext()
+    * Returns the Help Context For NowPlaying View
+    */
+   TCoeHelpContext HelpContext() const;
+
+    /**
+     * IsMetaData()
+     * returns true if there is meta data
+     */
+    TBool IsMetaData();
+
+    /**
+     * MusciStoreEnabledStatus()
+     * returns true if music store enabled status is "yes"
+     */
+    TBool MusciStoreEnabledStatus();
+
+
+
+public:
+   	/**
+     * SetsameUrlFlag()
+     * function sets the iSameUrl flag
+     */
+	void SetsameUrlFlag(TBool aSameUrl);
+	 /**
+     * GetsameUrlFlag()
+     * function returns the iSameUrl Flag
+     */
+	TInt GetsameUrlFlag();
+
+	/**
+     * SetStationNameFlag()
+     * function Sets the Flag to Update the Station Nmae
+     */
+	 void SetStationNameFlag(TInt aValue);
+
+      /**
+     * SetLastPlayedValue()
+     * function Sets the Lastplayed Flag Value
+     */
+	 void SetLastPlayedValue(TInt aLastPlayed);
+
+	 /**
+     * SetPlayingValue()
+     * function Sets the iPlaying Flag Value
+     */
+	 void SetPlayingValue(TInt aPlaying);
+
+	 /**
+     * HandleMediaKeysL()
+     * function handles the hardware media keys
+     */
+	void HandleMediaKeysL(TRemConCoreApiOperationId aOperationId,
+	TRemConCoreApiButtonAction aButtonAct);
+
+   	/**
+     * DeleteSteroEffect()
+     * Destroys the Stereo Effect Corresponing the Player
+     */
+	void DeleteSteroEffect(TBool aStereo);
+	/**
+     * DisablePlayer()
+     * Stop Player When Call is Active
+     */
+	void DisablePlayer();
+
+    /**
+     * Function :SetRockerIndex()
+     * Sets the Current Playing Index
+     * @param aRockerIndex Value used for Context Navigation
+     */
+	 void SetRockerIndex(TInt aRockerIndex);
+
+	 /**
+     * Function :GetRockerIndex()
+     * Returns The current Playing Index
+     * @return RockerIndex Value used for Context Navigation
+     */
+	 TInt GetRockerIndex();
+
+    /**
+     * Function :SavePreviousIndex()
+     * Sets the Previous Index
+     * @param aPresetCount Value used for Context Navigation
+     */
+	 void SavePreviousIndex(TInt aPresetCount);
+
+	 /**
+     * Function :GetRequestPending()
+     * Return the Previous index Value
+     * @return Returns Previous index Value
+     */
+	 TInt GetPreviousIndex();
+	  /**
+     * Indicates, has this view been activated in the life time of
+     * the application.
+     * @return ETrue if this view has been activated, EFalse otherwise
+     */
+    TBool HasBeenActivated() const;
+
+    /**
+     * Function :GetCommandId()
+     * Returns the Last selected Command id
+     * @return the Command id Required While network Switch
+     */
+    TInt  GetCommandId() ;
+
+     /**
+     * Function :IsVolumeMuted()
+     * Returns whether volume is Muted
+     * @return the Volume Mute State
+     */
+    TBool  IsVolumeMuted() ;
+
+    /**
+     * SyncPresetL()
+     * Used to syncronize presets
+     * @param TInt the preset id
+     * @param TDesC the last modified tag for the preset
+     */
+    void SyncPresetL(TInt aChid,const TDesC &aModifiedTime);
+
+      /**
+     * Callback method that performs the actual deletion of connections.
+     *
+     * @param aSelfPtr Pointer argument given when the callback/timer is created.
+     * @return KErrNone Specified in the function pointer declaration.
+     */
+    static TInt StaticConnectionCleanupCallback( TAny* aSelfPtr );
+
+
+private:
+
+	/**
+	* The Alfred environment
+	*/
+	CAlfEnv& iAlfEnv;
+
+	/**
+	* iToolbar
+	* Used for Touch ToolBar
+    */
+	CAknToolbar* iToolbar;
+
+	/**
+     * Is the start up of application ongoing.
+     */
+    TBool iStartUp;
+
+    /**
+    * For Find in Music Shop
+    *
+    */
+    CMPXFindInMShop* iMPXFindInShop; //For Find in Shop
+
+#ifdef __IRA_FEATURE_EQUALIZER
+	/**
+	 * Used for activating the equalizer view
+     */
+     CMPXViewPlugin* iMpxEqualizerViewPlugin;
+#endif // __IRA_FEATURE_EQUALIZER
+
+	/**
+	* iIndex
+	* Used for Context Navigation
+	*/
+	TInt iIndex;
+
+	/**
+	* iPreset
+	* Used for storing the Current Logo Data
+	*/
+    CIRIsdsPreset* iCurrentPreset;
+
+	/**
+	* iPreset1
+	* Used for storing the Prev Logo Data
+	*/
+	CIRIsdsPreset* iPrevPreset1;
+
+	/**
+	* iFadeStyle
+	* Used for directionality
+	*/
+	TIRFadeStyle iFadeStyle;
+
+	/**
+	* iIsOn
+	* Used for handling Menupane
+	*/
+	TBool iIsOn;
+
+	/**
+	* ipresets
+	* Used for Getting the Fav Presets
+	*/
+	RIRPresetArray ipresets;
+
+	/**
+	* iBuffer
+	* Used for storing the Station Name
+	*/
+	RBuf iBuffer;
+
+	/**
+	* iMenuPane
+	* Used for handling the MenuPane
+	*/
+   	CEikMenuPane* iMenuPane;
+
+   	/**
+	* iDs
+	* Used for holding the Commands
+	*/
+   	TIRIds iDs;
+
+
+   	/**
+	* iStationsData
+	* Used for Referencing the Stations Data
+	*/
+   	CDesCArrayFlat* iStationsData;
+
+   	/**
+	* iShowToolBar
+	* Used showing the Touch ToolBar
+	*/
+   	TBool iShowToolBar;
+
+	/**
+     * iMetadata
+     * Used For storing the Metadata
+     */
+	RBuf iMetadata;
+
+ 	/**
+     * iStereoMode
+     * Used For storing status of Stereo Mode
+     */
+	TInt iStereoMode;
+
+
+	//Instance of CurrentOperationSettings
+	CIRSettings* iIRSettings;
+
+	 /**
+	 *iSameUrl
+	 *Used for showing the metadata
+	 */
+	 TBool iSameUrl;
+
+	/**
+	* Used For Pls
+	*/
+	CIRIsdsPreset *plsData;
+
+	/**
+	* iPlsIndex
+	* Used for Context Navigation
+	*/
+	TInt iPlsIndex;
+
+	/**
+	* iPresetValue
+	* Used for Loading the Logos
+	*/
+	TInt iPresetValue;
+
+	/**
+	* iPrecount
+	* Used for Loading the Logos
+	*/
+	TInt iPrecount;
+	/**
+	* iDefaultLogo
+	* Used for Loading the Logos
+	*/
+	TBool iDefaultLogo;
+	/**
+	* iUpdateLastplayed
+	* Used for Upadating the Lastplayed Song
+	*/
+	 TBool iUpdateLastplayed;
+	/**
+	* iUpdateStationName
+	* Used for Updating the Station Name
+	*/
+	 TBool iUpdateStationName;
+
+	/**
+	* iRockerIndex
+	* Used for Context Navigation
+	*/
+	TInt iRockerIndex;
+
+   	/**
+	* iPresetCount
+	* Used for storing the index Value
+	*/
+   	TInt iPresetCount;
+	/**
+	* iVolumeBarValue
+	* Stores the VolumeBar Value
+	*/
+	TInt iVolumeBarValue;
+
+    /**
+     * Flag used for When Equalizer is On.
+     */
+     TBool iEaualizerOn;
+    /**
+	* iPlaying
+	* Checks Whether thr NowPlaying is Active or Not
+	*/
+	static TBool iPlaying;
+
+	/**
+	* iVolPopup
+	* The Instance of AknVolume Popup.
+	*/
+	CAknVolumePopup*  iVolPopup;
+
+    /**
+     * Flag Set When Call is active.
+     */
+    TBool iCallActive;
+
+
+	//Used for later in handling Stereo Mode
+	CStereoWidening* iStereoEffect;
+    /*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+
+	/*
+	 * iNextOrPrevRequest
+	 * Checks whether an active request is pending
+	 */
+	TBool iNextOrPrevRequest;
+    /*
+	 * iStationHasLogo
+	 * Checks whether an active request is pending
+	 */
+
+	TBool iStationHasLogo;
+	/**
+     * Indexes for items in Radio Idle, needed for keeping radio idle up to date.
+     */
+    TInt iBitrateIndex;
+    TInt iNameIndex;
+    TInt iMetadataIndex;
+    TInt iPSNameIndex;
+    TInt iNameIndex1;
+   	/*
+	 * iLogoTimer
+	 * Instance of Timer Class To start the Media Animation
+	 */
+
+ 	CIRLogoTimer* iLogoTimer;
+
+ 	 /**
+     * Indicates, has this view been activated in the life time of
+     * the application.
+     */
+    TBool iHasBeenActivated;
+   	 /**
+     * Indicates, has this view been activated in the life time of
+     * the application.
+     */
+    TInt iCommandId;
+	TInt iSettingsValue;
+	TBool iVolumeMute;
+	TInt iLogoIndex;
+	TBool iShowBitrate;
+
+	/**
+     * Timer for delayed cleanup of connections.
+     * Owned.
+     */
+    CPeriodic* iConnectionCleanupTimer;
+public:
+    /**
+	* The Alf container. Not owned.
+	*/
+	CIRNowPlayingViewContainer* iContainer;
+
+	// TO Do: The Variable can be made private in Future
+    };
+
+#endif      // C_CIRNOWPLAYINGVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irnowplayingviewcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2007-2008 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 Alfred control for the now playing view
+*
+*/
+
+
+#ifndef C_CIRNOWPLAYINGVIEWCONTAINER_H
+#define C_CIRNOWPLAYINGVIEWCONTAINER_H
+
+#include "internetradioconfigurationflags.hrh"
+
+#ifdef MUL_USE_COMMON_COMPONENTS
+
+#include <gesturecontrol.h>
+#include <gestureobserver.h>
+
+#else
+
+#include <alf/alfcontrol.h>
+
+#endif
+
+class CAlfEnv;	
+class CAlfAnchorLayout;
+class CAlfDeckLayout;
+class CAlfImageVisual;
+class CAlfTextVisual;
+class TAlfImage;
+class CIRStationInformationDisplay;
+class CIRStationLogoControl;
+class CIRNowPlayingView;
+class MTouchFeedback;
+class CIRRadioIdle;
+
+#ifdef MUL_USE_COMMON_COMPONENTS
+using namespace GestureHelper;
+#endif
+
+/**
+ * Now playing container
+ *
+ * @since   S60 v3.2
+ */
+#ifdef MUL_USE_COMMON_COMPONENTS
+class CIRNowPlayingViewContainer : public CGestureControl, public MGestureObserver
+#else
+class CIRNowPlayingViewContainer : public CAlfControl
+#endif
+    {
+	public:
+	/**
+	* Two-phased constructor.
+	*
+	* Adds the control to the control group
+	*
+	* @param   aEnv    Alfred environment to use.
+	* @return  The created object. Ownership is not transferred.
+	*/
+	static CIRNowPlayingViewContainer* NewL( CAlfEnv& aEnv,CIRNowPlayingView* instance );
+
+   	/* Two-phased constructor.
+	*
+	* Adds the control to the control group
+	*
+	* @param   aEnv    Alfred environment to use.
+	* @return  The created object. Ownership is not transferred.
+	*/
+	static CIRNowPlayingViewContainer* NewLC( CAlfEnv& aEnv,CIRNowPlayingView* aInstance );
+
+	/**
+	* Destructor.
+	*/
+	~CIRNowPlayingViewContainer();
+
+	/**
+	* Returns a reference to the station logo control.
+	*
+	* @return  Reference to the station logo control.
+	*/
+	CIRStationLogoControl& StationLogoControl();
+	
+	/**
+     * Returns a reference to the radio idle control.
+     * 
+     * @return  Reference to the radio idle control.
+     */ 
+    CIRRadioIdle& RadioIdle();
+	/**
+	* Set the text in the visual.
+	*
+	* @param   aText   is the Bitrate Text
+	*/
+	void SetBitrateL( const TDesC& aText );
+	
+	/**
+	* Set the text in the visual.
+	*
+	* @param   aText   RDS text
+	*/
+
+	void SetByteCounterL( const TDesC& aText );
+	
+	/**
+	* StationInformationDisplay()
+	* reyurns the Instance of the StationInformationDisplay
+	*/
+	
+	CIRStationInformationDisplay& StationInformationDisplay();
+	
+	/**
+	* Layouts this control.
+	*
+	* TODO: Move this method to be private when CAlfControl is notified
+	* of portrait/landscape events.
+	*/
+	void LayoutControl();
+
+	
+	void SetLayoutAnchor( TInt aOrdinal, TInt aResourceId );
+	/**
+     * Draw()
+     * Function used to Draw the View
+     */
+	void DrawViewL(TBool aLogoStatus) ;
+	// from base class MGestureObserver
+
+	#ifdef MUL_USE_COMMON_COMPONENTS
+	// from base class MGestureObserver
+	    void HandleGestureL( const MGestureEvent& aEvent );
+	#else
+	// from base class CAlfControl
+	    TBool OfferEventL( const TAlfEvent& aEvent );
+	#endif
+
+private: // Methods
+
+	/**
+	* Constructor.
+	*/
+	CIRNowPlayingViewContainer(CAlfEnv& aEnv);
+
+	/**
+	* Second-phase constructor.
+	*
+	* @param   aEnv    Alfred environment to use.
+	*/
+	void ConstructL(CIRNowPlayingView* instance);
+
+	/**
+	*TriggerCommandL.()
+	*
+	* triggering the Commands to the view
+	*/
+	void TriggerCommandL(TInt iCommandId);
+    
+    /**
+	* KeyHitL()
+	*
+	* used for handling Key Events
+	*/
+	TBool KeyHitL( TInt aScanCode);
+    /**
+     * Touch feedback.
+     * Not owned.
+     */
+    MTouchFeedback* iFeedback;
+
+private: // Members
+    
+    /**
+     * The Alfred environment
+     */
+    CAlfEnv& iAlfEnv;
+	
+	/**
+	* Logo control.
+	* Not owned.
+	*/
+	CIRStationLogoControl* iLogoControl;
+	
+	/**
+	* The base layout to which all controls are layouted.
+	* Not owned.
+	*/
+	CAlfAnchorLayout* iLayout;
+
+	/**
+	* Station information display.
+	* Not owned.
+	*/
+	CIRStationInformationDisplay* iStationInformationDisplay;
+
+	/**
+	* RDS text visual.
+	* Not owned.
+	*/
+	CAlfTextVisual* iBitrate;
+
+	/**
+	* RDS text visual.
+	* Not owned.
+	*/
+	
+	CAlfTextVisual* iByteCounter;
+
+
+	/**
+	* iNowPlayingView1
+	* Used for Handling KeyEvents
+	*/
+	CIRNowPlayingView* iNowPlayingView;
+	
+	/**
+     * Radio Idle.
+     * Owned.
+     */
+    CIRRadioIdle* iRadioIdle;
+    };
+
+
+#endif // C_CIRNOWPLAYINGVIEWCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irnowplayingwrapper.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,917 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 19, Fri Sep 19 13:00:00 2008 by Rohit
+*  Ref:
+*  Added ASF detection and Integrated CIRAsfPlayer in Now Playing scenario
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IRNOWPLAYINGWRAPPER_H
+#define IRNOWPLAYINGWRAPPER_H
+
+#include <e32base.h>
+#include <BADESCA.H>
+#include <AknProgressDialog.h>
+
+#include "irstreamsourceobserver.h"
+#include "irctrlcommand.h"
+#include "IRNetworkControllerObserver.h" //TIRConnectionType Defined
+#include "irsessionlogger.h" //TConnectedFrom defined
+#include <Etel3rdParty.h>
+#include "IRActiveNetworkObserver.h"
+class CIRStreamSource;
+class CIRCtrlCmdObserver;
+class CIRMediaClient;
+class CIRReportGenerator;
+class CIRSettings;
+class CIRIsdsWrapper;
+class CIRMetaData;
+class CIRIsdsPreset;
+class CIRUi;
+class CAknWaitDialog;
+class CIRAsfPlayer;
+
+//CONSTANTS
+
+//Ulr Validation
+const TInt KMaxBufferSize = 256;
+const TInt KMaxUrlSize = 256;
+enum TSyncState
+	{
+	ESyncStateNull,
+	ESyncReqPending,
+	ESyncPsChanged,
+	EPsConnectionFailed,
+	EPsConnectionSuccessful
+	};
+
+//for nowplaying view
+
+enum TIRViews
+{
+  ELastplayed=0,
+  EFav,
+  ESearch,
+  EHistoryView,
+  EStations,
+  EBrowseByTopStations,
+  EPls
+};	
+
+
+class CIRNowPlayingWrapper:public CBase,
+						   public MIRStreamSourceObserver,
+						   public MIRCtrlCmdObserver,
+						   public MProgressDialogCallback,
+						   public MIRActiveNetworkObserver
+	{
+	
+public:
+
+	/* Function : NewL
+	 * function to return an instance of CIRIsdsWrapper
+	 * Two phase constructor
+     */
+ 	static CIRNowPlayingWrapper* NewL(CIRUi& aAppUi,CIRSettings& aIRSettings,
+ 								CIRIsdsWrapper& aIsdsWrapper);        
+
+    /**
+     * NewLC.
+     * Two-phased constructor.
+     * Create a CIRIsdsWrapper object, which will draw itself
+     * to aRect.
+     */
+    static CIRNowPlayingWrapper* NewLC(CIRUi& aAppUi,CIRSettings& aIRSettings,
+    						CIRIsdsWrapper& aIsdsWrapper);        
+
+    /**
+     * ~CIRIsdsWrapper
+     * Destructor.
+     */
+    ~CIRNowPlayingWrapper();
+ 
+    /**
+     * ConstructL
+     * 2nd phase constructor.
+     * Perform the second phase construction of a
+     * CIRSearchView object.
+     */
+    void ConstructL();
+		
+	/**
+     * CIRSearchView.
+     * C++ default constructor.
+     */
+    CIRNowPlayingWrapper(CIRUi& aAppUi,CIRSettings& aIRSettings,CIRIsdsWrapper& aIsdsWrapper);  
+	
+	//MCLASSES FUNCTIONS
+	
+	/** 
+	 *  MIRStreamSourceObserver::OpenComplete()
+	 *  Called when connected to the channel server  
+	 *  To implement the fill of buffer
+	 */
+	void OpenComplete(); 
+
+	/** 
+	 *  MIRStreamSourceObserver::ErrorConnecting()
+	 *  Called when there is an error when connecting to the channel server  
+	 *  @Param aErrorCode Indicates the type of error as described in
+	 * 		   irstreamsourceerrors.h
+	 */
+	void ErrorConnecting(TInt aErrorCode);
+
+	/** 
+	 *  MIRStreamSourceObserver::PlayNow()
+	 *  Called to indicate to the player to start playing
+	 */
+	void PlayNow();
+
+	/** 
+	 *  MIRStreamSourceObserver::Play()
+	 *  Triggers the play after reconnecting to the channel
+	 */
+	void Play();
+	
+	/** 
+	 *  MIRStreamSourceObserver::StopBuffering()
+	 *  Called to indicate to the player to stop buffering
+	 */
+	void StopBuffering();
+
+	/** 
+	 *  MIRStreamSourceObserver::ConnectionEstablished(TInt aFeedValue)
+	 *  Called to indicate that the connection to channel server is sucessful
+	 */
+	void ConnectionEstablished();
+
+	/** 
+	 *  MIRStreamSourceObserver::UpdateProgress()
+	 *  Called to provide teh buffer values
+	 *  @param aFeedValue used to pump the buffering value
+	 */
+	void UpdateProgress(TInt aFeedValue);
+
+    /**
+     * Function : HandleMetaDataReceivedL
+     * Invoked when meta data is received.
+     * @param   aMetaData   The meta data that was received.
+     */
+    void HandleMetaDataReceivedL( const CIRMetaData& aMetaData );
+
+
+	// Callbacks for ASF Player
+
+	/** 
+	 *  MIRStreamSourceObserver::ErrorConnecting()
+	 *  Called when there is an error when connecting to the channel server  
+	 *  @Param aErrorCode Indicates the type of error as described in
+	 * 		   irstreamsourceerrors.h
+	 */
+	void Asf_ErrorConnecting(TInt aErrorCode);
+
+	/** 
+	 *  MIRStreamSourceObserver::Asf_ConnectionEstablished(TInt aFeedValue)
+	 *  Called to indicate that the connection to channel server is sucessful
+	 */
+	void Asf_ConnectionEstablished();
+
+	/** 
+	 *  MIRStreamSourceObserver::Asf_UpdateProgress()
+	 *  Called to provide teh buffer values
+	 *  @param aFeedValue used to pump the buffering value
+	 */
+	void Asf_UpdateProgress(TInt aFeedValue);
+
+    /**
+     * Function : Asf_HandleMetaDataReceivedL
+     * Invoked when meta data is received.
+     * @param   aMetaData   The meta data that was received.
+     */
+    void Asf_HandleMetaDataReceivedL( const CIRMetaData& aMetaData );
+
+	// MIRCtrlCmdObserver functions
+
+    /**
+     * Function : MCrtlCmdCommand
+     * Function is pure virtual function which used to pass commands
+     * @param TIRControlCommmand represents the commands,which determines 
+     * what action to be taken
+     * @param aValue represents any integer value if any, like buffering
+     * percentage
+     */
+    void MCtrlCommand( TIRControlCommmand aCommand, TInt aValue );
+
+    /**
+     * Function : FetchVolume
+     * Function is pure virtual function which sents Request to get the
+     * current volume index
+     * @return volume index
+     */
+    TInt FetchVolume();
+    
+    /**
+     * Function : DoAudioFadeOut
+     * Function is pure virtual function, it is used to sent request start 
+     * audio Fade Out
+     */
+    void DoAudioFadeOut();
+     
+     /**
+     * Function : PlayerChanged
+     * Function is pure virtual function, it is Notified Wnen Audio Player Changes
+     */
+    void PlayerChanged();
+    
+    /**
+    * ConnectToChannelL()
+    * This function is called to connect to a particular channel
+    */
+	void ConnectToChannelL(CIRIsdsPreset& aPreset);
+	
+	/**
+	* SelectUrlUsingBitRate()
+	* Selects the proper URL based on settings of quality according to current network
+	*/
+	void SelectUrlUsingBitRateL(CIRIsdsPreset& aPreset);
+	
+	/**
+	* DisplayErrorNoteL()
+	* Display the error note
+	*/
+ 	void DisplayErrorNoteL(TInt aResourceId);
+
+ 	/**
+ 	* DoConnectToServerL()
+ 	* Connects to Server.
+ 	*/ 
+	void DoConnectToServerL(const TDesC8& aUrl);
+	
+	/**
+	* GetAvailableBitRate()
+	* Selects proper bit rate from the settings
+	*/
+ 	TInt GetAvailableBitRate(TInt aQualiyRequired,const CIRIsdsPreset& aPreset) const;
+	
+	/**
+	* LogStartSession()
+	* Starts the session log session
+	*/
+	void LogStartSession();
+	
+	/**
+	* SetCurrentChannelID()
+	* Function sets currently playing channel ID
+	*/
+	void SetCurrentChannelID();
+	
+	/**
+	* ConnectToServerL()
+	* Starts playing the selected stream
+	*/
+	void ConnectToServerL();
+
+	/**
+	* SetCurrentConnectionSource
+	* Sets from where the current connection to the channel server is established.
+	*/
+	void SetCurrentConnectionSource(TConnectedFrom aConnectedFrom);
+
+	/**
+	* DoErrorConnectingL
+	* Called by ErrorConnectingL when there is an error in connectiong
+	*/
+	void DoErrorConnectingL(TInt aErrorCode);
+	
+	/**
+	* ProgressBarCancelL()
+	* Cancels the Network request and stops the buffering on progressbar cancel
+	*/
+	void ProgressBarCancel();
+	
+	/**
+	* DoPlayingStateChangedL()
+	* Handles internal state change and P&S when playing is stopped or started
+	*/
+	void DoPlayingStateChanged( TBool aPlaying );
+	
+	/**
+	* DoPlayL()
+	* First try to reconnect to the last played channel url
+	*/
+	void DoPlayL();
+	
+	/**
+	* StopNow() 
+	* Function calls stop functionality
+	*/
+	void StopNow();
+	
+	/**
+	* ClearMetaDataL
+	* Clears the current meta data information.
+	*/
+	void ClearMetaDataL();
+	
+	//TInt GetSupportedMimeTypeL()
+	/**
+	* ListenToChannelL()
+	* Requests for listening to a particular channel
+	*/
+	void ListenToChannelL(CIRIsdsPreset* aPreset);
+	
+	/**
+	* MetaData()
+	* Returns the current meta data information.
+	*/
+	const CIRMetaData& MetaData() const;
+	
+	/**
+	* DialogDismissedL()
+	* Called when the refresh dialog is dismissed.
+	* @param aButtonId The button that was used to dismiss the dialog.
+	*/
+	void DialogDismissedL( TInt aButtonId );
+	
+	/**
+	* BufferingTimerExpiredL()
+	* Called when the buffering times out
+	*/
+	static TInt BufferingTimerExpired(TAny* aPtr);
+	
+	/**
+	* HandlePlayError()
+	* Handles play error || should called only through MCtrlCommand
+	*/
+	void HandlePlayError();
+
+	/**
+	* SetOverlay()
+	* sets over lay enable flag
+	*/
+	void SetOverlay(TBool aPresent);
+
+	/**
+	* PlayAndStopL()
+	* Performs play and stop functionality
+	*/
+	void PlayAndStopL();
+	
+	/**
+	* LoadTerminateSession()
+	* The loading cancel result in session log end
+	*/
+	void LoadTerminateSessionL();
+
+    /**
+    * GetMediaClientInstance()
+    * Returns the Media Client Instance
+    */
+	CIRMediaClient* GetMediaClientInstance();
+    
+	/**
+	* GetReportGeneratorInstance()
+	* Returns the ReportGenerator Instance
+	*/
+	CIRReportGenerator* GetReportGeneratorInstance();
+	
+	/**
+	* GetTerminatedLogOnCancelState()
+	* Returns the iTerminatedLogOnCancel Value
+	*/
+	TBool GetTerminatedLogOnCancelState();
+	
+	/**
+	* GetSessionStartState()
+	* Returns the iSessionStart Value
+	*/
+	TBool GetSessionStartState();
+
+	/**
+	* SetSessionStartState()
+	* Sets the iSessionStart Value
+	*/
+	void SetSessionStartState(TBool aSessionStart);
+	/**
+	* CancelNetworkRequestL()
+	* Cancels the Network Request
+	*/
+	void  CancelNetworkRequestL();
+	/**
+	* SetVolumeL()
+	* Set the Volume of the Player Via Hardware Media Keys
+	*/
+	void 	SetVolumeL(TInt aIndex);
+
+	/**
+	* IsProgress()
+	* Returns the iProgress Value
+	*/
+	TBool IsProgress();
+
+	/**
+	* SetConnectToServerState
+	* Sets the iConnectToServer Value
+	*/
+	void SetConnectToServerState(TBool aConnectToServer);
+
+	/**
+	* GetConnectToServerState
+	* Returns the iConnectToServer Value
+	*/
+	TBool GetConnectToServerState();
+		
+	/**
+	* GetPrevVolumeLevel
+	* Returns the Prev Volume When Message is Received
+	* Or Any NetWork Events
+	*/
+	TInt  GetPrevVolumeLevel();
+		
+	/**
+	* SetPrevVolumeLevel
+	* Sets the Volume For handling the Network Events
+	*/
+
+    void  SetPrevVolumeLevel(TInt aPrevVolume);
+    	
+	/**
+	* SetMetadataL
+	* Sets the Metadata
+	*/
+
+    void  SetMetadataL();
+    	
+	/**
+	* PublishDataL
+	* Publish the Metadata Required for History
+	*/
+  	void  PublishDataL();
+  	
+  	
+	/**
+	* StopPlayer
+	* Stop the Player
+	*/
+  	void  StopPlayer();
+  	
+ 	/**
+	* SetMedadataForErrotrConditions
+	* Sets the Metadata Flag During Error Conditions
+	*/
+  	void  SetMedadataForErrotrConditions(TBool aDisplayMetaData);
+  	
+  	/**
+	* GetMedadataForErrotrConditions
+	* Returns the Error condition to Nowplaying View
+	*/
+  	TBool  GetMedadataForErrotrConditions();
+  	/**
+	* GetMarquee
+	* Returns the iMarQuee which is Set During HandleMetadataReceived
+	*/
+  	TBool  GetMarquee();
+
+  	/**
+	* SetMarquee
+	* Sets the Marquee value required for NowPlaying view
+	*/
+  	void  SetMarquee(TBool aMarquee);
+    /**
+	* SetView
+	* Set by Every View to its TIRViews when Listen is Done
+	*/
+  	void  SetView(TIRViews aContextViews);
+
+	/**
+	* GetView
+	* Returns the View Where Listen Has Done
+	*/
+  	TIRViews  GetView();
+  	
+	/**
+	* SetAudioVolume()
+	* Call CPeriodic after the period is over
+	* @param volume level.
+	*/
+	void SetAudioVolume(TInt aValue);
+
+
+	/**
+	* CreateWaitDialogL()
+	* Called whenever Connecting to channel
+	*/
+	void CreateWaitDialogL();
+	
+	/**
+	* DestroyWaitDialogL()
+	* Destroys the Wait Dialog
+	*/
+	void DestroyWaitDialogL();
+	
+	/**
+	* SetProgress()
+	* Sets The Progress Value
+	*/
+	void SetProgress(TBool aProgress);
+
+	/**
+	* GetChannelConnetedInfo()
+	* Returns Whether the channel connected or not
+	*/
+	TBool GetChannelConnetedInfo();
+	
+	/**
+	* HandleNetworkDisconnected()
+	* Function called when network got disconnected While Buffering
+	*/
+	void HandleNetworkDisconnected();
+
+	/**
+	* HandleNetworkEstablished()
+	* Function called when network Connection Established In ALr
+	*/
+
+	void HandleNetworkEstablished();
+	
+	  /**
+	 *  Removes whitespace characters. 
+	 *  Called from HandleMetaDataReceivedL.
+	 *  @param string to be cleaned.
+	 */
+    void RemoveWhiteSpace( TDes& aBuf );
+
+    /**
+	 * 	Checks The Call status. 
+	 *  Checks the Call status Whether it is Incoming Call or OutGoing Call
+	 */
+	TBool CheckCallStatusL();
+	//from MIRActiveNetworkObserver
+	
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+
+	/**
+	*TriggerCommandL.()
+	*
+	* triggering the Commands to the view
+	*/
+	void TriggerCommandL(TInt iCommandId);
+
+
+	/**
+	* GetSessionStartedFlag()
+	* Returns the iSessionStarted Flag Value
+	*/
+	TBool GetSessionStartedFlag();
+	/**
+	* SetSessionStartedFlag()
+	* Sets the iSessionStartedFlag  Value
+	*/
+	void SetSessionStartedFlag(TBool aSessionStartedFlag);
+	/**
+	* UpdateNmsLogEventsL()
+	* Updates Nms Log events
+	*/
+	void UpdateNmsLogEventsL(const TDesC& aNmsType);
+	
+	 /**
+     * Function :SetListenFromIsdsValue()
+     * Sets when Listen from Isds is Done 
+     * @param aListenFromIsds Sets when Listen from Isds is Done
+     */
+	 void SetListenFromIsdsValue(TInt aListenFromIsds);  
+   
+   	 /**
+     * Function :SetListenFromIsdsValue()
+     * Sets When User Cancels Buffering 
+     * @param aDialogCanceled Sets When User Cancels Buffering
+     */
+	 void SetWhenUserCancelsBufferingWaitBar(TInt aDialogCanceled);  
+
+   	 /**
+     * Function :SetWhenUserCancelsIsdsBufferingWaitBar()
+     * Sets When User Cancels Buffering WaitBar From Isds Listen
+     * @param aCancelFrmIsds Sets When User Cancels Buffering
+     */
+	 void SetWhenUserCancelsIsdsBufferingWaitBar(TInt aCancelFrmIsds);  
+
+	 /**
+     * Function :GetWhenUserCancelsIsdsBufferingWaitBar()
+     * Returns When User Cancels Isds Buffering WaitBar
+     * @return Returns Cancels Isds Buffering WaitBar
+     */
+	 TInt GetWhenUserCancelsIsdsBufferingWaitBar();  
+	/**
+     * Function :SetLaunchNowPlayingView()
+     * Sets the varible if NowPlaying is active
+     * @param aLaunchNowplaying the variable being set
+     */
+	 void SetLaunchNowPlayingView(TBool aLaunchNowplaying  );
+ 	 
+ 	 /**
+     * Function :GetLaunchNowPlayingView()
+     * Returns the active state of NowPlaying View
+     * @return Returns the Nowplayinf View active State
+     */
+	 TBool GetLaunchNowPlayingView(); 
+	/**
+     * Function :SetFavFocus()
+     * Sets the foucs in Mainview
+     * @param aFavIndex Focus to set in MainView
+     */
+	 void SetFavFocus(TInt aFavIndex  );
+ 	
+ 	 /**
+     * Function :GetFavFocus()
+     * Returns the Current Focus to set
+     * @return Returns value to set focus  in MainView
+     */
+	 TInt GetFavFocus(); 
+
+private:
+   //Instance of MediaClient
+	CIRMediaClient* iPlayer;
+
+
+	//Instance of StreamSource
+	CIRStreamSource* iNetwork;
+	
+	//instance of command channel
+	CIRCtrlCmdObserver* iChannel;
+	
+	
+	
+	//Session Log
+	CIRReportGenerator *iReportGenerator;
+	
+	/**
+	* iIRSettings
+	* Instance of CurrentOperationSettings
+	*/
+	CIRSettings& iIRSettings;
+	
+ 	/**
+	* iIsdsWrapper
+	* Instance of ISDSWrapper
+	*/
+    CIRIsdsWrapper& iIsdsWrapper;
+    
+    /**
+    * CIRUi& aAppUi
+    * Instance of CIRUi
+    */
+    CIRUi& iAppUi;
+    
+    /**
+     * Current meta data information.
+     * Owned.
+     */
+    CIRMetaData* iMetaData;
+    
+	//index for URLs in iURLArray array
+	TInt iURLCount;
+	
+	//holds the array of URLs
+	CDesCArrayFlat* iURLArray;
+	
+	//multiple URL selection will be enabled only before connecting
+	//to particular channel server once connected this disabled until
+	//next time you try to connect to the channel this is monitored
+	//by this flag
+	TBool iMultipleURLSelect;
+	
+	TBool iConnectionRequestCancelled;
+	
+	//Indiacates that it is reconnecting to the channel
+	TBool iReConnecting;
+
+	//last connected channels preset id
+	TInt iLastConnectedPresetId;
+	
+	//last connected channel url
+	TBuf<KMaxBufferSize> iLastConnectedUrl;
+	
+	//Last played URL
+	TBuf<KMaxUrlSize> iLastPlayedUrl;
+	
+	//last played channel's unique id
+	TInt iLastConnectedPresetUniqId;
+	
+	//checks if session log should be terminated on loading cancel
+	TBool iTerminatedLogOnCancel;
+	
+	// Used for checking the Audio has been fadein/fadeout
+	TBool iAudioFadein;
+	
+	// URL
+	TBuf<KMaxUrlSize> iUrl;
+	
+	//checks whether a session is started
+	TBool iSessionStart;
+	
+	//this variable check whether the session should actually end or not
+	//in case of multiple url select
+	TBool iSessionShouldNotEnd;
+
+	// Checks whether channel is Connected to Server or not
+	TBool iConnectToServer;
+
+	// Check the Connection
+//	TSyncState iSyncState
+	
+	//stores the channel id of currently playing channel
+	TInt iChannelID;
+
+	//Bitrate to subscribe
+    TInt iBitRateValue;
+    
+ 	// Checks whether the channel is connected or not
+	TBool iChannelConnect;
+
+	//Holds the Network connection status
+	TBool iIsConnected;
+
+	//Connected from information is stored in iConnectedFrom
+	TConnectedFrom iConnectedFrom;
+
+	// Stores the error code 
+	TInt iConnErrCode;
+
+	// checks the Status of the Progress bar
+	TBool iProgress;	
+
+	//Flag used to test Radio Playback 
+     TBool iPlayBack;
+    //Unconnected URL
+	TBuf<KMaxUrlSize> iUnconnectedUrl;
+	
+	
+	/**
+	* iPrevVolumeLev
+	* Stores thr Prev Volume Level
+	*/
+
+	TInt iPrevVolumeLevel;
+	
+	/**
+	* iBufferigSteamText
+	* Data for checking the text of the WaitDialog
+	*/
+	TBool iBufferigSteamText;
+	
+	/**
+	* iWaitDialog
+	* calls the waitdialog owned by
+	* CAknWaitDialog
+	*/   
+	CAknWaitDialog* iWaitDialog;
+	
+	// Used for displaying Metadata
+	TBool iDisplayMetaData;
+	/**
+	* iMarquee
+	* Instance For Confirming Whether to Display Metadata
+	*/
+	TBool  iMarquee;
+
+    //User for testing Existence of Network request
+	TBool iCancelNetworkRequest;
+	
+		//For context navigation in nowplaying view//
+    TIRViews iContextViews;
+    
+   /**
+	* iCheckValue
+	* Instance Used to check While Connecting To a Channel
+	*/
+	TBool  iCheckValue;
+	
+	/**
+	* iChannelConnected
+	* Instance Used to check whether the current 
+	* channel is connected or not
+	*/
+	TBool  iChannelConnected;
+	
+	/**
+	* iPlayandStop
+	* Set when Play or Stop is Done Fom Nowplaying View
+	*/
+	TBool  iPlayandStop;
+
+	/**
+	* iNotify
+	* Set when Connection is established during ALR
+	*/
+	TBool iNotify;
+	
+	/**
+	* iAsfPlayer
+	* ASF Player instance for ASF streaming
+	*/
+	CIRAsfPlayer* iAsfPlayer;
+
+	/**
+	* iAsfStreaming
+	* Indicates ASF channel streaming is on
+	*/
+	TBool  iAsfStreaming;
+	
+	/**
+	* iSessionStartedFlag
+	* sets when session startedL is called
+	*/
+	TBool iSessionStartedFlag;
+	/**
+	* iListenFromIsds
+	* When Listen From Isds is Done 
+	*/
+
+	TBool iListenFromIsds;
+	
+	/**
+	* iDialogCanceled
+	* 	when dialog is dismissed
+	*/
+	TBool  iDialogCanceled;
+
+	/**
+	* iCancelFrmIsds
+	* Cancel is Done from ISds
+	*/
+	TBool iCancelFrmIsds;
+	/**
+	* iLaunchNowplaying
+	* Set if NowPlaying View is Active
+	*/
+	TBool iLaunchNowplaying;
+	
+	/**
+	* iBufferingRequestCancelled
+	* Sets this Value When User Cancels buffering
+	*/
+
+	TBool iBufferingRequestCancelled;
+	
+	TInt selectedbitrate ;
+	
+	TInt iUinqid;
+	
+	TInt iFavIndex;
+	TInt iQualityRequired;
+public:
+	//Instance of CIRIsdsPreset
+	//contains the preset on which the connection attempt is made
+	CIRIsdsPreset* iNowPlayingPreset;
+	
+	//Instance of CIRIsdsPreset
+	//Contains the preset which is editable
+	CIRIsdsPreset* iEditStationPreset;
+
+	//Holds the playing status
+	TBool iPlaying;
+	
+	/**
+	* iSyncPreset
+	* sets the status of synchronizing the preset
+	*/
+	TBool iSyncPreset;
+	};
+	
+#endif //IRNOWPLAYINGWRAPPER_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irnwinfoobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRNWINFOOBSERVER_H
+#define IRNWINFOOBSERVER_H
+
+#include <etel3rdparty.h>
+
+class CIRUi;
+
+class CIRNwInfoObserver : public CActive
+	{
+public:  // Constructors and destructor
+
+	/**
+	* Function : NewL
+	* Symbian OS two-phased constructor
+	* @param instance of ui
+	*/
+	static CIRNwInfoObserver* NewL(CIRUi* aUi);
+	
+	/**
+	* Function : NewLC
+	* Symbian OS two-phased constructor
+	* @param instance of ui
+	*/
+	static CIRNwInfoObserver* NewLC(CIRUi* aUi);
+
+	/**
+	* Function : ~CIRNwInfoObserver
+	* Destructor.
+	*/
+	~CIRNwInfoObserver();
+
+public:
+	/**
+	 * Function : IRStartNwMonitor
+	 * starts network monitoring
+	 */
+	void IRStartNwMonitor();
+
+private:
+	/**
+	* Function : ConstructL
+	* Function does all the initializations
+	* Two phase constructor
+	* @param CIRUi instance
+	*/
+	void ConstructL(CIRUi* aUi);
+
+	/**
+	* Function : CIRNwInfoObserver
+	* By default, prohibit copy constructor
+	*/
+	CIRNwInfoObserver();
+		
+	/**
+	 * Function : IssueRequest
+	 * Issue Subsequent network monitoring request
+	 */
+	void IssueRequest();
+
+	/**
+	 * Function : DoCancel
+	 * From CActive. Cancels the active object from observing System
+	 * Agent events. .
+	 */
+	void DoCancel();
+
+	/**
+	 * Function : RunL
+	 * From CActive. Gets called by active object when a System Agent
+	 * event occurs.
+	 */
+	void RunL();
+
+	/**
+	* Function : RunError
+	* Function which handles RunL error
+	* @param Error value 
+	*/
+	TInt RunError(TInt aError);
+
+private:  
+
+	CIRUi* iUi;
+	CTelephony* iNwInfoObserver;
+
+	TBool iFirstTime;
+	TBool iCurrentNetwork;
+	TBool iHomeNetworkType;
+	
+	TBuf<10> iCurrentNetworkMCC;
+	TBuf<10> iCurrentNetworkMNC;
+	TBuf<10> iHomeNetworkMCC;
+	TBuf<10> iHomeNetworkMNC;
+
+	//Current Network
+	CTelephony::TNetworkInfoV1 iCurrentNetworkInfo;
+	CTelephony::TNetworkInfoV1Pckg iCurrentNetworkInfoV1Pckg;
+
+	//Home Operator
+	CTelephony::TNetworkRegistrationV1 iHomeOperatorInfo;
+	CTelephony::TNetworkRegistrationV1Pckg iHomeOperatorInfoPckg;	
+	};
+
+#endif  // IRNWINFOOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irplscontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRPlsContainer
+*
+*/
+
+
+#ifndef CIRPLSCONTAINER_H
+#define CIRPLSCONTAINER_H
+
+#include <aknlists.h>
+#include <eikclb.h>
+#include <eikclbd.h>
+
+class CIRPlsView;
+class CIRIsdsPreset;
+class CIRDialogLauncher;
+class CEikColumnListBox ;
+
+class CIRPlsContainer : public CCoeControl,public MEikListBoxObserver
+					
+    
+    {
+    
+public:  // Methods
+
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* Create a CIRPlsContainer object, which will draw itself to aRect.
+	* @param aRect The rectangle this view will be drawn to.
+    * @param aView which is a plsview's reference
+    * @return a pointer to the created instance of CIRPlsContainer.
+	*/
+	static CIRPlsContainer* NewL(const TRect& aRect ,CIRPlsView &aView );
+
+	/**
+	* NewLC.
+	* Two-phased constructor.
+	* Create a CIRPlsContainer object, which will draw itself
+	* to aRect.
+	* @param aRect Rectangle this view will be drawn to.
+	* @param aView which is a plsview's reference
+	* @return A pointer to the created instance of CIRPlsContainer.
+	*/
+	static CIRPlsContainer* NewLC(const TRect& aRect,CIRPlsView &aView);
+	/**
+	* ~CIRPlsViewContainer
+	* Destructor.
+	*/
+	~CIRPlsContainer();
+	
+    
+	/*
+	* 2nd phase constructor.
+	*/
+	void ConstructL( const TRect& aRect );
+	
+	/**
+	* CIRPlsContainer()
+	* Default Constructor.
+	*/
+	
+	CIRPlsContainer(CIRPlsView& aView);
+	
+    /**
+	* GetCurrentItemIndex()
+	* To get the current Item index.
+	*/
+	TInt GetCurrentItemIndex() const;
+	
+    /**
+	* ListenToStationL()
+	* Function to listening to a station.
+	*/
+	void ListenToStationL();
+	
+    /**
+	* CreatePresetL()
+	* Creating a preset object
+	*/
+	CIRIsdsPreset* CreatePresetL();
+	
+    /**
+	* CreatePresetListL()
+	* Creating a Preset List
+	*/
+	void CreatePresetListL();
+	
+    /**
+	* SaveL()
+	* Save a channel name to favorites DB.
+	*/
+	void SaveL();
+	
+	/**
+	* SaveAllL()
+	* Save  channel names to favorites DB.
+	*/
+	void SaveAllL();
+    
+	/**
+	* Updates all items of the list by reading data from preset data base.
+	*/
+	void UpdateAllL() ;
+
+    /**
+	* OfferKeyEventL() from CCoeControl
+	* 
+	*/
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+	
+	/**
+	* HandlePointerEventL
+	* Handles all the Pointer events
+	*/
+	void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+	
+
+	/**
+	* From CCoeControl
+	*
+	* @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	*/
+	void GetHelpContext( TCoeHelpContext& aContext ) const;
+	
+    /**
+	* HandleListBoxEventL()
+	* Handles any event on the List Box.
+	*/
+	void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+	
+    /**
+	* GetCount()
+	* Gets the count of the List.
+	*/
+	TInt GetCount() const;
+	
+    /**
+	* GetListBoxTopIndex()
+	* Gets the TopItemIndex.
+	*/
+	TInt GetListBoxTopIndex() const;
+    
+    /**
+	* SecondPls()
+	*/
+	void SecondPls();
+	
+    /**
+	* Handles a change to the control's resources.
+	*/
+    void HandleResourceChange(TInt aType);
+
+
+
+private: //Methods
+
+	// from base class CCoeControl
+	/**
+	* From CCoeControl
+	*
+	* @see CCoeControl::Draw( const TRect& aRect ) const
+	*/
+	void Draw( const TRect& aRect ) const;
+	
+    /**
+	* DisplayErroronDBL()
+	* Displays error if favorites db is full.
+	*/ 
+	void DisplayErroronDBL();
+	
+    /**
+	* DisplayErrorOnNoItemsL()
+	* Displays error if no streaming links
+	*/
+	void DisplayErrorOnNoItemsL();
+	
+	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+
+	/**
+	* SizeChanged()
+	* Called by framework when the view size is changed.
+	*/
+    void SizeChanged();
+    
+
+
+
+private:    // Data
+
+	/** 
+	* Parent view of this container. 
+	*/
+	CIRPlsView&	iPlsView;
+
+	// bool to check if all stations saved	
+	TBool iSavedAllUrl;    
+
+	/**
+	* This array holds the list of preset objects to be saved
+	*/    
+	RPointerArray<CIRIsdsPreset> iPresetList;
+
+	/**
+	* Indicates if the preset list is present or not
+	*/
+	TBool iPresetListPresent;
+    
+	/*
+	* iIsPresetSaved
+	* array used to check whether the preset is saved
+	*/
+	RArray<TInt> iIsPresetSaved;
+	
+	/*
+	* iPlsListBox
+	* CAknSingleStyleListBox listbox for the PLS list.
+	*/
+	CEikColumnListBox *iPlsListBox;
+	/*
+	* iListArray
+	* Pls List 
+	*/
+	CDesCArray* iListArray;   
+
+	
+	};
+
+#endif      // CIRPlsContainer_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irplsplaylist.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2007-2007 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:  Describes a PLS playlist.
+*
+*/
+
+
+#ifndef C_IRPLSPLAYLIST_H
+#define C_IRPLSPLAYLIST_H
+
+#include <e32base.h>
+
+class CIRPlsPlayListItem;
+class RFile;
+
+/**
+ *  Describes a PLS playlist.
+ */
+class CIRPlsPlayList : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aFileToParse Open file that is parsed to content of this object.
+     */
+    static CIRPlsPlayList* NewL(RFile& aFileToParse);
+    
+    /**
+     * Two-phased constructor.
+     *
+     * @param aFileToParse Open file that is parsed to content of this object.
+     */
+    static CIRPlsPlayList* NewLC(RFile& aFileToParse);
+
+    /**
+    * Destructor.
+    */
+    ~CIRPlsPlayList();
+
+    /**
+     * Adds new item to playlist to the specified index.
+     * Takes ownership of aItem.
+     * If there exists an item at specified index, it's replaced.
+     *
+     * @param aIndex Index to add item at.
+     * @param aItem The item to be added.
+     */
+    void AddItemAtL( TInt aIndex, CIRPlsPlayListItem* aItem );
+    
+    /**
+     * Removes item at specified index of this playlist.
+     * No-op, if no item was found with the index.
+     *
+     * @param aIndex Index to removed item at.
+     */
+    void RemoveItemAt( TInt aIndex );
+    
+    /**
+     * Returns item at specified index in this playlist.
+     * NULL is returned if no item found with the index.
+     * Ownership of item is not transferred.
+     *
+     * @param aIndex Index to return item from.
+     * @return The item at aIndex, or NULL.
+     */
+    CIRPlsPlayListItem* ItemAt( TInt aIndex ) const;
+    
+    /**
+     * Returns the number of items in this playlist.
+     *
+     * @return The number of items.
+     */
+    TInt Count() const;
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRPlsPlayList();
+
+    /**
+     * Constructor.
+     *
+     * @param aFileToParse Open file that is parsed to content of this object.
+     */
+    void ConstructL(RFile& aFileToParse);
+    
+    /**
+     * Parses a file content into this object.
+     *
+     * @param aFileToParse Open file that is parsed to content of this object.
+     */
+    void ParseFileL(RFile& aFileToParse);
+    
+    /**
+	 * Reads a single line of specified file at cursor position. 
+	 * The file must be open. Changes the position of cursor, 
+	 * so that this enables reading the whole file with sequential 
+	 * calls to this function.
+	 * Fills the given buffer with content of line. The buffer must
+	 * must be NULL when calling this function.
+	 * When the last line is read and buffer filled, return value
+	 * is KErrEof.
+	 * Empty lines are skipped, only lines with content are returned!
+	 *
+	 * @param aFile The file to read from.
+	 * @param aLineBuf The buffer to be filled.
+	 * @return KErrNone or KErrEof
+	 */
+    void ReadLineL( RFile& aFile, HBufC8*& aLineBuf, TInt *aError ) const;
+
+private: // data
+
+    /**
+     * Array of items in this list.
+     */
+    RPointerArray<CIRPlsPlayListItem> iItems;
+    
+    /**
+     * Array of item indexes in this list.
+     */
+    RArray<TInt> iIndexes;
+    };
+
+#endif // C_IRPLSPLAYLIST_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irplsplaylistitem.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,116 @@
+/*
+* Copyright (c) 2007-2007 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:  Describes a single item in PLS playlist.
+*
+*/
+
+
+#ifndef C_IRPLSPLAYLISTITEM_H
+#define C_IRPLSPLAYLISTITEM_H
+
+#include <e32base.h>
+
+/**
+ *  Describes a single item in PLS playlist.
+ *  The item consists of File, Title and Length attributes.
+ */
+class CIRPlsPlayListItem : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CIRPlsPlayListItem* NewL();
+    
+    /**
+     * Two-phased constructor.
+     */
+    static CIRPlsPlayListItem* NewLC();
+
+    /**
+    * Destructor.
+    */
+    ~CIRPlsPlayListItem();
+
+    /**
+     * Sets new File attribute. The old attribute is replaced.
+     *
+     * @param aFile New File attribute.
+     */
+    void SetFileL( const TDesC& aFile );
+    
+    /**
+     * Sets new Title attribute. The old attribute is replaced.
+     *
+     * @param aTitle New Title attribute.
+     */
+    void SetTitleL( const TDesC& aTitle );
+    
+    /**
+     * Sets new Length attribute. The old attribute is replaced.
+     *
+     * @param aLength New Length attribute.
+     */
+    void SetLength( TInt aLength );
+    
+    /**
+     * Gets the File attribute.
+     *
+     * @return The File attribute.
+     */
+    const TDesC& File() const;
+    
+    /**
+     * Gets the Title attribute.
+     *
+     * @return The Title attribute.
+     */
+    const TDesC& Title() const;
+    
+    /**
+     * Gets the Length attribute.
+     *
+     * @return The Length attribute.
+     */
+    TInt Length() const;
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRPlsPlayListItem();
+
+ 
+private: // data
+
+    /**
+     * "File" of this item.
+     */
+    RBuf iFile;
+    
+    /**
+     * "Title" of this item.
+     */
+    RBuf iTitle;
+    
+    /**
+     * "Length" of this item.
+     */
+    TInt iLength;
+    };
+
+#endif // C_IRPLSPLAYLISTITEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irplsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2006-2007 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:  view for pls list 
+*
+*/
+
+
+#ifndef CIRPLSVIEW_H
+#define CIRPLSVIEW_H
+
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include "irbaseview.h"
+#include "IRActiveNetworkObserver.h"
+
+
+class CIRUi;
+class CIRPlsContainer;
+class CIRIsdsPreset;
+class MIRActiveNetworkObserver;
+
+//========================================class declaration CIRPlsView============================================
+
+/**
+ * This class Creates CIRPlsView.
+ * Handles the all the options defined for the view.
+ * 
+ * @code
+ * Create instance of .pls view.
+ * CIRPlsView* self = new (ELeave) CIRPlsView;
+ * 
+ * Create the instance of container.
+ * iContainer = CIRPlsView::NewL(AppUi()->
+        	ApplicationRect());
+ *
+ * @endcode
+ *
+ */
+class CIRPlsView : public CIRBaseView,
+				   public MAknToolbarObserver,
+				   public MIRActiveNetworkObserver
+	{
+public:
+
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* Create a CIRPlsView object, which will draw itself to aRect.
+	* @param aRect The rectangle this view will be drawn to.
+	* @return a pointer to the created instance of CIRPlsView.
+	*/
+	static CIRPlsView* NewL(const TRect& aRect);
+
+	/**
+	* NewLC.
+	* Two-phased constructor.
+	* Create a CIRPlsView object, which will draw itself
+	* to aRect.
+	* @param aRect Rectangle this view will be drawn to.
+	* @return A pointer to the created instance of CIRPlsView.
+	*/
+	static CIRPlsView* NewLC(const TRect& aRect);
+
+	/**
+	* ~CIRPlsView
+	* Destructor.
+	*/
+	 ~CIRPlsView();
+	 
+	 /**
+	* Id()
+	* defines the Id of the view.
+	* returns the UId of the view.
+	*/	
+	TUid Id() const;
+
+
+	/**
+	* HandleCommandL()
+	* Handles the user input commands.
+	* @param aCommand The command generated by user keypress..
+	*/ 
+	   
+	void HandleCommandL(TInt aCommand);
+
+	/**
+	* DynInitMenuPaneL()
+	* Dynamically loads the menu pane.
+	* @param aResourceId,the resource Id of the view.
+	* @param aMenuPane,Pointer to the menu pane.
+	*/
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+	//for listen and add to favorites
+	
+
+private:
+
+	/**
+	* ConstructL
+	* 2nd phase constructor.
+	* Perform the second phase construction of a
+	* @param aRect The rectangle this view will be drawn to.
+	*/	
+	void ConstructL(const TRect& aRect);
+
+	/**
+	* CIRPlsView.
+	* C++ default constructor.
+	*/
+	CIRPlsView();  
+		    
+	/**
+	* DoActivateL()
+	* Activates the view.
+	*/       
+	void DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+	    			 const TDesC8& aCustomMessage);
+	/**
+	* DoDeactivate()
+	* DeActivates the view.
+	*/     			 
+    void DoDeactivate();
+    
+    //added for touch toolbar
+	// From MAknToolbarObserver
+	void DynInitToolbarL(	TInt aResourceId,	CAknToolbar* aToolbar );
+	
+	/**
+	* OfferToolbarEventL()
+	* Handles all the events for the touch tool bar.
+	*/  
+	
+	void OfferToolbarEventL(	TInt aCommand );
+	
+	/**
+	* HandleStatusPaneSizeChange()
+	* Handles the Change in the status Pane
+	*/  
+	
+    void HandleStatusPaneSizeChange();
+    
+    /**
+	* HandleForegroundEventL()
+	* Handles the foreground event.
+	*/  
+
+    void HandleForegroundEventL( TBool aForeground );
+    
+    /**
+	* ConstructToolbarL()
+	* Construct the touch toolbar.
+	*/  
+
+	void ConstructToolbarL();
+	
+public:
+			//from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+
+
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+  	
+  	/**
+	* SecondConstruct()
+	* To again initialise when Second pls file is opened.
+	*/ 
+    void SecondConstruct();
+
+		
+private:
+	
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	
+
+	
+	//instance of CIRPlsViewContainer
+	CIRPlsContainer* iContainer;
+	
+
+	};
+   
+#endif // IR_PLSVIEW_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irpropertyobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef CIRPROPERTYOBSERVER_H
+#define CIRPROPERTYOBSERVER_H
+
+#include <e32base.h>
+#include <e32property.h>
+
+/** 
+ * Defines text property with maximum size, that is RProperty::
+ * KKMaxPropertySize bytes. 
+ */
+typedef TBuf8<RProperty::KMaxPropertySize> TIRTextProperty;
+
+/**
+ * MIRPropertyChangeObserver
+ *
+ * Abstract interface for handling property change events.
+ */
+class MIRPropertyChangeObserver
+{
+
+public:
+ 
+    /**
+     * This is a callback function which is called when a property value of 
+     * type int is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     *
+     * @param aValue the new value
+     */
+    virtual void HandlePropertyChangeL(
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TInt aValue ) = 0;
+    
+    /**
+     * This is a callback function which is called when a property value of 
+     * type text is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aValue the new value
+     **/
+    /*lint -save -e1053*/
+    virtual void HandlePropertyChangeL( 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TIRTextProperty& aValue ) = 0;
+    /*lint -restore*/
+    
+    /**
+     * This is a callback function which is called when a P&S components 
+     * returns an error
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event
+     * @param aError an error code
+     */
+    virtual void HandlePropertyChangeErrorL(
+        const TUid& aCategory, 
+        const TUint aKey, 
+        TInt aError) = 0;
+    
+};
+
+
+
+/**
+ * Observer class that observes changes of Property values and propogates 
+ * them further.
+ * The class defines a handle to a property, a single data value representing
+ * an item of state information.
+ *
+ */
+ class CIRPropertyObserver : public CActive
+	{  
+	
+ public:  // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+    IMPORT_C static CIRPropertyObserver* NewL(
+        MIRPropertyChangeObserver& aObserver, 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const RProperty::TType aPropertyType);
+
+    /**
+     * Destructor.
+     */
+    ~CIRPropertyObserver();
+    
+    /**
+     * Updates an int value reference in correspondence with the current 
+     * Property value
+     *
+     * @param aValue handle to a value which will be updated
+     **/	
+	IMPORT_C void GetValue( TInt& aValue ) const;
+	
+	/**
+     * Updates a text value reference in correspondence with the current 
+     * Property value
+     *
+     * @param aValue handle to a value which will be updated
+     */	
+    /*lint -save -e1053*/
+	IMPORT_C void GetValue( TIRTextProperty& aValue ) const;
+    /*lint -restore*/
+	
+	/**
+	*Subscription of listened P&S keys
+	*/	
+    void Subscribe();
+
+		
+private:
+
+    /**
+     * C++ default constructor overload.
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+	CIRPropertyObserver(
+	    MIRPropertyChangeObserver& aObserver, 
+	    const TUid& aCategory, 
+	    const TUint aKey, 
+	    const RProperty::TType aPropertyType);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     **/
+    void ConstructL();
+
+protected:  
+    
+    // from base class Cactive
+    /**
+     * From CActive
+     *
+     * @see CActive::RunL()
+     */
+    void RunL();
+
+    /**
+     * From CActive, 
+     * 
+     * @see CActive::DoCancel()
+     */
+    void DoCancel();
+
+
+private:  
+
+ 	/** 
+ 	 * Value of a subscribed category property of type int. 
+ 	 */
+     TInt iValueInt;
+ 	
+ 	/** 
+ 	 * Value of a subscribed category property of type text. 
+ 	 */
+     TIRTextProperty iValueText;
+ 	
+    /** 
+     * Handle to Publish And Subscribe component
+     */ 
+    RProperty iProperty;
+    
+    /**
+     * Observer to be notified when particular Property value has changed
+     */
+    MIRPropertyChangeObserver& iObserver;
+    
+    /** 
+     * UID of Publish And Subscribe category
+     */
+    TUid iCategory;
+    
+    /**
+     * Subkey to be used with Publish And Subscribe
+     */
+    TUint iKey;
+    
+    /** 
+     * Type of the observed property. 
+     */
+    RProperty::TType iPropertyType;
+    
+	};
+
+#endif  // CPROPERTYOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irpropertyobserver2.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2005-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:  Header file for CIRPropertyObserver2
+*
+*/
+
+
+#ifndef CIRPROPERTYOBSERVER2_H
+#define CIRPROPERTYOBSERVER2_H
+
+#include <e32base.h>
+#include <e32property.h>
+
+/**
+ * MIRPropertyChangeObserver2
+ *
+ * Abstract interface for handling property change events.
+ */
+class MIRPropertyChangeObserver2
+{
+
+public:
+ 
+    /**
+     * This is a callback function which is called when a property value of 
+     * type int is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     *
+     * @param aValue the new value
+     */
+    virtual void HandlePropertyChangeL(
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TInt aValue ) = 0;
+    
+    /**
+     * This is a callback function which is called when a property value of 
+     * type byte array is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aValue the new value
+     **/
+    virtual void HandlePropertyChangeL( 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TDesC8& aValue ) = 0;
+    
+    /**
+     * This is a callback function which is called when a property value of 
+     * type text is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aValue the new value
+     **/
+    virtual void HandlePropertyChangeL( 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TDesC& aValue ) = 0;
+    
+    /**
+     * This is a callback function which is called when a P&S components 
+     * returns an error
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event
+     * @param aError an error code
+     */
+    virtual void HandlePropertyChangeErrorL(
+        const TUid& aCategory, 
+        const TUint aKey, 
+        TInt aError) = 0;
+    
+};
+
+
+
+/**
+ * Observer class that observes changes of Property values and propogates 
+ * them further.
+ * The class defines a handle to a property, a single data value representing
+ * an item of state information.
+ *
+ */
+NONSHARABLE_CLASS( CIRPropertyObserver2 ) : public CActive
+	{  
+	
+ public:
+
+    /**
+     * Property type. Cannot use RProperty::TType because EByteArray == EText.
+     */
+    enum TIRPropertyType
+    	{
+    	EIRPropertyInt, // Integral property type.
+    	EIRPropertyByteArray, // Byte-array (8 bit), max size 512 bytes
+    	EIRPropertyText // Text (16 bit), max size 512 bytes
+    	};
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+    IMPORT_C static CIRPropertyObserver2* NewL(
+        MIRPropertyChangeObserver2& aObserver, 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TIRPropertyType aPropertyType);
+
+    /**
+     * Destructor.
+     */
+    ~CIRPropertyObserver2();
+        
+    /**
+     * Subscribes the object to listen to the specified key. Does nothing if already active.
+     * Must be called after construction, or after calling Cancel().
+     */
+    IMPORT_C void ActivateL();
+    
+    /**
+     * Returns current integer property value
+     *
+     * @return int value
+     */	
+	IMPORT_C TInt ValueInt() const;
+	
+	/**
+     * Returns current byte array property value
+     *
+     * @return byte array value
+     */	
+	IMPORT_C const TDesC8& ValueDes8() const;
+	
+	/**
+     * Returns current text property value
+     *
+     * @return text value
+     */	
+	IMPORT_C const TDesC& ValueDes() const;
+		
+private:
+
+    /**
+     * C++ default constructor overload.
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+	CIRPropertyObserver2(
+	    MIRPropertyChangeObserver2& aObserver, 
+	    const TUid& aCategory, 
+	    const TUint aKey, 
+	    const TIRPropertyType aPropertyType);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     **/
+    void ConstructL();
+
+protected:  
+    
+    // from base class Cactive
+    /**
+     * From CActive
+     *
+     * @see CActive::RunL()
+     */
+    void RunL();
+
+    /**
+     * From CActive, 
+     * 
+     * @see CActive::DoCancel()
+     */
+    void DoCancel();
+
+private: // data
+
+ 	/** 
+ 	 * Value of a subscribed category property of type int. 
+ 	 */
+ 	TInt iValueInt;
+ 	
+ 	/** 
+ 	 * Value of a subscribed category property of type byte array. 
+ 	 */
+ 	HBufC8* iValueByteArray;
+ 	
+ 	/** 
+ 	 * Value of a subscribed category property of type text. 
+ 	 */
+ 	HBufC* iValueText;
+ 	
+    /** 
+     * Handle to Publish And Subscribe component
+     */ 
+    RProperty iProperty;
+    
+    /**
+     * Observer to be notified when particular Property value has changed
+     */
+    MIRPropertyChangeObserver2& iObserver;
+    
+    /** 
+     * UID of Publish And Subscribe category
+     */
+    TUid iCategory;
+    
+    /**
+     * Subkey to be used with Publish And Subscribe
+     */
+    TUint iKey;
+    
+    /** 
+     * Type of the observed property. 
+     */
+    TIRPropertyType iPropertyType;
+    
+	};
+
+#endif  // CIRPROPERTYOBSERVER2_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irpubsub.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2006-2007 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 CIRPubSub
+*
+*/
+
+
+#ifndef CIRPUBSUB_H
+#define CIRPUBSUB_H
+
+#include <e32base.h>
+
+#include "irpubsubkeys.h"
+
+class CIRMetaData;
+class CIRPropertyObserver;
+
+/**
+ *  Publish&Subscribe interface of Internet Radio Application.
+ */
+class CIRPubSub : public CBase
+    
+	//public MIRPropertyChangeObserver
+    {
+    
+public:  // Methods
+
+    /**
+     * Static constructor.
+     */
+    static CIRPubSub* NewL();
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CIRPubSub();
+
+    /**
+     * Publishes active channel number to P&S.
+     *
+     * @param aChannelName The channel name to publish.
+     */
+    void PublishChannel( const TDesC16& aChannelName ) const;
+    
+    /**
+     * Publishes volume level number to P&S.
+     *
+     * @param aVol The volume level to publish.
+     */
+    void PublishVolume( TInt aVol ) const;
+    
+    /**
+     * Publishes active channel number to P&S.
+     *
+     * @param aPlayingState The state of palying to publish.
+     */
+    void PublishPlayStop ( TIRStopPlayState aPlayingState ) const;
+    
+    /**
+     * Publishes application running state to P&S.
+     *
+     * @param aRunningState The application running state.
+     */
+    void PublishApplicationRunningStateL( 
+        TIRPSApplicationRunningState aRunningState ) const;
+
+    /**
+     * Published meta data information.
+     *
+     * @param   aMetaData   Meta data information to publish.
+     */
+    void PublishMetaDataL( const CIRMetaData& aMetaData ) const;
+    
+    /**
+     * Publishes active channel Type to P&S.
+     *
+     * @param aChannelName The channel Type to publish.
+     */
+    void PublishChannelType ( TInt aChannelType ) const;
+    
+    /**
+     * Publishes active channel Id to P&S.
+     *
+     * @param aChannelId The channel Id to publish.
+     */
+    void PublishChannelId ( TInt aChannelId ) const;
+    
+    void PublishChannelDesc(const TDesC16& aChannelDesc ) const ;
+    
+    void PublishChannelMusicFlag(const TDesC16& aChannelMusicFlag ) const ;
+    
+    
+    void PublishBufferingState(TIRBufferingState aState) const;
+
+private: //Methods
+
+	/**
+     * C++ default constructor.
+     */
+    CIRPubSub( );
+    
+   void ConstructL();
+
+    /**
+     * Defines a property.
+     *
+     * @param aKey The key of the property.
+     * @param aAttr Attributes of the property.
+     * @param aDataProperty ETrue if the property is a data property, EFalse 
+     * if it is a control property
+     */
+    void DefinePropertyL( 
+        TUint aKey, 
+        TInt aAttr, 
+        TBool aDataProperty ) const;
+
+    /**
+     * Deletes a property.
+     *
+     * @param aKey The key of the property.
+     */
+    void DeleteProperty( TUint aKey ) const;        
+
+    
+private:    // Data
+
+	/** 
+	 * An array of handlers to P&S interface. 
+	 */ 
+	RPointerArray<CIRPropertyObserver> iPropertyArray;
+public :
+
+    //iRapp application instance count
+    TInt iApplicationInstanceCount;
+	
+    };
+
+#endif      // CIRPUBSUB_H   
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irradioidle.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,447 @@
+/*
+* 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: 
+*
+*/
+/*
+* ============================================================================
+*  Name               : vrradioidle.h
+*  Part of            : S60VisualRadio / UI
+*  Description        :
+*  Version    		  :
+*
+* ==============================================================================
+*/
+
+#ifndef IRRADIOIDLE_H_
+#define IRRADIOIDLE_H_
+
+// INCLUDES
+
+#include <AknUtils.h>
+#include <alf/alfenv.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfanchorlayout.h>
+
+// FORWARD DECLARATIONS
+
+class CAlfGradientBrush;
+class CAlfViewportLayout;
+class CAlfEnv;
+
+// CONSTANTS
+
+/** Commands for radio idle. */
+enum TRadioIdleCommand
+	{
+	ESuspend = 0x4A,
+	EStartup,
+	EShutdown,
+	ERefresh,
+	EResetContent
+	};
+
+// CLASS DEFINITIONS
+
+class MIRRadioIdleCommandObserver
+	{
+	public:
+		/**
+		* Called when change to the state of radio idle is wanted
+		*/
+		virtual void HandleCommandL( TRadioIdleCommand aCommand ) = 0;
+	};
+
+/**
+* CVRRadioIdle class
+*
+* Class launches animated information in the defined subregion of the display after startup delay.
+* Launching and radio idle running can be suspended by giving ESuspend command via
+* MVRRadioIdleCommandObserver interface.  When suspended,
+* background bitmap will replace the animated information and startup delay is reset to zero.
+* The animation will start again after the delay.
+*/
+NONSHARABLE_CLASS(CIRRadioIdle) : public CAlfControl, public MIRRadioIdleCommandObserver
+	{
+public:		// Constructors and destructor
+
+		/** Display orientations. */
+		enum TOrientation
+			{
+			EPortrait = 0x4A,
+			ELandscape,
+			EOrientationNone
+			};
+
+		/**
+	    * Epoc two-phased constructor.
+	    * @param aAlfEnv The Alfred environment.
+	    * @param aControlGroupId The control group that this control is to be added to.
+	    * @param aParentLayout The parent layout for the visuals.
+	    */
+		static CIRRadioIdle* NewL( CAlfEnv& aEnv, TInt aControlGroupId, CAlfLayout* aParentLayout );
+		/**
+        * Destructor
+        */
+		virtual ~CIRRadioIdle();
+
+public: 	// Functions from base classes
+		/**
+ 	    * From CAlfControl, takes care of alfred event handling.
+ 	    */
+		TBool OfferEventL( const TAlfEvent& aEvent );
+
+public:		// New functions
+
+		/** States of radio idle. */
+		enum TRadioIdleState
+			{
+			ERunning = 0xA0,
+			ESuspended,
+			EStopped
+			};
+
+		/** Radio idle modes. */
+		enum TRadioIdleMode
+			{
+			EOnlyBackgroundText = 0xB0,
+			EBackgroundTextAndRadioIdleItems
+			};
+
+		/** Fade styles. */
+		enum TRadioIdleFadeStyle
+			{
+			EFadeLeft = 0xC0,
+			EFadeRight,
+			EFadeStyleNone
+			};
+
+		/**
+ 	    * Adds radio idle item text to be used in the radio idle
+ 	    * @param aRadioIdleItemText Text of the radio idle item
+ 	    * @return Index of the added item
+ 	    */
+		TInt AddRadioIdleContentL( const TDesC& aRadioIdleItemText );
+		/**
+ 	    * Updates radio idle item text in specified index
+ 	    * @param aRadioIdleItemText Text of the radio idle item
+ 	    * @param aIndex Index of the radio idle item to be updated
+ 	    */
+		void UpdateRadioIdleContent( const TDesC& aRadioIdleItemText, TInt aIndex );
+		/**
+	    * Removes all radio idle item texts
+		*/
+		void ResetRadioIdleContent();
+		/**
+	    * Returns number of radio idle content items
+	    * @return content count
+		*/
+		TInt RadioIdleContentCount() const;
+		/**
+		 * Sets the fade style for radio idle.
+		 * @param aFadeStyle  Fade style
+		 */
+		void SetIdleFadeStyle( TRadioIdleFadeStyle aFadeStyle );
+		/**
+	    * Sets the mode request for mode change. The mode
+	    * will be changed as soon as possible.
+	    * @param aRequestedMode Requested mode
+		*/
+		void SetModeChangeRequestL( TRadioIdleMode aRequestedMode );
+		/**
+	    * Retrieves the radio idle mode
+		*/
+		TRadioIdleMode Mode();
+		/**
+		 * Retrieves the radio idle state
+		 */
+		TRadioIdleState State();
+		/**
+ 	    * Sets primary color for the radio idle
+ 	    * @param aColor The color that is used as primary color of radio idle
+ 	    */
+		void SetPrimaryColor( TRgb aColor );
+		/**
+ 	    * Sets secondary color for the radio idle
+ 	    * @param aColor The color that is used as secondary color of radio idle
+ 	    */
+		void SetSecondaryColor( TRgb aColor );
+		/**
+ 	    * Sets the background color of the radio idle
+ 	    * @param aColor The color that is used as the background color of the radio idle
+ 	    */
+		void SetBackgroundColor( TRgb aColor );
+		/**
+ 	    * Return orientation of the display
+ 	    */
+		TOrientation Orientation();
+		/**
+ 	    * Set orientation of the display
+ 	    * @param aOrientation The display orientation
+ 	    */
+		void SetOrientation( TOrientation aOrientation );
+		/**
+		* Calculates display layout
+	    */
+		void UpdateLayout();
+		/**
+ 	    * From MIRRadioIdleCommandObserver, takes care of radio idle command handling.
+ 	    * @param aCommand Radio idle command
+ 	    */
+        void HandleCommandL( TRadioIdleCommand aCommand );
+     
+private:
+		/**
+		* C++ default constructor
+		*/
+		CIRRadioIdle();
+		/**
+	    * EPOC second phase constructor.
+	    * @param aEnv  Reference to the Hitchcock environment instance.
+	    * @param aControlGroupId  Id of the control group to which radio idle belongs.
+	    * @param aParentLayout  Pointer to parent layout.
+	    */
+		void ConstructL( CAlfEnv& aEnv, TInt aControlGroupId, CAlfLayout* aParentLayout );
+
+private:	// New functions
+
+		/** Scroll directions for the radio idle item. */
+		enum TRadioIdleItemScrollDirection
+			{
+			EScrollLeftToRight = 0xA0,
+			EScrollRightToLeft,
+			EScrollNone
+			};
+
+		/** Custom events for the radio idle. */
+		enum TRadioIdleCustomEvent
+			{
+			ERadioIdleItemTransformationEnd = 0x5B,
+			ERadioIdleBackgroundTextScrollEnd,
+			EAfterStartupDelay,
+			ERadioIdleChangeMode,
+			ERadioIdleEventNone,
+			ERadioIdleFadeOutCompleted
+			};
+
+		/**
+ 	    * Suspends radio idle and starts it again after startup delay
+ 	    */
+		void SuspendRadioIdle();
+		/**
+ 	    * Stops radio idle. Radio idle is set to stopped state.
+ 	    */
+		void ShutdownRadioIdle();
+		/**
+ 	    * Launches radio idle immediately.
+ 	    * The background bitmap fades out and at the same time radio idle fades in
+ 	    */
+		void StartRadioIdleL();
+		/**
+		 * Starts radio idle again without reseting radio idle items.
+		 */
+		void RefreshL();
+		/**
+ 	    * Creates radio idle with passed number of the radio idle items
+ 	    * @param aNumberOfRadioIdleItems Number of the radio idle items
+ 	    */
+		void AddRadioIdleL( const TInt aNumberOfRadioIdleItems );
+		/**
+ 	    * Creates the radio idle item to the passed radio idle view port.
+ 	    * @param aRadioIdle The view port of the radio idle, ownership now transferred
+ 	    * @param aRadioIdleItemText Text of the radio idle item
+ 	    * @param aRadioIdleItemHasBackground TBool to indicate background visibility
+ 	    * @param aBackgroundColor The background color of the radio idle item
+ 	    * @param aBackgroundOpacity The background opacity of the radio idle item
+ 	    */
+		CAlfTextVisual* AddRadioIdleItemL( CAlfLayout* aRadioIdle,
+										   const TDesC& aRadioIdleItemText,
+										   const TDesC8& aTag,
+									       TBool aRadioIdleItemHasBackground = EFalse,
+										   const TRgb& aBackgroundColor = KRgbWhite,
+										   const TReal32 aBackgroundOpacity = 0.5f );
+		/**
+ 	    * Creates, initializes and animates the radio idle background text visual
+ 	    */
+		void CreateBacgroundTextVisualL();
+		/**
+ 	    * Initializes the radio idle items
+ 	    * @param aNumberOfRadioIdleItems Number of the radio idle items
+ 	    */
+		void InitializeRadioIdleItemsL( const TInt aNumberOfRadioIdleItems );
+		/**
+ 	    * Sets defined animation to the created radio idle items
+ 	    */
+		void AnimateRadioIdleItems();
+		/**
+ 	    * Retrieves text from randomly chosen radio idle item.
+ 	    * Transfers ownership.
+ 	    */
+		HBufC* GetRandomRadioIdleContentL();
+		/**
+ 	    * Sets color, opacity and scaling settings to the radio idle item
+ 	    * @param aRadioIdleItem The radio idle item, ownership not transferred
+ 	    * @param aRadioIdleItemText Text of the radio idle item
+ 	    * @param aTextStyleId Text style for text of the radio idle item
+ 	    */
+		void SetRadioIdleItemSettingsL( CAlfTextVisual* aRadioIdleItem, const TDesC& aRadioIdleItemText,
+										const TInt aTextStyleId );
+		/**
+ 	    * Sets translating animations to the radio idle item
+ 	    * @param aRadioIdleItem The radio idle item, ownership not transferred
+ 	    * @param aRandomSeed
+ 	    */
+		void SetRadioIdleItemAnimation( CAlfTextVisual* aRadioIdleItem );
+
+		/**
+	    * Sets the radio idle mode
+		*/
+		void SetMode( TRadioIdleMode aMode );
+		/**
+	    * Fades in radio idle
+	    * @param aNow If ETrue shows radio idle immediately otherwise
+	    * fades with defined fading duration
+		*/
+		void RadioIdleFadeIn( TBool aNow = EFalse );
+		/**
+	    * Fades out radio idle
+	    * @param aNow If ETrue hides radio idle immediately otherwise
+	    * fades with defined fading duration
+		*/
+		void RadioIdleFadeOut( TBool aNow = EFalse );
+		/**
+ 	    * Sets and starts scrolling animation to CAlfTextVisual.
+ 	    * The visual object is scrolled from current position to
+ 	    * right side of the display
+ 	    * @param aVisual a pointer to the visual object, ownership not transferred
+ 	    */
+		void ScrollToRight( CAlfTextVisual* aVisual ) const;
+		/**
+ 	    * Sets and starts scrolling animation to CAlfTextVisual.
+ 	    * The visual object is scrolled from current position to
+ 	    * left side of the display
+ 	    * @param aVisual a pointer to the visual object, ownership not transferred
+ 	    */
+		void ScrollToLeft( CAlfTextVisual* aVisual ) const;
+		/**
+	    * todo
+ 	    * @param aVisual a pointer to the visual object, ownership not transferred
+ 	    * @param aTransitionTime Duration for reaching the target.
+ 	    * @param aEventAfterScrollingEnd todo custom even that will be sent when transition time is end
+ 	    */
+		void SetScrollingToBackgroundText( CAlfTextVisual* aVisual,
+							    TInt aTransitionTime,
+							    TRadioIdleCustomEvent aEventAfterScrollingEnd = ERadioIdleEventNone ) ;
+		/**
+	    * Sets fade-in animation to the CAlfVisual.
+	    * @param aVisual a pointer to the visual object, ownership not transferred
+	    * @param aTime Time duration after the visual object has been faded in. Fading duration in milliseconds
+	    * @param aOpacity Target opacity value
+	    */
+		void FadeIn( CAlfVisual* aVisual, TInt aFadingTime, TReal32 aOpacity = 1.0f ) const;
+		/**
+	    * Sets fade-out animation to the CAlfVisual.
+	    * @param aVisual a pointer to the visual object, ownership not transferred
+	    * @param aTime Time duration after the visual object has been faded out. Fading duration in milliseconds
+	    * @param aOpacity Target opacity value
+	    */
+		void FadeOut( CAlfVisual* aVisual, TInt aFadingTime, TReal32 aOpacity = 0.0f ) const;
+		/**
+ 	    * Translates the visual object with passed arguments
+ 	    * @param aVisual a pointer to the visual object, ownership not transferred
+ 	    * @param aX Translation value in the horizontal direction
+ 	    * @param aY Translation value in the vertical direction
+ 	    */
+		void Translate( CAlfTextVisual* aTextVisual, const TAlfTimedValue& aX, 
+						const TAlfTimedValue& aY );
+		/**
+ 	    * Scales the visual object with passed arguments
+ 	    * @param aVisual a pointer to the visual object, ownership not transferred
+ 	    * @param aX Scaling value in the horizontal direction
+ 	    * @param aY Scaling value in the vertical direction
+ 	    */
+		void Scale( CAlfTextVisual* aTextVisual, const TAlfTimedValue& aX, const TAlfTimedValue& aY );
+		/**
+ 	    * Removes all transformations of the visual object such as the scaling and translating.
+ 	    * @param aVisual a pointer to the visual object, ownership not transferred
+ 	    */
+		void LoadTextVisualIdentity( CAlfTextVisual* aTextVisual );
+	    /**
+	     * Converts CAlfVisual reference to pointer
+	     */
+	    CAlfVisual* GetPointer( CAlfVisual& aRef );	    
+        /**
+         * Callback for radio idle item transformation end.
+         */
+		void HandleRadioIdleItemTransformationEndEventL( const TAlfEvent& aEvent );
+		/**
+		 * Callback for background text transformation end.
+		 */
+        void HandleBackgroundTextScrollEndEventL( const TAlfEvent& aEvent );
+		/**
+		 * Randomly modifies a component of a radio idle text color.
+		 */
+        TInt DeviateColorComponent( TInt aBaseValue );
+        
+private:	// Data
+
+		/** Display orientation */
+	    TOrientation iOrientation;
+
+	    /** Visual of radio idle content. Not owned. */
+	    CAlfViewportLayout* iViewport;
+	    /** Parent layout. Not owned. */
+	    CAlfLayout* iParentLayout;
+	    /** Layout for radio idle */
+	    TAknLayoutRect iRadioIdleLayout;
+
+	    /** Fade style for radio idle */
+	    TRadioIdleFadeStyle iFadeStyle;
+	    /** States of radio idle */
+		TRadioIdleState iRadioIdleState;
+		/** Keeps track of the current radio idle mode */
+		TRadioIdleMode  iRadioIdleMode;
+		/** Keeps track of the requested mode */
+		TRadioIdleMode  iRadioIdleRequestedMode;
+	    /** Counts the items that have finished their transformations for mode change */
+		TInt iItemsTransformationEndEventCounter;
+
+	    /** Color to be used for the radio idle items */
+	    TRgb iRadioIdlePrimaryColor;
+	    /** Color to be used for the radio idle items */
+	    TRgb iRadioIdleSecondaryColor;
+	    /** Scroll direction for the radio idle item */
+	    TRadioIdleItemScrollDirection iScrollDirection;
+
+		/** Array for the strings of the radio idle items. Owned. */
+        CDesCArrayFlat* iRadioIdleItemArray;
+		/** Array for the text styles of the radio idle items */
+        RArray<TInt> iTextStyleIdArray;
+
+        /** Background of radio idle. Not owned.*/
+		CAlfGradientBrush* iRadioIdleBackgroundGradientBrush;
+        /** Text style id of the radio idle background text */
+        TInt iRadioIdleItemBackgroundTextStyleId;
+        /** Color that is used as the background color of radio idle */
+	    TRgb iRadioIdleBackgroundColor;
+	    /** Scroll direction for the radio idle background text */
+	    TRadioIdleItemScrollDirection iBackgroundTextScrollDirection;
+	    /** Indicates whether fading is ongoing */
+	    TBool iFading;
+	    /** Indicates whether there was a startup try when fading out radio idle */
+	    TBool iDelayedStartup;
+
+	};
+
+#endif /*VRRADIOIDLE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsearchresultsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,344 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRSearchResultsView
+*
+*/
+
+
+#ifndef CIRSEARCHRESULTSVIEW_H
+#define CIRSEARCHRESULTSVIEW_H
+
+#include "irbaseview.h"
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include "MViewsResponseAndErrorObserver.h"
+#include "MLogoDownloadObserver.h"
+
+
+class CIRSearchResultsViewContainer;
+class CAknButton;
+class CIRAddManuallyStationForm;
+class MLogoDownloadObserver;
+class MIRActiveNetworkObserver;
+
+/**
+ * SearchResults View
+ */
+class CIRSearchResultsView : public CIRBaseView,
+							 public MAknToolbarObserver,
+							 public MViewsResponseAndErrorObserver,
+							 public MLogoDownloadObserver,
+							 public MIRActiveNetworkObserver
+    {
+    
+public: //Methods
+
+	/**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRSearchResultsView* NewL();
+
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRSearchResultsView* NewLC();
+    
+    /**
+     *~CIRSearchResultsView()
+     * Destructor.
+     */
+    ~CIRSearchResultsView();
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+	
+    /**
+	* HandleStatusPaneSizeChange()
+	* Event handler for status pane size changes.
+	*/ 
+	void HandleStatusPaneSizeChange();
+	
+	/**
+	 * void SetStatusPaneTextL()
+	 * Sets the title pane of the search results view
+	 */
+	 void SetStatusPaneTextL();
+	 
+	 /**
+	  * DynInitMenuPaneL()
+ 	  * Dynamically initialises a menu pane
+	  */
+	void DynInitMenuPaneL(TInt /*aResourceId*/,CEikMenuPane* aMenuPane);
+                                                
+	//For Touch Toolbar
+	
+    /**
+	* OfferToolbarEventL
+	* gets toolbar events
+	*/ 
+    void OfferToolbarEventL(
+                TInt aCommand );
+                
+    /**
+	* ConstructToolbarL
+	* constructs a toolbar
+	*/  
+   	void ConstructToolbarL();
+  	
+   	/**
+	* HandleForegroundEventL()
+	* Foreground event handling function.
+	*/
+   	void HandleForegroundEventL( TBool aForeground );
+   	
+	/**
+	* DialogDismissedL()
+	* Called by CAknwaitdialog when a dialog is dismissed
+	*/
+	
+	/**
+	* void ResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+	
+	/**
+	* void PresetResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+	
+	/**
+	* AddToFavouritesL()
+	* Adds the selected channel to favorites
+	*/
+	void AddToFavouritesL(TInt aCurrentIndex,TInt aCommand);
+	
+	/**
+	* ListenChannelL()
+	* Request for listening to a channel
+	*/
+	void ListenChannelL(TInt aCurrentIndex);
+	
+	/**
+	* ErrorL()
+	* Handles error Conditions
+	*/
+	void ErrorL();
+   /*
+    * ShowQueryDialogL()
+    * Implemented the function for search again
+    */
+	void ShowQueryDialogL(const TDesC& aTitle, TDes& aBuffer);
+	/**
+    * PresetLogoDownloadedL()
+    * CallBack Function Returning the Preset With Logo
+    */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+	
+	/**
+    * PresetLogoDownloadError()
+    * CallBack Function Returning the Preset With no Logo/Error while downloading
+    */
+	void PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/);
+	
+	/**
+	* LogoRequestL()
+	* Called by the container of this view
+	*/
+	void LogoRequestL();
+	
+	/**
+	* AdRequestL()
+	* Called by the container of this view
+	*/
+	void AdRequestL();
+	/*
+	 * GetActualIndex()
+	 * returns the actual index
+	 */
+	TInt GetActualIndex();	
+	
+	/*
+	 * CIRSearchResultsView::SetActualFilteredItemIndex ()
+	 * Sets the listen is from favourites or not
+	 */
+	void SetActualFilteredItemIndex(TInt aIndex);
+	
+	/*
+	 * CIRSearchResultsView::GetFilteredIndex ()
+	 * returns the iFilteredIndex
+	 */
+	TInt GetFilteredIndex();
+	/*
+	 * GetFirstLaunchFlag()
+	 * returns the whether the view is launching for the first time/
+	 * coming back from that has been activated from this view
+	 */
+	TBool GetFirstLaunchFlag() ;
+	/*
+	* SetToolbarItems
+	* Sets the  touch tool bar items
+	*/
+    void SetToolbarItems();
+    //from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+   	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+   	 
+   	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+   	 
+   	 
+ 	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+protected:  //Methods
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
+        TUid /*aCustomMessageId*/, 
+        const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	
+private: //Methods
+
+    /**
+     * ConstructL()
+     * 2nd phase constructor
+     */
+    void ConstructL();
+    
+	/**
+     * CIRSearchResultsView()
+     * C++ default constructor.
+     */
+    CIRSearchResultsView();
+
+private:    // Data
+
+	/** 
+	 * iContainer
+	 * Container for this view. 
+	 */
+	CIRSearchResultsViewContainer* iContainer;
+
+	/** 
+	 * iToolbarVisible
+	 * Boolean value to determine if the toolbar is visible.
+	 */
+    TBool iToolbarVisible;
+    
+	
+	/**
+	* iIsSearchAgain
+	* to track whether the search again option is clicked or not
+	*/
+	TBool iIsSearchAgain;
+  	
+
+	/*
+	 * Returns the actual index of the listbox
+	 */
+	TInt iIndex;
+	
+	/*
+	 * Returns the filtered index of the listbox
+	 */
+	TInt iFilteredIndex;
+	TBool iFirstTimeLaunchFlag;
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	
+	
+	/**
+	* iAddToFav
+	* Boolean value to determine if AddToFavorites was issued.
+	*/
+	TBool iAddToFav;
+	
+	/**
+	* iListenRequest
+	* Boolean value to determine if ListenRequest was issued.
+	*/
+	TBool iListenRequest;
+	
+	/*
+	 * iSearchValue
+	 * Used to determine if search is issued
+	 */
+	TInt iSearchValue;
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+public:
+	
+	/**
+	 * iSearchReqMade
+	 * boolean value to know whether the search request
+	 * has made to isds or not
+	 */
+	TBool iSearchReqMade;
+
+	
+    };
+
+#endif      // CIRSEARCHRESULTSVIEW_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsearchresultsviewcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,448 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRSearchResultsViewContainer
+*
+*/
+
+
+#ifndef CIRSEARCHRESULTSVIEWCONTAINER_H
+#define CIRSEARCHRESULTSVIEWCONTAINER_H
+
+#include <aknlists.h>
+#include "irimageconverterobserver.h"
+#include <aknsfld.h> 
+
+class CIRSearchResultsView;
+class CAknIconArray;
+class CIRImageConverter;
+
+/**
+ * This classes are used for Advertisements
+ */
+class CCustomListBox;
+class CIRFilteredModel;
+class MIRListBoxArray;
+class CIRAdvertisingListBox;
+
+
+/**
+ * Container for Search Results View.
+ */
+class CIRSearchResultsViewContainer : public CCoeControl,public MEikListBoxObserver,
+                            public MIRImageConverterObserver
+    {
+    
+public:  // Methods
+
+	/**
+	* NewL.
+	* Two-phased constructor.
+	* @param aRect The rectangle this view will be drawn to.
+    * @param aView which is a plsview's reference
+    * @return a pointer to the created instance of CIRSearchResultsViewContainer.
+	*/
+	static CIRSearchResultsViewContainer* NewL(const TRect& aRect ,CIRSearchResultsView &aView );
+
+	/**
+	* NewLC.
+	* Two-phased constructor.
+	* to aRect.
+	* @param aRect Rectangle this view will be drawn to.
+	* @param aView which is a plsview's reference
+	* @return A pointer to the created instance of CIRSearchResultsViewContainer.
+	*/
+	static CIRSearchResultsViewContainer* NewLC(const TRect& aRect,CIRSearchResultsView &aView);
+	
+    
+    /**
+     * ConstructL
+     * 2nd phase constructor.
+     */
+     void ConstructL( const TRect& aRect);
+    
+	/**
+     * CIRSearchResultsViewContainer()
+     * C++ default constructor.
+	 * @param aView View of this container.
+     */
+    CIRSearchResultsViewContainer(CIRSearchResultsView &aSearchResultsView);
+    
+    /**
+     * ~CIRSearchResultsViewContainer()
+     * Destructor.
+     */
+    ~CIRSearchResultsViewContainer();
+
+	/**
+     * UpdateSearchResultsViewL()
+     * updates the search results data to the search results list
+     */
+ 	void UpdateSearchResultsViewL();
+ 	
+ 	
+	// from base class CCoeControl
+
+     /**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::OfferKeyEventL() 
+	 */    
+	
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+   
+    /**
+     * From MEikListBoxObserver HandleListBoxEventL
+     */ 
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+    
+
+	/**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	 */
+	void GetHelpContext( TCoeHelpContext& aContext ) const;
+	
+	/**
+	 * GetCurrentItemIndex()
+	 * returns the index of the currently selected item
+	 */ 
+	TInt GetCurrentItemIndex() const;
+	
+	/**
+	 * GetListBoxTopIndex()
+	 * returns the index of the top item
+	 */ 
+	TInt GetListBoxTopIndex() const;
+	
+	
+	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+
+	/**
+	* SizeChanged()
+	* Responds to changes to the size and position of the contents of this control.
+	*/
+	void SizeChanged();
+	
+	/**
+	* HandleResourceChange()
+	* Handles a change to the control's resources.
+	*/
+	void HandleResourceChange(TInt aType);
+	
+	/**
+ 	* HandleImageConversionEventL()
+ 	* from base class MIRImageConverterObserver
+ 	*/
+	void HandleImageConversionEventL( 
+		MIRImageConverterObserver::TIRImageConversionEvent /*aEvent*/, TInt aId, TInt aError );
+	
+	/**
+	* HandleLogoErrorL()
+	* called from the iSearchResultsView when the logo is not downloaded
+	*/
+	void HandleLogoErrorL();
+
+	
+    void UpdateSearchResultsL();
+    
+    /**
+ 	* CreateCustomListBoxL()
+ 	* Creates the custom listbox and updates the list according to that
+ 	*/
+	void CreateCustomListBoxL();
+	
+ 	/**
+ 	* OpenUrlL()
+ 	* Used to connect to advertisement url
+ 	*/
+	void OpenUrlL( const TDesC& aHttpLink );
+	/*
+	* CreateFindBoxL()
+	* Creates the find box for dynamic filtering
+	*/
+	CAknSearchField* CreateFindBoxL(CEikListBox* aListBox,
+	CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle);
+	/*
+	* DisableFindBox()
+	* disable the listbox when focus is not present
+	*/
+	void DisableFindBox();
+	
+	/**
+	* Function : Comparestrings
+	* Function called to get the actual index of the station
+	*/
+ 	void  Comparestrings();
+ 	
+ 	/*
+ 	 * CIRSearchResultsViewContainer::GetFilterdModelPointer()
+	 * returns pointer to filtered model.
+	 */
+ 	CIRFilteredModel* GetFilterdModelPointer();
+ 	/*
+ 	 * CIRSearchResultsViewContainer::GetFindString()
+	 * returns the string in the findbox
+	 */
+ 	TDesC GetFindString();
+ 	
+ 	/*
+ 	 * CIRSearchResultsViewContainer::GetListPointer()
+	 * returns pointer to Listbox.
+	 */
+  	CIRAdvertisingListBox* GetListPointer();
+ 	/*
+ 	 * CIRSearchResultsViewContainer::GetSearchBoxPointer()
+	 * returns the search box pointer.
+	 */
+ 	CAknSearchField* GetSearchBoxPointer();
+
+ 	/*
+ 	 * CIRIsdsPreset* GetAdPreset()
+ 	 * returns the advertisement preset 
+ 	 */
+ 	CIRIsdsPreset* GetAdvPreset();
+ 	/*
+  	 * CIRIsdsPreset* GetTempPreset()
+  	 * returns the temporary preset 
+  	 */
+  	CIRIsdsPreset* GetTempPreset(); 
+	/**
+ 	* CreateListBoxL()
+ 	* Creates ListBox depending upon the presence of Advertisement
+ 	*/
+	void CreateListBoxL();	
+    /**
+    * Formats list item string with given arguments
+    * 
+    * @param aFirstRow text for first row
+    * @param aSecondRow text for second row
+    * @param aIconId Icon ID used on item
+    */
+    HBufC* FormatItemStringLC( const TDesC& aFirstRow,  TInt aIconId );
+	/**
+	* GetLogoNotSupported()
+	* returns whether the advertisement is supported by the sdk r not
+	*/
+	TBool GetLogoNotSupported();
+    /**
+     * Creates default (empty) icon
+     * 
+     * @return  Default icon
+     */
+    CGulIcon* CreateDefaultIconL();
+   	/**
+ 	* PresetLogoDownloadL()
+ 	* Used to download the  logos depending the preset values.
+ 	*/
+ 	void PresetLogoDownloadL(CIRIsdsPreset* aPreset);	
+
+private: //Methods
+
+
+	// from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& /*aRect*/ ) const;
+
+	/**
+	* StartConvertL()
+	* used to convert the images depending the index passed
+	* 
+	*/
+	void StartConvertL( CIRImageConverter& aConverter, TInt /*aIndex*/, TInt /*aId*/ );	
+
+
+
+
+private:    // Data
+
+	/**
+	 * iChannelNameArray
+	 * array to hold the name of channels
+	 */ 
+	 CDesCArray* iChannelNameArray;
+	 
+	 /**
+	 * iChannelInfoArray
+	 * array to hold the description of channels
+	 */ 
+	 CDesCArray* iChannelInfoArray;
+	 /**
+	 * iItemArray
+	 * array for the listbox model
+	 */ 
+	 CDesCArray* iItemArray;
+	 
+	 /**
+	 * iSearchResultsView
+	 * reference of the SearchResultsView 
+	 */ 
+	 CIRSearchResultsView &iSearchResultsView;
+
+	/**
+    * boolean for forcibly getting the logo from cache
+    */
+	TBool   iForceGet;
+	
+	/**
+    * response from the cache for the availability of logo(CacheNotValid,NotCached,CacheUseable)
+    */
+	TInt 	iResult;
+	
+	/**
+	* to keep track of the icon array index
+	*/
+	TInt iIconIndex;
+	
+	/**
+	* to keep track of the logo url index(for temporary)
+	*/
+	TInt iLogoIndex;
+   	/*
+   	* iLandScapeCount
+   	* used to call the aknfind s HandlePopupFindSizeChanged function only once
+   	*/
+	TInt iLandScapeCount;
+	/*
+	* iInvalidIconIndices
+	* instance of RArray
+	*/
+	RArray<TInt> iInvalidIconIndices;
+	
+	/*
+	* iLogosArray
+	* instance of RArray
+	*/
+	RArray<TInt> iLogosArray;
+
+	/*
+	* iNoLogosArray
+	* instance of RArray
+	*/
+	RArray<TInt> iNoLogosArray;
+	
+	/*
+	* iCurrentItemConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iCurrentItemConverter;
+	
+	/*
+	 * iAdBitmap
+	 * instance of CFbsBitmap to store the advertisement
+	 */
+	CFbsBitmap*     iAdBitmap;
+
+private:
+	
+	 /**
+	 * iStationsListBox
+	 * Instance of the SearchResults ListBox
+	 */
+	  CIRAdvertisingListBox* iSearchListBox;
+
+	/*
+	* iConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iConverter;
+
+	/**
+	* Temporary preset to store url and the logo data
+	*/
+	CIRIsdsPreset *iTempPreset;
+	
+	/**
+	* Temporary preset to store the raw data of Advertisements
+	*/
+	CIRIsdsPreset*  iAdvPreset;
+	/*
+	* iFilteredModel
+	* Instance for CIRFilteredModel
+	*/ 
+	CIRFilteredModel* iFilteredModel;
+	
+    /*
+    * iAdPresent
+    * returns whether the advetisment is present or not
+    */
+    TBool iAdPresent;
+    /*
+    * iBgContext
+    * Instance of CAknsBasicBackgroundControlContext
+    */
+    CAknsBasicBackgroundControlContext* iBgContext;
+    /*
+	* iSearchTextBox
+	* Instance for CAknSearchField;
+	*/
+	CAknSearchField* 			iSearchBox;	
+  	/*
+	* iFindString
+	* Used to Get the Entered Search string
+	*/
+	TBuf<KSearchBoxTextLength> iFindString;
+    /*
+    * iAdvString
+    * sets the advertisement string
+    */
+    HBufC* iAdvString;
+    /*
+    * iListBoxArray
+    * Instance of MIRListBoxArray
+    */
+   	MIRListBoxArray* iListBoxArray;
+   	/*
+   	* iRequestForAdvertisement
+   	* sets when the request for advertisment conversation is made
+   	*/
+	TBool iRequestForAdvertisement;
+   	/*
+   	* iLogoDownloadError
+   	* sets when the  advertisment future is not supported
+   	*/
+	TBool iLogoDownloadError;
+    /**
+    * iAdRequestStatusFlag
+    * sets when a request for advertisement is made.
+    */
+	TBool iAdRequestStatusFlag;
+	/*
+	* iFilteredFlag
+	* This flag is set when dynamic filtering is done and
+	* will be reseted when the characters in the filter box is deleted
+	*/
+	TBool iFilteredFlag;
+	
+	TInt iError;
+
+    };
+
+#endif      // CIRSEARCHRESULTSVIEWCONTAINER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsettingscontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2006-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:  
+*
+*/
+
+
+#ifndef C_CIRSETTINGSCONTAINER_H
+#define C_CIRSETTINGSCONTAINER_H
+
+//#include "vrcommonsettingscontainer.h"
+#include "ircommonsettingscontainer.h"
+
+class CIRSettingsView;
+
+// Need to be changed.
+
+/**
+ * The container that holds all the setting items.
+ */
+NONSHARABLE_CLASS( CIRSettingsContainer ) : public CIRCommonSettingsContainer
+    {
+public:  // Methods
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param   aModel          The model that provides writing and reading of the settings.
+     */
+    static CIRSettingsContainer* NewL(CIRSettingsView& aSettingsView);
+    
+    /**
+     * Two-phased constructor.
+     *
+     * @param   aModel          The model that provides writing and reading of the settings.
+     */
+    static CIRSettingsContainer* NewLC(CIRSettingsView& aSettingsView);
+
+    /**
+     * Destructor.
+     */
+    ~CIRSettingsContainer();
+
+    /**
+    * Fades/unfades this container.
+    *
+    * @param    aFaded          ETrue if container is to be faded, otherwise EFalse
+    */
+    void SetFaded(TBool aFaded) const;
+
+private:
+
+    /**
+     * Constructor.
+     *
+     * @param   aModel          The model that provides writing and reading of the settings.
+     */
+    CIRSettingsContainer(CIRSettingsView& aSettingsView);
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+// from base class CAknSettingItemList.
+    void EditItemL( TInt aIndex, TBool aCalledFromMenu );
+    CAknSettingItem* CreateSettingItemL( TInt aSettingId );
+
+// from base class CCoeControl
+    TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+private:
+	CIRSettingsView& iSettingsView;
+    };
+
+#endif // C_CIRSETTINGSCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsettingsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2006-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:  View class for Settings
+*
+*/
+
+
+#ifndef C_CIRSETTINGSVIEW_H
+#define C_CIRSETTINGSVIEW_H
+
+// Need to be changed.
+
+#include "irsettingsviewbase.h"
+#include "irsystemeventobserver.h"
+#include "irbaseview.h"
+
+
+/**
+ * Implementation of the settings view
+ * CVRSettingsViewBase needs to be changed to CIRSettingsViewBase
+ */
+
+NONSHARABLE_CLASS( CIRSettingsView ) : public CIRSettingsViewBase,  public MIRSystemEventObserver
+
+    {
+public:
+
+	 /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRSettingsView* NewL();
+    
+    /**
+     * Two-phased constructor.
+     * @param aShowRegionItem ETrue if region setting item is to be shown, otherwise EFalse
+     * @return  The newly created object.
+     */
+    static CIRSettingsView* NewLC();
+    
+    /**
+     * Destructor.
+     */
+    ~CIRSettingsView();
+
+    // from base class CAknView
+    
+    /* HandleCommandL()
+	 * Command Handler
+	 */
+    void HandleCommandL( TInt aCommand );
+    
+    /* HandleForegroundEventL()
+	 *  Handles changes in keyboard focus when an application switches to foreground
+	 */
+    void HandleForegroundEventL( TBool aForeground );
+    
+    /* DynInitMenuPaneL()
+ 	 * Dynamically initialises a menu pane
+ 	 */
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CIRSettingsView();
+
+    /**
+     * Second-phase constructor.
+     *
+     * @param aShowRegionItem ETrue if region setting item is to be shown
+     */
+    void ConstructL();
+
+// from base class CIRSettingsViewBase
+
+	/* CreateContainerL()
+ 	 * Creates a new container
+ 	 */
+    void CreateContainerL();
+    
+// from base class CAknView
+
+	/* Id()
+ 	 * Returns the Id of the view
+ 	 */
+    TUid Id() const;
+    
+    /* DoActivateL()
+ 	 * Activates the view
+ 	 */
+    void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+    			 const TDesC8& aCustomMessage );
+    			 
+     /* DoDeactivate()
+ 	  * Deactivates the view
+ 	  */
+    void DoDeactivate();
+
+// from base class MIRSystemEventObserver
+
+	/* HandleSystemEventL()
+ 	 * Handles the system events
+ 	 */
+	 void HandleSystemEventL(TIRSystemEventType aEventType);
+	 
+	 /* HandleViewStackL()
+ 	  * handles the view stack
+ 	  */
+	 void HandleViewStackL( );
+
+    };
+
+#endif // C_CIRSETTINGSVIEW_H 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationdirectorycontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRStationDirectoryContainer
+*
+*/
+
+
+#ifndef CIRSTATIONDIRECTORYCONTAINER_H_
+#define CIRSTATIONDIRECTORYCONTAINER_H_
+
+#include <aknlists.h>
+#include <EIKLBX.H>
+#include <aknsfld.h> 
+#include <eikclb.h> 
+
+class CIRStationDirectoryView;
+class CAknDoubleStyleListBox;
+/**
+ * Container for Channel List View.
+ */
+class CIRStationDirectoryContainer : public CCoeControl , public MEikListBoxObserver    
+    {
+    
+public:  // Methods
+    
+    /**
+    * NewL.
+    * Two-phased constructor.
+    * Create a CIRStationDirectoryContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aStationsDirView The StationDirectory view's instance.
+    * @return a pointer to the created instance of CIRStationDirectoryContainer.
+    */
+    static CIRStationDirectoryContainer* NewL( CIRStationDirectoryView& aStationsDirView,
+    					 const TRect& aRect );
+
+    /**
+    * NewLC.
+    * Two-phased constructor.
+    * Create a CIRStationDirectoryContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aStationsDirView The StationDirectory view's instance.
+    * @return a pointer to the created instance of CIRStationDirectoryContainer.
+    */
+    static CIRStationDirectoryContainer* NewLC( CIRStationDirectoryView& aStationsDirView,
+    			 const TRect& aRect );
+    /**
+     * Second-phase constructor.
+     * 
+     * @param   aRect    Rect for Station  Direcotry Container
+     */
+    void ConstructL( const TRect& aRect );
+
+    /**
+     * C++ default constructor.
+     */
+    CIRStationDirectoryContainer(CIRStationDirectoryView& aStationsDirView );
+
+    /**
+     * Destructor.
+     */
+    ~CIRStationDirectoryContainer();   
+    
+    
+    /**
+      * From CCoeControl
+      */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+    /**
+     * From CCoeControl
+     */
+    void GetHelpContext( TCoeHelpContext& aContext ) const;
+    
+    /**
+    * GetCurrentItemIndex
+    * Returns the Current Selected index of the ListBox
+    */
+	TInt GetCurrentItemIndex() const;
+
+    /**
+     * From MEikListBoxObserver HandleListBoxEventL
+     */ 
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+    
+ 	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+	
+	/**
+	* SizeChanged()
+	* Responds to changes to the size and position of the contents of this control.
+	*/
+	void SizeChanged();
+   
+  	/**
+	* HandleResourceChange()
+	* Handles a change to the control's resources.
+	*/
+	void HandleResourceChange(TInt aType);
+    
+private: //Methods
+
+
+	// from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect) const;
+
+public: //Methods
+
+    /**
+     * 
+     * Sets items to the listbox.
+     */
+    void PopulateStationListL();
+    
+    /**
+    * CreateDiscoverStationDataL(TInt aTitle,TInt aDescription)
+    * Fetches the data from stringloader that should be displayed
+    * and sets it to the listbox.
+    */
+    void CreateDiscoverStationDataL(TInt aTitle,TInt aDescription);
+
+private:    // Data
+    
+    
+    /**
+     * List box used to display the list of items.
+     * Owned.
+     */
+     CDesCArray* iItemArray;
+     
+    /**
+    * iStationDirView
+    * reference of the stations directory view
+    */
+    CIRStationDirectoryView &iStationDirView;
+    
+    /**
+    * iListbox
+    * Data for the StationDirectory Listbox
+    */
+    CAknDoubleStyleListBox* iListbox;
+   
+};
+
+#endif /*CIRSTATIONDIRECTORYCONTAINER_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationdirectoryview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRStationsDirectoryView
+*
+*/
+
+
+#ifndef C_CIRSTATIONDIRECTORYVIEW_H
+#define C_CIRSTATIONDIRECTORYVIEW_H
+
+
+
+#include "irbaseview.h"
+#include "MViewsResponseAndErrorObserver.h"
+#include "IRActiveNetworkObserver.h"
+
+class CIRStationDirectoryContainer;
+class MIRActiveNetworkObserver;
+
+class CIRStationDirectoryView : public CIRBaseView ,
+								public MViewsResponseAndErrorObserver,
+								public MIRActiveNetworkObserver
+{
+public:
+
+	//ENums to indicate the currently selected item in the listbox.
+	enum TCurrentSelectedItem
+		{
+		EGenreData=0,
+		ELanguageData,
+		ECountryData,
+		ETopStationData
+		};
+	
+    /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRStationDirectoryView* NewL();
+
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+	static CIRStationDirectoryView* NewLC();
+
+	/**
+	* ~CIRStationDirectoryView()
+	* Destructor 
+	*/
+	~CIRStationDirectoryView();
+
+	// from base class CIRBaseView    
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+	TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+
+	/**
+	* DoCategoryRequestL()
+	* Issues a request ti Isds for the Stations
+	*/
+	void DoCategoryRequestL();
+	
+	/**
+	* ResponseL()
+	* Activates the Category view after getting the IsdsResponse
+	*/
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+	
+	/**
+	* ErrorL()
+	* Handles the errors from Isds
+	*/
+	void ErrorL();
+	
+	/**
+	* PresetResponseL
+	* Issues a listen request
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+	
+	/**
+	* DynInitMenuPaneL
+	* Dynamically initialises a menu pane
+	*/
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+	
+	/**
+	* ActivateCategoryViewL
+	* Activates the Stations view
+	*/
+	void ActivateCategoryViewL();
+	/*
+	* RefreshView()
+	* Refreshes the view when layout changes.
+	*/
+	void RefreshView();
+protected:  
+
+	// from base class CIRBaseView
+
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+    			 const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+    void DoDeactivate( );
+    
+    /**
+     * From CAknView
+     */
+    void HandleStatusPaneSizeChange();  
+    
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+    void HandleForegroundEventL( TBool aForeground );
+ 	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+    
+private:
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+    
+    /**
+     * C++ default constructor.
+     */
+    CIRStationDirectoryView();
+    
+public:
+			//from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+
+
+private:    
+    
+    /** 
+     * Container for this view. 
+     * Owned
+     */
+    CIRStationDirectoryContainer* iContainer;
+    
+	/**
+	* iLoadingCancelled
+	* Data whether loading has been cancelled
+	*/
+	TBool iLoadingCancelled;
+	
+	/*
+	 * iRequestIssued
+	 * Checks whether the request has been issued
+	 */
+	TBool iRequestIssued;
+	
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+
+};
+#endif /*C_CIRSTATIONDIRECTRORYVIEW_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationinfocontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRStationInfoContainer
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Thu Jul 3 16:30:00 2008 by Rohit
+*  Ref:
+*  Codescanner fixes
+*
+*  Version: 2, Thu May 22 19:20:00 2008 by Rohit
+*  Ref:
+*  Implemented StationInfo landscape view. Adjusted line spacings per UI spec.
+*
+*  Version: 1, Wed Apr 30 16:15:00 2008 by Rohit
+*  Ref:
+*  Created. Implemented StationInfo potrait view
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef CIRSTATIONINFOCONTAINER_H
+#define CIRSTATIONINFOCONTAINER_H
+
+//  INCLUDES
+#include <coecntrl.h>                       // CCoeControl
+#include <txtfrmat.h>                       // TCharFormat, TCharFormatMask
+#include <ImageConversion.h>
+
+#include "IRStationInfoView.h"
+#include "irimageconverterobserver.h"
+
+// FORWARD DECLARATIONS
+class CAknsBasicBackgroundControlContext;
+class CEikRichTextEditor;
+class CFbsBitmap;
+class CIRImageConverter;
+
+/**
+ * Container for Station information View.
+ */
+class CIRStationInfoContainer : public CCoeControl, public MIRImageConverterObserver
+{
+public:  // Constructors and destructor
+
+	static CIRStationInfoContainer* NewL( const TRect& aRect, CIRStationInfoView* aView );
+
+	/**
+	* Destructor.
+	*/
+	virtual ~CIRStationInfoContainer();
+
+public: // Functions from base classes
+
+	/**
+	* From CoeControl, returns the number of control contained by this class.
+	* @return Number of controls contained
+	*/
+	TInt CountComponentControls() const;
+
+	/**
+	* From CCoeControl, returns handle to control pointed by aIndex
+	* @param aIndex Wanted control's index [0..n]
+	* @return Handle to wanted control
+	*/
+	CCoeControl* ComponentControl( TInt aIndex ) const;
+
+	/**
+	* From CCoeControl, Handles key events
+	* @param aKeyEvent The key event
+	* @param aType The type of key event (key, key up or key down)
+	* @return Indicates whether or not the key event was used by this control.
+	*/
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+	/**
+     * MIRImageConverterObserver::HandleImageConversionEventL()
+     * @param   aEvent  The event that occurred.
+     * @param   aId     Identifier for the conversion.
+     * @param   aError  One of the standard system error codes.
+	 */
+	void HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
+									  TInt aId, TInt aError );
+
+	/**
+	* Issues logo scaling request
+	*/
+	void StartConvertStationLogoL();
+
+	/**
+	* Renders the logo and text in the view as per the current resolution
+	*/
+	void ReloadStationInformationL();
+
+protected: // Functions from base classes
+
+	/**
+	* From CCoeControl, used for skins
+	* @param aId An encapsulated object type id
+	* @return Pointer to the object provided.
+	*/
+	TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+
+	/**
+	* From CoeControl
+	* Called by the framework when container size changes
+	*/
+	void SizeChanged();
+
+	/**
+	* From CoeControl
+	* Handles a change to the control's resources
+	* @param aType A message UID value
+	*/
+	void HandleResourceChange( TInt aType );
+
+private:   // Functions
+
+	/**
+	* C++ default constructor.
+	*/
+	CIRStationInfoContainer( CIRStationInfoView* aView);
+
+	/**
+	* By default Symbian 2nd phase constructor is private.
+	*/
+	void ConstructL( const TRect& aRect );
+
+	/**
+	* Overridden from CCoeControl.
+	* @param aRect Rectangle which needs drawing
+	*/
+	void Draw( const TRect &aRect ) const;
+
+	/**
+	* Initializes the rich text with font, color, anti-aliasing
+	*/
+    void CreateRichTextDataL();
+
+	/**
+	* Instantiates RichTextEditor
+	* @return Initialized RichTextEditor
+	*/
+	CEikRichTextEditor* CreateEditorL();
+
+	/**
+	* Renders the logo in the view as per the current resolution
+	* @param aEditor 		RichTextEditor ref
+	* @param aIsLandscape	True if orientation is landscape, else False
+	*/
+	void DisplayStationLogoL( CEikRichTextEditor* aEditor, TBool aIsLandscape = EFalse);
+
+	/**
+	* Reads station info from preset and renders the text in the view
+	* @param aIsLandscape	True if orientation is landscape, else False
+	*/
+	void DisplayStationInfoL( TBool aIsLandscape = EFalse );
+
+	/**
+	* @return true if station logo available, else false.
+	*/
+	TBool IsStationSupportsLogo();
+
+
+	/**
+	* @return true if station is from ISDS, false if user-defined.
+	*/
+	TBool IsISDSStation();
+
+private:    // Data
+
+	// Skin background context.
+	CAknsBasicBackgroundControlContext* iBgContext;
+
+	// RichTextEditor to show logo in landscape orientation
+	CEikRichTextEditor* iEditorLogo;
+	
+	// RichTextEditor to show logo/text in potrait orientation, 
+	// text in landscape orientation
+	CEikRichTextEditor* iEditor;
+
+    // the scaled bitmap
+	CFbsBitmap* iBitmap;
+
+    // the scaled bitmap mask
+	CFbsBitmap* iBitmapMask;
+
+	// view reference
+	CIRStationInfoView *iStationInfoView;
+
+	// API wrapper to convert and scale image
+	CIRImageConverter* iConverter;
+
+	// parent rect
+	TRect	iClientRect;
+	
+	// Set When Any error during Image Conversion
+	TInt iError;
+
+	TBool iImageDrawn;
+
+    };
+
+#endif      // EVEDETAILCONTAINER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationinfopicture.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRSTATIONINFOPICTURE_H_
+#define IRSTATIONINFOPICTURE_H_
+
+#include <gdi.h>
+
+class CWindowGc;
+class TSize;
+class CFbsBitmap;
+
+
+class CIRStationInfoPicture : public CPicture
+{
+	public:
+
+	    CIRStationInfoPicture(CWindowGc& gc,CFbsBitmap& aBitmap,CFbsBitmap& aBitmapMask);
+
+		void Draw( CGraphicsContext& aGc, const TPoint& aTopLeft, 
+				   const TRect& aClipRect, MGraphicsDeviceMap* aMap ) const;
+		void ExternalizeL( RWriteStream& aStream ) const;
+		void GetOriginalSizeInTwips( TSize& aSize ) const;
+	protected:
+		TSize iSizeInTwips;
+	 	CFbsBitmap* iBitmap;
+	 	CFbsBitmap* iBitmapMask;
+};	
+
+
+#endif /*IRSTATIONINFOPICTURE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationinfoview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRStationInfoView
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Thu Jul 3 16:30:00 2008 by Rohit
+*  Ref:
+*  Codescanner fixes
+*
+*  Version: 1, Wed Apr 30 16:15:00 2008 by Rohit
+*  Ref:
+*  Created. Implemented StationInfo potrait view
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef CIRSTATIONINFOVIEW_H
+#define CIRSTATIONINFOVIEW_H
+
+#include <AknProgressDialog.h>
+#include <aknview.h>
+
+#include "irbaseview.h"
+#include "MLogoDownloadObserver.h"
+
+class CIRStationInfoContainer;
+class CIRIsdsPreset;
+class CIRPreset;
+class CAknWaitDialog;
+
+/**
+ * Channel List View, displays a list of preset FM / visual radio channels.
+ */
+class CIRStationInfoView : public CIRBaseView,
+						   public MLogoDownloadObserver
+    {
+
+public:
+
+    /**
+     * Static constructor.
+     */
+    static CIRStationInfoView* NewLC(const TRect& aRect);
+
+    /**
+     * Destructor.
+     */
+    ~CIRStationInfoView();
+
+    static CIRStationInfoView* NewL(const TRect& aRect);
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+
+
+	/**
+	 * From MLogoDownloadObserver
+	 *
+	 * Invoked after requested logo is downloaded
+	 */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+
+	/**
+	 * From MLogoDownloadObserver
+	 *
+	 * Invoked if an error has occured while logo is downloading or no logo data available
+	 */
+	void PresetLogoDownloadError(CIRIsdsPreset* aPreset);
+
+	/**
+	* SetStationPresetL
+	* Copies the given preset to member iStationPreset for display
+	* @param aPreset Station Preset given by invoking view
+	*/
+	void SetStationPresetL( CIRIsdsPreset* aPreset );
+
+	/**
+	* SetStationPresetL
+	* Copies the given preset to member iStationPreset for display
+	* @param aPreset Station Preset given by invoking view
+	*/
+	void SetStationPresetL( CIRPreset* aPreset );
+
+	/**
+	* GetStationPresetL
+	* 
+	* 
+	*/
+	CIRIsdsPreset* GetStationPresetL( );
+
+protected:
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId,
+     *    TUid aCustomMessageId,
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+                      TUid /*aCustomMessageId*/,
+                      const TDesC8& /*aCustomMessage */);
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleStatusPaneSizeChange()
+	 */
+	void HandleStatusPaneSizeChange();
+
+private:
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL(const TRect& /*aRect*/);
+
+	/**
+     * C++ default constructor.
+     */
+    CIRStationInfoView();
+
+private:    // Data
+
+	/**
+	 * Container for this view.
+	 */
+	CIRStationInfoContainer* iContainer;
+
+public:
+	/**
+	 * Station Preset to display Station Info
+	 */
+	CIRIsdsPreset* iStationPreset;
+
+    };
+
+#endif      // CIRStationInfoView_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,332 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRStationsView
+*
+*/
+
+
+#ifndef CIRSTATIONSVIEW_H
+#define CIRSTATIONSVIEW_H
+
+#include "irbaseview.h"
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+#include "MViewsResponseAndErrorObserver.h"
+#include "MLogoDownloadObserver.h"
+
+class CIRStationsViewContainer;
+class MLogoDownloadObserver;
+class MIRActiveNetworkObserver;
+
+/**
+ * SearchResults View
+ */
+class CIRStationsView : public CIRBaseView,
+						public MAknToolbarObserver,
+						public MViewsResponseAndErrorObserver,
+						public MLogoDownloadObserver,
+						public MIRActiveNetworkObserver
+    {
+    
+public: //Methods
+
+    /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRStationsView* NewL();
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRStationsView* NewLC();
+    
+    /**
+     *~CIRStationsView()
+     * Destructor.
+     */
+    ~CIRStationsView();
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+	
+	/**
+	 * void SetStatusPaneTextL()
+	 * Sets the title pane of the search results view
+	 */
+	void SetStatusPaneTextL() const;
+	
+	/**
+	* DynInitMenuPaneL
+	* Dynamically initialises a menu pane
+	*/
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+	
+	/**
+	* ListenChannelL()
+	* Issues a listen request
+	*/
+	virtual void ListenChannelL(TInt aCurrentIndex);
+	
+    void OfferToolbarEventL(TInt aCommand );
+    
+    /**
+    * ConstructToolbarL()
+    * Constructs a touch toolbar
+    */         
+   	virtual void ConstructToolbarL();
+   	
+   	
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+   	void HandleForegroundEventL( TBool aForeground );
+
+    /**
+     * From CAknView
+     */
+	void HandleStatusPaneSizeChange();
+
+
+	/**
+	* void CIRCategoryView::ResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void ResponseL( CIRIsdsPreset* aPreset = NULL );
+
+	/**
+	* ErrorL()
+	* Handles the errors from Isds
+	*/
+	void ErrorL();
+	
+	/**
+	* PresetResponseL
+	* Issues a listen request
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+
+	/**
+	* AddToFavouritesL()
+	* Issues a request for adding to favourites
+	*/
+	virtual void AddToFavouritesL(TInt aCurrentIndex,TInt aCommand);
+
+	/**
+	* DisplayStationInformationL()
+	* Issues a request for Station Info view
+	*/
+	virtual void DisplayStationInformationL(TInt aCurrentIndex,TInt aCommand);
+	
+	/**
+    * PresetLogoDownloadedL()
+    * CallBack Function Returning the Preset With Logo
+    */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+	
+	/**
+    * PresetLogoDownloadError()
+    * CallBack Function Returning the Preset With no Logo/error while downloading logo
+    */
+	void PresetLogoDownloadError(CIRIsdsPreset* aPreset);
+	
+	/**
+	* LogoRequestL()
+	* Called by the container of this view
+	*/
+	void LogoRequestL();
+	/**
+	* LogoRequestL()
+	* Called by the container of this view
+	*/
+	void AdRequestL();
+	
+
+	/**
+	* GetFilteredIndex()
+	* Returns the filtered Index
+	*/
+	virtual	TInt GetFilteredIndex();
+	
+	/**
+	* SetLoadingCancelled
+	* Sets iLoadingCancelled to aValue
+	*/
+	void SetLoadingCancelled(TBool aValue);
+	
+	/**
+	* SetActualFilteredItemIndex()
+	* sets the original index of the filtered item
+	*/
+	void SetActualFilteredItemIndex(TInt aIndex);
+	
+	/**
+	* GetActualFilteredItemIndex
+	* Gets the actual index of the station
+	*/
+	TInt GetActualFilteredItemIndex();
+	/*
+	 * GetStationsViewActualIndex()
+	 * returns the actual index
+	 */
+	TInt GetStationsViewActualIndex();	
+	/*
+	 * GetFirstLaunchFlag()
+	 * returns the whether the view is launching for the first time/
+	 * coming back from that has been activated from this view
+	 */
+	virtual TBool GetFirstLaunchFlag() ;
+	/*
+	* SetToolbarItems
+	* Sets the  touch tool bar items
+	*/
+   virtual void SetToolbarItems();
+   
+	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+    
+    //from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+   	 virtual void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+   	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+protected:  //Methods
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+    			 const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	
+public: //Methods
+
+    /**
+     * ConstructL()
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+	/**
+     * CIRStationsView()
+     * C++ default constructor.
+     */
+    CIRStationsView();
+    
+private:
+	
+   /*
+	* iLoadingCancelled
+	* Data whether loading has been cancelled
+	*/
+	TBool iLoadingCancelled;
+
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	
+    /* iListenRequest
+	 * Checks whether request is for listen
+	 */
+	TBool iListenRequest;
+  
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	TBool iToolbarVisible;
+	TBool iCommandState;
+
+	TInt iIndex;
+	TInt iFilteredIndex;
+
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+
+	TBool iFirstTimeLaunchFlag;
+	
+	/**
+	* iAddToFav
+	* Boolean value to determine if AddToFavorites was issued.
+	*/
+	TBool iAddToFav;
+	
+	
+	/**
+	* iStationDetails
+	* Boolean value to determine if StationDetails request was issued.
+	*/
+	TBool iStationDetails;
+
+public:
+	/** 
+	 * iContainer
+	 * Container for this view. 
+	 */
+	CIRStationsViewContainer* iContainer;
+
+	
+	
+	/**
+	 * iResultsReqMade
+	 * boolean value to know whether the results(topstations/list of channels)
+	 * request has made to isds or not
+	 */
+	TBool iResultsReqMade;
+    };
+
+#endif      // CIRSTATIONSVIEW_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irstationsviewcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRStationsViewContainer
+*
+*/
+
+
+#ifndef CIRSTATIONSVIEWCONTAINER_H
+#define CIRSTATIONSVIEWCONTAINER_H
+
+#include <aknlists.h>
+#include <EIKLBX.H>
+#include <aknsfld.h> 
+#include <eikclb.h> 
+
+#include "irimageconverterobserver.h"
+
+class CIRStationsView;
+class CIRStationsViewContainer;
+class CAknIconArray;
+class CIRImageConverter;
+/**
+ * This classes are used for Advertisements
+ */
+class CIRFilteredModel;
+class MIRListBoxArray;
+class CIRAdvertisingListBox;
+/**
+ * Container for Search Results View.
+ */
+class CIRStationsViewContainer : public CCoeControl/*public CAknDoubleStyleListBox*/ , public MEikListBoxObserver,
+                            public MIRImageConverterObserver
+    {
+    
+public:  // Methods
+
+    
+    /**
+    * NewL.
+    * Two-phased constructor.
+    * Create a CIRStationsViewContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aView The Stations/TopStations view's instance.
+    * @return a pointer to the created instance of CIRStationsViewContainer.
+    */
+    static CIRStationsViewContainer* NewL( CIRStationsView& aView, const TRect& aRect );
+
+    /**
+    * NewLC.
+    * Two-phased constructor.
+    * Create a CIRStationsViewContainer object, which will draw itself to aRect
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aView The Stations/TopStations view's instance.
+    * @return a pointer to the created instance of CIRStationsViewContainer.
+    */
+    static CIRStationsViewContainer* NewLC( CIRStationsView& aView, const TRect& aRect );
+    /**
+     * ConstructL
+     * 2nd phase constructor.
+     */
+     void ConstructL( const TRect& aRect);
+    
+	/**
+     * CIRStationsViewContainer()
+     * C++ default constructor.
+	 * @param aView View of this container.
+     */
+    CIRStationsViewContainer(CIRStationsView& aView);
+    
+    /**
+     * ~CIRStationsViewContainer()
+     * Destructor.
+     */
+    ~CIRStationsViewContainer();
+
+	/**
+     * UpdateSearchResultsViewL()
+     * updates the search results data to the search results list
+     */
+ 	void UpdateStationsViewL();
+ 	
+	/**
+	* HandleLogoErrorL()
+	* called from the iStationsView when the logo is not downloaded
+	*/
+	void HandleLogoErrorL();
+
+ 	
+	// from base class CCoeControl
+
+     /**
+	 * From CCoeControl
+	 * @see CCoeControl::OfferKeyEventL() 
+	 */    
+	
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+    /**
+     * From MEikListBoxObserver HandleListBoxEventL
+     */ 
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+    
+	
+
+	/**
+	 * From CCoeControl
+	 *
+	 * @see CCoeControl::GetHelpContext( TCoeHelpContext& aContext ) const
+	 */
+	void GetHelpContext( TCoeHelpContext& aContext ) const;
+	
+	/**
+	 * GetCurrentItemIndex()
+	 * returns the index of the currently selected item
+	 */ 
+	TInt GetCurrentItemIndex() const;
+	
+	/**
+	 * GetListBoxTopIndex()
+	 * returns the index of the top item
+	 */ 
+	TInt GetListBoxTopIndex() const;
+
+	/**
+	* CountComponentControls() const
+	* returns the number of components in the view.
+	*/
+	TInt CountComponentControls() const;
+	
+	/**
+	* ComponentControl()
+	* returns the pointer to the control
+	*/
+	CCoeControl* ComponentControl(TInt aIndex) const ;
+
+	/**
+	* SizeChanged()
+	* Responds to changes to the size and position of the contents of this control.
+	*/
+	void SizeChanged();
+	
+	/**
+	* HandleResourceChange()
+	* Handles a change to the control's resources.
+	*/
+	void HandleResourceChange(TInt aType);
+	/*
+	* CreateFindBoxL()
+	* Creates the find box for dynamic filtering
+	*/
+	CAknSearchField* CreateFindBoxL(CEikListBox* aListBox,
+	CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle);
+	/*
+	* DisableFindBox()
+	* disable the listbox when foxus is not present
+	*/
+	void DisableFindBox();
+	
+	/**
+	* Function : Comparestrings
+	* Function called to get the actual index of the station
+	*/
+ 	void  Comparestrings();
+ 	
+ 	/**
+ 	* HandleImageConversionEventL()
+ 	* from base class MIRImageConverterObserver
+ 	*/
+	void HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent,
+						 TInt aId, TInt aError );
+ 	/**
+ 	* PresetLogoDownloadL()
+ 	* Used to download the  logos depending the preset values.
+ 	*/
+ 	void PresetLogoDownloadL(CIRIsdsPreset* aPreset);	
+ 	/**
+ 	* CreateCustomListBoxL()
+ 	* Creates the custom listbox and updates the list according to that
+ 	*/
+	void CreateCustomListBoxL();
+ 	/**
+ 	* CreateListBoxL()
+ 	* Creates ListBox depending upon the presence of Advertisement
+ 	*/
+	void CreateListBoxL();
+ 	/**
+ 	* OpenUrlL()
+ 	* Used to connect to advertisement url
+ 	*/
+	void OpenUrlL( const TDesC& aHttpLink );
+	/**
+	* GetLogoNotSupported()
+	* returns whether the advertisement is supported by the sdk r not
+	*/
+	TBool GetLogoNotSupported();
+    /**
+     * Creates default (empty) icon
+     * 
+     * @return  Default icon
+     */
+    CGulIcon* CreateDefaultIconL();
+ 	/*
+ 	 * GetFilterdModelPointer()
+	 * returns pointer to filtered model.
+	 */
+ 	CIRFilteredModel* GetFilterdModelPointer();
+ 	/*
+ 	 * GetSearchBoxPointer()
+	 * returns the search box pointer.
+	 */
+ 	CAknSearchField* GetSearchBoxPointer();
+private: //Methods
+
+
+	// from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+	 */
+	void Draw( const TRect& aRect ) const;
+	/**
+	* StartConvertL()
+	* used to convert the images depending the index passed
+	* 
+	*/
+	void StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt aId );	
+    /**
+    * Formats list item string with given arguments
+    * 
+    * @param aFirstRow text for first row
+    * @param aSecondRow text for second row
+    * @param aIconId Icon ID used on item
+    */
+    HBufC* FormatItemStringLC( const TDesC& aFirstRow,  TInt aIconId );
+	/*
+	* iFilteredFlag
+	* This flag is set when dynamic filtering is done and
+	* will be reseted when the characters in the filter box is deleted
+	*/
+	TBool iFilteredFlag;
+
+private:	 
+	 /**
+	 * iItemArray
+	 * array for the listbox model
+	 */ 
+	 CDesCArray* iItemArray;
+	 /**
+	 * iView
+	 * Data for CIRStationsView view
+	 */ 
+	 CIRStationsView& iView;
+	
+	/*
+	* iCurrentItemConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iCurrentItemConverter;
+
+	/**
+    * boolean for forcibly getting the logo from cache
+    */
+	TBool   iForceGet;
+	
+	/**
+    * response from the cache for the availability of logo(CacheNotValid,NotCached,CacheUseable)
+    */
+	TInt 	iResult;
+	
+	/**
+	* to keep track of the icon array index
+	*/
+	TInt iIconIndex;
+	
+	
+	/**
+	* to keep track of the logo url index(for temporary)
+	*/
+	TInt iLogoIndex;
+	
+	/*
+	* iInvalidIconIndices
+	* instance of RArray
+	*/
+	RArray<TInt> iInvalidIconIndices;
+	
+	/*
+	* iLogosArray
+	* instance of RArray
+	*/
+	RArray<TInt> iLogosArray;
+
+	/*
+	* iNoLogosArray
+	* instance of RArray
+	*/
+	RArray<TInt> iNoLogosArray;
+	
+	
+	CFbsBitmap*     iAdBitmap;
+    /**
+    * iAdRequestStatusFlag
+    * sets when a request for advertisement is made.
+    */
+	TBool iAdRequestStatusFlag;
+    /*
+	* iConverter
+	* instance of CIRImageConverter
+	*/
+	CIRImageConverter* iConverter;
+
+	/*
+	* iFilteredModel
+	* Instance for CIRFilteredModel
+	*/ 
+	CIRFilteredModel* iFilteredModel;
+	/*
+	* iAdPresent
+    * returns whether the advetisment is present or not
+	*/
+    TBool iAdPresent;
+    /*
+    * iBgContext
+    * Instance of CAknsBasicBackgroundControlContext
+    */
+    CAknsBasicBackgroundControlContext* iBgContext;
+    /*
+    * iAdvString
+    * sets the advertisement string
+    */
+    HBufC* iAdvString;
+    /*
+    * iListBoxArray
+    * Instance of MIRListBoxArray
+    */
+   	MIRListBoxArray* iListBoxArray;
+   	/*
+   	* iRequestForAdvertisement
+   	* sets when the request for advertisment conversation is made
+   	*/
+	TBool iRequestForAdvertisement;
+   	/*
+   	* iLogoDownloadError
+   	* sets when the  advertisment future is not supported
+   	*/
+	TBool iLogoDownloadError;
+   	/*
+   	* iLandScapeCount
+   	* used to call the aknfind s HandlePopupFindSizeChanged function only once
+   	*/
+	TInt iLandScapeCount;
+	 
+	/*
+	* iSearchTextBox
+	* Instance for CAknSearchField;
+	*/
+	CAknSearchField* 			iStationsSearchBox;	
+public:
+	 
+	 /**
+	 * iStationsListBox
+	 * Instance of the Stations ListBox
+	 */
+ 	CIRAdvertisingListBox* iStationsListBox;
+	/**
+	* Temporary preset to store url and the logo data
+	*/
+	CIRIsdsPreset *iTempPreset;	 
+  	/*
+	* iFindString
+	* Used to Get the Entered Search string
+	*/
+	TBuf<KSearchBoxTextLength> iFindString;
+	/**
+	* Temporary preset to store the raw data of Advertisements
+	*/
+	CIRIsdsPreset*  iAdvPreset;
+	TInt iError;
+   };
+
+#endif      // CIRSTATIONSVIEWCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsystemeventcollector.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2006-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:  Declaration of CIRSystemEventCollector
+*
+*/
+
+
+#ifndef CIRSYSTEMEVENTCOLLECTOR_H
+#define CIRSYSTEMEVENTCOLLECTOR_H
+
+
+
+#include <e32base.h>
+
+#include "iraudioroutingobserver.h"
+#include "irdiskspacewatcherobserver.h"
+#include "irheadseteventobserver.h"
+#include "irsystemeventdetectorobserver.h"
+#include "irsystemeventobserver.h"
+
+class CIRAccessoryObserver;
+class CIRDiskSpaceWatcher;
+class CIRSystemEventDetector;
+
+/**
+ *  Collects system events and forwards them to observers
+ *  Class also wraps up the getters for some system states
+ *
+ *  @lib vrsystemutils.lib
+ */
+NONSHARABLE_CLASS(CIRSystemEventCollector) : 
+    public CBase,
+    public MIRAudioRoutingObserver,
+    public MIRDiskSpaceWatcherObserver, 
+    public MIRHeadsetEventObserver,
+    public MIRSystemEventDetectorObserver
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    IMPORT_C static CIRSystemEventCollector* NewL();
+    
+    /**
+     * Destructor
+     */
+    ~CIRSystemEventCollector();
+    
+    /**
+     * Adds a system event observer
+     *
+     * @param aSystemObserver The observer to be added
+     */
+    IMPORT_C void AddObserverL( MIRSystemEventObserver* aSystemObserver );
+    
+    /**
+    * Removes a system event observer
+    *
+    * @param aSystemObserver The observer to be removed
+    */
+    IMPORT_C void RemoveObserver( MIRSystemEventObserver* aSystemObserver );
+
+    /**
+    * Returns data network coverage state (wlan or mobile).
+    *
+    * @return ETrue if there is network coverage
+    */
+    IMPORT_C TBool IsNetworkCoverage() const;
+
+    /**
+    * Returns mobile network coverage state.
+    *
+    * @return ETrue if there is network coverage
+    */
+    IMPORT_C TBool IsMobileNetworkCoverage() const;
+
+    /**
+    * Returns current call state.
+    *
+    * @return ETrue if call is active
+    */
+    IMPORT_C TBool IsCallActive() const;
+
+    /**
+    * Returns current audio resources state.
+    *
+    * @return ETrue if audio resources are available
+    */
+    IMPORT_C TBool IsAudioResourcesAvailable() const;
+    
+    /**
+     * Returns current headset connection status
+     *
+     * @return 
+     */
+    IMPORT_C TBool IsHeadsetConnected() const;
+    
+    /**
+     * Returns the state of disk space
+     */
+    IMPORT_C TBool IsDiskSpaceBelowCriticalLevel() const;
+    
+    /**
+	 * Returns current Voice UI state.
+	 *
+	 * @return ETrue if Voice UI is active, EFalse otherwise
+	 */
+	IMPORT_C TBool IsVoiceUiActive() const;
+
+private:
+
+    CIRSystemEventCollector();
+
+    void ConstructL();    
+    
+    void NotifyObserversL(TIRSystemEventType aEvent);
+
+// from base class MIRSystemEventDetectorObserver
+    void NetworkUpCallbackL();
+    void NetworkDownCallbackL();
+    void CallActivatedCallbackL();
+    void CallDeactivatedCallbackL();
+    void AudioResourcesAvailableL();
+    void AudioAutoResumeForbiddenL();
+    void ErrorCallbackL(TInt aError);
+    
+// from base class MIRHeadsetEventObserver 
+    void HeadsetConnectedCallbackL();
+    void HeadsetDisconnectedCallbackL();
+    
+// from base class MIRDiskSpaceWatcherObserver    
+    void NotifyLowDiskSpaceL();
+
+// from base class MIRAudioRoutingObserver  
+    void AudioRoutingChangedL(TVROutputDestination aOutputDestination);
+
+private: // data
+
+    /** 
+     * Array of system event observers
+     */
+    RPointerArray<MIRSystemEventObserver> iSystemEventObservers;
+
+    /** 
+     * Detects system events
+     */
+    CIRSystemEventDetector* iSystemEventDetector;
+
+    /** 
+     * Detects low disk space 
+     */
+    CIRDiskSpaceWatcher* iDiskSpaceWatcher;
+	
+    /** 
+     * Observer for accessory events 
+     */
+    CIRAccessoryObserver* iHeadsetObserver;
+    };
+
+#endif // CIRSYSTEMEVENTCOLLECTOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsystemeventdetector.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2004-2008 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 CIRSystemEventDetector.
+*
+*/
+
+
+#ifndef IRSYSTEMEVENTDETECTOR_H
+#define IRSYSTEMEVENTDETECTOR_H
+
+#include <e32base.h>
+
+#include "irpropertyobserver2.h"
+
+class MIRSystemEventDetectorObserver;
+
+/**
+* Catches notification of the call and network state changes.
+*
+* Class provides implementation to detect system events and notify UI components of the event,
+* Class keeps several instances of CVPropertyObserver, and those instances send event notifications 
+* about the particular system component state change. 
+*/
+NONSHARABLE_CLASS( CIRSystemEventDetector ) : public CBase, public MIRPropertyChangeObserver2
+    {
+    public:
+
+        /**
+        * Two-phased constructor.
+        * @param aObserver a reference to the observer interface implementer
+        */
+        static CIRSystemEventDetector* NewL(MIRSystemEventDetectorObserver&  aObserver);
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CIRSystemEventDetector();
+
+		/**
+		* Returns network coverage state (wlan or mobile).
+		*/
+		TBool IsNetworkCoverage() const;
+
+		/**
+		* Returns mobile network coverage state.
+		*/
+		TBool IsMobileNetworkCoverage() const;
+
+		/**
+		* Returns current call state.
+		*/
+		TBool IsCallActive() const;
+		
+		/**
+		* Returns current audio resources state.
+		* @return audio resources state 
+		*/
+		TBool IsAudioResourcesAvailable() const;
+		
+		/**
+		* Returns current Voice UI state.
+		* @return ETrue if Voice UI is active, EFalse otherwise
+		*/
+		TBool IsVoiceUiActive() const;
+
+    protected:
+    
+// from base class MIRPropertyChangeObserver2
+	    void HandlePropertyChangeL(const TUid& aCategory, const TUint aKey, const TInt aValue);
+	    void HandlePropertyChangeL(const TUid& aCategory, const TUint aKey, const TDesC8& aValue);
+	    void HandlePropertyChangeL(const TUid& aCategory, const TUint aKey, const TDesC& aValue);
+	    void HandlePropertyChangeErrorL(const TUid& aCategory, const TUint aKey, TInt aError);
+   
+    private:
+
+        /**
+        * By default EPOC constructor is private.
+        */
+        void ConstructL();
+        
+        /**
+        * Used internally to change network coverage status and report it to observer.
+        **/
+        void CIRSystemEventDetector::SetNetworkCoverageL( const TBool aIsMobileNetworkCoverage,
+        		 const TBool aIsWlanCoverage );
+
+        /**
+        * C++ default constructor.
+        * @param aObserver a reference to the observer interface implementer     
+        */
+        CIRSystemEventDetector(MIRSystemEventDetectorObserver&  aObserver);
+    
+	private:    // Data
+    
+        /**Observer which will be notified of the call and network state changes*/
+		MIRSystemEventDetectorObserver&  iObserver;
+	
+        /** handler to Publish & Subscribe interface*/        		
+        CIRPropertyObserver2*    iCallStatusObserver;
+        /** handler to Publish & Subscribe interface*/        		
+        CIRPropertyObserver2*    iNetworkStatusObserver;
+        /** handler to Publish & Subscribe interface*/        		
+        CIRPropertyObserver2*    iVoiceUiObserver;
+        /** handler to Publish & Subscribe interface*/        		
+        CIRPropertyObserver2*    iAudioPolicyObserver;
+        /** handler to Publish & Subscribe interface*/        		
+        CIRPropertyObserver2*    iWlanObserver;
+
+		/**Indicator for the mobile network status*/
+		TBool iIsMobileNetworkCoverage;
+
+		/**Indicator for the wlan network status*/
+		TBool iIsWlanCoverage;
+		
+		/**Indicator for the call status*/
+		TBool iIsCallActive;
+        
+        /** Array of audio policy categories that VR must not resume after. */
+        RArray<TInt> iNoAutoResumeAudioCategories;
+        
+        /** Indicator for audio resource status. */
+		TBool iIsAudioResourcesAvailable;
+		
+		/** Indicator for Voice UI status. */
+		TBool iIsVoiceUiActive;
+    };
+
+#endif   // IRSYSTEMEVENTDETECTOR_H   
+            
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsystemeventdetectorobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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: 
+*     Interface to observe system events.
+*     Implementer will be notified each time particular system component state has changed
+*     
+*
+*/
+/*
+* ============================================================================
+*  Name     : IRSystemEventDetectorObserver.h
+*  Part of  : 
+*  Origin   : 
+*  Created  : 
+*  Description:
+*     Interface to observe system events.
+*     Implementer will be notified each time particular system component state has changed
+*     
+*  Version  :
+*  ---------------------------------------------------------------------------
+
+/** @file IRSystemEventDetectorObserver.h */
+
+#ifndef MIRSYSTEMEVENTDETECTOROBSERVER_H
+#define MIRSYSTEMEVENTDETECTOROBSERVER_H
+
+// CLASS DECLARATION
+/**
+*  
+*  Observer for the call and network state. Implementer will be notified each time the state has changed
+*/
+class MIRSystemEventDetectorObserver 
+    {
+
+    public: // New functions
+
+		/**
+		* This callback notifies when networks comes up.
+		*/
+		virtual void NetworkUpCallbackL() = 0;
+
+		/**
+		* This callback notifies when network goes down.
+		*/
+		virtual void NetworkDownCallbackL() = 0;
+
+		/**
+		* This callback notifies when call becomes active.
+		*/
+		virtual void CallActivatedCallbackL() = 0;
+
+		/**
+		* This callback notifies when call becomes deactive.
+		*/
+		virtual void CallDeactivatedCallbackL() = 0;
+		
+		/**
+		* This callback notifies when audio resources become available.
+		*/
+		virtual void AudioResourcesAvailableL() = 0;
+		
+		/**
+		* This callback notifies when audio auto resuming is forbidden.
+		*/
+		virtual void AudioAutoResumeForbiddenL() = 0;
+		
+		/**
+		* This callback notifies when an error occured
+		* @param an error code  
+		*/
+		virtual void ErrorCallbackL(TInt aError) = 0;
+    };
+
+#endif      // MIRSYSTEMEVENTDETECTOROBSERVER_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irsystemeventobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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: 
+*     ?description_line
+*     ?description_line
+*     ?description_line
+*
+*/
+/*
+* ============================================================================
+*  Name     : IRSystemEventObserver.h
+*  Part of  : 
+*  Origin   : 
+*  Created  : 
+*  Description:
+*     ?description_line
+*     ?description_line
+*     ?description_line
+*  Version  :
+*  
+*  ---------------------------------------------------------------------------
+*  Version history:
+* ============================================================================
+*/
+/** @file IRSystemEventObserver.h */
+
+#ifndef IRSYSTEMEVENTOBSERVER_H
+#define IRSYSTEMEVENTOBSERVER_H
+
+
+//  INCLUDES
+
+// DATA TYPES
+
+/** Type of system event */
+enum TIRSystemEventType
+	{
+	EIRHeadsetConnected,		 ///< Headset was connected
+	EIRHeadsetDisconnected,		 ///< Headset was disconnected
+	EIRNetworkCoverageUp,		 ///< Network coverage detected
+	EIRNetworkCoverageDown,		 ///< Network coverage lost
+	EIRCallActivated,			 ///< Call activated or ringing
+	EIRCallDeactivated,			 ///< Call disconnected
+	EIRLowDiskSpace,			 ///< Low disk space
+	EIRAudioRoutingHeadset,		 ///< Audio routed through headset
+	EIRAudioRoutingSpeaker,		 ///< Audio routed through speaker (IHF)
+	EIRAudioResourcesAvailable,  ///< Audio resources have become available
+	EIRAudioAutoResumeForbidden  ///< Audio auto resuming is forbidden
+	};
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+* Observer for any system event state change.
+*/
+class MIRSystemEventObserver
+    {
+    public:  // Methods
+
+		/**
+		* Called when system event occurs.
+		* @param aEventType Type of the event
+		*/
+        virtual void HandleSystemEventL(TIRSystemEventType aEventType) = 0;
+
+    };
+
+#endif      // IRSYSTEMEVENTOBSERVER_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irtopstationsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2005-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:  Header for CIRTopStationsView
+*
+*/
+
+
+#ifndef CIRTOPSTATIONSVIEW_H
+#define CIRTOPSTATIONSVIEW_H
+
+#include "irbaseview.h"
+#include "irstationsview.h"
+#include <akntoolbarobserver.h>
+#include <aknbutton.h>
+
+
+class CIRStationsViewContainer;
+
+class MIRActiveNetworkObserver;
+
+
+/**
+ * SearchResults View
+ */
+class CIRTopStationsView : public CIRStationsView
+
+    {
+    
+public: //Methods
+
+    /**
+     * NewL()
+     * Static constructor.
+     */
+    static CIRTopStationsView* NewL();
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static CIRTopStationsView* NewLC();
+    
+    /**
+     *~CIRTopStationsView()
+     * Destructor.
+     */
+    ~CIRTopStationsView();
+
+    // from base class CAknView
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::Id() const
+	 */
+    TUid Id() const;
+
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL( TInt aCommand );
+	
+	/**
+	* DynInitMenuPaneL
+	* Dynamically initialises a menu pane
+	*/
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+	
+    void OfferToolbarEventL(TInt aCommand );
+                
+    /**
+    * ConstructToolbarL()
+    * Constructs a touch toolbar
+    */         
+   	void ConstructToolbarL();
+   	
+   	
+	/**
+	* ListenChannelL()
+	* Issues a listen request
+	*/
+	void ListenChannelL(TInt aCurrentIndex);
+
+    /**
+     * From CAknView
+     */
+	void HandleStatusPaneSizeChange();
+
+    /**
+     * From CAknView
+     *
+     * @see CAknView::HandleForegroundEventL( TBool aForeground )
+     */
+	void HandleForegroundEventL( TBool aForeground );
+
+	/**
+	* Called when the refresh dialog is dismissed.
+	* @param aButtonId The button that was used to dismiss the dialog.
+	*/
+	void DialogDismissedL( TInt aButtonId );
+
+	/**
+	* void CIRCategoryView::ResponseL()
+	* Activates the Stations view after getting the IsdsResponse
+	*/
+	void ResponseL(CIRIsdsPreset* aPreset = NULL );
+	
+	/**
+	* PresetResponseL
+	* Issues a listen request
+	*/
+	void PresetResponseL(CIRIsdsPreset* aPreset);
+
+	/**
+	* AddToFavouritesL()
+	* Issues a request for adding to favourites
+	*/
+	void AddToFavouritesL(TInt aCurrentIndex,TInt aCommand);
+	
+	/**
+	* ErrorL()
+	* Handles the errors from Isds
+	*/
+	void ErrorL();
+	
+	
+	/**
+    * PresetLogoDownloadedL()
+    * CallBack Function Returning the Preset With Logo
+    */
+	void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+	
+	/**
+    * PresetLogoDownloadError()
+    * CallBack Function Returning the Preset With no logo/error while downloading log
+    */
+	void PresetLogoDownloadError(CIRIsdsPreset* aPreset);
+	/*
+	* GetTopStationsActualIndex()
+	* returns the actual index of the element in the list
+	*/
+	TInt GetTopStationsActualIndex();	
+	
+	/**
+	* GetFilteredIndex()
+	* Returns the filtered Index
+	*/
+	TInt GetFilteredIndex();
+	/*
+	 * GetFirstLaunchFlag()
+	 * returns the whether the view is launching for the first time/
+	 * coming back from that has been activated from this view
+	 */
+	TBool GetFirstLaunchFlag() ;
+	/*
+	* SetToolbarItems
+	* Sets the  touch tool bar items
+	*/
+    void SetToolbarItems();
+    
+     //from MIRActiveNetworkObserver
+	/**
+	 * Notifies all observers whose network request is active
+	 * to reissue the request  
+	 * NotifyActiveNetworkObserversL()
+	 */	
+   	 void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+   	 
+	 /**
+	 * Notifies all observers whose network request is active
+	 * to reset the pending request status  
+	 * ResetPendingRequests()
+	 */	
+	 void ResetPendingRequests(TBool aValue);
+   	 
+   	 
+	// from base class MIRSystemEventObserver
+    void HandleSystemEventL( TIRSystemEventType aEventType );
+protected:  //Methods
+
+    // from base class CAknView
+    /**
+     * From CAknView
+     *
+     * @see CAknView::DoActivateL(const TVwsViewId& aPrevViewId, 
+     *    TUid aCustomMessageId, 
+     *    const TDesC8& aCustomMessage)
+     */
+    void DoActivateL( const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+    				const TDesC8& aCustomMessage );
+
+	/**
+     * From CAknView
+     *
+     * @see CAknView::DoDeactivate()
+     */
+	void DoDeactivate();
+
+	
+private: //Methods
+
+    /**
+     * ConstructL()
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+	/**
+     * CIRTopStationsView()
+     * C++ default constructor.
+     */
+    CIRTopStationsView();
+	
+	TInt iTopStationsFilteredIndex;
+	TBool iFirstTimeLaunchFlag;
+	/*
+	 * iRequestPending
+	 * Checks whether an active request is pending
+	 */
+	TBool iRequestPending;
+	
+	
+    /* iListenRequest
+	 * Checks whether request is for listen
+	 */
+	TBool iListenRequest;
+  	
+	
+	/**
+	* iAddToFav
+	* Boolean value to determine if AddToFavorites was issued.
+	*/
+	TBool iAddToFav;
+	/*
+	 * iCallRequestPending
+	 * Indicates whether delayed activation of command is required (Call Handling)
+	 */
+	TBool iCallRequestPending;
+	/*
+	 * iCommand
+	 * Command to be executed (view activation) after Preset downloads
+	 */
+	TInt iCommand;
+
+public:                
+	/**
+	 * iResultsReqMade
+	 * boolean value to know whether the results(topstations/list of channels)
+	 * request has made to isds or not
+	 */
+	TBool iResultsReqMade;
+    
+    };
+
+#endif      // CIRTOPSTATIONSVIEW_H
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irui.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1467 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 25, Tue Mar 19 18:00:00 2008 by Rohit
+*  Ref:
+*  Implemented change request to display Byte Counter in KB till 0.1 MB, and in MB threrafter
+*
+*  Version: 24, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi
+*  Ref:
+*  MIRCtrlCmdObserver::MCtrlCommand() function signature changed (Merged IRv1.0 Engine code changes)
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#ifndef IRUI_H
+#define IRUI_H
+
+#include <aknsitemdef.h>
+#include <aknviewappui.h>
+#include <remconcoreapitargetobserver.h>
+#include <aknindicatorcontainer.h>
+#include "internetradioconfigurationflags.hrh"
+
+#include <MProEngProfileActivationObserver.h>
+//For IAD
+#ifdef FF_IAUPDATE
+#include <iaupdateobserver.h>
+#endif
+
+//starting adding of ui code
+#include "irbat.h"
+#include "irctrlcommand.h"
+#include "irnetworkcontrollerobserver.h"
+#include "irpropertyobserver.h"
+#include "irsessionparams.h"
+#include "irstreamsourceobserver.h"
+#include "misdsresponseobserver.h"
+#include "IRdatatransferobserver.h"
+#include "irfirsttimeview.h"
+#include "irsettingsview.h"
+#include "irsystemeventobserver.h" //For system events
+#include "irpubsubkeys.h"
+#include "IRControlEventObserver.h"
+
+class CIRSettingsView;
+class CIRBaseView;
+class CIRCtrlCmdObserver;
+class CIRDiscoverStationsView;
+class CIRFavoritesDb;
+class CIRMediaClient;
+class CIRNetworkController;
+class CIRNowPlayingView;
+class CIRNwInfoObserver;
+class CIROTAUpdate;
+class CIRPubSub;
+class CIRReportGenerator;
+class CIRSettings;
+class CIRStreamSource;
+class CAlfEnv;
+class CIRAlarmObserver;
+class CIRMessageObserver;
+class CIRBrowseChannelItems;
+class CIRBrowseCatagoryItems;
+class CIRLastPlayedStationInfo;
+class CIconFileProvider;
+class CIRFirstTimeView;
+class CIRAddManuallyStationView;
+class CIRStationDirectoryView;
+class CIRCategoryView;
+class CIRSearchResultsView;
+class CIRStationsView;
+class CIRTopStationsView;
+class CIRPlsView;
+class CIRCostWarningView;
+class CIRMainView;
+class CIRDialogLauncher;
+class CAknWaitDialog;
+class CIRIsdsWrapper;
+class CIRNowPlayingWrapper;
+class CIRViewStack;
+class CIRSystemEventCollector; //For system events
+class CIRStationInfoView;
+class CIRHistoryListView;
+class CRemConInterfaceSelector;
+class CRemConCoreApiTarget;
+class MProEngNotifyHandler;
+//For IAD
+class CIAUpdate;
+class CIAUpdateParameters;
+class CIRControlEventObserver;
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+class CIRBackSteppingServiceWrapper;
+#endif // __IRA_FEATURE_BACKSTEPPING_SERVICE
+
+
+//Network Indicator
+_LIT(KGprs,"Gprs");
+_LIT(K3G,"3G");
+_LIT(KWiFi,"WiFi");
+_LIT(KEdge,"Edge");
+
+//CONSTANTS DECLARATION
+
+//Resolution
+const TInt KIRLowResolution = 176;
+const TInt KIRQVGAResolution = 240;
+const TInt KIRPotraitResolution = 320;
+//Ulr Validation
+const TInt KMaxBufSize = 256;
+const TInt KSmallBufSize = 32;
+const TInt KSearchStringChar = 100;
+const TInt KLoop = 3;
+const TInt KScrollAmount =20;
+const TInt KScrollDelay = 1000000;
+const TInt KInterval = 200000;
+
+//charging Animation time
+const TInt KChargingAnimTimer = 500000;
+
+//For help context
+#define KUIDIRAPP 0x2000B499
+const TUid KIRMCVUid = {KUIDIRAPP};
+
+//add for now can change later
+enum TIROverLayText
+    {
+    KIROverLayTextNotDefined = 0,
+    KIROverLayTextBuffering,
+    KIROverLayTextLoading,
+    KIROverLayTextSearching,
+    KIROverLayTextConnecting
+    };
+
+
+ enum TIRKeyboardKeys
+{
+   EIRKeyboardKey0 = 0x30,
+   EIRKeyboardKey1 = 0x31,
+   EIRKeyboardKey2 = 0x32,
+   EIRKeyboardKey3 = 0x33,
+   EIRKeyboardKey4 = 0x34,
+   EIRKeyboardKey5 = 0x35,
+   EIRKeyboardKey6 = 0x36,
+   EIRKeyboardKey7 = 0x37,
+   EIRKeyboardKey8 = 0x38,
+   EIRKeyboardKey9 = 0x39
+};
+
+
+const TInt KSearchBoxTextLength = 100;
+const TInt KFindStringLength = 10;
+
+
+//========================================class declaration CIRUi============================================
+
+
+
+
+/**
+ * This class Creates CIRUi.
+ * Controls the  entire Ui.
+ * It creates the instance's of all the views.
+ * Instantiates NetworkController,IsdsClient,IsdsPreset,MediaClient,FavouritesDb,IRPubSub
+ *
+ * @code
+ * Controls the user commands
+ * HandleCommandL()
+ *
+ * Handle window server events
+ * HandleWsEventL()
+ *
+ * Display the battery value
+ * DisplayBatteryValueL()
+ *
+ * Redraw the currently activated view
+ * ActivateCurrentView()
+ *
+ * Update the current network status
+ * UpdateCurrentNetwork()
+ *
+ * Connect to server
+ * iNetwork->ConnectToServerL(iUrl)
+ *
+ * Call back called when category data recieved
+ * IsdsCatogoryDataReceivedL()
+ *
+ * Call play
+ * iPlayer->Play()
+ *
+ * @endcode
+ *
+ */
+class MAknEditingStateIndicator
+	{
+public:
+
+	enum TAknEditingState
+		{
+		EStateNone,
+		ET9Upper,
+		ET9Lower,
+		ET9Shifted,
+		ENumeric,
+		EMultitapUpper,
+		EMultitapLower,
+		EMultitapShifted,
+		};
+
+public:
+	virtual void SetState(TAknEditingState aState) = 0;
+	virtual CAknIndicatorContainer *IndicatorContainer() = 0;
+	};
+
+class CIRUi :public CAknViewAppUi, public MIRNetworkController,
+			 public MCoeForegroundObserver,public MIRPropertyChangeObserver,
+			 public MIRDataTransferObserver,
+#ifdef FF_IAUPDATE
+ 			 public MIAUpdateObserver,
+#endif
+ 			 public MRemConCoreApiTargetObserver,public MProEngProfileActivationObserver,
+ 			 public MIRSystemEventObserver,
+ 			 public MCoeViewActivationObserver
+	{
+public:
+	/**
+	* ConstructL
+	* 2nd phase constructor.
+	* Perform the second phase construction of a
+	* CIRUi object.
+	*/
+	void ConstructL();
+
+	/**
+	* CIRCategoryView.
+	* C++ default constructor.
+	*/
+	CIRUi();
+
+	/**
+	* ~CIRCategoryView
+	* Destructor.
+	*/
+	~CIRUi();
+
+	/**
+	* GetWrapperInstance()
+	* Returns the instance of the IsdsWrapper object
+	*/
+
+	CIRIsdsWrapper* GetWrapperInstance();
+	/**
+	* HandleCommandL()
+	* Handles the user input commands.
+	* @param input command
+	*/
+
+	/**
+	* GetNowPlayingWrapperInstance()
+	* Returns the instance of the CIRNowPlayingWrapper object
+	*/
+	CIRNowPlayingWrapper* GetNowPlayingWrapperInstance();
+	/**
+	 * From CAknView
+	 *
+	 * @see CAknView::HandleCommandL( TInt aCommand )
+	 */
+	void HandleCommandL(TInt aCommand);
+
+	/**
+	* IRHandleCommandL()
+	* Saves the index of the selected item from the listbox.
+	* @param currently selected item index.
+	* @param user command
+	*/
+	void IRHandleCommandL(TInt aIndex,TInt aCommand);
+
+	/**
+	* SavePrevIDL()
+	* Saves the previousID of the view.
+	* @param previousID of the view.
+	* @param user command.
+	*/
+	void SavePrevIDL(const TUid& aPrevID,TInt aCommand);
+
+	/**
+	* HandleStatusPaneSizeChange()
+	* Called by framework whenever the resource is changed.
+	*/
+	void HandleStatusPaneSizeChange();
+
+	/**
+	* HandleWsEventL()
+	* Called by framework on an window server event.
+	* @param window server event
+	*/
+	void HandleWsEventL( const TWsEvent& aEvent,CCoeControl* aDestination );
+
+	/**
+	* HandleKeyEventL()
+	* Called by framework on an window server event.
+	* @param window server event
+	*/
+	TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+	/**
+	* IconProvider()
+	* @return the instance of icon provider..
+	*/
+	CIconFileProvider* IconProvider();
+
+	/**
+	* GetMifFilePath().
+	* @return the full path of mif file.
+	*/
+	TFileName GetMifFilePath() const;
+
+	/**
+	* GetPrivatePath().
+	* Returns the full path of the file.
+	* @return filepath
+	*/
+	TFileName GetPrivatePath()const;
+	/**
+	* ActivateCurrentView().
+	* Redraws the currently active view.
+	* @param Uid of the currently active view.
+	*/
+	void ActivateCurrentView(const TUid& aUid) const;
+
+	/**
+	* VerifyNetworkConnectivityL()
+	* verify whether the network is connected or not
+	* This function can leave if displaying of info note leaves hence
+	* this leave can be ignored
+	* @param    aObserver     The delayed action observer to receive the event when network connection is established.
+	* @return the bool that informs the network connectivity status.
+	*/
+	TBool VerifyNetworkConnectivityL();
+
+	/**
+	* HandleGainingForeground()
+	* This is call back function which observes application focus gaining
+	* foreground
+	*/
+	void HandleGainingForeground();
+
+	/**
+	* HandleLosingForeground()
+	* Function handles when application looses foreground focus
+	*/
+	void HandleLosingForeground();
+	/**
+	 * LosingForeground
+	 * Function handles when application looses foreground focus
+	 */
+	void LosingForeground();
+
+
+	/**
+	* ViewStack()
+	* Returns pointer to the view stack.
+	* @return   Pointer to view stack.
+	*/
+	CIRViewStack& ViewStack();
+
+	/**
+	* ForwardBackCommandToBsWrapperL()
+	* Forwards back command to Back Stepping Service wrapper.
+	* @return Returns ETrue if Back Stepping Service consumes the back command, otherwise returns EFalse.
+	*/
+
+	TBool ForwardBackCommandToBsWrapperL();
+
+	/**
+	* ActiveView()
+	* Function returns the UID of the Current Active view
+	**/
+	TUid ActiveView() const;
+
+	/**
+	* FocusWhenSelectGot()
+	* Funtion is called to get the flag when an listbox item is selected
+	* so that the next view gets activated
+	**/
+	TBool FocusWhenSelectGot() const;
+
+	/**
+	* FocusWhenSelectSet()
+	* Funtion is called to set flag when an listbox item is selected
+	* so that the next view gets activated
+	**/
+	void FocusWhenSelectSet(TBool aFocus);
+
+	/**
+	* OpenFileL()
+	* Open the file using Document's instance
+	* @param filename to be opened
+	*/
+	void OpenFileL( const TDesC& aFileName );
+
+
+	/**
+	* GainingForeGroundL()
+	* Function handles when application gains foreground focus
+	*/
+	void GainingForeGroundL();
+	/**
+	* MrccatoCommand()
+	* This is called to decrease the volume
+	* @param aOperationId Operation Id
+	* @param aButtonAct Button Action
+	*/
+	void MrccatoCommand(TRemConCoreApiOperationId aOperationId,
+	TRemConCoreApiButtonAction aButtonAct);
+
+	/**
+     * From MRemConCoreApiTargetObserver.
+     */
+    void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed,
+        TRemConCoreApiButtonAction aButtonAct);
+
+	/**
+	* SetVolume()
+	* Call CPeriodic after the period is over
+	* @param volume level.
+	*/
+	void SetVolume(TInt aValue);
+
+	 /**
+     * Returns a reference to System event collector
+     */
+    CIRSystemEventCollector& SystemEventCollector();
+
+	/**
+	* IRNetworkEventL()
+	*
+	*/
+	virtual void IRNetworkEventL(TIRNetworkEvent aEvent);
+
+	/**
+	* UpdateCurrentNetwork()
+	* Updates the CurrentNetwork
+	* @param MCC
+	* @param MNC
+	*/
+	void UpdateCurrentNetwork(const TDesC& aCurrentNetworkMCC,
+	const TDesC& aCurrentNetworkMNC);
+
+	/**
+	* UpdateHomeNetwork()
+	* Updates the home
+	* @param MCC
+	* @param MNC
+	*/
+	void UpdateHomeNetwork(const TDesC& aCurrentNetworkMCC,
+	const TDesC& aCurrentNetworkMNC);
+
+
+	/**
+	* ParseAndPrepareUrl()
+	* Checks for the URL whether its valid or not
+	* @param URL
+	*/
+	TBool ParseAndPrepareUrl(const TDesC& aUrl);
+
+	/**
+	* SetCurrentNetworkType()
+	* Sets Current Network Being Used
+	*/
+	void SetCurrentNetworkType();
+
+	/**
+	* GetCurrentNetworkType()
+	* Returns Current Network Being Used
+	*/
+	TDesC& GetCurrentNetworkType();
+
+	/**
+	* SetPlayStateWhileCall()
+	* Sets This Value When Stoping the Player
+	* While Call is Active
+	*/
+	void  SetPlayStateWhileCall(TBool aPlayTerminated);
+	/**
+	* GetPlayStateWhileCall()()
+	* Returns the Value of Play state
+	* While Call is Active
+	*/
+	TBool  GetPlayStateWhileCall();
+
+	/**
+	* IsEmbedded()
+	*/
+	TBool IsEmbedded() const;
+
+	/**
+	* IsCallActive()
+	* @return the state of call
+	**/
+	TBool IsCallActive();
+
+	/**
+	* HandlePropertyChangeL
+	* Derived from MIRPropertyChangeObserver
+	*/
+	virtual	void HandlePropertyChangeL(const TUid& aCategory,
+	const TUint aKey, const TInt aValue );
+
+	/**
+	* HandlePropertyChangeL
+	* Derived from MIRPropertyChangeObserver
+	*/
+	virtual	void HandlePropertyChangeL(const TUid& aCategory,
+	const TUint aKey, const TIRTextProperty& aValue );
+
+	/**
+	* HandlePropertyChangeErrorL
+	* Derived from MIRPropertyChangeObserver
+	*/
+	virtual	void HandlePropertyChangeErrorL(const TUid& aCategory,
+	const TUint aKey, TInt aError);
+
+	/**
+	* CurrentViewContainer
+	* Returns the pointer of the active view container
+	*/
+	CIRBaseView* CurrentViewContainer();
+
+	/**
+	* IsOverLayActive()
+	*Returns the status of the loading or buffering
+	*/
+	TBool IsOverLayActive() const;
+
+	/**
+	* The last selected browsing category
+	*
+	* @return The selected item as TCurrentSelectedItem, of KErrNotFound
+	*/
+	TInt SelectedBrowsingCategory() const;
+	/**
+	 * Checks if current screen orientation is landscape
+	 *
+	 * @return ETrue if orientation is landscape, otherwise EFalse
+	 */
+	TBool IsLandscapeOrientation() const;
+	/**
+	* Cancels the pending delayed action.
+	*/
+	void CancelDelayedAction();
+
+	/**
+	* DisplayNetworkIconL(TBool aNetworkFlag,CGulIcon* aNetworkBitmap;TIRConnectionType aConnectionType, TInt aBitmapId, TInt aMaskId=-1, const TDesC& aDisplayConnectionType)
+	* Display the Connection Icon
+	*/
+	void DisplayNetworkIconL(CGulIcon** aNetworkBitmap, TIRConnectionType aConnectionType,
+			 TInt aBitmapId, TInt aMaskId, const TDesC& aDisplayConnectionType);
+
+	/**
+	* FlashNetworkIConL(TBool aNetworkFlag,CGulIcon* aNetworkBitmap;TIRConnectionType aConnectionType, TInt aBitmapId, TInt aMaskId=-1, const TDesC& aDisplayConnectionType)
+	* Flash the Network Icon
+	*/
+	void FlashNetworkIConL(CGulIcon** aNetworkBitmap, TIRConnectionType aConnectionType,
+				 TInt aBitmapId, TInt aMaskId);
+
+	/**
+	* SetCommandSetL(TInt aResourceId)
+	* Function is called to set the CBA buttons Dynamically
+	*/
+	void SetCommandSetL(TInt aResourceId);
+
+	/* IsFirstTime()
+	* Determines whether this view is launched first time or not.
+	*/
+	TBool IsFirstTime();
+
+	/**
+	* DisplayErrorNoteL()
+	* Display the error note
+	* @param string id from the resource
+	**/
+	void DisplayErrorNoteL(TInt aResourceId);
+
+	/**
+	* DisplayErrorNoteL()
+	* Display the error note
+	* @param string id from the resource
+	**/
+	void DisplayErrorNoteL(TInt aResourceId, const TDesC &  aString);
+
+	/**
+	* DisplayInformationL(const TDesC& aResourceDisp)
+	* Display the information note.
+	*/
+	void DisplayInformationL(TInt aResourceId, TInt aInt);
+
+	/**
+	* DisplayInformationL(const TDesC& aResourceDisp)
+	* Display the information note.
+	*/
+	void DisplayInformationL(TInt aResourceId, const TDesC &  aString = KNullDesC);
+
+	/**
+	* Retrieves current Byte Counter for displaying in Now playing view
+	*/
+	void UpdateNowPlayingByteCounter();
+
+	/**
+	* Triggers the view according to layout change.
+	*/
+	void TriggerCommand();
+	/**
+	* IsForeground()
+	* Function To Check Whether Application is in Foreground.
+	*/
+	TBool IsForeground();
+	/**
+	* ParsePlsDataL()
+	* Parse the PLS data
+	* @param file to be parsed
+	*/
+	void ParsePlsDataL(CFileStore*& /*aFileStore*/, RFile& aFile);
+	/**
+	* ConnectToPlsUrlL()
+	* Connects to PLS URL
+	*/
+	void ConnectToPlsUrlL();
+	/**
+	* GetPlsActiavted()
+	* @return bool whether T&C or cost warning view are accepted or not
+	*/
+	TBool GetPlsActiavted() const;
+	/**
+	* SetPlsActiavted()
+	* Sets bool if T&C or cost warning view are not accepted
+	* @param bool to be set
+	*/
+	void SetPlsActiavted(TBool aPlsactivated);
+	/**
+	* GetBgWhenLockState()
+	* returns the iBgWhenLock lock state
+	*/
+	TBool GetBgWhenLockState();
+	/**
+	* GetCurrentOperatorValue()
+	* returns the iCurrentOperator value
+	*/
+	TInt GetCurrentOperatorValue();
+	/**
+	* GetHomeOperatorValue()
+	* returns the vallue of iHomeOperator
+	*/
+	TInt GetHomeOperatorValue();
+	/**
+	* GetCallActiveState()
+	* returns whether iCallActive variable is true/false
+	*/
+	TBool GetCallActiveState();
+	/**
+	* GetNetworkControllerInstance()
+	* returns the iNetworkController
+	*/
+	CIRNetworkController* GetNetworkControllerInstance();
+	/**
+	* GetNowPlayingViewInstance()
+	* returns instance od nowplaying view
+	*/
+	CIRNowPlayingView* GetNowPlayingViewInstance();
+	/**
+	* GetPubSubManagerInstance()
+	* returns instace of publish subscriber
+	*/
+	CIRPubSub* GetPubSubManagerInstance();
+	/**
+	* GetCurrentThreadIDValue()
+	* returns the Current thread ID
+	*/
+	TUint64 GetCurrentThreadIDValue();
+	/**
+	* GetFavPresetsInstance()
+	* returns instace of Favourite preset
+	*/
+	CIRFavoritesDb* GetFavPresetsInstance();
+	/**
+	* GetNetworkType()
+	* returns  Network Connection Type
+	*/
+	TIRConnectionType GetNetworkType();
+	/**
+	* GetCallConnectedState()
+	* returns the iCallConnected state
+	*/
+	TBool GetCallConnectedState();
+	/**
+	* SetActivationPendingValue()
+	*  assign the Id value to iActionPending
+	*/
+	void SetActivationPendingValue(TUid aUid);
+	/**
+	* GetPresentViewID()
+	* returns the present view ID
+	*/
+	TUid GetPresentViewID();
+
+	/**
+	* HandleAlarmStart()
+	* Handles when an alarm comes
+	*/
+	void HandleAlarmStart();
+
+	/**
+	* HandleAlarmEnd()
+	* Handles when an alarm ends
+	*/
+	void HandleAlarmEnd();
+
+	/**
+	* HandleInitialAlarmEvent()
+	* Handles initial event when alarm comes
+	*/
+	void HandleInitialAlarmEvent();
+
+	/**
+	* HandleMessageAlertL()
+	* Handles when a new message comes
+	*/
+	void HandleMessageAlertL();
+
+	/**
+	* GetPlsIndex()
+	* Returns the Pls Index
+	*/
+	TInt GetPlsIndex();
+
+	/**
+	* SetPlsIndex()
+	* Sets the Pls Index
+	*/
+	void SetPlsIndex(TInt aPlsIndex);
+
+	/**
+	* GetBgLock()
+	* Returns whether the Bground is Locked
+	*/
+	TBool GetBgLock();
+
+	/**
+	* SetBgLock()
+	* Sets the BGround whether it is Locked or Unlocked
+	*/
+	void SetBgLock(TBool aBgWhenLock);
+
+	/**
+	* GetEditStation()
+	* Returns whether The station can be edited Or not
+	*/
+	TBool GetEditStation();
+
+	/**
+	* SetEditStation()
+	* Sets the iIsEditStation Flag To determine whether the station
+	* can be Edited
+	*/
+	void SetEditStation(TBool aIsEditStation);
+
+	/**
+	* IsOfflineProfile()
+	* Function returns True if the Current Profile is Offline
+	*/
+	TBool IsOfflineProfile();
+
+	// Abstract method for handling profile activation event.
+	void  HandleProfileActivatedL (TInt aProfileId);
+	void  HandleProfileActivationNotificationError (TInt) ;
+
+	/**
+	 * Checks if free disk space is under pre-set limit. Also
+	 * shows information note telling user to delete some data.
+	 * Some operations should check the disk space with this
+	 * function before proceeding and possibly cancel the process.
+	 *
+	 * @return ETrue if disk space is under limit, EFalse otherwise.
+	 */
+	TBool CheckAndNotifyLowDiskSpaceL() const;
+
+	/* MIRSystemEventObserver::HandleSystemEventL()
+ 	 * Handles the system events
+ 	 */
+	 void HandleSystemEventL(TIRSystemEventType aEventType);
+
+	 /*
+	  * Changes the state of the player
+	  */
+	 void PlayerStateChangedL(TIRStopPlayState aState);
+
+	 /*
+	  * from base class MCoeViewActivationObserver
+	  */
+    void HandleViewActivation(const TVwsViewId& aNewlyActivatedViewId,
+        					  const TVwsViewId& aViewIdToBeDeactivated );
+
+private:
+
+	/**
+	* NetworkAnimationTimerExpiredL
+	* Called when the buffering times out
+	**/
+	static TInt NetworkAnimationTimerExpired(TAny* aPtr);
+
+	/**
+	* GetLockInfo()
+	* To get the information about phone lock
+	* @param TBool Return true if the phone is Locked.
+	**/
+	TBool GetLockInfo();
+
+	/**
+	* Updates the subscriber identifier (IMSI code) and sets the Terms & Conditions display as necessary.
+	*/
+	void UpdateSubscriberIdL();
+	/**
+	* HandleDataTransferEventL()
+	* CallBack which Returns the ByteCounter
+	**/
+
+	void HandleDataTransferEventL( const MIRDataTransferTracker::TIRDataTransferPckg& aData );
+
+	/**
+	* ResetVolumeTimer()
+	* Set the volume bar timer for displaying volume bar
+	* @param time interval for which volume bar is to be displayed
+	*/
+	void ResetVolumeTimer( TInt aVolumeTimer );
+
+	/**
+	* IsVolumeBarPressed()
+	* checks whether volume bar is pressed
+	* @return ETrue whether volume bar key is pressed
+	*/
+	TBool IsVolumeBarPressed();
+
+	/**
+	* IsVolumeUp()
+	* checks whether volume bar is pressed
+	* @return ETrue if volume is increased and EFalse if volume is decreased
+	*/
+	TBool IsVolumeUp();
+
+
+
+
+	/**
+	* Updates the landscape data. This is done separately
+	* and not in IsLandscapeOrientation method as
+	* IsLandscapeOrientation MUST NOT do a window server flush
+	*/
+	void UpdateLandscapeInformation();
+
+	/**
+	*CIRUi::CreateWritablePrivatePath()
+	*Only for ROM SDK3.2
+	*creates a private path in c drive if it doesnot exist (for rom install)
+	*/
+	void CreateWritablePrivatePath();
+
+	// from base class MIAUpdateObserve
+#ifdef FF_IAUPDATE
+    void CheckUpdatesComplete(TInt aErrorCode, TInt aAvailableUpdates);
+    void UpdateComplete(TInt aErrorCode, CIAUpdateResult* aResult);
+    void UpdateQueryComplete(TInt aErrorCode, TBool aUpdateNow);
+#endif
+
+
+public:
+	/*
+	* HandleResourceChangeL( TInt aType )
+	* Handles the changes in the resolution
+	*/
+	void HandleResourceChangeL( TInt aType );
+
+
+// Handles call functionalities when the call is active state or inactive state
+	void HandleCallActiveL(TIRSystemEventType aEventType);
+
+ TInt ChooseLayoutResource( TInt aNormalPortraitRes,
+        TInt aMirroredPortraitRes, TInt aNormalLandscapeRes,
+        TInt aMirroredLandscapeRes ) const;
+	/*
+	* GetSkinColor
+	* Returns the Current Color
+	*/
+	TRgb GetSkinColor();
+	/*
+	* ChooseToolBarIcons
+	* Returns the ToolbarBirmap Id For The Current Theme
+	*/
+	TInt  ChooseToolBarBitmaps(TInt aBlack,TInt aWhite);
+	/*
+	* ChooseToolBarMaskId
+	* Returns the ToolbarBirmap Id For The Current Theme
+	*/
+	TInt  ChooseToolBarMaskId(TInt aBlackMask,TInt aWhiteMask);
+
+	/*
+	* SetHistory
+	* Set the Flag From All the Views  When Go to nowplaying Is Done
+	*/
+	void  SetHistory(TBool aHistory);
+
+
+	/*
+	* GetAlarm
+	* Return the iAlarmTerminated Flag
+	*/
+	TBool GetAlarm();
+
+	//Methods to determine if any channel was added to favorites
+	TBool IsFlagIfAnyFavL();
+
+    void SetMainView(TBool val);
+
+    /**
+	 * FindInMusicStoreCounter()
+	 * Counter of how many times a user has started
+	 * "FindInMusicStore"
+	 */
+	void FindInMusicStoreCounter();
+
+	/**
+	 * GetFindInMusicStoreCount()
+	 * Gets the value of how many times a user has started
+	 * "FindInMusicStore"
+	 */
+	void GetFindInMusicStoreCount(TInt& aFindInMStoreCount);
+
+	RArray<TInt>& GetPlsSaved() ;
+
+	void SetListenFromPls(TBool aValue);
+
+    TBool GetListenFromPls();
+
+   	/**
+	 *  Used to determine the current profile
+	 *  @return TInt describing the profile value
+	 */
+	TInt DetermineCurrentProfile() const;
+
+	void SetListenFromSecondPls(TBool aValue);
+	TBool GetListenFromSecondPls();
+
+	/**
+	 * Brings VRA task to foreground.
+	 */
+	void BringToForeground() const;
+
+	/**
+	 * Sends VRA task to background.
+	 */
+	void SendToBackground() const;
+
+
+private:		//Added by Snigdha for HomeScreen
+
+
+	 /**
+     * Handles action handler command line parameter.
+     *
+     * @param   aTail   The tail of the command line; command id is expected.
+     */
+    void ProcessActionHandlerCommandParameter( const TDesC8& aTail );
+
+    /**
+     * Parses the command line options and calls option specific methods. Supports existing and extended
+     * command line interfaces.
+     *
+     * in old CLI, the expected format of aTail is "N", where N is a preset ID.
+     *
+     * in new CLI, the expected format is "-<option> <value>", where option can be "p", "f" or "a".
+     *             for option p (preset) <value> is integer presenting the preset ID
+     *             for option f (frequency) <value> is integer presenting frequency.
+     *             for option a (action handler command) <value> is id of the command
+     *                           - commands can be found from vractionhandlerdefs.h.
+     *
+     * @param   aTail   The tail of the command line.
+     */
+    void ProcessCommandTailL( const TDesC8& aTail );
+
+
+    MCoeMessageObserver::TMessageResponse HandleMessageL(
+	    TUint32 aClientHandleOfTargetWindowGroup,
+	    TUid aMessageUid,
+	    const TDesC8& aMessageParameters );
+
+    TBool ProcessCommandParametersL(
+        TApaCommand aCommand,
+        TFileName& aDocumentName, const TDesC8& aTail );
+
+public:
+
+
+
+	//Array of URL's
+	// TO DO: This varible can be made as private in Future
+	/*
+	* iURLs
+	* Instance of RPointerArray
+	*/
+	RPointerArray<HBufC8> iURLs;
+	/*
+	* iNowPlayingView
+	* Instance of NowPlaying View
+	*/
+	CIRNowPlayingView* iNowPlayingView;
+	/*
+	* iFirstTimeView
+	* Instance of First Time View
+	*/
+	CIRFirstTimeView* iFirstTimeView;
+	/*
+	* iIRAddManually
+	* Instance of Add Manually View
+	*/
+	CIRAddManuallyStationView* iIRAddManually;
+	/*
+	* iIRAddManually
+	* Instance of NetworkController
+	*/
+	CIRNetworkController* iNetworkController;
+	/*
+	* iIconProvider
+	* Instance of Icon File Provider
+	*/
+	CIconFileProvider* iIconProvider;
+	/*
+	* iFsSession
+	* Instance of filesession
+	*/
+	RFs iFsSession;
+	/*
+	* iFavPresets
+	* Instance of FavoritesDb
+	*/
+	CIRFavoritesDb *iFavPresets;
+	/*
+	* iIRSettings
+	* Instance of CurrentOperationSettings
+	*/
+	CIRSettings* iIRSettings;
+	/*
+	* iSettingsView
+	* Instance of Settings View
+	*/
+	CIRSettingsView* iSettingsView;
+
+	//Currently selected listbox item index
+	TInt iIndex;
+
+
+	//Now Playing View's previous ID
+	TUid iNPPrevViewId;
+
+
+	//Presently activated View's ID
+	TUid iPresentViewID;
+
+	/*
+	* iLastPlayed
+	* Instance of Last played station Information
+	*/
+	CIRLastPlayedStationInfo *iLastPlayed;
+
+	/*
+	* iStationdirView
+	* Instance of Station Directory View
+	*/
+	CIRStationDirectoryView *iStationdirView;
+	/*
+	* iCategoryView
+	* Instance of Category View
+	*/
+	CIRCategoryView *iCategoryView;
+
+	/*
+	* iSearchResultsView
+	* Instance of SearchResults View
+	*/
+	CIRSearchResultsView* iSearchResultsView;
+
+	/*
+	* iStationsView
+	* Instance of  Stations View
+	*/
+	CIRStationsView *iStationsView;
+	/*
+	* iTopStationsView
+	* Instance of TopStations View
+	*/
+	CIRTopStationsView *iTopStationsView;
+
+	/**
+	* 	Store Veiw to be activated when in Background.
+	*/
+	TUid iActivationPending ;
+
+	/*
+	* iUpdateApp
+	* Instance of CIRAppUpdate
+	*/
+	TBuf<KSearchBoxTextLength> iSearchString;
+
+	// Holds the data for the Stations view Title
+	RBuf iStationsViewTitleString;
+
+	// Holds the data for the Category view Title type
+	TInt iCategoryViewTitleType;
+
+	/**
+	* To Hold the Index of the Station to Edit
+	*/
+	TInt iEditStationIndex;
+	/*
+	* iPlsView
+	* Instance of Play List view
+	*/
+	CIRPlsView* iPlsView;
+	/*
+	* iDialogNote
+	* Instance of Dialog Launcher class
+	*/
+	CIRDialogLauncher * iDialogNote;
+
+
+
+
+private:
+
+#ifdef FF_IAUPDATE
+    /**
+     * IAD client object.
+     * Owned.
+     */
+    CIAUpdate* iUpdate;
+
+    /**
+     * Parameters for IAD update.
+     * Owned.
+     */
+    CIAUpdateParameters* iParameters;
+#endif // FF_IAUPDATE
+
+
+
+   TBool iFeatureManagerInitialized;
+
+
+
+	/*
+	* iSelector
+	* Instance of CRemConInterfaceSelector For
+	* Handling Media Keys
+	*/
+
+	CRemConInterfaceSelector* iSelector;
+	/*
+	* iTarget
+	* Instance of CRemConCoreApiTarget For
+	* Handling Media Keys
+	*/
+
+	CRemConCoreApiTarget* iTarget;
+
+	//holds type of current network
+	TIRConnectionType iNetWorkType;
+
+	//checks whether call is connected or not
+	TBool iCallConnected;
+
+	//current operator
+	TInt iCurrentOperator;
+
+	//home operator
+	TInt iHomeOperator;
+
+	//network observer for finding home and current operator
+	CIRNwInfoObserver* iNwObserver;
+
+	/**
+	* System event collector
+	* For handling system events related to call, network and headset
+	*/
+	CIRSystemEventCollector* iSystemEventCollector;
+
+
+	// Used for url checking
+	TBuf8<KMaxBufSize> iUrl8;
+
+	/*
+	* iIsPresetSaved
+	* array used to check whether the preset is saved in Favorites from PLS
+	*/
+	RArray<TInt> iIsPresetSaved;
+
+	RArray<TInt> iPlsPresetSaved;
+
+	//Checks whether PLS view is active or not
+	TBool iPlsactivated;
+
+	// for cheking if the view is activated through the select
+	TBool iSelect;
+
+
+	//indicates that play has to be triggered after alarm
+	TBool iTriggeringRequired;
+
+	//determines overlay text
+	TIROverLayText iOverlayVariable;
+
+
+	TUid iBGPresentViewId;
+
+	/*
+	* iCntChaReqForSaving
+	*
+	*/
+	TInt iCntChaReqForSaving;
+
+	//for call observing
+	TBool iCallActive;
+
+	//For adding songs to history to handle adding to history
+	TInt iCount;
+
+	// Current preset id
+	TInt iCurrentPresetId;
+
+    TBool iListenFrmSecondPls;
+
+
+	// The selected browsing category
+	TInt iSelectedBrowsingCategory;
+
+	TInt iRequestedPresets;
+
+	//Skinning API needs the file name to be stored in a TBuf
+	TBuf<KMaxBufSize> iMbmFileName;
+
+	//set if a sync request is made from ui
+	TBool iOtaRequest;
+
+
+	//stores current thread's id
+	TUint64 iCurrentThreadID;
+
+
+	TBool iAlarmTerminated;
+
+
+		//current network
+	TBuf<10> iCurrentNetwork;
+
+	//home network
+	TBuf<10> iHomeNetwork;
+
+	//Holds the type of network connected
+	TBuf<5> iConnectionType;
+
+	/*
+	* iPlsLength
+	* Instance of RArray
+	*/
+	RArray< TInt > iPlsLength;
+
+	/*
+	* iValue
+	*value to store the return value from confirmation Notes
+	*/
+	TInt iValue;
+
+	/*
+	* iAlfEnv
+	* Instance of CAlfEnv
+	*/
+	CAlfEnv* iAlfEnv;
+
+  	/*
+	* iMifFilePath
+	* path for the Mif File
+	*/
+	TFileName iMifFilePath;
+
+	//Checks whether application is call terminated
+	TBool iPlayTerminated;
+
+	/*
+	* iLandscape
+	* Instance to return the value of landscape
+	*/
+	TBool iLandscape;
+
+		//Instance of IRPubSub
+	CIRPubSub* iPubSubManager;
+
+	/*
+	* iMultiStationSave
+	* return the bool value for multi station saved
+	*/
+	TBool iMultiStationSave;
+
+	/**
+	* subscriber for bitrate
+	*/
+	CIRPropertyObserver* iBitrateSubscriber;
+
+	/**
+	* subscriber for multiple play handling
+	*/
+	CIRPropertyObserver* iMultiplePlayHandler;
+	/**
+	* Timer to animate the network indicatior icon
+	*/
+	CPeriodic* iNetworkIndicatorTimer;
+
+		//Gets the Pls Index
+	TInt iPlsIndex;
+
+	//check if going to background due to keypad lock
+	TBool iBgWhenLock;
+
+	/**
+	* Boolean varaible to store whether the station is
+	* editable or not
+	*/
+    TBool iIsEditStation;
+
+	/**
+	* Boolean varaible which is used for Switching Between Npv and History
+	* View
+	*/
+    TBool iHistory;
+
+
+    TBool iSecondInstanceFlag;
+
+    TBool iMainViewLaunch;
+
+
+    static TInt iFindInMusicStoreCount;
+    /**
+	* Boolean varaible which is used for Checking The Current profile
+	*/
+	TBool iIsOffline;
+
+	/*
+	* iNotifyHandler
+	* Instance of Notify Handler Used for Registering Profile
+	* Changed
+	*/
+    MProEngNotifyHandler* iNotifyHandler;
+    TBool iListenFromPls ;
+
+	CIRDialogLauncher*  iDialogLauncher;
+
+	/*
+	* iProfileId
+	* Instance Which strores the Profile Id
+	*/
+    TInt iProfileId;
+
+
+    /**
+     * Is application started or focused to Now playing view.
+     */
+    TBool iStartUpInNowPlayingView;
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+    /**
+     * Backstepping Service wrapper.
+     * Own.
+     */
+    CIRBackSteppingServiceWrapper* iBsWrapper;
+#endif
+
+	CIRControlEventObserver * iControlEventObserver; 
+public:
+
+	/**
+	* iIsdsWrapper
+	* Instance of the IsdsWrapper class
+	*/
+	CIRIsdsWrapper *iIsdsWrapper;
+	/**
+	* iNowPlayingWrapper
+	* Instance of the NowPlayingWrapper class
+	*/
+	CIRNowPlayingWrapper *iNowPlayingWrapper;
+	/*
+	* iHistoryListView
+	* Instance of History view
+	*/
+	CIRHistoryListView* iHistoryListView;
+	/**
+	* View stack holds all previous views, not the current view.
+	*/
+	CIRViewStack* iViewStack;
+	/*
+	* iUpdateApp
+	* Instance of Cost warning view
+	*/
+	CIRCostWarningView* iCostWarningView;
+	/*
+	* iMainView
+	* Instance of Main View
+	*/
+	CIRMainView* iMainView;
+	/*
+	* iAlarmObserver
+	* Instance of Alarm observer
+	*/
+	CIRAlarmObserver* iAlarmObserver;
+	/*
+	* iMessageObserver
+	* Instance of Message observer
+	*/
+//	CIRMessageObserver* iMessageObserver;
+
+	/**
+	* iStationInfoView
+	* Instance of the StationInfoView class
+	*/
+	CIRStationInfoView *iStationInfoView;
+
+	/**
+	 * iIsDisconnected
+	 * checks if the network status is disconnected
+	 */
+	 TBool iIsDisconnected;
+
+
+
+	};
+
+
+#endif // IRUI_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irviewstack.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2008-2008 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 C_CIRVIEWSTACK_H
+#define C_CIRVIEWSTACK_H
+
+#include <e32base.h>
+
+class CIRViewStack : public CBase
+{
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @return Instance of CVRViewStack
+     */
+    static CIRViewStack* NewL();
+
+    /**
+     * ~CVRViewStack
+     * Destructor.
+     */
+    ~CIRViewStack();
+    
+    /**
+     * Returns UID of the previously active view.
+     * @return UID of previous view.
+     */
+    TUid Peek() const;
+
+    /**
+     * Pushes view UID to view stack.
+     * View stack holds all previous views, not the current view.
+     * So the top item of this stack should usually be the previous view.
+     * @param aView UID of the view to push to view stack.
+     */
+    void PushL( TUid aView );
+
+    /**
+     * Returns number of views in to the stack.
+     * @return UID of the view popped from view stack.
+     */
+    TInt Count() const;
+    
+    /**
+     * Pops and returns view UID from top of view stack.
+     * View stack holds all previous views, not the current view.
+     * So the top item of this stack should usually be the previous view.
+     * @return UID of the view popped from view stack.
+     */
+    TUid Pop();
+
+    /**
+     * Pops to given Id and returns view UID from top of view stack.
+     * View stack holds all previous views, not the current view.
+     * So the top item of this stack should usually be the previous view.
+     * @return UID of the view popped from view stack.
+     */ 
+    TUid CIRViewStack::PopTo( TUid aId );
+
+private:
+
+    /**
+     * CVRViewStack.
+     * C++ default constructor.
+     */
+    CIRViewStack();
+    
+    /**
+     * Second phase constructor.
+     */
+    void ConstructL();
+
+private: // Owned
+    /**
+     * View stack holds all previous views, not the current view.
+     * So the top item of this stack should usually be the previous view.
+     */  
+    RArray<TUid> iViewStack;
+
+};
+
+#endif // C_CIRVIEWSTACKk_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/mirlistboxarray.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,111 @@
+/*
+* 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 MIRLISTBOXARRAY_H
+#define MIRLISTBOXARRAY_H
+
+#include <bamdesca.h>
+
+
+
+class MIRListBoxArray : public MDesCArray
+    {
+ public:
+    /**
+     * NewL()
+     * Static constructor.
+     */
+    static MIRListBoxArray* NewL();
+
+    /**
+     * NewLC()
+     * Static constructor.
+     */
+    static MIRListBoxArray* NewLC();
+    /**
+     * ConstructL()
+     * 2nd phase constructor
+     */
+    void ConstructL();
+	/*
+	 *  MIRListBoxArray()
+	 * default constructor
+	 */
+    MIRListBoxArray();
+	/*
+	* SetListArray()
+	* sets the listarray
+	*/
+	void SetListArray(CDesCArray* aListArray);
+	/*
+	* SetItemAtZero()
+	* sets the lastplayed flag and string
+	*/
+	void SetItemAtZero(TBool aAdFlag,HBufC& aString,TBool aMainView= EFalse);
+	/*
+	* MdcaCount()
+	* returns the count of the listarray
+	*/
+	TInt MdcaCount() const ;
+ 	/*
+	* MdcaPoint()
+	* returns string at the particular index
+	*/
+	TPtrC MdcaPoint(TInt aIndex) const ;
+	/*
+	* SetFlag()
+	* sets the flag whether count in the filtered model as incremented r not
+	*/
+	void SetFlag(TBool aFlag)  ;
+	/*
+	* SetIndexFlag()
+	* sets the Index flag when the index is not giving the correct element
+	*/
+	void SetIndexFlag(TBool aFlag)  ;
+	/*
+	* GetIndexFlag()
+	* Gets the index flag that is set.
+	*/
+	TBool GetIndexFlag();
+ 	/*
+	* iListArray()
+	* instance of CDesCArray
+	*/
+	CDesCArray* iListArray;
+ 	/*
+	* iLastPlayed
+	* saves the lastplayed status into this
+	*/
+	TBool iLastPlayed;
+ 	/*
+	* iLastPlayedString
+	* sets the lastplayed string into this
+	*/
+    HBufC* iLastPlayedString;
+ 	/*
+	* iFlag
+	* sets when the count 
+	*/
+ 	TBool iFlag;
+ 	/*
+	* iIndexFlag
+	*  
+	*/
+	TBool iIndexFlag;
+    };
+#endif // MIRLISTBOXARRAY_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/msyncpresetobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef MSYNCPRESETOBSERVER
+#define MSYNCPRESETOBSERVER
+
+#include <e32def.h>
+
+class CIRIsdsPreset;
+
+/**
+ * MSyncPresetObserver
+ * Sends the Preset synchronization callbacks to the observers
+ */
+class MSyncPresetObserver
+    {
+public:
+	/**
+	 * MSyncPresetObserver::SyncPresetRemovedL()
+	 * called back when the preset that is synced was removed from isds
+	 * @param TInt,the preset id
+	 */
+	virtual void SyncPresetRemovedL(TInt aId)=0;
+
+	/**
+	 * MSyncPresetObserver::SyncPresetChangedL()
+	 * called back when the preset that is synced has been changed in the isds
+	 * @param CIRIsdsPreset&,the new preset data
+	 */
+	virtual void SyncPresetChangedL(CIRIsdsPreset& aPreset)=0;
+	
+	/**
+	 * MSyncPresetObserver::SyncPresetNoChangeL()
+	 * called back when the preset that is synced has not been changed
+	 */
+	 virtual void SyncPresetNoChangeL()=0;
+	 
+	};
+
+#endif // MSYNCPRESETOBSERVER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/mviewsresponseanderrorobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* 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 MVIEWSRESPONSEANDERROROBSERVER_H
+#define MVIEWSRESPONSEANDERROROBSERVER_H
+
+class CIRIsdsPreset;
+class MViewsResponseAndErrorObserver
+{
+public:
+	virtual void ResponseL(CIRIsdsPreset* aPreset = NULL ) = 0;
+	virtual void PresetResponseL(CIRIsdsPreset* aPreset) = 0;
+	virtual void ErrorL() = 0;
+};
+#endif //	MVIEWSRESPONSEANDERROROBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/uinotifyhandler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2006-2007 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:  Interface class to notify database changes to SongHistoryView
+*
+*/
+
+
+#ifndef IR_SONGHISTORYUINOTIFYHANDLER
+#define IR_SONGHISTORYUINOTIFYHANDLER
+
+#include <e32cmn.h>
+
+/**
+* Observer interface for CIRSongHistoryView.
+* Notifies the view when new data is received.
+*/
+NONSHARABLE_CLASS(MSongHistoryUINotifyHandler)
+    {
+		public:
+
+			/**
+			* Invoked from CIRSongHistoryDbEng when new entry is added to the database.
+			* @param    aSongName
+			* @param    aArtistName
+			* @param    aChannelName
+			* Parameters yet to be decided.
+			*/
+				virtual void NextSongReceivedL( const TDesC& aSongName, const TDesC& aArtistName,
+							 const TDesC& aChannelName, const TDesC& aChannelUrl ) = 0;
+
+				virtual void ChannelChangedL( const TDesC& aSongName, const TDesC& aArtistName,
+						 const TDesC& aChannelName, const TDesC& aChannelUrl ) = 0;
+
+			/**
+			* Invoked from CIRSongHistoryDbEng when new entry is added to the database which *would exceed 30 entries.
+			* @param    aSongName
+			* @param    aArtistName
+			* @param    aChannelName
+			*/
+				virtual TInt RemoveSongEntry( const TDesC& aSongName, const TDesC& aArtistName,
+						const TDesC& aChannelName, const TDesC& aChannelUrl ) = 0;
+
+				virtual TInt RemoveChannelEntry( const TDesC& aSongName, const TDesC& aArtistName,
+							const TDesC& aChannelName, const TDesC& aChannelUrl ) = 0;
+
+			/**
+			* Invoked when an error occurred while notifying to UI.
+			* @param    aError      The error code.
+			*/
+				virtual void NotifyDataChangeToUIError( TInt aError ) = 0;
+
+    };
+
+#endif //IR_SONGHISTORYUINOTIFYHANDLER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/ir.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <eikstart.h>
+
+#include "irapplication.h"
+#include "irdebug.h"
+
+// ---------------------------------------------------------------------------
+// Create an application, and return a pointer to the framework
+// ---------------------------------------------------------------------------
+//
+LOCAL_C CApaApplication* NewApplication()
+    {
+    IRLOG_DEBUG( "CApaApplication::NewApplication" );
+    return new CIRApplication;
+    }
+
+// ---------------------------------------------------------------------------
+// The application entry-point
+// voilates PC lint error 714-- not refrenced.
+// ---------------------------------------------------------------------------
+//
+GLDEF_C TInt E32Main()
+    {
+    IRLOG_DEBUG( "CApaApplication::E32Main" );
+    return EikStart::RunApplication( NewApplication );
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/iraccessoryobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,174 @@
+/*
+* 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:  Observer of accessory states.
+*
+*/
+
+
+#include <accpolgenericid.h>
+
+#include "iraccessoryobserver.h"
+#include "irheadseteventobserver.h"
+#include "irdebug.h"
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRAccessoryObserver::CIRAccessoryObserver() : 
+        CActive( CActive::EPriorityStandard )
+    {
+    IRLOG_DEBUG( "CIRAccessoryObserver::CIRAccessoryObserver" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRAccessoryObserver::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRAccessoryObserver::ConstructL - Entering" );
+    User::LeaveIfError( iAccessoryServer.Connect() );
+    
+    // Creates a new sub session within an existing session.
+    User::LeaveIfError( iAccessoryModeSession.CreateSubSession( iAccessoryServer ) );
+    User::LeaveIfError( iAccessoryModeSession.GetAccessoryMode( iAccPolAccessoryMode ) );
+
+    CActiveScheduler::Add( this );      
+    // Accessory mode is always listened
+    iAccessoryModeSession.NotifyAccessoryModeChanged( iStatus, iAccPolAccessoryMode ); 
+    SetActive();
+    IRLOG_DEBUG( "CIRAccessoryObserver::ConstructL - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Static constructor.
+// ---------------------------------------------------------------------------
+//
+CIRAccessoryObserver* CIRAccessoryObserver::NewL()
+    {
+    IRLOG_DEBUG( "CIRAccessoryObserver::NewL - Entering" );
+    CIRAccessoryObserver* self = new( ELeave ) CIRAccessoryObserver;
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRAccessoryObserver::NewL - Exiting" );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRAccessoryObserver::~CIRAccessoryObserver()
+    {
+    IRLOG_DEBUG( "CIRAccessoryObserver::~CIRAccessoryObserver - Entering" );
+    Cancel();
+	iAccessoryModeSession.CloseSubSession();
+	iAccessoryServer.Close();
+	IRLOG_DEBUG( "CIRAccessoryObserver::~CIRAccessoryObserver - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRAccessoryObserver::IsHeadsetConnected
+// ---------------------------------------------------------------------------
+//
+TBool CIRAccessoryObserver::IsHeadsetConnected() const
+	{
+	IRLOG_DEBUG( "CIRAccessoryObserver::IsHeadsetConnected - Entering" );
+	TBool accessoryConnected;
+	
+#ifdef __WINS__
+    accessoryConnected = ETrue;
+#else
+	switch ( iAccPolAccessoryMode.iAccessoryMode )
+        {
+        case EAccModeWiredHeadset:    // Falls through.
+        case EAccModeLoopset:         // Falls through.
+        case EAccModeHeadphones:
+            {
+            accessoryConnected = ETrue;
+	        break;
+            }
+        default:
+            {
+			accessoryConnected = EFalse;
+			break;
+			}
+        }
+#endif   
+	IRLOG_DEBUG( "CIRAccessoryObserver::IsHeadsetConnected - Exiting" );
+	return accessoryConnected;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRAccessoryObserver::SetObserver
+// ---------------------------------------------------------------------------
+//
+void CIRAccessoryObserver::SetObserver( MIRHeadsetEventObserver* aObserver )
+	{
+	IRLOG_DEBUG( "CIRAccessoryObserver::SetObserver - Entering" );
+	iObserver = aObserver;
+	IRLOG_DEBUG( "CIRAccessoryObserver::SetObserver - Exiting" );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// From class CActive
+// CIRAccessoryObserver::RunL
+// ---------------------------------------------------------------------------
+//
+void CIRAccessoryObserver::RunL()
+    {    
+    IRLOG_DEBUG( "CIRAccessoryObserver::RunL - Entering" );
+    TRequestStatus status = iStatus;
+    iAccessoryModeSession.NotifyAccessoryModeChanged( iStatus, 
+        iAccPolAccessoryMode ); 
+    SetActive(); 
+    
+    if ( status == KErrNone )
+        {
+        // Accessory mode may change when combined connection status changes 
+        // or when audio routing status changes. 
+        if(IsHeadsetConnected())
+            {
+            iObserver->HeadsetConnectedCallbackL();
+            }
+        else
+            {
+            iObserver->HeadsetDisconnectedCallbackL();
+            }
+        }
+    IRLOG_DEBUG( "CIRAccessoryObserver::RunL - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// From class CActive
+// CIRAccessoryObserver::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CIRAccessoryObserver::DoCancel()
+    {
+    IRLOG_DEBUG( "CIRAccessoryObserver::RunL - Entering" );
+    iAccessoryModeSession.CancelNotifyAccessoryModeChanged();
+    IRLOG_DEBUG( "CIRAccessoryObserver::RunL - Exiting" );
+    
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/iraddmanuallystationcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,961 @@
+/*
+* Copyright (c) 2004 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:  Container class for channel list view
+*
+*/
+
+
+#include <akniconutils.h>
+#include <aknindicatorcontainer.h>
+#include <aknutils.h>
+
+#include <akniconarray.h>
+#include <aknlists.h>
+#include <aknview.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+#include <eikedwin.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include <baclipb.h>
+#include <aknsfld.h> //CAknSearchField
+#include <txtetext.h>
+#include <eikdialg.h> 
+#include <akntoolbar.h>
+#include <aknappui.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <f32file.h>
+#include <s32file.h>
+#include <eikmenub.h>                       
+#include <avkon.hrh>                        
+#include <avkon.rsg>  
+#include <aknnotewrappers.h>                     
+#include <aknpopupfieldtext.h>              
+#include <mgfetch.h> 
+/* the head file is really uplayer case, so we don't need to change it.  */
+#include <AknsConstants.h>
+#include <eikaufty.h>
+#include <hlplch.h>
+#include <aknnavi.h>
+#include <aknnavide.h> 
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "iriconloader.h"
+#include "irfavoritesdb.h"
+#include "irdialoglauncher.h"
+#include "irpreset.h"
+#include "irhistory.h"
+
+#include "irisdspreset.h"
+#include "irchannelserverurl.h"
+#include "irnowplayingwrapper.h"
+#include "iraddmanuallystationview.h"
+#include "iraddmanuallystationcontainer.h"
+#include "irapplication.h"
+#include "iraap.hlp.hrh" //Added to implement HELP option SPP
+#include "irsettings.h"     //Added to maintain the IfAnyFav variable in settings
+
+
+const TInt KBeginning = 0;
+const TInt KMaxLength = 100;
+const TInt KbufMaxLength = 10;
+
+_LIT(KUnamedStation,"Unnamed station");
+_LIT(KNullStation,"");
+_LIT(KSpace," ");
+	
+const TInt KMaxSize = 256;	
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRAddManuallyStationContainer* CIRAddManuallyStationContainer::NewL(
+											CIRAddManuallyStationView* aView)  
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::NewL - Begin" );
+	CIRAddManuallyStationContainer* self = new ( ELeave ) CIRAddManuallyStationContainer(aView);//(aToolbar)
+	CleanupStack::PushL( self );
+	CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::NewL - Exiting" );
+	return self;
+    } 
+    
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationContainer::CIRAddManuallyStationContainer( CIRAddManuallyStationView* aView):
+								iView(aView)
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::CIRAddManuallyStationContainer" );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationContainer::~CIRAddManuallyStationContainer()
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::~CIRAddManuallyStationContainer" );
+	if(iPreset)
+		{
+		delete iPreset;
+		iPreset=NULL;	
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::~CIRAddManuallyStationContainer" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAddManuallyStationContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::GetHelpContext Begin" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_ADD_URL );
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::GetHelpContext End" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationContainer::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+    { 
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::DynInitMenuPaneL - Begin " );
+  	CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane );
+    if ( aResourceId == R_AVKON_FORM_MENUPANE )        //R_AVKON_FORM_MENUPANE
+        {
+        aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue);
+        aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue );
+        aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue );
+        aMenuPane->SetItemDimmed( EAknFormCmdSave, ETrue );
+        aMenuPane->SetItemDimmed( EAknFormCmdEdit, ETrue );
+        if(iView->iNowPlayingWrapper->iPlaying)
+			{
+			aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+			}
+		else
+			{
+			aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+			}
+	    }
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::DynInitMenuPaneL - Exiting." );
+    }
+
+//-------------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::ProcessCommandL
+//  From CAknForm, takes care of command handling.
+//  @param aCommand Command to be handled
+//--------------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::ProcessCommandL( TInt aCommand )    
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::ProcessCommandL - Begin " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+	switch(aCommand)
+		{
+	   	case EGotoNowPlayingViewCmd:
+	   		 {
+	  	  	 iView->HandleCommandL(EGotoNowPlayingViewCmd);
+	       	 break;
+	      	 }
+	    case EHelpCmd:
+	         {
+	      	 iView->HandleCommandL(EHelpCmd);
+	       	 break;
+	      	 }
+	  	case EExitCmd:
+	  	  	 {
+	  		 iView->HandleCommandL(EExitCmd);
+	  		 break;
+	  		 }
+	  	default:
+		   	 iView->HandleCommandL( aCommand );
+	    	 
+	 	}
+	CAknForm::ProcessCommandL(aCommand);
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::ProcessCommandL - Exiting " );
+    }
+    
+
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::OkToExitL
+// 
+// -----------------------------------------------------------------------------
+TBool CIRAddManuallyStationContainer::OkToExitL( TInt aButtonId )
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::OkToExitL - Begin " );
+ 	if ( aButtonId == EAknSoftkeyCancel)
+		{
+		iView->HandleCommandL(EAknSoftkeyBack);
+		}
+	if ( aButtonId == EAknSoftkeyOptions )
+		{
+		DisplayMenuL();
+		}
+    if( aButtonId == EAddExit )
+	    {
+	  	iView->HandleCommandL(EAknSoftkeyBack);
+	  	return ETrue;
+	    }
+	TBool ret = CAknForm::OkToExitL( aButtonId );
+	
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::OkToExitL - Exiting " );
+    return ret;
+    }    
+
+void CIRAddManuallyStationContainer::PreLayoutDynInitL()
+	{
+	CAknForm::PreLayoutDynInitL();
+	}
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::PostLayoutDynInitL
+// 
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::PostLayoutDynInitL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::PostLayoutDynInitL - Begin " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+	//for enabling paste button if clipboard contains some data
+	RFs& fs = iEikonEnv->FsSession();
+	CClipboard* clipBoard = CClipboard::NewForReadingLC(fs);
+	TBuf<KMaxLength> pasteData;
+	CPlainText* plainText = CPlainText::NewL();
+	CleanupStack::PushL(plainText);
+	plainText->PasteFromStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning);
+    plainText->Extract(pasteData,KBeginning,KMaxLength);
+    TInt length=pasteData.Length() ;
+    if(length)
+     	{
+    	iView->iIsCopied=ETrue;
+    	iView->SetToolbarItems();
+     	}
+    CleanupStack::PopAndDestroy(plainText);
+    CleanupStack::PopAndDestroy(clipBoard);
+	iIsEditStation=iView->iUi->GetEditStation();
+	if(iIsEditStation)
+	   	{
+		TInt urlCount = iView->iNowPlayingWrapper->iEditStationPreset->GetUrlCount();
+	   	if (urlCount <= 0)
+	  		{
+	  		DefaultVauleL();
+	  		iView->iIsTextEntered=EFalse;
+			}
+		else
+			{
+			SetEdwinTextL(EAddStaionURL,
+						  &iView->iNowPlayingWrapper->iEditStationPreset->GetChannelUrlAtL(0) );
+			TBuf<KMaxSize> unnamedStation(KUnamedStation);
+			TBuf<KMaxSize> stationName =	iView->iNowPlayingWrapper->iEditStationPreset->GetName();		  	
+			if(stationName == unnamedStation)
+				{
+				stationName.Copy(KNullStation);
+				}
+			SetEdwinTextL(EAddStaionName,
+			              &stationName);	
+			              
+			SetEdwinTextL(EAddStaionDescription,
+			              &iView->iNowPlayingWrapper->iEditStationPreset->GetDescription());
+						              
+			iView->iIsTextEntered=ETrue;
+			}
+		iView->SetAddStationsTitleL();
+		iView->SetToolbarItems();
+	   	}
+	else
+		{
+		DefaultVauleL();
+		iView->iIsTextEntered=EFalse;
+		iView->SetToolbarItems();
+		}
+
+//	CEikDialog::SetTitleL(R_IRAPP_ADDMANUALLY_TITLE)
+	CAknForm::PostLayoutDynInitL();
+	iView->iUi->HandleResourceChangeL(KEikDynamicLayoutVariantSwitch);
+	HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::PostLayoutDynInitL - Exiting " );
+	} 
+
+
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::DefaultVauleL()
+// 
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::DefaultVauleL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::DefaultVauleL - Begin " );
+	HBufC *httpstring = StringLoader::LoadLC(R_IRAPP_ADDMANUALLY_HTTP);
+	SetEdwinTextL( EAddStaionURL, httpstring );
+	CleanupStack::PopAndDestroy(httpstring);
+		    	
+	HBufC *unnamedstring = StringLoader::LoadLC(R_IRAPP_ADDMANUALLY_NONAME);
+	SetEdwinTextL( EAddStaionName, unnamedstring );
+	CleanupStack::PopAndDestroy(unnamedstring);
+	_LIT(blank,"");
+	TBuf<KbufMaxLength> buf(blank);  
+	SetEdwinTextL( EAddStaionDescription,&buf );
+	
+	CEikDialog::SetInitialCurrentLine();
+    TryChangeFocusToL(EAddStaionURL);
+    
+    CCoeControl* cntrl = CEikDialog::Control(EAddStaionURL);
+	CEikEdwin* myEdwin = static_cast<CEikEdwin*> ( cntrl );
+	TInt txtLength=myEdwin->TextLength();	
+	myEdwin->SetCursorPosL (txtLength, EFalse);
+    	
+	iView->SetAddStationsTitleL();
+	
+		
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::DefaultVauleL - Exiting " );
+	}
+	
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::CopyData
+// 
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::CopyDataL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::CopyDataL - Begin " );
+	RFs& fs = iEikonEnv->FsSession();
+	CClipboard*	clipBoard = CClipboard::NewForWritingLC(fs);
+	CPlainText*	plainText = CPlainText::NewL();
+	CleanupStack::PushL(plainText);
+	TInt idoffocused = CEikDialog::IdOfFocusControl();
+	CCoeControl* ictrl = CEikDialog::Control(idoffocused);
+	CEikEdwin* myEdwin = static_cast<CEikEdwin*> ( ictrl );
+	TCursorSelection sel=myEdwin->Selection();
+	GetEdwinText( iSelText, idoffocused );
+	TInt txtlength=myEdwin->TextLength();
+	TInt length = sel.Length();
+	if(length)
+		{
+		HBufC* number = HBufC::NewLC( length );
+		TPtr numberPtr = number->Des();
+		TInt pos=sel.LowerPos();
+		if (pos < iSelText.Length())
+			numberPtr.Copy(&iSelText[pos],length);		
+		plainText->InsertL(0, *number);
+		plainText->CopyToStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning, 
+		                        plainText->DocumentLength());
+		clipBoard->CommitL();
+		CleanupStack::PopAndDestroy(number);	
+		}
+	else
+		{
+		myEdwin->SetSelectionL(0,txtlength);
+		plainText->InsertL(0, iSelText);
+		plainText->CopyToStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning, 
+		                        plainText->DocumentLength());
+		clipBoard->CommitL();
+		}
+	CleanupStack::PopAndDestroy(plainText);
+	CleanupStack::PopAndDestroy(clipBoard);
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::CopyDataL - Exiting " );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::PasteData
+// 
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::PasteDataL()
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::PasteDataL - Begin " );
+    RFs& fs = iEikonEnv->FsSession();
+	CClipboard* clipBoard = CClipboard::NewForReadingLC(fs);
+	TBuf<KMaxLength> clipBoardText;
+	CPlainText* plainText = CPlainText::NewL();
+	CleanupStack::PushL(plainText);
+	plainText->PasteFromStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning);
+    TInt idOfFocused=CEikDialog::IdOfFocusControl();
+    CCoeControl* ictrl=CEikDialog::Control(idOfFocused);
+    CEikEdwin* myEdwin = static_cast<CEikEdwin*> ( ictrl );
+    TCursorSelection sel=myEdwin->Selection();
+	GetEdwinText( iSelText, idOfFocused );
+	HBufC* number = HBufC::NewLC(KMaxLength);
+	TPtr numberPtr = number->Des();
+	TInt length = sel.Length();
+	TInt txtLength=myEdwin->TextLength();
+	TInt diffLength=KMaxLength-(txtLength-length);
+	plainText->Extract(clipBoardText,KBeginning,diffLength);
+	if (txtLength!=0)
+		{
+		numberPtr.Copy(&iSelText[0],txtLength);	
+		if(length!=0)
+			{
+			TInt pos=sel.LowerPos();
+	
+			numberPtr.Delete(pos,length);
+			numberPtr.Insert(pos,clipBoardText);
+			SetEdwinTextL( idOfFocused, number ); 
+			}
+		else
+			{
+			TInt pos=myEdwin->CursorPos();
+			numberPtr.Insert(pos,clipBoardText);
+			SetEdwinTextL( idOfFocused, number ); 
+			}
+	    }
+	else
+		{
+		numberPtr.Insert(KBeginning,clipBoardText);
+		SetEdwinTextL( idOfFocused, number );	
+		}
+	TBool enable=ValidateUrlL();
+	if(enable)
+		{
+		iView->iIsTextEntered=ETrue;
+		iView->SetToolbarItems();			    
+		}
+	else
+		{
+		iView->iIsTextEntered=EFalse;
+	   	iView->SetToolbarItems();
+		}
+	TInt txtLengthAfterPaste=myEdwin->TextLength();	
+	myEdwin->SetSelectionL(0,0);
+	myEdwin->SetCursorPosL (txtLengthAfterPaste, EFalse);
+
+	CleanupStack::PopAndDestroy(number); 
+	CleanupStack::PopAndDestroy(plainText);
+	CleanupStack::PopAndDestroy(clipBoard);
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::PasteDataL - Exiting " );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::SaveData
+// 
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::SaveDataL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::SaveDataL - Begin " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+	GetEdwinText( iStationURL, EAddStaionURL );
+	GetEdwinText( iStationName, EAddStaionName );
+	GetEdwinText( iStationDescription, EAddStaionDescription );
+	
+	ReplaceUglyChar(iStationName);
+	ReplaceUglyChar(iStationDescription);
+	
+		
+	if(iIsEditStation)
+		{
+		EditStationL();
+		iView->iIsTextEntered=EFalse;
+		}
+		
+    if(!iIsEditStation)
+		{
+		TBool urlStatus = iView->iUi->ParseAndPrepareUrl(iStationURL);
+		if( !urlStatus )
+			{
+			iIsSpaceEntered=ETrue;
+			iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+			return;	
+			}
+		else 
+			{
+			AddToFavouritesL();
+			iView->iIsTextEntered=EFalse;
+			iView->SetToolbarItems();
+			DefaultVauleL();
+			}
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::SaveDataL - Exiting " );
+	}
+
+/**
+ * void CIRAddManuallyStationContainer::AddToFavouritesL()
+ *
+ * Description		: This method is used to Add the stations to Favourites
+ *  
+ * @Algorithm		: 
+ *		      Step 1: Validate the Staion name by calling 'ReplaceEmptyName'
+ *			          method
+ *		      Step 2: Validate the entered url by calling 'ParseAndPrepareUrl'
+ *                    method.
+ *            Step 3: If Url is incorrect then display an error message, else
+ *					  goto step4.
+ *            Step 4: 
+ *            Step 5: 
+ *                                 
+ * @Param			: [IN]  Nil
+ *					  [OUT] Nil
+ *
+ * @Return		    :
+ *
+ * Example   Usage	: 
+ */
+void CIRAddManuallyStationContainer::AddToFavouritesL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::AddToFavouritesL - Begin " );
+	
+	ReplaceEmptyName( iStationName );  
+	
+	TBool isInvalidChar = HasInvalidCharsInUrl(iStationURL);
+	if( !isInvalidChar)
+		{
+		iIsSpaceEntered=ETrue;
+		iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+		return;	
+		}
+		
+	/**
+	 * Validate the entered URL 
+	 */
+	TBool urlStatus = iView->iUi->ParseAndPrepareUrl(iStationURL);
+	
+	/**
+	 * If the entered URL is incorrect then display the error message
+	 * "Incorrect URL"
+	 */
+	if( !urlStatus )
+		{
+		iDialogLauncher = CIRDialogLauncher::NewL();
+		iView->iIsSpaceEntered=ETrue;
+		iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+		delete iDialogLauncher;
+		return;	
+		}
+	if(iPreset)
+		{
+		delete iPreset;
+		iPreset=NULL;	
+		}
+	   iPreset = CIRIsdsPreset::NewL();
+	   TInt err(KErrNoMemory);
+	   iPreset->SetName(iStationName);
+	   iPreset->SetShortDesc(iStationDescription);
+	   
+	   /**
+	    * only one url is saved for manually added channel
+	    */
+	   iPreset->SetUrlCount(1);
+	   
+	   _LIT(KNotAvailable,"NA");
+	   
+	   /**
+	    * bitrate set to zero so that it is accessible to all kinds of 
+	    * bitrate settings
+	    */
+	   iPreset->SetUrlL(KNotAvailable,iStationURL,0);
+	   
+	   /**
+	    * Set the Description
+	    */
+	   iPreset->SetDescription(iStationDescription);
+	   
+	   /**
+	    * Save into the favourites
+	    */
+	   iView->iUi->iFavPresets->AddPresetL(*iPreset,err);		
+	   
+	   /**
+	    * If there is no space in favourites display error note.	
+	    */
+	   if (err == KErrNoMemory)
+			{
+			iDialogLauncher->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR, ETrue);			
+			}
+	   else
+			{
+			if(iUnNamedFlag)
+				{
+				iStationName.Copy(KNullStation);
+				iUnNamedFlag = EFalse;
+				iDialogLauncher->ShowConfirmationNoteL( R_IRAPP_STATION_SAVED,ETrue );
+				}
+			else
+				{
+				iView->iUi->DisplayInformationL(R_IRAPP_STATIONS_POPUP_SAVED, iStationName);
+				}
+			iView->iUi->iIRSettings->SetFlagIfAnyFavL();
+			}
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::AddToFavouritesL - Exiting " );
+	}
+
+/**
+ * void CIRAddManuallyStationContainer::EditStationL()
+ *
+ * Description		: This method is used to Edit the userdefined stations
+ *  
+ * @Algorithm		: 
+ *		      Step 1: Validate the entered Url by using 'ParseAndPrepareUrl'
+ *		      Step 2: If Entered Url is incorrect then display an error 
+ *					  message, else goto step3.
+ *            Step3 : calculate the Index of the station to be deleted
+ *            Step4 : create an instance of 'CIRIsdsPreset'
+ *            Step5 : Set the new name of the station
+ *			  Step6 : Set the Short description to the station
+ *			  Step7 : Set the Url 
+ *			  Step8 : Set the Bitrate
+ *			  Step9 : Set the UniqId of the Station to edited
+ *			  Step10: Update the station with modifed values in favourites
+ *                    by calling 'ReplaceUserDefinedPresetL'
+ *			  Step11: Display a confirmation note that station saved
+ *                                 
+ * @Param			: [IN]
+ *					  [OUT]
+ *
+ * @Return		    :
+ *
+ * Example Usage	:
+ */
+void CIRAddManuallyStationContainer::EditStationL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::EditStationL - Entered" );
+	
+	ReplaceUglyChar(iStationName);
+	
+	TBool isInvalidChar = HasInvalidCharsInUrl(iStationURL);
+	if( !isInvalidChar)
+		{
+		iIsSpaceEntered=ETrue;
+		iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+		return;	
+		}
+		 
+	TBool urlStatus = iView->iUi->ParseAndPrepareUrl(iStationURL);
+	if( !urlStatus )
+		{
+		iIsSpaceEntered=ETrue;
+		iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+		return;	
+		}
+	else
+		{
+		TInt deleteIndex ;
+		if (iView->iUi->iLastPlayed->FileExists())
+			{
+			deleteIndex = iView->iUi->iEditStationIndex-1;
+			}
+		else
+			{
+			deleteIndex = iView->iUi->iEditStationIndex;
+			}
+		/**
+		 * prepare isdsPreset with the edited values
+		 */	
+		CIRIsdsPreset* isdsPreset =  CIRIsdsPreset::NewL();
+		
+		/**
+		 * Set the Station Name with new station name
+		 */
+		if(iStationName.Length()==0)
+			{
+			ReplaceEmptyName( iStationName );  
+			}
+		isdsPreset->SetName(iStationName);
+		
+		/**
+		 * Set Description with the new Description
+		 */
+		isdsPreset->SetShortDesc(iStationDescription);
+	    
+	    /**
+	     *only one url is saved for manually added channel
+	     */
+	    isdsPreset->SetUrlCount(1);
+	    
+	    _LIT(KNotAvailable,"NA");
+	    
+	    /**
+	     * bitrate set to zero so that it is accessible to all kinds of 
+	     * bitrate settings
+	     */
+	    isdsPreset->SetUrlL(KNotAvailable,iStationURL,0);
+	    
+	    isdsPreset->SetDescription(iStationDescription);
+	    
+	    /**
+	     * Set the UniqId of the Station to edit
+	     */
+	    if (deleteIndex < iView->iUi->iFavPresets->iFavPresetList.Count())
+	       isdsPreset->SetUniqId(iView->iUi->iFavPresets->
+	                          iFavPresetList[deleteIndex]->Id());
+	    /**
+	     * Replace the preset with the new values 
+	     */                      
+	   	iView->iUi->iFavPresets->ReplaceUserDefinedPresetL(*isdsPreset);
+		
+		/**
+		 * display a confirmation note
+		 */
+		if(iUnNamedFlag)
+			{
+			iStationName.Copy(KNullStation);
+			iUnNamedFlag = EFalse;
+			iDialogLauncher->ShowConfirmationNoteL( R_IRAPP_STATION_SAVED,ETrue );
+			}
+		else
+			{
+			iView->iUi->DisplayInformationL(R_IRAPP_STATIONS_POPUP_SAVED, 
+			                                iStationName);
+			}
+		if (isdsPreset)
+			{
+			delete isdsPreset;
+			isdsPreset = NULL;				
+			}
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::EditStationL - Exited " ); 
+	}
+
+// ----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::ReplaceEmptyName( TDes& aUrlName )
+// Checks whether the url name contains only spaces and if the descriptor really was.
+// empty replaces its content with default name
+// ----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::ReplaceEmptyName( TDes& aUrlName )
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::ReplaceEmptyName - Begin " );
+	TBool isEmpty = ETrue;
+	for( TInt i = 0; i < aUrlName.Length() && isEmpty; i++ )
+		{
+		( static_cast<TChar>( aUrlName[i] ) ).Fold();
+		if ( !( static_cast<TChar>( aUrlName[i] ) ).IsSpace() )
+			{
+			isEmpty = EFalse;
+			}
+	   	}
+	    if ( isEmpty )		
+	  		{
+	    	StringLoader::Load( aUrlName, R_IRAPP_ADDMANUALLY_NOTEXT );
+	    	iUnNamedFlag = ETrue;
+	  		}
+	    IRLOG_DEBUG( "CIRAddManuallyStationContainer::ReplaceEmptyName - Exiting " );
+	}
+
+
+void CIRAddManuallyStationContainer::ReplaceUglyChar(TDes& aUrlName)
+	{
+	for(TInt i = 0; i < aUrlName.Length(); i++)
+		{
+		TChar xChar(aUrlName[i]);
+		if (xChar.GetCategory() == TChar::EZpCategory)
+			{
+			aUrlName.Replace(i, 1, KSpace);				
+			}
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::HandlePointerEventL(const TPointerEvent&  
+// aPointerEvent)
+// This function is used handle pen input events 
+// ----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::HandlePointerEventL(const TPointerEvent &aPointerEvent) 
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandlePointerEventL - Begin " );
+    CAknForm::HandlePointerEventL( aPointerEvent );
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandlePointerEventL - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+//TBool CIRAddManuallyStationContainer::ValidateUrlL() 
+//Validates The entered URL Scheme 
+// ---------------------------------------------------------------------------
+TBool CIRAddManuallyStationContainer::ValidateUrlL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::ValidateUrlL - Begin " );
+	TBool retVal = EFalse;
+	_LIT(KMMSText, "mms://");
+	
+	TBuf<KbufMaxLength> iTextBoxValidateUrl;
+	HBufC *httpstring1 = StringLoader::LoadLC(R_IRAPP_ADDMANUALLY_HTTP);
+	iTextBoxValidateUrl = *httpstring1;
+
+   	HBufC* mmsString  = HBufC::NewLC(KbufMaxLength);
+	*mmsString = KMMSText;
+	TBuf<KbufMaxLength> textBoxValidateMMS(*mmsString);
+
+	
+	GetEdwinText( iStationURL, EAddStaionURL );
+	
+	CleanupStack::PopAndDestroy(mmsString);
+	CleanupStack::PopAndDestroy(httpstring1);
+
+    if ( iTextBoxValidateUrl.CompareF( iStationURL.Left( iTextBoxValidateUrl.Length()))== 0)
+		{
+		if ( iStationURL.Length() <= iTextBoxValidateUrl.Length() ||
+    	     iTextBoxValidateUrl.CompareF( iStationURL.Left( iTextBoxValidateUrl.Length() ))) 
+			{
+			retVal = EFalse;
+			}
+	    else 
+	    	{
+			retVal = ETrue;
+			}
+		}
+	else if (textBoxValidateMMS.CompareF( iStationURL.Left( textBoxValidateMMS.Length()))==0)
+		{
+		if ( iStationURL.Length() <= textBoxValidateMMS.Length() ||
+    	     textBoxValidateMMS.CompareF( iStationURL.Left( textBoxValidateMMS.Length() ))) 
+			{
+			retVal = EFalse;
+			}
+	    else 
+	    	{
+			retVal = ETrue;
+			}
+		}
+
+    else
+	    {
+		//nothing	    	
+	    }
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::ValidateUrlL - Exiting " );	
+	return retVal;
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// void CIRAddManuallyStationContainer::HandleControlEventL(CCoeControl* aControl, 
+//                                                          TCoeEvent aEventType)
+// To handle key events.
+// 
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationContainer::HandleControlEventL( 
+                                                    CCoeControl* aControl, 
+                                                    TCoeEvent aEventType)
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleControlEventL - Begin " );
+    CAknForm::HandleControlEventL(aControl, aEventType);
+    if (aEventType == EEventStateChanged)
+    	{
+        if (aControl == Control(EAddStaionURL))
+            {
+		  	TInt focus=CEikDialog::IdOfFocusControl();
+	      	CCoeControl* ictrl=CEikDialog::Control(focus);
+	      	TBool enable=ValidateUrlL();
+	      	iIsEnable = enable;
+	    	if(enable)
+	  			{
+	  			iView->iIsTextEntered=ETrue;
+	    	 	iView->SetToolbarItems();			    
+	  			}
+	  		else
+	  			{
+	  			iView->iIsTextEntered=EFalse;
+	    	 	iView->SetToolbarItems();
+	  			}
+            }
+        if (aControl == Control(EAddStaionName))
+            {
+            }  
+    	}
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleControlEventL - Exiting " );
+	}
+	
+	
+// ---------------------------------------------------------------------------
+//void CIRAddManuallyStationContainer::HandleResourceChange (TInt aType)
+//
+// 
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationContainer::HandleResourceChange (TInt /*aType*/)
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleResourceChange - Begin " );
+    CAknForm::HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+    
+    iView->RefreshView();
+    
+	SizeChanged();
+	DrawDeferred();
+    IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleResourceChange - Exiting " );   
+	}
+
+// ---------------------------------------------------------------------------
+//void CIRAddManuallyStationContainer::SizeChanged ()
+//
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationContainer::SizeChanged()
+	{
+	CAknForm::SizeChanged();		
+	}
+	
+// ---------------------------------------------------------------------------
+//TBool CIRAddManuallyStationContainer::HasInvalidCharsInUrl (TDes& aUrl)
+//
+// ---------------------------------------------------------------------------
+
+TBool CIRAddManuallyStationContainer::HasInvalidCharsInUrl(TDes& aUrl)
+	{
+	TBool retVal = EFalse;
+	for(TInt i = 0; i < aUrl.Length(); i++)
+		{
+		TChar xChar(aUrl[i]);
+		switch(xChar.GetCategory())
+			{
+			case TChar::ESeparatorGroup: 
+			case TChar::EControlGroup:
+			case TChar::EZpCategory:
+			case TChar::EWhitespace:
+			case TChar::EZlCategory:
+			case TChar::EParagraphSeparator:
+			case TChar::ESegmentSeparator:
+		  	case TChar::EPsCategory: 
+			case TChar::EPeCategory:
+				{
+				retVal = EFalse;
+				}
+			break;
+			default:
+				{
+				retVal = ETrue;
+				}
+			}
+		(static_cast<TChar>( aUrl[i] ) ).Fold();
+		if( ( static_cast<TChar>( aUrl[i] ) ) == '%' || 
+		    ( static_cast<TChar>( aUrl[i] ) ) == '^' ||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '"' ||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '\\'||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '`' ||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '|' ||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '<' ||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '>' ||
+		    ( static_cast<TChar>( aUrl[i] ) ) == '#' )
+			{
+			retVal = EFalse;					
+			}
+		
+		
+		if(!retVal)
+			{
+			i = aUrl.Length();							
+			}
+		}
+	return retVal;		
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/iraddmanuallystationview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,601 @@
+/*
+* Copyright (c) 2004 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:  Channel list view class
+*
+*/
+
+
+#include <akniconarray.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <hlplch.h>
+#include <aknappui.h>
+
+//For Touch Toolbar
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <internetradio.mbg>
+#include <internetradio.rsg>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irsettings.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irapplication.h"
+#include "iraddmanuallystationview.h"
+#include "iraddmanuallystationcontainer.h"
+#include "irviewstack.h"
+#include "irmainview.h"
+#include "irnowplayingwrapper.h"
+
+
+const TInt KWaitTimeInMicroSeconds = 100000;
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationView::CIRAddManuallyStationView() 
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationView::CIRAddManuallyStationView " );
+    }
+
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationView::ConstructL(const TRect& /*aRect*/)
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ConstructL - Begin " );
+    CIRBaseView::ConstructL(R_IR_ADDURL);
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+	TRgb color;
+	TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+				                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_IR_ADDMANUALLY_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_IR_ADDMANUALLY_BLACK_TOOLBAR);	
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+	
+    IRLOG_DEBUG( "CIRAddManuallyStationView::ConstructL - Exiting " );
+    }
+
+
+CIRAddManuallyStationView* CIRAddManuallyStationView::NewL(const TRect& aRect)
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::NewL - Begin " );
+	CIRAddManuallyStationView* self = CIRAddManuallyStationView::NewLC(aRect);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRAddManuallyStationView::NewL - Exiting " );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationView* CIRAddManuallyStationView::NewLC(const TRect& aRect)
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationView::NewLC - Begin " );
+    CIRAddManuallyStationView* self = new( ELeave ) CIRAddManuallyStationView;
+    CleanupStack::PushL( self );
+    self->ConstructL(aRect);
+    IRLOG_DEBUG( "CIRAddManuallyStationView::NewLC - Exiting " );
+    return self;
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationView::~CIRAddManuallyStationView()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::~CIRAddManuallyStationView - Begin " );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	if ( Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	if(iAddStationsTimer)
+		{
+		iAddStationsTimer->StopTimer();
+		delete iAddStationsTimer;
+		iAddStationsTimer = NULL;
+		}
+	CActiveScheduler::Delete(iAddStationsTimer);
+	IRLOG_DEBUG( "CIRAddManuallyStationView::~CIRAddManuallyStationView - Exiting " );
+	}
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRAddManuallyStationView::Id() const
+    {
+    IRLOG_DEBUG( "CIRAddManuallyStationView::Id " );
+    return KIRAddManuallyStationViewID;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationView::DoActivateL( const TVwsViewId& aPrevViewId, 
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DoActivateL - Begin " ); 
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	appUi->iPresentViewID = KIRAddManuallyStationViewID;
+ 	ConstructToolbarL(); 
+	Toolbar()->SetToolbarVisibility(ETrue, EFalse);
+	//save the previous view id
+	iPrevViewId = aPrevViewId;
+	
+//	SetAddStationsTitleL()
+	
+
+	if ( !iContainer )
+		{
+		iContainer =CIRAddManuallyStationContainer::NewL(this);
+		iContainer->ConstructL(R_FORM_MENUBAR);
+		}
+	else
+		{
+		iContainer->SetRect(ClientRect());
+		iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);			
+		}
+	
+	iAddStationsTimer = CIRAddStationsTimer::NewL(*iContainer);
+	CActiveScheduler::Add(iAddStationsTimer);
+
+    iAddStationsTimer->ExecuteL();
+ 	CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DoActivateL - Exiting " );
+	}
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationView::DoDeactivate()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DoDeactivate - Begin " );
+	if ( iContainer )
+		{
+		if(iUi->ActiveView() == KIRAddManuallyStationViewID)
+			{
+			delete iContainer;
+			}
+		iContainer = NULL;
+		}
+	if ( Toolbar() )
+		{
+	    Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	if(iAddStationsTimer)
+		{
+		iAddStationsTimer->StopTimer();
+		delete iAddStationsTimer;
+		iAddStationsTimer = NULL;
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DoDeactivate - Exiting " );
+	}
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::HandleCommandL - Begin " );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	CIRViewStack& viewStack = appUi->ViewStack();
+
+	switch ( aCommand )
+	    {
+	   	   
+	    case EGotoNowPlayingViewCmd:
+	   		{
+	   		appUi->SetHistory(EFalse);
+	  		appUi->SavePrevIDL(KIRAddManuallyStationViewID, aCommand); 
+	        break;
+	        }
+	    case EHelpCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+	        	HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+	        	AppUi()->AppHelpContextL() );
+				}
+	        break;
+			}
+		case EAknSoftkeyBack:
+	    	{
+			if((appUi->IsFirstTime()))
+				{
+				CIRBaseView::HandleCommandL( aCommand );	                
+				}
+			else
+				{
+				TInt count = (viewStack.Count());
+				if(viewStack.Count() == 2 )
+					{
+					TUid topView = viewStack.Pop();
+					if(viewStack.Peek()==KIRMainChoiceViewID)
+						{
+						viewStack.PushL(topView);
+						CIRBaseView::HandleCommandL( aCommand );	                
+						}
+			
+					else
+						{
+						viewStack.Pop();
+						appUi->ActivateLocalViewL(KIRMainChoiceViewID);	
+						}
+					}
+					
+				else if(viewStack.Count() >2 )
+					{
+					CIRBaseView::HandleCommandL( aCommand );	
+					}
+				else
+					{
+					viewStack.Pop();
+					appUi->ActivateLocalViewL(KIRMainChoiceViewID);
+					}
+				}
+			}
+	    
+	        break;
+	   default:
+	        {
+	        CIRBaseView::HandleCommandL( aCommand );
+	        break;
+	        }
+	    }
+	IRLOG_DEBUG( "CIRAddManuallyStationView::HandleCommandL - Exiting " );
+	}
+
+
+
+
+// ---------------------------------------------------------------------------
+//  CIRAddManuallyStationView::ConstructToolbarL 
+//  To Create Touch Toolbar
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationView::ConstructToolbarL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ConstructToolbarL - Begin " );
+	
+	if(Toolbar())
+		{
+	    Toolbar()->SetItemDimmed(EButton1,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton3,EFalse,ETrue);	
+	    
+	    if (iIsTextEntered )
+			{
+			Toolbar()->SetItemDimmed(EButton2,EFalse,ETrue);
+			}
+		else
+			{
+			if (iUi->GetEditStation())
+				{
+				if (iContainer)
+					{
+					if (!iContainer->iIsEnable)
+						{
+						Toolbar()->SetItemDimmed(EButton2,ETrue,ETrue);							
+						}
+					else
+						{
+						Toolbar()->SetItemDimmed(EButton2,EFalse,ETrue);				
+						}
+					}
+				}
+			else 
+				{
+				Toolbar()->SetItemDimmed(EButton2,ETrue,ETrue);
+				}
+			}
+	    	   
+		Toolbar()->SetToolbarVisibility( ETrue );
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ConstructToolbarL - Exiting " );
+	}
+
+// ---------------------------------------------------------------------------
+//  CIRAddManuallyStationView::DynInitToolbarL 
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationView::DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ )
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DynInitToolbarL - Begin " );
+	/*if ( !aToolbar ) User::Leave(KErrNotFound);
+		{
+
+		}*/
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DynInitToolbarL - Exiting " );
+	}
+	
+// --------------------------------------------------------------------------
+// CIRAddManuallyStationView::OfferToolbarEventL
+// --------------------------------------------------------------------------
+//
+void CIRAddManuallyStationView::OfferToolbarEventL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::OfferToolbarEventL - Begin " );
+	switch(aCommand)
+		{
+		
+		case EButton1:
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+	         	iContainer->CopyDataL();
+				}
+            break;
+      
+        case EButton2:
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+	         	iContainer->SaveDataL();
+				}
+            break;
+        case EButton3:
+        	iContainer->PasteDataL();
+        	break;
+	
+        default:
+            break;
+	        
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationView::OfferToolbarEventL - Exiting " );
+	}
+
+// --------------------------------------------------------------------------
+// CIRAddManuallyStationView::SetToolbarItems
+// To dim/undim the touch toolbar buttons
+// --------------------------------------------------------------------------
+
+void CIRAddManuallyStationView::SetToolbarItems()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::SetToolbarItems - Begin " );
+	CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi( ) );
+  	  
+	if(iIsTextEntered )
+	    {
+	    Toolbar()->SetItemDimmed(EButton1,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton2,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton3,EFalse,ETrue);	
+	
+	    }
+	else if (appUi->GetEditStation() && iIsTextEntered)
+		{
+	    Toolbar()->SetItemDimmed(EButton1,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton2,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton3,EFalse,ETrue) ;	
+		}
+		
+	else if(iIsCopied)
+	    {
+	    Toolbar()->SetItemDimmed(EButton1,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton2,ETrue,ETrue);
+	    Toolbar()->SetItemDimmed(EButton3,EFalse,ETrue)	;
+	    }
+	else
+	  {
+	    Toolbar()->SetItemDimmed(EButton1,EFalse,ETrue);
+	    Toolbar()->SetItemDimmed(EButton2,ETrue,ETrue);
+	    Toolbar()->SetItemDimmed(EButton3,EFalse,ETrue);	
+	  }
+	Toolbar()->DrawNow();
+	iIsCopied=EFalse; 
+	IRLOG_DEBUG( "CIRAddManuallyStationView::SetToolbarItems - Exiting " );  
+	}
+
+// --------------------------------------------------------------------------
+// CIRAddManuallyStationView::SetAddStationsTitleL
+// Sets the Title
+// --------------------------------------------------------------------------
+void CIRAddManuallyStationView::SetAddStationsTitleL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::SetAddStationsTitleL - Begin " );
+	if (!iUi->GetEditStation())
+		{
+		SetTitleL(R_IRAPP_ADDMANUALLY_TITLE);
+		}
+	else
+		{
+		SetTitleL(R_IRAPP_EDITSTATION_TITLE);	
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationView::SetAddStationsTitleL - Exiting " );
+	}
+
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::CIRAddStationTimer
+// --------------------------------------------------------------------------
+
+CIRAddStationsTimer::CIRAddStationsTimer(CIRAddManuallyStationContainer& aContainer): 
+					 CActive(CActive::EPriorityStandard),iContainer(aContainer)
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::CIRAddStationsTimer - Begin " );
+	iCounter=0;
+	IRLOG_DEBUG( "CIRAddManuallyStationView::CIRAddStationsTimer - Exiting " );
+	}
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::~CIRAddStationTimer
+// --------------------------------------------------------------------------
+CIRAddStationsTimer::~CIRAddStationsTimer()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::~CIRAddStationsTimer - Begin " );
+	// Make sure we're cancelled
+	Cancel();
+	iTimer.Close(); // Close the ASP
+	IRLOG_DEBUG( "CIRAddManuallyStationView::~CIRAddStationsTimer - Exiting " );
+	}
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::NewL
+// --------------------------------------------------------------------------
+CIRAddStationsTimer* CIRAddStationsTimer::NewL(CIRAddManuallyStationContainer& aContainer)
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::NewL - Begin " );
+	CIRAddStationsTimer* self = new (ELeave) CIRAddStationsTimer(aContainer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRAddManuallyStationView::NewL - Exiting " );
+	return self;
+	}   
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::ConstructL
+// --------------------------------------------------------------------------
+void CIRAddStationsTimer::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ConstructL - Begin " );
+	iTimer.CreateLocal();
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ConstructL - Exiting " );
+	return;
+
+	} 
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::IssueRequest
+// --------------------------------------------------------------------------
+void CIRAddStationsTimer::IssueRequest()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::IssueRequest - Begin " );
+	// Request another wait
+	iStatus = KRequestPending;
+	if(!IsActive())
+		{
+		iTimer.After( iStatus, KWaitTimeInMicroSeconds);
+		SetActive();
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationView::IssueRequest - Exiting " );
+	} 
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::DoCancel
+// --------------------------------------------------------------------------
+void CIRAddStationsTimer::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DoCancel - Begin " );
+	iTimer.Cancel(); // Close the ASP
+	IRLOG_DEBUG( "CIRAddManuallyStationView::DoCancel - Exiting " );
+	}
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::RunL
+// --------------------------------------------------------------------------
+void CIRAddStationsTimer::RunL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::RunL - Begin " );
+	iContainer.ExecuteLD( R_ADD_STATION_FORM_DIALOG );
+	IRLOG_DEBUG( "CIRAddManuallyStationView::RunL - Exiting " );
+	}
+   
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::ExecuteL
+// --------------------------------------------------------------------------
+void CIRAddStationsTimer::ExecuteL()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ExecuteL - Begin " );
+	IssueRequest();
+	IRLOG_DEBUG( "CIRAddManuallyStationView::ExecuteL - Exiting " );
+	return;
+	}
+
+// --------------------------------------------------------------------------
+// CIRAddStationTimer::StopTimer
+// --------------------------------------------------------------------------
+void CIRAddStationsTimer::StopTimer()
+	{
+	IRLOG_DEBUG( "CIRAddManuallyStationView::StopTimer - Begin " );
+	iTimer.Cancel();
+	IRLOG_DEBUG( "CIRAddManuallyStationView::StopTimer - Exiting " );
+	}	
+	
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationView::HandleForegroundEventL( TBool aForeground )
+    {
+	IRLOG_DEBUG( "CIRAddManuallyStationView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+
+	if ( aForeground )
+		{
+		if(iContainer)
+			{
+			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+			TRgb color;
+			TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+						                                      EAknsCIQsnTextColorsCG6 );
+			if(color.Gray2()!=0)
+				{
+				CreateAndSetToolbarL(R_IR_ADDMANUALLY_WHITE_TOOLBAR);
+				}
+			else
+				{
+				CreateAndSetToolbarL(R_IR_ADDMANUALLY_BLACK_TOOLBAR);	
+				}
+			if( AknLayoutUtils::PenEnabled() && Toolbar() )
+				{
+				Toolbar()->SetToolbarObserver( this );
+				}
+			ConstructToolbarL();
+			}
+		}
+	IRLOG_DEBUG( "CIRAddManuallyStationView::HandleForegroundEventL" );
+    }
+	
+
+
+void CIRAddManuallyStationView::RefreshView()
+	{
+	if (iContainer)
+		{
+		iContainer->SetRect(ClientRect());		
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/iralarmobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2006-2007 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 "iralarmobserver.h"
+#include "irdebug.h"
+#include "irui.h"
+
+
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIRAlarmObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRAlarmObserver* CIRAlarmObserver::NewL(CIRUi* aUi)
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::NewL - Entering" );
+	CIRAlarmObserver* self = CIRAlarmObserver::NewLC(aUi);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRAlarmObserver::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// Function returns an instance of CIRAlarmObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRAlarmObserver* CIRAlarmObserver::NewLC(CIRUi* aUi)
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::NewLC - Entering" );
+	CIRAlarmObserver* self = new (ELeave) CIRAlarmObserver;
+	CleanupStack::PushL(self);
+	self->ConstructL(aUi);
+	IRLOG_DEBUG( "CIRAlarmObserver::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : ~CIRAlarmObserver
+// Default destructor calls Cancel function which cancel the active request 
+// ---------------------------------------------------------------------------
+//
+CIRAlarmObserver::~CIRAlarmObserver()
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::~CIRAlarmObserver - Entering" );
+	Cancel();
+	iAlarmSession.Close();	
+	IRLOG_DEBUG( "CIRAlarmObserver::~CIRAlarmObserver - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Start
+// Function starts the call observer
+// ---------------------------------------------------------------------------
+//
+void CIRAlarmObserver::Start()
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::Start - Entering" );
+	//! Starts monitoring of call events when application is running
+	if( !IsActive() )
+		{
+		iAlarmSession.NotifyChange(iStatus,iAlarmId);
+		SetActive();
+		}
+	IRLOG_DEBUG( "CIRAlarmObserver::Start - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : RunL
+// handles only alarm start and stop events 
+// ---------------------------------------------------------------------------
+//
+void CIRAlarmObserver::RunL()
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::RunL - Entering" );
+	//! handles when call comes the player is stopped
+	if( EAlarmChangeEventSoundPlaying == iStatus.Int() ) 
+		{
+		iUi->HandleAlarmStart();
+		iAlarmOn = ETrue;
+		}
+	//! handles when call is diconnected, the play again is called
+	else if( EAlarmChangeEventSoundStopped == iStatus.Int() ) 
+		{
+		if ( iAlarmOn )
+			{
+			iUi->HandleAlarmEnd();
+			iAlarmOn = EFalse;	
+			}
+		else
+			{
+			iUi->HandleInitialAlarmEvent();
+			}
+		
+		}
+	else
+		{
+		//No implementation	
+		}	
+	Start(); //starts monitoring again
+	IRLOG_DEBUG( "CIRAlarmObserver::RunL - Exiting." );	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : DoCancel
+// Function stops the call observer if it is active
+// ---------------------------------------------------------------------------
+//
+void CIRAlarmObserver::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::DoCancel - Entering" );
+	if( IsActive() )
+		{
+		iAlarmSession.NotifyChangeCancel();	
+		}	
+	IRLOG_DEBUG( "CIRAlarmObserver::DoCancel - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : RunError
+// Function which handles RunL error
+// ---------------------------------------------------------------------------
+//
+TInt CIRAlarmObserver::RunError(TInt aError)
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::RunError" );
+	return aError;		
+	}
+
+// ---------------------------------------------------------------------------
+// Function : ConstructL
+// Function does all the initializations
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRAlarmObserver::ConstructL(CIRUi* aUi)
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::ConstructL - Entering" );
+	iUi = aUi;
+	iAlarmOn = EFalse;	
+	User::LeaveIfError(iAlarmSession.Connect());
+	CActiveScheduler::Add(this);			
+	IRLOG_DEBUG( "CIRAlarmObserver::ConstructL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : CIRAlarmObserver
+// Function is the default constructor, sets the CActive priority, Line status
+// ---------------------------------------------------------------------------
+//
+CIRAlarmObserver::CIRAlarmObserver():CActive(CActive::EPriorityStandard)
+	{
+	IRLOG_DEBUG( "CIRAlarmObserver::CIRAlarmObserver" );
+	}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irapplication.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irapplication.h"
+#include "irdebug.h"
+#include "irdocument.h"
+#include "irdebug.h"
+
+#include <eikenv.h>
+#include <apgwgnam.h>
+// UID for the application, this should correspond to the uid defined in the mmp file
+// voilate PC Lint 569 -Loss of information (initialization)
+// (32 bits to 31 bits)
+static const TUid KUidIR = {0x2000B499};
+
+// ---------------------------------------------------------------------------
+// Function: CreateDocumentL()
+// returns an instance of CIRDocument
+// ---------------------------------------------------------------------------
+//
+CApaDocument* CIRApplication::CreateDocumentL()
+    {  
+    IRLOG_INFO( "CIRApplication::CreateDocumentL" );
+    return CIRDocument::NewL(*this);
+    }
+
+// ---------------------------------------------------------------------------
+// Function: AppDllUid()
+// Return the UID for the IR application
+// ---------------------------------------------------------------------------
+// 
+TUid CIRApplication::AppDllUid() const
+    {
+    IRLOG_INFO( "CIRApplication::AppDllUid" );
+    return KUidIR;
+    }
+// ---------------------------------------------------------------------------
+// Function: PreDocConstructL()
+// Return the UID for the IR application
+// ---------------------------------------------------------------------------
+// 
+void CIRApplication::PreDocConstructL()
+	{
+	// Check that this app is started as stand-alone
+	RWsSession& ws = static_cast<CEikonEnv*>(iCoeEnv)->WsSession();
+	const TInt myWgId = static_cast<CEikonEnv*>(iCoeEnv)->RootWin().Identifier();
+	TInt wgId = 0;
+	TUid uid(AppDllUid());
+	// Look for another instance of this app
+	while (wgId >= 0)
+		{
+		if (wgId && wgId != myWgId)
+			{
+			iSecondInstance =ETrue;
+			}
+		CApaWindowGroupName::FindByAppUid(uid, ws, wgId);
+		}
+	if(!iSecondInstance)
+	CAknApplication::PreDocConstructL(); 
+	}
+// ---------------------------------------------------------------------------
+// Function: GetInstanceFlag()
+// Return the Boolean for second instance
+// ---------------------------------------------------------------------------
+// 
+TBool CIRApplication::GetInstanceFlag()
+	{
+	IRLOG_INFO( "CIRApplication::GetInstanceFlag" );
+	return iSecondInstance;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irbacksteppingservicewrapper.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2007 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 Back Stepping Service.
+*
+*/
+
+
+#include <liwcommon.h>
+#include <liwservicehandler.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+
+#include "irbsserviceconstants.h" 
+#include "irbacksteppingservicewrapper.h"
+
+_LIT8( KIRBackSteppingPrefix, "IRBS" );
+
+// ======== MEMBER FUNCTIONS =================================================
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::NewL
+// ---------------------------------------------------------------------------
+//
+CIRBackSteppingServiceWrapper* CIRBackSteppingServiceWrapper::NewL( TUid aUid )
+    {
+    CIRBackSteppingServiceWrapper* self = new( ELeave ) CIRBackSteppingServiceWrapper;
+    CleanupStack::PushL( self );
+    self->ConstructL( aUid );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::~CIRBackSteppingServiceWrapper
+// ---------------------------------------------------------------------------
+//
+CIRBackSteppingServiceWrapper::~CIRBackSteppingServiceWrapper()
+    {
+    if ( iBsInterface )
+        {
+        iBsInterface->Close();
+        }
+    if ( iServiceHandler )
+        {
+        delete iServiceHandler;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::HandleViewActivationEventL
+// ---------------------------------------------------------------------------
+//
+void CIRBackSteppingServiceWrapper::HandleViewActivationEventL( const TVwsViewId aViewId,
+                                                                TBool aEnter )
+    {
+    // Make Service Handler param lists.
+    iInParamList->Reset();
+	iOutParamList->Reset();
+	
+    RBuf8 buffer;
+    CleanupClosePushL( buffer );
+    buffer.CreateL( KIRBackSteppingPrefix().Length() + KDefaultRealWidth );
+    buffer.Copy( KIRBackSteppingPrefix );
+    // Convert 32-bit signed integer (TInt32) view uid to TInt.
+    TInt64 viewUid = static_cast< TInt64 >( aViewId.iViewUid.iUid );
+    buffer.AppendNum( viewUid );
+        
+	TLiwGenericParam state( KIRBSInParamState, TLiwVariant( buffer ) );
+	iInParamList->AppendL( state );
+	TLiwGenericParam enter( KIRBSInParamEnter, TLiwVariant( aEnter ) );
+	iInParamList->AppendL( enter );
+
+    // Execute view activation event.
+	iBsInterface->ExecuteCmdL( KIRBSCmdForwardActivationEvent, *iInParamList, *iOutParamList );
+    CleanupStack::PopAndDestroy(&buffer);
+
+    // Check if BS Service consumed the event.
+    HandleResultL();
+
+	iInParamList->Reset();
+	iOutParamList->Reset();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::HandleBackCommandL
+// ---------------------------------------------------------------------------
+//
+TBool CIRBackSteppingServiceWrapper::HandleBackCommandL( const TVwsViewId aViewId )
+    {
+    // Make Service Handler param lists.
+    iInParamList->Reset();
+	iOutParamList->Reset();
+	
+    // Create message for back stepping wrapper to handle back command event.
+    RBuf8 buffer;
+    CleanupClosePushL( buffer );
+    buffer.CreateL( KIRBackSteppingPrefix().Length() + KDefaultRealWidth );
+    buffer.Copy( KIRBackSteppingPrefix );
+    // Convert 32-bit signed integer (TInt32) view uid to TInt64.
+    TInt64 viewUid = static_cast< TInt64 >( aViewId.iViewUid.iUid );
+    buffer.AppendNum( viewUid );
+    
+	TLiwGenericParam state( KIRBSInParamState, TLiwVariant( buffer ) );
+	iInParamList->AppendL( state );
+
+    // Execute back event.
+	iBsInterface->ExecuteCmdL( KIRBSCmdHandleBackCommand, *iInParamList, *iOutParamList );
+    CleanupStack::PopAndDestroy(&buffer);
+
+    // Check if BS Service consumes the event.
+    TBool retVal = HandleResultL();
+
+	iInParamList->Reset();
+	iOutParamList->Reset();
+
+	return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::CIRBackSteppingServiceWrapper
+// ---------------------------------------------------------------------------
+//
+CIRBackSteppingServiceWrapper::CIRBackSteppingServiceWrapper()
+    {
+    // No implementation required.
+    }
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRBackSteppingServiceWrapper::ConstructL( TUid aUid )
+    {
+    // Create Service Handler and keep as long as access to BS Service needed.
+    iServiceHandler = CLiwServiceHandler::NewL();
+    // For convenience keep pointers to Service Handler param lists.
+	iInParamList = &iServiceHandler->InParamListL();
+	iOutParamList = &iServiceHandler->OutParamListL();
+
+    // Create AIW criteria.
+    RCriteriaArray criteriaArray;
+	CleanupResetAndDestroyPushL( criteriaArray );
+	CLiwCriteriaItem* criterion = CLiwCriteriaItem::NewLC(
+	    KLiwCmdAsStr,
+	    KIRBSInterface,
+	    KIRBSServiceID );
+	criterion->SetServiceClass( TUid::Uid( KLiwClassBase ) );
+	criteriaArray.AppendL( criterion );
+	CleanupStack::Pop( criterion );
+
+    // Attach AIW criteria.
+	iServiceHandler->AttachL( criteriaArray );
+	// Get BS Service interface.
+	iServiceHandler->ExecuteServiceCmdL( *criterion, *iInParamList, *iOutParamList );
+	CleanupStack::PopAndDestroy( &criteriaArray );
+
+	// Check if BS interface can be found from output params.
+	TInt pos( 0 );
+	iOutParamList->FindFirst( pos, KIRBSInterface );
+	if( KErrNotFound != pos )
+		{
+		// Extract BS interface from output params.
+		ASSERT( pos >= 0 && pos < iOutParamList->Count() );
+		iBsInterface = ( *iOutParamList )[pos].Value().AsInterface();	
+		}
+    
+    if ( !iBsInterface )
+        {
+        // No BS Service available.
+        User::Leave( KErrNotSupported );
+        }
+
+    // Initialize BS Service.
+    InitializeL( aUid );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::InitializeL
+// ---------------------------------------------------------------------------
+//
+void CIRBackSteppingServiceWrapper::InitializeL( const TUid aUid )
+    {
+    // Initialize BS Service.
+    iInParamList->Reset();
+	iOutParamList->Reset();
+
+	TLiwGenericParam appUid( KIRBSInParamAppUid, TLiwVariant( aUid.iUid ) );
+	iInParamList->AppendL( appUid );
+	
+	iBsInterface->ExecuteCmdL( KIRBSCmdInitialize, *iInParamList, *iOutParamList );
+
+    if ( !HandleResultL() )
+        {
+        // Initialize command was not consumed.
+        User::Leave( KErrArgument );
+        }
+
+	iInParamList->Reset();
+	iOutParamList->Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRBackSteppingServiceWrapper::HandleResultL
+// ---------------------------------------------------------------------------
+//
+TInt CIRBackSteppingServiceWrapper::HandleResultL()
+    {
+    TBool retVal( EFalse );
+    // Check if error can be found from outparams.
+    TInt posErr( 0 );
+	iOutParamList->FindFirst( posErr, LIW::EGenericParamError );
+	if( KErrNotFound != posErr )
+		{
+		// Error code found - extract and handle
+		ASSERT( posErr >= 0 && posErr < iOutParamList->Count() );
+		TInt errorCode( KErrNone );
+		( *iOutParamList )[posErr].Value().Get( errorCode );
+		User::LeaveIfError( errorCode );
+		}
+    // No errors found. Check if status info can be found from outparams.
+    TInt posStat( 0 );
+    iOutParamList->FindFirst( posStat, KIRBSOutParamStatusInfo );
+    if( KErrNotFound != posStat )
+		{
+		// Status info present - extract.
+		ASSERT( posStat >= 0 && posStat < iOutParamList->Count() );
+		( *iOutParamList )[posStat].Value().Get( retVal );
+		}
+	else
+	    {
+	    // No status info found.
+	    User::Leave( KErrNotFound );
+	    }
+    return retVal;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irbaseview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2008-2008 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 view from which other views are derived (with a few
+*                exceptions).
+*
+*/
+
+
+#include <akntitle.h>
+#include <stringloader.h>
+#include <eikbtgpc.h>
+#include <avkon.rsg>
+#include <internetradio.rsg>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irapplication.h"
+#include "IRIsdsWrapper.h"
+#include "irviewstack.h"
+#include "irsystemeventcollector.h" //For system events
+#include "irnowplayingwrapper.h"
+#include "irdialoglauncher.h"  
+#include "irisdspreset.h"
+
+// ---------------------------------------------------------
+// CIRBaseView::CIRBaseView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CIRBaseView::CIRBaseView()
+    {
+    IRLOG_DEBUG( "CIRBaseView::CIRBaseView" );
+    }
+
+// ---------------------------------------------------------
+// CIRBaseView::~CIRBaseView
+// Destructor
+// ---------------------------------------------------------
+//
+CIRBaseView::~CIRBaseView()
+    {
+    IRLOG_DEBUG( "CIRBaseView::~CIRBaseView - Entering" );
+	IRLOG_DEBUG( "CIRBaseView::~CIRBaseView - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRBaseView::ConstructL
+// EPOC default constructor can leave.
+// ---------------------------------------------------------
+//
+void CIRBaseView::ConstructL( TInt aResourceId )
+    {
+    IRLOG_DEBUG( "CIRBaseView::ConstructL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+    BaseConstructL( aResourceId );
+    iUi = REINTERPRET_CAST(CIRUi*,iEikonEnv->EikAppUi());
+	//get the instance of the Wrapper class from AppUi
+    iIsdsWrapper = appUi->GetWrapperInstance();
+    iNowPlayingWrapper = appUi->GetNowPlayingWrapperInstance();
+    IRLOG_DEBUG( "CIRBaseView::ConstructL - Exiting" );
+ 	}
+
+// ---------------------------------------------------------
+// CIRBaseView::EnableObserverL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+ void CIRBaseView::EnableObserverL( TInt aObservers )
+	{
+	IRLOG_DEBUG( "CIRBaseView::EnableObserverL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	if (aObservers & EIRSystemEventObserver )
+		{
+		appUi->SystemEventCollector().AddObserverL( this );
+		iObserverEnabled |= EIRSystemEventObserver;
+		}
+	IRLOG_DEBUG( "CIRBaseView::EnableObserverL - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRBaseView::DisableObserver
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIRBaseView::DisableObserver( TInt aObservers )
+    {
+    IRLOG_DEBUG( "CIRBaseView::DisableObserver - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+    if (aObservers & EIRSystemEventObserver )
+        {
+        appUi->SystemEventCollector().RemoveObserver( this );
+        iObserverEnabled &= ~EIRSystemEventObserver;
+        }
+    IRLOG_DEBUG( "CIRBaseView::DisableObserver - Exiting" );
+    }
+// ---------------------------------------------------------
+// CIRBaseView::SetTitleL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIRBaseView::SetTitleL( TInt aResourceId )
+    {
+    IRLOG_DEBUG( "CIRBaseView::SetTitleL - Entering" );
+    HBufC* title = StringLoader::LoadLC(aResourceId);
+    static_cast<CAknTitlePane*>( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) )->
+    							 SetTextL( *title );
+    CleanupStack::PopAndDestroy( title );
+    IRLOG_DEBUG( "CIRBaseView::SetTitleL - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRBaseView::SetTitleL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIRBaseView::SetTitleL( const TDesC& aTitleText )
+    {
+    IRLOG_DEBUG( "CIRBaseView::SetTitleL - Entering" );
+    static_cast<CAknTitlePane*>( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) )->
+    							 SetTextL( aTitleText );
+    IRLOG_DEBUG( "CIRBaseView::SetTitleL - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRBaseView::DoActivateL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIRBaseView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, TUid aCustomMessageId, const TDesC8& /*aCustomMessage*/ )
+	{
+	IRLOG_DEBUG( "CIRBaseView::DoActivateL - Entering" );
+	CEikStatusPane* statP = StatusPane();
+	if(iUi->IsLandscapeOrientation())
+		{
+		statP->SwitchLayoutL(R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL);
+		}
+	else
+		{
+		statP->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT);
+		}
+	if(aCustomMessageId==TUid::Uid(1))
+		{
+		return;
+		}
+	HandleViewStackL( aCustomMessageId);
+	IRLOG_DEBUG( "CIRBaseView::DoActivateL - Exiting" );    
+	}
+
+// ---------------------------------------------------------
+// CIRBaseView::DoDeactivate
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIRBaseView::DoDeactivate()
+    {
+    IRLOG_DEBUG( "CIRBaseView::DoDeactivate" );
+    // Nothing here at the moment
+    }
+
+
+// ---------------------------------------------------------
+// CIRBaseView::HandleCommandL
+// ---------------------------------------------------------
+//
+void CIRBaseView::HandleCommandL( TInt aCommand )
+    {
+    IRLOG_DEBUG( "CIRBaseView::HandleCommandL - Exiting" );   
+     	CIRUi* appUi = static_cast<	CIRUi*>(AppUi());
+    CIRViewStack& viewStack = appUi->ViewStack();
+    switch ( aCommand )
+        {
+       	case EIRBack:
+        case EAknSoftkeyBack:
+        	{
+            // Check if Back Stepping Service consumes the command.
+            if ( !static_cast< CIRUi* >( AppUi() )->ForwardBackCommandToBsWrapperL() )
+                {
+                // Command not consumed by Back Stepping Service, handle here.
+                appUi->ActivateLocalViewL( viewStack.Peek() );
+                }
+        	}
+         	break;
+        default:
+            appUi->HandleCommandL(aCommand);
+            break;
+        }
+    IRLOG_DEBUG( "CIRBaseView::HandleCommandL - Exiting" );   
+    }
+
+// ---------------------------------------------------------
+// CIRBaseView::HandleForegroundEventL
+// ---------------------------------------------------------
+//
+void CIRBaseView::HandleForegroundEventL( TBool aForeground )
+    {
+    IRLOG_DEBUG( "CIRBaseView::HandleForegroundEventL - Entering" );   
+    CAknView::HandleForegroundEventL(aForeground);
+    IRLOG_DEBUG( "CIRBaseView::HandleForegroundEventL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------
+// From class MIRSystemEventObserver.
+// CIRBaseView::HandleSystemEventL
+// ---------------------------------------------------------
+//
+void CIRBaseView::HandleSystemEventL(TIRSystemEventType /*aEventType*/)
+	{
+	IRLOG_DEBUG( "CIRBaseView::HandleSystemEventL" );
+	}
+
+// ---------------------------------------------------------
+// From class MIRSystemEventObserver.
+// CIRBaseView::HandleSystemEventL
+// ---------------------------------------------------------
+//
+void CIRBaseView::HandleViewStackL(TUid aCustomMessageId )
+    {
+    IRLOG_DEBUG( "CIRBaseView::HandleViewStackL - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+    CIRViewStack& viewStack = appUi->ViewStack();
+    
+    if( viewStack.Peek() == Id() && !(aCustomMessageId==KHistoryLaunch ) 
+                                 && !(aCustomMessageId==KMainViewLaunch)
+                                 && !(aCustomMessageId==KNowPlayingLaunch)
+                                 && !(aCustomMessageId==KNowPlayingFrmMainView))
+        {
+	    viewStack.Pop();
+        }
+    else if( appUi->ActiveView() != Id() )
+        {
+        viewStack.PushL( appUi->ActiveView() );
+        }
+    else
+        {
+        // DONE
+        }
+    IRLOG_DEBUG( "CIRBaseView::HandleViewStackL - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRBaseView::GetCurrentFocus
+// ---------------------------------------------------------
+//
+TInt CIRBaseView::GetCurrentFocus()
+	{
+	IRLOG_DEBUG( "CIRBaseView::GetCurrentFocus" );
+	return iCurrentFocus;
+	}
+
+// ---------------------------------------------------------
+// CIRBaseView::GetCurrentTopItemInstance
+// ---------------------------------------------------------
+//
+TInt CIRBaseView::GetCurrentTopItem()
+	{
+	IRLOG_DEBUG( "CIRBaseView::GetCurrentTopItem" );
+	return iTopItemIndex;
+	}
+
+// ---------------------------------------------------------
+// CIRBaseView::SetCurrentFocus
+// ---------------------------------------------------------
+//
+void CIRBaseView::SetCurrentFocus(TInt aCurrentFocus)
+	{
+	IRLOG_DEBUG( "CIRBaseView::SetCurrentFocus - Entering" );
+	iCurrentFocus = aCurrentFocus;
+	IRLOG_DEBUG( "CIRBaseView::SetCurrentFocus - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRBaseView::SetCurrentTopItemInstance
+// ---------------------------------------------------------
+//
+void CIRBaseView::SetCurrentTopItem(TInt aTopItemIndex)
+	{
+	IRLOG_DEBUG( "CIRBaseView::SetCurrentTopItem - Entering" );
+	iTopItemIndex = aTopItemIndex;
+	IRLOG_DEBUG( "CIRBaseView::SetCurrentTopItem - Exiting" );
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/ircategoryview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,894 @@
+/*
+* Copyright (c) 2004 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:  Category view class
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 9, Thu Aug 18 14:32:00 2008 by Rohit
+*  Ref:
+*  Fixed bug : Stations view is displaying correst results but previous genre/lang label
+*  Modified ResponseL() to remove extra decrement of currentIndex.
+*
+*  Version: 2, Thurs March 20 15:50:00 2008 by Prabina
+*  Ref:
+*  Created new views for the Station Directory Views , Enabled the Touch toolbar functionality , 
+*  Help Options enabled
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations , 
+*  Handled Single/Double tapping on the list itmes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Mon March 24 18:00:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for adding different stations to favourites list , Added Wait dialog for adding to favourites
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 6, Tues March 29 10:30:00 2008 by Prabina
+*  Ref:
+*  Category View Container Derived from CCoeControl
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+
+#include <akniconarray.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <psserv.h>
+#include <hlplch.h>
+#include <aknnotewrappers.h> 
+#include <eikenv.h> 
+#include <internetradio.rsg>
+ 
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "ircategoryview.h"
+#include "ircategoryviewcontainer.h"
+#include "irstationsview.h"
+#include "irapplication.h"
+#include "irisdswrapper.h"
+#include "irsettings.h"
+#include "irnowplayingwrapper.h"
+#include "irimageconverter.h"
+#include "irlogodownloadengine.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irnetworkcontroller.h"
+#include "irdialoglauncher.h"
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CIRCategoryView::CIRCategoryView() 
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRCategoryView::CIRCategoryView():iCallRequestPending(EFalse) 
+    {
+	IRLOG_DEBUG( "CIRCategoryView::CIRCategoryView" );
+    iCategoryReqMade = EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::ConstructL()
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRCategoryView::ConstructL - Entering" );
+    CIRBaseView::ConstructL( R_IR_CATEGORY );
+	SetCurrentFocus(0);
+	iFilteredIndex = 0;
+    iFirstTimeLaunchFlag= EFalse;
+   	iRequestPending = EFalse;
+
+	IRLOG_DEBUG( "CIRCategoryView::ConstructL - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRCategoryView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRCategoryView* CIRCategoryView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRCategoryView::NewL" );
+    CIRCategoryView* self = CIRCategoryView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRCategoryView::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryView* CIRCategoryView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRCategoryView* CIRCategoryView::NewLC()
+    {
+	IRLOG_DEBUG( "CIRCategoryView::NewLC - Entering" );
+    CIRCategoryView* self = new( ELeave ) CIRCategoryView;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+	IRLOG_DEBUG( "CIRCategoryView::NewLC - Exiting" );
+    return self;
+    }
+
+    
+// ---------------------------------------------------------------------------
+// CIRCategoryView::~CIRCategoryView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRCategoryView::~CIRCategoryView()
+    {
+	IRLOG_DEBUG( "CIRCategoryView::~CIRCategoryView - Entering" );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    iFilteredIndex = 0;
+	IRLOG_DEBUG( "CIRCategoryView::~CIRCategoryView - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// TUid CIRCategoryView::Id() const
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRCategoryView::Id() const
+    {
+    IRLOG_DEBUG( "CIRCategoryView::Id" );
+    return KIRCategoryViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::DoActivateL( )
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::DoActivateL( const TVwsViewId& aPrevViewId, 
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+    {
+	IRLOG_DEBUG( "CIRCategoryView::DoActivateL - Entering" );
+	TInt customMessageId = aCustomMessageId.iUid;
+	if(customMessageId == 1)
+		{
+		SetCurrentFocus(0);
+		SetCurrentTopItem(0);	
+		iFirstTimeLaunchFlag= ETrue;
+		}
+	aCustomMessageId.iUid = 0;
+	
+	////////////////////////////////////////////////////////////
+
+	if(iCategoryReqMade)
+		{
+		if(iContainer)
+			{
+		    delete iContainer;
+		    iContainer = NULL;
+			}
+	    iCategoryReqMade = EFalse;
+		}
+	
+	////////////////////////////////////////////////////////////
+	
+    if ( !iContainer )
+        {
+ 	    iContainer = CIRCategoryViewContainer::NewL( *this, ClientRect() );
+ 	    iContainer->CreateListBoxL();
+        AppUi()->AddToViewStackL( *this, iContainer);
+        }
+    else
+        {
+		// we must notify a resource change in order to update the skin context
+		// This is a flaw of CEikFormattedCellListBox
+		iContainer->SetRect(ClientRect());
+        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+        AppUi()->AddToViewStackL( *this, iContainer);
+        }
+
+
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+  	SetStatusPaneTextL();
+    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    HandleStatusPaneSizeChange();
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+
+    EnableObserverL(EIRSystemEventObserver);
+	IRLOG_DEBUG( "CIRCategoryView::DoActivateL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::DoDeactivate()
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::DoDeactivate()
+    {
+	IRLOG_DEBUG( "CIRCategoryView::DoDeactivate - Entering" );
+    if(&(iUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+    if ( iContainer )
+        {
+        if(iContainer->iCategoryListBox && iContainer->iSearchTextBox)
+	        {
+			iContainer->iSearchTextBox->GetSearchText(iContainer->iFindString);
+			if(iContainer->iSearchTextBox && iContainer->iFindString.Length()!=0)
+				{
+				if(iIndex)
+					{
+					SetCurrentFocus(iIndex);
+					}
+				else
+					{
+					iContainer->Comparestrings();
+					SetCurrentFocus(iIndex);
+					}
+				}
+			else
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				}
+			SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+	        }
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        }
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+        
+    iFirstTimeLaunchFlag= EFalse;
+	IRLOG_DEBUG( "CIRCategoryView::DoDeactivate - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::HandleCommandL( TInt aCommand )
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRCategoryView::HandleCommandL - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	iCommand = aCommand;
+	switch(aCommand)
+		{
+		case ESelectCmd:
+			{
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				break;			
+				}
+			else if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iRequestIssued = ETrue;	
+				TInt currentIndex = iContainer->GetCurrentItemIndex();
+				if (currentIndex == 0 )
+					{
+					if (iUi->iIsdsWrapper->iCatBannerUrl && !iContainer->GetLogoNotSupported())
+						{
+						if(iUi->iIsdsWrapper->iCatClickThroughUrl)
+							{
+							if(iUi->iIsdsWrapper->iCatClickThroughUrl->Length() != 0)
+								{
+								iContainer->OpenUrlL(*iUi->iIsdsWrapper->iCatClickThroughUrl);
+								}
+							}
+						else
+							{
+							iUi->iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+												(R_IRAPP_ERROR_URL_UNAVAILABLE,ETrue);
+							}
+
+						}
+					else
+						{
+						DoChannelRequestL();			
+						}
+					}
+				else
+					{
+					DoChannelRequestL();		
+					}
+				}	
+
+			}
+		break;
+		//Activate NowPlaying view.	
+		case EGotoNowPlayingViewCmd:
+			{ 
+			appUi->SetHistory(EFalse);
+			appUi->SavePrevIDL(KIRCategoryViewId, aCommand); 			
+			}
+		break;
+
+	//Activate settings view.	
+		case ESettingsCmd:
+			{
+			AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+			}
+			break;
+		case EAdvertisementUrl:
+			{
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				break;
+				}
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				if (iUi->iIsdsWrapper->iCatBannerUrl && !iContainer->GetLogoNotSupported())
+					{
+					if(iUi->iIsdsWrapper->iCatClickThroughUrl)
+						{
+						if(iUi->iIsdsWrapper->iCatClickThroughUrl->Length() != 0)
+							{
+							iContainer->OpenUrlL(*iUi->iIsdsWrapper->iCatClickThroughUrl);
+							}
+						}
+					else
+						{
+						iUi->iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+							(R_IRAPP_ERROR_URL_UNAVAILABLE,ETrue);
+						}
+					
+					}
+				}
+			}
+		break;
+			
+		case EHelpCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
+				}
+			}
+		break;
+		default:
+			{
+			CIRBaseView::HandleCommandL( aCommand );
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryView::HandleCommandL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::SetStatusPaneTextL()
+// Sets the title pane of the search results view
+// ---------------------------------------------------------------------------
+//
+    
+void CIRCategoryView:: SetStatusPaneTextL()
+ 	{
+	IRLOG_DEBUG( "CIRCategoryView::SetStatusPaneTextL - Entering" );
+	switch (iUi->iCategoryViewTitleType)
+		{
+		// if the browse by genre's is selected.
+		case EGenreData:
+			{
+			SetTitleL( R_IRAPP_GENRE_STATLIST_TITLE );
+			}
+			break;
+		// if the browse by language's is selected.	
+		case ELanguageData:
+			{
+			SetTitleL( R_IRAPP_LANGUAGE_STATLIST_TITLE );
+			}
+			break;
+		// if the browse by country is selected.	
+		case ECountryData:
+			{
+			SetTitleL( R_IRAPP_COUNTRY_STATLIST_TITLE );
+			}
+			break;
+		// if top station's is selected.	
+		case ETopStationData:
+			{
+			SetTitleL( R_IRAPP_TOP_STATLIST_TITLE );
+			}
+			break;
+		default:
+			{
+			//No implementation
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryView::SetStatusPaneTextL - Exiting" );
+	}
+ 	
+    
+// ---------------------------------------------------------------------------
+// CIRCategoryView::DoChannelRequestL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::DoChannelRequestL()
+	{
+	IRLOG_DEBUG( "CIRCategoryView::DoChannelRequestL - Entering" );
+	iLoadingCancelled = EFalse;
+	TInt currentIndex  = iContainer->GetCurrentItemIndex();
+	
+	if(iContainer->iSearchTextBox)
+		iContainer->iSearchTextBox->GetSearchText(iContainer->iFindString);
+	if(iContainer->iSearchTextBox && iContainer->iFindString.Length()!=0)
+		{
+		iFilteredIndex = currentIndex;
+		iContainer->Comparestrings();
+		currentIndex = iIndex;
+		SetCurrentFocus(currentIndex);
+		if(iContainer->GetLogoNotSupported())
+			{
+			currentIndex = 	currentIndex +1;
+			}
+		iIsdsWrapper->IsdsChannelRequestL(this,currentIndex);
+		iUi->iStationsView->iResultsReqMade = ETrue;
+		}
+	else
+		{
+		if(iContainer->GetLogoNotSupported())
+			{
+			currentIndex = 	currentIndex +1;
+			}
+		iIsdsWrapper->IsdsChannelRequestL(this,currentIndex);
+		iUi->iStationsView->iResultsReqMade = ETrue;
+		}
+	IRLOG_DEBUG( "CIRCategoryView::DoChannelRequestL - Exiting" );
+
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::ResponseL()
+// Activates the Stations view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::ResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRCategoryView::ResponseL - Entering" );
+	iRequestIssued = EFalse;	
+	CIRUi* appUi = static_cast<	CIRUi*>(AppUi());
+	if(!iLoadingCancelled )
+		{
+		
+		iUi->iStationsViewTitleString.Copy(KNullDesC);	
+		iUi->iStationsViewTitleString.Close();
+		// Gets the item text if the conditions above are met.
+		if(iContainer->iSearchTextBox && iContainer->iFindString.Length()!=0)
+			{
+			TPtrC16 currentItemText = iContainer->iItemArray->MdcaPoint(iIndex);//iContainer->GetCurrentItemIndex()
+
+			// We have to find the position of tabs to decide the components
+			// available in the item text (icon, heading and text).
+			TInt tabPosition1 = currentItemText.Locate('\t');
+			TInt tabPosition2 = currentItemText.Mid(tabPosition1 + 1).Locate('\t');
+
+
+			TInt itemDataLength = tabPosition2 - tabPosition1;
+			iUi->iStationsViewTitleString.Create(itemDataLength);
+			iUi->iStationsViewTitleString.Copy(currentItemText.Mid((tabPosition1+1),itemDataLength));
+			}
+		else
+			{
+			TInt currentIndex = iContainer->GetCurrentItemIndex();
+
+			TPtrC16 currentItemText = iContainer->iItemArray->MdcaPoint(currentIndex);
+
+			// We have to find the position of tabs to decide the components
+			// available in the item text (icon, heading and text).
+			TInt tabPosition1 = currentItemText.Locate('\t');
+			TInt tabPosition2 = currentItemText.Mid(tabPosition1 + 1).Locate('\t');
+
+
+			TInt itemDataLength = tabPosition2 - tabPosition1;
+			iUi->iStationsViewTitleString.Create(itemDataLength);
+			iUi->iStationsViewTitleString.Copy(currentItemText.Mid((tabPosition1+1),itemDataLength));
+			}
+		    TBuf8<2> dummy;
+			TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRStationsViewId);
+		
+		
+		if(appUi->IsForeground())
+			{
+			AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+			appUi->iActivationPending = KNullUid ;	
+			}
+		else
+			{
+			appUi->iActivationPending =KIRStationsViewId;	
+			}
+	
+		}
+		
+	IRLOG_DEBUG( "CIRCategoryView::ResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::PresetResponseL()
+// Issues Request to listen to a particular channel 
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::PresetResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRCategoryView::PresetResponseL - Entering" );
+	//No Implementation Required
+	IRLOG_DEBUG( "CIRCategoryView::PresetResponseL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::ErrorL()
+// Handles the errors from Isds 
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRCategoryView::ErrorL - Entering" );
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;	
+		}
+	IRLOG_DEBUG( "CIRCategoryView::ErrorL - Exiting" );
+
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRCategoryView::DynInitMenuPaneL - Entering" );
+	
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_MENU_CATEGORY)
+			{				
+			// Now Playing option
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryView::DynInitMenuPaneL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::HandleStatusPaneSizeChange()
+    {
+	IRLOG_DEBUG( "CIRCategoryView::HandleStatusPaneSizeChange - Entering" );
+    CIRBaseView::HandleStatusPaneSizeChange();
+
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+	IRLOG_DEBUG( "CIRCategoryView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::HandleForegroundEventL( TBool aForeground )
+	{
+	IRLOG_DEBUG( "CIRCategoryView::HandleForegroundEventL - Entering" );
+
+	CIRBaseView::HandleForegroundEventL( aForeground );
+	if ( aForeground )
+		{
+		if ( iContainer )
+			{
+			iContainer->DrawDeferred();
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryView::HandleForegroundEventL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRCategoryView::PresetLogoDownloadedL()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRCategoryView::PresetLogoDownloadedL - Entering" );
+	if(iContainer)
+		{
+		iContainer->PresetLogoDownloadL(aPreset);
+		}
+	IRLOG_DEBUG( "CIRCategoryView::PresetLogoDownloadedL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRCategoryView::PresetLogoDownloadError()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::PresetLogoDownloadError(CIRIsdsPreset* )
+	{
+	IRLOG_DEBUG( "CIRCategoryView::PresetLogoDownloadError - Entering" );
+	//call the API of stations view container
+	if(iContainer)
+		{
+		TRAP_IGNORE(iContainer->HandleLogoErrorL())
+		}
+	IRLOG_DEBUG( "CIRCategoryView::PresetLogoDownloadError - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRCategoryView::LogoRequestL()
+// called from the container				
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryView::AdRequestL()
+	{
+	IRLOG_DEBUG( "CIRCategoryView::LogoRequestL - Entering" );
+	if(iContainer)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+		GetLogoDownloadEngine()->SendRequestL(iContainer->iAdvPreset,this);
+		}
+	IRLOG_DEBUG( "CIRCategoryView::LogoRequestL - Exiting" );
+	}
+// ---------------------------------------------------------
+// CIRCategoryView::SetActualFilteredItemIndex ()
+// Sets the actual index of the station
+// ---------------------------------------------------------
+//
+void CIRCategoryView::SetActualFilteredItemIndex(TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRCategoryView::SetListBoxMarkedCount - Entering." );
+	iIndex = aIndex;
+	IRLOG_DEBUG( "CIRCategoryView::SetListBoxMarkedCount - Exiting." );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRCategoryView::GetFilteredIndex()
+// Returns the filtered Index				
+// ---------------------------------------------------------------------------
+//
+TInt CIRCategoryView::GetFilteredIndex()
+	{
+	IRLOG_DEBUG( "CIRCategoryView::GetFilteredIndex - Entering" );
+	return iFilteredIndex;
+	}
+// ---------------------------------------------------------
+// CIRCategoryView::GetFirstLaunchFlag ()
+// returns whether is launching for the first time /coming from other view
+// which is activated from this view.
+// ---------------------------------------------------------
+//
+TBool CIRCategoryView::GetFirstLaunchFlag()
+	{
+	IRLOG_DEBUG( "CIRStationsView::GetFirstLaunchFlag - Entering." );
+	IRLOG_DEBUG( "CIRStationsView::GetFirstLaunchFlag - Exiting." );
+	return iFirstTimeLaunchFlag;
+	}
+// ---------------------------------------------------------
+// CIRCategoryView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRCategoryView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRCategoryView::::HandleSystemEventL - Entering");
+	
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if(!iCallRequestPending && iCommand==ESelectCmd)
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if(iCallRequestPending && iCommand==ESelectCmd)
+				{
+				iCallRequestPending = EFalse;
+				HandleCommandL( iCommand );
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryView::HandleSystemEventL - Exiting." );
+	}	
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRCategoryView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRCategoryView::NotifyActiveNetworkObserversL - Entering" );
+	IRRDEBUG2("CIRCategoryView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+			if(iContainer)
+				{
+				TBool reIssueRequest = EFalse;
+				if(iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iRequestIssued)
+						{
+						iRequestIssued=EFalse;
+						reIssueRequest = ETrue;	
+						}
+					}
+					
+				if(iRequestPending || reIssueRequest )
+					{
+					iRequestPending=EFalse;
+					TInt currentIndex = iContainer->GetCurrentItemIndex();
+					if (currentIndex == 0 )
+						{
+						if (iUi->iIsdsWrapper->iCatBannerUrl && !iContainer->GetLogoNotSupported())
+							{
+							if(iUi->iIsdsWrapper->iCatClickThroughUrl)
+								{
+								if(iUi->iIsdsWrapper->iCatClickThroughUrl->Length() != 0)
+									{
+									iContainer->OpenUrlL(*iUi->iIsdsWrapper->iCatClickThroughUrl);
+									}
+								}
+							}
+						else
+							{
+							iRequestIssued=ETrue;
+							DoChannelRequestL();			
+							}
+						}
+					else
+						{
+						iRequestIssued=ETrue;
+						DoChannelRequestL();		
+						}
+					}
+				if(iUi->iNetworkController->IsHandingOverConnection())
+					{
+					ResetPendingRequests(EFalse);			
+					}
+				}
+			}
+		}
+		
+    IRRDEBUG2("CIRCategoryView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+	
+	IRLOG_DEBUG( "CIRCategoryView::NotifyActiveNetworkObserversL - Exiting" );
+	}
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRCategoryView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	iRequestIssued = aValue;	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/ircategoryviewcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1019 @@
+/*
+* Copyright (c) 2004 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:  Container class for Category view
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Thurs March 20 15:50:00 2008 by Prabina
+*  Ref:
+*  Created new views for the Station Directory Views , Enabled the Touch toolbar functionality , 
+*  Help Options enabled
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations , 
+*  Handled Single/Double tapping on the list itmes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Mon March 24 18:00:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for adding different stations to favourites list , Added Wait dialog for adding to favourites
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 6, Tues March 29 10:30:00 2008 by Prabina
+*  Ref:
+*  Category View Container Derived from CCoeControl
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 7, may 7 Wed 08:35:00 2008 by Neelima
+*  Removed change Resoultion function.
+*  changed code in HandleResourcechange and Size changed  for handling layout changes 
+*  in dynamic filtering
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <akniconarray.h>
+#include <aknlists.h>
+#include <aknview.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <eikenv.h>
+#include <apgcli.h>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "ircategoryviewcontainer.h"
+#include "irapplication.h"
+#include "ircategoryView.h"
+#include "iraap.hlp.hrh"
+#include "irisdswrapper.h"
+#include "irimageconverter.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irlogodownloadengine.h"
+#include <aknsbasicbackgroundcontrolcontext.h> 
+#include "irfilteredmodel.h"
+#include "mirlistboxarray.h"
+#include "iradvertisinglistbox.h"
+#include "irlayoututils.h"
+
+/** Mime type when opening web browser */
+_LIT8( KIRHtmlMimeType, "text/html" );
+/** Browser prefix: See browser API specification */
+_LIT( KBrowserPrefix, "4 " );
+
+const TInt KAdvSize = 30;
+const TSize KLogoSize = TSize(320,350);
+
+#define KCONTROLSCOUNT 0
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CIRCategoryViewContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRCategoryViewContainer* CIRCategoryViewContainer::NewL( CIRCategoryView& aCtaegoryView,
+					 const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRCategoryViewContainer::NewL" );
+    CIRCategoryViewContainer* self = CIRCategoryViewContainer::NewLC( aCtaegoryView, aRect );
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRCategoryViewContainer::NewL - Exiting" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRCategoryViewContainer::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRCategoryViewContainer* CIRCategoryViewContainer::NewLC( CIRCategoryView& aCtaegoryView,
+					 const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRCategoryViewContainer::NewLC" );
+    CIRCategoryViewContainer* self = new ( ELeave ) CIRCategoryViewContainer(aCtaegoryView);
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    IRLOG_DEBUG( "CIRCategoryViewContainer::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::CIRCategoryViewContainer()  
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRCategoryViewContainer::CIRCategoryViewContainer(CIRCategoryView& aCtaegoryView):
+                                                   iCategoryView(aCtaegoryView)
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CIRCategoryViewContainer" );
+	iFilteredFlag = EFalse;
+	}
+    
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::ConstructL( const TRect& aRect)
+    {
+	IRLOG_DEBUG( "CIRCategoryViewContainer::ConstructL - Entering" );
+    CreateWindowL();
+    SetRect(aRect);
+	
+	iBgContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgScreen , aRect, ETrue); 
+
+	iAdPresent = EFalse;
+    iConverter = CIRImageConverter::NewL();
+	iConverter->EnableAnimations( EFalse );
+	iConverter->SetObserver( this );
+
+	iCurrentItemConverter = CIRImageConverter::NewL();
+	iCurrentItemConverter->SetObserver( this );
+   
+    // Added For Dynamic Filtering
+    iFilteredModel=new(ELeave) CIRFilteredModel;
+    iFilteredModel->ConstructL();
+
+   	iListBoxArray = MIRListBoxArray::NewL();
+
+	IRLOG_DEBUG( "CIRCategoryViewContainer::ConstructL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::CreateListBoxL()
+// Creates ListBox depending upon the presence of Advertisement
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::CreateListBoxL()
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CreateListBoxL - Entering" );
+	if (iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl)
+		{
+		if((iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl->Length()) != 0)
+			{
+			iAdPresent = ETrue;
+			if(iAdvPreset)
+				{
+				delete iAdvPreset;
+				iAdvPreset = NULL;
+				}
+			iAdvPreset=CIRIsdsPreset::NewL();
+			iAdvPreset->SetChannelType(1);
+			iAdvPreset->SetImgUrl(*iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl);
+			CreateCustomListBoxL();
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			iCategoryView.SetCurrentFocus(0);	
+			iLogoDownloadError	= ETrue;
+			iCategoryView.AdRequestL();
+			}
+		else
+			{
+		    iCategoryListBox = new (ELeave) CIRCategoryAdvertisingListBox;
+			CreateCustomListBoxL();
+			iCategoryView.SetCurrentFocus(0);	
+			iLogoDownloadError	= ETrue;
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			}
+		}  
+	else
+		{
+		if(iCategoryView.iUi->iIsdsWrapper->iCatBannerTag)
+			{
+			iCategoryView.SetCurrentFocus(0);	
+			iLogoDownloadError	= ETrue;
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			}
+	    iCategoryListBox = new (ELeave) CIRCategoryAdvertisingListBox;
+		CreateCustomListBoxL();	
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CreateListBoxL - Exiting" );
+
+	}
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::CreateCustomListBoxL()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::CreateCustomListBoxL()
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CreateCustomListBoxL - Entering" );
+	if(iAdPresent)
+		{
+	    iCategoryListBox = new (ELeave) CIRCategoryAdvertisingListBox;
+		}
+	//For displaying Ads
+	iCategoryListBox->SetContainerWindowL(*this);
+
+	// Added For Dynamic Filtering
+	iCategoryListBox->ConstructL (this,EAknListBoxSelectionList,iFilteredModel);
+
+	// Construct list.
+	TResourceReader rr;
+	iCoeEnv->CreateResourceReaderLC( rr, R_IR_SEARCHRESULTS_LIST );
+	ConstructFromResourceL( rr );
+	CleanupStack::PopAndDestroy(); // rr
+
+
+	iItemArray = static_cast<CDesCArray*>( iCategoryListBox->Model()->ItemTextArray());
+    iListBoxArray->SetListArray(iItemArray);
+    
+    iFilteredModel->SetListArray(iListBoxArray); 
+	if (iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl)
+		{
+		// Added For Dynamic Filtering
+		if(iAdvString)
+			{
+			delete iAdvString;
+			iAdvString = NULL;	
+			}
+		iAdvString = HBufC::NewL(KAdvSize);
+		TPtr ptr(iAdvString->Des());
+		_LIT(KTabFormat,"\t \t ");
+		ptr.Copy(KTabFormat);
+
+		iFilteredModel->SetAdvFlag(iAdPresent,*iAdvString);
+		iCategoryListBox->SetListItemFormat( iAdvString );
+		}
+	iCategoryListBox->SetRect( Rect());
+	iCategoryListBox->ActivateL();
+
+	iCategoryListBox->CreateScrollBarFrameL( ETrue );
+	iCategoryListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+	CEikScrollBarFrame::EAuto);
+	iCategoryListBox->SetListBoxObserver( this );  
+	UpdateCategoryViewL(iCategoryView.iIsdsWrapper->iCategoryData);
+	iCategoryListBox->ItemDrawer()->FormattedCellData()->SetMarqueeParams
+									(KLoop, KScrollAmount, KScrollDelay, KInterval);
+	iCategoryListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CreateCustomListBoxL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::~CIRCategoryViewContainer()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRCategoryViewContainer::~CIRCategoryViewContainer()
+    {
+	IRLOG_DEBUG( "CIRCategoryViewContainer::~CIRCategoryViewContainer - Entering" );
+	
+	delete iConverter;
+	delete iCurrentItemConverter;
+	
+    if(iCategoryListBox)
+		{
+		delete iCategoryListBox;
+		iCategoryListBox = NULL;
+		}
+	if(iSearchTextBox)
+		{
+		delete iSearchTextBox;
+		iSearchTextBox = NULL;
+		}
+	if(iAdvPreset)
+		{
+		delete iAdvPreset;
+		iAdvPreset = NULL;
+		}
+	if(iAdBitmap)
+		{
+		delete iAdBitmap;
+		iAdBitmap = NULL;	
+		}
+	if(iBgContext)
+		{
+		delete iBgContext;
+		iBgContext = NULL;	
+		}
+	if(iAdvString)
+		{
+		delete iAdvString;
+		iAdvString = NULL;	
+		}
+    if(iListBoxArray )
+	    {
+	    delete iListBoxArray ;
+	    iListBoxArray = NULL;	
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::~CIRCategoryViewContainer - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// TKeyResponse CIRCategoryViewContainer::OfferKeyEventL()
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things 
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRCategoryViewContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                                       TEventCode aType )
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::OfferKeyEventL - Entering" );
+	TInt currentIndex = 0;
+	TKeyResponse keyResp( EKeyWasNotConsumed );
+	switch ( aKeyEvent.iCode )
+		{
+		case EKeyLeftArrow: // fall-through intended here
+		case EKeyRightArrow:
+			{
+			keyResp = EKeyWasNotConsumed;
+			DrawNow();
+			break;
+			}
+		case EKeyOK:        
+			{
+			currentIndex = GetCurrentItemIndex();
+			if (currentIndex == 0)  
+				{
+				if (iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl 
+								&& !iLogoDownloadError)
+					{
+				 	if(iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl->Length() != 0)
+					 	{
+					 	iCategoryView.HandleCommandL(EAdvertisementUrl);
+					 	}
+				 	}
+			 	 else
+				 	{
+			        iCategoryView.HandleCommandL(ESelectCmd);
+			 	 	}
+			 	 }
+			 else
+				 {
+				 iCategoryView.HandleCommandL(ESelectCmd);				 	
+				 }
+			keyResp = EKeyWasConsumed;
+			break;
+			}
+
+		default:
+			{
+			if(iCategoryListBox)
+				{
+				if ( iSearchTextBox )
+					{
+					iFilteredFlag = ETrue;
+					keyResp = iSearchTextBox->OfferKeyEventL( aKeyEvent, aType );
+					if( keyResp == EKeyWasNotConsumed )
+						{
+						keyResp = iCategoryListBox->OfferKeyEventL( aKeyEvent, aType );
+						}
+					CAknFilteredTextListBoxModel* model = 
+					static_cast<CAknFilteredTextListBoxModel*>( iCategoryListBox->Model() );
+					model->Filter()->HandleOfferkeyEventL();					
+					TInt filterModelCount = iFilteredModel->NumberOfItems();	
+					if(filterModelCount == 0 && 
+					!(iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl))
+						{
+						HBufC* noMatchesTextResource = 
+						StringLoader::LoadLC(R_IRAPP_STATIONLIST_NOMATCHES);
+						iCategoryListBox->View()->SetListEmptyTextL(*noMatchesTextResource);
+						CleanupStack::PopAndDestroy( noMatchesTextResource );
+						}
+					iSearchTextBox->GetSearchText(iFindString);
+					if(iFindString.Length()!=0)
+						{
+						if(!iLogoDownloadError && 
+						iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl
+						&& filterModelCount > 1 )
+							{
+							iCategoryListBox->SetCurrentItemIndex(1);
+							}
+						else
+							{
+							iCategoryListBox->SetCurrentItemIndex(0);	
+							}
+						}
+					}
+				}
+			if(	aKeyEvent.iScanCode==EStdKeyBackspace)
+				{
+				if(iSearchTextBox)
+					{
+					iSearchTextBox->GetSearchText(iFindString);
+					if(iFindString.Length()==0)
+						{
+						iFilteredFlag = EFalse;
+						}
+					}
+				}
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::OfferKeyEventL - Exiting" );
+	return keyResp; 
+	}
+
+// ---------------------------------------------------------------------------
+// From class MEikListBoxObserver.
+// List box event handler.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+    {
+	IRLOG_DEBUG( "CIRCategoryViewContainer::HandleListBoxEventL - Entering" );
+	TInt currentIndex = 0;
+    switch ( aEventType )
+        {
+        case EEventEnterKeyPressed:/**  Keypress event. */
+        case EEventItemDoubleClicked:
+			{
+			currentIndex = GetCurrentItemIndex();
+			if (currentIndex == 0)  
+				{
+				 if (iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl && !iLogoDownloadError)
+				 	{
+				 	if(iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl->Length() != 0)
+					 	{
+					 	iCategoryView.HandleCommandL(EAdvertisementUrl);
+					 	}
+				 	}
+			 	 else
+				 	{
+					iCategoryView.SetCurrentFocus(GetCurrentItemIndex());
+					iCategoryView.HandleCommandL(ESelectCmd);
+				 	}
+			 	}
+			else
+				{
+				iCategoryView.SetCurrentFocus(GetCurrentItemIndex());
+				iCategoryView.HandleCommandL(ESelectCmd);
+				}
+
+			}
+		break;
+        default:
+        break;
+        }
+	IRLOG_DEBUG( "CIRCategoryViewContainer::HandleListBoxEventL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::Draw()
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+	IRLOG_DEBUG( "CIRCategoryViewContainer::Draw - Entering" );
+    CWindowGc& gc = SystemGc();
+    
+    if(iCategoryListBox)
+	    {
+	   	iCategoryListBox->SetGC(gc);
+	   	iCategoryListBox->SetControlFlag(ETrue);
+	    }
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+	
+    // draw background skin first. 
+ 	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+  	
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+	AknsDrawUtils::DrawBackground ( skin, iBgContext, this, gc, TPoint(0,0),
+	                                TRect(TPoint(0,0),clientRect.iBr), KAknsDrawParamDefault  );	
+
+	IRLOG_DEBUG( "CIRCategoryViewContainer::Draw - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::GetHelpContext()
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+	IRLOG_DEBUG( "CIRCategoryViewContainer::GetHelpContext - Entering" );
+    if( iCategoryView.iUi->iCategoryViewTitleType == CIRCategoryView::EGenreData )
+        {
+        aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_GENRE );
+        }
+    else if( iCategoryView.iUi->iCategoryViewTitleType == CIRCategoryView::ELanguageData )
+        {
+        aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_LANGUAGE );
+        }
+    else if( iCategoryView.iUi->iCategoryViewTitleType == CIRCategoryView::ECountryData )
+        {
+        aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_COUNTRY );
+        }
+    else
+        {
+        // NOP
+        }
+
+	IRLOG_DEBUG( "CIRCategoryViewContainer::GetHelpContext - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::UpdateSearchResultsViewL()
+// updates the search results data to the search results list
+// ---------------------------------------------------------------------------
+//    
+void CIRCategoryViewContainer::UpdateCategoryViewL(CDesCArray* aCategory)
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::UpdateCategoryViewL - Entering" );
+	CDesCArray* category = aCategory; 
+	TInt categoryDataCount = aCategory->Count();           
+	for(TInt i = 0; i < categoryDataCount; i++)
+		{
+		iItemArray->AppendL(category->MdcaPoint(i));
+		}
+	if(categoryDataCount>1)
+		{
+		if(iSearchTextBox)
+			{
+			delete iSearchTextBox;
+			iSearchTextBox = NULL;
+			}
+
+		// Added For Dynamic Filtering
+		iSearchTextBox = CreateFindBoxL(iCategoryListBox, iFilteredModel,
+		  CAknSearchField::ESearch);
+		SizeChanged();	
+		}
+	else
+		{
+		DisableFindBox();	
+		}
+	if(iFilteredFlag)
+		{
+		TKeyEvent event;
+		TEventCode type = EEventKey;
+		event.iCode = EKeyDownArrow;
+		TBool needRefresh( EFalse );
+		AknFind::HandleFindOfferKeyEventL( event, type, this,
+		iCategoryListBox, iSearchTextBox,EFalse,needRefresh );
+		TInt filterModelCount = iFilteredModel->NumberOfItems();	
+		if(filterModelCount ==1 && iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl)
+			{
+			iCategoryListBox->SetCurrentItemIndex(0);
+			}
+		else
+			{
+			if(filterModelCount>1 && iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl && !iLogoDownloadError)
+			iCategoryListBox->SetCurrentItemIndex(1);
+			}
+		}
+	else
+		{
+		iCategoryListBox->HandleItemAdditionL();
+		}
+			
+	IRLOG_DEBUG( "CIRCategoryViewContainer::UpdateCategoryViewL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::GetCurrentItemIndex()
+// returns the index of the currently selected item
+// ---------------------------------------------------------------------------
+//
+TInt CIRCategoryViewContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRCategoryViewContainer::GetCurrentItemIndex" );
+	return iCategoryListBox->CurrentItemIndex();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::GetListBoxTopIndex()
+// returns the index of the top item
+// ---------------------------------------------------------------------------
+//
+TInt CIRCategoryViewContainer::GetListBoxTopIndex() const
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::GetListBoxTopIndex" );
+	return iCategoryListBox->View()->TopItemIndex () ;
+	}
+
+
+//----------------------------------------------------------------------------
+// CIRCategoryViewContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRCategoryViewContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CountComponentControls - Entering" );
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CountComponentControls - Exiting" );
+	TInt count(KCONTROLSCOUNT);
+	if(iCategoryListBox)
+		{
+		count++;
+		}
+	if(iSearchTextBox)
+		{
+		count++;
+		}
+	return count;
+	}
+//----------------------------------------------------------------------------
+// CIRCategoryViewContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRCategoryViewContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRCategoryViewContainer::ComponentControl - Exiting" );
+	switch(aIndex)
+		{
+		case 0:
+			{
+			if(iCategoryListBox)
+			return iCategoryListBox;
+			}
+		case 1:
+			{
+			if(iSearchTextBox)
+			return iSearchTextBox;
+			}
+		default:
+			return NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// void CIRCategoryViewContainer::SizeChanged()
+// Responds to changes to the size and position of the contents of this control.
+// ---------------------------------------------------------------------------
+//
+
+void CIRCategoryViewContainer::SizeChanged()
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::SizeChanged - Entering" );
+	if(iCategoryView.iUi->IsLandscapeOrientation())
+		{
+		if(iCategoryListBox && iSearchTextBox && iLandScapeCount ==0)
+			{
+	   		AknFind::HandlePopupFindSizeChanged(this,iCategoryListBox,iSearchTextBox);
+	   		iLandScapeCount ++;
+			}
+		}
+	if(iCategoryListBox && iSearchTextBox)
+		{
+	    AknLayoutUtils::LayoutControl(iCategoryListBox,  Rect(),
+            AKN_LAYOUT_WINDOW_list_gen_pane(1));
+        AknLayoutUtils::LayoutControl(iSearchTextBox,  Rect(),
+            AKN_LAYOUT_WINDOW_find_pane);
+		}
+	else
+		{
+		if(iCategoryListBox)
+			{
+			AknLayoutUtils::LayoutControl(iCategoryListBox, Rect(),
+            	AKN_LAYOUT_WINDOW_list_gen_pane(0));
+			}
+		}
+		
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+	TRect parentRectSize(TPoint(0,0),clientRect.iBr);
+
+	if ( iBgContext )
+		{
+		iBgContext->SetRect(parentRectSize);
+		}
+	
+	DrawNow();
+	IRLOG_DEBUG( "CIRCategoryViewContainer::SizeChanged - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRCategoryViewContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::HandleResourceChange(TInt aType)
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::HandleResourceChange" );	
+    CCoeControl::HandleResourceChange( aType );
+    // application layout change request notification
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        // reconstruct controls if needed
+        if(iCategoryListBox && iSearchTextBox)
+	        {
+		    AknFind::HandlePopupFindSizeChanged(this,iCategoryListBox,iSearchTextBox);
+	        SizeChanged();
+	        }
+        }
+	}
+//----------------------------------------------------------------------------
+// CIRCategoryViewContainer::CreateFindBoxL()
+// creates the Find box when any character is Pressed
+//----------------------------------------------------------------------------
+// 
+CAknSearchField* CIRCategoryViewContainer::CreateFindBoxL(CEikListBox* aListBox,
+CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle)
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CreateFindBoxL - Entering" );
+	CAknSearchField* findbox = NULL;
+	if (aListBox && aModel)
+		{
+		// Gets pointer of CAknFilteredTextListBoxModel.
+		// Added For Dynamic Filtering
+		 iFilteredModel = STATIC_CAST( CIRFilteredModel*, aModel );
+
+		// Creates FindBox.
+		findbox = CAknSearchField::NewL( *this, aStyle, NULL,
+		KAknExListFindBoxTextLength);
+		CleanupStack::PushL(findbox);
+		// Creates CAknListBoxFilterItems class.
+		iFilteredModel->CreateFilterL( aListBox, findbox );
+		CleanupStack::Pop(findbox); // findbox
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::CreateFindBoxL - Exiting" );
+	return findbox;
+	}
+//----------------------------------------------------------------------------
+// CIRCategoryViewContainer::DisableFindBox()
+// Deletes the findbox
+//----------------------------------------------------------------------------
+// 
+void CIRCategoryViewContainer::DisableFindBox()
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::DisableFindBox - Entering" );
+	if (iSearchTextBox)
+		{
+		iFilteredModel->RemoveFilter();
+		// Important to set the find box non-focusing before
+		// deleting it, otherwise the focus changes triggered
+		// by the removal of the control from stack will focus
+		// the find box which is under deletion
+		iSearchTextBox->SetNonFocusing();
+		delete iSearchTextBox;
+		iSearchTextBox = NULL;
+		// Inform list box that find is hidden
+		static_cast<CAknColumnListBoxView*>(iCategoryListBox->View())->SetFindEmptyListState(EFalse);
+		SizeChanged();
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::DisableFindBox - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function : Comparestrings
+// Function called to compare the filtered string inthe Itemarray
+// ---------------------------------------------------------------------------
+//
+void  CIRCategoryViewContainer::Comparestrings()
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::Comparestrings - Entering" );
+	TInt count = iFilteredModel->NumberOfItems();
+	if(count)
+		{
+		if((count==1) && iAdvPreset &&!iLogoDownloadError )
+			{
+			return;
+			}
+		else
+			{
+			TPtrC16 filteredString = iFilteredModel->ItemText (iCategoryView.GetFilteredIndex());
+			for(TInt i=0;i<iItemArray->Count();i++)
+				{
+				TPtrC16 matchString=iItemArray->MdcaPoint(i);
+				if(filteredString==matchString)
+					{
+					iCategoryView.SetActualFilteredItemIndex(i);
+					break;
+					}
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::Comparestrings - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRCategoryViewContainer::HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
+// from base class MIRImageConverterObserver
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::HandleImageConversionEventL( MIRImageConverterObserver::
+                                                            TIRImageConversionEvent aEvent,
+                                                           TInt /*aId*/, 
+                                                           TInt aError )
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::HandleImageConversionEventL - Entering" );
+	iError = aError;
+	if(aError == KErrNotSupported && iRequestForAdvertisement)
+		{
+		iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+		iLogoDownloadError	= ETrue;
+		iRequestForAdvertisement = EFalse;
+		}
+	if ( !aError && (aEvent == MIRImageConverterObserver::EIRFrameConversionCompleted ||
+					 aEvent == MIRImageConverterObserver::EIRImageConversionCompleted))
+		{
+		IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleImageConversionEventL - Entered elseif" );
+		iLogoDownloadError	= EFalse;
+		CGulIcon* icon = iCategoryListBox->AdvertisementIcon(); 
+		if ( !icon )
+			{
+			icon = CGulIcon::NewLC();
+			iCategoryListBox->SetAdvertisementIconL( icon );
+			CleanupStack::Pop( icon );
+			}
+		icon->SetBitmap( const_cast<CFbsBitmap*>(iCurrentItemConverter->Bitmap()));
+		icon->SetMask(const_cast<CFbsBitmap*>(iCurrentItemConverter->Mask() ));
+		icon->SetBitmapsOwnedExternally( ETrue );
+		DrawDeferred();
+		}
+	else
+		{
+
+		}
+	if(iFilteredFlag)
+		{
+		TKeyEvent event;
+		TEventCode type = EEventKey;
+		event.iCode = EKeyDownArrow;
+		TBool needRefresh( EFalse );
+		AknFind::HandleFindOfferKeyEventL( event, type, this,
+		iCategoryListBox, iSearchTextBox,EFalse,needRefresh );
+		}
+	iAdPresent = EFalse;
+	IRLOG_DEBUG( "CIRCategoryViewContainer::HandleImageConversionEventL - Exiting" );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::PresetLogoDownloadL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::PresetLogoDownloadL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::PresetLogoDownloadL - Entering" );
+	if(iAdPresent)
+		{
+		if (iCategoryView.iUi->iIsdsWrapper->iCatBannerUrl)
+			{
+			*iAdvPreset = *aPreset;	
+			if(iAdvPreset->GetLogoData()!=KNullDesC8 )
+				{
+				iFilteredModel->SetAdvFlag(ETrue,*iAdvString);
+				iError = KErrNone;
+				iCurrentItemConverter->SetDataL(aPreset->GetLogoData());
+				if(iError==KErrNone)
+					{
+					iCurrentItemConverter->StartL( IRLayoutUtils::AdvertisementSizeL(), KErrUnknown );	//KLogoSize
+					}
+				iRequestForAdvertisement = ETrue;	
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRCategoryViewContainer::PresetLogoDownloadL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRCategoryViewContainer::OpenUrlL( const TDesC& aHttpLink)
+// used to connect to the advertisement url.
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::OpenUrlL( const TDesC& aHttpLink )
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::OpenUrlL - Entering" );
+
+	TDataType htmlDataType( KIRHtmlMimeType );
+	TUid uid;
+
+	RApaLsSession ls;
+	User::LeaveIfError( ls.Connect() );
+	CleanupClosePushL( ls );
+
+	// Get UID of the browser.
+	TInt retVal = ls.AppForDataType( htmlDataType, uid );
+
+	if ( retVal == KErrNone && uid != KNullUid )
+		{
+		// We must check if the browser is already open and if it is, 
+		// switch its currently opened file to the correct URL.
+		TApaTaskList taskList( iEikonEnv->WsSession() );
+		TApaTask task = taskList.FindApp( uid );
+		if ( task.Exists() )
+			{
+			HBufC8* url8 = HBufC8::NewLC( aHttpLink.Length() );
+			url8->Des().Copy( aHttpLink );
+			task.SendMessage( TUid::Uid( 0 ), url8->Des() );
+			task.BringToForeground();
+			CleanupStack::PopAndDestroy( url8 );
+			}
+		else
+			{
+			TThreadId threadId;
+			HBufC* newUrl = HBufC::NewLC( aHttpLink.Length() + KBrowserPrefix().Length() );
+			newUrl->Des().Append( KBrowserPrefix );
+			newUrl->Des().Append( aHttpLink );
+			ls.StartDocument( newUrl->Des(), uid, threadId );
+			CleanupStack::PopAndDestroy( newUrl );
+			}
+		}
+	CleanupStack::PopAndDestroy( &ls );
+
+	IRLOG_DEBUG( "CIRCategoryViewContainer::OpenUrlL - Exiting" );
+
+	}
+//----------------------------------------------------------------------------
+// CIRCategoryViewContainer::GetLogoNotSupported() 
+// returns whether the advertisement is supported by the sdk r not
+//----------------------------------------------------------------------------
+// 	
+TBool CIRCategoryViewContainer::GetLogoNotSupported()
+	{
+	IRLOG_DEBUG( "CIRCategoryViewContainer::GetLogoNotSupported - Entering" );
+	IRLOG_DEBUG( "CIRCategoryViewContainer::GetLogoNotSupported - Exiting" );
+	return iLogoDownloadError;
+	}
+// ---------------------------------------------------------------------------
+// void CIRCategoryViewContainer::HandleLogoErrorL()
+// called from the iCategoryView when the logo is not downloaded
+// ---------------------------------------------------------------------------
+//
+void CIRCategoryViewContainer::HandleLogoErrorL()
+	{
+	iLogoDownloadError	= ETrue;
+	iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irchangeobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+ 
+
+#include "irchangeobserver.h"
+#include "irdebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIRObserver::CIRObserver
+// C++ default constructor CIRObserver
+// -----------------------------------------------------------------------------
+//
+CIRObserver::CIRObserver(MIRChangeObserver& aObserver, const TUid& aCategory, 
+	const TUint aKey, const RProperty::TType aPropertyType)
+    : CActive( CActive::EPriorityLow ),
+    iObserver( aObserver ),
+    iCategory( aCategory ),
+    iKey( aKey ),
+    iPropertyType( aPropertyType )
+	{
+	IRLOG_DEBUG( "CIRObserver::CIRObserver" );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIRObserver::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRObserver::ConstructL - Entering" );
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+    RunL();
+	IRLOG_DEBUG( "CIRObserver::ConstructL - Exiting." );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRObserver* CIRObserver::NewL(MIRChangeObserver& aObserver, const TUid& 
+	aCategory, const TUint aKey, const RProperty::TType aPropertyType)
+	{
+	IRLOG_DEBUG( "CIRObserver::NewL - Entering" );
+    CIRObserver* self = new( ELeave )CIRObserver( aObserver, aCategory, aKey,
+    	aPropertyType );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRObserver::NewL - Exiting." );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CIRObserver::~CIRObserver
+// C++ default destructor
+// -----------------------------------------------------------------------------
+//
+CIRObserver::~CIRObserver()
+	{
+	IRLOG_DEBUG( "CIRObserver::~CIRObserver - Entering" );
+	Cancel();
+	iProperty.Close(); //Closes the publish and subscribe handler
+	IRLOG_DEBUG( "CIRObserver::~CIRObserver - Exiting." );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRObserver::RunL
+// The function is called by the active scheduler 
+// when a request completion event occurs
+// -----------------------------------------------------------------------------
+//
+void CIRObserver::RunL()
+	{
+	IRLOG_DEBUG( "CIRObserver::RunL - Entering" );
+	//Subscribe the handler
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TInt err(KErrNone);
+    switch (iPropertyType)
+        {
+        case RProperty::EInt:
+	        {
+	        err = iProperty.Get( iValueInt );
+	        if (!err)
+            	{
+            	//callback function called when a property value of type int.
+                iObserver.HandleChangeL( iCategory, iKey, iValueInt );
+             	}
+	        break;
+	        }
+	     case RProperty::EText:
+	        {
+	        break;
+	       	}
+	    default:
+	        {
+	        break;
+	        }
+        }
+	  IRLOG_DEBUG( "CIRObserver::RunL - Exiting." );
+      }
+
+// -----------------------------------------------------------------------------
+// CIRObserver::DoCancel
+// Cancels an outstanding active request
+// -----------------------------------------------------------------------------
+//
+void CIRObserver::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRObserver::DoCancel - Entering" );
+    iProperty.Cancel();
+    IRLOG_DEBUG( "CIRObserver::DoCancel - Exiting" );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRObserver::GetValue
+// -----------------------------------------------------------------------------
+//	
+void CIRObserver::GetValue(TInt& aValue) const
+	{
+	IRLOG_DEBUG( "CIRObserver::GetValue - Entering" );
+	//aValue assigned with the current Property value
+	aValue = iValueInt;
+	IRLOG_DEBUG( "CIRObserver::GetValue - Exiting" );
+	}
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/ircontroleventobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2005-2007 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:  Source file for IRControlEventObserver.
+*
+*/
+
+
+#include "ircontroleventobserver.h"
+#include "irdebug.h"
+#include "irpubsubkeys.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CIRControlEventObserver::CIRControlEventObserver(CIRUi& aObserver, const TUid& aCategory,
+ const TUint aKey, const RProperty::TType aPropertyType)
+    : CActive( CActive::EPriorityStandard ),
+    iObserver( aObserver ),
+    iCategory( aCategory ),
+    iKey( aKey ),
+    iPropertyType( aPropertyType )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIRControlEventObserver::ConstructL()
+	{
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+   
+	}
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIRControlEventObserver* CIRControlEventObserver::NewL(CIRUi& aObserver,
+	 const TUid& aCategory,
+ 	const TUint aKey, const RProperty::TType aPropertyType)
+	{
+    CIRControlEventObserver* self = new( ELeave )CIRControlEventObserver( aObserver, aCategory, 
+    									aKey, aPropertyType );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CIRControlEventObserver::~CIRControlEventObserver()
+	{
+	Cancel();
+    iProperty.Close();
+   	}
+
+// ---------------------------------------------------------------------------
+// Subscribes to a property and reads the value, if not already active.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRControlEventObserver::SecondConstructL()
+	{
+    if ( !IsActive() )
+        {
+         iProperty.Subscribe( iStatus );
+         SetActive();
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CIRControlEventObserver::RunL
+// -----------------------------------------------------------------------------
+//
+void CIRControlEventObserver::RunL()
+	{
+	IRRDEBUG2("CIRControlEventObserver:RunL entering",KNullDesC);
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TInt err(KErrNone);
+    
+	IRRDEBUG2("CIRControlEventObserver:RunL iKey = %d",iKey);
+	
+	if(iKey == KIRPSControlSetPlayState)
+	{
+	IRRDEBUG2("CIRControlEventObserver:RunL KIRPSControlSetPlayState = %d",iKey);
+	
+	}
+
+    switch (iPropertyType)
+        {
+        // Subscribes the property of interger type 
+        case RProperty::EInt:
+	        {
+	        err = iProperty.Get( iValue );
+	        IRRDEBUG2("CIRControlEventObserver:RunL Error in get of property = %d",err);
+
+	        if (!err)
+            	{
+            	if(iKey == KIRPSControlSetPlayState)
+	            	{
+	            	iObserver.PlayerStateChangedL(static_cast<TIRStopPlayState> (iValue));
+		           	}
+                
+             	}
+	        break;
+	        }
+	    // Subscribes the property of text type 
+	    case RProperty::ELargeText:
+	        {
+	        break;
+	        }
+	    default:
+	        {
+	        break;
+	        }
+        }
+    
+    if (err)
+    	{
+        //iObserver.HandlePropertyChangeErrorL(iCategory, iKey, err)
+    	}
+	IRRDEBUG2("CIRControlEventObserver:RunL exiting",KNullDesC);
+	
+    }
+
+// -----------------------------------------------------------------------------
+// Cancels an outstanding active request
+// -----------------------------------------------------------------------------
+//
+void CIRControlEventObserver::DoCancel()
+	{
+    iProperty.Cancel();
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/ircostwarningcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,701 @@
+/*
+* Copyright (c) 2004 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:  Container class for cost warning view
+*
+*/
+
+
+#include <txtrich.h>
+/* don't need to change it to lower case */
+#include <AknsBasicBackgroundControlContext.h> // CAknsBasicBackgroundControlContext
+#include <eikedwin.h>
+#include <utf.h>
+#include <stringloader.h>
+
+
+#include <internetradio.rsg>
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "ircostwarningview.h"
+#include "ircostwarningcontainer.h"
+#include "irapplication.h"
+#include "irnetworkcontroller.h"
+#include "irsettings.h"
+
+
+const TInt KNoOfLines = 50;
+const TInt KNoOfCharacters = 3000;
+const TInt KScrollbar = 15;
+//-----------------------------------------------------------------------------
+//  CIRCostWarningContainer::NewL
+//  Creates a new instance of CIRCostWarningContainer
+//-----------------------------------------------------------------------------
+//
+CIRCostWarningContainer* CIRCostWarningContainer::NewL(const TRect& aRect ,
+					CIRCostWarningView& aView)
+    {
+	IRLOG_DEBUG( "CIRCostWarningContainer::NewL - Entering" );
+    CIRCostWarningContainer* self = CIRCostWarningContainer::NewLC(aRect,aView);
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRCostWarningContainer::NewL - Exiting." );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRCostWarningContainer::NewLC
+//  Creates a new instance of CIRCostWarningContainer and leaves it on the cleanup stack.
+//-----------------------------------------------------------------------------
+//
+CIRCostWarningContainer* CIRCostWarningContainer::NewLC(const TRect& aRect ,
+						CIRCostWarningView& aView)
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::NewLC - Entering" );
+    CIRCostWarningContainer* self = new (ELeave) CIRCostWarningContainer(aView);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+	IRLOG_DEBUG( "CIRCostWarningContainer::NewLC - Exiting." );
+    return self;
+    }
+// ---------------------------------------------------------
+// C++ default constructor.
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------
+//
+
+CIRCostWarningContainer::CIRCostWarningContainer( CIRCostWarningView& aMsgView ):
+                                                  iMsgView(aMsgView)
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::CIRCostWarningContainer - Entering" );
+    IRLOG_DEBUG( "CIRCostWarningContainer::CIRCostWarningContainer - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::ConstructL()
+// Two Phase constructor
+// ---------------------------------------------------------
+//
+void CIRCostWarningContainer::ConstructL( const TRect& aRect )
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::ConstructL - Entering" );
+    CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+    CreateWindowL();
+    iEditor = CreateEditorL();
+    SetReadOnly(ETrue);
+    
+    SetRect(aRect);
+    iEditor->SetRect(aRect);
+
+    // for Skin Support, Create background control context:
+    iBackGroundControlContext = CAknsBasicBackgroundControlContext::NewL(
+                    KAknsIIDQsnBgAreaMain,  // Default mainpane skinning
+                    Rect(),                 // Layout to the entire client rect
+                    EFalse );
+   
+    if ( iBackGroundControlContext )
+        {
+        iEditor->SetSkinBackgroundControlContextL( iBackGroundControlContext );
+        }
+	if (!ui->iIRSettings->IsFlagCostWarningL())
+		{
+        ui->SetCommandSetL(R_IR_CBA_CONTINUE_EXIT);
+		UpdateTermsL(); 
+		}
+    else
+	    {   
+	    ui->SetCommandSetL(R_IR_CBA_ACCEPT_DECLINE);                
+		UpdateTermsL();   	
+	    }
+   	iEditor->SetCursorPosL(0, EFalse );
+
+	IRLOG_DEBUG( "CIRCostWarningContainer::ConstructL - Exiting" );
+    
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::~CIRCostWarningContainer()
+// Destructor
+// ---------------------------------------------------------
+//
+CIRCostWarningContainer::~CIRCostWarningContainer()
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::~CIRCostWarningContainer - Entering" );
+    delete iBackGroundControlContext;
+    delete iEditor;
+    if (iRichText)
+	    {
+	    delete iRichText;
+	    iRichText = NULL;	
+	    }
+    delete iTermsData;
+    IRLOG_DEBUG( "CIRCostWarningContainer::~CIRCostWarningContainer - Exiting" );
+    }
+
+
+//----------------------------------------------------------------------------
+// CIRCostWarningContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+//
+TInt CIRCostWarningContainer::CountComponentControls() const
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::CountComponentControls - Entering" );
+    return iEditor ? 1 : 0;
+    }
+
+
+//----------------------------------------------------------------------------
+// CIRCostWarningContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRCostWarningContainer::ComponentControl( TInt aIndex ) const
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::ComponentControl - Entering" );
+
+    CCoeControl* ctrl = NULL;
+
+    switch(aIndex)
+	    {
+    	case 0:
+	    	ctrl = iEditor;
+	    	break;
+	    default:
+	    	break;
+    	}
+    IRLOG_DEBUG( "CIRCostWarningContainer::ComponentControl - Exiting" );
+    return ctrl;
+    }
+
+
+// ---------------------------------------------------------------------------
+// TKeyResponse CIRCostWarningContainer::OfferKeyEventL( )
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things 
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRCostWarningContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType )
+    {    
+    
+    IRLOG_DEBUG( "CIRCostWarningContainer::OfferKeyEventL - Entering" );   	
+	TKeyResponse res = EKeyWasNotConsumed;
+
+    if (aType == EEventKey)
+    {
+        if (aKeyEvent.iCode == EKeyDownArrow)
+        {
+            iEditor->MoveCursorL (TCursorPosition::EFPageDown, EFalse);
+            res = EKeyWasConsumed;
+        }
+        else if (aKeyEvent.iCode == EKeyUpArrow)
+        {
+            iEditor->MoveCursorL (TCursorPosition::EFPageUp, EFalse);
+            res = EKeyWasConsumed;
+        }
+        else
+        {
+            res = iEditor->OfferKeyEventL(aKeyEvent, aType);
+        }
+    }
+    IRLOG_DEBUG( "CIRCostWarningContainer::OfferKeyEventL - Exiting" );
+    return res;
+    }
+
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::UpdateTermsL
+// To update the required data whenever called
+// 
+// ---------------------------------------------------------
+//
+void CIRCostWarningContainer::UpdateTermsL()
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::UpdateTermsL - Entering" );
+    CreateRichTextDataL();
+    iEditor->DrawNow();
+    ActivateL();		
+    IRLOG_DEBUG( "CIRCostWarningContainer::UpdateTermsL - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::SizeChanged
+// ---------------------------------------------------------
+//
+void CIRCostWarningContainer::SizeChanged()
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::SizeChanged - Entering" );
+    if ( iEditor ) 
+        {
+		TRect   rectParent = Rect();
+		TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+		TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect();
+		iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(),
+		    					rectParent.Height() - KScrollbar  ) );
+        iEditor->DrawNow();
+        }
+        
+    IRLOG_DEBUG( "CIRCostWarningContainer::SizeChanged - Exiting" );
+    }
+
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::CreateEditorL
+// Creates the CEikRichTextEditor object
+// 
+// ---------------------------------------------------------
+//
+CEikRichTextEditor* CIRCostWarningContainer::CreateEditorL() const
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::CreateEditorL - Entering" );
+    CEikRichTextEditor* editor = new (ELeave) CEikRichTextEditor;
+    CleanupStack::PushL( editor );
+    editor->SetContainerWindowL(*this);
+    TInt edwinflags =  CEikEdwin::EReadOnly | CEikEdwin::EEdwinAlternativeWrapping ;
+    editor->ConstructL(this, KNoOfLines,KNoOfCharacters,edwinflags );
+    
+    // create vertical scrollbar
+    editor->CreateScrollBarFrameL();
+    editor->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+    												   CEikScrollBarFrame::EAuto );
+	editor->ActivateL();
+    CleanupStack::Pop(editor); // editor
+    IRLOG_DEBUG( "CIRCostWarningContainer::CreateEditorL - Exiting" );
+    return editor;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRCostWarningContainer::Draw( const TRect& aRect ) const
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRCostWarningContainer::Draw( const TRect& aRect ) const
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::Draw - Entering" );
+    CWindowGc& gc = SystemGc();
+    
+    // for clearing gap between editor and the view rect
+    if ( IsReadyToDraw() )
+        {
+        DrawUtils::ClearBetweenRects( gc, aRect, iEditor->Rect() );
+        if ( iBackGroundControlContext )
+            {//Draw the skin background
+            MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+            AknsDrawUtils::Background( skin, iBackGroundControlContext, this, gc, aRect );
+            }
+        }
+    IRLOG_DEBUG( "CIRCostWarningContainer::Draw - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::SetReadOnly
+// Making the editor as ReadOnly
+// 
+// ---------------------------------------------------------
+//
+void CIRCostWarningContainer::SetReadOnly( TBool aReadOnly )
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::SetReadOnly - Entering" );
+    iEditor->SetReadOnly(aReadOnly);
+    IRLOG_DEBUG( "CIRCostWarningContainer::SetReadOnly - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::SetDataContentL
+// Setting the RichText into the Editor
+// 
+// ---------------------------------------------------------
+//
+void CIRCostWarningContainer::SetDataContentL( CRichText& aText )
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::CIRCostWarningContainer - Entering" );
+    iEditor->SetDocumentContentL(aText);
+   	TRect   rectParent = Rect();
+    TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+    TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect();
+	iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(),
+	        					rectParent.Height() - KScrollbar  ) );
+    IRLOG_DEBUG( "CIRCostWarningContainer::SetDataContentL - Exiting" );  
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::CreateRichTextDataL
+// Creating the CRichText object
+// 
+// ---------------------------------------------------------
+//
+void CIRCostWarningContainer::CreateRichTextDataL()
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::CreateRichTextDataL - Entering" );
+    CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+    CParaFormatLayer* globalParaLayer = CParaFormatLayer::NewL();
+    CleanupStack::PushL(globalParaLayer);
+    
+                   
+    CCharFormatLayer* globalCharLayer = NULL;   
+    TRgb textColor;
+    
+    TCharFormat charFormat;
+    TCharFormatMask formatMask;
+        
+    iEditor->RichText()->GetCharFormat( charFormat, formatMask, 0, 0 );
+    MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+    TInt error = AknsUtils::GetCachedColor(
+        skin,
+        textColor,
+        KAknsIIDQsnTextColors,
+        EAknsCIQsnTextColorsCG6 );
+     
+	if( error != KErrNone )
+		{
+		textColor = KRgbBlack;
+		}
+		
+	charFormat.iFontPresentation.iTextColor = textColor;	
+	charFormat.iFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+    formatMask.SetAll();
+
+    globalCharLayer = CCharFormatLayer::NewL( charFormat, formatMask );
+    CleanupStack::PushL( globalCharLayer );
+     
+    iRichText = CRichText::NewL( globalParaLayer, globalCharLayer );
+    CParaFormat *para=CParaFormat::NewL();
+    CleanupStack::PushL( para );
+    TParaFormatMask paraMask;
+    paraMask.SetAttrib(EAttSpaceAfter);	
+    
+    
+    if (!ui->iIRSettings->IsFlagCostWarningL())
+	    {
+
+		TCharFormat charFormat;
+		TCharFormatMask charFormatMask;
+		TPtrC costHeading;
+		HBufC *CWHeading = StringLoader::LoadLC(R_IRAPP_COST_WARNING_HEADING);
+		costHeading.Set(*CWHeading);
+		charFormatMask.SetAttrib(EAttFontStrokeWeight);
+		charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+		iRichText->SetInsertCharFormatL(charFormat,charFormatMask,iRichText->DocumentLength());
+		iRichText->InsertL(iRichText->DocumentLength(),costHeading);
+		iRichText->InsertL(iRichText->DocumentLength(),CEditableText::ELineBreak );
+	    iRichText->InsertL(iRichText->DocumentLength(), CEditableText::ELineBreak );
+		iRichText->CancelInsertCharFormat();
+		CleanupStack::PopAndDestroy(CWHeading);	
+        
+		TPtrC costText;
+		HBufC *CWInfo = StringLoader::LoadLC(R_IRAPP_COST_WARNING_INFO);
+		costText.Set(*CWInfo);
+		charFormatMask.SetAttrib(EAttFontStrokeWeight);
+		charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal);
+		iRichText->SetInsertCharFormatL(charFormat,charFormatMask,iRichText->DocumentLength());
+		iRichText->InsertL(iRichText->DocumentLength(),costText);
+		iRichText->CancelInsertCharFormat();
+		CleanupStack::PopAndDestroy(CWInfo);		
+	    }
+    else
+	    {
+	    ReadTermsFromFileL();
+	    LayoutTermsL();
+	    }
+  
+    
+    SetDataContentL( *iRichText );
+    
+    iEditor->SetCharFormatLayer( globalCharLayer );
+    iEditor->SetCursorPosL(0, EFalse );
+     
+    CleanupStack::PopAndDestroy(para);  // para
+    CleanupStack::Pop(globalCharLayer);            // globalCharLayer
+    CleanupStack::PopAndDestroy(globalParaLayer);  // globalParaLayer
+    IRLOG_DEBUG( "CIRCostWarningContainer::CreateRichTextDataL - Exiting" );
+    }
+
+// ---------------------------------------------------------
+// CIRCostWarningContainer::GetEditor
+// Getting the contents of RichText to the Editor
+// 
+// ---------------------------------------------------------
+CRichText* CIRCostWarningContainer::GetEditor() const
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::GetEditor" );
+    return iEditor->RichText();
+    }
+
+// ----------------------------------------------------
+// CIRCostWarningContainer::HandleResourceChange
+// Handles a change to the application's resources which are shared across
+// the environment.
+// ----------------------------------------------------
+void CIRCostWarningContainer::HandleResourceChange( TInt aType )
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+	if( aType == KEikDynamicLayoutVariantSwitch )
+		{
+		TRect rect;
+		TBool bRes = AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane  , rect);
+		SetRect(rect);
+
+        iEditor->HandleResourceChange( aType );
+
+		if ( iBackGroundControlContext )
+			{
+			iBackGroundControlContext->SetRect( Rect() );
+			}
+		}
+	else if( ( aType == KAknsMessageSkinChange ) && ( iBackGroundControlContext ) )
+			{
+			TRAPD( ignore, iEditor->SetSkinBackgroundControlContextL( iBackGroundControlContext ) );
+            if(ignore)
+				{
+				return;	
+				}
+			if (iRichText)
+				{
+				delete iRichText;
+				iRichText=NULL;	
+				}
+			TRAPD(err ,UpdateTermsL());
+			if(err)
+				{
+				return;	
+				}
+			TRAPD( error ,iEditor->SetCursorPosL(0, EFalse ));
+			if(error)
+				{
+				return;
+				}
+
+	        } 
+	IRLOG_DEBUG( "CIRCostWarningContainer::HandleResourceChange - Exiting" );			
+    }
+	
+    
+// ----------------------------------------------------
+// CIRCostWarningContainer::ReadTermsFromFileL()
+// Reads the text from a HTML file
+//
+// ----------------------------------------------------
+void CIRCostWarningContainer::ReadTermsFromFileL()
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::ReadTermsFromFileL - Entering" );
+    RFs& fs = static_cast<CEikonEnv*>(iCoeEnv)->FsSession();
+	TFileName privatePath;
+	User::LeaveIfError(fs.PrivatePath(privatePath));
+	HBufC* termsFileName = StringLoader::LoadL(R_IRAPP_TERMS_FILE);
+    TParse parse;
+    parse.Set(*termsFileName, &privatePath, NULL);
+    delete termsFileName;
+    TFileName fileName = parse.FullName();
+    CompleteWithAppPath(fileName);
+    RFile fileHandle;
+    User::LeaveIfError(fileHandle.Open(fs, fileName, EFileRead));
+    CleanupClosePushL(fileHandle);
+    TInt fileSize;
+    User::LeaveIfError( fileHandle.Size( fileSize ) );
+    HBufC8* termsData = HBufC8::NewLC( fileSize );
+    TPtr8 pData8( termsData->Des() );
+    User::LeaveIfError( fileHandle.Read( pData8 ) );
+    delete iTermsData;
+    iTermsData = NULL;
+    iTermsData = CnvUtfConverter::ConvertToUnicodeFromUtf8L( pData8 );
+    CleanupStack::PopAndDestroy( termsData );
+    CleanupStack::PopAndDestroy( &fileHandle );
+    IRLOG_DEBUG( "CIRCostWarningContainer::ReadTermsFromFileL - Exiting" );
+    }
+
+// ----------------------------------------------------
+// CIRCostWarningContainer::LayoutTermsL()
+// Inserts the text into the RichText object (Heading of Terms & Conditions).
+//
+// ----------------------------------------------------
+void CIRCostWarningContainer::LayoutTermsL()
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::LayoutTermsL - Entering" );
+    TCharFormat charFormat;
+    TCharFormatMask charFormatMask;
+    
+    TInt dataCounter(0);
+    iTotalTextHeight = 0;
+    TIRTermsTextType type(EIRTermsTextInvalid);
+    TPtrC text;
+    
+	charFormatMask.SetAttrib(EAttFontStrokeWeight);
+	charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+	iRichText->SetInsertCharFormatL(charFormat,charFormatMask,iRichText->DocumentLength());
+	
+	HBufC *CWHeading = StringLoader::LoadLC(R_IRAPP_TERMS_CONDITIONS_HEADING);
+	TPtrC termsHeading;
+
+	termsHeading.Set( *CWHeading );
+
+	iRichText->InsertL(iRichText->DocumentLength(),termsHeading);
+	iRichText->InsertL(iRichText->DocumentLength(), CEditableText::ELineBreak );
+	
+	iRichText->CancelInsertCharFormat();
+	CleanupStack::PopAndDestroy(CWHeading);
+	
+    while (GetNextTermsL(dataCounter, text, type)) 
+		{
+		if( type != EIRTermsTextHeading && type != EIRTermsTextNormal)
+			{
+			User::Leave(KErrCorrupt);
+			}
+
+		}
+    IRLOG_DEBUG( "CIRCostWarningContainer::LayoutTermsL - Exiting" );
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// GetNextTermsL()
+// Inserts the text into the RichText object (Body of Terms & Conditions). 
+// ---------------------------------------------------------------------------
+//
+TBool CIRCostWarningContainer::GetNextTermsL(TInt& aCounter,
+                                             TPtrC& aTermsText, TIRTermsTextType& aTermsType)
+    {
+    IRLOG_DEBUG( "CIRCostWarningContainer::GetNextTermsL - Entering" );
+    TCharFormat charFormat;
+    TCharFormatMask charFormatMask;
+    TBool textFound(EFalse);
+    _LIT(KIRHeadingStartTag, "<h1>");
+    _LIT(KIRHeadingEndTag, "</h1>");
+    _LIT(KIRNormalStartTag, "<p>");
+    _LIT(KIRNormalEndTag, "</p>");
+    TPtr data = iTermsData->Des();
+    
+    TInt heading = data.Mid(aCounter).Find(KIRHeadingStartTag);
+    TInt normal = data.Mid(aCounter).Find(KIRNormalStartTag);
+    
+    
+    if ((heading != KErrNotFound) || (normal != KErrNotFound))
+        {
+        if( ((heading != KErrNotFound) && (normal != KErrNotFound) && (heading<normal)) || 
+            (normal == KErrNotFound) )
+            {
+            aTermsType = EIRTermsTextHeading;
+            aCounter = aCounter + heading + KIRHeadingStartTag().Length();
+            }
+        else
+            {
+            aTermsType = EIRTermsTextNormal;
+            aCounter = aCounter + normal + KIRNormalStartTag().Length();
+            }        
+        if( aTermsType == EIRTermsTextNormal )
+            {
+            aTermsText.Set(data.Mid(aCounter, data.Mid(aCounter).Find(KIRNormalEndTag)));
+            aCounter = aCounter + aTermsText.Length() + KIRNormalEndTag().Length();
+            charFormatMask.SetAttrib(EAttFontStrokeWeight);
+            charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal);
+            
+            iRichText->SetInsertCharFormatL(charFormat,charFormatMask,iRichText->DocumentLength());
+            iRichText->InsertL(iRichText->DocumentLength(),aTermsText);
+            iRichText->InsertL(iRichText->DocumentLength(), CEditableText::ELineBreak );
+            iRichText->CancelInsertCharFormat();
+            }
+        else
+            {
+            aTermsText.Set(data.Mid(aCounter, data.Mid(aCounter).Find(KIRHeadingEndTag)));
+            aCounter = aCounter + aTermsText.Length() + KIRHeadingEndTag().Length();
+            charFormatMask.SetAttrib(EAttFontStrokeWeight);
+            charFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+            iRichText->SetInsertCharFormatL(charFormat,charFormatMask,iRichText->DocumentLength());
+            iRichText->InsertL(iRichText->DocumentLength(),aTermsText);
+            iRichText->InsertL(iRichText->DocumentLength(), CEditableText::ELineBreak );
+            iRichText->CancelInsertCharFormat();
+            }
+        textFound = ETrue;
+        }
+    IRLOG_DEBUG( "CIRCostWarningContainer::GetNextTermsL - Exiting" );
+    return textFound;
+    
+    
+    }
+
+	
+// ---------------------------------------------------------------------------------
+// 
+// CIRCostWarningContainer::TandCAcceptL() 
+// For setting the terms and conditions flag
+// ---------------------------------------------------------------------------------
+void CIRCostWarningContainer::TandCAcceptL() const
+{
+IRLOG_DEBUG( "CIRCostWarningContainer::TandCAcceptL - Entering" );
+    CIRUi* ui = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+	//set the t&c flag,so that it doesnot come up the next time
+	ui->iIRSettings->SetFlagTermsAndConditionsL();
+//	ui->iNetworkController->ChooseAccessPointL()
+    if(ui->GetPlsActiavted())
+		{
+		ui->ActivateLocalViewL(KIRPlsViewID);
+		}
+    else 
+	    {
+	    if(ui->IsFirstTime())
+		    {
+		    ui->ActivateLocalViewL(KIRFirstTimeViewId);	
+		    }
+		else
+			{
+			ui->ActivateLocalViewL(KIRMainChoiceViewID);	
+			}    
+	    }
+    	
+    IRLOG_DEBUG( "CIRCostWarningContainer::TandCAcceptL - Exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// 
+// CIRCostWarningContainer::CostWarningContinueL() 
+// For displaying the soft keys
+// ---------------------------------------------------------------------------
+void CIRCostWarningContainer::CostWarningContinueL() 
+{   
+IRLOG_DEBUG( "CIRCostWarningContainer::CostWarningContinueL - Entering" );
+    CIRUi* ui = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+    ui->iIRSettings->SetFlagCostWarningL();
+    if (iRichText)
+    {
+    delete iRichText;
+    iRichText=NULL;	
+    }
+	UpdateTermsL();
+	iEditor->SetCursorPosL(0,EFalse ); 
+	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+    cba->SetCommandSetL( R_IR_CBA_ACCEPT_DECLINE );
+    cba->DrawDeferred();
+    DrawNow();  		
+    IRLOG_DEBUG( "CIRCostWarningContainer::CostWarningContinueL - Exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// CIRCostWarningContainer::HandlePointerEventL()
+// Handles pointer events.
+// ---------------------------------------------------------------------------
+void CIRCostWarningContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+	{
+	IRLOG_DEBUG( "CIRCostWarningContainer::HandlePointerEventL - Entering" );
+	if(iEditor)
+		{
+		CCoeControl::HandlePointerEventL( aPointerEvent );
+		IRLOG_DEBUG( "CIRCostWarningContainer::HandlePointerEventL - Exiting" );
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/ircostwarningview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2004 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:  view class for cost warning view
+*
+*/
+
+
+
+
+#include <akntitle.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "ircostwarningview.h"
+#include "ircostwarningcontainer.h"
+#include "irapplication.h"
+#include "irnetworkcontroller.h"
+#include "irsettings.h"
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRCostWarningView::CIRCostWarningView():iContainer(NULL) 
+    {
+    IRLOG_DEBUG("CIRCostWarningView::CIRCostWarningView" );
+    // Nothing here 
+    }
+
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRCostWarningView::ConstructL(const TRect & /*aRect*/)
+    {
+    IRLOG_DEBUG("CIRCostWarningView::ConstructL - Entering" );
+    BaseConstructL(R_IR_TANDCVIEW);
+    IRLOG_DEBUG("CIRCostWarningView::ConstructL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// CIRCostWarningView::NewL
+// ---------------------------------------------------------------------------
+//
+CIRCostWarningView* CIRCostWarningView::NewL(const TRect& aRect)
+    {
+    IRLOG_DEBUG("CIRCostWarningView::NewL - Entering" );
+    CIRCostWarningView* self = CIRCostWarningView::NewLC(aRect);
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRCostWarningView::NewL - Exiting." );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// CIRCostWarningView::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRCostWarningView* CIRCostWarningView::NewLC(const TRect & aRect)
+    {
+       
+    IRLOG_DEBUG( "CIRCostWarningView::NewLC - Entering" );
+    CIRCostWarningView* self = new (ELeave) CIRCostWarningView();
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    IRLOG_DEBUG( "CIRCostWarningView::NewLC - Exiting." );
+    return self;
+    }
+
+    
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRCostWarningView::~CIRCostWarningView()
+    {
+    IRLOG_DEBUG( "CIRCostWarningView::~CIRCostWarningView - Entering" );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer=NULL;
+        }
+    IRLOG_DEBUG( "CIRCostWarningView::~CIRCostWarningView - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRCostWarningView::Id() const
+    {
+    IRLOG_DEBUG( "CIRCostWarningView::Id" );
+    return KIRCostWarningViewId;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRCostWarningView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
+        TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/ )
+    {
+    IRLOG_DEBUG( "CIRCostWarningView::DoActivateL - Entering" );
+    //Create the instance of the container
+    CIRUi* ui = reinterpret_cast<CIRUi*>( AppUi() );
+	ui->iPresentViewID = KIRCostWarningViewId;
+    iContainer = CIRCostWarningContainer::NewL(ClientRect(),*this);
+    HBufC* stringholder = StringLoader::LoadLC( R_IRAPP_COST_WARNING_TITLE );
+    static_cast<CAknTitlePane*>( StatusPane()->
+                                 ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) )->
+                                 SetTextL( *stringholder );
+    CleanupStack::PopAndDestroy(stringholder);
+    iContainer->SetMopParent(this);
+    AppUi()->AddToStackL( *this, iContainer ); 
+    IRLOG_DEBUG( "CIRCostWarningView::DoActivateL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRCostWarningView::DoDeactivate()
+    {
+    IRLOG_DEBUG( "CIRCostWarningView::DoDeactivate - Exiting" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+   
+    if ( iContainer )
+        {
+        appUi->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    IRLOG_DEBUG( "CIRCostWarningView::DoDeactivate - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRCostWarningView::HandleCommandL( TInt aCommand )
+{
+IRLOG_DEBUG( "CIRCostWarningView::HandleCommandL - Entering" );
+  	switch(aCommand)
+	{
+	case EIRAccept:
+     	{   
+	    iContainer->TandCAcceptL();
+        break;        
+	    }
+    case EIRContinue:
+		{
+		iContainer->CostWarningContinueL();
+		break;		
+		}
+    default: 
+		{
+		AppUi()->HandleCommandL(aCommand);
+		break;
+		}
+	}
+  	IRLOG_DEBUG( "CIRCostWarningView::HandleCommandL - Exiting" );
+}
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRCostWarningView::HandleStatusPaneSizeChange()
+    {
+    IRLOG_DEBUG( "CIRCostWarningView::HandleStatusPaneSizeChange - Entering" );
+    // the client rect is also set here after screen orientation change
+    CAknView::HandleStatusPaneSizeChange();
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+    IRLOG_DEBUG( "CIRCostWarningView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irdialoglauncher.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,304 @@
+/*
+* 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:  Implementation for a class showing dialogs and notes.
+*
+*/
+
+
+#include <aknglobalnote.h>
+#include <aknlists.h>
+#include <aknnotewrappers.h>
+#include <aknsddata.h>
+#include <bldvariant.hrh>
+#include <etelpckt.h>
+#include <gsmerror.h>
+#include <stringloader.h>
+#include <textresolver.h>
+#include <aknquerydialog.h>
+#include <eikdialg.h>
+#include "irdialoglauncher.h"
+#include <internetradio.rsg>
+#include "irdebug.h"
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRDialogLauncher::CIRDialogLauncher()
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::CIRDialogLauncher" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ConstructL()
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ConstructL" );
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRDialogLauncher* CIRDialogLauncher::NewL()
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::NewL - Entering" );
+    CIRDialogLauncher* self = new( ELeave ) CIRDialogLauncher();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG("CIRDialogLauncher::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//            
+CIRDialogLauncher::~CIRDialogLauncher()
+    { 
+    IRLOG_DEBUG("CIRDialogLauncher::~CIRDialogLauncher" );
+    }
+            
+
+
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowConfirmationNoteL
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ShowConfirmationNoteL( TInt aTextResourceId, TBool aWaiting ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowConfirmationNoteL - Entering" );
+    HBufC* noteTxt = StringLoader::LoadLC( aTextResourceId );
+    ShowConfirmationNoteL( *noteTxt, aWaiting );
+    CleanupStack::PopAndDestroy( noteTxt );
+    IRLOG_DEBUG("CIRDialogLauncher::ShowConfirmationNoteL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowConfirmationNoteL
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ShowConfirmationNoteL( const TDesC& aText, TBool aWaiting ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowConfirmationNoteL - Entering" );
+    CAknConfirmationNote* note = new( ELeave ) CAknConfirmationNote( aWaiting );
+    note->ExecuteLD( aText );
+    IRLOG_DEBUG("CIRDialogLauncher::ShowConfirmationNoteL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowInformationNoteL
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ShowInformationNoteL( TInt aTextResourceId,
+                                              TBool aWaiting, TInt aDialogId ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowInformationNoteL - Entering" );
+    HBufC* noteTxt = StringLoader::LoadLC( aTextResourceId );
+    CAknInformationNote* note = new( ELeave ) CAknInformationNote( aWaiting );
+    CleanupStack::PushL(note);
+    if ( aDialogId != KErrNotFound )
+        {
+        note->PublishDialogL( aDialogId );
+        }
+    note->ExecuteLD( *noteTxt );
+    CleanupStack::Pop(note);
+    CleanupStack::PopAndDestroy( noteTxt );
+    IRLOG_DEBUG("CIRDialogLauncher::ShowInformationNoteL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowInformationNoteL
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ShowInformationNoteL( TInt /*aErrorCode*/ ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowInformationNoteL - Entering" );
+/*    HBufC* noteTxt= ResolveDefaultErrorTextLC( aErrorCode );
+    
+    CAknInformationNote* note = new( ELeave ) CAknInformationNote( ETrue );
+    note->ExecuteLD( *noteTxt );
+    CleanupStack::PopAndDestroy( noteTxt );
+*/    
+    IRLOG_DEBUG("CIRDialogLauncher::ShowInformationNoteL - Exiting" );
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowErrorNoteL
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ShowErrorNoteL( TInt aTextResourceId, TBool aWaiting ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowErrorNoteL - Entering" );
+    HBufC* noteTxt = StringLoader::LoadLC( aTextResourceId );
+    CAknErrorNote* note = new( ELeave ) CAknErrorNote( aWaiting );
+    note->ExecuteLD( *noteTxt );
+    CleanupStack::PopAndDestroy( noteTxt );
+    IRLOG_DEBUG("CIRDialogLauncher::ShowErrorNoteL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowGlobalNoteL
+// ---------------------------------------------------------------------------
+//
+void CIRDialogLauncher::ShowGlobalNoteL( TAknGlobalNoteType aType, TInt aTextResourceId ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowGlobalNoteL - Entering" );
+	HBufC* noteTxt = StringLoader::LoadLC( aTextResourceId );
+	CAknGlobalNote* note = CAknGlobalNote::NewLC();
+	note->ShowNoteL( aType, *noteTxt );
+	CleanupStack::PopAndDestroy( 2, noteTxt );	// note, noteTxt
+	IRLOG_DEBUG("CIRDialogLauncher::ShowGlobalNoteL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ShowQueryDialogDeletionL
+// ---------------------------------------------------------------------------
+//
+
+void CIRDialogLauncher::ShowQueryDialogDeletionL(const TDesC& aMessage,TInt& aValue)
+	{
+	IRLOG_DEBUG("CIRDialogLauncher::ShowQueryDialogDeletionL - Entering" );
+	CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+	aValue = dlg->ExecuteLD(R_QUERY_DELETION,aMessage);	
+	IRLOG_DEBUG("CIRDialogLauncher::ShowQueryDialogDeletionL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRDialogLauncher::ResolveDefaultErrorTextL
+// ---------------------------------------------------------------------------
+//
+
+#ifdef __NOTREQUIRED__
+HBufC* CIRDialogLauncher::ResolveDefaultErrorTextLC( TInt aErrorCode ) const
+    {
+    VRDEBUG2( " *** S60VisualRadio -- CIRDialogLauncher::ResolveDefaultErrorTextL: error=%d", 
+        aErrorCode );
+   
+    CTextResolver* textResolver = CTextResolver::NewLC();
+
+#ifdef RD_COMMON_ENGINE_API_CHANGE
+    TPtrC ptr = textResolver->ResolveErrorString( aErrorCode, 
+                                                  CTextResolver::ECtxNoCtxNoSeparator );
+#else
+    TPtrC ptr = textResolver->ResolveError( aErrorCode, CTextResolver::ECtxNoCtxNoSeparator );
+#endif
+
+    if( !(ptr.Length()) )    // Text resolver returned hidden
+        {
+        VRDEBUG( " *** S60VisualRadio -- CIRDialogLauncher::ResolveDefaultErrorTextL: TextResolver returned hidden" );
+        // -4135 -> -4174
+        if ( ( aErrorCode <= KErrGprsServicesNotAllowed ) && 
+             ( aErrorCode >= KErrGprsPDPContextWithoutTFTAlreadyActivated ) )
+            {
+            VRDEBUG3( " *** S60VisualRadio -- Error note: %d - %d", 
+                      KErrGprsServicesNotAllowed, 
+                      KErrGprsPDPContextWithoutTFTAlreadyActivated );
+#ifdef RD_COMMON_ENGINE_API_CHANGE
+            ptr.Set( textResolver->ResolveErrorString( KErrGprsMissingorUnknownAPN ) );
+#else
+            ptr.Set( textResolver->ResolveError( KErrGprsMissingorUnknownAPN ) );
+#endif
+            }
+        // -8000 -> -8268 & -4000 -> -5124
+        else if ( ( ( aErrorCode <= KErrPhoneSpecificGsmBase ) && 
+                ( aErrorCode >= KErrGsmOfflineOpNotAllowed ) )  ||
+                ( ( aErrorCode <= KErrEtelGsmBase ) &&
+                ( aErrorCode >= KErrGsm0707UnknownError ) ) )
+            {
+            VRDEBUG3( " *** S60VisualRadio -- Error note: %d - %d", 
+                      KErrPhoneSpecificGsmBase, KErrGsmOfflineOpNotAllowed );
+            VRDEBUG3( " *** S60VisualRadio -- Error note: %d - %d", 
+                      KErrEtelGsmBase, KErrGsm0707UnknownError );
+#ifdef RD_COMMON_ENGINE_API_CHANGE
+            ptr.Set( textResolver->ResolveErrorString( KErrNetUnreach ) );
+#else
+            ptr.Set( textResolver->ResolveError( KErrNetUnreach ) );
+#endif
+            }
+        else
+            {
+            }
+                    
+        if( !(ptr.Length()) )    // If still no error text
+            {
+            VRDEBUG( " *** S60VisualRadio -- Error note, no text found" );
+#ifdef RD_COMMON_ENGINE_API_CHANGE
+            ptr.Set( textResolver->ResolveErrorString( KErrGeneral ) );
+#else
+            ptr.Set( textResolver->ResolveError( KErrGeneral ) );
+#endif
+            }
+        }
+    // copy to errorText before deleting textResolver
+    HBufC* errorText = ptr.AllocL();    
+    CleanupStack::PopAndDestroy( textResolver );
+    CleanupStack::PushL( errorText );
+    
+    return errorText;
+    }
+#endif
+
+
+
+// -----------------------------------------------------------------------
+// CIRDialogLauncher::ShowQueryDialogL
+// -----------------------------------------------------------------------
+//
+
+void CIRDialogLauncher::ShowQueryDialogL( TInt aResourceId,TInt& aValue,
+									 TInt aDialogId ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowQueryDialogL " );
+    TInt dlgValue;
+    ShowQueryDialogL( aResourceId, KNullDesC,dlgValue,aDialogId);
+    aValue = dlgValue;
+    }
+    
+  
+    
+// -----------------------------------------------------------------------
+// CIRDialogLauncher::ShowQueryDialogL
+// -----------------------------------------------------------------------
+//
+
+void CIRDialogLauncher::ShowQueryDialogL( 
+        TInt aResourceId, const TDesC& aPrompt, TInt& aValue ,TInt aDialogId ) const
+    {
+    IRLOG_DEBUG("CIRDialogLauncher::ShowQueryDialogL - Entering" );
+    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+    CleanupStack::PushL(dlg);
+    dlg->PrepareLC( aResourceId );
+    if ( aPrompt.Length() > 0 )
+        {
+        dlg->SetPromptL( aPrompt );
+        }
+    if ( aDialogId != KErrNotFound )
+        {
+        dlg->PublishDialogL( aDialogId );
+        }
+    aValue = dlg->RunLD();
+    CleanupStack::Pop(dlg);
+    IRLOG_DEBUG("CIRDialogLauncher::ShowQueryDialogL - Exiting" );
+    }
+ 
+    
+
+  
+
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irdiskspacesession.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* 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:  Contains logic for watching certain disk's space
+*
+*/
+
+
+#include "irdebug.h"
+#include "irdiskspacesession.h"
+#include "irdiskspacewatcherobserver.h"
+
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//
+CIRDiskSpaceSession::CIRDiskSpaceSession( 
+        MIRDiskSpaceWatcherObserver& aDiskSpaceWatcherObserver, 
+        const TDriveNumber& aDriveNumber, 
+        const TInt64& aCriticalLevel,
+        RFs& aFs ) : 
+            CActive( CActive::EPriorityStandard ),       
+            iObserver( aDiskSpaceWatcherObserver ),
+            iDriveNumber( aDriveNumber ),
+            iCriticalLevel ( aCriticalLevel ),
+            iFs ( aFs )
+    {
+    }
+            
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CIRDiskSpaceSession* CIRDiskSpaceSession::NewL( 
+        MIRDiskSpaceWatcherObserver& aDiskSpaceWatcherObserver, 
+        const TDriveNumber& aDriveNumber, 
+        const TInt64& aCriticalLevel,
+        RFs& aFs )
+    {
+    
+    CIRDiskSpaceSession* self = new( ELeave ) CIRDiskSpaceSession( 
+            aDiskSpaceWatcherObserver,
+            aDriveNumber, 
+            aCriticalLevel,
+            aFs );
+   
+	CleanupStack::PushL( self );
+	
+	self->ConstructL();
+        
+	CleanupStack::Pop( self );
+    return self;
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//            
+CIRDiskSpaceSession::~CIRDiskSpaceSession()
+    {        
+    Cancel();
+    }
+            
+            
+// ---------------------------------------------------------------------------
+// Second stage constructor
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceSession::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    RunL();
+    }
+    
+            
+// ---------------------------------------------------------------------------
+// DriveNumber
+// ---------------------------------------------------------------------------
+//
+TDriveNumber CIRDiskSpaceSession::DriveNumber() 
+    {
+    return iDriveNumber;
+    }
+
+    
+// ---------------------------------------------------------------------------
+// SetObserverCount
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceSession::SetObserverCount( TInt aObserverCount ) 
+    {
+    iObserverCount = aObserverCount;
+    }
+
+
+// ---------------------------------------------------------------------------
+// ObserverCount
+// ---------------------------------------------------------------------------
+//
+TInt CIRDiskSpaceSession::ObserverCount() 
+    {
+    return iObserverCount;
+    }
+
+            
+// ---------------------------------------------------------------------------
+// From class CActive. 
+// Cancels the pending request.
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceSession::DoCancel() 
+    {    
+    iFs.NotifyDiskSpaceCancel( iStatus );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CActive. 
+// Invoked when the observed disk's free disk space has run below
+// the supplied critical level.
+// Notifies the observer and regenerates the request to RFs' NotifyDiskSpace.
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceSession::RunL()
+    { 
+	IRRDEBUG2("CIRDiskSpaceSession::RunL - iDriveNumber=%d", iDriveNumber);
+    IRRDEBUG2("CIRDiskSpaceSession::RunL - iCriticalLevel=%d", iCriticalLevel);
+    iFs.NotifyDiskSpace( iCriticalLevel, iDriveNumber, iStatus );
+    SetActive();
+        
+    if ( IsBelowCriticalLevel( iDriveNumber ) )
+        {
+        IRRDEBUG2("CIRDiskSpaceSession::RunL - LOW MEMORY detected", KNullDesC);
+        TRAP_IGNORE( iObserver.NotifyLowDiskSpaceL() )
+        }
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Returns ETrue if below the critical level in defined disk, otherwise EFalse
+// ---------------------------------------------------------------------------
+//
+TBool CIRDiskSpaceSession::IsBelowCriticalLevel(
+        const TDriveNumber& aDriveNumber ) const    
+    {
+    TBool ret = EFalse;
+
+    TVolumeInfo volInfo;
+    if ( iFs.Volume( volInfo, aDriveNumber ) == KErrNone )
+        {
+        if ( volInfo.iFree < iCriticalLevel )
+            {
+            IRRDEBUG3( "CIRDiskSpaceSession::IsBelowCriticalLevel - Low Memory. Disk space [%d] is under the critical [%d] level!", 
+                static_cast<TInt>( volInfo.iFree ), 
+                static_cast<TInt>( iCriticalLevel ) ); 
+            ret = ETrue;
+            }
+        else
+	        {
+            IRRDEBUG3( "CIRDiskSpaceSession::IsBelowCriticalLevel - Enough Disk space [%d] in DriveNumber [%d].", 
+                static_cast<TInt>( volInfo.iFree ), 
+                static_cast<TInt>( aDriveNumber ) ); 
+	        }
+        }
+    
+    return ret;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irdiskspacewatcher.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2004 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:  Performs disk space watching.
+*
+*/
+
+
+#include    <f32file.h>
+
+#include    "irdebug.h"
+#include    "irdiskspacewatcher.h"
+#include    "irdiskspacesession.h"
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRDiskSpaceWatcher::CIRDiskSpaceWatcher( const TInt64& aCriticalLevel, 
+        MIRDiskSpaceWatcherObserver& aDiskSpaceWatcherObserver ) :
+        iCriticalLevel( aCriticalLevel ), 
+        iObserver ( aDiskSpaceWatcherObserver )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceWatcher::ConstructL()
+    {
+    User::LeaveIfError(iFs.Connect());
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRDiskSpaceWatcher* CIRDiskSpaceWatcher::NewL( const TInt64& aCriticalLevel, 
+        MIRDiskSpaceWatcherObserver& aDiskSpaceWatcherObserver )
+    
+    {
+    CIRDiskSpaceWatcher* self = new( ELeave ) CIRDiskSpaceWatcher( aCriticalLevel, 
+        aDiskSpaceWatcherObserver );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRDiskSpaceWatcher::~CIRDiskSpaceWatcher()
+    {   
+    iDiskSpaceSessions.ResetAndDestroy();
+    iDiskSpaceSessions.Close();
+    iFs.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns ETrue if below the critical level in defined disk, otherwise EFalse
+// ---------------------------------------------------------------------------
+//
+TBool CIRDiskSpaceWatcher::IsBelowCriticalLevel( 
+        const TDriveNumber& aDriveNumber ) const
+    {
+    TBool returnValue = EFalse; 
+ 
+    if ( iDiskSpaceSessions.Count() > 0 )
+        {        
+        CIRDiskSpaceSession* session = iDiskSpaceSessions[0];
+        returnValue = session->IsBelowCriticalLevel( aDriveNumber );
+        }
+
+    return returnValue;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRDiskSpaceWatcher::StartObservingDriveL
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceWatcher::StartObservingDriveL( 
+        const TDriveNumber& aDriveNumber )
+    {
+    TBool found = EFalse;
+
+    for ( TInt i = 0 ; i < iDiskSpaceSessions.Count() ; i++ )
+        {
+        CIRDiskSpaceSession* session = iDiskSpaceSessions[i];
+        if ( session->DriveNumber() == aDriveNumber )
+            {
+            session->SetObserverCount( session->ObserverCount() + 1 );
+            found = ETrue;
+            /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+            break;
+            /*lint -restore*/
+            }
+        }
+    if ( !found )
+        {
+        CIRDiskSpaceSession* session = CIRDiskSpaceSession::NewL( *this, 
+            aDriveNumber, iCriticalLevel, iFs );
+        session->SetObserverCount( 1 );
+        iDiskSpaceSessions.Append( session );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRDiskSpaceWatcher::StopObservingDrive
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceWatcher::StopObservingDrive( 
+        const TDriveNumber& aDriveNumber )     
+    {
+    for ( TInt i = 0 ; i < iDiskSpaceSessions.Count() ; i++ )
+        {
+        CIRDiskSpaceSession* session = iDiskSpaceSessions[i];
+        if ( session->DriveNumber() == aDriveNumber )
+            {
+            session->SetObserverCount( session->ObserverCount() - 1 );
+            if ( session->ObserverCount() == 0 )
+                {
+                iDiskSpaceSessions.Remove( i );
+                delete session;
+                session = NULL;
+                }
+            /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+            break;
+            /*lint -restore*/
+            }
+        }
+    
+    }
+
+    
+// ---------------------------------------------------------------------------
+// From class MIRDiskSpaceWatcherObserver.
+// CIRDiskSpaceWatcher::NotifyLowDiskSpaceL
+// ---------------------------------------------------------------------------
+//
+void CIRDiskSpaceWatcher::NotifyLowDiskSpaceL()
+    {
+    IRRDEBUG2("CIRDiskSpaceWatcher::NotifyLowDiskSpaceL - Phone LOW MEMORY detected", KNullDesC);
+    iObserver.NotifyLowDiskSpaceL();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irdocument.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <aknglobalnote.h>
+#include <apgwgnam.h>
+#include <hal.h>
+#include <internetradio.rsg>
+#include <stringloader.h>
+#include <coeaui.h>
+
+#include "ir.hrh"
+#include "irdebug.h"
+#include "irdocument.h"
+#include "irui.h"
+#include "irpubsubkeys.h"
+
+
+// At least 3 MB of free RAM is needed to run the application.
+const TInt KIRMinimumRAMNeeded = 3145728;
+// 5 seconds inverval for memory check timer.
+const TTimeIntervalMicroSeconds32 KIRMemCheckTimerInterval = 5000000;
+
+const TInt KBufMaxSize = 255;
+
+_LIT( KIRPlsFile, "c:\\private\\2000b499\\tempplsfile.pls" );
+// ----------------------------------------------------------------------------
+// CIRDocument::NewL(CEikApplication& aApp).
+// returns an instance of CIRDocument.
+// ----------------------------------------------------------------------------
+//      
+CIRDocument* CIRDocument::NewL(CEikApplication& aApp)
+    {
+    IRLOG_INFO( "CIRDocument::NewL - Entering" );    
+    CIRDocument* self = new (ELeave) CIRDocument(aApp);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRDocument::NewL - Exiting" );    
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::ConstructL().
+// ----------------------------------------------------------------------------
+//  
+void CIRDocument::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRDocument::ConstructL - Entering" );  
+	iMemCheckTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+    iMemCheckTimer->Start(0, KIRMemCheckTimerInterval, 
+        TCallBack( CIRDocument::MemCheckTimerCallback, this ) );
+    IRLOG_DEBUG( "CIRDocument::ConstructL - Exiting" );
+    }    
+
+
+// ----------------------------------------------------------------------------
+// CIRDocument::CIRDocument(CEikApplication& aApp).
+// ----------------------------------------------------------------------------
+//
+CIRDocument::CIRDocument(CEikApplication& aApp) : CAknDocument(aApp) 
+    {
+    IRLOG_DEBUG( "CIRDocument::CIRDocument" );
+    }
+
+CIRDocument::~CIRDocument()
+    {
+    IRLOG_DEBUG( "CIRDocument::~CIRDocument - Entering" );
+    delete iMemCheckTimer;
+    IRLOG_DEBUG( "CIRDocument::~CIRDocument - Exiting" );
+    }
+    
+// ----------------------------------------------------------------------------
+// CIRDocument::CreateAppUiL().
+// Create the application user interface, and return a pointer to it,the 
+// framework takes ownership of this object 
+// ----------------------------------------------------------------------------
+// 
+CEikAppUi* CIRDocument::CreateAppUiL()
+    {
+    IRLOG_DEBUG( "CIRDocument::CreateAppUiL - Entering" );
+    iAppUi = new (ELeave) CIRUi;
+    IRLOG_DEBUG( "CIRDocument::CreateAppUiL - Exiting" );
+    return iAppUi;
+    }
+
+TInt CIRDocument::MemCheckTimerCallback(TAny* /*aSelf*/)
+    {
+    IRLOG_DEBUG("CIRDocument::MemCheckTimerCallback(TAny*) - Entering");
+    TInt val(0);
+    TInt err = HAL::Get(HALData::EMemoryRAMFree, val);
+    if ( err || (val < KIRMinimumRAMNeeded) )
+        {
+        TRAP_IGNORE(
+            HBufC* errorText = StringLoader::LoadLC( R_IRAPP_MEMLO_RAM_OUT_OF_MEM );
+            CAknGlobalNote* note = CAknGlobalNote::NewLC();
+            note->ShowNoteL( EAknGlobalErrorNote, *errorText );
+            CleanupStack::PopAndDestroy( note );
+            CleanupStack::PopAndDestroy( errorText ) )
+        User::Exit( KErrNoMemory );
+        }
+    IRLOG_DEBUG("CIRDocument::MemCheckTimerCallback(TAny*) - Exiting");
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::OpenFileL( TBool aDoOpen, const TDesC& aFilename, RFs& aFs )
+// ----------------------------------------------------------------------------
+//
+CFileStore* CIRDocument::OpenFileL( TBool /*aDoOpen*/, const TDesC& aFilename, RFs& /*aFs*/ )
+    {
+    IRLOG_DEBUG("CIRDocument::OpenFileL(TBool, const TDesC&, RFs&)");
+    _LIT(KPlsExtension, ".pls");
+    
+    CIRUi *appui = static_cast<CIRUi *> (iAppUi);
+
+	TParse parse;
+	parse.Set(aFilename,NULL,NULL);
+	TPtrC ext=parse.Ext(); // extract the extension from the filename  
+	CEikonEnv* env = CEikonEnv::Static();      
+	RFs& fs = env->FsSession();
+	RFile plsFile;
+	TInt status=plsFile.Open(fs, aFilename, EFileShareReadersOnly);
+	if(status)
+		{
+	    OpenFileL( ETrue, aFilename, fs );
+		return NULL;	
+		}
+	CleanupClosePushL(plsFile);
+	CFileStore* fileStore;
+	fileStore = NULL; //So the other OpenFileL version is not called
+
+	if (ext.CompareF(KPlsExtension)==0) 
+		{
+		appui->ParsePlsDataL(fileStore,plsFile);	
+		}
+	CleanupStack::PopAndDestroy( &plsFile );
+	//Deleting the local copy of the pls file
+	fs.Delete( KIRPlsFile );	
+	return NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile)
+// ----------------------------------------------------------------------------
+//
+
+void CIRDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile)
+    {
+	IRLOG_DEBUG("CIRDocument::OpenFileL(CFileStore*&, RFile&) - Entering");
+	CIRUi *appui = static_cast<CIRUi *> (iAppUi);
+	aFileStore = NULL;  //So the other OpenFileL version is not called
+	
+	TBuf16<KBufMaxSize> aName;
+	aFile.FullName(aName);
+
+	CEikonEnv* env = CEikonEnv::Static();
+	TApaTaskList taskList( env->WsSession() );
+	// Find handler application by its UID
+	RWsSession& ws = env->WsSession();
+	const TInt myWgId = env->RootWin().Identifier();
+	TInt wgId = 0;
+	TUid uid(KUidActiveInternetRadioApp);
+	// Look for another instance of this app
+	while (wgId >= 0)
+		{
+		if (wgId && wgId != myWgId)
+			{
+			TApaTask FirstInstance(ws);
+			TApaTask SecondInstance(ws);
+			FirstInstance.SetWgId(wgId);
+			SecondInstance.SetWgId(myWgId);
+			SecondInstance.EndTask();  
+			
+		    //To copy the contents of .PLS file into local PLS file 
+		    
+		    TInt fileSize;
+		    User::LeaveIfError( aFile.Size( fileSize ) );
+			HBufC8* plsData = HBufC8::NewLC( fileSize );
+			TPtr8 pData8( plsData->Des() );
+			User::LeaveIfError( aFile.Read( pData8 ) );
+			RFile plsFile;
+			RFs& fs = env->FsSession();
+			TInt ret=plsFile.Open(fs, KIRPlsFile, EFileShareReadersOrWriters);
+			if(ret==KErrNotFound)
+				{
+				TInt status=plsFile.Create(fs, KIRPlsFile, EFileShareReadersOrWriters);
+				}
+            plsFile.Write(pData8);
+			TBuf16<KBufMaxSize> plsName;
+			plsFile.FullName(plsName);
+            
+            CleanupStack::PopAndDestroy( plsData );
+            
+			User::LeaveIfError( FirstInstance.SwitchOpenFile( plsName ) );
+			return;
+			}
+		CApaWindowGroupName::FindByAppUid(uid, ws, wgId);
+		}
+
+	_LIT(KPlsExtension, ".pls");
+	TParse parse;
+	parse.Set(aName,NULL,NULL);
+	TPtrC ext=parse.Ext(); // extract the extension from the filename
+	if (ext.CompareF(KPlsExtension)==0) 
+		{
+		appui->ParsePlsDataL(aFileStore,aFile);	
+		}
+	IRLOG_DEBUG("CIRDocument::OpenFileL - Exiting."); 
+    }
+
+// ---------------------------------------------------------------------------
+// From CEikDocument; Hide the application from the tasklist
+// ---------------------------------------------------------------------------
+//    
+void CIRDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+    {
+    IRLOG_INFO("CIRDocument::UpdateTaskNameL - Hiding InternetRadio from grid - Entering");
+    CAknDocument::UpdateTaskNameL( aWgName );
+#ifndef __DISABLE_RADIO_LAUNCHER
+    
+    aWgName->SetHidden( EFalse );
+    IRLOG_DEBUG("CIRDocument::UpdateTaskNameL - Exiting."); 
+#endif
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irfilteredmodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,166 @@
+/*
+* 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 "irfilteredmodel.h"
+#include <stringloader.h> 
+#include "irdebug.h"
+
+
+// ----------------------------------------------------------
+// TInt  CIRFilteredModel::NumberOfItems() 
+// returns the number of items the list box has. 
+// ----------------------------------------------------------	
+TInt CIRFilteredModel::NumberOfItems() const
+    {
+    IRLOG_DEBUG( "CIRFilteredModel::NumberOfItems - Entering." );
+	TBool flag = EFalse;
+	TInt count = CAknFilteredTextListBoxModel::NumberOfItems();
+
+	TInt arrayCount = 0;
+	if(iListBoxArray)
+	arrayCount =  MatchableTextArray()->MdcaCount();
+	
+
+	TInt actualIndex = 0;
+	if(CAknFilteredTextListBoxModel::Filter ()) 
+		{
+		TInt filteredCount = CAknFilteredTextListBoxModel::Filter ()->FilteredNumberOfItems ();
+		if(filteredCount>0)
+		actualIndex = CAknFilteredTextListBoxModel::Filter ()->FilteredItemIndex(0);
+		// if the actual index of first filtered element is greater than zero and lastplayed
+		// is present (or) if the lastplayed is present and the number of filtered elements is zero
+		// increment the count and the flag to true.
+		if(( actualIndex != 0 && iAdFlag)||(filteredCount == 0 && iAdFlag ))
+			{
+			count++;
+			flag = ETrue;
+			iListBoxArray->SetFlag(flag);
+			}
+		}
+	if(count==arrayCount && !flag)
+		{
+		if(iListBoxArray)
+			{
+			iListBoxArray->SetFlag(EFalse);
+			iListBoxArray->SetIndexFlag(EFalse);
+			}
+		}
+    IRLOG_DEBUG( "CIRFilteredModel::NumberOfItems - Exiting." );
+	return count;
+    }
+// ----------------------------------------------------------
+// void CIRFilteredModel::SetItemAtZero() 
+// sets the item at the zeroth index. 
+// ----------------------------------------------------------	
+void CIRFilteredModel::SetItemAtZero(TBool aAdFlag,HBufC& aAdvString,TBool aMainView)
+	{
+    IRLOG_DEBUG( "CIRFilteredModel::SetItemAtZero - Entering." );
+	iLastPlayedString = &aAdvString;
+	iAdFlag = aAdFlag;
+	iListBoxArray->SetItemAtZero(iAdFlag,*iLastPlayedString,aMainView);
+    IRLOG_DEBUG( "CIRFilteredModel::SetItemAtZero - Exiting." );
+	}
+// ----------------------------------------------------------
+// void CIRFilteredModel::SetItemAtZero() 
+// sets the item at the zeroth index. 
+// ----------------------------------------------------------	
+void CIRFilteredModel::SetAdvFlag(TBool aAdFlag,HBufC& aAdvString)
+	{
+    IRLOG_DEBUG( "CIRFilteredModel::SetItemAtZero - Entering." );
+	iLastPlayedString = &aAdvString;
+	iAdFlag = aAdFlag;
+    IRLOG_DEBUG( "CIRFilteredModel::SetItemAtZero - Exiting." );
+	}
+// ----------------------------------------------------------
+// TPtrC CIRFilteredModel::ItemText(TInt aItemIndex) const
+// Returns the text of the specified item. 
+// ----------------------------------------------------------	
+TPtrC CIRFilteredModel::ItemText(TInt aItemIndex) const
+    {
+    IRLOG_DEBUG( "CIRFilteredModel::ItemText - Entering." );
+	// if lastplayed is not present in the filtered items/elements
+	if(iListBoxArray->iFlag )
+		{
+		if(aItemIndex == 0)
+			{
+			TPtr ptr(iLastPlayedString->Des());
+			IRLOG_DEBUG( "CIRFilteredModel::ItemText - Exiting." );
+			return ptr;
+			}
+		else
+			{
+			TInt actualIndex = 0;
+		//	TInt filteredCount 
+			if(CAknFilteredTextListBoxModel::Filter ()) 
+				{
+				actualIndex = CAknFilteredTextListBoxModel::Filter ()->FilteredItemIndex(aItemIndex-1);//aItemIndex-1
+				TPtrC16 advString = CAknFilteredTextListBoxModel::MatchableTextArray()->MdcaPoint(actualIndex);
+				TPtrC16 lastplayedstring = CAknFilteredTextListBoxModel::MatchableTextArray()->MdcaPoint(0);
+				if(lastplayedstring ==advString)
+					{
+					iListBoxArray->SetIndexFlag(ETrue);
+					}
+				if(iListBoxArray->GetIndexFlag())
+					{
+					actualIndex = CAknFilteredTextListBoxModel::Filter ()->FilteredItemIndex(aItemIndex);						
+					}
+				else
+					{
+					actualIndex = CAknFilteredTextListBoxModel::Filter ()->FilteredItemIndex(aItemIndex-1);						
+					}
+			//	filteredCount = CAknFilteredTextListBoxModel::Filter ()->FilteredNumberOfItems ()
+				}
+			IRLOG_DEBUG( "CIRFilteredModel::ItemText - Exiting." );
+			return iListBoxArray->MdcaPoint(actualIndex);
+			}
+	    }
+	//If the filtering is not done.
+	else
+		{
+		TInt actualIndex;
+		//TInt filteredCount 
+		if(CAknFilteredTextListBoxModel::Filter ()) 
+			{
+			actualIndex = CAknFilteredTextListBoxModel::Filter ()->FilteredItemIndex(aItemIndex);
+		//	filteredCount = CAknFilteredTextListBoxModel::Filter ()->FilteredNumberOfItems ()
+			}
+		else
+		actualIndex = aItemIndex;
+		IRLOG_DEBUG( "CIRFilteredModel::ItemText - Exiting." );
+		return iListBoxArray->MdcaPoint(actualIndex);
+		//	return CAknFilteredTextListBoxModel::ItemText (aItemIndex)
+		}
+
+
+    }
+// ----------------------------------------------------------
+// void CIRFilteredModel::SetItemAtZero() 
+// sets the item at the zeroth index. 
+// ----------------------------------------------------------	
+void CIRFilteredModel::SetListArray( MIRListBoxArray* aListArray)
+	{
+    IRLOG_DEBUG( "CIRFilteredModel::SetListArray - Entering." );
+    iListBoxArray = aListArray;	
+    IRLOG_DEBUG( "CIRFilteredModel::SetListArray - Exiting." );
+	}
+// ----------------------------------------------------------
+// TPtrC CIRFilteredModel::MdcaPoint() const
+// Returns the text of the specified item. 
+// ----------------------------------------------------------	
+const MDesCArray* CIRFilteredModel::MatchableTextArray  ()  const
+	{
+	return (iListBoxArray);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irfirsttimecontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,327 @@
+/*
+* Copyright (c)  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:  Find stations container.
+*
+*/
+
+
+#include <aknlists.h>
+#include <eikfrlbd.h> 
+
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <eikenv.h>
+#include "irbaseview.h"
+
+
+#include <eikfrlbd.h>
+
+
+#include <internetradio.rsg>
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irfirsttimeview.h"
+#include "irfirsttimecontainer.h"
+
+#include "iraap.hlp.hrh"
+
+
+// The granularity of the scan stations list box.
+
+const TInt KMenubufMaxLength = 522;
+const TInt KStringSize = 20;
+#define KCONTROLSCOUNT 0
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeContainer::CIRFirstTimeContainer(CIRFirstTimeView& aFirstTimeView):
+                                             iFirstTimeView(aFirstTimeView)
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::CIRFirstTimeContainer" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFirstTimeContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::ConstructL( const TRect& aRect )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::ConstructL - Entering" );
+    CreateWindowL();
+    iListbox = new(ELeave) CAknDoubleStyleListBox;
+    iListbox->SetContainerWindowL(*this);
+    iListbox->ConstructL(this,EAknListBoxSelectionList);
+
+	iItemArray = static_cast<CDesCArray*>( iListbox->Model()->ItemTextArray());
+    PopulateFindStationListL();
+
+			
+    iListbox->SetCurrentItemIndex(iFirstTimeView.GetCurrentFocus());
+	iListbox->HandleItemAdditionL( );
+
+    
+    SetRect( aRect );
+    DrawNow();
+       
+    iListbox->CreateScrollBarFrameL( ETrue );
+    iListbox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+                                              CEikScrollBarFrame::EAuto);
+    
+    iListbox->SetListBoxObserver( this );  
+	IRLOG_DEBUG( "CIRFirstTimeContainer::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeContainer::~CIRFirstTimeContainer()
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::~CIRFirstTimeContainer - Entering" );
+	if(iListbox)
+		{
+		delete iListbox;
+		iListbox = NULL;
+		}
+    IRLOG_DEBUG( "CIRFirstTimeContainer::~CIRFirstTimeContainer - Exiting" );
+    }
+
+//----------------------------------------------------------------------------
+// CIRFirstTimeContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRFirstTimeContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRFirstTimeContainer::CountComponentControls - Entering" );
+	TInt count(KCONTROLSCOUNT);
+	if(iListbox)
+		{
+		count++;
+		}
+	IRLOG_DEBUG( "CIRFirstTimeContainer::CountComponentControls - Exiting" );
+	return count;
+	}
+//----------------------------------------------------------------------------
+// CIRFirstTimeContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRFirstTimeContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRFirstTimeContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRFirstTimeContainer::ComponentControl - Exiting" );
+	switch(aIndex)
+		{
+		case 0:
+			{
+			if(iListbox)
+			return iListbox;
+			}
+		default:
+			return NULL;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things 
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRFirstTimeContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::OfferKeyEventL" );
+	return iListbox->OfferKeyEventL(aKeyEvent, aType );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::GetHelpContext - Entering" );
+	aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_RESULTS  );
+	IRLOG_DEBUG( "CIRFirstTimeContainer::GetHelpContext - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MEikListBoxObserver.
+// List box event handler.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::HandleListBoxEventL - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi( ) );
+    
+    switch ( aEventType )
+        {
+        case EEventEnterKeyPressed:
+        	 /**  Keypress event. */
+        case EEventItemDoubleClicked:
+            /**  Item single-tap event */
+            iFirstTimeView.SetCurrentFocus(iListbox->CurrentItemIndex());
+            switch( iListbox->CurrentItemIndex( ) )
+                {
+                case 0:
+					{
+					TBuf8<2> dummy;
+					TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRStationDirectoryViewId);
+					appUi->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+					}
+                    break;
+                case 1:
+	                {
+					if( !iFirstTimeView.iUi->CheckAndNotifyLowDiskSpaceL() )
+						{
+						HBufC *SearchTitle = StringLoader::LoadLC(R_IRAPP_SEARCH_STRING);
+	                	_LIT(KNullText,"");
+						RBuf string1;
+						string1.Create(KStringSize);
+						string1.Append(KNullText);
+						iFirstTimeView.ShowQueryDialogL(*SearchTitle,string1);
+						CleanupStack::PopAndDestroy(SearchTitle);
+						string1.Close();
+						}
+	                }
+                    break;
+                case 2:
+                	{
+					if( !iFirstTimeView.iUi->CheckAndNotifyLowDiskSpaceL() )
+						{
+	                	appUi->SetEditStation(EFalse);
+	                    appUi->ActivateLocalViewL(KIRAddManuallyStationViewID);
+						}
+                	}
+                    break;
+                default:
+                    break;
+                }
+			/* fall through */ // pc-lint Warning -e616                
+         default:
+            break;
+        }
+    IRLOG_DEBUG( "CIRFirstTimeContainer::HandleListBoxEventL - Exiting" );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::Draw()
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::Draw - Entering" );
+    CWindowGc& gc = SystemGc();
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushColor( KRgbBlue );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    IRLOG_DEBUG( "CIRFirstTimeContainer::Draw - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Populates listbox
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::PopulateFindStationListL( )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeContainer::PopulateFindStationListL - Entering" );   
+    //Fetches the data to be displayed in this view from resource.
+    if(!(iItemArray->Count()))
+	    {
+		CreateFindStationDataL(R_IRAPP_FINDSTATION_DIRECTORY
+			,R_IRAPP_MAIN_DISCOVER_EXPAND);
+		CreateFindStationDataL(R_IRAPP_MAIN_MENU_SEARCH
+			,R_IRAPP_FINDSTATION_SEARCH_EXPAND);
+		CreateFindStationDataL(R_IRAPP_FINDSTATION_ADDSTATIONMANUALLY
+			,R_IRAPP_FINDSTATION_ADDSTATIONMANUALLY_EXPAND);
+	    }
+	IRLOG_DEBUG( "CIRFirstTimeContainer::PopulateFindStationListL - Exiting" );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CreateDiscoverStationDataL(TInt aTitle,TInt aDescription)
+// Fetches the data from stringloader that should be displayed
+// and sets it to the listbox.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::CreateFindStationDataL(TInt aTitle,TInt aDescription)
+	{
+	IRLOG_DEBUG( "CIRFirstTimeContainer::CreateFindStationDataL - Entering" );
+	_LIT(KTabSpace,"\t");
+	
+	HBufC *titleData = StringLoader::LoadLC(aTitle);
+    HBufC *descriptionData = StringLoader::LoadLC(aDescription);
+    TBuf<KMenubufMaxLength> menubuf;
+   	menubuf.Append(KTabSpace);
+  	menubuf.Append(*titleData);
+  	menubuf.Append(KTabSpace);
+  	menubuf.Append(*descriptionData);
+  	iItemArray->AppendL(menubuf);
+  	CleanupStack::PopAndDestroy(descriptionData);
+	CleanupStack::PopAndDestroy(titleData);
+	IRLOG_DEBUG( "CIRFirstTimeContainer::CreateFindStationDataL - Exiting" );
+	}
+// -----------------------------------------------------------------------------
+// CIRFirstTimeContainer::SizeChanged()
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::SizeChanged()
+    {  
+    iListbox->SetRect(Rect());
+    }
+// ---------------------------------------------------------------------------
+// CIRFirstTimeContainer::GetCurrentItemIndex()
+// returns the index of the currently selected item
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRFirstTimeContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRStationDirectoryContainer::GetCurrentItemIndex" );
+	return iListbox->CurrentItemIndex();
+    }
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeContainer::HandleResourceChange(TInt aType)
+	{
+	IRRDEBUG( "CIRFirstTimeContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+	iFirstTimeView.RefreshView();
+	IRRDEBUG( "CIRFirstTimeContainer::HandleResourceChange - Exiting" );
+	}
+// End of file
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irfirsttimeview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,616 @@
+/*
+* Copyright (c) 2008-2008 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:  Find Station View
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <aknnotewrappers.h>
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <internetradio.rsg>
+#include "irfirsttimeview.h"
+#include <internetradio.mbg>
+#include "irfirsttimecontainer.h"
+#include "ircommon.h"
+/* don't need to change to lower case  */
+#include <AknQueryDialog.h> 
+#include "irisdswrapper.h"
+
+  
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irsettings.h"
+#include <stringloader.h>
+#include "irnowplayingwrapper.h"
+
+
+#include "hlplch.h"
+#include "irsettings.h"
+#include "irdialoglauncher.h"
+#include "irnetworkcontroller.h" 	
+#include "iractivenetworkobserver.h"
+#include "irsearchresultsview.h"
+
+
+
+const TInt KStringSize = 20;
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeView::CIRFirstTimeView():iCallRequestPending(EFalse)
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::CIRFirstTimeView" );
+    // Nothing here
+    }
+
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::ConstructL  - Entering" );
+    CIRBaseView::ConstructL( R_IR_FIRSTTIME_VIEW );
+    iRequestPending = EFalse;
+    IRLOG_DEBUG( "CIRFirstTimeView::ConstructL - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRFirstTimeView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRFirstTimeView* CIRFirstTimeView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRFirstTimeView::NewL" );
+ 	CIRFirstTimeView* self = CIRFirstTimeView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRFirstTimeView::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRFirstTimeView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeView* CIRFirstTimeView::NewLC()
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::NewLC - Entering" );
+    CIRFirstTimeView* self = new( ELeave ) CIRFirstTimeView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRFirstTimeView::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeView::~CIRFirstTimeView()
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::~CIRFirstTimeView - Entering" );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    IRLOG_DEBUG( "CIRFirstTimeView::~CIRFirstTimeView - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRFirstTimeView::Id() const
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::Id" );
+    return KIRFirstTimeViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::HandleStatusPaneSizeChange()
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::HandleStatusPaneSizeChange - Entering" );
+    CIRBaseView::HandleStatusPaneSizeChange();
+    
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+    IRLOG_DEBUG( "CIRFirstTimeView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::DoActivateL( const TVwsViewId& aPrevViewId,
+                                    TUid aCustomMessageId, const TDesC8& aCustomMessage )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::DoActivateL - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+    
+    TInt customMessageId = aCustomMessageId.iUid;
+	if(customMessageId == 1)
+		{
+		SetCurrentFocus(0);	
+		}
+	aCustomMessageId.iUid = 0;
+	
+    iFirstTime = appUi->IsFirstTime();
+    appUi->iPresentViewID = KIRFirstTimeViewId;
+
+    if ( !iContainer )
+        {
+        iContainer = new( ELeave ) CIRFirstTimeContainer(*this);
+        iContainer->SetMopParent( this );
+        iContainer->ConstructL( ClientRect() );
+		AppUi()->AddToViewStackL( *this, iContainer );
+       }
+    else
+        {
+        // we must notify a resource change in order to update the skin context
+        // This is a flaw of CEikFormattedCellListBox
+        iContainer->SetRect( ClientRect() );
+        iContainer->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
+        }
+
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+    SetTitleL( R_IRAPP_FIRSTTIME_TITLE );
+               
+
+    if ( iFirstTime &&  !(iUi->IsFlagIfAnyFavL()))
+        {
+        SetTitleL( R_IRAPP_FIRSTTIME_TITLE);
+		CIRBaseView::DoActivateL( aPrevViewId, TUid::Uid(1), aCustomMessage );
+        }
+    else
+        {
+        SetTitleL( R_IRAPP_FINDSTATIONS_TITLE );
+		CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+        }
+    HandleStatusPaneSizeChange(); 
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+    EnableObserverL(EIRSystemEventObserver);
+    IRLOG_DEBUG( "CIRFirstTimeView::DoActivateL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::DoDeactivate()
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::DoDeactivate - Entering" );
+    iFirstTime = EFalse;
+    if(&(iUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+    IRLOG_DEBUG( "CIRFirstTimeView::DoDeactivate - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::HandleCommandL( TInt aCommand )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::HandleCommandL - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi( ) );
+    SetCurrentFocus(iContainer->GetCurrentItemIndex());
+	iCommand = aCommand;
+
+    switch ( aCommand )
+        {
+        case EFirstTimeSelectCmd:
+        {
+        
+        switch(iContainer->GetCurrentItemIndex( ) )
+                {
+                case 0:
+	                {
+				    TBuf8<2> dummy;
+					TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRStationDirectoryViewId);
+					AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+	                }
+                    break;
+                case 1:
+	                {
+					if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+						{
+		                HBufC *SearchTitle = StringLoader::LoadLC(R_IRAPP_SEARCH_STRING);
+	                	_LIT(KNullText,"");
+						RBuf string1;
+						string1.Create(KStringSize);
+						string1.Append(KNullText);
+						ShowQueryDialogL(*SearchTitle,string1);
+						CleanupStack::PopAndDestroy(SearchTitle);
+						string1.Close();
+						}
+	                }
+                    break;
+                case 2:
+                    {
+					if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+						{
+		                 appUi->SetEditStation(EFalse);
+		                 appUi->ActivateLocalViewL(KIRAddManuallyStationViewID);
+						}
+	                }
+                    break;
+                default:
+                    break;
+                }
+        	
+        }
+        break;
+        
+        case EFirstTimeSettingsCmd:
+        {
+        AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+        }
+        break;
+            
+        case EHelpCmd:
+        {
+		if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+			{
+	        HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                                             	 AppUi()->AppHelpContextL() );
+			}
+        }                    
+        break;
+            
+        case EGotoNowPlayingViewCmd:
+		{  
+		appUi->SetHistory(EFalse);
+		AppUi()->ActivateLocalViewL(KIRNowPlayingViewID);
+		}
+       	break;
+        default:
+        {
+        	if(iFirstTime)
+				{
+				CIRBaseView::HandleCommandL( EAknSoftkeyExit );		
+				}
+        	else
+				{
+				CIRBaseView::HandleCommandL( aCommand );	
+				}
+           break;
+        }
+      }
+    IRLOG_DEBUG( "CIRFirstTimeView::HandleCommandL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::HandleForegroundEventL( TBool aForeground )
+    {
+    IRLOG_DEBUG( "CIRFirstTimeView::HandleForegroundEventL - Entering" );
+    CIRBaseView::HandleForegroundEventL( aForeground );
+    IRLOG_DEBUG( "CIRFirstTimeView::HandleForegroundEventL - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+	
+    
+void CIRFirstTimeView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::DynInitMenuPaneL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_FIRSTTIME_MENU)
+			{				
+		/*
+			// Update Application option
+			if(appUi->iIRSettings->IsUpdateAvailable())
+				{
+				 aMenuPane->SetItemDimmed(EUpdateApplicationCmd,EFalse);
+				}
+			else
+				{
+				 aMenuPane->SetItemDimmed(EUpdateApplicationCmd,ETrue);
+				}
+		*/
+
+			// Now Playing option
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+			}
+		
+		}
+	IRLOG_DEBUG( "CIRFirstTimeView::DynInitMenuPaneL - Exiting" );
+	}
+
+
+void CIRFirstTimeView::ShowQueryDialogL(const TDesC& aTitle, TDes& aBuffer)
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::ShowQueryDialogL - Entering" );
+	CAknTextQueryDialog* Dialog =
+	CAknTextQueryDialog::NewL(aBuffer,CAknQueryDialog::ENoTone);
+	Dialog->PrepareLC(R_SEARCH_STRING_DIALOG);
+	Dialog->SetPromptL(aTitle); 
+	iSearchValue = Dialog->RunLD();
+
+	if(	iSearchValue)
+		{
+		iUi->iSearchString = aBuffer;
+		
+		if( iUi->VerifyNetworkConnectivityL() )
+			{
+			iRequestPending = ETrue;
+			}
+		else
+			{
+			IssueSearchRequestL();
+			}
+		
+		
+		}
+	IRLOG_DEBUG( "CIRFirstTimeView::ShowQueryDialogL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::ResponseL()
+// Activates the SearchResults view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::ResponseL(CIRIsdsPreset* /*aPreset*/ )
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::ResponseL() started." );
+	
+
+	if(iIsdsWrapper->iStationsData->Count())
+	{
+		CIRUi* appUi = static_cast<	CIRUi*>(AppUi());
+		TBuf8<2> dummy;
+		TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRSearchResultsViewID);
+		if(appUi->IsForeground())
+			{
+			AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+			appUi->iActivationPending = KNullUid ;	
+			}
+		else
+			{
+			appUi->iActivationPending =KIRSearchResultsViewID;	
+			}
+	}
+	else
+	{
+		iIsdsWrapper->GetDialogLauncherInstance()->ShowInformationNoteL( R_IRAPP_RESULTS_NONE,ETrue );
+	    iIsdsWrapper->iError = EFalse;
+
+	}
+	
+	IRLOG_DEBUG( "CIRFirstTimeView::ResponseL() exiting." );		
+	}
+
+
+void CIRFirstTimeView::PresetResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::PresetResponseL() started." );
+	IRLOG_DEBUG( "CIRFirstTimeView::PresetResponseL() exiting." );
+	return;
+	}
+
+void CIRFirstTimeView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::ErrorL - Entering" );
+	if(iIsdsWrapper->iDialogDismissed)
+		{
+		iIsdsWrapper->iDialogDismissed=EFalse;
+	    return;
+		}
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;	
+		}
+	 if(iIsdsWrapper->iError)
+		{
+		if(iIsdsWrapper->GetDialogLauncherInstance())
+			{
+			iIsdsWrapper->GetDialogLauncherInstance()->ShowInformationNoteL( R_IRAPP_RESULTS_NONE,ETrue );
+			iIsdsWrapper->iError = EFalse;
+			}
+		}
+
+	IRLOG_DEBUG( "CIRFirstTimeView::ErrorL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRFirstTimeView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::NotifyActiveNetworkObserversL - Entering" );
+	IRRDEBUG2("CIRFirstTimeView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+			if(iContainer)
+				{
+				if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iSearchValue)
+						{	
+						IssueSearchRequestL();
+						}
+					}
+				}
+				
+			ResetPendingRequests(EFalse);				
+			}
+		}
+
+	IRRDEBUG2("CIRFirstTimeView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+	
+	IRLOG_DEBUG( "CIRFirstTimeView::NotifyActiveNetworkObserversL - Exiting" );
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRFirstTimeView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+//	iSearchValue = aValue
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::IssueSearchRequestL()
+// Issues a search request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::IssueSearchRequestL()
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Entering" );
+	//Display a searching Progress Bar
+	
+	iIsdsWrapper->IsdsSearchRequestL(this,iUi->iSearchString);
+	iUi->iSearchResultsView->iSearchReqMade = ETrue;
+	IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Exiting" );
+	}
+// ---------------------------------------------------------
+// CIRFirstTimeView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRFirstTimeView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRFirstTimeView::HandleSystemEventL - Entering");
+	
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if(!iCallRequestPending && iCommand==EFirstTimeSelectCmd &&
+					(iContainer->GetCurrentItemIndex() == 1))
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if(iCallRequestPending && iCommand==ESelectCmd &&
+				(iContainer->GetCurrentItemIndex() == 1))
+				{
+				iCallRequestPending = EFalse;
+				if(iSearchValue)
+					{	
+					IssueSearchRequestL();
+					}
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRFirstTimeView::HandleSystemEventL - Exiting." );
+	}	
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::RefreshView()
+// Refreshes the view when layout changes.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::RefreshView()
+	{
+	IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Entering" );
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+	IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Exiting" );
+	}
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irhistory.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <bautils.h>
+#include <s32file.h>
+
+#include "irdebug.h"
+#include "irhistory.h"
+#include "irisdspreset.h"
+#include "irui.h"
+
+//constant declaration
+_LIT(KLastPlayedChannel,"lastPlayed.dat");
+
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::NewL
+// 
+// ---------------------------------------------------------------------------
+//
+CIRLastPlayedStationInfo* CIRLastPlayedStationInfo::NewL()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::NewL - Entering" );
+	CIRLastPlayedStationInfo *self=CIRLastPlayedStationInfo::NewLC();
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::NewL - Exiting." );
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::NewLC
+// 
+// ---------------------------------------------------------------------------
+//
+CIRLastPlayedStationInfo* CIRLastPlayedStationInfo::NewLC()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::NewLC - Entering" );
+	CIRLastPlayedStationInfo *self=new(ELeave)CIRLastPlayedStationInfo;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+    IRLOG_DEBUG( "CIRLastPlayedSongInfo::NewLC - Exiting." );	
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::ConstructL
+// 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRLastPlayedStationInfo::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::ConstructL - Entering" );
+	iLastPlayedStation=CIRIsdsPreset::NewL();
+	ui = REINTERPRET_CAST(CIRUi*,CEikonEnv::Static()->EikAppUi());
+	TFileName pathLastPlayed=ui->GetPrivatePath();
+	pathLastPlayed.Append(KLastPlayedChannel);
+	
+    RFs& fs = CCoeEnv::Static()->FsSession();	
+	TBool res;
+	res= BaflUtils::FileExists( fs, pathLastPlayed );
+	if(res)
+		{
+        TRAPD( err, RetriveLastPlayedChannelL() );
+        if ( err != KErrNone )
+            {
+            IRLOG_ERROR2( "CIRLastPlayedSongInfo::ConstructL - Retrieving last played channel failed, err=%d", err );            
+            delete iLastPlayedStation;
+            iLastPlayedStation = NULL;
+            iLastPlayedStation = CIRIsdsPreset::NewL();
+            User::LeaveIfError( BaflUtils::DeleteFile( fs, pathLastPlayed ) );            
+            }
+		}	
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::ConstructL - Exiting." );		
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::~CIRLastPlayedStationInfo
+// standard c++ destructor
+// ---------------------------------------------------------------------------
+//	
+CIRLastPlayedStationInfo::~CIRLastPlayedStationInfo()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::~CIRLastPlayedStationInfo - Entering" );
+	if(iLastPlayedStation)
+		{
+		delete iLastPlayedStation;
+		iLastPlayedStation = NULL;
+		}
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::~CIRLastPlayedStationInfo - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::RetriveLastPlayedChannelL
+// Internalizes the preset data from the last played dat file
+// ---------------------------------------------------------------------------
+//	
+void CIRLastPlayedStationInfo::RetriveLastPlayedChannelL()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::RetriveLastPlayedChannelL - Entering" );
+	TFileName filename;
+	filename=ui->GetPrivatePath();
+	filename.Append(KLastPlayedChannel);
+	TParse	filestorename;
+	ui->iFsSession.Parse(filename,filestorename);
+	CFileStore* store = CDirectFileStore::OpenLC(ui->iFsSession,filestorename.
+		FullName(),EFileRead);
+		
+	RStoreReadStream instream;
+	instream.OpenLC(*store,store->Root());
+   	iLastPlayedStation->InternalizeL(instream);
+	CleanupStack::PopAndDestroy(&instream);
+	CleanupStack::PopAndDestroy(store);
+    IRLOG_DEBUG( "CIRLastPlayedSongInfo::RetriveLastPlayedChannelL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::CommitLastPlayedChannelL
+// Externalizes the preset data into last played dat
+// ---------------------------------------------------------------------------
+//	
+void CIRLastPlayedStationInfo::CommitLastPlayedChannelL()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::CommitLastPlayedChannelL - Entering" );
+	TFileName filename;
+	filename=ui->GetPrivatePath();
+	filename.Append(KLastPlayedChannel);
+	TParse	filestorename;
+	ui->iFsSession.Parse(filename,filestorename);
+	CFileStore* store = CDirectFileStore::ReplaceLC(ui->iFsSession,
+		filestorename.FullName(),EFileWrite);
+		
+	// Must say what kind of file store.
+	store->SetTypeL(KDirectFileStoreLayoutUid);
+    // Construct the output stream.
+	RStoreWriteStream outstream;
+	TStreamId id = outstream.CreateLC(*store);
+	iLastPlayedStation->ExternalizeL(outstream);
+	outstream.CommitL();
+	// Cleanup the stream object
+	CleanupStack::PopAndDestroy(&outstream);
+	// Set this stream id as the root
+	store->SetRootL(id);
+	// Commit changes to the store
+	store->CommitL();
+	CleanupStack::PopAndDestroy(store);	
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::CommitLastPlayedChannelL - Exiting." );	
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::FileExists
+// checks if the last played dat file exists
+// ---------------------------------------------------------------------------
+//
+TBool CIRLastPlayedStationInfo::FileExists()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::FileExists - Entering" );
+	TFileName filename; 
+	filename=ui->GetPrivatePath();
+	filename.Append(KLastPlayedChannel);
+	TBool result=BaflUtils::FileExists(ui->iFsSession,filename);
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::FileExists - Exiting." );
+	return result;
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRLastPlayedStationInfo::RemoveLastPlayedFile
+// removes the last played dat file if it gets corrupted
+// ---------------------------------------------------------------------------
+//
+TInt CIRLastPlayedStationInfo::RemoveLastPlayedFile()
+	{
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::RemoveLastPlayedFile - Entering" );
+	TInt ret = KErrNone;
+	if(FileExists())
+		{
+		CFileMan *fileHandle = NULL;
+		TRAPD(err , fileHandle=CFileMan::NewL(ui->iFsSession));	
+		if(err)
+			{
+			ret = err ;
+			}
+		TFileName filename; 
+		filename=ui->GetPrivatePath();
+    		filename.Append(KLastPlayedChannel);
+    		ret = fileHandle->Delete(filename);
+		delete fileHandle;
+		}
+	IRLOG_DEBUG( "CIRLastPlayedSongInfo::RemoveLastPlayedFile - Exiting." );	
+	return ret;
+	
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irhistorylistcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1002 @@
+/*
+* Copyright (c) 2004 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:  Container class for IRHistoryListContainer
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
+*  Ref:
+*  Implemented SongHistory changes for channelwise songs
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include "iraap.hlp.hrh"
+#include <aknsinglestyletreelist.h>
+#include <aknsbasicbackgroundcontrolcontext.h>
+#include <akntoolbar.h>
+
+#include "irsonghistoryengine.h"
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irhistorylistview.h"
+#include "irhistorylistcontainer.h"
+#include "irapplication.h"
+#include "irsonghistoryinfo.h"
+#include "irnowplayingwrapper.h"
+#include "irfavoritesdb.h"
+#include "irisdswrapper.h"
+#include "irisdspreset.h"
+#include "irpubsub.h"
+
+const TInt KMaxSize = 5;
+const TInt KTwo = 2 ;
+_LIT(KNo,"No");
+
+//-----------------------------------------------------------------------------
+//  CIRHistoryListContainer::NewL
+//  Creates a new instance of History Container
+//-----------------------------------------------------------------------------
+//
+CIRHistoryListContainer* CIRHistoryListContainer::NewL(
+			const TRect& aRect,CIRHistoryListView& aView,
+			RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr)
+    {
+	IRLOG_DEBUG( "CIRHistoryListContainer::NewL - Entering" );
+    CIRHistoryListContainer* self = CIRHistoryListContainer::NewLC(aRect,aView,aHistoryDataArr);
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRHistoryListContainer::NewL - Exiting." );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRHistoryListContainer::NewLC
+//  Creates a new instance of History Container and leaves it on the cleanup stack.
+//-----------------------------------------------------------------------------
+//
+CIRHistoryListContainer* CIRHistoryListContainer::NewLC(const TRect& aRect ,
+			CIRHistoryListView& aView ,RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr)
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::NewLC - Entering" );
+    CIRHistoryListContainer* self = new (ELeave) CIRHistoryListContainer(aView);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect,aHistoryDataArr);
+	IRLOG_DEBUG( "CIRHistoryListContainer::NewLC - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRHistoryListContainer::CIRHistoryListContainer( CIRHistoryListView& aHistoryListView):
+                                                  iHistoryListView( aHistoryListView )
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::CIRHistoryListContainer" );
+    iDimmed=ETrue;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::ConstructL( const TRect& aRect, 
+						RPointerArray<CIRSongHistoryInfo>& aHistoryDataArr
+						 )
+    {
+   IRLOG_DEBUG( "CIRHistoryListContainer::ConstructL - Entering" );
+   CreateWindowL();
+   
+   InitComponentArrayL();
+   Components().SetControlsOwnedExternally( ETrue );
+   CAknSingleStyleTreeList* list =CAknSingleStyleTreeList::NewL( *this );
+    // Use list as a component control of the view.
+    Components().AppendLC( list, KCoeNoControlId );
+    CleanupStack::Pop( list );
+    iTreeListBox = list;
+    iTreeListBox->SetContainerWindowL(*this);
+    iTreeListBox->SetFlags( iTreeListBox->Flags() ^ KAknTreeListLooping ^ 
+                            KAknTreeListNoStructureLines ^ KAknTreeListMarqueeScrolling);
+    iTreeListBox->AddObserverL( this );
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(
+        KAknsIIDQsnBgAreaMain, iAvkonAppUi->ApplicationRect(), EFalse );
+    
+    
+	iChannelArray=new ( ELeave ) CDesC16ArrayFlat (KMaxSize);
+	iUrlArray=new ( ELeave ) CDesC16ArrayFlat (KMaxSize);
+	iChannelDescriptionArray=new ( ELeave ) CDesC16ArrayFlat (KMaxSize);
+	iMusicStoreStatus=new ( ELeave ) CDesC16ArrayFlat (KMaxSize);
+    
+    UpdateAllL(aHistoryDataArr);
+    iTreeListBox->SetRect(aRect);
+	iTreeListBox->SetFocus(ETrue);
+    iTreeListBox->MakeVisible(ETrue);
+    SetRect( aRect );
+    DrawNow();
+    iTreeListBox->DrawNow();
+    IRLOG_DEBUG( "CIRHistoryListContainer::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRHistoryListContainer::~CIRHistoryListContainer()
+    {
+        
+    IRLOG_DEBUG( "CIRHistoryListContainer::~CIRHistoryListContainer - Entering" );
+        if(iTreeListBox)
+    	{
+    	delete iTreeListBox;
+    	iTreeListBox = NULL;
+    	}
+    	
+    	iNodeArray.Close();
+    	
+    	iLeafArray.Close();
+    	
+    	iChannelTypeArray.Close();
+    	
+    	iChannelIdArray.Close();
+    	
+    	if(iBgContext)
+	    	{
+	    	delete iBgContext;
+	    	iBgContext = NULL;	
+	    	}
+    	
+    	if(iUrlArray)
+	    	{
+	    	iUrlArray->Reset();
+	    	delete iUrlArray;	
+	    	iUrlArray=NULL;
+	    	}
+    	if(iChannelArray)
+	    	{
+	    	iChannelArray->Reset();
+	    	delete iChannelArray;
+	    	iChannelArray=NULL;	
+	    	}
+    	if(iChannelDescriptionArray)
+	    	{
+	    	iChannelDescriptionArray->Reset();
+	    	delete iChannelDescriptionArray;	
+	    	iChannelDescriptionArray=NULL;
+	    	}
+    	if(iMusicStoreStatus)
+	    	{
+	    	iMusicStoreStatus->Reset();
+	    	delete iMusicStoreStatus;	
+	    	iMusicStoreStatus=NULL;
+	    	}
+        IRLOG_DEBUG( "CIRHistoryListContainer::~CIRHistoryListContainer - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things 
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRHistoryListContainer::OfferKeyEventL( 
+        const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::OfferKeyEventL -Entering" );
+    if(iTreeListBox)
+	    {
+        IRLOG_DEBUG( "CIRHistoryListContainer::OfferKeyEventL -Exiting" );
+	    return iTreeListBox->OfferKeyEventL(aKeyEvent, aType);
+	    }
+	return EKeyWasNotConsumed;   
+    }
+
+void CIRHistoryListContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::HandlePointerEventL - Entering" );
+	if(iTreeListBox)
+		{
+		iTreeListBox->HandlePointerEventL( aPointerEvent ); 
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::HandlePointerEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListContainer::UpdateAllL()
+// Fills list with  data read from data base.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::UpdateAllL(RPointerArray<CIRSongHistoryInfo> & aHistoryDataArr)
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::UpdateAllL - Entering" );
+	if(aHistoryDataArr.Count()==0)
+		{
+        iTreeListBox->DrawNow();
+	    HBufC* headerText = StringLoader::LoadLC(R_IRAPP_CLEAR_HISTORY);
+		iTreeListBox->SetEmptyTextL(*headerText);
+		CleanupStack::PopAndDestroy(headerText); 
+
+		}
+	else
+		{
+		
+		
+        TUint32 flags = CAknSingleStyleTreeList::EPersistent;
+		TBool drawNow = EFalse;
+
+		for(TInt songCount = 0; songCount < aHistoryDataArr.Count(); songCount++)  
+			{
+			if(songCount==0)     
+				{
+				iChannelArray->AppendL(aHistoryDataArr[songCount]->GetChannelName());
+			    iUrlArray->AppendL(aHistoryDataArr[songCount]->GetStreamUrl());
+                iChannelTypeArray.Append(aHistoryDataArr[songCount]->GetChannelType());
+                iChannelIdArray.Append(aHistoryDataArr[songCount]->GetChannelId());
+                iChannelDescriptionArray->AppendL(aHistoryDataArr[songCount]->GetChannelDesc()); 
+                iMusicStoreStatus->AppendL(aHistoryDataArr[songCount]->GetChannelMusicStatus());	
+                }
+			else
+				{
+				TBool nextChannel=EFalse;
+				for(TInt comp=0;comp<iChannelArray->Count();comp++)
+					{
+					if((aHistoryDataArr[songCount]->GetChannelName()==iChannelArray->MdcaPoint(comp)) &&
+					         (aHistoryDataArr[songCount]->GetStreamUrl()==iUrlArray->MdcaPoint(comp)) &&
+					         (aHistoryDataArr[songCount]->GetChannelType()==iChannelTypeArray[comp]))
+						{
+						nextChannel=ETrue;	
+						}
+						
+						
+							
+					}
+					if(!nextChannel)
+							{
+													
+							iChannelArray->AppendL(aHistoryDataArr[songCount]->GetChannelName());
+						    iUrlArray->AppendL(aHistoryDataArr[songCount]->GetStreamUrl());
+		                    iChannelTypeArray.Append(aHistoryDataArr[songCount]->GetChannelType());
+		                    iChannelIdArray.Append(aHistoryDataArr[songCount]->GetChannelId());
+		                    iChannelDescriptionArray->AppendL(aHistoryDataArr[songCount]->
+		                                                      GetChannelDesc()); 
+		                    iMusicStoreStatus->AppendL(aHistoryDataArr[songCount]->
+		                                                      GetChannelMusicStatus());	
+		                                                      
+							}
+                    
+				}
+
+			}
+		for(TInt index=0;index<iChannelArray->Count();index++) 
+			{
+			
+			TAknTreeItemID subtitle = iTreeListBox->AddNodeL( 1,
+			                                                 iChannelArray->MdcaPoint(index), 
+			                                                 flags,
+			                                                 drawNow );
+			iNodeArray.Append(subtitle);	
+			}
+		for(TInt songCount = 0; songCount < aHistoryDataArr.Count(); songCount++)            
+			{
+			for(TInt index=0;index<iChannelArray->Count();index++)
+				{
+					if((aHistoryDataArr[songCount]->GetChannelName()==iChannelArray->MdcaPoint(index)) &&
+					         (aHistoryDataArr[songCount]->GetStreamUrl()==iUrlArray->MdcaPoint(index)) &&
+					         (aHistoryDataArr[songCount]->GetChannelType()==iChannelTypeArray[index]))
+						{
+				        HBufC* text ;
+						CDesCArray* strings = new ( ELeave ) CDesCArrayFlat( 2 );
+						CleanupStack::PushL( strings );
+				        if(aHistoryDataArr[songCount]->GetArtistInfo() != KNullDesC &&
+				           aHistoryDataArr[songCount]->GetSongInfo() != KNullDesC)
+					        {
+							strings->AppendL(aHistoryDataArr[songCount]->GetArtistInfo());
+							strings->AppendL(aHistoryDataArr[songCount]->GetSongInfo());
+						    text = StringLoader::LoadLC( R_IR_HISTORY_ARTIST_SONG, *strings );
+					        }
+                        else if(aHistoryDataArr[songCount]->GetArtistInfo() != KNullDesC)
+					        {
+	                     	text = HBufC::NewLC( aHistoryDataArr[songCount]->
+	                     						GetArtistInfo().Length() + KTwo );
+	                     	text->Des().Copy(aHistoryDataArr[songCount]->GetArtistInfo());
+					        }
+				        else
+					        {
+	                     	text = HBufC::NewLC( aHistoryDataArr[songCount]->
+	                     						GetSongInfo().Length() + KTwo );
+	                     	text->Des().Copy(aHistoryDataArr[songCount]->GetSongInfo());
+					        }
+						if(index>=0 && index<iNodeArray.Count())
+							{
+							TAknTreeItemID coreItem = iTreeListBox->AddLeafL( iNodeArray[index],
+							*text, flags, drawNow );
+							iTreeListBox->SetIcon( coreItem, CAknSingleStyleTreeList::ELeaf, NULL, ETrue );
+							iLeafArray.AppendL(coreItem);   	
+							}
+						CleanupStack::PopAndDestroy( text );	
+                        CleanupStack::PopAndDestroy( strings );
+						}
+					
+						
+				}
+         
+			}
+		iTreeListBox->DrawNow();
+		if(iHistoryListView.Toolbar())
+			{
+            iHistoryListView.Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+            iHistoryListView.Toolbar()->DrawNow();
+          	}
+		}	
+	IRLOG_DEBUG( "CIRHistoryListContainer::UpdateAllL - Exiting" );
+
+
+	}
+// ---------------------------------------------------------------------------
+// CIRHistoryListContainer::RemoveListItem() 
+// Removes  data  from the list read from data base.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::RemoveListItem(const TDesC &/*aSongName*/ , const TDesC & /*aArtistName*/, const TDesC & /*aChannelName*/)
+{
+IRLOG_DEBUG( "CIRHistoryListContainer::RemoveListItem" );	 
+}
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::Draw" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::GetHelpContext - Entering" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_STATIONS  );
+    IRLOG_DEBUG( "CIRHistoryListContainer::GetHelpContext - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListContainer::ClearHistoryListL().
+// Clears the List
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::ClearHistoryListL()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::ClearHistoryListL - Entering" );
+	HBufC* headerText = StringLoader::LoadLC(R_IRAPP_CLEAR_HISTORY);
+	iTreeListBox->SetEmptyTextL(* headerText);
+	CleanupStack::PopAndDestroy(headerText); 
+	for(TInt index=0;index<iNodeArray.Count();index++)
+		{
+		iTreeListBox->RemoveItem( iNodeArray[index], EFalse );
+		}
+
+	iNodeArray.Reset();
+	iLeafArray.Reset();
+	iChannelTypeArray.Reset();
+	iChannelIdArray.Reset();
+	if(iUrlArray)
+		{
+		iUrlArray->Reset();
+		}
+	if(iMusicStoreStatus)
+		{
+		iMusicStoreStatus->Reset();
+		}
+	if(iChannelArray)
+		{
+		iChannelArray->Reset();
+		}
+	if(iChannelDescriptionArray)
+	{
+	iChannelDescriptionArray->Reset();
+	}
+	
+	IRLOG_DEBUG( "CIRHistoryListContainer::ClearHistoryListL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListContainer::ListenUrlL()
+// Listen a URL and displays Now Playing
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::ListenUrlL( TInt aIndex )
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::ListenUrlL - Entering" );
+	iHistoryListView.iNowPlayingWrapper->SetView(EHistoryView);
+	
+	iListenFrmHistory = ETrue ;
+    iAddFrmHistory = EFalse;
+	// Listen the URL
+	if(aIndex>=0 && aIndex<iChannelTypeArray.Count())
+		{
+		if(iChannelTypeArray[aIndex]==0)
+			{
+			CIRIsdsPreset* preset = CIRIsdsPreset::NewL();
+			CleanupStack::PushL( preset );
+			preset->SetName(iChannelArray->MdcaPoint(aIndex));
+			if(aIndex>=0 && aIndex<iChannelTypeArray.Count())
+				{
+				preset->SetChannelType(iChannelTypeArray[aIndex]);
+				}
+			preset->SetShortDesc(iChannelDescriptionArray->MdcaPoint(aIndex ));
+	        preset->SetDescription(iChannelDescriptionArray->MdcaPoint(aIndex ));
+			//Set the URL data.
+			_LIT(KNA,"NA");
+			preset->SetUrlL( KNA, iUrlArray->MdcaPoint(aIndex ), 0 );
+			preset->SetUrlCount();
+			// Set the channel as last played and currently playing
+			*iHistoryListView.iNowPlayingWrapper->iNowPlayingPreset = *preset;
+			CleanupStack::PopAndDestroy( preset );
+
+			iHistoryListView.iUi->iNPPrevViewId = KIRHistoryListViewId;
+
+			//connecting to server	
+			iHistoryListView.iNowPlayingWrapper->SetCurrentConnectionSource(EIRHistoryAdhoc);
+			iHistoryListView.iNowPlayingWrapper->ConnectToChannelL(*iHistoryListView.
+			                                 iNowPlayingWrapper->iNowPlayingPreset);
+			}
+		else
+			{
+			iHistoryListView.iUi->iNPPrevViewId = KIRHistoryListViewId;
+			if(aIndex>=0 && aIndex<iChannelIdArray.Count())
+				{
+				iChannelSyncId = iChannelIdArray[aIndex] ;
+				iChangedIndex = aIndex;
+				iHistoryListView.iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+		 		iHistoryListView.iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+		    	iHistoryListView.iNowPlayingWrapper->CreateWaitDialogL();
+	    		iHistoryListView.iUi->GetPubSubManagerInstance()->PublishBufferingState(
+	    								EIRStateBufferingStart);
+				iHistoryListView.iIsdsWrapper->IsdsListenRequestL(this,iChannelIdArray[aIndex],ETrue);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::ListenUrlL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// void CIRHistoryListContainer::SizeChanged(const TRect& aRect)
+// 
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListContainer::SizeChanged()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::SizeChanged - Entering" );
+    TRect rect = Rect();
+    if (iTreeListBox)
+        {
+        iTreeListBox->SetRect( rect );
+        }
+    if ( iBgContext )
+        {
+        iBgContext->SetRect( rect );
+        }
+    IRLOG_DEBUG( "CIRHistoryListContainer::SizeChanged - Exiting" );
+	}
+	
+//----------------------------------------------------------------------------
+// CIRHistoryListContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRHistoryListContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::CountComponentControls" );
+	return 1;
+	}
+//----------------------------------------------------------------------------
+// CIRHistoryListContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRHistoryListContainer::ComponentControl(TInt /*aIndex*/) const
+	{
+		IRLOG_DEBUG( "CIRHistoryListContainer::ComponentControl" );
+		return iTreeListBox;
+	}
+	
+// ----------------------------------------------------
+// CIRHistoryListContainer::HandleTreeListEvent
+// From MAknTreeListObserver .
+// Handles the events on the TreeList
+// ----------------------------------------------------
+//
+TBool CIRHistoryListContainer::HandleTreeListEvent( CAknTreeList& aList,
+    TAknTreeItemID /* aItem */, TEvent aEvent )
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::HandleTreeListEvent - Entering" );
+    if ( &aList != iTreeListBox )
+        {
+        return KErrNone;
+        }
+
+    switch ( aEvent )
+        {
+        // One of the nodes in the list is being expanded.
+        case ENodeExpanded:
+        // One of the nodes in the list is being collapsed.
+        case ENodeCollapsed:
+        // Simple data row or core data row is selected.
+        case EItemSelected:
+			break;
+        // Focused item changes
+        case EItemFocused:
+            {
+			_LIT(KMusicStoreEnabled, "yes");
+			if(iHistoryListView.Toolbar())
+				{
+				if(!ShowFocus())
+					{
+					iHistoryListView.Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+					iDimmed=ETrue;
+						
+					}
+				else
+					{
+					TInt itemIndex =GetCurrentFocussedNode();
+					if(itemIndex>=0 && itemIndex<iMusicStoreStatus->MdcaCount() )
+						{
+						TInt comp=(iMusicStoreStatus->MdcaPoint(itemIndex)).Compare(KMusicStoreEnabled);
+						if(comp)    
+							{
+							iHistoryListView.Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+							iDimmed=ETrue;	
+							}
+						else
+							{
+							if(iHistoryListView.GetFindInShopInstance())
+								{
+								iHistoryListView.Toolbar()->SetItemDimmed(EFindInShop,EFalse,ETrue);
+								iDimmed=EFalse;	
+								}
+							else
+								{
+								iHistoryListView.Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+								iDimmed=ETrue;	
+								}
+							}    
+						}    
+					}
+				iHistoryListView.Toolbar()->DrawNow();	
+				}
+				
+            }
+            break;
+        // Item is being removed from the list.
+        case EItemRemoved:
+        case EMarkingModeEnabled:
+        case EMarkingModeDisabled:
+        case EItemUnmarked:
+        case EItemMarked:
+            break;
+        
+        default:
+            break;
+        }
+    IRLOG_DEBUG( "CIRHistoryListContainer::HandleTreeListEvent - Exiting" );
+    return KErrNone;
+    }
+	
+// ----------------------------------------------------
+// CIRHistoryListContainer::MopSupplyObject()
+// ----------------------------------------------------
+//
+TTypeUid::Ptr CIRHistoryListContainer::MopSupplyObject( TTypeUid aId )
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::MopSupplyObject - Entering" );
+    if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext )
+        {
+        IRLOG_DEBUG( "CIRHistoryListContainer::MopSupplyObject - Exiting" );
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+    IRLOG_DEBUG( "CIRHistoryListContainer::MopSupplyObject - Exiting" );
+    return CCoeControl::MopSupplyObject( aId );
+    }
+    
+// ----------------------------------------------------
+// CIRHistoryListContainer::HandleResourceChange()
+// Handles Changes in the resources 
+// ----------------------------------------------------
+//
+void CIRHistoryListContainer::HandleResourceChange( TInt aType )
+    {
+    IRLOG_DEBUG( "CIRHistoryListContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+    CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+    TRect rect = ui->ApplicationRect();
+    if( aType == KAknsMessageSkinChange )
+        {
+        }
+	if( aType == KEikDynamicLayoutVariantSwitch )
+		{
+		if ( iBgContext )
+			{
+			iBgContext->SetRect( Rect() );
+			}
+		iTreeListBox->SetRect(rect);
+		SizeChanged();
+		DrawNow();
+        
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::HandleResourceChange - Exiting" );
+   } 
+   
+// ----------------------------------------------------
+// CIRHistoryListContainer::GetCurrentFocussed()
+// To get the focus of Node of the treeList
+// ----------------------------------------------------
+//
+     
+TInt CIRHistoryListContainer::GetCurrentFocussedNode()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::GetCurrentFocussedNode - Entering" );
+	TInt focusItem=iTreeListBox->FocusedItem();
+	TInt isNode=iTreeListBox->IsNode( focusItem );
+	TInt retValue = -1;
+	if(!isNode)  
+		{
+		focusItem=iTreeListBox->Parent(focusItem);	
+		}
+	for(TInt index=0;index<iUrlArray->Count();index++)
+		{
+		if(index>=0 && index<iNodeArray.Count())
+			{
+			if(focusItem==iNodeArray[index])
+			retValue=index;
+			}
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::GetCurrentFocussedNode - Exiting" );
+	return retValue;
+	}
+	
+// ----------------------------------------------------
+// CIRHistoryListContainer::GetCurrentFocussedLeaf()
+// To get the focus of Leaf of the treeList
+// ----------------------------------------------------
+//	
+TInt CIRHistoryListContainer::GetCurrentFocussedLeaf()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::GetCurrentFocussedLeaf - Entering" );
+	TInt focusItem=iTreeListBox->FocusedItem();
+	TInt isLeaf=iTreeListBox->IsLeaf( focusItem );
+	TInt retValue = -1;
+	if(isLeaf)
+		{
+		for(TInt index=0;index<iLeafArray.Count();index++)
+			{
+			if(focusItem==iLeafArray[index])
+				{
+				retValue = index;
+				break;
+				}
+			}
+		}
+	    
+	IRLOG_DEBUG( "CIRHistoryListContainer::GetCurrentFocussedLeaf - Exiting" );
+	return retValue;
+	}
+	
+// ----------------------------------------------------
+// CIRHistoryListContainer::AddStationToFavorites()
+// For Adding the Station name to the favorites DB.
+// ----------------------------------------------------
+//	
+
+void CIRHistoryListContainer::AddStationToFavoritesL(TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::AddStationToFavoritesL - Entering" );
+    iLoadingCancelled = EFalse;
+    
+	iAddFrmHistory = ETrue;
+	iListenFrmHistory = EFalse ;
+	TInt focusItem=iTreeListBox->FocusedItem();
+	TInt isNode=iTreeListBox->IsNode( focusItem );
+	TInt favouriteIndexChannel = -1;
+	if(!isNode)  
+		{
+		focusItem=iTreeListBox->Parent(focusItem);	
+		}
+	for(TInt index=0;index<iUrlArray->Count();index++)
+		{
+		if(index>=0 && index<iNodeArray.Count())
+			{
+			if(focusItem==iNodeArray[index])
+			favouriteIndexChannel=index;
+			}
+		}
+    _LIT(KNA,"NA");
+  	TInt res = KErrNone;
+	if(favouriteIndexChannel>=0 && favouriteIndexChannel<iChannelTypeArray.Count())
+		{
+		if(iChannelTypeArray[favouriteIndexChannel]==0)
+			{
+			CIRIsdsPreset* preset = CIRIsdsPreset::NewL();
+			CleanupStack::PushL( preset );
+			preset->SetName(iChannelArray->MdcaPoint(favouriteIndexChannel));
+			preset->SetUrlL( KNA, iUrlArray->MdcaPoint(favouriteIndexChannel ), 0 );
+			preset->SetUrlCount();
+			if(favouriteIndexChannel >=0 && favouriteIndexChannel<iChannelTypeArray.Count())
+				{
+				preset->SetChannelType(iChannelTypeArray[favouriteIndexChannel]);
+				}
+			if(favouriteIndexChannel >=0 && favouriteIndexChannel<iChannelIdArray.Count())
+				{
+				preset->SetId(iChannelIdArray[favouriteIndexChannel]);
+				}
+			preset->SetShortDesc(iChannelDescriptionArray->MdcaPoint(favouriteIndexChannel ));
+	        preset->SetDescription(iChannelDescriptionArray->MdcaPoint(favouriteIndexChannel ));
+			iHistoryListView.iUi->iFavPresets->AddPresetL(*preset,res);
+			if( res == KErrNoMemory )
+				{
+				DisplayErroronDBL();
+				}
+			else
+				{
+				iHistoryListView.iUi->DisplayInformationL( R_IRAPP_STATIONS_POPUP_SAVED,
+				                                           iChannelArray->
+				                                           MdcaPoint(favouriteIndexChannel) );
+				}
+			CleanupStack::PopAndDestroy( preset );
+			}
+		else
+			{
+			//Display a loading Progress Bar
+			iChannelSyncId = iChannelIdArray[favouriteIndexChannel] ;
+			iChangedIndex = favouriteIndexChannel;
+			iHistoryListView.iIsdsWrapper->IsdsPresetRequestL(this,
+			                                              iChannelIdArray[favouriteIndexChannel],
+			                                              aCommand,EFalse,ETrue);
+			}
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::AddStationToFavoritesL - Exiting" );  
+	
+	}
+	
+// ----------------------------------------------------
+// CIRHistoryListContainer::DisplayErroronDBL()
+// To show error note whenever the Fovorites DB is full
+// ----------------------------------------------------
+//	
+void CIRHistoryListContainer::DisplayErroronDBL()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::DisplayErroronDBL - Entering" );
+	iHistoryListView.iUi->iDialogNote->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+	IRLOG_DEBUG( "CIRHistoryListContainer::DisplayErroronDBL - Exiting" );
+	}
+
+// ----------------------------------------------------
+// CIRHistoryListContainer::ShowFocus()
+// To return whether a leaf or node is focused 
+// ----------------------------------------------------
+//	
+TInt CIRHistoryListContainer::ShowFocus()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::ShowFocus - Entering" );
+	TInt focusItem=iTreeListBox->FocusedItem();
+	TInt isLeaf=0;
+	TInt retValue;
+	if(focusItem)
+		{
+		isLeaf=iTreeListBox->IsLeaf( focusItem );
+		}
+	if(isLeaf)
+		{
+		retValue = ETrue;
+		}
+	else
+		{
+		retValue = EFalse;
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::ShowFocus - Exiting" );
+	return retValue ;
+
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRHistoryListContainer::ResponseL()
+// Activates the Stations view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListContainer::ResponseL( CIRIsdsPreset* aPreset )
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::ResponseL - Entering" );
+	iHistoryListView.ResetPendingRequests(EFalse);
+
+	iHistoryListView.HistoryEngineInstance()->UpdateSongHistoryDb(aPreset->GetId(),
+	                                                     aPreset->GetName(),
+	                                                     KNo,
+	                                                     aPreset->GetMusicStoreStatus());
+	iHistoryListView.RefreshHistoryL();
+	IRLOG_DEBUG( "CIRHistoryListContainer::ResponseL - Exiting" );
+	return;
+	}
+// ---------------------------------------------------------------------------
+// void CIRHistoryListContainer::PresetResponseL()
+// Called when Preset Data is received
+// Used to Listen to a channel with given preset.
+// ---------------------------------------------------------------------------
+//	
+void CIRHistoryListContainer::PresetResponseL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::PresetResponseL - Entering" );
+	if ( !iHistoryListView.iUi->CheckAndNotifyLowDiskSpaceL() )
+		{
+		iHistoryListView.ResetPendingRequests(EFalse);
+		if(!iHistoryListView.iNowPlayingWrapper->GetWhenUserCancelsIsdsBufferingWaitBar())
+			{
+			iHistoryListView.iNowPlayingWrapper->SetListenFromIsdsValue(ETrue);
+			iHistoryListView.iNowPlayingWrapper->ListenToChannelL(aPreset);
+			}
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::PresetResponseL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRHistoryListContainer::ErrorL()
+// Handles error Conditions
+// ---------------------------------------------------------------------------
+//	
+void CIRHistoryListContainer::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::ErrorL - Entering" );
+	if(iHistoryListView.iIsdsWrapper->GetListenRequest())
+		{
+		iHistoryListView.iNowPlayingWrapper->DestroyWaitDialogL();
+		iHistoryListView.iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+
+		iHistoryListView.iIsdsWrapper->SetListenRequest(EFalse);
+		}
+	if(iHistoryListView.iIsdsWrapper->iConnTimeOut)
+		{
+		iHistoryListView.iIsdsWrapper->iConnTimeOut = EFalse;	
+		}
+	RemovedIsdsChannelL();	
+	IRLOG_DEBUG( "CIRHistoryListContainer::ErrorL - Exiting" );	
+	return;
+	}
+
+// -----------------------------------------------------------------------------
+// CIRHistoryListContainer::IsdsOrNot()
+// Whether ISDS channel or not.
+// -----------------------------------------------------------------------------
+// 
+TBool CIRHistoryListContainer::IsdsOrNot()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::IsdsOrNot - Entering" );
+	TInt focusItem=iTreeListBox->FocusedItem();
+	TInt isNode=iTreeListBox->IsNode( focusItem );
+	TInt itemIndex = -1;
+	TBool retValue = EFalse;
+	if(!isNode)  
+		{
+		focusItem=iTreeListBox->Parent(focusItem);	
+		}
+	for(TInt index=0;index<iUrlArray->Count();index++)
+		{
+		if(index>=0 && index<iNodeArray.Count())
+			{
+			if(focusItem==iNodeArray[index])
+			itemIndex=index;
+			}
+		}
+   	if(itemIndex >=0 && itemIndex<iChannelTypeArray.Count())
+	    {
+	    if(iChannelTypeArray[itemIndex]==1)
+		    {
+		    retValue = ETrue;	
+		    }
+	    }
+	IRLOG_DEBUG( "CIRHistoryListContainer::IsdsOrNot - Exiting" );
+	return retValue;    
+	}
+
+// -----------------------------------------------------------------------------
+// CIRHistoryListContainer::GetButtonDimmed()
+// Whether Find in Shop Button is dimmed or not.
+// -----------------------------------------------------------------------------
+// 
+TBool CIRHistoryListContainer::GetButtonDimmed()
+	{
+	return iDimmed;
+   	}
+// -----------------------------------------------------------------------------
+// CIRHistoryListContainer::RemovedIsdsChannelL()
+// To add or play a channel which has been removed from ISDS .
+// -----------------------------------------------------------------------------
+// 
+void CIRHistoryListContainer::RemovedIsdsChannelL()
+	{
+	IRLOG_DEBUG( "CIRHistoryListContainer::RemovedIsdsChannelL - Entering" );
+	if(iHistoryListView.iIsdsWrapper->GetErrorCode())
+		{
+		iHistoryListView.HistoryEngineInstance()->SyncHistory( iChannelSyncId );
+		
+		_LIT(KNA,"NA");
+		CIRIsdsPreset* preset = CIRIsdsPreset::NewL();
+		CleanupStack::PushL( preset );
+		preset->SetName(iChannelArray->MdcaPoint(iChangedIndex));
+		preset->SetUrlL( KNA, iUrlArray->MdcaPoint(iChangedIndex ), 0 );
+		preset->SetUrlCount();
+		preset->SetChannelType(0);
+		preset->SetId(0);
+		preset->SetShortDesc(iChannelDescriptionArray->MdcaPoint(iChangedIndex ));
+	    preset->SetDescription(iChannelDescriptionArray->MdcaPoint(iChangedIndex ));
+        TInt res = KErrNone;
+
+		if(iAddFrmHistory)
+			{
+			iHistoryListView.iUi->iFavPresets->AddPresetL(*preset,res);
+			if( res == KErrNoMemory )
+				{
+				DisplayErroronDBL();
+				}
+			else
+				{
+				iHistoryListView.iUi->DisplayInformationL( R_IRAPP_STATIONS_POPUP_SAVED,
+				                                           iChannelArray->
+				                                           MdcaPoint(iChangedIndex) );
+				}
+			CleanupStack::PopAndDestroy( preset );
+		    iAddFrmHistory = EFalse ;
+			}
+		if(iListenFrmHistory)
+			{
+			
+			// Set the channel as last played and currently playing
+			*iHistoryListView.iNowPlayingWrapper->iNowPlayingPreset = *preset;
+			CleanupStack::PopAndDestroy( preset );
+
+			iHistoryListView.iUi->iNPPrevViewId = KIRHistoryListViewId;
+
+			//connecting to server	
+			iHistoryListView.iNowPlayingWrapper->SetCurrentConnectionSource(EIRHistoryAdhoc);
+			iHistoryListView.iNowPlayingWrapper->ConnectToChannelL(*iHistoryListView.
+			                                 iNowPlayingWrapper->iNowPlayingPreset);
+			
+		    iListenFrmHistory = EFalse ;
+			}
+		iHistoryListView.RefreshHistoryL();  
+		}
+	IRLOG_DEBUG( "CIRHistoryListContainer::RemovedIsdsChannelL - Exiting" );
+	}
+                                                
+                                                
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irhistorylistview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1013 @@
+/*
+* Copyright (c) 2004 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:  view class for IRHistoryListView.cpp
+*
+*/
+
+#include <stringloader.h>
+#include <internetradio.rsg>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irhistorylistview.h"
+#include "irhistorylistcontainer.h"
+#include "irapplication.h"
+#include "irsonghistoryinfo.h"
+#include "irsonghistoryengine.h"
+#include "irnowplayingwrapper.h"
+#include "irisdswrapper.h"
+#include <hlplch.h>
+
+//For Touch Toolbar
+#include <internetradio.mbg>
+#include <akntoolbar.h>
+#include <aknbutton.h>
+
+#ifdef MUSICSHOP_AVAILABLE
+#include <mpxfindinmusicshop.h> //For Find in Shop
+#include <apgcli.h>             //For Find in Shop
+#endif
+
+//to be removed after UT
+#include "irmetadata.h"
+#include "irdialoglauncher.h"
+
+#include "irnetworkcontroller.h" 	
+#include "iractivenetworkobserver.h"
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+
+CIRHistoryListView::CIRHistoryListView():iCallRequestPending(EFalse)
+    {
+    IRLOG_DEBUG( "CIRHistoryListView::CIRHistoryListView" );
+    // Nothing here
+    }
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListView::ConstructL()
+{
+	IRLOG_DEBUG( "CIRHistoryListView::ConstructL - Entering" );
+	CIRBaseView::ConstructL(R_IR_HISTORY);
+	
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+	TRgb color;
+	TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+				                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_IR_HISTORY_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_IR_HISTORY_BLACK_TOOLBAR);	
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+	
+	iHistoryEngine = CIRSongHistoryEngine::NewL(*this);
+  	GetAllListL();
+
+  	//For Find in Shop
+  	iMPXFindInShop = NULL;
+#ifdef MUSICSHOP_AVAILABLE  	
+	TRAPD(error, iMPXFindInShop = CMPXFindInMShop::NewL());
+    if (error != KErrNotFound && error != KErrNone)
+    {
+       User::Leave(error);
+    }
+#endif    
+
+    iRequestPending = EFalse;
+    iAddToFav= EFalse;
+    iListenRequest = EFalse;
+    IRLOG_DEBUG( "CIRHistoryListView::ConstructL - Exiting" );
+}
+// ---------------------------------------------------------------------------
+// Static constructor.
+// CIRHistoryListView::NewL
+// ---------------------------------------------------------------------------
+//
+CIRHistoryListView* CIRHistoryListView::NewL()
+    {
+    IRLOG_DEBUG("CIRHistoryListView::NewL - Entering" );
+    CIRHistoryListView* self = CIRHistoryListView::NewLC();
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRHistoryListView::NewL - Exiting." );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// CIRHistoryListView::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRHistoryListView* CIRHistoryListView::NewLC()
+    {
+       
+    IRLOG_DEBUG( "CIRHistoryListView::NewLC - Entering" );
+    CIRHistoryListView* self = new (ELeave) CIRHistoryListView();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRHistoryListView::NewLC - Exiting." );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+
+CIRHistoryListView::~CIRHistoryListView()
+	{
+	IRLOG_DEBUG( "CIRHistoryListView::~CIRHistoryListView - Entering" );
+    if ( iContainer )
+        {
+        	AppUi()->RemoveFromViewStack( *this, iContainer );
+        	iContainer->MakeVisible( EFalse );
+        	delete iContainer;
+        	iContainer=NULL;
+        }
+
+    iHistoryDataArr.ResetAndDestroy();
+
+    if(iHistoryEngine)
+        {
+        	delete iHistoryEngine;
+        	iHistoryEngine = NULL;
+        }
+
+#ifdef MUSICSHOP_AVAILABLE
+    if (iMPXFindInShop)
+		{
+			delete iMPXFindInShop;
+			iMPXFindInShop = NULL;
+		}
+#endif
+
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+    IRLOG_DEBUG( "CIRHistoryListView::~CIRHistoryListView - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+
+TUid CIRHistoryListView::Id() const
+    {
+    IRLOG_DEBUG( "CIRHistoryListView::Id" );
+    return KIRHistoryListViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListView::DoActivateL( const TVwsViewId& aPrevViewId,
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+    {
+    IRLOG_DEBUG( "CIRHistoryListView::DoActivateL - Entering" );
+    iUi->iPresentViewID = KIRHistoryListViewId;
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+     if ( !iContainer )
+		{
+		iContainer = CIRHistoryListContainer::NewL(ClientRect(),*this,iHistoryDataArr );
+		iContainer->SetMopParent( this );
+		appUi->AddToViewStackL( *this, iContainer );
+		}
+    else
+       {
+		// we must notify a resource change in order to update the skin context
+		// This is a flaw of CEikFormattedCellListBox
+			iContainer->SetRect(ClientRect());
+        	iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+       }
+
+    ConstructToolbarL();
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+    SetTitleL( R_IRAPP_HISTORY_TITLE );
+    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    HandleStatusPaneSizeChange();
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+    EnableObserverL(EIRSystemEventObserver);
+    IRLOG_DEBUG( "CIRHistoryListView::DoActivateL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListView::DoDeactivate()
+   {
+   IRLOG_DEBUG( "CIRHistoryListView::DoDeactivate - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+    if(&(appUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+
+    if ( iContainer )
+        {
+        appUi->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        delete iContainer;
+    	iContainer  = NULL;
+        }
+
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+    IRLOG_DEBUG( "CIRHistoryListView::DoDeactivate - Exiting" );
+   }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListView::HandleCommandL( TInt aCommand )
+    {
+    IRLOG_DEBUG( "CIRHistoryListView::HandleCommandL - Entering" );
+	iCommand = aCommand;
+    switch ( aCommand )
+        {
+       case EAknSoftkeyOptions:
+            {
+
+            Cba()->DrawDeferred();
+            break;
+            }
+
+        case EAknSoftkeyCancel:
+            {
+            break;
+            }
+
+        case EClearCmd:
+			{
+			
+			RBuf sumvalue;
+			HBufC* textResource = StringLoader::LoadLC( R_IRAPP_HISTORY_QUERY );
+			sumvalue.Create(*textResource);
+			CIRDialogLauncher* queryNote = CIRDialogLauncher::NewL();
+			CleanupStack::PushL( queryNote );
+			TInt dlgValue;
+			queryNote->ShowQueryDialogDeletionL(sumvalue,dlgValue);
+			if(dlgValue)
+				{
+				ClearSongHistoryItemL();
+				}
+			CleanupStack::PopAndDestroy( queryNote );
+			CleanupStack::PopAndDestroy( textResource );
+			sumvalue.Close();
+			Toolbar()->DrawNow();
+
+			break;
+
+			}
+        case EHelpCmd:
+            {
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
+				}
+          		break;
+            }
+
+        case EGotoNowPlayingViewCmd:
+            {
+            	iUi->SetHistory(ETrue);
+			    iUi->SavePrevIDL(KIRHistoryListViewId,aCommand);
+			    break;
+            }
+
+        case EListenCmd:
+            {
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iUi->SetListenFromPls(EFalse);
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					iRequestPending = ETrue;
+					iListenRequest  = ETrue;
+					iAddToFav=EFalse;
+					break;
+					}
+				else
+					{
+	                iNowPlayingWrapper->SetView(EHistoryView);
+					TInt index=iContainer->GetCurrentFocussedNode();
+					iContainer->ListenUrlL(index );
+					}
+				}
+		        break;
+            }
+
+        case ESettingsCmd:
+            {
+		        AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+           	    break;
+            }
+
+        case EAddtoFavouritesCmd:
+            {
+				if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+					{
+					break;
+					}
+				
+			   if(iContainer->IsdsOrNot())
+					{
+					if( iUi->VerifyNetworkConnectivityL() )
+						{
+						iRequestPending = ETrue;
+						iAddToFav = ETrue;
+						iListenRequest=EFalse;
+						break;
+						}
+					else 
+						{
+						iAddToFav = ETrue;
+	                    iContainer->AddStationToFavoritesL(aCommand);
+						}
+					}
+				else
+					{
+					iContainer->AddStationToFavoritesL(aCommand);
+					}
+			            
+            }
+        break;    
+        case EFindInShop:
+        	{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				_LIT(KFind, "find");
+	        	FindInShopOptionL();
+	        	 
+	        	/**
+	        	 * Increment the Find In Store count by One
+	        	 */
+	        	iUi->FindInMusicStoreCounter();
+	        	iNowPlayingWrapper->UpdateNmsLogEventsL(KFind);
+				}
+        	}
+        break;
+       	case EAddStationManuallyCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iUi->SetEditStation(EFalse);
+				AppUi()->ActivateLocalViewL(KIRAddManuallyStationViewID);
+				}
+			}
+		break;
+
+        default:
+            {
+            CIRBaseView::HandleCommandL( aCommand );
+            break;
+            }
+        }
+    IRLOG_DEBUG( "CIRHistoryListView::HandleCommandL - Exiting" );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::HandleStatusPaneSizeChange()
+    {
+    IRLOG_DEBUG( "CIRHistoryListView::HandleStatusPaneSizeChange - Entering" );
+    // the client rect is also set here after screen orientation change
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+    IRLOG_DEBUG( "CIRHistoryListView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::NextSongReceivedL()
+// Adds the currently playing song to the history's array.
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListView::NextSongReceivedL( const TDesC& /*aSongName*/,
+                                            const TDesC& /*aArtistName*/,
+                                            const TDesC& /*aChannelName*/, 
+                                            const TDesC& /*aChannelUrl*/ )
+{
+	IRLOG_DEBUG( "CIRHistoryListView::NextSongReceivedL - Entering" );
+	iHistoryDataArr.ResetAndDestroy();
+
+	if(iContainer)
+	{
+		iContainer->ClearHistoryListL();
+	}
+
+	GetAllListL();
+	if(iContainer)
+	{
+		iContainer->UpdateAllL(iHistoryDataArr);
+	}
+	IRLOG_DEBUG( "CIRHistoryListView::NextSongReceivedL - Exiting" );
+}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::ChannelChangedL()
+// Moves the currently playing channel to the top.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::ChannelChangedL( const TDesC& /*aSongName*/,const TDesC& /*aArtistName*/,
+		 const TDesC& /*aChannelName*/, const TDesC& /*aChannelUrl*/ )
+{
+	IRLOG_DEBUG( "CIRHistoryListView::ChannelChangedL - Entering" );
+	iHistoryDataArr.ResetAndDestroy();
+
+	if(iContainer)
+	{
+		iContainer->ClearHistoryListL();
+	}
+
+	GetAllListL();
+	if(iContainer)
+	{
+		iContainer->UpdateAllL(iHistoryDataArr);
+	}
+	IRLOG_DEBUG( "CIRHistoryListView::ChannelChangedL - Exiting" );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::RemoveSongEntry()
+// Removes the particular  from the List Array
+// ---------------------------------------------------------------------------
+//
+TInt CIRHistoryListView::RemoveSongEntry(const TDesC & /*aSongName*/,
+                                         const TDesC & /*aArtistName*/, 
+                                         const TDesC & /*aChannelName*/,
+                                         const TDesC& /*aChannelUrl*/)
+ {
+ 	IRLOG_DEBUG( "CIRHistoryListView::RemoveSongEntry - Entering" );
+    IRLOG_DEBUG( "CIRHistoryListView::RemoveSongEntry - Exiting" );
+	return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::RemoveChannelEntry()
+// ---------------------------------------------------------------------------
+//
+TInt CIRHistoryListView::RemoveChannelEntry( const TDesC& /*aSongName*/, 
+                                             const TDesC& /*aArtistName*/,
+                                             const TDesC& /*aChannelName*/,
+                                             const TDesC& /*aChannelUrl*/ )
+{
+	IRLOG_DEBUG( "CIRHistoryListView::RemoveChannelEntry" );
+	// No implementation required for DoubleStyleListbox as no seperate channel entries exist to be deleted.
+	return KErrNone;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::NotifyDataChangeToUIError()
+// Not Implemented
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::NotifyDataChangeToUIError(TInt /*aError*/)
+{
+	IRLOG_DEBUG( "CIRHistoryListView::NotifyDataChangeToUIError" );
+}
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::ClearSongHistoryItemL()
+// Clears the Song History array
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::ClearSongHistoryItemL()
+{
+	IRLOG_DEBUG( "CIRHistoryListView::ClearSongHistoryItemL - Entering" );
+	if(iHistoryEngine->ClearAllHistory() != KErrNone)
+	{
+		iHistoryDataArr.ResetAndDestroy();
+		iContainer->ClearHistoryListL();
+		Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+		Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+		GetAllListL();
+		if(iContainer)
+		{
+			iContainer->UpdateAllL(iHistoryDataArr);
+		}
+		IRLOG_DEBUG( "CIRHistoryListView::ClearSongHistoryItemL - Exiting" );
+		return;
+	}
+	iHistoryDataArr.ResetAndDestroy();
+
+	if(iContainer)
+	{
+		iContainer->ClearHistoryListL();
+		Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+		Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+		iContainer->UpdateAllL(iHistoryDataArr);
+	}
+	IRLOG_DEBUG( "CIRHistoryListView::ClearSongHistoryItemL - Exiting" );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::GetAllList()
+// gets the List which was stored earlier
+//---------------------------------------------------------------------------
+void CIRHistoryListView::GetAllListL()
+{
+	IRLOG_DEBUG( "CIRHistoryListView::GetAllListL - Entering" );
+	TInt songCount = iHistoryEngine->GetHistoryCount();
+
+	if(songCount == 0)
+		{
+		IRLOG_DEBUG( "CIRHistoryListView::GetAllListL - Exiting" );
+		return;
+		}
+
+	for(TInt arrCount=0 ; arrCount<songCount ; arrCount++ )
+		{
+		CIRSongHistoryInfo *songHistory = CIRSongHistoryInfo::NewL();
+		CleanupStack::PushL( songHistory );
+		iHistoryDataArr.Append(songHistory);
+		CleanupStack::Pop(songHistory);
+		}
+
+	//to be implemented after getting the engine class..
+	iHistoryEngine->GetAllHistoryL(iHistoryDataArr);
+	IRLOG_DEBUG( "CIRHistoryListView::GetAllListL - Exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::DynInitMenuPaneL()
+// Dynamically handles the Menu Pane
+//---------------------------------------------------------------------------
+void CIRHistoryListView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRHistoryListView::DynInitMenuPaneL - Entering" );
+	if(aResourceId == R_IR_MENU_HISTORY)
+		{
+		if(!aMenuPane) User::Leave(KErrNotFound);
+			{
+			if (  iHistoryDataArr.Count() == 0 )
+				{
+				aMenuPane->SetItemDimmed( EClearCmd, ETrue );
+				}
+			else
+				{
+				aMenuPane->SetItemDimmed( EClearCmd, EFalse );
+				}
+			// Now Playing option
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+            if(iContainer->ShowFocus()|| !(iHistoryDataArr.Count() ))
+	            {
+	            aMenuPane->SetItemDimmed(EAddtoFavouritesCmd,ETrue);
+	            }
+            else
+	            {
+	            aMenuPane->SetItemDimmed(EAddtoFavouritesCmd,EFalse);
+	            }
+			}
+
+		}
+	IRLOG_DEBUG( "CIRHistoryListView::DynInitMenuPaneL - Exiting" );
+
+	}
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::HandleMetaDataReceived()
+// Handles the change in metadata.
+//---------------------------------------------------------------------------
+
+void CIRHistoryListView::HandleMetaDataReceived( const CIRMetaData& aMetaData )
+{
+	IRLOG_DEBUG( "CIRHistoryListView::HandleMetaDataReceived - Entering" );
+	if( iHistoryEngine )
+	{
+		TRAPD( error, iHistoryEngine->HandleMetaDataReceivedL( aMetaData ) );
+		if( error )
+		{
+			IRLOG_DEBUG( "CIRHistoryListView::HandleMetaDataReceivedL - Failed." );
+		}
+	}
+	IRLOG_DEBUG( "CIRHistoryListView::HandleMetaDataReceived - Exiting" );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::ConstructToolbarL()
+// Constructs Touch Toolbar
+//---------------------------------------------------------------------------
+
+void CIRHistoryListView::ConstructToolbarL()
+	{
+	IRLOG_DEBUG( "CIRHistoryListView::ConstructToolbarL - Entering" );
+    if(Toolbar())
+	    {
+		if (  iHistoryDataArr.Count() == 0 )
+			{
+			Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+			Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+			}
+
+		if(iMPXFindInShop)
+			{
+			if(iContainer->GetButtonDimmed())
+				{
+				Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+				}
+			}
+		else
+			{
+			Toolbar()->SetItemDimmed(EFindInShop,ETrue,ETrue);
+			}
+		Toolbar()->SetToolbarVisibility( ETrue );
+		if(iContainer)
+			{
+		    iContainer->SetRect( ClientRect() );
+		    iContainer->DrawDeferred();
+			}
+	    }
+	IRLOG_DEBUG( "CIRHistoryListView::ConstructToolbarL - Exiting" );
+}
+
+// --------------------------------------------------------------------------
+// CIRHistoryListView::DynInitToolbarL()
+// Dynamically Updates the toolbar
+// --------------------------------------------------------------------------
+//
+void CIRHistoryListView::DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ )
+{
+	IRLOG_DEBUG( "CIRHistoryListView::DynInitToolbarL - Entering" );
+	
+	IRLOG_DEBUG( "CIRHistoryListView::DynInitToolbarL - Exiting" );
+}
+
+// --------------------------------------------------------------------------
+// CIRHistoryListView::OfferToolbarEventL
+// Handles key events
+// --------------------------------------------------------------------------
+//
+void CIRHistoryListView::OfferToolbarEventL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRHistoryListView::OfferToolbarEventL - Entering" );
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRHistoryListView::OfferToolbarEventL - Exiting" );
+	}
+
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRHistoryListView::LaunchMusicShopL()
+// To Launch Find in Shop Option
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::LaunchMusicShopL()
+	{
+#ifdef MUSICSHOP_AVAILABLE
+	  IRLOG_DEBUG( "Entered CIRHistoryListView::LaunchMusicShopL() Entering" );
+
+	  TApaTaskList tasList( iCoeEnv->WsSession() );
+	  TApaTask task = tasList.FindApp( KUidMusicStore );
+
+	  if ( task.Exists() )
+		  {
+		    task.BringToForeground();
+		  }
+	  else
+		  {
+		    RApaLsSession session;
+		    if ( KErrNone == session.Connect() )
+			    {
+			      CleanupClosePushL( session );
+			      TThreadId threadId;
+			      session.CreateDocument( KNullDesC, KUidMusicStore, threadId );
+			      CleanupStack::PopAndDestroy(&session);
+			    }
+		  }
+
+	  IRLOG_DEBUG( "Leaving CIRHistoryListView::LaunchMusicShopL() Exiting" );
+#endif
+   }
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::DoFindInMusicShopL()
+// To Launch Find in Shop Option
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::DoFindInMusicShopL( const TDesC& aSongName,
+                                             const TDesC& aArtistName,
+                                             const TDesC& aAlbumName )
+	{
+	IRLOG_DEBUG( "Entered CIRHistoryListView::DoFindInMusicShopL() - Entering" );
+#ifdef MUSICSHOP_AVAILABLE
+	HBufC* url = NULL;
+	url = iMPXFindInShop->CreateSearchURLL( aSongName,
+	             							 aArtistName,
+	             							 aAlbumName,
+	             							 KNullDesC,     // Composer - Not used
+	              							 KNullDesC );   // Genre - Not used
+	CleanupStack::PushL(url);   // the pointer will be poped
+	RProperty::Set( KUidMusicStore,
+	KMShopCategoryId,
+	KFindInMShopKeyValid );  // Set Key to Valid
+
+	RProperty::Set( KUidMusicStore,
+	KMShopCategoryName,
+	*url );
+	LaunchMusicShopL();
+	if(url)
+		{
+		CleanupStack::PopAndDestroy(url);
+		}
+	REComSession::FinalClose();
+#else
+    if(aSongName.Length() > 0 || aArtistName.Length() > 0 || aAlbumName.Length() > 0)
+        {
+        // do nothing, just remove build warnings.
+        }
+	IRLOG_DEBUG( "Leaving CIRHistoryListView::DoFindInMusicShopL() - Exiting" );
+#endif
+	}
+
+// ---------------------------------------------------------------------------
+// CIRHistoryListView::FindInShopOption()
+// To Launch Find in Shop Option when selected from the toolbar
+// ---------------------------------------------------------------------------
+//
+
+void CIRHistoryListView:: FindInShopOptionL()
+	{
+	IRLOG_DEBUG( "CIRHistoryListView::FindInShopOptionL - Entering" );
+	TInt itemIndex = iContainer->GetCurrentFocussedLeaf();
+	if(itemIndex==-1)
+		{
+	    IRLOG_DEBUG( "CIRHistoryListView::FindInShopOptionL - Exiting" );
+		return;
+		}
+	if(itemIndex>=0 && itemIndex<iHistoryDataArr.Count())
+		{	
+		DoFindInMusicShopL(iHistoryDataArr[itemIndex]->GetSongInfo(),
+		iHistoryDataArr[itemIndex]->GetArtistInfo(),
+		KNullDesC);
+		}
+	IRLOG_DEBUG( "CIRHistoryListView::FindInShopOptionL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRHistoryListView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRHistoryListView::NotifyActiveNetworkObserversL - Entering" );
+	
+	switch(aEvent)
+	{
+	case ENetworkConnectionDisconnected:
+		{
+		iNowPlayingWrapper->HandleNetworkDisconnected();
+		}
+		break;
+	case ENetworkConnectionEstablished:
+		{
+		if( !iUi->CheckAndNotifyLowDiskSpaceL() && iContainer )
+			{
+			if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+				{
+				if(iAddToFav)
+					{
+					iAddToFav=ETrue;
+					iListenRequest=EFalse;
+					iContainer->AddStationToFavoritesL(EAddtoFavouritesCmd);
+					}
+				else if(iListenRequest)
+					{
+					iAddToFav=EFalse;
+					iListenRequest=EFalse;
+					iNowPlayingWrapper->SetView(EHistoryView);
+					TInt index=iContainer->GetCurrentFocussedNode();
+					iContainer->ListenUrlL(index );
+					}
+				else
+					{
+						
+					}
+				}
+			}
+		if(iUi->iNetworkController->IsHandingOverConnection())
+			{
+			ResetPendingRequests(EFalse);
+			}
+		}
+	}
+
+	IRLOG_DEBUG( "CIRHistoryListView::NotifyActiveNetworkObserversL - Exiting" );
+	}
+	
+	
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRHistoryListView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	iListenRequest  = aValue;
+	iAddToFav = aValue;
+	}
+
+	
+	
+	
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::HandleForegroundEventL( TBool aForeground )
+    {
+	IRLOG_DEBUG( "CIRHistoryListView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+   
+	if ( aForeground )
+		{
+		if(iContainer)
+			{
+			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+		    TRgb color;
+		    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+		    				                                      EAknsCIQsnTextColorsCG6 );
+			if(color.Gray2()!=0)
+				{
+				CreateAndSetToolbarL(R_IR_HISTORY_WHITE_TOOLBAR);
+				}
+			else
+				{
+				CreateAndSetToolbarL(R_IR_HISTORY_BLACK_TOOLBAR);	
+				}
+	        if( AknLayoutUtils::PenEnabled() && Toolbar() )
+				{
+				Toolbar()->SetToolbarObserver( this );
+				}
+			ConstructToolbarL();
+			}
+		}
+	IRLOG_DEBUG( "CIRHistoryListView::HandleForegroundEventL" );
+    }
+
+// ---------------------------------------------------------------------------
+// GetFindInShopInstance()
+// Get the FindInShop Instance is null or not.
+// ---------------------------------------------------------------------------
+//
+TBool CIRHistoryListView::GetFindInShopInstance()
+	{
+	TBool ret = EFalse;
+	if(iMPXFindInShop)
+		{
+		ret = ETrue;	
+		}
+	IRLOG_DEBUG( "CIRHistoryListView::GetFindInShopInstance" );
+	return ret;	
+	}
+// ---------------------------------------------------------
+// CIRHistoryListView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRHistoryListView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRHistoryListView::HandleSystemEventL - Entering");
+	
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if(!iCallRequestPending && iCommand==EAddtoFavouritesCmd)
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				if(iUi->iIsdsWrapper->GetListenRequest())
+					{
+					iNowPlayingWrapper->DestroyWaitDialogL();
+					iUi->iIsdsWrapper->SetListenRequest(EFalse);
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if(iCallRequestPending && iCommand==EAddtoFavouritesCmd)
+				{
+				iCallRequestPending = EFalse;
+				HandleCommandL(iCommand);
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRHistoryListView::HandleSystemEventL - Exiting." );
+	}	
+// ---------------------------------------------------------------------------
+// RefreshHistoryL()
+// Refreshes the History view while Synchronisation.
+// ---------------------------------------------------------------------------
+//
+void CIRHistoryListView::RefreshHistoryL()
+{
+	IRLOG_DEBUG( "CIRHistoryListView::RefreshHistoryL - Entering" );
+	iHistoryDataArr.ResetAndDestroy();
+
+	if(iContainer)
+	{
+		iContainer->ClearHistoryListL();
+	}
+
+	GetAllListL();
+	if(iContainer)
+	{
+		iContainer->UpdateAllL(iHistoryDataArr);
+	}
+	IRLOG_DEBUG( "CIRHistoryListView::RefreshHistoryL - Exiting" );
+}
+// ---------------------------------------------------------------------------
+// HistoryEngineInstance()
+// Gets the history Engine object Instance.
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryEngine* CIRHistoryListView::HistoryEngineInstance()
+{
+	IRLOG_DEBUG( "CIRHistoryListView::HistoryEngineInstance - Exiting" );
+	return iHistoryEngine ;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irisdswrapper.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,942 @@
+/*
+* Copyright (c) 2004 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 class for Isds functions
+*
+*/
+
+#include "irisdswrapper.h"
+#include "isdsclientdll.h"
+#include "irdebug.h"
+#include "irsettings.h"
+#include "misdsresponseobserver.h"
+#include "mviewsresponseanderrorobserver.h"
+#include "irbrowsecatagoryitems.h"
+#include "irbrowsechannelitems.h"
+#include "irisdspreset.h"
+#include "irfavoritesdb.h"
+#include "irdialoglauncher.h"
+#include <internetradio.rsg>
+#include <stringloader.h>
+#include "irdataproviderconstants.h"
+#include "ir.hrh"
+#include "msyncpresetobserver.h"
+#include <aknwaitdialog.h>
+
+
+_LIT(KFalse,"false");
+const TInt KStationsDataMaxLength = 5;
+const TInt KCategoryDataMaxLength = 5;
+const TInt KBufSize = 100;
+const TInt KSize = 10;
+
+
+// ---------------------------------------------------------------------------
+// CIRIsdsWrapper* CIRIsdsWrapper::NewL()
+// function to return an instance of CIRIsdsWrapper 
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRIsdsWrapper* CIRIsdsWrapper::NewL(CIRSettings& aIRSettings,CIRFavoritesDb& aFavPresets)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::NewL - Entering" );
+	CIRIsdsWrapper* self = CIRIsdsWrapper::NewLC(aIRSettings,aFavPresets);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRIsdsWrapper::NewL - Exiting" );
+	return self;
+	}
+        
+// ---------------------------------------------------------------------------
+// CIRIsdsWrapper* CIRIsdsWrapper::NewLC()
+// Two-phased constructor.
+// Create a CIRIsdsWrapper object, which will draw itself
+// to aRect.
+// ---------------------------------------------------------------------------
+//
+CIRIsdsWrapper* CIRIsdsWrapper::NewLC(CIRSettings& aIRSettings,CIRFavoritesDb& aFavPresets)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::NewLC - Entering" );
+	CIRIsdsWrapper* self = new (ELeave) CIRIsdsWrapper(aIRSettings,aFavPresets);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRIsdsWrapper::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIsdsWrapper:: ~CIRIsdsWrapper()
+// Destructor..
+// ---------------------------------------------------------------------------
+//
+CIRIsdsWrapper:: ~CIRIsdsWrapper()
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::~CIRIsdsWrapper - Entering" );
+	if( iISDSClient )
+	{
+	delete iISDSClient;
+	}
+	delete iStationsData;
+	delete iDiaologLauncher;
+	delete iCategoryData;
+	delete iChannelImgUrl;
+
+	iChannelIdArray.Close();
+	if(iBannerUrl) 
+		{
+		delete iBannerUrl;
+		}
+	iBannerUrl = NULL;
+
+
+    if (iClickThroughUrl)
+		{
+		delete iClickThroughUrl;
+		}
+    iClickThroughUrl = NULL;
+    
+    if(iCatBannerUrl) 
+		{
+		delete iCatBannerUrl;
+		}
+	iCatBannerUrl = NULL;
+
+
+    if (iCatClickThroughUrl)
+		{
+		delete iCatClickThroughUrl;
+		}
+    iCatClickThroughUrl = NULL;
+	if(iIsdsWaitDialog)
+    	{
+    	delete iIsdsWaitDialog;
+    	iIsdsWaitDialog= NULL;
+    	}
+	IRLOG_DEBUG( "CIRIsdsWrapper::~CIRIsdsWrapper - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRIsdsWrapper::ConstructL()
+// Constructs the IsdsClient object
+// ---------------------------------------------------------------------------
+//
+ 
+void CIRIsdsWrapper::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::ConstructL - Entering" );
+
+	// ISDS INTERFACE 
+	_LIT(KServerAddress, "http://idirectory.xgns.net/isds");
+	//iISDSClient = CIRIsdsClient::NewL(*this , iIRSettings.GetISDSBaseUrlL());
+	iISDSClient = CIRIsdsClient::NewL(*this , KServerAddress);
+	iCategoryData = new (ELeave) CDesCArrayFlat(KStationsDataMaxLength);
+
+	iStationsData = new (ELeave) CDesCArrayFlat(KStationsDataMaxLength);
+	iChannelImgUrl = new (ELeave) CDesCArrayFlat(KStationsDataMaxLength);
+	//Dialog Launcher instance
+	iDiaologLauncher = CIRDialogLauncher::NewL();
+	iReqAddToFav = EFalse;
+	iError = EFalse;
+	iConnTimeOut = EFalse;
+	iBannerUrl = NULL;
+	iClickThroughUrl = NULL;
+	iCatBannerUrl = NULL;
+	iCatClickThroughUrl = NULL;
+	iIsdsWaitDialog = NULL;
+	iViewObserver = NULL;
+	IRLOG_DEBUG( "CIRIsdsWrapper::ConstructL - Exiting" );
+	}
+		
+// ---------------------------------------------------------------------------
+// void CIRIsdsWrapper::CIRIsdsWrapper()
+// Default Constructor
+// ---------------------------------------------------------------------------
+//
+CIRIsdsWrapper::CIRIsdsWrapper(CIRSettings& aIRSettings,CIRFavoritesDb& aFavPresets):
+				iIRSettings(aIRSettings),iFavPresets(aFavPresets)
+	{
+   	IRLOG_DEBUG( "CIRIsdsWrapper::CIRIsdsWrapper" );
+	//No implementation
+   }
+// ---------------------------------------------------------------------------
+// CIRIsdsClient* CIRIsdsWrapper::GetISDSInstance()
+// Returns the ISDS Instance
+// ---------------------------------------------------------------------------
+//
+CIRIsdsClient* CIRIsdsWrapper::GetISDSInstance()
+   {
+   IRLOG_DEBUG( "CIRIsdsWrapper::GetISDSInstance" );
+   return iISDSClient;
+   }
+// ---------------------------------------------------------------------------
+// CIRIsdsClient* CIRIsdsWrapper::GetISDSInstance()
+// Returns the ISDS Instance
+// ---------------------------------------------------------------------------
+//
+CIRDialogLauncher* CIRIsdsWrapper::GetDialogLauncherInstance()
+   {
+   IRLOG_DEBUG( "CIRIsdsWrapper::GetDialogLauncherInstance" );
+   return iDiaologLauncher;
+   }
+// ---------------------------------------------------------------------------
+// void CIRIsdsWrapper::IsdsSearchRequestL()
+// Issues a search request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsSearchRequestL(MViewsResponseAndErrorObserver* aViewObserver,
+										const TDesC& aIsdsSearchString)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsSearchRequestL started." );
+	iViewObserver = aViewObserver;	
+	iSSearchRequest = ETrue;
+	iListenRequest=EFalse;
+	iWaitDialogWhileSearch=ETrue;
+	CreateWaitDialogL();
+	iISDSClient->IRISDSSearchL(aIsdsSearchString);
+	iWaitDialogWhileSearch=EFalse;
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsSearchRequestL exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRIsdsWrapper::IsdsCategoryRequestL()
+// Issues a Category request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsCategoryRequestL(MViewsResponseAndErrorObserver* aViewObserver,
+										  CIRIsdsClient::TIRIsdsclientInterfaceIDs aIDType)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCategoryRequestL started." );
+	iViewObserver = aViewObserver;	
+	iListenRequest=EFalse;
+	CreateWaitDialogL();
+	iISDSClient->IRIsdsClientIntefaceL(aIDType);
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCategoryRequestL exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRIsdsWrapper::IsdsChannelRequestL()
+// Issues a Channel request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsChannelRequestL(MViewsResponseAndErrorObserver* aViewObserver,TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsChannelRequestL started." );
+	iViewObserver = aViewObserver;	
+	iListenRequest=EFalse;
+	CreateWaitDialogL();
+	iISDSClient->IRIsdsClientIntefaceL(aIndex,CIRIsdsClient::ECatagory);
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsChannelRequestL exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRIsdsWrapper::IsdsListenRequestL()
+// Issues a Listen request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsListenRequestL(MViewsResponseAndErrorObserver* aViewObserver,
+										TInt aCurrentIndex,TBool aHistoryBool)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsListenRequestL started." );
+	iViewObserver = aViewObserver;
+	iListenRequest=ETrue;
+	iHistoryBool = aHistoryBool ;
+	if(aHistoryBool)
+		{
+		iISDSClient->IRIsdsClientIntefaceL(aCurrentIndex,CIRIsdsClient::EChannels,ETrue);
+		}
+	else
+		{
+		iCurrentPlayingIndex = aCurrentIndex;
+		iISDSClient->IRIsdsClientIntefaceL(aCurrentIndex,CIRIsdsClient::EChannels);
+		}
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsListenRequestL exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsErrorL()
+// Used to Indiacte error in retrieving data from Isds
+// @param aErrCode- contains error code
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsErrorL(TInt aErrorCode)
+    {
+    IRLOG_DEBUG( "CIRIsdsWrapper::IsdsErrorL started." );
+    IRRDEBUG2("CIRISDSWRAPPER::ISDSERRORL",KNullDesC);
+    DestroyWaitDialogL();
+    
+    
+    iReqAddToFav = EFalse;
+
+    
+	if( aErrorCode == KNotFound)
+		{
+		IRRDEBUG2("CIRISDSWRAPPER::ISDSERRORL--NOTFOUND",KNullDesC);
+		if(iViewObserver)
+			{
+			if(iSSearchRequest)	
+				{
+				iError = ETrue;
+				iViewObserver->ErrorL();
+				iSSearchRequest = EFalse;		
+				}
+			else 
+				{
+				if(iHistoryBool)
+					{
+					iKNotFound = ETrue ;
+					iViewObserver->ErrorL();
+					iHistoryBool = EFalse ;
+					iKNotFound = EFalse ;
+					}
+				else if(iSyncReqFromMainView)
+					{
+					iSyncReqFromMainView = EFalse;
+					iViewObserver->ErrorL();						
+					}
+				else
+					{
+					iViewObserver->ErrorL();
+					iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ERROR_NOTINISDS,ETrue);	
+					}
+				}
+			}
+		}
+		
+	else if( aErrorCode == KNotModified )
+		{
+		IRRDEBUG2("CIRISDSWRAPPER::ISDSERRORL--NOTMODIFIED",KNullDesC);
+		iViewObserver->ErrorL();
+		//iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ERROR_NOTINISDS,ETrue)
+		}
+	else if	( aErrorCode == KErrCouldNotConnect )
+        {
+        //VerifyNetworkConnectivityL()
+        //iDiaologLauncher->ShowErrorNoteL(R_IRAPP_NW_NOCONN_ERROR,ETrue)
+        }
+	else if	( aErrorCode == KDndTimedOut  )
+        {
+  		IRRDEBUG2("IsdsErrorL :DndTimedOut ",KNullDesC);
+  		if(iViewObserver)
+			{
+			iViewObserver->ErrorL();
+       		iDiaologLauncher->ShowErrorNoteL(R_IRAPP_NW_NOCONN_ERROR,ETrue);
+			}
+        }
+    else if ( aErrorCode == KServiceUnavailable )
+	    {
+		if(iSyncReqFromMainView)
+			{
+			iSyncReqFromMainView = EFalse;
+			}
+		if( iViewObserver )
+			{
+			iViewObserver->ErrorL();
+			iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ISDS_UNAVAILABLE,ETrue);	
+			}
+	    }
+    else if ( aErrorCode == KErrCorrupt )
+        {
+        IRRDEBUG2("CIRISDSWRAPPER::ISDSERRORL--KERRCORRUPT",KNullDesC);
+        iDiaologLauncher->ShowErrorNoteL( R_IRAPP_ERROR_ADDRESS,ETrue );
+        }
+    else if (aErrorCode == KDataProviderTimeout)
+		{
+		IRRDEBUG2("CIRISDSWRAPPER::ISDSERRORL--KDATAPROVIDERTIMEOUT",KNullDesC);
+		if(iViewObserver)
+			{
+			iConnTimeOut= ETrue;
+			iViewObserver->ErrorL();	
+
+			iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ERROR_CONNECTION,ETrue);
+			}
+		}
+		
+	else
+		{
+		IRRDEBUG2("CIRISDSWRAPPER::ISDSERRORL--LASTELSE aErrorCode =%d",aErrorCode);
+		if(iViewObserver)
+			{
+			iViewObserver->ErrorL();
+			iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ERROR_OPERATION,ETrue);
+			}
+		}
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsErrorL exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsCatogoryDataReceivedL()
+// Called when catogory information is recieved from ISDS
+// @param aParsedStructure - contains catogory info
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::IsdsCatogoryDataReceivedL(CArrayPtrFlat<CIRBrowseCatagoryItems> 
+											   & aParsedStructure) 
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCatogoryDataReceivedL started." );
+	iError = EFalse;
+	iConnTimeOut = EFalse;
+	iCatBannerTag = EFalse;
+	DestroyWaitDialogL();
+
+	if (iCategoryData)
+		{
+		iCategoryData->Reset();
+		delete iCategoryData;
+		iCategoryData = NULL;
+		}
+	if(iCatBannerUrl) 
+		delete iCatBannerUrl;
+	
+	iCatBannerUrl = NULL;
+	
+	if (iCatClickThroughUrl)
+		delete iCatClickThroughUrl;
+	
+	iCatClickThroughUrl = NULL;
+	//Set the catogory array with categoryname and description
+	iCategoryData = new (ELeave) CDesCArrayFlat(KCategoryDataMaxLength);
+	for(TInt i=0;i<aParsedStructure.Count();i++)
+		{
+		_LIT(KTabSpace,"\t");
+			if(aParsedStructure[i]->iCatBannerUrl )		
+				{
+				iCatBannerTag = ETrue;
+				if(aParsedStructure[i]->iCatBannerUrl->Length() !=0)
+					{
+					iCatBannerUrl = HBufC::NewL(aParsedStructure[i]->
+					             iCatBannerUrl->Des().Length());
+					iCatBannerUrl->Des().Append(aParsedStructure[i]->
+					                        iCatBannerUrl->Des()); 
+					}
+				        
+				if(aParsedStructure[i]->iCatClickThroughUrl)        
+					{
+					if(aParsedStructure[i]->iCatClickThroughUrl->Length() != 0)	
+						{
+						iCatClickThroughUrl = HBufC::NewL(aParsedStructure[i]->
+						                   iCatClickThroughUrl->Des().Length());
+						iCatClickThroughUrl->Des().Append(aParsedStructure[i]->
+												iCatClickThroughUrl->Des());
+						}
+					}
+							
+				} 
+			if(aParsedStructure[i]->iCatName)
+				{
+				HBufC* textResource = HBufC::NewLC(aParsedStructure[i]->iCatName->Des().Length() + KBufSize);
+				textResource->Des().Append(KTabSpace);
+				textResource->Des().Append(aParsedStructure[i]->iCatName->Des());
+				textResource->Des().Append(KTabSpace);
+
+				HBufC* expandedText = StringLoader::LoadLC(R_IRAPP_GENRE_STATLIST_TITLE_EXPAND,
+														   aParsedStructure[i]->iSize);
+				textResource->Des().Append(*expandedText);												
+				iCategoryData->AppendL(*textResource);
+				CleanupStack::PopAndDestroy(expandedText);
+				CleanupStack::PopAndDestroy(textResource);
+				}
+		}
+		
+	
+	iViewObserver->ResponseL();
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCatogoryDataReceivedL exiting" );			
+	}
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsChannelDataReceivedL()
+// Called when channel information is recieved from ISDS
+// @param aParsedStructure - contains Channel info
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::IsdsChannelDataReceivedL(CArrayPtrFlat<CIRBrowseChannelItems> 
+											  & aParsedStructure)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsChannelDataReceivedL started." );
+	iError = EFalse;
+	iConnTimeOut = EFalse;
+	iChannelBannerTag = EFalse;
+	iStationsData->Reset();
+	iChannelImgUrl->Reset();
+    DestroyWaitDialogL();
+	iChannelIdArray.Reset();
+
+	if(iBannerUrl) 
+	delete iBannerUrl;
+	iBannerUrl = NULL;
+
+	if (iClickThroughUrl)
+	delete iClickThroughUrl;
+	iClickThroughUrl = NULL;
+	
+	for(TInt i=0;i<aParsedStructure.Count();i++)
+		{
+		_LIT(KTabSpace,"\t");
+		if(aParsedStructure[i]->iBannerUrl )		
+			{
+			iChannelBannerTag = ETrue;
+			if(aParsedStructure[i]->iBannerUrl->Length() != 0)
+				{
+				iBannerUrl = HBufC::NewL(aParsedStructure[i]->
+									iBannerUrl->Des().Length());
+				iBannerUrl->Des().Append(aParsedStructure[i]->
+											iBannerUrl->Des()); 
+				}
+
+			if(aParsedStructure[i]->iClickThroughUrl)
+				{
+				if(aParsedStructure[i]->iClickThroughUrl->Length() != 0)
+					{
+					iClickThroughUrl = HBufC::NewL(aParsedStructure[i]->
+					iClickThroughUrl->Des().Length());
+					iClickThroughUrl->Des().Append(aParsedStructure[i]->
+					iClickThroughUrl->Des());
+					}
+				}
+			} 
+		
+		if(aParsedStructure[i]->iChannelName)
+			{
+			TInt len = aParsedStructure[i]->iChannelName->Des().Length();
+			if(aParsedStructure[i]->iShortDescription)
+				{
+				len = len + aParsedStructure[i]->iShortDescription->Des().Length();
+				}
+			HBufC* textResource = HBufC::NewLC(len + KSize);
+			textResource->Des().Append(KTabSpace);
+			textResource->Des().Append(aParsedStructure[i]->iChannelName->Des());
+			textResource->Des().Append(KTabSpace);
+			if(aParsedStructure[i]->iShortDescription)
+			textResource->Des().Append(aParsedStructure[i]->iShortDescription->Des());
+			iStationsData->AppendL(*textResource);
+			CleanupStack::PopAndDestroy(textResource);
+
+			if(aParsedStructure[i]->iImgUrl.Length())
+				{
+				iChannelImgUrl->AppendL(aParsedStructure[i]->iImgUrl);
+				}
+			else
+				{
+				RBuf urlStatus;
+				urlStatus.Create(KSize);
+				urlStatus.Copy(KFalse);
+				iChannelImgUrl->AppendL(urlStatus);
+				urlStatus.Close();
+				}
+
+			//the current channel list that is being displayed
+			//in the stations view
+			//this array contains all that channel ids 
+			iChannelIdArray.Append(aParsedStructure[i]->iChannelID);
+			}
+
+		}
+	iViewObserver->ResponseL();	
+	
+	if(iSSearchRequest)	
+		{
+		iSSearchRequest = EFalse;
+		}			
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsChannelDataReceivedL exiting" );
+	}
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsPresetDataReceivedL()
+// Called when preset information is recieved from ISDS
+// @param aParsedStructure - contains Preset info
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsPresetDataReceivedL(CArrayPtrFlat<CIRIsdsPreset> & aParsedStructure)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetDataReceivedL started." );
+	iError = EFalse;
+	iConnTimeOut = EFalse;
+	iListenRequest=EFalse;
+	CIRIsdsPreset* data = aParsedStructure[0];
+	data->SetChannelType(1);
+	DestroyWaitDialogL();
+	if(iReqAddToFav)
+		{
+		TInt err;
+						
+		iFavPresets.AddPresetL(*data,err,iReqForLogo);
+		
+		iViewObserver->ResponseL(data);
+		iReqAddToFav=EFalse;
+		
+		
+		//If favourites is full then display an error message
+		if(err==KErrNoMemory)
+			{
+			iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+			return;			
+			}
+			
+		else
+			{
+			if((err==KErrAlreadyExists )&&
+			 ( iFavPresets.iFavPresetList.Count() == KPresetsArrayMaxLength) )
+				{
+				iDiaologLauncher->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+				return;			
+				}
+			else
+				{
+				RBuf channel;
+				HBufC* textResource = StringLoader::LoadLC( R_IRAPP_STATIONS_POPUP_SAVED,data->GetName() );//CurrentItemIndex()-1
+				channel.Create(*textResource);
+				iDiaologLauncher->ShowConfirmationNoteL( channel,ETrue );
+				CleanupStack::PopAndDestroy(textResource);
+				channel.Close();
+				iIRSettings.SetFlagIfAnyFavL();
+				return;
+				}
+			}
+		}
+		
+	iViewObserver->PresetResponseL(data);
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetDataReceivedL exiting" );
+	}
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsIRIDRecieved()
+// Called to provide IRID
+// @param aIRID  - contains IRID recived from Isds
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsIRIDRecieved(const TDesC& aIRID)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsIRIDRecieved" );
+	TRAP_IGNORE( iIRSettings.SetIRIDL(aIRID) )
+	}
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsOtaInfoRecieved()
+// called back when OTA info is recieved and Ui needs to be intimated
+// @param CIROTAUpdate&,the ota information 
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsOtaInfoRecieved( CIROTAUpdate &/*aOtaData*/)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsOtaInfoRecieved" );	
+	}
+
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsPresetRemovedL()
+// called back when the preset that is synced was removed from isds
+// @param TInt,the preset id
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsPresetRemovedL(TInt aId)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetRemovedL - Entering" );
+	iFavPresets.MakePresetUserDefinedL(aId,0);
+	iSyncPresetObserver->SyncPresetRemovedL(aId);
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetRemovedL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsPresetChangedL()
+// called back when the preset that is synced has been changed in the isds
+// @param CIRIsdsPreset&,the new preset data
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsPresetChangedL(CIRIsdsPreset& aPreset)
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetChangedL - Entering" );
+	iFavPresets.ReplacePresetL(aPreset);
+	iSyncPresetObserver->SyncPresetChangedL(aPreset);
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetChangedL - Exiting" );		
+	}
+	
+// ---------------------------------------------------------------------------
+// MIsdsResponseObserver::IsdsPresetNoChangeL()
+// called back when the preset that is synced has not been changed
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsPresetNoChangeL()
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetNoChangeL - Entering" );
+	iSyncPresetObserver->SyncPresetNoChangeL();
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetNoChangeL - Exiting" );
+	}
+	  
+	  
+// ---------------------------------------------------------------------------
+// IsdsPresetRequestL()
+// called by all the views to get preset data
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::IsdsPresetRequestL(MViewsResponseAndErrorObserver* aViewObserver,TInt aIndex,
+										TInt aCommand,TInt aReqForLogo,TInt aHistoryBool)
+{
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetRequestL started." );
+	iViewObserver = aViewObserver;	
+	iListenRequest=EFalse;
+	CreateWaitDialogL();
+
+	if(EAddtoFavouritesCmd == aCommand )
+	iReqAddToFav=ETrue;
+	iHistoryBool = aHistoryBool ;
+	iReqForLogo = aReqForLogo;
+	if(aHistoryBool)
+		{
+		iISDSClient->IRIsdsClientIntefaceL(aIndex,CIRIsdsClient::EChannels,ETrue);
+		}
+	else
+		{
+		iISDSClient->IRIsdsClientIntefaceL(aIndex,CIRIsdsClient::EChannels);
+		}
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsPresetRequestL exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// IsdsCancelRequest()
+// called by all the views to cancel the UI request
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::IsdsCancelRequest()
+{	
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCancelRequest started." );
+	iISDSClient->IRISDSCancelRequest();
+    IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCancelRequest exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// IsdsCancelRequest()
+// called by all the views to cancel the UI request
+// ---------------------------------------------------------------------------
+//
+
+CDesCArrayFlat* CIRIsdsWrapper::GetStationsData()
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::GetStationsData" );
+	return iStationsData;
+	}
+
+// ---------------------------------------------------------------------------
+// IsdsCancelRequest()
+// called by all the views to cancel the UI request
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::CreateWaitDialogL()
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::CreateWaitDialogL - Entering" );
+	iDialogDismissed=EFalse;
+	RBuf title;
+	HBufC* titleText;
+	if(iWaitDialogWhileSearch)
+		{
+	 	titleText = StringLoader::LoadLC(R_IRAPP_SEARCHING_PROGRESS);
+		}
+ 	else if(iListenRequest)
+		{
+		titleText = StringLoader::LoadLC(R_IRAPP_LOADING_BUFFERING);
+		}
+	else 
+		{
+	 	titleText = StringLoader::LoadLC(R_IRAPP_LOADING_LOADING);
+		}
+	title.CreateL(*titleText );
+	CleanupStack::PopAndDestroy( titleText );
+	
+	if(!iIsdsWaitDialog)	
+		{
+		iIsdsWaitDialog =  new ( ELeave ) CAknWaitDialog( NULL,ETrue);
+		iIsdsWaitDialog->SetCallback(this);
+		iIsdsWaitDialog->SetTextL(title);
+		iIsdsWaitDialog->ExecuteLD(R_IRAPP_PROGRESS_DIALOG);
+		}
+	title.Close();
+	IRLOG_DEBUG( "CIRIsdsWrapper::IsdsCancelRequest - exiting." );
+	}
+// -----------------------------------------------------------------------------
+// CIRIsdsWrapper::DialogDismissedL()
+// Called by CAknwaitdialog 
+// -----------------------------------------------------------------------------
+// 
+void CIRIsdsWrapper::DialogDismissedL( TInt aButtonId )
+	{
+	IRLOG_DEBUG( "CIRIsdsWrapper::DialogDismissedL - Entering" );
+	if(aButtonId == EIRCancel)
+		{
+		iIsdsWaitDialog= NULL;
+		iDialogDismissed=ETrue;
+		iReqAddToFav=EFalse;
+		iViewObserver->ErrorL();
+		iDialogDismissed=EFalse;
+		IsdsCancelRequest();
+		}
+	IRLOG_DEBUG( "CIRIsdsWrapper::DialogDismissedL - Exiting" );
+	}    
+// -----------------------------------------------------------------------------
+// CIRIsdsWrapper::GetBannerUrl()
+// Returns the BannerUrl
+// -----------------------------------------------------------------------------
+// 
+HBufC* CIRIsdsWrapper::GetBannerUrl()
+{	
+IRLOG_DEBUG( "CIRIsdsWrapper::GetBannerUrl - Entering" );
+IRLOG_DEBUG( "CIRIsdsWrapper::GetBannerUrl - Exiting" );
+	if(iBannerUrl)
+	{
+		return iBannerUrl;
+	}
+	else
+	{
+		return NULL;
+	}
+}
+
+// ---------------------------------------------------------------------------
+// DestroyWaitDialogL()
+// Destroys The WaitDialog
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::DestroyWaitDialogL()
+	{
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::DestroyWaitDialogL - Entering" );
+
+		if(iIsdsWaitDialog)
+		{
+		iIsdsWaitDialog->ProcessFinishedL();
+		iIsdsWaitDialog=NULL;
+		}
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::DestroyWaitDialogL - exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// SetCurrentPlayingIndex()
+// Sets the Current Playing Index
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::SetCurrentPlayingIndex(TBool aCurrentPlayingIndex  )
+	{
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::SetCurrentPlayingIndex - Entering" );
+	iCurrentPlayingIndex=aCurrentPlayingIndex;
+	IRLOG_DEBUG( "CIRIsdsWrapper::SetCurrentPlayingIndex - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// GetCurrentPlayingIndex()
+// Returns The current Playing Index
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRIsdsWrapper::GetCurrentPlayingIndex( )
+	{
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::GetCurrentPlayingIndex - Entering" );
+	IRLOG_DEBUG( "CIRIsdsWrapper::GetCurrentPlayingIndex - exiting" );
+	return iCurrentPlayingIndex;
+	}
+
+
+// ---------------------------------------------------------------------------
+// SetListenRequest()
+// Sets The ListenRequest if Listen is Done
+// ---------------------------------------------------------------------------
+//
+
+void CIRIsdsWrapper::SetListenRequest(TBool aListenRequest)
+	{
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::SetListenRequest - Entering" );
+	iListenRequest=aListenRequest;
+	IRLOG_DEBUG( "CIRIsdsWrapper::SetListenRequest - exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// GetListenRequest()
+// Returns the Listen Request Value
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRIsdsWrapper::GetListenRequest( )
+	{
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::GetListenRequest - Entering" );
+	IRLOG_DEBUG( "CIRIsdsWrapper::GetListenRequest - exiting" );
+	return iListenRequest;
+	}
+// ---------------------------------------------------------------------------
+// ActiveWaitDialog( )
+// Returns Whether the Isds WaitDialog is Active or Not
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRIsdsWrapper::ActiveWaitDialog( )
+	{
+	
+	IRLOG_DEBUG( "CIRIsdsWrapper::ActiveWaitDialog- Entering" );
+	IRLOG_DEBUG( "CIRIsdsWrapper::ActiveWaitDialog- exiting" );
+	if(iIsdsWaitDialog)
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRIsdsWrapper::SetSyncPresetObserver()
+// Notifies the sync preset call back to the observer
+// @param MSyncPresetObserver, observer for the preset synchronization
+// ---------------------------------------------------------------------------
+//
+void CIRIsdsWrapper::SetSyncPresetObserver(MSyncPresetObserver* aSyncPresetObserver)
+	{
+	IRLOG_DEBUG("CIRIsdsWrapper::SetSyncPresetObserver - Entering");
+	iSyncPresetObserver = aSyncPresetObserver;
+	IRLOG_DEBUG("CIRIsdsWrapper::SetSyncPresetObserver -- Exiting");
+	}
+	
+
+void CIRIsdsWrapper::SetSyncPresetObserver(MSyncPresetObserver* aSyncPresetObserver,
+									MViewsResponseAndErrorObserver* aViewObserver)
+	{
+	IRLOG_DEBUG("CIRIsdsWrapper::SetSyncPresetObserver 2 - Entering");
+	iViewObserver = aViewObserver;
+	SetSyncPresetObserver(aSyncPresetObserver);
+	IRLOG_DEBUG("CIRIsdsWrapper::SetSyncPresetObserver 2 - Exiting");
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRIsdsWrapper::GetErrorCode()
+// Getting the errorcode
+// ---------------------------------------------------------------------------
+//
+TInt CIRIsdsWrapper::GetErrorCode()
+	{
+	return iKNotFound ;	
+	}
+	
+// ------------------------------------------------------------------------------
+// CIRIsdsWrapper::SetSyncReqFromMainview()
+// called before the syncrequest is made form MAINVIEW
+// once the reponse receives saying "preset removed",
+// error note "item no longer available" should not be displayed
+// @param aValue, to know whether the syncrequest is made form mainview or not
+// ------------------------------------------------------------------------------
+void CIRIsdsWrapper::SetSyncReqFromMainView(TBool aValue)
+	{
+	iSyncReqFromMainView = aValue;		
+	}
+
+
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irmaincontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,2002 @@
+/*
+* Copyright (c) 2004 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 <akniconarray.h>
+#include <barsread.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include <aknsbasicbackgroundcontrolcontext.h> 
+#include <avkon.mbg>
+#include <aknsfld.h> 
+#include <eikprogi.h> 
+
+
+#include "irui.h"
+#include "ir.hrh"
+#include "irdebug.h"
+#include "irmainview.h"
+#include "irmaincontainer.h"
+#include "iraap.hlp.hrh"
+#include "irisdswrapper.h"
+#include "irimageconverter.h"
+#include "irfilteredmodel.h"
+#include "irfavoritesdb.h"
+#include "irisdspreset.h"
+#include "irpreset.h"
+#include "irhistory.h"
+#include "irdialoglauncher.h"
+#include "mirlistboxarray.h"
+#include "iradvertisinglistbox.h"
+#include "irnowplayingwrapper.h"
+#include "irnetworkcontroller.h"
+
+
+//Literals Declaration
+
+// Format string for two row list item with logo, %S containing:
+// 1. Icon ID for logo image
+// 2. First row text
+// 3. Second row text
+_LIT( KIRFormatStringWithIcon, "%d\t%S\t%S" );
+_LIT( KIRFormatStringWithoutIcon, "\t%S\t%S" );
+_LIT(KAvkonBitmapFile,"z:\\resource\\apps\\avkon2.mbm");
+
+//Constants Declaration
+const TInt KProgressbarFinalValue = 100;
+const TInt KProgressTimer = 500000;
+const TInt KExtraLength = 30;
+const TInt KRange = 999;
+const TInt KIRNoLogo = -1;
+// Length of list item with known sized elements: (the number of column separators) + 3 (maximum length for icon id)
+const TInt KIRListItemBaseLength = 5;
+
+
+#define KCONTROLSCOUNT 0
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CIRMainContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRMainContainer* CIRMainContainer::NewL( CIRMainView& aView, const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRMainContainer::NewL" );
+    CIRMainContainer* self = CIRMainContainer::NewLC( aView, aRect );
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRMainContainer::NewL - Exiting" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRMainContainer::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRMainContainer* CIRMainContainer::NewLC( CIRMainView& aView, const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRMainContainer::NewLC" );
+    CIRMainContainer* self = new ( ELeave ) CIRMainContainer(aView);
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    IRLOG_DEBUG( "CIRMainContainer::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::CIRMainContainer()  
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRMainContainer::CIRMainContainer(CIRMainView& aView) :iMainView(aView)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::CIRMainContainer" );
+	iLastPlayedChannel = EFalse;
+	iProgressCount = 1;
+	iDeletingCount = 1;
+	iFilteredFlag = EFalse;
+	iContextSensitiveFlag = EFalse;
+	iMoveFocusLast = EFalse;
+	IRLOG_DEBUG( "CIRMainContainer::CIRMainContainer - Exiting" );
+	}
+    
+// ---------------------------------------------------------------------------
+// CIRMainContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::ConstructL( const TRect& aRect)
+    {
+	IRLOG_DEBUG( "CIRMainContainer::ConstructL - Entering" );
+    CreateWindowL();
+    SetRect(aRect);
+    iImageCount = 1;
+    iFinalCount = 0;
+    iLogoDownloadError = EFalse;
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgScreen , aRect, ETrue); 
+ 	
+   
+    iConverter = CIRImageConverter::NewL();
+	iConverter->EnableAnimations( EFalse );
+	iConverter->SetObserver( this );
+
+	iCurrentItemConverter = CIRImageConverter::NewL();
+	iCurrentItemConverter->SetObserver( this );
+    
+    // Added For Dynamic Filtering
+    iFilteredModel=new(ELeave) CIRFilteredModel;
+    iFilteredModel->ConstructL();
+   	iListBoxArray = MIRListBoxArray::NewL();
+    iFavouritesListBox = new (ELeave) CIRAdvertisingListBox;
+
+	IRLOG_DEBUG( "CIRMainContainer::ConstructL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::CreateCustomListBoxL()
+// Creates the listbox
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::CreateCustomListBoxL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::CreateCustomListBoxL...Entering" );
+	TRect rect;
+	//For displaying Ads
+	iFavouritesListBox->SetContainerWindowL(*this);
+	// Added For Dynamic Filtering
+	iFavouritesListBox->ConstructL (this,EAknListBoxMarkableList,iFilteredModel);
+	
+	 
+    // Construct list.
+    TResourceReader rr;
+    iCoeEnv->CreateResourceReaderLC( rr, R_IR_CHANNEL_LIST );
+    ConstructFromResourceL( rr );
+    CleanupStack::PopAndDestroy(); // rr
+    
+    iListArray = static_cast<CDesCArray*>( iFavouritesListBox->Model()->ItemTextArray());
+    iListBoxArray->SetListArray(iListArray);
+    
+    iFilteredModel->SetListArray(iListBoxArray); 
+    
+    CAknIconArray* iconArray = new ( ELeave ) CAknIconArray(iMainView.iUi->
+    														iFavPresets->MaxPresetCount());
+	CleanupStack::PushL( iconArray );
+	
+   // Creating mark icon and appending to iconarray.
+	CFbsBitmap* markBitmap = NULL;
+    CFbsBitmap* markBitmapMask = NULL;
+    
+    //CListItemDrawer is using this logical color as default for its marked icons
+    TRgb defaultColor;
+    defaultColor = iEikonEnv->Color(EColorControlText);
+    
+
+    AknsUtils::CreateColorIconLC(AknsUtils::SkinInstance(),
+    			KAknsIIDQgnIndiMarkedAdd,
+    			KAknsIIDQsnIconColors,
+    			EAknsCIQsnIconColorsCG13,
+    			markBitmap,
+    			markBitmapMask,
+    			KAvkonBitmapFile,
+    			EMbmAvkonQgn_indi_marked_add,
+    			EMbmAvkonQgn_indi_marked_add_mask,
+    			defaultColor
+    			);
+    
+    CGulIcon* markIcon = CGulIcon::NewL( markBitmap,markBitmapMask );
+    // poping markBitmap, markBitmapMask
+    // codescanner fix
+    CleanupStack::Pop( markBitmapMask );
+    CleanupStack::Pop( markBitmap ); 
+    CleanupStack::PushL( markIcon );      
+    iconArray->AppendL( markIcon );
+
+    CleanupStack::Pop( markIcon );	
+    
+	for ( TInt i = 0; i <  iMainView.iUi->iFavPresets->MaxPresetCount() ; i++ )
+		{
+		CGulIcon* icon = CreateDefaultIconL();
+        CleanupStack::PushL( icon );
+        iconArray->AppendL( icon );
+        CleanupStack::Pop( icon );
+		}
+
+	CleanupStack::Pop( iconArray  );
+    iFavouritesListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL( iconArray );  
+    iFavouritesListBox->SetRect( Rect());
+    iFavouritesListBox->ActivateL();
+
+    iFavouritesListBox->CreateScrollBarFrameL( ETrue );
+    iFavouritesListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+                                              CEikScrollBarFrame::EAuto);
+ 	iFavouritesListBox->SetListBoxObserver( this );     
+ 	
+	// Set the icon array for this list. List takes ownership of the array. 
+	// Also move icon is added.
+ 	SetIconsL();
+ 	UpdateAllL();
+	iFavouritesListBox->ItemDrawer()->FormattedCellData()->SetMarqueeParams
+									(KLoop, KScrollAmount, KScrollDelay, KInterval);
+    iFavouritesListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+	TInt favCount = iMainView.iUi->iFavPresets->iFavPresetList.Count();
+	if(favCount>1)
+		{
+		if(iFavouritesSearchBox)
+			{
+			DisableFindBox();
+			}
+		// Added For Dynamic Filtering
+		iFavouritesSearchBox = CreateFindBoxL(iFavouritesListBox, iFilteredModel,
+		  CAknSearchField::ESearch);
+		SizeChanged();	
+		}
+	else
+		{
+		DisableFindBox();	
+		}
+ 	
+	IRLOG_DEBUG( "CIRMainContainer::CreateCustomListBoxL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRMainContainer::CreateDefaultIconL
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRMainContainer::CreateDefaultIconL()
+    {
+	IRLOG_DEBUG( "CIRMainContainer::CreateDefaultIconL - Entering" );
+    CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( bitmap );
+    User::LeaveIfError( bitmap->Create( TSize(), EGray2 ) );
+    CFbsBitmap* mask = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( mask );
+    User::LeaveIfError( mask->Create( TSize(), EGray2 ) );
+    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+    icon->SetBitmapsOwnedExternally( EFalse );
+    CleanupStack::Pop( 2, bitmap );
+	IRLOG_DEBUG( "CIRMainContainer::CreateDefaultIconL - Exiting" );
+    return icon;
+    }
+// ---------------------------------------------------------------------------
+// CIRMainContainer::SetIconsL()
+// Used to set icons to the list
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::SetIconsL()
+	{
+	// Set the icon array for this list. List takes ownership of the array. 
+	// Also move icon is added.
+	
+		iMainView.iUi->iFavPresets->GetAllPreset();
+		iMainView.SetMovingFlag(EFalse);
+		
+
+	const RIRPresetArray& presets = iMainView.iUi->iFavPresets->Presets();
+	for ( TInt i = 0; i < presets.Count(); i++ )
+		{
+		if ( presets[i]->GetLogoData().Length() )
+			{
+			iInvalidIconIndices.InsertInOrderL( presets[i]->Index() );
+			}
+		iNoLogosArray.InsertInOrderL(presets[i]->Index());		
+		}
+    // Checking whether the lastplayed is present or not.
+	if(iMainView.iUi->iLastPlayed->FileExists() )
+		{
+		// Checking whether the lastplayed is having logo data.
+		//If present sends the data for conversation.
+		if(iMainView.iUi->iLastPlayed->iLastPlayedStation->GetLogoData().Length())
+	        {
+	        iImageLast = ETrue;
+	        TInt index = iMainView.iUi->iLastPlayed->iLastPlayedStation->GetIndex();
+			StartConvertL( *iConverter, index, KErrUnknown );
+	    	}
+		// If the lastplayed is not having logo data and having the image url
+		// then send a request for downloading the logo
+	    else if(iMainView.iUi->iLastPlayed->iLastPlayedStation->GetImgUrl().Length())
+		    {
+			if((iMainView.iUi->iNetworkController->GetNetworkStatus() ))
+			    {
+			    SendRequestForLastPlayedLogoL();
+		        }
+		     else if ( iInvalidIconIndices.Count() )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+		    }
+ 	
+	    // If both logodata and image url is not present for lastplayed then logo
+	    // request for other stations has to be made.
+	    else
+		    {
+			if ( iInvalidIconIndices.Count() )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+		    }
+		}
+	else
+		{
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}
+	}
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::SendRequestForLastPlayedLogoL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::SendRequestForLastPlayedLogoL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::SendRequestForLastPlayedLogoL - Entering" );
+	//code to download the logo
+	if(iTempPreset)
+		{
+		delete iTempPreset;
+		iTempPreset = NULL;
+		}
+	iTempPreset=CIRIsdsPreset::NewL();
+	iTempPreset->SetChannelType(1);
+	iTempPreset->SetImgUrl(iMainView.iUi->iLastPlayed->iLastPlayedStation->GetImgUrl());
+	iMainView.LogoRequestL();
+	IRLOG_DEBUG( "CIRMainContainer::SendRequestForLastPlayedLogoL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer:: GetTempPreset()
+// returns the temporary preset 
+// ---------------------------------------------------------------------------
+ CIRIsdsPreset* CIRMainContainer::GetTempPreset()
+	 {
+	 IRLOG_DEBUG( "CIRMainContainer::GetTempPreset " );
+	 return iTempPreset;
+	 }
+// ---------------------------------------------------------------------------
+// CIRMainContainer::~CIRMainContainer()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRMainContainer::~CIRMainContainer()
+    {
+	IRLOG_DEBUG( "CIRMainContainer::~CIRMainContainer - Entering" );
+	delete iConverter;
+	delete iCurrentItemConverter;
+	iInvalidIconIndices.Close();
+	iLogosArray.Close();
+	iNoLogosArray.Close();  
+  	iMultiDeleteString.Close();
+  	iFilterIndexExist.Close();
+    if(iFavouritesListBox)
+    	{
+    	delete iFavouritesListBox;
+    	iFavouritesListBox = NULL;
+    	}
+    if(iFavouritesSearchBox)
+		{
+		delete iFavouritesSearchBox;
+		iFavouritesSearchBox = NULL;
+		}
+	if(iBgContext)
+		{
+		delete iBgContext;
+		iBgContext = NULL;	
+		}
+	if(iAdvString)
+		{
+		delete iAdvString;
+		iAdvString = NULL;	
+		}
+    if(iTempPreset)
+		{
+		delete iTempPreset;
+		iTempPreset = NULL;
+		}
+	if(iItem)
+		{
+		delete iItem;
+		iItem = NULL;	
+		}
+	if(iLastplayed)
+		{
+		delete iLastplayed;
+		iLastplayed = NULL;	
+	 	}
+    if(iProgressDialog)
+    	{
+    	delete iProgressDialog;
+    	iProgressDialog= NULL;
+    	}
+    if(iProgressInfo)
+    	{
+    	delete iProgressInfo;
+    	iProgressInfo= NULL;
+    	}
+    if(iListBoxArray )
+	    {
+	    delete iListBoxArray ;
+	    iListBoxArray = NULL;	
+	    }
+	iImageCount = 1;
+	IRLOG_DEBUG( "CIRMainContainer::~CIRMainContainer - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRMainContainer::LastPlayedDisplayL()()
+// Displays the lastplayed station
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::LastPlayedDisplayL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::LastPlayedDisplayL - Entering" );
+	if(iLastplayed)
+		{
+		delete iLastplayed;
+		iLastplayed = NULL;	
+		}
+	if(iMainView.iNowPlayingWrapper->iPlaying)
+			{
+		 	iLastplayed = StringLoader::LoadL(R_IRAPP_MAIN_MENU_NOW);
+			}
+		else
+			{
+			iLastplayed = StringLoader::LoadL(R_IRAPP_MAIN_MENU_LAST);
+			}
+
+	if(iMainView.iUi->iLastPlayed->FileExists())
+		{
+		iLastPlayedChannel = ETrue;
+		// Added For Dynamic Filtering
+		if(iMainView.iUi->iLastPlayed->iLastPlayedStation->GetLogoData().Length() && !iImageLast 
+			&& !iLogoDownloadError)
+			{
+			if(iItem)
+				{
+				delete iItem;
+				iItem = NULL;
+
+				}
+			iItem = HBufC::NewL( KIRFormatStringWithIcon().Length() + 2 + 
+			iLastplayed->Length()+iMainView.iUi->iLastPlayed->iLastPlayedStation->GetName().Length() );
+			TPtr pItem( iItem->Des() );
+			pItem.Format( KIRFormatStringWithIcon,iMainView.iUi->iLastPlayed->
+						  iLastPlayedStation->GetIndex()+1, iLastplayed,
+			  &iMainView.iUi->iLastPlayed->iLastPlayedStation->GetName());
+			} 
+		else
+			{
+			if(iItem)
+				{
+				delete iItem;
+				iItem = NULL;
+				}
+			iItem = HBufC::NewL( KIRFormatStringWithoutIcon().Length() + 2 + 
+			iLastplayed->Length()+iMainView.iUi->iLastPlayed->iLastPlayedStation->GetName().Length() );
+			TPtr pItem( iItem->Des() );
+			pItem.Format( KIRFormatStringWithoutIcon, iLastplayed,
+			  		&iMainView.iUi->iLastPlayed->iLastPlayedStation->GetName());
+			}
+		iFavouritesListBox->SetLastPlayed(iLastPlayedChannel);
+		iFilteredModel->SetAdvFlag(iLastPlayedChannel,*iItem);
+		iFilteredModel->SetItemAtZero(iLastPlayedChannel,*iItem,ETrue);
+		iFavouritesListBox->SetListItemFormat( iItem);
+
+	   // Creating mark icon and appending to iconarray.
+		CFbsBitmap* bitmap = NULL;
+	    CFbsBitmap* bitmapMask = NULL;
+	    
+	    //CListItemDrawer is using this logical color as default for its marked icons
+	    TRgb defaultColor;
+	    defaultColor = iEikonEnv->Color(EColorControlText);
+	    
+	    AknsUtils::CreateColorIconLC(AknsUtils::SkinInstance(),
+	    			KAknsIIDQgnIndiMarkedAdd,
+	    			KAknsIIDQsnIconColors,
+	    			EAknsCIQsnIconColorsCG13,
+	    			bitmap,
+	    			bitmapMask,
+	    			KAvkonBitmapFile,
+	    			EMbmInternetradioQgn_ir_transparent,
+	    			EMbmInternetradioQgn_ir_transparent_mask,
+	    			defaultColor
+	    			);
+	    
+	    CGulIcon* icon = CGulIcon::NewL( bitmap,bitmapMask );
+	    // poping markBitmap, markBitmapMask
+	    // codescanner fix
+	    CleanupStack::Pop( bitmapMask );
+	    CleanupStack::Pop( bitmap ); 
+	    CleanupStack::PushL( icon ); 
+		iFavouritesListBox->SetAdvertisementIconL(icon,ETrue);
+		CleanupStack::Pop( icon );	
+		
+		iListArray->AppendL( iItem->Des() );
+		} 
+	else
+		{
+		if(iAdvString)
+			{
+			delete iAdvString;
+			iAdvString = NULL;	
+			}
+		_LIT(KNullFormat,"\t \t ");
+		iAdvString = HBufC::NewL(KExtraLength);
+		TPtr ptr(iAdvString->Des());
+		ptr.Copy(KNullFormat);
+		iFilteredModel->SetItemAtZero(iLastPlayedChannel,*iAdvString);
+		}
+	IRLOG_DEBUG( "CIRMainContainer::LastPlayedDisplayL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// TKeyResponse CIRMainContainer::OfferKeyEventL()
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRMainContainer::OfferKeyEventL( 
+        const TKeyEvent& aKeyEvent, TEventCode aType )
+	{
+
+	IRLOG_DEBUG( "CIRMainContainer::OfferKeyEventL - Entering" );
+	TKeyResponse keyResp( EKeyWasNotConsumed );
+	switch ( aKeyEvent.iCode )
+		{
+		case EKeyLeftArrow: // fall-through intended here
+		case EKeyRightArrow:
+		case EKeyIncVolume:
+		case EKeyDecVolume:
+			{
+			keyResp = EKeyWasNotConsumed;
+			break;
+			}
+		case EKeyOK:        
+			{
+			iMainView.SetCurrentFocus(iFavouritesListBox->CurrentItemIndex());
+			if(!iMainView.GetMovingFlag())
+				{
+				if(iMainView.GetMarkedFlag()||iMainView.GetMarkedAllFlag())
+					{
+					ProcessPointerEventL(iFavouritesListBox->CurrentItemIndex()); //aListBox->CurrentItemIndex() not used         
+					break;
+					}
+				else
+					{
+					iMainView.SetCurrentFocus(GetCurrentItemIndex());
+					iMainView.HandleCommandL(EListenCmd);
+					}
+				}
+			break;
+			}
+		default:
+			{
+			if(!iMainView.GetMovingFlag())
+				{
+				if((iMainView.GetListBoxMarkedCount() != GetListPointer()->Model()->NumberOfItems()))
+					{
+					if(iFavouritesListBox)
+						{
+						if ( iFavouritesSearchBox )
+							{
+							keyResp = iFavouritesSearchBox->OfferKeyEventL( aKeyEvent, aType );
+
+							if( keyResp == EKeyWasNotConsumed )
+								{
+								keyResp = iFavouritesListBox->OfferKeyEventL( aKeyEvent, aType );
+								}
+	//						iFilteredFlag = ETrue
+							CAknFilteredTextListBoxModel* model = 
+							static_cast<CAknFilteredTextListBoxModel*>( iFavouritesListBox->Model() );
+							model->Filter()->HandleOfferkeyEventL();					
+							TInt filterModelCount = iFilteredModel->NumberOfItems();
+							TInt favCount = iMainView.iUi->iFavPresets->iFavPresetList.Count();
+							if(favCount != 0)
+								{
+								if(filterModelCount == 0 && !(iMainView.iUi->iLastPlayed->FileExists()))
+									{
+									HBufC* noMatchesTextResource = StringLoader::LoadLC(R_IRAPP_STATIONLIST_NOMATCHES);
+									iFavouritesListBox->View()->SetListEmptyTextL(*noMatchesTextResource);
+									CleanupStack::PopAndDestroy( noMatchesTextResource );
+									}
+								}
+						iFavouritesSearchBox->GetSearchText(iFindString);
+						if(iFindString.Length()!=0)
+							{
+							iFilteredFlag = ETrue;
+							}
+							iMainView.SetToolbarItems();
+							}
+						}
+					}
+				else
+					{
+					if(iFavouritesListBox)
+						{
+						if ( iFavouritesSearchBox )
+							{
+/*							TBool needRefresh( EFalse );
+							// Offers the key event to find box.
+							if ( AknFind::HandleFindOfferKeyEventL( aKeyEvent, aType, this,
+							iFavouritesListBox, iFavouritesSearchBox,EFalse,needRefresh ) == EKeyWasConsumed )
+							if(GetLastPlayedChannel()&&(iMainView.iUnMarkedArray.Count()==0))
+								{
+								}*/
+							keyResp = iFavouritesSearchBox->OfferKeyEventL( aKeyEvent, aType );
+
+							if( keyResp == EKeyWasNotConsumed )
+								{
+								keyResp = iFavouritesListBox->OfferKeyEventL( aKeyEvent, aType );
+								}
+							CAknFilteredTextListBoxModel* model = 
+							static_cast<CAknFilteredTextListBoxModel*>( iFavouritesListBox->Model() );
+							model->Filter()->HandleOfferkeyEventL();					
+								
+							iMainView.SetToolbarItems();
+							return EKeyWasNotConsumed;
+							}
+						}
+					}
+				if(	aKeyEvent.iScanCode==EStdKeyBackspace)
+					{
+					if(iFavouritesSearchBox)
+						{
+						iFavouritesSearchBox->GetSearchText(iFindString);
+						if(iFindString.Length()==0)
+							{
+							iFilteredFlag = EFalse;
+							}
+						}
+					}
+				}
+			iMainView.SetToolbarItems();
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::OfferKeyEventL - Exiting" );
+	return keyResp; 
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::HandleListBoxEventL()
+// From class MEikListBoxObserver.
+// List box event handler.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+    {
+	IRLOG_DEBUG( "CIRMainContainer::HandleListBoxEventL - Entering" );
+	switch ( aEventType )
+		{
+		/**  Keypress event. */
+		case EEventEnterKeyPressed:
+		/*  Item two-taps event*/
+		case EEventItemDoubleClicked:
+			{
+			if(!iMainView.GetMovingFlag())
+				{
+				iMainView.SetCurrentFocus(iFavouritesListBox->CurrentItemIndex());
+				if(iMainView.GetMarkedFlag()||iMainView.GetMarkedAllFlag())
+					{
+					ProcessPointerEventL(iFavouritesListBox->CurrentItemIndex()); //aListBox->CurrentItemIndex() not used         
+					break;
+					}
+				else
+					{
+					iMainView.SetCurrentFocus(GetCurrentItemIndex());
+					iMainView.HandleCommandL(EListenCmd);
+					}
+				}
+			break;
+			} 
+		case EEventItemClicked:
+			{
+			iMainView.SetCurrentFocus(iFavouritesListBox->CurrentItemIndex());
+			if(iMainView.GetMovingFlag())
+				{
+				CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+				// If the move functionalitiy is enabled and the focus is on the lasplayed then
+				// only the cancel option has to be shown
+				if(iMainView.GetCurrentFocus() == 0 && iMainView.iUi->iLastPlayed->FileExists())
+					{
+					cba->SetCommandSetL( R_IRAPP_SOFTKEY_CANCEL_CBA );
+					cba->DrawDeferred();
+					iMoveFocusLast = ETrue;
+					}
+				else
+					{
+					// If the move functionalitiy is enabled and if the focus is first moved to lastplayed ,
+					// then after if the focus is moved to some other station in the list then
+					// done and cancel as to be shown as left and right softkeys
+					if(iMoveFocusLast)
+						{
+						cba->SetCommandSetL( R_IR_CBA_DONE_CANCEL );
+						cba->DrawDeferred();
+						}
+					}
+				
+				}
+			}
+		break;
+	default:
+		break;
+		}
+	IRLOG_DEBUG( "CIRMainContainer::HandleListBoxEventL - Exiting" );
+    }
+// ----------------------------------------------------------------------------
+// CIRMainContainer::ProcessPointerEventL
+// Handler for pointer events, when the current focused item is tapped
+// ----------------------------------------------------------------------------
+//
+void CIRMainContainer::ProcessPointerEventL( TInt /* aIndex */)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::ProcessPointerEventL - Entering" );
+	// Open the context sensitive menu 
+	iContextSensitiveFlag = ETrue; 
+	iMainView.ProcessCommandL(  EAknSoftkeyContextOptions );   
+	IRLOG_DEBUG( "CIRMainContainer::ProcessPointerEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::Draw()
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::Draw( const TRect&/* aRect */) const
+    {
+	IRLOG_DEBUG( "CIRMainContainer::Draw - Entering" );
+
+    CWindowGc& gc = SystemGc();
+    if(iFavouritesListBox)
+	    {
+	   	iFavouritesListBox->SetGC(gc);
+	   	iFavouritesListBox->SetControlFlag(ETrue);
+	    }
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+	
+    // draw background skin first. 
+ 	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+  	
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+
+	AknsDrawUtils::DrawBackground ( skin, iBgContext, this, gc, TPoint(0,0),
+					 TRect(TPoint(0,0),clientRect.iBr), KAknsDrawParamDefault  );	
+	
+ 	IRLOG_DEBUG( "CIRMainContainer::Draw - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetHelpContext()
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+	IRLOG_DEBUG( "CIRMainContainer::GetHelpContext - Entering" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_STATIONS  );
+	IRLOG_DEBUG( "CIRMainContainer::GetHelpContext - Exiting" );
+
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRMainContainer::UpdateAllL()
+// updates the favourites data 
+// ---------------------------------------------------------------------------
+//    
+
+void CIRMainContainer::UpdateAllL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::UpdateAllL() - Entering" );
+	iListArray->Reset();
+	
+	iMainView.iUi->iFavPresets->GetAllPreset();
+	iMainView.SetMovingFlag(EFalse);
+		
+	LastPlayedDisplayL();
+	TInt favCount = iMainView.iUi->iFavPresets->iFavPresetList.Count();
+	const RIRPresetArray& presets = iMainView.iUi->iFavPresets->Presets();
+	for(TInt i=0;i<favCount;i++)
+		{
+		TUint indval;
+		indval=i+1;
+		RBuf stationName;
+		stationName.Create(iMainView.iUi->iFavPresets->iFavPresetList[i]->
+		Name().Length()+KExtraLength);
+		stationName.AppendNum(indval);
+		_LIT(KDot,". ");
+		stationName.Append(KDot);
+		stationName.Append(iMainView.iUi->iFavPresets->iFavPresetList[i]->Name()); 
+
+		//check whether logo url exist for the current channel of the search results
+		for(TInt m = 0; m < iNoLogosArray.Count(); m++)
+			{
+			if(m < iNoLogosArray.Count() && i<presets.Count() &&
+			   presets[i]->Index() == iNoLogosArray[m])				
+				{
+				if(iMainView.iUi->iFavPresets->iFavPresetList[i]->GetShortDescription().Length())
+					{
+					//logo should not be displayed in the main view for this particular station
+					//but has short description
+					//element is not marked,has short description and no logo data (Format \t%S\t%S)
+					HBufC* itemString = FormatItemStringLC( stationName, iMainView.iUi->iFavPresets->
+					iFavPresetList[i]->GetShortDescription(), KIRNoLogo );
+					iListArray->AppendL( itemString->Des() );
+					CleanupStack::PopAndDestroy( itemString );
+					break;
+					}
+				else
+					{
+					//logo should not be displayed in the main view for this particular station
+					//but has no short description
+					//element is not marked,don't have short desciption and  no logo data (Format \t%S\t)
+					HBufC* itemString = FormatItemStringLC( stationName,KNullDesC , KIRNoLogo );
+					iListArray->AppendL( itemString->Des() );
+					CleanupStack::PopAndDestroy( itemString );
+					break;							
+					}
+				}
+			}
+
+		for(TInt n = 0; n < iLogosArray.Count(); n++)
+			{
+			if(presets[i]->Index() == iLogosArray[n])
+				{
+				TInt index = n+1;
+				if(iMainView.iUi->iLastPlayed->FileExists() && iMainView.iUi->
+					iLastPlayed->iLastPlayedStation->GetLogoData().Length() && !iLogoDownloadError)
+					{
+					index = index +1;
+					}
+				
+				
+				if(iMainView.iUi->iFavPresets->iFavPresetList[i]->GetShortDescription().Length())
+					{
+					//logo should be displayed in the main view for this particular station
+					//element is not marked and has logo data (Format %d\t%S\t%S)
+					//has short description
+					HBufC* itemString = FormatItemStringLC( stationName, iMainView.iUi->
+					iFavPresets->iFavPresetList[i]->GetShortDescription(),index);
+					iListArray->AppendL( itemString->Des() );
+					CleanupStack::PopAndDestroy( itemString );
+					break;
+					}
+				else
+					{
+					//logo should be displayed in the main view for this particular station
+					//element is not marked and has logo data (Format %d\t%S)
+					//has no short description
+					HBufC* itemString = FormatItemStringLC( stationName,KNullDesC,index);
+					iListArray->AppendL( itemString->Des() );
+					CleanupStack::PopAndDestroy( itemString );
+					break;								
+					}
+				}
+			}
+
+		stationName.Close();
+		}
+	if(iFilteredFlag)
+		{
+		CAknFilteredTextListBoxModel* model = 
+		static_cast<CAknFilteredTextListBoxModel*>( iFavouritesListBox->Model() );
+		model->Filter()->HandleOfferkeyEventL();					
+				
+		if((iMainView.GetCurrentFocus()-1)!=-1)
+			{
+			// Getting whether the element deleted is the last element
+			// of the filtered elements.Returns true if it other than lat element 
+			// and false if it last element
+			TBool flag = CheckFiltered();
+			if(!flag)
+				{
+				// If the deleted element id last element set the focus to first element 
+				// of the array
+				iFavouritesListBox->SetCurrentItemIndex(0);
+				}
+			}
+		else if((iMainView.GetCurrentFocus()-1) ==-1)
+			{
+			iFavouritesListBox->SetCurrentItemIndex(0);	
+			}
+		else if(iMainView.GetCurrentFocus() == -1 && GetListBoxCount() != 0)
+			{
+			iFavouritesListBox->SetCurrentItemIndex(0);
+			}
+
+		}
+	else
+		{
+		if(GetListBoxCount() == 1 && iLastPlayedChannel )
+			{
+			iFavouritesListBox->SetCurrentItemIndex(0);	
+			}
+		else if(GetListBoxCount() == 0 && !iLastPlayedChannel )
+			{
+			}
+		else
+			{
+			if(iMainView.GetCurrentFocus()>= GetListBoxCount())
+				{
+				TInt focus ;
+				if(iMainView.GetCurrentFocus()-1 >= GetListBoxCount() )
+					{
+					focus =0;
+					}
+				else
+					{
+					focus =	iMainView.GetCurrentFocus()-1;
+					}
+				iFavouritesListBox->SetCurrentItemIndex(focus);
+				}
+			else
+				{
+//				iFavouritesListBox->SetCurrentItemIndex(iMainView.GetCurrentFocus())
+				}
+			}
+		iFavouritesListBox->HandleItemAdditionL();
+		}
+	if( !iFilteredFlag && favCount <=1)
+	DisplayFilterListBoxL();
+
+	EnableEmptyListBox();
+//	iMainView.HandleCommandL(EUnmarkAll)
+	if(favCount == 0 && !(iMainView.iUi->iLastPlayed->FileExists()))
+		{
+		HBufC* findStationsTextResource = StringLoader::LoadLC(R_IRAPP_FAVOURITES_LIST_EMPTY);
+		iFavouritesListBox->View()->SetListEmptyTextL(*findStationsTextResource);
+		CleanupStack::PopAndDestroy( findStationsTextResource );
+		}
+	if(iFinalCount == favCount)
+		{
+		if(!iProgressStart && iProgressFlag)
+			{
+			iMainView.iIsdsWrapper->GetDialogLauncherInstance()->
+			ShowConfirmationNoteL( iMultiDeleteString,ETrue );	
+			}
+		else if(iProgressInfo && iProgressStart)
+			{
+			if ( KProgressbarFinalValue <= iProgressInfo->CurrentValue() )
+				{
+				iProgressDialog->ProcessFinishedL();
+				iProgressDialog = NULL;
+				iProgressInfo = NULL;
+				DrawDeferred();	
+				iMainView.iIsdsWrapper->GetDialogLauncherInstance()->
+				ShowConfirmationNoteL( iMultiDeleteString,ETrue );	
+				}  
+			}
+		iProgressStart = EFalse;
+		iProgressFlag = EFalse;
+		iDeletingCount = 1;
+		iMainView.iMarkedIndexArray.Reset();
+		iMainView.SetToolbarItems();
+		iContextSensitiveFlag = EFalse; 
+		iFinalCount = 0;
+	    if(iMainView.GetCurrentFocus() == -1 && GetListBoxCount() != 0)
+			{
+			iFavouritesListBox->SetCurrentItemIndex(0);
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::UpdateAllL() - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::EnableEmptyListBox
+// Creating of Empty Listbox.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::EnableEmptyListBox()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::EnableEmptyListBox() - Entering" );
+
+	TInt filteredCount;
+	filteredCount = GetFilterdModelPointer()->NumberOfItems();
+	if(iLastPlayedChannel)
+		{
+		filteredCount = filteredCount -1;
+		}
+	TBuf<KFindStringLength> findString;
+	if(iFavouritesSearchBox)
+	iFavouritesSearchBox->GetSearchText(findString);
+	IRLOG_DEBUG( "CIRMainContainer::EnableEmptyListBox() - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::FormatItemStringLC
+// Formatter for list item strings.
+// ---------------------------------------------------------------------------
+//
+HBufC* CIRMainContainer::FormatItemStringLC( const TDesC& aFirstRow, const TDesC& aSecondRow,
+											 TInt aIconId )
+    {
+ 	IRLOG_DEBUG( "CIRMainContainer::FormatItemStringLC() - Entering" );
+    TInt length = KIRListItemBaseLength + aFirstRow.Length() + aSecondRow.Length();
+    HBufC* itemString = HBufC::NewLC( length );
+    
+    TPtrC formatStringWithIcon( KIRFormatStringWithIcon );
+    TPtrC formatStringWithoutIcon( KIRFormatStringWithoutIcon );
+
+    if( aIconId >= 0 && aIconId <= KRange )
+        {
+        itemString->Des().Format( formatStringWithIcon, aIconId, &aFirstRow, &aSecondRow );
+        }
+    else 
+        {
+        itemString->Des().Format( formatStringWithoutIcon, &aFirstRow, &aSecondRow );
+        }
+    
+ 	IRLOG_DEBUG( "CIRMainContainer::FormatItemStringLC() - Exiting" );
+    return itemString;
+    }
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetCurrentItemIndex()
+// returns the index of the currently selected item
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRMainContainer::GetCurrentItemIndex" );
+	return iFavouritesListBox->CurrentItemIndex();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetListBoxTopIndex()
+// returns the index of the top item
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainContainer::GetListBoxTopIndex() const
+	{
+    IRLOG_DEBUG( "CIRMainContainer::GetListBoxTopIndex" );
+	return iFavouritesListBox->View()->TopItemIndex () ;
+	}
+// ---------------------------------------------------------------------------
+//void CIRMainContainer::HandlePresetChangedL( TInt /*aId*/, TUid /*aDataHandler*/, MPSPresetObserver::TPSReason /*aReason*/ )
+// From class MPSPresetObserver.
+// Handles preset content change.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::HandlePresetChangedL( TInt /*aId*/, TUid /*aDataHandler*/, MPSPresetObserver::TPSReason /*aReason*/ )
+    {
+    IRLOG_DEBUG( "CIRMainContainer::HandlePresetChangedL - Entering" );
+    if(iMainView.GetAddToFavouratesFlag()|| iMainView.GetMovingFlag())
+	    {
+		iInvalidIconIndices.Reset();
+		iLogosArray.Reset();
+		iNoLogosArray.Reset();  
+		iImageCount = 1;
+	    SetIconsL();
+	    }
+	if(iProgressFlag)
+		{
+		iAftertime.HomeTime();
+		iIntervalsec = iAftertime.MicroSecondsFrom(iBeforetime);
+		if(iIntervalsec>=KProgressTimer)
+			{
+			CreateProgressBarL();	
+			}
+	    if(iProgressInfo)
+		    {
+			RBuf Feed;
+			HBufC* bufferText ;
+			bufferText = StringLoader::LoadLC(R_IRAPP_FAVOURITES_PROG_DELETING,iDeletingCount/*iProgressCount*/);
+			Feed.Create(*bufferText);
+			CleanupStack::PopAndDestroy(bufferText);
+			iProgressDialog->SetTextL(Feed);
+
+			TReal32 progressValue;
+			progressValue	 = iProgressCount*iProgress;
+			iProgressInfo->SetAndDraw(progressValue); 
+			iProgressCount++; 
+			Feed.Close();
+		    }
+		iMarkedElementsCount--;
+//		iMainView.	iCurrentFocus =iMarkedElementsCount
+		iDeletingCount++;
+		TInt favCount = iMainView.iUi->iFavPresets->iFavPresetList.Count();
+		if(iFinalCount == favCount)
+			{
+		 	UpdateAllL();
+			}
+		}
+	else	
+		{
+ 	  	UpdateAllL();
+		}
+
+   	IRLOG_DEBUG( "CIRMainContainer::HandlePresetChangedL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::CheckConnectionL() 
+// Checks for the connection and creates  a connection to channel.
+// ---------------------------------------------------------------------------
+//	
+void CIRMainContainer::CheckConnectionL(TInt aUrlIndex)
+	{
+   	IRLOG_DEBUG( "CIRMainContainer::CheckConnectionL - Entering" );
+	if( iMainView.iUi->VerifyNetworkConnectivityL() )
+	    {
+        iMainView.SetRequestPendingStatus(ETrue) ;
+        iMainView.SetFavListen(ETrue) ;
+        iUrlIndex = aUrlIndex;
+        }	
+	else 
+		{
+		iMainView.DoConnectToChannelL( aUrlIndex ); 
+		iUrlIndex = aUrlIndex;
+		}
+   	IRLOG_DEBUG( "CIRMainContainer::CheckConnectionL - Exiting" );
+
+	}
+
+
+//----------------------------------------------------------------------------
+// CIRMainContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRMainContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRMainContainer::CountComponentControls - Entering" );
+	TInt count(KCONTROLSCOUNT);
+	if(iFavouritesListBox)
+		{
+		count++;
+		}
+	if(iFavouritesSearchBox)
+		{
+		count++;
+		}
+	IRLOG_DEBUG( "CIRMainContainer::CountComponentControls - Exiting" );
+	return count;
+	}
+//----------------------------------------------------------------------------
+// CIRMainContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRMainContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRMainContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRMainContainer::ComponentControl - Exiting" );
+	switch(aIndex)
+		{
+		case 0:
+			{
+			if(iFavouritesListBox)
+			return iFavouritesListBox;
+			}
+		case 1:
+			{
+			if(iFavouritesSearchBox)
+			return iFavouritesSearchBox;	
+			}
+		default:
+			return NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::SizeChanged(const TRect& aRect)
+// Responds to changes to the size and position of the contents of this control.
+// ---------------------------------------------------------------------------
+//
+
+void CIRMainContainer::SizeChanged()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::SizeChanged - Entering" );
+	if(iMainView.iUi->IsLandscapeOrientation())
+		{
+		if(iFavouritesListBox && iFavouritesSearchBox && iLandScapeCount ==0)
+			{
+	   		AknFind::HandlePopupFindSizeChanged(this,iFavouritesListBox,iFavouritesSearchBox);
+	   		iLandScapeCount ++;
+			}
+		}
+	if(iFavouritesListBox && iFavouritesSearchBox)
+		{
+	    AknLayoutUtils::LayoutControl(iFavouritesListBox,  Rect(),
+            AKN_LAYOUT_WINDOW_list_gen_pane(1));
+        AknLayoutUtils::LayoutControl(iFavouritesSearchBox,  Rect(),
+            AKN_LAYOUT_WINDOW_find_pane);
+		}
+		
+	else
+		{
+		if(iFavouritesListBox)
+			{
+			AknLayoutUtils::LayoutControl(iFavouritesListBox, Rect(),
+            	AKN_LAYOUT_WINDOW_list_gen_pane(0));
+			}
+		}
+		
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+	TRect parentRectSize(TPoint(0,0),clientRect.iBr);
+
+	if ( iBgContext )
+		{
+		iBgContext->SetRect(parentRectSize);
+		}
+	IRLOG_DEBUG( "CIRMainContainer::SizeChanged - Exiting" );
+	}
+	
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::HandleResourceChange(TInt aType)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+    // application layout change request notification
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        // reconstruct controls if needed
+   		AknFind::HandlePopupFindSizeChanged(this,iFavouritesListBox,iFavouritesSearchBox);
+        SizeChanged();
+        }
+	iMainView.SetToolbarItems();
+	DrawDeferred();
+	IRLOG_DEBUG( "CIRMainContainer::HandleResourceChange - Exiting" );
+	}
+//----------------------------------------------------------------------------
+// CIRMainContainer::CreateFindBoxL()
+// creates the Find box when any character is Pressed
+//----------------------------------------------------------------------------
+// 
+CAknSearchField* CIRMainContainer::CreateFindBoxL(CEikListBox* aListBox,
+CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::CreateFindBoxL - Entering" );
+	CAknSearchField* findbox = NULL;
+	if (aListBox && aModel)
+		{
+		// Gets pointer of CAknFilteredTextListBoxModel.
+		// Added For Dynamic Filtering
+		 iFilteredModel = STATIC_CAST( CIRFilteredModel*, aModel );
+		// Creates FindBox.
+		findbox = CAknSearchField::NewL( *this, aStyle, NULL,
+		KAknExListFindBoxTextLength);
+		CleanupStack::PushL(findbox);
+		// Creates CAknListBoxFilterItems class.
+		iFilteredModel->CreateFilterL( aListBox, findbox );
+		//Filter can get by model->Filter()
+		CleanupStack::Pop(findbox); // findbox
+		}
+
+	IRLOG_DEBUG( "CIRMainContainer::CreateFindBoxL - Exiting" );
+	return findbox;
+	}
+//----------------------------------------------------------------------------
+// CIRMainContainer::DisableFindBox()
+// Deletes the findbox
+//----------------------------------------------------------------------------
+// 
+void CIRMainContainer::DisableFindBox()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::DisableFindBox - Entering" );
+	if (iFavouritesSearchBox)
+		{
+		iFilteredModel->RemoveFilter();
+		// Important to set the find box non-focusing before
+		// deleting it, otherwise the focus changes triggered
+		// by the removal of the control from stack will focus
+		// the find box which is under deletion
+		iFavouritesSearchBox->SetNonFocusing();
+		delete iFavouritesSearchBox;
+		iFavouritesSearchBox = NULL;
+		// Inform list box that find is hidden
+		DrawDeferred();
+		SizeChanged();
+		}
+	IRLOG_DEBUG( "CIRMainContainer::DisableFindBox - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Comparestrings
+// Function called to compare the filtered string inthe Itemarray
+// ---------------------------------------------------------------------------
+//
+void  CIRMainContainer::Comparestrings()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::Comparestrings - Entering" );
+	if(iFilteredModel->NumberOfItems())
+		{
+		TPtrC16 filteredString = iFilteredModel->ItemText (iMainView.GetCurrentFocus());
+		for(TInt i=0;i<iListArray->Count();i++)
+			{
+			TPtrC16 matchString=iListArray->MdcaPoint(i);
+			if(filteredString==matchString)
+				{
+				iMainView.SetActualFilteredItemIndex(i);
+				break;
+				}
+
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::Comparestrings - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// Function : SetFilteredIndexArrayL
+// stores the indexs of all the filtered elements
+// ---------------------------------------------------------------------------
+//
+void  CIRMainContainer::SetFilteredIndexArrayL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::SetFilteredIndexArrayL - Entering" );
+	iFilterIndexExist.Reset();
+	TInt filterModelCount = iFilteredModel->NumberOfItems();
+	TInt j=0;
+	if(iMainView.iUi->iLastPlayed->FileExists())
+		{
+		j=1;	
+		}
+	if(iFilteredModel->NumberOfItems())
+		{
+		for( ;j<iFilteredModel->NumberOfItems();j++)
+			{
+			TPtrC16 filteredString = iFilteredModel->ItemText (j);
+			for(TInt i=0;i<iListArray->Count();i++)
+				{
+				TPtrC16 matchString=iListArray->MdcaPoint(i);
+				if(filteredString==matchString)
+					{
+					iFilterIndexExist.InsertInOrderL(i);
+					}
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::SetFilteredIndexArrayL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// Function : CheckFiltered
+// checks whether the deleted index exists in the filteredindex array or not
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainContainer::CheckFiltered()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::CheckFiltered - Exiting" );
+	TBool filteredIndexExist(EFalse);
+	TInt currentFocus = iMainView.GetCurrentFocus();
+	for(TInt i=0;i<iFilterIndexExist.Count();i++)
+		{
+		// checks whether the current focus index is present in the  filtered index array r not
+		// and also check whether it is the last element of the array or not.
+		if(currentFocus == iFilterIndexExist[i] && i!= (iFilterIndexExist.Count()-1))	
+			{
+			// sets the flag to true is the index is present in the array and no the last element
+			filteredIndexExist = ETrue;
+			return filteredIndexExist;	
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::CheckFiltered - Exiting" );
+	return filteredIndexExist;
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent /*aEvent*/, 
+// from base class MIRImageConverterObserver
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::HandleImageConversionEventL( MIRImageConverterObserver::
+													TIRImageConversionEvent /*aEvent*/,
+                                                    TInt aId, 
+                                                    TInt aError )
+	{
+	IRLOG_DEBUG( "CIRMainContainer::HandleImageConversionEventL - Entering" );
+	iError=aError;
+	if(aError == KErrNotSupported && iImageLast)
+		{
+		iImageLast	= EFalse;
+		iLogoDownloadError	= ETrue;
+		}
+	if(!aError)
+		{
+		CArrayPtr<CGulIcon>* iconArray = iFavouritesListBox->
+											 ItemDrawer()->FormattedCellData()->IconArray();
+		TInt imageCount;
+		if(iImageLast)
+			{
+			imageCount = iImageCount;
+			TInt index = iMainView.iUi->iLastPlayed->iLastPlayedStation->GetIndex();
+			CFbsBitmap* bitmap = NULL;
+			CFbsBitmap* mask = NULL;
+			CGulIcon* icon = CGulIcon::NewLC();
+			aId == KErrUnknown ? iConverter->TransferBitmapOwnership( bitmap, mask ) : 
+			     iCurrentItemConverter->TransferBitmapOwnership( bitmap, mask );
+
+			if ( bitmap && mask )
+				{
+				icon->SetBitmap( bitmap );
+				icon->SetMask( mask );
+				icon->SetBitmapsOwnedExternally( EFalse );
+
+				iconArray->InsertL( imageCount, icon );
+				CleanupStack::Pop( icon );
+				if(  imageCount+1 < iconArray->Count())
+					{
+					icon = iconArray->At(imageCount+1 );
+					iconArray->Delete(imageCount +1);
+					delete icon;
+					}
+				}
+			DrawDeferred();
+			iImageLast = EFalse;
+			}
+		else
+			{
+			imageCount = iImageCount;
+			iLogosArray.InsertInOrderL(iInvalidIconIndices[0]);
+			iNoLogosArray.Remove(iNoLogosArray.FindInOrder(iInvalidIconIndices[0]));
+			if ( aError == KErrNone )
+				{
+				CIRPreset* preset = NULL; 
+
+				if ( aId == KErrUnknown )
+					{
+					if ( iInvalidIconIndices.Count() )
+						{
+						preset = iMainView.iUi->iFavPresets->PresetByIndex( iInvalidIconIndices[0] );
+						iInvalidIconIndices.Remove( 0 );
+						}
+					}
+				else
+					{
+					preset = iMainView.iUi->iFavPresets->PresetById( aId );
+					}
+				if ( preset )
+					{
+					CFbsBitmap* bitmap = NULL;
+					CFbsBitmap* mask = NULL;
+					CGulIcon* icon = CGulIcon::NewLC();
+					aId == KErrUnknown ? iConverter->TransferBitmapOwnership( bitmap, mask ) : 
+					     iCurrentItemConverter->TransferBitmapOwnership( bitmap, mask );
+					if ( bitmap && mask )
+						{
+
+						icon->SetBitmap( bitmap );
+						icon->SetMask( mask );
+						icon->SetBitmapsOwnedExternally( EFalse );
+
+						iconArray->InsertL( imageCount, icon );
+						CleanupStack::Pop( icon );
+						if(  imageCount+1 < iconArray->Count())
+							{
+							icon = iconArray->At(imageCount+1 );
+							iconArray->Delete(imageCount +1);
+							delete icon;
+							}
+						}
+					DrawDeferred();
+					}
+				}
+			}
+		iImageCount ++;
+		UpdateAllL();
+		if ( iInvalidIconIndices.Count() && aId == KErrUnknown )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}	
+		}
+	IRLOG_DEBUG( "CIRMainContainer::HandleImageConversionEventL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt aId )
+// used to convert the images depending the index passed
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt aId )
+	{
+	IRLOG_DEBUG( "CIRMainContainer::StartConvertL - Entering" );
+	iError=KErrNone;
+	if(iImageLast)
+		{
+		if ( iMainView.iUi->iLastPlayed->iLastPlayedStation &&
+		     iMainView.iUi->iLastPlayed->iLastPlayedStation->GetLogoData().Length() )
+			{
+			aConverter.SetDataL( iMainView.iUi->iLastPlayed->iLastPlayedStation->GetLogoData() );
+			if(iError==KErrNone)
+				{
+				aConverter.StartL(KBitmapSize, aId );
+				}
+			if(iError!=KErrNone)
+				{
+				if ( iInvalidIconIndices.Count() )
+					{
+					iImageLast = EFalse;
+					iLogoDownloadError	= ETrue;
+					StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+					}
+				}
+			}
+		}
+	else
+		{
+		CIRPreset* preset = iMainView.iUi->iFavPresets->PresetByIndex( aIndex );
+		if ( preset && preset->GetLogoData().Length() )
+			{
+			aConverter.SetDataL( preset->GetLogoData() );
+			if ( iError==KErrNone )
+				{
+				aConverter.StartL(KBitmapSize, aId );
+				}
+			if(iError!=KErrNone)
+				{
+				if ( iInvalidIconIndices.Count() )
+					{
+					iInvalidIconIndices.Remove( 0 );
+					}	
+				if ( iInvalidIconIndices.Count() )
+					{
+					StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+					}
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::StartConvertL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::PresetLogoDownloadL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::PresetLogoDownloadL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::PresetLogoDownloadL - Entering" );
+    iImageLast = ETrue;
+    TInt index = iMainView.iUi->iLastPlayed->iLastPlayedStation->GetIndex();
+	StartConvertL( *iConverter, index, KErrUnknown );
+	IRLOG_DEBUG( "CIRMainContainer::PresetLogoDownloadL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRMainContainer::HandleLogoErrorL()
+// called from the iSearchResultsView when the logo is not downloaded
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::HandleLogoErrorL()
+	{
+	iImageLast = EFalse;
+	iLogoDownloadError	= ETrue;
+	if ( iInvalidIconIndices.Count() )
+		{
+		StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+		}
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::cmdMarkL()
+// implement the mark/unmark feature
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::cmdMarkL(TInt item,TBool mark)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::cmdMark - Entering" );
+	CTextListBoxModel* model =iFavouritesListBox->Model();
+	TInt itemCount = model->NumberOfItems();
+	CListBoxView* listBoxView =iFavouritesListBox->View();
+	if (mark)
+		{
+		for (TUint i = 0; i < itemCount; i++)
+		if(iLastPlayedChannel)
+			{
+			if (item == 0 || item == i)
+			listBoxView->SelectItemL(i);
+			listBoxView->DeselectItem(0);
+			}
+		else
+			{
+			if (item == -1 || item == i)
+			listBoxView->SelectItemL(i);
+			}
+		}
+	else
+		{
+		for (TUint i = 0; i < itemCount; i++)
+		if(iLastPlayedChannel)
+			{
+			if (item == 0 || item == i)
+			listBoxView->DeselectItem(i);
+			}
+		else
+			{
+			if (item == -1 || item == i)
+			listBoxView->DeselectItem(i);
+			}
+		}
+	for (TInt i = 0; i < itemCount; i++)
+	if(iLastPlayedChannel)
+		{
+		if (item == 0 || item == i)
+		listBoxView->SelectItemL(0);
+		}
+	IRLOG_DEBUG( "CIRMainContainer::cmdMark - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetListBoxCount()
+// returns the listbox count.
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainContainer::GetListBoxCount()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetListBoxCount " );
+	return iListArray->Count();	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetUrlIndex()
+// returns the url index.
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainContainer::GetUrlIndex()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetListBoxCount " );
+	return iUrlIndex;	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetListPointer()
+// returns pinter to Listbox.
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBox* CIRMainContainer::GetListPointer()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetListPointer" );
+	return iFavouritesListBox;	
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetSearchBoxPointer()
+// returns the search box pointer.
+// ---------------------------------------------------------------------------
+//
+CAknSearchField* CIRMainContainer::GetSearchBoxPointer()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetSearchBoxPointer" );
+	return 	iFavouritesSearchBox;
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetLastPlayedChannel()
+// returns whether the lastplayed channel exists or not.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainContainer::GetLastPlayedChannel()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetLastPlayedChannel" );
+	return iLastPlayedChannel;	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetFilterdModelPointer()
+// returns pinter to filtered model.
+// ---------------------------------------------------------------------------
+//
+CIRFilteredModel* CIRMainContainer::GetFilterdModelPointer()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetListPointer" );
+	return iFilteredModel;	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::DeleteMultiStationsL()
+// To delete multiple items from favourites list.
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::DeleteMultiStationsL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::MultiDelete - Entering" );
+	HBufC* textResource = NULL;
+	if(iMainView.iMarkedIndexArray.Count()==1)
+		{
+		if(iMainView.iMarkedIndexArray[0]<= iMainView.iUi->iFavPresets->
+					                 iFavPresetList.Count())
+			{
+			SetFilteredIndexArrayL();
+			textResource = StringLoader::LoadLC( R_IRAPP_NOTE_REMOVED,iMainView.iUi->iFavPresets->
+						                 iFavPresetList[iMainView.iMarkedIndexArray[0]]->Name());
+			}
+		}
+	else
+		{
+		textResource = StringLoader::LoadLC( R_IRAPP_NOTE_REMOVED_MANY,
+											iMainView.iMarkedIndexArray.Count());
+		}
+	iMultiDeleteString.Create(*textResource);
+
+	TInt favouritesCount = iMainView.iUi->iFavPresets->iFavPresetList.Count();
+	iMarkedElementsCount = iMainView.iMarkedIndexArray.Count();
+	iFinalCount = favouritesCount- iMarkedElementsCount;
+	iProgress = KProgressbarFinalValue/iMarkedElementsCount;
+	
+
+	TInt numOfItems = GetListBoxCount();
+	iBeforetime.HomeTime();
+	for(TInt j =0; j<iMainView.iMarkedIndexArray.Count();j++)
+		{
+		TInt presentIndex = iMainView.iMarkedIndexArray[j];
+		for(TInt i=0;i<=numOfItems;i++)
+			{
+			if((iMainView.iMarkedIndexArray[j])==i)
+				{
+				TInt channeUniqId;
+				channeUniqId = iMainView.iUi->iFavPresets->
+							   iFavPresetList[iMainView.iMarkedIndexArray[j]]->Id();
+				// delete the index from the logo's array
+				RemoveFromLogoArray(iMainView.iMarkedIndexArray[j]);
+				iMainView.iUi->iFavPresets->DeletePresetL(channeUniqId);
+				iAftertime.HomeTime();
+				iIntervalsec = iAftertime.MicroSecondsFrom(iBeforetime);
+				if(iIntervalsec>=KProgressTimer)
+					{
+					CreateProgressBarL();	
+					}
+				}
+			}
+		iProgressFlag = ETrue;
+		}
+	if(iMainView.iCurrentFocus<0 ||iMainView.iCurrentFocus>GetListBoxCount())
+		{
+		iMainView.SetCurrentFocus(0);
+		}
+	cmdMarkL(0,EFalse);
+	iMainView.SetMarkedAllFlag(EFalse);
+	iMainView.SetMarkedFlag(EFalse);
+	iMainView.iUnMarkedArray.Reset();
+	iMainView.SetListBoxMarkedCount(0);
+	CleanupStack::PopAndDestroy(textResource);
+	cmdMarkL(-1,EFalse);
+	IRLOG_DEBUG( "CIRMainContainer::MultiDelete - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::DeleteChannelL
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::DeleteChannelL( TInt aIndex ) 
+	{
+	IRLOG_DEBUG( "CIRMainContainer::DeleteChannelL - Entering" );
+	SetFilteredIndexArrayL();
+	RBuf channel;
+	HBufC* textResource =  NULL;
+	if(aIndex < iMainView.iUi->iFavPresets->iFavPresetList.Count())
+	textResource = StringLoader::LoadLC( R_IRAPP_NOTE_REMOVED,iMainView.iUi->iFavPresets->
+											iFavPresetList[aIndex]->Name() );
+	// delete the index from the logo's array
+	RemoveFromLogoArray(aIndex);
+		
+	channel.Create(*textResource);
+	TInt channeUniqId = iMainView.iUi->iFavPresets->iFavPresetList[aIndex]->Id();
+	// Removes the station from the Favourites preset.
+	iMainView.iUi->iFavPresets->DeletePresetL(channeUniqId);
+	iMainView.iIsdsWrapper->GetDialogLauncherInstance()->ShowConfirmationNoteL( channel,ETrue );
+	CleanupStack::PopAndDestroy(textResource);
+	channel.Close();
+	iContextSensitiveFlag = EFalse; 
+	IRLOG_DEBUG( "CIRainContainer::DeleteChannelL - Exiting" );
+	}
+//----------------------------------------------------------------------------
+// CIRMainContainer::RemoveFromLogoArray() 
+// Removes the element from logo array.
+//----------------------------------------------------------------------------
+// 	
+void CIRMainContainer::RemoveFromLogoArray(TInt aIndex)
+	{
+	TBool indexFound = EFalse;
+	const RIRPresetArray& presets = iMainView.iUi->iFavPresets->Presets();
+	CArrayPtr<CGulIcon>* iconArray = iFavouritesListBox->
+										 ItemDrawer()->FormattedCellData()->IconArray();
+	// checks whether the index to deleted in the iNolOgosArray or not
+	for(TInt i=0;i<iNoLogosArray.Count();i++)
+		{
+		if(iNoLogosArray[i]==presets[aIndex]->Index() && aIndex <presets.Count())
+			{
+			iNoLogosArray.Remove(i);
+			indexFound = ETrue;
+			return;
+			}
+		}
+	if(!indexFound)
+		{
+		for(TInt i=0;i<iLogosArray.Count();i++)	
+			{
+			TInt index = i+1;
+			if(iMainView.iUi->iLastPlayed->FileExists() && iMainView.iUi->
+				iLastPlayed->iLastPlayedStation->GetLogoData().Length())
+				{
+				index = index +1;
+				}
+	// checks whether the index to be is present deleted in the iNologosArray or not
+			if(iLogosArray[i] == presets[aIndex]->Index())
+				{
+				iLogosArray.Remove(i);
+				iconArray->Delete(index);
+				return;
+				}
+			}
+		}
+	
+	}
+	
+//----------------------------------------------------------------------------
+// CIRMainContainer::DisplayFilterListBoxL() 
+// Displayin gof filter box depending on favourites
+//----------------------------------------------------------------------------
+// 	
+void CIRMainContainer::DisplayFilterListBoxL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::DisplayFilterListBoxL - Entering" );
+	TInt favCount = iMainView.iUi->iFavPresets->iFavPresetList.Count();
+	if(favCount>1)
+		{
+		if(iFavouritesSearchBox)
+			{
+			DisableFindBox();
+			}
+		// Added For Dynamic Filtering
+		iFavouritesSearchBox = CreateFindBoxL(iFavouritesListBox, iFilteredModel,
+		  CAknSearchField::ESearch);
+		SizeChanged();	
+		}
+	else
+		{
+		if(iFavouritesSearchBox)
+			{
+			DisableFindBox();
+			}
+		}
+	IRLOG_DEBUG( "CIRMainContainer::DisplayFilterListBoxL - Exiting" );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CIRMainContainer::DialogDismissedL()
+// Called when/if the dialog has been dismissed.
+// iIdle must be canceled when cancel button is pressed.
+// -----------------------------------------------------------------------------
+//
+void CIRMainContainer::DialogDismissedL( TInt aButtonId )
+    {
+    // Check when pressing cancel button.
+	switch(aButtonId)
+		{
+		case EAknSoftkeyDone:   
+		case EAknSoftkeyCancel:
+			{   
+			if(iProgressDialog)
+				{	
+				iProgressDialog = NULL;
+				iProgressInfo = NULL;
+				}
+			}
+		break;
+		default:
+		break;
+		}
+	return;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : FilteredIndexL()
+// Function called when mark all is called after dynamic filtering
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::FilteredIndexL()
+	{
+	for (TInt j = 0;j<iFilteredModel->NumberOfItems();j++)
+		{
+		TPtrC16 filteredString = iFilteredModel->ItemText (j);
+		for(TInt i=0;i<iListArray->Count();i++)
+			{
+			TPtrC16 matchString=iListArray->MdcaPoint(i);
+			if(filteredString==matchString)
+				{
+				if(iLastPlayedChannel && filteredString == iListArray->MdcaPoint(0))
+					{
+					// If Lastplayed is present then don't insert that element into marked array.	
+					}
+				else
+					{
+					if(iLastPlayedChannel)
+						{
+						i = i-1;	
+						}
+					iMainView.iMarkedIndexArray.InsertInOrderL(i);	
+					}
+				break;
+				}
+
+			}
+		}
+	}
+// ---------------------------------------------------------------------------
+// Function : CreateProgressBarL()
+// Function called when mark all is called after dynamic filtering
+// ---------------------------------------------------------------------------
+//
+void CIRMainContainer::CreateProgressBarL()
+	{
+	if(!iProgressDialog)
+		{
+		iProgressStart = EFalse;
+		iProgressCount = 1;
+		if(iMarkedElementsCount)
+			{
+			iProgress = KProgressbarFinalValue/iMarkedElementsCount;
+			}
+		iProgressDialog = new (ELeave) CAknProgressDialog(
+	           (REINTERPRET_CAST(CEikDialog**, &iProgressDialog)),
+	           ETrue);
+	    iProgressDialog->PrepareLC(R_IRAPP_PROGRESS_DIALOG_CANCEL);
+	    iProgressInfo = iProgressDialog->GetProgressInfoL();
+	    iProgressDialog->SetCallback(this);
+		iProgressDialog->RunLD();
+		iProgressInfo->SetFinalValue(KProgressbarFinalValue);
+		iProgressStart = ETrue;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetContextSenstiveFlag()
+// returns the context senstive flag.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainContainer::GetContextSenstiveFlag()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetContextSenstiveFlag" );
+	return iContextSensitiveFlag;	
+	}
+// ---------------------------------------------------------
+// CIRMainContainer::SetContextSenstiveFlag
+// Sets the context sensitive flag
+// ---------------------------------------------------------
+//
+void CIRMainContainer::SetContextSenstiveFlag(TBool aContextSensitiveFlag)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::SetContextSenstiveFlag - Entering." );
+	iContextSensitiveFlag = aContextSensitiveFlag;
+	IRLOG_DEBUG( "CIRMainContainer::SetContextSenstiveFlag - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainContainer::GetFilteredFlag()
+// returns the filtered flag.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainContainer::GetFilteredFlag()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetContextSenstiveFlag" );
+	return iFilteredFlag;	
+	}
+
+// ---------------------------------------------------------
+// CIRMainContainer::RefreshView
+// Resets all the values and draws the view with new values
+// ---------------------------------------------------------
+//
+void CIRMainContainer::RefreshViewL()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::RefreshViewL - Entering." );
+	iInvalidIconIndices.Reset();
+	iLogosArray.Reset();
+	iNoLogosArray.Reset();  
+	iImageCount = 1;
+ 	iLogoDownloadError	= EFalse;
+    SetIconsL();
+    UpdateAllL();
+	IRLOG_DEBUG( "CIRMainContainer::RefreshViewL - Exiting." );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irmainview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,2154 @@
+/*
+* 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:  Main View
+*
+*/
+/*
+* ============================================================================
+*  Name        : irmainview.cpp
+*  Part of     : InternetRadio
+*  Description : Main View
+*  Version    :
+* ============================================================================
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Tue Feb 28 18:00:00 2008 by Neelima
+*  Ref:
+*  Added Workaround in CIRMainView::HandleCommandL() Listen/Add to Favourates is implemented and the dummy functionality is removed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Sat Feb 18:12:00 2008 by Neelima
+*  Ref:
+*  Added Workaround in CIRMainView::Handlecommandl() for deleting the stations and necessary dialogs  .
+*  and also handled necessary cases for add to favourites.
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 1, Thrus Feb 20 07:35:00 2008 by Neelima
+*  Ref:
+*  Added Workaround in CIRMainView::DynInitMenuPaneL() for displaying "Go to Now playing" & "update" options .
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 10, July 8 tue 18:44:00 2008 by Rohit
+*  Implemented delayed activation for Station Information view in case of no network connectivity
+*
+*  Version: 9, May 28 wed 16:34:00 2008 by Rohit
+*  Fixed bug to verify network before invoking Station Information view
+*
+*  Version: 8, May 5 wed 19:14:00 2008 by Rohit
+*  Fixed bug to show Song Information view for last played station
+*
+*  Version: 7, Apr 30 wed 14:10:00 2008 by Rohit
+*  Added handler to invoke Song Information view
+*
+*  Version: 6, April 29 tue 12:15:00 2008 by Neelima
+*  Changed the container to CCoeControl and implemented dynamic filtering
+*
+*  Version: 5, April 18 wed 10:41:00 2008 by Neelima
+*  Updated after pc-lint run
+*
+*  Version: 4, April 17 wed 08:06:00 2008 by Neelima
+*  Ref:
+*  Customisation of  mark/unmark
+*
+*  Version: 3, April 9 wed 19:12:00 2008 by Neelima
+*  Ref:
+*  Added Workaround in CIRMainContainer::DeleteMultiStationsL() the code for deleting the stations and necessary dialogs  .
+*
+*  Version: 2, Thrus Feb 20 08:52:00 2008 by Neelima
+*  Ref:
+*  Added Workaround in CIRMainView::Handlecommandl() Added marm/unmark commands and necessary functionality
+*  also implemented delete for marked items
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 9, may 13 Wed 05:55:00 2008 by Neelima
+* Implemeted Listen on dynamic filtered stations.
+* ============================================================================
+*/
+
+
+#include <stringloader.h>
+#include <hlplch.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+//For Touch Toolbar
+#include <akntoolbar.h>
+
+
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irmainview.h"
+#include "irmaincontainer.h"
+#include "irisdswrapper.h"
+#include "irstationinfoview.h"
+#include "irchannelserverurl.h"
+#include "irhistory.h"
+#include "irnowplayingview.h"
+#include "irdialoglauncher.h"
+#include "irnowplayingwrapper.h"
+#include "irnetworkcontroller.h"
+#include "irfilteredmodel.h"
+#include "iradvertisinglistbox.h"
+#include "msyncpresetobserver.h"	// MSyncPresetObserver
+#include "irlogodownloadengine.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irpubsub.h"
+
+
+const TInt KUrlbufMaxLength = 256;
+const TInt KDummyLength = 10;
+const TInt KNull = 0;
+const TInt KIsdsPreset = 1;
+const TInt KLPLogoSize = 59;
+const TInt KLPReqFrom = 0;
+
+// ---------------------------------------------------------------------------
+// CIRMainView::CIRMainView()
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRMainView::CIRMainView()
+    {
+	IRLOG_DEBUG( "CIRMainView::CIRMainView - Entering" );
+    SetCurrentFocus(0);
+   	SetCurrentTopItem(0);
+   	iMarkedFlag = EFalse;
+   	iRequestPending = EFalse;
+   	iFavListen = EFalse;
+   	iStationDetailsCmd = EFalse;
+   	iAddtoStationsCmd = EFalse;
+	iMarkedAllFlag = EFalse;
+	iMarkedFlag = EFalse;
+	iMarkedItemCount = 0;
+	iMarkedIndexArray.Reset();
+	iUnMarkedArray.Reset();
+	IRLOG_DEBUG( "CIRMainView::CIRMainView - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// void CIRMainView::ConstructL()
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRMainView::ConstructL - Entering" );
+    CIRBaseView::ConstructL( R_IR_FAV );
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+	TRgb color;
+	TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+					                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_IR_MAINVIEW_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_IR_MAINVIEW_BLACK_TOOLBAR);
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+	IRLOG_DEBUG( "CIRMainView::ConstructL - Exiting" );
+   	}
+// -----------------------------------------------------------------------------
+// CIRMainView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRMainView* CIRMainView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRMainView::NewL" );
+    CIRMainView* self = CIRMainView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRMainView::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRMainView* CIRMainView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRMainView* CIRMainView::NewLC()
+    {
+    IRLOG_DEBUG( "CIRMainView::NewLC - Entering" );
+    CIRMainView* self = new( ELeave ) CIRMainView;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRMainView::NewL - Exiting." );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRMainView::~CIRMainView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRMainView::~CIRMainView()
+	{
+	IRLOG_DEBUG( "CIRMainView::~CIRMainView - Entering" );
+	if ( iContainer )
+		{
+		AppUi()->RemoveFromViewStack( *this, iContainer );
+		delete iContainer;
+		iContainer = NULL;
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	iMarkedIndexArray.Close();
+	iUnMarkedArray.Close();
+	IRLOG_DEBUG( "CIRMainView::~CIRMainView - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// TUid CIRMainView::Id() const
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRMainView::Id() const
+    {
+	IRLOG_DEBUG( "CIRMainView::Id" );
+    return KIRMainChoiceViewID;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRMainView::DoActivateL( )
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::DoActivateL( const TVwsViewId& aPrevViewId,
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+	{
+	IRLOG_DEBUG( "CIRMainView::DoActivateL - Entering" );
+	iMarkedItemCount =0;
+	iMarkedFlag = EFalse;
+	iAddToFavouratesFlag = EFalse;
+
+	if(GetCurrentFocus() == -1)
+		{
+		SetCurrentFocus(0);
+		SetCurrentTopItem(0);
+		}
+	iUi->iFavPresets->AddObserver( *this );
+	iUi->iPresentViewID = KIRMainChoiceViewID;
+	if ( !iContainer )
+		{
+ 	    iContainer = CIRMainContainer::NewL( *this, ClientRect() );
+     	iContainer->CreateCustomListBoxL();
+        AppUi()->AddToViewStackL( *this, iContainer);
+        TInt index = GetCurrentFocus();
+        if( aPrevViewId.iViewUid == KIRNowPlayingViewID )
+	        {
+	        if(iNowPlayingWrapper->GetFavFocus()!= GetCurrentFocus()
+	        	&& iNowPlayingWrapper->GetFavFocus()>=0 )
+		        {
+		        index = iNowPlayingWrapper->GetFavFocus();
+		        }
+	        }
+       iContainer->GetListPointer()->SetCurrentItemIndex(index);
+       if( aPrevViewId.iViewUid != KIRAddManuallyStationViewID )
+	       {
+	       iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+	       }
+       }
+    else
+        {
+		// we must notify a resource change in order to update the skin context
+		// This is a flaw of CEikFormattedCellListBox
+		iContainer->SetRect(ClientRect());
+        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+        }
+
+	ConstructToolbarL();
+
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+   	MenuBar()->SetContextMenuTitleResourceId(R_IR_MENUBAR_FAV);
+   	SetTitleL( R_IRAPP_MAIN_MENU_TITLE);
+	if(	iUi->GetPlsActiavted())
+		{
+		CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+		}
+	else
+		{
+		CIRBaseView::DoActivateL( aPrevViewId, TUid::Uid(1), aCustomMessage );
+		}
+	HandleStatusPaneSizeChange();
+	iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+	HandleCommandL(EUnmarkAll);
+	IRLOG_DEBUG( "CIRMainView::DoActivateL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRMainView::DoDeactivate()
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::DoDeactivate()
+    {
+	IRLOG_DEBUG( "CIRMainView::DoDeactivate - Entering" );
+	CIRBaseView::DoDeactivate();
+	if ( iContainer )
+		{
+        if(iContainer->GetListPointer() && iContainer->GetSearchBoxPointer())
+		    {
+		    TBuf<KDummyLength> findstring;
+			iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+			if( findstring.Length()!=0)
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				if(GetCurrentFocus() != -1)
+					{
+					iContainer->Comparestrings();
+					SetCurrentFocus(iFilteredIndex);
+					SetCurrentTopItem(iFilteredIndex);
+					}
+				}
+			else
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+				}
+			}
+		iUi->RemoveFromStack(iContainer );
+		delete iContainer;
+		iContainer = NULL;
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	iMarkedIndexArray.Close();
+	iUnMarkedArray.Close();
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+
+	IRLOG_DEBUG( "CIRMainView::DoDeactivate - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRMainView::HandleCommandL( TInt aCommand )
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRMainView::HandleCommandL - Entering" );
+	switch ( aCommand )
+		{
+		case EMark:
+			{
+			TInt currentIndex = iContainer->GetCurrentItemIndex();
+			TInt index = 0;
+			if(currentIndex <=iUi->iFavPresets->iFavPresetList.Count())
+				{
+				if(iUi->iLastPlayed->FileExists())
+					{
+					if(currentIndex ==0)
+						{
+						index = iUi->iFavPresets->iFavPresetList[currentIndex]->Index();
+						}
+					else
+						{
+						index = iUi->iFavPresets->iFavPresetList[currentIndex-1]->Index();
+						}
+					}
+				else
+					{
+					index = iUi->iFavPresets->iFavPresetList[currentIndex]->Index();
+					}
+				}
+			if(currentIndex !=-1)
+				{
+				if(currentIndex ==0 &&iUi->iLastPlayed->FileExists())
+					{
+					// if the current item index is Zero and the Last palyed exists i.e., it is the lastplayed station then do nothing on mark/unmark.
+					}
+				else
+					{
+					iContainer->cmdMarkL(currentIndex,ETrue);
+					iMarkedFlag = ETrue;
+					}
+				}
+
+			if (index != KErrNotFound )
+				{
+				if(iMarkedIndexArray.Count())
+					{
+					currentIndex = GetCurrentIndex();
+					for(TInt i=0;i<iMarkedIndexArray.Count();i++)
+						{
+						// check whether the marked index already exists in the marked array.
+						if(iMarkedIndexArray[i]==currentIndex)
+							{
+							iIndexExisting = ETrue;
+							}
+						}
+					}
+				currentIndex = iContainer->GetCurrentItemIndex();
+				if(!(currentIndex ==0 &&iUi->iLastPlayed->FileExists()))
+					{
+					if(iIndexExisting)
+						{
+						//If the index is already marked do nothing.
+						}
+					else
+						{
+						//If the index is not marked before then insert that into marked array.
+						currentIndex = GetCurrentIndex();
+						iMarkedIndexArray.InsertInOrderL(currentIndex);
+						(iMarkedItemCount)++ ;
+						}
+					}
+				}
+			if(iUnMarkedArray.Count())
+				{
+				for(TInt i=0;i<iUnMarkedArray.Count();i++)
+					{
+					if(iUnMarkedArray[i]==currentIndex)
+						{
+						iUnMarkedArray.Remove(i);
+						}
+					}
+				}
+			iIndexExisting = EFalse;
+			SetToolbarItems();
+			SetCurrentFocus(currentIndex);
+			}
+		break;
+		case EMarkAll:
+			{
+			iMarkedAllFlag = ETrue;
+			iMarkedIndexArray.Reset();
+			if(iUi->iLastPlayed->FileExists())
+				{
+				// If Last Played station exists then mark all the stations in the favourate list except the Last played.
+				iContainer->cmdMarkL(0,ETrue);
+				}
+			else
+				{
+				// If Last Played station doesn't exist, then mark all the stations in the favourite list .
+				iContainer->cmdMarkL(-1,ETrue);
+				}
+			TBuf<KDummyLength> findString ;
+			// if elements in the listbox r not filtered
+			if(iContainer->GetSearchBoxPointer())
+				{
+				iContainer->GetSearchBoxPointer()->GetSearchText(findString);
+				}
+			// If the elements in the listbox are not filtered
+			if((findString.Length()==0))
+				{
+				TInt listboxCount ;
+				// If last played exists
+				if(iUi->iLastPlayed->FileExists())
+					{
+					// Except Last played mark all the elements in the favourite list
+					// and  all the marked elements are to be inserted into the array.
+					listboxCount = iContainer->GetListBoxCount()-1;
+					}
+				else
+					{
+					// If last played doesn't exist Mark all the elements in the list and all the
+					// elements are to be inserted into the array.
+					listboxCount = iContainer->GetListBoxCount();
+					}
+				for(TInt i=0;i<listboxCount;i++)
+					{
+					iMarkedIndexArray.InsertInOrderL(i);
+					}
+				iMarkedItemCount = iContainer->GetListPointer()->Model()->NumberOfItems();
+				}
+			// If the elements in the listbox are filtered
+			else
+				{
+				iContainer->FilteredIndexL();
+				iMarkedItemCount = iMarkedIndexArray.Count();
+				}
+			SetToolbarItems();
+			SetCurrentFocus(iContainer->GetCurrentItemIndex());
+			}
+		break;
+		case EUnmark:
+			{
+			TInt currentIndex = iContainer->GetCurrentItemIndex();
+			if(currentIndex != -1)
+				{
+				if(currentIndex ==0 &&iUi->iLastPlayed->FileExists())
+					{
+					iContainer->cmdMarkL(currentIndex,EFalse);
+					}
+				else
+					{
+					iContainer->cmdMarkL(currentIndex,EFalse);
+					}
+				currentIndex = GetCurrentIndex();
+				for(TInt j=0;j<iMarkedIndexArray.Count();j++)
+					{
+					// check which element of marked array is unmarked and remove from the marked array.
+					if(iMarkedIndexArray[j] ==currentIndex )
+						{
+						iMarkedIndexArray.Remove(j);
+						}
+					}
+				if(iMarkedAllFlag)
+					{
+					iUnMarkedArray.InsertInOrderL(currentIndex);
+					}
+				(iMarkedItemCount)-- ;
+				}
+			if(iMarkedIndexArray.Count()==0)
+				{
+				iMarkedFlag = EFalse;
+				iMarkedAllFlag = EFalse;
+				iContainer->SetContextSenstiveFlag(EFalse) ;
+				}
+			SetToolbarItems();
+			SetCurrentFocus(currentIndex);
+			}
+		break;
+		case EUnmarkAll:
+			{
+			iMarkedAllFlag = EFalse;
+			iMarkedFlag = EFalse;
+			// If Last played Exists
+			if(iUi->iLastPlayed->FileExists())
+				{
+				iContainer->cmdMarkL(0,EFalse);
+				}
+			// If last played doesn't exist
+			else
+				{
+				iContainer->cmdMarkL(-1,EFalse);
+				}
+			iMarkedItemCount = 0;
+			iMarkedIndexArray.Reset();
+			iUnMarkedArray.Reset();
+			iContainer->SetContextSenstiveFlag(EFalse) ;
+			SetToolbarItems();
+		//	SetCurrentFocus(iContainer->GetCurrentItemIndex())
+			}
+		break;
+		case EAknSoftkeyOptions:
+			{
+			Cba()->DrawDeferred();
+			break;
+			}
+		case EListenCmd:
+			{
+			if( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			iUi->SetListenFromPls(EFalse);
+			if(iContainer->GetListBoxCount()!=-1)
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				}
+
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iListenRequest = ETrue;
+				break;
+				}
+
+			ConnectToSelectedStationL();
+			break;
+			}
+		case ESelectCmd:
+			{
+			break;
+			}
+		case EFindStationsCmd:
+			{
+			if( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			if(iContainer->GetListBoxCount()!=-1)
+				{
+				if((iContainer->GetListBoxCount()!=0)&&(iContainer->GetCurrentItemIndex()
+					 <= iContainer->GetListBoxCount()))
+					{
+					SetCurrentFocus(iContainer->GetCurrentItemIndex());
+					}
+				}
+			TBuf8<2> dummy;
+			TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRFirstTimeViewId);
+			AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+			break;
+			}
+		case EHistoryCmd:
+			{
+			if(iContainer->GetListBoxCount()!=-1)
+				{
+				if((iContainer->GetListBoxCount()!=0)&&(iContainer->GetCurrentItemIndex()
+					 <= iContainer->GetListBoxCount()))
+					{
+					SetCurrentFocus(iContainer->GetCurrentItemIndex());
+					}
+				}
+			AppUi()->ActivateLocalViewL( KIRHistoryListViewId );
+			break;
+			}
+		case EDeleteCmd:
+			{
+			TInt dlgValue ;
+			if(iContainer->GetCurrentItemIndex()!=-1)
+				{
+				RBuf deleteStation;
+				HBufC* textResource ;
+				// If elements are marked in the list
+				if(iMarkedItemCount)
+					{
+					// If only one station in the list is marked.
+					if(iMarkedIndexArray.Count()==1)
+						{
+						TInt index = iMarkedIndexArray[0];
+						textResource = StringLoader::LoadLC( R_IRAPP_NOTE_DELETE,
+										iUi->iFavPresets->iFavPresetList[index]->Name() );
+						}
+					// If more than one station in the list is marked
+					else
+						{
+						textResource = StringLoader::LoadLC( R_IRAPP_NOTE_DELETE_MANY,
+													iMarkedIndexArray.Count());
+						}
+					deleteStation.Create(*textResource);
+					iIsdsWrapper->GetDialogLauncherInstance()->
+							ShowQueryDialogDeletionL(deleteStation,dlgValue);
+					if(dlgValue)
+						{
+						iContainer->DeleteMultiStationsL();
+						}
+					}
+				// If elements are not marked
+				else
+					{
+					TBuf<KDummyLength> findString;
+					TInt currentIndex;
+					if(iContainer->GetSearchBoxPointer())
+						{
+						iContainer->GetSearchBoxPointer()->GetSearchText(findString);
+						}
+					// If elements in the listbox are not filtered
+					if((findString.Length()==0))
+						{
+						TInt index;
+						currentIndex = iContainer->GetListPointer()->CurrentItemIndex();
+						SetCurrentFocus(iContainer->GetCurrentItemIndex());
+						SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+						// If the last played exists
+						if(iUi->iLastPlayed->FileExists())
+							{
+							index = currentIndex-1;
+							textResource = StringLoader::LoadLC( R_IRAPP_NOTE_DELETE,
+								iUi->iFavPresets->iFavPresetList[currentIndex-1]->Name() );
+							}
+						// If the last played doesn't exist
+						else
+							{
+							index = currentIndex;
+							textResource = StringLoader::LoadLC( R_IRAPP_NOTE_DELETE,
+							iUi->iFavPresets->iFavPresetList[currentIndex]->Name() );
+							}
+						deleteStation.Create(*textResource);
+						iIsdsWrapper->GetDialogLauncherInstance()->
+								ShowQueryDialogDeletionL(deleteStation,dlgValue);
+						if(dlgValue)
+							{
+							iContainer->DeleteChannelL(index );
+							}
+						}
+					// If elements are  filtered
+					else
+						{
+						currentIndex = GetCurrentIndex();
+						textResource = StringLoader::LoadLC( R_IRAPP_NOTE_DELETE,
+									iUi->iFavPresets->iFavPresetList[currentIndex]->Name() );
+						deleteStation.Create(*textResource);
+						iIsdsWrapper->GetDialogLauncherInstance()->
+							ShowQueryDialogDeletionL(deleteStation,dlgValue);
+						if(dlgValue)
+							{
+							iContainer->DeleteChannelL( currentIndex);
+							}
+						}
+					}
+				CleanupStack::PopAndDestroy( textResource );
+				deleteStation.Close();
+				SetToolbarItems();
+				}
+			break;
+			}
+		case EGotoNowPlayingViewCmd:
+			{
+			iUi->SetHistory(EFalse);
+			iUi->SetMainView(ETrue);
+			iUi->SavePrevIDL(KIRMainChoiceViewID,aCommand);
+			break;
+			}
+		case EExportFavCmd:
+			{
+			break;
+			}
+		case EEditStationsCmd:
+			{
+			if(iContainer->GetListBoxCount()!=-1)
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				}
+			iUi->SetEditStation(ETrue);
+			iUi->iEditStationIndex = iContainer->GetListPointer()->CurrentItemIndex();
+			if(iUi->iLastPlayed->FileExists())
+				{
+				iUi->iFavPresets->iFavPresetList[iUi->iEditStationIndex-1]->
+				CopyPresetData(*iNowPlayingWrapper->iEditStationPreset);
+				}
+			else
+				{
+				iUi->iFavPresets->iFavPresetList[iUi->iEditStationIndex]->
+				CopyPresetData(*iNowPlayingWrapper->iEditStationPreset);
+				}
+
+			iUi->SetEditStation(ETrue);
+			AppUi()->ActivateLocalViewL(KIRAddManuallyStationViewID);
+			break;
+			}
+		case EStationsCmd:
+			{
+			break;
+			}
+		case EAddtoStationsCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			iAddToFavouratesFlag = ETrue;
+
+			////////verifying network connectivity/////////////////////////////////
+			TBool bNoNetwork = iUi->VerifyNetworkConnectivityL();
+			if( bNoNetwork )
+				{
+				iRequestPending = ETrue;
+				iAddtoStationsCmd = ETrue;
+
+				break;
+				}
+			else
+				{
+				AddStationtoFavoritesL();
+				}
+
+
+			break;
+			}
+		case EAddStationManuallyCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iUi->SetEditStation(EFalse);
+				AppUi()->ActivateLocalViewL(KIRAddManuallyStationViewID);
+				}
+			break;
+			}
+		case EHelpCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+							AppUi()->AppHelpContextL() );
+				}
+			}
+		break;
+		case ESettingsCmd:
+			{
+			if(iContainer->GetListBoxCount()!=-1)
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				}
+			AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+			break;
+			}
+		case EAknSoftkeyBack:
+			{
+			if(	iUi->GetPlsActiavted() )
+				{
+				CIRBaseView::HandleCommandL( EAknSoftkeyBack );
+				}
+			else
+				{
+				CIRBaseView::HandleCommandL( EAknSoftkeyExit );
+				}
+			break;
+			}
+
+		case EStationDetailsCmd:
+			{
+			if( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			TInt presetIndex = -1;
+			if(iContainer->GetListBoxCount()!=-1)
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				}
+			// Last Played channel selected
+			if(iContainer->GetCurrentItemIndex()==0 && iContainer->GetLastPlayedChannel())
+				{
+				iUi->iStationInfoView->SetStationPresetL( iUi->iLastPlayed->iLastPlayedStation );
+				}
+			else
+				{
+				presetIndex = GetCurrentIndex();
+				iUi->iStationInfoView->SetStationPresetL( iUi->iFavPresets->
+														  iFavPresetList[presetIndex] );
+				}
+
+			if( iUi->iStationInfoView->GetStationPresetL()->GetChannelType() == CIRIsdsPreset::EIsdsPreset
+				&& iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iStationDetailsCmd = ETrue;
+				}
+			else
+				{
+				AppUi()->ActivateLocalViewL(KIRStationInfoViewId);
+				}
+			break;
+			}
+		case EMoveCmd:
+			{
+			TInt currentIndex = iContainer->GetCurrentItemIndex();
+
+			Toolbar()->SetItemDimmed(EFindStationsCmd,ETrue,ETrue);
+			Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+			Toolbar()->SetItemDimmed(EHistoryCmd,ETrue,ETrue);
+			Toolbar()->DrawNow();
+
+			if(iMarkedIndexArray.Count()==1)
+				{
+				if(!iUi->iLastPlayed->FileExists())
+					{
+					iIndexFrom = iMarkedIndexArray[0];
+					iMovedItemIndex=iMarkedIndexArray[0];
+					iChannelIdFrom = iUi->iFavPresets->iFavPresetList[iIndexFrom]->Id();
+					}
+				else
+					{
+					iIndexFrom = iMarkedIndexArray[0];
+					iMovedItemIndex=iMarkedIndexArray[0] + 1;
+					iChannelIdFrom = iUi->iFavPresets->iFavPresetList[iIndexFrom]->Id();
+					}
+				iMarkedIndexArray.Reset();
+				SetListBoxMarkedCount(0);
+				iMarkedFlag = EFalse;
+				iMoveMarkedFlag = ETrue;
+				}
+			else
+				{
+				if(!iUi->iLastPlayed->FileExists())
+					{
+					iIndexFrom = currentIndex;
+					iMovedItemIndex=currentIndex;
+					iChannelIdFrom = iUi->iFavPresets->iFavPresetList[iIndexFrom]->Id();
+					}
+				else
+					{
+					iIndexFrom = currentIndex-1;
+					iMovedItemIndex=currentIndex;
+					iChannelIdFrom = iUi->iFavPresets->iFavPresetList[iIndexFrom]->Id();
+					}
+				if(currentIndex !=-1)
+					{
+					if(currentIndex ==0 &&iUi->iLastPlayed->FileExists())
+						{
+						// if the current item index is Zero and the Last palyed exists i.e., it is the lastplayed station then do nothing on mark/unmark.
+						}
+					else
+						{
+						iContainer->cmdMarkL(currentIndex,ETrue);
+						iMoveMarkedFlag = ETrue;
+						}
+					}
+				}
+			Cba()->SetCommandSetL( R_IR_CBA_DONE_CANCEL );
+			Cba()->DrawDeferred();
+			break;
+			}
+		case EAknSoftkeyCancel:
+		case EIRCancel:
+			{
+			TInt currentIndex =iMovedItemIndex;
+			if(currentIndex != -1)
+				{
+				iContainer->cmdMarkL(currentIndex,EFalse);
+				iMoveMarkedFlag = EFalse;
+				}
+			Toolbar()->SetItemDimmed(EFindStationsCmd,EFalse,ETrue);
+			Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+			Toolbar()->SetItemDimmed(EHistoryCmd,EFalse,ETrue);
+			Toolbar()->DrawNow();
+			Cba()->SetCommandSetL( R_IRAPP_SOFTKEYS_OPTIONS_BACK_CBA );
+			Cba()->DrawDeferred();
+			break;
+			}
+		case EAknSoftkeyDone:
+			{
+			TInt movedIndex =iMovedItemIndex;
+			TInt currentIndex = iContainer->GetCurrentItemIndex();
+			SetCurrentFocus(currentIndex);
+			if(currentIndex==0)
+				{
+				iIndexTo=0;
+				iChannelIdTo = iUi->iFavPresets->iFavPresetList[iIndexTo]->Id();
+				}
+			else
+				{
+				if(!iUi->iLastPlayed->FileExists())
+					{
+					iIndexTo = currentIndex;
+					iChannelIdTo = iUi->iFavPresets->iFavPresetList[iIndexTo]->Id();
+					}
+				else
+					{
+					iIndexTo = currentIndex-1;
+					iChannelIdTo = iUi->iFavPresets->iFavPresetList[iIndexTo]->Id();
+					}
+				}
+			iUi->iFavPresets->SwapPresetsInDbL(iChannelIdFrom,iChannelIdTo,iIndexFrom,iIndexTo);
+			if(movedIndex != -1)
+				{
+				iContainer->cmdMarkL(movedIndex,EFalse);
+				}
+			Toolbar()->SetItemDimmed(EFindStationsCmd,EFalse,ETrue);
+			Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+			Toolbar()->SetItemDimmed(EHistoryCmd,EFalse,ETrue);
+			Toolbar()->DrawNow();
+			Cba()->SetCommandSetL( R_IRAPP_SOFTKEYS_OPTIONS_BACK_CBA );
+			Cba()->DrawDeferred();
+			break;
+			}
+		default:
+			{
+			CIRBaseView::HandleCommandL( aCommand );
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::HandleCommandL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// void CIRMainView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+	{
+	IRLOG_DEBUG( "CIRMainView::DynInitMenuPaneL - Entering" );
+	if(iContainer->GetListBoxCount()!=-1)
+		{
+		AknSelectionService::HandleMarkableListDynInitMenuPane
+		(aResourceId, aMenuPane, iContainer->GetListPointer());
+		}
+	if(aResourceId == R_IR_MENU_FAV)
+		{
+		if(!aMenuPane) User::Leave(KErrNotFound);
+			{
+			if ( iContainer )
+				{
+				if(!(iContainer->GetContextSenstiveFlag()))
+					{
+					TInt filteredCount = iContainer->GetFilterdModelPointer()->NumberOfItems();
+					if(filteredCount == 0)
+						{
+						// After dynamic filtering if no matches are present, if user presses
+						// option menu only add stations manually,settings,help,
+						// exit should be displayed
+						aMenuPane->SetItemDimmed(EAddStationManuallyCmd, EFalse);
+						aMenuPane->SetItemDimmed(EEditStationsCmd, ETrue);
+						if(iContainer->GetLastPlayedChannel())
+							{
+							aMenuPane->SetItemDimmed(EAddtoStationsCmd, EFalse);
+							}
+						else
+							{
+							aMenuPane->SetItemDimmed(EAddtoStationsCmd, ETrue);
+							aMenuPane->SetItemDimmed(EMarkUnmark,ETrue );
+							aMenuPane->SetItemDimmed(EDeleteCmd,ETrue );
+							aMenuPane->SetItemDimmed(EStationsCmd, ETrue);
+							aMenuPane->SetItemDimmed(ESettingsCmd, EFalse);
+							aMenuPane->SetItemDimmed(EHelpCmd, EFalse);
+							aMenuPane->SetItemDimmed(EExitCmd, EFalse);
+							}
+						}
+					else
+						{
+						if(filteredCount == iMarkedIndexArray.Count()|| iMarkedIndexArray.Count())
+							{
+							aMenuPane->SetItemDimmed(EEditStationsCmd, ETrue);
+							}
+						else
+							{
+							aMenuPane->SetItemDimmed(EEditStationsCmd, GetEditDimmingStatus());
+							}
+						aMenuPane->SetItemDimmed(EAddtoStationsCmd, GetAddDimmingStatus());
+						aMenuPane->SetItemDimmed(EMarkUnmark,GetLastPlayedStatus() );
+						aMenuPane->SetItemDimmed(EDeleteCmd,ETrue );
+						}
+					// Now Playing option
+					if(iNowPlayingWrapper->iPlaying)
+						{
+						aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+						}
+					else
+						{
+						aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+						}
+					}
+				else
+					{
+					// After marking of any station, if user  taps on any station
+					// only delete and mark/unmark options should be shown.
+					aMenuPane->SetItemDimmed(EDeleteCmd,EFalse );
+					aMenuPane->SetItemDimmed(EMarkUnmark, EFalse);
+					aMenuPane->SetItemDimmed(EAddStationManuallyCmd, ETrue);
+					aMenuPane->SetItemDimmed(EAddtoStationsCmd, ETrue);
+					aMenuPane->SetItemDimmed(EEditStationsCmd, ETrue);
+					aMenuPane->SetItemDimmed(EStationsCmd, ETrue);
+					aMenuPane->SetItemDimmed(ESettingsCmd, ETrue);
+					aMenuPane->SetItemDimmed(EHelpCmd, ETrue);
+					aMenuPane->SetItemDimmed(EExitCmd, ETrue);
+					aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+					iContainer->SetContextSenstiveFlag(EFalse) ;
+					}
+				} /*iContainer */
+			} /*aMenuPane */
+		} /*aResource */
+
+	else if(aResourceId == R_IR_MENU_STATIONS_SUB_MENU)
+		{
+		aMenuPane->SetItemDimmed(EDeleteCmd,GetLastPlayedStatus() );
+		aMenuPane->SetItemDimmed(EStationDetailsCmd,EFalse );
+		aMenuPane->SetItemDimmed(EMoveCmd,GetLastPlayedStatus() );
+		if(iMarkedIndexArray.Count())
+			{
+			// If any element is marked then sation details option should be disabled
+			// from options menu
+			if(iContainer->GetLastPlayedChannel() && iContainer->GetListPointer()->CurrentItemIndex()==0)
+				{
+				aMenuPane->SetItemDimmed(EStationDetailsCmd,EFalse );
+				}
+			else
+				{
+				aMenuPane->SetItemDimmed(EStationDetailsCmd,ETrue );
+				}
+			}
+		if(  iMarkedIndexArray.Count()>1 ||
+		iContainer->GetFilteredFlag() ||
+		(iContainer->GetListBoxCount()==2 && iContainer->GetLastPlayedChannel() ) ||
+		iContainer->GetListBoxCount()==1  )
+			{
+			aMenuPane->SetItemDimmed(EMoveCmd,ETrue );
+			}
+		}
+	else if(aResourceId == R_IR_MENUPANE_MARKABLE_LIST)
+		{
+		aMenuPane->SetItemDimmed(EMark, EFalse);
+		aMenuPane->SetItemDimmed(EMarkAll, EFalse);
+		aMenuPane->SetItemDimmed(EUnmark, ETrue);
+		aMenuPane->SetItemDimmed(EUnmarkAll, ETrue);
+		if(iMarkedIndexArray.Count())
+			{
+			TBool markedflag;
+			TInt noOfSelectedIndexes = 0;
+			TInt filteredCount = iContainer->GetFilterdModelPointer()->NumberOfItems();
+			if(iContainer->GetLastPlayedChannel())
+				{
+				filteredCount = filteredCount-1	;
+				}
+
+			markedflag = EFalse;
+			TInt CurrentItemIndex = GetCurrentIndex();
+			for(TInt i=0;i<iMarkedIndexArray.Count();i++)
+				{
+				if(iMarkedIndexArray[i]==CurrentItemIndex)
+					{
+					markedflag = ETrue;
+					}
+				noOfSelectedIndexes++;
+				}
+			if((markedflag && iMarkedFlag)||(markedflag && iMarkedAllFlag))
+				{
+				aMenuPane->SetItemDimmed(EMark, ETrue);
+				aMenuPane->SetItemDimmed(EMarkAll, EFalse);
+				aMenuPane->SetItemDimmed(EUnmark, EFalse);
+				aMenuPane->SetItemDimmed(EUnmarkAll, EFalse);
+				}
+			else
+				{
+				aMenuPane->SetItemDimmed(EMark, EFalse);
+				aMenuPane->SetItemDimmed(EMarkAll, EFalse);
+				aMenuPane->SetItemDimmed(EUnmark, ETrue);
+				aMenuPane->SetItemDimmed(EUnmarkAll, EFalse);
+				}
+			if((markedflag && iMarkedAllFlag && noOfSelectedIndexes == filteredCount)
+			||(markedflag && noOfSelectedIndexes == filteredCount))
+				{
+				aMenuPane->SetItemDimmed(EMark, ETrue);
+				aMenuPane->SetItemDimmed(EMarkAll, ETrue);
+				aMenuPane->SetItemDimmed(EUnmark, EFalse);
+				aMenuPane->SetItemDimmed(EUnmarkAll, EFalse);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::DynInitMenuPaneL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Touch Toolbar
+//
+// ---------------------------------------------------------------------------
+
+void CIRMainView::ConstructToolbarL()
+    {
+	IRLOG_DEBUG( "CIRMainView::ConstructToolbarL - Entering" );
+	SetToolbarItems();
+	// Update rect, as changes in toolbar visibility also affect layout.
+	if(iContainer)
+		{
+		iContainer->SetRect( ClientRect() );
+		iContainer->DrawDeferred();
+		}
+
+	IRLOG_DEBUG( "CIRMainView::ConstructToolbarL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::HandleForegroundEventL( TBool aForeground )
+    {
+	IRLOG_DEBUG( "CIRMainView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+
+	if ( aForeground )
+		{
+		if ( iContainer )
+			{
+			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+			TRgb color;
+			TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+							                                      EAknsCIQsnTextColorsCG6 );
+			if(color.Gray2()!=0)
+				{
+				CreateAndSetToolbarL(R_IR_MAINVIEW_WHITE_TOOLBAR);
+				}
+			else
+				{
+				CreateAndSetToolbarL(R_IR_MAINVIEW_BLACK_TOOLBAR);
+				}
+			if( AknLayoutUtils::PenEnabled() && Toolbar() )
+				{
+				Toolbar()->SetToolbarObserver( this );
+				}
+			ConstructToolbarL();
+			iContainer->DrawDeferred();
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::HandleForegroundEventL---Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::HandleStatusPaneSizeChange()
+    {
+	IRLOG_DEBUG( "CIRMainView::HandleStatusPaneSizeChange - Entering" );
+    CIRBaseView::HandleStatusPaneSizeChange();
+
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+	IRLOG_DEBUG( "CIRMainView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRMainView::OfferToolbarEventL()
+// catch the selection key event and perform the operation according to it...
+// ---------------------------------------------------------------------------
+void CIRMainView::OfferToolbarEventL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRMainView::OfferToolbarEventL - Entering" );
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRMainView::OfferToolbarEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRMainView::SetToolbarItems()
+// Setting toolbar items when text is entered
+//  ---------------------------------------------------------------------------
+void CIRMainView:: SetToolbarItems()
+	{
+	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Entering" );
+	if(Toolbar())
+		{
+		if(iContainer)
+			{
+			Toolbar()->SetToolbarVisibility(ETrue, EFalse);
+			TBuf<KFindStringLength> findstring ;
+			if(iContainer->GetSearchBoxPointer())
+				{
+				iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+				}
+			TInt filterModelCount = iContainer->GetFilterdModelPointer()->NumberOfItems();
+			if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0
+			&& filterModelCount == 0)
+				{
+				Toolbar()->SetItemDimmed(EFindStationsCmd,ETrue,ETrue);
+				Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+				Toolbar()->SetItemDimmed(EHistoryCmd,ETrue,ETrue);
+				}
+			else
+				{
+				if(iMarkedItemCount||iContainer->GetListPointer()->Model()->NumberOfItems()==0 )
+					{
+					Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+					}
+				else
+					{
+		            Toolbar()->SetItemDimmed(EFindStationsCmd,EFalse,ETrue);
+					Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+					Toolbar()->SetItemDimmed(EHistoryCmd,EFalse,ETrue);
+					}
+	            if(iMoveMarkedFlag)
+		            {
+		            Toolbar()->SetItemDimmed(EFindStationsCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EHistoryCmd,ETrue,ETrue);
+		            }
+				}
+
+			Toolbar()->DrawNow();
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView::HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aType )
+// This is called by CIRFavoritesDb when values of presets stations has been changed
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::HandlePresetChangedL( TInt aId, TUid aDataHandler,
+						 MPSPresetObserver::TPSReason aType )
+	{
+	IRLOG_DEBUG( "CIRMainView::HandlePresetChangedL  - Entering." );
+	if(iContainer)
+		{
+		iContainer->HandlePresetChangedL(aId,aDataHandler,aType);
+		}
+	IRLOG_DEBUG( "CIRMainView::HandlePresetChangedL - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRMainView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRMainView::NotifyActiveNetworkObserversL  - Entering." );
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+
+			if(iContainer)
+				{
+
+				if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iFavListen)
+						{
+						DoConnectToChannelL( iContainer->GetUrlIndex() );
+						}
+					else if( iStationDetailsCmd )
+						{
+						iStationDetailsCmd = ETrue;
+						AppUi()->ActivateLocalViewL(KIRStationInfoViewId);
+						}
+					else if(iListenRequest)
+						{
+						ConnectToSelectedStationL();
+						}
+					else if(iAddtoStationsCmd)
+						{
+						AddStationtoFavoritesL();
+						}
+					else if(iSyncReq)
+						{
+						HandleCommandL(EListenCmd);
+						}
+					}
+				}
+
+			ResetPendingRequests(EFalse);
+			}
+			break;
+		}
+
+	IRLOG_DEBUG( "CIRMainView::NotifyActiveNetworkObserversL  - Exiting." );
+	}
+
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset
+// the pending requests
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRMainView::ResetPendingRequests(TBool aValue)
+	{
+	IRLOG_DEBUG( "CIRMainView::ResetPendingRequests  - Entering." );
+	iRequestPending = aValue;
+	iListenRequest  = aValue;
+	iStationDetailsCmd = aValue;
+	iFavListen = aValue;
+	iAddtoStationsCmd = aValue;
+	IRLOG_DEBUG( "CIRMainView::ResetPendingRequests  - Exiting." );
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRMainView :: GetAddDimmingStatus()
+// Returns status for making the edit option dimmed or not..
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainView::GetAddDimmingStatus()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetAddDimmingStatus  - Entering." );
+	IRLOG_DEBUG( "CIRMainView::GetAddDimmingStatus  - Exiting." );
+	if(iContainer->GetListPointer()->CurrentItemIndex()==0 && iContainer->GetLastPlayedChannel())
+		{
+		return EFalse;
+		}
+	else
+		{
+		return ETrue;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView :: GetEditDimmingStatus()
+// Returns status for making the edit option dimmed or not..
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainView::GetEditDimmingStatus()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetEditDimmingStatus  - Entering." );
+	TInt favIndex = 0;
+	TInt currentIndex = 0;
+	currentIndex = iContainer->GetListPointer()->CurrentItemIndex();
+	if(currentIndex!= -1)
+		{
+		// If last played station exist
+		if(iContainer->GetLastPlayedChannel())
+			{
+		 	favIndex = GetCurrentIndex();
+			}
+		else
+			{
+			favIndex = iContainer->GetListPointer()->CurrentItemIndex();
+			}
+		// If focus is on last played station
+		if((currentIndex == 0) && (iContainer->GetLastPlayedChannel()))
+			{
+			return ETrue;
+			}
+		if(favIndex <=iUi->iFavPresets->iFavPresetList.Count() &&
+				iUi->iFavPresets->iFavPresetList[favIndex]->GetChannelType() == 0)
+			{
+			return EFalse;
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::GetEditDimmingStatus  - Exiting." );
+	return ETrue;
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView :: GetMainContainer()
+// returns pointer to main container..
+// ---------------------------------------------------------------------------
+//
+CIRMainContainer* CIRMainView::GetMainContainer()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetMainContainer  - Entering." );
+	return iContainer;
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::ConnectToLastPlayedStationL()
+// Connects to the last played station.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::ConnectToLastPlayedStationL()
+	{
+	IRLOG_DEBUG( "CIRMainView::ConnectToLastPlayedStationL - Entering" );
+	if(iNowPlayingWrapper->iNowPlayingPreset)
+	*iNowPlayingWrapper->iNowPlayingPreset=*iUi->iLastPlayed->iLastPlayedStation;
+	TBuf8<KUrlbufMaxLength> urlbuf;
+	urlbuf.Copy(iUi->iLastPlayed->iLastPlayedStation->iUrlArray->At(0)->iURL->Des());
+	iUi->iNPPrevViewId = KIRMainChoiceViewID;
+	iNowPlayingWrapper->SetView(ELastplayed);
+	TConnectedFrom connectedfrom = EIRPresetIsds;
+	iNowPlayingWrapper->SetCurrentConnectionSource(connectedfrom);
+	iNowPlayingWrapper->ConnectToChannelL(*iUi->iLastPlayed->iLastPlayedStation);
+	IRLOG_DEBUG( "CIRMainView::ConnectToLastPlayedStationL - Exiting." );
+	}
+
+// ----------------------------------------------------------------------------
+// CIRMainView::SetUrlFromPresetL( TInt aUrlIndex )
+// Checks whether the url name contains only spaces and if the descriptor really was.
+// empty replaces its content with default name
+// ----------------------------------------------------------------------------
+//
+void CIRMainView::SetUrlFromPresetL(TInt aUrlIndex)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetUrlFromPresetL - Entering" );
+	iNowPlayingWrapper->SetView(EFav);
+	//iNowPlayingWrapper->SetConnectToServerState(ETrue)
+	if(aUrlIndex <= iUi->iFavPresets->iFavPresetList.Count())
+	iUi->iFavPresets->iFavPresetList[aUrlIndex]->CopyPresetData(*iNowPlayingWrapper->
+													iNowPlayingPreset);
+	iUi->iNPPrevViewId = KIRSavedStationsViewID;
+	//connected from saved preset
+	iNowPlayingWrapper->SetCurrentConnectionSource(EIRPresetIsds);
+	//Checking for valid url, Start
+	TBool urlStatus = FALSE;
+	//executed for user defined channels
+	if( !iNowPlayingWrapper->iNowPlayingPreset->GetId() &&
+					iNowPlayingWrapper->iNowPlayingPreset->GetUrlCount() > 0 )
+		{
+		//to get the only url available for user defined channel
+		urlStatus = iUi->ParseAndPrepareUrl(iNowPlayingWrapper->
+									iNowPlayingPreset->GetChannelUrlAtL(0));
+		if( !urlStatus )
+			{
+			HBufC *infoBuf = StringLoader::LoadL(R_IRAPP_ERROR_ADDRESS);
+			delete infoBuf;
+			return;
+			}
+		}
+	//Checking for valid url, End
+	if( iContainer )
+		{
+		iContainer->CheckConnectionL(aUrlIndex);
+		}
+	IRLOG_DEBUG( "CIRMainView::SetUrlFromPresetL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView::DoConnectChannelL()
+// Connects to the channel identified by the supplied index.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::DoConnectToChannelL( TInt /*aUrlIndex*/ )
+	{
+	IRLOG_DEBUG( "CIRMainView::DoConnectToChannelL - Entering" );
+/*d	if(aUrlIndex <= iUi->iFavPresets->iFavPresetList.Count() &&
+		iUi->iFavPresets->iFavPresetList[aUrlIndex]->GetChannelType())
+		{
+		iIsdsWrapper->SetSyncPresetObserver(this);
+		SyncPresetL(iUi->iFavPresets->iFavPresetList[aUrlIndex]->GetId(),
+		iUi->iFavPresets->iFavPresetList[aUrlIndex]->GetLastModifiedTime());
+		}
+d*/
+	iNowPlayingWrapper->ConnectToChannelL(*iNowPlayingWrapper->iNowPlayingPreset);
+	IRLOG_DEBUG( "CIRMainView::DoConnectToChannelL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::SyncPresetL()
+// Connects to the channel identified by the supplied index.
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::SyncPresetL(TInt aChid,const TDesC &aModifiedTime)
+	{
+	IRLOG_DEBUG( "CIRMainView::SyncPresetL  - Entering." );
+	//sync state set to pending
+	//	iUi->SetSyncState(ESyncReqPending)
+	iUi->iNowPlayingWrapper->CreateWaitDialogL();
+	iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+	iSyncReq = ETrue;
+	iUi->iNowPlayingWrapper->iSyncPreset = ETrue;
+	iIsdsWrapper->SetSyncPresetObserver(this,this);
+	iIsdsWrapper->SetSyncReqFromMainView(ETrue);
+	iIsdsWrapper->GetISDSInstance()->SyncPresetL(aChid,aModifiedTime);
+	IRLOG_DEBUG( "CIRMainView::SyncPresetL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::GetListBoxMarkedCount()
+// returns the listbox count.
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainView::GetListBoxMarkedCount()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetListBoxMarkedCount" );
+	return iMarkedItemCount;
+	}
+// ---------------------------------------------------------
+// CIRMainView::SetListBoxMarkedCount
+// Sets the listbox marked count
+// ---------------------------------------------------------
+//
+void CIRMainView::SetListBoxMarkedCount(TInt aMarkedItemCount)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetListBoxMarkedCount - Entering." );
+	iMarkedItemCount = aMarkedItemCount;
+	IRLOG_DEBUG( "CIRMainView::SetListBoxMarkedCount - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::GetMarkedIndexArray()
+// returns the Marked array Index.
+// ---------------------------------------------------------------------------
+//
+RArray<TInt> CIRMainView::GetMarkedIndexArray()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetMarkedIndexArray" );
+	return iMarkedIndexArray;
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::GetMarkedFlag()
+// returns marked flag
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainView::GetMarkedFlag()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetMarkedFlag" );
+	return iMarkedFlag;
+	}
+// ---------------------------------------------------------
+// CIRBaseView::SetMarkedFlag
+// Sets the marked flag
+// ---------------------------------------------------------
+//
+void CIRMainView::SetMarkedFlag(TInt aMarkedFlag)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetMarkedFlag - Entering." );
+	iMarkedFlag = aMarkedFlag;
+	IRLOG_DEBUG( "CIRMainView::SetMarkedFlag - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::GetMarkedAllFlag()
+// returns marked all flag.
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainView::GetMarkedAllFlag()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetMarkedAllFlag" );
+	return iMarkedAllFlag;
+	}
+// ---------------------------------------------------------
+// CIRMainView::SetMarkedAllFlag
+// Sets the marked all flag
+// ---------------------------------------------------------
+//
+void CIRMainView::SetMarkedAllFlag(TInt aMarkedAllFlag)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetMarkedAllFlag - Entering." );
+	iMarkedAllFlag = aMarkedAllFlag;
+	IRLOG_DEBUG( "CIRMainView::SetMarkedAllFlag - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView::GetAddToFavouratesFlag()
+// returns whether any station has been added to favourates or not
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainView::GetAddToFavouratesFlag()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetAddToFavouratesFlag" );
+	return iAddToFavouratesFlag;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView :: GetLastPlayedStatus()
+// Returns status for making the edit option dimmed or not..
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainView::GetLastPlayedStatus()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetLastPlayedStatus - Entering." );
+	IRLOG_DEBUG( "CIRMainView::GetLastPlayedStatus - Exiting." );
+	if(iContainer && iContainer->GetListPointer()->CurrentItemIndex()==0
+	   && iContainer->GetLastPlayedChannel())
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView :: GetCurrentIndex()
+// Returns actual index of the station depending on the lastplayed/ filtering.
+// ---------------------------------------------------------------------------
+//
+TInt CIRMainView::GetCurrentIndex()
+	{
+	IRLOG_DEBUG( "CIRMainView::GetCurrentIndex - Entering." );
+	TInt currentIndex ;
+	SetCurrentFocus(iContainer->GetListPointer()->CurrentItemIndex());
+	if(iContainer->GetSearchBoxPointer())
+		{
+		TBuf<KDummyLength> findString;
+		iContainer->GetSearchBoxPointer()->GetSearchText(findString);
+		if((findString.Length()==0))
+			{
+			// If current item index is other than Last played station
+			// If Last played Exists then the index of Favorite preset is one less than the current item index.
+			if(iUi->iLastPlayed->FileExists())
+				{
+				currentIndex = iContainer->GetListPointer()->CurrentItemIndex()-1;
+				}
+			// If Last played doesn't exists then the index of Favorite preset is the same as current item index.
+			else
+				{
+				currentIndex = iContainer->GetListPointer()->CurrentItemIndex();
+				}
+			}
+		else
+			{
+			if(findString.Length()!=0)
+				{
+				iContainer->Comparestrings();
+				SetCurrentFocus(iFilteredIndex);
+				if(iUi->iLastPlayed->FileExists())
+					{
+					iFilteredIndex = iFilteredIndex -1;
+					}
+
+				currentIndex = iFilteredIndex;
+				}
+			}
+		}
+	else
+		{
+		// If Last played Exists then the index of Favorite preset is one less than the current item index.
+		if(iUi->iLastPlayed->FileExists())
+			{
+			currentIndex = iContainer->GetListPointer()->CurrentItemIndex()-1;
+			}
+		// If Last played doesn't exists then the index of Favorite preset is the same as current item index.
+		else
+			{
+			currentIndex = iContainer->GetListPointer()->CurrentItemIndex();
+			}
+
+		}
+	IRLOG_DEBUG( "CIRMainView::GetCurrentIndex - Exiting." );
+	return currentIndex;
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::GetRequestPendingStatus()
+// returns whether an active request is pending.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainView::GetRequestPendingStatus()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetRequestPendingStatus" );
+	return iRequestPending;
+	}
+// ---------------------------------------------------------
+// CIRMainView::SetRequestPendingStatus ()
+// Sets the request pending state
+// ---------------------------------------------------------
+//
+void CIRMainView::SetRequestPendingStatus(TBool aRequestPending)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetRequestPendingStatus - Entering." );
+	iRequestPending = aRequestPending;
+	IRLOG_DEBUG( "CIRMainView::SetRequestPendingStatus - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView::GetFavListen()
+// returns Checks whether request is listen to favorites.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainView::GetFavListen()
+	{
+	IRLOG_DEBUG( "CIRMainContainer::GetFavListen" );
+	return iFavListen;
+	}
+// ---------------------------------------------------------
+// CIRMainView::SetFavListen ()
+// Sets the listen is from favourites or not
+// ---------------------------------------------------------
+//
+void CIRMainView::SetFavListen(TBool aFavListen)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetFavListen - Entering." );
+	iFavListen = aFavListen;
+	IRLOG_DEBUG( "CIRMainView::SetFavListen - Exiting." );
+	}
+// ---------------------------------------------------------
+// CIRMainView::SetActualFilteredItemIndex ()
+// Sets the actual index of the station
+// ---------------------------------------------------------
+//
+void CIRMainView::SetActualFilteredItemIndex(TInt aFilteredIndex)
+	{
+	IRLOG_DEBUG( "CIRMainView::SetActualFilteredItemIndex - Entering." );
+	iFilteredIndex = aFilteredIndex;
+	IRLOG_DEBUG( "CIRMainView::SetActualFilteredItemIndex - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView :: GetMovingFlag()
+// Gets the view is in move mode or not.
+// ---------------------------------------------------------------------------
+//
+TBool CIRMainView::GetMovingFlag()
+	{
+	return iMoveMarkedFlag;
+	}
+// ---------------------------------------------------------------------------
+// CIRMainView :: SetMovingFlag()
+// Sets the view is in move mode .
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::SetMovingFlag(TBool aValue)
+	{
+	iMoveMarkedFlag = aValue;
+	}
+
+
+// ------------------------------------------------------------------------
+// from MSyncPresetObserver
+// SyncPresetRemovedL()
+// called back when the preset that is synced was removed from isds
+// @param TInt,the preset id
+// -----------------------------------------------------------------------
+void CIRMainView::SyncPresetRemovedL(TInt aId)
+	{
+	IRLOG_DEBUG( "CIRMainView::SyncPresetRemovedL - Entering." );
+
+	iSyncReq = EFalse;
+
+	if( !iContainer )
+		return;
+
+	if( iUi->iLastPlayed->FileExists() &&
+	iUi->iLastPlayed->iLastPlayedStation->GetId() == aId)
+		{
+		// update the last played station
+		//convert the flag to user defined and commit
+		//0 for EUserDefined
+		iUi->iLastPlayed->iLastPlayedStation->SetChannelType(KNull);
+		//assign null id
+		iUi->iLastPlayed->iLastPlayedStation->SetId(KNull);
+
+		//make logo as null
+		_LIT8(KEmpty, "");
+		RBuf8 tempLogo;
+		tempLogo.Create(KEmpty);
+		iUi->iLastPlayed->iLastPlayedStation->SetLogoData(tempLogo);
+		tempLogo.Close();
+		_LIT(KEmptyString, "");
+		RBuf tempString;
+		tempString.Create(KEmptyString);
+		//set imgurl to null
+		iUi->iLastPlayed->iLastPlayedStation->SetImgUrl(tempString);
+		//set genre to null
+		iUi->iLastPlayed->iLastPlayedStation->SetGenreName(tempString);
+		iUi->iLastPlayed->iLastPlayedStation->SetGenreId(tempString);
+		//set language to null
+		iUi->iLastPlayed->iLastPlayedStation->SetLang(tempString);
+		//set country to null
+		iUi->iLastPlayed->iLastPlayedStation->SetCountryName(tempString);
+		tempString.Close();
+		//set musicStoreEnabled filed to "no"
+		_LIT(KNo, "no");
+		RBuf tempMusicStoreEnabled;
+		tempMusicStoreEnabled.Create(KNo);
+		iUi->iLastPlayed->iLastPlayedStation->SetMusicStoreStatus(tempMusicStoreEnabled);
+		tempMusicStoreEnabled.Close();
+
+		//save the changes to the lastplayed file
+		TRAPD(err,iUi->iLastPlayed->CommitLastPlayedChannelL());
+		TInt error=KErrNone;
+		if(err != KErrNone)
+			{
+			error = iUi->iLastPlayed->RemoveLastPlayedFile();
+			User::Leave(error);
+			}
+		}
+	iContainer->RefreshViewL();
+	TInt currentIndex = GetCurrentIndex();
+	if(iContainer->GetCurrentItemIndex() ==0 && iUi->iLastPlayed->FileExists())
+		{
+		iUi->iLastPlayed->RetriveLastPlayedChannelL();
+		ConnectToLastPlayedStationL();
+		}
+	else
+		{
+		SetUrlFromPresetL(currentIndex);
+		}
+	IRLOG_DEBUG( "CIRMainView::SyncPresetRemovedL - Entering." );
+	}
+
+// -----------------------------------------------------------------------
+// from MSyncPresetObserver
+// SyncPresetChangedL()
+// called back when the preset that is synced has been changed in the isds
+// @param CIRIsdsPreset&,the new preset data
+// ----------------------------------------------------------------------
+void CIRMainView::SyncPresetChangedL(CIRIsdsPreset& aPreset)
+	{
+	IRLOG_DEBUG( "CIRMainView::SyncPresetChangedL - Entering." );
+
+	iSyncReq = EFalse;
+
+	if( !iContainer )
+		return;
+
+	if( iUi->iLastPlayed->FileExists() &&
+		iUi->iLastPlayed->iLastPlayedStation->GetId() == aPreset.GetId())
+		{
+		aPreset.SetChannelType(KIsdsPreset);
+		*iUi->iLastPlayed->iLastPlayedStation = aPreset;
+		//save the changes to the lastplayed file
+		TRAPD(err,iUi->iLastPlayed->CommitLastPlayedChannelL());
+		TInt error=KErrNone;
+		if(err != KErrNone)
+			{
+			error = iUi->iLastPlayed->RemoveLastPlayedFile();
+			User::Leave(error);
+			}
+		}
+	iContainer->RefreshViewL();
+	TInt currentIndex = GetCurrentIndex();
+	if(iContainer->GetCurrentItemIndex() ==0 && iUi->iLastPlayed->FileExists())
+		{
+		iUi->iLastPlayed->RetriveLastPlayedChannelL();
+		ConnectToLastPlayedStationL();
+		}
+	else
+		{
+		SetUrlFromPresetL(currentIndex);
+		}
+	IRLOG_DEBUG( "CIRMainView::SyncPresetChangedL - Entering." );
+	}
+
+// -----------------------------------------------------------------------
+// from MSyncPresetObserver
+// SyncPresetNoChangeL()
+// called back when the preset that is synced has not been changed
+// -----------------------------------------------------------------------
+void CIRMainView::SyncPresetNoChangeL()
+	{
+	IRLOG_DEBUG( "CIRMainView::SyncPresetNoChangeL - Entering." );
+
+	iSyncReq = EFalse;
+
+	if( !iContainer )
+		return;
+	iUi->iNowPlayingWrapper->iSyncPreset = EFalse;
+	TInt currentIndex = GetCurrentIndex();
+	if(iContainer->GetCurrentItemIndex() ==0 &&iUi->iLastPlayed->FileExists())
+		{
+		ConnectToLastPlayedStationL();
+		}
+	else
+		{
+		SetUrlFromPresetL(currentIndex);
+		}
+	IRLOG_DEBUG( "CIRMainView::SyncPresetNoChangeL - Entering." );
+	}
+
+// ----------------------------------------------------------------------
+// CIRMainView::ConnectToSelectedStationL()
+// Used to synchronize the LastPlayed preset before listen
+// ----------------------------------------------------------------------
+void CIRMainView::ConnectToSelectedStationL()
+	{
+	IRLOG_DEBUG("CIRMainView::ConnectToSelectedStationL - Entering");
+
+	if( !iContainer )
+		return;
+
+	TInt currentIndex = GetCurrentIndex();
+
+	// Connect to User defined / Last Played preset
+	if(iContainer->GetCurrentItemIndex() == 0
+		&& iUi->iLastPlayed->FileExists()
+		&& iUi->iLastPlayed->iLastPlayedStation->GetChannelType() == CIRIsdsPreset::EUserDefined)
+		{
+		if(iNowPlayingWrapper->iPlaying)
+			{
+			HandleCommandL(EGotoNowPlayingViewCmd);
+			}
+		else
+			{
+			ConnectToLastPlayedStationL();
+			}
+		}
+
+	// Sync ISDS / Last Played preset
+	else if(iContainer->GetCurrentItemIndex() == 0
+		&& iUi->iLastPlayed->FileExists()
+		&& iUi->iLastPlayed->iLastPlayedStation->GetChannelType())
+		{
+		if(iNowPlayingWrapper->iPlaying)
+			{
+			HandleCommandL(EGotoNowPlayingViewCmd);
+			}
+		else
+		{
+		SyncPresetL(iUi->iLastPlayed->iLastPlayedStation->GetId(),
+			iUi->iLastPlayed->iLastPlayedStation->GetLastModifiedTime());
+		}
+		}
+
+	// Connect to User defined preset
+	else if(currentIndex <= iUi->iFavPresets->iFavPresetList.Count()
+		&& iUi->iFavPresets->iFavPresetList[currentIndex]->GetChannelType()
+		   == CIRIsdsPreset::EUserDefined)
+		{
+		SetUrlFromPresetL(currentIndex);
+		}
+
+	// Sync ISDS preset
+	else if(currentIndex <= iUi->iFavPresets->iFavPresetList.Count()
+		&& iUi->iFavPresets->iFavPresetList[currentIndex]->GetChannelType())
+		{
+		SyncPresetL(iUi->iFavPresets->iFavPresetList[currentIndex]->GetId(),
+					iUi->iFavPresets->iFavPresetList[currentIndex]->GetLastModifiedTime());
+		}
+
+	IRLOG_DEBUG("CIRMainView::ConnectToSelectedStationL - Exiting");
+	}
+
+
+void CIRMainView::AddStationtoFavoritesL()
+	{
+	IRLOG_DEBUG("CIRMainView::AddStationtoFavoritesL - Entering");
+	TInt err = KErrNone;
+	if(iUi->iLastPlayed->iLastPlayedStation->GetChannelType())
+		{
+		iUi->iFavPresets->AddPresetL(*iUi->iLastPlayed->iLastPlayedStation,err,1);
+		}
+	else
+		{
+		iUi->iFavPresets->AddPresetL(*iUi->iLastPlayed->iLastPlayedStation,err);
+		}
+	RBuf channel;
+	HBufC* textResource = StringLoader::LoadLC( R_IRAPP_STATIONS_POPUP_SAVED,
+		iUi->iLastPlayed->iLastPlayedStation->GetName() );
+	channel.Create(*textResource);
+
+	//If favourites is full then display an error message
+	if(err==KErrNoMemory)
+		{
+		iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+						(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+		return;
+		}
+	else
+		{
+		if((err==KErrAlreadyExists )&&
+		 ( iUi->iFavPresets->iFavPresetList.Count() == KPresetsArrayMaxLength) )
+			{
+			iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+							(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+			return;
+			}
+		else
+			{
+			iIsdsWrapper->GetDialogLauncherInstance()->
+			ShowConfirmationNoteL( channel,ETrue );
+			}
+		}
+	CleanupStack::PopAndDestroy(textResource);
+	channel.Close();
+	IRLOG_DEBUG("CIRMainView::AddStationtoFavoritesL - Exiting");
+	}
+
+// ---------------------------------------------------------------------------
+// CIRMainView::LogoRequestL()
+// called from the container
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::LogoRequestL()
+	{
+	IRLOG_DEBUG( "CIRMainView::LogoRequestL - Entering" );
+	if(iContainer)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+		GetLogoDownloadEngine()->SendRequestL(iContainer->GetTempPreset(),this,
+									KLPReqFrom,KLPLogoSize,KLPLogoSize);
+		}
+	IRLOG_DEBUG( "CIRMainView::LogoRequestL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRMainView::PresetLogoDownloadedL()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRMainView::PresetLogoDownloadedL - Entering" );
+	if(iContainer)
+		{
+		// store the last played station
+		iUi->iLastPlayed->iLastPlayedStation->SetLogoData(aPreset->GetLogoData());
+		TRAPD(err,iUi->iLastPlayed->CommitLastPlayedChannelL());
+		TInt error=KErrNone;
+		if(err != KErrNone)
+			{
+			error = iUi->iLastPlayed->RemoveLastPlayedFile();
+			User::Leave(error);
+			}
+		iUi->iLastPlayed->RetriveLastPlayedChannelL();
+		iContainer->PresetLogoDownloadL(aPreset);
+		}
+	IRLOG_DEBUG( "CIRMainView::PresetLogoDownloadedL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRMainView::PresetLogoDownloadError()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRMainView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRMainView::PresetLogoDownloadError " );
+	//call the API of search results view container
+	if(iContainer)
+		{
+		TRAP_IGNORE(iContainer->HandleLogoErrorL());
+		}
+	IRLOG_DEBUG( "CIRMainView::PresetLogoDownloadErrorL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------
+// ResponseL()
+// From the class MViewsResponseAndErrorObserver
+// ---------------------------------------------------------------------
+void CIRMainView::ResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRMainView::ResponseL " );
+	IRLOG_DEBUG( "CIRMainView::ResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------
+// PresetResponseL()
+// From the class MViewsResponseAndErrorObserver
+// ---------------------------------------------------------------------
+void CIRMainView::PresetResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRMainView::PresetResponseL " );
+	IRLOG_DEBUG( "CIRMainView::PresetResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------
+// ErrorL()
+// From the class MViewsResponseAndErrorObserver
+// ---------------------------------------------------------------------
+void CIRMainView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRMainView::ErrorL " );
+	IRRDEBUG2("CIRMAINVIEW::ERRORL",KNullDesC);
+	if(iSyncReq)
+		{
+		iSyncReq = EFalse;
+		iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+
+		iUi->iNowPlayingWrapper->DestroyWaitDialogL();
+		}
+	IRLOG_DEBUG( "CIRMainView::ErrorL - Exiting" );
+	}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irmediaclient.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,451 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <e32property.h>
+#include "irpubsubkeys.h"
+
+#include "irctrlcmdobserver.h"
+#include "irdebug.h"
+#include "irmediaclient.h"
+#include "irmediaenginebuffer.h"
+#include "irmediaengineinterface.h"
+#include "ircontrolparams.h"
+
+const TInt KZeroVolumeLevel = 0;
+const TInt KIRBitRateDivider = 8;    // To convert bits to bytes.
+const TInt KIRByteMultiplier = 1024; // To convert kilo bytes to bytes.
+const TInt KIRValidBitRate = 0;      // Starting point for valid bit rate.
+const TInt KIRDefBitRate = 64;       // Default bit rate for buffer size calculation.
+const TInt KIRMinBitRate = 8;        // Minimum bit rate for buffer size calculation.
+const TInt KIRMaxBitRate = 192;      // Maximum bit rate for buffer size calculation.
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Two Phase Constructor - NewL
+// ---------------------------------------------------------------------------
+//	 
+CIRMediaClient* CIRMediaClient::NewL(CIRCtrlCmdObserver* aChannel)
+	{
+	IRLOG_DEBUG( "CIRMediaClient::NewL - Entering" );
+	CIRMediaClient* self = NewLC(aChannel);
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRMediaClient::NewL - Exiting." );
+    return self;	
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// Two Phase Constructor - NewLC
+// ---------------------------------------------------------------------------
+//
+CIRMediaClient* CIRMediaClient::NewLC(CIRCtrlCmdObserver* aChannel)
+	{
+	IRLOG_DEBUG( "CIRMediaClient::NewLC - Entering" );
+	CIRMediaClient* self = new (ELeave) CIRMediaClient();
+    CleanupStack::PushL(self);
+    self->ConstructL(aChannel);
+	IRLOG_DEBUG( "CIRMediaClient::NewLC - Exiting." );
+    return self;	
+	}
+
+// ---------------------------------------------------------------------------
+// destructor function
+// destructor of the player component
+// ---------------------------------------------------------------------------
+//
+CIRMediaClient::~CIRMediaClient()
+    {
+	IRLOG_DEBUG( "CIRMediaClient::~CIRMediaClient - Entering" );
+	//deletes the player
+	delete iPlayer;
+	//deletes the buffers associated with player
+	delete[] iTempBuffer;
+	delete[] iCurrentBuffer;
+	IRLOG_DEBUG( "CIRMediaClient::~CIRMediaClient - Exiting." );
+    }
+    	
+// ---------------------------------------------------------------------------
+// This is default Constructor
+// for the class CIRMediaClient
+// ---------------------------------------------------------------------------
+//	
+CIRMediaClient::CIRMediaClient():iInputBuffer(NULL,0,0) 
+	{
+	IRLOG_DEBUG( "CIRMediaClient::CIRMediaClient" );
+	}
+
+// ---------------------------------------------------------------------------
+// Two phase ConstructL
+// network component is taken as input
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::ConstructL(CIRCtrlCmdObserver* aChannel)
+    {
+	IRLOG_DEBUG( "CIRMediaClient::ConstructL - Entering" );
+	iChannel = aChannel;
+	IRLOG_DEBUG( "CIRMediaClient::ConstructL - Exiting" );
+	}
+						
+										   //For Play control
+										   
+// ---------------------------------------------------------------------------
+// Function : PlayL
+// Starts to play the stream
+// ---------------------------------------------------------------------------
+//
+TInt CIRMediaClient::Play()
+	{
+	IRLOG_DEBUG( "CIRMediaClient::Play - Entering" );
+	IRLOG_DEBUG( "CIRMediaClient::Play - Exiting" );
+	//sents a play request to media engine
+	if( iPlayer )
+		{
+		iPlayer->Play();
+		IRLOG_DEBUG( "CIRMediaClient::Play - Exiting (1)." );
+		return KErrNone;
+		}
+	else
+		{
+		IRLOG_DEBUG( "CIRMediaClient::Play - Exiting (2)." );
+		return KErrNotFound;
+		}	
+	}
+
+// ---------------------------------------------------------------------------
+// Function : StopL
+// Stops to play the stream
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::Stop()
+	{
+	IRLOG_DEBUG( "CIRMediaClient::Stop - Entering" );
+	//sents a stop request to media engine
+	if( iPlayer )
+		{
+		iPlayer->Stop();
+		}
+	else
+		{
+		iCommand = EStoppedPlaying;
+		iChannel->SentRequest(iCommand,KErrNone);
+		}
+	IRLOG_DEBUG( "CIRMediaClient::Stop - Exiting." );
+	}
+										
+										 //For Volume Control
+// ---------------------------------------------------------------------------
+// Function : SetVolume
+// function to set the volume, 
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::SetVolume(TInt aVolume )
+	{
+	IRLOG_DEBUG( "CIRMediaClient::SetVolume - Entering" );
+	//if player is exists it will set the volume
+	if( iPlayer )
+		{
+		iPlayer->SetVolume(aVolume);	
+		}		
+	IRLOG_DEBUG( "CIRMediaClient::SetVolume - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : MaxVolume
+// ---------------------------------------------------------------------------
+//	
+TInt CIRMediaClient::MaxVolume() const
+	{
+	IRLOG_DEBUG( "CIRMediaClient::MaxVolume - Entering" );
+	IRLOG_DEBUG( "CIRMediaClient::MaxVolume - Exiting" );
+	//if player is created it will sent the max volume else return zero instead of MaxVolume
+	if( iPlayer )
+		{
+		IRLOG_DEBUG( "CIRMediaClient::MaxVolume - Exiting (1)." );
+		//returns maximum volume if player exists
+		return iPlayer->MaxVolume();	
+		}		
+	else
+		{
+		//else zero is returned
+		IRLOG_DEBUG( "CIRMediaClient::MaxVolume - Exiting (2)." );
+		return KZeroVolumeLevel;	
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Volume
+// function to returns the volume
+// ---------------------------------------------------------------------------
+//		
+TInt CIRMediaClient::Volume() const
+	{
+	IRLOG_DEBUG( "CIRMediaClient::Volume - Entering" );
+	IRLOG_DEBUG( "CIRMediaClient::Volume - Exiting" );
+	//if player is created it will sent the volume else return zero instead of Volume
+	if( iPlayer )
+		{
+		//if player exist it returns the current volume
+		IRLOG_DEBUG( "CIRMediaClient::Volume - Exiting (1)." );
+		return iPlayer->Volume();	
+		}		
+	else
+		{
+		//else will return negative volume
+		IRLOG_DEBUG( "CIRMediaClient::Volume - Exiting (2)." );
+		return KZeroVolumeLevel;	
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Function: BufferFilled
+// Set the whether a Fill Buffer is currently active
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::BufferFilled()
+	{
+	IRLOG_DEBUG( "CIRMediaClient::BufferFilled - Entering" );
+	if( iFirstTime )
+		{
+		//First all the buffers are filled
+		iInputBufferPtr += iConfig.iPlayBufferSize;	
+		if( (iInputBufferPtr + iConfig.iPlayBufferSize) <= 
+			(iTempBuffer + iConfig.iPlayBufferCount*iConfig.iPlayBufferSize) )
+			{
+			//buffer is not completely filled
+			iInputBuffer.Set(iInputBufferPtr,iConfig.iPlayBufferSize,iConfig.iPlayBufferSize);	
+			
+			if( iStopBuffering )
+				{
+				//if iStopBuffering is true we won't continue in this loop
+				return;		
+				}			
+			else // if not stop buffering is called
+				{
+				//fills the buffer and sents the buffer percentage
+				iChannel->FilltheBuffer(iInputBuffer);			
+				}				
+			}
+		else
+			{
+			//buffer is completely filled
+			iFirstTime = EFalse;
+			iNewPlayer = EFalse;
+			if( iStopBuffering )
+				{
+				//if stop buffering is true we will not proceed further
+				return;	
+				}
+			else
+				{
+                // Error reporting done inside CreatePlayer
+				if ( CreatePlayer() )
+				    {
+				    // Sending this event causes NowPlayingView activation
+				    iBufferPercentage = K100Percentage;				
+				    iChannel->SentRequest( EBufferFillStop, iBufferPercentage );	
+				
+				    //player has already buffered completely for the first time
+				    //so even if StopInitialBuffering is called media client is help less
+				    //to handle this situation iStopBuffering is made ETrue
+				    iStopBuffering = ETrue;
+
+				    //called for intializing a new player
+				    InitializePlayer( iConfig,iChannel );
+				
+				    //calls play for the first time
+				    iPlayer->Play();
+				    }
+				}									
+			}
+		}
+	else
+		{
+		//buffer is already filled for first time
+		//media engine is created and playing so Buffer filled 
+		//function of media Engine should be called
+		iPlayer->BufferFilled();				
+		}			
+	IRLOG_DEBUG( "CIRMediaClient::BufferFilled - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// Function: StartNewPlayerL
+// Set the whether a Fill Buffer is currently active
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::StartNewPlayerL(TConfig& aConfig,const TDesC8& aFormat
+	)
+	{
+	IRLOG_DEBUG( "CIRMediaClient::StartNewPlayerL - Entering" );
+	//format is copied
+	iFormat.Copy(aFormat);
+
+	//stop of intial buffering from media client is enable
+	iStopBuffering = EFalse;
+	
+	iConfig = aConfig;
+
+	TInt bitRate(0);
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSBitrate, bitRate );
+    // Next line will round the bitrate down to be divisible by KIRBitRateDivider.
+	bitRate = bitRate - (bitRate % KIRBitRateDivider);
+	if( bitRate <= KIRValidBitRate )
+	    {
+	    // If invalid bit rate info, use default bit rate for calculating buffer sizes.
+	    bitRate = KIRDefBitRate;
+	    }
+	else if( bitRate < KIRMinBitRate )
+	    {
+	    // If small bit rate info, use minimum bit rate for calculating buffer sizes.
+	    // To make single buffer minimum size 1 kB.
+	    bitRate = KIRMinBitRate;
+	    }
+	else if( bitRate > KIRMaxBitRate )
+	    {
+	    // If large bit rate info, use maximum bit rate for calculating buffer sizes.
+	    // To make single buffer maximum size 24 kB.
+	    bitRate = KIRMaxBitRate;
+	    }
+	else
+	    {
+	    }
+	iConfig.iPlayBufferCount = KIRInputBufferCount;
+    iConfig.iPlayBufferSize = KIRByteMultiplier*bitRate/KIRBitRateDivider;
+	
+	//creates a new instance of media buffer for new player
+	iTempBuffer = new (ELeave) TUint8[iConfig.iPlayBufferCount*iConfig.iPlayBufferSize];
+	iInputBufferPtr = iTempBuffer;
+
+	//initial buffering starts
+	iInputBuffer.Set(iInputBufferPtr,iConfig.iPlayBufferSize,iConfig.iPlayBufferSize);
+	iNewPlayer = ETrue;
+	iFirstTime = ETrue;
+
+	//initial buffering starts
+	iChannel->FilltheBuffer(iInputBuffer);	
+	
+	//starts audio fade out for the previous channel
+	IRLOG_DEBUG( "CIRMediaClient::StartNewPlayerL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: StopMediaBuffering
+// stops buffering of media engine, the change cannot be reverted 
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::StopMediaBuffering()
+	{
+	IRLOG_DEBUG( "CIRMediaClient::StopMediaBuffering - Entering" );
+	//calls media engine's stop buffering cancels the buffering in media engine
+	if( iPlayer )
+		{
+		iPlayer->StopPlayerBuffering();	
+		}			
+	IRLOG_DEBUG( "CIRMediaClient::StopMediaBuffering - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: StopInitialBuffering
+// stops buffering from media client, media engine is not stopped 
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::StopInitialBuffering()
+	{
+	IRLOG_DEBUG( "CIRMediaClient::StopInitialBuffering - Entering" );
+	//initially buffering is taken care by media client and then 
+	//it shift the responsibility to media engine
+	//this is done because audio fade out has to take place when other channel buffers
+	//if media client is handling the buffer it should be stopped
+	//media client is handling the buffering
+	iStopBuffering = ETrue;
+	
+	delete[] iTempBuffer;
+	iTempBuffer = NULL;
+	
+	iCommand=EStereo;
+	iChannel->SentRequest(iCommand,KErrNone);
+	delete iPlayer;
+	iPlayer = NULL;
+	
+	iStopBuffering = ETrue;
+	//return true to indicate success of cancelling of buffer
+	IRLOG_DEBUG( "CIRMediaClient::StopInitialBuffering - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function: SetCodecSettings
+// Creates an instance of the players and initialize it
+// ---------------------------------------------------------------------------
+//
+TBool CIRMediaClient::CreatePlayer()
+	{
+    IRLOG_DEBUG( "CIRMediaClient::CreatePlayer" );
+    TBool createResult( ETrue );
+	//delete the instance of previously created player
+	iCommand=EStereo;
+	iChannel->SentRequest(iCommand,KErrNone);
+    if ( iPlayer )
+    	{
+    	delete iPlayer;
+    	iPlayer = NULL;
+    	}
+		
+	//media engine's instance is created type is stored in iFormat (basically the mime type)
+	TRAPD(error,iPlayer = CIRMediaEngineInterface::NewL(iFormat));
+    if( error )
+        {
+        iChannel->SentRequest( EError, KIRCtrlCmdPlayerNotCreated );
+        createResult = EFalse;
+        }
+    
+    return createResult;    
+	}
+// ---------------------------------------------------------------------------
+// CIRMediaClient::InitializePlayer
+// ---------------------------------------------------------------------------
+//
+void CIRMediaClient::InitializePlayer( TConfig& aConfig,
+	CIRCtrlCmdObserver* aChannel)
+	{
+	IRLOG_DEBUG( "CIRMediaClient::SetCodecSettings" );
+
+	//delete the instance of buffer associated with previously playing player
+	delete[] iCurrentBuffer;
+	iCurrentBuffer = NULL;
+	
+	//current buffer is made same as previous buffer
+	iCurrentBuffer = iTempBuffer;
+	iTempBuffer = NULL;
+		
+	//intialize the media engine
+	iPlayer->Intialize(aConfig,iCurrentBuffer,aChannel);
+	IRLOG_DEBUG( "CIRMediaClient::SetCodecSettings - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetMediaClientInstance()
+// Returns the Audio Player Instance
+// ---------------------------------------------------------------------------
+//
+CMdaAudioOutputStream* CIRMediaClient::GetPlayerInstance()
+	{
+	IRLOG_DEBUG( "CIRMediaClient::GetMediaClientInstance " );
+	return (iPlayer->GetAudioPlayer());	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irmessageobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2006-2007 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 <msvids.h> // Folder Ids
+
+#include "irmessageobserver.h"
+#include "irdebug.h"
+#include "irui.h"
+ 
+
+
+ 
+// When using the emulator the observed folder is Drafts, otherwise Inbox.
+#ifdef __WINS__
+	const TMsvId KDrafts = KMsvDraftEntryId;
+    const TMsvId KObservedFolderId = KDrafts;
+#else
+	const TMsvId KInbox = KMsvGlobalInBoxIndexEntryId;
+    const TMsvId KObservedFolderId = KInbox;
+#endif
+ 
+// ------------------------------------------------------------
+// CIRMessageObserver::NewL(CIRUi* aUi)
+// 2nd phase constructor.
+// ------------------------------------------------------------
+CIRMessageObserver* CIRMessageObserver::NewL(CIRUi* aUi)
+    {
+    IRLOG_DEBUG( "CIRMessageObserver::NewL - Entering" );
+    CIRMessageObserver* self = CIRMessageObserver::NewLC(aUi);
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRMessageObserver::NewL - Exiting" );
+    return self;
+    }
+ 
+// -----------------------------------------------------------
+// CIRMessageObserver::NewL(CIRUi* aUi)
+//  2nd phase constructor.
+// -----------------------------------------------------------
+CIRMessageObserver* CIRMessageObserver::NewLC(CIRUi* aUi)
+    {
+    IRLOG_DEBUG( "CIRMessageObserver::NewLC - Entering" );
+    CIRMessageObserver* self = new (ELeave) CIRMessageObserver(aUi);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRMessageObserver::NewLC - Exiting" );
+    return self;
+    }
+ 
+// --------------------------------------------------------------
+// CIRMessageObserver(CIRUi* aUi)
+// Symbian OS default constructor.
+// --------------------------------------------------------------
+CIRMessageObserver::CIRMessageObserver(CIRUi* aUi) : iUi(aUi)
+    {
+    IRLOG_DEBUG( "CIRMessageObserver::CIRMessageObserver" );
+    }
+ 
+// --------------------------------------------------------------
+// CIRMessageObserver::ConstructL()
+// 2nd phase constructor.
+// --------------------------------------------------------------
+void CIRMessageObserver::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRMessageObserver::ConstructL - Entering" );
+    // SMS automatic receiving needs a session to the messaging server
+    iMsvSession = CMsvSession::OpenAsyncL(*this);
+    IRLOG_DEBUG( "CIRMessageObserver::ConstructL - Exiting" );
+    }
+ 
+// --------------------------------------------------------------
+// ~CIRMessageObserver()
+// Destructor.
+// --------------------------------------------------------------
+CIRMessageObserver::~CIRMessageObserver()
+    {
+    IRLOG_DEBUG( "CIRMessageObserver::~CIRMessageObserver - Entering" );
+    if (iMsvSession)
+        {
+        iMsvSession->Cancel();
+        }
+    delete iMsvSession;
+    iMsvSession = NULL;
+    IRLOG_DEBUG( "CIRMessageObserver::~CIRMessageObserver - Exiting" );
+    }
+ 
+// --------------------------------------------------------------
+// CIRMessageObserver::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+//        TAny* aArg2, TAny* /*aArg3*/)
+// From MMsvSessionObserver.
+// Called when a session event occurs.
+// --------------------------------------------------------------
+void CIRMessageObserver::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/,
+        TAny* aArg2, TAny* /*aArg3*/)
+    {
+    IRLOG_DEBUG( "CIRMessageObserver::HandleSessionEventL - Entering" );
+    switch (aEvent)
+        {
+		case EMsvEntriesCreated:
+//d        case EMsvEntriesChanged:
+            {
+            // If the event happens in the observed folder, notify the observer
+            if (aArg2 && *(static_cast<TMsvId*>(aArg2)) == KObservedFolderId)
+                {
+                iUi->HandleMessageAlertL();
+                }
+            break;
+            }
+        }
+    IRLOG_DEBUG( "CIRMessageObserver::HandleSessionEventL - Exiting" );
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irnowplayingview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3307 @@
+/*
+* Copyright (c)  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: 
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 18, Tue Mar 19 18:00:00 2008 by Rohit
+*  Ref:
+*  Implemented change request to display Byte Counter in KB till 0.1 MB, and in MB threrafter
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+// INCLUDE FILES
+
+
+#include <aknviewappui.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfenv.h>
+#include <alf/alfroster.h>
+#include <eikmenup.h>
+#include <eiklabel.h>
+#include <avkon.rsg>
+#include <aknnotewrappers.h>
+#include <internetradio.rsg>
+#include <data_caging_paths_strings.hrh>
+#include <mdaaudiosampleplayer.h>
+#include <stereowideningbase.h>
+#include <f32file.h> // for File operations
+#include <s32file.h> // for File operations
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <eikcolib.h>
+/* no need to change to lower case */
+#include <AknsConstants.h>
+#include <hlplch.h>
+#ifdef MUSICSHOP_AVAILABLE
+#include <mpxfindinmusicshop.h> //For Find in Shop
+#include <mpxmusicplayerviewplugin.hrh>
+/* no need to change to lower case */
+#include <MusicWapCenRepKeys.h>
+#endif
+#include <apgcli.h> //For Find in Shop
+#include <e32des8.h>
+#include <stringloader.h>
+#include <internetradio.mbg>
+#include <aknwaitdialog.h>
+#include <math.h> 				// floor()
+
+#include <mpxviewplugin.h>
+#include <mpxviewplugin.hrh>
+
+
+#include <featmgr.h>//Fmtransmitter
+#include <features.hrh>
+
+
+#include "iraap.hlp.hrh"
+
+#include "irpubsubkeys.h"
+#include "irisdspreset.h"
+#include "irfavoritesdb.h"
+#include "irisdswrapper.h"
+#include "irisdspreset.h"
+#include "mlogodownloadobserver.h"
+#include "irlogodownloadengine.h"
+#include "irbaseview.h"
+#include "irnowplayingviewcontainer.h"
+#include "irnowplayingview.h"
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irhistory.h"
+#include "irpreset.h"
+#include "irmetadata.h"
+#include "irsettings.h"
+#include "irstationlogocontrol.h"
+#include "irstationlogodata.h"
+#include "pspresetobserver.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irstationinformationdata.h"
+#include "irstationinformationdisplay.h"
+#include "irradioidle.h"
+#include "irdialoglauncher.h"
+#include "irmediaclient.h"
+#include "irnowplayingwrapper.h"
+#include "irstationinfoview.h"
+#include "irpubsub.h"
+
+
+#include "irsystemeventcollector.h"
+#include <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+#include "irnetworkcontroller.h"
+#include "msyncpresetobserver.h"	// MSyncPresetObserver
+
+_LIT( KIRMifFileName, "\\resource\\apps\\InternetRadio.mif" );
+
+const TInt KIRLogoArrayGranularity = 10; // Granularity for logo arrays
+const TInt KPresetNumbering = 4;//format 1-20.
+const TInt KOne =1;
+const TInt KSize =360;
+const TInt KMinVolume=0;
+const TInt KMaxVolumeRange=10;
+const TInt KMaxVolume=10;
+const TInt KWaitTimeInMicroSeconds = 100000;
+const TInt KMusicStoreURLSize = 512;
+
+// Constants for byte counter display
+const TInt KIRByteCounterDisplayThreshold1 = 10485760;	// 10 MB
+const TInt KIRByteCounterDisplayThreshold2 = 104857600;	// 100 MB
+const TInt KIRMBtoBytesConversion		   = 1048576;	// 1 MB
+
+//Literal Declaration
+_LIT(KConst1,"    ");
+//_LIT(KHiFn,"-")
+const TInt KTwo = 2;
+const TInt KChannelNameSize = 200;
+const TInt KTen=10;
+const TInt KHundred=100;
+const TUid KFmTxAppUid  = { 0x10282BEF };
+const TInt KDefault=-1;
+const TInt KDefaultValue=-2;
+//Static Variable Declaration
+TBool CIRNowPlayingView::iPlaying;
+
+#ifdef __IRA_FEATURE_EQUALIZER
+const TUint32 KMPXEqualizerViewImplementationId = 0x101FFC77;
+#endif
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::CIRNowPlayingView( CAlfEnv& aAlfEnv )
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CIRNowPlayingView::CIRNowPlayingView( CAlfEnv& aAlfEnv ):
+	iAlfEnv( aAlfEnv ), iToolbar(NULL), iStartUp(ETrue)
+	,iMPXFindInShop(NULL)
+#ifdef __IRA_FEATURE_EQUALIZER
+	, iMpxEqualizerViewPlugin(NULL)
+#endif // __IRA_FEATURE_EQUALIZER
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::CIRNowPlayingView" );
+	}
+// ---------------------------------------------------------
+// CIRNowPlayingView::ConstructL( )
+// EPOC default constructor can leave.
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+void CIRNowPlayingView::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::ConstructL - Entering" );
+	CIRBaseView::ConstructL(R_IR_NOWPLAYING_VIEW );
+	EnableObserverL(EIRSystemEventObserver);
+	iIRSettings = CIRSettings::OpenL();
+	iIndex=0;
+	iRockerIndex=0;
+	iAlfEnv.AddActionObserverL( this );
+	iDefaultLogo=EFalse;
+
+	//For Find in Shop
+#ifdef __IRA_FEATURE_EQUALIZER
+    if (FeatureManager::FeatureSupported( KFeatureIdEqualizer))
+		{
+#ifdef MUSICSHOP_AVAILABLE
+		TRAPD(error, iMPXFindInShop = CMPXFindInMShop::NewL());
+		if (error != KErrNotFound && error != KErrNone)
+			{
+			User::Leave(error);
+			}
+#endif
+		TRAPD(eqError, iMpxEqualizerViewPlugin = CMPXViewPlugin::NewL(
+					   TUid::Uid(KMPXEqualizerViewImplementationId), NULL));
+		if (eqError != KErrNotFound && eqError != KErrNone)
+			{
+			User::Leave(eqError);
+			}
+		}
+#endif // __IRA_FEATURE_EQUALIZER
+
+    iVolPopup = CAknVolumePopup::NewL(NULL, ETrue);
+    iVolPopup->SetObserver(this);
+    iVolPopup->SetRange(KMinVolume,KMaxVolumeRange);
+ 	iVolPopup->SetValue(2);
+
+    iUpdateLastplayed=ETrue;
+    iSameUrl=EFalse;
+    iEaualizerOn=EFalse;
+    iCallActive=EFalse;
+
+    iRequestPending = EFalse;
+    iStationHasLogo=EFalse;
+    iNextOrPrevRequest=EFalse;
+    iVolumeMute=EFalse;
+    // TO Do: need to check
+    iNowPlayingWrapper->SetFavFocus(-1);
+	IRLOG_DEBUG( "CIRNowPlayingView::ConstructL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView* CIRNowPlayingView::NewL( CAlfEnv& aEnv )
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingView* CIRNowPlayingView::NewL( CAlfEnv& aEnv)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::NewL" );
+	CIRNowPlayingView* self = CIRNowPlayingView::NewLC(aEnv);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNowPlayingView::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::ConstructL( )
+// Two-phased constructor.
+// ---------------------------------------------------------
+CIRNowPlayingView* CIRNowPlayingView::NewLC( CAlfEnv& aAlfEnv )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::NewLC - Entering" );
+	CIRNowPlayingView* self = new (ELeave) CIRNowPlayingView( aAlfEnv );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRNowPlayingView::NewLC - Exiting" );
+	return self;
+	}
+// ---------------------------------------------------------
+// CIRNowPlayingView::ConstructL( )
+// Destructor
+// ---------------------------------------------------------
+CIRNowPlayingView::~CIRNowPlayingView()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::~CIRNowPlayingView - Entering" );
+	CAlfEnv* alfEnv = CAlfEnv::Static();
+	if( alfEnv )
+		{
+		alfEnv->PrimaryDisplay().Roster().Hide( alfEnv->ControlGroup( KIRNowPlayingViewID.iUid ) );
+		alfEnv->DeleteControlGroup( KIRNowPlayingViewID.iUid );
+		iContainer = NULL;
+		}
+    if( alfEnv )
+        {
+        iAlfEnv.RemoveActionObserver( this );
+        }
+	if ( iToolbar )
+		{
+		iToolbar->SetToolbarVisibility(EFalse, EFalse);
+		iToolbar->SetToolbarObserver( NULL );
+		}
+	if(iConnectionCleanupTimer)
+	{
+	iConnectionCleanupTimer->Cancel();
+	}
+	if(iConnectionCleanupTimer)
+	{
+	delete iConnectionCleanupTimer;
+	iConnectionCleanupTimer=NULL;
+	}
+	iMetadata.Close();
+	iBuffer.Close();
+
+#ifdef __IRA_FEATURE_EQUALIZER
+	if (iMpxEqualizerViewPlugin)
+		{
+		delete iMpxEqualizerViewPlugin;
+		iMpxEqualizerViewPlugin = NULL;
+		}
+#endif // __IRA_FEATURE_EQUALIZER
+
+#ifdef MUSICSHOP_AVAILABLE
+	if (iMPXFindInShop)
+		{
+		delete iMPXFindInShop;
+		iMPXFindInShop = NULL;
+		}
+#endif
+
+	if(plsData)
+		{
+		delete plsData;
+
+		}
+    if(iIRSettings)
+		{
+		iIRSettings->Close();
+		iIRSettings = NULL;
+		}
+    if(iVolPopup)
+	    {
+	    delete iVolPopup;
+	    iVolPopup=NULL;
+	    }
+    if(iPrevPreset1)
+	    {
+	    delete iPrevPreset1;
+	    iPrevPreset1=NULL;
+	    }
+    if(iCurrentPreset)
+	    {
+	    delete iCurrentPreset;
+	    iCurrentPreset=NULL;
+	    }
+	IRLOG_DEBUG( "CIRNowPlayingView::~CIRNowPlayingView - Exiting " );
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::Id
+// ---------------------------------------------------------
+TUid CIRNowPlayingView::Id() const
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::Id" );
+	return KIRNowPlayingViewID;
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::DoActivateL
+// ---------------------------------------------------------
+
+void CIRNowPlayingView::DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+								    const TDesC8& aCustomMessage)
+	{
+	//IRLOG_DEBUG( "CIRNowPlayingView::DoActivateL - Entering" )
+	iFadeStyle=EIRFadeNoFade;
+	CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    iAlfEnv.PrimaryDisplay().SetVisibleArea( ClientRect() );
+	iUpdateLastplayed=ETrue;
+	iUpdateStationName=ETrue;
+	iStationHasLogo=EFalse;
+	iShowBitrate=ETrue;
+
+	if(iNowPlayingWrapper->GetView()==ESearch||iNowPlayingWrapper->GetView()==EStations||
+	   iNowPlayingWrapper->GetView()==EBrowseByTopStations )
+		{
+		iStationsData=iIsdsWrapper->GetStationsData();
+		if(iStationsData->Count()==1)
+			{
+			iShowToolBar=EFalse;
+			}
+		else
+			{
+			iShowToolBar=ETrue;
+			}
+		}
+	else if(iNowPlayingWrapper->GetView()==EFav)
+		{
+		TInt presetCount=iUi->iFavPresets->iFavPresetList.Count();
+		if(presetCount==1||presetCount==0)
+			{
+			iShowToolBar=EFalse;
+			}
+		else
+			{
+			iShowToolBar=ETrue;
+			}
+		if(presetCount >= 1)
+			{
+			//fovorities list is not empty
+			TInt index = iUi->iFavPresets->SearchPreset(iNowPlayingWrapper->iNowPlayingPreset->
+						   GetId(),iNowPlayingWrapper->
+						   iNowPlayingPreset->UniqId());
+			if (index != KErrNotFound )
+				{
+				iNowPlayingWrapper->SetFavFocus(index+1) ;
+				}
+			else
+				{
+				iNowPlayingWrapper->SetFavFocus(-1) ;
+				}
+
+			}
+		}
+	else if(iNowPlayingWrapper->GetView()==ELastplayed||
+			iNowPlayingWrapper->GetView()==EHistoryView)
+		{
+		iShowToolBar=EFalse;
+		}
+	  else if(iNowPlayingWrapper->GetView()==EPls)
+		 {
+
+          TInt plslist=(iUi->iURLs.Count()) / KTwo ;
+		  if(plslist==1 || plslist==0 || !iUi->GetListenFromSecondPls())
+			{
+			iShowToolBar=EFalse;
+			}
+		else
+			{
+			iShowToolBar=ETrue;
+			}
+		 }
+  	    // TO Do: need to check
+	if(iNowPlayingWrapper->GetView()!=EFav)
+		{
+		iNowPlayingWrapper->SetFavFocus(-1) ;
+		}
+	ConstructToolbarL();
+	CIRUi* ui = reinterpret_cast<CIRUi*>( AppUi() );
+	ui->iPresentViewID = KIRNowPlayingViewID;
+	SetTitleL( R_IRAPP_NOWPLAYING_TITLE );
+	if( !iContainer )
+		{
+		iAlfEnv.NewControlGroupL( KIRNowPlayingViewID.iUid );
+		iContainer = CIRNowPlayingViewContainer::NewL( iAlfEnv,this );
+		}
+		iUi->iFavPresets->AddObserver( *this );
+		iPrevPreset1=CIRIsdsPreset::NewL();
+		iCurrentPreset=CIRIsdsPreset::NewL();
+		iUpdateStationName=ETrue;
+		iContainer->StationLogoControl().SetLogoControlObserver( *this );
+		OnViewActivationL();
+		GetLogoL();
+		iAlfEnv.PrimaryDisplay().Roster().ShowL( iAlfEnv.ControlGroup( KIRNowPlayingViewID.iUid ));
+		Cba()->AddCommandSetToStackL( R_AVKON_SOFTKEYS_OPTIONS_BACK);
+		iFadeStyle=EIRFadeNoFade;
+	if(iCallActive)
+		{
+		ConstructToolbarL();
+		iFadeStyle=EIRFadeUnknown;
+		DrawViewL(iStationHasLogo);
+		DisplaylogoL();
+		}
+
+	iIsOn = ETrue;
+	iHasBeenActivated = ETrue;
+	IRLOG_DEBUG( "CIRNowPlayingView::DoActivateL - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::DoDeactivate
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::DoDeactivate()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DoDeactivate Entering" );
+	CAlfEnv* alfEnv = CAlfEnv::Static();
+	if( alfEnv )
+		{
+		alfEnv->PrimaryDisplay().Roster().Hide( alfEnv->ControlGroup( KIRNowPlayingViewID.iUid ) );
+		TRAP_IGNORE( iContainer->RadioIdle().HandleCommandL( EShutdown ) )
+		alfEnv->DeleteControlGroup( KIRNowPlayingViewID.iUid );
+		iContainer = NULL;
+		}
+	 iUi->iFavPresets->RemoveObserver( *this );
+   	if ( iToolbar )
+		{
+		iToolbar->SetToolbarVisibility(EFalse, EFalse);
+		iToolbar->SetToolbarObserver( NULL );
+		}
+	if(iConnectionCleanupTimer)
+		{
+		iConnectionCleanupTimer->Cancel();
+		}
+	if(iConnectionCleanupTimer)
+		{
+		delete iConnectionCleanupTimer;
+		iConnectionCleanupTimer=NULL;
+		}
+	iMetadata.Close();
+	iBuffer.Close();
+   	iPrecount=0;
+	iPresetValue=0;
+	if(iPrevPreset1)
+	    {
+	    delete iPrevPreset1;
+	    iPrevPreset1=NULL;
+	    }
+    if(iCurrentPreset)
+	    {
+	    delete iCurrentPreset;
+	    iCurrentPreset=NULL;
+	    }
+
+	if(iNowPlayingWrapper->iPlaying)
+		{
+		 iUpdateLastplayed=ETrue;
+		}
+	else
+		{
+		iUpdateLastplayed=EFalse;
+		}
+	iShowToolBar=EFalse;
+	iStartUp=ETrue;
+	iRockerIndex=0;
+	iIndex=0;
+	if(iPlaying)
+		{
+		iNowPlayingWrapper->SetMedadataForErrotrConditions(EFalse);
+		}
+	else
+		{
+		iNowPlayingWrapper->SetMedadataForErrotrConditions(ETrue);
+		}
+	iNowPlayingWrapper->SetMarquee(EFalse);
+	IRLOG_DEBUG( "CIRNowPlayingView::DoDeactivate Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::HandleCommandL
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::HandleCommandL(TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::HandleCommandL Activating" );
+	switch (aCommand)
+		{
+		case EStationDetailsCmd:
+			{
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iUi->iStationInfoView->SetStationPresetL( iNowPlayingWrapper->iNowPlayingPreset );
+				AppUi()->ActivateLocalViewL(KIRStationInfoViewId);
+				}
+			break;
+			}
+		case EAddtoStationsCmd:
+			{
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				AddStationsL();
+				}
+			}
+		break;
+		case EIRCmdStepNextPreset:
+			{
+			if( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			iCommandId=EIRCmdStepNextPreset;
+			iPresetCount=iRockerIndex;
+			iRockerIndex++;
+
+			if(iNowPlayingWrapper->GetView()==EFav)
+				{
+				iNowPlayingWrapper->SetView(EFav);
+
+				if( iRockerIndex == (iUi->iFavPresets->iFavPresetList.Count()) )
+					{
+					iRockerIndex = 0;
+					}
+				iFadeStyle=EIRFadeRightToLeft;
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					 iNextOrPrevRequest=ETrue;
+					}
+					else
+					{
+					ConnectToPresetL();
+					//StartTimerL()
+					}
+				break;
+				}
+			else if(iNowPlayingWrapper->GetView()==ESearch||
+					iNowPlayingWrapper->GetView()==EStations ||
+					iNowPlayingWrapper->GetView()==EBrowseByTopStations )
+				{
+				//iNowPlayingWrapper->SetView(ESearch)
+				iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+				iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+				iFadeStyle=EIRFadeRightToLeft;
+				if(iIsdsWrapper->GetBannerUrl())
+				{
+				 if(iRockerIndex>iStationsData->Count())
+				 {
+				 iRockerIndex = 1;
+				 }
+				 if( iUi->VerifyNetworkConnectivityL() )
+					{
+					 iNextOrPrevRequest=ETrue;
+					}
+					else
+					{
+					ConnectToPresetL();
+					}
+				break;
+				}
+				else
+				{
+				if(iRockerIndex>=iStationsData->Count())
+					{
+					iRockerIndex = 0;
+					}
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					 iNextOrPrevRequest=ETrue;
+					}
+				else
+					{
+					ConnectToPresetL();
+					}
+				break;
+				}
+				}
+			else if(iNowPlayingWrapper->GetView()==EPls)
+				{
+				iNowPlayingWrapper->SetView(EPls);
+                TInt plslist=(iUi->iURLs.Count()) / KTwo ;
+				if(iRockerIndex==plslist)
+					{
+					iRockerIndex = 0;
+
+					}
+				iFadeStyle=EIRFadeRightToLeft;
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					 iNextOrPrevRequest=ETrue;
+					}
+					else
+					{
+					ConnectToPresetL();
+					StartTimerL();
+					}
+				}
+				break;
+			}
+		case EIRCmdStepPrevPreset:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			iCommandId=EIRCmdStepPrevPreset;
+			iPresetCount=iRockerIndex;
+			iRockerIndex--;
+			if(iNowPlayingWrapper->GetView()==EFav)
+				{
+				iNowPlayingWrapper->SetView(EFav);
+				if(iRockerIndex < 0)
+					{
+					iRockerIndex = (iUi->iFavPresets->iFavPresetList.Count()) - 1;
+					}
+				iFadeStyle=EIRFadeLeftToRight;
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					 iNextOrPrevRequest=ETrue;
+					}
+					else
+					{
+					ConnectToPresetL();
+					//StartTimerL()
+					}
+				}
+			else if(iNowPlayingWrapper->GetView()==ESearch||
+					iNowPlayingWrapper->GetView()==EStations ||
+					iNowPlayingWrapper->GetView()==EBrowseByTopStations )
+				{
+				//iNowPlayingWrapper->SetView(ESearch)
+				iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+				iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+				iFadeStyle=EIRFadeLeftToRight;
+				if(iIsdsWrapper->GetBannerUrl())
+					{
+					 if(iRockerIndex==0)
+						 {
+						 iRockerIndex=iStationsData->Count();
+						 }
+					 if( iUi->VerifyNetworkConnectivityL() )
+						{
+						iNextOrPrevRequest=ETrue;
+						}
+					else
+						{
+						ConnectToPresetL();
+						}
+					break;
+					}
+				else
+				{
+				if(iRockerIndex< 0)
+					{
+					iRockerIndex =(iStationsData->Count())-1 ;
+					}
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					iNextOrPrevRequest=ETrue;
+					}
+				else
+					{
+					ConnectToPresetL();
+					}
+				break;
+				}
+				}
+
+			else if(iNowPlayingWrapper->GetView()==EPls)
+				{
+				iNowPlayingWrapper->SetView(EPls);
+				if(iRockerIndex< 0)
+					{
+                    TInt plslist=(iUi->iURLs.Count()) / KTwo ;
+					iRockerIndex =plslist-1;
+					}
+				iFadeStyle=EIRFadeLeftToRight;
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					 iNextOrPrevRequest=ETrue;
+					}
+					else
+					{
+					ConnectToPresetL();
+					StartTimerL();
+					}
+				}
+			break;
+			}
+		case EIRCmdPlay:
+		case EPlayCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			if( iContainer )
+				{
+				if( iUi->VerifyNetworkConnectivityL() )
+					{
+					iRequestPending = ETrue;
+					break;
+					}
+				else
+					{
+					PlayAndStopControlL();
+					}
+				}
+			}
+		break;
+		case EIRCmdStop:
+		case EStopCmd:
+			{
+			if( iContainer )
+				{
+				iShowBitrate=ETrue;
+				PlayAndStopControlL();
+				}
+			}
+		break;
+		case EFmRecOrPhone:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				LaunchFMTransmitterL();
+				}
+			}
+		break;
+
+		case EGotoMusicStore:
+		case EFindInShop:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+		    _LIT(KLaunchStr, "launch");
+		    _LIT(KFindStr, "find");
+
+		    if(aCommand == EGotoMusicStore)
+			    {
+				DoFindInMusicShopL(iNowPlayingWrapper->MetaData().Song(),
+			                     iNowPlayingWrapper->MetaData().Artist(),
+			                     KNullDesC,EFalse);
+				iNowPlayingWrapper->UpdateNmsLogEventsL(KLaunchStr);
+			    }
+			else if(aCommand == EFindInShop)
+				{
+				DoFindInMusicShopL(iNowPlayingWrapper->MetaData().Song(),
+			                     iNowPlayingWrapper->MetaData().Artist(),
+			                     KNullDesC,ETrue);
+				/**
+				 * Increment the FindInMusicStore count by one
+				 */
+				iUi->FindInMusicStoreCounter();
+
+
+
+
+
+
+
+				iNowPlayingWrapper->UpdateNmsLogEventsL(KFindStr);
+				}
+			}
+		break;
+
+		case  EStereoMode:
+			{
+			iIsOn = ETrue;
+			break;
+			}
+		case EOnCmd:
+			{
+			iIsOn=ETrue;
+			iDs=EOnCmd;
+			iStereoMode = 1;
+			iIRSettings->SetStereoModeL(iStereoMode);
+			GetStereoModeL();
+			DynInitMenuPaneL(R_NOW_SUBMENU,iMenuPane);
+			break;
+			}
+		case EOffCmd:
+			{
+			iIsOn=ETrue;
+			iDs=EOffCmd;
+			iStereoMode = 0;
+			iIRSettings->SetStereoModeL(iStereoMode);
+			GetStereoModeL();
+			DynInitMenuPaneL(R_NOW_SUBMENU,iMenuPane);
+			break;
+			}
+		case EEqualizer:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			iToolbar->SetToolbarVisibility(EFalse, EFalse);
+			iEaualizerOn=ETrue;
+
+#ifdef __IRA_FEATURE_EQUALIZER
+			if (iMpxEqualizerViewPlugin)
+				{
+				iMpxEqualizerViewPlugin->ActivateViewL();
+				}
+#endif
+
+		    iEaualizerOn=EFalse;
+			iToolbar->SetToolbarVisibility(ETrue, EFalse);
+			}
+		break;
+		case EHistory:
+			{
+			_LIT8(KNull,"");
+			AppUi()->ActivateLocalViewL( KIRHistoryListViewId ,KNowPlayingLaunch,KNull);
+			break;
+			}
+		case ESettingsCmd:
+			{
+			AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+			break;
+			}
+		case EHelpCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			TCoeHelpContext context = HelpContext();
+            // Launch help app with help context of the view.
+            CArrayFix<TCoeHelpContext>* array = new( ELeave ) CArrayFixFlat<TCoeHelpContext>( 1 );
+            array->AppendL( context );
+            // Launch help application with help context of this view.
+            // It must be verified that the ownership of the help context array is transfered.
+            // Remember to verify also CIRSettingsViewBase help application launch.
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), array );
+			break;
+			}
+		case EIRCmdVolumeControl:
+			{
+				if(iVolPopup)
+					{
+						if(iVolumeMute)
+							{
+							iVolumeBarValue=0;
+							}
+						else
+							{
+							iVolumeBarValue=iUi->iIRSettings->GetVolumeSetting();
+							}
+					iVolPopup->SetValue(2);
+					if(iVolumeMute)
+						{
+						TInt index = iNowPlayingWrapper->GetMediaClientInstance()->MaxVolume()/KMaxVolume;
+						TInt volume = index*iVolumeBarValue;
+						iNowPlayingWrapper->GetMediaClientInstance()->SetVolume(volume);
+						}
+					else
+						{
+						iNowPlayingWrapper->SetVolumeL(iVolumeBarValue);
+						}
+					if(!iVolPopup->IsFocused())
+					iVolPopup->ShowVolumePopupL();
+					}
+
+			}
+		break;
+		case EGotoMainView:
+		{
+		_LIT8(KNull,"");
+		AppUi()->ActivateLocalViewL( KIRMainChoiceViewID,KMainViewLaunch , KNull);
+		break;
+		}
+		case EAknSoftkeyBack:
+			{
+			if((iUi->GetPlsSaved().Count()) &&
+			   (iUi->GetListenFromPls()) &&
+			    iUi->GetListenFromSecondPls())
+				{
+				if(iUi->GetPlsSaved()[iRockerIndex]==0)
+					{
+					RBuf sumvalue;
+					HBufC* textResource = StringLoader::LoadLC(R_IRAPP_NOTE_POPUP_SAVE );
+					sumvalue.Create(*textResource);
+					CIRDialogLauncher* queryNote = CIRDialogLauncher::NewL();
+					CleanupStack::PushL( queryNote );
+					TInt dlgValue;
+					queryNote->ShowQueryDialogDeletionL(sumvalue,dlgValue);
+					if(dlgValue)
+						{
+						AddStationsL();
+						}
+					CleanupStack::PopAndDestroy( queryNote );
+					CleanupStack::PopAndDestroy( textResource );
+					sumvalue.Close();
+					}
+				}
+			CIRBaseView::HandleCommandL(aCommand);
+			}
+		default:
+			{
+			CIRBaseView::HandleCommandL(aCommand);
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::HandleCommandL Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::UpdateStationNameL()
+// This function updates station name
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::UpdateStationNameL(TIRFadeStyle /*aFadeStyle*/)
+	{
+
+	IRLOG_DEBUG( "CIRNowPlayingView::UpdateStationNameL Activating" );
+
+
+	if(iContainer)
+		{
+		CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+	 if(iUpdateLastplayed)
+	 {
+
+		if(iNowPlayingWrapper->iNowPlayingPreset)
+		{
+		// store the last played station
+		*ui->iLastPlayed->iLastPlayedStation = *iNowPlayingWrapper->iNowPlayingPreset;
+		TRAPD(err,ui->iLastPlayed->CommitLastPlayedChannelL());
+		TInt error=KErrNone;
+		if(err != KErrNone)
+			{
+			error = ui->iLastPlayed->RemoveLastPlayedFile();
+			User::Leave(error);
+			}
+		}
+	 }
+
+	 if(iUpdateStationName)
+	 {
+		// Check whether the currently playing station is from fav db to enable
+		// switching/browsing b/w channels that are there in fav db &
+		// enable the left & right rocker keys accordingly
+		if(iNowPlayingWrapper->GetView()==EFav)
+			{
+			if(ui->iFavPresets->iFavPresetList.Count() >= 1)
+				{
+				//fovorities list is not empty
+				TInt index = ui->iFavPresets->SearchPreset(iNowPlayingWrapper->iNowPlayingPreset->
+														   GetId(),iNowPlayingWrapper->
+														   iNowPlayingPreset->UniqId());
+				if (index != KErrNotFound )
+					{
+					//if there are contents in favorites
+					iIndex = index;
+					iRockerIndex = iIndex;
+					//assigning the preset
+					ui->iFavPresets->iFavPresetList[iIndex]->CopyPresetData(*iNowPlayingWrapper->
+																			 iNowPlayingPreset);
+					iBuffer.Close();
+					iBuffer.Create(iNowPlayingWrapper->iNowPlayingPreset->GetName().Length()+
+								   KPresetNumbering);
+					iBuffer.Append(iNowPlayingWrapper->iNowPlayingPreset->GetName());
+					}
+				else
+					{
+					iIndex = KErrNotFound;
+					iBuffer.Close();
+					iBuffer.Create(iNowPlayingWrapper->iNowPlayingPreset->GetName().Length()+
+								   KPresetNumbering);
+					iBuffer.Append(iNowPlayingWrapper->iNowPlayingPreset->GetName());
+					}
+				}
+			}
+		else if(iNowPlayingWrapper->GetView()==ESearch||iNowPlayingWrapper->GetView()==EStations ||
+				iNowPlayingWrapper->GetView()==EBrowseByTopStations )
+			{
+			iRockerIndex = (iIsdsWrapper->GetCurrentPlayingIndex());
+			iBuffer.Close();
+			iBuffer.Create(iNowPlayingWrapper->iNowPlayingPreset->GetName().Length()+
+						   KPresetNumbering);
+			iBuffer.Append(iNowPlayingWrapper->iNowPlayingPreset->GetName());
+			}
+		else if(iNowPlayingWrapper->GetView()==ELastplayed||
+				iNowPlayingWrapper->GetView()==EHistoryView ||iNowPlayingWrapper->GetView()==EPls)
+			{
+			 if(iNowPlayingWrapper->GetView()==ELastplayed)
+				{
+				TInt index = ui->iFavPresets->SearchPreset(iNowPlayingWrapper->
+				iNowPlayingPreset->GetId(),iNowPlayingWrapper->iNowPlayingPreset->UniqId());
+				if (index != KErrNotFound )
+				{
+						iIndex=index;
+						iRockerIndex = iIndex;
+
+				}
+				else if(iNowPlayingWrapper->iNowPlayingPreset->GetChannelType()==0)
+					{
+					iIndex=1;
+					iRockerIndex = iIndex;
+					}
+				else
+					{
+					iIndex=1;
+					iRockerIndex = iIndex;
+					}
+				}
+			else if(iNowPlayingWrapper->GetView()==EPls)
+				{
+				iIndex=	iUi->GetPlsIndex();
+				iRockerIndex = iIndex;
+				}
+			else if(iNowPlayingWrapper->GetView()==EHistoryView)
+				{
+				iIndex=1;
+				iRockerIndex = iIndex;
+				}
+
+			iBuffer.Close();
+			iBuffer.Create(iNowPlayingWrapper->iNowPlayingPreset->GetName().Length()+
+						   KPresetNumbering);
+			iBuffer.Append(iNowPlayingWrapper->iNowPlayingPreset->GetName());
+			}
+	 }
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingView::UpdateStationNameL Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::UpdateStationLogosL
+// ---------------------------------------------------------
+void CIRNowPlayingView::UpdateStationLogosL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::UpdateStationLogosL Activating" );
+	TBool upLoadLogo=EFalse;
+	if( iContainer )
+		{
+		RArray<TInt> idArray( KIRLogoArrayGranularity );
+		CleanupClosePushL( idArray );
+		CPtrC8Array* dataArray = new (ELeave) CPtrC8Array( KIRLogoArrayGranularity );
+		CleanupStack::PushL( dataArray );
+		if(iNowPlayingWrapper->GetView()==EFav||iNowPlayingWrapper->GetView()==ELastplayed
+			||iNowPlayingWrapper->GetView()==EHistoryView||
+		   	iNowPlayingWrapper->GetView()==EPls )
+			{
+			if(iPresetValue==0||iNowPlayingWrapper->GetView()==ELastplayed)
+				{
+					if(iCurrentPreset->GetLogoData() != KNullDesC8 )
+						{
+						dataArray->AppendL(iCurrentPreset->GetLogoData() );
+						idArray.AppendL( iRockerIndex);
+						iContainer->StationLogoControl().SetLogosL( idArray, *dataArray );
+						iPresetValue++;
+						}
+
+				}
+			else
+				{
+				if(iPrevPreset1->GetLogoData() != KNullDesC8 && !iDefaultLogo)
+					{
+					dataArray->AppendL(iPrevPreset1->GetLogoData() );
+					idArray.AppendL( iPresetCount );
+					}
+				if(iCurrentPreset->GetLogoData() != KNullDesC8 )
+					{
+					 	 upLoadLogo=ETrue;
+					dataArray->AppendL(iCurrentPreset->GetLogoData() );
+					idArray.AppendL(iRockerIndex);
+					}
+				if(upLoadLogo)
+				iContainer->StationLogoControl().SetLogosL( idArray, *dataArray );
+				iDefaultLogo=EFalse;
+				}
+			}
+		if(iNowPlayingWrapper->GetView()==ESearch||iNowPlayingWrapper->GetView()==EStations
+			 ||iNowPlayingWrapper->GetView()==EBrowseByTopStations )
+			{
+			if(iPresetValue==0)
+				{
+				if(iCurrentPreset->GetLogoData() != KNullDesC8 )
+					{
+					dataArray->AppendL(iCurrentPreset->GetLogoData() );
+					idArray.AppendL(iLogoIndex);
+					iContainer->StationLogoControl().SetLogosL( idArray, *dataArray );
+					iPresetValue++;
+					}
+				}
+			else
+				{
+				if(iPrevPreset1->GetLogoData() != KNullDesC8 && !iDefaultLogo)
+					{
+					 upLoadLogo=ETrue;
+					dataArray->AppendL(iPrevPreset1->GetLogoData() );
+					idArray.AppendL(iPresetCount);
+					}
+				if(iCurrentPreset->GetLogoData() != KNullDesC8 )
+					{
+					 upLoadLogo=ETrue;
+					dataArray->AppendL(iCurrentPreset->GetLogoData() );
+					idArray.AppendL(iLogoIndex );
+					}
+				iContainer->StationLogoControl().SetLogosL( idArray, *dataArray );
+				iDefaultLogo=EFalse;
+				}
+			}
+		CleanupStack::PopAndDestroy( dataArray );
+		CleanupStack::PopAndDestroy( &idArray );
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::UpdateStationLogosL Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::DisplayBitrate
+// Displays the song name on to the screen
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DisplayBitrate(const TDesC& aBitrate) const
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplaySongNameL - Entering" );
+	if( iContainer )
+		{
+		TRAP_IGNORE(iContainer->SetBitrateL( aBitrate));
+		if(iNowPlayingWrapper->iPlaying || !iShowBitrate)
+			{
+			if(iBitrateIndex)
+				{
+				if ( iContainer->RadioIdle().State() == CIRRadioIdle::ERunning )
+					{
+					iContainer->RadioIdle().UpdateRadioIdleContent( aBitrate,
+					iBitrateIndex );
+					}
+
+				}
+			}
+			else
+			{
+			if(iBitrateIndex)
+				{
+				if ( iContainer->RadioIdle().State() == CIRRadioIdle::ERunning )
+					{
+					iContainer->RadioIdle().UpdateRadioIdleContent( iBuffer,
+					iBitrateIndex );
+					}
+
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplaySongNameL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::DisplaySongArtistNameL
+// Displays the song name on to the screen
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DisplaySongArtistNameL(const TDesC& aSongName,const TDesC& aArtistName)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplayArtistNameL - Entering " );
+	if(aSongName==KNullDesC &&	aArtistName==KNullDesC )
+		{
+		iNowPlayingWrapper->SetMedadataForErrotrConditions(ETrue);
+		DisplaySongArtistNameL(KConst1,KConst1);
+		return;
+		}
+	if(aSongName!=KNullDesC && (!iNowPlayingWrapper->GetMedadataForErrotrConditions())
+	&&	aArtistName!=KNullDesC)
+		{
+		CDesCArray* strings = new ( ELeave ) CDesCArrayFlat( 2 );
+		CleanupStack::PushL( strings );
+		if(iNowPlayingWrapper->GetMarquee())
+			{
+			strings->AppendL(  aArtistName);
+			strings->AppendL( aSongName );
+			}
+		else
+			{
+			strings->AppendL( aSongName );
+			strings->AppendL(  aArtistName);
+			}
+		iNowPlayingWrapper->SetMedadataForErrotrConditions(EFalse);
+		HBufC* text = StringLoader::LoadLC( R_IR_NOW_ARTIST_SONG, *strings );
+		iMetadata.Close();
+		iMetadata.Create(text->Length());
+		iMetadata.Copy(*text);
+		CleanupStack::PopAndDestroy( 2, strings );
+		}
+	else
+		{
+		iMetadata.Close();
+		iMetadata.Create(aSongName.Length()+aArtistName.Length()+KTwo);
+		if(aSongName!=KNullDesC)
+			{
+			iMetadata.Append(aSongName);
+			}
+		if(aArtistName!=KNullDesC)
+			{
+			iMetadata.Append(aArtistName);
+			}
+		}
+	if(iNowPlayingWrapper->GetMarquee())
+		{
+		TRAP_IGNORE( iContainer->StationInformationDisplay().RdsDataReceivedL( iMetadata ) );
+		if ( iContainer->RadioIdle().State() == CIRRadioIdle::ERunning )
+			{
+			iContainer->RadioIdle().UpdateRadioIdleContent( iMetadata,
+			iMetadataIndex );
+			}
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplayArtistNameL - Exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::DisplayByteCounter
+// Formats byte counter bytes for display
+// For example, Byte counter is indicated in the following formats:
+//   0.00 to 9.99 MB
+//   10.0 to 99.9 MB
+//   100 MB and more
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DisplayByteCounterL(TReal32  total_bytes)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplayByteCounter Activating" );
+
+	TReal32 totalMB = total_bytes / KIRMBtoBytesConversion;
+
+	// required for byte counter in deciaml format
+	CArrayFix<TInt>* byteCtr_nums = new (ELeave) CArrayFixFlat<TInt>( KTwo );
+	CleanupStack::PushL( byteCtr_nums );
+
+	HBufC* text = NULL;
+	if( total_bytes < KIRByteCounterDisplayThreshold1 )
+		{
+		TInt wholeMB = floor(totalMB);
+		TInt fractionMB = (totalMB - wholeMB) * KHundred;
+		byteCtr_nums->AppendL( wholeMB );
+		byteCtr_nums->AppendL( fractionMB );
+		text = StringLoader::LoadLC( R_IRAPP_NOWPLAYING_BYTECOUNTER_DECI, *byteCtr_nums );
+
+		if( fractionMB < KTen )
+			{
+			RBuf buff;
+			buff.CreateL( *text, text->Length()+1 );
+			TInt insertPos = KTwo;
+			while(wholeMB >= KTen)
+				{
+				++insertPos;
+				wholeMB /= KTen;
+				}
+			_LIT( KZero, "0" );
+			buff.Insert( insertPos, KZero );
+			CleanupStack::PopAndDestroy( text );
+			text = HBufC::NewLC( buff.Length() );
+			*text = buff;
+			buff.Close();
+			}
+		}
+	else if( total_bytes >= KIRByteCounterDisplayThreshold1 &&
+			  total_bytes < KIRByteCounterDisplayThreshold2 )
+		{
+		TInt wholeMB = floor(totalMB);
+		TInt fractionMB = (totalMB - wholeMB) * KTen;
+		byteCtr_nums->AppendL( wholeMB );
+		byteCtr_nums->AppendL( fractionMB );
+		text = StringLoader::LoadLC( R_IRAPP_NOWPLAYING_BYTECOUNTER_DECI, *byteCtr_nums );
+		}
+	else
+		{
+		text = StringLoader::LoadLC( R_IRAPP_NOWPLAYING_BYTECOUNTER, totalMB );
+		}
+
+	if( iContainer )
+		{
+		iContainer->SetByteCounterL( *text );
+		}
+	CleanupStack::PopAndDestroy( text );
+	CleanupStack::PopAndDestroy( byteCtr_nums );
+
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplayByteCounter - Exiting" );
+	}
+
+
+//
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::OnViewActivationL
+// Displays the song name on to the screen
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::OnViewActivationL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::OnViewActivationL - Entering" );
+	UpdateStationNameL(iFadeStyle);
+	if(iNowPlayingWrapper->MetaData().Artist().Length()
+		&& iNowPlayingWrapper->MetaData().Song().Length() )
+		{
+		iNowPlayingWrapper->SetMedadataForErrotrConditions(EFalse);
+		}
+    DisplaySongArtistNameL(iNowPlayingWrapper->MetaData().Artist(),
+    					   iNowPlayingWrapper->MetaData().Song());
+	IRLOG_DEBUG( "CIRNowPlayingView::OnViewActivationL - Exiting." );
+	}
+
+ // -----------------------------------------------------------------------------
+// ConnectToPresetL()
+// Function called to connect to any channel after the timer expires
+// ------------------------------------------------------------------------------
+//
+void CIRNowPlayingView::ConnectToPresetL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::ConnectToPresetL - Entering" );
+	iSameUrl=EFalse;
+	if(iStereoEffect)
+		{
+		if(iStereoEffect->IsEnabled())
+			{
+			iStereoEffect->DisableL();
+			}
+		}
+	if(iNowPlayingWrapper->GetView()==EFav)
+		{
+			iNowPlayingWrapper->SetConnectToServerState(ETrue);
+			iIndex=iRockerIndex;
+			//connected from saved preset
+			iNowPlayingWrapper->SetCurrentConnectionSource(EIRPresetIsds);
+			if(iUi->iFavPresets->iFavPresetList.Count() >= 1)
+				{
+				if(iUi->iFavPresets->iFavPresetList[iRockerIndex]->
+					GetChannelType() == CIRIsdsPreset::EIsdsPreset)
+					{
+					// Sync Favourite Isds preset
+					SyncPresetL(iUi->iFavPresets->iFavPresetList[iRockerIndex]->GetId(),
+					iUi->iFavPresets->iFavPresetList[iRockerIndex]->GetLastModifiedTime());
+					}
+				else
+					{
+					// TO Do: need to check
+
+					iNowPlayingWrapper->SetFavFocus(iRockerIndex+1);
+					// Connect to Favourite User-defined preset
+					iUi->iFavPresets->iFavPresetList[iRockerIndex]->
+						CopyPresetData(*iNowPlayingWrapper->iNowPlayingPreset);
+					iNowPlayingWrapper->ConnectToChannelL(*iNowPlayingWrapper->iNowPlayingPreset);
+					StartTimerL();
+					}
+				}
+			}
+	else  if(iNowPlayingWrapper->GetView()==ESearch|| iNowPlayingWrapper->GetView()==EStations ||
+	iNowPlayingWrapper->GetView()==EBrowseByTopStations )
+		{
+	       if(iRockerIndex >=0 && iRockerIndex <=iStationsData->Count())
+	       {
+
+		 	iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+		 	iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+		    iNowPlayingWrapper->CreateWaitDialogL();
+			iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+
+			iIsdsWrapper->IsdsListenRequestL(this,iRockerIndex);
+	       }
+		}
+	else if(iNowPlayingWrapper->GetView()==EPls)
+		{
+		iIndex=iRockerIndex;
+		ListenFromPlsL();
+		}
+	else
+		{
+		// if browsing to same channel that we were and
+		// playback were stopped, need to try to restart it
+		if( !iNowPlayingWrapper->iPlaying )
+			{
+			TRAP_IGNORE( PlayAndStopControlL() );
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplayByteCounter Exiting" );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::PlayAndStopControlL()
+// Used to stop & play the station
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::PlayAndStopControlL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::StopAndPlayControlL - Entering" );
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+	iNowPlayingWrapper->PlayAndStopL();
+	IRLOG_DEBUG( "CIRNowPlayingView::StopAndPlayControlL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::DynInitMenuPaneL
+// Dynamically handles menu pane.
+// From class MEikMenuObserver.
+// Itialiases the items on the menu.
+// ---------------------------------------------------------------------------
+void CIRNowPlayingView::DynInitMenuPaneL(TInt aResourceId,
+		CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DynInitMenuPaneL - Entering " );
+	iMenuPane=aMenuPane;
+	if(aResourceId == R_IR_MENU_NOWPLAYING )
+		{
+		if(!iContainer)
+			{
+ 			aMenuPane->SetItemDimmed(EGotoMainView,ETrue);
+			aMenuPane->SetItemDimmed(EStationDetailsCmd,ETrue);
+			aMenuPane->SetItemDimmed(EFmRecOrPhone,ETrue);
+			aMenuPane->SetItemDimmed(EAddtoStationsCmd,ETrue);
+			aMenuPane->SetItemDimmed(EStereoMode,ETrue);
+			aMenuPane->SetItemDimmed(EEqualizer,ETrue);
+			aMenuPane->SetItemDimmed(EHistory,ETrue);
+			aMenuPane->SetItemDimmed(EFindInShop,ETrue);
+            aMenuPane->SetItemDimmed(EGotoMusicStore, ETrue);
+			aMenuPane->SetItemDimmed(ESettingsCmd,ETrue);
+			aMenuPane->SetItemDimmed(EHelpCmd,ETrue);
+			aMenuPane->SetItemDimmed(EExitCmd,ETrue);
+			}
+		else
+			{
+
+			 if(iUi->GetPlsActiavted() && iUi->GetListenFromPls())
+				{
+				aMenuPane->SetItemDimmed(EGotoMainView,EFalse);
+				}
+			else
+				{
+				 aMenuPane->SetItemDimmed(EGotoMainView,ETrue);
+				}
+			#ifdef FF_FMTX
+
+				aMenuPane->SetItemDimmed(EFmRecOrPhone,EFalse);
+			#else
+
+				aMenuPane->SetItemDimmed(EFmRecOrPhone,ETrue);
+		     #endif
+
+#ifdef __IRA_FEATURE_EQUALIZER
+			/**
+			 * Activate "FindInShop" or "Goto MusicStore" only if iMpxFindInShop
+			 * object is succcessfully created. Show "FindInShop" option for
+			 * isds presets which has MetaData and MusicStoreEnalbed status as true.
+			 * Otherwise show "Goto MusicStore".
+			 */
+			if (iMPXFindInShop)
+				{
+				if (iNowPlayingWrapper->iNowPlayingPreset->
+				             GetChannelType() == CIRIsdsPreset::EIsdsPreset)
+					{
+					if (IsMetaData() && MusciStoreEnabledStatus() )
+						{
+						aMenuPane->SetItemDimmed(EFindInShop,EFalse);
+						aMenuPane->SetItemDimmed(EGotoMusicStore, ETrue);
+						}
+					else
+						{
+					    aMenuPane->SetItemDimmed(EFindInShop,ETrue);
+					    aMenuPane->SetItemDimmed(EGotoMusicStore, EFalse);
+						}
+					}
+				else //preset is UserDefined
+					{
+					aMenuPane->SetItemDimmed(EFindInShop,ETrue);
+					aMenuPane->SetItemDimmed(EGotoMusicStore, EFalse);
+					}
+				}
+			else
+#endif // __IRA_FEATURE_EQUALIZER
+				{
+				aMenuPane->SetItemDimmed(EFindInShop,ETrue);
+				aMenuPane->SetItemDimmed(EGotoMusicStore, ETrue);
+				}
+
+#ifdef __IRA_FEATURE_EQUALIZER
+			if (iMpxEqualizerViewPlugin)
+				{
+				aMenuPane->SetItemDimmed(EEqualizer,EFalse);
+				}
+			else
+#endif // __IRA_FEATURE_EQUALIZER
+				{
+				aMenuPane->SetItemDimmed(EEqualizer,ETrue);
+				}
+			}
+		}
+	if(aResourceId==R_NOW_SUBMENU)
+		{
+		if(iDs==EOnCmd)
+			{
+			aMenuPane->SetItemButtonState( EOnCmd,
+			iIsOn?
+			EEikMenuItemSymbolOn:
+			EEikMenuItemSymbolIndeterminate );
+			}
+		if(iDs==EOffCmd)
+			{
+			aMenuPane->SetItemButtonState( EOffCmd,
+			iIsOn?
+			EEikMenuItemSymbolOn:
+			EEikMenuItemSymbolIndeterminate );
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::DynInitMenuPaneL - Exiting." );
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::HandlePresetChangedL
+// ---------------------------------------------------------
+void CIRNowPlayingView::HandlePresetChangedL( TInt /*aId*/, TUid /*aDataHandler*/,
+											  MPSPresetObserver::TPSReason /*aReason*/ )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::HandlePresetChangedL - Entering." );
+	if(iContainer)
+	{
+	if(iNowPlayingWrapper->GetView()==EFav)
+		{
+		TInt presetCount=iUi->iFavPresets->iFavPresetList.Count();
+		if(presetCount==1||presetCount==0)
+			{
+			iShowToolBar=EFalse;
+			}
+		else
+			{
+			iShowToolBar=ETrue;
+			}
+		}
+	ConstructToolbarL();
+}
+
+	IRLOG_DEBUG( "CIRNowPlayingView::HandlePresetChangedL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::AddStationsL()
+// Saves the currently playing station into fav DB
+// ---------------------------------------------------------------------------
+void CIRNowPlayingView::AddStationsL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::AddStationsL - Entering" );
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+	TInt returnVal;
+	ui->iFavPresets->AddPresetL(*(iNowPlayingWrapper->iNowPlayingPreset),returnVal);
+	if(returnVal==KErrNoMemory)
+		{
+		iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+		return;
+		}
+	else
+		{
+		if(iUi->iFavPresets->iFavPresetList.Count() == KPresetsArrayMaxLength)
+			{
+			iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+					(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+			return;
+			}
+		else
+			{
+			RBuf channel;
+			HBufC* textResource = StringLoader::LoadLC(R_IRAPP_STATIONS_POPUP_SAVED,
+													   iNowPlayingWrapper->iNowPlayingPreset->
+													   GetName());
+			channel.Create(*textResource);
+			iIsdsWrapper->GetDialogLauncherInstance()->ShowConfirmationNoteL( channel,ETrue );
+			CleanupStack::PopAndDestroy(textResource);
+			channel.Close();
+			}
+		if(iUi->GetListenFromPls() && iUi->GetPlsSaved().Count())
+			{
+			iUi->GetPlsSaved()[iRockerIndex]=1;
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::AddStationsL - Exiting." );
+	}
+
+// CIRNowPlayingView::PresetLogoDownloadedL()
+//----------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::PresetLogoDownloadedL - Entering" );
+	TInt Iindex=KDefaultValue;
+	TInt LogoDownloadedIndex=KDefault;
+	/*if(iNowPlayingWrapper->iPlaying)
+		{
+		Iindex=aPreset->GetId();
+		LogoDownloadedIndex=iNowPlayingWrapper->iNowPlayingPreset->GetId();
+		if(Iindex==LogoDownloadedIndex && aPreset->GetLogoData().Length())
+			{
+			iNowPlayingWrapper->iNowPlayingPreset->SetLogoData(aPreset->GetLogoData());
+			UpdateLastplayedL();
+			}
+		}*/
+	if(iContainer)
+	{
+	if(iNowPlayingWrapper->GetView()==EFav)
+		{
+		Iindex = iUi->iFavPresets->SearchPreset(iNowPlayingWrapper->iNowPlayingPreset->
+				   GetId(),iNowPlayingWrapper->
+				   iNowPlayingPreset->UniqId());
+		LogoDownloadedIndex= iUi->iFavPresets->SearchPreset(aPreset->GetId()
+					   ,aPreset->UniqId());
+		}
+	else if(iNowPlayingWrapper->GetView()==EStations
+	   || iNowPlayingWrapper->GetView()==EBrowseByTopStations
+	   ||iNowPlayingWrapper->GetView()==ESearch)
+		{
+		Iindex=aPreset->GetId();
+		LogoDownloadedIndex=iNowPlayingWrapper->iNowPlayingPreset->GetId();
+		}
+	else
+		{
+		Iindex=0;
+		LogoDownloadedIndex=0;
+		}
+	if(LogoDownloadedIndex==Iindex)
+	{
+		iStationHasLogo=ETrue;
+		if(iPrecount==0||iNowPlayingWrapper->GetView()==ELastplayed)
+			{
+			iDefaultLogo=EFalse;
+			if(aPreset->GetLogoData() != KNullDesC8 )
+				{
+				*iCurrentPreset=*aPreset;
+				iPrecount++;
+				}
+			}
+	else
+		{
+		if(!iDefaultLogo)
+			{
+			*iPrevPreset1=*iCurrentPreset;
+			}
+		*iCurrentPreset=*aPreset;
+		}
+
+	if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+		{
+		return;
+		}
+
+	if(iNowPlayingWrapper->GetView()==EHistoryView||iNowPlayingWrapper->GetView()==ESearch
+	   || iNowPlayingWrapper->GetView()==EFav||iNowPlayingWrapper->GetView()==EStations
+	   || iNowPlayingWrapper->GetView()==EBrowseByTopStations
+	   ||iNowPlayingWrapper->GetView()==ELastplayed||iNowPlayingWrapper->GetView()==EPls)
+			{
+			UpdateStationLogosL();
+			DisplaylogoL();
+			}
+	}
+	IRLOG_DEBUG( "CIRNowPlayingView::PresetLogoDownloadedL - Exiting" );
+	}
+	}
+
+
+// CIRNowPlayingView::PresetLogoDownloadError()
+//----------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::PresetLogoDownloadErrorL");
+	//TO Do:implementation need to done for handling Media animation
+	iStationHasLogo=EFalse;
+	//TRAP_IGNORE(DrawViewL(iStationHasLogo))
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::ConstructToolbarL
+// Simulate user pressing play immediately when came into this view.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::ConstructToolbarL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::ConstructToolbarL - Entering" );
+	TInt bitmapId;
+	TInt maskId;
+	if ( AknLayoutUtils::PenEnabled() )
+		{
+		iToolbar = this->Toolbar();
+		if ( iToolbar )
+			{
+			iToolbar->SetToolbarObserver( this );
+			if(iToolbar)
+				{
+
+				bitmapId=iUi->ChooseToolBarBitmaps(EMbmInternetradioQgn_indi_tb_previous,
+				EMbmInternetradioQgn_indi_tb_previous_white);
+
+				maskId=iUi->ChooseToolBarMaskId(EMbmInternetradioQgn_indi_tb_previous_mask,
+				EMbmInternetradioQgn_indi_tb_previous_white_mask);
+
+				// There are no presets or the only preset is active
+				HBufC* previousToolTipText =
+				CCoeEnv::Static()->AllocReadResourceLC(R_IR_NOW_TOOLTIP_PREVIOUS);
+				CAknButton*  	 button1 = CAknButton::NewL(KIRMifFileName,bitmapId,
+				maskId,0,0,bitmapId,maskId,bitmapId,maskId,KNullDesC ,
+				*previousToolTipText,0,0,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone);
+
+				CleanupStack::PopAndDestroy(previousToolTipText);
+				CleanupStack::PushL(button1);
+				iToolbar->AddItemL( button1, EAknCtButton, EIRCmdStepPrevPreset, 0, 0 );
+				CleanupStack::Pop(button1);
+
+				if(!iNowPlayingWrapper->iPlaying)
+					{
+					bitmapId=iUi->ChooseToolBarBitmaps(EMbmInternetradioQgn_indi_tb_play,
+					EMbmInternetradioQgn_indi_tb_play_white);
+
+					maskId=iUi->ChooseToolBarMaskId(EMbmInternetradioQgn_indi_tb_play_mask,
+					EMbmInternetradioQgn_indi_tb_play_white_mask);
+
+					HBufC* playToolTipText = CCoeEnv::Static()->AllocReadResourceLC( R_IR_NOW_TOOLTIP_PLAY);
+					CAknButton*    button2 = CAknButton::NewL(KIRMifFileName,bitmapId,
+					maskId,0,0,bitmapId,maskId,bitmapId,maskId,KNullDesC ,
+					*playToolTipText,0,0,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone);
+
+					CleanupStack::PopAndDestroy(playToolTipText);
+					CleanupStack::PushL(button2);
+					iToolbar->AddItemL(button2, EAknCtButton, EIRCmdPlay, 0, 1 );
+					CleanupStack::Pop(button2);
+					}
+				else
+					{
+
+					bitmapId=iUi->ChooseToolBarBitmaps(EMbmInternetradioQgn_indi_tb_stop,
+					EMbmInternetradioQgn_indi_tb_stop_white);
+
+					maskId=iUi->ChooseToolBarMaskId(EMbmInternetradioQgn_indi_tb_stop_mask,
+					EMbmInternetradioQgn_indi_tb_stop_white_mask);
+
+					HBufC* stopToolTipText = CCoeEnv::Static()->AllocReadResourceLC( R_IR_NOW_TOOLTIP_STOP);
+					CAknButton*    button2 = CAknButton::NewL(KIRMifFileName,bitmapId,
+					maskId,0,0,bitmapId,maskId,bitmapId,maskId,KNullDesC
+					,*stopToolTipText,0,0,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone);
+
+					CleanupStack::PopAndDestroy(stopToolTipText);
+					CleanupStack::PushL(button2);
+					iToolbar->AddItemL(button2, EAknCtButton, EIRCmdStop, 0, 1 );
+					CleanupStack::Pop(button2);
+					}
+
+
+				bitmapId=iUi->ChooseToolBarBitmaps(EMbmInternetradioQgn_indi_tb_next,
+				EMbmInternetradioQgn_indi_tb_next_white);
+
+				maskId=iUi->ChooseToolBarMaskId(EMbmInternetradioQgn_indi_tb_next_mask,
+				EMbmInternetradioQgn_indi_tb_next_white_mask);
+
+				HBufC* nextToolTipText1 = CCoeEnv::Static()->AllocReadResourceLC(R_IR_NOW_TOOLTIP_NEXT);
+				CAknButton*   button3 = CAknButton::NewL(KIRMifFileName,bitmapId,
+				maskId,	0,0,bitmapId,maskId,bitmapId,maskId,KNullDesC ,
+				*nextToolTipText1,0,0,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone,KAknsIIDNone);
+
+				CleanupStack::PopAndDestroy(nextToolTipText1);
+				CleanupStack::PushL(button3);
+				iToolbar->AddItemL(button3, EAknCtButton, EIRCmdStepNextPreset, 0, 2 );
+				CleanupStack::Pop(button3);
+
+				// Take toolbar control event handling from touch pane.
+				// Events need to be forwarded to touch pane manually.
+				iToolbar->SetToolbarVisibility(ETrue, EFalse);
+				}
+			if(!iShowToolBar)
+				{
+				iToolbar->SetItemDimmed(EIRCmdStepNextPreset,ETrue,ETrue);
+				iToolbar->SetItemDimmed(EIRCmdStepPrevPreset,ETrue,ETrue);
+				}
+			if(iUi->IsCallActive())
+				{
+				if(!iNowPlayingWrapper->iPlaying)
+					{
+					iToolbar->SetItemDimmed(EIRCmdPlay,ETrue,ETrue);
+					}
+				else
+					{
+					iToolbar->SetItemDimmed(EIRCmdStop,ETrue,ETrue);
+					}
+				}
+
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::ConstructToolbarL - Exiting" );
+	}
+
+
+// --------------------------------------------------------------------------
+// CIRNowPlayingView::OfferToolbarEventL
+// --------------------------------------------------------------------------
+//
+void CIRNowPlayingView::OfferToolbarEventL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::OfferToolbarEventL - Entering" );
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRNowPlayingView::OfferToolbarEventL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::Displaylogo
+// Simulate user pressing play immediately when came into this view.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DisplaylogoL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplaylogoL - Entering" );
+	if(iContainer)
+		{
+		iStationHasLogo=ETrue;
+		if(iNowPlayingWrapper->GetView()==EFav||iNowPlayingWrapper->GetView()==ESearch
+		||iNowPlayingWrapper->GetView()==EStations
+		|| iNowPlayingWrapper->GetView()==EBrowseByTopStations
+		|| iNowPlayingWrapper->GetView()==EPls)
+			{
+			iStationHasLogo=iContainer->StationLogoControl().SwitchToLogoL( iLogoIndex );
+			}
+	else if(iNowPlayingWrapper->GetView()==ELastplayed
+	||iNowPlayingWrapper->GetView()==EHistoryView)
+		{
+		iStationHasLogo=iContainer->StationLogoControl().SwitchToLogoL( iIndex );
+		}
+
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::DisplaylogoL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// From MIRLogoControlObserver.
+// CIRNowPlayingView::LogoReadyForDisplayL
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::LogoReadyForDisplayL()
+    {
+    IRLOG_DEBUG( " CIRNowPlayingView::LogoReadyForDisplayL " );
+    if ( iContainer->RadioIdle().State() != CIRRadioIdle::EStopped )
+        {
+        iContainer->RadioIdle().HandleCommandL( EShutdown );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From MIRLogoControlObserver.
+// CIRNowPlayingView::LogoConversionFailedL
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::LogoConversionFailedL()
+    {
+    IRLOG_DEBUG( "CIRNowPlayingView::LogoConversionFailedL " );
+    if ( iContainer->RadioIdle().State() == CIRRadioIdle::EStopped )
+        {
+        iContainer->RadioIdle().HandleCommandL( EStartup );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::GetLogo
+// Simulate user pressing play immediately when came into this view.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::GetLogoL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::GetLogoL - Entering" );
+	if(iContainer)
+	{
+	iLogoIndex=iRockerIndex;
+	if(iNowPlayingWrapper->iNowPlayingPreset->GetImgUrl().Length() != 0)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+		GetLogoDownloadEngine()->SendRequestL(iNowPlayingWrapper->iNowPlayingPreset,
+						this,KTwo,KSize,KSize);
+		}
+
+	else
+		{
+		iStationHasLogo=EFalse;
+		iDefaultLogo=ETrue;
+		}
+
+	}
+	IRLOG_DEBUG( "CIRNowPlayingView::GetLogoL - Exiting" );
+
+	}
+// ---------------------------------------------------------
+// CIRNowPlayingView::HandleForegroundEventL
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::HandleForegroundEventL(TBool aForeground)
+	{
+	IRLOG_DEBUG2(" *** S60InternetRadio -- CIRNowPlayingView::HandleForegroundEventL(%d)",aForeground);
+
+	CIRBaseView::HandleForegroundEventL(aForeground);
+
+    if (aForeground)
+        {
+		if (iStartUp)
+			{
+			CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+			iStartUp = EFalse;
+			if(appUi->SystemEventCollector().IsNetworkCoverage())
+				{
+				HandleSystemEventL(EIRNetworkCoverageUp);
+				}
+			else
+			{
+			HandleSystemEventL(EIRNetworkCoverageDown);
+			}
+			if(!iEaualizerOn)
+				{
+				if(iContainer && !iCallActive)
+					{
+					iFadeStyle=EIRFadeUnknown;
+			delete iConnectionCleanupTimer;
+			iConnectionCleanupTimer = NULL;
+        TRAPD( err, iConnectionCleanupTimer = CPeriodic::NewL( CActive::EPriorityStandard ) )
+        if ( err == KErrNone )
+            {
+            iConnectionCleanupTimer->Start( KWaitTimeInMicroSeconds, 0,
+            			 TCallBack( StaticConnectionCleanupCallback, this ) );
+            }
+					}
+				}
+			}
+		else
+		{
+		if(!iEaualizerOn)
+			{
+			if(	iContainer && !iCallActive)
+				{
+				if ( iContainer )
+	                {
+	                iContainer->LayoutControl();
+	                }
+				iFadeStyle=EIRFadeNoFade;
+				DrawViewL(iStationHasLogo);
+
+				}
+
+			}
+		}
+		}
+	else
+		{
+		if(iContainer)
+			{
+			CAlfEnv* env = CAlfEnv::Static();
+			if ( env )
+				{
+				iContainer->RadioIdle().HandleCommandL( EShutdown );
+				}
+			}
+
+		/*if(iContainer)
+			{
+			if(iVolPopup->IsVisible())
+				{
+				iVolPopup->CloseVolumePopup();
+				}
+			}*/
+		}
+}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::Draw
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::DrawViewL( TBool aLogoStatus )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DrawViewL - Entering" );
+	if(iContainer)
+	{
+	if(iBuffer!=KNullDesC)
+		{
+			CIRStationInformationData* data = CIRStationInformationData::NewL( *iCoeEnv );
+			CleanupStack::PushL( data );
+			CIRStationInformationDisplay& display = iContainer->StationInformationDisplay();
+			data->SetFadeDirectionality( iFadeStyle );
+			data->SetNameL(iBuffer);
+			if(iMetadata!=KNullDesC)
+				{
+				data->SetRdsPsNameL(iMetadata);
+				}
+			if(iNowPlayingWrapper->GetView()==EFav)
+			{
+			if(iIndex>=0)
+			data->SetIndexL(iIndex);
+			}
+		RBuf bitrate;
+		bitrate.CleanupClosePushL();
+	if(iShowBitrate || iNowPlayingWrapper->iPlaying)
+		{
+		TInt bitRate(0);
+		RProperty::Get ( KUidActiveInternetRadioApp, KIRPSBitrate, bitRate );
+		HBufC* BitRate = StringLoader::LoadLC(R_IRAPP_NOWPLAYING_BITRATE, bitRate);
+		bitrate.Create(BitRate->Length());
+		bitrate.Copy(*BitRate);
+		CleanupStack::PopAndDestroy(BitRate);
+		DisplayBitrate(bitrate);
+		}
+	///displaying the byte counter///////
+	iUi->UpdateNowPlayingByteCounter();
+	iContainer->StationLogoControl().SetLogoFadeStyle( iFadeStyle );
+		if( iFadeStyle == EIRFadeNoFade
+		&& iContainer->RadioIdle().State() != CIRRadioIdle::EStopped )
+			{
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				iContainer->RadioIdle().UpdateRadioIdleContent( bitrate,iBitrateIndex  );
+				}
+			else
+				{
+				iContainer->RadioIdle().UpdateRadioIdleContent( data->Name(),iBitrateIndex );
+				}
+			iContainer->RadioIdle().UpdateRadioIdleContent( data->Name(),	iNameIndex  );
+			iContainer->RadioIdle().UpdateRadioIdleContent( data->Name(),iNameIndex1 );
+			iContainer->RadioIdle().UpdateRadioIdleContent( data->RdsPsName(),iMetadataIndex  ); // Rds
+			if(iNowPlayingWrapper->iNowPlayingPreset->GetGenreName().Length())
+				{
+				iContainer->RadioIdle().UpdateRadioIdleContent(
+				iNowPlayingWrapper->iNowPlayingPreset->GetGenreName(),iPSNameIndex );
+				}
+			else
+				{
+				iContainer->RadioIdle().UpdateRadioIdleContent( data->Name(),iPSNameIndex); // PS name, updated later
+				}
+			}
+		else
+			{
+			switch ( iFadeStyle )
+				{
+				case EIRFadeLeftToRight:
+				iContainer->RadioIdle().SetIdleFadeStyle( CIRRadioIdle::EFadeRight );
+				break;
+				case EIRFadeRightToLeft:
+				iContainer->RadioIdle().SetIdleFadeStyle( CIRRadioIdle::EFadeLeft );
+				break;
+				case EIRFadeNoFade:
+				iContainer->RadioIdle().SetIdleFadeStyle( CIRRadioIdle::EFadeStyleNone );
+				break;
+				default:
+				break;
+				}
+			if(!aLogoStatus)
+				{
+				iContainer->StationLogoControl().FadeOutLogo(iRockerIndex);
+				}
+			if ( iContainer->RadioIdle().State() != CIRRadioIdle::EStopped )
+				{
+				iContainer->RadioIdle().HandleCommandL( EShutdown );
+				}
+			// Tuned to new station which has no logo, set data and start radio idle.
+			/*lint -save -e744 (Info -- Boolean within 'left side of && within if' always evaluates to True)*/
+			iContainer->RadioIdle().HandleCommandL( EResetContent );
+			if ( !aLogoStatus )
+			/*lint -restore*/
+				{
+
+				if(iNowPlayingWrapper->iPlaying)
+					{
+					iBitrateIndex = iContainer->RadioIdle().AddRadioIdleContentL( bitrate );
+					}
+				else
+					{
+					iBitrateIndex=iContainer->RadioIdle().AddRadioIdleContentL( data->Name() );
+					}
+				iNameIndex = iContainer->RadioIdle().AddRadioIdleContentL( data->Name() );
+				iNameIndex1=iContainer->RadioIdle().AddRadioIdleContentL( data->Name() );
+				iMetadataIndex = iContainer->RadioIdle().AddRadioIdleContentL( data->RdsPsName() ); // Rds
+				if(iNowPlayingWrapper->iNowPlayingPreset->GetGenreName().Length())
+					{
+					iPSNameIndex = iContainer->RadioIdle().AddRadioIdleContentL(
+					iNowPlayingWrapper->iNowPlayingPreset->GetGenreName());
+					}
+				else
+					{
+					iPSNameIndex = iContainer->RadioIdle().AddRadioIdleContentL( data->Name()); // PS name, updated later
+					}
+				}
+
+			}
+       if ( !aLogoStatus && iContainer->RadioIdle().State() == CIRRadioIdle::EStopped )
+	       {
+	       iContainer->RadioIdle().HandleCommandL( EStartup );
+	       }
+       else if(aLogoStatus)
+	       {
+	       DisplaylogoL();
+	       }
+		display.SetDisplayedDataL( *data );
+		CleanupStack::PopAndDestroy(&bitrate);
+		CleanupStack::PopAndDestroy( data );
+		iStationHasLogo=aLogoStatus;
+		}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::DrawViewL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::StartTimerL()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::StartTimerL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::StartTimerL - Entering" );
+	iBuffer.Close();
+	iBuffer.Create(iNowPlayingWrapper->iNowPlayingPreset->GetName().Length()+ KPresetNumbering);
+	iBuffer.Append(iNowPlayingWrapper->iNowPlayingPreset->GetName());
+	if(!iSameUrl)
+		{
+		iNowPlayingWrapper->SetMarquee(EFalse);
+		iNowPlayingWrapper->SetMedadataForErrotrConditions(ETrue);
+		DisplaySongArtistNameL(KConst1,KConst1);
+		//iNowPlayingWrapper->SetMetadataL()
+		}
+	iSameUrl=EFalse;
+	iStationHasLogo=EFalse;
+
+	DrawViewL(iStationHasLogo);
+	GetLogoL();
+	IRLOG_DEBUG( "CIRNowPlayingView::StartTimerL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::ReFreshView()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::ReFreshViewL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::ReFreshViewL - Entering" );
+	if ( iContainer )
+		{
+        DrawViewL(iStationHasLogo);
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::ReFreshView - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::ResponseL()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::ResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::ResponseL " );
+	//TO DO :: The line can be removed in future written to fix
+	// Code Scanner ERROR
+		return;
+	//no implementation
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::PresetResponseL()
+//Callback To Receive ISDS Preset
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::PresetResponseL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::PresetResponseL - Entering" );
+
+	if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+		{
+		// TO Do
+		// Check the condition in If
+		//!iNowPlayingWrapper->GetWhenUserCancelsIsdsBufferingWaitBar()
+			iNowPlayingWrapper->SetListenFromIsdsValue(ETrue);
+			iNowPlayingWrapper->ListenToChannelL(aPreset);
+			StartTimerL();
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::PresetResponseL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetsameUrlFlag()
+//For displaing the metadata
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::SetsameUrlFlag(TBool aSameUrl)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::SetsameUrlFlag - Entering" );
+	iSameUrl=aSameUrl;
+	IRLOG_DEBUG( "CIRNowPlayingView::SetsameUrlFlag - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetsameUrlFlag()
+//For displaing the metadata
+// ---------------------------------------------------------------------------
+//
+TInt CIRNowPlayingView::GetsameUrlFlag()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::SetsameUrlFlag - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingView::SetsameUrlFlag - Exiting" );
+	return iSameUrl;
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::ErrorL()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::ErrorL - Entering" );
+	if(iIsdsWrapper->GetListenRequest())
+		{
+		iRockerIndex=iPresetCount;
+		iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+		iNowPlayingWrapper->DestroyWaitDialogL();
+		iIsdsWrapper->SetListenRequest(EFalse);
+		}
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;
+		}
+	if(iIsdsWrapper->iDialogDismissed)
+		{
+		iIsdsWrapper->iDialogDismissed=EFalse;
+		iRockerIndex=iPresetCount;
+		}
+	if(iUi->iNowPlayingWrapper->iSyncPreset)
+		{
+		iRockerIndex=iPresetCount;
+		iNowPlayingWrapper->DestroyWaitDialogL();
+		iUi->iNowPlayingWrapper->iSyncPreset=EFalse;
+		}
+	//TO DO :: The line can be removed in future nad written to fix
+	// Code Scanner ERROR
+      IRLOG_DEBUG( "CIRNowPlayingView::ErrorL - Exiting" );
+      return;
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::GetStereoModeL()
+// Used Getting the status of Stereo Mode
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::GetStereoModeL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::GetStereoModeL - Entering" );
+	iStereoMode=iIRSettings->GetStereoMode();
+	if(iStereoMode)
+		{
+		iDs=EOnCmd;
+
+		//Used for later in implementing Stereo mode Functionality
+
+		if(!iStereoEffect)  // If stereo widening is ON and not constructed
+				{
+				TUint stereoLevel = KHundred;
+				// cmdUtil ownership passed into new object
+				TRAPD(error,iStereoEffect = CStereoWidening::NewL(
+				*(iNowPlayingWrapper->GetMediaClientInstance()->GetPlayerInstance()),EFalse, stereoLevel));
+				if(error)
+					{
+					iStereoEffect = NULL;
+					User::Leave(KErrNotSupported);
+					}
+				}
+		if(iNowPlayingWrapper->iPlaying)
+			{
+			iStereoEffect->EnableL();
+			TUint8 level = KHundred;
+			iStereoEffect->SetStereoWideningLevelL( level );
+			iStereoEffect->ApplyL();
+			}
+		}
+	else
+		{
+		iDs=EOffCmd;
+
+		//For future use
+		//Used for later in implementing Stereo mode Functionality
+
+		if (iStereoEffect)   // If audio effects was not on, then no need to disable
+			{
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				iStereoEffect->DisableL();
+				}
+			}
+
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingView::GetStereoModeL - Exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::LaunchMusicShopL()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::LaunchMusicShopL()
+	{
+#ifdef MUSICSHOP_AVAILABLE
+	  IRLOG_DEBUG( "Entered CIRNowPlayingView::LaunchMusicShopL - Entering" );
+
+	  TApaTaskList tasList( iCoeEnv->WsSession() );
+	  TApaTask task = tasList.FindApp( KUidMusicStore );
+
+	  if ( task.Exists() )
+		  {
+		  task.BringToForeground();
+		  }
+	  else
+		{
+		RApaLsSession session;
+		if ( KErrNone == session.Connect() )
+			{
+			CleanupClosePushL( session );
+			TThreadId threadId;
+			session.CreateDocument( KNullDesC, KUidMusicStore, threadId );
+			CleanupStack::PopAndDestroy(&session);
+			}
+		}
+	  IRLOG_DEBUG( "Leaving CIRNowPlayingView::LaunchMusicShopL - Exiting" );
+#endif
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::DoFindInMusicShopL()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DoFindInMusicShopL( const TDesC& aSongName,
+                                            const TDesC& aArtistName,
+                                            const TDesC& aAlbumName,
+                                            TBool aMusicFlag )
+	{
+	IRLOG_DEBUG( "Entered CIRNowPlayingView::DoFindInMusicShopL - Entering" );
+#ifdef MUSICSHOP_AVAILABLE
+	HBufC* url = NULL;
+#ifdef __IRA_FEATURE_EQUALIZER
+	if(aMusicFlag && iMPXFindInShop)
+		{
+		//which means, create url for to FindInShop operation
+		url = iMPXFindInShop->CreateSearchURLL( aSongName,
+	                                  aArtistName,
+	                                  aAlbumName,
+	                                  KNullDesC,     // Composer - Not used
+	                                  KNullDesC );   // Genre - Not used
+		CleanupStack::PushL(url);   // the pointer will be poped
+		}
+	else
+#endif // __IRA_FEATURE_EQUALIZER
+		{
+		//which means, crate url for to GotoMusicStore operation
+		url = CentralRepositoryStringValueL(KCRUidMusicShopSettings,KMusicShopURI);
+		CleanupStack::PushL(url);   // the pointer will be poped
+		}
+
+	RProperty::Set( KUidMusicStore,
+	          KMShopCategoryId,
+	          KFindInMShopKeyValid );  // Set Key to Valid
+
+	RProperty::Set( KUidMusicStore,
+	          KMShopCategoryName,
+	          *url );
+	LaunchMusicShopL();
+	if(url)
+		{
+		CleanupStack::PopAndDestroy(url);
+		}
+
+	REComSession::FinalClose();
+#else
+    if(aSongName.Length() > 0 || aArtistName.Length() > 0 || aAlbumName.Length() > 0
+        || aMusicFlag)
+    {
+        // do nothing, just remove build warnings.
+    }
+#endif
+	IRLOG_DEBUG( "Leaving CIRNowPlayingView::DoFindInMusicShopL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::CentralRepositoryStringValueL
+// Retrievs the string from Central Repository for the specified key and cen rep uid
+// Transfers the ownership of the returned HBufC object
+// The caller must takecare of deleting the returned object*
+// ---------------------------------------------------------------------------
+//
+HBufC* CIRNowPlayingView::CentralRepositoryStringValueL(
+	const TUid& aRepositoryUid, TUint32 aKey ) const
+	{
+	IRLOG_DEBUG( "CIRNetworkController::CentralRepositoryStringValueL- Entering" );
+	CRepository* pRepository = CRepository::NewL( aRepositoryUid );
+	CleanupStack::PushL( pRepository );
+
+	TInt length = KMusicStoreURLSize;
+	HBufC* valueString = HBufC::NewLC( length );
+	TInt error( KErrTooBig );
+	do
+		{
+		TPtr ptr = valueString->Des();
+		error = pRepository->Get( aKey, ptr );
+		if ( error == KErrTooBig )
+			{
+			CleanupStack::PopAndDestroy( valueString );
+			length = KTwo * length;
+			valueString = HBufC::NewLC( length );
+			}
+		} while ( error == KErrTooBig );
+
+	if ( error )
+		{
+		TPtr ptr = valueString->Des();
+		ptr.Copy( KNullDesC() );
+		}
+
+	CleanupStack::Pop( valueString );
+	CleanupStack::PopAndDestroy( pRepository );
+	IRLOG_DEBUG( "CIRNetworkController::CentralRepositoryStringValueL - Exiting." );
+	return valueString;
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::ListenFromPls()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::ListenFromPlsL()
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::ListenFromPlsL - Entering" );
+	TInt ListBoxIndex =iRockerIndex;
+	TInt UrlIndex = (ListBoxIndex * KTwo);
+
+	CIRIsdsPreset* preset = CIRIsdsPreset::NewL();
+	CleanupStack::PushL( preset );
+
+	//copy channel name
+	TBuf<KChannelNameSize> channelName;
+	if(UrlIndex>=0 && UrlIndex <iUi->iURLs.Count())
+		{
+		channelName.Copy(*( iUi->iURLs[UrlIndex+1]));
+		}
+	preset->SetName(channelName);
+	preset->SetChannelType(0);
+	channelName.Zero();
+	//copy channel url
+	channelName.Copy(*( iUi->iURLs[UrlIndex] ) );
+	_LIT(KServerName,"NA");
+
+	//set station information to NA
+	preset->SetUrlL(KServerName,channelName,0);
+	preset->SetUrlCount();
+
+
+		// Set the channel as last played and currently playing
+*iNowPlayingWrapper->iNowPlayingPreset = *preset;
+	CleanupStack::PopAndDestroy( preset );
+
+	//connecting to server
+	iNowPlayingWrapper->SetCurrentConnectionSource(EIRAdhocExternal);
+	iNowPlayingWrapper->ConnectToChannelL(*iNowPlayingWrapper->iNowPlayingPreset);
+
+
+	IRLOG_DEBUG( "Leaving CIRNowPlayingView::ListenFromPlsL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::HandleControlEventL()
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView ::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::HandleControlEventL - Entering" );
+	if( AknLayoutUtils::PenEnabled() )
+		{
+		if(aEventType==EEventStateChanged)
+			{
+			if(aControl==iVolPopup)
+				{
+				iSettingsValue=iIRSettings->GetVolumeSetting();
+				iVolumeBarValue=iVolPopup->Value();
+				if(iVolumeBarValue<iSettingsValue)
+					{
+						TInt diff=iSettingsValue-iVolumeBarValue;
+						if(diff>1 && (iVolumeBarValue==0 ))
+							{
+							TInt index = iNowPlayingWrapper->GetMediaClientInstance()->MaxVolume()/KMaxVolume;
+							TInt volume = index*iVolumeBarValue;
+							iVolumeMute=ETrue;
+							iNowPlayingWrapper->GetMediaClientInstance()->SetVolume(volume);
+							}
+						else
+							{
+							if(iVolumeMute)
+								{
+								iVolPopup->SetValue(2);
+								iVolumeBarValue=iVolPopup->Value();
+								}
+							iVolumeMute=EFalse;
+							iNowPlayingWrapper->SetVolumeL(iVolumeBarValue);
+							}
+					}
+				else
+					{
+					if(iVolumeMute)
+						{
+						iVolPopup->SetValue(2);
+						iVolumeBarValue=iVolPopup->Value();
+						}
+					iNowPlayingWrapper->SetVolumeL(iVolumeBarValue);
+					iVolumeMute=EFalse;
+					}
+				}
+			}
+		}
+	IRLOG_DEBUG( "Leaving CIRNowPlayingView::HandleControlEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetLastPlayedValue()
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::SetLastPlayedValue(TInt aLastPlayed)
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::SetLastPlayedValue - Entering" );
+	iUpdateLastplayed=aLastPlayed;
+	IRLOG_DEBUG( " CIRNowPlayingView::SetLastPlayedValue - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetStationNameFlag()
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::SetStationNameFlag(TInt aUpdateStationName)
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::SetStationNameFlag - Entering" );
+	iUpdateStationName=aUpdateStationName;
+	IRLOG_DEBUG( "Leaving CIRNowPlayingView::SetStationNameFlag - Exiting" );
+	}
+
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::HandleSystemEventL
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRNowPlayingView::::HandleSystemEventL - Entering");
+
+	CIRUi* appUi = static_cast<CIRUi*>(AppUi());
+	switch (aEventType)
+		{
+		case EIRNetworkCoverageUp:
+			{
+			break;
+			}
+		case EIRNetworkCoverageDown:
+			{
+			break;
+			}
+		case EIRCallActivated:
+			{
+			iCallActive=ETrue;
+			if( appUi->ActiveView() == KIRNowPlayingViewID )
+				{
+				ConstructToolbarL();
+				}
+				iUi->HandleCallActiveL(aEventType);
+
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+				iCallActive=EFalse;
+				iUi->HandleCallActiveL(aEventType);
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::HandleSystemEventL - Exiting." );
+	return;
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetPlayingValue()
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::SetPlayingValue(TInt aPlaying)
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::SetLastPlayedValue - Entering" );
+	iPlaying=aPlaying;
+	IRLOG_DEBUG( " CIRNowPlayingView::SetLastPlayedValue - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::HandleMediaKeys()
+// function handles the hardware media keys
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::HandleMediaKeysL(TRemConCoreApiOperationId aOperationId,
+				TRemConCoreApiButtonAction aButtonAct)
+	{
+	switch(aOperationId)
+		{
+		case ERemConCoreApiVolumeUp:
+			{
+			TInt volume=iIRSettings->GetVolumeSetting();
+			if(volume==KMaxVolume)
+				{
+				if(!iVolPopup->IsFocused())
+				iVolPopup->ShowVolumePopupL();
+				}
+			else if(volume==KMinVolume && !iVolumeMute)
+				{
+				iVolPopup->SetValue(KMinVolume+(KMaxVolume/KMaxVolumeRange));
+				if(!iVolPopup->IsFocused())
+				iVolPopup->ShowVolumePopupL();
+				iNowPlayingWrapper->SetVolumeL(iVolPopup->Value());
+				}
+			else
+				{
+				switch(aButtonAct)
+					{
+					case ERemConCoreApiButtonPress:
+					case ERemConCoreApiButtonClick:
+						{
+						iVolumeMute=EFalse;
+						iVolPopup->SetValue(2);
+						if(!iVolPopup->IsFocused())
+						iVolPopup->ShowVolumePopupL();
+						iNowPlayingWrapper->SetVolumeL(iVolPopup->Value());
+						}
+					break;
+					case ERemConCoreApiButtonRelease:
+						{
+
+						}
+					break;
+					}
+				}
+
+
+			}
+		break;
+		case ERemConCoreApiVolumeDown:
+			{
+			TInt volume=iIRSettings->GetVolumeSetting();
+
+			if(volume==KMinVolume && !iVolumeMute)
+				{
+				if(!iVolPopup->IsFocused())
+				iVolPopup->ShowVolumePopupL();
+				}
+			else if(volume==KMaxVolume)
+				{
+				iVolPopup->SetValue(KMaxVolume-(KMaxVolume/KMaxVolumeRange));
+				if(!iVolPopup->IsFocused())
+				iVolPopup->ShowVolumePopupL();
+				iNowPlayingWrapper->SetVolumeL(iVolPopup->Value());
+				}
+			else
+				{
+				switch(aButtonAct)
+					{
+					case ERemConCoreApiButtonPress:
+					case ERemConCoreApiButtonClick:
+						{
+						iVolumeMute=EFalse;
+						TInt volume=iIRSettings->GetVolumeSetting();
+                        TInt value =volume - (KMaxVolume/KMaxVolumeRange);
+							if(value==0)
+								{
+								iVolumeMute=EFalse;
+								}
+							iVolPopup->SetValue(2);
+							if(!iVolPopup->IsFocused())
+							iVolPopup->ShowVolumePopupL();
+							iNowPlayingWrapper->SetVolumeL(iVolPopup->Value());
+						}
+					break;
+					case ERemConCoreApiButtonRelease:
+						{
+
+						}
+					break;
+					}
+				}
+
+
+			}
+			break;
+		}
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetVolumePopUpValue()
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::SetVolumePopUpValue(TInt aValue)
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::SetVolumePopUpValue - Entering" );
+
+	  iVolPopup->SetValue(aValue);
+	IRLOG_DEBUG( " CIRNowPlayingView::SetVolumePopUpValue - Exiting" );
+	}
+
+	// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::GetVolumePopUpValue()
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRNowPlayingView::GetVolumePopUpValue()
+	{
+	IRLOG_DEBUG( " CIRNowPlayingView::GetVolumePopUpValue - Entering" );
+
+	IRLOG_DEBUG( " CIRNowPlayingView::GetVolumePopUpValue - Exiting" );
+     return iVolPopup->Value();
+	}
+
+// ---------------------------------------------------------------------------
+// From class CBaseView.
+// Returns help context for this view.
+
+// ---------------------------------------------------------------------------
+//
+TCoeHelpContext CIRNowPlayingView::HelpContext() const
+    {
+    return TCoeHelpContext( KIRMCVUid, KIR_HELP_NOW );
+    }
+
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::LaunchFMTransmitterL()
+// Launch FM Transmitter application
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::LaunchFMTransmitterL()
+    {
+    IRLOG_DEBUG( "CIRNowPlayingView::LaunchFMTransmitterL - Entering" );
+
+    if ( FeatureManager::FeatureSupported( KFeatureIdFmtx ) )
+        {
+        TApaTaskList tasList( iCoeEnv->WsSession() );
+        TApaTask task = tasList.FindApp( KFmTxAppUid );
+        if ( task.Exists() )
+            {
+            task.BringToForeground();
+            }
+        else
+            {
+            RProcess process;
+            TApaAppInfo appInfo;
+            RApaLsSession session;
+            if ( KErrNone == session.Connect() )
+                {
+                CleanupClosePushL( session );
+                TThreadId threadId;
+                session.CreateDocument( KNullDesC, KFmTxAppUid, threadId );
+                CleanupStack::PopAndDestroy(&session);
+                }
+            }
+        }
+	IRLOG_DEBUG( "CIRNowPlayingView::LaunchFMTransmitterL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::DeleteSteroEffect()
+// Destroys the Stereo Effect Corresponing the Player
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DeleteSteroEffect(TBool /*aStereo*/)
+{
+IRLOG_DEBUG( "CIRNowPlayingView::DeleteSteroEffect - Entering" );
+
+	if(iStereoEffect)
+	{
+		delete iStereoEffect;
+		iStereoEffect=NULL;
+
+	}
+IRLOG_DEBUG( "CIRNowPlayingView::DeleteSteroEffect - Exiting" );
+
+}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::DisableVolumePopup()
+// Disbale the volumepopup when it is Active
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::DisablePlayer()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::DisablePlayer - Entering" );
+	if(iUi->IsCallActive() )
+		{
+		if(iUi->GetCurrentNetworkType().Compare(KWiFi)==0)
+			{
+			iNowPlayingWrapper->StopPlayer();
+			iNowPlayingWrapper->DoPlayingStateChanged(EFalse);
+			iUi->SetPlayStateWhileCall(ETrue);
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::DisablePlayer - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// From class MAlfActionObserver.
+// CIRNowPlayingView::HandleActionL
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::HandleActionL( const TAlfActionCommand& aActionCommand )
+    {
+	IRLOG_DEBUG( "CIRNowPlayingView::HandleActionL - Entering" );
+
+    if ( aActionCommand.Id() == KAlfActionIdDeviceLayoutChanged )
+        {
+        if ( iContainer )
+            {
+            iAlfEnv.PrimaryDisplay().SetVisibleArea( ClientRect() );
+            iContainer->LayoutControl();
+           	iFadeStyle=EIRFadeNoFade;
+          /*delete iConnectionCleanupTimer;
+		iConnectionCleanupTimer = NULL;
+        TRAPD( err, iConnectionCleanupTimer = CPeriodic::NewL( CActive::EPriorityStandard ) )
+        if ( err == KErrNone )
+            {
+            iConnectionCleanupTimer->Start( KWaitTimeInMicroSeconds, 0,
+            			 TCallBack( StaticConnectionCleanupCallback, this ) );
+            }*/
+           	if(iStationHasLogo)
+	           	{
+	           	DisplaylogoL();
+	           	}
+			DrawViewL(iStationHasLogo);
+            }
+        }
+    else if ( aActionCommand.Id() == KAlfActionIdSkinChanged )
+    	{
+    	 if ( iContainer )
+    		{
+    		// Update radio idle skin color
+    	    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    	    if ( skin )
+    	    	{
+    	    	TRgb textColor; // text color when not highlighted
+    	    	AknsUtils::GetCachedColor( skin, textColor, KAknsIIDQsnTextColors,
+    	    								 EAknsCIQsnTextColorsCG6 );
+    	    	TRgb highlightColor; // text color when highlighted
+    	    	AknsUtils::GetCachedColor( skin, highlightColor, KAknsIIDQsnTextColors,
+    	    				 EAknsCIQsnTextColorsCG10 );
+    	    	iContainer->RadioIdle().SetPrimaryColor( textColor );
+    	    	iContainer->RadioIdle().SetSecondaryColor( highlightColor );
+	           	iFadeStyle=EIRFadeNoFade;
+	           	ConstructToolbarL();
+	           	if(iStationHasLogo)
+	           		{
+	           		DisplaylogoL();
+	           		}
+				DrawViewL(iStationHasLogo);
+    	    	}
+    		}
+
+    	}
+    else
+    	{
+    	}
+    }
+ // ---------------------------------------------------------
+// void CIRNowPlayingView::SetBitrate()
+// Sets The Bitrates Value
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::SetBitrate(TInt aError)
+{
+IRLOG_DEBUG( "CIRNowPlayingView::SetBitrate - Entering" );
+
+	if(iContainer)
+	{
+   	TInt bitRate(0);
+	if(!aError)
+		{
+		iShowBitrate=ETrue;
+		RProperty::Get ( KUidActiveInternetRadioApp, KIRPSBitrate, bitRate );
+		}
+	else
+		{
+		iShowBitrate=EFalse;
+		}
+	RBuf bitrate;
+	HBufC* BitRate=NULL;
+	TRAPD(err,BitRate= StringLoader::LoadL(R_IRAPP_NOWPLAYING_BITRATE, bitRate);)
+	if(err==KErrNone)
+		{
+		bitrate.Create(BitRate->Length());
+		bitrate.Copy(*BitRate);
+		DisplayBitrate(bitrate);
+		bitrate.Close();
+		}
+	delete BitRate;
+	}
+
+IRLOG_DEBUG( "CIRNowPlayingView::SetBitrate - Exiting " );
+}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::IsMetaData()
+// returns true if there is meta data
+// ---------------------------------------------------------
+TBool CIRNowPlayingView::IsMetaData()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::IsMetaData - Entered " );
+	TBool retVal = ETrue;
+
+	if( iNowPlayingWrapper->MetaData().Song().Length() <= KOne &&
+	    iNowPlayingWrapper->MetaData().Artist().Length() <= KOne )
+		{
+		retVal = EFalse;
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::IsMetaData - Leaving " );
+	return retVal;
+	}
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::MusciStoreEnabledStatus()
+// returns true if music store enabled status is "yes"
+// ---------------------------------------------------------
+TBool CIRNowPlayingView::MusciStoreEnabledStatus()
+    {
+	IRLOG_DEBUG( "CIRNowPlayingView::MusciStoreEnabledStatus - Entered " );
+	_LIT(KMusicStoreEnabled, "yes");
+	TBool retVal = EFalse;
+
+	if (iNowPlayingWrapper->iNowPlayingPreset->
+		      GetMusicStoreStatus().CompareF(KMusicStoreEnabled)==0 )
+		{
+		retVal = ETrue;
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::MusciStoreEnabledStatus - Leaving " );
+	return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetLogoStatus()
+// Sets the Value of Request Pendind While Checking For Network
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::SetRequestPendingWhenNoNetWork(TBool aRequestPending)
+{
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Entering" );
+iRequestPending=aRequestPending;
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Exiting" );
+}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetLogoStatus()
+// Return the Request Pending Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingView::GetRequestPending()
+{
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Entering" );
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Exiting" );
+return iRequestPending;
+}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetLogoStatus()
+// Sets the Value of Request Pendind While Checking For Network
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::SetRequestPendingWhenNoNetWorkForNextOrPrev(TBool aRequestPending)
+{
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Entering" );
+iNextOrPrevRequest=aRequestPending;
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Exiting" );
+}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::SetLogoStatus()
+// Return the Request Pending Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingView::GetRequestPendingForNextOrPreV()
+{
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Entering" );
+IRLOG_DEBUG( "CIRLogoTimer::SetLogoStatus - Exiting" );
+return iNextOrPrevRequest;
+}
+// ---------------------------------------------------------------------------
+// SetRockerIndex()
+// Sets the Current Playing Index
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::SetRockerIndex(TInt aRockerIndex  )
+	{
+
+	IRLOG_DEBUG( "CIRNowPlayingView::SetRockerIndex - Entering" );
+	iRockerIndex=aRockerIndex;
+	IRLOG_DEBUG( "CIRNowPlayingView::SetRockerIndex - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// GetRockerIndex()
+// Returns The current Playing Index
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRNowPlayingView::GetRockerIndex( )
+	{
+
+	IRLOG_DEBUG( "CIRNowPlayingView::GetRockerIndex - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingView::GetRockerIndex - exiting" );
+	return iRockerIndex;
+	}
+
+// ---------------------------------------------------------------------------
+// SavePreviousIndex()
+// Sets the Current Playing Index
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingView::SavePreviousIndex(TInt aPresetCount  )
+	{
+
+	IRLOG_DEBUG( "CIRNowPlayingView::SavePreviousIndex - Entering" );
+	iPresetCount=aPresetCount;
+	IRLOG_DEBUG( "CIRNowPlayingView::SavePreviousIndex - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// GetPreviousIndex()
+// Returns The Previous  Index
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRNowPlayingView::GetPreviousIndex( )
+	{
+
+	IRLOG_DEBUG( "CIRNowPlayingView::GetPreviousIndexex - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingView::GetPreviousIndex - exiting" );
+	return iPresetCount;
+	}
+// ---------------------------------------------------------------------------
+// IsVolumeMuted()
+// Returns whether volume is Muted
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingView::IsVolumeMuted( )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::IsVolumeMuted - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingView::IsVolumeMuted - exiting" );
+	return iVolumeMute;
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::MrccatoCommand()
+// This is call back function which observes hardware key events
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::MrccatoCommand(TRemConCoreApiOperationId aOperationId,
+    TRemConCoreApiButtonAction aButtonAct)
+    {
+    IRLOG_INFO3( "CIRNowPlayingView::MrccatoCommand(aOperationId=%d, aButtonAct=%d)", aOperationId, aButtonAct );
+
+
+    switch( aOperationId )
+        {
+        case ERemConCoreApiPausePlayFunction:
+            if( iNowPlayingWrapper->iPlaying )
+                {
+                MrccatoCommand( ERemConCoreApiPause, aButtonAct );
+                }
+            else
+                {
+                // Note that ERemConCoreApiPlaybackSpeedForward is just any value,
+                // it's not used by MrccatoPlay implementation in this class.
+                MrccatoPlay( ERemConCoreApiPlaybackSpeedForward, aButtonAct );
+                }
+            break;
+        case ERemConCoreApiPause:               // -fall through
+        case ERemConCoreApiStop:
+            if( aButtonAct == ERemConCoreApiButtonClick )
+                {
+                if( iNowPlayingWrapper->iPlaying)
+                    {
+                        TRAP_IGNORE( PlayAndStopControlL() )
+                        }
+                }
+
+            break;
+        case ERemConCoreApiForward:
+            if( aButtonAct == ERemConCoreApiButtonClick )
+                {
+                if(iContainer)
+	                {
+	                TRAP_IGNORE(HandleCommandL(EIRCmdStepNextPreset);)
+	                }
+                }
+            break;
+        case ERemConCoreApiBackward:
+            if( aButtonAct == ERemConCoreApiButtonClick )
+                {
+                if(iContainer)
+	                {
+	               TRAP_IGNORE(HandleCommandL(EIRCmdStepPrevPreset);)
+	                }
+                }
+
+            break;
+        default:
+            break;
+        }
+
+    IRLOG_DEBUG( "CIRNowPlayingView::MrccatoCommand - Exiting." );
+    }
+
+// ---------------------------------------------------------
+// CIRNowPlayingView::MrccatoPlay()
+// ---------------------------------------------------------
+//
+void CIRNowPlayingView::MrccatoPlay(TRemConCoreApiPlaybackSpeed IRDEBUGVAR(aSpeed),
+				 TRemConCoreApiButtonAction aButtonAct)
+    {
+    IRLOG_INFO3( "CIRNowPlayingView::MrccatoPlay(aSpeed=%d, aButtonAct=%d)", aSpeed, aButtonAct );
+
+
+    if( aButtonAct == ERemConCoreApiButtonClick )
+        {
+        if( !iNowPlayingWrapper->iPlaying )
+            {
+             if(iContainer)
+	             {
+				 TRAP_IGNORE(PlayAndStopControlL();)
+	             }
+            }
+        }
+
+    IRLOG_DEBUG( "CIRNowPlayingView::MrccatoPlay - Exiting." );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRNowPlayingView::HasBeenActivated()
+// ------------------------------------------------------------------------------
+//
+TBool CIRNowPlayingView::HasBeenActivated() const
+	{
+	return iHasBeenActivated;
+	}
+
+// CIRNowPlayingView::GetCommandId()
+// ------------------------------------------------------------------------------
+//
+TInt CIRNowPlayingView::GetCommandId()
+{
+
+return iCommandId;
+}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingView::UpdateLastplayed()
+// To Update LastPlayed
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::UpdateLastplayedL()
+{
+	if(iNowPlayingWrapper->iNowPlayingPreset)
+		{
+		// store the last played station
+		*iUi->iLastPlayed->iLastPlayedStation = *iNowPlayingWrapper->iNowPlayingPreset;
+		TRAPD(err,iUi->iLastPlayed->CommitLastPlayedChannelL());
+		TInt error=KErrNone;
+		if(err != KErrNone)
+			{
+			error = iUi->iLastPlayed->RemoveLastPlayedFile();
+			User::Leave(error);
+			}
+		}
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::SyncPresetL()
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingView::SyncPresetL(TInt aChid,const TDesC &aModifiedTime)
+    {
+    //sync state set to pending
+	iUi->iNowPlayingWrapper->CreateWaitDialogL();
+	iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+
+	iUi->iNowPlayingWrapper->iSyncPreset = ETrue;
+	iIsdsWrapper->SetSyncPresetObserver( this,this );
+    iUi->iIsdsWrapper->GetISDSInstance()->SyncPresetL(aChid,aModifiedTime);
+    }
+
+// ------------------------------------------------------------------------
+// from MSyncPresetObserver
+// SyncPresetRemovedL()
+// called back when the preset that is synced was removed from isds
+// @param TInt,the preset id
+// -----------------------------------------------------------------------
+void CIRNowPlayingView::SyncPresetRemovedL(TInt /*aId*/)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::SyncPresetRemovedL - Entering." );
+	// TO Do: need to check
+	iNowPlayingWrapper->SetFavFocus(iRockerIndex+1) ;
+	iUi->iNowPlayingWrapper->iSyncPreset = EFalse;
+
+	// Connect to Favourite User-defined preset
+	if(iUi->iFavPresets->iFavPresetList.Count() >= 1)
+		{
+		iUi->iFavPresets->iFavPresetList[iRockerIndex]->
+			CopyPresetData(*iNowPlayingWrapper->iNowPlayingPreset);
+		iNowPlayingWrapper->ConnectToChannelL(*iNowPlayingWrapper->iNowPlayingPreset);
+		StartTimerL();
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::SyncPresetRemovedL - Entering." );
+	}
+
+// -----------------------------------------------------------------------
+// from MSyncPresetObserver
+// SyncPresetChangedL()
+// called back when the preset that is synced has been changed in the isds
+// @param CIRIsdsPreset&,the new preset data
+// ----------------------------------------------------------------------
+void CIRNowPlayingView::SyncPresetChangedL(CIRIsdsPreset& /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::SyncPresetChangedL - Entering." );
+	iUi->iNowPlayingWrapper->iSyncPreset = EFalse;
+	// TO Do: need to check
+	iNowPlayingWrapper->SetFavFocus(iRockerIndex+1);
+	// Connect to Favourite User-defined preset
+	if(iUi->iFavPresets->iFavPresetList.Count() >= 1)
+		{
+		iUi->iFavPresets->iFavPresetList[iRockerIndex]->
+			CopyPresetData(*iNowPlayingWrapper->iNowPlayingPreset);
+		iNowPlayingWrapper->ConnectToChannelL(*iNowPlayingWrapper->iNowPlayingPreset);
+		StartTimerL();
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingView::SyncPresetChangedL - Entering." );
+	}
+
+// -----------------------------------------------------------------------
+// from MSyncPresetObserver
+// SyncPresetNoChangeL()
+// called back when the preset that is synced has not been changed
+// -----------------------------------------------------------------------
+void CIRNowPlayingView::SyncPresetNoChangeL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingView::SyncPresetNoChangeL - Entering." );
+	iUi->iNowPlayingWrapper->iSyncPreset = EFalse;
+	// TO Do: need to check
+	iNowPlayingWrapper->SetFavFocus(iRockerIndex+1);
+
+	if(iUi->iFavPresets->iFavPresetList.Count() >= 1)
+		{
+		iUi->iFavPresets->iFavPresetList[iRockerIndex]->
+			CopyPresetData(*iNowPlayingWrapper->iNowPlayingPreset);
+		iNowPlayingWrapper->ConnectToChannelL(*iNowPlayingWrapper->iNowPlayingPreset);
+		StartTimerL();
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingView::SyncPresetNoChangeL - Entering." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingView::StaticConnectionCleanupCallback
+// ---------------------------------------------------------------------------
+//
+TInt CIRNowPlayingView::StaticConnectionCleanupCallback( TAny* aSelfPtr )
+	{
+	CIRNowPlayingView* self = reinterpret_cast<CIRNowPlayingView*>( aSelfPtr );
+
+	 if(self)
+		 {
+		delete self->iConnectionCleanupTimer;
+		self->iConnectionCleanupTimer = NULL;
+		TRAP_IGNORE(self->DrawViewL(self->iStationHasLogo);)
+		 }
+		return KErrNone;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irnowplayingviewcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,478 @@
+/*
+* 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 <aknutils.h>
+#include <alf/alfanchorlayout.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfvisual.h>
+#include <alf/alftimedvalue.h>
+#include <alf/alfdisplay.h>
+#include <data_caging_path_literals.hrh>
+#include <touchfeedback.h>
+
+
+#include <internetradio.rsg>
+#include <alf/alfimagevisual.h>
+#include <aknview.h>
+#include <aknview.h>
+#include <aknvolumepopup.h>
+#include <stringloader.h>
+#include <e32des8.h>
+#include "internetradio.mbg"
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irnowplayingviewcontainer.h"
+#include "irnowplayingview.h"
+#include "irnowplayingwrapper.h"
+#include "irfavoritesdb.h"
+#include "irstationlogocontrol.h"
+#include "irstationinformationdisplay.h"
+#include "irradioidle.h"
+
+#ifdef MUL_USE_COMMON_COMPONENTS
+using namespace GestureHelper;
+/** The base value for the control group id needed when constructing gesture control. */
+const TInt KIRFreeControlGroupIdBase = 10;
+#endif
+const TInt KControl1 =0;
+
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer::CIRNowPlayingViewContainer()
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer::CIRNowPlayingViewContainer(CAlfEnv& aEnv ):iAlfEnv (aEnv)
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::CIRNowPlayingViewContainer" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewL( CAlfEnv& aEnv )
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewL( CAlfEnv& aEnv,
+				CIRNowPlayingView* aInstance)
+{
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewL" );
+	CIRNowPlayingViewContainer* self = CIRNowPlayingViewContainer::NewLC(aEnv,aInstance);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewL - Exiting." );
+	return self;
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewL( CAlfEnv& aEnv )
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewLC( CAlfEnv& aEnv,
+			CIRNowPlayingView* aInstance)
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewLC - Entering" );
+    CIRNowPlayingViewContainer* self = new( ELeave ) CIRNowPlayingViewContainer(aEnv);
+    CleanupStack::PushL( self );
+    self->ConstructL(aInstance);
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewLC - Exiting" );
+    return self;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingViewContainer::ConstructL( CAlfEnv& aEnv )
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::ConstructL( CIRNowPlayingView* aInstance )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::ConstructL - Entering" );
+	iNowPlayingView=aInstance;
+	#ifdef MUL_USE_COMMON_COMPONENTS
+	    // Control group id that client must not use.
+	 	const TInt freeControlGroupId  = KIRFreeControlGroupIdBase + KIRMaximumViewId.iUid;
+	    CGestureControl::ConstructL( *this, iAlfEnv, iAlfEnv.PrimaryDisplay(), freeControlGroupId );
+	#else
+	    CAlfControl::ConstructL( iAlfEnv );
+	#endif
+	// Create Main View
+	iLayout = CAlfAnchorLayout::AddNewL( *this );
+	LayoutControl();
+	iByteCounter=CAlfTextVisual::AddNewL( *this, iLayout);
+	iBitrate = CAlfTextVisual::AddNewL( *this, iLayout);
+	CAlfDeckLayout* deck = CAlfDeckLayout::AddNewL( *this, iLayout );
+	iLogoControl = CIRStationLogoControl::NewL( Env(), KIRNowPlayingViewID.iUid, deck );
+	iRadioIdle = CIRRadioIdle::NewL( iAlfEnv, KIRNowPlayingViewID.iUid, deck );
+		// Update radio idle skin color
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    if ( skin )
+    	{
+    	TRgb textColor; // text color when not highlighted
+    	AknsUtils::GetCachedColor( skin, textColor, KAknsIIDQsnTextColors, 
+    								EAknsCIQsnTextColorsCG6 );
+    	TRgb highlightColor; // text color when highlighted
+    	AknsUtils::GetCachedColor( skin, highlightColor, KAknsIIDQsnTextColors,
+    								 EAknsCIQsnTextColorsCG10 );
+    	iRadioIdle->SetPrimaryColor( textColor );
+    	iRadioIdle->SetSecondaryColor( highlightColor );
+    	}
+	iStationInformationDisplay = CIRStationInformationDisplay::NewL( iAlfEnv, 
+					KIRNowPlayingViewID.iUid,iLayout);
+	if (iNowPlayingView->iUi->IsLandscapeOrientation() )
+        {
+        // Set display orientation.
+        iStationInformationDisplay->SetDisplayOrientation( ETrue );
+        }
+	iAlfEnv.ControlGroup( KIRNowPlayingViewID.iUid ).AppendL( this ); // Transfers ownership. No leaving code must be run after this call.
+    iFeedback = MTouchFeedback::Instance();
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::ConstructL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer()
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer - Entering" );
+    iLogoControl = NULL;
+	iLayout = NULL;
+	iStationInformationDisplay = NULL;
+	iBitrate = NULL;
+	iByteCounter = NULL;
+	iNowPlayingView = NULL;
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns a reference to the station logo control.
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoControl& CIRNowPlayingViewContainer::StationLogoControl()
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::StationLogoControl" );
+    return *iLogoControl;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns a reference to the radio idle control.
+// ---------------------------------------------------------------------------
+//
+CIRRadioIdle& CIRNowPlayingViewContainer::RadioIdle()
+    {
+    return *iRadioIdle;
+    }
+#ifdef MUL_USE_COMMON_COMPONENTS
+// ---------------------------------------------------------------------------
+// From class MGestureObserver.
+// Called when user makes gestures.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::HandleGestureL( const MGestureEvent& aEvent )
+    {
+    IRLOG_DEBUG(" *** S60VisualRadio -- CVRNowPlayingContainer::HandleGestureL ");
+    TGestureCode eventCode( aEvent.Code( MGestureEvent::EAxisBoth ) );
+    switch ( eventCode )
+        {
+        case GestureHelper::EGestureStart:
+            {
+            if ( iFeedback )
+                {
+                // Give feedback when gesture starts.
+                iFeedback->InstantFeedback( ETouchFeedbackBasic );
+                }
+            break;
+            }
+        case GestureHelper::EGestureTap:
+            {
+            iNowPlayingView->HandleCommandL(EIRCmdVolumeControl);
+            break;
+            }
+        case GestureHelper::EGestureSwipeLeft:
+            {
+            iNowPlayingView->HandleCommandL( EIRCmdStepPrevPreset );
+            break;
+            }
+        case GestureHelper::EGestureSwipeRight:
+            {
+            iNowPlayingView->HandleCommandL( EIRCmdStepNextPreset );
+            break;
+            }
+        default:
+            break;
+        }
+    }
+#else
+
+
+// ---------------------------------------------------------------------------
+// From class CAlfControl.
+// Called when an event occurs.
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingViewContainer::OfferEventL( const TAlfEvent& aEvent )
+	{
+    TBool eventHandled = EFalse;
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::OfferEventL - Entering" );
+	if(aEvent.IsPointerEvent())
+		{
+		if ( iFeedback )
+			{	
+			iFeedback->InstantFeedback( ETouchFeedbackBasic );
+			}
+		TriggerCommandL(EIRCmdVolumeControl);
+        eventHandled = ETrue;
+		}
+	else if(aEvent.IsKeyEvent() )
+		{
+		const TKeyEvent& kEvent = aEvent.KeyEvent();
+		KeyHitL( kEvent.iScanCode );
+		}
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::OfferEventL - Exiting" );
+    return eventHandled;
+	}
+#endif
+// ---------------------------------------------------------------------------
+// Returns a reference to the station information display.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationDisplay& CIRNowPlayingViewContainer::StationInformationDisplay()
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::StationInformationDisplay " );
+    return *iStationInformationDisplay;
+    }
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingViewContainer::SetRdsTextL( const TDesC& aText )
+// Set the text in the visual.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::SetBitrateL( const TDesC& aText )
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetBitrateL - Entering" );
+    iBitrate->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+    iBitrate->SetStyle( EAlfTextStyleSmall );
+    iBitrate->SetTextL( aText );
+    iBitrate->SetWrapping( CAlfTextVisual::ELineWrapManual );
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetBitrateL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingViewContainer::SetRdsTextL1( const TDesC& aText )
+// Set the text in the visual.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::SetByteCounterL( const TDesC& aText )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetByteCounterL - Entering" );
+	iByteCounter->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+	iByteCounter->SetStyle( EAlfTextStyleSmall );
+	iByteCounter->SetTextL( aText );
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetByteCounterL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer::KeyHit()
+// Loads the fonts required to draw this view
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingViewContainer::KeyHitL(  TInt aScanCode 
+	                  /*TVRRockerButtonHitTestType aType */)
+	{
+     IRLOG_DEBUG( "CIRNowPlayingViewContainer::KeyHit - Entering" );
+	TBool ret = EFalse;
+	switch ( aScanCode )
+		{
+		case EStdKeyRightArrow:
+			{
+			TriggerCommandL(EIRCmdStepNextPreset);
+			}
+		break;
+		case EStdKeyLeftArrow:
+			{
+			TriggerCommandL(EIRCmdStepPrevPreset);
+			}
+		break;
+		case EStdKeyDevice3:
+			{
+			if(iNowPlayingView->iNowPlayingWrapper->iPlaying)
+				{
+				TriggerCommandL(EIRCmdStop);
+				}
+			else
+				{
+				TriggerCommandL(EIRCmdPlay);
+				}
+			}
+		break;
+		case EStdKeyUpArrow:
+		break;
+		case EStdKeyDownArrow:
+		break;
+		default:
+		break;
+		}
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::KeyHit - Exiting" );
+	return ret;
+	}
+// ---------------------------------------------------------------------------
+// Layouts this control.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::LayoutControl()
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::LayoutControl - Entering" );
+     TInt ordinal = KControl1;
+	 TInt resId ;
+    
+    
+    //Set anchor for ByteCounter
+    resId = iNowPlayingView->iUi->ChooseLayoutResource( 
+    									 R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT, 
+                                         R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT_MIRRORED, 
+                                         R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT_LANDSCAPE, 
+                                 R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT_LANDSCAPE_MIRRORED );
+    SetLayoutAnchor( ordinal, resId );
+    ordinal++;
+
+    //Set anchor for the BitRate
+     resId = iNowPlayingView->iUi->ChooseLayoutResource( 
+        								 R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT, 
+                                         R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT_MIRRORED, 
+                                         R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT_LANDSCAPE, 
+                                 R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT_LANDSCAPE_MIRRORED );
+    SetLayoutAnchor( ordinal, resId );  
+     ordinal++;
+                                
+    // Set anchor for station logo.
+    resId = iNowPlayingView->iUi->ChooseLayoutResource( 
+    									 R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT, 
+                                         R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT_MIRRORED, 
+                                         R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT_LANDSCAPE, 
+                                 R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT_LANDSCAPE_MIRRORED );
+    SetLayoutAnchor( ordinal, resId );
+     ordinal++;
+
+    // Set anchor for station information.
+    resId = iNowPlayingView->iUi->ChooseLayoutResource(
+    									 R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT, 
+                                         R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT_MIRRORED, 
+                           R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT_LANDSCAPE,
+                           R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT_LANDSCAPE_MIRRORED );
+    SetLayoutAnchor( ordinal, resId );
+    ordinal++;
+    
+    if ( iNowPlayingView->iUi->IsLandscapeOrientation() )
+        {
+        // Set anchor for RDS data on landscape.
+        resId = R_IR_NOWPLAYING_VIEW_METADATA_LAYOUT_LANDSCAPE;
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            resId = R_IR_NOWPLAYING_VIEW_METADATA_LAYOUT_LANDSCAPE_MIRRORED;    
+            }
+        SetLayoutAnchor( ordinal, resId );
+        ordinal++;
+        } 
+    else
+	    {
+        // If RDS data is on separate layout then remove it 
+        iLayout->Detach( ordinal );
+	    }
+    if ( iStationInformationDisplay )
+        {
+        iStationInformationDisplay->SetDisplayOrientation( 
+        			iNowPlayingView->iUi->IsLandscapeOrientation() );
+        }
+    iLayout->UpdateChildrenLayout();
+
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::LayoutControl - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets layout anchor for child visual.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::SetLayoutAnchor( TInt aOrdinal, TInt aResourceId )
+    {
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetLayoutAnchor - Entering" );
+
+    // Read LAFs.
+    TSize size = iAlfEnv.PrimaryDisplay().VisibleArea().Size();
+    TRect rect( size );
+    
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( rect, aResourceId );
+    
+    // Set top/left anchor.
+    iLayout->Attach( aOrdinal, 
+                     EAlfAnchorTypeTopLeft,
+                     TAlfXYMetric( TAlfMetric( layoutRect.Rect().iTl.iX ),
+                     TAlfMetric( layoutRect.Rect().iTl.iY ) ),
+                     EAlfAnchorAttachmentOriginTopLeft );
+
+    // Set bottom/right anchor.
+    iLayout->Attach( aOrdinal, 
+                     EAlfAnchorTypeBottomRight, 
+                     TAlfXYMetric( TAlfMetric( layoutRect.Rect().iBr.iX ),
+                     TAlfMetric( layoutRect.Rect().iBr.iY ) ),
+                     EAlfAnchorAttachmentOriginTopLeft );
+    IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetLayoutAnchor - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Triggers the command to view handling
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::TriggerCommandL( TInt iCommandId)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+	TVwsViewId viewId( KNullUid, KNullUid );
+	CAknViewAppUi* appUi = static_cast<CAknViewAppUi*>( CCoeEnv::Static()->AppUi() );
+	TInt err = appUi->GetActiveViewId( viewId );
+	RProcess process;
+	TSecureId id = process.SecureId();
+	// TO be DOne GetActiveViewId doesn't always work (when switched back to VRA through RadioLauncher icon
+	if( !err && viewId.iAppUid.iUid == id.iId )
+		{
+		CAknView* view = appUi->View( viewId.iViewUid );
+		if( view )
+			{
+			view->ProcessCommandL( iCommandId );
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Exiting" );
+	}
+//Calls the Views Draw Function
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::DrawViewL( TBool aStationHasLogo)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+	iNowPlayingView->DrawViewL(aStationHasLogo);
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irnowplayingwrapper.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3314 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 19, Fri Sep 19 13:00:00 2008 by Rohit
+*  Ref:
+*  Added ASF detection and Integrated CIRAsfPlayer in Now Playing scenario
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <internetradio.rsg>
+#include <stringloader.h>
+#include <aknwaitdialog.h> 
+
+#include "irnowplayingwrapper.h"
+#include "irmainview.h"
+#include "irdebug.h"
+#include "irstreamsource.h"
+#include "irmediaclient.h"
+#include "irctrlcmdobserver.h"
+#include "irsessionlogger.h"
+#include "irsettings.h"
+#include "irisdswrapper.h"
+#include "irmetadata.h"
+#include "irisdspreset.h"
+#include "irautomatedbitrateselection.h" // KHighQuality defined
+#include "irdialoglauncher.h"
+#include "ircommon.h"
+#include "irui.h"
+#include "irpubsub.h"
+#include "irstreamsourceerrors.h"//KIRStreamSourceTimeOut defined
+#include "irnowplayingview.h"
+#include "ir.hrh"
+#include "irnetworkcontroller.h"
+#include "irhistory.h"
+#include "irplsview.h"
+#include "irnetworkcontrollerobserver.h"
+#include "irasfplayer.h"                // CIRAsfPlayer				
+#include <mmfcontrollerpluginresolver.h> //to get the supported MIME types
+#include "irmainview.h"
+#include "irmaincontainer.h"
+#include "iractivenetworkobserver.h"
+#include "irreportsettings.h"
+
+const TInt KTemporaryUrlMaxLength = 256;
+const TInt KUrlbufMaxLength = 256;
+//No of volume level is 10 + 1 level 1 level is mute
+const TInt KNOVOLUMELEVELS =10;
+
+
+_LIT(KConst," ");
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper* CIRNowPlayingWrapper::NewL()
+// function to return an instance of CIRNowPlayingWrapper 
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingWrapper* CIRNowPlayingWrapper::NewL(CIRUi& aAppUi,CIRSettings& aIRSettings,
+					CIRIsdsWrapper& aIsdsWrapper)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::NewL - Entering" );
+	CIRNowPlayingWrapper* self = CIRNowPlayingWrapper::NewLC(aAppUi,aIRSettings,aIsdsWrapper);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::NewL - Exiting." );
+	return self;
+	}
+        
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper* CIRNowPlayingWrapper::NewLC()
+// Two-phased constructor.
+// Create a CIRNowPlayingWrapper object, which will draw itself
+// to aRect.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingWrapper* CIRNowPlayingWrapper::NewLC(CIRUi& aAppUi,CIRSettings& aIRSettings,
+			CIRIsdsWrapper& aIsdsWrapper)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::NewLC - Entering" );
+	CIRNowPlayingWrapper* self = new (ELeave) CIRNowPlayingWrapper(aAppUi,aIRSettings,aIsdsWrapper);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::~CIRNowPlayingWrapper()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingWrapper:: ~CIRNowPlayingWrapper()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::~CIRNowPlayingWrapper - Entering" );
+	if(iNetwork)
+		{
+		delete iNetwork;
+		iNetwork = NULL;	
+		}
+	iAppUi.GetNowPlayingViewInstance()->DeleteSteroEffect(EFalse);
+	if(iPlayer)
+		{
+		delete iPlayer;
+		iPlayer = NULL;
+		}
+	if(iChannel)
+		{
+		delete iChannel;
+		iChannel = NULL;	
+		}
+	if( iReportGenerator )
+		{
+	    iReportGenerator->Close();
+		}
+	if(iMetaData)
+		{
+		delete iMetaData;
+		iMetaData = NULL;	
+		}
+	if(iNowPlayingPreset)
+		{
+		delete iNowPlayingPreset;
+		iNowPlayingPreset = NULL;	
+		}
+	if(iEditStationPreset)
+		{
+		delete iEditStationPreset;
+		iEditStationPreset = NULL;	
+		}
+	if(iWaitDialog)
+		{
+		delete iWaitDialog;
+		iWaitDialog = NULL;	
+		}
+	if(iURLArray)
+		{
+		delete iURLArray;
+		iURLArray = NULL;
+		}
+    iAppUi.iNetworkController->DeleteActiveNetworkObserver(*this);
+
+	if( iAsfPlayer )
+		{
+		delete iAsfPlayer;
+		iAsfPlayer = NULL;
+		iAsfStreaming = EFalse;
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::~CIRNowPlayingWrapper - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingWrapper::ConstructL()
+// Constructs the 
+// ---------------------------------------------------------------------------
+//
+ 
+void CIRNowPlayingWrapper::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ConstructL - Entering" );
+	//Instantiate StreamSource
+	iNetwork = CIRStreamSource::NewL(*this);
+
+	//command channel object creation it is through this component
+	//media engine interacts with UI
+	iChannel = CIRCtrlCmdObserver::NewL(this,iNetwork);
+
+	//media cient object creation
+	iPlayer = CIRMediaClient::NewL(iChannel);
+	
+	//Session Log
+	iReportGenerator = CIRReportGenerator::OpenL();
+	
+    iMetaData = CIRMetaData::NewL();
+
+	//Instantiate ISDS Preset
+	iNowPlayingPreset=CIRIsdsPreset::NewL();
+	
+	iEditStationPreset = CIRIsdsPreset::NewL();
+	
+	//currently not playing
+	iPlaying = EFalse;
+	
+	//session log should not be terminated on loading cancel
+	iTerminatedLogOnCancel = EFalse;
+	
+	// when skipping channels used for audio fadein fade out
+	iAudioFadein = EFalse;
+	
+	// currently set to false since no session created
+	iSessionShouldNotEnd = EFalse;
+
+    // set when connect to channel server
+	iConnectToServer = EFalse;
+    
+	// TO DO: need to remove this variable
+	// set when stop is done from nowplayimng view
+	iPlayandStop = EFalse;
+	
+	// Checks whether network connection has done
+	iIsConnected = EFalse;
+
+	// Waitdialog required for for showing buffering
+	iWaitDialog = NULL;
+	
+	// The multiple url's of a channel are stored
+	iURLArray = NULL;
+	
+	
+	//Used For Now Playing View
+	
+	iDisplayMetaData=EFalse;
+
+	iMarquee = EFalse;
+	
+	// The variable is set when player is not supported
+    iPlayBack=ETrue;
+    
+    // The variable is set when called for cancel network request
+    iCancelNetworkRequest=EFalse;
+    
+    // The variable is set when buffering waitdialog is deleted
+    iDialogCanceled=EFalse;
+
+    // Registering for network controller to get the notification
+    // when network is lost or network connection is made
+    iAppUi.iNetworkController->RegisterActiveNetworkObserverL(*this);
+    
+    // Required when Switching to network
+    iNotify=EFalse;
+
+    // Asf streaming
+    iAsfPlayer = CIRAsfPlayer::NewL( *this, *this );
+    
+    // Valuse set when a session is stared
+    iSessionStartedFlag = EFalse;
+    
+    // This variable is set when listen from Isds is done
+    iListenFromIsds=EFalse;
+    
+    // The variable checks whether the nowplaying view is active
+    iLaunchNowplaying=EFalse;
+    
+    // The variable is required when user does buffering watdialog
+    iBufferingRequestCancelled=EFalse;
+    
+    iPlaying=EFalse;
+    iQualityRequired=-1;
+    IRLOG_DEBUG( "CIRNowPlayingWrapper::ConstructL - Exiting" );
+	}
+		
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingWrapper::CIRNowPlayingWrapper()
+// Default Constructor
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingWrapper::CIRNowPlayingWrapper(CIRUi& aAppUi,CIRSettings& aIRSettings,
+			CIRIsdsWrapper& aIsdsWrapper):iIRSettings(aIRSettings),
+              iIsdsWrapper(aIsdsWrapper),iAppUi(aAppUi),
+              iAsfPlayer(NULL), iAsfStreaming(EFalse)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::CIRNowPlayingWrapper - Entering" );
+	 iSessionStart=EFalse;
+	 iChannelConnect=EFalse;
+	 IRLOG_DEBUG( "CIRNowPlayingWrapper::NewLC - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::OpenComplete()
+// Called when connected to the channel server To implement the fill of buffer
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::OpenComplete()
+	{
+	//once a buffer is completed this api is called as
+	//callback
+	IRLOG_DEBUG("CIRNowPlayingWrapper::OpenComplete - Entering" );
+
+	/**** ASF streaming changes : begin ****/
+	if(!iAsfStreaming)
+		{
+		iPlayer->BufferFilled();
+		}
+	/**** ASF streaming changes : begin ****/
+
+    IRLOG_DEBUG("CIRNowPlayingWrapper::OpenComplete - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::ErrorConnecting()
+// Called when there is an error when connecting to the channel server  @Param aErrorCode Indicates the type of error as described in irstreamsourceerrors.h---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ErrorConnecting(TInt aErrorCode)
+	{
+	IRLOG_DEBUG2( "CIRNowPlayingWrapper::ErrorConnecting(aErrorCode=%d)", aErrorCode );
+	iChannelConnect = EFalse;
+	// this method fails only if display of info note fails which can be
+	// ignored so we use TRAP_IGNORE
+		
+	TRAP_IGNORE(DoErrorConnectingL(aErrorCode))
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ErrorConnecting - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::PlayNow()
+// Called to indicate to the player to start playing
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::PlayNow()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::PlayNow - Entering" );
+
+	DoPlayingStateChanged( ETrue );
+
+	//sets the configuration data
+	TConfig config;
+	//by default takes the volume from data base
+	//that is when the player is not currently playing
+	config.iVolume = iIRSettings.GetVolumeSetting();
+	//if current playing we have to do audio fade in.
+	//So we set the volume as zero
+	if(iAudioFadein)
+		{
+		config.iVolume = 0;
+		}
+	TRAPD(err,iPlayer->StartNewPlayerL(config,iNetwork->ContentTypeL()))
+	if( err )
+		{
+		IRLOG_ERROR2( "CIRNowPlayingWrapper::PlayNow - Starting new player failed (err=%d)", err );
+		//if error occurs in occurs, displaying
+		TRAP_IGNORE(
+			DisplayErrorNoteL(R_IRAPP_IRGENERAL_ERROR);
+			)
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::PlayNow - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::Play()
+// Triggers the play after reconnecting to the channel
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::Play()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::Play - Entering" );
+	//play is called
+	iUrl.Copy(iLastPlayedUrl);
+	TInt err = iPlayer->Play();
+
+	if( err )
+		{
+		IRLOG_ERROR2( "CIRNowPlayingWrapper::Play - Play failed (err=%d), starting new player.", err );
+		TConfig config;
+		config.iVolume = iIRSettings.GetVolumeSetting();
+		TRAPD(err2,iPlayer->StartNewPlayerL(config,iNetwork->ContentTypeL()))
+		if( err2 )
+			{
+			IRLOG_ERROR2( "CIRNowPlayingWrapper::Play - Starting new player failed (err=%d)", err2 );
+			//if error occurs in occurs, displaying
+			TRAP_IGNORE(
+				DisplayErrorNoteL(R_IRAPP_IRGENERAL_ERROR);
+				)
+			}
+		}
+	IRLOG_DEBUG("CIRNowPlayingWrapper::Play - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::StopBuffering()
+// Called to indicate to the player to stop buffering
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::StopBuffering()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::StopBuffering - Entering" );
+
+	/**** ASF streaming changes : begin ****/
+	if(!iAsfStreaming)
+		iPlayer->StopMediaBuffering();
+	/**** ASF streaming changes : end ****/
+
+	IRLOG_INFO( "CIRNowPlayingWrapper::StopBuffering - Exiting. " );
+	}
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::ConnectionEstablished(TInt aFeedValue)
+// Called to indicate that the connection to channel server is sucessful
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ConnectionEstablished()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::ConnectionEstablished - Entering." );
+	// Reset channel connection request
+	TInt bitRate;
+	//To Do:Commented code for accp channel
+    /*if( iReConnecting )
+		{
+		 iProgress=EFalse;
+		}
+	// The control only for the first initial buffering
+	// not while reconnecting to same channel i.e, while play & stop.
+		// TO Do: here check is dine only for aacp player
+		// All content types should be checked
+		
+		_LIT(KAudiContent,"aacp");//aacp
+		RBuf content;
+		TRAP_IGNORE(content.Create(iNetwork->ContentTypeL().Length());)
+		TRAP_IGNORE(content.Copy(iNetwork->ContentTypeL());)
+		TInt MimeType1= content.Find(KAudiContent);
+		if(MimeType1!=KErrNotFound)
+			{
+			TInt returnValue=0;
+			TRAP_IGNORE(returnValue=GetSupportedMimeTypeL());
+			if(returnValue==KErrNotFound)
+				{
+				iCancelNetworkRequest = ETrue;
+				iURLCount++;
+				if(iURLCount>=iURLArray->MdcaCount())	
+					{
+					MCtrlCommand(EError,KErrNotSupported);
+					content.Close();
+					return;
+					}
+				iNetwork->CancelRequest();
+				iDialogCanceled=EFalse;
+				DoPlayingStateChanged( EFalse );
+				if(iURLArray->MdcaCount())
+					{
+					//TRAP_IGNORE(CreateWaitDialogL())
+					TBuf8<KUrlbufMaxLength> urlbuf;
+					urlbuf.Copy(iURLArray->MdcaPoint(iURLCount));
+					//connecting to a new channel so multiple URL selection enabled
+					//that if current URL doesn't connect we will try to connect to
+					//next URL in iURLArray
+					iMultipleURLSelect = ETrue;
+					iUnconnectedUrl.Copy(urlbuf);
+					TRAPD(error,DoConnectToServerL(urlbuf));
+					if( error )
+						{
+						IRLOG_ERROR2( "CIRNowPlayingWrapper::ConnectToChannel - DoConnectToServer failed (error=%d)", error );
+						TRAP_IGNORE( DisplayErrorNoteL(R_IRAPP_ERROR_CONNECTION) )
+						}
+					content.Close();
+					return;
+					}
+				}
+			}
+		content.Close();*/
+	 // here since the connection got established the value set to True
+	iChannelConnected=ETrue;
+	iLastConnectedPresetId = iNowPlayingPreset->GetId();
+	iLastConnectedPresetUniqId = iNowPlayingPreset->UniqId();
+	iChannelConnect = EFalse;
+	//connecting to a new channel so multiple URL selection disabled
+	//if we are able to connect to a particular URL we have to
+	//disable trying to connect to next URLs since error conditions after this
+	//are to handled differently
+	iMultipleURLSelect = EFalse;
+	if ( iLastConnectedUrl != iUrl )
+		{
+		IRLOG_INFO( "CIRNowPlayingWrapper::ConnectionEstablished - Station URL changed, clearing history list and current meta data information" );
+		TRAP_IGNORE( ClearMetaDataL() )
+		}
+
+	iLastConnectedUrl.Copy(iUrl);
+    iReportGenerator->MarkSessionStart();
+    if( iSessionStart )
+        {
+        // Next url to it is connected is logged.
+        iReportGenerator->LogServerResult( iUrl, EIRConnected );
+        }
+
+	//set the sync state as EPsConnectionSuccessful on a successful connection
+	if( !iReConnecting )
+		{
+		iProgress = ETrue;
+		//session end is marked
+		//iReportGenerator->MarkSessionStart()
+		TRAP_IGNORE(
+		TFileName pathtopost=iAppUi.GetPrivatePath();
+		pathtopost.Append(KGZipLogFileName);
+		//if this api leaves it is ignored
+		//we need not do any action if post fails
+		//the application should be left unaffected
+		if(!iNotify)
+		iIsdsWrapper.GetISDSInstance()->IRISDSPostL(pathtopost);
+		)
+		//starts audio fade out for the previous channel
+		/**** ASF streaming changes : begin ****/
+		if(!iAsfStreaming)
+		iChannel->DoAudioFadeOut();
+		/**** ASF streaming changes : end ****/
+
+		/*if(iSessionStart)
+			{
+			//next url to it is connected is logged
+			iReportGenerator->LogServerResult(iUrl,EIRConnected);
+			}*/
+		}
+	else
+		{
+		// Value set to false becoz the the user is trying 
+		 // to connect to same channel so need to update progress
+		iProgress = EFalse;
+		}
+	// This part of code is needed In some cases 
+	// When channel is playing and In intial buffer content the bitrate value is Zero
+	// So the bitate vaule is taken from the Preset Information and Subscibing 
+	iPlayBack=ETrue;
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSBitrate, bitRate );
+	if(bitRate==0)
+		{
+
+		TRAP_IGNORE(bitRate= iNowPlayingPreset->GetChannelBitrateL(iURLCount);)
+		RProperty::Set ( KUidActiveInternetRadioApp, KIRPSBitrate, bitRate );
+		}
+	if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+		{
+		iAppUi.GetNowPlayingViewInstance()->SetBitrate(EFalse);
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ConnectionEstablished - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::UpdateProgress()
+// Called to provide teh buffer values @param aFeedValue used to pump the buffering value
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::UpdateProgress(TInt aFeedValue)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::UpdateProgress - Entering" );
+	if(iProgress)
+		{
+		if(!iIsdsWrapper.ActiveWaitDialog())	
+			{
+			RBuf Feed;
+			HBufC* percent=NULL;
+			TRAP_IGNORE(percent= StringLoader::LoadL(R_IRAPP_LOADING_BUFFERING_PERCENTAGE, aFeedValue);)
+			Feed.Create(percent->Length());
+			Feed.Copy(*percent);
+			delete percent;
+			if(!iWaitDialog)	
+				{
+				iWaitDialog =  new CAknWaitDialog( NULL,ETrue);
+				if(!iWaitDialog)
+					{
+					return;
+					}
+				else
+					{
+					iWaitDialog->SetCallback(this);
+					TRAP_IGNORE(iWaitDialog->ExecuteLD(R_IRAPP_PROGRESS_DIALOG);)
+					}
+				}
+			if(iWaitDialog)	
+				{
+				TRAPD(err,iWaitDialog->SetTextL(Feed);)
+				if(err!=KErrNone)
+					{
+					return;
+					}
+				}
+			iBufferigSteamText=ETrue;
+			Feed.Close();
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::UpdateProgress - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MCrtlCmdCommand::HandleMetaDataReceivedL()
+// Invoked when meta data is received. @param  aMetaData The meta data that was received.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::HandleMetaDataReceivedL( const CIRMetaData& aMetaData )
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::HandleMetaDataReceivedL  - Entering" );
+	TBuf<KMAXMETABUFLENGTH> artist = aMetaData.Artist();
+	TBuf<KMAXMETABUFLENGTH> song = aMetaData.Song();
+	RemoveWhiteSpace( artist );
+	RemoveWhiteSpace( song );
+	iMetaData->SetArtistL( artist );
+	iMetaData->SetSongL( song );
+
+	if(iMetaData->Artist().Length() || iMetaData->Song().Length())
+		{
+		if ((iAppUi.GetNowPlayingViewInstance()->iContainer ))
+			{
+			iMarquee=ETrue;	
+			iDisplayMetaData=EFalse;
+			iAppUi.GetNowPlayingViewInstance()->DisplaySongArtistNameL( iMetaData->Song(),
+			iMetaData->Artist() );
+			}
+	// the history should get updated only when 100 persent buffering is done
+		if(!iWaitDialog||iAppUi.iIsdsWrapper->GetListenRequest())
+			{
+			PublishDataL();
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::HandleMetaDataReceivedL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MCrtlCmdCommand::MCtrlCommand()
+// Function is pure virtual function which used to pass commands @param TIRControlCommmand represents the commands,which determines what action to be taken
+// @param aValue represents any integer value if any, like buffering percentage
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::MCtrlCommand( TIRControlCommmand aCommand, TInt aValue )
+	{
+	IRLOG_INFO3( "CIRNowPlayingWrapper::MCtrlCommand (aCommand=%d, aValue=%d)", aCommand, aValue );
+	switch (aCommand)
+		{
+		case EBufferFillStart:
+			{
+			//TO Do:: This is needed for future Use
+
+			break;
+			}
+
+		case EBufferFillStop:
+			{
+			TRAP_IGNORE(DestroyWaitDialogL());
+			DoPlayingStateChanged( ETrue );
+			iBufferingRequestCancelled=EFalse;
+			iDialogCanceled=EFalse;
+			iPlayBack=ETrue;
+			if(iNowPlayingPreset->GetChannelType())
+				{
+				iUinqid=iNowPlayingPreset->UniqId();
+				}
+			if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+				{
+				TRAP_IGNORE(iAppUi.iMainView->GetMainContainer()->UpdateAllL();)
+				}
+			// publish the play status
+			RProperty::Set( KUidActiveInternetRadioApp,KIRPSMultiplePlay,
+			iAppUi.GetCurrentThreadIDValue());
+			if( iSessionStart )
+				{
+				iReportGenerator->HandleStopEvents(ETrue);
+				}
+			if( iProgress )
+				{
+				//since we are able to connect to the URL the url is current streaming URL
+				//implemented for the progress bar view
+				iLastPlayedUrl.Copy(iLastConnectedUrl);
+				//To publish the metadata
+				TRAP_IGNORE(PublishDataL();)
+				if(!iLaunchNowplaying && iNotify)
+					{	
+					IRRDEBUG2("CIRNowPlayingWrapper::EBufferFillStop - iNotify", KNullDesC );
+					iProgress = EFalse;
+					iLaunchNowplaying=EFalse;
+					break;
+					}
+				iNotify=EFalse;
+				//Activate NowPlayingView
+				if(!iAppUi.GetNowPlayingViewInstance()->iContainer)
+				{
+				if(iContextViews==EHistoryView)
+					{
+					if(iAppUi.IsForeground()|| iAppUi.GetBgLock())
+						{
+						TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+						KHistoryLaunch,KIRNowPlayingViewCustomMessagePlayAfterActivation));
+						iAppUi.SetActivationPendingValue(KNullUid);	
+						}
+					else
+						{
+						iAppUi.SetActivationPendingValue(KIRNowPlayingViewID);
+						}
+					}
+				else if(iContextViews==EFav||iContextViews==ELastplayed)
+					{
+					_LIT8(KNull,"");
+					if(iAppUi.IsForeground()|| iAppUi.GetBgLock())
+						{
+						TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+						KNowPlayingFrmMainView,KNull);)
+						iAppUi.iActivationPending = KNullUid ;	
+						}
+					else
+						{
+						iAppUi.SetActivationPendingValue(KIRNowPlayingViewID);	
+						}
+					}
+				else
+					{
+					if ( iAppUi.IsForeground()|| iAppUi.GetBgLock())
+						{
+						iAppUi.SetActivationPendingValue(KNullUid);
+						TRAP_IGNORE(iAppUi.ActivateLocalViewL(KIRNowPlayingViewID))
+						}
+					else
+						{
+						iAppUi.SetActivationPendingValue(KIRNowPlayingViewID);
+						}
+					}
+				}
+				iProgress = EFalse;
+				}
+			else
+				{
+				IRRDEBUG2("CIRNowPlayingWrapper::DestroyWaitDialogLiProgress Entering", KNullDesC); 
+				TRAP_IGNORE(DestroyWaitDialogL());
+				TRAP_IGNORE(PublishDataL();)
+				iAppUi.GetNowPlayingViewInstance()->SetsameUrlFlag(ETrue);
+				DoPlayingStateChanged( ETrue );
+				if(iAppUi.GetPlayStateWhileCall())
+					{
+					iAppUi.SetPlayStateWhileCall(EFalse);
+					break;
+					}
+				if(iPlayandStop)
+					{
+					iPlayandStop=EFalse;
+					if(!iAppUi.GetNowPlayingViewInstance()->iContainer)
+						{
+						if(iContextViews==EHistoryView)
+							{
+							TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+							KHistoryLaunch,KIRNowPlayingViewCustomMessagePlayAfterActivation);)
+							}
+						else if(iContextViews==EFav||iContextViews==ELastplayed)
+							{
+							_LIT8(KNull,"");
+							TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+							KNowPlayingFrmMainView,KNull);)
+							}
+						else
+							{
+							if ( iAppUi.IsForeground() || iAppUi.GetBgLock() )	
+								{
+								TRAP_IGNORE(iAppUi.ActivateLocalViewL(KIRNowPlayingViewID))
+								}
+							}
+						}
+					}
+				else if(iAppUi.IsCallActive()||iAppUi.GetAlarm())
+					{
+					if(!iAppUi.GetNowPlayingViewInstance()->iContainer)
+						{
+						if(iContextViews==EHistoryView)
+							{
+							TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+							KHistoryLaunch,KIRNowPlayingViewCustomMessagePlayAfterActivation);)
+							}
+						else if(iContextViews==EFav)
+							{
+							_LIT8(KNull,"");
+							TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+							KNowPlayingFrmMainView,KNull);)
+							}
+						else
+							{
+							if ( iAppUi.IsForeground() || iAppUi.GetBgLock() )	
+								{
+								TRAP_IGNORE(iAppUi.ActivateLocalViewL(KIRNowPlayingViewID))
+								}
+							}
+						}
+					}
+				}
+			iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStop);
+			IRRDEBUG2("CIRNowPlayingWrapper::EBufferFillStop Exit", KNullDesC); 
+
+			break;
+			}
+
+		case EBufferFilling:
+			{
+			//no implementation
+			break;
+			}
+
+		case EBufferFadeOut:
+			{
+			//for fade out volume is updated
+			SetAudioVolume(aValue);
+			break;
+			}
+
+		case EBufferFadeIn:
+			{
+			//for fade in volume is updated
+			SetAudioVolume(aValue);
+			break;
+			}
+
+		case EStoppedPlaying:
+			{
+
+			if(iPlaying)
+				{
+				iAudioFadein=ETrue;
+				}
+
+			if( iSessionStart )
+				{
+				iReportGenerator->HandleStopEvents(EFalse);
+				}
+			if ( !iProgress || aValue != KErrDied )
+				{
+				if( !iAppUi.GetAlarm() && !iAppUi.IsCallActive() && aValue != KErrDied )
+					{
+					iNetwork->CancelRequest();
+					}
+				}
+
+			TBool returnValue = EFalse;
+			#ifndef __WINS__
+			TRAP_IGNORE( ( returnValue = CheckCallStatusL() ) )
+			#endif
+			if(!returnValue)
+				{
+				DoPlayingStateChanged( EFalse );
+				}
+			if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+				{
+				TRAP_IGNORE(iAppUi.iMainView->GetMainContainer()->UpdateAllL();)
+				}
+
+			break;
+			}
+
+		case EBufferFadeInReady:
+			{
+			//start audio fade in
+			if(iAudioFadein && (!iAppUi.GetNowPlayingViewInstance()->IsVolumeMuted()))
+				{
+				TIRControlCommmand command = EBufferFadeIn;
+				TInt volume=0;
+				volume = iIRSettings.GetVolumeSetting();
+				iChannel->AudioFadeInOut(command,volume);
+				iAudioFadein = EFalse;
+				}
+			break;
+			}
+		case EStereo:
+			{
+			if(iAppUi.GetNowPlayingViewInstance())
+				{
+				iAppUi.GetNowPlayingViewInstance()->DeleteSteroEffect(ETrue);
+				}
+			break;
+			}
+		case EPlayingState:
+			{
+			if(iAppUi.GetNowPlayingViewInstance())
+				{
+				iAppUi.GetNowPlayingViewInstance()->DisablePlayer();
+				}	
+			}
+		break;
+		case EError:
+			{
+			if( ( KErrNotSupported == aValue ) || ( KErrNotFound == aValue )
+					||(KIRCtrlCmdPlayerNotCreated==aValue) )
+				{
+				//iURLCount++
+				//Handling Radio Playback Failed	
+				if(iURLArray->MdcaCount()>0)
+					{
+					TRAP_IGNORE(DestroyWaitDialogL());
+					DoPlayingStateChanged( EFalse );
+					if( iSessionStart )
+						{
+						iReportGenerator->LogServerResult(iUrl,EIRConnFailed);
+						iReportGenerator->HandleStopEvents(EFalse);
+						//update current operator
+						iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+						iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+						//update home operator
+						iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+						iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+						
+						TTerminationStatus terminationstatus = EUserTerminated;
+						//and the cause of error
+						iReportGenerator->UpdateTerminatedBy(terminationstatus);
+						//session ends due to error
+						TRAP_IGNORE(iReportGenerator->SessionEndL(EFalse);)
+						iSessionStart=EFalse;	
+						iSessionShouldNotEnd = EFalse;//check
+						}
+					iPlayBack=EFalse;
+					if(!iProgress)
+					{
+					iNetwork->CancelRequest();
+						if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+						{
+						iLastPlayedUrl.Copy(iUnconnectedUrl);
+						iLastConnectedUrl.Copy(iUnconnectedUrl);
+						iLastPlayedUrl.Copy(iUnconnectedUrl);
+						}
+					else
+						{
+						iUrl.Delete(0,iUrl.Length());
+				        iLastConnectedUrl.Zero();
+				        iLastPlayedUrl.Zero();
+						}
+					}
+					else
+						{
+						//reset the view to a proper view during the error conditions
+						HandlePlayError();
+						}
+						if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+							{
+							iAppUi.GetNowPlayingViewInstance()->SetBitrate(EFalse);
+							}
+					//if error occurs in player an error note is displayed
+					TRAP_IGNORE(
+					DisplayErrorNoteL(R_IRAPP_PLAY_FAIL_ERROR);
+					)
+					}
+				}
+			}
+		break;
+
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::MCtrlCommand - Exiting.");
+	}
+// ---------------------------------------------------------------------------
+// MCrtlCmdCommand::FetchVolume()
+// Function is pure virtual function which sents Request to get the current volume index
+// @return volume index
+// ---------------------------------------------------------------------------
+//
+TInt CIRNowPlayingWrapper::FetchVolume()
+    {
+	//gets the volume from the settings
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::FetchVolume" );
+	TInt volume=0;
+	volume=iIRSettings.GetVolumeSetting();
+	return volume ;
+	}
+// ---------------------------------------------------------------------------
+// MCrtlCmdCommand::DoAudioFadeOut()
+// Function is pure virtual function, it is used to sent request start audio Fade Out
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::DoAudioFadeOut()
+    {
+	//triggers audio fade out
+	IRLOG_DEBUG2( "CIRNowPlayingWrapper::DoAudioFadeOut - iAudioFadein=%d", iAudioFadein );
+	if(iAudioFadein)
+		{
+		TIRControlCommmand command = EBufferFadeOut;
+		TInt volume=0;
+		volume= iIRSettings.GetVolumeSetting();
+		iChannel->AudioFadeInOut(command,volume);
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DoAudioFadeOut - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// MCrtlCmdCommand::PlayerChanged()
+// Function is pure virtual function which sents Request to get the current volume index
+// @return volume index
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::PlayerChanged()
+    {
+     if(iAppUi.GetNowPlayingViewInstance())
+     {
+
+     TRAP_IGNORE(iAppUi.GetNowPlayingViewInstance()->GetStereoModeL();)
+     }
+    }
+	
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::ConnectToChannel()
+// This function is called to connect to a particular channel
+// This function will obtain the multiple urls into an array
+// connects to the first url in the array
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ConnectToChannelL(CIRIsdsPreset& aPreset)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ConnectToChannel - Entering" );
+	 iCheckValue=EFalse;
+	 iDialogCanceled=EFalse;
+	 iPlayandStop=ETrue;
+	 iSyncPreset=EFalse;
+	 if(iQualityRequired!=-1 && iURLArray->MdcaCount()!=1 && !iPlaying  )
+	 {
+	 TInt qualityrequired;
+	 switch(iAppUi.iNetworkController->IdentifyConnectionType())
+		{
+		case EGprs: // Falls through.
+		case EEdge:
+			{
+			//if GPRS network get the selection
+			qualityrequired = iIRSettings.GetGPRSBitrateQuality();
+			}
+			break;
+		case EWcdma:
+		case ECdma2000:
+			{
+			//if 3G network get the selection
+			qualityrequired = iIRSettings.Get3GBitrateQuality();
+			}
+			break;
+
+		case EWiFi:
+			{
+			//if WiFi network get the selection
+			qualityrequired = iIRSettings.GetWiFiBitrateQuality();
+			}
+			break;
+		default:
+			{
+			//if WiFi network get the selection
+			qualityrequired = iIRSettings.GetWiFiBitrateQuality();
+			}
+			break;
+		}
+	if(iQualityRequired!=qualityrequired)
+		{
+		iLastConnectedUrl.Zero();	
+		}
+	 }
+	//getting the URLs from the preset according to the preset
+	SelectUrlUsingBitRateL(aPreset);
+	TBuf8<KUrlbufMaxLength> urlbuf;
+			TBuf<KMaxUrlSize> CheckLastConnected;
+	iURLCount = 0;
+	if ( iURLArray->MdcaCount() > 0 )
+	    {
+       	urlbuf.Copy(iURLArray->MdcaPoint(iURLCount));
+	    //connecting to a new channel so multiple URL selection enabled
+	    //that if current URL doesn't connect we will try to connect to
+	    //next URL in iURLArray
+	    iMultipleURLSelect = ETrue;
+	    iUnconnectedUrl.Copy(urlbuf);
+	    for(TInt i=0;i<iURLArray->MdcaCount() && !iCheckValue;i++)
+	    {
+					CheckLastConnected.Copy(iURLArray->MdcaPoint(i));
+			if(iLastConnectedUrl.Compare(CheckLastConnected)==0)	
+	     {
+				if(iPlaying||(iUinqid==iNowPlayingPreset->UniqId())||(iURLArray->MdcaCount()==1))
+					{
+					iCheckValue=ETrue;
+					}
+				if(iPlaying)
+					{
+					DestroyWaitDialogL();	
+					}
+				}
+			}
+		if(iNotify)
+			{
+			iDialogCanceled=EFalse;
+			if(!iIsdsWrapper.ActiveWaitDialog())	
+			CreateWaitDialogL();
+			iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+
+			if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+				{
+				iAppUi.iMainView->GetMainContainer()->UpdateAllL();	
+				}
+			iReConnecting=EFalse;
+             TRAPD(error,DoConnectToServerL(urlbuf));
+				if( error )
+					{
+					IRLOG_ERROR2( "CIRNowPlayingWrapper::ConnectToChannel - DoConnectToServer failed (error=%d)", error );
+					TRAP_IGNORE( DisplayErrorNoteL(R_IRAPP_ERROR_CONNECTION) )
+					}
+			}
+		else
+			{
+		if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+			{
+			iLaunchNowplaying=ETrue;
+			}
+		if(!iCheckValue)	
+		{
+		iLastConnectedUrl.Zero();
+		CheckLastConnected.Zero();	
+		if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+			{
+			iAppUi.GetNowPlayingViewInstance()->SetsameUrlFlag(EFalse);
+			}
+		if(iPlaying && !iProgress)
+		{
+		#ifndef __WINS__
+			StopBuffering();
+			/**** ASF streaming changes : begin ****/
+			if(!iAsfStreaming)
+				{
+				iPlayer->Stop();
+				}
+			else
+				{
+				iAsfStreaming = EFalse;
+				iAsfPlayer->Stop();
+				}
+				if(iSessionStart)
+				{
+				//update current operator
+				iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+				iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+				//update home operator
+				iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+				iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+				
+				TTerminationStatus terminationstatus = EUserTerminated;
+				//and the cause of error
+				iReportGenerator->UpdateTerminatedBy(terminationstatus);
+				//session ends due to error
+				iReportGenerator->SessionEndL(EFalse);
+				iSessionStart=EFalse;
+				}
+
+			/**** ASF streaming changes : end ****/
+		#endif //__WINS__
+		}
+		if(iContextViews==EFav||iContextViews==EPls||
+				iContextViews==EHistoryView||iContextViews==ELastplayed)
+			{
+			CreateWaitDialogL();
+			iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+			}
+		if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+			{
+			iAppUi.iMainView->GetMainContainer()->UpdateAllL();	
+			}	
+		DoConnectToServerL(urlbuf);
+		}
+		else if(iCheckValue)
+			{
+						urlbuf.Copy(CheckLastConnected);
+						iUnconnectedUrl.Copy(CheckLastConnected);
+				if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+					{
+					iAppUi.iMainView->GetMainContainer()->UpdateAllL();	
+					}	
+
+			 TRAPD(error,DoConnectToServerL(urlbuf));
+			 if( error )
+			    {
+			    IRLOG_ERROR2( "CIRNowPlayingWrapper::ConnectToChannel - DoConnectToServer failed (error=%d)", error );
+			    TRAP_IGNORE( DisplayErrorNoteL(R_IRAPP_ERROR_CONNECTION) )
+	    		}	
+			}
+	    }
+		}
+		if(iContextViews==EFav)
+		{
+		TInt passId=iAppUi.GetFavPresetsInstance()->SearchPreset( iNowPlayingPreset->GetId(),
+			iNowPlayingPreset->UniqId());
+		// Checks for the preset index of the channel, if preset index exists
+		// in favourites list, publishes the preset index.
+		if( passId != KErrNotFound)
+			{
+			TInt presetIndex = passId+1;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+				presetIndex );
+			}
+		else
+			{
+			// If preset not present in favourites list, publishes the index
+			// as 0. This is set to 0 here to indicate the active idle
+			// component that the index with 0 is a non favourite channel.
+			TInt presetIndex  = 0;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+				presetIndex );
+			}
+
+
+		}
+		else
+		{
+			TInt presetIndex  = 0;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+				presetIndex );
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ConnectToChannel - Exiting." );
+	}
+
+// -------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SelectUrlUsingBitRateL()
+// Selects the proper URL based on settings of quality
+// according to current network
+// current network type is stored in iNetwork. gets the URLs in iURLArray
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SelectUrlUsingBitRateL(CIRIsdsPreset& aPreset)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SelectUrlUsingBitRate - Entering" );
+#ifdef __WINS__
+	if(iURLArray)
+		{
+		delete iURLArray;
+		iURLArray = NULL;
+		}
+	aPreset.SetUrlCount(); // remove build warning
+	_LIT(KWinUrl,"http://172.28.205.137:8000");
+    iURLArray = new (ELeave) CDesCArrayFlat(1);
+    iURLArray->AppendL(KWinUrl);
+#else	
+	//by default we are setting quality as KHighQuality
+	TInt qualityrequired = KHighQuality;
+	switch(iAppUi.iNetworkController->IdentifyConnectionType())
+		{
+		case EGprs: // Falls through.
+		case EEdge:
+			{
+			//if GPRS network get the selection
+			qualityrequired = iIRSettings.GetGPRSBitrateQuality();
+			}
+			break;
+		case EWcdma:
+		case ECdma2000:
+			{
+			//if 3G network get the selection
+			qualityrequired = iIRSettings.Get3GBitrateQuality();
+			}
+			break;
+
+		case EWiFi:
+			{
+			//if WiFi network get the selection
+			qualityrequired = iIRSettings.GetWiFiBitrateQuality();
+			}
+			break;
+		default:
+			{
+			//if WiFi network get the selection
+			qualityrequired = iIRSettings.GetWiFiBitrateQuality();
+			}
+			break;
+		}
+	iQualityRequired=qualityrequired;
+	 selectedbitrate = 0;
+	//depending on required quality we are selecting bit rate
+	selectedbitrate = GetAvailableBitRate(qualityrequired,aPreset);
+
+	IRLOG_INFO3( "CIRNowPlayingWrapper::SelectUrlUsingBitRate - selectedbitrate=%d, qualityrequired=%d",
+	             selectedbitrate, qualityrequired );
+
+	//getting all the available URLs
+	if(iURLArray)
+		{
+		delete iURLArray;
+		iURLArray = NULL;
+		}
+	TRAP_IGNORE(iURLArray = aPreset.GetUrlForBitrateL(selectedbitrate))
+#endif
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SelectUrlUsingBitRate - Exiting." );
+	return;
+	}
+
+/// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::DisplayErrorNoteL()
+// Display the error note
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::DisplayErrorNoteL(TInt aResourceId)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DisplayErrorNoteL - Entering" );
+	HBufC* error = StringLoader::LoadLC(aResourceId);
+	iIsdsWrapper.GetDialogLauncherInstance()->ShowErrorNoteL(aResourceId,ETrue);
+	CleanupStack::PopAndDestroy(error);
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DisplayErrorNoteL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::DoConnectToServerL()
+// Connects to Server.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::DoConnectToServerL(const TDesC8& aUrl)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DoConnectToServerL - Entering" );
+    //Compress the heap memory
+	iListenFromIsds=ETrue;
+	RHeap& heapHandle = User::Heap();
+	heapHandle.Compress();iListenFromIsds=ETrue;
+	//This variable is used for checking whether request for each URl is done
+	iConnectionRequestCancelled = EFalse;
+	TBuf<KTemporaryUrlMaxLength> temporaryUrl;
+	//This variable set while reconnecting to the same channel
+	iReConnecting = EFalse;
+	temporaryUrl.Copy(aUrl);
+	if( (iLastConnectedUrl.Compare(temporaryUrl) == 0) &&
+		(iLastPlayedUrl.Compare(temporaryUrl) == 0) )
+		{
+		 TInt test=iNowPlayingPreset->UniqId();
+		if( iNowPlayingPreset->UniqId() != iLastConnectedPresetUniqId && iPlaying)
+			{
+			//if channel's unique is not equal to last connected channels unique id but
+			//their urls match the preset information has to be updated
+			//and channel name has to be changed
+			iLastConnectedPresetId = iNowPlayingPreset->GetId();
+			iLastConnectedPresetUniqId = iNowPlayingPreset->UniqId();
+			iAppUi.GetNowPlayingViewInstance()->SetsameUrlFlag(ETrue);
+			PublishDataL();
+		if(!iAppUi.GetNowPlayingViewInstance()->iContainer)
+		{
+			if ( iAppUi.IsForeground() || iAppUi.GetBgWhenLockState() )
+				{
+				iAppUi.SetActivationPendingValue(KNullUid);
+				if(iContextViews==EHistoryView)
+				{
+				iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+				KHistoryLaunch,KIRNowPlayingViewCustomMessagePlayAfterActivation);
+				}
+				else if(iContextViews==EFav)
+				{
+				_LIT8(KNull,"");
+				TRAP_IGNORE(iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+				KNowPlayingFrmMainView,KNull);)
+				}
+
+				else
+					{
+					TRAP_IGNORE(iAppUi.ActivateLocalViewL(KIRNowPlayingViewID))
+					}
+				}
+			else
+				{
+				iAppUi.SetActivationPendingValue(KIRNowPlayingViewID);
+				}
+		}
+			}
+			//If radioplay back is occured and if the user Tries to connect
+			//to the same connected channel 
+	  else	if(iPlayBack && iPlaying)
+			{
+			PublishDataL();
+			if( KIRNowPlayingViewID == iAppUi.GetPresentViewID() )
+				{
+				//redraw now playing view if already activated
+				iAppUi.GetNowPlayingViewInstance()->SetsameUrlFlag(ETrue);
+				}
+			else
+				{
+				//last played url is same as current url no need
+				//to reconnect loads the now playing view
+				if ( iAppUi.IsForeground()  || iAppUi.GetBgWhenLockState() )
+					{
+					//if in fore ground view is loaded
+					iAppUi.ActivateLocalViewL( KIRNowPlayingViewID,
+					KIRNowPlayingViewCustomMessageId,
+					KIRNowPlayingViewCustomMessagePlayAfterActivation );
+					iAppUi.SetActivationPendingValue(KNullUid) ;
+					}
+				else
+					{
+					iAppUi.SetActivationPendingValue(KIRNowPlayingViewID) ;
+					}
+				}
+			}
+	else if((iURLArray->MdcaCount()==1)||(iUinqid==iNowPlayingPreset->UniqId()))
+		{
+		DoPlayL();
+		}
+	
+		}
+	else
+		{
+		//If the next channel is getting connected then the Session which is made
+		//should get terminated	
+		if(iPlaying)
+		{
+    //audio fade in has to be done		
+		iAudioFadein = ETrue;
+		iPlaying=EFalse;
+		}
+		iTerminatedLogOnCancel=ETrue;						
+		if( iSessionStart )
+			{
+			/*if( !iSessionShouldNotEnd )
+				{
+				//posting the previous session after ending it
+				TTerminationStatus terminationstatus = EUserTerminated;
+				//ending the previous session
+				iReportGenerator->UpdateTerminatedBy(terminationstatus);
+				iSessionStart = EFalse;
+				iSessionShouldNotEnd = EFalse;
+				//session end is called
+				TRAPD(error,iReportGenerator->SessionEndL(ETrue));
+				if( error )
+					{
+					IRLOG_ERROR2( "CIRNowPlayingWrapper::DoConnectToServerL - Report generation (Session End) failed (error=%d).",
+					      error );
+					}
+				}*/
+			iSessionShouldNotEnd = EFalse;
+			}
+		if(!iSessionStart)
+			{
+			LogStartSession();
+			}
+		iUrl.Copy(aUrl);
+		//connection to new server url is attempted
+		ConnectToServerL();
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DoConnectToServerL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetAvailableBitRate()
+// Selects proper bit rate from the settings
+// it can be low quality (<48), medium quality (<128), high quality(>=128)
+// nearest quality bitrate is selected if none is available the lowest one,
+// which is the first one in preset array is returned
+// ---------------------------------------------------------------------------
+//
+TInt CIRNowPlayingWrapper::GetAvailableBitRate(TInt aQualiyRequired,
+			const CIRIsdsPreset& aPreset) const
+	{
+	IRLOG_DEBUG2( "CIRNowPlayingWrapper::GetAvailableBitRate(aQualityRequired )", aQualiyRequired );
+	TInt qualityrequired = aQualiyRequired;
+
+	//checking the quality is between KLowQuality and KHighQuality
+	if( KLowQuality > qualityrequired )
+		{
+		qualityrequired = KLowQuality;
+		}
+	if( KHighQuality < qualityrequired )
+		{
+		qualityrequired = KHighQuality;
+		}
+
+	//getting all available bit rates from preset
+	RArray<TInt> arrayofbitrates;
+	aPreset.GetAvailableBitrates(arrayofbitrates);
+
+	//finding the number of bit rates available
+	TInt noofbitrateentries =  arrayofbitrates.Count();
+	TInt bitrate = 0;
+	//bit rate is not found
+	TBool bitratefound = EFalse;
+	//selecting the bitrate since index is one less than count we taken
+	//noofbitrateentries - 1
+	while(((noofbitrateentries - 1) >= 0) && (EFalse == bitratefound))
+		{
+		//proper bit rate is not found
+		bitratefound = EFalse;
+		//get the bit rate from the array for comparison
+		bitrate = arrayofbitrates[noofbitrateentries - 1];
+		if( KLowQuality == qualityrequired )
+			{
+			//if required quality is low we will select all the bit rate
+			// less than Medium quality level (<48kbps)
+			if( KMediumBitRateLimit > bitrate )
+				{
+				bitratefound = ETrue;
+				}
+			}
+		else if( KMediumQuality == qualityrequired )
+			{
+			//if required quality is medium we will select all the bit
+			//rate less than high quality level (<48kbps)
+			if( KHighBitRateLimit > bitrate )
+				{
+				bitratefound = ETrue;
+				}
+			}
+		else
+			{
+			//if required quality is high we will allow current bit rate
+			bitratefound = ETrue;
+			}
+		//if we take next element if noofbitrateentries is greater than zero
+		//and bitratefound = EFalse
+		noofbitrateentries--;
+		}
+	//if no bitrate is available we will sent the first bitrate from entry
+
+	arrayofbitrates.Close();
+	IRLOG_DEBUG2( "CIRNowPlayingWrapper::GetAvailableBitRate - Returning %d", bitrate );
+	return bitrate;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::LogStartSession()
+// Starts the session log session.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::LogStartSession()
+    {
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::LogStartSession - Entering" );
+	iReportGenerator->UpdateConnectedFrom(iConnectedFrom);
+	//setting the channel id
+	SetCurrentChannelID();
+	iReportGenerator->UpdateChannelID(iChannelID);
+	//update current operator
+	iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+	iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+	//update home operator
+	iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+	iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+	if(iSessionStartedFlag)
+		{
+		iSessionStart = ETrue;
+		}
+	else
+		{
+	//if session ended new session starts
+	TRAPD(error,iReportGenerator->SessionStartedL());
+	if( error )
+    	{
+		iSessionStart = EFalse;
+		}
+	else
+		{
+		iSessionStart = ETrue;
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::LogStartSession - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : SetCurrentChannelID
+// Function sets currently playing channel ID
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetCurrentChannelID()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetCurrentChannelID - Entering" );
+	//get current channel id
+	iChannelID = iNowPlayingPreset->GetId();
+	IRLOG_INFO2( "CIRNowPlayingWrapper::SetCurrentChannelID - ID now %d", iChannelID );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetCurrentChannelID - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::ConnectToServerL()
+// Starts playing the selected stream
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ConnectToServerL()
+	{
+	//connection to a particular channel server url is
+	//attempted
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ConnectToServerL - Entering" );
+	iChannelConnect = ETrue;
+	iConnectToServer=ETrue;
+	RProperty::Get ( KUidActiveInternetRadioApp, KIRPSBitrate,
+				 iBitRateValue);
+
+	// ASF streaming check
+	iAsfStreaming = EFalse;
+#ifdef __IRA_FEATURE_WMA_ENABLED
+	if( CIRAsfPlayer::DetectAsfChannel(iUrl) )
+		{
+		iAsfStreaming = ETrue;
+		iAsfPlayer->PlayL(iUrl);
+		}
+#endif		
+	if( !iAsfStreaming )
+		{
+		iNetwork->ConnectToServerL(iUrl);
+		}
+
+	iIsConnected = ETrue;
+	//iFromPlsFile = EFalse
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ConnectToServerL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : SetCurrentConnectionSource
+// Function sets from where the current connection to the channel server
+// is established. It may be from
+// isds or saved preset
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetCurrentConnectionSource(TConnectedFrom aConnectedFrom)
+	{
+	//0 means isds
+	//1 means saved preset
+	IRLOG_DEBUG2( "CIRNowPlayingWrapper::SetCurrentConnectionSource(aConnectedFrom=%d)", aConnectedFrom );
+	iConnectedFrom = aConnectedFrom;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetCurrentConnectionSource - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::DoErrorConnectingL()
+// Called by CIRStreamSource when there is an error in connectiong
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::DoErrorConnectingL(TInt aErrorCode)
+	{
+	IRLOG_ERROR3("CIRNowPlayingWrapper::DoErrorConnectingL(aErrorCode=%d) - iUrl=%S", aErrorCode, &iUrl );
+	//Called by CIRStreamSource when there is an error in connectiong
+	//to channel server.
+	iChannelConnected=EFalse;
+	if(iSessionStart)
+		{
+		if( KIRStreamSourceTimeOut == aErrorCode )
+			{
+			//error URLs is logged
+			iReportGenerator->LogServerResult(iUrl,EIRConnTimeOut);
+			}
+		else if( KIRStreamSourceNoResponse == aErrorCode )
+			{
+			//error URLs is logged
+			iReportGenerator->LogServerResult(iUrl,EIRFull);
+			}
+		else
+			{
+			//error URLs is logged
+			iReportGenerator->LogServerResult(iUrl,EIRConnFailed);
+			}
+		}
+
+	//URL is deleted
+	iUrl.Zero();
+	iURLCount++;
+	    //since each preset has multiple urls trying to connect to the next url
+	if( iMultipleURLSelect )
+		{
+		//if error before connection to channel server
+		//multiple urlselection is enabled
+		if( (iURLCount) < iURLArray->MdcaCount() && !iConnectionRequestCancelled )
+			{
+			//take the subsequent URLs and play in case of failure
+			TBuf8<KUrlbufMaxLength> urlbuf;
+			urlbuf.Copy(iURLArray->MdcaPoint(iURLCount));
+			iUnconnectedUrl.Copy(urlbuf);
+			iMultipleURLSelect = ETrue;
+			iSessionShouldNotEnd = ETrue;
+			//connect to server is called
+			DoConnectToServerL(urlbuf);
+			}
+		else
+			{
+				//If all the possible urls fails to connect it displays
+				//Unable to connect
+				iTerminatedLogOnCancel=EFalse;						
+			if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+        		{
+        		iDisplayMetaData=ETrue;
+        		iAppUi.GetNowPlayingViewInstance()->DisplaySongArtistNameL( KConst,KConst);
+				iLastPlayedUrl.Copy(iUnconnectedUrl);
+				iLastConnectedUrl.Copy(iUnconnectedUrl);
+				iLastConnectedPresetId=0;
+        		}
+        	else
+	        	{
+		        iUrl.Delete(0,iUrl.Length());
+		        iLastConnectedUrl.Zero();
+		        iLastPlayedUrl.Zero();
+	        	}
+        	ClearMetaDataL();
+			DestroyWaitDialogL();
+			iPlayBack=ETrue;
+			if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+				{
+				iAppUi.GetNowPlayingViewInstance()->SetBitrate(ETrue);
+				}
+			iDialogCanceled=EFalse;
+            iConnectToServer=EFalse;
+            iNotify=EFalse;
+            iListenFromIsds=EFalse;
+            if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+					{
+					iAppUi.iMainView->GetMainContainer()->UpdateAllL();	
+					}
+			iAppUi.SetPlayStateWhileCall(EFalse);
+			iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+				DisplayErrorNoteL(aErrorCode == 
+					KIRStreamSourceInvalidUrl ? R_IRAPP_ERROR_ADDRESS : R_IRAPP_ERROR_GENERAL);
+				iConnErrCode = 0;
+				//Since channel is not able to connect Ending the Session
+				if(iSessionStart)
+					{
+					//update current operator
+					iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+					iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+					//update home operator
+					iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+					iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+
+					TTerminationStatus terminationstatus = ENoConnectionToServer;
+					//and the cause of error
+					iReportGenerator->UpdateTerminatedBy(terminationstatus);
+					//session ends due to error
+					iReportGenerator->SessionEndL(EFalse);
+	    			iSessionStart=EFalse;	
+					iSessionShouldNotEnd = EFalse;//check
+					}
+				DoPlayingStateChanged( EFalse );
+				}
+		}
+	else
+		{
+		 //if the error is Connection Timed out
+		if( KIRStreamSourceTimeOut == aErrorCode )
+			{
+			//if the response is no response from server
+			if( iProgress )
+				{
+				//progress bar view is cancelled
+				ProgressBarCancel();
+				}
+			DestroyWaitDialogL();
+			iConnectToServer=EFalse;
+			iNotify=EFalse;
+			iListenFromIsds=EFalse;
+			iDialogCanceled=EFalse;
+			
+			iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+
+			//error note to be displayed
+			DisplayErrorNoteL(R_IRAPP_ERROR_CONNECTION);//player is expected not to play
+			ClearMetaDataL();
+			iLastPlayedUrl.Copy(iUnconnectedUrl);
+			iLastConnectedUrl.Copy(iUnconnectedUrl);
+	        iLastConnectedPresetId=0;
+	        iPlayBack=ETrue;
+			DoPlayingStateChanged( EFalse );
+			iAppUi.SetPlayStateWhileCall(EFalse);
+			}
+		else
+			{
+			StopNow();
+			//if error due connection at any point after connecting to channel server
+			if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+        		{
+        		iDisplayMetaData=ETrue;
+        		iAppUi.GetNowPlayingViewInstance()->DisplaySongArtistNameL( KConst,KConst);
+				iLastPlayedUrl.Copy(iUnconnectedUrl);
+				iLastConnectedUrl.Copy(iUnconnectedUrl);
+				iLastConnectedPresetId=0;
+        		}
+        	else
+	        	{
+		        iUrl.Delete(0,iUrl.Length());
+		        iLastConnectedUrl.Zero();
+		        iLastPlayedUrl.Zero();
+	        	}
+        	 ClearMetaDataL();
+        	iTerminatedLogOnCancel=EFalse;						
+        	iDialogCanceled=EFalse;
+        	DestroyWaitDialogL();
+        	DoPlayingStateChanged(EFalse);
+        	if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+				{
+				iAppUi.GetNowPlayingViewInstance()->SetBitrate(ETrue);
+				}
+        	iConnectToServer=EFalse;
+        	iNotify=EFalse;
+        	iListenFromIsds=EFalse;
+        	iPlayBack=ETrue;
+        	if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+					{
+					iAppUi.iMainView->GetMainContainer()->UpdateAllL();	
+					}
+					
+			iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+					
+        	if(!iAppUi.iNetworkController->IsHandingOverConnection())
+        	{	
+        	
+        		if (aErrorCode != KIRStreamSourceDisconnected)
+				{
+				DisplayErrorNoteL(aErrorCode == KIRStreamSourceInvalidUrl ?
+								 R_IRAPP_ERROR_ADDRESS : R_IRAPP_ERROR_GENERAL);
+				}
+			}	
+			}
+		 	if(iSessionStart)
+				{
+				//update current operator
+				iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+				iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+				//update home operator
+				iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+				iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+
+				TTerminationStatus terminationstatus = ENoConnectionToServer;
+				//and the cause of error
+				iReportGenerator->UpdateTerminatedBy(terminationstatus);
+				//session ends due to error
+				iReportGenerator->SessionEndL(EFalse);
+				iSessionStart=EFalse;	
+				iSessionShouldNotEnd = EFalse;//check
+				}
+		}	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DoErrorConnectingL - Exiting.");
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::ProgressBarCancel()
+// Cancels the Network request and stops the buffering on progressbar cancel.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ProgressBarCancel()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ProgressBarCancel - Entering");
+
+	RProperty::Set( KUidActiveInternetRadioApp,
+		KIRPSBitrate, iBitRateValue );
+	//Cancel the Network request
+	
+	/**** ASF streaming changes : begin ****/
+	//Cancel the Network request
+	if(!iAsfStreaming)
+		iNetwork->CancelRequest();
+	/**** ASF streaming changes : end ****/
+	
+	iLastConnectedPresetId=0;
+	iLastConnectedPresetUniqId = 0;
+    DoPlayingStateChanged( EFalse );
+	iAudioFadein = EFalse;
+	iProgress = EFalse;
+	if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+		{
+		iLastPlayedUrl.Copy(iUnconnectedUrl);
+		iLastConnectedUrl.Copy(iUnconnectedUrl);
+		}
+	else
+		{
+		iUrl.Delete(0,iUrl.Length());
+        iLastConnectedUrl.Zero();
+        iLastPlayedUrl.Zero();
+		}		
+	//stops buffering from media client, media engine is not stopped
+	
+	//stops buffering from media client, media engine is not stopped
+	/**** ASF streaming changes : begin ****/
+	if(!iAsfStreaming)
+		iPlayer->StopInitialBuffering();
+	/**** ASF streaming changes : end ****/
+
+	if(!iCancelNetworkRequest)
+	{
+	if( iSessionStart )
+		{
+		//update current operator
+		iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+		iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+		//update home operator
+		iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+		iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+		
+		TTerminationStatus terminationstatus = EUserTerminated;
+		//ending the previous session
+		iReportGenerator->UpdateTerminatedBy(terminationstatus);
+		iSessionStart = EFalse;
+		iSessionShouldNotEnd = EFalse;
+		//session is ended
+		TRAP_IGNORE( iReportGenerator->SessionEndL(EFalse) )
+		}
+	}
+	iCancelNetworkRequest=EFalse;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ProgressBarCancel - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::DoPlayingStateChangedL()
+// Handles internal state change and P&S when playing is stopped or started.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::DoPlayingStateChanged( TBool aPlaying )
+    {
+    IRLOG_INFO2( "CIRNowPlayingWrapper::DoPlayingStateChanged - playing state=%d", aPlaying );
+    if ( aPlaying )
+        {
+		iPlaying = ETrue;
+		iAppUi.GetNowPlayingViewInstance()->SetPlayingValue (iPlaying);
+        iAppUi.GetPubSubManagerInstance()->PublishChannel( iNowPlayingPreset->GetName() );
+    	iAppUi.GetPubSubManagerInstance()->PublishPlayStop( EIRStatePlay );
+        }
+    else
+        {
+		iPlaying = EFalse;
+		iAppUi.GetNowPlayingViewInstance()->SetPlayingValue (iPlaying);
+    	iAppUi.GetPubSubManagerInstance()->PublishPlayStop( EIRStateStop );
+        }
+	if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+		{
+		TRAP_IGNORE(iAppUi.GetNowPlayingViewInstance()->ConstructToolbarL();)
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DoPlayingStateChangedL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::DoPlay()
+// First try to reconnect to the last played channel url
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::DoPlayL()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::DoPlayL - Entering" );
+	CreateWaitDialogL();
+	iAppUi.GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+
+	//reconnecting to the channel
+	if( iAppUi.GetCallConnectedState() )
+		{
+	    IRLOG_DEBUG( "CIRNowPlayingWrapper::DoPlayL - Call ongoing, Exiting." );
+		return;
+		}
+	// connection exits	hence proceed with the connection
+	// to channel
+	else
+		{
+    	//load the loading screen
+    	iMultipleURLSelect = EFalse;
+    	iReConnecting = ETrue;
+    	iChannelConnect = ETrue;
+    	iDialogCanceled=EFalse;
+    	iUrl.Copy(iLastPlayedUrl);
+	if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+			{
+			iLaunchNowplaying=ETrue;
+			}	
+		/**** ASF streaming changes : begin ****/
+		TInt error = KErrNone;
+		if(!iAsfStreaming)
+			{
+			TRAP(error,iNetwork->ReconnectL(iLastPlayedUrl));
+			}
+		else
+			{
+			iAsfPlayer->PlayL(iLastPlayedUrl);
+			}
+		/**** ASF streaming changes : end ****/
+
+    	if( error )
+    		{
+    		IRLOG_ERROR2( "CIRNowPlayingWrapper::DoPlayL - Reconnect failed (error=%d)", error );
+    		TRAP_IGNORE(DisplayErrorNoteL(R_IRAPP_ERROR_CONNECTION))
+    		DestroyWaitDialogL();
+    		}
+		if(!iSessionStart)
+			{
+            LogStartSession();
+			}
+
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DoPlayL - Exiting." );
+
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::StopNow()
+// Function calls stop functionality.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::StopNow()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::StopNow - Entering" );
+	if(iIsConnected)
+		{
+		//player is stopped
+		if(iPlaying)
+			{
+
+			/**** ASF streaming changes : begin ****/
+			if(!iAsfStreaming)
+				{
+				iPlayer->Stop();
+				}
+			else
+
+				{
+				iAsfPlayer->Stop();
+				iAsfStreaming = EFalse;
+				}
+			/**** ASF streaming changes : end ****/
+
+			DoPlayingStateChanged( EFalse );
+			if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+				{
+				TRAP_IGNORE(iAppUi.iMainView->GetMainContainer()->UpdateAllL();)
+				}
+			iPlayandStop=EFalse;
+			if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+				{
+				iPlayandStop=ETrue;
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::StopNow - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::ClearMetaDataL()
+// Clears the current meta data information.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ClearMetaDataL()
+    {
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ClearMetaDataL - Entering" );
+    CIRMetaData* metaData = CIRMetaData::NewL();
+    CleanupStack::PushL( metaData );
+    // Handles clearing the information with strings read from resources
+    HandleMetaDataReceivedL( *metaData ); 
+    CleanupStack::PopAndDestroy( metaData );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ClearMetaDataL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::ListenToChannel()
+// Requests for listening to a particular channel
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::ListenToChannelL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ListenToChannel - Entering" );
+	*iNowPlayingPreset = *aPreset;
+	
+	//replace the preset with favorites preset (if exists in favorites)
+	iAppUi.GetFavPresetsInstance()->ReplacePresetL(*iNowPlayingPreset);
+
+	//channel is connected from isds
+	SetCurrentConnectionSource(EIRIsds);
+	//connecting to a particular channel
+	ConnectToChannelL(*iNowPlayingPreset);
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::ListenToChannel - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::MetaData()
+// Returns the current meta data information.
+// ---------------------------------------------------------------------------
+//
+const CIRMetaData& CIRNowPlayingWrapper::MetaData() const
+    {
+    IRLOG_DEBUG( "CIRNowPlayingWrapper::MetaData " );
+    return *iMetaData;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRNowPlayingWrapper::DialogDismissedL()
+// Called by CAknwaitdialog 
+// -----------------------------------------------------------------------------
+// 
+void CIRNowPlayingWrapper::DialogDismissedL( TInt aButtonId )
+	{
+	IRLOG_DEBUG( "CIRSearchView::DialogDismissedL() started." );
+	
+		if(aButtonId == EIRCancel)
+			{
+			if(iSyncPreset)
+				{
+				iAppUi.iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();	
+				iSyncPreset=EFalse;
+				if((iAppUi.iNowPlayingView->iContainer))
+				{
+			iAppUi.iNowPlayingView->SetRockerIndex(
+						iAppUi.iNowPlayingView->GetPreviousIndex());
+				}
+				iWaitDialog= NULL; 
+				return;
+				}
+			if(!iDialogCanceled)
+				{
+				if(iContextViews==ESearch||iContextViews==EBrowseByTopStations
+					||iContextViews==EStations||iContextViews==EHistoryView)
+					{
+					iAppUi.iIsdsWrapper->SetListenRequest(EFalse);
+					if(iNowPlayingPreset->GetChannelType())
+						{
+						if(!iListenFromIsds)
+							{
+							if ( iAppUi.iIsdsWrapper->GetISDSInstance() )
+								{
+								//iListenFromIsds=EFalse
+								iCancelFrmIsds=ETrue;
+								iAppUi.iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+								}
+							if((iAppUi.iNowPlayingView->iContainer))
+								{
+							iAppUi.iIsdsWrapper->SetCurrentPlayingIndex(
+							iAppUi.iNowPlayingView->GetPreviousIndex());
+					iAppUi.iNowPlayingView->SetRockerIndex(
+								iAppUi.iNowPlayingView->GetPreviousIndex());
+								}
+							iWaitDialog= NULL;
+							return;
+							}
+
+						}
+					}
+		if(iBufferigSteamText)
+			{
+			// Dialog will delete itself
+			iWaitDialog= NULL;   
+			ProgressBarCancel();
+			iUrl.Delete(0,iUrl.Length());
+	        iLastConnectedUrl.Zero();
+	        iLastPlayedUrl.Zero();
+	        iUinqid=0;
+			}
+		else
+			{
+			// Dialog will delete itself
+			iWaitDialog= NULL;
+			if(!(iAppUi.GetNowPlayingViewInstance()->GetsameUrlFlag()))
+ 
+			CancelNetworkRequestL();
+			DoPlayingStateChanged(EFalse);
+			iAppUi.GetNowPlayingViewInstance()->SetsameUrlFlag(EFalse);
+			iUrl.Delete(0,iUrl.Length());
+	        iLastConnectedUrl.Zero();
+	        iLastPlayedUrl.Zero();
+	       	iUinqid=0;
+			}
+		ClearMetaDataL();
+		if( iSessionStart )
+			{
+			//update current operator
+			iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+			iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+			//update home operator
+			iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+			iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+			
+			TTerminationStatus terminationstatus = EUserTerminated;
+			//ending the previous session
+			iReportGenerator->UpdateTerminatedBy(terminationstatus);            
+			iSessionStart = EFalse;
+			iSessionShouldNotEnd = EFalse;
+			//session is ended
+			TRAP_IGNORE( iReportGenerator->SessionEndL(EFalse) )					
+			}
+		}
+	}
+
+	IRLOG_DEBUG( "CIRSearchView::DialogDismissedL() exiting." );
+	}    
+
+// ---------------------------------------------------------------------------
+// Function : HandlePlayError()
+// Handles play error || should called only through MCtrlCommand
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::HandlePlayError()
+	{
+	IRLOG_ERROR( "CIRNowPlayingWrapper::HandlePlayError - Entering" );
+	//if progress bar is present cancel progress bar
+	if( iProgress )
+		{
+		ProgressBarCancel();
+		TRAP_IGNORE(DestroyWaitDialogL());
+		}	
+	//buffering overlay if present is removed
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::HandlePlayError - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::PlayAndStopL()
+// Performs play and stop functionality
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::PlayAndStopL()
+	{
+	IRLOG_INFO( "CIRNowPlayingWrapper::PlayAndStopL - Entering" );
+
+	if( !iPlaying )
+		{
+		//if currently status is not playing
+		//play request is issued
+		DoPlayL();
+
+		// Active Idle
+		TInt passId=iAppUi.GetFavPresetsInstance()->SearchPreset( iNowPlayingPreset->GetId(),
+			iNowPlayingPreset->UniqId());
+		// Checks for the preset index of the channel, if preset index exists
+		// in favourites list, publishes the preset index.
+		if( passId != KErrNotFound)
+			{
+			TInt presetIndex = passId+1;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+				presetIndex );
+			}
+		else
+			{
+			// If preset not present in favourites list, publishes the index
+			// as 0. This is set to 0 here to indicate the active idle
+			// component that the index with 0 is a non favourite channel.
+			TInt presetIndex  = 0;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+				presetIndex );
+			}
+		}
+	else
+		{
+		//if status is playing stop is called
+		if(iIsConnected)
+			{
+			iPlayandStop=ETrue;
+			iConnectToServer=EFalse;
+			/**** ASF streaming changes : begin ****/
+			if(!iAsfStreaming)
+				iPlayer->Stop();
+			/**** ASF streaming changes : end ****/
+
+			if( iSessionStart )
+		        {
+				//update current operator
+				iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+				iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+				//update home operator
+				iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+				iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+					        
+		        // End the session
+		        iReportGenerator->UpdateTerminatedBy( EUserTerminated );
+		        iSessionStart = EFalse;
+		        iSessionShouldNotEnd = EFalse;
+		        iReportGenerator->SessionEndL( EFalse );
+		        }
+            DoPlayingStateChanged( EFalse );
+			}
+		// Active Idle
+		TInt passId=iAppUi.GetFavPresetsInstance()->SearchPreset( iNowPlayingPreset->GetId(),
+			iNowPlayingPreset->UniqId());
+		// Checks for the preset index of the channel, if preset index exists
+		// in favourites list, publishes the preset index.
+		if( passId != KErrNotFound)
+			{
+			TInt presetId = passId+1;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+			presetId );
+			}
+		else
+			{
+			// If preset not present in favourites list, publishes the index
+			// as 0. This is set to 0 here to indicate the active idle
+			// component that the index with 0 is a non favourite channel.
+			TInt presetId = 0;
+			RProperty::Set( KUidActiveInternetRadioApp, KIRPSPresetIndex,
+				presetId );
+			}
+		}
+		
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::PlayAndStopL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// LoadTerminateSession()
+// The loading cancel result in session log end
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::LoadTerminateSessionL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::LoadTerminateSession - Entering." );
+	//checks whether session log can be terminated
+	if( iTerminatedLogOnCancel )
+		{
+		//loading cancel is cancelling session log
+		//session log should not be cancelled
+		iTerminatedLogOnCancel = EFalse;
+		//checks whether session log exists or not
+		if(iSessionStart)
+			{
+			//logging server results connection is not yet made
+			//and attempt is failed
+			iReportGenerator->LogServerResult(iUrl,EIRConnFailed);
+			//update current operator
+			iReportGenerator->UpdateCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+			iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+			//update home operator
+			iReportGenerator->UpdateHomeOperator(iAppUi.GetHomeOperatorValue());
+			iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+			
+			//user terminated
+			iReportGenerator->UpdateTerminatedBy(EUserTerminated);
+			//session ends due to error
+			iReportGenerator->SessionEndL(EFalse);
+			
+			TBool validate = iReportGenerator->ReStorePreviousSession();
+			//restoring previous session
+			if (validate)
+				{
+				iSessionStart = ETrue; 					
+				}
+			else
+				{
+				iSessionStart=EFalse;		
+				}
+			iSessionShouldNotEnd = EFalse;
+			
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::LoadTerminateSession - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetMediaClientInstance()
+// Returns the Media Client Instance
+// ---------------------------------------------------------------------------
+//
+CIRMediaClient* CIRNowPlayingWrapper::GetMediaClientInstance()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetMediaClientInstance " );
+	return iPlayer;	
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetMediaClientInstance()
+// Returns the ReportGenerator Instance
+// ---------------------------------------------------------------------------
+//
+CIRReportGenerator* CIRNowPlayingWrapper::GetReportGeneratorInstance()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetReportGeneratorInstance " );
+	return iReportGenerator;	
+	}
+
+	
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetTerminatedLogOnCancelState()
+// Returns the iTerminatedLogOnCancel Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::GetTerminatedLogOnCancelState()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetTerminatedLogOnCancelState " );
+	return iTerminatedLogOnCancel;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetSessionStartState()
+// Returns the iSessionStart Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::GetSessionStartState()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetSessionStartState " );
+	return iSessionStart;
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetSessionStartedFlag()
+// Returns the iSessionStarted Flag Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::GetSessionStartedFlag()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetSessionStartedFlag " );
+	return iSessionStartedFlag;
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetSessionStartedFlag()
+// Sets the iSessionStartedFlag  Value
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetSessionStartedFlag(TBool aSessionStartedFlag)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetSessionStartedFlag - Entering " );
+	iSessionStartedFlag = aSessionStartedFlag;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetSessionStartedFlag - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetSessionStartState()
+// Sets the iSessionStart Value
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetSessionStartState(TBool aSessionStart)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetSessionStartState - Entering " );
+	iSessionStart = aSessionStart;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetSessionStartState - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::IsProgress()
+// Returns the iProgress Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::IsProgress()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::IsProgress " );
+	return iProgress;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetConnectToServerState()
+// Sets the iConnectToServer Value
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetConnectToServerState(TBool aConnectToServer)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetConnectToServerState - Entering" );
+	iConnectToServer = aConnectToServer;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetConnectToServerState - Exiting" );
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetConnectToServerState()
+// Returns the iConnectToServer Value
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::GetConnectToServerState()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetConnectToServerState - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetConnectToServerState - Exiting" );
+	return iConnectToServer ;
+	}
+// CIRNowPlayingWrapper::CancelNetworkRequestL()
+// Sets the iConnectToServer Value
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::CancelNetworkRequestL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::CanecelNetworkRequest - Entering" );
+	if(iChannelConnect)
+		{
+		/**** ASF streaming changes : begin ****/
+		if(!iAsfStreaming)
+			iNetwork->CancelRequest();
+		/**** ASF streaming changes : end ****/
+		if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+			{
+			iLastPlayedUrl.Copy(iUnconnectedUrl);
+			iLastConnectedUrl.Copy(iUnconnectedUrl);
+			}
+		else
+			{
+			iUrl.Delete(0,iUrl.Length());
+	        iLastConnectedUrl.Zero();
+			}		
+
+		LoadTerminateSessionL();
+		}
+	else
+		{
+		iCancelNetworkRequest = ETrue;
+		ProgressBarCancel();	
+		}
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::CanecelNetworkRequest - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetVolumeL()
+// Sets the Volume to Player
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetVolumeL(TInt aIndex)
+{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetVolume - Entering" );
+
+	/**** ASF streaming changes : begin ****/
+	if(!iAsfStreaming && iPlayer)
+		{
+		TInt index = iPlayer->MaxVolume()/KNOVOLUMELEVELS;
+		TInt volume = index*aIndex;
+		iPlayer->SetVolume(volume);	
+		}
+	else if(iAsfStreaming && iAsfPlayer)
+		{
+		TInt index = iAsfPlayer->MaxVolume()/KNOVOLUMELEVELS;
+		TInt volume = index*aIndex;
+		iAsfPlayer->SetVolume(volume);	
+		}
+	/**** ASF streaming changes : end ****/
+
+	iIRSettings.SetVolumeSettingL(aIndex);
+    iAppUi.GetPubSubManagerInstance()->PublishVolume( iIRSettings.GetVolumeSetting() );
+    IRLOG_DEBUG( "CIRNowPlayingWrapper::SetVolume - Exiting" );
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetPrevVolumeLevel()
+// Sets the Volume to Player
+// ---------------------------------------------------------------------------
+//
+TInt  CIRNowPlayingWrapper::GetPrevVolumeLevel()
+{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetPrevVolumeLevel" );
+	return iPrevVolumeLevel; 
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetPrevVolumeLevel()
+// Sets the Volume to Player
+// ---------------------------------------------------------------------------
+//
+void   CIRNowPlayingWrapper::SetPrevVolumeLevel(TInt aPrevVolume)
+{
+	 IRLOG_DEBUG( "CIRNowPlayingWrapper::SetPrevVolumeLevel - Entering" );
+	 iPrevVolumeLevel = aPrevVolume;
+	 IRLOG_DEBUG( "CIRNowPlayingWrapper::SetPrevVolumeLevel - Exiting" );
+}
+ // ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetPrevVolumeLevel()
+// Sets the Volume to Player
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper:: SetMetadataL()
+{
+	 IRLOG_DEBUG( "CIRNowPlayingWrapper::SetMetadata() - Entering" );
+	iMetaData->SetArtistL(KConst);
+	iMetaData->SetSongL( KConst );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetMetadata() - Exiting" );
+
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::PublishDataL()
+// Publishes the Metadata
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper:: PublishDataL()
+{	 
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::PublishDataL() - Entering" );
+
+		iAppUi.GetPubSubManagerInstance()->PublishChannel( iNowPlayingPreset->GetName() );
+		iAppUi.GetPubSubManagerInstance()->PublishMetaDataL( *iMetaData );
+		iAppUi.GetPubSubManagerInstance()->PublishChannelType(
+						iNowPlayingPreset->GetChannelType());
+		iAppUi.GetPubSubManagerInstance()->PublishChannelId(iNowPlayingPreset->GetId());
+	    iAppUi.GetPubSubManagerInstance()->PublishChannelDesc(
+	    				iNowPlayingPreset->GetShortDescription());
+	    if(iNowPlayingPreset->GetChannelType()==1)
+		    {
+	    	iAppUi.GetPubSubManagerInstance()->PublishChannelMusicFlag(
+	    	            iNowPlayingPreset->GetMusicStoreStatus());
+		    }
+		 if(iAppUi.GetNowPlayingViewInstance())
+			 {
+			 iAppUi.GetNowPlayingViewInstance()->UpdateLastplayedL();
+			 }
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::PublishDataL() - Exiting" );
+
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::StopPlayerL()
+// Stops the Player
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::StopPlayer()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::StopPlayerL() - Entering" );
+
+	/**** ASF streaming changes : begin ****/
+	if(!iAsfStreaming && iPlayer)
+		{
+		iPlayer->Stop();
+		DoPlayingStateChanged(EFalse);
+		iPlayandStop=EFalse;
+		}
+	else if(iAsfStreaming && iAsfPlayer)
+		{
+		iAsfPlayer->Stop();
+		iAsfStreaming = EFalse;
+		DoPlayingStateChanged(EFalse);
+		}
+		if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+		{
+		TRAP_IGNORE(iAppUi.iMainView->GetMainContainer()->UpdateAllL();)	
+		}	
+	/**** ASF streaming changes : end ****/
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::StopPlayerL() - Exiting" );
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetMedadataForErrotrConditions()
+// Sets the iDisplayMetaData Flag When Handling the Context Navigation
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::SetMedadataForErrotrConditions(TBool aDisplayMetaData)
+{
+IRLOG_DEBUG( "CIRNowPlayingWrapper::SetMedadataForErrotrConditions() - Entering" );
+
+	iDisplayMetaData=aDisplayMetaData;
+ IRLOG_DEBUG( "CIRNowPlayingWrapper::SetMedadataForErrotrConditions() - Exiting" );
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetMedadataForErrotrConditions()
+// Returns the iDisplayMetaData Flag When Handling the Context Navigation
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingWrapper::GetMedadataForErrotrConditions()
+{
+IRLOG_DEBUG( "CIRNowPlayingWrapper::GetMedadataForErrotrConditions() - Entering" );
+IRLOG_DEBUG( "CIRNowPlayingWrapper::GetMedadataForErrotrConditions() - Exiting" );
+	return iDisplayMetaData;
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetMarquee()
+// Returns the iMarQuee which is Set During HandleMetadataReceived
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingWrapper::GetMarquee()
+{
+IRLOG_DEBUG( "CIRNowPlayingWrapper::GetMarquee() - Entering" );
+IRLOG_DEBUG( "CIRNowPlayingWrapper::GetMarquee() - Exiting" );
+	return iMarquee;
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetMarquee()
+// Sets the Marquee value required for NowPlaying view
+// ---------------------------------------------------------------------------
+//
+ void CIRNowPlayingWrapper::SetMarquee(TBool aMarquee)
+{
+IRLOG_DEBUG( "CIRNowPlayingWrapper::SetMarquee() - Entering" );
+	
+iMarquee=aMarquee;
+
+IRLOG_DEBUG( "CIRNowPlayingWrapper::SetMarquee() - Exiting" );
+	
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::SetView()
+// Set by Every View to its TIRViews when Listen is Done
+// ---------------------------------------------------------------------------
+//
+ 	
+void CIRNowPlayingWrapper:: SetView(TIRViews aContextViews)
+{
+IRLOG_DEBUG( "CIRNowPlayingWrapper::SetView() - Entering" );
+
+	iContextViews=aContextViews;
+IRLOG_DEBUG( "CIRNowPlayingWrapper::SetView() - Exiting" );
+
+}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::GetView()
+// Returns the View Where Listen Has Done
+// ---------------------------------------------------------------------------
+//
+TIRViews CIRNowPlayingWrapper:: GetView()
+{
+IRLOG_DEBUG( "CIRNowPlayingWrapper::GetView() - Entering" );
+IRLOG_DEBUG( "CIRNowPlayingWrapper::GetView() - Exiting" );
+return iContextViews;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::SetAudioVolume()
+// function set the volume
+// ---------------------------------------------------------------------------
+//		
+void CIRNowPlayingWrapper::SetAudioVolume(TInt aValue)
+	{
+	IRLOG_INFO2( "CIRNowPlayingWrapper::SetAudioVolume(aValue=%d)", aValue );	
+
+	/**** ASF streaming changes : begin ****/
+	if(!iAsfStreaming)
+		{
+		TInt index = iPlayer->MaxVolume()/KNOVOLUMELEVELS;	
+		TInt volume = aValue * index;
+		//volume level between zero volume and maximum volume  of
+		//device is taken, if volume is beyound these limit it is not set
+		if( (0 <= volume) && (iPlayer->MaxVolume() >= volume) )
+			{
+			iPlayer->SetVolume(volume);
+			}		
+		}
+	else
+		{
+		TInt index = iAsfPlayer->MaxVolume()/KNOVOLUMELEVELS;	
+		TInt volume = aValue * index;
+		//volume level between zero volume and maximum volume  of
+		//device is taken, if volume is beyound these limit it is not set
+		if( (0 <= volume) && (iAsfPlayer->MaxVolume() >= volume) )
+			{
+			iAsfPlayer->SetVolume(volume);
+			}		
+		}
+	/**** ASF streaming changes : end ****/
+		
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetAudioVolume - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CreateWaitDialogL()
+// Creates the waitDialog Required While Connecting To a Channel
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::CreateWaitDialogL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::CreateWaitDialogL - Entering" );
+	    
+		HBufC* bufferText  = StringLoader::LoadLC(R_IRAPP_LOADING_BUFFERING);
+	if(!iWaitDialog)	
+		{
+		iWaitDialog =  new ( ELeave ) CAknWaitDialog( NULL,ETrue);
+		iWaitDialog->SetCallback(this);
+		iWaitDialog->ExecuteLD(R_IRAPP_PROGRESS_DIALOG);
+		iWaitDialog->SetTextL(*bufferText);
+		iBufferigSteamText=EFalse;
+		}
+	CleanupStack::PopAndDestroy(bufferText);
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::CreateWaitDialogL - exiting." );
+	}
+// ---------------------------------------------------------------------------
+// DestroyWaitDialogL()
+// Destroys The WaitDialog
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::DestroyWaitDialogL()
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DestroyWaitDialogL - Entering" );
+
+		if(iWaitDialog)
+		{
+		iWaitDialog->ProcessFinishedL();
+		iWaitDialog=NULL;
+		iDialogCanceled=ETrue;
+		iBufferingRequestCancelled=ETrue;
+		}
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::DestroyWaitDialogL - exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// SetProgress()
+// Sets the Progress Value
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::SetProgress(TBool aProgress)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetProgress - Entering" );
+	iProgress=aProgress;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetProgress - exiting." );
+	}
+// ---------------------------------------------------------------------------
+// GetChannelConnetedInfo()
+// Returns Whether the channel connected or not
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingWrapper::GetChannelConnetedInfo()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetChannelConnetedInfo - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetChannelConnetedInfo - exiting." );
+	return iChannelConnected;
+	}
+// ---------------------------------------------------------------------------
+// HandleNetworkDisconnected()
+// Function called when network got disconnected While Buffering
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::HandleNetworkDisconnected()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::HandleNetworkDisconnected - Entering" );
+
+	iAppUi.iNetworkController->ResetConnectionStatus();
+	if(!iAppUi.iIsDisconnected)
+	{
+	if(iAppUi.iMainView->iSyncReq)
+		{
+		iAppUi.iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+		TRAP_IGNORE(DestroyWaitDialogL();)
+		}
+	if(iConnectToServer && !iProgress)
+		{
+		TRAP_IGNORE(DestroyWaitDialogL();)
+		TRAP_IGNORE(CancelNetworkRequestL();)	
+		}
+	if(iProgress)
+		{
+		//if in progress bar view, progress bar is cancelled
+		TRAP_IGNORE(DestroyWaitDialogL();)
+		ProgressBarCancel();
+		}
+	if ( iAppUi.iIsdsWrapper->GetISDSInstance() )
+	    {
+	    if(iAppUi.iIsdsWrapper->GetListenRequest())
+		  {
+	    TRAP_IGNORE(DestroyWaitDialogL();)
+		  }
+	    TRAP_IGNORE(iAppUi.iIsdsWrapper->DestroyWaitDialogL();)
+	    iAppUi.iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+	    iAppUi.iIsdsWrapper->GetISDSInstance()->ReleaseResources();
+	    }
+	    }
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::HandleNetworkDisconnected - exiting." );
+	}
+// ---------------------------------------------------------------------------
+// HandleNetworkEstablished()
+// Function called when network Connection Established In ALr
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::HandleNetworkEstablished()
+	{
+	 if(!iPlaying)
+	 {
+	  iLastConnectedUrl.Zero();
+	 	iLastPlayedUrl.Zero();
+	if((iAppUi.GetNowPlayingViewInstance()->iContainer))
+	{
+	 if(iSyncPreset)
+		 {
+		 	iAppUi.iNowPlayingView->SetRockerIndex(
+			iAppUi.iNowPlayingView->GetPreviousIndex());
+			TRAP_IGNORE(TriggerCommandL(iAppUi.GetNowPlayingViewInstance()->GetCommandId());)	
+            return;
+		 }
+	}
+	  //iLastPlayedUrl.Zero()
+	if(iAppUi.iIsdsWrapper->GetListenRequest())
+		  {
+IRRDEBUG2("CIRNowPlayingWrapper:: HandleNetworkEstablished1", KNullDesC); 
+
+		  if(!(iAppUi.GetNowPlayingViewInstance()->iContainer))
+			  {
+			  if(!iBufferingRequestCancelled)
+				  {
+				  iLaunchNowplaying=EFalse;	
+				  }
+			  else
+				  {
+				  iLaunchNowplaying=ETrue;	
+				  }
+			  }
+		  if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+			  {
+			iAppUi.iNowPlayingView->SetRockerIndex(
+			iAppUi.iNowPlayingView->GetPreviousIndex());
+			 TRAP_IGNORE(TriggerCommandL(iAppUi.GetNowPlayingViewInstance()->GetCommandId());)	
+			  }
+		  else
+			  {
+			  TRAP_IGNORE(TriggerCommandL(EListenCmd);)	
+			  }
+		  }
+	  else if(iConnectToServer && !iPlaying)
+		  {
+
+		  if(!(iAppUi.GetNowPlayingViewInstance()->iContainer))
+			  {
+			  if(!iBufferingRequestCancelled)
+				  {
+				  iLaunchNowplaying=EFalse;	
+				  }
+			  else
+				  {
+				  iLaunchNowplaying=ETrue;	
+				  }
+			  }
+		  else
+			  {
+			  iLaunchNowplaying=ETrue;		
+			  }
+		  iNotify=ETrue;
+		  iQualityRequired=-1;
+		  TRAP_IGNORE(ConnectToChannelL(*iNowPlayingPreset);)
+		  }
+	 	  
+	 }
+	
+	}
+
+// ---------------------------------------------------------------------------
+// Triggers the command to view handling
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::TriggerCommandL( TInt iCommandId)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+	TVwsViewId viewId( KNullUid, KNullUid );
+	CAknViewAppUi* appUi = static_cast<CAknViewAppUi*>( CCoeEnv::Static()->AppUi() );
+	TInt err = appUi->GetActiveViewId( viewId );
+	RProcess process;
+	TSecureId id = process.SecureId();
+	// TO be DOne GetActiveViewId doesn't always work (when switched back to VRA through RadioLauncher icon
+	if( !err && viewId.iAppUid.iUid == id.iId )
+		{
+		CAknView* view = appUi->View( viewId.iViewUid );
+		if( view )
+			{
+			view->ProcessCommandL( iCommandId );
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::RemoveWhiteSpace( TDes& aBuf )
+// Called from HandleMetaDataReceivedL.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::RemoveWhiteSpace( TDes& aBuf )
+	{
+	_LIT(KNewLine, "\n");
+	_LIT(KCharLine, "\r");
+	_LIT(KTab, "\t");
+	_LIT(KSpace, " ");
+	
+	TInt index = aBuf.Find(KNewLine);
+	while (index != KErrNotFound)
+		{
+		aBuf.Replace(index, 1, KSpace);
+		index = aBuf.Find(KNewLine);
+		}
+		
+	index = aBuf.Find(KCharLine);
+	while (index != KErrNotFound)
+		{
+		aBuf.Replace(index, 1, KSpace);
+		index = aBuf.Find(KCharLine);
+		}
+	
+	index = aBuf.Find(KTab);
+	while (index != KErrNotFound)
+		{
+		aBuf.Replace(index, 1, KSpace);
+		index = aBuf.Find(KTab);
+		}
+
+	aBuf.TrimAll();
+	}
+// ---------------------------------------------------------------------------
+// CIRNowPlayingWrapper::CheckCallStatusL
+// Checks the Call status Whether it is Incoming Call or OutGoing Call
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::CheckCallStatusL()
+{
+CTelephony* telephony = CTelephony::NewLC();
+
+CTelephony::TCallInfoV1 callInfoV1;
+CTelephony::TCallInfoV1Pckg callInfoV1Pckg( callInfoV1 );
+
+CTelephony::TCallSelectionV1 callSelectionV1;
+CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg( callSelectionV1 );
+
+CTelephony::TRemotePartyInfoV1 remotePartyInfoV1;
+CTelephony::TRemotePartyInfoV1Pckg remotePartyInfoV1Pckg( remotePartyInfoV1  );
+
+callSelectionV1.iLine = CTelephony::EVoiceLine;
+callSelectionV1.iSelect =CTelephony::EInProgressCall;
+
+telephony->GetCallInfo( callSelectionV1Pckg, callInfoV1Pckg, remotePartyInfoV1Pckg );
+CTelephony::TCallDirection iDirection1;
+iDirection1=CTelephony::EMobileOriginated;
+
+if(remotePartyInfoV1.iDirection==iDirection1)
+{
+ iPlaying=ETrue;
+ CleanupStack::PopAndDestroy( telephony );	
+ return ETrue;
+ 	
+}
+CleanupStack::PopAndDestroy( telephony );
+IRLOG_DEBUG( "CIRNowPlayingWrapper::NotifyActiveNetworkObserversL - Entering" );
+return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRNowPlayingWrapper::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::NotifyActiveNetworkObserversL - Entering" );
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			if(!iAppUi.iIsDisconnected)
+				{
+				if(iAppUi.GetNowPlayingViewInstance()->iContainer)
+					{
+					if(iSyncPreset)
+					{
+					if((iAppUi.iNowPlayingView->iContainer))
+						{
+					iAppUi.iNowPlayingView->SetRockerIndex(
+								iAppUi.iNowPlayingView->GetPreviousIndex());
+						}
+						
+					}
+					IRRDEBUG2("CIRNowPlayingWrapper::ENetworkConnectionDisconnected1 - Entering ", KNullDesC); 
+					if(iAppUi.iIsdsWrapper->GetListenRequest()||iSyncPreset)
+						{	
+						TRAP_IGNORE(DestroyWaitDialogL();)
+						iAppUi.iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+						}
+					if(iPlaying && !iProgress)
+						{
+
+						StopNow();
+						if(iAppUi.ActiveView() == KIRMainChoiceViewID)								 
+							{
+							iAppUi.iMainView->GetMainContainer()->UpdateAllL();	
+							}
+						}	
+					else
+						{
+						if(iConnectToServer && !iProgress)
+							{
+
+							CancelNetworkRequestL();
+							DestroyWaitDialogL();
+							}
+						if(iProgress)
+							{
+							//if in progress bar view, progress bar is cancelled
+							DestroyWaitDialogL();
+							ProgressBarCancel();
+							}
+						}
+					}
+
+				}
+			}
+			break;
+			
+		case ENetworkConnectionEstablished:
+			{
+			if(!iAppUi.IsCallActive())
+				{
+				if(iAppUi.iNetworkController->IsHandingOverConnection())
+					{
+					iAppUi.GetNowPlayingViewInstance()->SetRequestPendingWhenNoNetWork(EFalse);
+					iAppUi.GetNowPlayingViewInstance()->SetRequestPendingWhenNoNetWorkForNextOrPrev(EFalse);	
+					if(!iPlaying)
+					{
+
+					HandleNetworkEstablished();
+					}
+					}
+			else if(iAppUi.GetNowPlayingViewInstance()->GetRequestPending())
+					{
+					PlayAndStopL();	
+					}
+			else if(iAppUi.GetNowPlayingViewInstance()->GetRequestPendingForNextOrPreV())
+					{
+					if(iContextViews==EFav||iContextViews==EPls)
+						{
+						iAppUi.GetNowPlayingViewInstance()->ConnectToPresetL();
+						iAppUi.GetNowPlayingViewInstance()->StartTimerL();
+						}
+					else
+						{
+						iAppUi.GetNowPlayingViewInstance()->ConnectToPresetL();
+						}
+					}
+				}
+			ResetPendingRequests(EFalse);				
+			}
+		break;
+		default:
+		break;			
+		}
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::NotifyActiveNetworkObserversL - Exiting" );
+}
+
+
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRNowPlayingWrapper::ResetPendingRequests(TBool aValue)
+	{
+	iAppUi.GetNowPlayingViewInstance()->SetRequestPendingWhenNoNetWork(aValue);
+	iAppUi.GetNowPlayingViewInstance()->SetRequestPendingWhenNoNetWorkForNextOrPrev(aValue);	
+	}
+
+/**** Added for ASF streaming - begin *****/
+
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::Asf_ErrorConnecting()
+// Called when there is an error when connecting to the channel server  @Param aErrorCode Indicates the type of error as described in irstreamsourceerrors.h---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::Asf_ErrorConnecting(TInt aErrorCode)
+	{
+	IRLOG_DEBUG2( "CIRNowPlayingWrapper::Asf_ErrorConnecting(aErrorCode=%d)", aErrorCode );
+	ErrorConnecting( aErrorCode );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::Asf_ErrorConnecting - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::Asf_ConnectionEstablished(TInt aFeedValue)
+// Called to indicate that the connection to channel server is sucessful
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::Asf_ConnectionEstablished()
+	{
+    IRLOG_INFO( "CIRNowPlayingWrapper::Asf_ConnectionEstablished - Entering." );
+	ConnectionEstablished();
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::Asf_ConnectionEstablished - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// MIRStreamSourceObserver::Asf_UpdateProgress()
+// Called to provide teh buffer values @param aFeedValue used to pump the buffering value
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::Asf_UpdateProgress(TInt aFeedValue)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::Asf_UpdateProgress - Entering" );
+	UpdateProgress(aFeedValue);
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::Asf_UpdateProgress - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// MCrtlCmdCommand::Asf_HandleMetaDataReceivedL()
+// Invoked when meta data is received. @param  aMetaData The meta data that was received.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingWrapper::Asf_HandleMetaDataReceivedL( const CIRMetaData& aMetaData )
+    {
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::Asf_HandleMetaDataReceivedL  - Entering" );
+	HandleMetaDataReceivedL( aMetaData );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::Asf_HandleMetaDataReceivedL - Exiting." );
+    }
+
+/**** Added for ASF streaming - end *****/
+
+// ---------------------------------------------------------------------------
+//	 UpdateNmsLogEventsL()
+//	 Updates Nms Log events
+// ---------------------------------------------------------------------------	
+	
+void CIRNowPlayingWrapper::UpdateNmsLogEventsL(const TDesC& aNmsType)
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::UpdateNmsLogEventsL - Entering" );
+
+	iReportGenerator->UpdateNmsCurrentNetwork(iAppUi.GetCurrentOperatorValue());
+	iReportGenerator->UpdateNmsHomeOperator(iAppUi.GetHomeOperatorValue());
+	iReportGenerator->UpdateNmsChannelID(iNowPlayingPreset->GetId());
+	iReportGenerator->UpdateNmsType(aNmsType);
+	iReportGenerator->SessionStartedL();
+	iReportGenerator->WriteNmsLogtoXmlL();
+
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::UpdateNmsLogEventsL - exiting." );
+	}
+
+/* This is reuired Only Accp or Acc type check
+// ---------------------------------------------------------------------------
+// GetSupportedMimeTypeL()
+// Function Evaluates the Suppoeted Mime Types
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRNowPlayingWrapper::GetSupportedMimeTypeL()
+	{
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetSupportedMimeTypeL - Entering" );
+//	_LIT(KAudiContent,"aacp")//aacp
+    TInt findContent=KErrNotFound;
+	TInt i,ii,j;
+    CMMFControllerPluginSelectionParameters *cs=CMMFControllerPluginSelectionParameters::NewLC();
+    CMMFFormatSelectionParameters * fs = CMMFFormatSelectionParameters::NewLC();
+    cs->SetRequiredPlayFormatSupportL(*fs);
+    cs->SetRequiredRecordFormatSupportL(*fs);
+    
+    RMMFControllerImplInfoArray controllers;
+    CleanupResetAndDestroyPushL(controllers);
+    cs->ListImplementationsL(controllers);
+    TBuf<KSize>z1;
+    z1.Copy(iNetwork->ContentTypeL());
+    TBool checkMime=EFalse;
+    TInt contrCount = controllers.Count();
+    for(i=0;i<controllers.Count();i++)
+        {
+        //supported play formats
+        const RMMFFormatImplInfoArray &pf=controllers[i]->PlayFormats();
+		TInt pfCount = pf.Count();
+        for(ii=0;ii<pf.Count();ii++)
+            {
+            TBuf<KSize> z;
+            //file extensions
+            const CDesC8Array &fe=pf[ii]->SupportedFileExtensions();
+            //MIME types
+            const CDesC8Array &mt=pf[ii]->SupportedMimeTypes();
+            for(j=0;j<mt.Count();j++)
+                {
+                z.Copy(mt[j]);
+                if(z==z1)
+	                {
+	                checkMime=ETrue;
+	                }
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy(&controllers);//controllers
+    CleanupStack::PopAndDestroy(fs);
+    CleanupStack::PopAndDestroy(cs);
+
+     if(checkMime)
+	     {
+	      findContent=KErrNone;	
+	     }
+     else
+	     {
+	      findContent=KErrNotFound;	
+	     }
+   	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetSupportedMimeTypeL - exiting" );
+   	return findContent;
+	}
+	
+	*/
+// ---------------------------------------------------------------------------
+// SavePreviousIndex()
+// Sets when Listen from Isds is Done
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::SetListenFromIsdsValue(TInt aListenFromIsds  )
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetListenFromIsdsValue - Entering" );
+	iListenFromIsds=aListenFromIsds;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetListenFromIsdsValue - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// SetWhenUserCancelsBufferingWaitBar()
+// Sets When User Cancels Buffering
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::SetWhenUserCancelsBufferingWaitBar(TInt aDialogCanceled  )
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetWhenUserCancelsBuffering - Entering" );
+	iDialogCanceled=aDialogCanceled;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetWhenUserCancelsBuffering - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// SetWhenUserCancelsIsdsBufferingWaitBar()
+// Sets When User Cancels Buffering WaitBar From Isds Listen
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::SetWhenUserCancelsIsdsBufferingWaitBar(TInt aCancelFrmIsds  )
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetWhenUserCancelsIsdsBufferingWaitBar - Entering" );
+	iCancelFrmIsds=aCancelFrmIsds;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetWhenUserCancelsIsdsBufferingWaitBar - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// GetPreviousIndex()
+// Returns When User Cancels Isds Buffering WaitBar
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingWrapper::GetWhenUserCancelsIsdsBufferingWaitBar( )
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetWhenUserCancelsIsdsBufferingWaitBar - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetWhenUserCancelsIsdsBufferingWaitBar - exiting" );
+	return iCancelFrmIsds;
+	}
+// ---------------------------------------------------------------------------
+// SetLaunchNowPlayingView()
+// Sets the varible if NowPlaying is active
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::SetLaunchNowPlayingView(TBool aLaunchNowplaying  )
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetLaunchNowPlayingView - Entering" );
+	iLaunchNowplaying=aLaunchNowplaying;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetLaunchNowPlayingView - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// GetLaunchNowPlayingView()
+// Returns the Nowplaying Vies Active State
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingWrapper::GetLaunchNowPlayingView()
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetLaunchNowPlayingView - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetLaunchNowPlayingView - exiting" );
+	return iLaunchNowplaying;
+	}
+// ---------------------------------------------------------------------------
+// SetFavFocus()
+// Sets the foucs in Mainview
+// ---------------------------------------------------------------------------
+//
+
+void CIRNowPlayingWrapper::SetFavFocus(TInt  aFavIndex  )
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetFavFocus - Entering" );
+	iFavIndex=aFavIndex;
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::SetFavFocus - exiting" );
+	}
+// ---------------------------------------------------------------------------
+// GetFavFocus()
+// Returns the Current Focus to set
+// ---------------------------------------------------------------------------
+//
+TInt CIRNowPlayingWrapper::GetFavFocus()
+	{
+	
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetFavFocus - Entering" );
+	IRLOG_DEBUG( "CIRNowPlayingWrapper::GetFavFocus - exiting" );
+	return iFavIndex;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irnwinfoobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdebug.h"
+#include "irnwinfoobserver.h"
+#include "irui.h"
+
+// ---------------------------------------------------------------------------
+// Function : CIRNwInfoObserver
+// Function is the default constructor, sets the CActive priority
+// ---------------------------------------------------------------------------
+//
+CIRNwInfoObserver::CIRNwInfoObserver():CActive (EPriorityLow),
+				iCurrentNetworkInfoV1Pckg(iCurrentNetworkInfo),
+      			iHomeOperatorInfoPckg(iHomeOperatorInfo)   
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::CIRNwInfoObserver" );
+	//no implementation
+	}
+
+// ---------------------------------------------------------------------------
+// Function : ConstructL
+// Function does all the initializations
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRNwInfoObserver::ConstructL(CIRUi* aUi)
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::ConstructL - Entering" );
+	iUi = aUi;
+	iNwInfoObserver = CTelephony::NewL();
+	CActiveScheduler::Add(this);
+	iCurrentNetwork = ETrue;
+    iHomeNetworkType = EFalse;
+	iFirstTime = ETrue;
+	IRLOG_DEBUG( "CIRNwInfoObserver::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Function : NewL
+// Function returns an instance of CIRNwInfoObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRNwInfoObserver* CIRNwInfoObserver::NewL(CIRUi* aUi)
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::NewL - Entering" );
+	CIRNwInfoObserver* self = CIRNwInfoObserver::NewLC(aUi);
+	CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRNwInfoObserver::NewL - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : NewLC
+// Function returns an instance of CIRNwInfoObserver
+// Two phase constructor
+// ---------------------------------------------------------------------------
+//
+CIRNwInfoObserver* CIRNwInfoObserver::NewLC(CIRUi* aUi)
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::NewLC - Entering" );
+	CIRNwInfoObserver* self = new (ELeave) CIRNwInfoObserver;
+	CleanupStack::PushL(self);
+	self->ConstructL(aUi);
+	IRLOG_DEBUG( "CIRNwInfoObserver::NewLC - Exiting." );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Function : ~CIRNwInfoObserver
+// Default destructor calls Cancel function which cancel the active request 
+// ---------------------------------------------------------------------------
+//
+
+CIRNwInfoObserver::~CIRNwInfoObserver()
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::~CIRNwInfoObserver - Entering" );
+	Cancel();
+	delete iNwInfoObserver;
+	IRLOG_DEBUG( "CIRNwInfoObserver::~CIRNwInfoObserver - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : IRStartNwMonitor
+// Function to start network monitoring
+// ---------------------------------------------------------------------------
+//
+
+void CIRNwInfoObserver::IRStartNwMonitor()
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::IRStartNwMonitor - Entering" );
+	if( !IsActive() )
+		{
+		//get the network status for the first time
+		iNwInfoObserver->GetCurrentNetworkInfo(iStatus,
+			iCurrentNetworkInfoV1Pckg);			
+		SetActive(); 
+		}		 
+	
+	IRLOG_DEBUG( "CIRNwInfoObserver::IRStartNwMonitor - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : IssueRequest
+// Issue request
+// ---------------------------------------------------------------------------
+//
+
+void CIRNwInfoObserver::IssueRequest()
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::IssueRequest - Entering" );
+	if( iCurrentNetwork )
+		{
+		if( !IsActive() )
+			{
+			//notify if current operator changes
+			iNwInfoObserver->NotifyChange(iStatus,
+				CTelephony::ECurrentNetworkInfoChange,
+								iCurrentNetworkInfoV1Pckg);
+			SetActive();
+			}			
+		}	
+	 if( iHomeNetworkType )
+		{
+		if( !IsActive() )
+			{
+			//notify if home operator changes
+			iNwInfoObserver->NotifyChange(iStatus,
+				CTelephony::ENetworkRegistrationStatusChange,
+									iHomeOperatorInfoPckg);
+			SetActive();
+			}	
+		}
+	IRLOG_DEBUG( "CIRNwInfoObserver::IssueRequest - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// Function : DoCancel
+// Function stops getting the battery info if it is active
+// ---------------------------------------------------------------------------
+//
+void CIRNwInfoObserver::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::DoCancel - Entering" );
+	if( IsActive() )
+		{
+		//cancel the out standing requests if any
+		iNwInfoObserver->CancelAsync(CTelephony::ECurrentNetworkInfoChangeCancel);
+		iNwInfoObserver->CancelAsync(CTelephony::ENetworkRegistrationStatusChangeCancel);	
+		iNwInfoObserver->CancelAsync(CTelephony::EGetCurrentNetworkInfoCancel);
+		iNwInfoObserver->CancelAsync(CTelephony::EGetNetworkRegistrationStatusCancel);
+		}	
+	IRLOG_DEBUG( "CIRNwInfoObserver::DoCancel - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : RunL
+// RunL of the nwinfoobserver
+// ---------------------------------------------------------------------------
+//
+void CIRNwInfoObserver::RunL()
+	{	
+	IRLOG_DEBUG( "CIRNwInfoObserver::RunL - Entering" );
+	if(KErrNone == iStatus.Int())
+		{		
+		if( iCurrentNetwork )
+			{
+			//if the request was to find the current network
+			//(changes) then the value is updated
+			#ifdef _WINS_
+				iCurrentNetworkMCC.Zero();
+				iCurrentNetworkMNC.Zero();
+				iUi->UpdateCurrentNetwork
+					(iCurrentNetworkMCC,iCurrentNetworkMNC);		
+			#else
+				iCurrentNetworkMCC = iCurrentNetworkInfo.iCountryCode;
+				iCurrentNetworkMNC = iCurrentNetworkInfo.iNetworkId;
+				//updating mcc+mnc value
+				iUi->UpdateCurrentNetwork
+					(iCurrentNetworkMCC,iCurrentNetworkMNC);
+			#endif
+			
+			iHomeNetworkType = ETrue;
+			iCurrentNetwork = EFalse;
+			if( iFirstTime )
+				{
+				//if first time we have check the 
+				//current operator is home operator
+				iNwInfoObserver->GetNetworkRegistrationStatus
+					(iStatus,iHomeOperatorInfoPckg);			
+				SetActive();
+				iFirstTime = EFalse;	
+				}
+			else
+				{
+				//else issue request is called for notifying
+				//home operator change
+				IssueRequest();	
+				}			
+			}
+		else if( iHomeNetworkType )
+			{
+			//home operator (or the change in home operator is 
+			//notified. 
+			#ifdef _WINS_
+				iHomeNetworkMCC.Zero();
+				iHomeNetworkMNC.Zero();
+				iUi->UpdateHomeNetwork(iHomeNetworkMCC,iHomeNetworkMNC);
+			#else
+				//if operator is not same as home operator it is not updated
+				if (CTelephony::ERegisteredOnHomeNetwork 
+					== iHomeOperatorInfo.iRegStatus)
+					{
+					//if registration status shows that user is registered in 
+					//home network and not in roaming status, the current operator
+					//is updated
+					iHomeNetworkMCC = iCurrentNetworkMCC;
+					iHomeNetworkMNC = iCurrentNetworkMNC;
+					iUi->UpdateHomeNetwork(iHomeNetworkMCC,iHomeNetworkMNC);
+					}
+			#endif
+			//issue request to find the current network change
+			iHomeNetworkType = EFalse;
+			iCurrentNetwork = ETrue;
+			IssueRequest();
+			}		
+		else
+			{
+			return;	
+			}		
+		}
+	else
+		{
+		//if any error network is updated to zero
+		iCurrentNetworkMCC.Zero();
+		iCurrentNetworkMNC.Zero();
+		iUi->UpdateCurrentNetwork(iCurrentNetworkMCC,iCurrentNetworkMNC);
+		iHomeNetworkMCC.Zero();
+		iHomeNetworkMNC.Zero();
+		iUi->UpdateHomeNetwork(iHomeNetworkMCC,iHomeNetworkMNC);
+		}
+	IRLOG_DEBUG( "CIRNwInfoObserver::RunL - Exiting." );
+	return;
+	}
+	
+// ---------------------------------------------------------------------------
+// Function : RunError
+// Function which handles RunL error
+// ---------------------------------------------------------------------------
+//
+TInt CIRNwInfoObserver::RunError(TInt aError)
+	{
+	IRLOG_DEBUG( "CIRNwInfoObserver::RunError" );
+	return aError;		
+	}	
+	
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irplscontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,735 @@
+/*
+* Copyright (c) 2004 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:  Container class for Pls list container
+*
+*/
+
+
+#include <barsread.h>
+#include <internetradio.rsg>
+#include <stringloader.h>
+
+#include "irhistory.h"
+#include "irisdspreset.h"
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irplsview.h"
+#include "irplscontainer.h"
+#include "irapplication.h"
+#include "irfavoritesdb.h"
+#include "irdialoglauncher.h"
+#include "iraap.hlp.hrh" //for HELP
+#include "irnowplayingwrapper.h"
+#include "irsettings.h"     //Added to maintain the IfAnyFav variable in settings
+
+
+const TInt KTwo = 2;
+const TInt KChannelNameSize = 200;
+
+#define KPLSLISTCOUNT  0
+
+//-----------------------------------------------------------------------------
+//  CIRPlsContainer::NewL
+//  Creates a new instance of pls Container
+//-----------------------------------------------------------------------------
+//
+CIRPlsContainer* CIRPlsContainer::NewL(const TRect& aRect ,CIRPlsView& aView)
+    {
+	IRLOG_DEBUG( "CIRPlsContainer::NewL - Entering" );
+    CIRPlsContainer* self = CIRPlsContainer::NewLC(aRect,aView);
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRPlsContainer::NewL - Exiting." );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRPlsContainer::NewLC
+//  Creates a new instance of pls Container and leaves it on the cleanup stack.
+//-----------------------------------------------------------------------------
+//
+CIRPlsContainer* CIRPlsContainer::NewLC(const TRect& aRect ,CIRPlsView& aView)
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::NewLC - Entering" );
+    CIRPlsContainer* self = new (ELeave) CIRPlsContainer(aView);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+	IRLOG_DEBUG( "CIRPlsContainer::NewLC - Exiting." );
+    return self;
+    }
+// ----------------------------------------------------------------------------
+// CIRPlsContainer::CIRPlsContainer()
+// C++ default constructor can NOT contain any code, that might leave.
+// ----------------------------------------------------------------------------
+//
+CIRPlsContainer::CIRPlsContainer( CIRPlsView& aView ) 
+        : iPlsView( aView )
+    {
+	IRLOG_DEBUG( "CIRPlsContainer::CIRPlsContainer" );
+    }
+
+// ----------------------------------------------------------------------------
+// CIRPlsContainer::~CIRPlsContainer()
+// Destructor.
+// Destructs all the Label Instances.
+// ----------------------------------------------------------------------------
+//
+CIRPlsContainer::~CIRPlsContainer()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::~CIRPlsContainer - Entering" );
+	iPresetList.ResetAndDestroy();
+	iIsPresetSaved.Close();
+	iPresetList.Close();
+	if( iPlsListBox )
+		{
+		delete iPlsListBox;
+		iPlsListBox = NULL;
+		}
+	IRLOG_DEBUG( "CIRPlsContainer::~CIRPlsContainer - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRPlsContainer::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::ConstructL( const TRect& aRect )
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::ConstructL - Entering" );
+    CreateWindowL();
+    SetRect( aRect );
+    iPlsListBox = new (ELeave) CAknSingleStyleListBox;
+
+    // Construct list.
+    TResourceReader rr;
+    iCoeEnv->CreateResourceReaderLC( rr, R_IR_CHANNEL_LIST );
+    ConstructFromResourceL( rr );
+    CleanupStack::PopAndDestroy();                // rr
+    
+	iPlsListBox->SetContainerWindowL(*this);
+	iPlsListBox->ConstructL(this ,EAknListBoxSelectionList);
+	
+	iListArray = static_cast<CDesCArray*>(iPlsListBox->Model()->ItemTextArray() );
+
+    iPlsListBox->CreateScrollBarFrameL( ETrue );
+    iPlsListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+                                              CEikScrollBarFrame::EAuto);
+	iPlsListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); 
+    iPlsListBox->SetRect( Rect());
+    iPlsListBox->ActivateL();
+    iPlsListBox->SetListBoxObserver(this); 
+
+    UpdateAllL();
+	IRLOG_DEBUG( "CIRPlsContainer::ConstructL - Exiting" );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things 
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRPlsContainer::OfferKeyEventL( 
+        const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::OfferKeyEventL - Entering" );
+    TKeyResponse keyResp( EKeyWasNotConsumed );
+                 
+    switch ( aKeyEvent.iCode )
+        {
+        case EKeyLeftArrow: // fall-through intended here
+        case EKeyRightArrow:
+        case EKeyIncVolume:
+        case EKeyDecVolume:
+            {
+            keyResp = EKeyWasNotConsumed;
+            break;
+            }
+        case EKeyOK:        
+            {
+            iPlsView.SetCurrentFocus(iPlsListBox->CurrentItemIndex());
+			iPlsView.HandleCommandL(EListenCmd);
+            break;
+            }
+        case EKeyBackspace:        // "c"-key
+            {
+            // delete current channel with "c"-key
+            keyResp = EKeyWasConsumed;
+            break;
+            }
+        default:
+            {
+            iPlsListBox->OfferKeyEventL(aKeyEvent,aType);
+            break;
+            }
+        }
+    IRLOG_DEBUG( "CIRPlsContainer::OfferKeyEventL - Exiting" );   
+    return keyResp; 
+    }
+
+void CIRPlsContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::HandlePointerEventL - Entering" );
+    iPlsListBox->HandlePointerEventL( aPointerEvent );
+    IRLOG_DEBUG( "CIRPlsContainer::HandlePointerEventL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsContainer::UpdateAllL() 
+// Fills list with preset data read from data base.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::UpdateAllL() 
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::UpdateAllL - Entering" );
+	iListArray->Reset();
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+	TInt NoOfEntries = (ui->iURLs.Count()) / KTwo;
+	TInt titleIndex = 1;    
+	_LIT(KTab,"\t");
+	for(TInt i=0 ; i < NoOfEntries ; i++ )
+		{
+
+		HBufC8* title;
+		title = HBufC8::NewLC( (ui->iURLs[titleIndex]->Des()).Length() + KTwo );
+		(title->Des()).Append(KTab);
+		(title->Des()).Append((ui->iURLs[titleIndex])->Des());
+		(title->Des()).Append(KTab);
+		HBufC* title1 = HBufC::NewLC((title->Des()).Length());
+		title1->Des().Copy(title->Des());
+		iListArray->AppendL( (title1->Des()));
+		CleanupStack::PopAndDestroy(title1);
+		CleanupStack::PopAndDestroy(title);
+		titleIndex +=KTwo;    
+		}
+	if(iListArray->Count())
+		{
+		iPlsListBox->SetCurrentItemIndex(iPlsView.GetCurrentFocus());
+		iPlsListBox->View()->VScrollTo(iPlsView.GetCurrentTopItem());	
+		}
+	else
+		{
+         HBufC* headerText = StringLoader::LoadLC(R_IRAPP_STREAMING_LINKS);
+         iPlsListBox->View()->SetListEmptyTextL(*headerText);
+         CleanupStack::PopAndDestroy(headerText); 
+		}	
+	iPlsListBox->HandleItemAdditionL();
+	DrawNow();	
+	IRLOG_DEBUG( "CIRPlsContainer::UpdateAllL - Exiting" );      
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::Draw( const TRect& aRect ) const
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::Draw - Entering" );
+    CWindowGc& gc = SystemGc();
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.DrawRect( aRect );
+    IRLOG_DEBUG( "CIRPlsContainer::Draw - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::GetHelpContext - Entering" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_PLS );
+    IRLOG_DEBUG( "CIRPlsContainer::GetHelpContext - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// HandleListBoxEventL().
+// From MEikListBoxObserver.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::HandleListBoxEventL - Entering" );
+	switch ( aEventType )
+		{
+		/*  Keypress event. */
+		case EEventEnterKeyPressed:
+		/*  Item two-taps event*/
+		case EEventItemDoubleClicked:
+			{
+			iPlsView.SetCurrentFocus(iPlsListBox->CurrentItemIndex());
+			iPlsView.HandleCommandL(EListenCmd);
+			break;
+			} 
+		default:
+		break;
+		}
+	IRLOG_DEBUG( "CIRPlsContainer::HandleListBoxEventL - Exiting" );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// GetCurrentItemIndex.
+// 
+// ---------------------------------------------------------------------------
+//	
+TInt CIRPlsContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::GetCurrentItemIndex " );
+	return iPlsListBox->CurrentItemIndex();
+    }
+
+    
+// ---------------------------------------------------------------------------
+// GetCount().
+// Gets the count of the ListArray.
+// ---------------------------------------------------------------------------
+//   
+TInt CIRPlsContainer::GetCount() const
+    {
+    IRLOG_DEBUG( "CIRPlsContainer::GetCount " );
+    return iListArray->Count();	
+    }  
+
+      
+// ---------------------------------------------------------------------------
+// ListenToStationL().
+// Listen to channel (URL)
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::ListenToStationL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::ListenToStationL - Entering" );
+		iPlsView.iNowPlayingWrapper->SetView(EPls);
+		CIRIsdsPreset* preset = CIRIsdsPreset::NewL();
+		CleanupStack::PushL( preset );
+		if(iListArray->Count()>0)
+			{
+			CreatePresetListL();
+			TInt ListBoxIndex = GetCurrentItemIndex();	
+			TInt UrlIndex = (ListBoxIndex * KTwo);
+			iPlsView.iUi->SetPlsIndex(ListBoxIndex);
+			iPlsView.iUi->SetListenFromSecondPls(ETrue);
+				
+			iPlsView.iUi->iNPPrevViewId = KIRPlsViewID;  
+			iPlsView.iNowPlayingWrapper->SetConnectToServerState(ETrue);
+
+			//copy channel name
+			TBuf<KChannelNameSize> channelName;
+			if(UrlIndex>=0 && UrlIndex <iPlsView.iUi->iURLs.Count())
+				{
+				channelName.Copy(*( iPlsView.iUi->iURLs[UrlIndex+1]));	
+				}
+			preset->SetName(channelName);
+			preset->SetChannelType(0);
+			channelName.Zero();
+			//copy channel url
+			channelName.Copy(*( iPlsView.iUi->iURLs[UrlIndex] ) );
+			_LIT(KServerName,"NA");
+
+			preset->SetUrlL(KServerName,channelName,0);
+			preset->SetUrlCount();
+			// Set the channel as last played and currently playing
+			*iPlsView.iNowPlayingWrapper->iNowPlayingPreset = *preset;
+			CleanupStack::PopAndDestroy( preset );
+
+			iPlsView.iUi->iNPPrevViewId = KIRPlsViewID;
+
+			//connecting to server	
+			iPlsView.iNowPlayingWrapper->SetCurrentConnectionSource(EIRAdhocExternal);
+			iPlsView.iNowPlayingWrapper->ConnectToChannelL(*iPlsView.iNowPlayingWrapper->iNowPlayingPreset);
+		}
+	                                        
+	IRLOG_DEBUG( "CIRPlsContainer::ListenToStationL - Exiting." );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// CreatePresetL().
+// Creates the Preset from the playlist data.
+// ---------------------------------------------------------------------------
+//	
+CIRIsdsPreset* CIRPlsContainer::CreatePresetL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::CreatePresetL - Entering." );
+	// Create a preset
+	CIRIsdsPreset *newpreset;
+	newpreset = CIRIsdsPreset::NewL(); 	
+	// Indicates that the preset user added
+	newpreset->SetChannelType(0);
+	// Indicates that the preset user added		
+	newpreset->SetId(0);
+	IRLOG_DEBUG( "CIRPlsContainer::CreatePresetL - Exiting." );
+	return newpreset;
+	}
+
+		
+// ---------------------------------------------------------------------------
+// CreatePresetListL().
+// Creates the PresetList from the playlist data.
+// ---------------------------------------------------------------------------
+//	
+void CIRPlsContainer::CreatePresetListL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::CreatePresetListL - Entering." );
+	_LIT(KServerName,"NA");
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );	
+	// The index for the .pls file info present in iUrls
+	if( !iPresetListPresent )
+		{
+		iPresetListPresent = ETrue;
+		TInt urlIndex = 0;
+		TInt titleIndex = 1;
+		// Loop through all the .pls entries
+		if(iListArray->Count()>0)
+			{
+			for( TInt index=0;index < ui->iURLs.Count()/2 ; index++ , titleIndex += 2 , urlIndex += 2 )
+				{
+				// Get the title of the first pls file entry indicated by titleIndex
+				HBufC16* title = HBufC16::NewLC(ui->iURLs[titleIndex]->Length()+1);
+				title->Des().Copy(ui->iURLs[titleIndex]->Des());
+				// Get the title of the first pls file entry indicated by titleIndex
+				HBufC16* url = HBufC16::NewLC(ui->iURLs[urlIndex]->Length()+1);
+				url->Des().Copy(ui->iURLs[urlIndex]->Des());
+				// Loop through all the presets in the 
+				// preset list to check if the title is already saved
+				CIRIsdsPreset* tempPreset;
+				TBool present = EFalse;
+				for ( TInt presetIndex = 0 ; presetIndex < iPresetList.Count() ; presetIndex++ )
+					{
+					present = EFalse;
+					// get the pointer to preset at locationindex
+					tempPreset = iPresetList[presetIndex];
+					if( tempPreset->GetName().Compare(*title) == 0 )
+						{
+						present = ETrue;
+						break;							
+						}
+					}
+				// The title is already there as a preset
+				// hence add the url to the same
+				if( present )
+					{
+					// Set url for the preset
+					tempPreset->SetUrlL(KServerName,*url,0);		
+					}
+				else
+					{
+					CIRIsdsPreset* preset = CreatePresetL();
+					CleanupStack::PushL(preset);
+					preset->SetName(*title);
+					// Set url for the preset
+					preset->SetUrlL(KServerName,*url,0);
+					// Append the preset object to the iPresetList
+					iPresetList.Append(preset);
+					iIsPresetSaved.Append(0);
+					CleanupStack::Pop(preset);
+					}
+				CleanupStack::PopAndDestroy(url);
+				CleanupStack::PopAndDestroy(title);
+				}
+			}
+
+	}
+	IRLOG_DEBUG( "CIRPlsContainer::CreatePresetListL - Exiting." );
+}
+
+
+ 
+    
+// ---------------------------------------------------------------------------
+// SaveL().
+// Saves all the entries in the list to the favorites .
+// ---------------------------------------------------------------------------
+//    
+void CIRPlsContainer::SaveL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::SaveL - Entering" );
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+		
+    if( !ui->iFavPresets->EmptyPresetCount() )
+        {
+		DisplayErroronDBL();
+		return ;
+        }
+     
+     if(iListArray->Count()>0)
+     {
+     	
+     	TBool saved = ETrue;
+		TInt selectedIndex = GetCurrentItemIndex();		
+		CreatePresetListL();
+		// Get the title of the first pls file entry indicated by titleIndex
+		HBufC16* title = HBufC16::NewLC(ui->iURLs[(selectedIndex*2)+1]->Length()+1);
+		title->Des().Copy(ui->iURLs[(selectedIndex*2)+1]->Des());
+		// Get the title of the first pls file entry indicated by titleIndex
+		HBufC16* url = HBufC16::NewLC(ui->iURLs[(selectedIndex*2)]->Length()+1);
+		url->Des().Copy(ui->iURLs[(selectedIndex*2)]->Des());
+		
+		RBuf urlName;
+		urlName.Create(*url);
+		
+		RBuf titleName;
+		titleName.Create(*title);
+		
+		for ( TInt index = 0 ; index < iPresetList.Count() ; index++ )
+			{
+			// get the pointer to preset at locationindex
+			CIRIsdsPreset* tempPreset = iPresetList[index];
+			if( tempPreset->GetName().Compare(*title) == 0 )
+				{
+				tempPreset->SetUrlCount();
+				TInt res = KErrNone;
+				if(index >=0 && index <iIsPresetSaved.Count())
+					{
+					// check is the preset is already added
+					if( iIsPresetSaved[index] == 0 )
+						{
+						ui->iFavPresets->AddPresetL(*tempPreset,res);
+						if( res == KErrNoMemory )
+							{
+							iIsPresetSaved[index] = 0;
+							DisplayErroronDBL();
+							saved = EFalse;
+							break;
+							}
+						else
+							{					
+							iIsPresetSaved[index] = 1;	
+							iPlsView.iUi->GetPlsSaved()[index] = 1 ;
+							}				
+						}
+					}
+			    }
+		    }
+		if( saved )
+			{
+		    TInt com=urlName.Compare(titleName);
+		    if(com==0)
+			    {
+			    ui->iDialogNote->ShowConfirmationNoteL( R_IRAPP_STATION_SAVED,ETrue );
+			    }
+		    else
+			    {
+				ui->DisplayInformationL( R_IRAPP_STATIONS_POPUP_SAVED,titleName );
+				iPlsView.iUi->iIRSettings->SetFlagIfAnyFavL();
+			    }
+			}
+		CleanupStack::PopAndDestroy(url);
+		CleanupStack::PopAndDestroy(title);	
+		titleName.Close();
+	    urlName.Close();
+        }
+	IRLOG_DEBUG( "CIRPlsContainer::SaveL - Exiting." ); 
+	}
+
+
+// ---------------------------------------------------------------------------
+// SaveAllL()
+// Saves all the entries in the list to the favorites .
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::SaveAllL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::SaveAllL - Entering" );
+	// Create the preset list if it doesnt exist                                 
+	CreatePresetListL();
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+	
+    TBool allSaved = ETrue;	
+	TInt res = KErrNone;
+    if( iPresetList.Count() > ui->iFavPresets->EmptyPresetCount() )
+        {
+        res = KErrNoMemory;
+        allSaved = EFalse;
+        }
+	
+    else
+        {
+        
+	    // Now add all the presets in the iPresetList to fav db
+	    for ( TInt index = 0 ; index < iPresetList.Count() ; index++ )	
+			{			
+			CIRIsdsPreset* preset = iPresetList[index];
+			preset->SetUrlCount();
+			if(index >=0 && index <iIsPresetSaved.Count())
+				{
+				// check is the preset is already added
+				if( iIsPresetSaved[index] == 0 )
+					{
+					ui->iFavPresets->AddPresetL(*preset,res);
+					//KErrNoMemory is returned when there are 20 Stations in the Favourites. 
+					if( res == KErrNoMemory )
+						{
+						iIsPresetSaved[index] = 0;					
+						allSaved = EFalse;
+						break;
+						}
+					else
+						{					
+						iPlsView.iUi->GetPlsSaved()[index] = 1;						
+						iIsPresetSaved[index] = 1;	
+						}
+					}
+				}
+			}
+        }
+    
+    if( res == KErrNoMemory )
+        {            
+        DisplayErroronDBL();
+        }
+			
+	// Check if all the presets have been saved	
+	if( allSaved )
+		{
+		//display message if save successful
+		if(iPresetList.Count()!=0)
+			{
+		    ui->DisplayInformationL(R_IRAPP_STATIONS_SAVED,iPresetList.Count());	
+			iSavedAllUrl = ETrue;
+			iPlsView.iUi->iIRSettings->SetFlagIfAnyFavL();
+			}
+		}
+	IRLOG_DEBUG( "CIRPlsContainer::SaveAllL - Exiting." );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// DisplayErroronDBL.
+// Displays error if favorites db is full.
+// ---------------------------------------------------------------------------
+//  
+void CIRPlsContainer::DisplayErroronDBL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::DisplayErroronDBL - Entering." );
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+
+	ui->iDialogNote->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR,ETrue);
+	IRLOG_DEBUG( "CIRPlsContainer::DisplayErroronDBL - Exiting." );	
+	}
+
+	
+// ---------------------------------------------------------------------------
+// DisplayErrorOnNoItemsL()
+// Displays error if no streaming links
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::DisplayErrorOnNoItemsL()
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::DisplayErrorOnNoItemsL - Entering." );
+	CIRUi* ui = reinterpret_cast<CIRUi*>( iCoeEnv->AppUi() );
+	ui->iDialogNote->ShowErrorNoteL(R_IRAPP_STREAMING_LINKS,ETrue);
+	IRLOG_DEBUG( "CIRPlsContainer::DisplayErrorOnNoItemsL - Exiting." );
+	}
+
+	
+// ---------------------------------------------------------------------------
+// GetListBoxTopIndex().
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CIRPlsContainer::GetListBoxTopIndex() const
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::GetListBoxTopIndex" );
+	return iPlsListBox->View()->TopItemIndex ();
+	}
+// ---------------------------------------------------------------------------
+// SecondPls().
+// To be called when Second Pls file is opened.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::SecondPls()
+	{
+	iPresetList.ResetAndDestroy();
+	iIsPresetSaved.Close();
+	iPresetList.Close();
+	iPresetListPresent = EFalse;
+	TRAPD(err,UpdateAllL());
+	if(err)
+		{
+		return ;
+		}
+		
+	DrawNow();
+    }
+//----------------------------------------------------------------------------
+// CIRPlsContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRPlsContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::CountComponentControls - Entering" );
+	TInt count( KPLSLISTCOUNT );
+	if (iPlsListBox)
+		{
+		count++;
+		}
+	IRLOG_DEBUG( "CIRPlsContainer::CountComponentControls - Exiting" );
+	return count;     // returns the no. of controls inside this container
+	}
+//----------------------------------------------------------------------------
+// CIRPlsContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRPlsContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRPlsContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRPlsContainer::ComponentControl - Exiting" );
+	switch ( aIndex )
+		{
+		case 0:
+		       return iPlsListBox;
+		       
+		default:
+		      return NULL;
+		}
+	}
+// -----------------------------------------------------------------------------
+// CIRPlsContainer::SizeChanged()
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CIRPlsContainer::SizeChanged()
+    {  
+    if(iPlsListBox)
+	    {
+	    iPlsListBox->SetRect(Rect());
+	    }
+    }
+// ---------------------------------------------------------------------------
+// void CIRPlsContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsContainer::HandleResourceChange(TInt aType)
+	{
+	IRLOG_DEBUG( "CIRMainContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+	SetRect( iPlsView.ClientRect() );
+	DrawDeferred();
+    IRLOG_DEBUG( "CIRMainContainer::HandleResourceChange - Exiting" );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irplsplaylist.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,423 @@
+/*
+* Copyright (c) 2007-2007 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:  Describes a single item in PLS playlist.
+*
+*/
+
+
+#include <f32file.h>
+
+#include "irplsplaylist.h"
+#include "irplsplaylistitem.h"
+#include "irdebug.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::CIRPlsPlayList
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayList::CIRPlsPlayList()
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::CIRPlsPlayList" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayList::ConstructL(RFile& aFileToParse)
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::ConstructL - Entering" );
+    ParseFileL(aFileToParse);
+    IRLOG_DEBUG( "CIRPlsPlayList::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::NewL
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayList* CIRPlsPlayList::NewL(RFile& aFileToParse)
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::NewL - Entering" );
+    CIRPlsPlayList* self = CIRPlsPlayList::NewLC(aFileToParse);
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRPlsPlayList::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayList* CIRPlsPlayList::NewLC(RFile& aFileToParse)
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::NewLC - Entering" );
+    CIRPlsPlayList* self = new( ELeave ) CIRPlsPlayList;
+    CleanupStack::PushL( self );
+    self->ConstructL(aFileToParse);
+    IRLOG_DEBUG( "CIRPlsPlayList::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::~CIRPlsPlayList
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayList::~CIRPlsPlayList()
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::~CIRPlsPlayList - Entering" );
+    iItems.ResetAndDestroy();
+    iItems.Close();	
+    iIndexes.Close();
+    IRLOG_DEBUG( "CIRPlsPlayList::~CIRPlsPlayList - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::AddItemAt
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayList::AddItemAtL( TInt aIndex, CIRPlsPlayListItem* aItem )
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::AddItemAtL - Entering" );
+    __ASSERT_DEBUG( iItems.Count() == iIndexes.Count(), User::Panic(_L("InternetRadio"), KErrCorrupt));
+    
+    TInt foundIndex = iIndexes.Find(aIndex);
+    if (foundIndex >= 0)
+        {
+        iItems.Remove(foundIndex);
+        //delete item;
+        iIndexes.Remove(foundIndex);
+        }
+    else if (foundIndex != KErrNotFound)
+        {
+        User::LeaveIfError(foundIndex);
+        }
+    else
+        {
+        }
+    iIndexes.AppendL(aIndex);
+    TRAPD( err, iItems.AppendL(aItem) )
+    if (err)
+        {
+        iIndexes.Remove(iIndexes.Count()-1);
+        User::Leave(err);
+        }
+    IRLOG_DEBUG( "CIRPlsPlayList::AddItemAtL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::RemoveItemAt
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayList::RemoveItemAt( TInt aIndex )
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::RemoveItemAt - Entering" );
+    __ASSERT_DEBUG( iItems.Count() == iIndexes.Count(), User::Panic(_L("InternetRadio"), KErrCorrupt));
+    
+    TInt foundIndex = iIndexes.Find(aIndex);
+    if (foundIndex >= 0)
+        {
+        iItems.Remove(foundIndex);
+        //delete item;
+        iIndexes.Remove(foundIndex);
+        }
+    IRLOG_DEBUG( "CIRPlsPlayList::RemoveItemAt - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::ItemAt
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayListItem* CIRPlsPlayList::ItemAt( TInt aIndex ) const
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::ItemAt - Entering" );
+    __ASSERT_DEBUG( iItems.Count() == iIndexes.Count(), User::Panic(_L("InternetRadio"), KErrCorrupt));
+    
+    CIRPlsPlayListItem* retItem = NULL;
+    TInt foundIndex = iIndexes.Find(aIndex);
+    if (foundIndex >= 0)
+        {
+        retItem = iItems[foundIndex];
+        }
+    IRLOG_DEBUG( "CIRPlsPlayList::ItemAt - Exiting" );
+    return retItem;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::ItemAt
+// ---------------------------------------------------------------------------
+//
+TInt CIRPlsPlayList::Count() const
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::Count - Entering" );
+    __ASSERT_DEBUG( iItems.Count() == iIndexes.Count(), User::Panic(_L("InternetRadio"), KErrCorrupt));
+    IRLOG_DEBUG( "CIRPlsPlayList::Count - Exiting" );
+    
+    return iItems.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::ParseFileL
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayList::ParseFileL(RFile& aFileToParse)
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::ParseFileL - Entering" );
+    TBool firstLine(ETrue);
+	TBool done(EFalse);
+	TInt numberOfEntries(0);
+	HBufC8* lineBuf = NULL;
+	while ( !done )
+	    {
+	    TInt ret = KErrNone;
+	    ReadLineL( aFileToParse, lineBuf, &ret );
+	    if (ret == KErrEof)
+	        {
+	        // Last line is in the buffer.
+	        done = ETrue;
+	        }
+	    CleanupStack::PushL( lineBuf );
+	    TPtr8 line( lineBuf->Des() );
+	    
+	    if( firstLine )
+	        {
+	        _LIT8(KIRHeader, "[playlist]");
+	        if( line.Compare( KIRHeader ) )
+    	        {
+    	        User::Leave(KErrCorrupt);
+    	        }
+	        firstLine = EFalse;
+	        }
+	    else
+	        {
+    	    _LIT8(KIRFileLine, "File");
+    	    _LIT8(KIRTitleLine, "Title");
+    	    _LIT8(KIRLengthLine, "Length");
+    	    _LIT8(KIRNumberOfEntries, "NumberOfEntries");
+    	    TPtrC8 contentType;
+    	    if( line.Find( KIRFileLine ) == 0 )
+    	        {
+    	        contentType.Set( KIRFileLine );
+    	        }
+    	    else if( line.Find( KIRTitleLine ) == 0 )
+    	        {
+    	        contentType.Set( KIRTitleLine );
+    	        }
+    	    else if( line.Find( KIRLengthLine ) == 0 )
+    	        {
+    	        contentType.Set( KIRLengthLine );
+    	        }
+    	    else if( line.FindC( KIRNumberOfEntries ) == 0 )
+    	        {
+    	        contentType.Set( KIRNumberOfEntries );
+    	        }
+    	    else
+    	        {
+    	        contentType.Set( KNullDesC8 );
+    	        }
+    	    // If found parsable content.
+    	    if( contentType.Length() )
+    	        {
+    	        // Every line must have an "equals" sign.
+        	    _LIT8(KIREqualsSign, "=");
+        	    TInt equalsSignPos = line.Find( KIREqualsSign );
+                if (equalsSignPos == KErrNotFound)
+                    {
+                    // Sign was not found.
+                    User::Leave(KErrCorrupt);
+                    }
+                // Find the content index of certain content types.
+                TInt contentIndex(0);
+                if ( (!contentType.Compare( KIRFileLine )) || 
+                     (!contentType.Compare( KIRTitleLine )) ||
+                     (!contentType.Compare( KIRLengthLine )) )
+                    {
+            		TLex8 indexLex( line.Mid( contentType.Length(),
+            				 equalsSignPos-contentType.Length()) );
+            		indexLex.Val( contentIndex );
+            		if ( !contentIndex )
+                        {
+                        // Index couldn't be resolved.
+                        User::Leave(KErrCorrupt);
+                        }
+                    // To convert indexes "1.." of file to "0.." of array.
+                    --contentIndex;
+                    }
+        		TPtrC8 content( line.Mid( equalsSignPos+KIREqualsSign().Length() ) );
+        		if( !contentType.Compare( KIRFileLine ) )
+        		    {
+        		    HBufC* convertedContent = HBufC::NewLC(content.Length());
+            		convertedContent->Des().Copy(content);
+        		    CIRPlsPlayListItem* item = ItemAt(contentIndex);
+        		    if (item)
+        		        {
+        		        // Update existing item.
+            		    item->SetFileL(*convertedContent);
+        		        }
+        		    else
+        		        {
+        		        // Create new item.
+        		        item = CIRPlsPlayListItem::NewLC();	    
+            		    item->SetFileL( *convertedContent );
+            		    AddItemAtL( contentIndex, item );
+            		    CleanupStack::Pop( item );
+        		        }
+        		    CleanupStack::PopAndDestroy( convertedContent );
+        		    }
+        		else if( !contentType.Compare( KIRTitleLine ) )
+        		    {
+        		    HBufC* convertedContent = HBufC::NewLC(content.Length());
+            		convertedContent->Des().Copy(content);
+        		    CIRPlsPlayListItem* item = ItemAt(contentIndex);
+        		    if (item)
+        		        {
+        		        // Update existing item.
+            		    item->SetTitleL(*convertedContent);
+        		        }
+        		    else
+        		        {
+        		        // Create new item.
+        		        item = CIRPlsPlayListItem::NewLC();
+            		    item->SetTitleL( *convertedContent );
+            		    AddItemAtL( contentIndex, item );
+            		    CleanupStack::Pop( item );
+        		        }
+        		    CleanupStack::PopAndDestroy( convertedContent );
+        		    }
+        		else if( !contentType.Compare( KIRLengthLine ) )
+        		    {
+        		    TInt lengthVal(0);
+        		    TLex8 lengthLex( content );
+        		    lengthLex.Val( lengthVal ); 
+        		    CIRPlsPlayListItem* item = ItemAt(contentIndex);
+        		    if (item)
+        		        {
+        		        // Update existing item.
+            		    item->SetLength(lengthVal);
+        		        }
+        		    else
+        		        {
+        		        // Create new item.
+        		        item = CIRPlsPlayListItem::NewLC();
+            		    item->SetLength(lengthVal);
+            		    AddItemAtL( contentIndex, item );
+            		    CleanupStack::Pop( item );
+        		        }
+        		    }
+        		else if( !contentType.CompareC( KIRNumberOfEntries ) )
+        		    {
+        		    TLex8 numberLex( content );
+        		    numberLex.Val( numberOfEntries );
+        		    }
+        		else
+        		    {
+        		    }
+    	        }
+	        }
+	        
+	    CleanupStack::PopAndDestroy(lineBuf);
+	    }
+
+    if (Count() != numberOfEntries)
+        {
+        User::Leave(KErrCorrupt);
+        }
+    IRLOG_DEBUG( "CIRPlsPlayList::ParseFileL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayList::ReadLineL
+// ---------------------------------------------------------------------------
+//	
+void CIRPlsPlayList::ReadLineL( RFile& aFile, HBufC8*& aLineBuf, TInt *aError ) const
+    {
+    IRLOG_DEBUG( "CIRPlsPlayList::ReadLineL - Entering" );
+    *aError = KErrNone;
+    TInt filePos(0);
+    User::LeaveIfError( aFile.Seek( ESeekCurrent, filePos ) );
+    TInt endLine( KErrNotFound );
+    TInt readAmount( 0 );
+    const TInt KIRBytesToRead = 64;
+    // Find next line end mark index.
+    while ( endLine == KErrNotFound )
+        {
+        // Increase read amount if end of line hasn't been yet found.
+        readAmount = readAmount + KIRBytesToRead;
+       	HBufC8* nextBuf = HBufC8::NewLC( readAmount );
+        TPtr8 next( nextBuf->Des() );
+        User::LeaveIfError( aFile.Seek( ESeekStart, filePos ) );
+        User::LeaveIfError( aFile.Read( next, readAmount ) );
+        // Locate nearest LF and CR.
+        TInt lfEnd = next.Locate(EKeyLineFeed);
+        TInt crEnd = next.Locate(EKeyEnter);
+        if ((lfEnd != KErrNotFound) || (crEnd != KErrNotFound))
+            {
+            // Either CR or LF was found.
+	        if( ((lfEnd != KErrNotFound) && (crEnd != KErrNotFound) && (lfEnd < crEnd)) || 
+                (crEnd == KErrNotFound) )
+                {
+                // LF is nearer.
+                if (lfEnd)
+                    {
+                    // Mark end line position as the position of LF.
+                    endLine = lfEnd;
+                    }
+                else
+                    {
+                    // LF is at the begining of the line.
+                    // Skip it and read file again but not increase read amount.
+                    ++filePos;
+                    readAmount = readAmount - KIRBytesToRead;
+                    }
+                }
+            else
+                {
+                // CR is nearer.
+                if (crEnd)
+                    {
+                    // Mark end line position as the position of CR.
+                    endLine = crEnd;
+                    }
+                else
+                    {
+                    // CR is at the begining of the line.
+                    // Skip it and read file again but not increase read amount.
+                    ++filePos;
+                    readAmount = readAmount - KIRBytesToRead;
+                    }
+                }
+            }
+        else
+            {
+            // No CR or LF was found.
+            // Check are we in the end of the file.
+            if (next.Length() < readAmount)
+                {
+                // Reached the end of file.
+                endLine = next.Length();
+                *aError = KErrEof;
+                }
+            }
+        CleanupStack::PopAndDestroy(nextBuf);
+        }
+    // Read the line to buf.
+    aLineBuf = HBufC8::NewLC( endLine );
+    TPtr8 line( aLineBuf->Des() );
+    User::LeaveIfError( aFile.Seek( ESeekStart, filePos ) );
+    User::LeaveIfError( aFile.Read( line, endLine ) );
+    CleanupStack::Pop( aLineBuf );
+    IRLOG_DEBUG( "CIRPlsPlayList::ReadLineL - Exiting" );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irplsplaylistitem.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2007-2007 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:  Describes a single item in PLS playlist.
+*
+*/
+
+
+#include "irplsplaylistitem.h"
+#include "irdebug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::CIRPlsPlayListItem
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayListItem::CIRPlsPlayListItem()
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::CIRPlsPlayListItem" );
+    }
+    
+
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::NewL
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayListItem* CIRPlsPlayListItem::NewL()
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::NewL - Entering" );
+    CIRPlsPlayListItem* self = CIRPlsPlayListItem::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRPlsPlayListItem::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayListItem* CIRPlsPlayListItem::NewLC()
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::NewLC - Entering" );
+    CIRPlsPlayListItem* self = new( ELeave ) CIRPlsPlayListItem;
+    CleanupStack::PushL( self );
+    IRLOG_DEBUG( "CIRPlsPlayListItem::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::~CIRPlsPlayListItem
+// ---------------------------------------------------------------------------
+//
+CIRPlsPlayListItem::~CIRPlsPlayListItem()
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::~CIRPlsPlayListItem - Entering" );
+    iFile.Close();
+    iTitle.Close();
+    IRLOG_DEBUG( "CIRPlsPlayListItem::~CIRPlsPlayListItem - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::SetFileL
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayListItem::SetFileL( const TDesC& aFile )
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::SetFileL - Entering" );
+    iFile.Close();
+    iFile.CreateL( aFile );
+    IRLOG_DEBUG( "CIRPlsPlayListItem::SetFileL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::SetTitleL
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayListItem::SetTitleL( const TDesC& aTitle )
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::SetTitleL - Entering" );
+    iTitle.Close();
+    iTitle.CreateL( aTitle );
+    IRLOG_DEBUG( "CIRPlsPlayListItem::SetTitleL - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::SetLength
+// ---------------------------------------------------------------------------
+//
+void CIRPlsPlayListItem::SetLength( TInt aLength )
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::SetLength - Entering" );
+    iLength = aLength;
+    IRLOG_DEBUG( "CIRPlsPlayListItem::SetLength - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::File
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPlsPlayListItem::File() const
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::File" );
+    return iFile;
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::Title
+// ---------------------------------------------------------------------------
+//
+const TDesC& CIRPlsPlayListItem::Title() const
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::Title" );
+    return iTitle;
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRPlsPlayListItem::Length
+// ---------------------------------------------------------------------------
+//
+TInt CIRPlsPlayListItem::Length() const
+    {
+    IRLOG_DEBUG( "CIRPlsPlayListItem::Length" );
+    return iLength;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irplsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,507 @@
+/*
+* Copyright (c) 2006-2007 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:  view class for pls list
+*
+*/
+
+
+#include <hlplch.h>
+
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irplsview.h"
+#include "irplscontainer.h"
+#include "irui.h"
+#include "irbaseview.h"
+#include "irsettings.h"
+#include "irnowplayingwrapper.h"
+#include "irisdspreset.h"
+#include <eikclbd.h>
+#include <akntoolbar.h>
+
+#include "irnetworkcontroller.h" 	
+#include "iractivenetworkobserver.h"
+
+//-----------------------------------------------------------------------------
+//  CIRPlsView::NewL
+//  Creates a new instance of pls view
+//-----------------------------------------------------------------------------
+//
+CIRPlsView* CIRPlsView::NewL(const TRect& aRect)
+    {
+	IRLOG_DEBUG( "CIRPlsView::NewL - Entering" );
+    CIRPlsView* self = CIRPlsView::NewLC(aRect);
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRPlsView::NewL - Exiting." );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRPlsView::NewLC
+//  Creates a new instance of pls view and leaves it on the cleanup stack.
+//-----------------------------------------------------------------------------
+//
+CIRPlsView* CIRPlsView::NewLC(const TRect& aRect)
+    {
+    IRLOG_DEBUG( "CIRPlsView::NewLC - Entering" );
+    CIRPlsView* self = new (ELeave) CIRPlsView;
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+	IRLOG_DEBUG( "CIRPlsView::NewLC - Exiting." );
+    return self;
+    }
+
+//----------------------------------------------------------------------------- 
+//  CIRPlsView::CIRPlsView()
+//  Default constructor
+//-----------------------------------------------------------------------------
+//
+CIRPlsView::CIRPlsView():iContainer(NULL) 
+    {
+	IRLOG_DEBUG( "CIRPlsView::CIRPlsView" );
+	SetCurrentTopItem(0);
+    }
+
+//----------------------------------------------------------------------------- 
+//  CIRPlsView::~CIRPlsView()
+//  Destructor
+//-----------------------------------------------------------------------------
+//
+CIRPlsView::~CIRPlsView()
+    {
+	IRLOG_DEBUG( "CIRPlsView::~CIRPlsView - Entering" );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+    	}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	IRLOG_DEBUG( "CIRPlsView::~CIRPlsView - Exiting." );
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRPlsView::ConstructL
+//  Second phase constructor
+//-----------------------------------------------------------------------------
+//
+void CIRPlsView::ConstructL(const TRect& /*aRect*/)
+	{
+	IRLOG_DEBUG( "CIRPlsView::ConstructL - Entering" );
+    CIRBaseView::ConstructL(R_IR_PLSVIEW);
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+    TRgb color;
+    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+    				                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_NOW_PLSLIST_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_NOW_PLSLIST_BLACK_TOOLBAR);	
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+	SetCurrentFocus(0);
+	iRequestPending = EFalse;
+	IRLOG_DEBUG( "CIRPlsView::ConstructL - Exiting." );
+	}
+
+	
+//-----------------------------------------------------------------------------
+//  TUid CIRPlsView::Id()
+//  This returns the view ID
+//-----------------------------------------------------------------------------
+//
+TUid CIRPlsView::Id() const
+    {
+    IRLOG_DEBUG( "CIRPlsView::Id" );
+    return KIRPlsViewID;
+    }
+    
+// ----------------------------------------------------------------------------
+//  This is called when a view needs to be activated. 
+//  This creates container with its controls.
+//  It also receives messages sent to the view.
+//  aPrevViewId is passed s.t. we can return to the previous view.
+//  aCustomMessageId is an ID for the message.
+//  aCustomMessage is the actual message.
+// ----------------------------------------------------------------------------
+//
+void CIRPlsView::DoActivateL(const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/,
+   const TDesC8& aCustomMessage)
+	{
+	IRLOG_DEBUG( "CIRPlsView::DoActivateL - Entering" );
+	iUi->iPresentViewID = KIRPlsViewID;
+    if ( !iContainer )
+		{
+		iContainer =CIRPlsContainer::NewL(ClientRect(),*this);
+		iContainer->SetMopParent( this );
+		AppUi()->AddToViewStackL( *this, iContainer );
+		}
+    else
+       {
+	    // we must notify a resource change in order to update the skin context
+	    // This is a flaw of CEikFormattedCellListBox
+		iContainer->SetRect(ClientRect());
+    	iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+       }
+	ConstructToolbarL();
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+    SetTitleL( R_IRAPP_FEATURE_FILE_TITLE );
+    CIRBaseView::DoActivateL( aPrevViewId, TUid::Uid(1), aCustomMessage );
+    HandleStatusPaneSizeChange();
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+    IRLOG_DEBUG( "CIRPlsView::DoActivateL - Exiting" );
+	}
+	
+// ----------------------------------------------------------------------------
+// CIRPlsView::DoDeactivate()
+// This is called when a view needs to be deactivated. 
+// This destroys container with its controls.
+// ----------------------------------------------------------------------------
+//
+void CIRPlsView::DoDeactivate()
+	{
+	IRLOG_DEBUG( "CIRPlsView::DoDeactivate - Entering" );
+	if ( iContainer )
+		{
+	    SetCurrentFocus(iContainer->GetCurrentItemIndex());
+		SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+ 		iContainer = NULL;
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+	IRLOG_DEBUG( "CIRPlsView::DoDeactivate - Exiting." );
+	}
+	
+// ----------------------------------------------------------------------------
+//  CIRPlsView::HandleCommandL(TInt aCommand) 
+//  Command handling function
+// ----------------------------------------------------------------------------
+//	
+void CIRPlsView::HandleCommandL(TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRPlsView::HandleCommandL - Entering" );
+	iCurrentFocus = iContainer->GetCurrentItemIndex();	
+    
+    // handle the corresponding command selected by the user through options.
+	switch(aCommand)
+		{
+	
+		case EListenCmd:
+			{
+			iUi->SetListenFromPls(ETrue);
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				break;
+				}
+			else
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				iContainer->ListenToStationL(); 
+				}
+			   
+     		}
+		    break;
+
+		case ESaveCmd:
+			{  
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+     			iContainer->SaveL();
+				}
+			}	
+			break;
+			
+		case ESaveAllCmd:
+			{
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iContainer->SaveAllL();
+				}
+		 	}
+			break;
+			
+		case EGotoNowPlayingViewCmd:
+		    {
+		    SetCurrentFocus(iContainer->GetCurrentItemIndex());
+			iUi->SetHistory(EFalse);
+			iUi->SavePrevIDL(KIRMainChoiceViewID,aCommand); 
+		    }
+		    break;
+		    
+		case ESettingsCmd:
+		    {
+		    SetCurrentFocus(iContainer->GetCurrentItemIndex());
+		    AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+		    }
+		    break;
+		    
+	    case EHelpCmd:
+			{
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+	            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+	            			 AppUi()->AppHelpContextL() );
+				}
+			}
+            break;
+            
+		case EGotoMainView:
+			{
+			_LIT8(KNull,"");
+			AppUi()->ActivateLocalViewL( KIRMainChoiceViewID ,KMainViewLaunch ,KNull);
+			}
+	    	break;   
+		default:
+			{
+			CIRBaseView::HandleCommandL( EAknSoftkeyExit );	
+			}
+
+		}
+	IRLOG_DEBUG( "CIRPlsView::HandleCommandL - Exiting." );
+	}
+	
+// ----------------------------------------------------------------------------
+// CIRPlsView::DynInitMenuPaneL()
+// Dynamically handles menu pane.
+// ----------------------------------------------------------------------------
+//
+void CIRPlsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRPlsView::DynInitMenuPaneL - Entering" );
+	// Pls view options menu  
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );  
+	if(aResourceId == R_IR_MENU_PLS  )
+		{
+        	if(!aMenuPane) User::Leave(KErrNotFound);
+        	{   
+				// Now Playing option
+				if(iNowPlayingWrapper->iPlaying)
+					{
+					 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+					}
+				else
+					{
+					 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+					}
+				if(iUi->IsFirstTime())
+					{
+					aMenuPane->SetItemDimmed(EGotoMainView,ETrue);	
+					}
+				else
+					{
+					aMenuPane->SetItemDimmed(EGotoMainView,EFalse);	
+					}
+        	}
+		}
+	IRLOG_DEBUG( "CIRPlsView::DynInitMenuPaneL - Exiting." );
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRPlsView::ConstructToolbarL()
+// Coonstructs the toolbar for the view.
+// ---------------------------------------------------------------------------
+//    
+void CIRPlsView::ConstructToolbarL()
+	{
+	IRLOG_DEBUG( "CIRPlsView::ConstructToolbarL - Entering." );
+
+	TInt count = (iUi->iURLs.Count());
+    if(Toolbar())
+	    {
+		if((count==0))
+			{
+			Toolbar()->SetItemDimmed(ESaveCmd,ETrue,ETrue);
+			Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+			}
+		else
+			{
+			Toolbar()->SetItemDimmed(ESaveCmd,EFalse,ETrue);
+			Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+			}
+		if((count<=2))
+			{
+			Toolbar()->SetItemDimmed(ESaveAllCmd,ETrue,ETrue);
+			}
+		else
+			{
+			Toolbar()->SetItemDimmed(ESaveAllCmd,EFalse,ETrue);
+			}
+		Toolbar()->SetToolbarVisibility( ETrue );
+
+	    // Update rect, as changes in toolbar visibility also affect layout.
+	    if(iContainer)
+		    {
+		    iContainer->SetRect( ClientRect() );
+		    iContainer->DrawDeferred();
+		    }
+	    }
+	IRLOG_DEBUG( "CIRPlsView::ConstructToolbarL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRPlsView::ConstructToolbarL()
+// Dynamically initialises a tool bar..
+// ---------------------------------------------------------------------------
+//    
+void CIRPlsView::DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ )
+	{
+	IRLOG_DEBUG( "CIRPlsView::DynInitToolbarL - Entering." );
+	IRLOG_DEBUG( "CIRPlsView::DynInitToolbarL - Exiting." );
+    }
+		
+// ---------------------------------------------------------------------------
+// CIRMainView::OfferToolbarEventL()
+// catch the selection key event and perform the operation according to it...
+// ---------------------------------------------------------------------------
+void CIRPlsView::OfferToolbarEventL
+        ( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRPlsView::OfferToolbarEventL - Entering." );
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRPlsView::OfferToolbarEventL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRPlsView::HandleStatusPaneSizeChange()
+// 
+// ---------------------------------------------------------------------------
+//	
+void CIRPlsView::HandleStatusPaneSizeChange()
+    {
+    IRLOG_DEBUG( "CIRPlsView::HandleStatusPaneSizeChange - Entering." );
+    // the client rect is also set here after screen orientation change
+    if (iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+    IRLOG_DEBUG( "CIRPlsView::HandleStatusPaneSizeChange - Exiting." );
+    }
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsView::HandleForegroundEventL( TBool aForeground )
+	{
+	IRLOG_DEBUG( "CIRMainView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+	if(aForeground)
+	{
+	if(iContainer)
+		{
+		MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+	    TRgb color;
+	    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+	    				                                      EAknsCIQsnTextColorsCG6 );
+		if(color.Gray2()!=0)
+			{
+			CreateAndSetToolbarL(R_NOW_PLSLIST_WHITE_TOOLBAR);
+			}
+		else
+			{
+			CreateAndSetToolbarL(R_NOW_PLSLIST_BLACK_TOOLBAR);	
+			}
+        if( AknLayoutUtils::PenEnabled() && Toolbar() )
+			{
+			Toolbar()->SetToolbarObserver( this );
+			}
+		ConstructToolbarL();
+	    //iUi->iNetworkController->RegisterActiveNetworkObserver(this)
+	    //iListen = ETrue
+	    iContainer->DrawDeferred();
+        Toolbar()->DrawDeferred();
+		iContainer->SecondPls();
+		}
+	}
+	IRLOG_DEBUG( "CIRMainView::HandleForegroundEventL - Exiting." );
+	}		
+
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRPlsView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRPlsView::NotifyActiveNetworkObserversL - Entering." );
+	
+	switch(aEvent)
+	{
+	case ENetworkConnectionDisconnected:
+		{
+		iNowPlayingWrapper->HandleNetworkDisconnected();
+		}
+		break;
+	case ENetworkConnectionEstablished:
+		{
+		if(iContainer)
+			{
+			if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				iContainer->ListenToStationL(); 
+				}
+			}
+		ResetPendingRequests(EFalse);
+		}
+	}
+
+	IRLOG_DEBUG( "CIRPlsView::NotifyActiveNetworkObserversL - Exiting." );
+	}
+	
+	
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRPlsView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	}
+
+	
+
+// CIRPlsView :: SecondConstruct()
+// To again initialise when Second pls file is opened.
+// ---------------------------------------------------------------------------
+//
+void CIRPlsView::SecondConstruct()
+	{
+	SetCurrentFocus(0);
+	SetCurrentTopItem(0);
+	iRequestPending = EFalse;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irpropertyobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include "irdebug.h"
+#include "irpropertyobserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::CPropertyObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CIRPropertyObserver::CIRPropertyObserver(
+	MIRPropertyChangeObserver& aObserver, const TUid& aCategory, 
+			const TUint aKey, const RProperty::TType aPropertyType)
+    : CActive( CActive::EPriorityLow ),
+    iObserver( aObserver ),
+    iCategory( aCategory ),
+    iKey( aKey ),
+    iPropertyType( aPropertyType )
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::CIRPropertyObserver" );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver::ConstructL()
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::ConstructL - Entering" );
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+	IRLOG_DEBUG( "CIRPropertyObserver::ConstructL - Exiting." );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIRPropertyObserver* CIRPropertyObserver::NewL(
+	MIRPropertyChangeObserver& aObserver, const TUid& aCategory,
+														 const TUint aKey, const RProperty::TType aPropertyType)
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::NewL - Entering" );
+    CIRPropertyObserver* self = new( ELeave )CIRPropertyObserver(
+    	 aObserver, aCategory, aKey, aPropertyType );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+	IRLOG_DEBUG( "CIRPropertyObserver::NewL - Exiting." );
+    return self;
+	}
+
+// Destructor
+CIRPropertyObserver::~CIRPropertyObserver()
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::~CIRPropertyObserver - Entering" );
+	Cancel();
+    iProperty.Close();
+	IRLOG_DEBUG( "CIRPropertyObserver::~CIRPropertyObserver - Exiting." );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::RunL
+// 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver::RunL()
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::RunL - Entering" );
+    
+    TInt err(KErrNone);
+    
+    switch (iPropertyType)
+        {
+        case RProperty::EInt:
+	        {
+	        err = iProperty.Get( iValueInt );
+	        iObserver.HandlePropertyChangeL(iCategory, iKey, iValueInt);
+	        break;
+	        }
+	    case RProperty::EText:
+	        {
+	        err = iProperty.Get( iValueText );
+	        iObserver.HandlePropertyChangeL(iCategory, iKey, iValueText);
+	        break;
+	        }
+	    default:
+	        {
+	        break;
+	        }
+        }
+    
+    if (err)
+    	{
+        iObserver.HandlePropertyChangeErrorL(iCategory, iKey, err);
+     	}
+	IRLOG_DEBUG( "CIRPropertyObserver::RunL - Exiting." );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::DoCancel
+// Cancels an outstanding active request
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver::DoCancel()
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::DoCancel - Entering" );
+    iProperty.Cancel();
+	IRLOG_DEBUG( "CIRPropertyObserver::DoCancel - Exiting." );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::GetValue
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CIRPropertyObserver::GetValue(TInt& aValue) const
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::GetValue (TInt)  - Entering" );
+	aValue = iValueInt;
+	IRLOG_DEBUG( "CIRPropertyObserver::GetValue (TInt)  - Exiting" );
+	}
+	
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::GetValue
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CIRPropertyObserver::GetValue(TIRTextProperty& aValue) const
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::GetValue (TIRTextProperty)  - Entering" );
+	aValue = iValueText;
+	IRLOG_DEBUG( "CIRPropertyObserver::GetValue (TIRTextProperty)  - Exiting" );
+	}
+	
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver::Subscribe
+// Subscription of listened P&S keys
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver::Subscribe()
+	{
+	IRLOG_DEBUG( "CIRPropertyObserver::Subscribe - Entering" );
+	if( !IsActive() )
+		{
+		iProperty.Subscribe( iStatus );
+	    SetActive();
+		}
+	IRLOG_DEBUG( "CIRPropertyObserver::Subscribe - Exiting." );    	
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irpropertyobserver2.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2005-2007 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:  Source file for CIRPropertyObserver2.
+*
+*/
+
+
+#include "irpropertyobserver2.h"
+#include "irdebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CIRPropertyObserver2::CIRPropertyObserver2(MIRPropertyChangeObserver2& aObserver, 
+					const TUid& aCategory, const TUint aKey, const TIRPropertyType aPropertyType)
+    : CActive( CActive::EPriorityStandard ),
+    iObserver( aObserver ),
+    iCategory( aCategory ),
+    iKey( aKey ),
+    iPropertyType( aPropertyType )
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::CIRPropertyObserver2" );
+	}
+
+// -----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver2::ConstructL()
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::ConstructL - Entering" );
+    switch (iPropertyType)
+        {
+        case EIRPropertyInt:
+	        {
+	        break;
+	        }
+	    case EIRPropertyByteArray:
+	        {
+	        iValueByteArray = HBufC8::NewL( RProperty::KMaxPropertySize );
+	        break;
+	        }
+	    case EIRPropertyText:
+	        {
+	        // Max size in bytes, length is size / 2
+	        iValueText = HBufC::NewL( RProperty::KMaxPropertySize / 2 );
+	        break;
+	        }
+	    default:
+	        {
+	        break;
+	        }
+        }
+
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+    IRLOG_INFO( "CIRPropertyObserver2::ConstructL - Exiting" );
+	}
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIRPropertyObserver2* CIRPropertyObserver2::NewL(MIRPropertyChangeObserver2& aObserver,
+		                        const TUid& aCategory, const TUint aKey,
+		                        	 const TIRPropertyType aPropertyType)
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::NewL - Entering" );
+    CIRPropertyObserver2* self = new( ELeave )CIRPropertyObserver2( aObserver, aCategory,
+    				 aKey, aPropertyType );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_INFO( "CIRPropertyObserver2::NewL - Exiting" );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CIRPropertyObserver2::~CIRPropertyObserver2()
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::~CIRPropertyObserver2 - Entering" );
+	Cancel();
+    iProperty.Close();
+    delete iValueByteArray;
+    delete iValueText;
+    IRLOG_INFO( "CIRPropertyObserver2::~CIRPropertyObserver2 - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Subscribes to a property and reads the value, if not already active.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRPropertyObserver2::ActivateL()
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::ActivateL - Entering" );
+    if ( !IsActive() )
+        {
+        RunL();
+        }
+    IRLOG_INFO( "CIRPropertyObserver2::ActivateL - Exiting" );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRPropertyObserver2::RunL
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver2::RunL()
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::RunL - Entering" );
+	
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    
+    TInt err(KErrNone);
+    
+    switch (iPropertyType)
+        {
+        case EIRPropertyInt:
+	        {
+	        err = iProperty.Get( iValueInt );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, iValueInt );
+             	}
+	        break;
+	        }
+	    case EIRPropertyByteArray:
+	        {
+	        TPtr8 ptr8( iValueByteArray->Des() );
+	        err = iProperty.Get( ptr8 );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, *iValueByteArray );
+             	}
+	        break;
+	        }
+	    case EIRPropertyText:
+	        {
+	        TPtr ptr( iValueText->Des() );
+	        err = iProperty.Get( ptr );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, *iValueText );
+             	}
+	        break;
+	        }
+	    default:
+	        {
+	        break;
+	        }
+        }
+    
+    if (err)
+    	{
+        iObserver.HandlePropertyChangeErrorL(iCategory, iKey, err);
+     	}
+    IRLOG_INFO( "CIRPropertyObserver2::RunL - Exiting" );
+	}
+
+// -----------------------------------------------------------------------------
+// Cancels an outstanding active request
+// -----------------------------------------------------------------------------
+//
+void CIRPropertyObserver2::DoCancel()
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::DoCancel - Entering" );
+    iProperty.Cancel();
+    IRLOG_INFO( "CIRPropertyObserver2::DoCancel - Exiting" );
+	}
+
+// -----------------------------------------------------------------------------
+// Getter for integer value
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CIRPropertyObserver2::ValueInt() const
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::ValueInt" );
+	return iValueInt;
+	}
+	
+// -----------------------------------------------------------------------------
+// Getter for byte array value
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C const TDesC8& CIRPropertyObserver2::ValueDes8() const
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::ValueDes8" );
+	return *iValueByteArray;
+	}
+	
+// -----------------------------------------------------------------------------
+// Getter for text value
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C const TDesC& CIRPropertyObserver2::ValueDes() const
+	{
+	IRLOG_INFO( "CIRPropertyObserver2::ValueDes" );
+	return *iValueText;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irpubsub.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irmetadata.h"
+#include "irpropertyobserver.h"
+#include "irpubsub.h"
+
+/**
+*C++ default constructor can NOT contain any code, that
+* might leave.
+*/
+CIRPubSub::CIRPubSub()
+    {
+	IRLOG_DEBUG( "CIRPubSub::CIRPubSub" );
+    }
+
+/**
+* Function: ConstructL
+* Symbian 2nd phase constructor can leave.
+*/
+
+void CIRPubSub::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRPubSub::ConstructL - Entering" );
+    // Define data properties.
+    DefinePropertyL( KIRPSDataApplicationRunning, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSPresetIndex, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSDataChannel, RProperty::ELargeText, ETrue );
+    DefinePropertyL( KIRPSMetaData, RProperty::ELargeText, ETrue );
+    DefinePropertyL( KIRPSVolume, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSPlayStop, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSChannelUrl, RProperty::ELargeText, ETrue );
+    DefinePropertyL( KIRPSBitrate, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSMultiplePlay, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSStationName, RProperty::ELargeText, ETrue );
+    DefinePropertyL( KIRPSAppInstanceRunning, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSChannelType, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSChannelId, RProperty::EInt, ETrue );
+    DefinePropertyL( KIRPSDataChannelDesc, RProperty::ELargeText, ETrue );
+    DefinePropertyL( KIRPSChannelMusicFlag, RProperty::ELargeText, ETrue );
+    DefinePropertyL( KIRPSBufferingState, RProperty::EInt, ETrue );
+    //Gets the integer value for the property KIRPSAppInstanceRunning
+    //which gives the number of instances of iRapp running
+    RProperty::Get( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+    //Increment the count and set the integer value for the property 
+    //KIRPSAppInstanceRunning to track the number of instances of iRapp
+    //running
+    iApplicationInstanceCount++;
+    RProperty::Set( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+    DefinePropertyL( KIRPSControlSetPlayState, RProperty::EInt, EFalse );
+
+    IRLOG_DEBUG( "CIRPubSub::ConstructL - Exiting." );	
+    }
+
+/**
+* Function: NewL
+* Two-phased constructor.
+* @return An Instance of CIRBufferingControl
+*/
+CIRPubSub* CIRPubSub::NewL()
+    {
+	IRLOG_DEBUG( "CIRPubSub::NewL - Entering" );
+    CIRPubSub* self = new (ELeave) CIRPubSub();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRPubSub::NewL - Exiting." );
+    return self;
+    }
+
+    
+/**
+* Function: ~CIRPubSub
+* Destructs all the Property Instances
+*/
+CIRPubSub::~CIRPubSub()
+    {
+	IRLOG_DEBUG( "CIRPubSub::~CIRPubSub - Entering" );
+    iPropertyArray.ResetAndDestroy();
+	iPropertyArray.Close();
+    RProperty::Get( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+    iApplicationInstanceCount--;
+
+    //Delete the property only when one instance of iRapp is running 
+    if(!iApplicationInstanceCount )
+    	{
+        DeleteProperty( KIRPSDataApplicationRunning );
+        DeleteProperty( KIRPSDataChannel );
+        DeleteProperty( KIRPSMetaData );
+        DeleteProperty( KIRPSPresetIndex );
+ 	    DeleteProperty( KIRPSVolume );
+        DeleteProperty( KIRPSPlayStop );
+        DeleteProperty( KIRPSChannelUrl );
+        DeleteProperty( KIRPSBitrate );
+        DeleteProperty( KIRPSMultiplePlay );
+        DeleteProperty( KIRPSStationName );
+        DeleteProperty( KIRPSAppInstanceRunning );
+        DeleteProperty( KIRPSChannelType );
+        DeleteProperty( KIRPSChannelId );
+        DeleteProperty( KIRPSDataChannelDesc );
+        DeleteProperty( KIRPSChannelMusicFlag );
+        DeleteProperty( KIRPSControlSetPlayState );
+        DeleteProperty( KIRPSBufferingState );
+    	}
+    RProperty::Set( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+	
+    IRLOG_DEBUG( "CIRPubSub::~CIRPubSub - Exiting." );	
+    }
+
+/*
+* CIRPubSub::DefinePropertyL
+* Defines a property.
+*/
+void CIRPubSub::DefinePropertyL( TUint aKey, TInt aAttr, TBool aDataProperty ) 
+				const
+    {
+	IRLOG_DEBUG( "CIRPubSub::DefinePropertyL - Entering" );
+    _LIT_SECURITY_POLICY_PASS(KIRExternalAccessPolicy);
+    _LIT_SECURITY_POLICY_S0(KIRInternalAccessPolicy, KUIDIRAPP);
+    
+    TInt err = KErrNone;
+    if(aDataProperty)
+        {   
+        // For data properties, grant read access for all, but write access only for iRAPP
+       	err = RProperty::Define( KUidActiveInternetRadioApp, aKey, aAttr, 
+       			KIRExternalAccessPolicy, KIRInternalAccessPolicy );
+        }
+    else
+        {
+        // For control properties, grant read access only for IRA, but write access for all
+	    err = RProperty::Define( KUidActiveInternetRadioApp, aKey, aAttr,
+	    		 KIRInternalAccessPolicy, KIRExternalAccessPolicy );
+	    }
+	if ( err && err != KErrAlreadyExists )
+        {
+        User::Leave( err );
+        }
+	IRLOG_DEBUG( "CIRPubSub::DefinePropertyL - Exiting." );
+     }
+
+/*
+* CIRPubSub::DeleteProperty
+* Deletes a property
+*/
+
+void CIRPubSub::DeleteProperty( TUint aKey ) const
+    {
+	IRLOG_DEBUG( "CIRPubSub::DeleteProperty Entering" );
+    RProperty::Delete( KUidActiveInternetRadioApp, aKey );
+	IRLOG_DEBUG( "CIRPubSub::DeleteProperty - Exiting." );
+    }
+
+
+/*
+* CIRPubSub::PublishChannel
+* Publishes the property value for key KIRPSDataChannel
+*/
+	
+void CIRPubSub::PublishChannel(const TDesC16& aChannelName ) const
+    {
+	IRLOG_DEBUG( "CIRPubSub::PublishChannel - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSDataChannel,
+					 aChannelName );
+	IRLOG_DEBUG( "CIRPubSub::PublishChannel - Exiting." );	
+    }
+
+/*
+* CIRPubSub::PublishVolumeL
+* Publishes the property value for key KIRPSVolume
+*/
+
+void CIRPubSub::PublishVolume( TInt aVol ) const
+    {
+	IRLOG_DEBUG( "CIRPubSub::PublishVolumeL - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSVolume , aVol );
+	IRLOG_DEBUG( "CIRPubSub::PublishVolumeL - Exiting." );	
+    }
+    
+/*
+* CIRPubSub::PublishPlayStop
+* Publishes the property value for playing status
+*/
+void CIRPubSub::PublishPlayStop ( TIRStopPlayState aPlayingState ) const
+	{
+	IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSPlayStop, aPlayingState );	
+	IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Exiting." );	
+	}
+
+/*
+* CIRPubSub::PublishApplicationRunningStateL
+* Publishes the property value for key KIRPSVolume
+*/
+	
+void CIRPubSub::PublishApplicationRunningStateL( TIRPSApplicationRunningState
+	 			aRunningState ) const
+	    {
+	IRLOG_DEBUG( "CIRPubSub::ConstructL - Entering" );	
+    User::LeaveIfError( RProperty::Set( KUidActiveInternetRadioApp, 
+    		KIRPSDataApplicationRunning, aRunningState ) );
+    IRLOG_DEBUG( "CIRPubSub::ConstructL - Exiting." );	
+	}
+
+// ---------------------------------------------------------------------------
+// Publishes meta data information.
+// ---------------------------------------------------------------------------
+//
+void CIRPubSub::PublishMetaDataL( const CIRMetaData& aMetaData ) const
+    {
+    IRLOG_INFO4( "CIRPubSub::PublishMetaDataL( aMetaData.Artist()=%S, aMetaData.Song()=%S, aMetaData.StreamUrl()=%S )",
+                 &aMetaData.Artist(), &aMetaData.Song(), &aMetaData.StreamUrl() );
+
+    HBufC8* buffer = HBufC8::NewLC( aMetaData.Artist().Size() + aMetaData.Song().Size() + 
+    				aMetaData.StreamUrl().Size() );
+    
+    TPtr8 bufferPtr( buffer->Des() );
+    
+    RDesWriteStream stream( bufferPtr );
+    CleanupClosePushL( stream );
+
+    aMetaData.ExternalizeL( stream );
+    User::LeaveIfError( RProperty::Set( KUidActiveInternetRadioApp, KIRPSMetaData, bufferPtr ) );
+
+    CleanupStack::PopAndDestroy(&stream);
+    CleanupStack::PopAndDestroy( buffer );
+
+    IRLOG_DEBUG( "CIRPubSub::PublishMetaDataL - Exit" );
+    }
+   
+/*
+* CIRPubSub::PublishChannelType
+* Publishes the property value for  KIRPSChannelType
+*/
+void CIRPubSub::PublishChannelType ( TInt aChannelType ) const
+	{
+	IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelType, aChannelType );	
+	IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Exiting." );	
+	}
+    
+/*
+* CIRPubSub::PublishChannelId
+* Publishes the property value for  KIRPSChannelId
+*/
+void CIRPubSub::PublishChannelId ( TInt aChannelId ) const
+	{
+	IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelId, aChannelId );	
+	IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Exiting." );	
+	}
+
+/*
+* CIRPubSub::PublishChannelDesc
+* Publishes the property value for key KIRPSDataChannel
+*/
+	
+void CIRPubSub::PublishChannelDesc(const TDesC16& aChannelDesc ) const
+    {
+	IRLOG_DEBUG( "CIRPubSub::PublishChannel - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSDataChannelDesc,
+					 aChannelDesc );
+	IRLOG_DEBUG( "CIRPubSub::PublishChannel - Exiting." );	
+    }
+/*
+* CIRPubSub::PublishChannelMusicFlag
+* Publishes the property value for key KIRPSChannelMusicFlag
+*/
+	
+void CIRPubSub::PublishChannelMusicFlag(const TDesC16& aChannelMusicFlag ) const
+    {
+	IRLOG_DEBUG( "CIRPubSub::PublishChannelMusicFlag - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelMusicFlag,
+					 aChannelMusicFlag );
+	IRLOG_DEBUG( "CIRPubSub::PublishChannelMusicFlag - Exiting." );	
+    }
+    /*
+* CIRPubSub::PublishBufferingState
+* Publishes the property value for key KIRPSBufferingState
+*/
+	
+void CIRPubSub::PublishBufferingState(TIRBufferingState aState) const
+    {
+	IRLOG_DEBUG( "CIRPubSub::PublishBufferingState - Entering" );	
+	RProperty::Set( KUidActiveInternetRadioApp, KIRPSBufferingState,
+					 aState );
+	IRLOG_DEBUG( "CIRPubSub::PublishBufferingState - Exiting." );	
+    }
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irradioidle.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1302 @@
+/*
+* 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: 
+*
+*/
+/*
+* ============================================================================
+*  Name        : radioidle.cpp
+*  Part of     :
+*  Description :
+*  Version     :
+*
+* ==============================================================================
+*/
+
+// INCLUDE FILES
+
+#include <eikenv.h>
+#include <stringloader.h>
+
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfenv.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfevent.h>
+#include <alf/alftransformation.h>
+#include <alf/alfgradientbrush.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alfborderbrush.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alfimagebrush.h>
+#include <alf/alftexturemanager.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfflowlayout.h>
+#include <alf/alfutil.h>
+#include <alf/alfTextStyle.h>
+#include <aknsitemid.h>
+
+#include <e32math.h>
+#include <data_caging_path_literals.hrh>
+#include "irradioidle.h"
+#include "irdebug.h"
+// CONSTANTS
+
+// bitmap file for the background of the display
+_LIT8( KRadioIdleAnchorTag, "radioIdleAnchor" );
+_LIT8( KRadioIdleFlowLayoutTag, "radioIdleFlowLayout" );
+_LIT8( KRadioIdleBackgroundTextTag, "radioIdleBackgroundText" );
+_LIT8( KRadioIdleItemTag, "radioIdleItem" );
+
+const TInt KSizeOfRadioIdleItemBigFont = 400; // background text
+const TInt KSizeOfRadioIdleItemMediumFont = 60;
+const TInt KSizeOfRadioIdleItemSmallFont = 30;
+
+const TInt KRadioIdleFadeOutDurationTime = 400;
+const TInt KRadioIdleFadeInDurationTime = 0; 
+
+const TInt  KRadioIdleBackgroundTextScrollInterval = 12000;
+const TReal32 KRadioIdleBackgroundTextOpacity = 0.2f;
+const TInt  KRadioIdleBackgroundTextSideToSideTransitionDurationTime = 25000;
+
+const TInt KMaxNumberOfRadioIdleItems = 5;
+
+const TReal32 KMaxRadioIdleItemsOverlap = 0.2f;
+const TInt KMaxRadioIdleItemScrollDurationTime = 35000;
+const TInt KMinRadioIdleItemScrollDurationTime = 25000;
+
+const TInt KModeChangingFactor = 3;
+
+const TReal32 KMaxOpacity = 0.7f;
+const TReal32 KMinOpacity = 0.3f;
+
+const TInt KMaxRadioIdleItemColorDeviation = 30; // must be <= 255
+const TRgb KRadioIdleItemDefaultColor(128,128,128);
+const TRgb KRadioIdleItemBackgroundColor(255, 255, 255);
+const TReal32 KRadioIdleItemBackgroundOpacity = 0.5f;
+const TReal32 KRadioIdleBackgroundOpacity = 0.4f;
+
+const TInt KRadioIdleItemArrayGranularity = 4;
+const TInt Kone=1;
+const TInt KTwoFiftyFive=255;
+const TInt KZero=0;
+const TInt KTen=10;
+const TInt KThousand=1000;
+//const TInt KThree=3
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::NewL
+// Two-phase constructor of CIRRadioIdle
+// ---------------------------------------------------------------------------
+//
+CIRRadioIdle* CIRRadioIdle::NewL( CAlfEnv& aEnv, TInt aControlGroupId, CAlfLayout* aParentLayout )
+	{
+	CIRRadioIdle* self = new (ELeave) CIRRadioIdle();
+	CleanupStack::PushL(self);
+	self->ConstructL( aEnv, aControlGroupId, aParentLayout );
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::CIRRadioIdle
+// Default constructor
+// ----------------------------------------------------------------------------
+//
+CIRRadioIdle::CIRRadioIdle()
+:   iOrientation ( EOrientationNone ),
+	iFadeStyle( EFadeStyleNone ),
+	iRadioIdleState( EStopped ),
+	iRadioIdleMode( EBackgroundTextAndRadioIdleItems ),
+	iRadioIdleRequestedMode( EBackgroundTextAndRadioIdleItems ),
+    iRadioIdlePrimaryColor(KRadioIdleItemDefaultColor),
+    iRadioIdleSecondaryColor( KRadioIdleItemDefaultColor )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::ConstructL( CAlfEnv& aEnv, TInt aControlGroupId, CAlfLayout* aParentLayout )
+	{
+	CAlfControl::ConstructL( aEnv );
+
+	iParentLayout = aParentLayout;
+
+    // Create largest font for the background text of radio idle
+   	CAlfTextStyleManager& manager = Env().TextStyleManager();
+	iRadioIdleItemBackgroundTextStyleId = manager.CreatePlatformTextStyleL();
+	CAlfTextStyle* radioIdleItemStyle = manager.TextStyle( iRadioIdleItemBackgroundTextStyleId );
+	radioIdleItemStyle->SetTextSizeInPixels( KSizeOfRadioIdleItemBigFont, ETrue );
+
+	 // Create text styles for other radio idle items
+    RArray<TInt> fontSizeArray;
+    CleanupClosePushL( fontSizeArray );
+    User::LeaveIfError( fontSizeArray.Append( KSizeOfRadioIdleItemMediumFont ) );
+    User::LeaveIfError( fontSizeArray.Append( KSizeOfRadioIdleItemSmallFont ) );
+    fontSizeArray.Sort();
+
+	TInt numberOfTextStyles = fontSizeArray.Count();
+	for( TInt i = 0; i < numberOfTextStyles; i++ )
+		{
+		TInt radioIdleItemTextStyleId = manager.CreatePlatformTextStyleL();
+		radioIdleItemStyle = manager.TextStyle( radioIdleItemTextStyleId );
+		radioIdleItemStyle->SetTextSizeInPixels( fontSizeArray[i], ETrue );
+		iTextStyleIdArray.Append( radioIdleItemTextStyleId );
+		}
+	CleanupStack::PopAndDestroy( &fontSizeArray );
+
+	aEnv.ControlGroup( aControlGroupId ).AppendL( this ); // Takes ownership.
+			// No leaving code allowed after this call.
+  	}
+
+// ---------------------------------------------------------------------------
+// ~CIRRadioIdle::~CIRRadioIdle
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRRadioIdle::~CIRRadioIdle()
+	{
+	Env().CancelCustomCommands( this );
+	if( iRadioIdleItemArray )
+		{
+		if( iRadioIdleItemArray->Count() > KZero )
+			{
+			iRadioIdleItemArray->Reset();
+			}
+		delete iRadioIdleItemArray;
+		}
+	CAlfTextStyleManager& manager = Env().TextStyleManager();
+	for( TInt i=0; i < iTextStyleIdArray.Count(); i++ )
+		{
+		manager.DeleteTextStyle( iTextStyleIdArray[i] );
+		}
+	iTextStyleIdArray.Close();
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::AddRadioIdleL
+// Creates the radio idle with passed number of radio idle items
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::AddRadioIdleL( const TInt aNumberOfRadioIdleItems )
+	{
+
+	CAlfAnchorLayout* radioIdleAnchor = static_cast<CAlfAnchorLayout*>
+								 ( FindTag( KRadioIdleAnchorTag ) );
+	if ( !radioIdleAnchor )
+		{
+		radioIdleAnchor = CAlfAnchorLayout::AddNewL( *this, iParentLayout );
+		radioIdleAnchor->SetTagL( KRadioIdleAnchorTag );
+		}
+
+	if( !iViewport )
+		{
+		iViewport = CAlfViewportLayout::AddNewL( *this, radioIdleAnchor );
+		iViewport->SetViewportPos( TAlfRealPoint( .0f, .0f ), KZero );
+		iViewport->SetViewportSize( TAlfRealSize( 1.0f, 1.0f ), KZero );
+		}
+
+	CreateBacgroundTextVisualL();
+	// Create the flow layout for the other radio idle items
+	CAlfFlowLayout* radioIdleFlowLayout = static_cast<CAlfFlowLayout*> 
+		( iViewport->FindTag( KRadioIdleFlowLayoutTag ) );
+	if( !radioIdleFlowLayout )
+		{
+		radioIdleFlowLayout = CAlfFlowLayout::AddNewL( *this, iViewport );
+		radioIdleFlowLayout->SetTagL( KRadioIdleFlowLayoutTag );
+		radioIdleFlowLayout->SetFlowDirection( CAlfFlowLayout::EFlowVertical );
+		radioIdleFlowLayout->SetMode( CAlfFlowLayout::EModeCenterPerpendicular );
+		}
+
+	InitializeRadioIdleItemsL( aNumberOfRadioIdleItems );
+	AnimateRadioIdleItems();
+	UpdateLayout();
+	RadioIdleFadeIn();
+	}
+
+// ----------------------------------------------------------------------------
+// CRadioIdle::CreateBacgroundTextVisualL
+// Creates, initializes and animates the radio idle background text visual
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::CreateBacgroundTextVisualL()
+	{
+	HBufC* itemText = GetRandomRadioIdleContentL();
+	CleanupStack::PushL( itemText );
+    CAlfTextVisual* backgroundText = static_cast<CAlfTextVisual*> 
+    	( iViewport->FindTag( KRadioIdleBackgroundTextTag ) );
+	if( !backgroundText && itemText )
+		{
+		backgroundText = AddRadioIdleItemL(iViewport, *itemText,KRadioIdleBackgroundTextTag, EFalse,
+                            KRadioIdleItemBackgroundColor,
+                            KRadioIdleItemBackgroundOpacity );
+
+		SetRadioIdleItemSettingsL( backgroundText, *itemText, iRadioIdleItemBackgroundTextStyleId );
+        backgroundText->EnableBrushesL();
+	    backgroundText->EnableShadow( EFalse );
+	    backgroundText->SetFlag(  EAlfVisualFlagManualLayout  );
+		SetScrollingToBackgroundText( backgroundText,
+                           KRadioIdleBackgroundTextSideToSideTransitionDurationTime,
+                           ERadioIdleBackgroundTextScrollEnd );
+		backgroundText->SetOpacity( TAlfTimedValue( KRadioIdleBackgroundTextOpacity ) );
+		}
+	else if( itemText )
+		{
+		SetRadioIdleItemSettingsL( backgroundText, *itemText,
+			 iRadioIdleItemBackgroundTextStyleId );
+        SetScrollingToBackgroundText( backgroundText, 
+        	KRadioIdleBackgroundTextSideToSideTransitionDurationTime, 
+        	ERadioIdleBackgroundTextScrollEnd );
+        backgroundText->SetOpacity( TAlfTimedValue( KRadioIdleBackgroundTextOpacity ) );
+        }
+	else
+		{
+		}	
+	CleanupStack::PopAndDestroy( itemText );
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::InitializeRadioIdleItemsL
+// Initializes the radio idle items
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::InitializeRadioIdleItemsL( const TInt aNumberOfRadioIdleItems )
+	{
+
+	CAlfFlowLayout* radioIdleFlowLayout = static_cast<CAlfFlowLayout*> 
+						( iViewport->FindTag( KRadioIdleFlowLayoutTag ) );
+	if( radioIdleFlowLayout )
+		{
+		// Create the radio idle items
+		for( TInt i = 0; i < aNumberOfRadioIdleItems; i++ )
+			{
+			HBufC* itemText = GetRandomRadioIdleContentL();
+			if( itemText )
+				{
+				CleanupStack::PushL( itemText );
+				TInt randFontStyleIx = AlfUtil::RandomInt( KZero,
+				  iTextStyleIdArray.Count() - Kone );
+			    CAlfTextVisual* radioIdleItem = NULL;
+			    if( radioIdleFlowLayout->Count() < aNumberOfRadioIdleItems )
+					{
+                    radioIdleItem  = AddRadioIdleItemL( radioIdleFlowLayout,
+                    	 *itemText, KRadioIdleItemTag,EFalse, 
+                    	 KRadioIdleItemBackgroundColor, KRadioIdleItemBackgroundOpacity );
+					}
+			    else
+			    	{
+			    	/*lint -save -e826 (Info -- Suspicious pointer-to-pointer conversion (area too small)*/
+			    	radioIdleItem = static_cast<CAlfTextVisual*> 
+			    			( GetPointer( radioIdleFlowLayout->Visual( i ) ) );
+			    	/*lint -restore*/
+			    	radioIdleItem->SetOpacity( TAlfTimedValue( .0f ) );
+					radioIdleItem->EnableTransformationL( ETrue );
+					CAlfTransformation* radioIdleItemTransformation =
+									 &( radioIdleItem->Transformation() );
+					radioIdleItemTransformation->LoadIdentity();
+			    	}
+			    SetRadioIdleItemSettingsL( radioIdleItem, *itemText, 
+			    		iTextStyleIdArray[ randFontStyleIx ] );
+			 	CleanupStack::PopAndDestroy( itemText );
+				}
+			}
+		}
+
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::AnimateRadioIdleItems
+// Sets defined animation to the created radio idle items
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::AnimateRadioIdleItems()
+	{
+
+	CAlfFlowLayout* radioIdleFlowLayout = static_cast<CAlfFlowLayout*> 
+				( iViewport->FindTag( KRadioIdleFlowLayoutTag ) );
+	if( radioIdleFlowLayout )
+		{
+		for( TInt i = 0; i < radioIdleFlowLayout->Count(); i++ )
+			{
+	    	/*lint -save -e826 (Info -- Suspicious pointer-to-pointer conversion (area too small)*/
+		    CAlfTextVisual* radioIdleItem = static_cast<CAlfTextVisual*> 
+		    	( GetPointer( radioIdleFlowLayout->Visual( i ) ) );
+		    /*lint -restore*/
+			 SetRadioIdleItemAnimation( radioIdleItem );
+			}
+		}
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::AddRadioIdleItemL
+// Creates the radio idle item to the passed radio idle view port.
+// ----------------------------------------------------------------------------
+//
+CAlfTextVisual* CIRRadioIdle::AddRadioIdleItemL( CAlfLayout* aRadioIdle, 
+					const TDesC& aRadioIdleItemText, 
+					const TDesC8& aTag, TBool aRadioIdleItemHasBackground,
+					const TRgb& aBackgroundColor,
+					const TReal32 aBackgroundOpacity )
+	{
+
+	CAlfTextVisual* radioIdleItem = CAlfTextVisual::AddNewL( *this, aRadioIdle );
+	// Set text to transparent during initialization
+	radioIdleItem->SetOpacity( TAlfTimedValue( .0f ) );
+    radioIdleItem->EnableBrushesL();
+    radioIdleItem->SetTextL( aRadioIdleItemText );
+    radioIdleItem->SetTagL( aTag );
+    radioIdleItem->EnableShadow( EFalse );
+    radioIdleItem->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter );
+    radioIdleItem->SetSize( radioIdleItem->TextExtents() );
+
+    if ( aRadioIdleItemHasBackground )
+	    {
+		CAlfGradientBrush* gradientBrush = CAlfGradientBrush::NewLC( Env() );
+		gradientBrush->SetColor( aBackgroundColor, aBackgroundOpacity );
+		radioIdleItem->Brushes()->AppendL( gradientBrush, EAlfHasOwnership );
+		CleanupStack::Pop( gradientBrush );
+	    }
+	return radioIdleItem;
+
+	}
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::DeviateColorComponent
+// Randomly modifies the value of a color component.
+// ----------------------------------------------------------------------------
+//
+TInt CIRRadioIdle::DeviateColorComponent( TInt aBaseValue )
+    {
+    TInt deviatedValue = aBaseValue
+                       + AlfUtil::RandomInt( 0, KMaxRadioIdleItemColorDeviation )
+                       - AlfUtil::RandomInt( 0, KMaxRadioIdleItemColorDeviation );
+
+    if( deviatedValue < 0)
+        {
+        deviatedValue = 0;
+        }
+    else if( deviatedValue > KTwoFiftyFive )
+        {
+        deviatedValue = KTwoFiftyFive;
+        }
+    
+    return deviatedValue;
+    }
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetRadioIdleItemSettings
+// Sets color, opacity and scaling settings to the radio idle item
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetRadioIdleItemSettingsL( CAlfTextVisual* aRadioIdleItem, 
+											const TDesC& aRadioIdleItemText,
+											  const TInt aTextStyleId )
+	{
+	// Set text of the radio idle item
+	aRadioIdleItem->SetTextL( aRadioIdleItemText );
+	// Set text to transparent during initialization
+	aRadioIdleItem->SetOpacity( TAlfTimedValue( .0f ) );
+	aRadioIdleItem->EnableTransformationL( ETrue );
+	CAlfTransformation* radioIdleItemTransformation = &( aRadioIdleItem->Transformation() );
+	radioIdleItemTransformation->LoadIdentity();
+    
+    // Select base color for text
+
+    TRgb radioIdleItemColor( iRadioIdlePrimaryColor );
+    if( AlfUtil::RandomInt(0, 1) == 0 )
+        {
+        radioIdleItemColor = iRadioIdleSecondaryColor;
+        }
+    
+    // Modify the color
+    radioIdleItemColor.SetRed( DeviateColorComponent( radioIdleItemColor.Red() ) );
+    radioIdleItemColor.SetGreen( DeviateColorComponent( radioIdleItemColor.Green() ) );
+    radioIdleItemColor.SetBlue( DeviateColorComponent( radioIdleItemColor.Blue() ) );
+
+	// Set text color of the radio idle item
+	aRadioIdleItem->SetColor( radioIdleItemColor );
+	// Set text style of the radio idle	item
+	aRadioIdleItem->SetTextStyle( aTextStyleId );
+
+	TSize itemSize( 0, 0 );
+	if ( aRadioIdleItem->TextExtents() != itemSize )
+		{
+		aRadioIdleItem->SetSize( aRadioIdleItem->TextExtents() );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetRadioIdleItemAnimation
+// Sets translating animations to the radio idle item
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetRadioIdleItemAnimation( CAlfTextVisual* aRadioIdleItem )
+	{
+
+	CAlfFlowLayout* radioIdleFlowLayout = static_cast<CAlfFlowLayout*> 
+										( aRadioIdleItem->Layout() );
+	TInt radioIdleItemCount = radioIdleFlowLayout->Count();
+	TInt radioIdleItemIndex = radioIdleFlowLayout->FindVisual( aRadioIdleItem );
+
+	TReal32 radioIdleItemWidth = aRadioIdleItem->DisplayRect().Width();
+	TReal32 radioIdleItemHeight = aRadioIdleItem->DisplayRect().Height();
+	TReal32 radioIdleWidth = radioIdleFlowLayout->Size().Target().iX;
+
+	TInt randomTranslateDuration = AlfUtil::RandomInt( KMinRadioIdleItemScrollDurationTime,
+									 KMaxRadioIdleItemScrollDurationTime );
+
+	// Calculate y position of the radio idle item
+	TReal32 randomMeanDeviationY = 0;
+	if(radioIdleItemIndex != 0 && radioIdleItemIndex != radioIdleItemCount - Kone )
+		{
+		randomMeanDeviationY = AlfUtil::RandomReal( 0.0f,  radioIdleItemHeight * 
+															KMaxRadioIdleItemsOverlap );
+		TInt deviationDirection = AlfUtil::RandomInt( KZero,  Kone );
+		if( deviationDirection )
+		 	{
+		 	randomMeanDeviationY = -randomMeanDeviationY;
+		 	}
+		}
+
+	TInt scrollDirection = AlfUtil::RandomInt( KZero,  Kone );
+	TAlfTimedValue targetPositionX;
+	if( scrollDirection )
+		{
+		targetPositionX.SetValueNow( -radioIdleWidth/2 - radioIdleItemWidth/2 );
+		targetPositionX.SetTarget( radioIdleWidth/2 + radioIdleItemWidth/2,
+								 randomTranslateDuration );
+		}
+	else
+		{
+		targetPositionX.SetValueNow( radioIdleWidth/2 + radioIdleItemWidth/2  );
+		targetPositionX.SetTarget( -radioIdleWidth/2 - radioIdleItemWidth/2,
+													 randomTranslateDuration );
+		}
+	Translate( aRadioIdleItem, targetPositionX, TAlfTimedValue( randomMeanDeviationY ) );
+	if( radioIdleItemIndex >= KZero )
+		{
+		Env().Send( TAlfCustomEventCommand( ERadioIdleItemTransformationEnd,
+											this,
+											radioIdleItemIndex ),
+											randomTranslateDuration );
+		}
+	// Set text opacity of the radio idle item
+	TReal32 randomOpacity = AlfUtil::RandomReal( KMinOpacity, KMaxOpacity );
+	aRadioIdleItem->SetOpacity( TAlfTimedValue( randomOpacity ) );
+	radioIdleFlowLayout->UpdateChildrenLayout( KMinRadioIdleItemScrollDurationTime );
+
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::RadioIdleFadeIn
+// Fades in radio idle
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::RadioIdleFadeIn( TBool aNow )
+	{
+
+	if ( iViewport )
+		{
+		if( aNow )
+			{
+			FadeIn( iViewport, KZero );
+			}
+		else
+			{
+			FadeIn( iViewport, KRadioIdleFadeInDurationTime );
+			}
+		}
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::RadioIdleFadeOut
+// Fades out radio idle
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::RadioIdleFadeOut( TBool aNow )
+	{
+	
+
+	if ( iViewport )
+		{
+		iFading = ETrue;
+		if( aNow )
+			{
+			FadeOut( iViewport, KZero );
+			iFading = EFalse;
+			}
+		else if ( iFadeStyle == EFadeStyleNone )
+			{
+			FadeOut( iViewport, KRadioIdleFadeOutDurationTime );
+	        Env().Send( TAlfCustomEventCommand( ERadioIdleFadeOutCompleted, this,
+												reinterpret_cast<TInt>( iViewport ) ),
+												KRadioIdleFadeOutDurationTime );
+	        iViewport = NULL;
+			}
+		else
+			{
+		    TAlfTimedPoint point( 0.0f, 0.0f );
+		    point.SetStyle( EAlfTimedValueStyleDecelerate );
+
+		    TAlfRealPoint size = iViewport->Size().ValueNow();
+		    TAlfRealPoint pos = iViewport->Pos().ValueNow();
+
+		    point = TAlfTimedPoint( pos.iX, pos.iY );
+
+		    TAlfRealPoint target = iViewport->Pos().Target();
+
+		    switch ( iFadeStyle )
+		        {
+		        case EFadeRight: // Fade left to right
+		            point.SetTarget( TAlfRealPoint( target.iX + size.iX, target.iY ),
+		            						 KRadioIdleFadeOutDurationTime );
+		            break;
+		        case EFadeLeft: // Fade right to left
+		            point.SetTarget( TAlfRealPoint( target.iX - size.iX, target.iY ),
+		            			 KRadioIdleFadeOutDurationTime );
+		            break;
+		        default:
+		            break;
+		        }
+
+		    // Fade the radio idle out.
+		    TAlfTimedValue opacity( iViewport->Opacity().ValueNow() );
+		    opacity.SetStyle( EAlfTimedValueStyleAccelerate );
+		    opacity.SetTarget( 0.0f, KRadioIdleFadeOutDurationTime );
+
+		    iViewport->SetFlag( EAlfVisualFlagManualPosition );
+		    iViewport->SetPos( point );
+		    iViewport->SetOpacity( opacity );
+
+		    iFadeStyle = EFadeStyleNone;
+
+	        Env().Send( TAlfCustomEventCommand( ERadioIdleFadeOutCompleted, this,
+												reinterpret_cast<TInt>( iViewport ) ),
+												KRadioIdleFadeOutDurationTime );
+	        iViewport = NULL;
+	        ResetRadioIdleContent();
+			}
+		}
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::StartRadioIdle
+// Launches radio idle.
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::StartRadioIdleL()
+    {
+    if( iRadioIdleState == EStopped || iRadioIdleState == ESuspended )
+	    {
+		Env().CancelCustomCommands( this );
+	    AddRadioIdleL( KMaxNumberOfRadioIdleItems );
+	    }
+    iRadioIdleState = ERunning;
+    iDelayedStartup = EFalse;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::SuspendRadioIdle
+// Suspends radio idle and starts it again after startup delay
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::SuspendRadioIdle()
+    {
+    Env().CancelCustomCommands( this );
+    if( iRadioIdleState == ERunning )
+	    {
+	    RadioIdleFadeOut( ETrue );
+	    }
+    iRadioIdleState = ESuspended;
+    iFading = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::ShutdownRadioIdle
+// Stops radio idle. Radio idle is set to stopped state.
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::ShutdownRadioIdle()
+    {
+
+    Env().CancelCustomCommands( this );
+    if( iRadioIdleState == ERunning )
+	    {
+	    RadioIdleFadeOut();
+	    }
+    iRadioIdleState = EStopped;
+    iFading = EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::AddRadioIdleContentL
+// Adds radio idle item text to be used in the radio idle
+// ----------------------------------------------------------------------------
+//
+TInt CIRRadioIdle::AddRadioIdleContentL( const TDesC& aRadioIdleItemText )
+	{
+	if( !iRadioIdleItemArray )
+		{
+		// Array for radio idle items
+    	iRadioIdleItemArray = new( ELeave ) CDesCArrayFlat( KRadioIdleItemArrayGranularity );
+		}
+	iRadioIdleItemArray->AppendL( aRadioIdleItemText );
+	return iRadioIdleItemArray->Count() - Kone;
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::UpdateRadioIdleContent
+// Updates radio idle item text in specified index.
+// Note that the index of a particular radio idle item text is defined by
+// the order in which it has been added by AddRadioIdleContentL.
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::UpdateRadioIdleContent( const TDesC& aRadioIdleItemText, TInt aIndex )
+	{
+
+	if( aIndex >= 0 && aIndex < iRadioIdleItemArray->MdcaCount() )
+		{
+		TPtrC itemContent( iRadioIdleItemArray->MdcaPoint( aIndex ) );
+		if ( itemContent.Length() )
+			{ 
+			iRadioIdleItemArray->Delete( aIndex );
+			}
+		
+		TRAP_IGNORE( iRadioIdleItemArray->InsertL( aIndex, aRadioIdleItemText ) )
+		}
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::GetRandomRadioIdleContentL
+// Retrieves text from randomly chousen radio idle item
+// ----------------------------------------------------------------------------
+//
+HBufC* CIRRadioIdle::GetRandomRadioIdleContentL()
+	{
+
+	if( !iRadioIdleItemArray )
+		{
+		return NULL;
+		}
+	TInt count = iRadioIdleItemArray->MdcaCount();
+	if( count > KZero )
+    	{
+    	// Try to find a non-empty radio idle item from the array
+		TInt radioIdleItemIndex;
+    	for ( TInt i = 0; i < KTen*count; i++ )
+    		{
+    		radioIdleItemIndex = AlfUtil::RandomInt( KZero, count - Kone );
+    		TPtrC itemContent( iRadioIdleItemArray->MdcaPoint( radioIdleItemIndex ) );
+    		// Check if there really is some content
+    		if ( itemContent.Length() )
+    			{
+    			return itemContent.AllocL();
+    			}
+    		}
+    	}
+   	return NULL;
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::ResetRadioIdleContent
+// Removes all radio idle item texts
+// ----------------------------------------------------------------------------
+//
+void  CIRRadioIdle::ResetRadioIdleContent()
+	{
+	if( iRadioIdleItemArray )
+		{
+		if( iRadioIdleItemArray->Count() > KZero )
+			{
+			iRadioIdleItemArray->Reset();
+			iRadioIdleItemArray->Compress();
+			}
+		}
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::RadioIdleContentCount
+// Returns number of radio idle content items
+// ----------------------------------------------------------------------------
+//
+TInt CIRRadioIdle::RadioIdleContentCount() const
+	{
+
+	if( iRadioIdleItemArray )
+		{
+		return iRadioIdleItemArray->Count();
+		}
+	else
+		{
+		return KZero;
+		}
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetPrimaryColor
+// Sets primary color for the radio idle
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetPrimaryColor( TRgb aColor )
+	{
+	iRadioIdlePrimaryColor = aColor;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetSecondaryColor
+// Sets secondary color for the radio idle
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetSecondaryColor( TRgb aColor )
+	{
+	iRadioIdleSecondaryColor = aColor;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetBackgroundColor
+// Sets the background color of the radio idle
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetBackgroundColor( TRgb aColor )
+	{
+	iRadioIdleBackgroundColor = aColor;
+	if( iRadioIdleBackgroundGradientBrush )
+		{
+		iRadioIdleBackgroundGradientBrush->SetColor( aColor, KRadioIdleBackgroundOpacity );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::Translate
+// Translates the visual object with passed arguments
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::Translate( CAlfTextVisual* aTextVisual, const TAlfTimedValue& aX, 
+															const TAlfTimedValue& aY )
+	{
+	if( aTextVisual )
+		{
+		TRAPD( err, aTextVisual->EnableTransformationL( ETrue ) );
+		if( err == KErrNone )
+			{
+			CAlfTransformation* visualTransformation = &( aTextVisual->Transformation() );
+			TAlfTimedValue x(aX);
+			x.SetStyle( EAlfTimedValueStyleLinear );
+
+			TAlfTimedValue y(aY);
+			y.SetStyle( EAlfTimedValueStyleLinear );
+
+			visualTransformation->Translate( x, y );
+			}
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::Scale
+// Scales the visual object with passed arguments
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::Scale( CAlfTextVisual* aTextVisual, const TAlfTimedValue& aX, 
+												const TAlfTimedValue& aY )
+	{
+	if( aTextVisual )
+		{
+		TRAPD( err, aTextVisual->EnableTransformationL( ETrue ) );
+		if( err == KErrNone )
+			{
+			CAlfTransformation* visualTransformation = &( aTextVisual->Transformation() );
+			visualTransformation->Scale( aX, aY );
+			}
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::LoadTextVisualIdentity
+// Removes all transformations of the visual object such as the scaling and translating.
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::LoadTextVisualIdentity( CAlfTextVisual* aTextVisual )
+	{
+	if( aTextVisual )
+		{
+		TRAPD( err, aTextVisual->EnableTransformationL( ETrue ) );
+		if( err == KErrNone )
+			{
+			CAlfTransformation* visualTransformation = &( aTextVisual->Transformation() );
+			visualTransformation->LoadIdentity();
+			}
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::UpdateLayout
+// Calculates display layout
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::UpdateLayout()
+	{
+	CAlfVisual* visual = FindTag( KRadioIdleAnchorTag );
+	if( visual )
+		{
+		CAlfAnchorLayout* radioIdleAnchor = static_cast<CAlfAnchorLayout*>( visual );
+		radioIdleAnchor->UpdateChildrenLayout( );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::Refresh
+// Starts radio idle again without reseting radio idle items.
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::RefreshL()
+	{
+	if ( iRadioIdleState == ERunning )
+		{
+		RadioIdleFadeOut();
+		}
+	iRadioIdleState = ESuspended;
+    iFading = EFalse;
+	HandleCommandL( EStartup );
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetIdleFadeStyle
+// Sets fade style for radio idle
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetIdleFadeStyle( TRadioIdleFadeStyle aFadeStyle )
+	{
+	iFadeStyle = aFadeStyle;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetModeChangeRequest
+// Sets request for mode change
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetModeChangeRequestL( TRadioIdleMode aRequestedMode )
+	{
+	iRadioIdleRequestedMode = aRequestedMode;
+	if( iRadioIdleRequestedMode == EBackgroundTextAndRadioIdleItems &&
+		Mode() == EOnlyBackgroundText )
+		{
+		InitializeRadioIdleItemsL( KMaxNumberOfRadioIdleItems );
+		AnimateRadioIdleItems();
+		SetMode( EBackgroundTextAndRadioIdleItems );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetMode
+// Sets the radio idle mode
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetMode( TRadioIdleMode aMode )
+	{
+	iRadioIdleMode = aMode;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::Mode
+// Retrieves the radio idle mode
+// ----------------------------------------------------------------------------
+//
+CIRRadioIdle::TRadioIdleMode CIRRadioIdle::Mode()
+	{
+	return iRadioIdleMode;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::State
+// Retrieves the radio idle state
+// ----------------------------------------------------------------------------
+//
+CIRRadioIdle::TRadioIdleState CIRRadioIdle::State()
+	{
+	return iRadioIdleState;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::Orientation
+// Return orientation of the display
+// ----------------------------------------------------------------------------
+//
+CIRRadioIdle::TOrientation CIRRadioIdle::Orientation()
+	{
+	return iOrientation;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::Orientation
+// Set orientation of the display
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetOrientation( TOrientation aOrientation )
+	{
+	iOrientation = aOrientation;
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::OfferEventL
+// From CAlfControl, takes care of alfred event handling.
+// ----------------------------------------------------------------------------
+//
+TBool CIRRadioIdle::OfferEventL( const TAlfEvent& aEvent )
+	{
+
+	TBool isHandled = EFalse;
+	if( aEvent.IsCustomEvent() )
+		{
+		switch( aEvent.CustomParameter() )
+			{
+			case ERadioIdleItemTransformationEnd:
+				{
+				HandleRadioIdleItemTransformationEndEventL( aEvent );
+				isHandled = ETrue;
+				}
+				break;
+			case ERadioIdleBackgroundTextScrollEnd:
+				{
+				HandleBackgroundTextScrollEndEventL( aEvent );
+				isHandled = ETrue;
+				}
+				break;
+			case ERadioIdleChangeMode:
+				{
+				if( Mode() == EBackgroundTextAndRadioIdleItems )
+					{
+					SetModeChangeRequestL( EOnlyBackgroundText );
+					}
+				else
+					{
+					SetModeChangeRequestL( EBackgroundTextAndRadioIdleItems );
+					}
+				isHandled = ETrue;
+				}
+				break;
+			case ERadioIdleFadeOutCompleted:
+				{
+				reinterpret_cast<CAlfViewportLayout*>( aEvent.CustomEventData() )
+														->RemoveAndDestroyAllD();
+				iFading = EFalse;
+				
+				// Check if there was a startup command during fading out
+				if ( iDelayedStartup )
+					{
+					StartRadioIdleL();
+					}
+				isHandled = ETrue;
+				}
+				break;
+			default:
+			break;
+			}
+		}
+	return isHandled;
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::HandleRadioIdleItemTransformationEndEventL
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::HandleRadioIdleItemTransformationEndEventL( const TAlfEvent& aEvent )
+	{
+
+	iItemsTransformationEndEventCounter++;
+	if ( iRadioIdleRequestedMode == EOnlyBackgroundText || Mode() == EOnlyBackgroundText )
+		{
+		CAlfFlowLayout* radioIdleFlowLayout = static_cast<CAlfFlowLayout*> 
+						( iViewport->FindTag( KRadioIdleFlowLayoutTag ) );
+		if ( radioIdleFlowLayout )
+			{
+			TInt radioIdleItemIndex = aEvent.CustomEventData();
+	    	/*lint -save -e826 (Info -- Suspicious pointer-to-pointer conversion (area too small)*/
+			CAlfTextVisual* radioIdleItem = static_cast<CAlfTextVisual*> ( GetPointer( radioIdleFlowLayout->
+													Visual( radioIdleItemIndex ) ) );
+			/*lint -restore*/
+			radioIdleItem->SetOpacity( TAlfTimedValue( .0f ) );
+
+			if( iItemsTransformationEndEventCounter == radioIdleFlowLayout->Count() )
+				{
+				SetMode( EOnlyBackgroundText );
+				iItemsTransformationEndEventCounter = 0;
+				Env().Send( TAlfCustomEventCommand( ERadioIdleBackgroundTextScrollEnd, this ), KZero );
+				}
+			}
+		}
+	else
+		{
+		CAlfFlowLayout* radioIdleFlowLayout = static_cast<CAlfFlowLayout*> ( iViewport->
+												FindTag( KRadioIdleFlowLayoutTag ) );
+		if ( radioIdleFlowLayout )
+			{
+			HBufC* itemText = GetRandomRadioIdleContentL();
+			if( itemText )
+				{
+				CleanupStack::PushL( itemText );
+				TInt radioIdleItemIndex = aEvent.CustomEventData();
+		    	/*lint -save -e826 (Info -- Suspicious pointer-to-pointer conversion (area too small)*/
+				CAlfTextVisual* radioIdleItem = static_cast<CAlfTextVisual*> ( GetPointer(
+											 radioIdleFlowLayout->Visual( radioIdleItemIndex ) ) );
+				/*lint -restore*/
+				if ( iTextStyleIdArray.Count() > KZero )
+					{
+			    	// First hide the radio idle item
+					radioIdleItem->SetOpacity( TAlfTimedValue( .0f ) );
+					radioIdleItem->EnableTransformationL( ETrue );
+					CAlfTransformation* radioIdleItemTransformation = 
+											&( radioIdleItem->Transformation() );
+					radioIdleItemTransformation->LoadIdentity();
+
+					TInt randFontStyleIx = AlfUtil::RandomInt( KZero,  iTextStyleIdArray.Count() - Kone );
+					SetRadioIdleItemSettingsL( radioIdleItem, *itemText,
+										  iTextStyleIdArray[ randFontStyleIx ] );
+					SetRadioIdleItemAnimation( radioIdleItem );
+
+					if ( iRadioIdleRequestedMode != EOnlyBackgroundText )
+						{
+						if( iItemsTransformationEndEventCounter == radioIdleFlowLayout->Count() )
+							{
+							Env().Send( TAlfCustomEventCommand( ERadioIdleChangeMode, this ),
+									KMaxRadioIdleItemScrollDurationTime * KModeChangingFactor );
+							iItemsTransformationEndEventCounter = 0;
+							}
+						}
+					}
+				CleanupStack::PopAndDestroy( itemText );
+				}
+			}
+		}
+
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::HandleBackgroundTextScrollEndEventL
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::HandleBackgroundTextScrollEndEventL( const TAlfEvent& /*aEvent*/ )
+	{
+	if( iViewport )
+		{
+		CAlfTextVisual* backgroundText = static_cast<CAlfTextVisual*> ( iViewport->
+										FindTag( KRadioIdleBackgroundTextTag ) );
+		if( backgroundText )
+			{
+			backgroundText->SetOpacity( TAlfTimedValue( .0f ) );
+
+			if ( iRadioIdleRequestedMode == EOnlyBackgroundText && Mode() == 
+											 EBackgroundTextAndRadioIdleItems )
+				{
+				}
+			else
+				{
+				if( iRadioIdleRequestedMode == EOnlyBackgroundText &&
+						Mode() == EOnlyBackgroundText )
+					{
+					Env().CancelCustomCommands( this );
+					Env().Send( TAlfCustomEventCommand( ERadioIdleChangeMode, this ),
+							KRadioIdleBackgroundTextSideToSideTransitionDurationTime );
+					}
+				backgroundText->EnableTransformationL( ETrue );
+				CAlfTransformation* radioIdleItemTransformation = 
+										&( backgroundText->Transformation() );
+				radioIdleItemTransformation->LoadIdentity();
+				HBufC* itemText = GetRandomRadioIdleContentL();
+				if( itemText )
+					{
+					CleanupStack::PushL( itemText );
+					SetRadioIdleItemSettingsL( backgroundText, *itemText,
+									 iRadioIdleItemBackgroundTextStyleId );
+					CleanupStack::PopAndDestroy( itemText );
+					}
+				backgroundText->SetOpacity( TAlfTimedValue( KRadioIdleBackgroundTextOpacity ) );
+				SetScrollingToBackgroundText( backgroundText,
+								   KRadioIdleBackgroundTextSideToSideTransitionDurationTime,
+								   ERadioIdleBackgroundTextScrollEnd );
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::HandleCommandL
+// From MRadioIdleCommandObserver, takes care of radio idle command handling.
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::HandleCommandL( TRadioIdleCommand aCommand )
+    {
+    switch ( aCommand )
+	    {
+		case ESuspend:
+			SuspendRadioIdle();
+			break;
+		case EStartup:
+			{
+			// Check if radio idle can be started right away
+			if ( !iFading )
+				{
+				StartRadioIdleL();
+				}
+			else
+				{
+				iDelayedStartup = ETrue;
+				}
+			}	
+			break;
+		case EShutdown:
+			ShutdownRadioIdle();
+			break;
+		case ERefresh:
+			RefreshL();
+			break;
+		case EResetContent:
+			ResetRadioIdleContent();
+			break;
+		default:
+			break;
+		}
+    }
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::SetScrollingToBackgroundText
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::SetScrollingToBackgroundText( CAlfTextVisual* aVisual, TInt aTransitionTime,
+						 TRadioIdleCustomEvent aEventAfterScrollingEnd )
+	{
+	CAlfViewportLayout* radioIdle = static_cast<CAlfViewportLayout*> ( aVisual->Layout() );
+	TReal32 radioIdleItemWidth = aVisual->DisplayRect().Width();
+	TReal32 radioIdleWidth = radioIdle->Size().Target().iX;
+
+	TAlfTimedValue targetPositionX;
+	if( iBackgroundTextScrollDirection == EScrollRightToLeft  )
+	 	{
+		targetPositionX.SetValueNow(  -radioIdleItemWidth );
+		targetPositionX.SetTarget( radioIdleWidth, aTransitionTime );
+		iBackgroundTextScrollDirection = EScrollLeftToRight;
+	 	}
+	else
+	 	{
+		targetPositionX.SetValueNow( radioIdleWidth );
+		targetPositionX.SetTarget( -radioIdleItemWidth, aTransitionTime );
+		iBackgroundTextScrollDirection = EScrollRightToLeft;
+	 	}
+	Translate( aVisual, targetPositionX, TAlfTimedValue( -30.0f ) ); 
+	Env().Send( TAlfCustomEventCommand( aEventAfterScrollingEnd, this ),
+			    aTransitionTime + KRadioIdleBackgroundTextScrollInterval );
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::ScrollToLeft
+// Sets and starts scrolling animation to CAlfTextVisual.
+// The visual object is scrolled from current position to
+// left side of the display
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::ScrollToLeft( CAlfTextVisual* aVisual ) const
+	{
+	if( aVisual )
+		{
+		TReal32 visualWidth = aVisual->DisplayRect().Width();
+		TInt textWidth = aVisual->TextExtents().iWidth;
+		TReal32 scrollValue = visualWidth;
+		if( textWidth > visualWidth )
+			{
+			scrollValue += textWidth - visualWidth;
+			}
+		TAlfTimedPoint timedPosition = aVisual->Pos();
+		TAlfRealPoint positionZero( 0.0f, timedPosition.iY.ValueNow() );
+		TAlfRealPoint positionLeft( - ( scrollValue ), timedPosition.iY.ValueNow() );
+		aVisual->SetPos( positionZero );
+		aVisual->SetPos( positionLeft, KThousand );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CIRRadioIdle::ScrollToRight
+// Sets and starts scrolling animation to CAlfTextVisual.
+// The visual object is scrolled from current position to
+// right side of the display
+// ----------------------------------------------------------------------------
+//
+void CIRRadioIdle::ScrollToRight( CAlfTextVisual* aVisual ) const
+	{
+	TReal32 visualWidth = aVisual->DisplayRect().Width();
+	TInt textWidth = aVisual->TextExtents().iWidth;
+	TReal32 scrollValue = visualWidth;
+	if( textWidth > visualWidth )
+		{
+		scrollValue += textWidth - visualWidth;
+		}
+	TAlfTimedPoint timedPosition = aVisual->Pos();
+	TAlfRealPoint positionZero( 0.0f, timedPosition.iY.ValueNow() );
+	TAlfRealPoint positionRight( scrollValue, timedPosition.iY.ValueNow() );
+	aVisual->SetPos( positionZero );
+	aVisual->SetPos( positionRight, KThousand );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::FadeIn
+// Sets fade-in animation to the CAlfVisual.
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::FadeIn( CAlfVisual* aVisual, TInt aTime, TReal32 aOpacity ) const
+	{
+	TAlfTimedValue opacity;
+	opacity.SetValueNow( 0.0f ); // immediate change
+	opacity.SetTarget( aOpacity, aTime ); // and smooth target
+	aVisual->SetOpacity( opacity );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::FadeOut
+// Sets fade-out animation to the CAlfVisual.
+// ---------------------------------------------------------------------------
+//
+void CIRRadioIdle::FadeOut( CAlfVisual* aVisual, TInt aTime, TReal32 aOpacity ) const
+	{
+	TAlfTimedValue opacity;
+	opacity.SetTarget( aOpacity, aTime );
+	aVisual->SetOpacity( opacity );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRRadioIdle::GetPointer
+// Converts reference to a AlfVisual to pointer.
+// ---------------------------------------------------------------------------
+//
+CAlfVisual* CIRRadioIdle::GetPointer( CAlfVisual& aRef )
+	{
+	return &aRef;
+	}
+
+//  End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irsearchresultsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1089 @@
+/*
+* Copyright (c) 2004 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:  Search Results view class
+*
+*/
+
+
+
+
+#include <akniconarray.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <psserv.h>
+#include <hlplch.h>
+#include <aknnotewrappers.h>
+#include <eikenv.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include "irviewstack.h"
+//For Touch Toolbar
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irsearchResultsview.h"
+#include "irsearchresultsviewcontainer.h"
+#include "irisdswrapper.h"
+#include "irsettings.h"
+#include "irnowplayingwrapper.h"
+#include "irpubsub.h"
+
+#include "hlplch.h"
+#include "irimageconverter.h"
+#include "irlogodownloadengine.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irdialoglauncher.h"
+#include "irdebug.h" //  PC-Lint comments :: SPP
+#include "irfilteredmodel.h"
+
+#include "iractivenetworkobserver.h"
+#include "irnetworkcontroller.h" 
+
+const TInt KStringSize = 20;
+const TInt KLogosSize = 59;
+const TInt KLogosReqFrom = 0;
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::CIRSearchResultsView()
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRSearchResultsView::CIRSearchResultsView():iCallRequestPending(EFalse)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::CIRSearchResultsView " );
+	iSearchReqMade = EFalse;
+    }
+
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::ConstructL()
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRSearchResultsView::ConstructL - Entering " );
+    CIRBaseView::ConstructL( R_IR_SEARCHRESULTS );
+    
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+    TRgb color;
+    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+    				                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_IR_SEARCHRESULTS_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_IR_SEARCHRESULTS_BLACK_TOOLBAR);	
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+	SetCurrentFocus(0);
+	iFilteredIndex = 0;
+	iRequestPending = EFalse;
+    iAddToFav= EFalse;
+	IRLOG_DEBUG( "CIRSearchResultsView::ConstructL - Exiting " );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRSearchResultsView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRSearchResultsView* CIRSearchResultsView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRSearchResultsView::NewL" );
+ 	CIRSearchResultsView* self = CIRSearchResultsView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRSearchResultsView::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSearchResultsView* CIRSearchResultsView::NewLC()
+    {
+    IRLOG_DEBUG( "CIRSearchResultsView::NewLC - Entering" );
+    CIRSearchResultsView* self = new( ELeave ) CIRSearchResultsView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRSearchResultsView::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::~CIRSearchResultsView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRSearchResultsView::~CIRSearchResultsView()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::~CIRSearchResultsView - Entering " );
+	if (iContainer)
+		{
+		AppUi()->RemoveFromViewStack( *this, iContainer);
+		delete iContainer;
+		iContainer = NULL;
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	iFilteredIndex = 0;
+	IRLOG_DEBUG( "CIRSearchResultsView::~CIRSearchResultsView - Exiting " );
+	}
+
+// ---------------------------------------------------------------------------
+// TUid CIRSearchResultsView::Id() const
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRSearchResultsView::Id() const
+    {
+    IRLOG_DEBUG( "CIRSearchResultsView::Id" );
+    return KIRSearchResultsViewID;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::DoActivateL( )
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::DoActivateL( const TVwsViewId& aPrevViewId,
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+    {
+	IRLOG_DEBUG( "CIRSearchResultsView::DoActivateL() started." );
+	if(iUi->IsForeground())
+		{
+		TInt customMessageId = aCustomMessageId.iUid;
+		if(customMessageId == 1)
+			{
+			SetCurrentFocus(0);
+			SetCurrentTopItem(0);
+			iFirstTimeLaunchFlag= ETrue;
+			}
+		aCustomMessageId.iUid = 0;
+
+
+	////////////////////////////////////////////////////////////
+
+	if(iSearchReqMade)
+		{
+		if(iContainer)
+			{
+		    delete iContainer;
+		    iContainer = NULL;
+			}
+	    iSearchReqMade = EFalse;
+		}
+	
+	////////////////////////////////////////////////////////////
+	  	SetStatusPaneTextL();
+	    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+
+
+		ConstructToolbarL();
+        iUi->iPresentViewID = KIRSearchResultsViewID;
+	    if ( !iContainer )
+	        {
+	        iContainer = CIRSearchResultsViewContainer::NewL(ClientRect(),*this);
+		    iContainer->CreateListBoxL();
+	    	AppUi()->AddToViewStackL( *this, iContainer);
+	        }
+	    else
+	        {
+			// we must notify a resource change in order to update the skin context
+			// This is a flaw of CEikFormattedCellListBox
+			iContainer->SetRect(ClientRect());
+	        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+	        AppUi()->AddToViewStackL( *this, iContainer);
+	        }
+
+
+	    iContainer->ActivateL();
+	    iContainer->MakeVisible( ETrue );
+
+
+	    HandleStatusPaneSizeChange();
+    	EnableObserverL(EIRSystemEventObserver);
+   	    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+		}
+		IRLOG_DEBUG( "CIRSearchResultsView::DoActivateL() exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::DoDeactivate()
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::DoDeactivate()
+    {
+    IRLOG_DEBUG( "CIRSearchResultsView::DoDeactivate() - Entering." );
+    if(&(iUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+    if ( iContainer )
+        {
+        if(iContainer->GetListPointer() && iContainer->GetSearchBoxPointer())
+	        {
+	        TBuf<KFindStringLength> findstring = iContainer->GetFindString();
+			iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+			if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0)
+				{
+				if(!iIndex)
+					{
+					TInt currentIndex = iContainer->GetCurrentItemIndex();
+					iFilteredIndex = currentIndex;
+					iContainer->Comparestrings();
+					}
+				SetCurrentFocus(iIndex);
+				}
+			else
+				{
+				TInt currentIndex = iContainer->GetCurrentItemIndex();
+				SetCurrentFocus(currentIndex);
+				}
+		 SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+	     }
+        iUi->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        }
+		// Disable focus of toobar, so that it can't steal it from other views
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+     iFirstTimeLaunchFlag= EFalse;
+     iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+	 IRLOG_DEBUG( "CIRSearchResultsView::DoDeactivate() - Exiting." );
+
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::HandleCommandL( TInt aCommand )
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::HandleCommandL - Entering." );
+	iCommand = aCommand;
+	switch(aCommand)
+		{
+		case EListenCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			
+			iUi->SetListenFromPls(EFalse);
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iListenRequest = ETrue;
+				break;
+				}
+			else
+				{
+				ListenChannelL(GetActualIndex());	
+				}	
+			break;
+			}
+		case ESearchCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iIsSearchAgain = ETrue;
+				HBufC *SearchTitle = StringLoader::LoadLC(R_IRAPP_SEARCH_STRING);
+				_LIT(KNullText,"");
+				RBuf string1;
+				string1.Create(KStringSize);
+				string1.Append(KNullText);
+				ShowQueryDialogL(*SearchTitle,string1);
+				CleanupStack::PopAndDestroy(SearchTitle);
+				string1.Close();
+				}
+			}
+		break;
+
+		//Activate NowPlaying view.
+		case EGotoNowPlayingViewCmd:
+			{
+			iUi->SetHistory(EFalse);
+			iUi->SavePrevIDL(KIRSearchResultsViewID, aCommand);
+			}
+		break;
+
+		case EAddtoFavouritesCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			else if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iAddToFav = ETrue;
+				break;
+				}
+			else
+				{
+				iAddToFav = ETrue;
+				AddToFavouritesL(GetActualIndex(),aCommand);
+				}	
+			break;
+			}
+
+		//Activate settings view.
+		case ESettingsCmd:
+			{
+			iUi->ActivateLocalViewL(KIRSettingsViewId);
+			}
+		break;
+		case EAddStationManuallyCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				iUi->SetEditStation(EFalse);
+				iUi->ActivateLocalViewL(KIRAddManuallyStationViewID);
+				}
+			}
+		break;
+
+		case EAdvertisementUrl:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			else if( iUi->VerifyNetworkConnectivityL() )
+				{
+				break;
+				}
+				if(iUi->iIsdsWrapper->iClickThroughUrl)
+					{
+					if(iUi->iIsdsWrapper->iClickThroughUrl->Length() != 0)
+						{
+						iContainer->OpenUrlL(*iUi->iIsdsWrapper->iClickThroughUrl);
+						}
+					}
+			else
+				{
+				iUi->iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+					(R_IRAPP_ERROR_URL_UNAVAILABLE,ETrue);
+				}
+
+			}
+		break;
+
+		case EHelpCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
+				}
+			break;
+			}
+		case EAknSoftkeyBack:
+        	{
+ 			CIRViewStack& viewStack = iUi->ViewStack();
+
+			if((iUi->IsFirstTime()))
+				{
+				CIRBaseView::HandleCommandL( aCommand );
+				}
+			else
+				{
+				if(viewStack.Count() == 2 )
+					{
+					TUid topView = viewStack.Pop();
+					if(viewStack.Peek()==KIRMainChoiceViewID)
+						{
+						viewStack.PushL(topView);
+						CIRBaseView::HandleCommandL( aCommand );
+						}
+					else
+						{
+						viewStack.Pop();
+						iUi->ActivateLocalViewL(KIRMainChoiceViewID);
+						}
+					}
+				else
+					{
+					viewStack.Pop();
+					iUi->ActivateLocalViewL(KIRMainChoiceViewID);
+					}
+				}
+    		}
+     	break;
+		default:
+			{
+			CIRBaseView::HandleCommandL( aCommand );
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::HandleCommandL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::GetActualIndex().
+// Returns the actual index.
+// ---------------------------------------------------------------------------
+//
+TInt CIRSearchResultsView::GetActualIndex()
+    {
+    TInt currentIndex = iContainer->GetCurrentItemIndex();
+	SetCurrentFocus(currentIndex);
+	TBuf<KFindStringLength> findstring ;
+   if(iContainer->GetSearchBoxPointer())
+	   {
+    	findstring = iContainer->GetFindString();
+    	iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+	   }
+	if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0)
+		{
+		iFilteredIndex = currentIndex;
+		iContainer->Comparestrings();
+		currentIndex = iIndex;
+		}
+	if(iContainer->GetLogoNotSupported())
+		{
+		currentIndex = 	currentIndex +1;
+		}
+	return currentIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::HandleStatusPaneSizeChange()
+    {
+    IRLOG_DEBUG( "CIRSearchResultsView::HandleStatusPaneSizeChange - Entering" );
+    
+    // the client rect is also set here after screen orientation change
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+       }
+    IRLOG_DEBUG( "CIRSearchResultsView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::SetStatusPaneTextL()
+// Sets the title pane of the search results view
+// ---------------------------------------------------------------------------
+//
+
+void CIRSearchResultsView:: SetStatusPaneTextL()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::SetStatusPaneTextL - Entering" );
+	TInt number = iIsdsWrapper->iStationsData->MdcaCount();
+	HBufC* stringholder = NULL;
+
+	CDesCArray* array = new (ELeave) CDesCArrayFlat(1);
+	CleanupStack::PushL( array );
+	array->AppendL( iUi->iSearchString); //First string
+
+	MDesCArray* list = STATIC_CAST(MDesCArray*,array);
+
+	CArrayFix<TInt>* presetCounts = new (ELeave) CArrayFixFlat<TInt>( 2 );
+	CleanupStack::PushL( presetCounts );
+	presetCounts->AppendL( number );
+
+	if(1 == number)
+		{
+		stringholder = StringLoader::LoadLC( R_IRAPP_SEARCHRESULT_TITLETEXT,*list,
+											 *presetCounts, iEikonEnv );
+		}
+	else
+		{
+		stringholder = StringLoader::LoadLC( R_IRAPP_SEARCHRESULTS_TITLETEXT,*list,
+											 *presetCounts, iEikonEnv );
+		}
+	static_cast<CAknTitlePane*>(StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) )->
+						SetTextL( *stringholder );
+						
+	CleanupStack::PopAndDestroy(stringholder);
+	CleanupStack::PopAndDestroy( presetCounts );
+
+	// Pop and delete strings array
+	CleanupStack::PopAndDestroy();
+	IRLOG_DEBUG( "CIRSearchResultsView::SetStatusPaneTextL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+
+
+void CIRSearchResultsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::DynInitMenuPaneL - Entering" );
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_MENU_SEARCHRESULTS)
+			{
+			// Now Playing option
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::DynInitMenuPaneL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// Touch Toolbar
+// Dynamically initialises a tool bar
+// ---------------------------------------------------------------------------
+
+void CIRSearchResultsView::ConstructToolbarL()
+		{
+		IRLOG_DEBUG( "CIRSearchResultsView::ConstructToolbarL - Entering" );
+		SetToolbarItems();
+
+		// Update rect, as changes in toolbar visibility also affect layout.
+		if(iContainer)
+			{
+			iContainer->SetRect( ClientRect() );
+			iContainer->DrawDeferred();
+			}
+			
+		IRLOG_DEBUG( "CIRSearchResultsView::ConstructToolbarL - Exiting" );
+        }
+
+
+// --------------------------------------------------------------------------
+// CIRSearchResultsView::OfferToolbarEventL
+// --------------------------------------------------------------------------
+//
+void CIRSearchResultsView::OfferToolbarEventL ( TInt aCommand )
+  	{
+  	IRLOG_DEBUG( "CIRSearchResultsView::OfferToolbarEventL - Entering" );
+    HandleCommandL(aCommand);
+    IRLOG_DEBUG( "CIRSearchResultsView::OfferToolbarEventL - Exiting" );
+  	}
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::HandleForegroundEventL( TBool aForeground )
+    {
+    IRLOG_DEBUG( "CIRSearchResultsView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+	if ( aForeground )
+		{
+		if ( iContainer )
+			{
+			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+			TRgb color;
+			TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+							                                      EAknsCIQsnTextColorsCG6 );
+			if(color.Gray2()!=0)
+				{
+				CreateAndSetToolbarL(R_IR_SEARCHRESULTS_WHITE_TOOLBAR);
+				}
+			else
+				{
+				CreateAndSetToolbarL(R_IR_SEARCHRESULTS_BLACK_TOOLBAR);	
+				}
+			if( AknLayoutUtils::PenEnabled() && Toolbar() )
+				{
+				Toolbar()->SetToolbarObserver( this );
+				}
+			ConstructToolbarL();
+			iContainer->DrawDeferred();
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::HandleForegroundEventL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::AddToFavouritesL()
+// Adds the selected channel to favorites
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::AddToFavouritesL(TInt aCurrentIndex,TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::AddToFavouritesL - Entering" );
+	//request isds for preset data to be added to favorites
+	iIsdsWrapper->IsdsPresetRequestL(this,aCurrentIndex,aCommand);
+	IRLOG_DEBUG( "CIRSearchResultsView::AddToFavouritesL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::ResponseL()
+// Activates the Stations view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::ResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+    IRLOG_DEBUG( "CIRSearchResultsView::ResponseL() started." );
+    ResetPendingRequests(EFalse);
+	if(iIsdsWrapper->iStationsData->Count())
+		{
+		if(iIsSearchAgain)
+			{
+			iIsSearchAgain = EFalse;
+			if(iContainer)
+				{
+		        AppUi()->RemoveFromViewStack( *this, iContainer );
+		        iContainer->MakeVisible( EFalse );
+		        delete iContainer;
+		        iContainer = NULL;
+				}
+	   		SetCurrentFocus(0);
+			SetCurrentTopItem(0);
+		    iContainer = CIRSearchResultsViewContainer::NewL(ClientRect(),*this);
+		    iContainer->CreateListBoxL();
+		    iContainer->ActivateL();
+		    iContainer->MakeVisible( ETrue );
+		    AppUi()->AddToViewStackL( *this, iContainer);
+		    SetStatusPaneTextL();
+	 		}
+		}
+	else
+		{
+		iIsdsWrapper->GetDialogLauncherInstance()->ShowInformationNoteL( R_IRAPP_RESULTS_NONE,ETrue );
+		iIsdsWrapper->iError = EFalse;
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::ResponseL() exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::PresetResponseL()
+// Called when Preset Data is received
+// Used to Listen to a channel with given preset.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::PresetResponseL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::PresetResponseL - Entering" );
+	ResetPendingRequests(EFalse);
+	if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+	if(!iNowPlayingWrapper->GetWhenUserCancelsIsdsBufferingWaitBar())
+		{
+		iNowPlayingWrapper->SetListenFromIsdsValue(ETrue);
+		iNowPlayingWrapper->ListenToChannelL(aPreset);
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::PresetResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::ErrorL()
+// Handles error Conditions
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::ErrorL - Entering" );
+	if(iIsdsWrapper->iDialogDismissed)
+		{
+		iIsdsWrapper->iDialogDismissed=EFalse;
+		return;
+		}
+	if(iIsdsWrapper->GetListenRequest())
+		{
+		iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+		iNowPlayingWrapper->DestroyWaitDialogL();
+		iIsdsWrapper->SetListenRequest(EFalse);
+		}
+
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;
+		}
+	 if(iIsdsWrapper->iError)
+		{
+		if(iIsdsWrapper->GetDialogLauncherInstance())
+			{
+			iIsdsWrapper->GetDialogLauncherInstance()->ShowInformationNoteL( R_IRAPP_RESULTS_NONE,ETrue );
+			iIsdsWrapper->iError = EFalse;
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::ErrorL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::ListenChannelL()
+// Request for listening to a channel
+// ---------------------------------------------------------------------------
+//
+
+void CIRSearchResultsView:: ListenChannelL(TInt aCurrentIndex)
+ 	{
+	IRLOG_DEBUG( "CIRSearchResultsView::ListenChannelL - Entering" );
+ 	iNowPlayingWrapper->SetView(ESearch);
+ 	iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+ 	iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+ 	iNowPlayingWrapper->SetWhenUserCancelsIsdsBufferingWaitBar(EFalse);
+ 	iNowPlayingWrapper->CreateWaitDialogL();
+	iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+
+	iIsdsWrapper->IsdsListenRequestL(this,aCurrentIndex);
+	IRLOG_DEBUG( "CIRSearchResultsView::ListenChannelL - Exiting" );
+	}
+
+
+void CIRSearchResultsView::ShowQueryDialogL(const TDesC& aTitle, TDes& aBuffer)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::ShowQueryDialogL - Entering" );
+	CAknTextQueryDialog* Dialog =
+	CAknTextQueryDialog::NewL(aBuffer,CAknQueryDialog::ENoTone);
+	Dialog->PrepareLC(R_SEARCH_STRING_DIALOG);
+	Dialog->SetPromptL(aTitle);
+	//return Dialog->RunLD()
+	iSearchValue = Dialog->RunLD();
+
+	//Display a searching Progress Bar
+
+	if(	iSearchValue)
+		{
+		iUi->iSearchString = aBuffer;
+		if( iUi->VerifyNetworkConnectivityL() )
+			{
+			iRequestPending = ETrue;
+			}
+		else
+			{
+			iIsdsWrapper->IsdsSearchRequestL(this,aBuffer);
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::ShowQueryDialogL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::LogoRequestL()
+// called from the container
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::LogoRequestL()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::LogoRequestL - Entering" );
+	if(iContainer)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+		GetLogoDownloadEngine()->SendRequestL(iContainer->GetTempPreset(),this,
+									KLogosReqFrom,KLogosSize,KLogosSize);
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::LogoRequestL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::PresetLogoDownloadedL()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::PresetLogoDownloadedL - Entering" );
+	if(iContainer)
+		{
+		iContainer->PresetLogoDownloadL(aPreset);
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::PresetLogoDownloadedL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsView::PresetLogoDownloadError()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::PresetLogoDownloadError " );
+	//call the API of search results view container
+	if(iContainer)
+		{
+		TRAP_IGNORE(iContainer->HandleLogoErrorL());
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::PresetLogoDownloadErrorL - Exiting" );
+	}
+
+
+void CIRSearchResultsView::AdRequestL()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::AdRequestL - Entering" );
+	if(iContainer)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+		GetLogoDownloadEngine()->SendRequestL(iContainer->GetAdvPreset(),this);
+		}
+
+	IRLOG_DEBUG( "CIRSearchResultsView::AdRequestL - Exiting" );
+	}
+// ---------------------------------------------------------
+// CIRSearchResultsView::SetActualFilteredItemIndex ()
+// Sets the listen is from favourites or not
+// ---------------------------------------------------------
+//
+void CIRSearchResultsView::SetActualFilteredItemIndex(TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::SetListBoxMarkedCount - Entering." );
+	iIndex = aIndex;
+	IRLOG_DEBUG( "CIRSearchResultsView::SetListBoxMarkedCount - Exiting." );
+	}
+
+// ---------------------------------------------------------
+// CIRSearchResultsView::GetFilteredIndex ()
+// returns the iFilteredIndex
+// ---------------------------------------------------------
+//
+TInt CIRSearchResultsView::GetFilteredIndex()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::GetFilteredIndex - Entering." );
+	IRLOG_DEBUG( "CIRSearchResultsView::GetFilteredIndex - Exiting." );
+	return iFilteredIndex;
+	}
+// ---------------------------------------------------------
+// CIRSearchResultsView::GetFirstLaunchFlag ()
+// returns whether is launching for the first time /coming from other view
+// which is activated from this view.
+// ---------------------------------------------------------
+//
+TBool CIRSearchResultsView::GetFirstLaunchFlag()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::GetFirstLaunchFlag - Entering." );
+	IRLOG_DEBUG( "CIRSearchResultsView::GetFirstLaunchFlag - Exiting." );
+	return iFirstTimeLaunchFlag;
+	}
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsView::SetToolbarItems()
+// Setting toolbar items when text is entered
+//  ---------------------------------------------------------------------------
+void CIRSearchResultsView:: SetToolbarItems()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::SetToolbarItems - Entering" );
+	if(Toolbar())
+		{
+		if(iContainer)
+			{
+			Toolbar()->SetToolbarVisibility(ETrue, EFalse);
+			if(iContainer->GetSearchBoxPointer())
+				{
+				TInt currentIndex = iContainer->GetCurrentItemIndex();
+				TBuf<KFindStringLength> findstring ;
+				if(iContainer->GetSearchBoxPointer())
+					{
+					iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+					}
+				TInt filterModelCount = iContainer->GetFilterdModelPointer()->NumberOfItems();	
+				if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0 
+				&& filterModelCount == 0)
+					{
+					Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EAddStationManuallyCmd,ETrue,ETrue);
+					}
+				else
+					{
+					if (currentIndex == 0 && !iContainer->GetLogoNotSupported())  
+						{
+						if (iUi->iIsdsWrapper->GetBannerUrl())
+							{
+							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
+							Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+							Toolbar()->SetItemDimmed(EAddStationManuallyCmd,ETrue,ETrue);
+							}
+						else
+							{
+							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
+							Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+							Toolbar()->SetItemDimmed(EAddStationManuallyCmd,EFalse,ETrue);
+							}
+						}
+					else
+						{
+						Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
+						Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+						Toolbar()->SetItemDimmed(EAddStationManuallyCmd,EFalse,ETrue);
+						}
+					}
+				}
+			Toolbar()->DrawDeferred();	
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::SetToolbarItems - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRSearchResultsView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsView::NotifyActiveNetworkObserversL  - Entering." );
+	IRRDEBUG2("CIRSearchResultsView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() && iContainer)
+				{
+				if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iAddToFav)
+						{
+						iAddToFav = ETrue;
+						AddToFavouritesL(GetActualIndex(),EAddtoFavouritesCmd);
+						}
+					else if(iListenRequest)
+						{
+						iListenRequest=EFalse;
+						ListenChannelL(GetActualIndex());
+						}
+					else if(iSearchValue)
+						{
+						iSearchValue=ETrue;
+						iIsdsWrapper->IsdsSearchRequestL(this,iUi->iSearchString);
+						}
+					else
+						{
+							
+						}
+					}
+				if(iUi->iNetworkController->IsHandingOverConnection())
+					{
+					ResetPendingRequests(EFalse);			
+					}
+
+				}
+			}
+		}
+   	
+	IRRDEBUG2("CIRSearchResultsView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+		
+	IRLOG_DEBUG( "CIRSearchResultsView::NotifyActiveNetworkObserversL  - Exiting." );
+	}
+	
+	
+	
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRSearchResultsView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	iListenRequest  = aValue;
+	iAddToFav = aValue;	
+	iSearchValue = aValue;	
+	}
+	
+// ---------------------------------------------------------
+// CIRSearchResultsView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRSearchResultsView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRSearchResultsView::HandleSystemEventL - Entering");
+	
+
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if((!iCallRequestPending && iCommand==ESearchCmd) ||
+				  (!iCallRequestPending && iCommand==EAddtoFavouritesCmd))
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				if(iUi->iIsdsWrapper->GetListenRequest())
+					{
+					iNowPlayingWrapper->DestroyWaitDialogL();
+					iUi->iIsdsWrapper->SetListenRequest(EFalse);
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if(iCallRequestPending && iCommand==ESearchCmd)
+				{
+				iCallRequestPending = EFalse;
+				if(iSearchValue)
+					{	
+					iIsdsWrapper->IsdsSearchRequestL(this,iUi->iSearchString);
+					}
+				}
+			 else if(iCallRequestPending && iCommand==EAddtoFavouritesCmd)
+				{
+				iCallRequestPending = EFalse;
+				HandleCommandL( iCommand );
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsView::HandleSystemEventL - Exiting." );
+	}	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irsearchresultsviewcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1333 @@
+/*
+* Copyright (c) 2004 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:  Container class for search results view
+*
+*/
+
+
+#include <akniconarray.h>
+#include <aknlists.h>
+#include <aknview.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include <eikenv.h>
+#include <akntoolbar.h>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irsearchresultsview.h"
+#include "irsearchresultsviewcontainer.h"
+#include "irapplication.h"
+
+#include "iraap.hlp.hrh"
+#include "irisdswrapper.h"
+#include "irimageconverter.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irlogodownloadengine.h"
+#include "irfilteredmodel.h"
+#include "mirlistboxarray.h"
+#include "iradvertisinglistbox.h"
+#include "irlayoututils.h"
+
+
+#include <aknsbasicbackgroundcontrolcontext.h> 
+
+#include <apgcli.h>
+
+/** Mime type when opening web browser */
+_LIT8( KIRHtmlMimeType, "text/html" );
+/** Browser prefix: See browser API specification */
+_LIT( KBrowserPrefix, "4 " );
+
+_LIT(KFalse,"false");
+
+
+
+const TInt KSize = 10;
+const TInt KAdvStringSize = 30;
+const TInt KIconSize = 59;
+
+#define KCONTROLSCOUNT 0
+// 
+const TInt KIRNoLogo = -1;
+// Length of list item with known sized elements: (the number of column separators) + 3 (maximum length for icon id)
+const TInt KIRListItemBaseLength = 5;
+const TInt KRange = 999;
+//-----------------------------------------------------------------------------
+//  CIRSearchResultsViewContainer::NewL
+//  Creates a new instance of CIRSearchResultsViewContainer
+//-----------------------------------------------------------------------------
+//
+CIRSearchResultsViewContainer* CIRSearchResultsViewContainer::NewL(const TRect& aRect ,
+						CIRSearchResultsView& aView)
+    {
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::NewL - Entering" );
+	CIRSearchResultsViewContainer* self = CIRSearchResultsViewContainer::NewLC(aRect,aView);
+    CleanupStack::Pop(self);
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::NewL - Exiting." );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+//  CIRSearchResultsViewContainer::NewLC
+//  Creates a new instance of CIRSearchResultsViewContainer and leaves it on the cleanup stack.
+//-----------------------------------------------------------------------------
+//
+CIRSearchResultsViewContainer* CIRSearchResultsViewContainer::NewLC(const TRect& aRect ,
+				CIRSearchResultsView& aView)
+    {
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::NewLC - Entering" );
+    CIRSearchResultsViewContainer* self = new (ELeave) CIRSearchResultsViewContainer(aView);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::NewLC - Exiting." );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::CIRSearchResultsViewContainer()  
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRSearchResultsViewContainer::CIRSearchResultsViewContainer(
+			CIRSearchResultsView &aSearchResultsView):iSearchResultsView(aSearchResultsView) 
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CIRSearchResultsViewContainer" );
+	iFilteredFlag = EFalse;
+	iAdRequestStatusFlag = EFalse;
+	}
+    
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::ConstructL( const TRect& aRect)
+    {
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::ConstructL - Entering" );
+    CreateWindowL();
+    SetRect(aRect);
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(
+    												 KAknsIIDQsnBgScreen,
+    												 aRect, 
+    												 ETrue); 
+    iAdPresent = EFalse;
+        
+    iConverter = CIRImageConverter::NewL();
+	iConverter->EnableAnimations( EFalse );
+	iConverter->SetObserver( this );
+
+	iCurrentItemConverter = CIRImageConverter::NewL();
+	iCurrentItemConverter->SetObserver( this );
+	
+	 // Added For Dynamic Filtering
+    iFilteredModel=new(ELeave) CIRFilteredModel;
+    iFilteredModel->ConstructL();
+   	iListBoxArray = MIRListBoxArray::NewL();
+
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::ConstructL - Exiting" ); 
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::CreateListBoxL()
+// Creates ListBox depending upon the presence of Advertisement
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::CreateListBoxL()
+	{
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateListBoxL - Entering" );
+	if (iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl())
+		{
+		if(iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl()->Length() != 0)
+			{
+			iAdPresent = ETrue;
+			if(iAdvPreset)
+				{
+				delete iAdvPreset;
+				iAdvPreset = NULL;
+				}
+			iAdvPreset=CIRIsdsPreset::NewL();
+			iAdvPreset->SetChannelType(1);
+			iAdvPreset->SetImgUrl(*iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl());
+			iAdRequestStatusFlag = ETrue;
+			CreateCustomListBoxL();
+			iLogoDownloadError	= ETrue;
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			iSearchResultsView.AdRequestL(); //TOBEDONE:AdRequestL() in View
+			}
+		}  
+	else
+		{
+		if(iSearchResultsView.iUi->iIsdsWrapper->iChannelBannerTag)
+			{
+			iSearchResultsView.SetCurrentFocus(0);	
+			iLogoDownloadError	= ETrue;
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			iAdRequestStatusFlag = EFalse;
+			}
+	    iSearchListBox = new (ELeave) CIRAdvertisingListBox;
+		CreateCustomListBoxL();	
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateListBoxL - Exiting" ); 
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::CreateCustomListBoxL()
+// Creates the custom listbox and updates the list according to that
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::CreateCustomListBoxL()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateCustomListBoxL - Entering " );
+	if(iAdPresent)
+		{
+		iSearchListBox = new (ELeave) CIRAdvertisingListBox;
+		}
+
+	iSearchListBox->SetContainerWindowL(*this);
+	// Added For Dynamic Filtering
+	iSearchListBox->ConstructL (this,EAknListBoxSelectionList,iFilteredModel);
+
+	// Construct list.
+	TResourceReader rr;
+	iCoeEnv->CreateResourceReaderLC( rr, R_IR_SEARCHRESULTS_LIST );
+	ConstructFromResourceL( rr );
+	CleanupStack::PopAndDestroy(); // rr
+
+	iItemArray = static_cast<CDesCArray*>( iSearchListBox->Model()->ItemTextArray());
+	iListBoxArray->SetListArray(iItemArray);
+	iFilteredModel->SetListArray(iListBoxArray); 
+
+	if (iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl())
+		{
+		// Added For Dynamic Filtering
+		if(iAdvString)
+			{
+			delete iAdvString;
+			iAdvString = NULL;	
+			}
+		iAdvString = HBufC::NewL(KAdvStringSize);
+		TPtr ptr(iAdvString->Des());
+		_LIT(KDoubleTabSpace,"\t \t ");
+		ptr.Copy(KDoubleTabSpace);
+
+		iFilteredModel->SetAdvFlag(iAdPresent,*iAdvString);
+		iSearchListBox->SetListItemFormat( iAdvString );
+		}
+
+	TInt resultsCount = iSearchResultsView.iIsdsWrapper->iStationsData->Count();
+	CAknIconArray* iconArray = new ( ELeave ) CAknIconArray( resultsCount );
+	CleanupStack::PushL( iconArray );
+	for ( TInt i = 0; i < resultsCount; i++ )
+		{
+		CGulIcon* icon = CreateDefaultIconL();
+        CleanupStack::PushL( icon );
+        iconArray->AppendL( icon );
+	    CleanupStack::Pop( icon );
+		}
+
+	CleanupStack::Pop( iconArray  );
+
+	iSearchListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL( iconArray );
+	iSearchListBox->SetRect( Rect() );
+	iSearchListBox->ActivateL();
+
+	iSearchListBox->CreateScrollBarFrameL( ETrue );
+	iSearchListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+	              CEikScrollBarFrame::EAuto);
+
+	iSearchListBox->SetListBoxObserver( this );    
+
+	// Set the icon array for this list. List takes ownership of the array. 
+	for ( TInt i = 0; i < resultsCount; i++ )
+		{
+		RBuf tempImgUrlStatus;
+		tempImgUrlStatus.Create(KSize);
+		tempImgUrlStatus.Copy(KFalse);
+
+		RBuf tempImgUrl;
+		tempImgUrl.Create(iSearchResultsView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(i).Size());
+		tempImgUrl.Copy(iSearchResultsView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(i));
+
+		if(!(tempImgUrlStatus == tempImgUrl))
+			{
+			iInvalidIconIndices.InsertInOrderL(i);
+			}
+		iNoLogosArray.InsertInOrderL(i);
+		tempImgUrlStatus.Close();
+		tempImgUrl.Close();
+		}
+
+	UpdateSearchResultsViewL();
+	iSearchListBox->ItemDrawer()->FormattedCellData()->SetMarqueeParams
+									(KLoop, KScrollAmount, KScrollDelay, KInterval);
+	iSearchListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+	if(resultsCount>1)
+		{
+		if(iSearchBox)
+			{
+			delete iSearchBox;
+			iSearchBox = NULL;
+			}
+
+		// Added For Dynamic Filtering
+		iSearchBox = CreateFindBoxL(iSearchListBox, iFilteredModel,
+		CAknSearchField::ESearch);
+		SizeChanged();
+		}
+	else
+		{
+		DisableFindBox();	
+		}
+	if( !iAdRequestStatusFlag)
+		{
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateCustomListBoxL - Exiting" ); 		
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::CreateDefaultIconL
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRSearchResultsViewContainer::CreateDefaultIconL()
+    {
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateDefaultIconL - Entering" ); 		
+    CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( bitmap );
+    User::LeaveIfError( bitmap->Create( TSize(), EGray2 ) );
+    CFbsBitmap* mask = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( mask );
+    User::LeaveIfError( mask->Create( TSize(), EGray2 ) );
+    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+    icon->SetBitmapsOwnedExternally( EFalse );
+    CleanupStack::Pop( 2, bitmap );
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateDefaultIconL - Exiting" ); 		
+    return icon;
+    }
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::~CIRSearchResultsViewContainer()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRSearchResultsViewContainer::~CIRSearchResultsViewContainer()
+    {
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::~CIRSearchResultsViewContainer - Entering" );
+    delete iConverter;
+	delete iCurrentItemConverter;
+	iInvalidIconIndices.Close();   
+	iLogosArray.Close();
+	iNoLogosArray.Close();  
+    if(iSearchListBox)
+    	{
+    	delete iSearchListBox;
+    	iSearchListBox = NULL;
+    	}
+     if(iSearchBox)
+		{
+		delete iSearchBox;
+		iSearchBox = NULL;
+		}
+    if(iTempPreset)
+		{
+		delete iTempPreset;
+		iTempPreset = NULL;
+		}
+		
+	if(iAdvPreset)
+		{
+		delete iAdvPreset;
+		iAdvPreset = NULL;
+		}
+	if(iAdBitmap)
+		{
+		delete iAdBitmap;
+		iAdBitmap = NULL;	
+		}
+	if(iBgContext)
+		{
+		delete iBgContext;
+		iBgContext = NULL;	
+		}
+	if(iAdvString)
+		{
+		delete iAdvString;
+		iAdvString = NULL;	
+		}
+
+	iAdPresent = EFalse;
+    if(iListBoxArray )
+	    {
+	    delete iListBoxArray ;
+	    iListBoxArray = NULL;	
+	    }
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::~CIRSearchResultsViewContainer - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// TKeyResponse CIRSearchResultsViewContainer::OfferKeyEventL()
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRSearchResultsViewContainer::OfferKeyEventL( 
+        const TKeyEvent& aKeyEvent, TEventCode aType )
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::OfferKeyEventL - Entering" );
+	TKeyResponse keyResp( EKeyWasNotConsumed );
+	TInt currentIndex = 0;
+
+	switch ( aKeyEvent.iCode )
+		{
+		case EKeyLeftArrow: // fall-through intended here
+		case EKeyRightArrow:
+		case EKeyIncVolume:
+		case EKeyDecVolume:
+			{
+			keyResp = EKeyWasNotConsumed;
+			break;
+			}
+		case EKeyOK:        
+			{
+			currentIndex = GetCurrentItemIndex();
+			if (currentIndex == 0)  
+				{
+				if (iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl() && !iLogoDownloadError)
+					{
+					if(iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl()->Length() != 0)
+						{
+						iSearchResultsView.HandleCommandL(EAdvertisementUrl);
+						}
+					}
+				else
+					{
+					iSearchResultsView.HandleCommandL(EListenCmd);	    
+					}
+				}
+			else
+				{
+				iSearchResultsView.HandleCommandL(EListenCmd);	
+				}
+			break;
+			}
+		default:
+			{
+			if(iSearchListBox)
+				{
+				iSearchResultsView.SetToolbarItems();
+				if ( iSearchBox )
+					{
+					iFilteredFlag = ETrue;
+					keyResp = iSearchBox->OfferKeyEventL( aKeyEvent, aType );
+
+					if( keyResp == EKeyWasNotConsumed )
+						{
+						keyResp = iSearchListBox->OfferKeyEventL( aKeyEvent, aType );
+						}
+
+					CAknFilteredTextListBoxModel* model = 
+					static_cast<CAknFilteredTextListBoxModel*>( iSearchListBox->Model() );
+					model->Filter()->HandleOfferkeyEventL();					
+					TInt filterModelCount = iFilteredModel->NumberOfItems();	
+					if(filterModelCount == 0 && 
+					!(iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl()))
+						{
+						HBufC* noMatchesTextResource = 
+						StringLoader::LoadLC(R_IRAPP_STATIONLIST_NOMATCHES);
+						iSearchListBox->View()->SetListEmptyTextL(*noMatchesTextResource);
+						CleanupStack::PopAndDestroy( noMatchesTextResource );
+						}
+					iSearchBox->GetSearchText(iFindString);
+					if(iFindString.Length()!=0)
+						{
+						if(!iLogoDownloadError && 
+						iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl() 
+						&& filterModelCount > 1 )
+							{
+							iSearchListBox->SetCurrentItemIndex(1);
+							}
+						if(filterModelCount == 1 && 
+						(iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl())&&
+						!iLogoDownloadError)
+							{
+							iSearchListBox->SetCurrentItemIndex(0);
+							iSearchResultsView.SetToolbarItems();
+							}
+						}
+					}
+				}
+			if(	aKeyEvent.iScanCode==EStdKeyBackspace)
+				{
+				if(iSearchBox)
+					{
+					iSearchBox->GetSearchText(iFindString);
+					if(iFindString.Length()==0)
+						{
+						iFilteredFlag = EFalse;
+						}
+					}
+				}
+			iSearchResultsView.SetToolbarItems();
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::OfferKeyEventL - Exiting" );   
+	return keyResp;
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// From class MEikListBoxObserver.
+// List box event handler.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleListBoxEventL - Entering" );
+	TInt currentIndex = 0;
+
+	switch ( aEventType )
+		{
+		case EEventEnterKeyPressed:
+		/**  Keypress event. */
+		case EEventItemDoubleClicked:
+			{
+			currentIndex = GetCurrentItemIndex();
+			if (currentIndex == 0)  
+				{
+				if (iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl() && !iLogoDownloadError)
+					{
+					if(iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl()->Length() != 0)
+						{
+						iSearchResultsView.HandleCommandL(EAdvertisementUrl);
+						}
+					}
+				else
+					{
+					iSearchResultsView.SetCurrentFocus(GetCurrentItemIndex());
+					iSearchResultsView.HandleCommandL(EListenCmd);
+					}
+				}
+			else
+				{
+				iSearchResultsView.SetCurrentFocus(GetCurrentItemIndex());
+				iSearchResultsView.HandleCommandL(EListenCmd);
+				}
+			}
+
+		break;
+		case EEventItemClicked:
+			{
+			iSearchResultsView.SetCurrentFocus(GetCurrentItemIndex());
+			iSearchResultsView.SetToolbarItems();
+			}
+		break;
+		/* fall through */ // pc-lint Warning -e616  
+		default:
+		break;
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleListBoxEventL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::Draw()
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::Draw - Entering" );
+    CWindowGc& gc = SystemGc();
+
+    if(iSearchListBox)
+	    {
+	   	iSearchListBox->SetGC(gc);
+	   	iSearchListBox->SetControlFlag(ETrue);
+	    }
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+    // draw background skin first. 
+ 	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+  	
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+
+	AknsDrawUtils::DrawBackground ( skin, iBgContext, this, gc, TPoint(0,0), 
+			TRect(TPoint(0,0),clientRect.iBr), KAknsDrawParamDefault  );
+	
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::Draw - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetHelpContext()
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::GetHelpContext( TCoeHelpContext& aContext) const
+    {
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetHelpContext - Entering" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_RESULTS  );
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetHelpContext - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::UpdateSearchResultsViewL()
+// updates the search results data to the search results list
+// ---------------------------------------------------------------------------
+//    
+
+void CIRSearchResultsViewContainer::UpdateSearchResultsViewL()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::UpdateSearchResultsViewL - Entering" );
+	
+	//provides logo url in the search results stations
+	TInt stationsCount = iSearchResultsView.iIsdsWrapper->iStationsData->Count();
+	for(TInt i = 0; i < stationsCount; i++)
+		{
+		//check whether logo url exist for the current channel of the search results
+		for(TInt m = 0; m < iNoLogosArray.Count(); m++)
+			{
+			if(i == iNoLogosArray[m])				
+				{
+				//logo should not be displayed in the search results for this particular station
+				HBufC* itemString = FormatItemStringLC( iSearchResultsView.iIsdsWrapper->
+														iStationsData->MdcaPoint(i),KIRNoLogo);
+				iItemArray->AppendL( itemString->Des() );
+				CleanupStack::PopAndDestroy( itemString );
+				break;
+				}
+			}
+			
+		for(TInt n = 0; n < iLogosArray.Count(); n++)
+			{
+			if(i == iLogosArray[n])
+				{
+				//logo should be displayed in the search results for this particular station
+				HBufC* itemString = FormatItemStringLC( iSearchResultsView.iIsdsWrapper->
+														iStationsData->MdcaPoint(i),i);
+				iItemArray->AppendL( itemString->Des() );
+				CleanupStack::PopAndDestroy( itemString );
+				break;
+				}
+			}
+		
+		}
+	if(iFilteredFlag)
+		{
+		TKeyEvent event;
+		TEventCode type = EEventKey;
+		event.iCode = EKeyDownArrow;
+		TBool needRefresh( EFalse );
+		AknFind::HandleFindOfferKeyEventL( event, type, this,
+		iSearchListBox, iSearchBox,EFalse,needRefresh );
+		TInt filterModelCount = iFilteredModel->NumberOfItems();	
+		if(filterModelCount ==1 && iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl())
+			{
+			iSearchListBox->SetCurrentItemIndex(0);
+			}
+		else
+			{
+			if(filterModelCount>1 && iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl() 
+			&& !iLogoDownloadError)
+				{
+				iSearchListBox->SetCurrentItemIndex(1);
+				}
+			}
+		}
+	else
+		{
+		iSearchListBox->HandleItemAdditionL();
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::UpdateSearchResultsViewL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::FormatItemStringLC
+// Formatter for list item strings.
+// ---------------------------------------------------------------------------
+//
+HBufC* CIRSearchResultsViewContainer::FormatItemStringLC( const TDesC& aFirstRow, 
+											 TInt aIconId )
+    {
+ 	_LIT(KItemFormatStringWithLogo, "%d%S"); 
+	_LIT(KItemFormatStringWithOutLogo, "%S");   
+
+    TInt length = KIRListItemBaseLength + aFirstRow.Length() ;
+    HBufC* itemString = HBufC::NewLC( length );
+    
+    TPtrC formatStringWithIcon( KItemFormatStringWithLogo );
+    TPtrC formatStringWithoutIcon( KItemFormatStringWithOutLogo );
+
+    if( aIconId >= 0 && aIconId <= KRange )
+        {
+        itemString->Des().Format( KItemFormatStringWithLogo, aIconId, &aFirstRow);
+        }
+    else 
+        {
+        itemString->Des().Format( KItemFormatStringWithOutLogo, &aFirstRow);
+        }
+    
+    return itemString;
+    }
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetCurrentItemIndex()
+// returns the index of the currently selected item
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRSearchResultsViewContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetCurrentItemIndex" );
+	return iSearchListBox->CurrentItemIndex();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetListBoxTopIndex()
+// returns the index of the top item
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRSearchResultsViewContainer::GetListBoxTopIndex() const
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetListBoxTopIndex" );
+	return iSearchListBox->View()->TopItemIndex () ;
+	}
+
+
+
+//----------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRSearchResultsViewContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CountComponentControls - Entering" );
+	TInt count(KCONTROLSCOUNT);
+	if(iSearchListBox)
+		{
+		count++;
+		}
+	if(iSearchBox)
+		{
+		count++;
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CountComponentControls - Exiting" );
+	return count;
+	}
+//----------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRSearchResultsViewContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::ComponentControl - Exiting" );
+	switch(aIndex)
+		{
+		case 0:
+			{
+			if(iSearchListBox)
+			return iSearchListBox;
+			}
+		case 1:
+			{
+			if(iSearchBox)
+			return iSearchBox;	
+			}
+		default:
+			return NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsViewContainer::SizeChanged(const TRect& aRect)
+// Responds to changes to the size and position of the contents of this control.
+// ---------------------------------------------------------------------------
+//
+
+void CIRSearchResultsViewContainer::SizeChanged()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::SizeChanged - Entering" );
+	if(iSearchResultsView.iUi->IsLandscapeOrientation())
+		{
+		if(iSearchListBox && iSearchBox && iLandScapeCount ==0)
+			{
+	   		AknFind::HandlePopupFindSizeChanged(this,iSearchListBox,iSearchBox);
+	   		iLandScapeCount ++;
+			}
+		}
+	if(iSearchListBox && iSearchBox)
+		{
+	    AknLayoutUtils::LayoutControl(iSearchListBox,  Rect(),
+            AKN_LAYOUT_WINDOW_list_gen_pane(1));
+        AknLayoutUtils::LayoutControl(iSearchBox,  Rect(),
+            AKN_LAYOUT_WINDOW_find_pane);
+		}
+		
+	else
+		{
+		if(iSearchListBox)
+			{
+			AknLayoutUtils::LayoutControl(iSearchListBox, Rect(),
+            	AKN_LAYOUT_WINDOW_list_gen_pane(0));
+			}
+		}
+		
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+	TRect parentRectSize(TPoint(0,0),clientRect.iBr);
+	
+	if ( iBgContext )
+		{
+		iBgContext->SetRect(parentRectSize);
+		}
+	DrawNow();
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::SizeChanged - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsViewContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::HandleResourceChange(TInt aType)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+    // application layout change request notification
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        // reconstruct controls if needed
+        if(iSearchListBox && iSearchBox)
+	        {
+	   		AknFind::HandlePopupFindSizeChanged(this,iSearchListBox,iSearchBox);
+	        SizeChanged();
+	        }
+        }
+	iSearchResultsView.SetToolbarItems();
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleResourceChange - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsViewContainer::HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
+// from base class MIRImageConverterObserver
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::HandleImageConversionEventL( 
+					MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
+                                                           TInt aId, 
+                                                           TInt aError )
+	{
+	iError=aError;
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleImageConversionEventL - Entering" );
+	if(aError == KErrNotSupported && iRequestForAdvertisement)
+		{
+		iLogoDownloadError	= ETrue;
+		iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+		}
+	if ( !aError && aEvent == MIRImageConverterObserver::EIRImageConversionCompleted )
+		{
+		IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleImageConversionEventL - Entering if" );
+		if(iRequestForAdvertisement)
+			{
+	        CFbsBitmap* bitmap = NULL;
+	        CFbsBitmap* mask = NULL;
+	        
+	        iCurrentItemConverter->TransferBitmapOwnership( bitmap, mask );
+	        if ( bitmap && mask )
+		        {
+	      	    CleanupStack::PushL( bitmap );
+	        	CleanupStack::PushL( mask );
+		      	CGulIcon* icon = CGulIcon::NewLC();
+	            
+	            icon->SetBitmap( bitmap );
+	            icon->SetMask( mask );
+	            icon->SetBitmapsOwnedExternally( ETrue );
+	            
+	            iSearchListBox->SetAdvertisementIconL( icon );
+	            
+	            CleanupStack::Pop( icon );
+	            icon->SetBitmapsOwnedExternally( EFalse );
+	            CleanupStack::Pop( mask );
+	            CleanupStack::Pop( bitmap );
+		        }
+			iRequestForAdvertisement = EFalse;
+			iLogoDownloadError	= EFalse;
+			}
+		else
+			{
+			if ( iInvalidIconIndices.Count() )
+				{
+				iIconIndex = iInvalidIconIndices[0];
+				iLogosArray.InsertInOrderL(iInvalidIconIndices[0]);
+				if(iNoLogosArray.Count())
+					{
+					iNoLogosArray.Remove(iNoLogosArray.FindInOrder(iIconIndex));
+					}
+				CArrayPtr<CGulIcon>* tempIconArray = iSearchListBox->ItemDrawer()->
+				FormattedCellData()->IconArray();
+				if(aError == KErrNone)
+					{
+					if(aId == KErrUnknown)
+						{
+						if ( iInvalidIconIndices.Count() )
+							{
+							iInvalidIconIndices.Remove( 0 );
+							}					
+						}
+					CFbsBitmap* bitmap = NULL;
+					CFbsBitmap* mask = NULL;
+					aId == KErrUnknown ? iConverter->TransferBitmapOwnership( bitmap, mask ) :
+					iCurrentItemConverter->TransferBitmapOwnership( bitmap, mask );
+					if ( bitmap && mask )
+						{
+			      	    CleanupStack::PushL( bitmap );
+			        	CleanupStack::PushL( mask );
+						CGulIcon* icon = CGulIcon::NewLC();
+						icon->SetBitmap( bitmap );
+						icon->SetMask( mask );
+						icon->SetBitmapsOwnedExternally( EFalse );
+
+						tempIconArray->InsertL( iIconIndex, icon );
+						CleanupStack::Pop( icon );
+
+						if(( iIconIndex+1 )<tempIconArray->Count())
+							{
+							icon = tempIconArray->At( iIconIndex+1 );
+							tempIconArray->Delete( iIconIndex+1 );
+							delete icon;
+							}
+			            CleanupStack::Pop( mask );
+			            CleanupStack::Pop( bitmap );
+						}
+					iSearchListBox->DrawNow();
+					}
+				}
+			iItemArray->Reset();
+			if(iAdvString)
+			{
+			if(!iLogoDownloadError)
+			iFilteredModel->SetItemAtZero(ETrue,*iAdvString);
+			}
+			UpdateSearchResultsViewL();
+			if ( iInvalidIconIndices.Count() && aId == KErrUnknown )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}	
+			}
+		}
+	else if ( !aError && aEvent == MIRImageConverterObserver::EIRFrameConversionCompleted )
+		{
+		IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleImageConversionEventL - Entered elseif" );
+		iLogoDownloadError	= EFalse;
+		iRequestForAdvertisement = EFalse;
+		CGulIcon* icon = iSearchListBox->AdvertisementIcon(); 
+		if ( !icon )
+			{
+			icon = CGulIcon::NewLC();
+			iSearchListBox->SetAdvertisementIconL( icon );
+			CleanupStack::Pop( icon );
+			}
+		icon->SetBitmap( const_cast<CFbsBitmap*>(iCurrentItemConverter->Bitmap()));
+		icon->SetMask(const_cast<CFbsBitmap*>(iCurrentItemConverter->Mask() ));
+		icon->SetBitmapsOwnedExternally( ETrue );
+		DrawDeferred();
+		}
+	else
+		{
+
+		}
+	if(iAdPresent)
+		{
+		if ( iInvalidIconIndices.Count() )
+				{
+				iRequestForAdvertisement = EFalse;
+				iSearchResultsView.SetCurrentFocus(1);	
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+		}
+	iAdPresent = EFalse;
+	if(iSearchResultsView.iUi->ActiveView() == KIRSearchResultsViewID)
+		{
+		iSearchResultsView.SetToolbarItems();
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::HandleImageConversionEventL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::PresetLogoDownloadL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::PresetLogoDownloadL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::PresetLogoDownloadL - Entering" );
+	if (iAdPresent && iAdRequestStatusFlag)
+		{
+		if (iSearchResultsView.iUi->iIsdsWrapper->GetBannerUrl()->Length() != 0)
+			{
+			*iAdvPreset = *aPreset;
+			if(iAdvPreset->GetLogoData()!=KNullDesC8 )
+				{
+				iFilteredModel->SetAdvFlag(iAdPresent,*iAdvString);
+				iCurrentItemConverter->SetDataL(aPreset->GetLogoData());
+				iCurrentItemConverter->StartL( IRLayoutUtils::AdvertisementSizeL(), KErrUnknown );
+				iRequestForAdvertisement = ETrue;	
+				iAdRequestStatusFlag = EFalse;
+				}
+		}
+		return ;
+		}
+	if(aPreset->GetLogoData()!=KNullDesC8)
+		{
+		iRequestForAdvertisement = EFalse;	
+		iError=KErrNone;
+		iConverter->SetDataL(aPreset->GetLogoData());
+		if(iError==KErrNone)
+			{
+			iConverter->StartL( TSize(KIconSize, KIconSize), KErrUnknown );
+			}
+		if(iError!=KErrNone)
+			{
+			if ( iInvalidIconIndices.Count() )
+				{
+				iInvalidIconIndices.Remove( 0 );
+				}	
+			if ( iInvalidIconIndices.Count() )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+			}
+
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::PresetLogoDownloadL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsViewContainer::HandleLogoErrorL()
+// called from the iSearchResultsView when the logo is not downloaded
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::HandleLogoErrorL()
+	{
+	if(iAdRequestStatusFlag)
+		{
+		iLogoDownloadError	= ETrue;
+		iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+		iAdRequestStatusFlag = EFalse;
+		iAdPresent = EFalse;
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}
+	else
+		{
+		if ( iInvalidIconIndices.Count() )
+			{
+			iInvalidIconIndices.Remove( 0 );
+			}	
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRSearchResultsViewContainer::StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt aId )
+// used to convert the images depending the index passed
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::StartConvertL( CIRImageConverter& aConverter,
+				 TInt /*aIndex*/, TInt /*aId*/ )
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::StartConvertL - Entering" );
+	iResult = 0;
+	RBuf url;
+	url.Create(iSearchResultsView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(
+					iInvalidIconIndices[0]).Size());
+	url.Copy(iSearchResultsView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(iInvalidIconIndices[0]));
+
+	iSearchResultsView.iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->
+				GetHttpDataProvider()->GetLogoDownloadEngine()->GetCacheLogoL(url,iResult);
+	
+	if((iResult == 0) || (iResult == -1))//not available in the cache or cache is stale/not useable
+		{
+		//code to download the logo
+		if(iTempPreset)
+			{
+			delete iTempPreset;
+			iTempPreset = NULL;
+			}
+		iTempPreset=CIRIsdsPreset::NewL();
+		iTempPreset->SetChannelType(1);
+		iTempPreset->SetImgUrl(url);
+		iSearchResultsView.LogoRequestL();
+		}
+	else if(iResult == 1)//cache is useable
+		{
+		iError=KErrNone;
+		aConverter.SetDataL(iSearchResultsView.iUi->iIsdsWrapper->GetISDSInstance()->
+		GetDataProvider()->GetHttpDataProvider()->GetLogoDownloadEngine()->SendCacheLogo());
+		if(iError==KErrNone)
+			{
+			aConverter.StartL( TSize(KIconSize, KIconSize), KErrUnknown );
+			}
+		if(iError!=KErrNone)
+			{
+			if ( iInvalidIconIndices.Count() )
+				{
+				iInvalidIconIndices.Remove( 0 );
+				}	
+			if ( iInvalidIconIndices.Count() )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+			}
+		}
+	url.Close();
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::StartConvertL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::OpenUrlL( const TDesC& aHttpLink)
+// used to connect to the advertisement url.
+// ---------------------------------------------------------------------------
+//
+void CIRSearchResultsViewContainer::OpenUrlL( const TDesC& aHttpLink )
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::OpenUrlL - Entering" );
+
+	TDataType htmlDataType( KIRHtmlMimeType );
+	TUid uid;
+
+	RApaLsSession ls;
+	User::LeaveIfError( ls.Connect() );
+	CleanupClosePushL( ls );
+
+	// Get UID of the browser.
+	TInt retVal = ls.AppForDataType( htmlDataType, uid );
+
+	if ( retVal == KErrNone && uid != KNullUid )
+		{
+		// We must check if the browser is already open and if it is, 
+		// switch its currently opened file to the correct URL.
+		TApaTaskList taskList( iEikonEnv->WsSession() );
+		TApaTask task = taskList.FindApp( uid );
+		if ( task.Exists() )
+			{
+			HBufC8* url8 = HBufC8::NewLC( aHttpLink.Length() );
+			url8->Des().Copy( aHttpLink );
+			task.SendMessage( TUid::Uid( 0 ), url8->Des() );
+			task.BringToForeground();
+			CleanupStack::PopAndDestroy( url8 );
+			}
+		else
+			{
+			TThreadId threadId;
+			HBufC* newUrl = HBufC::NewLC( aHttpLink.Length() + KBrowserPrefix().Length() );
+			newUrl->Des().Append( KBrowserPrefix );
+			newUrl->Des().Append( aHttpLink );
+			ls.StartDocument( newUrl->Des(), uid, threadId );
+			CleanupStack::PopAndDestroy( newUrl );
+			}
+		}
+	CleanupStack::PopAndDestroy( &ls );
+
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::OpenUrlL - Exiting" );
+
+	}
+//----------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::CreateFindBoxL()
+// creates the Find box when any character is Pressed
+//----------------------------------------------------------------------------
+// 
+CAknSearchField* CIRSearchResultsViewContainer::CreateFindBoxL(CEikListBox* aListBox,
+CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle)
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateFindBoxL - Entering" );
+	CAknSearchField* findbox = NULL;
+	if (aListBox && aModel)
+		{
+		// Gets pointer of CAknFilteredTextListBoxModel.
+		// Added For Dynamic Filtering
+		 iFilteredModel = STATIC_CAST( CIRFilteredModel*, aModel );
+		// Creates FindBox.
+		findbox = CAknSearchField::NewL( *this, aStyle, NULL,
+		KAknExListFindBoxTextLength);
+		CleanupStack::PushL(findbox);
+		// Creates CAknListBoxFilterItems class.
+		iFilteredModel->CreateFilterL( aListBox, findbox );
+		//Filter can get by model->Filter()
+		CleanupStack::Pop(findbox); // findbox
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::CreateFindBoxL - Exiting" );
+	return findbox;
+	}
+//----------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::DisableFindBox()
+// Deletes the findbox
+//----------------------------------------------------------------------------
+// 
+void CIRSearchResultsViewContainer::DisableFindBox()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::DisableFindBox - Entering" );
+	if (iSearchBox)
+		{
+		iFilteredModel->RemoveFilter();
+		// Important to set the find box non-focusing before
+		// deleting it, otherwise the focus changes triggered
+		// by the removal of the control from stack will focus
+		// the find box which is under deletion
+		iSearchBox->SetNonFocusing();
+		delete iSearchBox;
+		iSearchBox = NULL;
+		// Inform list box that find is hidden
+		static_cast<CAknColumnListBoxView*>(iSearchListBox->View())->SetFindEmptyListState(EFalse);
+		SizeChanged();
+		}
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::DisableFindBox - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Comparestrings
+// Function called to compare the filtered string inthe Itemarray
+// ---------------------------------------------------------------------------
+//
+void  CIRSearchResultsViewContainer::Comparestrings()
+		{
+		IRLOG_DEBUG( "CIRSearchResultsViewContainer::Comparestrings - Entering" );
+		TInt count = iFilteredModel->NumberOfItems();
+		if(count)
+			{
+			if((count==1) && iAdvPreset && !iLogoDownloadError)
+				{
+					return;
+				}
+			else
+				{
+				TPtrC16 filteredString = iFilteredModel->ItemText (iSearchResultsView.GetFilteredIndex());
+				for(TInt i=0;i<iItemArray->Count();i++)
+					{
+					TPtrC16 matchString=iItemArray->MdcaPoint(i);
+					if(filteredString==matchString)
+						{
+						iSearchResultsView.SetActualFilteredItemIndex(i);
+						break;
+						}
+
+					}
+					
+				}
+			}
+		IRLOG_DEBUG( "CIRSearchResultsViewContainer::Comparestrings - Exiting" );
+		}
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetListPointer()
+// returns pointer to Listbox.
+// ---------------------------------------------------------------------------
+//
+CIRAdvertisingListBox* CIRSearchResultsViewContainer::GetListPointer()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetListPointer" );
+	return iSearchListBox;	
+	}
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetSearchBoxPointer()
+// returns the search box pointer.
+// ---------------------------------------------------------------------------
+//
+CAknSearchField* CIRSearchResultsViewContainer::GetSearchBoxPointer()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetSearchBoxPointer" );
+	return 	iSearchBox;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetFilterdModelPointer()
+// returns pointer to filtered model.
+// ---------------------------------------------------------------------------
+//
+CIRFilteredModel* CIRSearchResultsViewContainer::GetFilterdModelPointer()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetListPointer" );
+	return iFilteredModel;	
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetFindString()
+// returns the string in the findbox
+// ---------------------------------------------------------------------------
+//
+TDesC CIRSearchResultsViewContainer::GetFindString()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetListBoxCount " );
+	return iFindString;	
+	}
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer:: GetAdvPreset()
+// returns the advertisement preset 
+// ---------------------------------------------------------------------------
+ CIRIsdsPreset* CIRSearchResultsViewContainer::GetAdvPreset()
+	 {
+	 IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetAdvPreset " );
+	 return iAdvPreset;
+	 }
+ 
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer:: GetTempPreset()
+// returns the temporary preset 
+// ---------------------------------------------------------------------------
+ CIRIsdsPreset* CIRSearchResultsViewContainer::GetTempPreset()
+	 {
+	 IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetTempPreset " );
+	 return iTempPreset;
+	 }
+//----------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::GetLogoNotSupported() 
+// returns whether the advertisement is supported by the sdk r not
+//----------------------------------------------------------------------------
+// 	
+TBool CIRSearchResultsViewContainer::GetLogoNotSupported()
+	{
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetLogoNotSupported - Entering" );
+	IRLOG_DEBUG( "CIRSearchResultsViewContainer::GetLogoNotSupported - Exiting" );
+	return iLogoDownloadError;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irsettingscontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2006-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:  
+*
+*/
+
+
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <akntitle.h> 
+
+#include "irsettingscontainer.h"
+#include "irsettingsview.h"
+#include "irdebug.h" //  PC-Lint comments :: SPP
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CIRSettingsContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRSettingsContainer* CIRSettingsContainer::NewL(CIRSettingsView& aSettingsView)
+    {
+ 	IRLOG_DEBUG( "CIRSettingsContainer::NewL" );
+ 	CIRSettingsContainer* self = CIRSettingsContainer::NewLC(aSettingsView);
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRSettingsContainer::NewL - Exiting" );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSettingsContainer* CIRSettingsContainer::NewLC(CIRSettingsView& aSettingsView )
+    {
+    	IRLOG_DEBUG( "CIRSettingsView::NewLC - Entering" );
+    	CIRSettingsContainer* self = new ( ELeave ) CIRSettingsContainer(aSettingsView);
+		CleanupStack::PushL( self );
+		self->ConstructL();
+		IRLOG_DEBUG( "CIRSettingsContainer::NewLC - Exiting" );
+		return self;
+	
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSettingsContainer::CIRSettingsContainer( CIRSettingsView& aSettingsView ) 
+    : CIRCommonSettingsContainer(), iSettingsView(aSettingsView)
+    {
+    IRLOG_DEBUG( "CIRSettingsContainer::CIRSettingsContainer" );
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsContainer::ConstructL()
+    {
+    	IRLOG_DEBUG( "CIRSettingsContainer::ConstructL - Entering." );
+    	BaseConstructL();
+    	IRLOG_DEBUG( "CIRSettingsContainer::ConstructL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRSettingsContainer::~CIRSettingsContainer()
+    {
+    IRLOG_DEBUG( "CIRSettingsContainer::~CIRSettingsContainer" );
+    }
+
+// ---------------------------------------------------------------------------
+// From CAknSettingItemList.
+// ---------------------------------------------------------------------------
+//
+CAknSettingItem* CIRSettingsContainer::CreateSettingItemL( TInt aSettingId )
+    {
+    	IRLOG_DEBUG( "CIRSettingsContainer::CreateSettingItemL - Entering." );
+		CAknSettingItem* item = CIRCommonSettingsContainer::CreateSettingItemL( aSettingId );
+		IRLOG_DEBUG( "CIRSettingsContainer::CreateSettingItemL - Exiting." );
+		return item;
+
+    }
+    
+// ---------------------------------------------------------
+// CIRSettingsContainer::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CIRSettingsContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+    {
+    	IRLOG_DEBUG( "CIRSettingsContainer::OfferKeyEventL - Entering." );
+		TKeyResponse keyResp(EKeyWasNotConsumed);
+		
+		switch (aKeyEvent.iCode)
+			{
+			case EKeyIncVolume:
+			case EKeyDecVolume:
+			case EKeyLeftArrow:
+			case EKeyRightArrow:
+				{
+				// Don't consume the volume keys
+				keyResp = EKeyWasNotConsumed;
+				break;
+				}
+			default:
+				{
+				keyResp = CAknSettingItemList::OfferKeyEventL(aKeyEvent, aType);
+				break;
+				}
+		}
+		IRLOG_DEBUG( "CIRSettingsContainer::OfferKeyEventL - Exiting." );
+		return keyResp; 
+    }
+    
+// ---------------------------------------------------------------------------
+// Called when an item is being edited.
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsContainer::EditItemL( TInt aIndex, TBool aCalledFromMenu )
+    {
+    IRLOG_DEBUG( "CIRSettingsContainer::EditItemL - Entering." );
+		
+		CIRCommonSettingsContainer::EditItemL( aIndex, aCalledFromMenu );
+		IRLOG_DEBUG( "CIRSettingsContainer::EditItemL - Entering." );
+			
+    }
+
+// ---------------------------------------------------------------------------
+// Sets window faded
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsContainer::SetFaded(TBool aFaded) const
+    {
+    IRLOG_DEBUG( "CIRSettingsContainer::SetFaded - Entering." );
+    Window().SetFaded(aFaded, RWindowTreeNode::EFadeIncludeChildren);
+    IRLOG_DEBUG( "CIRSettingsContainer::SetFaded - Exiting." );
+    }
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irsettingsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,304 @@
+/*
+* Copyright (c) 2006-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:  View class for Settings
+*
+*/
+
+
+#include <akntitle.h>
+#include "irsettingscontainer.h"
+#include "irsettingsview.h"
+#include "ircommon.h"
+#include "irdebug.h"
+#include <internetradio.rsg>
+#include "irui.h"
+#include "irnetworkcontroller.h"
+#include <stringloader.h>
+#include "irviewstack.h"
+#include "ir.hrh"
+#include "irnowplayingwrapper.h"
+
+
+// -----------------------------------------------------------------------------
+// CIRSettingsView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRSettingsView* CIRSettingsView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRSettingsView::NewL" );
+ 	CIRSettingsView* self = CIRSettingsView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRSettingsView::NewL - Exiting" );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSettingsView* CIRSettingsView::NewLC( )
+    {
+	IRLOG_DEBUG( "CIRSettingsView::NewLC - Entering" );
+	CIRSettingsView* self = new ( ELeave ) CIRSettingsView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	IRLOG_DEBUG( "CIRSettingsView::NewLC - Exiting" );
+	return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRSettingsView::CIRSettingsView()
+    {
+    IRLOG_DEBUG( "CIRSettingsView::CIRSettingsView" );
+    }
+    
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRSettingsView::ConstructL - Entering" );
+	BaseConstructL();
+	IRLOG_DEBUG( "CIRSettingsView::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRSettingsView::~CIRSettingsView()
+    {
+    IRLOG_DEBUG( "CIRSettingsView::~CIRSettingsView" );
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for the view id
+// ---------------------------------------------------------------------------
+//
+TUid CIRSettingsView::Id() const
+    {
+    IRLOG_DEBUG( "CIRSettingsView::Id" );
+    return KIRSettingsViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// View activation
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsView::DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+					 const TDesC8& aCustomMessage )
+    {
+	IRLOG_DEBUG( "CIRSettingsView::DoActivateL - Entering." );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	CIRSettingsViewBase::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+	if(appUi->IsLandscapeOrientation())
+		{
+		StatusPane()->SwitchLayoutL(R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL);
+		}
+	else
+		{
+		StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT);
+		}
+	SetTitleL(R_IRAPP_SETTINGS);
+	if(aCustomMessageId==TUid::Uid(1))
+		{
+		return;
+		}
+	HandleViewStackL( );
+	IRLOG_DEBUG( "CIRSettingsView::DoActivateL - Exiting." );
+    }
+    
+// ---------------------------------------------------------------------------
+// HandleForegroundEventL()
+// Handles changes in keyboard focus when an application switches to foreground
+// ---------------------------------------------------------------------------
+// 
+     
+void CIRSettingsView::HandleForegroundEventL( TBool aForeground )
+{
+	IRLOG_DEBUG( "CIRSettingsView::HandleForegroundEventL - Entering." );
+	CIRSettingsViewBase::HandleForegroundEventL(aForeground);
+	IRLOG_DEBUG( "CIRSettingsView::HandleForegroundEventL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// HandleViewStackL()
+// Handles the view stack
+// ---------------------------------------------------------------------------
+// 
+ 
+void CIRSettingsView::HandleViewStackL( )
+    {
+    IRLOG_DEBUG( "CIRSettingsView::HandleViewStackL - Entering." );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+    CIRViewStack& viewStack = appUi->ViewStack();
+    
+    if( viewStack.Peek() == Id() )
+        {
+        viewStack.Pop( );
+        }
+    else if( appUi->ActiveView() != Id() )
+        {
+        viewStack.PushL( appUi->ActiveView() );
+        }
+    else
+        {
+        // DONE
+        }
+    IRLOG_DEBUG( "CIRSettingsView::HandleViewStackL - Exiting." );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// View deactivation
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsView::DoDeactivate()
+    {
+	IRLOG_DEBUG( "CIRSettingsView::DoDeactivate - Entering." );
+	CIRSettingsViewBase::DoDeactivate();
+	IRLOG_DEBUG( "CIRSettingsView::DoDeactivate - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// System event handler
+// ---------------------------------------------------------------------------
+//
+
+void CIRSettingsView::HandleSystemEventL(TIRSystemEventType aEventType)
+    {
+    IRLOG_DEBUG( "CIRSettingsView::HandleSystemEventL - Entering." );
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if (iContainer)
+				{
+				static_cast<CIRSettingsContainer*>(iContainer)->SetFaded(ETrue);
+				Cba()->AddCommandSetToStackL(R_IR_SOFTKEYS_EXIT);
+				Cba()->DrawDeferred();
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if (iContainer)
+				{
+				//do not unfade the window if menu or dialog is displayed
+				if(!AppUi()->IsDisplayingMenuOrDialog() && AppUi()->IsForeground()) 
+					{
+					static_cast<CIRSettingsContainer*>(iContainer)->SetFaded(EFalse);
+					}
+				Cba()->RemoveCommandFromStack(0, 0);
+				Cba()->RemoveCommandFromStack(2, EAknSoftkeyExit);
+				Cba()->DrawDeferred();
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+		IRLOG_DEBUG( "CIRSettingsView::HandleSystemEventL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Command handler.
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsView::HandleCommandL( TInt aCommand )
+    {
+    IRLOG_DEBUG( "CIRSettingsView::HandleCommandL - Entering." );
+    CIRUi* appUi = static_cast<	CIRUi*>(AppUi());
+
+		switch ( aCommand )
+			{
+			case EGotoNowPlayingViewCmd:
+				{
+				appUi->SetHistory(EFalse);
+				appUi->SavePrevIDL(KIRSettingsViewId, aCommand);
+				break; 			
+				}
+
+			case EAknSoftkeyBack:
+		  	case EIRBack:
+		   		{
+	    		CIRViewStack& viewStack = appUi->ViewStack();
+	        	// Check if Back Stepping Service consumes the command.
+	        	if ( !static_cast< CIRUi* >( AppUi() )->ForwardBackCommandToBsWrapperL() )
+	                {
+	                // Command not consumed by Back Stepping Service, handle here.
+	                appUi->ActivateLocalViewL( viewStack.Peek() );
+	                }
+		   		}
+     		break;
+         	
+			default:
+				CIRSettingsViewBase::HandleCommandL( aCommand );
+			break;
+			}
+		IRLOG_DEBUG( "CIRSettingsView::HandleCommandL - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// Constructs new container
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsView::CreateContainerL()
+    {
+    	IRLOG_DEBUG( "CIRSettingsView::CreateContainerL - Entering." );
+       	//TInt defaultAccessPoint = 0; Just for PC-Lint commets :: SPP
+   		if( !iContainer )
+		{
+		iContainer = CIRSettingsContainer::NewL(*this);
+		}
+   		IRLOG_DEBUG( "CIRSettingsView::CreateContainerL - Exiting." );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRSettingsView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRSettingsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRSettingsView::DynInitMenuPaneL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_MENU_SETTINGS)
+			{				
+			// Now Playing option
+			if(appUi->iNowPlayingWrapper->iPlaying)
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRSettingsView::DynInitMenuPaneL - Exiting" );
+	}
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationdirectorycontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,382 @@
+/*
+* Copyright (c)  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:  Station Directory container.
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations , 
+*  Handled Single/Double tapping on the list itmes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Tues April 04 16:40:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for retaining of focus & Page retaining
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+// SYSTEM INCLUDE FILES
+#include <aknlists.h>
+#include <aknview.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <eikenv.h>
+#include <eikfrlbd.h>
+
+
+// INCLUDE FILES
+#include "irbaseview.h"
+#include "iraap.hlp.hrh"
+#include "irui.h"
+#include "irstationdirectorycontainer.h"
+#include "irstationdirectoryview.h"
+#include "irdocument.h"
+#include "irdebug.h"
+#include "ircommon.h"
+#include "ir.hrh"
+
+// LITERALS
+const TInt KMenubufMaxLength = 522;
+#define KCONTROLSCOUNT 0
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CIRStationDirectoryContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationDirectoryContainer* CIRStationDirectoryContainer::NewL( 
+			CIRStationDirectoryView& aStationsDirView, const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRStationDirectoryContainer::NewL" );
+    CIRStationDirectoryContainer* self = CIRStationDirectoryContainer::NewLC(
+    				 aStationsDirView, aRect );
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRStationDirectoryContainer::NewL - Exiting" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationDirectoryContainer::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationDirectoryContainer* CIRStationDirectoryContainer::NewLC( 
+			CIRStationDirectoryView& aStationsDirView, const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRStationDirectoryContainer::NewLC" );
+    CIRStationDirectoryContainer* self = new ( ELeave ) CIRStationDirectoryContainer(
+    												aStationsDirView);
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    IRLOG_DEBUG( "CIRStationDirectoryContainer::NewLC - Exiting" );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryContainer::CIRStationDirectoryContainer(
+					CIRStationDirectoryView& aStationsDirView ):iStationDirView(aStationsDirView)
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::CIRStationDirectoryContainer" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationDirectoryContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::ConstructL( const TRect& aRect )
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::ConstructL - Entering" );
+    CreateWindowL();
+    
+    iListbox = new(ELeave) CAknDoubleStyleListBox;
+    iListbox->SetContainerWindowL(*this);
+    iListbox->ConstructL(this,EAknListBoxSelectionList);
+
+	iItemArray = static_cast<CDesCArray*>( iListbox->Model()->ItemTextArray());
+    PopulateStationListL();
+
+    iListbox->SetCurrentItemIndex(iStationDirView.GetCurrentFocus());
+	iListbox->HandleItemAdditionL( );
+
+    
+    SetRect( aRect );
+    DrawNow();
+       
+    iListbox->CreateScrollBarFrameL( ETrue );
+    iListbox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+                                              CEikScrollBarFrame::EAuto);
+    
+    iListbox->SetListBoxObserver( this );  
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryContainer::~CIRStationDirectoryContainer()
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::~CIRStationDirectoryContainer - Entering" );
+	if(iListbox)
+		{
+		delete iListbox;
+		iListbox = NULL;
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::~CIRStationDirectoryContainer - Exiting" );
+    }
+//----------------------------------------------------------------------------
+// CIRStationDirectoryContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRStationDirectoryContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::CountComponentControls - Entering" );
+	TInt count(KCONTROLSCOUNT);
+	if(iListbox)
+		{
+		count++;
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::CountComponentControls - Exiting" );
+	return count;
+	}
+//----------------------------------------------------------------------------
+// CIRStationDirectoryContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRStationDirectoryContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::ComponentControl - Exiting" );
+	switch(aIndex)
+		{
+		case 0:
+			{
+			if(iListbox)
+			return iListbox;
+			}
+		default:
+			return NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things 
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRStationDirectoryContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+					 TEventCode aType )
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::OfferKeyEventL - Entering" );
+	if((aType)==EEventKey)
+		{
+		if((aKeyEvent.iCode)==EKeyDevice3)
+			{
+			iStationDirView.SetCurrentFocus(iListbox->CurrentItemIndex());
+			iStationDirView.HandleCommandL(ESelectCmd);
+			return EKeyWasConsumed;
+			}
+		else
+			{
+			return iListbox->OfferKeyEventL(aKeyEvent, aType );
+			}
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::OfferKeyEventL - Exiting" );
+	return EKeyWasNotConsumed;
+	}
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::GetHelpContext( TCoeHelpContext& aContext) const
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::GetHelpContext - Entering" );
+    aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_DISCOVER  );
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::GetHelpContext - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// From class MEikListBoxObserver.
+// List box event handler.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::HandleListBoxEventL - Entering" );
+	switch ( aEventType )
+		{
+		case EEventEnterKeyPressed: // Keypress event
+		case EEventItemDoubleClicked:
+			{
+			iStationDirView.SetCurrentFocus(iListbox->CurrentItemIndex());
+			iStationDirView.HandleCommandL(ESelectCmd);
+			}
+		break;
+		default:
+		break;	
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::HandleListBoxEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Polulates listbox
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::PopulateStationListL( )
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::PopulateStationListL - Entering" );
+    if(!(iItemArray->Count()))
+	    {
+	    //Fetches the data to be displayed in this view from resource.
+		CreateDiscoverStationDataL(R_IRAPP_STAT_DIR_GENRE,R_IRAPP_STAT_DIR_GENRE_EXPAND);
+		CreateDiscoverStationDataL(R_IRAPP_STAT_DIR_LANGUAGE,R_IRAPP_STAT_DIR_LANGUAGE_EXPAND);
+		CreateDiscoverStationDataL(R_IRAPP_STAT_DIR_COUNTRY,R_IRAPP_STAT_DIR_COUNTRY_EXPAND);
+		CreateDiscoverStationDataL(R_IRAPP_STAT_DIR_TOP,R_IRAPP_STAT_DIR_TOP_EXPAND);
+	    }
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::PopulateStationListL - Exiting" );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CreateDiscoverStationDataL(TInt aTitle,TInt aDescription)
+// Fetches the data from stringloader that should be displayed
+// and sets it to the listbox.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::CreateDiscoverStationDataL(TInt aTitle,TInt aDescription)
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::CreateDiscoverStationDataL - Entering" );
+	_LIT(KTabSpace,"\t");
+	
+	HBufC *titleData = StringLoader::LoadLC(aTitle);
+    HBufC *descriptionData = StringLoader::LoadLC(aDescription);
+    TBuf<KMenubufMaxLength> menubuf;
+   	menubuf.Append(KTabSpace);
+  	menubuf.Append(*titleData);
+  	menubuf.Append(KTabSpace);
+  	menubuf.Append(*descriptionData);
+  	iItemArray->AppendL(menubuf);
+  	CleanupStack::PopAndDestroy(descriptionData);
+	CleanupStack::PopAndDestroy(titleData);
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::CreateDiscoverStationDataL - Exiting" );
+	}
+    
+// ---------------------------------------------------------------------------
+// CIRSearchResultsViewContainer::Draw()
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::Draw - Entering" );
+	
+    CWindowGc& gc = SystemGc();
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushColor( KRgbBlue );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    
+	IRLOG_DEBUG( "CIRStationDirectoryContainer::Draw - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationDirectoryContainer::GetCurrentItemIndex()
+// returns the index of the currently selected item
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRStationDirectoryContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRStationDirectoryContainer::GetCurrentItemIndex" );
+	return iListbox->CurrentItemIndex();
+    }
+    
+// -----------------------------------------------------------------------------
+// CIRStationDirectoryContainer::SizeChanged()
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::SizeChanged()
+    {  
+    iListbox->SetRect(Rect());
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryContainer::HandleResourceChange(TInt aType)
+	{
+	IRRDEBUG( "CIRStationDirectoryContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+	iStationDirView.RefreshView();
+	IRRDEBUG( "CIRStationDirectoryContainer::HandleResourceChange - Exiting" );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationdirectoryview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,692 @@
+/*
+* Copyright (c)  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:  Station Directory View
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations , 
+*  Handled Single/Double tapping on the list itmes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Tues April 04 16:40:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for retaining of focus & Page retaining
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+// SYSTEM INCLUDE FILES
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <psserv.h>
+#include <hlplch.h>
+#include <eikenv.h>
+#include <internetradio.rsg>
+
+// INCLUDE FILES
+#include "irdebug.h"
+#include "irui.h"
+#include "irbaseview.h"
+#include "irstationdirectoryview.h"
+#include "irstationdirectorycontainer.h"
+#include "ircategoryview.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irviewstack.h"
+#include "irisdswrapper.h"
+#include "irnowplayingwrapper.h"
+#include "hlplch.h"
+#include "irsettings.h"
+#include "irnetworkcontroller.h" 	//Added for demo of ALR //TO DO::Remove after demo
+#include "iractivenetworkobserver.h"
+#include "irtopstationsview.h"
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryView::CIRStationDirectoryView( ):iCallRequestPending(EFalse)
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::CIRStationDirectoryView" );
+	}
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::ConstructL - Entering" );
+    CIRBaseView::ConstructL( R_IR_STATION_DIRECTORY );
+	SetCurrentFocus(0);
+	iRequestPending = EFalse;
+	IRLOG_DEBUG( "CIRStationDirectoryView::ConstructL - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationDirectoryView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationDirectoryView* CIRStationDirectoryView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRStationDirectoryView::NewL" );
+    CIRStationDirectoryView* self = CIRStationDirectoryView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRStationDirectoryView::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationDirectoryView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryView* CIRStationDirectoryView::NewLC()
+    {
+ 	IRLOG_DEBUG( "CIRStationDirectoryView::NewLC" );
+   	CIRStationDirectoryView* self = new( ELeave ) CIRStationDirectoryView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRStationDirectoryView::NewLC - Exiting" );
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryView::~CIRStationDirectoryView()
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::~CIRStationDirectoryView - Entering" );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        delete iContainer;
+        iContainer = NULL;
+        }
+	IRLOG_DEBUG( "CIRStationDirectoryView::~CIRStationDirectoryView - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRStationDirectoryView::Id() const
+    {
+    IRLOG_DEBUG( "CIRStationDirectoryView::Id" );
+    return KIRStationDirectoryViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleStatusPaneSizeChange()
+    {
+ 	IRLOG_DEBUG( "CIRStationDirectoryView::HandleStatusPaneSizeChange - Entering" );
+   	CIRBaseView::HandleStatusPaneSizeChange();
+
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+	IRLOG_DEBUG( "CIRStationDirectoryView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+					 const TDesC8& aCustomMessage )
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::DoActivateL - Entering" );
+	
+	TInt customMessageId = aCustomMessageId.iUid;
+	if(customMessageId == 1)
+		{
+		SetCurrentFocus(0);	
+		}
+	aCustomMessageId.iUid = 0;
+	iUi->iPresentViewID = KIRStationDirectoryViewId;
+	
+    if ( !iContainer )
+        {
+	    iContainer = CIRStationDirectoryContainer::NewL( *this, ClientRect() );
+	    iContainer->SetMopParent( this );
+  		AppUi()->AddToViewStackL( *this, iContainer );
+        }
+    else
+        {
+        iContainer->SetRect( ClientRect( ) );
+        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+        }
+
+    iContainer->ActivateL( );
+    iContainer->MakeVisible( ETrue );
+
+    SetTitleL(R_IRAPP_STAT_DIR_TITLE);
+    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    HandleStatusPaneSizeChange();
+    
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+    EnableObserverL(EIRSystemEventObserver);
+	IRLOG_DEBUG( "CIRStationDirectoryView::DoActivateL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DoDeactivate()
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::DoDeactivate - Entering" );
+    if(&(iUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+	IRLOG_DEBUG( "CIRStationDirectoryView::DoDeactivate - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleCommandL( TInt aCommand )
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::HandleCommandL - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	CIRViewStack& viewStack = appUi->ViewStack();	
+    switch ( aCommand )
+        {
+        case ESelectCmd:
+	        {
+			if( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			else if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				}
+			else
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				iRequestIssued = ETrue;
+				DoCategoryRequestL();
+				}
+	        }
+        break;
+
+        case EGotoNowPlayingViewCmd:
+			{
+			appUi->SetHistory(EFalse);
+			appUi->SavePrevIDL(KIRStationDirectoryViewId, aCommand); 			
+			}
+        break;
+		//Activate settings view.	
+        case ESettingsCmd:
+        	{
+			AppUi()->ActivateLocalViewL(KIRSettingsViewId);		
+			}
+		break;
+
+        case EHelpCmd:
+	        {
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+	       		HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+	       							AppUi()->AppHelpContextL());
+				}
+			}
+		break;
+		case EAknSoftkeyBack:
+			{
+			if((appUi->IsFirstTime()))
+				{
+				CIRBaseView::HandleCommandL( aCommand );	                
+				}
+			else
+				{
+				if(viewStack.Count() == 2 )
+					{
+					TUid topView = viewStack.Pop();
+					if(viewStack.Peek()==KIRMainChoiceViewID)
+						{
+						viewStack.PushL(topView);
+						CIRBaseView::HandleCommandL( aCommand );	                
+						}
+					else
+						{
+						viewStack.Pop();
+						appUi->ActivateLocalViewL(KIRMainChoiceViewID);	
+						}
+					}
+
+				else if(viewStack.Count() >2 )
+					{
+					CIRBaseView::HandleCommandL( aCommand );	
+					}
+				else
+					{
+					viewStack.Pop();
+					appUi->ActivateLocalViewL(KIRMainChoiceViewID);
+					}
+				}
+			}
+	    break;
+        default:
+            {
+            CIRBaseView::HandleCommandL( aCommand );
+            }
+        break;
+        }
+	IRLOG_DEBUG( "CIRStationDirectoryView::HandleCommandL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleForegroundEventL( TBool aForeground )
+    {
+	IRLOG_DEBUG( "CIRStationDirectoryView::HandleForegroundEventL - Entering" );
+
+    CIRBaseView::HandleForegroundEventL( aForeground );
+	if ( aForeground )
+		{
+		if ( iContainer )
+			{
+			iContainer->DrawDeferred();
+			}
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::HandleForegroundEventL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationDirectoryView::DoCategoryRequestL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DoCategoryRequestL()
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::DoCategoryRequestL - Entering" );
+	iLoadingCancelled = EFalse;
+	TInt currentIndex = iContainer->GetCurrentItemIndex();
+	if(currentIndex >= 0)
+		{
+		switch (currentIndex)
+			{
+			// if the browse by genre's is selected.
+			case EGenreData:
+				{
+		        iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::EGenre);
+				iUi->iCategoryView->iCategoryReqMade = ETrue;		        
+				}
+				break;
+			// if the browse by language's is selected.	
+			case ELanguageData:
+				{
+		        iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::ELanguages);
+		        iUi->iCategoryView->iCategoryReqMade = ETrue;
+				}
+				break;
+			// if the browse by country is selected.	
+			case ECountryData:
+				{
+		        iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::ECountries);
+		        iUi->iCategoryView->iCategoryReqMade = ETrue;
+				}
+				break;
+			// if top station's is selected.	
+			case ETopStationData:
+				{
+		        iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::Ehotpicks);
+		        iUi->iTopStationsView->iResultsReqMade = ETrue;
+				}
+				break;
+			default:
+				{
+				//No implementation
+				}
+				break;
+			}
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::DoCategoryRequestL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::ResponseL()
+// Activates the SearchResults view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ResponseL( CIRIsdsPreset* /*aPreset*/ )
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::ResponseL - Entering" );
+	ResetPendingRequests(EFalse);
+	if(!iLoadingCancelled)
+		{
+		TInt currentIndex = iContainer->GetCurrentItemIndex();
+		if(currentIndex >= 0)
+			{
+			switch (currentIndex)
+				{
+				// if the browse by genre's is selected.
+				case EGenreData:
+					{
+					iUi->iCategoryViewTitleType = EGenreData;
+					ActivateCategoryViewL();
+					}
+					break;
+				// if the browse by language's is selected.	
+				case ELanguageData:
+					{
+					iUi->iCategoryViewTitleType = ELanguageData;
+					ActivateCategoryViewL();
+					}
+					break;
+				// if the browse by country is selected.	
+				case ECountryData:
+					{
+					iUi->iCategoryViewTitleType = ECountryData;
+					ActivateCategoryViewL();
+					}
+					break;
+				// if top station's is selected.	
+				case ETopStationData:
+					{
+					iUi->iCategoryViewTitleType = ETopStationData;
+		            TBuf8<2> dummy;
+		 			TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRTopStationsViewId);
+					if(iUi->IsForeground())
+						{
+						AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+						iUi->iActivationPending = KNullUid ;	
+						}
+					else
+						{
+						iUi->iActivationPending =KIRTopStationsViewId;	
+						}
+					}
+					break;
+				default:
+					{
+					//No implementation
+					}
+					break;
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::ResponseL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::ActivateCategoryViewL()
+// Activates the Category view 
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ActivateCategoryViewL()
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::ActivateCategoryViewL - Entering" );
+	CIRUi* appUi = static_cast<	CIRUi*>(AppUi());
+	TBuf8<2> dummy;
+	TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRCategoryViewId);
+	
+	if(appUi->IsForeground())
+		{
+		AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+		appUi->iActivationPending = KNullUid ;	
+		}
+	else
+		{
+		appUi->iActivationPending =KIRCategoryViewId;	
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::ActivateCategoryViewL - Exiting" );
+	
+	}
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::PresetResponseL()
+// Issues Request to listen to a particular channel 
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::PresetResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::PresetResponseL - Entering" );
+	
+		//No Implementation Required
+
+	IRLOG_DEBUG( "CIRStationDirectoryView::PresetResponseL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::ErrorL()
+// Handles the errors from Isds 
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::ErrorL - Entering" );
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;	
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::ErrorL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::DynInitMenuPaneL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_STATION_DIRECTORY_MENU)
+			{				
+			// Now Playing option
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::DynInitMenuPaneL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRStationDirectoryView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::NotifyActiveNetworkObserversL - Entering" );
+	IRRDEBUG2("CIRStationDirectoryView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+			if(iContainer)
+				{
+				if(iRequestPending)
+					{
+					iRequestIssued = ETrue;
+					SetCurrentFocus(iContainer->GetCurrentItemIndex());
+					iRequestPending=EFalse;
+					DoCategoryRequestL();
+					}
+				
+				if(iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iRequestIssued)
+						{
+						iRequestIssued=EFalse;
+						SetCurrentFocus(iContainer->GetCurrentItemIndex());
+						DoCategoryRequestL();
+						}
+					}
+				}
+			}
+		}
+		
+	IRLOG_DEBUG( "CIRStationDirectoryView::NotifyActiveNetworkObserversL - Exiting" );
+	IRRDEBUG2("CIRStationDirectoryView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+
+	}
+	
+	
+	
+	
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRStationDirectoryView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	iRequestIssued  = aValue;
+	}
+	
+// ---------------------------------------------------------
+// CIRStationDirectoryView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRStationDirectoryView::HandleSystemEventL - Entering");
+	
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if(!iCallRequestPending && iCommand==ESelectCmd)
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if(iCallRequestPending && iCommand==ESelectCmd)
+				{
+				iCallRequestPending = EFalse;
+				HandleCommandL( iCommand );
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRStationDirectoryView::HandleSystemEventL - Exiting." );
+	}	
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::IssueSearchRequestL()
+// Issues a search request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::RefreshView()
+	{
+	IRLOG_DEBUG( "CIRStationDirectoryView::IssueSearchRequestL - Entering" );
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+	IRLOG_DEBUG( "CIRStationDirectoryView::IssueSearchRequestL - Exiting" );
+	}
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationinfocontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,988 @@
+/*
+* Copyright (c) 2007-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:  Container class for the detail view
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Fri Aug 1 16:17:00 2008 by Rohit
+*  Ref:
+*  Fixed bug - Once StationInfo view is opened for logo station, on listen
+*  StationInfo view was shown above NowPlayingView toolbar
+*
+*  Version: 3, Thu Jul 3 16:30:00 2008 by Rohit
+*  Ref:
+*  Codescanner fixes
+*
+*  Version: 2, Thu May 22 19:20:00 2008 by Rohit
+*  Ref:
+*  Implemented StationInfo landscape view. Adjusted line spacings per UI spec.
+*
+*  Version: 1, Wed Apr 30 16:15:00 2008 by Rohit
+*  Ref:
+*  Created. Implemented StationInfo potrait view
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+// INCLUDE FILES
+
+#include <s32std.h>
+#include <eikenv.h>
+#include <eikapp.H>
+#include <eikappui.H>
+#include <stringloader.h>
+#include <aknutils.h>                     		// AknLayoutUtils
+/* no need to change to lower case */
+#include <AknsBasicBackgroundControlContext.h> 	// CAknsBasicBackgroundControlContext
+#include <aknsskininstance.h> 					// MAknsSkinInstance
+#include <aknsdrawutils.h>                		// AknsDrawUtils
+#include <eikrted.h>                      		// CEikRichTextEditor
+#include <txtrich.h>                      		// CRichText
+#include <internetradio.mbg>
+#include <internetradio.rsg>
+
+#include "irdebug.h"
+#include "irstationinfocontainer.h"
+#include "irstationinfoview.h"   		           		 
+#include "irisdspreset.h"
+#include "irchannelserverurl.h"
+#include "irui.h"
+#include "irimageconverter.h"
+#include "irstationinfopicture.h"
+
+
+// CONSTANT DECLARATIONS
+_LIT(Kspace," ");
+_LIT(KHttp,"http://");
+const TInt KZero    = 0;
+const TInt KOne     = 1;
+const TInt KTwo    	= 2;
+const TInt KBufferSize	= 128;
+#define KSI_USERDEFINED 0 	// Indicates that the station is of type user defined
+#define KSI_ISDS_DEFINED 1
+const TInt KHttpLength 					= 7;
+
+const TInt KLINES_COUNT 				= 50;
+const TInt KTEXT_LIMIT  				= 3000;
+
+const TInt KLOGO_WIDTH  				= 200;
+const TInt KLOGO_HEIGHT  				= 200;
+
+const TInt KRICHTEXT_ORIGIN  			= 0;
+const TInt KRICHTEXT_LENGTH  			= 0;
+
+const TInt KPARA_LINE_SPACING  			= 25;	// twips
+const TInt KPARA_SPACING  				= 45;	// twips
+
+const TInt KLEFT_MARGIN_POTRAIT     	= 20;	// twips
+const TInt KRIGHT_MARGIN_POTRAIT    	= 10;	// twips
+
+const TInt KLEFT_MARGIN_LANDSCAPE_LOGO   = 0;	// twips
+const TInt KLEFT_MARGIN_LANDSCAPE_NOLOGO = 10;	// twips
+const TInt KLEFT_LOGO_MARGIN_LANDSCAPE   = 20;	// twips
+const TInt KRIGHT_MARGIN_LANDSCAPE  = 10;		// twips
+
+const TInt KHEADINGTEXT_HEIGHT_DECREMENT = -5;	// twips
+const TInt KNORMALTEXT_HEIGHT_DECREMENT  = 5;	// twips
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::CIRStationInfoContainer
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CIRStationInfoContainer::CIRStationInfoContainer( CIRStationInfoView* aStationInfoView )
+  : iBgContext( NULL ),
+    iEditorLogo( NULL ),
+    iEditor( NULL ),
+    iBitmap(NULL), iBitmapMask(NULL),
+    iStationInfoView( aStationInfoView ),
+    iConverter(NULL), iError(KErrNone),
+    iImageDrawn( EFalse )
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::CIRStationInfoContainer" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::ConstructL( const TRect& aRect )
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::ConstructL - Entering" );
+    CreateWindowL();
+    SetRect( aRect );
+
+    // background context for mop object
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(
+        KAknsIIDQsnBgAreaMain, Rect(), EFalse );
+
+   	iEditor = CreateEditorL();
+   	iEditorLogo = CreateEditorL();
+	iEditorLogo->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+															CEikScrollBarFrame::EOff );
+	iConverter = CIRImageConverter::NewL();
+	iConverter->EnableAnimations( ETrue );
+	iConverter->SetObserver( this );
+
+    IRLOG_DEBUG( "CIRStationInfoContainer::ConstructL - Exiting" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::CreateEditorL
+// Instantiates RichTextEditor
+// -----------------------------------------------------------------------------
+//
+CEikRichTextEditor* CIRStationInfoContainer::CreateEditorL()
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::CreateEditorL - Entering" );
+    CEikRichTextEditor* editor = new (ELeave) CEikRichTextEditor;
+    CleanupStack::PushL( editor );
+
+    editor->SetContainerWindowL(*this);
+    editor->ConstructL(this, KLINES_COUNT, KTEXT_LIMIT, CEikEdwin::EReadOnly );
+
+    editor->RichText()->Reset();
+
+    // create vertical scrollbar
+    editor->CreateScrollBarFrameL();
+    editor->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+    												   CEikScrollBarFrame::EAuto );
+	editor->ActivateL();
+    CleanupStack::Pop(editor); // editor
+
+    IRLOG_DEBUG( "CIRStationInfoContainer::CreateEditorL - Exiting" );
+    return editor;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationInfoContainer* CIRStationInfoContainer::NewL( const TRect& aRect,
+														CIRStationInfoView* aView )
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::NewL - Entering" );
+    CIRStationInfoContainer* self = new ( ELeave ) CIRStationInfoContainer( aView);
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    CleanupStack::Pop( self );
+
+	IRLOG_DEBUG( "CIRStationInfoContainer::NewL - Exiting" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::~CIRStationInfoContainer
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationInfoContainer::~CIRStationInfoContainer()
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::~CIRStationInfoContainer - Entering" );
+	if (iBgContext)
+		{
+	 	delete iBgContext;
+	 	iBgContext = NULL;
+		}
+	if (iEditor)
+		{
+	    iEditor->RichText()->Reset();
+	   	delete iEditor;
+    	iEditor = NULL;
+		}
+	if (iEditorLogo)
+		{
+   	    iEditorLogo->RichText()->Reset();
+	   	delete iEditorLogo;
+    	iEditorLogo = NULL;
+		}
+	if( iBitmap )
+		{
+		delete iBitmap;
+		iBitmap = NULL;
+		}
+	if( iBitmapMask )
+		{
+		delete iBitmapMask;
+		iBitmapMask = NULL;
+		}
+	if( iConverter )
+		{
+		delete iConverter;
+		iConverter = NULL;
+		}
+	iStationInfoView = NULL;	// not owned
+	IRLOG_DEBUG( "CIRStationInfoContainer::~CIRStationInfoContainer - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::CountComponentControls
+// From base class CCoeControl
+// Returns number of controls contained in a compound control
+// -----------------------------------------------------------------------------
+//
+TInt CIRStationInfoContainer::CountComponentControls() const
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::CountComponentControls" );
+    return iEditor ? 2 : 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::ComponentControl
+// From base class CCoeControl
+// Returns an indexed component of a compound control
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CIRStationInfoContainer::ComponentControl( TInt aIndex ) const
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::ComponentControl - Entering" );
+
+    CCoeControl* ctl = NULL;
+
+    switch(aIndex)
+	    {
+    	case 0:
+	    	ctl = iEditor;
+	    	break;
+	    case 1:
+	    	ctl = iEditorLogo;
+	    	break;
+	    default:
+	    	break;
+    	}
+    IRLOG_DEBUG( "CIRStationInfoContainer::ComponentControl - Exiting" );
+    return ctl;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::OfferKeyEventL
+// From base class CCoeControl
+// Handles key events
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CIRStationInfoContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+													  TEventCode aType )
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::OfferKeyEventL" );
+
+	TKeyResponse res = EKeyWasNotConsumed;
+
+    if (aType == EEventKey)
+    {
+        if (aKeyEvent.iCode == EKeyDownArrow)
+        {
+            iEditor->MoveCursorL (TCursorPosition::EFPageDown, EFalse);
+            res = EKeyWasConsumed;
+        }
+        else if (aKeyEvent.iCode == EKeyUpArrow)
+        {
+            iEditor->MoveCursorL (TCursorPosition::EFPageUp, EFalse);
+            res = EKeyWasConsumed;
+        }
+        else
+        {
+            res = iEditor->OfferKeyEventL(aKeyEvent, aType);
+        }
+    }
+    return res;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::MopSupplyObject
+// From base class CCoeControl
+// Retrieves an object of the same type as that encapsulated in aId.
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CIRStationInfoContainer::MopSupplyObject( TTypeUid aId )
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::MopSupplyObject - Entering" );
+    if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+
+    IRLOG_DEBUG( "CIRStationInfoContainer::MopSupplyObject - Exiting" );
+    return CCoeControl::MopSupplyObject( aId );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::SizeChanged
+// From base class CCoeControl
+// Responds to changes to the size and position of the contents of this control.
+// -----------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::SizeChanged()
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Entering" );
+    if( !iEditor )
+	    {
+		IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Exiting" );
+	    return;
+	    }
+	if ( IsStationSupportsLogo() && !iBitmap)	// logo supported but not downloaded yet
+		{
+		IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Exiting" );
+		return;
+		}
+
+	if( iClientRect != Rect() )
+		{
+		TRAPD( err, ReloadStationInformationL() );
+		if(err != KErrNone)
+			{
+			IRLOG_WARNING( "CIRStationInfoContainer::SizeChanged - ReloadStationInformationL() failed" );
+			}
+		}
+	IRLOG_DEBUG( "CIRStationInfoContainer::SizeChanged - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoContainer::Draw
+// From base class CCoeControl
+// Draws the control.
+// -----------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::Draw - Entering" );
+	SystemGc();
+
+    // draw background from skin
+    AknsUtils::SkinInstance();				// PC Lint #529 Fix
+    AknsDrawUtils::ControlContext( this );	// PC Lint #529 Fix
+    IRLOG_DEBUG( "CIRStationInfoContainer::Draw - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoContainer::StartConvertStationLogoL()
+// Issues logo scaling request
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::StartConvertStationLogoL( )
+	{
+	IRLOG_DEBUG( "CIRStationInfoContainer::StartConvertStationLogoL - Entering" );
+	if ( IsStationSupportsLogo() )
+		{
+		iConverter->SetDataL( iStationInfoView->iStationPreset->GetLogoData() );
+		if(iError==KErrNone)
+			{
+			TInt channelId = iStationInfoView->iStationPreset->GetId();
+			iConverter->StartL( TSize(KLOGO_WIDTH, KLOGO_HEIGHT), channelId );
+			}
+		}
+	IRLOG_DEBUG( "CIRStationInfoContainer::StartConvertStationLogoL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoContainer::HandleImageConversionEventL()
+// From MIRImageConverterObserver
+// Invoked after image scaling is completed.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::HandleImageConversionEventL(
+	MIRImageConverterObserver::TIRImageConversionEvent /*aEvent*/,TInt /*aId*/,TInt aError)
+	{
+	IRLOG_DEBUG( "CIRStationInfoContainer::HandleImageConversionEventL - Entering" );
+	// Retreive scaled bitmaps
+	iError=aError;
+	if(iError!=KErrNone)
+		{
+		return;
+		}
+
+	iConverter->TransferBitmapOwnership( iBitmap, iBitmapMask );
+
+	TRect rectParent = Rect();
+	if( !iBitmap && !iBitmapMask )
+		{
+		IRLOG_WARNING("CIRStationInfoContainer::HandleImageConversionEventL- LogoScaling failed");
+		}
+	
+	else if( iClientRect != rectParent )
+		{
+		ReloadStationInformationL();
+		}	
+
+	// Potrait view with logo
+	else if( rectParent.Height() >= rectParent.Width() )
+		{
+		DisplayStationLogoL( iEditor, EFalse );
+		iEditorLogo->DrawNow();
+
+		TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+		TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect();
+		iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(),
+							rectParent.Height() ) );
+
+		iEditor->DrawDeferred();
+		}
+	// Landscape view with logo
+	else
+		{
+		DisplayStationLogoL( iEditorLogo, ETrue );
+
+	    TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+	    TInt	width1 = rectParent.Width()/2, height1 = rectParent.Height();
+	    iEditorLogo->SetExtent( point1, TSize( width1, height1 ) );
+
+	    iEditorLogo->DrawDeferred();
+	    iEditor->DrawDeferred();
+		}
+
+	IRLOG_DEBUG( "CIRStationInfoContainer::HandleImageConversionEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoContainer::ReloadStationInformationL()
+// Renders the logo and text in the view as per the current resolution
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::ReloadStationInformationL()
+	{
+	IRLOG_DEBUG( "CIRStationInfoContainer::ReloadStationInformationL - Entering" );
+
+	// save current size to avoid SizeChanged multiple refreshes (optimize perf.)
+	iClientRect = Rect();
+
+	iEditor->RichText()->Reset();
+    CreateRichTextDataL();
+    iImageDrawn = EFalse;
+
+	//
+	// Potrait view with/without logo
+	//
+	TRect   rectParent = Rect();
+	if( rectParent.Height() >= rectParent.Width() )
+		{
+		DisplayStationLogoL( iEditor, EFalse );
+		iEditorLogo->DrawNow();
+		iEditor->RichText()->InsertL( iEditor->RichText()->DocumentLength(),
+									  CEditableText::EParagraphDelimiter);
+		DisplayStationInfoL( EFalse );
+
+	    iEditor->DrawDeferred();
+
+		TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+		TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect();
+		iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(),
+							rectParent.Height() ) );
+		}
+
+	//
+	// Landscape view without logo
+	//
+	else if( !IsStationSupportsLogo() )
+		{
+		iEditorLogo->MakeVisible( EFalse );
+		iEditorLogo->DrawNow();
+
+		DisplayStationInfoL( ETrue );
+
+		TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+		TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect();
+		iEditor->SetExtent( point1, TSize( rectParent.Width() - scrollBarRect.Width(),
+							rectParent.Height() ) );
+
+	    iEditor->DrawDeferred();
+		}
+
+	//
+	// Landscape view with logo
+	//
+	else
+		{
+		DisplayStationLogoL( iEditorLogo, ETrue );
+		DisplayStationInfoL( ETrue );
+
+	    TPoint	point1( rectParent.iTl.iX, rectParent.iTl.iY );
+	    TInt	width1 = rectParent.Width()/2, height1 = rectParent.Height();
+	    iEditorLogo->SetExtent( point1, TSize( width1, height1 ) );
+
+	    TPoint	point2( rectParent.iTl.iX+width1, rectParent.iTl.iY );
+	    TInt	width2 = rectParent.Width()/2, height2 = rectParent.Height();
+        TRect scrollBarRect = iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect();
+        iEditor->SetExtent( point2, TSize( width2 - scrollBarRect.Width(), height2 ) );
+
+	    iEditor->DrawDeferred();
+	    iEditorLogo->DrawDeferred();
+		}
+
+    ActivateL();
+	iEditor->SetCursorPosL(KZero, EFalse );
+
+	IRLOG_DEBUG( "CIRStationInfoContainer::ReloadStationInformationL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoContainer::DisplayStationLogoL
+// Renders the logo in the view as per the current resolution
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::DisplayStationLogoL( CEikRichTextEditor* aEditor,
+												   TBool aIsLandscape )
+	{
+	IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationLogoL - Entering" );
+	if( iBitmap || iBitmapMask )
+		{
+		//
+		// Horizontally Center Align logo
+		//
+	    TParaFormatMask paraFormatMask;
+	    CParaFormat *paraFormat = CParaFormat::NewL();
+	    CleanupStack::PushL( paraFormat );
+
+	    CRichText* richTextLogo = aEditor->RichText();
+	    richTextLogo->GetParaFormatL( paraFormat, paraFormatMask, 0, 0 );
+	    paraFormatMask.SetAll();
+		if( aIsLandscape )
+			{
+			paraFormat->iLeftMarginInTwips = KLEFT_LOGO_MARGIN_LANDSCAPE;
+			}
+		paraFormat->iHorizontalAlignment = CParaFormat::ECenterAlign;
+	    richTextLogo->ApplyParaFormatL(paraFormat, paraFormatMask, 0, 0 );
+	    CleanupStack::PopAndDestroy( paraFormat );
+
+		// Vertical center logo
+		//
+		if( aIsLandscape )
+			{
+			TCharFormat charFormatLogo;
+			TCharFormatMask formatMask;
+			richTextLogo->GetCharFormat( charFormatLogo, formatMask, 0, 0);
+			formatMask.SetAll();
+
+		    charFormatLogo.iFontPresentation.iPictureAlignment
+		    	= TFontPresentation::EAlignCentered;
+
+		    TInt heightPixels = aEditor->TextLayout()->BandHeight();
+			charFormatLogo.iFontSpec.iHeight = heightPixels;
+
+			richTextLogo->SetInsertCharFormatL(charFormatLogo, formatMask,
+											   richTextLogo->DocumentLength());
+			}
+
+		// remove existing frame if any
+		if( aIsLandscape )
+			{
+			iEditorLogo->MakeVisible( ETrue );
+			iEditorLogo->RichText()->Reset();
+			}
+		else if( !iImageDrawn )
+			{
+			iEditorLogo->MakeVisible( EFalse );
+			iEditorLogo->RichText()->Reset();
+			iImageDrawn = ETrue;
+			}
+		else
+			{
+			iEditorLogo->MakeVisible( EFalse );
+			iEditorLogo->RichText()->Reset();
+			richTextLogo->DeleteL( KZero, KTwo );
+			}
+
+		// Display scaled station logo
+		//
+		CIRStationInfoPicture* picture = new(ELeave) CIRStationInfoPicture
+										 ( SystemGc(), *iBitmap, *iBitmapMask );
+		CleanupStack::PushL(picture);
+		TPictureHeader picHeader;
+		picHeader.iPicture = TSwizzle<CPicture>( picture );
+		richTextLogo->InsertL( KZero, CEditableText::ELineBreak);
+		richTextLogo->InsertL( KOne, picHeader);
+		CleanupStack::Pop( picture ); 	// RichTextEditor owns the picture
+		
+		if( aIsLandscape )
+			{
+			richTextLogo->CancelInsertCharFormat();
+			}
+		}
+	IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationLogoL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoContainer::DisplayStationInfoL
+// Reads station info from preset and renders the text in the view
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoContainer::DisplayStationInfoL( TBool aIsLandscape )
+	{
+	IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationInfoL - Entering" );
+	CRichText* richText = iEditor->RichText();
+
+	// Horizontally Left Align
+	//
+    TParaFormatMask paraFormatMask;
+    CParaFormat *paraFormat = CParaFormat::NewL();
+    CleanupStack::PushL( paraFormat );
+
+    richText->GetParaFormatL( paraFormat, paraFormatMask, KRICHTEXT_ORIGIN, KRICHTEXT_LENGTH );
+    paraFormatMask.SetAll();
+
+	paraFormat->iLineSpacingInTwips = KPARA_LINE_SPACING;
+	paraFormat->iSpaceAfterInTwips = KPARA_SPACING;
+	if( aIsLandscape && IsStationSupportsLogo() )		// Landscape with logo
+		{
+		paraFormat->iLeftMarginInTwips = KLEFT_MARGIN_LANDSCAPE_LOGO;
+		paraFormat->iRightMarginInTwips = KRIGHT_MARGIN_LANDSCAPE;
+		}
+	else if( aIsLandscape && !IsStationSupportsLogo() )	// Landscape without logo
+		{
+		paraFormat->iLeftMarginInTwips = KLEFT_MARGIN_LANDSCAPE_NOLOGO;
+		paraFormat->iRightMarginInTwips = KRIGHT_MARGIN_LANDSCAPE;
+		}
+	else // Potrait
+		{
+		paraFormat->iLeftMarginInTwips = KLEFT_MARGIN_POTRAIT;
+		paraFormat->iRightMarginInTwips = KRIGHT_MARGIN_POTRAIT;
+		}
+	paraFormat->iHorizontalAlignment = CParaFormat::ELeftAlign;
+	paraFormat->iKeepTogether = ETrue;
+    richText->ApplyParaFormatL(paraFormat, paraFormatMask,
+    						   richText->DocumentLength(), KRICHTEXT_LENGTH );
+    CleanupStack::PopAndDestroy( paraFormat );
+
+	// charFormats for bold & bigger headings
+	//
+	TCharFormat cfOriginal;
+	TCharFormatMask formatMask;
+	richText->GetCharFormat( cfOriginal, formatMask, KRICHTEXT_ORIGIN, KRICHTEXT_LENGTH);
+	formatMask.SetAll();
+
+    TCharFormat cfHeading = cfOriginal;
+    cfHeading.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+    cfHeading.iFontSpec.iHeight -= KHEADINGTEXT_HEIGHT_DECREMENT;
+
+    TCharFormat cfMedium = cfOriginal;
+    cfMedium.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+    cfMedium.iFontSpec.iHeight -= KNORMALTEXT_HEIGHT_DECREMENT;
+
+    TCharFormat cfNormal = cfOriginal;
+    cfNormal.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal);
+    cfNormal.iFontSpec.iHeight -= KNORMALTEXT_HEIGHT_DECREMENT;
+
+	//
+	// Read labels
+	//
+    HBufC* stationNameLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_NAME );
+    HBufC* stationDescLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_DESCRIPTION );
+    HBufC* stationGenreLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_GENRE );
+    HBufC* stationLanguageLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_LANGUAGE );
+    HBufC* stationCountryLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_COUNTRY );
+    HBufC* stationTypeLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_TYPE );
+    HBufC* stationStreamLabel = StringLoader::LoadLC( R_IRAPP_STATIONINFO_STREAM );
+    HBufC* stationTypeManual = StringLoader::LoadLC( R_IRAPP_STATIONINFO_TYPEMANUAL );
+    HBufC* stationTypeIsds = StringLoader::LoadLC( R_IRAPP_STATIONINFO_TYPEISDS );
+
+	//
+	// Retrieve Station Information
+	//
+	CIRIsdsPreset* stationPreset = iStationInfoView->iStationPreset;
+	const TDesC&  stationName 		= stationPreset->GetName();
+	const TDesC&  stationDescription = stationPreset->GetDescription();
+	const TDesC&  stationGenre 		= stationPreset->GetGenreName();
+	const TDesC&  stationLang 		= stationPreset->GetLangName();
+	const TDesC&  stationCountry 	= stationPreset->GetCountryName();
+	TInt 		  stationType 		= stationPreset->GetChannelType();
+
+	// Add station name
+	richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+	richText->InsertL( richText->DocumentLength(), *stationNameLabel);
+	richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+	richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+
+	if( stationName.Length() )
+		{
+		richText->InsertL( richText->DocumentLength(), stationName);
+		}
+	else
+		{
+		HBufC* stationUnnamed = StringLoader::LoadLC( R_IRAPP_STATIONINFO_UNNAMED );
+		richText->InsertL( richText->DocumentLength(), *stationUnnamed);
+		CleanupStack::PopAndDestroy(stationUnnamed);
+		}
+	richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+
+	// Add station description
+	if( stationDescription.Length() )
+		{
+		richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), *stationDescLabel);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), stationDescription);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		}
+
+	// Add station genre
+	if( stationGenre.Length() )
+		{
+		richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), *stationGenreLabel);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), stationGenre);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		}
+
+	// Add station language
+	if( stationLang.Length() )
+		{
+		richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), *stationLanguageLabel);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), stationLang);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		}
+
+	// Add station country
+	if( stationCountry.Length() )
+		{
+		richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), *stationCountryLabel);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), stationCountry);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		}
+
+	// Station Type
+	richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+	richText->InsertL( richText->DocumentLength(), *stationTypeLabel);
+	richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+
+	richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+	if ( stationType == KSI_ISDS_DEFINED )
+		{
+		richText->InsertL( richText->DocumentLength(), *stationTypeIsds);
+		}
+	else
+		{
+		richText->InsertL( richText->DocumentLength(), *stationTypeManual);
+		}
+	richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+
+	//
+	// Station Bitrates and Urls
+	//
+	if( stationPreset->GetUrlCount() > KZero )
+		{
+		richText->SetInsertCharFormatL(cfHeading, formatMask, richText->DocumentLength());
+		richText->InsertL( richText->DocumentLength(), *stationStreamLabel);
+		richText->SetInsertCharFormatL(cfNormal, formatMask, richText->DocumentLength());
+		}
+
+	// for ISDS channels
+	RArray<TInt>	channelBitrates;
+	stationPreset->GetAvailableBitrates( channelBitrates );
+	CleanupClosePushL( channelBitrates );
+
+	for(TInt bitrateCounter = 0;
+		stationType == KSI_ISDS_DEFINED && bitrateCounter < channelBitrates.Count();
+		++bitrateCounter)
+		{
+		HBufC *bitrateText = StringLoader::LoadLC(
+				R_IRAPP_STATIONINFO_BITRATE, channelBitrates[bitrateCounter] );
+		TBuf<KBufferSize> bitRate;
+		bitRate.Append(*bitrateText);
+		CleanupStack::PopAndDestroy(bitrateText);
+		bitRate.Append(Kspace);
+
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		richText->InsertL( richText->DocumentLength(), bitRate );
+
+		CDesCArrayFlat* pUrlsForBitrate = stationPreset->
+										GetExactUrlForBitrateL( channelBitrates[bitrateCounter] );
+		CleanupStack::PushL( pUrlsForBitrate );
+
+		for(TInt urlCounter = 0; urlCounter < pUrlsForBitrate->Count(); ++urlCounter)
+			{
+			HBufC* url = (*pUrlsForBitrate)[urlCounter].AllocLC();
+
+			TInt index =url->Des().Find(KHttp);
+			if(index!=KErrNotFound)
+				{
+				url->Des().Delete(index,KHttpLength);
+				}
+
+			richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+			richText->InsertL( richText->DocumentLength(), *url );
+
+			CleanupStack::PopAndDestroy(url);
+			}
+		CleanupStack::PopAndDestroy( pUrlsForBitrate );
+		}
+	CleanupStack::PopAndDestroy( &channelBitrates );
+
+	// for User Defined channel
+	if( stationType == KSI_USERDEFINED && stationPreset->GetUrlCount() > 0 )
+		{
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+
+		HBufC* url = stationPreset->GetChannelUrlAtL(0).AllocLC();
+
+		TInt index =url->Des().Find(KHttp);
+		if(index!=KErrNotFound)
+			{
+			url->Des().Delete(index,KHttpLength);
+			}
+		richText->InsertL( richText->DocumentLength(), *url );
+		CleanupStack::PopAndDestroy(url);
+		}
+
+	// Cleanup String labels
+    CleanupStack::PopAndDestroy(stationTypeIsds);
+    CleanupStack::PopAndDestroy(stationTypeManual);
+	CleanupStack::PopAndDestroy(stationStreamLabel);
+    CleanupStack::PopAndDestroy(stationTypeLabel);
+    CleanupStack::PopAndDestroy(stationCountryLabel);
+    CleanupStack::PopAndDestroy(stationLanguageLabel);
+    CleanupStack::PopAndDestroy(stationGenreLabel);
+    CleanupStack::PopAndDestroy(stationDescLabel);
+    CleanupStack::PopAndDestroy(stationNameLabel);
+
+	richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+
+	TRect   rectParent = Rect();
+	if ( IsStationSupportsLogo() && rectParent.Height() >= rectParent.Width() )
+		{
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+		richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+		richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+		richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+		richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+		richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+		richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter);
+		}
+
+	richText->CancelInsertCharFormat();
+
+    IRLOG_DEBUG( "CIRStationInfoContainer::DisplayStationInfoL - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRStationInfoContainer::CreateRichTextDataL
+// Initializes the rich text with font, color, anti-aliasing
+// ---------------------------------------------------------
+//
+void CIRStationInfoContainer::CreateRichTextDataL()
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::CreateRichTextData - Entering" );
+    TCharFormat charFormat;
+    TCharFormatMask formatMask;
+    iEditor->RichText()->GetCharFormat( charFormat, formatMask, 0, 0 );
+
+	TRgb textColor;
+    TInt error = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor,
+        									KAknsIIDQsnTextColors,EAknsCIQsnTextColorsCG6 );
+    if ( error != KErrNone )
+        {
+        textColor = KRgbBlack;
+        }
+
+    charFormat.iFontPresentation.iTextColor = textColor;
+	charFormat.iFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+    formatMask.SetAll();
+
+	CCharFormatLayer* globalCharLayer = NULL;
+    globalCharLayer = CCharFormatLayer::NewL( charFormat, formatMask );
+    CleanupStack::PushL( globalCharLayer );
+
+    iEditor->SetCharFormatLayer( globalCharLayer );
+
+    CleanupStack::Pop(globalCharLayer);
+    IRLOG_DEBUG( "CIRStationInfoContainer::CreateRichTextData - Exiting" );
+    }
+
+
+// ----------------------------------------------------------------------------------------
+// CIRStationInfoContainer::HandleResourceChange
+// From base class CCoeControl
+// Handles a change to the control's resources like background drawing and S60 skin changes
+//
+// ----------------------------------------------------------------------------------------
+void CIRStationInfoContainer::HandleResourceChange( TInt aType )
+    {
+    IRLOG_DEBUG( "CIRStationInfoContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+
+    if( aType == KEikDynamicLayoutVariantSwitch )
+        {
+		TRect rect;
+		TBool bRes = AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
+		SetRect(rect);
+
+        iEditor->HandleResourceChange( aType );
+        iEditorLogo->HandleResourceChange( aType );
+
+        if ( iBgContext )
+            {
+            iBgContext->SetRect( Rect() );
+            }
+        }
+    else if( ( aType == KAknsMessageSkinChange ) && ( iBgContext ) )
+        {
+        TRAPD( ignore, iEditor->SetSkinBackgroundControlContextL( iBgContext ) );
+        if( ignore )
+            {
+            ignore = KErrNone; //Prevent ARMV5 compilation varning
+            }
+		TRAPD( err, ReloadStationInformationL() );
+		if(err != KErrNone)
+			{
+			IRLOG_WARNING( "CIRStationInfoContainer::SizeChanged - ReloadStationInformationL() failed" );
+			}
+        }
+    IRLOG_DEBUG( "CIRStationInfoContainer::HandleResourceChange - Exiting" );
+    }
+
+// ----------------------------------------------------
+// CIRStationInfoContainer::IsStationSupportsLogo
+// Returns true if station logo available, else false.
+// ----------------------------------------------------
+//
+TBool CIRStationInfoContainer::IsStationSupportsLogo()
+{
+	IRLOG_DEBUG( "CIRStationInfoContainer::IsStationSupportsLogo" );
+	return ( iStationInfoView->iStationPreset
+			 && iStationInfoView->iStationPreset->GetImgUrl().Length() );
+}
+
+
+// ------------------------------------------------------------
+// CIRStationInfoContainer::IsISDSStation
+// Returns true if station is from ISDS, false if user-defined.
+// ------------------------------------------------------------
+//
+TBool CIRStationInfoContainer::IsISDSStation()
+{
+	IRLOG_DEBUG( "CIRStationInfoContainer::IsISDSStation " );
+	return ( iStationInfoView->iStationPreset->GetChannelType() == CIRIsdsPreset::EIsdsPreset );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationinfopicture.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include <fbs.h>
+#include <w32std.h>
+#include <gdi.h>
+#include "irstationinfopicture.h"
+#include "irdebug.h"
+
+CIRStationInfoPicture::CIRStationInfoPicture(CWindowGc& gc,CFbsBitmap& aBitmap, 
+											 CFbsBitmap& aBitmapMask)
+											 :iBitmap(&aBitmap),iBitmapMask(&aBitmapMask)
+	
+	{
+	IRLOG_DEBUG( "CIRStationInfoPicture::CIRStationInfoPicture - Entering" );
+	TSize sizeInPixels = gc.Device()->SizeInPixels();
+	TSize sizeInTwips = gc.Device()->SizeInTwips();
+	TSize bitmapSizeInPixels = aBitmap.SizeInPixels();
+	iSizeInTwips = TSize(sizeInTwips.iWidth * bitmapSizeInPixels.iWidth / sizeInPixels.iWidth,
+		sizeInTwips.iHeight * bitmapSizeInPixels.iHeight / sizeInPixels.iHeight);
+	IRLOG_DEBUG( "CIRStationInfoPicture::CIRStationInfoPicture - Exiting" );
+	}
+
+
+void CIRStationInfoPicture::ExternalizeL(RWriteStream& ) const
+	{
+	IRLOG_DEBUG( "CIRStationInfoPicture::ExternalizeL" );
+	return;
+	}
+
+void CIRStationInfoPicture::GetOriginalSizeInTwips(TSize& aSize) const 
+    { 
+    aSize = iSizeInTwips; 
+    }
+
+// The actual drawing code
+void CIRStationInfoPicture::Draw(CGraphicsContext&   aGc, 
+		                      	 const TPoint& 	     aTopLeft,
+		                      	 const TRect& 	     /*aClipRect*/,
+		                         MGraphicsDeviceMap* /*aMap*/) const
+    {	
+	IRLOG_DEBUG( "CIRStationInfoPicture::Draw - Entering" );
+	CBitmapContext& gc = static_cast<CBitmapContext &>(aGc);
+	TRect bmpPieceRect(TPoint(0,0), iBitmap->SizeInPixels());
+	//the picture draw itself
+	gc.BitBltMasked(aTopLeft,iBitmap, bmpPieceRect,iBitmapMask, ETrue);
+	IRLOG_DEBUG( "CIRStationInfoPicture::ExternalizeL - Exiting" );
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationinfoview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2004 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:  CIRStationInfoView class implementation
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Thu Jul 3 16:30:00 2008 by Rohit
+*  Ref:
+*  Codescanner fixes
+*
+*  Version: 2, Fri May 16 16:00:00 2008 by Rohit
+*  Ref:
+*  Fixed the Back button issue to go back to previous view
+*
+*  Version: 1, Thu May 15 14:00:00 2008 by Rohit
+*  Ref:
+*  Created
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+
+#include <akniconarray.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <psserv.h>
+
+#include <internetradio.rsg>
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irstationinfoview.h"
+#include "irstationinfocontainer.h"
+#include "irapplication.h"
+#include "irsettings.h"
+#include "irviewstack.h"
+#include "irisdspreset.h"
+#include "irpreset.h"
+#include "irisdswrapper.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irlogodownloadengine.h"
+
+const TInt KLogoXValue = 200;
+const TInt KLogoYValue = 200;
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::CIRStationInfoView()
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRStationInfoView::CIRStationInfoView():iContainer(NULL)
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::CIRStationInfoView " );
+    // Nothing here
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::ConstructL
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::ConstructL(const TRect & /*aRect*/)
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::ConstructL - Entering " );
+    CIRBaseView::ConstructL(R_IR_STATIONINFO);
+    iStationPreset = CIRIsdsPreset::NewL();
+    IRLOG_DEBUG( "CIRStationInfoView::ConstructL - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationInfoView* CIRStationInfoView::NewL(const TRect& aRect)
+    {
+    IRLOG_DEBUG("CIRStationInfoView::NewL - Entering" );
+    CIRStationInfoView* self = CIRStationInfoView::NewLC(aRect);
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRStationInfoView::NewL - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::NewLC
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+
+CIRStationInfoView* CIRStationInfoView::NewLC(const TRect & aRect)
+    {
+
+    IRLOG_DEBUG( "CIRStationInfoView::NewLC - Entering" );
+    CIRStationInfoView* self = new (ELeave) CIRStationInfoView;
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    IRLOG_DEBUG( "CIRStationInfoView::NewLC - Exiting." );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::~CIRStationInfoView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationInfoView::~CIRStationInfoView()
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::~CIRStationInfoView - Entering " );
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer=NULL;
+        }
+    if(iStationPreset)
+	    {
+	    delete iStationPreset;
+	    iStationPreset = NULL;
+	    }
+    IRLOG_DEBUG( "CIRStationInfoView::~CIRStationInfoView - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::Id
+// Base class CAknView function
+// Returns view id
+// ---------------------------------------------------------------------------
+//
+TUid CIRStationInfoView::Id() const
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::Id " );
+    return KIRStationInfoViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::DoActivateL
+// Base class CAknView function
+// Handles view activation
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::DoActivateL( const TVwsViewId& aPrevViewId,
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::DoActivateL - Entering " );
+
+    //Create the instance of the container
+    iContainer = CIRStationInfoContainer::NewL(ClientRect(), this);
+    iContainer->SetMopParent(this);
+    AppUi()->AddToViewStackL( *this, iContainer );
+    SetTitleL( R_IRAPP_STATIONINFO_TITLE );
+	CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    HandleStatusPaneSizeChange();
+
+    // Download logo for Isds channel
+	if( iStationPreset->GetChannelType() == CIRIsdsPreset::EIsdsPreset
+		&& iStationPreset->GetImgUrl().Length() )
+		{
+		// Issue logo download request
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+			GetLogoDownloadEngine()->SendRequestL(iStationPreset, this,0,KLogoXValue,KLogoYValue);
+		}
+
+	// Populate container without logo
+	if(iContainer)
+		{
+		iContainer->ReloadStationInformationL();	
+		}
+
+    IRLOG_DEBUG( "CIRStationInfoView::DoActivateL - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::DoDeactivate
+// Base class CAknView function
+// Handles view deactivation
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::DoDeactivate()
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::DoDeactivate - Entering " );
+    CIRBaseView::DoDeactivate();
+
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+    if ( iContainer )
+        {
+        appUi->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        delete iContainer;
+        iContainer = NULL;
+        }
+	IRLOG_DEBUG( "CIRStationInfoView::DoDeactivate - Exiting " );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::HandleCommandL
+// Base class CAknView function
+// Command handling function
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::HandleCommandL( TInt aCommand )
+{
+	IRLOG_DEBUG( "CIRStationInfoView::HandleCommandL - Entering " );
+  	switch(aCommand)
+	{
+	case EAknSoftkeyClose:
+	case EIRBack:
+		CIRBaseView::HandleCommandL( EIRBack );
+		break;
+
+    default:
+		AppUi()->HandleCommandL(aCommand);
+		break;
+	}
+  	IRLOG_DEBUG( "CIRStationInfoView::HandleCommandL - Exiting " );
+}
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::HandleStatusPaneSizeChange
+// Base class CAknView function
+// Event handler for status pane size changes
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::HandleStatusPaneSizeChange()
+    {
+    IRLOG_DEBUG( "CIRStationInfoView::HandleStatusPaneSizeChange - Entering " );
+    CIRBaseView::HandleStatusPaneSizeChange();
+    // the client rect is also set here after screen orientation change
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+    IRLOG_DEBUG( "CIRStationInfoView::HandleStatusPaneSizeChange - Exiting " );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::PresetLogoDownloadedL
+// From MLogoDownloadObserver
+// Invoked after requested logo is downloaded
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRStationInfoView::PresetLogoDownloadedL - Entering" );
+
+	if( !aPreset )
+		{
+		IRLOG_DEBUG( "CIRStationInfoView::PresetLogoDownloadedL - NULL Preset is passed" );
+		User::LeaveIfNull( aPreset );
+		}
+
+	*iStationPreset = *aPreset;
+
+	if(iContainer)
+		iContainer->StartConvertStationLogoL();
+
+	IRLOG_DEBUG( "CIRStationInfoView::PresetLogoDownloadedL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationInfoView::PresetLogoDownloadError
+// From MLogoDownloadObserver
+// Invoked if an error has occured while logo is downloading or no logo data available
+// ---------------------------------------------------------------------------
+//
+void CIRStationInfoView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/ )
+	{
+	IRLOG_DEBUG( "CIRStationInfoView::PresetLogoDownloadError" );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoView::SetStationPresetL
+// Copies the given preset to member iStationPreset for display
+// -----------------------------------------------------------------------------
+//
+void CIRStationInfoView::SetStationPresetL( CIRIsdsPreset* aPreset )
+	{
+	IRLOG_DEBUG( "CIRStationInfoView::SetStationPresetL - Entering " );
+	if( !aPreset )
+		{
+		IRLOG_DEBUG( "CIRStationInfoView::PresetLogoDownloadedL - NULL Preset is passed" );
+		User::LeaveIfNull( aPreset );
+		}
+	*iStationPreset = *aPreset;
+	IRLOG_DEBUG( "CIRStationInfoView::SetStationPresetL - Exiting " );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoView::SetStationPresetL
+// Copies the given preset to member iStationPreset for display
+// -----------------------------------------------------------------------------
+//
+void CIRStationInfoView::SetStationPresetL( CIRPreset* aPreset )
+	{
+	IRLOG_DEBUG( "CIRStationInfoView::SetStationPresetL - Entering " );
+	if( !aPreset )
+		{
+		IRLOG_DEBUG( "CIRStationInfoView::PresetLogoDownloadedL - NULL Preset is passed" );
+		User::LeaveIfNull( aPreset );
+		}
+	aPreset->CopyPresetData( *iStationPreset );
+	IRLOG_DEBUG( "CIRStationInfoView::SetStationPresetL - Exiting " );
+	}
+
+// -----------------------------------------------------------------------------
+// CIRStationInfoView::GetStationPresetL
+// 
+// -----------------------------------------------------------------------------
+//
+CIRIsdsPreset* CIRStationInfoView::GetStationPresetL( )
+	{
+	return iStationPreset;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1066 @@
+/*
+* Copyright (c) 2004 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:  Stations view class
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 8, Thu Aug 18 14:32:00 2008 by Rohit
+*  Ref:
+*  Fixed bug : Tapping StationInfo toolbar-option for last station in Station list is causing crash
+*  Modified GetStationsViewActualIndex() to remove increment of currentIndex.
+*
+*  Version: 8, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*  Version: 7, May 28 wed 16:34:00 2008 by Rohit
+*  Fixed bug to verify network before invoking Song Information view
+*
+*  Version: 6, Tues March 29 10:30:00 2008 by Prabina
+*  Ref:
+*  Stations View Container Derived from CCoeControl
+*
+*  Version: 5, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*  Version: 4, Mon March 24 18:00:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for adding different stations to favourites list , Added Wait dialog for adding to favourites
+*
+*  Version: 3, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations ,
+*  Handled Single/Double tapping on the list itmes
+*
+*  Version: 2, Thurs March 20 15:50:00 2008 by Prabina
+*  Ref:
+*  Created new views for the Station Directory Views , Enabled the Touch toolbar functionality ,
+*  Help Options enabled
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+
+#include <akniconarray.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <psserv.h>
+#include <hlplch.h>
+#include <aknnotewrappers.h>
+#include <eikenv.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+//For Touch Toolbar
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <aknwaitdialog.h>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irstationsview.h"
+#include "irstationsviewcontainer.h"
+#include "irapplication.h"
+#include "irisdswrapper.h"
+#include "irsettings.h"
+#include "irmainview.h"
+#include "irnowplayingwrapper.h"
+#include "irstationinfoview.h"
+#include "irimageconverter.h"
+#include "irlogodownloadengine.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irnetworkcontroller.h"
+#include "iractivenetworkobserver.h"
+#include "irdialoglauncher.h"
+#include "irfilteredmodel.h"
+#include "irpubsub.h"
+
+const TInt KImagesSize = 59;
+const TInt KImageReqFrom = 0;
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::CIRStationsView()
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRStationsView::CIRStationsView():iCallRequestPending(EFalse)
+    {
+	IRLOG_DEBUG( "CIRStationsView::CIRStationsView" );
+    iResultsReqMade = EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::ConstructL()
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRStationsView::ConstructL - Entering" );
+    CIRBaseView::ConstructL( R_IR_STATIONS );
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+    TRgb color;
+    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+    				                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_IR_STATIONSVIEW_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_IR_STATIONSVIEW_BLACK_TOOLBAR);	
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+    
+    iFilteredIndex = 0;
+    iFirstTimeLaunchFlag= EFalse;
+    iRequestPending = EFalse;
+    iAddToFav= EFalse;
+    iStationDetails = EFalse;
+	IRLOG_DEBUG( "CIRStationsView::ConstructL - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationsView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationsView* CIRStationsView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRStationsView::NewL" );
+    CIRStationsView* self = CIRStationsView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRStationsView::NewL - Exiting" );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationsView* CIRStationsView::NewLC()
+    {
+	IRLOG_DEBUG( "CIRStationsView::NewLC - Entering" );
+    CIRStationsView* self = new( ELeave ) CIRStationsView;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "CIRStationsView::NewLC - Exiting" );
+    return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::~CIRStationsView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationsView::~CIRStationsView()
+    {
+	IRLOG_DEBUG( "CIRStationsView::~CIRStationsView - Entering" );
+	if ( iContainer )
+		{
+		AppUi()->RemoveFromViewStack( *this, iContainer );
+		delete iContainer;
+		iContainer = NULL;
+		}
+	if ( Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	iFilteredIndex = 0;
+	IRLOG_DEBUG( "CIRStationsView::~CIRStationsView - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// TUid CIRStationsView::Id() const
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRStationsView::Id() const
+    {
+    IRLOG_DEBUG( "CIRStationsView::Id" );
+    return KIRStationsViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::DoActivateL( )
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::DoActivateL( const TVwsViewId& aPrevViewId,
+        TUid aCustomMessageId, const TDesC8& aCustomMessage )
+    {
+	IRLOG_DEBUG( "CIRStationsView::DoActivateL - Entering" );
+
+	TInt customMessageId = aCustomMessageId.iUid;
+	if(customMessageId == 1)
+		{
+		SetCurrentFocus(0);
+		SetCurrentTopItem(0);
+		iFirstTimeLaunchFlag= ETrue;
+		}
+	aCustomMessageId.iUid = 0;
+	iUi->iPresentViewID = KIRStationsViewId;
+	
+	////////////////////////////////////////////////////////////
+
+	if(iResultsReqMade)
+		{
+		if(iContainer)
+			{
+		    delete iContainer;
+		    iContainer = NULL;
+			}
+	    iResultsReqMade = EFalse;
+		}
+	
+	////////////////////////////////////////////////////////////
+
+	
+	ConstructToolbarL();
+    if ( !iContainer )
+        {
+ 	    iContainer = CIRStationsViewContainer::NewL( *this, ClientRect() );
+ 	    iContainer->CreateListBoxL();
+ 		AppUi()->AddToViewStackL( *this, iContainer);
+        }
+    else
+        {
+		// we must notify a resource change in order to update the skin context
+		// This is a flaw of CEikFormattedCellListBox
+	//	_LIT(KText,"")
+	//	iContainer->iStationsSearchBox->SetSearchTextL  (KText)
+	//	iContainer->RefreshViewBack()
+		
+		iContainer->SetRect(ClientRect());
+        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+        AppUi()->AddToViewStackL( *this, iContainer);
+ 	//	iContainer->iItemArray->Reset()
+	//	iContainer->UpdateStationsViewL()
+       }
+
+
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+  	SetStatusPaneTextL();
+    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    EnableObserverL(EIRSystemEventObserver);
+	HandleStatusPaneSizeChange();
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+	IRLOG_DEBUG( "CIRStationsView::DoActivateL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::DoDeactivate()
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::DoDeactivate()
+    {
+	IRLOG_DEBUG( "CIRStationsView::DoDeactivate - Entering" );
+    if(&(iUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+    if ( iContainer )
+        {
+        if(iContainer->iStationsListBox && iContainer->GetSearchBoxPointer())
+		    {
+			iContainer->GetSearchBoxPointer()->GetSearchText(iContainer->iFindString);
+			if(iContainer->GetSearchBoxPointer() && iContainer->iFindString.Length()!=0)
+				{
+				if(iIndex)
+					{
+					SetCurrentFocus(iIndex);
+					}
+				else
+					{
+					iContainer->Comparestrings();
+					SetCurrentFocus(iIndex);
+					}
+				}
+			else
+				{
+				SetCurrentFocus(iContainer->GetCurrentItemIndex());
+				}
+			SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+		    }
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+        }
+ 	if ( Toolbar() )
+        {
+        Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+        Toolbar()->SetToolbarObserver( NULL );
+        }
+    iFirstTimeLaunchFlag= EFalse;
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+	IRLOG_DEBUG( "CIRStationsView::DoDeactivate - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::HandleCommandL( TInt aCommand )
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRStationsView::HandleCommandL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	iCommand = aCommand;
+
+	switch(aCommand)
+		{
+		//Activate NowPlaying view.
+		case EGotoNowPlayingViewCmd:
+			{
+			appUi->SetHistory(EFalse);
+			appUi->SavePrevIDL(KIRStationsViewId, aCommand);
+			}
+		break;
+		case EAddtoFavouritesCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			else if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iAddToFav = ETrue;
+				iListenRequest = EFalse;
+				iStationDetails = EFalse;
+				break;
+				}
+			else
+				{
+				iAddToFav = ETrue;
+				AddToFavouritesL(GetStationsViewActualIndex(),aCommand);
+				}
+			}
+		break;
+		case EListenCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			iUi->SetListenFromPls(EFalse);
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iListenRequest = ETrue;
+				iAddToFav = EFalse;
+				iStationDetails = EFalse;
+				break;			
+				}
+			else
+				{
+				//SetCurrentFocus(GetStationsViewActualIndex())
+				ListenChannelL(GetStationsViewActualIndex());	
+				}
+			}
+		break;
+		//Activate settings view.
+		case ESettingsCmd:
+			{
+			AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+			}
+		break;
+		case EHelpCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
+				}
+			}
+		break;
+		case EStationDetailsCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iStationDetails = ETrue;
+				iAddToFav = EFalse;
+				iListenRequest = EFalse;
+				break;
+				}
+			else
+				{
+				iStationDetails = ETrue;
+				TInt currentIndex = GetStationsViewActualIndex();
+	    		SetCurrentFocus(currentIndex);
+				DisplayStationInformationL(currentIndex, aCommand);	
+				}
+			}
+		break;
+		case EAdvertisementUrl:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			else if( iUi->VerifyNetworkConnectivityL() )
+				{
+				break;
+				}
+			if(iUi->iIsdsWrapper->iClickThroughUrl)
+				{
+				if((iUi->iIsdsWrapper->iClickThroughUrl->Length())!=0)
+					{
+					iContainer->OpenUrlL(*iUi->iIsdsWrapper->iClickThroughUrl);		
+					}
+				}
+			else
+				{
+				iUi->iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
+					(R_IRAPP_ERROR_URL_UNAVAILABLE,ETrue);
+				}
+			}
+		break;
+		default:
+			{
+			CIRBaseView::HandleCommandL( aCommand );
+			}
+		break;
+		}
+	IRLOG_DEBUG( "CIRStationsView::HandleCommandL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// void CIRStationsView::SetStatusPaneTextL()
+// Sets the title pane of the search results view
+// ---------------------------------------------------------------------------
+//
+
+void CIRStationsView:: SetStatusPaneTextL() const
+ 	{
+	IRLOG_DEBUG( "CIRStationsView::SetStatusPaneTextL - Entering" );
+	static_cast<CAknTitlePane*>( StatusPane()->ControlL( 
+	TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( iUi->iStationsViewTitleString );
+	IRLOG_DEBUG( "CIRStationsView::SetStatusPaneTextL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRStationsView::DynInitMenuPaneL - Entering" );
+	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+	if(!aMenuPane) User::Leave(KErrNotFound);
+		{
+		if(aResourceId == R_IR_MENU_STATIONS)
+			{
+			// Now Playing option
+			if(iNowPlayingWrapper->iPlaying)
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+				}
+			else
+				{
+				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRStationsView::DynInitMenuPaneL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::ListenChannelL()
+// Request for listening to a channel
+// ---------------------------------------------------------------------------
+//
+
+void CIRStationsView:: ListenChannelL(TInt aCurrentIndex)
+ 	{
+	IRLOG_DEBUG( "CIRStationsView::ListenChannelL - Entering" );
+ 	iNowPlayingWrapper->SetView(EStations);
+ 	iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+ 	iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+ 	iNowPlayingWrapper->SetWhenUserCancelsIsdsBufferingWaitBar(EFalse);
+ 	iNowPlayingWrapper->CreateWaitDialogL();
+	iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+
+	iIsdsWrapper->IsdsListenRequestL(this,aCurrentIndex);
+	IRLOG_DEBUG( "CIRStationsView::ListenChannelL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// Touch Toolbar
+//
+// ---------------------------------------------------------------------------
+
+void CIRStationsView::ConstructToolbarL()
+    {
+	IRLOG_DEBUG( "CIRStationsView::ConstructToolbarL - Entering" );
+    SetToolbarItems();
+    
+	// Update rect, as changes in toolbar visibility also affect layout.
+	if(iContainer)
+		{
+		iContainer->SetRect( ClientRect() );
+		iContainer->DrawDeferred();
+		}
+		
+	IRLOG_DEBUG( "CIRStationsView::ConstructToolbarL - Exiting" );
+    }
+
+
+
+// --------------------------------------------------------------------------
+// CIRStationsView::OfferToolbarEventL
+// --------------------------------------------------------------------------
+//
+void CIRStationsView::OfferToolbarEventL ( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRStationsView::OfferToolbarEventL - Entering" );
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRStationsView::OfferToolbarEventL - Exiting" );
+	}
+
+
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::HandleForegroundEventL( TBool aForeground )
+    {
+	IRLOG_DEBUG( "CIRStationsView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+
+	if ( aForeground )
+		{
+		if ( iContainer )
+			{
+			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+		    TRgb color;
+		    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+		    				                                      EAknsCIQsnTextColorsCG6 );
+			if(color.Gray2()!=0)
+				{
+				CreateAndSetToolbarL(R_IR_STATIONSVIEW_WHITE_TOOLBAR);
+				}
+			else
+				{
+				CreateAndSetToolbarL(R_IR_STATIONSVIEW_BLACK_TOOLBAR);	
+				}
+			if( AknLayoutUtils::PenEnabled() && Toolbar() )
+				{
+				Toolbar()->SetToolbarObserver( this );
+				}
+			ConstructToolbarL();
+			iContainer->DrawDeferred();
+			}
+		}
+	IRLOG_DEBUG( "CIRStationsView::HandleForegroundEventL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::HandleStatusPaneSizeChange()
+    {
+	IRLOG_DEBUG( "CIRStationsView::HandleStatusPaneSizeChange - Entering" );
+    CIRBaseView::HandleStatusPaneSizeChange();
+
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+       }
+	IRLOG_DEBUG( "CIRStationsView::HandleStatusPaneSizeChange - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::AddToFavouritesL()
+//
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::AddToFavouritesL(TInt aCurrentIndex,TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRStationsView::AddToFavouritesL - Entering" );
+	iLoadingCancelled = EFalse;
+
+	//request isds for preset data to be added to favorites
+	iIsdsWrapper->IsdsPresetRequestL(this,aCurrentIndex,aCommand);
+
+	//Display a loading Progress Bar
+	IRLOG_DEBUG( "CIRStationsView::AddToFavouritesL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::DisplayStationInformation()
+//
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::DisplayStationInformationL(TInt aCurrentIndex,TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRStationsView::DisplayStationInformationL - Entering" );
+
+	//request isds for preset data to be added to favorites
+	iIsdsWrapper->IsdsPresetRequestL(this, aCurrentIndex, aCommand, EFalse);
+
+	//Display a loading Progress Bar
+	IRLOG_DEBUG( "CIRStationsView::DisplayStationInformationL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::ResponseL()
+// Activates the Stations view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::ResponseL( CIRIsdsPreset* /*aPreset*/ )
+	{
+	IRLOG_DEBUG( "CIRStationsView::ResponseL - Entering" );
+	//TO DO :: The line can be removed in future written to fix
+	// Code Scanner ERROR
+	ResetPendingRequests(EFalse);	
+	IRLOG_DEBUG( "CIRStationsView::ResponseL - Exiting" );
+	
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::PresetResponseL()
+// Issues Request to listen to a particular channel
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::PresetResponseL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRStationsView::PresetResponseL - Entering" );
+	if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+		{
+		return;
+		}
+	
+	if( EStationDetailsCmd == iCommand )
+		{
+		ResetPendingRequests(EFalse);
+		iUi->iStationInfoView->SetStationPresetL( aPreset );
+		AppUi()->ActivateLocalViewL(KIRStationInfoViewId);
+		}
+	else
+		{
+		if(!iNowPlayingWrapper->GetWhenUserCancelsIsdsBufferingWaitBar())
+			{
+			ResetPendingRequests(EFalse);
+			iNowPlayingWrapper->SetListenFromIsdsValue(ETrue);
+			iNowPlayingWrapper->ListenToChannelL(aPreset);
+			}
+		}
+	IRLOG_DEBUG( "CIRStationsView::PresetResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationsView::ErrorL()
+// Handles the errors from Isds
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRStationsView::ErrorL - Entering" );
+	if(iIsdsWrapper->GetListenRequest())
+		{
+ 		IRRDEBUG2("CIRNowPlayingWrapper:: DestroyWaitDialog9", KNullDesC); 
+ 		iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+		iNowPlayingWrapper->DestroyWaitDialogL();
+		iIsdsWrapper->SetListenRequest(EFalse);
+		}
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;
+		}
+	IRLOG_DEBUG( "CIRStationsView::ErrorL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::LogoRequestL()
+// called from the container
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::LogoRequestL()
+	{
+	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Entering" );
+	if(iContainer)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+				GetLogoDownloadEngine()->SendRequestL(iContainer->iTempPreset,this,
+									KImageReqFrom,KImagesSize,KImagesSize);
+		}
+	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Exiting" );
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::PresetLogoDownloadedL()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadedL - Entering" );
+	if(iContainer)
+		{
+		iContainer->PresetLogoDownloadL(aPreset);
+		}
+	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadedL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::PresetLogoDownloadError()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadError" );
+	//call the API of stations view container
+	if(iContainer)
+		{
+		TRAP_IGNORE(iContainer->HandleLogoErrorL())
+		}
+	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadError - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsView::LogoRequestL()
+// called from the container				
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::AdRequestL()
+	{
+	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Entering" );
+	if(iContainer)
+		{
+		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+		GetLogoDownloadEngine()->SendRequestL(iContainer->iAdvPreset,this);
+		}
+	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsView::GetFilteredIndex()
+// Returns the filtered Index				
+// ---------------------------------------------------------------------------
+//
+TInt CIRStationsView::GetFilteredIndex()
+	{
+	IRLOG_DEBUG( "CIRStationsView::GetFilteredIndex - Entering" );
+	return iFilteredIndex;
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsView::SetLoadingCancelled()
+// Sets iLoadingCancelled to aValue				
+// ---------------------------------------------------------------------------
+//
+void CIRStationsView::SetLoadingCancelled(TBool aValue)
+	{
+	IRLOG_DEBUG( "CIRStationsView::SetLoadingCancelled - Entering" );
+	iLoadingCancelled = aValue;
+	IRLOG_DEBUG( "CIRStationsView::SetLoadingCancelled - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRStationsView::SetActualFilteredItemIndex ()
+// Sets the actual index of the station
+// ---------------------------------------------------------
+//
+void CIRStationsView::SetActualFilteredItemIndex(TInt aIndex)
+	{
+	IRLOG_DEBUG( "CIRStationsView::SetActualFilteredItemIndex - Entering." );
+	iIndex = aIndex;
+	IRLOG_DEBUG( "CIRStationsView::SetActualFilteredItemIndex - Exiting." );
+	}
+// ---------------------------------------------------------
+// CIRStationsView::GetActualFilteredItemIndex ()
+// Gets the actual index of the station
+// ---------------------------------------------------------
+//
+TInt CIRStationsView::GetActualFilteredItemIndex()
+	{
+	IRLOG_DEBUG( "CIRStationsView::GetActualFilteredItemIndex - Entering." );
+	IRLOG_DEBUG( "CIRStationsView::GetActualFilteredItemIndex - Exiting." );
+	return iIndex;
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsView::GetStationsViewActualIndex().
+// Returns the actual index.
+// ---------------------------------------------------------------------------
+//
+TInt CIRStationsView::GetStationsViewActualIndex()
+    {
+ 	IRLOG_DEBUG( "CIRStationsViewContainer::GetStationsViewActualIndex - Entering" );
+   	TInt currentIndex = iContainer->GetCurrentItemIndex();
+	SetCurrentFocus(currentIndex);
+	TBuf<KFindStringLength> findstring ;
+   if(iContainer->GetSearchBoxPointer())
+	   {
+    	iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+	   }
+	if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0)
+		{
+		iFilteredIndex = currentIndex;
+		iContainer->Comparestrings();
+		currentIndex = iIndex;
+		}
+	if(iContainer->GetLogoNotSupported())
+		{
+		currentIndex = 	currentIndex +1;
+		}
+
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetStationsViewActualIndex - Exiting" );
+	return currentIndex;
+    }
+// ---------------------------------------------------------
+// CIRStationsView::GetFirstLaunchFlag ()
+// returns whether is launching for the first time /coming from other view
+// which is activated from this view.
+// ---------------------------------------------------------
+//
+TBool CIRStationsView::GetFirstLaunchFlag()
+	{
+	IRLOG_DEBUG( "CIRStationsView::GetFirstLaunchFlag - Entering." );
+	IRLOG_DEBUG( "CIRStationsView::GetFirstLaunchFlag - Exiting." );
+	return iFirstTimeLaunchFlag;
+	}
+// ---------------------------------------------------------------------------
+// void CIRStationsView::SetToolbarItems()
+// Setting toolbar items when text is entered
+//  ---------------------------------------------------------------------------
+void CIRStationsView:: SetToolbarItems()
+	{
+	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Entering" );
+	if(Toolbar())
+		{
+		if(iContainer)
+			{
+			Toolbar()->SetToolbarVisibility(ETrue, EFalse);
+			if(iContainer->iStationsListBox)
+				{
+				TInt currentIndex = iContainer->GetCurrentItemIndex();
+				TBuf<KFindStringLength> findstring ;
+				if(iContainer->GetSearchBoxPointer())
+					{
+					iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+					}
+				TInt filterModelCount = iContainer->GetFilterdModelPointer()->NumberOfItems();	
+				if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0 
+				&& filterModelCount == 0)
+					{
+					Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EStationDetailsCmd,ETrue,ETrue);
+					}
+				else
+					{
+					if (currentIndex == 0 && !iContainer->GetLogoNotSupported())  
+						{
+						if (iUi->iIsdsWrapper->GetBannerUrl())
+							{
+							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
+							Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+							Toolbar()->SetItemDimmed(EStationDetailsCmd,ETrue,ETrue);
+							}
+						else
+							{
+							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
+							Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+							Toolbar()->SetItemDimmed(EStationDetailsCmd,EFalse,ETrue);
+							}
+						}
+					else
+						{
+						Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
+						Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+						Toolbar()->SetItemDimmed(EStationDetailsCmd,EFalse,ETrue);
+						}
+					}
+				Toolbar()->DrawNow();
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Exiting" );
+	}
+
+// ---------------------------------------------------------
+// CIRStationsView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRStationsView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRNowPlayingView::::HandleSystemEventL - Entering");
+	
+	CIRUi* appUi = static_cast<CIRUi*>(AppUi());
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if((!iCallRequestPending && iCommand==EStationDetailsCmd) ||
+				  (!iCallRequestPending && iCommand==EAddtoFavouritesCmd))
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				if(iUi->iIsdsWrapper->GetListenRequest())
+					{
+					iNowPlayingWrapper->DestroyWaitDialogL();
+					iUi->iIsdsWrapper->SetListenRequest(EFalse);
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if((iCallRequestPending && iCommand==EStationDetailsCmd) ||
+			  (iCallRequestPending && iCommand==EAddtoFavouritesCmd))
+				{
+				iCallRequestPending = EFalse;
+				HandleCommandL( iCommand );
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRNowPlayingView::HandleSystemEventL - Exiting." );
+	}	
+
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRStationsView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRStationsView::NotifyActiveNetworkObserversL  - Entering." );
+	IRRDEBUG2("CIRStationsView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished :
+			{
+		
+			if(iContainer)
+				{
+				if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iAddToFav)
+						{
+						iAddToFav = ETrue;
+						iListenRequest = EFalse;
+						iStationDetails = EFalse;
+						AddToFavouritesL(GetStationsViewActualIndex(),EAddtoFavouritesCmd);
+						}
+					else if (iStationDetails)
+						{
+						iStationDetails = ETrue;
+						iAddToFav = EFalse;
+						iListenRequest = EFalse;
+						TInt currentIndex = GetStationsViewActualIndex();
+			    		SetCurrentFocus(currentIndex);
+						DisplayStationInformationL(currentIndex, EStationDetailsCmd);	
+						}
+					else if(iListenRequest)
+						{
+						iListenRequest = EFalse;
+						SetCurrentFocus(GetStationsViewActualIndex());
+						ListenChannelL(GetStationsViewActualIndex());	
+						}
+					else
+						{
+							
+						}
+					}
+				}
+			if(iUi->iNetworkController->IsHandingOverConnection())
+			ResetPendingRequests(EFalse);				
+			}
+		}
+		
+	IRLOG_DEBUG( "CIRStationsView::NotifyActiveNetworkObserversL  - Exiting." );
+	IRRDEBUG2("CIRStationsView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+
+	}
+	
+	
+	
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRStationsView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	iAddToFav  = aValue;
+	iListenRequest  = aValue;
+	iStationDetails  = aValue;
+	
+	}	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationsviewcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1392 @@
+/*
+* Copyright (c) 2004 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:  Container class for Stations View
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Thurs March 20 15:50:00 2008 by Prabina
+*  Ref:
+*  Created new views for the Station Directory Views , Enabled the Touch toolbar functionality , 
+*  Help Options enabled
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations , 
+*  Handled Single/Double tapping on the list itmes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Mon March 24 18:00:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for adding different stations to favourites list , Added Wait dialog for adding to favourites
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 6, Tues March 29 10:30:00 2008 by Prabina
+*  Ref:
+*  Stations View Container Derived from CCoeControl
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 7, may 7 Wed 08:35:00 2008 by Neelima
+*  Removed change Resoultion function.
+* changed code in HandleResourcechange and Size changed  for handling layout changes 
+* in dynamic filtering
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 8, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+#include <AknIconArray.h>
+#include <aknlists.h>
+#include <aknview.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include <eikenv.h>
+#include <apgcli.h>
+#include <akntoolbar.h>
+
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irstationsview.h"
+#include "irstationsviewcontainer.h"
+#include "irapplication.h"
+#include "ircategoryview.h"
+#include "iraap.hlp.hrh"
+#include "irisdswrapper.h"
+#include "irimageconverter.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irlogodownloadengine.h"
+/* no need to change to lower case  */
+#include <AknsBasicBackgroundControlContext.h> 
+#include "irfilteredmodel.h"
+#include "mirlistboxarray.h"
+#include "iradvertisinglistbox.h"
+#include "irlayoututils.h"
+//For Ads
+#include <akniconutils.h> 
+#include <aknsfld.h> 
+/** Mime type when opening web browser */
+_LIT8( KIRHtmlMimeType, "text/html" );
+/** Browser prefix: See browser API specification */
+_LIT( KBrowserPrefix, "4 " );
+_LIT(KFalse,"false");
+
+const TInt KAdvSize = 30;
+const TSize KLogoSize = TSize(320,350);
+const TInt KSize = 10;
+#define KCONTROLSCOUNT 0
+ 
+const TInt KIRNoLogo = -1;
+// Length of list item with known sized elements: (the number of column separators) + 3 (maximum length for icon id)
+const TInt KIRListItemBaseLength = 5;
+const TInt KRange = 999;
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CIRStationsViewContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationsViewContainer* CIRStationsViewContainer::NewL( CIRStationsView& aView,
+					 const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRStationsViewContainer::NewL" );
+    CIRStationsViewContainer* self = CIRStationsViewContainer::NewLC( aView, aRect );
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRStationsViewContainer::NewL - Exiting" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIRStationsViewContainer::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationsViewContainer* CIRStationsViewContainer::NewLC( CIRStationsView& aView,
+					 const TRect& aRect )
+    {
+ 	IRLOG_DEBUG( "CIRStationsViewContainer::NewLC" );
+    CIRStationsViewContainer* self = new ( ELeave ) CIRStationsViewContainer(aView);
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    IRLOG_DEBUG( "CIRStationsViewContainer::NewLC - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::CIRStationsViewContainer()  
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRStationsViewContainer::CIRStationsViewContainer(CIRStationsView& aView) :iView(aView)
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::CIRStationsViewContainer" );
+	iFilteredFlag = EFalse;
+	iAdRequestStatusFlag = EFalse;
+	}
+    
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::ConstructL( const TRect& aRect)
+    {
+	IRLOG_DEBUG( "CIRStationsViewContainer::ConstructL - Entering" );
+    CreateWindowL();
+    
+    SetRect(aRect);
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgScreen , aRect, ETrue); 
+
+	iAdPresent = EFalse;
+    iConverter = CIRImageConverter::NewL();
+	iConverter->EnableAnimations( EFalse );
+	iConverter->SetObserver( this );
+
+	iCurrentItemConverter = CIRImageConverter::NewL();
+	iCurrentItemConverter->SetObserver( this );
+    
+    // Added For Dynamic Filtering
+    iFilteredModel=new(ELeave) CIRFilteredModel;
+    iFilteredModel->ConstructL();
+       
+   	iListBoxArray = MIRListBoxArray::NewL();
+    
+	
+	IRLOG_DEBUG( "CIRStationsViewContainer::ConstructL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::CreateListBoxL()
+// Creates ListBox depending upon the presence of Advertisement
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::CreateListBoxL()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateListBoxL - Entering" );
+	if (iView.iUi->iIsdsWrapper->GetBannerUrl())
+		{
+		if((iView.iUi->iIsdsWrapper->GetBannerUrl()->Length())!=0)
+			{
+			iAdPresent = ETrue;
+			if(iAdvPreset)
+				{
+				delete iAdvPreset;
+				iAdvPreset = NULL;
+				}
+			iAdvPreset=CIRIsdsPreset::NewL();
+			iAdvPreset->SetChannelType(1);
+			iAdvPreset->SetImgUrl(*iView.iUi->iIsdsWrapper->GetBannerUrl());
+			iAdRequestStatusFlag = ETrue;
+			CreateCustomListBoxL();
+			iLogoDownloadError	= ETrue;
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			iView.AdRequestL();
+			}
+		}  
+	else
+		{
+		if(iView.iUi->iIsdsWrapper->iChannelBannerTag)
+			{
+			iView.SetCurrentFocus(0);	
+			iLogoDownloadError	= ETrue;
+			iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+			iAdRequestStatusFlag = EFalse;
+			}
+	    iStationsListBox = new (ELeave) CIRAdvertisingListBox;
+		CreateCustomListBoxL();	
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateListBoxL - Exiting" );
+
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::~CIRStationsViewContainer()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::CreateCustomListBoxL()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateCustomListBoxL - Entering" );
+	iLandScapeCount = 0;
+	if(iAdPresent)
+		{
+		iStationsListBox = new (ELeave) CIRAdvertisingListBox;
+		}
+	//For displaying Ads
+	iStationsListBox->SetContainerWindowL(*this);
+	// Added For Dynamic Filtering
+	iStationsListBox->ConstructL (this,EAknListBoxSelectionList,iFilteredModel);
+
+
+	// Construct list.
+	TResourceReader rr;
+	iCoeEnv->CreateResourceReaderLC( rr, R_IR_SEARCHRESULTS_LIST );
+	ConstructFromResourceL( rr );
+	CleanupStack::PopAndDestroy(); // rr
+
+	iItemArray = static_cast<CDesCArray*>( iStationsListBox->Model()->ItemTextArray());
+	iListBoxArray->SetListArray(iItemArray);
+	iFilteredModel->SetListArray(iListBoxArray); 
+	
+	if (iView.iUi->iIsdsWrapper->GetBannerUrl())
+		{
+		// Added For Dynamic Filtering
+		if(iAdvString)
+			{
+			delete iAdvString;
+			iAdvString = NULL;	
+			}
+		iAdvString = HBufC::NewL(KAdvSize);
+		TPtr ptr(iAdvString->Des());
+		_LIT(KTabFormat,"\t \t ");
+		ptr.Copy(KTabFormat);
+
+		iFilteredModel->SetAdvFlag(iAdPresent,*iAdvString);
+		iStationsListBox->SetListItemFormat( iAdvString );
+		}
+
+	TInt resultsCount = iView.iIsdsWrapper->iStationsData->Count();
+
+	CAknIconArray* iconArray = new ( ELeave ) CAknIconArray( resultsCount );
+	CleanupStack::PushL( iconArray );
+
+	for ( TInt i = 0; i < resultsCount; i++ )
+		{
+		CGulIcon* icon = CreateDefaultIconL();
+        CleanupStack::PushL( icon );
+        iconArray->AppendL( icon );
+	    CleanupStack::Pop( icon );
+		}
+
+	CleanupStack::Pop( iconArray  );
+	iStationsListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL( iconArray );  
+
+	iStationsListBox->SetRect( Rect());
+	iStationsListBox->ActivateL();
+
+	iStationsListBox->CreateScrollBarFrameL( ETrue );
+	iStationsListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, 
+	CEikScrollBarFrame::EAuto);
+	iStationsListBox->SetListBoxObserver( this );     
+
+
+	// Set the icon array for this list. List takes ownership of the array. 
+	for ( TInt i = 0; i < resultsCount; i++ )
+		{
+		RBuf tempImgUrlStatus;
+		tempImgUrlStatus.Create(KSize);
+		tempImgUrlStatus.Copy(KFalse);
+
+		RBuf tempImgUrl;
+		tempImgUrl.Create(iView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(i).Size());
+		tempImgUrl.Copy(iView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(i));
+
+		if(!(tempImgUrlStatus == tempImgUrl))
+			{
+			iInvalidIconIndices.InsertInOrderL(i);
+			}
+		iNoLogosArray.InsertInOrderL(i);
+		tempImgUrlStatus.Close();
+		tempImgUrl.Close();
+		}
+
+	UpdateStationsViewL();
+	iStationsListBox->ItemDrawer()->FormattedCellData()->SetMarqueeParams
+							(KLoop, KScrollAmount, KScrollDelay, KInterval);
+	iStationsListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+
+	if(resultsCount>1)
+		{
+		if(iStationsSearchBox)
+			{
+			delete iStationsSearchBox;
+			iStationsSearchBox = NULL;
+			}
+
+		// Added For Dynamic Filtering
+		iStationsSearchBox = CreateFindBoxL(iStationsListBox, iFilteredModel,
+		CAknSearchField::ESearch);
+		SizeChanged();	
+		}
+	else
+		{
+		DisableFindBox();	
+		}
+	if((!iAdRequestStatusFlag))
+		{
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateCustomListBoxL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::CreateDefaultIconL
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CIRStationsViewContainer::CreateDefaultIconL()
+    {
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateDefaultIconL - Entering" );
+    CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( bitmap );
+    User::LeaveIfError( bitmap->Create( TSize(), EGray2 ) );
+    CFbsBitmap* mask = new ( ELeave ) CFbsBitmap;
+    CleanupStack::PushL( mask );
+    User::LeaveIfError( mask->Create( TSize(), EGray2 ) );
+    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+    icon->SetBitmapsOwnedExternally( EFalse );
+    CleanupStack::Pop( 2, bitmap );
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateDefaultIconL - Exiting" );
+    return icon;
+    }
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::~CIRStationsViewContainer()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationsViewContainer::~CIRStationsViewContainer()
+    {
+	IRLOG_DEBUG( "CIRStationsViewContainer::~CIRStationsViewContainer - Entering" );
+	delete iConverter;
+	delete iCurrentItemConverter;
+	iLogosArray.Close();
+	iNoLogosArray.Close();  
+	iInvalidIconIndices.Close();
+    if(iStationsListBox)
+    	{
+    	delete iStationsListBox;
+    	iStationsListBox = NULL;
+    	}
+    if(iStationsSearchBox)
+		{
+		delete iStationsSearchBox;
+		iStationsSearchBox = NULL;
+		}
+	if(iTempPreset)
+		{
+		delete iTempPreset;
+		iTempPreset =NULL;
+		}
+	if(iAdvPreset)
+		{
+		delete iAdvPreset;
+		iAdvPreset = NULL;
+		}
+	if(iAdBitmap)
+		{
+		delete iAdBitmap;
+		iAdBitmap = NULL;	
+		}
+	if(iBgContext)
+		{
+		delete iBgContext;
+		iBgContext = NULL;	
+		}
+	if(iAdvString)
+		{
+		delete iAdvString;
+		iAdvString = NULL;	
+		}
+    if(iListBoxArray )
+	    {
+	    delete iListBoxArray ;
+	    iListBoxArray = NULL;	
+	    }
+	IRLOG_DEBUG( "CIRStationsViewContainer::~CIRStationsViewContainer - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// TKeyResponse CIRStationsViewContainer::OfferKeyEventL()
+// From class CCoeControl.
+// We need to catch the selection key event in order to do a couple of things
+// in moving state make the movement, and in normal state open channel 
+// specific popup menu. Up and down buttons are forwarded to the list.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRStationsViewContainer::OfferKeyEventL( 
+        const TKeyEvent& aKeyEvent, TEventCode aType )
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::OfferKeyEventL - Entering" );
+	TKeyResponse keyResp( EKeyWasNotConsumed );
+	TInt currentIndex = 0;
+	switch ( aKeyEvent.iCode )
+		{
+		case EKeyLeftArrow: // fall-through intended here
+		case EKeyRightArrow:
+		case EKeyIncVolume:
+		case EKeyDecVolume:
+			{
+			keyResp = EKeyWasNotConsumed;
+			break;
+			}
+		case EKeyOK:        
+			{
+			if( iView.iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			currentIndex = GetCurrentItemIndex();
+			if (currentIndex == 0)  
+				{
+				if (iView.iUi->iIsdsWrapper->GetBannerUrl() && !iLogoDownloadError)
+					{
+					if(iView.iUi->iIsdsWrapper->GetBannerUrl()->Length() != 0)
+						{
+						iView.HandleCommandL(EAdvertisementUrl);
+						}
+					}
+				else
+					{
+					iView.SetCurrentFocus(GetCurrentItemIndex());
+					iView.HandleCommandL(EListenCmd);
+					}
+				}
+			else
+				{
+				iView.SetCurrentFocus(GetCurrentItemIndex());
+				iView.HandleCommandL(EListenCmd);
+				}
+			break;
+			}
+		default:
+			{
+			if(iStationsListBox)
+				{
+				iView.SetToolbarItems();
+				if ( iStationsSearchBox )
+					{
+					iFilteredFlag = ETrue;
+					keyResp = iStationsSearchBox->OfferKeyEventL( aKeyEvent, aType );
+					if( keyResp == EKeyWasNotConsumed )
+						{
+						keyResp = iStationsListBox->OfferKeyEventL( aKeyEvent, aType );
+						}
+					CAknFilteredTextListBoxModel* model = 
+					static_cast<CAknFilteredTextListBoxModel*>( iStationsListBox->Model() );
+					model->Filter()->HandleOfferkeyEventL();					
+					TInt filterModelCount = iFilteredModel->NumberOfItems();	
+					if(filterModelCount == 0 && 
+					!(iView.iUi->iIsdsWrapper->GetBannerUrl()))
+						{
+						HBufC* noMatchesTextResource = 
+						StringLoader::LoadLC(R_IRAPP_STATIONLIST_NOMATCHES);
+						iStationsListBox->View()->SetListEmptyTextL(*noMatchesTextResource);
+						CleanupStack::PopAndDestroy( noMatchesTextResource );
+						}
+					iStationsSearchBox->GetSearchText(iFindString);
+					if(iFindString.Length()!=0)
+						{
+						if(!iLogoDownloadError && 
+						iView.iUi->iIsdsWrapper->GetBannerUrl() && 
+						filterModelCount > 1 )
+							{
+							iStationsListBox->SetCurrentItemIndex(1);
+							}
+						else
+							{
+							iStationsListBox->SetCurrentItemIndex(0);
+							}
+						}
+					}
+				}
+			if(	aKeyEvent.iScanCode==EStdKeyBackspace)
+				{
+				if(iStationsSearchBox)
+					{
+					iStationsSearchBox->GetSearchText(iFindString);
+					if(iFindString.Length()==0)
+						{
+						iFilteredFlag = EFalse;
+						}
+					}
+				}
+
+			iView.SetToolbarItems();
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::OfferKeyEventL - Exiting" );
+	return keyResp; 
+	}
+
+// ---------------------------------------------------------------------------
+// From class MEikListBoxObserver.
+// List box event handler.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleListBoxEventL - Entering" );
+	TInt currentIndex = 0;
+	switch ( aEventType )
+		{
+		case EEventEnterKeyPressed:/**  Keypress event. */
+		case EEventItemDoubleClicked:
+			{
+			if( iView.iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			currentIndex = GetCurrentItemIndex();
+			if (currentIndex == 0)  
+				{
+				if (iView.iUi->iIsdsWrapper->GetBannerUrl() && !iLogoDownloadError)
+					{
+					if(iView.iUi->iIsdsWrapper->GetBannerUrl()->Length() != 0)
+						{
+						iView.HandleCommandL(EAdvertisementUrl);
+						}
+					}
+				else
+					{
+					iView.SetCurrentFocus(GetCurrentItemIndex());
+					iView.HandleCommandL(EListenCmd);
+					}
+				}
+			else
+				{
+				iView.SetCurrentFocus(GetCurrentItemIndex());
+				iView.HandleCommandL(EListenCmd);
+				}
+			}
+		break;
+		case EEventItemClicked:
+			{
+			iView.SetCurrentFocus(GetCurrentItemIndex());
+			iView.SetToolbarItems();
+			}
+		break;
+		default:
+		break;
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleListBoxEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::Draw()
+// From class CCoeControl.
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+	IRLOG_DEBUG( "CIRStationsViewContainer::Draw - Entering" );
+    CWindowGc& gc = SystemGc();
+
+    if(iStationsListBox)
+	    {
+	   	iStationsListBox->SetGC(gc);
+	   	iStationsListBox->SetControlFlag(ETrue);
+	    }
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+	
+    // draw background skin first. 
+ 	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+  	
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+
+	AknsDrawUtils::DrawBackground ( skin, iBgContext, this, gc, TPoint(0,0),
+					 TRect(TPoint(0,0),clientRect.iBr), KAknsDrawParamDefault  );	
+	
+ 	IRLOG_DEBUG( "CIRStationsViewContainer::Draw - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::GetHelpContext()
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetHelpContext - Entering" );
+	if( iView.iUi->iCategoryViewTitleType == CIRCategoryView::EGenreData )
+		{
+		aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_GENRE_STATIONS );
+		}
+	else if( iView.iUi->iCategoryViewTitleType == CIRCategoryView::ELanguageData )
+		{
+		aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_LANGUAGE_STATIONS );
+		}
+	else if( iView.iUi->iCategoryViewTitleType == CIRCategoryView::ECountryData )
+		{
+		aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_COUNTRY_STATIONS );
+		}
+	else 
+		{
+		aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_TOP );
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetHelpContext - Exiting" );
+
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::UpdateSearchResultsViewL()
+// updates the search results data to the search results list
+// ---------------------------------------------------------------------------
+//    
+
+void CIRStationsViewContainer::UpdateStationsViewL()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::UpdateStationsViewL - Entering" );
+
+	//provides logo url in the search results stations
+	TInt stationsCount = iView.iIsdsWrapper->iStationsData->Count();
+	for(TInt i = 0; i < stationsCount; i++)
+		{
+		//check whether logo url exist for the current channel of the search results
+		for(TInt m = 0; m < iNoLogosArray.Count(); m++)
+			{
+			if(i == iNoLogosArray[m])				
+				{
+				//logo should not be displayed in the search results for this particular station
+				HBufC* itemString = FormatItemStringLC( iView.iIsdsWrapper->iStationsData->
+														MdcaPoint(i),KIRNoLogo);
+				iItemArray->AppendL( itemString->Des() );
+				CleanupStack::PopAndDestroy( itemString );
+				
+				break;
+				}
+			}
+			
+		for(TInt n = 0; n < iLogosArray.Count(); n++)
+			{
+			if(i == iLogosArray[n])
+				{
+				//logo should be displayed in the search results for this particular station
+				HBufC* itemString = FormatItemStringLC( iView.iIsdsWrapper->iStationsData->
+														MdcaPoint(i),i);
+				iItemArray->AppendL( itemString->Des() );
+				CleanupStack::PopAndDestroy( itemString );
+				break;
+				}
+			}
+		}
+	if(iFilteredFlag)
+		{
+		TKeyEvent event;
+		TEventCode type = EEventKey;
+		event.iCode = EKeyDownArrow;
+		TBool needRefresh( EFalse );
+		AknFind::HandleFindOfferKeyEventL( event, type, this,
+		iStationsListBox, iStationsSearchBox,EFalse,needRefresh );
+		TInt filterModelCount = iFilteredModel->NumberOfItems();	
+		if(filterModelCount ==1 && iView.iUi->iIsdsWrapper->GetBannerUrl())
+			{
+			iStationsListBox->SetCurrentItemIndex(0);
+			}
+		else
+			{
+			if(filterModelCount>1 && iView.iUi->iIsdsWrapper->GetBannerUrl() && !iLogoDownloadError)
+			iStationsListBox->SetCurrentItemIndex(1);
+			}
+		}
+	else
+		{
+		iStationsListBox->HandleItemAdditionL();
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::UpdateStationsViewL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::FormatItemStringLC
+// Formatter for list item strings.
+// ---------------------------------------------------------------------------
+//
+HBufC* CIRStationsViewContainer::FormatItemStringLC( const TDesC& aFirstRow, 
+											 TInt aIconId )
+    {
+ 	_LIT(KItemFormatStringWithLogo, "%d%S"); 
+	_LIT(KItemFormatStringWithOutLogo, "%S");   
+
+    TInt length = KIRListItemBaseLength + aFirstRow.Length() ;
+    HBufC* itemString = HBufC::NewLC( length );
+    
+    TPtrC formatStringWithIcon( KItemFormatStringWithLogo );
+    TPtrC formatStringWithoutIcon( KItemFormatStringWithOutLogo );
+
+    if( aIconId >= 0 && aIconId <= KRange )
+        {
+        itemString->Des().Format( KItemFormatStringWithLogo, aIconId, &aFirstRow);
+        }
+    else 
+        {
+        itemString->Des().Format( KItemFormatStringWithOutLogo, &aFirstRow);
+        }
+    
+    return itemString;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::GetCurrentItemIndex()
+// returns the index of the currently selected item
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRStationsViewContainer::GetCurrentItemIndex() const
+    {
+    IRLOG_DEBUG( "CIRStationsViewContainer::GetCurrentItemIndex" );
+	return iStationsListBox->CurrentItemIndex();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::GetListBoxTopIndex()
+// returns the index of the top item
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRStationsViewContainer::GetListBoxTopIndex() const
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetListBoxTopIndex" );
+	return iStationsListBox->View()->TopItemIndex () ;
+	}
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::GetSearchBoxPointer()
+// returns the search box pointer.
+// ---------------------------------------------------------------------------
+//
+CAknSearchField* CIRStationsViewContainer::GetSearchBoxPointer()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetSearchBoxPointer" );
+	return 	iStationsSearchBox;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::GetFilterdModelPointer()
+// returns pointer to filtered model.
+// ---------------------------------------------------------------------------
+//
+CIRFilteredModel* CIRStationsViewContainer::GetFilterdModelPointer()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetListPointer" );
+	return iFilteredModel;	
+	}
+//----------------------------------------------------------------------------
+// CIRStationsViewContainer::CountComponentControls() const
+// returns the number of components in the view.
+//----------------------------------------------------------------------------
+//
+TInt CIRStationsViewContainer::CountComponentControls() const
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::CountComponentControls - Entering" );
+	TInt count(KCONTROLSCOUNT);
+	IRLOG_DEBUG( "CIRStationsViewContainer::CountComponentControls - Exiting" );
+	if(iStationsListBox)
+		{
+		count++;
+		}
+	if(iStationsSearchBox)
+		{
+		count++;
+		}
+	return count;
+	}
+//----------------------------------------------------------------------------
+// CIRStationsViewContainer::ComponentControl() const
+// returns a pointer to the control under this view depending on the index
+// passed,to the framework.
+//----------------------------------------------------------------------------
+// 
+CCoeControl* CIRStationsViewContainer::ComponentControl(TInt aIndex) const
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::ComponentControl - Entering" );
+	IRLOG_DEBUG( "CIRStationsViewContainer::ComponentControl - Exiting" );
+	switch(aIndex)
+		{
+		case 0:
+			{
+			if(iStationsListBox)
+			return iStationsListBox;
+			}
+		case 1:
+			{
+			if(iStationsSearchBox)
+			return iStationsSearchBox;
+			}
+		default:
+			return NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// void CIRStationsViewContainer::SizeChanged(const TRect& aRect)
+// Responds to changes to the size and position of the contents of this control.
+// ---------------------------------------------------------------------------
+//
+
+void CIRStationsViewContainer::SizeChanged()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::SizeChanged - Entering" );
+	if(iView.iUi->IsLandscapeOrientation())
+		{
+		if(iStationsListBox && iStationsSearchBox && iLandScapeCount ==0)
+			{
+	   		AknFind::HandlePopupFindSizeChanged(this,iStationsListBox,iStationsSearchBox);
+	   		iLandScapeCount ++;
+			}
+		}
+	if(iStationsListBox && iStationsSearchBox)
+		{
+	    AknLayoutUtils::LayoutControl(iStationsListBox,  Rect(),
+            AKN_LAYOUT_WINDOW_list_gen_pane(1));
+        AknLayoutUtils::LayoutControl(iStationsSearchBox,  Rect(),
+            AKN_LAYOUT_WINDOW_find_pane);
+		}
+	else
+		{
+		if(iStationsListBox)
+			{
+			AknLayoutUtils::LayoutControl(iStationsListBox, Rect(),
+            	AKN_LAYOUT_WINDOW_list_gen_pane(0));
+			}
+		}
+	TRect clientRect(((CEikAppUi*)(CCoeEnv::Static()->AppUi()))->ClientRect());
+	TRect parentRectSize(TPoint(0,0),clientRect.iBr);
+
+	if ( iBgContext )
+		{
+		iBgContext->SetRect(parentRectSize);
+		}
+	DrawNow();	
+	IRLOG_DEBUG( "CIRStationsViewContainer::SizeChanged - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRStationsViewContainer::HandleResourceChange(TInt aType)
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::HandleResourceChange(TInt aType)
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleResourceChange - Entering" );
+    CCoeControl::HandleResourceChange( aType );
+    // application layout change request notification
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        // reconstruct controls if needed
+        if(iStationsListBox && iStationsSearchBox )
+	        {
+	   		AknFind::HandlePopupFindSizeChanged(this,iStationsListBox,iStationsSearchBox);
+	        SizeChanged();
+	        }
+        }
+	iView.SetToolbarItems();
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleResourceChange - Exiting" );
+	}
+//----------------------------------------------------------------------------
+// CIRStationsViewContainer::CreateFindBoxL()
+// creates the Find box when any character is Pressed
+//----------------------------------------------------------------------------
+// 
+CAknSearchField* CIRStationsViewContainer::CreateFindBoxL(CEikListBox* aListBox,
+CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle)
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateFindBoxL - Entering" );
+	CAknSearchField* findbox = NULL;
+	if (aListBox && aModel)
+		{
+		// Gets pointer of CAknFilteredTextListBoxModel.
+		// Added For Dynamic Filtering
+		 iFilteredModel = STATIC_CAST( CIRFilteredModel*, aModel );
+		// Creates FindBox.
+		findbox = CAknSearchField::NewL( *this, aStyle, NULL,
+		KAknExListFindBoxTextLength);
+		CleanupStack::PushL(findbox);
+		// Creates CAknListBoxFilterItems class.
+		iFilteredModel->CreateFilterL( aListBox, findbox );
+		CleanupStack::Pop(findbox); // findbox
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::CreateFindBoxL - Exiting" );
+	return findbox;
+	}
+//----------------------------------------------------------------------------
+// CIRStationsViewContainer::DisableFindBox()
+// Deletes the findbox
+//----------------------------------------------------------------------------
+// 
+void CIRStationsViewContainer::DisableFindBox()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::DisableFindBox - Entering" );
+	if (iStationsSearchBox)
+		{
+		iFilteredModel->RemoveFilter();
+		// Important to set the find box non-focusing before
+		// deleting it, otherwise the focus changes triggered
+		// by the removal of the control from stack will focus
+		// the find box which is under deletion
+		iStationsSearchBox->SetNonFocusing();
+		delete iStationsSearchBox;
+		iStationsSearchBox = NULL;
+		// Inform list box that find is hidden
+		static_cast<CAknColumnListBoxView*>(iStationsListBox->View())->SetFindEmptyListState(EFalse);
+		SizeChanged();
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::DisableFindBox - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : Comparestrings
+// Function called to compare the filtered string inthe Itemarray
+// ---------------------------------------------------------------------------
+//
+void  CIRStationsViewContainer::Comparestrings()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::Comparestrings - Entering" );
+	TInt count = iFilteredModel->NumberOfItems();	
+	if(count)
+		{
+		if((count==1) && iAdvPreset && !iLogoDownloadError)
+			{
+			return;
+			}
+		else
+			{
+			TPtrC16 filteredString = iFilteredModel->ItemText (iView.GetFilteredIndex());
+			for(TInt i=0;i<iItemArray->Count();i++)
+				{
+				TPtrC16 matchString=iItemArray->MdcaPoint(i);
+				if(filteredString==matchString)
+					{
+					iView.SetActualFilteredItemIndex(i);
+					break;
+					}
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRStationsViewContainer::Comparestrings - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRStationsViewContainer::HandleImageConversionEventL( MIRImageConverterObserver::TIRImageConversionEvent /*aEvent*/, 
+// from base class MIRImageConverterObserver
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::HandleImageConversionEventL( 
+						MIRImageConverterObserver::TIRImageConversionEvent aEvent, 
+                                                           TInt aId, 
+                                                           TInt aError )
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleImageConversionEventL - Entering" );
+	iError=aError;
+	if(aError == KErrNotSupported && iRequestForAdvertisement)
+		{
+		iLogoDownloadError	= ETrue;
+		iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+		iRequestForAdvertisement = EFalse;
+		}
+	if ( !aError && aEvent == MIRImageConverterObserver::EIRImageConversionCompleted )
+		{
+		IRLOG_DEBUG( "CIRStationsViewContainer::HandleImageConversionEventL - Entering if" );
+		if(iRequestForAdvertisement)
+			{
+	        CFbsBitmap* bitmap = NULL;
+	        CFbsBitmap* mask = NULL;
+	        
+	        iCurrentItemConverter->TransferBitmapOwnership( bitmap, mask );
+	        if ( bitmap && mask )
+		        {
+          	    CleanupStack::PushL( bitmap );
+            	CleanupStack::PushL( mask );
+		      	CGulIcon* icon = CGulIcon::NewLC();
+                
+                icon->SetBitmap( bitmap );
+                icon->SetMask( mask );
+                icon->SetBitmapsOwnedExternally( ETrue );
+                
+                iStationsListBox->SetAdvertisementIconL( icon );
+                
+                CleanupStack::Pop( icon );
+                icon->SetBitmapsOwnedExternally( EFalse );
+                CleanupStack::Pop( mask );
+                CleanupStack::Pop( bitmap );
+		        }
+			iRequestForAdvertisement = EFalse;
+			iLogoDownloadError	= EFalse;
+			}
+		else
+			{
+			if ( iInvalidIconIndices.Count() )
+				{
+				iIconIndex = iInvalidIconIndices[0];		
+				iLogosArray.InsertInOrderL(iInvalidIconIndices[0]);
+				if(iNoLogosArray.Count())
+					{
+					iNoLogosArray.Remove(iNoLogosArray.FindInOrder(iIconIndex));
+					}
+				CArrayPtr<CGulIcon>* iconArray = iStationsListBox->ItemDrawer()
+						->FormattedCellData()->IconArray();
+				if(aError == KErrNone)
+					{
+					if(aId == KErrUnknown)
+						{
+						if ( iInvalidIconIndices.Count() )
+							{
+							iInvalidIconIndices.Remove( 0 );
+							}					
+						}
+
+					CFbsBitmap* bitmap = NULL;
+					CFbsBitmap* mask = NULL;
+					aId == KErrUnknown ? iConverter->TransferBitmapOwnership( bitmap, mask ) : 
+					iCurrentItemConverter->TransferBitmapOwnership( bitmap, mask );
+					if ( bitmap && mask )
+						{
+			      	    CleanupStack::PushL( bitmap );
+			        	CleanupStack::PushL( mask );
+						CGulIcon* icon = CGulIcon::NewLC();
+						icon->SetBitmap( bitmap );
+						icon->SetMask( mask );
+						icon->SetBitmapsOwnedExternally( EFalse );
+
+						iconArray->InsertL( iIconIndex, icon );
+						CleanupStack::Pop( icon );
+						if(iIconIndex+1 < iconArray->Count())
+							{
+							icon = iconArray->At( iIconIndex+1 );
+							iconArray->Delete( iIconIndex+1 );
+							delete icon;
+							}
+						}
+	                CleanupStack::Pop( mask );
+	                CleanupStack::Pop( bitmap );
+					iStationsListBox->DrawNow();
+					}
+				}
+			iItemArray->Reset();
+			if(iAdvString )
+				{
+				if(!iLogoDownloadError)
+				iFilteredModel->SetItemAtZero(ETrue,*iAdvString);
+				}
+
+			UpdateStationsViewL();
+			if ( iInvalidIconIndices.Count() && aId == KErrUnknown )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+			}
+
+		}
+	else if ( !aError && aEvent == MIRImageConverterObserver::EIRFrameConversionCompleted )
+		{
+		iRequestForAdvertisement = EFalse;
+		iLogoDownloadError	= EFalse;
+		CGulIcon* icon = iStationsListBox->AdvertisementIcon(); 
+		if ( !icon )
+			{
+			icon = CGulIcon::NewLC();
+			iStationsListBox->SetAdvertisementIconL( icon );
+			CleanupStack::Pop( icon );
+			}
+		icon->SetBitmap( const_cast<CFbsBitmap*>(iCurrentItemConverter->Bitmap()));
+		icon->SetMask(const_cast<CFbsBitmap*>(iCurrentItemConverter->Mask() ));
+		icon->SetBitmapsOwnedExternally( ETrue );
+		DrawDeferred();
+		}
+	else
+		{
+
+		}
+	if(iAdPresent)
+		{
+		if ( iInvalidIconIndices.Count() )
+			{
+			iRequestForAdvertisement = EFalse;
+			iView.SetCurrentFocus(1);	
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+
+		}
+	iAdPresent = EFalse;
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleImageConversionEventL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRStationsViewContainer::HandleLogoErrorL()
+// called from the iStationsView when the logo is not downloaded
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::HandleLogoErrorL()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleLogoErrorL - Entering" );
+	if(iAdRequestStatusFlag)
+		{
+		iLogoDownloadError	= ETrue;
+		iFilteredModel->SetAdvFlag(EFalse,*iAdvString);
+		iAdRequestStatusFlag = EFalse;
+		iAdPresent = EFalse;
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}
+	else
+		{
+		if ( iInvalidIconIndices.Count()  )
+			{
+			iInvalidIconIndices.Remove( 0 );
+			}	
+		if ( iInvalidIconIndices.Count() )
+			{
+			StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+			}
+		}	
+	IRLOG_DEBUG( "CIRStationsViewContainer::HandleLogoErrorL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRStationsViewContainer::StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt aId )
+// used to convert the images depending the index passed
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::StartConvertL( CIRImageConverter& aConverter, TInt aIndex, TInt /*aId*/ )
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::StartConvertL - Entering" );
+	TInt channelsCount = iView.iIsdsWrapper->iStationsData->Count();
+	iResult = 0;
+	RBuf url;
+	url.Create(iView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(aIndex).Size());
+	url.Copy(iView.iIsdsWrapper->iChannelImgUrl->MdcaPoint(aIndex));
+
+	iView.iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+			GetLogoDownloadEngine()->GetCacheLogoL(url,iResult);
+
+	if((iResult == 0) || (iResult == -1))//not available in the cache or cache is stale/not useable
+		{
+		//code to download the logo
+		if(iTempPreset)
+			{
+			delete iTempPreset;
+			iTempPreset = NULL;
+			}
+		iTempPreset=CIRIsdsPreset::NewL();
+		iTempPreset->SetChannelType(1);
+		iTempPreset->SetImgUrl(url);		
+		iView.LogoRequestL();
+		}
+	else if(iResult == 1)//cache is useable
+		{
+		iError=KErrNone;
+		aConverter.SetDataL(iView.iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->
+					GetHttpDataProvider()->GetLogoDownloadEngine()->SendCacheLogo());
+					
+		if(iError==KErrNone)
+			{
+			iConverter->StartL( KBitmapSize, KErrUnknown );	
+			}
+			else
+			{
+		if( iError!=KErrNone)
+			{
+			if ( iInvalidIconIndices.Count() )
+				{
+				iInvalidIconIndices.Remove( 0 );
+				}	
+			if ( iInvalidIconIndices.Count() )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+			}
+			}
+		}
+	url.Close();
+	IRLOG_DEBUG( "CIRStationsViewContainer::StartConvertL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::PresetLogoDownloadL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::PresetLogoDownloadL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::PresetLogoDownloadL - Entering" );
+	if(iAdPresent && iAdRequestStatusFlag)
+		{
+		if (iView.iUi->iIsdsWrapper->GetBannerUrl())
+			{
+			*iAdvPreset = *aPreset;	
+			if(iAdvPreset->GetLogoData()!=KNullDesC8 )
+				{
+				iFilteredModel->SetAdvFlag(ETrue,*iAdvString);
+				iError=KErrNone;
+				iCurrentItemConverter->SetDataL(aPreset->GetLogoData());
+				if(iError==KErrNone)
+					{
+					iCurrentItemConverter->StartL( IRLayoutUtils::AdvertisementSizeL(), KErrUnknown );//KLogoSize
+					}
+				iRequestForAdvertisement = ETrue;	
+				iAdRequestStatusFlag = EFalse;
+				}
+			}
+		return ;
+		}
+
+	if(aPreset->GetLogoData()!=KNullDesC8)
+		{
+		iRequestForAdvertisement = EFalse;
+		iError=KErrNone;	
+		iConverter->SetDataL(aPreset->GetLogoData());
+		if(iError==KErrNone)
+			{
+			iConverter->StartL( KBitmapSize, KErrUnknown );	
+			}
+		if(iError!=KErrNone)
+			{
+			if ( iInvalidIconIndices.Count() )
+				{
+				iInvalidIconIndices.Remove( 0 );
+				}	
+			if ( iInvalidIconIndices.Count() )
+				{
+				StartConvertL( *iConverter, iInvalidIconIndices[0], KErrUnknown );
+				}
+			}
+		}
+
+	IRLOG_DEBUG( "CIRStationsViewContainer::PresetLogoDownloadL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRStationsViewContainer::OpenUrlL( const TDesC& aHttpLink)
+// used to connect to the advertisement url.
+// ---------------------------------------------------------------------------
+//
+void CIRStationsViewContainer::OpenUrlL( const TDesC& aHttpLink )
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::OpenUrlL - Entering" );
+
+	TDataType htmlDataType( KIRHtmlMimeType );
+	TUid uid;
+
+	RApaLsSession ls;
+	User::LeaveIfError( ls.Connect() );
+	CleanupClosePushL( ls );
+
+	// Get UID of the browser.
+	TInt retVal = ls.AppForDataType( htmlDataType, uid );
+
+	if ( retVal == KErrNone && uid != KNullUid )
+		{
+		// We must check if the browser is already open and if it is, 
+		// switch its currently opened file to the correct URL.
+		TApaTaskList taskList( iEikonEnv->WsSession() );
+		TApaTask task = taskList.FindApp( uid );
+		if ( task.Exists() )
+			{
+			HBufC8* url8 = HBufC8::NewLC( aHttpLink.Length() );
+			url8->Des().Copy( aHttpLink );
+			task.SendMessage( TUid::Uid( 0 ), url8->Des() );
+			task.BringToForeground();
+			CleanupStack::PopAndDestroy( url8 );
+			}
+		else
+			{
+			TThreadId threadId;
+			HBufC* newUrl = HBufC::NewLC( aHttpLink.Length() + KBrowserPrefix().Length() );
+			newUrl->Des().Append( KBrowserPrefix );
+			newUrl->Des().Append( aHttpLink );
+			ls.StartDocument( newUrl->Des(), uid, threadId );
+			CleanupStack::PopAndDestroy( newUrl );
+			}
+		}
+	CleanupStack::PopAndDestroy( &ls );
+
+	IRLOG_DEBUG( "CIRStationsViewContainer::OpenUrlL - Exiting" );
+
+	}
+//----------------------------------------------------------------------------
+// CIRStationsViewContainer::GetLogoNotSupported() 
+// returns whether the advertisement is supported by the sdk r not
+//----------------------------------------------------------------------------
+// 	
+TBool CIRStationsViewContainer::GetLogoNotSupported()
+	{
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetLogoNotSupported - Entering" );
+	IRLOG_DEBUG( "CIRStationsViewContainer::GetLogoNotSupported - Exiting" );
+	return iLogoDownloadError;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irsystemeventcollector.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,348 @@
+/*
+* Copyright (c) 2006-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:  Implementation of CIRSystemEventCollector
+*
+*/
+
+
+#include <e32cmn.h>
+#include <UiklafInternalCRKeys.h>
+#include <centralrepository.h>
+
+#include "iraccessoryobserver.h"
+#include "irdiskspacewatcher.h"
+//#include "irrepositorymanager.h"
+#include "irsystemeventcollector.h"
+#include "irsystemeventdetector.h"
+#include "irdebug.h"
+
+// Constants
+const TInt KIRObserverArrayGranularity( 2 );
+const TInt KIR_DEFAULT_CRITICAL_LEVEL = 3145728;	// 3MB
+const TInt KThree =3;  
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CIRSystemEventCollector::CIRSystemEventCollector() : 
+    iSystemEventObservers( KIRObserverArrayGranularity )
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::CIRSystemEventCollector" );
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventCollector::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::ConstructL - Entering" );
+    iSystemEventDetector = CIRSystemEventDetector::NewL( *this );
+
+    iHeadsetObserver = CIRAccessoryObserver::NewL();
+    iHeadsetObserver->SetObserver( this );
+
+    TInt criticalLevel = 0;
+
+	CRepository* cenrep = CRepository::NewLC(KCRUidUiklaf );
+	TInt err = cenrep->Get(KUikOODDiskCriticalThreshold, criticalLevel);
+	CleanupStack::PopAndDestroy(cenrep);
+	if(err != KErrNone)
+		{
+		criticalLevel = KIR_DEFAULT_CRITICAL_LEVEL;
+		IRLOG_WARNING( "CIRSystemEventCollector::ConstructL - Failed to read criticalLevel. Using default 3MB" );
+		}
+    criticalLevel = criticalLevel * KThree;
+    iDiskSpaceWatcher = CIRDiskSpaceWatcher::NewL( static_cast<TInt64>( criticalLevel ), *this );
+    iDiskSpaceWatcher->StartObservingDriveL( KVRDefaultDrive );
+
+	IRRDEBUG3("CIRSystemEventCollector::ConstructL - DiskSpaceWather started. driveNum=%d, criticalLevel=%d ", KVRDefaultDrive, criticalLevel );
+
+    IRLOG_DEBUG( "CIRSystemEventCollector::ConstructL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CIRSystemEventCollector* CIRSystemEventCollector::NewL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::NewL - Entering" );
+    CIRSystemEventCollector* self = new( ELeave ) CIRSystemEventCollector;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRSystemEventCollector::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRSystemEventCollector::~CIRSystemEventCollector()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::~CIRSystemEventCollector - Entering" );
+    delete iSystemEventDetector;
+    delete iHeadsetObserver;
+    
+    if( iDiskSpaceWatcher )
+	    {
+	    delete iDiskSpaceWatcher;
+	    iDiskSpaceWatcher = NULL;
+	    }
+
+    iSystemEventObservers.Close();
+    IRLOG_DEBUG( "CIRSystemEventCollector::~CIRSystemEventCollector - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Adds a system event observer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRSystemEventCollector::AddObserverL( MIRSystemEventObserver* aHeadsetObserver )
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::AddObserverL - Entering" );
+    iSystemEventObservers.AppendL( aHeadsetObserver );
+    IRLOG_DEBUG( "CIRSystemEventCollector::AddObserverL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Removes a system event observer
+// ---------------------------------------------------------------------------
+//
+ EXPORT_C void CIRSystemEventCollector::RemoveObserver( MIRSystemEventObserver* aSystemObserver )
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::RemoveObserver - Entering" );
+    TInt objectIndex = iSystemEventObservers.Find( aSystemObserver );
+    
+    if ( objectIndex != KErrNotFound )
+        {
+        iSystemEventObservers.Remove( objectIndex );
+        }
+    IRLOG_DEBUG( "CIRSystemEventCollector::RemoveObserver - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for mobile network state
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSystemEventCollector::IsMobileNetworkCoverage() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::IsMobileNetworkCoverage" );
+    return iSystemEventDetector->IsMobileNetworkCoverage();
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for network state
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSystemEventCollector::IsNetworkCoverage() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::IsNetworkCoverage" );
+    return iSystemEventDetector->IsNetworkCoverage();
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for call state
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSystemEventCollector::IsCallActive() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::IsCallActive" );
+    return iSystemEventDetector->IsCallActive();
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for audio resource state
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CIRSystemEventCollector::IsAudioResourcesAvailable() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::IsAudioResourcesAvailable" );
+    return iSystemEventDetector->IsAudioResourcesAvailable();
+    }
+
+// ---------------------------------------------------------------------------
+// Getter for headset connection status
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CIRSystemEventCollector::IsHeadsetConnected() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::IsHeadsetConnected" );
+    return iHeadsetObserver->IsHeadsetConnected();
+    }
+    
+// ---------------------------------------------------------------------------
+// Getter disk space state
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CIRSystemEventCollector::IsDiskSpaceBelowCriticalLevel() const
+    {
+    return iDiskSpaceWatcher->IsBelowCriticalLevel( KVRDefaultDrive );
+    }
+
+// ---------------------------------------------------------------------------
+// Getter Vocie UI state
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CIRSystemEventCollector::IsVoiceUiActive() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::IsVoiceUiActive" );
+    return iSystemEventDetector->IsVoiceUiActive();
+    }
+
+// ---------------------------------------------------------------------------
+// Notifies the observers of system event
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventCollector::NotifyObserversL(TIRSystemEventType aEvent)
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyObserversL - Entering" );
+    for (TInt i = 0 ; i < iSystemEventObservers.Count() ; i++ )
+        {
+        iSystemEventObservers[i]->HandleSystemEventL( aEvent );
+        }
+    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyObserversL - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::NetworkUpCallbackL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkUpCallbackL - Entering" );
+    NotifyObserversL( EIRNetworkCoverageUp );
+    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkUpCallbackL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::NetworkDownCallbackL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkDownCallbackL - Entering" );
+    NotifyObserversL( EIRNetworkCoverageDown );
+    IRLOG_DEBUG( "CIRSystemEventCollector::NetworkDownCallbackL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::CallActivatedCallbackL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::CallActivatedCallbackL - Entering" );
+    NotifyObserversL( EIRCallActivated );
+    IRLOG_DEBUG( "CIRSystemEventCollector::CallActivatedCallbackL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::CallDeactivatedCallbackL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::CallDeactivatedCallbackL - Entering" );
+    NotifyObserversL( EIRCallDeactivated );
+    IRLOG_DEBUG( "CIRSystemEventCollector::CallDeactivatedCallbackL - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::AudioResourcesAvailableL()
+    { 
+    IRLOG_DEBUG( "CIRSystemEventCollector::AudioResourcesAvailableL - Entering" );
+    NotifyObserversL( EIRAudioResourcesAvailable );
+    IRLOG_DEBUG( "CIRSystemEventCollector::AudioResourcesAvailableL - Exiting" );
+    }
+
+    
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::AudioAutoResumeForbiddenL()
+    {    
+    IRLOG_DEBUG( "CIRSystemEventCollector::AudioAutoResumeForbiddenL - Entering" );
+    NotifyObserversL( EIRAudioAutoResumeForbidden );
+    IRLOG_DEBUG( "CIRSystemEventCollector::AudioAutoResumeForbiddenL - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// From class MIRSystemEventDetectorObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::ErrorCallbackL( TInt /* aError VRDEBUGVAR( aError ) d*/)
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::ErrorCallbackL" );
+    // P&S get fail not considered as a critical issue.
+	return;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRHeadsetEventObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::HeadsetConnectedCallbackL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetConnectedCallbackL - Entering" );
+    NotifyObserversL( EIRHeadsetConnected );
+    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetConnectedCallbackL - Exiting" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MIRHeadsetEventObserver.
+// ---------------------------------------------------------------------------
+//        
+void CIRSystemEventCollector::HeadsetDisconnectedCallbackL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetDisconnectedCallbackL - Entering" );
+    NotifyObserversL( EIRHeadsetDisconnected );
+    IRLOG_DEBUG( "CIRSystemEventCollector::HeadsetDisconnectedCallbackL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRDiskSpaceWatcherObserver.
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventCollector::NotifyLowDiskSpaceL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyLowDiskSpaceL - Entering" );
+    NotifyObserversL( EIRLowDiskSpace );
+    IRLOG_DEBUG( "CIRSystemEventCollector::NotifyLowDiskSpaceL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MIRAudioRoutingObserver.
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventCollector::AudioRoutingChangedL( TVROutputDestination aOutputDestination )
+    {
+    IRLOG_DEBUG( "CIRSystemEventCollector::AudioRoutingChangedL - Entering" );
+    TIRSystemEventType ev = EIRAudioRoutingHeadset; 
+    if(aOutputDestination != EVRHeadset)
+        {
+        ev = EIRAudioRoutingSpeaker;
+        }
+
+    NotifyObserversL( ev );
+    IRLOG_DEBUG( "CIRSystemEventCollector::AudioRoutingChangedL - Exiting" );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irsystemeventdetector.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,480 @@
+/*
+* Copyright (c) 2004-2008 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:  
+*   Class provides implementation to detect system events and notify UI 
+*   components of the event, Class keeps several instances of 
+*   CIRPropertyObserver2, and those instances send event notifications 
+*   about the particular system component state change. 
+*
+*/
+	
+
+#include <e32def.h> // Define before audiopolicy defs
+#include <e32std.h> // Define before audiopolicy defs
+#include <eikdef.h>
+
+#ifndef __WINS__
+
+//#include <audiopolicypubsubdata.h>
+//#include <audiosw_pubsubkeys.h>
+
+#endif //__WINS__
+
+#include <ctsydomainpskeys.h>
+#include <wlaninternalpskeys.h>
+#include <sacls.h>
+#ifdef MUSICSHOP_AVAILABLE
+#include <voiceuidomainpskeys.h>
+#endif
+#include <featmgr.h>
+//d #include <vrdebug.h>
+
+#include "irsystemeventdetector.h"
+#include "irsystemeventdetectorobserver.h"
+#include "irdebug.h"
+
+/** Granularity for audio category arrays. */
+const TInt KVRAudioCategoryArrayGranularity = 3;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRSystemEventDetector::CIRSystemEventDetector(MIRSystemEventDetectorObserver&  aObserver) 
+    :    iObserver(aObserver),
+         iIsMobileNetworkCoverage(EFalse),
+         iIsWlanCoverage(EFalse),
+         iIsCallActive(EFalse),
+         iIsAudioResourcesAvailable(ETrue),
+         iIsVoiceUiActive(EFalse)
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::CIRSystemEventDetector" );
+    }
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::ConstructL - Entering" );
+    FeatureManager::InitializeLibL();
+    TBool wlanSupported = FeatureManager::FeatureSupported(KFeatureIdProtocolWlan);
+    FeatureManager::UnInitializeLib();
+    
+
+        iNetworkStatusObserver = CIRPropertyObserver2::NewL(*this, 
+                                 KUidSystemCategory, 
+                                 KUidNetworkStatusValue, 
+                                 CIRPropertyObserver2::EIRPropertyInt);
+        iNetworkStatusObserver->ActivateL();
+        
+    iIsMobileNetworkCoverage = (iNetworkStatusObserver->ValueInt() == ESANetworkAvailable) ? 
+    										ETrue : EFalse;
+
+    // On S60 platform, there is no guaranteed way of seeing whether WLAN is explicitly turned off
+    // in the settings, or whether the network is available. We use the P&S key KPSUidWlan/KPSWlanIndicator
+    // because it is the best we can get.
+    if (wlanSupported)
+        {
+        iWlanObserver = CIRPropertyObserver2::NewL(*this,
+                        KPSUidWlan,
+                        KPSWlanIndicator,
+                        CIRPropertyObserver2::EIRPropertyInt);
+        iWlanObserver->ActivateL();
+
+        TInt wlanStatus = iWlanObserver->ValueInt();
+        iIsWlanCoverage = (wlanStatus == EPSWlanIndicatorActive || wlanStatus == 
+        			EPSWlanIndicatorActiveSecure) ? ETrue : EFalse;
+        }
+    else
+        {
+        iIsWlanCoverage = EFalse;
+        }
+
+    // Initialize call state observer.
+    iCallStatusObserver = CIRPropertyObserver2::NewL(*this, 
+                                                      KPSUidCtsyCallInformation, 
+                                                      KCTsyCallState, 
+                                                      CIRPropertyObserver2::EIRPropertyInt);
+    iCallStatusObserver->ActivateL();
+    iIsCallActive = iCallStatusObserver->ValueInt() != EPSCTsyCallStateNone;
+    
+#ifdef MUSICSHOP_AVAILABLE
+    // Initialize voice ui observer.
+    iVoiceUiObserver = CIRPropertyObserver2::NewL(*this, KPSUidVoiceUiAccMonitor, KVoiceUiOpenKey,
+    					 CIRPropertyObserver2::EIRPropertyInt);
+    iVoiceUiObserver->ActivateL();    					    
+#endif
+    IRLOG_DEBUG( "CIRSystemEventDetector::ConstructL - Exiting" );
+
+#ifndef __WINS__
+    // Define audio types for not resuming.
+    iNoAutoResumeAudioCategories = RArray<TInt>( KVRAudioCategoryArrayGranularity );
+//    iNoAutoResumeAudioCategories.AppendL(ECatMediaPlayer)
+//    iNoAutoResumeAudioCategories.AppendL(ECatMobileTv)
+//    iNoAutoResumeAudioCategories.AppendL(ECatUnknownPlayer)
+    iNoAutoResumeAudioCategories.Compress();
+    // Start listening audio client events
+//	iAudioPolicyObserver = CIRPropertyObserver2::NewL(*this, KPSUidMMFAudioServer, KAudioPolicyAudioClients, CIRPropertyObserver2::EIRPropertyByteArray)
+//	iAudioPolicyObserver->ActivateL()
+#endif
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRSystemEventDetector::~CIRSystemEventDetector()
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::~CIRSystemEventDetector - Entering" );
+    FeatureManager::UnInitializeLib();
+    delete iCallStatusObserver;
+    delete iNetworkStatusObserver;
+    delete iVoiceUiObserver;
+//    delete iAudioPolicyObserver
+    delete iWlanObserver;
+
+    iNoAutoResumeAudioCategories.Close();
+    IRLOG_DEBUG( "CIRSystemEventDetector::~CIRSystemEventDetector - Exiting" );
+    }
+    
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRSystemEventDetector* CIRSystemEventDetector::NewL(
+                                    MIRSystemEventDetectorObserver&  aObserver)
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::NewL - Entering" );
+    CIRSystemEventDetector* self = new (ELeave) CIRSystemEventDetector(aObserver);
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRSystemEventDetector::NewL - Exiting" );
+    return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// Handling of the int property changes is done here. 
+// Observer components are getting notifications in correspondence with what 
+// has changed
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::HandlePropertyChangeL( const TUid& aCategory, 
+                                                    const TUint aKey, 
+                                                    const TInt aValue )
+	{
+	IRLOG_DEBUG( "CIRSystemEventDetector::HandlePropertyChangeL - Entering" );
+    if (aCategory == KUidSystemCategory && aKey == KUidNetworkStatusValue)
+    	{
+    	switch (aValue)
+    		{
+    		case ESANetworkAvailable:
+    			{
+                SetNetworkCoverageL( ETrue, iIsWlanCoverage );
+    			break;
+    			}
+    		case ESANetworkUnAvailable:
+    			{
+                SetNetworkCoverageL( EFalse, iIsWlanCoverage );
+    			break;
+    			}
+    		default:
+    			{
+    			break;   			
+    			}
+    		}
+    	}
+    else if (aCategory == KPSUidCtsyCallInformation && aKey == KCTsyCallState)
+    	{
+		if ((!iIsCallActive) && (aValue > EPSCTsyCallStateNone)) 
+			{
+			iIsCallActive = ETrue;
+			iObserver.CallActivatedCallbackL();
+			}
+		else if ((iIsCallActive) && (aValue <= EPSCTsyCallStateNone))
+			{
+			iIsCallActive = EFalse;
+			iObserver.CallDeactivatedCallbackL();	
+			}
+        }
+    else if ( aCategory == KPSUidWlan && aKey == KPSWlanIndicator )
+        {
+        switch (aValue)
+            {
+            case EPSWlanIndicatorActive:
+            case EPSWlanIndicatorActiveSecure:
+                {
+                SetNetworkCoverageL( iIsMobileNetworkCoverage, ETrue );
+                break;
+                }
+            case EPSWlanIndicatorNone:
+            case EPSWlanIndicatorAvailable:
+                {
+                SetNetworkCoverageL( iIsMobileNetworkCoverage, EFalse );
+                break;
+                }
+            default:
+                {
+                break;
+                }
+			}
+    	}
+#ifdef MUSICSHOP_AVAILABLE
+    else if ( aCategory == KPSUidVoiceUiAccMonitor && aKey == KVoiceUiOpenKey )
+        {
+        switch (aValue)
+    		{
+    		case KVoiceUiIsClose:
+    			{
+				if (iIsVoiceUiActive)
+				    {
+				    iIsVoiceUiActive = EFalse;
+				    if (iIsAudioResourcesAvailable)
+				        {
+            		    iObserver.AudioResourcesAvailableL();
+				        }
+				    }
+    			break;
+    			}
+    		case KVoiceUiIsOpen:
+    			{
+    			if (!iIsVoiceUiActive)
+    			    {
+    			    iIsVoiceUiActive = ETrue;
+    			    }
+    			break;
+    			}
+    		default:
+    			{
+    			break;   			
+    			}
+    		}
+        }
+#endif
+    else // NOP
+    	{
+    	}
+    IRLOG_DEBUG( "CIRSystemEventDetector::HandlePropertyChangeL - Exiting" );
+ 	}
+
+#ifndef __WINS__	
+// ---------------------------------------------------------------------------
+// Handling of the byte array property changes is done here. 
+// Observer components are getting notifications in correspondence with what 
+// has changed
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::HandlePropertyChangeL( const TUid& aCategory, 
+                                                    const TUint aKey, 
+                                                    const TDesC8& aValue)
+	{
+/*    if (aCategory == KPSUidMMFAudioServer)
+        {        
+        if (aKey == KAudioPolicyAudioClients)
+            {
+            TBool atLeastOneAutoResumeAudioPlaying(EFalse);
+            TBool atLeastOneNoAutoResumeAudioPlaying(EFalse);
+            TBool radioPlaying(EFalse);
+            TAudioClientList audioClients;
+            audioClients.Copy(aValue);
+            // Check all playing audios
+            for ( TInt i = 0; i < audioClients().iNumOfProcesses ; i++ )
+                {
+                TInt cat = audioClients().iClientCategoryList[i];
+                VRDEBUG2(" *** S60VisualRadio -- Check audio cat %d", cat);
+                if (cat == ECatFmRadio)
+                    {
+                    radioPlaying = ETrue;
+                    }
+                else if (iNoAutoResumeAudioCategories.Find(cat) != KErrNotFound)
+                    {
+                    atLeastOneNoAutoResumeAudioPlaying = ETrue;
+                    }
+                else
+                    {
+                    atLeastOneAutoResumeAudioPlaying = ETrue;
+                    }
+                }
+                
+            if (!radioPlaying)
+                {
+                // Decide audio resource availability from audio category info.
+                if (atLeastOneNoAutoResumeAudioPlaying)
+            		{
+            		VRDEBUG(" *** S60VisualRadio -- Audio resources not available. Change informed.");
+            		iIsAudioResourcesAvailable = EFalse;
+            		iObserver.AudioAutoResumeForbiddenL();
+            		}
+            	else if (!atLeastOneAutoResumeAudioPlaying)
+            		{
+            		if (!iIsVoiceUiActive)
+            		    {
+            		    VRDEBUG(" *** S60VisualRadio -- Audio resources available. Change informed.");
+            		    iIsAudioResourcesAvailable = ETrue;
+            		    iObserver.AudioResourcesAvailableL();
+            		    }
+            		else
+            		    {
+            		    VRDEBUG(" *** S60VisualRadio -- Audio resources available. Change not informed.");
+            		    iIsAudioResourcesAvailable = ETrue;
+            		    }
+            		}
+            	else
+            	    {
+            	    VRDEBUG(" *** S60VisualRadio -- Audio resources not available. Change not informed.");
+            		iIsAudioResourcesAvailable = EFalse;
+            	    }
+                }
+            else // audio resources are considered to be available when radio is playing
+                {
+                iIsAudioResourcesAvailable = ETrue;
+                }
+            }
+        }
+ */	}
+ 	
+#else //__WINS__
+// ---------------------------------------------------------------------------
+// Dummy version for WINS in order to avoid compiler warnings. 
+// The real implementation of function is above.
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::HandlePropertyChangeL( const TUid& /*aCategory*/, 
+                                                    const TUint /*aKey*/, 
+                                                    const TDesC8& /*aValue*/)
+	{
+	IRLOG_DEBUG( "CIRSystemEventDetector::HandlePropertyChangeL" );
+ 	}
+#endif
+
+// ---------------------------------------------------------------------------
+// Handling of the text property changes is done here. 
+// Observer components are getting notifications in correspondence with what 
+// has changed
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::HandlePropertyChangeL( const TUid& /*aCategory*/, 
+                                                    const TUint /*aKey*/, 
+                                                    const TDesC& /*aValue*/)
+	{
+	IRLOG_DEBUG( "CIRSystemEventDetector::HandlePropertyChangeL" );
+	}
+
+// ---------------------------------------------------------------------------
+// This is a callback function which is called when a P&S components returns 
+// an error
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::HandlePropertyChangeErrorL( const TUid& aCategory, 
+                                                         const TUint aKey, 
+                                                         TInt aError )
+	{
+	IRLOG_DEBUG( "CIRSystemEventDetector::HandlePropertyChangeErrorL - Entering" );
+#ifdef MUSICSHOP_AVAILABLE
+	if ( aCategory == KPSUidVoiceUiAccMonitor && aKey == KVoiceUiOpenKey && aError == KErrNotFound )
+        {
+        HandlePropertyChangeL( KPSUidVoiceUiAccMonitor, KVoiceUiOpenKey, KVoiceUiIsClose );
+        }
+    else
+        {
+        iObserver.ErrorCallbackL(aError);
+        }
+#else  // remove warnings
+    if ( aCategory.iUid == 0x101F8543 || aKey || aError)
+        {
+        // do nothing
+        }
+#endif
+	IRLOG_DEBUG( "CIRSystemEventDetector::HandlePropertyChangeErrorL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+TBool CIRSystemEventDetector::IsMobileNetworkCoverage() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::IsMobileNetworkCoverage" );
+    return iIsMobileNetworkCoverage;
+    }
+// CIRSystemEventDetector::IsNetworkCoverage
+// ---------------------------------------------------------------------------
+//
+TBool CIRSystemEventDetector::IsNetworkCoverage() const
+	{
+	 IRLOG_DEBUG( "CIRSystemEventDetector::IsNetworkCoverage" );
+    return iIsWlanCoverage || iIsMobileNetworkCoverage;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSystemEventDetector::IsCallActive
+// ---------------------------------------------------------------------------
+//
+TBool CIRSystemEventDetector::IsCallActive() const
+	{
+	IRLOG_DEBUG( "CIRSystemEventDetector::IsCallActive" );
+	return iIsCallActive;
+	}
+	
+// ---------------------------------------------------------------------------
+// CIRSystemEventDetector::IsAudioResourcesAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CIRSystemEventDetector::IsAudioResourcesAvailable() const
+	{
+	IRLOG_DEBUG( "CIRSystemEventDetector::IsAudioResourcesAvailable" );
+	return iIsAudioResourcesAvailable;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRSystemEventDetector::IsVoiceUiActive
+// ---------------------------------------------------------------------------
+//
+TBool CIRSystemEventDetector::IsVoiceUiActive() const
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::IsVoiceUiActive" );
+    return iIsVoiceUiActive;
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CIRSystemEventDetector::SetNetworkCoverageL
+// ---------------------------------------------------------------------------
+//
+void CIRSystemEventDetector::SetNetworkCoverageL( const TBool aIsMobileNetworkCoverage,
+					 const TBool aIsWlanCoverage )
+    {
+    IRLOG_DEBUG( "CIRSystemEventDetector::SetNetworkCoverageL - Entering" );
+
+    TBool wasCoverage = IsNetworkCoverage();
+    iIsMobileNetworkCoverage = aIsMobileNetworkCoverage;
+    iIsWlanCoverage = aIsWlanCoverage;
+    TBool isCoverage = IsNetworkCoverage();
+
+    if (isCoverage != wasCoverage)
+        {
+        if (isCoverage)
+            {
+            iObserver.NetworkUpCallbackL();
+            }
+        else
+            {
+            iObserver.NetworkDownCallbackL();
+            }
+        IRLOG_DEBUG( "CIRSystemEventDetector::SetNetworkCoverageL - Exiting" );
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irtopstationsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,887 @@
+/*
+* Copyright (c) 2004 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:  TopStations view class
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Thurs March 20 15:50:00 2008 by Prabina
+*  Ref:
+*  Created new views for the Station Directory Views , Enabled the Touch toolbar functionality , 
+*  Help Options enabled
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Fri March 21 17:20:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations , 
+*  Handled Single/Double tapping on the list itmes
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 4, Mon March 24 18:00:00 2008 by Prabina
+*  Ref:
+*  Added WorkAround for adding different stations to favourites list , Added Wait dialog for adding to favourites
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 5, Tues March 25 17:30:00 2008 by Prabina
+*  Ref:
+*  Fixing the PCLint errors
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 6, Tues March 29 10:30:00 2008 by Prabina
+*  Ref:
+*  Stations View Container Derived from CCoeControl
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 7, Thurs July 18 12:00:00 2008 by Prabina
+*  Ref:
+*  Code Review Comments Fixed
+*
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+
+#include <akniconarray.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <psserv.h>
+#include <hlplch.h>
+#include <aknnotewrappers.h> 
+#include <eikenv.h> 
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include <aknwaitdialog.h> 
+//For Touch Toolbar
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irtopstationsview.h"
+#include "irstationsviewcontainer.h"
+#include "irapplication.h"
+#include "irisdswrapper.h"
+#include "irsettings.h"
+#include "irnowplayingwrapper.h"
+#include "irfilteredmodel.h"
+#include "irpubsub.h"
+
+#include "irimageconverter.h"
+
+#include "irnetworkcontroller.h"
+#include "iractivenetworkobserver.h"
+
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::CIRTopStationsView() 
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRTopStationsView::CIRTopStationsView():iCallRequestPending(EFalse) 
+    {
+	IRLOG_DEBUG( "CIRTopStationsView::CIRTopStationsView" );
+    iResultsReqMade = EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::ConstructL()
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::ConstructL()
+    {
+	IRLOG_DEBUG( "CIRTopStationsView::ConstructL - Entering" );
+    CIRStationsView::ConstructL();
+    
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+    TRgb color;
+    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+    				                                      EAknsCIQsnTextColorsCG6 );
+	if(color.Gray2()!=0)
+		{
+		CreateAndSetToolbarL(R_IR_TOPSTATIONS_WHITE_TOOLBAR);
+		}
+	else
+		{
+		CreateAndSetToolbarL(R_IR_TOPSTATIONS_BLACK_TOOLBAR);	
+		}
+	if( AknLayoutUtils::PenEnabled() && Toolbar() )
+		{
+		Toolbar()->SetToolbarObserver( this );
+		}
+    
+    iTopStationsFilteredIndex = 0;
+    iFirstTimeLaunchFlag = EFalse;
+	IRLOG_DEBUG( "CIRTopStationsView::ConstructL - Exiting" );
+    }
+
+// -----------------------------------------------------------------------------
+// CIRTopStationsView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRTopStationsView* CIRTopStationsView::NewL()
+    {
+ 	IRLOG_DEBUG( "CIRTopStationsView::NewL" );
+    CIRTopStationsView* self = CIRTopStationsView::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "CIRTopStationsView::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRTopStationsView* CIRTopStationsView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRTopStationsView* CIRTopStationsView::NewLC()
+    {
+	IRLOG_DEBUG( "CIRTopStationsView::NewLC - Entering" );
+    CIRTopStationsView* self = new( ELeave ) CIRTopStationsView;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+	IRLOG_DEBUG( "CIRTopStationsView::NewLC - Exiting" );
+    return self;
+    }
+
+    
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::~CIRTopStationsView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRTopStationsView::~CIRTopStationsView()
+    {
+    IRLOG_DEBUG( "CIRTopStationsView::~CIRTopStationsView " );
+	if ( iContainer )
+		{
+		AppUi()->RemoveFromViewStack( *this, iContainer );
+		delete iContainer;
+		iContainer = NULL;
+		}
+	if ( Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+	    Toolbar()->SetToolbarObserver( NULL );
+		}
+	iTopStationsFilteredIndex = 0;
+	//calls base class destructor
+	IRLOG_DEBUG( "CIRTopStationsView::~CIRTopStationsView - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// TUid CIRTopStationsView::Id() const
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRTopStationsView::Id() const
+    {
+    IRLOG_DEBUG( "CIRTopStationsView::Id" );
+    return KIRTopStationsViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::DoActivateL( )
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::DoActivateL( const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
+			 const TDesC8& aCustomMessage )
+    {
+	IRLOG_DEBUG( "CIRTopStationsView::DoActivateL - Entering" );
+    
+	TInt customMessageId = aCustomMessageId.iUid;
+	if(customMessageId == 1)
+		{
+		SetCurrentFocus(0);	
+		SetCurrentTopItem(0);	
+		iFirstTimeLaunchFlag = ETrue;
+		}
+	aCustomMessageId.iUid = 0;
+	iUi->iPresentViewID = KIRTopStationsViewId;		
+	
+	
+	////////////////////////////////////////////////////////////
+
+	if(iResultsReqMade)
+		{
+		if(iContainer)
+			{
+		    delete iContainer;
+		    iContainer = NULL;
+			}
+	    iResultsReqMade = EFalse;
+		}
+	
+	////////////////////////////////////////////////////////////
+  	SetTitleL( R_IRAPP_STAT_DIR_TOP );
+    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+	
+	
+	
+	ConstructToolbarL();
+
+    if ( !iContainer )
+        {
+ 	    iContainer = CIRStationsViewContainer::NewL( *this, ClientRect() );
+ 	    iContainer->CreateListBoxL();
+        AppUi()->AddToViewStackL( *this, iContainer);
+        }
+    else
+        {
+		// we must notify a resource change in order to update the skin context
+		// This is a flaw of CEikFormattedCellListBox
+		iContainer->SetRect(ClientRect());
+        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+        AppUi()->AddToViewStackL( *this, iContainer);
+        }
+
+
+    iContainer->ActivateL();
+    iContainer->MakeVisible( ETrue );
+	HandleStatusPaneSizeChange();
+    EnableObserverL(EIRSystemEventObserver);
+    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+
+	IRLOG_DEBUG( "CIRTopStationsView::DoActivateL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::DoDeactivate()
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::DoDeactivate()
+    {
+    IRLOG_DEBUG( "CIRTopStationsView::DoDeactivate - Entering" );
+    if(&(iUi->SystemEventCollector()))
+	    {
+		DisableObserver(EIRSystemEventObserver);
+	    }
+    if ( iContainer )
+		{
+		if(iContainer->iStationsListBox && iContainer->GetSearchBoxPointer())
+			{
+			iContainer->GetSearchBoxPointer()->GetSearchText(iContainer->iFindString);
+			if(iContainer->GetSearchBoxPointer() && iContainer->iFindString.Length()!=0)
+				{
+				if(GetActualFilteredItemIndex())
+					{
+					SetCurrentFocus(GetActualFilteredItemIndex());
+					}
+				else
+					{
+					iContainer->Comparestrings();
+					SetCurrentFocus(GetActualFilteredItemIndex());
+					}
+				}
+			else
+				{
+				TInt currentIndex = iContainer->GetCurrentItemIndex();
+				SetCurrentFocus(currentIndex);
+				}
+			SetCurrentTopItem(iContainer->GetListBoxTopIndex());
+			}
+		AppUi()->RemoveFromViewStack( *this, iContainer );
+        iContainer->MakeVisible( EFalse );
+		}
+	if ( Toolbar() )
+		{
+		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
+		Toolbar()->SetToolbarObserver( NULL );
+		}
+	iFirstTimeLaunchFlag = EFalse;
+    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+
+	IRLOG_DEBUG( "CIRTopStationsView::DoDeactivate - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::HandleCommandL( TInt aCommand )
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::HandleCommandL( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::HandleCommandL  - Entering" );
+    CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+	iCommand = aCommand;
+
+	switch(aCommand)
+		{
+		//Activate NowPlaying view.	
+		case EGotoNowPlayingViewCmd:
+			{
+			appUi->SetHistory(EFalse);
+			appUi->SavePrevIDL(KIRTopStationsViewId, aCommand); 			
+			}
+		break;
+		case EAddStationManuallyCmd:
+			{
+			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				appUi->SetEditStation(EFalse); 
+				SetCurrentFocus(GetTopStationsActualIndex());
+			    AppUi()->ActivateLocalViewL(KIRAddManuallyStationViewID);
+				}
+			} 
+		break;
+		case EAddtoFavouritesCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+			else if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iAddToFav = ETrue;
+				break;			
+				}
+			else
+				{
+				iAddToFav = ETrue;
+				AddToFavouritesL(GetTopStationsActualIndex(),aCommand);
+				}
+			}
+		break;
+		case EListenCmd:
+			{
+			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
+				{
+				break;
+				}
+
+			iUi->SetListenFromPls(EFalse);
+			if( iUi->VerifyNetworkConnectivityL() )
+				{
+				iRequestPending = ETrue;
+				iListenRequest = ETrue;
+				break;
+				}
+			else
+				{
+				ListenChannelL(GetTopStationsActualIndex());
+				}
+			}
+		break;
+		default:
+			{
+			CIRStationsView::HandleCommandL( aCommand );
+			}
+		break;
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::HandleCommandL - Exiting" );
+	}
+ 	
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+	
+    
+void CIRTopStationsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::DynInitMenuPaneL - Entering" );
+	CIRStationsView::DynInitMenuPaneL(aResourceId,aMenuPane);
+	IRLOG_DEBUG( "CIRTopStationsView::DynInitMenuPaneL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// Touch Toolbar
+//
+// ---------------------------------------------------------------------------
+
+void CIRTopStationsView::ConstructToolbarL()
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::ConstructToolbarL - Entering" );
+
+    SetToolbarItems();
+    
+	// Update rect, as changes in toolbar visibility also affect layout.
+	if(iContainer)
+		{
+		iContainer->SetRect( ClientRect() );
+		iContainer->DrawDeferred();
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::ConstructToolbarL - Exiting" );
+
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::ListenChannelL()
+// Request for listening to a channel
+// ---------------------------------------------------------------------------
+//
+    
+void CIRTopStationsView:: ListenChannelL(TInt aCurrentIndex)
+ 	{
+	IRLOG_DEBUG( "CIRTopStationsView::ListenChannelL - Entering" );
+	iNowPlayingWrapper->SetView(EBrowseByTopStations);
+	iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
+ 	iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
+ 	iNowPlayingWrapper->SetWhenUserCancelsIsdsBufferingWaitBar(EFalse);
+ 	iNowPlayingWrapper->CreateWaitDialogL();
+ 	iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);
+	iIsdsWrapper->IsdsListenRequestL(this,aCurrentIndex);
+	IRLOG_DEBUG( "CIRTopStationsView::ListenChannelL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::HandleStatusPaneSizeChange()
+    {
+	IRLOG_DEBUG( "CIRTopStationsView::HandleStatusPaneSizeChange - Entering" );
+    CIRBaseView::HandleStatusPaneSizeChange();
+
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+	IRLOG_DEBUG( "CIRTopStationsView::HandleStatusPaneSizeChange - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::HandleForegroundEventL( TBool aForeground )
+    {
+	IRLOG_DEBUG( "CIRTopStationsView::HandleForegroundEventL - Entering" );
+	CIRBaseView::HandleForegroundEventL( aForeground );
+
+	if ( aForeground )
+		{
+		if ( iContainer )
+			{
+			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+			TRgb color;
+			TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+							                                      EAknsCIQsnTextColorsCG6 );
+			if(color.Gray2()!=0)
+				{
+				CreateAndSetToolbarL(R_IR_TOPSTATIONS_WHITE_TOOLBAR);
+				}
+			else
+				{
+				CreateAndSetToolbarL(R_IR_TOPSTATIONS_BLACK_TOOLBAR);	
+				}
+			if( AknLayoutUtils::PenEnabled() && Toolbar() )
+				{
+				Toolbar()->SetToolbarObserver( this );
+				}
+
+			ConstructToolbarL();
+			iContainer->DrawDeferred();
+			}
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::HandleForegroundEventL - Exiting" );
+    }
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::AddToFavouritesL()
+// 
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::AddToFavouritesL(TInt aCurrentIndex,TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::AddToFavouritesL - Entering" );
+	SetLoadingCancelled(EFalse);
+
+	//request isds for preset data to be added to favorites
+	iIsdsWrapper->IsdsPresetRequestL(this,aCurrentIndex,aCommand);
+	
+	IRLOG_DEBUG( "CIRTopStationsView::AddToFavouritesL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::ResponseL()
+// Activates the Stations view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::ResponseL(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::ResponseL - Entering" );
+	//TO DO :: The line can be removed in future written to fix
+	// Code Scanner ERROR
+	ResetPendingRequests(EFalse);
+	IRLOG_DEBUG( "CIRTopStationsView::ResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::PresetResponseL()
+// Issues Request to listen to a particular channel 
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::PresetResponseL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::PresetResponseL - Entering" );
+	if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+		{
+		ResetPendingRequests(EFalse);
+		if(!iNowPlayingWrapper->GetWhenUserCancelsIsdsBufferingWaitBar())
+			{
+			iNowPlayingWrapper->SetListenFromIsdsValue(ETrue);
+			iNowPlayingWrapper->ListenToChannelL(aPreset);
+			}
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::PresetResponseL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::ErrorL()
+// Handles the errors from Isds 
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::ErrorL()
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::ErrorL - Entering" );
+	if(iIsdsWrapper->GetListenRequest())
+		{
+		iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
+		iNowPlayingWrapper->DestroyWaitDialogL();
+		iIsdsWrapper->SetListenRequest(EFalse);
+		}
+	if(iIsdsWrapper->iConnTimeOut)
+		{
+		iIsdsWrapper->iConnTimeOut = EFalse;	
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::ErrorL - Exiting" );
+	}
+
+
+// --------------------------------------------------------------------------
+// CIRTopStationsView::OfferToolbarEventL
+// --------------------------------------------------------------------------
+//
+void CIRTopStationsView::OfferToolbarEventL ( TInt aCommand )
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::OfferToolbarEventL - Entering" );
+    HandleCommandL(aCommand);
+    IRLOG_DEBUG( "CIRTopStationsView::OfferToolbarEventL - Exiting" );
+   	}
+	
+
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::PresetLogoDownloadedL()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::PresetLogoDownloadedL - Entering" );
+	if(iContainer)
+		{
+		iContainer->PresetLogoDownloadL(aPreset);
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::PresetLogoDownloadedL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::PresetLogoDownloadError()
+// from base class MLogoDownloadObserver
+// ---------------------------------------------------------------------------
+//
+void CIRTopStationsView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::PresetLogoDownloadError ---Entering" );
+	//call the API of stations view container
+	if(iContainer)
+		{
+		TRAP_IGNORE(iContainer->HandleLogoErrorL())
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::PresetLogoDownloadError --- Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::GetFilteredIndex()
+// Returns the filtered Index				
+// ---------------------------------------------------------------------------
+//
+TInt CIRTopStationsView::GetFilteredIndex()
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::GetFilteredIndex - Entering" );
+	return iTopStationsFilteredIndex;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRTopStationsView::GetTopStationsActualIndex().
+// Returns the actual index.
+// ---------------------------------------------------------------------------
+//
+TInt CIRTopStationsView::GetTopStationsActualIndex()
+    {
+ 	IRLOG_DEBUG( "CIRTopStationsView::GetTopStationsActualIndex - Entering" );
+   	TInt currentIndex = iContainer->GetCurrentItemIndex();
+	SetCurrentFocus(currentIndex);
+	TBuf<KFindStringLength> findstring ;
+   if(iContainer->GetSearchBoxPointer())
+	   {
+    	iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+	   }
+	if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0)
+		{
+		iTopStationsFilteredIndex = currentIndex;
+		iContainer->Comparestrings();
+		currentIndex = GetActualFilteredItemIndex();
+		}
+	if(iContainer->GetLogoNotSupported())
+		{
+		currentIndex = 	currentIndex +1;
+		}
+
+	IRLOG_DEBUG( "CIRTopStationsView::GetTopStationsActualIndex - Exiting" );
+	return currentIndex;
+    }
+// ---------------------------------------------------------
+// CIRTopStationsView::GetFirstLaunchFlag ()
+// returns whether is launching for the first time /coming from other view
+// which is activated from this view.
+// ---------------------------------------------------------
+//
+TBool CIRTopStationsView::GetFirstLaunchFlag()
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::GetFirstLaunchFlag - Entering." );
+	IRLOG_DEBUG( "CIRTopStationsView::GetFirstLaunchFlag - Exiting." );
+	return iFirstTimeLaunchFlag;
+	}
+// ---------------------------------------------------------------------------
+// void CIRTopStationsView::SetToolbarItems()
+// Setting toolbar items when text is entered
+//  ---------------------------------------------------------------------------
+void CIRTopStationsView:: SetToolbarItems()
+	{
+	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Entering" );
+	if(Toolbar())
+		{
+		if(iContainer)
+			{
+			Toolbar()->SetToolbarVisibility(ETrue, EFalse);
+			if(iContainer->iStationsListBox)
+				{
+				TInt currentIndex = iContainer->GetCurrentItemIndex();
+				TBuf<KFindStringLength> findstring ;
+				if(iContainer->GetSearchBoxPointer())
+					{
+					iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
+					}
+				TInt filterModelCount = iContainer->GetFilterdModelPointer()->NumberOfItems();	
+				if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0 
+				&& filterModelCount == 0)
+					{
+					Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+					Toolbar()->SetItemDimmed(EAddStationManuallyCmd,ETrue,ETrue);
+					}
+				else
+					{
+					if (currentIndex == 0  && !iContainer->GetLogoNotSupported())  
+						{
+						if (iUi->iIsdsWrapper->GetBannerUrl())
+							{
+							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
+							Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
+							Toolbar()->SetItemDimmed(EAddStationManuallyCmd,ETrue,ETrue);
+							}
+						else
+							{
+							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
+							Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+							Toolbar()->SetItemDimmed(EAddStationManuallyCmd,EFalse,ETrue);
+							}
+						}
+					else
+						{
+						Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
+						Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
+						Toolbar()->SetItemDimmed(EAddStationManuallyCmd,EFalse,ETrue);
+						}
+					}
+				Toolbar()->DrawNow();
+				}
+			}
+		}
+	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request  
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRTopStationsView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_DEBUG( "CIRTopStationsView::NotifyActiveNetworkObserversL  - Entering." );
+	IRRDEBUG2("CIRTopStationsView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+	switch(aEvent)
+		{
+		case ENetworkConnectionDisconnected:
+			{
+			iNowPlayingWrapper->HandleNetworkDisconnected();
+			}
+			break;
+		case ENetworkConnectionEstablished:
+			{
+		
+			if( !iUi->CheckAndNotifyLowDiskSpaceL() && iContainer )
+				{
+				if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+					{
+					if(iAddToFav)
+						{
+						iAddToFav=ETrue;
+						AddToFavouritesL(GetTopStationsActualIndex(),EAddtoFavouritesCmd);
+						}
+					else if(iListenRequest)
+						{
+						iListenRequest=EFalse;
+						ListenChannelL(GetTopStationsActualIndex());
+						}
+					else
+						{
+							
+						}
+					}
+				}
+			if(iUi->iNetworkController->IsHandingOverConnection())
+				{
+				ResetPendingRequests(EFalse);				
+				}
+			}
+		}
+   	
+	IRRDEBUG2("CIRTopStationsView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+	
+	IRLOG_DEBUG( "CIRTopStationsView::NotifyActiveNetworkObserversL  - Exiting." );
+	}
+	
+	
+	
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset 
+// the pending requests  
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRTopStationsView::ResetPendingRequests(TBool aValue)
+	{
+	iRequestPending = aValue;
+	iAddToFav  = aValue;
+	iListenRequest  = aValue;
+	}	
+	
+// ---------------------------------------------------------
+// CIRTopStationsView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRTopStationsView::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG(" CIRTopStationsView::HandleSystemEventL - Entering");
+	
+	switch (aEventType)
+		{
+		case EIRCallActivated:
+			{
+			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+				{
+				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+					{
+					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+					}
+				if(!iCallRequestPending && iCommand==EAddtoFavouritesCmd)
+					{
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					iCallRequestPending = ETrue;
+					}
+				if(iUi->iIsdsWrapper->GetListenRequest())
+					{
+					iNowPlayingWrapper->DestroyWaitDialogL();
+					iUi->iIsdsWrapper->SetListenRequest(EFalse);
+					iUi->iIsdsWrapper->IsdsCancelRequest();
+					}
+				}
+			break;
+			}
+		case EIRCallDeactivated:
+			{
+			if(iCallRequestPending && iCommand==EAddtoFavouritesCmd)
+				{
+				iCallRequestPending = EFalse;
+				HandleCommandL( iCommand );
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	IRLOG_DEBUG( "CIRTopStationsView::HandleSystemEventL - Exiting." );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irui.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,3098 @@
+/*
+* 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:
+*
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 2, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi
+*  Ref:
+*  Added Workaround in CIRUi::ConstructL() to force display of IAP list.
+*  MIRCtrlCmdObserver::MCtrlCommand() function signature changed (Merged IRv1.0 Engine code changes)
+*
+*  </ccm_history>
+* ============================================================================
+*/
+
+/* ---------------------------------------------------------------------------
+*  Version history:
+*  Template version:
+*  <ccm_history>
+*
+*  Version: 3, Tue Mar 19 18:00:00 2008 by Rohit
+*  Ref:
+*  Implemented change request to display Byte Counter in KB till 0.1 MB, and in MB threrafter
+*
+*  </ccm_history>
+* ============================================================================
+*/
+#include "internetradioconfigurationflags.hrh"
+#include <akniconarray.h>
+#include <aknkeylock.h>
+#include <aknlayout2scalabledef.h>
+#include <aknlayoutfont.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <akntitle.h>
+#include <aknvolumecontrol.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfenv.h>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <bautils.h>
+#include <cmapplicationsettingsui.h>
+#include <featmgr.h>
+#include <features.hrh>
+#include <hlplch.h>
+#include <pstransaction.h>
+#include <stringloader.h>
+#include <uriutils.h>
+#include <aknutils.h>
+#include <internetradio.rsg>
+#include <commdb.h>
+#include <commsdattypesv1_1.h>
+#include <data_caging_path_literals.hrh>
+#include <hwrmpowerstatesdkpskeys.h>
+#include <aknwaitdialog.h>
+#include <ctsydomainpskeys.h>
+#include <utf.h>
+#include <proengfactory.h>
+#include <mproengnotifyhandler.h>
+/* no need to change to lower case  */
+#include <MProEngNotifyHandler.h>
+#include <profileenginesdkcrkeys.h>
+
+//For IAD
+#include <publicruntimeids.hrh>
+#ifdef FF_IAUPDATE
+#include <iaupdate.h>
+#include <iaupdateparameters.h>
+#include <iaupdateresult.h>
+#endif
+
+
+
+#include "ircommon.h"
+#include "irui.h"
+#include "irnowplayingview.h"
+#include "ir.hrh"
+#include "irmainview.h"
+#include "irmaincontainer.h"
+
+#include "irautomatedbitrateselection.h"
+#include "iralarmobserver.h"
+//#include "irmessageobserver.h"
+#include "ircommon.h"
+#include "irctrlcmdobserver.h"
+#include "irdataproviderconstants.h"
+#include "irdebug.h"
+#include "irdocument.h"
+#include "irfavoritesdb.h"
+#include "irhistory.h"
+#include "iriconloader.h"
+#include "irisdspreset.h"
+#include "irmediaclient.h"
+#include "irmetadata.h"
+#include "irnetworkcontroller.h"
+#include "irnwinfoobserver.h"
+#include "irpubsub.h"
+#include "irsessionlogger.h"
+#include "irsettings.h"
+#include "irstreamsource.h"
+#include "irstreamsourceerrors.h"
+#include "irui.h"
+#include "isdsclientdll.h"
+#include "irbrowsechannelitems.h"
+#include "irbrowsecatagoryitems.h"
+#include <internetradio.mbg>
+#include "irhistorylistview.h"
+#include "irsearchresultsview.h"
+#include "irIsdsWrapper.h"
+#include "irviewstack.h"
+#include "irstationdirectoryview.h"
+#include "irstationinformationdata.h"
+#include "ircategoryview.h"
+#include "irstationsview.h"
+#include "irtopstationsview.h"
+#include "irplsplaylist.h"
+#include "irplsplaylistitem.h"
+#include  "irplsview.h"
+#include "irfirsttimeview.h"
+#include "iraddmanuallystationview.h"
+#include "irsystemeventcollector.h" //For system events
+#include "irnowplayingwrapper.h"
+#include "ircostwarningview.h"
+#include "irstationinfoview.h"
+#include "irdatatransferobserver.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irlogodownloadengine.h"
+#include "iriconloader.h"
+#include "irapplication.h"
+#include <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+
+
+#ifdef FF_IAUPDATE
+_LIT( KIRParamExec, "InternetRadio.exe" );
+#endif
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+#include "irbacksteppingservicewrapper.h"
+#endif
+
+const TInt KFour = 4;
+
+//static variable declaration
+TInt CIRUi::iFindInMusicStoreCount = 0;
+
+
+//Added by Snigdha for HomeScreen
+_LIT8( KIRCommandLineActionHandler, "-a" );
+_LIT8( KIRCommandLineActionHandlerCommandStartNowPlayingView, "startnowplaying" );
+const TChar KIRCommandLineOptionPrefix = '-';
+
+// ---------------------------------------------------------------------------
+// CIRUi::ConstructL(const TRect& aRect)
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRUi::ConstructL()
+	{
+	IRLOG_INFO( "CIRUi::ConstructL - Entering" );
+	CIRApplication *app = static_cast<CIRApplication*>(Document()->Application());
+	if(app->GetInstanceFlag())
+		{
+    	BaseConstructL(ENoAppResourceFile);
+    	return;
+		}
+	BaseConstructL(EAknEnableSkin);
+	UpdateLandscapeInformation();
+	iProfileId=DetermineCurrentProfile();
+	iSystemEventCollector = CIRSystemEventCollector::NewL();
+	iSystemEventCollector->AddObserverL( this );
+
+	iIRSettings =CIRSettings::OpenL();
+    iSecondInstanceFlag = EFalse;
+	UpdateSubscriberIdL();
+
+	User::LeaveIfError(iFsSession.Connect());
+	//Instantiate NowPlaying View
+	iAlfEnv = CAlfEnv::NewL();
+	// Switch the layout to flat so that Alf will use right layout on Now playing view
+    StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT );
+	TRect layoutRect;
+	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, layoutRect );
+	CAlfDisplay& disp = iAlfEnv->NewDisplayL( layoutRect, CAlfEnv::ENewDisplayAsCoeControl );
+	disp.SetClearBackgroundL( CAlfDisplay::EClearWithSkinBackground );
+
+	//Whether The Station is Editiable or not
+	iIsEditStation = EFalse;
+	//Index of the Preset to Edit
+	iEditStationIndex = 0;
+
+	TParse parse;
+	parse.Set( KMIFFILE, &KDC_APP_RESOURCE_DIR, NULL );
+	iMifFilePath = parse.FullName();
+	CompleteWithAppPath( iMifFilePath );
+
+	//Create the instance of iconprovider
+	iIconProvider = CIconFileProvider::NewL(iMifFilePath);
+
+
+	// Network Controller Component
+	iNetworkController = CIRNetworkController::OpenL(this);
+	iNetworkController->DataTransferTracker().SetObserver( this );
+    iIsOffline=iNetworkController->IsOfflineMode();
+	// Timer for Network indicator animation
+	iNetworkIndicatorTimer = CPeriodic::NewL(CPeriodic::EPriorityStandard);
+
+	iDialogLauncher = CIRDialogLauncher::NewL();
+
+	iFavPresets=CIRFavoritesDb::NewL();
+
+	iIsdsWrapper = CIRIsdsWrapper::NewL(*iIRSettings,*iFavPresets);
+	iNowPlayingWrapper = CIRNowPlayingWrapper::NewL(*this,*iIRSettings,*iIsdsWrapper);
+ 	RAknKeyLock keylock;
+    User::LeaveIfError( keylock.Connect() );
+    if ( keylock.IsKeyLockEnabled() )
+        {
+        BringToForeground();
+        }
+    keylock.Close();
+	// Display access points only if user has accepted Terms & Conditions
+/*	if( iIRSettings->IsFlagTermsAndConditionsL() )
+		{
+		iNetworkController->ChooseAccessPointL();
+		}
+*/
+	//playing is terminated by call
+	iPlayTerminated = EFalse;
+	//checks whether call is active or not
+	iCallActive = EFalse;
+
+	//Call observer
+
+	iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+	GetLogoDownloadEngine()->SetFavDbInstance(iFavPresets);
+	// Create Channel list view
+	iLastPlayed = CIRLastPlayedStationInfo::NewL();
+	iMainView = CIRMainView::NewL();
+	AddViewL( iMainView );
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+    // Create Back Stepping Service wrapper.
+    iBsWrapper = CIRBackSteppingServiceWrapper::NewL( TUid::Uid( KUIDIRAPP ) );
+#endif
+
+	// Check whether phone is in low memory
+	TBool bIgnore = CheckAndNotifyLowDiskSpaceL();
+
+	iNowPlayingView = CIRNowPlayingView::NewL( *iAlfEnv );
+	AddViewL( iNowPlayingView );
+	//Instantiate AlarmObserver
+	iAlarmObserver = CIRAlarmObserver::NewL(this);
+	iAlarmObserver->Start();
+//	iMessageObserver = CIRMessageObserver::NewL(this);
+	if( iCallActive )
+		{
+		IRLOG_WARNING( "CIRUi::ConstructL - Call active during start up " );
+		}
+
+	//Create SearchResults View
+	iSearchResultsView = CIRSearchResultsView::NewL();
+	AddViewL( iSearchResultsView );
+
+	//Instantiate PublishSubscribe class
+	iPubSubManager = CIRPubSub::NewL();
+	iPubSubManager->PublishApplicationRunningStateL(EIRPSApplicationRunning);
+
+	// Create history list view
+	iHistoryListView = CIRHistoryListView::NewL();
+	AddViewL( iHistoryListView );
+
+
+	// Create Station Directory View
+	iStationdirView = CIRStationDirectoryView::NewL();
+	AddViewL( iStationdirView );
+
+	// Create Category View
+	iCategoryView = CIRCategoryView::NewL();
+	AddViewL( iCategoryView );
+
+	// Create Stations View
+	iStationsView = CIRStationsView::NewL();
+	AddViewL( iStationsView );
+
+	// Create TopStations View
+	iTopStationsView = CIRTopStationsView::NewL();
+	AddViewL( iTopStationsView );
+
+	iViewStack = CIRViewStack::NewL();
+
+	//Create First Time View
+	iFirstTimeView = CIRFirstTimeView::NewL();
+	AddViewL(iFirstTimeView);
+
+	//Create Add Manually View
+	iIRAddManually = CIRAddManuallyStationView::NewL( ApplicationRect() );
+	AddViewL(iIRAddManually);
+
+	// Create Settings view
+	CIRSettingsView* iSettingsView = CIRSettingsView::NewL();
+	AddViewL( iSettingsView );
+
+	//Plsveiw enabled flag set to False by default.
+	iPlsactivated = EFalse;
+
+	if (!iIRSettings->IsFlagTermsAndConditionsL() ||!iIRSettings->IsFlagCostWarningL())
+		{
+		iCostWarningView = CIRCostWarningView::NewL(ApplicationRect());
+		AddViewL( iCostWarningView );
+		SetDefaultViewL(*iCostWarningView);
+		}
+	else
+		{
+		if(iStartUpInNowPlayingView)
+			{
+		    //iViewStack->PushL(KIRMainChoiceViewID)
+			SetDefaultViewL(*iNowPlayingView);
+			iStartUpInNowPlayingView = EFalse;
+			}
+		else
+			{
+			if (IsFirstTime() && (!IsFlagIfAnyFavL()))
+				{
+				SetDefaultViewL(*iFirstTimeView);
+				}
+			else
+				{
+				SetDefaultViewL( *iMainView );
+				}
+			}
+		}
+
+	// Create Station Info view
+	iStationInfoView = CIRStationInfoView::NewL( ApplicationRect() );
+	AddViewL( iStationInfoView );
+
+	//call is answered
+	iCallConnected = EFalse;
+
+	iNwObserver = CIRNwInfoObserver::NewL(this);
+
+	//getting current thread's id
+	RThread thread;
+	iCurrentThreadID = thread.Id();
+	//Handle Background and foreground of the views.
+	iCoeEnv->AddForegroundObserverL(*this);
+	// Subscriber for bitrate value
+	iBitrateSubscriber = CIRPropertyObserver::NewL(*this,
+	KUidActiveInternetRadioApp,KIRPSBitrate,RProperty::EInt);
+
+	// Subscriber for Simultaneous play handling
+	iMultiplePlayHandler = CIRPropertyObserver::NewL(*this,
+	KUidActiveInternetRadioApp,KIRPSMultiplePlay,RProperty::EInt);
+	iMultiplePlayHandler->Subscribe();
+
+	//Storing the view to be actiavted when in Background.
+	iActivationPending = KNullUid;
+
+	//Set only when going to backgroung when keypad lock.
+	iBgWhenLock = EFalse;
+
+	//For nowplaying view
+///*************testing*****************************
+
+	iSelector=CRemConInterfaceSelector::NewL();
+	iTarget = CRemConCoreApiTarget::NewL( *iSelector, *this );
+	iSelector->OpenTargetL();
+	iIsDisconnected = EFalse;
+	//****************offlineProfile***************//
+
+	iNotifyHandler = ProEngFactory::NewNotifyHandlerL();
+    User::LeaveIfError( iNotifyHandler->
+       RequestProfileActivationNotificationsL( *this ));
+
+	/**
+     * Initialize feature manager, for IAD
+     */
+    IRRDEBUG2("CIRUi::ConstructL - Initializing FeatureManager Lib", KNullDesC);
+    FeatureManager::InitializeLibL();
+    iFeatureManagerInitialized = ETrue;
+    IRRDEBUG2("CIRUi::ConstructL - Initialed FeatureManager Lib", KNullDesC);
+	IRRDEBUG2("CIRUi::ConstructL - Checking feature KFeatureIdIAUpdate", KNullDesC);
+#ifdef FF_IAUPDATE
+    if (FeatureManager::FeatureSupported( KFeatureIdIAUpdate))
+		{
+		IRRDEBUG2("CIRUi::ConstructL - KFeatureIdIAUpdate Supporting", KNullDesC);
+		iUpdate = CIAUpdate::NewL(*this);
+		IRRDEBUG2("CIRUi::ConstructL  - CIAUpdate NewL", KNullDesC);
+
+       	iParameters = CIAUpdateParameters::NewL();
+        IRRDEBUG2("CIRUi::ConstructL  - CIAUpdateParameters::NewL()", KNullDesC);
+
+        // Use SIS package UID
+        iParameters->SetUid( TUid::Uid( KUIDIRAPP) );
+        IRRDEBUG2("CIRUi::ConstructL  - Setting Package Uid", KNullDesC);
+
+        /**
+         * We want InternetRadio.exe to be started after update is finished
+         */
+        iParameters->SetCommandLineExecutableL( KIRParamExec );
+        IRRDEBUG2("CIRUi::ConstructL - Setting CommandLineExecutableL", KNullDesC);
+
+        iUpdate->CheckUpdates(*iParameters );
+        IRRDEBUG2("CIRUi::ConstructL  - After CheckUpdates", KNullDesC);
+
+        }
+#endif // FF_IAUPDATE
+
+
+		iControlEventObserver = CIRControlEventObserver::
+    	NewL( *this, KUidActiveInternetRadioApp, KIRPSControlSetPlayState ,
+    	RProperty::EInt);
+
+    	iControlEventObserver->SecondConstructL();
+	IRLOG_DEBUG( "CIRUi::ConstructL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Returns pointer to the view stack.
+// ---------------------------------------------------------------------------
+//
+CIRViewStack& CIRUi::ViewStack()
+    {
+    IRLOG_INFO( "CIRUi::ViewStack" );
+    return *iViewStack;
+    }
+// ---------------------------------------------------------------------------
+// CIRUi::ForwardBackCommandToBSWrapperL
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::ForwardBackCommandToBsWrapperL()
+	{
+	IRLOG_DEBUG( "CIRUi::ForwardBackCommandToBsWrapperL - Entering" );
+	TBool retVal( EFalse ); // By default BS Service doesn't handle back command
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+	// Get active view UID.
+	TVwsViewId activeViewId; // Contains both view UID and app UID
+	GetActiveViewId( activeViewId );
+
+	// Let Back Stepping Service handle the event.
+	retVal = iBsWrapper->HandleBackCommandL( activeViewId );
+#endif
+	IRLOG_DEBUG( "CIRUi::ForwardBackCommandToBsWrapperL - Exiting" );
+	return retVal;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::ActiveView
+// ---------------------------------------------------------------------------
+//
+TUid CIRUi::ActiveView() const
+    {
+    IRLOG_INFO( "CIRUi::ActiveView" );
+    return iView ? iView->Id() : KNullUid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::CIRUi()
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRUi::CIRUi()
+	{
+	IRLOG_DEBUG( "CIRUi::CIRUi - Entering" );
+	iIndex = 0;
+	iSelect = ETrue;
+	iCount = 0;
+	iCurrentPresetId = 0;
+	iSelectedBrowsingCategory = KErrNotFound;
+	iFeatureManagerInitialized = EFalse;
+	iMainViewLaunch = EFalse ;
+	iDialogLauncher = NULL;
+	iStartUpInNowPlayingView = EFalse;
+	IRLOG_DEBUG( "CIRUi::CIRUi - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::~CIRUi()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRUi::~CIRUi()
+	{
+	IRLOG_INFO( "CIRUi::~CIRUi - Entering" );
+
+	iStationsViewTitleString.Close();
+	if(iSystemEventCollector)
+		{
+		iSystemEventCollector->RemoveObserver( this );
+		delete iSystemEventCollector; iSystemEventCollector=NULL;
+		}
+	//singleton deletion
+	if ( iIRSettings )
+		{
+		iIRSettings->Close();
+		}
+
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+        // Back Stepping FW is used, delete wrapper.
+        delete iBsWrapper;
+#endif
+
+	delete iViewStack;
+	delete iIconProvider;
+	iFsSession.Close();
+	delete iAlarmObserver;
+//	delete iMessageObserver;
+	delete iAlfEnv;
+	if(iIsdsWrapper)
+		{
+		delete iIsdsWrapper;
+		iIsdsWrapper = NULL;
+		}
+	iPlsLength.Close();
+	if(iLastPlayed)
+		{
+		delete iLastPlayed;
+		iLastPlayed = NULL;
+		}
+	if(iNowPlayingWrapper)
+		{
+		delete iNowPlayingWrapper;
+		iNowPlayingWrapper = NULL;
+		}
+	delete iFavPresets;
+	delete iSettingsView;
+	delete iNwObserver;
+	delete iPubSubManager;
+
+	if (iNetworkController)
+		{
+		iNetworkController->Close();
+		//iNetworkController = NULL
+		}
+	// Cancel the network indicator timer
+	if( iNetworkIndicatorTimer )
+		{
+		if( iNetworkIndicatorTimer->IsActive() )
+			{
+			iNetworkIndicatorTimer->Cancel();
+			}
+		delete iNetworkIndicatorTimer;
+		}
+	delete iBitrateSubscriber;
+	delete iMultiplePlayHandler;
+
+	iURLs.ResetAndDestroy();
+	iURLs.Close();
+	iIsPresetSaved.Close();
+	iPlsPresetSaved.Close();
+	delete iSelector;
+
+#ifdef FF_IAUPDATE
+	delete iUpdate;
+    delete iParameters;
+#endif
+
+    if ( iFeatureManagerInitialized )
+    	{
+        /**
+         *  We can safely call UnInitializeLib as we have really intialized it
+         */
+        FeatureManager::UnInitializeLib();  // Decreases ref.count
+        }
+delete iNotifyHandler;
+
+	if( iDialogLauncher )
+		{
+		delete iDialogLauncher;
+		iDialogLauncher = NULL;
+		}
+
+	if(iControlEventObserver)
+		{
+		delete iControlEventObserver;
+		iControlEventObserver = NULL;
+		}
+
+	IRLOG_DEBUG( "CIRUi::~CIRUi - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleCommandL(TInt aCommand)
+// Command handling function
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleCommandL(TInt aCommand)
+	{
+	IRLOG_INFO2( "CIRUi::HandleCommandL (%d) ", aCommand );
+	switch(aCommand)
+		{
+		case EIRDelayedPlayStation:
+			{
+			if ( !CheckAndNotifyLowDiskSpaceL() )
+				{
+				iNowPlayingWrapper->DoPlayL();
+				}
+			}
+		break;
+		// Activate the AddStationManually View
+		case EAddStationManuallyCmd:
+			{
+			if ( !CheckAndNotifyLowDiskSpaceL() )
+				{
+				if ( IsForeground() || iBgWhenLock)
+					{
+					ActivateLocalViewL(KIRAddManuallyStationViewID);
+					iActivationPending = KNullUid ;
+					}
+				else
+					{
+					iActivationPending = KIRAddManuallyStationViewID;
+					}
+				}
+		}
+		break;
+		//Go to now playing view
+		case EGotoNowPlayingViewCmd:
+			{
+			if( ( iNowPlayingView ) && ( !iNowPlayingView->HasBeenActivated() ) )
+				{
+	    		// For the case that NP view is force-activated,
+	    		// but nothing should actually be played yet.
+	    	    *iNowPlayingWrapper->iNowPlayingPreset = *iLastPlayed->iLastPlayedStation;
+				}
+			if(iHistory)
+				{
+					ActivateLocalViewL( KIRNowPlayingViewID,
+					KHistoryLaunch,KIRNowPlayingViewCustomMessagePlayAfterActivation);
+
+				}
+			else if(iMainViewLaunch)
+				{
+				    _LIT8(KNull,"");
+					ActivateLocalViewL( KIRNowPlayingViewID,KNowPlayingFrmMainView,KNull);
+					iMainViewLaunch = EFalse ;
+
+				}
+			else
+			{
+			if ( IsForeground() || iBgWhenLock )
+					{
+					ActivateLocalViewL(KIRNowPlayingViewID);
+					iActivationPending = KNullUid ;
+					}
+				else
+					{
+					iActivationPending = KIRNowPlayingViewID;
+			}
+				}
+			}
+			break;
+		//violates PC lint  Warning 616
+		case EEikCmdExit:
+		case EExitCmd:  //lint -fallthrough
+		case EIRExit:
+		case EAknSoftkeyExit:
+			{
+			//This API is not there in 3.0
+			//Removing all the local item definitions set using setlocalitemdefL()
+			#ifndef __SERIES60_30__
+			AknsUtils::SkinInstance()->RemoveLocalItemDefs();
+			#endif
+			//needed only for 3.2
+			//part of active idle
+			#ifdef __SERIES60_32__
+			if ( iPubSubManager )
+				{
+				iPubSubManager->PublishApplicationRunningStateL
+				(EIRPSApplicationClosing);
+				}
+			#endif
+			if(iNowPlayingWrapper)
+			{
+			if( iNowPlayingWrapper->GetSessionStartState() )
+				{
+				TTerminationStatus terminationstatus = EUserTerminated;
+				iNowPlayingWrapper->GetReportGeneratorInstance()->UpdateTerminatedBy(terminationstatus);
+				iNowPlayingWrapper->GetReportGeneratorInstance()->SessionEndL(EFalse);
+				iNowPlayingWrapper->SetSessionStartState(EFalse);
+				}
+				}
+			Exit();
+			}
+		break;
+		default:
+			{
+			//No implementation
+			}
+		break;
+		}
+	IRLOG_DEBUG( "CIRUi::HandleCommandL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::IRHandleCommandL().
+// Command handling function
+// Saves currently selected index from the listbox
+// ---------------------------------------------------------------------------
+//
+void CIRUi::IRHandleCommandL(TInt aIndex,TInt aCommand)
+	{
+	IRLOG_INFO3( "CIRUi::IRHandleCommandL (aIndex=%d, aCommand=%d)", aIndex, aCommand );
+	//Save the currently selected index from the listbox
+	iIndex = aIndex;
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRUi::IRHandleCommandL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::SavePrevIDL(..).
+// Saves the previous View's Id
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SavePrevIDL(const TUid& aPrevID,TInt aCommand)
+	{
+	IRLOG_DEBUG( "CIRUi::SavePrevIDL - Entering" );
+	//Save the previous view iD of NowPlaying View
+	iNPPrevViewId = aPrevID;
+	HandleCommandL(aCommand);
+	IRLOG_DEBUG( "CIRUi::SavePrevIDL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleStatusPaneSizeChange().
+// Handles resource changes, called by UI framework
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleStatusPaneSizeChange()
+	{
+	IRLOG_INFO( "CIRUi::HandleStatusPaneSizeChange" );
+
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleKeyEventL().
+// Handles key events.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CIRUi::HandleKeyEventL(const TKeyEvent& /*aKeyEvent*/
+	,TEventCode /*aType*/)
+ 	{
+ 	IRLOG_DEBUG( "CIRUi::HandleKeyEventL" );
+	return EKeyWasNotConsumed;
+ 	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::GetMifFilePath().
+// Returns the full path of mif file.
+// ---------------------------------------------------------------------------
+//
+TFileName CIRUi::GetMifFilePath() const
+	{
+    IRLOG_DEBUG( "CIRUi::GetMifFilePath" );
+    return iMifFilePath;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::GetPrivatePath().
+// Returns the full path of mif file. .
+// ---------------------------------------------------------------------------
+//
+TFileName CIRUi::GetPrivatePath() const
+	{
+	IRLOG_DEBUG( "CIRUi::GetPrivatePath" );
+    return iIRSettings->PrivatePath();
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::OpenFileL().
+// Open the file using Document's instance
+// ---------------------------------------------------------------------------
+//
+void CIRUi::OpenFileL(const TDesC& aFileName)
+	{
+	IRLOG_DEBUG( "CIRUi::OpenFileL - Entering" );
+	// File changed. Open new file with documents OpenFileL method.
+	iSecondInstanceFlag=ETrue;
+	CIRDocument* doc = static_cast<CIRDocument*> (Document());
+	doc->OpenFileL( ETrue, aFileName, iEikonEnv->FsSession() );
+	IRLOG_DEBUG( "CIRUi::OpenFileL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::IsEmbedded().
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::IsEmbedded() const
+    {
+    IRLOG_DEBUG( "CIRUi::IsEmbedded" );
+    return iEikonEnv->StartedAsServerApp();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::UpdateCurrentNetwork
+// Updates the current network status
+// ---------------------------------------------------------------------------
+//
+void CIRUi::UpdateCurrentNetwork(const TDesC& aCurrentNetworkMCC
+	,const TDesC& aCurrentNetworkMNC)
+	{
+	IRLOG_INFO3( "CIRUi::UpdateCurrentNetwork (MCC=%S, MNC=%S)", &aCurrentNetworkMCC, &aCurrentNetworkMNC );
+	#ifdef __WINS__
+	iCurrentNetwork.Copy(aCurrentNetworkMCC);
+	iCurrentNetwork.Append(aCurrentNetworkMNC);
+	iCurrentOperator = 0;
+	#else
+	//updates the current network MCC+MNC
+	iCurrentNetwork.Copy(aCurrentNetworkMCC);
+	iCurrentNetwork.Append(aCurrentNetworkMNC);
+	TLex currentnetwork(iCurrentNetwork);
+	TInt error = currentnetwork.Val(iCurrentOperator);
+	if(error)
+		{
+		IRLOG_ERROR2( "CIRUi::UpdateCurrentNetwork - extracting operator value failed (error=%d)", error );
+		iCurrentOperator = 0;
+		}
+	#endif
+	iNowPlayingWrapper->GetReportGeneratorInstance()->UpdateCurrentBrowseNetwork(iCurrentOperator);
+	IRLOG_DEBUG( "CIRUi::UpdateCurrentNetwork - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::UpdateHomeNetwork
+// Updates the home network status
+// ---------------------------------------------------------------------------
+//
+void CIRUi::UpdateHomeNetwork(const TDesC& aCurrentNetworkMCC,
+	const TDesC& aCurrentNetworkMNC)
+	{
+	IRLOG_INFO3( "CIRUi::UpdateHomeNetwork (MCC=%S, MNC=%S)", &aCurrentNetworkMCC, &aCurrentNetworkMNC );
+	#ifdef __WINS__
+	iHomeNetwork.Copy(aCurrentNetworkMCC);
+	iHomeNetwork.Append(aCurrentNetworkMNC);
+	iHomeOperator = 0;
+	#else
+	//updates the home network MCC+MNC
+	iHomeNetwork.Copy(aCurrentNetworkMCC);
+	iHomeNetwork.Append(aCurrentNetworkMNC);
+	TLex currentnetwork(iHomeNetwork);
+	TInt error = currentnetwork.Val(iHomeOperator);
+	if(error)
+		{
+		IRLOG_ERROR2( "CIRUi::UpdateHomeNetwork - extracting operator value failed (error=%d)", error );
+		iHomeOperator = 0;
+		}
+
+	#endif
+	IRLOG_DEBUG( "CIRUi::UpdateHomeNetwork - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::SetCurrentNetworkType(..)
+// Sets the Current Network Type
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetCurrentNetworkType()
+	{
+	IRLOG_DEBUG( "CIRUi::SetCurrentNetworkType - Entering" );
+	switch(iNetworkController->IdentifyConnectionType())
+		{
+		case EGprs://GPRS
+			{
+			iConnectionType.Copy(KGprs);
+			//start monitoring network for operator change
+			iNwObserver->IRStartNwMonitor();
+			}
+		break;
+
+		case EEdge: // Edge
+			{
+			iConnectionType.Copy(KEdge);
+			//start monitoring network for operator change
+			iNwObserver->IRStartNwMonitor();
+			}
+		break;
+		case EWcdma:
+		case ECdma2000:
+			{
+			iConnectionType.Copy(K3G);
+			//start monitoring network for operator change
+			iNwObserver->IRStartNwMonitor();
+			}
+		break;
+
+		case EWiFi:
+			{
+			iConnectionType.Copy(KWiFi);
+			//start monitoring network for operator change
+			iNwObserver->IRStartNwMonitor();
+			}
+		break;
+		}
+	iNowPlayingWrapper->GetReportGeneratorInstance()->UpdateConnectionType(iConnectionType);
+	IRLOG_DEBUG( "CIRUi::SetCurrentNetworkType - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::GetCurrentNetworkType(..)
+// Returns the Current Network Type
+// ---------------------------------------------------------------------------
+//
+TDesC& CIRUi::GetCurrentNetworkType()
+{
+IRLOG_DEBUG( "CIRUi::GetCurrentNetworkType - Entering" );
+IRLOG_DEBUG( "CIRUi::GetCurrentNetworkType - Exiting." );
+return iConnectionType;
+}
+// CIRUi::MrccatoCommand()
+// This is call back function which observes hardware key events
+// ---------------------------------------------------------------------------
+//
+void CIRUi::MrccatoCommand(TRemConCoreApiOperationId aOperationId,
+	TRemConCoreApiButtonAction aButtonAct)
+	{
+	IRLOG_INFO3( "CIRUi::MrccatoCommand(aOperationId=%d, aButtonAct=%d)", aOperationId, aButtonAct );
+
+	IRLOG_DEBUG2("CIRUi::MrccatoCommand - MrccatoCommand()",
+	KNullDesC );
+	switch( aOperationId )
+		{
+
+		case ERemConCoreApiVolumeUp:   // -fall through
+		case ERemConCoreApiVolumeDown:
+			{
+			if(iNowPlayingWrapper->iPlaying ||iView->Id() == KIRNowPlayingViewID )
+				{
+				//volume is increased or reduced
+				if ( (ERemConCoreApiVolumeUp == aOperationId )|| (aOperationId == ERemConCoreApiVolumeDown))
+					{
+
+					TRAPD(err,iNowPlayingView->HandleMediaKeysL(aOperationId,aButtonAct);)
+					if(err!=KErrNone)
+						{
+						return;
+						}
+					}
+				}
+			}
+		break;
+		case ERemConCoreApiStop:
+			{
+			if(iNowPlayingView)
+				{
+				iNowPlayingView->MrccatoCommand(ERemConCoreApiStop,aButtonAct);
+				}
+			}
+		break;
+
+		default:
+		if (iNowPlayingView )
+			{
+			iNowPlayingView->MrccatoCommand( aOperationId, aButtonAct );
+			}
+		break;
+
+		}
+	IRLOG_DEBUG( "CIRUi::MrccatoCommand - Exiting." );
+	}
+
+// ---------------------------------------------------------
+// CIRUi::MrccatoPlay()
+// ---------------------------------------------------------
+//
+void CIRUi::MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed, TRemConCoreApiButtonAction aButtonAct)
+    {
+    IRLOG_INFO3( "CIRUi::MrccatoPlay(aSpeed=%d, aButtonAct=%d)", aSpeed, aButtonAct );
+
+    if( iView->Id() != KIRCostWarningViewId )
+        {
+        if(iNowPlayingView )
+            {
+            iNowPlayingView->MrccatoPlay( aSpeed, aButtonAct );
+            }
+        }
+
+    IRLOG_DEBUG( "CIRUi::MrccatoPlay - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::IsCallActive()
+// Function returns whether the call is active or not
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::IsCallActive()
+	{
+	IRLOG_DEBUG( "CIRUi::IsCallActive" );
+	//returns whether call is active or not
+	return iCallActive;
+	}
+
+//-----------------------------------------------------------------------------
+// GetWrapperInstance()
+// Returns the instance of the IsdsWrapper class
+//-----------------------------------------------------------------------------
+CIRIsdsWrapper* CIRUi::GetWrapperInstance()
+	{
+	IRLOG_DEBUG( "CIRUi::GetWrapperInstance" );
+	return iIsdsWrapper;
+	}
+
+//-----------------------------------------------------------------------------
+// GetNowPlayingWrapperInstance()
+// Returns the instance of the NowPlayingWrapper class
+//-----------------------------------------------------------------------------
+CIRNowPlayingWrapper* CIRUi::GetNowPlayingWrapperInstance()
+	{
+	IRLOG_DEBUG( "CIRUi::GetNowPlayingWrapperInstance" );
+	return iNowPlayingWrapper;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetSystemEventCollector()
+// returns the iSystemEventCollector
+// ---------------------------------------------------------------------------
+//
+CIRSystemEventCollector& CIRUi::SystemEventCollector()
+    {
+    IRLOG_DEBUG( "CIRUi::SystemEventCollector" );
+    return *iSystemEventCollector;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRUi::IRNetworkEventL()
+// network connection events
+// ---------------------------------------------------------------------------
+//
+void CIRUi::IRNetworkEventL(TIRNetworkEvent aEvent)
+	{
+	IRLOG_INFO2("CIRUi::IRNetworkEventL( aEvent=%d)", aEvent );
+    IRRDEBUG2("CIRUi::IRNetworkEventL - Entering(aEvent=%d)", aEvent );
+	switch(aEvent)
+		{
+		case ENetworkConnectionConnecting:
+		    {
+			// This value indicates the network icon blink duration
+		    const TInt KNetworkIndicatorAnimation = 500000;
+			// This value indicates the network icon blink duration
+            TTimeIntervalMicroSeconds32 interval(KNetworkIndicatorAnimation);
+            // Cancel the network indicator timer
+            iNetworkIndicatorTimer->Cancel();
+            // Start the network animation timer
+            iNetworkIndicatorTimer->Start(interval,interval,TCallBack(
+			CIRUi::NetworkAnimationTimerExpired,this));
+		    }
+		    break;
+
+		case ENetworkConnectionEstablished:
+			{
+            iNetworkIndicatorTimer->Cancel();
+            iIsDisconnected = EFalse;
+			SetCurrentNetworkType();
+			iIsdsWrapper->GetISDSInstance()->IRGetIRIDL();
+			iNetworkController->NotifyActiveNetworkObserversL(ENetworkConnectionEstablished);
+			}
+		break;
+
+		case ENetworkConnectionDisconnected:
+			{
+			IRRDEBUG2("IRNetworkEventL Network DisConnected",KNullDesC);
+
+			//network got disconnected
+				iNetworkIndicatorTimer->Cancel();
+				//connection status is reset in network controller
+				iNetworkController->ResetConnectionStatus();
+	            if ( iIsdsWrapper->GetISDSInstance() )
+	                {
+	                if(iIsdsWrapper->GetListenRequest()||(iNowPlayingWrapper->iSyncPreset))
+				  		{
+						iNowPlayingWrapper->DestroyWaitDialogL();
+				  		}
+	                iIsdsWrapper->DestroyWaitDialogL();
+           			iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+	 			    iIsdsWrapper->GetISDSInstance()->ReleaseResources();
+	                }
+            	if(iNowPlayingWrapper->iPlaying && (!iNowPlayingWrapper->IsProgress()))
+					{
+					iNowPlayingWrapper->StopNow();
+					}
+				else
+					{
+			        if(iNowPlayingWrapper->GetConnectToServerState() && !iNowPlayingWrapper->IsProgress())
+						{
+						iNowPlayingWrapper->CancelNetworkRequestL();
+						iNowPlayingWrapper->DestroyWaitDialogL();
+						}
+					//player is stopped
+					if( iNowPlayingWrapper->IsProgress() )
+						{
+						//if in progress bar view, progress bar is cancelled
+						iNowPlayingWrapper->ProgressBarCancel();
+						iNowPlayingWrapper->DestroyWaitDialogL();
+						}
+					}
+
+				iIsDisconnected = ETrue;
+				}
+
+
+		break;
+
+		case EDisplayNetworkMessageNoConnectivity:
+			{
+			if(iNowPlayingView->iContainer && iNowPlayingView->GetRequestPendingForNextOrPreV())
+				{
+				 	iNowPlayingView->SetRockerIndex(
+					iNowPlayingView->GetPreviousIndex());
+				}
+			//display a message on no network connectivity
+			DisplayErrorNoteL(R_IRAPP_NW_NOCONN_ERROR);
+			iIsDisconnected = ETrue;
+
+			}
+		break;
+
+		case EDisplayOfflineMode:
+			{
+			//if offline mode message is displayed
+			//DisplayErrorNoteL(R_IRAPP_INFONOTE_OFFLINE)
+			}
+		break;
+
+		case EDisplayNoAccessPointsDefined:
+			{
+			//if access point is not defined
+			DisplayErrorNoteL(R_IRAPP_NETWORKCONTROLLER_NOAP);
+			}
+		break;
+		case EAccessPointSelectionCancelled:
+			{
+			// Called if the user chooses to cancel access point
+			// selection
+			}
+		break;
+		}
+    IRRDEBUG2("CIRUi::IRNetworkEventL - Exiting", KNullDesC );
+
+	IRLOG_DEBUG( "CIRUi::IRNetworkEventL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Function : NetworkAnimationTimerExpiredL
+// Called when the buffering times out
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::NetworkAnimationTimerExpired(TAny* /*aPtr*/)
+	{
+    IRLOG_INFO( "CIRUi::NetworkAnimationTimerExpired - Entering" );
+    IRLOG_DEBUG( "CIRUi::NetworkAnimationTimerExpired - Exiting." );
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::ActivateCurrentView()
+// Calls Draw of the currently activated view
+// ---------------------------------------------------------------------------
+//
+void CIRUi::ActivateCurrentView(const TUid& aUid) const
+	{
+	IRLOG_DEBUG( "CIRUi::ActivateCurrentView - Entering" );
+	//If NowPlaying View is activated
+	if(aUid == KIRNowPlayingViewID)
+		{
+		if(iNowPlayingView->iContainer)
+			{
+		    }
+		}
+
+	IRLOG_DEBUG( "CIRUi::ActivateCurrentView - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::VerifyNetworkConnectivityL()
+// Verifies the network connectivity
+// This function can leave if displaying of info note leaves hence
+// this leave can be ignored
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::VerifyNetworkConnectivityL()
+	{
+	IRLOG_DEBUG( "CIRUi::VerifyNetworkConnectivityL - Entering" );
+
+	TBool returnValue = EFalse;
+	iIsDisconnected =EFalse;
+	if(!(iNetworkController->GetNetworkStatus()))
+		{
+	IRRDEBUG2("CIRUi::VerifyNetworkConnectivityL Entering ", KNullDesC);
+
+		if( iNetworkController->iIsConnectRequestIssued )
+			{
+			returnValue = ETrue;
+			}
+		else
+			{
+	        IRLOG_ERROR( "CIRUi::VerifyNetworkConnectivityL - No connection request issued." );
+			//offer the user to connect to network
+			ActivateCurrentView(iPresentViewID);
+			//Choose the accesspoint
+			iNetworkController->ChooseAccessPointL();
+			returnValue = ETrue;
+			}
+		}
+	IRRDEBUG2("CIRUi::VerifyNetworkConnectivityL Exiting ", KNullDesC);
+
+	IRLOG_DEBUG( "CIRUi::VerifyNetworkConnectivityL - Exiting" );
+	return returnValue;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::FocusWhenSelectGot()
+// Funtion is called to return the flag when a listbox item is selected
+// so that the next view gets activated
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::FocusWhenSelectGot()  const
+	{
+	IRLOG_DEBUG2( "CIRUi::FocusWhenSelectGot - Returning %d", iSelect );
+	return(iSelect);
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::FocusWhenSelectSet()
+// Funtion is called to set flag when an listbox item is selected
+// so that the next view gets activated
+// ---------------------------------------------------------------------------
+//
+void CIRUi::FocusWhenSelectSet(TBool aFocus)
+	{
+	IRLOG_DEBUG2( "CIRUi::FocusWhenSelectSet(aFocus=%d)", aFocus );
+	iSelect=aFocus;
+	IRLOG_DEBUG2( "CIRUi::FocusWhenSelectSet(aFocus=%d)" , aFocus);
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandlePropertyChangeL
+// Derived from class MIRPropertyChangeObserver
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandlePropertyChangeL(const TUid& /*aCategory*/, const TUint /*aKey*/, const TIRTextProperty& /*aValue*/ )
+	{
+	IRLOG_DEBUG( "CIRUi::HandlePropertyChangeL" );
+	return;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandlePropertyChangeL
+// Derived from class MIRPropertyChangeObserver
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandlePropertyChangeL(const TUid& /*aCategory*/,
+								const TUint /*aKey*/, const TInt /*aValue*/ )
+	{
+	IRLOG_DEBUG( "CIRUi::HandlePropertyChangeL " );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::IsLandscapeOrientation
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::IsLandscapeOrientation() const
+    {
+    IRLOG_DEBUG( "CIRUi::IsLandscapeOrientation" );
+    return iLandscape;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::UpdateLandscapeInformation
+// ---------------------------------------------------------------------------
+//
+void CIRUi::UpdateLandscapeInformation()
+    {
+    IRLOG_DEBUG( "CIRUi::UpdateLandscapeInformation - Entering" );
+    TSize screenSize;
+    AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EScreen, screenSize );
+    // Is it portrait or landscape, compare height and width, since we can't
+    // be sure if EGraphicsOrientationNormal is portrait or landscape
+    if ( screenSize.iHeight < screenSize.iWidth )
+        {
+        iLandscape = ETrue;
+        }
+    else
+        {
+        iLandscape = EFalse;
+        }
+
+    //Remove this hack notification when Alfred starts to notify the controls of portrait/landscape changes.
+    IRLOG_DEBUG( "CIRUi::UpdateLandscapeInformation - Exiting" );
+    }
+
+
+    // ---------------------------------------------------------------------------
+// CIRUi::ChooseLayoutResource
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::ChooseLayoutResource( TInt aNormalPortraitRes,
+        TInt aMirroredPortraitRes, TInt aNormalLandscapeRes,
+        TInt aMirroredLandscapeRes ) const
+    {
+    IRLOG_DEBUG( "CIRUi::ChooseLayoutResource - Entering" );
+    TInt resId = 0;
+
+    if ( IsLandscapeOrientation() )
+        {
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            resId = aMirroredLandscapeRes;
+            }
+        else
+            {
+            resId = aNormalLandscapeRes;
+            }
+        }
+    else
+        {
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            resId = aMirroredPortraitRes;
+            }
+        else
+            {
+            resId = aNormalPortraitRes;
+            }
+        }
+    IRLOG_DEBUG( "CIRUi::ChooseLayoutResource - Exiting" );
+    return resId;
+    }
+// ---------------------------------------------------------------------------
+// CIRUi::HandlePropertyChangeErrorL
+// Derived from class MIRPropertyChangeObserver
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandlePropertyChangeErrorL(const TUid& /*aCategory*/,
+						const TUint /*aKey*/, TInt /*aError*/)
+	{
+	IRLOG_DEBUG( "CIRUi::HandlePropertyChangeErrorL" );
+	//Implementation is not required
+	}
+
+
+// ---------------------------------------------------------------------------
+//  CIRUi::sGetLockInfo()
+// gets information about keypad lock.
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetLockInfo()
+	{
+	IRLOG_DEBUG( "CIRUi::GetLockInfo - Entering" );
+	 TBool isLock(EFalse);
+	 RAknKeyLock keylock;
+	 TInt err = keylock.Connect();
+	 if ( !err )
+		{
+		 //check if keypad is locked.
+		 if ( keylock.IsKeyLockEnabled() )
+		    {
+		    isLock = ETrue;
+		    }
+		 else
+			{
+			isLock = EFalse;
+			}
+		keylock.Close();
+		}
+	 IRLOG_DEBUG( "CIRUi::GetLockInfo - Exiting" );
+	return ( isLock );
+	}
+
+// ---------------------------------------------------------------------------
+// UpdateSubscriberIdL()
+// Updates the IMSI code and sets the Terms & Conditions flag as necessary.
+// ---------------------------------------------------------------------------
+//
+void CIRUi::UpdateSubscriberIdL()
+    {
+    IRLOG_DEBUG( "CIRUi::UpdateSubscriberIdL - Entering" );
+    CMDBSession* dbSession = CMDBSession::NewL( CMDBSession::LatestVersion() );
+    CleanupStack::PushL( dbSession );
+
+    CMDBRecordSet<CCDModemBearerRecord>* recordSet = new ( ELeave )
+    				CMDBRecordSet<CCDModemBearerRecord>( KCDTIdModemBearerRecord );
+    CleanupStack::PushL( recordSet );
+
+    recordSet->LoadL( *dbSession );
+    if ( !recordSet->iRecords.Count() )
+        {
+        IRLOG_WARNING( "CIRUi::UpdateSubscriberIdL - Loading subscriber record set failed." );
+        User::Leave( KErrNotFound );
+        }
+
+    TInt index = 0;
+    CCDModemBearerRecord* record = NULL;
+    do
+        {
+        record = static_cast<CCDModemBearerRecord*>( recordSet->iRecords[index++] );
+        } while ( record->iTsyName.IsNull() && index < recordSet->iRecords.Count() );
+
+    TPtrC tsyName( static_cast<const TDesC&>( record->iTsyName ) );
+
+    RTelServer telServer;
+    User::LeaveIfError( telServer.Connect() );
+    CleanupClosePushL( telServer );
+    User::LeaveIfError( telServer.LoadPhoneModule( tsyName ) );
+
+    TInt numPhones = 0;
+    User::LeaveIfError( telServer.EnumeratePhones( numPhones ) );
+
+    TInt legalPhoneIndex = KErrNotFound;
+    RTelServer::TPhoneInfo phoneInfo;
+    for ( TInt i = 0; i < numPhones && legalPhoneIndex == KErrNotFound; i++ )
+        {
+        if ( telServer.GetPhoneInfo( i, phoneInfo ) == KErrNone )
+            {
+            if ( phoneInfo.iNetworkType == RTelServer::ENetworkTypeMobileDigital )
+                {
+                legalPhoneIndex = i;
+                }
+            }
+        }
+    User::LeaveIfError( legalPhoneIndex );
+
+    RMobilePhone phone;
+    User::LeaveIfError( phone.Open( telServer, phoneInfo.iName ) );
+    CleanupClosePushL( phone );
+
+    TUint32 identityCaps;
+    User::LeaveIfError( phone.GetIdentityCaps( identityCaps ) );
+
+    if ( identityCaps & RMobilePhone::KCapsGetSubscriberId )
+        {
+        TRequestStatus status;
+        RMobilePhone::TMobilePhoneSubscriberId subscriberId;
+        phone.GetSubscriberId( status, subscriberId );
+        User::WaitForRequest( status );
+        if ( !status.Int() && iIRSettings->SubscriberIdL().Compare( subscriberId ) )
+            {
+            iIRSettings->SetSubscriberIdL( subscriberId );
+            iIRSettings->ReSetFlagCostWarningL();
+            iIRSettings->ReSetFlagTermsAndConditionsL();
+            }
+        }
+    CleanupStack::PopAndDestroy( KFour, dbSession );
+    IRLOG_DEBUG( "CIRUi::UpdateSubscriberIdL - Exiting." );
+    }
+// ---------------------------------------------------------------------------
+// SelectedBrowsingCategory()
+// Returns the last selected browsing category
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::SelectedBrowsingCategory() const
+    {
+    IRLOG_DEBUG( "CIRUi::SelectedBrowsingCategory" );
+    return iSelectedBrowsingCategory;
+    }
+// ---------------------------------------------------------------------------
+// CancelDelayedAction()
+// ---------------------------------------------------------------------------
+//CIRUi::CreateWritablePrivatePath()
+//Only for ROM SDK3.2
+//creates a private path in c drive if it doesnot exist (for rom install)
+// ---------------------------------------------------------------------------
+//
+void CIRUi::CreateWritablePrivatePath()
+	{
+	IRLOG_DEBUG( "CIRUi::CreateWritablePrivatePath - Entering." );
+	TInt err;
+    err = iFsSession.CreatePrivatePath(EDriveC);
+    if(KErrNone != err)
+    	{
+    	TRAP_IGNORE(DisplayErrorNoteL(R_IRAPP_IRGENERAL_ERROR))
+    	}
+    IRLOG_DEBUG( "CIRUi::CreateWritablePrivatePath - Exiting." );
+	}
+// -----------------------------------------------------------------------------
+// From class CEikAppUi.
+// Handles a change to the application's resources which are shared across
+// the environment.
+// -----------------------------------------------------------------------------
+//
+void CIRUi::HandleResourceChangeL( TInt aType )
+	{
+	IRLOG_DEBUG( "CIRUi::HandleResourceChangeL - Entering." );
+	CAknViewAppUi::HandleResourceChangeL( aType );
+	UpdateLandscapeInformation();
+
+	CEikStatusPane* statP = StatusPane();
+	if(IsLandscapeOrientation())
+		{
+		statP->SwitchLayoutL(R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL);
+		}
+	else
+		{
+		if ( ActiveView() == KIRAddManuallyStationViewID)
+			{
+			statP->SwitchLayoutL( R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL);
+
+        	}
+		else
+			{
+			statP->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT);
+			}
+
+		}
+	TriggerCommand();
+
+	IRLOG_DEBUG( "CIRUi::HandleResourceChangeL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// Triggers the command to view handling
+// ---------------------------------------------------------------------------
+//
+void CIRUi::TriggerCommand()
+    {
+    IRLOG_DEBUG( "CIRUi::TriggerCommand - Entering." );
+    TVwsViewId viewId( KNullUid, KNullUid );
+    CAknViewAppUi* appUi = static_cast<CAknViewAppUi*>( CCoeEnv::Static()->AppUi() );
+    TInt err = appUi->GetActiveViewId( viewId );
+    RProcess process;
+    TSecureId id = process.SecureId();
+    // GetActiveViewId doesn't always work (when switched back to VRA through RadioLauncher icon
+    if( !err && viewId.iAppUid.iUid == id.iId )
+        {
+        CAknView* view = appUi->View( viewId.iViewUid );
+        if( view )
+            {
+            view->HandleStatusPaneSizeChange();
+            }
+        }
+    IRLOG_DEBUG( "CIRUi::TriggerCommand - Exiting." );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleWsEventL(..)
+// From class CEikAppUi.
+// Handles window server events.
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleWsEventL( const TWsEvent& aEvent,
+                            CCoeControl* aDestination )
+	{
+	IRLOG_DEBUG( "CIRUi::HandleWsEventL - Entering" );
+
+
+	// We don't want to shutdown on end key
+	if ( aEvent.Type() != KAknUidValueEndKeyCloseEvent )
+		{
+		CAknViewAppUi::HandleWsEventL( aEvent, aDestination );
+		}
+	else
+		{
+		if(IsForeground())
+			{
+			//variable currenttask is used check whether current task is foreground
+			//or background
+			TApaTask currenttask( iEikonEnv->WsSession() );
+			currenttask.SetWgId( iEikonEnv->RootWin().Identifier() );
+			currenttask.SendToBackground();
+			}
+		}
+	IRLOG_DEBUG( "CIRUi::HandleWsEventL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GainingForeGroundL().
+// Function handles when application gains foreground focus
+// ---------------------------------------------------------------------------
+//
+void CIRUi::GainingForeGroundL()
+	{
+	IRLOG_DEBUG( "CIRUi::GainingForeGroundL - Entering" );
+		if(iBgWhenLock )
+			{
+			iBgWhenLock = EFalse;
+			}
+
+		if(iActivationPending != KNullUid)
+			{
+			TUid tempraryUid=iActivationPending;
+		    // Reset even if ActivateLocalViewL leaves
+            iActivationPending = KNullUid;
+            ActivateLocalViewL( tempraryUid );
+			}
+
+	IRLOG_DEBUG( "CIRUi::GainingForeGroundL - Exiting." );
+	return;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleGainingForeground().
+// This is call back function which observes application focus gaining
+// foreground
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleGainingForeground()
+	{
+	// GainingForeGroundL() handles the functionality of loading the iRAPP
+	// view along with the buffering control if buffering crtl is present.
+	// Handled while iRAPP is put to background & then gains foreground focus.
+	IRLOG_DEBUG( "CIRUi::HandleGainingForeground - Entering" );
+	if( IsForeground() )
+		{
+		TRAP_IGNORE(GainingForeGroundL())
+		}
+	IRLOG_DEBUG( "CIRUi::HandleGainingForeground - Exiting." );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleLosingForeground().
+// This is call back function which observes application focus losing
+// foreground
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleLosingForeground()
+	{
+	IRLOG_DEBUG( "CIRUi::HandleLosingForeground - Entering" );
+	LosingForeground();
+	IRLOG_DEBUG( "CIRUi::HandleLosingForeground - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::LosingForeground().
+// Function handles when application looses foreground focus
+// ---------------------------------------------------------------------------
+//
+void CIRUi::LosingForeground()
+	{
+	if( GetLockInfo()  )
+		{
+		iBgWhenLock = ETrue;
+		}
+	IRLOG_DEBUG( "CIRUi::LosingForeground" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::IconProvider().
+// Returns the instance of icon provider.
+// ---------------------------------------------------------------------------
+//
+CIconFileProvider* CIRUi::IconProvider()
+	{
+	IRLOG_DEBUG( "CIRUi::IconProvider" );
+	return iIconProvider;
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::ParseAndPrepareUrl()
+// Checks for the URL whether its valid or not
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::ParseAndPrepareUrl(const TDesC& aUrl)
+	{
+	IRLOG_INFO2( "CIRUi::ParseAndPrepareUrl(aUrl=%S)", &aUrl );
+	_LIT8(KHttp,"http");
+	_LIT8(KMms, "mms");
+	TInt err = CnvUtfConverter::ConvertFromUnicodeToUtf8(iUrl8,aUrl);
+	if(err != KErrNone)
+		{
+	    IRLOG_ERROR2("CIRUi::ParseAndPrepareUrl - Unicode to Utf8 conversion failed (err=%d)", err );
+		return EFalse;
+		}
+
+    IRLOG_DEBUG2( "CIRUi::ParseAndPrepareUrl - Converted URL=%S", &iUrl8 );
+
+
+
+	TUriParser8 uriParser;
+
+	// Initialize the Uri Parser
+	if ( uriParser.Parse( iUrl8 ) != KErrNone )
+	    {
+	    IRLOG_ERROR( "CIRUi::ParseAndPrepareUrl - Error while parsing URI." );
+		return EFalse;
+	    }
+
+	//Extract protocol
+	if( uriParser.Extract( EUriScheme ).Length() > KSmallBufSize )
+		{
+	    IRLOG_ERROR("CIRUi::ParseAndPrepareUrl - Extracted URI scheme component too large." );
+		return EFalse;
+		}
+	else
+		{
+		TBuf8<KSmallBufSize> uriScheme;
+		uriScheme.Copy( uriParser.Extract( EUriScheme ) );
+		uriScheme.LowerCase();
+		if ( uriScheme.Compare(KHttp) && uriScheme.Compare(KMms) )
+			{
+	        IRLOG_ERROR("CIRUi::ParseAndPrepareUrl - Invalid URI scheme." );
+			return EFalse;
+			}
+		}
+
+	// Extract the Host Name
+	if ( uriParser.Extract( EUriHost ).Length() > KMaxBufSize )
+		{
+	    IRLOG_ERROR( "CIRUi::ParseAndPrepareUrl - Extracted Host component too large." );
+		return EFalse;
+		}
+	if ( uriParser.Extract( EUriHost ).Length() <= 0 )
+	    {
+	    IRLOG_ERROR( "CIRUi::ParseAndPrepareUrl - Empty Host component." );
+	    return EFalse;
+	    }
+
+	IRLOG_DEBUG( "CIRUi::ParseAndPrepareUrl - Exiting." );
+	return ETrue;
+	}
+
+/// ---------------------------------------------------------------------------
+// CIRUi::DisplayErrorNoteL()
+// Display the error note
+// ---------------------------------------------------------------------------
+//
+void CIRUi::DisplayErrorNoteL(TInt aResourceId)
+	{
+	IRLOG_DEBUG( "CIRUi::DisplayErrorNoteL - Entering" );
+	HBufC* error = StringLoader::LoadLC(aResourceId);
+	iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL(aResourceId,ETrue);
+	CleanupStack::PopAndDestroy(error);
+	IRLOG_DEBUG( "CIRUi::DisplayErrorNoteL - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::DisplayErrorNoteL()
+// Display the error note
+// ---------------------------------------------------------------------------
+//
+void CIRUi::DisplayErrorNoteL(TInt aResourceId, const TDesC &  aString)
+	{
+	IRLOG_DEBUG( "CIRUi::DisplayErrorNoteL - Entering" );
+	HBufC* error = StringLoader::LoadLC(aResourceId, aString);
+	CleanupStack::PopAndDestroy(error);
+	IRLOG_DEBUG( "CIRUi::DisplayErrorNoteL - Exiting" );
+	}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::UpdateNowPlayingByteCounter()
+// Retrieves current Byte Counter for displaying in Now playing view
+// ---------------------------------------------------------------------------
+//
+void CIRUi::UpdateNowPlayingByteCounter()
+	{
+	IRLOG_DEBUG( "CIRUi::UpdateNowPlayingByteCounter - Entering" );
+	const MIRDataTransferTracker::TIRDataTransferPckg& data = iNetworkController->
+				DataTransferTracker().TransferredData();
+	TReal32  total_bytes = data.iBytesSentTotal + data.iBytesReceivedTotal;
+	if(iNowPlayingView->iContainer)
+		{
+		TRAP_IGNORE(iNowPlayingView->DisplayByteCounterL(total_bytes))
+		}
+	IRLOG_DEBUG( "CIRUi::UpdateNowPlayingByteCounter - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleDataTransferEventL( const MIRDataTransferTracker::TIRDataTransferPckg& aData )
+// DataTransferObserver notification to receive byte counter
+// ---------------------------------------------------------------------------
+//
+void  CIRUi::HandleDataTransferEventL( const MIRDataTransferTracker::TIRDataTransferPckg& aData )
+	{
+	IRLOG_DEBUG( "CIRUi::HandleDataTransferEventL - Entering" );
+	TReal32 total_bytes = aData.iBytesSentTotal + aData.iBytesReceivedTotal;
+	if(iNowPlayingView->iContainer)
+		{
+		iNowPlayingView->DisplayByteCounterL(total_bytes);
+		}
+	// Byte Counter Testing function (to be removed)
+	IRLOG_DEBUG( "CIRUi::HandleDataTransferEventL - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::IsFirstTime()
+// returns which view should be launched.
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::IsFirstTime()
+	{
+	IRLOG_DEBUG( "CIRUi::IsFirstTime - Entering" );
+	TInt returnValue=0;
+	TRAP_IGNORE(returnValue=IsFlagIfAnyFavL());
+	if(iFavPresets->iFavPresetList.Count())
+		{
+		if(returnValue == 0)
+			{
+			TRAP_IGNORE(iIRSettings->SetFlagIfAnyFavL();)
+			}
+		}
+
+	IRLOG_DEBUG( "CIRUi::IsFirstTime - Exiting" );
+
+	if((iLastPlayed->iLastPlayedStation->iUrlArray->Count() == 0) &&
+				(iFavPresets->iFavPresetList.Count()== 0) && (!returnValue))
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::SetCommandSetL()
+// Dynamically changing the cba buttons.
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetCommandSetL(TInt aResourceId)
+	{
+	IRLOG_DEBUG( "CIRUi::SetCommandSetL - Entering" );
+	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+	cba->SetCommandSetL( aResourceId );
+	IRLOG_DEBUG( "CIRUi::SetCommandSetL - Exiting" );
+	}
+
+//--------------------------------------------------------------------------
+// CIRUi::IsForeground()
+//IsForeground()	 overloaded
+//---------------------------------------------------------------------------
+
+TBool CIRUi::IsForeground()
+	{
+	IRLOG_DEBUG( "CIRUi::IsForeground - Entering" );
+	#ifdef __WINS__
+	// Stop screen saver from activating
+	User::ResetInactivityTime();
+	#endif
+	IRLOG_DEBUG( "CIRUi::IsForeground - Exiting" );
+	TBool isForeground = CAknAppUiBase::IsForeground();
+	return isForeground;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::ParsePlsDataL(..).
+// Parse the PLS data
+// ---------------------------------------------------------------------------
+//
+void CIRUi::ParsePlsDataL(CFileStore*& /*aFileStore*/, RFile& aFile)
+	{
+	IRLOG_INFO( "CIRUi::ParsePlsDataL - Entering" );
+	CIRPlsPlayList* playList= CIRPlsPlayList::NewLC(aFile);
+	if(iURLs.Count()>0)
+		{
+		iURLs.ResetAndDestroy();
+	    iListenFrmSecondPls = EFalse;
+		iPlsPresetSaved.Close();
+		}
+
+	for (TInt i=0; i<playList->Count(); i++)
+		{
+		CIRPlsPlayListItem* item = playList->ItemAt(i);
+		if (item && item->File().Length())
+			{
+			if(item->Length()==-1)
+				{
+				HBufC8* fileBuf = HBufC8::NewLC( item->File().Length() );
+				fileBuf->Des().Copy( item->File() );
+				iURLs.AppendL( fileBuf );
+				CleanupStack::Pop( fileBuf );
+				HBufC8* titleBuf = HBufC8::NewLC( item->Title().Length() );
+				titleBuf->Des().Copy( item->Title() );
+				iURLs.AppendL( titleBuf );
+				iPlsLength.AppendL(item->Length());
+				CleanupStack::Pop( titleBuf );
+				}
+			}
+		}
+	for(TInt index=0;index < iURLs.Count()/2 ; index++ )
+		{
+		iPlsPresetSaved.Append(0);
+		}
+	CleanupStack::PopAndDestroy( playList );
+	ConnectToPlsUrlL();
+	IRLOG_DEBUG( "CIRUi::ParsePlsDataL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::ConnectToPlsUrlL()
+// Connect to PLS URL
+// ---------------------------------------------------------------------------
+//
+void CIRUi::ConnectToPlsUrlL()
+	{
+	IRLOG_DEBUG( "CIRUi::ConnectToPlsUrl - Entering" );
+	//Instantiate PLS View
+	if(!iPlsactivated)
+		{
+		iPlsView = CIRPlsView::NewL(ApplicationRect());
+		AddViewL(iPlsView);
+		}
+	else
+		{
+		iPlsLength.Close();
+		iPlsView->SecondConstruct();
+		}
+	if (!iIRSettings->IsFlagTermsAndConditionsL() ||
+	!iIRSettings->IsFlagCostWarningL())
+		{
+		iPlsactivated = ETrue;
+		ActivateLocalViewL(KIRCostWarningViewId);
+		}
+	//Activate the Pls view
+	else
+		{
+		if( iPresentViewID == KIRUpdateWarningViewID )
+			{
+			iPlsactivated = ETrue;
+			}
+		else
+			{
+			iPlsactivated = ETrue;
+			ActivateLocalViewL(KIRPlsViewID);
+			}
+		}
+	IRLOG_DEBUG( "CIRUi::ConnectToPlsUrl - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::GetPlsActiavted()
+// Returns bool whether T&C or cost warning view are accepted or not
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetPlsActiavted() const
+	{
+	IRLOG_DEBUG( "CIRUi::GetPlsActiavted" );
+	return(iPlsactivated);
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::SetPlsActiavted(..)
+// Sets bool if T&C or cost warning view are not accepted
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetPlsActiavted(TBool aPlsactivated)
+	{
+	IRLOG_DEBUG( "CIRUi::SetPlsActiavted - Entering" );
+	iPlsactivated=aPlsactivated;
+	IRLOG_DEBUG( "CIRUi::SetPlsActiavted - Exiting" );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::DisplayInformationL
+// Display the Information Note
+// ----------------------------------------------------------------------------
+
+void CIRUi::DisplayInformationL(TInt aResourceId, TInt aInt)
+	{
+	IRLOG_DEBUG( "CIRUi::DisplayInformationL - Entering" );
+    RBuf channel;
+	HBufC* displayinfo=StringLoader::LoadLC(aResourceId,aInt);
+	channel.Create(*displayinfo);
+	iDialogNote->ShowConfirmationNoteL( channel,ETrue );
+	CleanupStack::PopAndDestroy(displayinfo);
+	channel.Close();
+	IRLOG_DEBUG( "CIRUi::DisplayInformationL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::DisplayInformationL
+// Display the Information Note
+// ----------------------------------------------------------------------------
+
+void CIRUi::DisplayInformationL(TInt aResourceId, const TDesC &  aString)
+	{
+	IRLOG_DEBUG( "CIRUi::DisplayInformationL - Entering" );
+    RBuf channel;
+	HBufC* displayinfo=StringLoader::LoadLC(aResourceId,aString);
+	channel.Create(*displayinfo);
+	iDialogNote->ShowConfirmationNoteL( channel,ETrue );
+	CleanupStack::PopAndDestroy(displayinfo);
+	channel.Close();
+	IRLOG_DEBUG( "CIRUi::DisplayInformationL - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetBgWhenLockState()
+// returns the iBgWhenLock lock state.
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetBgWhenLockState()
+	{
+	IRLOG_DEBUG( "CIRUi::GetBgWhenLockState" );
+	return iBgWhenLock;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetCurrentOperatorValue()
+// returns the iCurrentOperator value.
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::GetCurrentOperatorValue()
+	{
+	IRLOG_DEBUG( "CIRUi::GetCurrentOperatorValue" );
+	return iCurrentOperator;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetHomeOperatorValue()
+// returns the vallue of iHomeOperator.
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::GetHomeOperatorValue()
+	{
+	IRLOG_DEBUG( "CIRUi::GetHomeOperatorValue" );
+	return iHomeOperator;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetCallActiveState()
+// returns whether iCallActive variable is true/false.
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetCallActiveState()
+	{
+	IRLOG_DEBUG( "CIRUi::GetCallActiveState" );
+	return iCallActive;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetNetworkControllerInstance()
+// returns the iNetworkController .
+// ---------------------------------------------------------------------------
+//
+CIRNetworkController* CIRUi::GetNetworkControllerInstance()
+	{
+	IRLOG_DEBUG( "CIRUi::GetNetworkControllerInstance" );
+	return iNetworkController;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetNowPlayingViewInstance()
+// returns instance od nowplaying view.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingView* CIRUi::GetNowPlayingViewInstance()
+	{
+	IRLOG_DEBUG( "CIRUi::GetNowPlayingViewInstance" );
+	return iNowPlayingView;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetPubSubManagerInstance()
+// returns instace of publish subscriber.
+// ---------------------------------------------------------------------------
+//
+CIRPubSub* CIRUi::GetPubSubManagerInstance()
+	{
+	IRLOG_DEBUG( "CIRUi::GetPubSubManagerInstance" );
+	return iPubSubManager;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetCurrentThreadIDValue()
+// returns the Current thread ID.
+// ---------------------------------------------------------------------------
+//
+TUint64 CIRUi::GetCurrentThreadIDValue()
+	{
+	IRLOG_DEBUG( "CIRUi::GetCurrentThreadIDValue" );
+	return iCurrentThreadID;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetFavPresetsInstance()
+// returns instace of Favourite preset.
+// ---------------------------------------------------------------------------
+//
+CIRFavoritesDb* CIRUi::GetFavPresetsInstance()
+	{
+	IRLOG_DEBUG( "CIRUi::GetFavPresetsInstance" );
+	return iFavPresets;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetNetworkType()
+// returns  Network Connection Type.
+// ---------------------------------------------------------------------------
+//
+TIRConnectionType CIRUi::GetNetworkType()
+	{
+	IRLOG_DEBUG( "CIRUi::GetNetworkType" );
+	return iNetWorkType;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetCallConnectedState()
+// returns the iCallConnected state.
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetCallConnectedState()
+	{
+	IRLOG_DEBUG( "CIRUi::GetCallConnectedState" );
+	return iCallConnected;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::SetActivationPendingValue(TUid aUid)
+// assign the Id value to iActionPending.
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetActivationPendingValue(TUid aUid)
+	{
+	IRLOG_DEBUG( "CIRUi::SetActivationPendingValue - Entering" );
+	iActivationPending = aUid;
+	IRLOG_DEBUG( "CIRUi::SetActivationPendingValue - Exiting" );
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::GetPresentViewID()
+// returns the present view ID.
+// ---------------------------------------------------------------------------
+//
+TUid CIRUi::GetPresentViewID()
+	{
+	IRLOG_DEBUG( "CIRUi::GetPresentViewID" );
+	return iPresentViewID;
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleCallActive(..)
+// Display the battery icon depending upon the battery level
+// ---------------------------------------------------------------------------
+//
+void  CIRUi::HandleCallActiveL(TIRSystemEventType aEventType)
+{
+IRLOG_DEBUG( "CIRUi::HandleCallActive - Entering" );
+switch (aEventType)
+	{
+	case EIRCallActivated:
+		{
+		iCallActive=ETrue;
+		if( iNowPlayingWrapper->IsProgress())
+			{
+			if(!(GetCurrentNetworkType().Compare(KWiFi)==0))
+				{
+				//if progress bar view we will go to the view from where we
+				//launched progress bar
+				iNowPlayingWrapper->ProgressBarCancel();
+
+				iNowPlayingWrapper->DestroyWaitDialogL();
+				iNowPlayingWrapper->SetProgress(EFalse);
+				}
+			//current view is progress bar view then previous view has to
+			//be activated
+			}
+		else if(iNowPlayingWrapper->iPlaying )
+			{
+			//if playing
+			//if it was previously playing including rebuffering
+			iPlayTerminated = ETrue;
+			//the player is expected to stop under all condition when a call comes
+			iNowPlayingWrapper->StopPlayer();
+			iNowPlayingWrapper->DoPlayingStateChanged( EFalse );
+			}
+		else
+			{
+			if ( IsForeground() )
+				{
+				//if application is in foreground
+				iPlayTerminated=EFalse;
+				iTriggeringRequired = ETrue;
+				}
+			else
+				{
+				iPlayTerminated=EFalse;
+				//if application is background
+				iTriggeringRequired = EFalse;
+				}
+
+			}
+		}
+
+
+
+	break;
+	case EIRCallDeactivated:
+		{
+		iCallActive=EFalse;
+		//This is check is done to tackle immediate cutting of the call
+		//sometimes it is found that it will remain in progress bar it self
+		//cancellation is not efficent
+		if( iNowPlayingWrapper->IsProgress())
+			{
+			//if progress bar view we will go to the view from where we
+			//launched progress bar
+			iNowPlayingWrapper->ProgressBarCancel();
+
+			iNowPlayingWrapper->DestroyWaitDialogL();
+			}
+		else if(!iNowPlayingWrapper->iPlaying && iPlayTerminated)
+			{
+			if(iNowPlayingView->iContainer)
+				{
+				iNowPlayingWrapper->SetLaunchNowPlayingView(ETrue);
+				}
+			else
+				{
+				iNowPlayingWrapper->SetLaunchNowPlayingView(EFalse);
+				}
+			iNowPlayingWrapper->DoPlayL();
+			}
+		else
+			{
+			if( iTriggeringRequired )
+				{
+				//bringing to fore ground
+				ActivateCurrentView(iPresentViewID);
+				}
+
+			}
+
+
+
+		}
+}
+IRLOG_DEBUG( "CIRUi::HandleCallActive - Exiting" );
+}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleAlarmStart()
+// Handles when an alarm starts
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleAlarmStart()
+	{
+	IRLOG_DEBUG( "CIRUi::HandleAlarmStart - Entering" );
+	if( iNowPlayingWrapper->IsProgress())
+		{
+		//if progress bar view we will go to the view from where we
+		//launched progress bar
+		iNowPlayingWrapper->ProgressBarCancel();
+
+		TRAP_IGNORE(iNowPlayingWrapper->DestroyWaitDialogL());
+		//current view is progress bar view then previous view has to
+		//be activated
+		}
+	else
+		{
+		//if playing
+		if(iNowPlayingWrapper->iPlaying )
+			{
+
+
+				iAlarmTerminated = ETrue;
+			//if it was previously playing including rebuffering
+			//iPlayCallTerminated = ETrue
+			//the player is expected to stop under all condition when a call comes
+			iNowPlayingWrapper->StopPlayer();
+			iNowPlayingWrapper->DoPlayingStateChanged( EFalse );
+			}
+		}
+
+	IRLOG_DEBUG( "CIRUi::HandleAlarmStart - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleAlarmEnd()
+// Handles when an alarm ends
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleAlarmEnd()
+	{
+	IRLOG_INFO( "CIRUi::HandleAlarmEnd - Entering" );
+	if( iAlarmTerminated )
+		{
+		iAlarmTerminated = EFalse;
+
+		if(!iNowPlayingWrapper->iPlaying)
+			{
+      IRRDEBUG2("CIRUi::HandleAlarmEnd - HandleAlarmEnd()",
+			 KNullDesC );
+
+		TRAP_IGNORE(iNowPlayingWrapper->DoPlayL();)
+			}
+		}
+	 if( iTriggeringRequired )
+		{
+		//bringing to fore ground
+		ActivateCurrentView(iPresentViewID);
+		}
+	IRLOG_DEBUG( "CIRUi::HandleAlarmEnd - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleInitialAlarmEvent()
+// Handles when an alarm comes initial handling
+// ---------------------------------------------------------------------------
+//
+
+
+void CIRUi::HandleInitialAlarmEvent()
+	{
+	IRLOG_DEBUG( "CIRUi::HandleInitialAlarmEvent - Entering" );
+	if( iNowPlayingWrapper->IsProgress())
+		{
+		//if progress bar view we will go to the view from where we
+		//launched progress bar
+		iNowPlayingWrapper->ProgressBarCancel();
+
+		TRAP_IGNORE(iNowPlayingWrapper->DestroyWaitDialogL());
+		iNowPlayingWrapper->SetProgress(EFalse);
+		//current view is progress bar view then previous view has to
+		//be activated
+		}
+	else
+		{
+		//if playing
+		if(iNowPlayingWrapper->iPlaying )
+			{
+
+			iAlarmTerminated = ETrue;
+			//if it was previously playing including rebuffering
+			//iPlayCallTerminated = ETrue
+			//the player is expected to stop under all condition when a call comes
+			iNowPlayingWrapper->StopPlayer();
+			iNowPlayingWrapper->DoPlayingStateChanged( EFalse );
+			}
+		}
+
+		if ( IsForeground() )
+		{
+		//if application is in foreground
+		iTriggeringRequired = ETrue;
+		}
+	else
+		{
+		//if application is background
+		iTriggeringRequired = EFalse;
+		}
+	IRLOG_DEBUG( "CIRUi::HandleInitialAlarmEvent - Exiting." );
+	}
+
+// ---------------------------------------------------------------------------
+// CIRUi::HandleMessageAlertL()
+// Handles when a new message comes
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleMessageAlertL()
+	{
+	IRLOG_DEBUG( "CIRUi::HandleMessageAlertL" );
+	return;
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::SetPlsIndex()
+// Sets the Pls Index
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetPlsIndex(TInt aPlsIndex)
+{
+IRLOG_DEBUG( "CIRUi::SetPlsIndex - Entering" );
+	iPlsIndex=aPlsIndex;
+
+IRLOG_DEBUG( "CIRUi::SetPlsIndex - Exiting." );
+
+}
+// ---------------------------------------------------------------------------
+// CIRUi::GetPlsIndex()
+// Returns the Pls Index
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::GetPlsIndex()
+{
+IRLOG_DEBUG( "CIRUi::GetPlsIndex - Entering" );
+IRLOG_DEBUG( "CIRUi::GetPlsIndex - Exiting." );
+	return iPlsIndex;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::SetBgLock()
+//  Sets the BGround whether it is Locked or Unlocked
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetBgLock(TInt aBgWhenLock)
+{
+IRLOG_DEBUG( "CIRUi::SetBgLock - Entering" );
+IRLOG_DEBUG( "CIRUi::SetBgLock - Exiting." );
+	iBgWhenLock=aBgWhenLock;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::GetPlsIndex()
+// Returns whether the Bground is Locked or Unlocked
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetBgLock()
+{
+IRLOG_DEBUG( "CIRUi::GetBgLock - Entering" );
+IRLOG_DEBUG( "CIRUi::GetBgLock - Exiting." );
+	return iBgWhenLock;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::SetEditStation()
+// 	 Sets the iIsEditStation Flag To determine whether the station
+//	 can be Edited
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetEditStation(TInt aIsEditStation)
+{
+IRLOG_DEBUG( "CIRUi::SetEditStation - Entering" );
+IRLOG_DEBUG( "CIRUi::SetEditStation - Exiting." );
+	iIsEditStation=aIsEditStation;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::GetEditStation()
+// Returns whether The station can be edited Or not
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetEditStation()
+{
+IRLOG_DEBUG( "CIRUi::GetEditStation - Entering" );
+IRLOG_DEBUG( "CIRUi::GetEditStation - Exiting." );
+	return iIsEditStation;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::GetSkinColor()
+// CIRUi::GetEditStation()
+// Returns the Current Color
+// ---------------------------------------------------------------------------
+//
+TRgb CIRUi::GetSkinColor()
+{
+	IRLOG_DEBUG( "CIRUi::GetSkinColor - Entering" );
+
+
+	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
+
+    TRgb color;
+    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
+    				 EAknsCIQsnTextColorsCG6 );
+	IRLOG_DEBUG( "CIRUi::GetSkinColor - Exiting" );
+    return color;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::ChooseToolBarIcons()
+// Returns the ToolbarBirmap Id For The Current Theme
+// ---------------------------------------------------------------------------
+//
+TInt  CIRUi::ChooseToolBarBitmaps(TInt aBlack,TInt aWhite)
+{
+IRLOG_DEBUG( "CIRUi::ChooseToolBarBitmaps - Entering" );
+IRLOG_DEBUG( "CIRUi::ChooseToolBarBitmaps - Exiting" );
+ 	if(GetSkinColor().Gray2()==0)
+    {
+    return aBlack;
+    }
+    else
+    {
+     return aWhite;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// CIRUi::ChooseToolBarMaskId()
+// Returns the Toolbar mask  Id For The Current Theme
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::ChooseToolBarMaskId(TInt aBlackMask,TInt aWhiteMask)
+{
+
+IRLOG_DEBUG( "CIRUi::ChooseToolBarMaskId - Entering" );
+IRLOG_DEBUG( "CIRUi::ChooseToolBarMaskId - Exiting" );
+	if(GetSkinColor().Gray2()==0)
+    {
+    return aBlackMask;
+    }
+    else
+    {
+    return aWhiteMask;
+    }
+}
+// ---------------------------------------------------------------------------
+// CIRUi::SetHistory()
+// Set the Flag From All the Views  When Go to nowplaying Is Done
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetHistory(TBool aHistory)
+{
+IRLOG_DEBUG( "CIRUi::SetHistory - Entering" );
+IRLOG_DEBUG( "CIRUi::SetHistory - Exiting" );
+iHistory=aHistory;
+}
+// ---------------------------------------------------------------------------
+// CIRUi::SetHistory()
+// Return the iAlarmTerminated Flag
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetAlarm()
+{
+IRLOG_DEBUG( "CIRUi::GetAlarm - Entering" );
+IRLOG_DEBUG( "CIRUi::GetAlarm - Exiting" );
+	return iAlarmTerminated;
+}
+
+// ---------------------------------------------------------------------------
+// CIRUi::SetPlayStateWhileCall
+// Sets This Value When Stoping the Player
+// While Call is Active
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetPlayStateWhileCall(TBool aPlayTerminated)
+{
+ iPlayTerminated = aPlayTerminated;
+}
+
+// ---------------------------------------------------------------------------
+// CIRUi::GetPlayStateWhileCall
+// Returns the Value of Play state
+// While Call is Active
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::GetPlayStateWhileCall()
+{
+ return iPlayTerminated ;
+}
+
+
+// ---------------------------------------------------------------------------
+// IsFlagIfAnyFavL()
+// Method to determine if any channel was added to favorites
+// ---------------------------------------------------------------------------
+//
+ TBool CIRUi::IsFlagIfAnyFavL()
+	{
+	IRLOG_DEBUG( "CIRUi::IsFlagIfAnyFavL - Entering" );
+	IRLOG_DEBUG( "CIRUi::IsFlagIfAnyFavL - Exiting" );
+	return (iIRSettings->IsFlagIfAnyFavL());
+	 }
+// ---------------------------------------------------------------------------
+// SetMainView()
+// Method to set that the now playing view flag is from the Main view
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SetMainView(TBool val)
+	{
+	iMainViewLaunch = val;
+	}
+
+
+#ifdef FF_IAUPDATE
+void CIRUi::CheckUpdatesComplete( TInt aErrorCode, TInt aAvailableUpdates )
+    {
+    IRRDEBUG2("CIRUi:: CheckUpdatesComplete - Entered", KNullDesC);
+    IRRDEBUG2("CIRUi::CheckUpdatesComplete ErrorCode Received: %d", aErrorCode);
+    if ( aErrorCode == KErrNone )
+    	{
+    	IRRDEBUG2("CIRUi::CheckUpdatesComplete AvailableUpdates: %d", aAvailableUpdates);
+    	if ( aAvailableUpdates > 0 )
+    	    {
+    	    /**
+    		 * There were some updates available. Let's ask if the
+    		 * user wants to update them
+    		 */
+            iUpdate->UpdateQuery();
+            IRRDEBUG2("CIRUi::CheckUpdatesComplete After Call to UpdateQuery", KNullDesC);
+    	    }
+    	else
+    	    {
+            /**
+             * No updates available. CIAUpdate object could be deleted
+             * already now, since we are not going to call anything else
+             * from the API. This will also close down the IAUpdate server
+             */
+            IRRDEBUG2("CIRUi::CheckUpdatesComplete No Updates are available deleting handles", KNullDesC);
+            delete iUpdate;
+            iUpdate = NULL;
+            delete iParameters;
+            iParameters = NULL;
+    	    }
+    	}
+    IRRDEBUG2("CIRUi:: CheckUpdatesComplete - Leaving", KNullDesC);
+    }
+
+void CIRUi::UpdateComplete(TInt aErrorCode, CIAUpdateResult* aResult)
+    {
+    IRRDEBUG2("CIRUi:: UpdateComplete - Entered", KNullDesC);
+    IRRDEBUG2("CIRUi:: UpdateComplete - ErrorCode Received: %d", aErrorCode);
+    if ( aErrorCode == KErrNone )
+    	{
+        /**
+         * The update process that the user started from IAUpdate UI is
+         * now completed. If the client application itself was updated in
+         * the update process, this callback is never called, since the
+         * client is not running anymore
+         */
+        TInt successCount = aResult->SuccessCount();
+        IRRDEBUG2("CIRUi:: UpdateComplete - After Call to SuccessCount", KNullDesC);
+        }
+    /**
+     * Ownership was transferred, so this must be deleted by the client
+     */
+    delete aResult;
+
+    /**
+     * We do not need the client-server session anymore, let's
+     * delete the object to close the session
+     */
+    delete iUpdate;
+    iUpdate = NULL;
+    delete iParameters;
+    iParameters = NULL;
+    IRRDEBUG2("CIRUi:: UpdateComplete - Leaving", KNullDesC);
+    }
+
+void CIRUi::UpdateQueryComplete( TInt aErrorCode, TBool aUpdateNow )
+    {
+    IRRDEBUG2("CIRUi:: UpdateQueryComplete - Entered", KNullDesC);
+    IRRDEBUG2("CIRUi:: UpdateQueryComplete - ErrorCode Received: %d", aErrorCode);
+    if ( aErrorCode == KErrNone )
+        {
+        IRRDEBUG2("CIRUi:: UpdateQueryComplete - aUpdateNow: %d", aUpdateNow);
+    	if ( aUpdateNow )
+    	    {
+            /**
+             * User choosed to update now, so let's launch the IAUpdate UI.
+             */
+            iUpdate->ShowUpdates( *iParameters );
+            IRRDEBUG2("CIRUi:: UpdateQueryComplete - After Call to ShowUpdates", KNullDesC);
+    	    }
+        else
+            {
+            /**
+             * The answer was 'Later'. CIAUpdate object could be deleted
+             * already now, since we are not going to call anything else
+             * from the API. This will also close down the IAUpdate server
+             */
+            delete iUpdate;
+            iUpdate = NULL;
+            delete iParameters;
+            iParameters = NULL;
+            }
+        }
+    IRRDEBUG2("CIRUi:: UpdateQueryComplete - Leaving", KNullDesC);
+    }
+#endif // FF_IAUPDATE
+
+
+void CIRUi::FindInMusicStoreCounter()
+	{
+	IRLOG_DEBUG("CIRUi::FindInMusicStoreCounter() - Entered");
+	iFindInMusicStoreCount++;
+	IRLOG_DEBUG("CIRUi::FindInMusicStoreCounter() - Leaving");
+	}
+
+void CIRUi::GetFindInMusicStoreCount(TInt& aFindInMStoreCount)
+	{
+	IRLOG_DEBUG("CIRUi::GetFindInMusicStoreCount() - Entered");
+	aFindInMStoreCount = iFindInMusicStoreCount;
+	IRLOG_DEBUG("CIRUi::GetFindInMusicStoreCount() - Leaving");
+	}
+
+TBool CIRUi::IsOfflineProfile()
+	{
+	IRLOG_DEBUG("CIRUi::IsOfflineProfile() - Entered");
+	IRLOG_DEBUG("CIRUi::IsOfflineProfile() - Leaving");
+	return iIsOffline;
+	}
+
+// ---------------------------------------------------------------------------
+// HandleProfileActivatedL()
+// Method called whenever there is a change in the profile
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleProfileActivatedL(TInt aProfileId)
+	{
+	IRRDEBUG2("CIRUi::HandleProfileActivatedL - Entering aProfileId = %d",aProfileId );
+    const TInt KProfileId=5;
+	if(iProfileId==aProfileId)
+		{
+		return;
+		}
+	if(aProfileId==KProfileId)
+		{
+		if ( iIsdsWrapper->GetISDSInstance() )
+			{
+			if(iIsdsWrapper->GetListenRequest()||(iNowPlayingWrapper->iSyncPreset))
+				{
+				iNowPlayingWrapper->DestroyWaitDialogL();
+				}
+			iNowPlayingWrapper->iSyncPreset=EFalse;
+			iIsdsWrapper->DestroyWaitDialogL();
+			iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+			iIsdsWrapper->GetISDSInstance()->ReleaseResources();
+			}
+		if(iNowPlayingWrapper->iPlaying && (!iNowPlayingWrapper->IsProgress()))
+			{
+			iNowPlayingWrapper->StopNow();
+			if(ActiveView() == KIRMainChoiceViewID)
+				{
+				iMainView->GetMainContainer()->UpdateAllL();
+				}
+
+			}
+		else
+			{
+			if(iNowPlayingWrapper->GetConnectToServerState() && !iNowPlayingWrapper->IsProgress())
+				{
+				iNowPlayingWrapper->CancelNetworkRequestL();
+				iNowPlayingWrapper->DestroyWaitDialogL();
+				}
+			//player is stopped
+			if( iNowPlayingWrapper->IsProgress() )
+				{
+				//if in progress bar view, progress bar is cancelled
+				iNowPlayingWrapper->ProgressBarCancel();
+				iNowPlayingWrapper->DestroyWaitDialogL();
+				}
+			}
+
+		//network got disconnected
+		/*iNetworkIndicatorTimer->Cancel();
+		//connection status is reset in network controller
+		iNetworkController->ResetConnectionStatus();
+		if ( iIsdsWrapper->GetISDSInstance() )
+		{
+		iIsdsWrapper->DestroyWaitDialogL();
+		iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+		iIsdsWrapper->GetISDSInstance()->ReleaseResources();
+		}
+		//player is stopped
+		if( iNowPlayingWrapper->IsProgress() )
+		{
+		//if in progress bar view, progress bar is cancelled
+		iNowPlayingWrapper->ProgressBarCancel();
+
+		iNowPlayingWrapper->DestroyWaitDialogL();
+		}
+		else
+		{
+		if(iNowPlayingWrapper->iPlaying)
+		{
+		iNowPlayingWrapper->StopNow();
+		if(ActiveView() == KIRMainChoiceViewID)
+		{
+		iMainView->GetMainContainer()->UpdateAllL();
+		}
+		}
+		}
+		*/
+		iProfileId=aProfileId;
+		}
+	else
+		{
+		iProfileId=aProfileId;
+		}
+	IRRDEBUG2("CIRUi::HandleProfileActivatedL - Exiting",KNullDesC );
+
+}
+RArray<TInt>& CIRUi::GetPlsSaved()
+	{
+	return iPlsPresetSaved;
+	}
+void CIRUi::SetListenFromPls(TBool aValue)
+	{
+	iListenFromPls = aValue ;
+	}
+TBool CIRUi::GetListenFromPls()
+	{
+	return iListenFromPls ;
+	}
+void CIRUi::SetListenFromSecondPls(TBool aValue)
+	{
+	iListenFrmSecondPls = aValue;
+	}
+TBool CIRUi::GetListenFromSecondPls()
+	{
+	return iListenFrmSecondPls ;
+	}
+
+// ---------------------------------------------------------------------------
+// HandleProfileActivationNotificationError()
+// Method called whenever there is an error while change in the profile
+// ---------------------------------------------------------------------------
+//
+void CIRUi:: HandleProfileActivationNotificationError (TInt)
+{
+
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::CheckAndNotifyLowDiskSpaceL
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::CheckAndNotifyLowDiskSpaceL() const
+    {
+	IRRDEBUG2("CIRUi::CheckAndNotifyLowDiskSpaceL - Entering", KNullDesC);
+    TBool isLow = iSystemEventCollector->IsDiskSpaceBelowCriticalLevel();
+    if ( isLow )
+		{
+		IRRDEBUG2("CIRUi::CheckAndNotifyLowDiskSpaceL - Phone LOW MEMORY detected", KNullDesC);
+		iDialogLauncher->ShowInformationNoteL( R_IRAPP_MEMLO_RAM_OUT_OF_MEM, ETrue);
+		}
+
+	IRRDEBUG2("CIRUi::CheckAndNotifyLowDiskSpaceL - Exiting", KNullDesC);
+    return isLow;
+    }
+
+
+// ---------------------------------------------------------
+// CIRUi::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRUi::HandleSystemEventL(TIRSystemEventType aEventType)
+	{
+	IRLOG_DEBUG("CIRUi::HandleSystemEventL - Entering");
+
+	switch (aEventType)
+		{
+		case EIRHeadsetConnected:
+            {
+            StopDisplayingMenuBar();
+            break;
+            }
+        case EIRHeadsetDisconnected:
+            {
+            StopDisplayingMenuBar();
+            break;
+            }
+		case EIRLowDiskSpace:
+			{
+			IRRDEBUG2("CIRUi::HandleSystemEventL - EIRLowDiskSpace reported", KNullDesC);
+
+			// Cancel pending logo requests
+			iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
+			GetLogoDownloadEngine()->CancelTransaction();
+
+			// Cancel pending ISDS requests & Preset request for Listen
+            if ( iIsdsWrapper->GetISDSInstance() )
+                {
+                if(iIsdsWrapper->GetListenRequest())
+			  		{
+					iNowPlayingWrapper->DestroyWaitDialogL();
+			  		}
+                iIsdsWrapper->DestroyWaitDialogL();
+       			iIsdsWrapper->GetISDSInstance()->IRISDSCancelRequest();
+ 			    iIsdsWrapper->GetISDSInstance()->ReleaseResources();
+                }
+        	// Stop playing
+        	if(iNowPlayingWrapper->iPlaying && !iNowPlayingWrapper->IsProgress() )
+				{
+				iNowPlayingWrapper->StopNow();
+				if(ActiveView() == KIRMainChoiceViewID)
+					{
+					iMainView->GetMainContainer()->UpdateAllL();
+					}
+				}
+			// Cancel ConnectToServer requests
+	        else if(iNowPlayingWrapper->GetConnectToServerState()
+	        		&& !iNowPlayingWrapper->IsProgress())
+				{
+				iNowPlayingWrapper->CancelNetworkRequestL();
+				iNowPlayingWrapper->DestroyWaitDialogL();
+				}
+			// Cancel Listen streaming requests
+			else if( iNowPlayingWrapper->IsProgress() )
+				{
+				//if in progress bar view, progress bar is cancelled
+				iNowPlayingWrapper->ProgressBarCancel();
+				iNowPlayingWrapper->DestroyWaitDialogL();
+				}
+
+			// Show Low Memory warning
+			iDialogLauncher->ShowInformationNoteL( R_IRAPP_MEMLO_RAM_OUT_OF_MEM, ETrue);
+			}
+		break;
+		default:
+			{
+			}
+		break;
+		}
+	IRLOG_DEBUG( "CIRUi::HandleSystemEventL - Exiting." );
+	}
+// ---------------------------------------------------------------------------
+// CIRUi::DetermineCurrentProfile
+// Used to determine the current profile
+// ---------------------------------------------------------------------------
+//
+TInt CIRUi::DetermineCurrentProfile() const
+	{
+	IRLOG_DEBUG( "CIRUi::DetermineCurrentProfile" );
+	TInt value = KErrNone;
+
+	TRAPD(err,
+	CRepository* cRepositoryHandle = CRepository::NewLC(KCRUidProfileEngine );
+	cRepositoryHandle->Get(KProEngActiveProfile,value);
+	CleanupStack::PopAndDestroy(cRepositoryHandle);	)
+	if(err != KErrNone)
+		{
+		value = err;
+		}
+
+	IRLOG_DEBUG( "CIRUi::DetermineCurrentProfile - Exiting." );
+	return value;
+	}
+
+
+
+
+
+
+
+//ADDED BY SNIGDHA FOR HOMESCREEN
+
+
+
+
+// ---------------------------------------------------------------------------
+// CIRUi::ProcessActionHandlerCommandParameter
+// ---------------------------------------------------------------------------
+void CIRUi::ProcessActionHandlerCommandParameter( const TDesC8& aTail )
+    {
+   IRRDEBUG2("CIRUi::ProcessActionHandlerCommandParameter entering", KNullDesC);
+
+    if ( aTail.Compare( KIRCommandLineActionHandlerCommandStartNowPlayingView() ) == 0 )
+        {
+        iStartUpInNowPlayingView = ETrue;
+        }
+
+   IRRDEBUG2("CIRUi::ProcessActionHandlerCommandParameter exiting", KNullDesC);
+
+    }
+
+// ---------------------------------------------------------------------------
+// CIRUi::ProcessCommandTailL
+// ---------------------------------------------------------------------------
+void CIRUi::ProcessCommandTailL( const TDesC8& aTail )
+    {
+
+   IRRDEBUG2("CIRUi::ProcessCommandTailL entering", KNullDesC);
+
+    TLex8 tailLex( aTail );
+    TChar peek = tailLex.Peek();
+
+    if ( peek != KIRCommandLineOptionPrefix && peek != 0) // old CLI: expect only preset ID.
+        {
+        }
+    else if ( peek != 0 )
+        {
+        TPtrC8 option = tailLex.NextToken();
+
+        // Get option
+        if ( option.Length() > 0 )
+            {
+            tailLex.SkipSpaceAndMark();
+            TPtrC8 rest = tailLex.Remainder();
+
+            if ( option.Compare( KIRCommandLineActionHandler() )  == 0 )
+                {
+                ProcessActionHandlerCommandParameter( rest );
+                }
+            else
+                {
+                User::Leave( KErrArgument );
+                }
+            }
+        }
+    else
+        {
+        // NOP
+        }
+
+       IRRDEBUG2("CIRUi::ProcessCommandTailL exiting", KNullDesC);
+
+    }
+
+// ---------------------------------------------------------------------------
+// From class CEikAppUi.
+// Processes shell commands.
+// ---------------------------------------------------------------------------
+//
+TBool CIRUi::ProcessCommandParametersL( TApaCommand aCommand, TFileName&
+        aDocumentName, const TDesC8& aTail )
+	{
+	IRRDEBUG2("CIRUi::ProcessCommandParametersL entering", KNullDesC);
+
+	TBool ret = CAknViewAppUi::ProcessCommandParametersL( aCommand,
+	aDocumentName, aTail );
+
+
+	ProcessCommandTailL( aTail );
+	IRRDEBUG2("CIRUi::ProcessCommandParametersL exiting", KNullDesC);
+
+	return ret;
+	}
+
+
+// ---------------------------------------------------------------------------
+// From class CEikAppUi.
+// Handles window server messages.
+// ---------------------------------------------------------------------------
+//
+MCoeMessageObserver::TMessageResponse CIRUi::HandleMessageL(
+        TUint32 aClientHandleOfTargetWindowGroup, TUid aMessageUid,
+        const TDesC8& aMessageParameters )
+    {
+    IRRDEBUG2("CIRUi::HandleMessageL Entering", KNullDesC);
+
+    TMessageResponse resp = CAknViewAppUi::HandleMessageL(
+        aClientHandleOfTargetWindowGroup, aMessageUid, aMessageParameters );
+
+    if ( resp == EMessageNotHandled && aMessageUid == KUidActiveInternetRadioApp)
+    	{
+        ProcessCommandTailL( aMessageParameters );
+        resp = EMessageHandled;
+
+     	IRRDEBUG2("CIRUi::HandleMessageL iStartUpInNowPlayingView = %d", iStartUpInNowPlayingView);
+
+        // Activate now playing view to now playing or last played channel
+        if ( iStartUpInNowPlayingView )
+			{
+			IRRDEBUG2("CIRUi::HandleMessageL ActivateLocalViewL", KNullDesC);
+
+			ActivateLocalViewL( KIRNowPlayingViewID );
+
+			iStartUpInNowPlayingView = EFalse;
+			}
+    	}
+    else
+        {
+        // NOP
+        }
+    IRRDEBUG2("CIRUi::HandleMessageL exiting", KNullDesC);
+
+    return resp;
+    }
+
+// ---------------------------------------------------------------------------
+// CVRAppUi::BringToForeground
+// ---------------------------------------------------------------------------
+//
+void CIRUi::BringToForeground() const
+    {
+    IRLOG_DEBUG( " *** S60VisualRadio -- CVRAppUi::BringToForeground" );
+
+    TApaTask task( iEikonEnv->WsSession() );
+    task.SetWgId( iEikonEnv->RootWin().Identifier() );
+    task.BringToForeground();
+    }
+// ---------------------------------------------------------------------------
+// CVRAppUi::SendToBackground
+// ---------------------------------------------------------------------------
+//
+void CIRUi::SendToBackground() const
+    {
+    IRLOG_DEBUG( " *** S60VisualRadio -- CVRAppUi::SendToBackground" );
+    TApaTask task( iEikonEnv->WsSession() );
+    task.SetWgId( iEikonEnv->RootWin().Identifier() );
+    task.SendToBackground();
+    }
+// ---------------------------------------------------------------------------
+// CIRUi::PlayerStateChangedL
+// Changes the state of the player
+// ---------------------------------------------------------------------------
+//
+
+void CIRUi::PlayerStateChangedL(TIRStopPlayState /*aState*/)
+	{
+	IRRDEBUG2("CIRUi::PlayerStateChangedL entering",KNullDesC);
+
+
+	iNowPlayingWrapper->PlayAndStopL();
+	IRRDEBUG2("CIRUi::PlayerStateChangedL exitng",KNullDesC);
+
+	}
+
+
+// ---------------------------------------------------------------------------
+// From class MCoeViewActivationObserver.
+// Notification that a view is being activated.
+// ---------------------------------------------------------------------------
+//
+void CIRUi::HandleViewActivation( const TVwsViewId& aNewlyActivatedViewId,
+                                     const TVwsViewId& /*aViewIdToBeDeactivated*/ )
+    {
+    IRLOG_DEBUG( " *** S60VisualRadio -- CIRUi::HandleViewActivation" );
+    if ( aNewlyActivatedViewId.iAppUid == TUid::Uid( KUIDIRAPP ) )
+        {
+#ifdef __IRA_FEATURE_BACKSTEPPING_SERVICE
+        TRAP_IGNORE( iBsWrapper->HandleViewActivationEventL( aNewlyActivatedViewId, ETrue ) )
+#endif
+        }
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irviewstack.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2004 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:  CIRViewStack class
+*
+*/
+
+
+#include <eikenv.h>
+#include "irviewstack.h"
+#include "irdebug.h"
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRViewStack* CIRViewStack::NewL()
+    {
+    IRLOG_INFO( "CIRViewStack::NewL - Entering" );
+    CIRViewStack* self = new( ELeave ) CIRViewStack( );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    IRLOG_INFO( "CIRViewStack::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Desctructor.
+// ---------------------------------------------------------------------------
+//
+CIRViewStack::~CIRViewStack()
+    {
+    IRLOG_INFO( "CIRViewStack::~CIRViewStack - Entering" );
+    iViewStack.Close();
+    IRLOG_INFO( "CIRViewStack::~CIRViewStack - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// C++ defaul desctructor.
+// ---------------------------------------------------------------------------
+//
+CIRViewStack::CIRViewStack( )
+    {
+    IRLOG_INFO( "CIRViewStack::CIRViewStack" );
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CIRViewStack::ConstructL()
+    {
+    IRLOG_INFO( "CIRViewStack::ConstructL" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRViewStack::Peek()
+// ---------------------------------------------------------------------------
+//
+TUid CIRViewStack::Peek() const
+    {
+    IRLOG_INFO( "CIRViewStack::ConstructL" );
+    return iViewStack.Count() ? iViewStack[iViewStack.Count() - 1] : KNullUid;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRViewStack::PushL()
+// ---------------------------------------------------------------------------
+//
+void CIRViewStack::PushL( TUid aView )
+    {
+    IRLOG_INFO( "CIRViewStack::PushL - Entering" );
+    if( !iViewStack.Count() || iViewStack[iViewStack.Count()-1] != aView )
+        {
+        iViewStack.AppendL( aView );
+        }
+    IRLOG_INFO( "CIRViewStack::PushL - Exiting" );
+    }
+
+// ---------------------------------------------------------------------------
+// CIRViewStack::Pop()
+// ---------------------------------------------------------------------------
+//
+TInt CIRViewStack::Count() const
+    {
+    IRLOG_INFO( "CIRViewStack::Count" );
+    return iViewStack.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// CIRViewStack::Pop()
+// ---------------------------------------------------------------------------
+//
+TUid CIRViewStack::Pop()
+    {
+    IRLOG_INFO( "CIRViewStack::Pop - Entering" );
+    TUid ret = KNullUid;
+    if( iViewStack.Count() )
+        {
+        ret = iViewStack[iViewStack.Count()-1];
+        iViewStack.Remove( iViewStack.Count()-1 );
+        }
+    IRLOG_INFO( "CIRViewStack::Pop - Exiting" );
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CIRViewStack::PopTo()
+// ---------------------------------------------------------------------------
+//
+TUid CIRViewStack::PopTo( TUid aId )
+    {
+    IRLOG_INFO( "CIRViewStack::PopTo - Entering" );
+    TUid ret = KNullUid;
+    while ( Peek() != aId && Count() > 0 )
+        {
+        ret = Pop();
+        }
+    IRLOG_INFO( "CIRViewStack::PopTo - Exiting" );
+    return ret;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/mirlistboxarray.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,191 @@
+/*
+* 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 <stringloader.h> 
+#include "irdebug.h"
+#include "mirlistboxarray.h"
+
+
+
+
+// ---------------------------------------------------------------------------
+// void MIRListBoxArray::ConstructL()
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void MIRListBoxArray::ConstructL()
+    {
+	IRLOG_DEBUG( "MIRListBoxArray::ConstructL - Entering" );
+	iFlag = EFalse;
+	IRLOG_DEBUG( "MIRListBoxArray::ConstructL - Exiting" );
+   	}
+// -----------------------------------------------------------------------------
+// MIRListBoxArray::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+MIRListBoxArray* MIRListBoxArray::NewL()
+    {
+ 	IRLOG_DEBUG( "MIRListBoxArray::NewL" );
+    MIRListBoxArray* self = MIRListBoxArray::NewLC();
+    CleanupStack::Pop( self );
+    IRLOG_DEBUG( "MIRListBoxArray::NewL - Exiting" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// MIRListBoxArray* MIRListBoxArray::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+MIRListBoxArray* MIRListBoxArray::NewLC()
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::NewLC - Entering" );
+    MIRListBoxArray* self = new( ELeave ) MIRListBoxArray;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    IRLOG_DEBUG( "MIRListBoxArray::NewL - Exiting." );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// MIRListBoxArray::MIRListBoxArray()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+/*MIRListBoxArray::~MIRListBoxArray()
+	{
+	}
+*/
+// ---------------------------------------------------------------------------
+// MIRListBoxArray::MIRListBoxArray()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+MIRListBoxArray::MIRListBoxArray()
+	{
+	}
+    
+// ----------------------------------------------------------
+// TInt  MIRListBoxArray::MdcaCount() 
+// returns the number of items the list box has. 
+// ----------------------------------------------------------	
+ TInt MIRListBoxArray::MdcaCount() const
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::MdcaCount - Entering." );
+	TInt count = iListArray->Count() ;
+    IRLOG_DEBUG( "MIRListBoxArray::MdcaCount - Exiting." );
+	return count;
+    }  
+// ----------------------------------------------------------
+// TPtrC MIRListBoxArray::MdcaPoint(TInt aIndex) const
+// Returns the text of the specified item. 
+// ----------------------------------------------------------	
+TPtrC MIRListBoxArray::MdcaPoint(TInt aIndex) const 
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::MdcaPoint - Entering." );
+    IRLOG_DEBUG( "MIRListBoxArray::MdcaPoint - Exiting." );
+	return iListArray->MdcaPoint (aIndex);
+    }
+ // ----------------------------------------------------------
+// void MIRListBoxArray::SetListArray() 
+// sets the Listarray 
+// ----------------------------------------------------------	
+void MIRListBoxArray::SetListArray(CDesCArray* aListArray)
+	{
+    IRLOG_DEBUG( "MIRListBoxArray::SetListArray - Entering." );
+    iListArray = aListArray;
+    IRLOG_DEBUG( "MIRListBoxArray::SetListArray - Exiting." );
+	}
+
+// ----------------------------------------------------------
+// void MIRListBoxArray::SetItemAtZero() 
+// sets the item at the zeroth index. 
+// ----------------------------------------------------------	
+void MIRListBoxArray::SetItemAtZero(TBool aAdFlag,HBufC& aString,TBool aMainView)
+	{
+    IRLOG_DEBUG( "MIRListBoxArray::SetItemAtZero - Entering." );
+	iLastPlayedString = &aString;
+	iLastPlayed = aAdFlag;
+	if(iLastPlayed && !aMainView)
+	TRAP_IGNORE(iListArray->InsertL(0,*iLastPlayedString));
+    IRLOG_DEBUG( "MIRListBoxArray::SetItemAtZero - Exiting." );
+	}
+// ----------------------------------------------------------
+// TInt MIRListBoxArray::SetFlag() 
+// Returns the flag when the count in the filtered model is incremented. 
+// ----------------------------------------------------------	
+void MIRListBoxArray::SetFlag(TBool aFlag)  
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::SetFlag - Entering." );
+	iFlag = aFlag;
+    IRLOG_DEBUG( "MIRListBoxArray::SetFlag - Exiting." );
+    }
+  
+// ----------------------------------------------------------
+// void MIRListBoxArray::SetIndexFlag() 
+// Returns the index flag. 
+// ----------------------------------------------------------	
+void MIRListBoxArray::SetIndexFlag(TBool aFlag)  
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::SetFlag - Entering." );
+	iIndexFlag = aFlag;
+    IRLOG_DEBUG( "MIRListBoxArray::SetFlag - Exiting." );
+    }
+
+// ----------------------------------------------------------
+// TBool MIRListBoxArray::GetIndexFlag() 
+// Returns the index flag 
+// ----------------------------------------------------------	
+TBool MIRListBoxArray::GetIndexFlag()  
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::SetFlag - Entering." );
+    IRLOG_DEBUG( "MIRListBoxArray::SetFlag - Exiting." );
+	return iIndexFlag ;
+    }
+
+ /*// ----------------------------------------------------------
+// void MIRListBoxArray::SetListArray() 
+// sets the item at the zeroth index. 
+// ----------------------------------------------------------	
+MDesCArray* MIRListBoxArray::GetListArray()
+	{
+    IRLOG_DEBUG( "MIRListBoxArray::GetListArray - Entering." );
+    IRLOG_DEBUG( "MIRListBoxArray::GetListArray - Exiting." );
+    return iListArray;
+	}
+// ----------------------------------------------------------
+// TInt MIRListBoxArray::GetActualCount() 
+// Returns the text of the specified item. 
+// ----------------------------------------------------------	
+TInt MIRListBoxArray::GetActualCount()  
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::GetActualCount - Entering." );
+    IRLOG_DEBUG( "MIRListBoxArray::GetActualCount - Exiting." );
+ 	return iListArray->Count();
+   }
+// ----------------------------------------------------------
+// TInt MIRListBoxArray::GetActualCount() 
+// Returns the text of the specified item. 
+// ----------------------------------------------------------	
+void MIRListBoxArray::SetActualCount(TInt aCount)  
+    {
+    IRLOG_DEBUG( "MIRListBoxArray::SetActualCount - Entering." );
+	iCount = aCount;
+    IRLOG_DEBUG( "MIRListBoxArray::SetActualCount - Exiting." );
+    }*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/xmlparserinc/irparserobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef MIRPARSEROBSERVER
+#define MIRPARSEROBSERVER
+
+#include <e32def.h>
+
+class MIRParserObserver
+	{
+public:
+    /**
+    * Function : ParseError
+    * Called on Parser Error
+    */
+    virtual void ParseError( TInt aErrorCode ) = 0;
+    
+    /**
+    * Function : ParsedStructureL
+    * called for parsed result
+    */    
+    virtual void ParsedStructureL(TInt aChoice) = 0;
+   };
+
+#endif //MIRPARSEROBSERVER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/xmlparserinc/irxmlcontenthandler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,280 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRXMLCONTENTHANDLER_H
+#define IRXMLCONTENTHANDLER_H
+
+#include <contenthandler.h>
+
+class CIRAdvertisement;
+class CIRBrowseCatagoryItems;
+class CIRBrowseChannelItems;
+class CIRCacheMgmt;
+class CIRHttpResponseData;
+class CIRIsdsPreset;
+class CIROTAUpdate;
+class MIRCacheObserver;
+class MIRParserObserver;
+
+namespace Xml
+    {
+    class CParser;
+    }
+
+//constant declaration   
+_LIT8(KFile,"text/xml");    
+const TInt KSessionLogResponse = 5;
+
+using namespace Xml;
+
+/**
+* Parse data from xml file
+*
+* @code 
+*
+* classA* ParserObserver;//class classA : public MIRParserObserver
+* classB* CacheObserver;//class classB : public MIRCacheObserver
+* CIRHttpResponseData* ResponseHeader;
+* CIRHttpResponseData* parser = CIRXMLContentHandler::NewL (*ParserObserver,*CacheObserver); 
+* parser->ParseXmlL(FilePath,CachePath,ResponseHeader);
+*
+* @endcode
+*
+*/
+
+class CIRXMLContentHandler : public CBase,
+                        public MContentHandler
+    {
+ public:             
+    /**
+    * Gets the Filepath of the XML file
+    * @param aFilePath Contains the filepath of the file
+    * @return ErrorCode if the file cannot be opened
+    */
+	IMPORT_C void ParseXmlL(const TDesC& aFilePath, const TDesC& aCachePath,
+					   const CIRHttpResponseData& aResponseHeaders);
+
+    /**
+    * Default Constructor
+    * @param aObserver Contains the reference to the MClass Observer
+    */    
+    IMPORT_C static CIRXMLContentHandler* NewL 
+    (MIRParserObserver &aObserver, MIRCacheObserver &aCacheObserver);       
+    /**
+    * Destructing the object
+    */  
+    ~CIRXMLContentHandler();
+    /**
+    * This method is a callback to indicate the start of the document
+    * @param aDocParam Specifies the various parameters of the document
+    * @param aErrorCode KErrNone if successfull. 
+    * @return None
+    */         
+    virtual void OnStartDocumentL(const RDocumentParameters &aDocParam,
+    	 TInt aErrorCode);
+    /**
+    * This method is a callback to indicate the end of the document
+    * @param aErrorCode KErrNone if successfull. 
+    * @return None
+    */                  
+    virtual void OnEndDocumentL(TInt aErrorCode);
+    /**
+    * This method is a callback to indicate an element has been parsed. 
+    * @param aElement is a handle to the element's details. 
+    * @param aAttributes contains the attributes for the element
+    * @param aErrorCode KErrNone if successfull. 
+    */    
+    virtual void OnStartElementL(const RTagInfo &aElement, 
+    	const RAttributeArray &aAttributes, TInt aErrorCode);
+    /**
+    * This method is a callback to indicate the end of the element has been reached. 
+    * @param aElement is a handle to the element's details. 
+    * @param aErrorCode KErrNone if successfull. 
+    */   
+    virtual void OnEndElementL(const RTagInfo &aElement, TInt aErrorCode);
+    /**
+    * This method is a callback that sends the content of the element.The data may be sent in chunks
+    * @param aBytes is the raw content data for the element. 
+    * @param aErrorCode KErrNone if successfull. 
+    */  
+    virtual void OnContentL(const TDesC8 &aBytes, TInt aErrorCode);
+    /**
+    * This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping.
+    * @param aPrefix is the Namespace prefix being declared 
+    * @param aUri is the Namespace URI the prefix is mapped to
+    * @param aErrorCode KErrNone if successfull. 
+    */  
+    virtual void OnStartPrefixMappingL(const RString &aPrefix, 
+    	const RString &aUri, TInt aErrorCode);
+    /**
+    * This method is a notification of the end of the scope of a prefix-URI mapping
+    * @param aPrefix is the Namespace prefix that was mapped. 
+    * @param aErrorCode KErrNone if successfull. 
+    */  
+    virtual void OnEndPrefixMappingL(const RString &aPrefix, TInt aErrorCode);
+    /**
+    * This method is a notification of ignorable whitespace in element content. 
+    * @param aBytes are the ignored bytes from the document being parsed.. 
+    * @param aErrorCode KErrNone if successfull. 
+    */  
+    virtual void OnIgnorableWhiteSpaceL(const TDesC8 &aBytes, TInt aErrorCode);
+    /**
+    * This method is a notification of a skipped entity
+    * @param aName is the name of the skipped entity. 
+    * @param aErrorCode KErrNone if successfull. 
+    */ 
+    virtual void OnSkippedEntityL(const RString &aName, TInt aErrorCode);
+    /**
+    * This method is a receive notification of a processing instruction.
+    * @param aTarget is the processing instruction target. 
+    * @param aData is the processing instruction data. If empty none was supplied.. 
+    * @param aErrorCode KErrNone if successfull. 
+    */ 
+    virtual void OnProcessingInstructionL(const TDesC8 &aTarget, 
+    	const TDesC8 &aData, TInt aErrorCode);
+    /**
+    * This method indicates an error has occurred.
+    * @param aErrorCode contains the errorcode. 
+    */ 
+    virtual void OnError(TInt aErrorCode);
+    /**
+    * This method obtains the interface matching the specified uid. 
+    * @param aUid the uid identifying the required interface 
+    * @return 0 if no interface matching the uid is found. Otherwise, the this pointer cast to that interface
+    */ 
+    virtual TAny *GetExtendedInterface(const TInt32 aUid); 
+    /**
+    * This method maps the errorcode
+    * @param aError conatins the errorcode
+    * @return the type of the error
+    */ 
+    TInt ParseError(TInt aError);
+    /**
+    * This method stringpool handle
+    * @param aError conatins the errorcode
+    * @return the type of the error
+    */ 
+    RStringPool& StringPool ();
+    
+    void ResetValues();
+
+protected:
+    
+    /**
+    * Default Constructor
+    * @param aObserver Contains the reference to the MClass Observer
+    */  
+    CIRXMLContentHandler(MIRParserObserver &aObserver,MIRCacheObserver &aCacheObserver);
+
+    /**
+    * Two-Phase Constructor
+    */
+    void ConstructL();
+    
+   private :
+    
+    // Buffer for the URL
+    HBufC* iBufGetOperation;
+    
+    // Buffer for Size
+    HBufC* iSize;  
+  
+    // Count of the bitrates
+    TBool iIRID;
+
+    TInt iBitrateCounter;   
+    
+    // Indicating for Channels/Preset
+    TInt iFlag;
+    
+    // Indicating for Channels
+    TInt iChannelFlag;
+    
+    // Bool Value to indicate the class
+    TBool iPresets;
+    TBool iCategories;
+    TBool iCat;
+    TBool iChannels;
+    TBool iChan;
+    TBool iAdvertisement;
+    TBool iOTAUpdate;
+	TBool iTimeStamp; //checks the header has a time stamp
+    TInt  iEOD;
+    // Pointer to the PresetData
+    CIRIsdsPreset *iPreset;
+    
+    // Pointer to the CategoryData
+    CIRBrowseCatagoryItems *iCategory;
+    
+    // Pointer to the ChannelData
+    CIRBrowseChannelItems *iChannel;
+    
+    // Pointer to the Advertisement
+    
+    CIRAdvertisement *iAdv;
+    
+    //! An Handle to Stringpool
+      
+    RStringPool    iStringPool;
+    
+    //! Reference to the CallBack Class
+    
+    MIRParserObserver& iParseObserver;
+    
+    CParser* iParser;
+
+    //Caching 
+    CIRCacheMgmt *iCache;
+    
+    MIRCacheObserver &iCacheObserver;
+    
+    TBuf<256> iFileToCache;
+
+// For Advertisement
+    TBool iAdvts;
+    TBool iAdvertisementTagFlag;
+    HBufC*   iUrlContentForAds;  //to store the content of the tag
+
+
+
+public:
+
+    // Count of the bitrates
+    
+    TBuf<30>      iRID;
+
+    // Array of Pointers to PresetClass
+    
+    CArrayPtrFlat<CIRIsdsPreset>* iPtrPreset;
+    
+    // Array of Pointers to CategoryClass
+    
+    CArrayPtrFlat<CIRBrowseCatagoryItems>* iPtrCategory;
+    
+    // Array of Pointers to BrowseCategoryClass
+    
+    CArrayPtrFlat<CIRBrowseChannelItems>* iPtrChannel;
+    // Pointer to the OTAUpdate
+    
+    CIROTAUpdate *iOTA;
+    
+    
+      
+};
+
+#endif //IRXMLCONTENTHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/xmlparserinc/irxmlelements.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#ifndef IRXMLELEMENTS_H
+#define IRXMLELEMENTS_H
+
+#include <e32cmn.h>
+#include <stringtablesupport.h>
+
+//Literals to instantiate the class
+ _STLIT8(KGetOp,"getOperation");
+ _LIT8(KCatGenre,"genres");
+ _STLIT8(KCatLang,"languages");
+ _STLIT8(KCatCountry,"countries");
+ _STLIT8(KChannels,"channels");
+ _STLIT8(KPresets,"presets");
+ _STLIT8(KIRID,"irid");
+ _STLIT8(KTimeStamp,"timestamp"); 
+ _STLIT8(KIRVersion,"iRAPPVersion"); 
+ _STLIT8(KAdv,"advertisement");
+ _STLIT8(KPreset,"preset");
+ _STLIT8(KServers,"servers"); 
+ _STLIT8(KGenre,"genre");
+ _STLIT8(KLanguage,"language");
+ _STLIT8(KCountry,"country");
+ _STLIT8(KChannel,"channel");
+ _STLIT8(KAd,"ad");
+ _STLIT8(KAdvertisements,"advertisements");
+ _STLIT8(KBanner,"banner");
+ _STLIT8(KClickthroughUrl,"clickthrough-url");
+
+
+//! Enum for the attributes
+enum TIRXMLElement
+    {
+     EGetOperation,
+     
+    // List of Genres/Language/Contry
+    EName,
+    EID,
+    ESize,
+    
+    //! Channels 
+    EShortDesC,
+    EBitrateValue,
+    
+    // Preset
+    ESdsID,
+    ELangCode,
+    ELang,
+    ECountryCode,
+    ECountry,
+    ELastUpdated,
+    EDesc,
+    EImgURL,
+    EAdvImgURL,
+    EAdvInUse,
+    EGenreID,
+    EURL,
+    EMusicStoreEnabled,
+    EBitrate,
+    
+    // Log Usage
+    EIRID,
+    
+    // OTA Update
+    EVersion,
+    EUpdateInterval,
+    EUpdateMethod,
+    
+    //Advertisement
+    EInUse,
+    EUsageVisibleTimes,
+    EVisibleTime,
+    /**
+    Unknown Element
+    */    
+    EElementIDUnknown,
+     }; 
+ 
+class RStringPool;
+
+/**
+* This class handles the XML string pool
+* not accessible outside the dll
+*/
+class TIRXMLElementFormat
+    {
+ public : 
+    /**
+    * Creates an initialised string pool with no pre-loaded string tables.
+    * @param aStringPool Stringpool
+    */
+    static void OpenStringPoolL(RStringPool& aStringPool);
+    /**
+    * The ElementId of the element from the StringPool
+    * @param aElement the element name to be searched in the pool
+    * @param aStringPool stringpool reference
+    * @return the enum for the element
+    */
+    static TIRXMLElement GetElementIdL(const TDesC8& aElement, 
+                                const RStringPool& aStringPool);
+    /**
+    * Closes the StringPool
+    * @param aStringPool Stringpool
+    */                                     
+    static void CloseStringPoolL(RStringPool& aStringPool);                                    
+    }; 
+ 
+ 
+#endif //IRXMLELEMENTS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/xmlparsersrc/irxmlcontenthandler.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,1025 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <f32file.h>
+#include <parser.h>
+#include <utf.h>
+
+#include "iradvertisement.h"
+#include "irbrowsecatagoryitems.h"
+#include "irbrowsechannelitems.h"
+#include "ircachemgmt.h"
+#include "irdebug.h"
+#include "irisdspreset.h"
+#include "irparserobserver.h"
+#include "irotaupdate.h"
+#include "irxmlcontenthandler.h"
+#include "irxmlelements.h"
+
+const TInt KLargeArraySize = 256;
+const TUint8 KAttributeBufferSize = 100;
+const TUint8 KBitRateCounterValue0 = 0;
+const TUint8 KBitRateCounterValue1 = 1;
+const TUint8 KBitRateCounterValue2 = 2;
+const TUint8 KCategoriesItemSelect = 0;
+const TUint8 KChannelItemSelect = 1;
+const TUint8 KPresetItemSelect = 2;
+const TUint8 KOTAUpdateItemSelect = 3;
+const TUint8 KIRIDSelect = 4;
+const TUint8 KTen = 10; 
+
+// ---------------------------------------------------------------------------
+// Gets the Filepath of the XML file
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRXMLContentHandler::ParseXmlL(const TDesC& aFilePath,
+  											   const TDesC& aCachePath,
+											   const CIRHttpResponseData& aResponseHeaders)
+    { 
+    IRLOG_DEBUG( "CIRXMLContentHandler::ParseXmlL" );
+    iFileToCache.Zero();
+    iFileToCache.Copy(aCachePath);     
+     
+    RFs fs;
+    CleanupClosePushL(fs);
+    User::LeaveIfError(fs.Connect());           
+    Xml::ParseL(*iParser,fs,aFilePath);
+    CleanupStack::PopAndDestroy(&fs);
+
+   
+    //! Error in the Document
+    if(iEOD != KErrNone )
+		{
+        ResetValues();
+        iParseObserver.ParseError( iEOD ); 
+		}
+    else
+		{    
+		if(iCategories)
+			{
+			TRAP_IGNORE(iCache->CacheCategoryItemsL(*iPtrCategory, 
+				iFileToCache ,aResponseHeaders))
+            ResetValues();    
+            iParseObserver.ParsedStructureL(KCategoriesItemSelect);
+			}
+    
+		if(iChan)            
+			{        
+            if(iFileToCache.Length()!=0)
+				{
+				TRAP_IGNORE(iCache->CacheChannelItemsL(*iPtrChannel, 
+					iFileToCache ,aResponseHeaders))
+				}
+            ResetValues();
+            iParseObserver.ParsedStructureL(KChannelItemSelect);
+			}
+    
+		if(iPresets)
+			{
+			if( 0 < iPtrPreset->Count() )
+				{
+				TRAP_IGNORE(iCache->CachePresetItemL(*iPtrPreset,
+					iFileToCache,aResponseHeaders))
+	            ResetValues();
+	            iParseObserver.ParsedStructureL(KPresetItemSelect);     
+				}			   
+			}  
+		if(iOTAUpdate)
+			{
+			TRAP_IGNORE(iCache->CacheOtaInfoL(*iOTA,
+					iFileToCache,aResponseHeaders))
+            ResetValues();
+            iParseObserver.ParsedStructureL(KOTAUpdateItemSelect);
+			} 
+		if(iIRID)
+			{
+            ResetValues();
+            iParseObserver.ParsedStructureL(KIRIDSelect);
+			}      
+		if( iTimeStamp )
+			{
+			//session log response is obtained
+			ResetValues();
+			iParseObserver.ParsedStructureL(KSessionLogResponse);		
+			}
+		}
+    IRLOG_DEBUG( "CIRXMLContentHandler::ParseXmlL - Exiting." );		
+	}  
+
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler ::NewL
+// Constructor
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C CIRXMLContentHandler* CIRXMLContentHandler ::NewL(MIRParserObserver 
+	&aObserver,MIRCacheObserver &aCacheObserver)
+    {    
+    IRLOG_DEBUG( "CIRXMLContentHandler::NewL" );
+    CIRXMLContentHandler* self = new (ELeave) CIRXMLContentHandler(aObserver,
+    	aCacheObserver);    
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    IRLOG_DEBUG( "CIRXMLContentHandler::NewL - Exiting." );
+    return(self); 
+    }
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler ::CIRXMLContentHandler
+// Default Constructor
+// ---------------------------------------------------------------------------
+//
+CIRXMLContentHandler ::CIRXMLContentHandler(MIRParserObserver &aObserver,
+	MIRCacheObserver &aCacheObserver):iParseObserver(aObserver),
+	iCacheObserver(aCacheObserver)
+    {
+    IRLOG_DEBUG( "CIRXMLContentHandler::CIRXMLContentHandler" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler ::ConstructL
+// Two-Phase Constructor
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler ::ConstructL()
+    {
+    IRLOG_DEBUG( "CIRXMLContentHandler::ConstructL" );
+    ResetValues();    
+    TIRXMLElementFormat::OpenStringPoolL(iStringPool);
+    
+    iPtrCategory = new (ELeave) CArrayPtrFlat<CIRBrowseCatagoryItems>(
+    	KLargeArraySize);
+    iPtrChannel = new (ELeave) CArrayPtrFlat<CIRBrowseChannelItems>(
+    	KLargeArraySize);
+    iPtrPreset = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(KLargeArraySize);
+    
+    iParser = CParser::NewL(KFile,*this);
+    iCache = CIRCacheMgmt::OpenL(iCacheObserver);
+
+    iBufGetOperation = HBufC::NewL(0);
+    iSize = HBufC::NewL(0);
+    IRLOG_DEBUG( "CIRXMLContentHandler::ConstructL - Exiting." );
+    }
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler::~CIRXMLContentHandler()
+// Destructing the object
+// ---------------------------------------------------------------------------
+//
+CIRXMLContentHandler::~CIRXMLContentHandler()
+    {    
+	IRLOG_DEBUG( "CIRXMLContentHandler::~CIRXMLContentHandler." );           
+	TRAP_IGNORE(TIRXMLElementFormat::CloseStringPoolL(iStringPool))
+	delete iParser;
+	if(iUrlContentForAds)
+		{
+		delete iUrlContentForAds;
+    	iUrlContentForAds = NULL;
+		}
+	if(iPtrPreset)
+		{
+	    iPtrPreset->ResetAndDestroy();    
+		}
+    delete iPtrPreset;
+	if(iPtrCategory)
+	    {
+	    iPtrCategory->ResetAndDestroy();
+		}       
+    delete iPtrCategory;
+	if(iPtrChannel)
+	    {
+	    iPtrChannel->ResetAndDestroy();
+	    }
+    delete iPtrChannel;
+
+    delete iOTA;
+    delete iAdv;
+
+    if (iCache)
+        {
+        iCache->Close();
+        }
+
+    delete iPreset;
+    delete iCategory;
+    delete iChannel;
+    delete iBufGetOperation;
+    delete iSize;
+    
+	IRLOG_DEBUG( "CIRXMLContentHandler::~CIRXMLContentHandler - Exiting." );       
+	}
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler::ResetValues
+// Reseting the Values
+// ---------------------------------------------------------------------------
+//
+
+void CIRXMLContentHandler::ResetValues()
+	{
+    IRLOG_DEBUG( "CIRXMLContentHandler::ResetValues" );
+    iFlag = 1;
+    iPresets = EFalse;
+    iCategories=EFalse;
+    iCat=EFalse;
+    iChannels=EFalse;
+    iChan=EFalse;
+    iAdvertisement=EFalse;
+    iOTAUpdate=EFalse;
+    iIRID = EFalse;
+    iTimeStamp = EFalse;
+    iChannel = NULL;
+    iCategory = NULL;
+    iAdvts = EFalse;
+	iAdvertisementTagFlag = EFalse;   
+    IRLOG_DEBUG( "CIRXMLContentHandler::ResetValues - Exiting." );
+	}    
+ 
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler:: OnStartDocumentL
+// This method is a callback to indicate the start of the document
+// ---------------------------------------------------------------------------
+//   
+void CIRXMLContentHandler:: OnStartDocumentL(const Xml::RDocumentParameters& 
+	/*aDocParam*/ , TInt /*aErrorCode*/ )
+    {                
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnStartDocumentL" );
+    iEOD = KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler::OnEndDocumentL
+// This method is a callback to indicate the end of the document
+// ---------------------------------------------------------------------------
+// 
+void CIRXMLContentHandler::OnEndDocumentL(TInt /*aErrorCode*/)
+    {
+    //No Implementation
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnEndDocumentL" );
+	return;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler::OnStartElementL
+// This method is a callback to indicate an element has been parsed. 
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler::OnStartElementL(const Xml::RTagInfo &aElement, 
+			const Xml::RAttributeArray &aAttributes, TInt /*aErrorCode*/)
+    {     
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnStartElementL" );     
+    //Compare the element name to identify the type - //TO DO String Pool        
+    TInt genre = (aElement.LocalName().DesC()).Compare(KGenre);
+    TInt lang = (aElement.LocalName().DesC()).Compare(KLanguage);
+    TInt country = (aElement.LocalName().DesC()).Compare(KCountry);
+    TInt channel = (aElement.LocalName().DesC()).Compare(KChannel);
+    TInt preset = (aElement.LocalName().DesC()).Compare(KPreset);
+    TInt advertisements = (aElement.LocalName().DesC()).Compare(KAdvertisements);
+    TInt ad = (aElement.LocalName().DesC()).Compare(KAd);
+
+    TInt genres = (aElement.LocalName().DesC()).Compare(KCatGenre);
+    TInt countries = (aElement.LocalName().DesC()).Compare(KCatCountry);
+    TInt languages = (aElement.LocalName().DesC()).Compare(KCatLang);
+    TInt channels = (aElement.LocalName().DesC()).Compare(KChannels);
+    TInt presets = (aElement.LocalName().DesC()).Compare(KPresets);
+
+    TInt IRID = (aElement.LocalName().DesC()).Compare(KIRID);
+    TInt timestamp = (aElement.LocalName().DesC()).Compare(KTimeStamp);
+    TInt irappversion = (aElement.LocalName().DesC()).Compare(KIRVersion);
+    TInt adv = (aElement.LocalName().DesC()).Compare(KAdv);
+    TInt banner = (aElement.LocalName().DesC()).Compare(KBanner);
+
+   
+    if(iUrlContentForAds)
+		{
+		delete(iUrlContentForAds);
+		iUrlContentForAds = NULL;
+		}
+
+    TInt bufSize(KTen);
+    iUrlContentForAds = HBufC::NewL( bufSize );//this is because, the OnContentL method gives chunck by chunck
+
+	if(ad == 0)
+        {   
+    	//We want to take the first Ad only so if an Ad has already been created
+    	//iChannel and iCategory will not be NULL hence the new Ad should not be added
+    	if( !iChannel && !iCategory )
+    	{
+   			iChannel = CIRBrowseChannelItems::NewL();  
+			iCategory = CIRBrowseCatagoryItems::NewL();  
+			
+    	}
+		}
+    if(advertisements == 0 )
+        { 
+        iAdvertisementTagFlag = ETrue;   
+        }
+     if(iAdvertisementTagFlag && banner == 0)
+		{
+		iAdvts = ETrue;
+		}
+    // Creates the instance of the class Browse by Genre/Language/Country
+    if(iFlag)
+        {
+        if(genre == 0 || lang == 0 || country == 0)
+			{
+			//If there are ads then destroy the list and put the ads
+			//as ads will the first in the xml
+			if((iAdvts)  && (iCategory))
+				{	
+				iPtrCategory->ResetAndDestroy();
+				iPtrCategory->AppendL(iCategory);
+				iCategory = NULL;
+				delete iChannel; 
+				iChannel = NULL;
+				iAdvts = EFalse;
+				}
+            iCategory = CIRBrowseCatagoryItems::NewL();
+            iCat = ETrue;                
+            }
+        }
+    if(iFlag)
+        {
+		// In case of browse by genres, country and lanaguages
+         if(genres == 0 || countries == 0 || languages == 0)
+            { 
+            if(iAdvts == EFalse)
+            	{
+            	iPtrCategory->ResetAndDestroy();
+            	}
+            if(genres == 0)
+				{
+				iFileToCache.Zero();
+				iFileToCache.Copy(KCatGenre);
+                }
+			if(countries == 0)                        
+				{
+				iFileToCache.Zero();
+				iFileToCache.Copy(KCatCountry);
+				}
+			if(languages == 0)                        
+				{      
+				iFileToCache.Zero();
+				iFileToCache.Copy(KCatLang);
+				}
+
+	        iCategories = ETrue;                           
+            }
+        }
+    // Creates the instance of the class Channel
+    if(channel == 0)
+        {
+        	//If there are ads then destroy the list and put the ads
+			//as ads will the first in the xml
+			if((iAdvts)   && (iChannel)) 
+			{	iPtrChannel->AppendL(iChannel);
+				iChannel = NULL;
+				delete iCategory; 
+				iCategory = NULL;
+				iAdvts = EFalse;
+			}
+		iChannel = CIRBrowseChannelItems::NewL();    
+		iChannels = ETrue;
+		iBitrateCounter = 0;
+        }
+    if(channels == 0 )
+        { 
+        iPtrChannel->ResetAndDestroy();   
+        iChan = ETrue;
+		iChannelFlag = 0;    
+        }
+    // Creates the instance of the class for Preset Data
+    if(preset == 0)
+        {    
+         iPreset = CIRIsdsPreset::NewL();    
+         iPresets = ETrue;           
+        }
+    if(presets == 0)
+        {     
+        iPtrPreset->ResetAndDestroy();  
+        iFlag = 0;
+        }
+    if(IRID == 0)
+        {
+        iIRID = ETrue;    
+        }
+    if(timestamp == 0)
+        {
+		//time stamp is obtained when session log is obtained in isds 
+		iTimeStamp = ETrue;
+        }
+    if(irappversion == 0)
+        {
+		iOTA = CIROTAUpdate::NewL();
+		iOTAUpdate = ETrue;
+        }
+    if(adv == 0)
+        {
+		iAdv = CIRAdvertisement::NewL();
+		iAdvertisement = ETrue;
+        }
+    TBuf<KAttributeBufferSize> BufParam1;
+    TBuf<KAttributeBufferSize> BufParam2; 
+    
+    // Parses the attributes and the value of the element
+     TInt nAttributes = aAttributes.Count();
+     for (TInt indexofattribute = 0; indexofattribute < nAttributes; 
+     											++indexofattribute )
+         {
+		const RAttribute& attribute = aAttributes[indexofattribute];
+		const RTagInfo& nameInfo = attribute.Attribute();
+	   
+		//!Gets the elementId from the Pool for the specified attributename
+		TIRXMLElement ATTelementId = TIRXMLElementFormat::GetElementIdL(
+								(nameInfo.LocalName().DesC()),iStringPool); 
+	   
+        HBufC* converted = CnvUtfConverter::ConvertToUnicodeFromUtf8L( attribute.Value().DesC() );
+		CleanupStack::PushL(converted);
+
+        switch(ATTelementId) 
+			{
+            case EGetOperation: 
+				{
+				delete iBufGetOperation;
+				iBufGetOperation = NULL;
+				iBufGetOperation = converted->Des().AllocL();
+                }
+                break;
+                                   
+            case EName:
+				{
+				//if name is parsed
+				if(iCat)
+					{                                                                    
+					//if category
+					iCategory->SetGetOperation(*iBufGetOperation);                                          
+					BufParam1.Copy(*converted);                
+					}
+			   if(iChannels)
+					{
+				   //if channel
+					iChannel->SetGetOperationL(*iBufGetOperation);
+					iChannel->SetSize(*iSize);
+					BufParam1.Copy(*converted);
+					} 
+				if(iPresets)
+					{
+					if((aElement.LocalName().DesC()) == KPreset)
+						{
+						//for preset
+						iPreset->SetName(*converted);
+						}                                
+					BufParam1.Copy(*converted);
+					}                        
+                 }
+                 break;    
+                                     
+            case EID:
+                {
+			    //getting id
+                if(iCat)
+				    {
+				    //for category
+				    iCategory->SetTextL(BufParam1,*converted);    
+				    }
+                   
+                if(iChannels)
+				    {
+				    //for channel
+					BufParam2.Copy(*converted);          
+				    }     
+				if(iPresets)
+					{
+				    //for preset
+					iPreset->SetGenreInfo(*converted,BufParam1);
+					}  
+				if(iIRID)
+					{
+				    //ir id
+					iRID.Copy(*converted);
+					}
+                }
+                break;
+                     
+            case ESize: 
+                {
+                delete iSize;
+			    iSize = NULL;
+			    iSize = converted->Des().AllocL();
+				if(iCat)
+				    {
+					iCategory->SetSize(*iSize);
+					}                       
+                }
+                break;
+                     
+              case EShortDesC:
+                    {
+				    //getting short description
+				    if(iChannels)              
+						{
+						iChannel->SetTextL(BufParam1,BufParam2,*converted);
+						}
+                    if(iPresets)
+                        {
+                        iPreset->SetShortDesc(*converted);
+                        }             
+                    }
+                    break;
+                      
+               case EBitrateValue:
+                    {
+				    //parsing bit rate
+                    if(iChannels)
+                        {
+                        if(iBitrateCounter == KBitRateCounterValue0)
+							{
+							 iChannel->SetBitrate(*converted);
+							 BufParam1.Copy(*converted);
+							}
+                                  
+						if(iBitrateCounter == KBitRateCounterValue1)
+							 {
+							 iChannel->SetBitrate(BufParam1,*converted);     
+							 BufParam2.Copy(*converted);
+							 }
+                                 
+                        if(iBitrateCounter == KBitRateCounterValue2)
+							 {
+							  iChannel->SetBitrate(BufParam1,BufParam2,*converted);
+							 }
+                                 
+                        iBitrateCounter++;
+                        }
+                    }                       
+                    break;
+                     
+               case ESdsID:
+                    {                   
+                    if(iPresets)
+						{
+						iPreset->SetId(*converted);
+                        }                                         
+                    }
+                    break;
+                       
+               case ELangCode:
+                    {
+				    //language code
+                    if(iPresets)
+						{
+                        iPreset->SetLangCode(*converted);
+                        }                
+                    }
+                    break;
+                       
+               case ELang:
+                    {                       
+				    //language
+                    if(iPresets)
+						{
+                        iPreset->SetLang(*converted);    
+                        }
+                    }
+                    break;
+                       
+               case ECountryCode:
+                    {
+				    //country code
+				    if(iPresets)
+					    {
+						iPreset->SetCountryCode(*converted);    
+					    }
+                    }
+                    break;
+                
+               case ECountry:
+                    {
+			        //country
+                    if(iPresets)
+						{
+                        iPreset->SetCountryName(*converted);    
+                        }
+                    }
+                    break;
+                       
+               case ELastUpdated:
+                    {
+				    //last modified time
+                    if(iPresets)
+                        {
+                        iPreset->SetLastModifiedTime(*converted);    
+                        }
+                    }
+                    break;
+                       
+               case EDesc:
+                    {
+				    //description
+                    if(iPresets)
+                        {
+						iPreset->SetDescription(*converted);
+                        }
+                    }
+                    break;
+                       
+               case EImgURL:
+                    {
+				    //image url
+                    if(iChannels)                  
+						{
+                        iChannel->SetImageUrl(*converted);
+                        }
+                    if(iPresets)
+					    {
+						iPreset->SetImgUrl(*converted);    
+					    }
+                    }
+                    break;
+                       
+               case EAdvImgURL:
+                    {
+				    //advertisement url
+					if(iPresets)
+						{
+						iPreset->SetAdvertisementUrl(*converted);    
+						}
+                    }
+                    break;
+                      
+               case EAdvInUse:
+                    {
+				    //advertisement in use
+				    if(iPresets)
+					    {
+					    iPreset->SetAdvertisementInUse(*converted);    
+					    }
+                    }
+                    break;
+                       
+               case EGenreID:
+                    {
+				    //genre id
+                    if(iPresets)
+						{
+                        iPreset->SetGenreInfo(BufParam1,*converted);    
+                        }
+                    }
+                    break;
+                      
+               case EURL:
+                    {
+				    //url
+                    if(iPresets)
+						{
+                        BufParam2.Copy(*converted);    
+                        }
+                    if(iAdvertisement)
+                        {
+                        iAdv->SetURL(*converted);
+                        } 
+                    }
+                    break;
+                    
+                case EMusicStoreEnabled:
+                    {                   
+                    if(iPresets)
+						{
+						iPreset->SetMusicStoreStatus(*converted);
+                        }                                         
+                    }
+                    break;     
+                    
+               case EBitrate:
+                    {
+				    //set url
+					if(iPresets)
+						{
+						iPreset->SetUrlL(BufParam1,BufParam2,*converted);
+						}
+                    }
+                    break;
+                       
+               case EIRID:
+                    {
+                    //irid      
+                    }
+                    break;
+                       
+               case EVersion:
+                    {
+				    //for ota update
+                    if(iOTAUpdate)
+						{
+                        iOTA->SetVersion(*converted);
+                        } 
+                    }
+                    break;
+                       
+               case EUpdateInterval:
+                    {
+				    //update interval
+                    if(iOTAUpdate)
+						{
+                        iOTA->SetUpdateInterval(*converted);    
+                        }
+                    }
+                    break;
+                       
+               case EUpdateMethod:
+                    {
+				    //update method
+                    if(iOTAUpdate)
+						{
+                        iOTA->SetUpdateMethod(*converted);    
+                        }
+                    }
+                    break;
+                       
+               case EInUse:
+                    {
+				    //advertisement in use
+                    if(iAdvertisement)
+                        {
+                        iAdv->SetAdvInUse(*converted);
+                        }
+                    }
+                    break;
+                       
+               case EUsageVisibleTimes:
+                    {
+                    if(iAdvertisement)
+                        {
+                        iAdv->SetUsage(*converted);
+                        }
+                    }
+                    break;
+                       
+               case EVisibleTime:
+                    {
+				    //advertisement visible time
+                    if(iAdvertisement)
+						{
+	                    iAdv->SetVisibleTime(*converted);
+                        }
+                    }
+                    break;
+                       
+               case EElementIDUnknown:
+                    {
+				    //unknown
+                    }
+                    break;
+                      
+               default:
+                    {
+                    break;
+                    } 
+            }//End of Switch
+            CleanupStack::PopAndDestroy(converted);
+         } //End of for                    
+   IRLOG_DEBUG( "CIRXMLContentHandler::OnStartElementL - Exiting." );                         
+  }
+ 
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler::OnEndElementL
+// This method is a callback to indicate the end of the element has been reached. 
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler::OnEndElementL(const RTagInfo &aElement, TInt /*aErrorCode*/)
+    {    
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnEndElementL" );        
+    if((aElement.LocalName().DesC()) == KPreset)
+        {
+        if ( iPreset->GetUrlCount() > 0 )
+            {
+            // The ownership is transferred to the array.
+            iPtrPreset->AppendL(iPreset); 
+            }
+        else
+            {
+            // If there is not a single URL, we don't let it in.
+            iEOD = KErrCorrupt;
+            delete iPreset;
+            }
+        // Ownership transferred. Remove the pointer.
+        iPreset = NULL; 
+        }
+    if((aElement.LocalName().DesC()) == KBanner)
+	    {
+	    //get the content for the tag "banner"
+	    //assign it to "iBanner" of CIRBrowseChannelItems
+	    if(iUrlContentForAds)
+		    {
+				iChannel->SetBannerUrl(*iUrlContentForAds); 	    	
+				iCategory->SetBannerUrl(*iUrlContentForAds);					
+		    }
+	    }
+	if((aElement.LocalName().DesC()) == KClickthroughUrl)
+	    {
+	    //get the content for the tag "clickthrough-url"
+	    //assign it to "iClickThroughUrl" of CIRBrowseChannelItems 
+	    if(iUrlContentForAds)
+		    {
+	    	iChannel->SetClickThroughUrl(*iUrlContentForAds);		    	
+	    	iCategory->SetClickThroughUrl(*iUrlContentForAds);
+		    }
+	    }
+	    
+	if(iUrlContentForAds)
+       {
+       	delete iUrlContentForAds;
+       	iUrlContentForAds = NULL;
+       	
+       }
+    if(iFlag)
+        {
+        if((aElement.LocalName().DesC()) == KGenre ||
+          (aElement.LocalName().DesC()) == KLanguage || 
+          (aElement.LocalName().DesC()) == KCountry)
+            {         
+            iPtrCategory->AppendL(iCategory);
+            iCategory = NULL;
+            iCat = EFalse;
+            }
+        }
+    
+     if((aElement.LocalName().DesC()) == KChannel)
+        {
+        iPtrChannel->AppendL(iChannel);
+        iChannel = NULL;
+        iChannels = EFalse;         
+        } 
+    //appends the created channel(ad) to the array
+    /*
+    if((aElement.LocalName().DesC()) == KAd)
+        {
+		iPtrChannel->AppendL(iChannel);
+        iChannel = NULL;
+
+        } */
+   
+    if((aElement.LocalName().DesC()) == KServers)
+	{
+        if (iPreset)
+        {
+            iPreset->SetUrlCount();
+        }
+    }               
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnEndElementL - Exiting." );                   
+    }
+ 
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler ::OnContentL
+// This method is a callback that sends the content of the element.The data 
+// may be sent in chunks
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler ::OnContentL(const TDesC8 &aBytes, TInt 
+	aErrorCode)
+    { 
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnContentL" );
+    
+    if ( KErrNone == aErrorCode )
+        {
+        
+        
+      	HBufC* buffertmp = HBufC::NewLC( aBytes.Length() + 1 );
+        TPtr buffertmpPtr( buffertmp->Des() );
+        buffertmpPtr.Copy( aBytes );
+		
+
+		TInt tempSize;
+		if(iUrlContentForAds)
+		{
+			tempSize = iUrlContentForAds->Length() + aBytes.Length();
+			iUrlContentForAds = iUrlContentForAds->ReAllocL( tempSize );
+			TPtr bufferPtr( iUrlContentForAds->Des() );
+			bufferPtr.Append(buffertmpPtr);
+		}
+		
+		CleanupStack::PopAndDestroy(buffertmp); // buffertmp
+        } 
+    
+    if ( iOTAUpdate )
+        {
+        HBufC* converted = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aBytes );
+        CleanupStack::PushL( converted );
+        converted->Des().TrimAll();
+        if ( converted->Des().Length() )
+            {                    
+            iOTA->SetOTAUrl( *converted );
+            }
+        CleanupStack::PopAndDestroy( converted );
+        }
+    
+    IRLOG_DEBUG( "CIRXMLContentHandler::OnContentL - Exiting." );        
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler::OnStartPrefixMappingL
+// This method is a notification of the beginning of the scope of a 
+// prefix-URI Namespace mapping.
+// ---------------------------------------------------------------------------
+// 
+void CIRXMLContentHandler::OnStartPrefixMappingL(const RString& /*aPrefix*/, 
+	const RString& /*aUri*/, TInt /*aErrorCode*/)
+	{
+	//No Implementaion    
+	IRLOG_DEBUG( "CIRXMLContentHandler::OnStartPrefixMappingL" );      
+	}  
+      
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler :: OnEndPrefixMappingL
+// This method is a notification of the end of the scope of a prefix-URI mapping
+// ---------------------------------------------------------------------------
+//  
+void CIRXMLContentHandler :: OnEndPrefixMappingL(const RString& /*aPrefix*/, 
+	TInt /*aErrorCode*/)
+     {
+     //No Implementaion    
+     IRLOG_DEBUG( "CIRXMLContentHandler::OnEndPrefixMappingL" );    
+     }
+     
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler :: OnIgnorableWhiteSpaceL
+// This method is a notification of ignorable whitespace in element content. 
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler :: OnIgnorableWhiteSpaceL(const TDesC8&  /*aBytes*/, 
+	TInt /*aErrorCode*/)
+     {
+     //No Implementaion        
+     IRLOG_DEBUG( "CIRXMLContentHandler::OnIgnorableWhiteSpaceL" );        
+     }
+     
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler :: OnSkippedEntityL
+// This method is a notification of a skipped entity
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler :: OnSkippedEntityL(const RString& /*aName*/, 
+	TInt /*aErrorCode*/)
+     {
+     //No Implementaion    
+     IRLOG_DEBUG( "CIRXMLContentHandler::OnSkippedEntityL" );
+     }
+
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler :: OnProcessingInstructionL
+// This method is a receive notification of a processing instruction.
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler :: OnProcessingInstructionL(const TDesC8& 
+	/*aTarget*/, const TDesC8& /*aData*/, TInt /*aErrorCode*/)
+     {
+      //No Implementaion    
+     IRLOG_DEBUG( "CIRXMLContentHandler::OnProcessingInstructionL" );
+     }
+ 
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler :: OnError
+// This method indicates an error has occurred.
+// ---------------------------------------------------------------------------
+//
+void CIRXMLContentHandler :: OnError(TInt aErrorCode )
+     {
+     iEOD = aErrorCode;         
+     IRLOG_ERROR2( "CIRXMLContentHandler::OnError (%d)", aErrorCode );
+     }
+  
+  
+// ---------------------------------------------------------------------------
+// CIRXMLContentHandler :: GetExtendedInterface
+// This method obtains the interface matching the specified uid. 
+// ---------------------------------------------------------------------------
+//
+TAny* CIRXMLContentHandler :: GetExtendedInterface(const TInt32 /*aUid*/)
+     {
+      //No Implementation
+      IRLOG_DEBUG( "CIRXMLContentHandler::GetExtendedInterface" );
+      return NULL;
+     }
+ 
+
+
+GLDEF_C TInt E32Dll() 
+// DLL entry point
+    {
+    return(KErrNone);
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/xmlparsersrc/irxmlelements.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+
+#include <stringpool.h>
+
+#include "irdebug.h"
+#include "irxmlelements.h"
+
+//Ignores PC Lint Warning 618.
+
+//! Literals for the StringPool
+
+//! Literals for List of genres,languages,countries
+ _STLIT8(KName,"name");
+ _STLIT8(KID,"id");
+ _STLIT8(KSize,"size");
+ 
+//!Literals for the List of Channels
+ _STLIT8(KShortDesC,"shortDesc");
+
+ _STLIT8(KBitrate,"bitrate");
+ _STLIT8(KValue,"value");
+//! Literals for the channel 
+
+_STLIT8(KSdsid,"sdsid");
+_STLIT8(KLangCode,"langCode");
+_STLIT8(KLang,"lang");
+_STLIT8(KCountryCode,"countryCode");
+_STLIT8(KLastUpdated,"lastUpdated");
+_STLIT8(KDescription,"description");
+_STLIT8(KImgURL,"imgUrl");
+_STLIT8(KAdvUrl,"advertiseImgUrl");
+_STLIT8(KAdvUse,"advertiseInUse");
+_STLIT8(KGenreId,"genreid");
+_STLIT8(KURL,"url");
+_STLIT8(KMusicStoreEnabled,"musicStoreEnabled");
+//!Literals for the log Usage
+
+_STLIT8(KIRId,"irid"); 
+//! Literals for the OTA Update
+
+_STLIT8(KVersion,"version");
+_STLIT8(KUpdateInterval,"updateInterval");
+_STLIT8(KUpdateMethod,"updateMethod");
+
+ //! Literals for Advertisement
+_STLIT8(KInUse,"inUse");
+_STLIT8(KUsageVisibleTimes,"usageVisibleTimes");
+_STLIT8(KVisibleTime,"visibleTime");
+ 
+const TInt KNoOfElementInTable = 27;
+ 
+ //! PoolTable
+ const TAny* const IRXMLPoolContent[] =
+    { 
+	(const TAny*)         &KGetOp,    
+	(const TAny*)         &KName,       
+	(const TAny*)         &KID,    
+	(const TAny*)         &KSize,
+	(const TAny*)         &KShortDesC,
+	(const TAny*)         &KValue,        
+	(const TAny*)         &KSdsid,
+	(const TAny*)         &KLangCode,
+	(const TAny*)         &KLang,
+	(const TAny*)         &KCountryCode,
+	(const TAny*)         &KCountry,
+	(const TAny*)         &KLastUpdated,
+	(const TAny*)         &KDescription,
+	(const TAny*)         &KImgURL,
+	(const TAny*)         &KAdvUrl,    
+	(const TAny*)         &KAdvUse,
+	(const TAny*)         &KGenreId,
+	(const TAny*)         &KURL,    
+	(const TAny*)         &KMusicStoreEnabled,    
+	(const TAny*)         &KBitrate,
+	(const TAny*)         &KIRId,
+	(const TAny*)         &KVersion,
+	(const TAny*)         &KUpdateInterval,
+	(const TAny*)         &KUpdateMethod,
+	(const TAny*)          &KInUse,
+	(const TAny*)         &KUsageVisibleTimes,
+	(const TAny*)          &KVisibleTime
+    };
+    
+//! Pointer to a StringTable
+const static TStringTable IRPoolTable = 
+    {
+	KNoOfElementInTable,      
+	&IRXMLPoolContent[0],
+	EFalse
+    };     
+
+
+// ---------------------------------------------------------------------------
+// Creates an initialised string pool with no pre-loaded string tables.
+// ---------------------------------------------------------------------------
+//
+void TIRXMLElementFormat::OpenStringPoolL(RStringPool&  aStringPool)
+    {
+    IRLOG_DEBUG( "CIRXMLContentHandler::OpenStringPoolL" );
+    aStringPool.OpenL(IRPoolTable);
+    IRLOG_DEBUG( "CIRXMLContentHandler::OpenStringPoolL - Exiting." );
+    }
+
+
+// ---------------------------------------------------------------------------
+// TIRXMLElementFormat :: GetElementIdL
+// The ElementId of the element from the StringPool
+// ---------------------------------------------------------------------------
+//
+TIRXMLElement TIRXMLElementFormat::GetElementIdL(const TDesC8& aElement, 
+                                  const RStringPool& aStringPool)
+    {
+		IRLOG_DEBUG( "TIRXMLElementFormat::GetElementIdL" );
+		TBool validElement = EFalse;
+		TInt  tableEntries;
+		TInt  pos(0);
+        tableEntries = IRPoolTable.iCount;
+        while(pos < tableEntries && validElement == EFalse)
+			{
+			RStringF tableEntry;
+            tableEntry = aStringPool.StringF(pos,IRPoolTable);
+            HBufC8* ElementName = HBufC8::NewLC(tableEntry.DesC().Length());
+            ElementName->Des().Copy(tableEntry.DesC());
+            TLex8 string(*ElementName);
+            TPtrC8 token = string.NextToken();
+            TInt CompareResult = aElement.Compare(token);
+            if(CompareResult == 0)
+                {
+                 validElement = ETrue;
+                }
+            if(validElement == EFalse)
+                {
+                 pos++;
+                }
+            tableEntry.Close();
+            CleanupStack::PopAndDestroy(ElementName);        
+        }
+    if(validElement)
+        {
+        IRLOG_DEBUG( "CIRXMLContentHandler::GetElementIdL - Exiting (1)." );
+        return static_cast<TIRXMLElement>(pos);
+        }        
+    IRLOG_DEBUG( "CIRXMLContentHandler::GetElementIdL - Exiting (2)." );
+    return(EElementIDUnknown);
+    } 
+    
+// ---------------------------------------------------------------------------
+// TIRXMLElementFormat::CloseStringPoolL
+// Closes the StringPool
+// ---------------------------------------------------------------------------
+//
+void TIRXMLElementFormat::CloseStringPoolL(RStringPool&  aStringPool)
+    {
+    IRLOG_DEBUG( "TIRXMLElementFormat::CloseStringPoolL" );
+    aStringPool.Close();
+    IRLOG_DEBUG( "TIRXMLElementFormat::CloseStringPoolL - Exiting." );
+	return;
+    }    
+   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
+  <!ENTITY layer_real_source_path "sf/app/internetradio" >
+]>
+
+<SystemDefinition name="internetradio" schema="1.5.1">
+  <systemModel>
+    <layer name="app_layer">
+      <module name="internetradio">
+        <unit name="internetradio" unitID="av.internetradio" bldFile="&layer_real_source_path;/group" mrp="" />
+      </module>
+    </layer>
+    <layer name="app_layer">
+      <module name="qtinternetradio">
+        <unit unitID="qtinternetradio" mrp="" bldFile="&layer_real_source_path;/qtinternetradio" name="qtinternetradio" proFile="all.pro" qmakeArgs="-r -config rom"/>
+      </module>
+    </layer>
+    <layer name="app_test_layer">
+      <module name="qtinternetradio_test">
+        <unit unitID="qtinternetradio_test" mrp="" bldFile="&layer_real_source_path;/qtinternetradio/internal/tsrc" name="qtinternetradio_test" proFile="tsrc.pro" qmakeArgs="-r -config rom"/>
+      </module>
+    </layer>
+  </systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/bwins/psclient100u.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+EXPORTS
+	??0RPSServ@@QAE@XZ @ 1 NONAME ; RPSServ::RPSServ(void)
+	??1CPSPresetInterface@@UAE@XZ @ 2 NONAME ; CPSPresetInterface::~CPSPresetInterface(void)
+	??1CPSPresetNotifier@@UAE@XZ @ 3 NONAME ; CPSPresetNotifier::~CPSPresetNotifier(void)
+	??1CPSTransaction@@UAE@XZ @ 4 NONAME ; CPSTransaction::~CPSTransaction(void)
+	?BaseConstructL@CPSPresetInterface@@IAEXPAX@Z @ 5 NONAME ; void CPSPresetInterface::BaseConstructL(void *)
+	?BeginTransactionL@CPSPresetInterface@@EAEXXZ @ 6 NONAME ; void CPSPresetInterface::BeginTransactionL(void)
+	?Close@RPSServ@@QAEXXZ @ 7 NONAME ; void RPSServ::Close(void)
+	?CommitL@CPSPresetInterface@@EAEXXZ @ 8 NONAME ; void CPSPresetInterface::CommitL(void)
+	?CommitL@CPSTransaction@@QAEXXZ @ 9 NONAME ; void CPSTransaction::CommitL(void)
+	?Connect@RPSServ@@QAEHXZ @ 10 NONAME ; int RPSServ::Connect(void)
+	?CreatePresetL@RPSServ@@QAEPAVCPSPresetInterface@@HVTUid@@@Z @ 11 NONAME ; class CPSPresetInterface * RPSServ::CreatePresetL(int, class TUid)
+	?CreateTransactionL@CPSPresetInterface@@QAEPAVCPSTransaction@@XZ @ 12 NONAME ; class CPSTransaction * CPSPresetInterface::CreateTransactionL(void)
+	?CreateTransactionLC@CPSPresetInterface@@QAEPAVCPSTransaction@@XZ @ 13 NONAME ; class CPSTransaction * CPSPresetInterface::CreateTransactionLC(void)
+	?DataHandler@CPSPresetInterface@@QBE?AVTUid@@XZ @ 14 NONAME ; class TUid CPSPresetInterface::DataHandler(void) const
+	?DeletePresetL@RPSServ@@QAEXH@Z @ 15 NONAME ; void RPSServ::DeletePresetL(int)
+	?GetPresetsL@RPSServ@@QAEXAAV?$RPointerArray@VCPSPresetInterface@@@@@Z @ 16 NONAME ; void RPSServ::GetPresetsL(class RPointerArray<class CPSPresetInterface> &)
+	?HandlePresetChangedL@CPSPresetInterface@@EAEXHVTUid@@W4TPSReason@MPSPresetObserver@@@Z @ 17 NONAME ; void CPSPresetInterface::HandlePresetChangedL(int, class TUid, enum MPSPresetObserver::TPSReason)
+	?Id@CPSPresetInterface@@QBEHXZ @ 18 NONAME ; int CPSPresetInterface::Id(void) const
+	?Index@CPSPresetInterface@@QBEHXZ @ 19 NONAME ; int CPSPresetInterface::Index(void) const
+	?MovePresetL@RPSServ@@QAEXHH@Z @ 20 NONAME ; void RPSServ::MovePresetL(int, int)
+	?Name@CPSPresetInterface@@QBEABVTDesC16@@XZ @ 21 NONAME ; class TDesC16 const & CPSPresetInterface::Name(void) const
+	?NewL@CPSPresetNotifier@@SAPAV1@AAVRPSServ@@AAVMPSPresetObserver@@@Z @ 22 NONAME ; class CPSPresetNotifier * CPSPresetNotifier::NewL(class RPSServ &, class MPSPresetObserver &)
+	?OpenPresetL@RPSServ@@QAEPAVCPSPresetInterface@@H@Z @ 23 NONAME ; class CPSPresetInterface * RPSServ::OpenPresetL(int)
+	?Rollback@CPSPresetInterface@@EAEXXZ @ 24 NONAME ; void CPSPresetInterface::Rollback(void)
+	?Rollback@CPSTransaction@@QAEXXZ @ 25 NONAME ; void CPSTransaction::Rollback(void)
+	?SetIndex@CPSPresetInterface@@QAEXH@Z @ 26 NONAME ; void CPSPresetInterface::SetIndex(int)
+	?SetNameL@CPSPresetInterface@@QAEXABVTDesC16@@@Z @ 27 NONAME ; void CPSPresetInterface::SetNameL(class TDesC16 const &)
+	?ValidateDataChange@CPSPresetInterface@@IAEXXZ @ 28 NONAME ; void CPSPresetInterface::ValidateDataChange(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/pspresetinterface.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2006-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:  Common interface for preset handling
+*
+*/
+
+
+#ifndef C_CPSPRESETINTERFACE_H
+#define C_CPSPRESETINTERFACE_H
+
+#include <pspresetobserver.h>
+#include <pstransaction.h>
+
+const TUid KPSPresetInterface = { 0x10281CB6 }; /**< The ECOM interface UID for preset plugins. */
+
+class CPSPresetNotifier;
+class CPSPresetTransaction;
+class RReadStream;
+class RPSServ;
+class RPSServSession;
+class RWriteStream;
+
+/**
+ * Common interface for preset handling.
+ *
+ * All preset plugins must inherit from this class, and implement the InternalizeL( RReadStream& aStream )
+ * and ExternalizeL( RWriteStream& aStream ) methods.
+ *
+ */
+class CPSPresetInterface : public CBase, public MPSPresetObserver, public MPSTransactionEntity
+    {
+
+public:
+
+    /**
+     * Destructor
+     */
+    IMPORT_C ~CPSPresetInterface();
+    
+    /**
+     * Creates and starts an explicit transaction.
+     *
+     * If a transaction is not active when using the setters, they will panic with <code>KErrNotReady</code>.
+     *
+     * Creating a transaction leaves with <code>KErrLocked</code> if another transaction for the same preset is active.
+	 *
+     * Transactions are completed with either CommitL or RollbackL.
+     */
+    IMPORT_C CPSTransaction* CreateTransactionL();
+
+    /**
+     * Creates and starts explicit transaction leaving it on the cleanup stack.
+     *
+     * @see CPSPresetTramsaction::CreateTransactionL()
+     */
+    IMPORT_C CPSTransaction* CreateTransactionLC();
+
+    /**
+     * Sets the name of the preset.
+     *
+     * @param   aName       The name of the preset. 
+     */
+    IMPORT_C void SetNameL( const TDesC& aName );
+    
+    /**
+     * Returns the name of the preset.
+     *
+     * @return  The name of the preset.
+     */
+    IMPORT_C const TDesC& Name() const;
+
+    /**
+     * Sets the index of the preset.
+     *
+     * @param   aIndex      The index of the preset.
+     */
+    IMPORT_C void SetIndex( TInt aIndex );
+    
+    /**
+     * Returns the index of the preset.
+     *
+     * @return  The index of the preset.
+     */
+    IMPORT_C TInt Index() const;
+
+    /**
+     * Returns the id of the preset.
+     *
+     * @return  The id of the preset.
+     */
+    IMPORT_C TInt Id() const;
+
+    /**
+     * Returns the data handler of the preset.
+     *
+     * @return  The data handler of the preset.
+     */
+    IMPORT_C TUid DataHandler() const;
+
+protected:
+
+    /**
+     * Completes the construction of the preset interface.
+     *
+     * All classes deriving from this class must call BaseConstructL( TAny* aParams ) before
+     * trying to use any of the functionality provided.
+     *
+     * @param   aParams     The ECOM construction parameters, as supplied to the plugin's
+     *                      <code>NewL( TAny* aParams )</code> by the ECOM framework.
+     */
+    IMPORT_C void BaseConstructL( TAny* aParams );
+
+    /**
+     * Validates the preset for data change.
+     *
+     * Implementing plugins must call this whenever any of their functions that modify the external
+     * status of the preset are called before making any changes to the preset's values.
+     *
+     * Checks if there is a transaction open for this preset, and if not, panics the application as it
+     * indicates a programming error.
+     */
+    IMPORT_C void ValidateDataChange();
+
+    /**
+     * Internalizes the preset.
+     *
+     * This is called when the preset's data is changed, and needs to be updated.
+     *
+     * @param   aStream     Read stream containing the preset's data.
+     */
+    virtual void InternalizeL( RReadStream& aStream ) = 0;
+
+    /**
+     * Externalizes the preset.
+     *
+     * Called when the preset is about to be committed, and the data provided by the plugin 
+     * needs to be externalized.
+     *
+     * @param   aStream     Write stream to write the preset's data to.
+     */
+    virtual void ExternalizeL( RWriteStream& aStream ) const = 0;
+
+private:
+
+// from base class MPSPresetObserver
+
+    /**
+     * @see MPSPresetObserver::HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason )
+     */
+    IMPORT_C void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+
+// from base class MPSTransactionEntity
+    
+    /**
+     * @see MPSTransactionEntity::BeginTransactionL()
+     */
+    IMPORT_C void BeginTransactionL();
+
+    /**
+     * @see MPSTransactionEntity::CommitL()
+     */
+    IMPORT_C void CommitL();
+    
+    /**
+     * @see MPSTransactionEntity::Rollback()
+     */
+    IMPORT_C void Rollback();
+
+public:
+
+    /**
+     * Creates a new preset interface object.
+     * 
+     * @param   aServ           reference to session, used to communicate to server
+     * @param   aId             id of the preset 
+     * @param   aDataHandler    datahandler uid, used in preset creation
+     */
+    static CPSPresetInterface* CreateL( RPSServ& aServ, TInt aId, TUid aDataHandler );
+
+private:
+
+    /**
+     * Updates the preset.
+     */
+    void UpdatePresetL();
+
+private:
+
+    /** The preset change notifier. */
+    CPSPresetNotifier* iNotifier;
+    /** Session to the preset server. */
+    RPSServSession* iSession;
+    /** <code>ETrue</code> if the preset is in transaction, <code>EFalse</code> otherwise. */
+    TBool iTransaction;
+    /** Name of the preset. */
+    HBufC* iName;
+    /** Index of the preset. */
+    TInt iIndex;
+    /** Identifier of the preset. */
+    TInt iId;
+    /** Data handler of the preset. */
+    TUid iDataHandler;
+    /** Destructor id. */
+    TUid iDtor;
+    /** Extension. */
+    TAny* iExtension;
+
+    };
+
+#endif // C_CPSPRESETINTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/pspresetnotifier.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006-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:  Header file for preset change notifier
+*
+*/
+
+
+#ifndef C_CVRPRESETCHANGENOTIFIER_H
+#define C_CVRPRESETCHANGENOTIFIER_H
+
+#include <e32base.h>
+
+class MPSPresetObserver;
+class RPSServNotifier;
+class RPSServ;
+
+/**
+ * Preset change notifier.
+ *
+ * Notifies the observer whenever any changes are done to the preset database.
+ */
+NONSHARABLE_CLASS( CPSPresetNotifier ) : public CActive
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * The notifier is automatically set active after creation.
+     * 
+     * @param   aServ       Preset server session.
+     * @param   aObserver   The observer to notify.
+     * @return  The newly created object.
+     */
+    IMPORT_C static CPSPresetNotifier* NewL( RPSServ& aServ, MPSPresetObserver& aObserver );
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C ~CPSPresetNotifier();
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * Used only internally.
+     *
+     * The notifier is automatically set active after creation.
+     * 
+     * @param   aServ       Preset server session.
+     * @param   aObserver   The observer to notify.
+     * @param   aId         The ID of the preset to observe, or <code>KErrNotFound</code>
+     *                      if all changes should result in a notification.
+     * @return  The newly created object.
+     */
+    static CPSPresetNotifier* NewL( RPSServ& aServ, MPSPresetObserver& aObserver, TInt aId );
+
+private:
+
+    /**
+     * Constructor.
+     *     
+     * @param   aServ       Preset server session.
+     * @param   aObserver   The observer to notify.
+     * @param	aPriority   Priority of the active object.
+     */
+    CPSPresetNotifier( RPSServ& aServ, MPSPresetObserver& aObserver, TInt aPriority );
+
+    /**
+     * Second-phase constructor.
+     *
+     * @param   aId         The ID of the preset to observe, or <code>KErrNotFound</code>
+     *                      if all changes should result in a notification.
+     */
+    void ConstructL( TInt aId );
+
+    /**
+     * Static notify call back that is used after a failed notification.
+     *
+     * This will request a new notification to be received.
+     *
+     * @param   aSelf       Pointer to self.
+     * @return  <code>KErrNone</code>.
+     */
+    static TInt StaticDelayedNotifyCallBack( TAny* aSelf );
+
+// from base class CActive
+
+    void DoCancel();
+    void RunL();
+    TInt RunError( TInt aError );
+
+private:
+    
+    /** Timer that is used to request a notify after one has been failed. */
+    CPeriodic* iTimer;
+    /** Preset server session. */
+    RPSServ& iServ;
+    /** The observer to notify when presets change. */
+    MPSPresetObserver& iObserver;
+    /** Internal notifier implementation. */
+    RPSServNotifier* iNotifier;
+    /** Extension. */
+    TAny* iExtension;
+
+    };
+
+#endif // C_CVRPRESETCHANGENOTIFIER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/psserv.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2006-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:  Header file for RPSServ
+*
+*/
+
+
+#ifndef R_RPSSERV_H
+#define R_RPSSERV_H
+
+#include <pscommon.h>
+#include <s32mem.h>
+
+class CPSPresetInterface;
+
+/**
+ * Represents a session with the preset server.
+ *
+ * All communication with the server is done via this class.
+ */
+NONSHARABLE_CLASS( RPSServ ) : public RSessionBase
+    {
+
+    friend class RPSServNotifier;
+    friend class RPSServSession;
+
+public:
+
+    /**
+     * Constructor.
+     */
+    IMPORT_C RPSServ();
+
+    /**
+     * Connects the session to the preset server.
+     *
+     * @return  Any of the standard system error codes.
+     */
+    IMPORT_C TInt Connect();
+    
+    /**
+     * Closes the session.
+     */
+    IMPORT_C void Close();
+    
+    /**
+     * Creates a preset.
+     *
+     * If a preset with the supplied index and data handler exists, the call will leave with <code>KErrAlreadyExists</code>.
+     *
+     * @param   aIndex          Index of the preset.
+     * @param   aDataHandler    Data handler of the preset.
+     * @return  The newly created preset, ownership is transferred to the caller.
+     */
+    IMPORT_C CPSPresetInterface* CreatePresetL( TInt aIndex, TUid aDataHandler );
+    
+    /**
+     * Opens a preset.
+     *
+     * If a preset with the specified id does not exist, the call will leave with <code>KErrNotFound</code>.
+     *
+     * @param   aId     Id of the preset to open.
+     * @return  The opened preset, ownership is transferred to the caller.
+     */
+    IMPORT_C CPSPresetInterface* OpenPresetL( TInt aId );            
+
+    /**
+     * Deletes a preset.
+     *
+     * @param   aId     Id of the preset to delete.
+     */
+    IMPORT_C void DeletePresetL( TInt aId );
+    
+    /**
+     * Moves a preset.
+     *
+     * If a preset with the specified id does not exist, the call will leave with <code>KErrNotFound</code>.
+     *
+     * @param   aId                 Id of the preset to move.
+     * @param   aDestinationIndex   Index to move the preset to.
+     */
+    IMPORT_C void MovePresetL( TInt aId, TInt aDestinationIndex );
+
+    /**
+     * Gets a list of all presets.
+     *
+     * The presets can then be casted to their respective types by using the CPSPresetInterface::DataHandler() method.
+     *
+     * @param   aPresets    On return, will contain a list of all presets.
+     */
+    IMPORT_C void GetPresetsL( RPointerArray<CPSPresetInterface>& aPresets );
+    
+    /**
+     * Gets a list of all presets matching the specified data handler.
+     *
+     * @param   aPresets        On return, will contain a list of all presets matching the specified data handler.
+     * @param   aDataHandler    Data handler of the presets.
+     */
+    template <typename T>
+    void GetPresetsL( RPointerArray<T>& aPresets, TUid aDataHandler );
+
+private:
+
+    /** Reserved. */
+    TInt iReserved[2];
+
+    };
+
+#include <psserv.inl>
+
+#endif // R_RPSSERV_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/psserv.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2006-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:  Preset Server session inline method implementations
+*
+*/
+
+
+// ---------------------------------------------------------------------------
+// Gets all presets of the supplied type.
+// ---------------------------------------------------------------------------
+//
+template <typename T>
+void RPSServ::GetPresetsL( RPointerArray<T>& aPresets, TUid aDataHandler )
+    {    
+    TPckgBuf<TInt> length;
+    User::LeaveIfError( SendReceive( EPSOpGetPresetsLength, TIpcArgs( aDataHandler.iUid, &length ) ) );
+    
+    HBufC8* buf = HBufC8::NewLC( length() ); 
+    TPtr8 ptr( buf->Des() );
+    
+    User::LeaveIfError( SendReceive( EPSOpGetPresets, TIpcArgs( aDataHandler.iUid, &ptr ) ) );
+    
+    RDesReadStream stream( ptr );
+    CleanupClosePushL( stream );
+    
+    TCardinality count;
+    stream >> count;
+    
+    for ( TInt i = 0; i < count; i++ )
+        {
+        CPSPresetInterface* preset = OpenPresetL( stream.ReadInt32L() );
+        CleanupStack::PushL( preset );
+        aPresets.AppendL( static_cast<T*>( preset ) );
+        CleanupStack::Pop( preset );
+        }         
+     
+    CleanupStack::PopAndDestroy( 2, buf );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/psservnotifier.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2006-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:  Client-server preset notifier
+*
+*/
+
+
+#ifndef R_RPSPRESETNOTIFIER_H
+#define R_RPSPRESETNOTIFIER_H
+
+#include <pscommon.h>
+#include <pspresetobserver.h>
+
+class RPSServ;
+
+/**
+ * Client-server preset notifier.
+ */
+class RPSServNotifier
+    {
+
+public:
+
+    /**
+     * Constructor.
+     *
+     * @param   aServer     Session with the preset server.
+     * @param   aId         The ID of the preset to observe, or <code>KErrNotFound</code>
+     *                      if all changes should result in a notification.
+     */    
+    RPSServNotifier( RPSServ& aServer, TInt aId );
+
+    /**
+     * Closes all resources allocated.
+     */    
+    void Close();
+
+    /**
+     * Request a notify when the preset with the supplied identifier is changed.
+     *
+     * @param   aStatus         The request status to signal when the preset is changed.
+     */    
+    void Notify( TRequestStatus& aStatus );
+
+    /**
+     * Cancels the pending notify request.
+     */    
+    void CancelNotify();
+
+    /**
+     * Returns the id of the preset.
+     *
+     * @return  Id of the preset.
+     */
+    TInt Id() const;
+
+    /**
+     * Returns the data handler of the preset.
+     *
+     * @return  Data handler of the preset.
+     */
+    TUid DataHandler() const;
+
+    /**
+     * Returns the reason of the change.
+     *
+     * @return  Reason of the change.
+     */
+    MPSPresetObserver::TPSReason Reason() const;    
+
+private:
+
+    /** The preset server. */
+    RPSServ& iServer;
+    /** Packaged data of the latest notify. */
+    TPckgBuf<TPSNotifyDataPackage> iData;
+    /** The ID of the preset to observe, or <code>KErrNotFound</code> if all changes should result in a notification. */
+    TInt iId;
+
+    };
+
+#endif // R_RPSPRESETNOTIFIER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/psservsession.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2006-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:  Represents a session with the Preset Server
+*
+*/
+
+
+#ifndef R_RPSSERVSESSION_H
+#define R_RPSSERVSESSION_H
+
+#include <e32base.h>
+#include <pscommon.h>
+
+class RPSServ;
+
+/**
+ * Preset server session class.
+ *
+ * Provides access to the preset server for the preset interface. Each session is bound to a single preset by its id.
+ */
+class RPSServSession
+    {
+
+public:
+
+    /**
+     * Constructor.
+     *
+     * @param   aServ       Preset server client.
+     * @param   aId         Id of the preset.
+     */
+    RPSServSession( RPSServ& aServ, TInt aId );
+    
+    /**
+     * Closes the session.
+     */
+    void Close();
+
+    /**
+     * Begins a transaction.
+     */
+    void BeginTransactionL();
+
+    /**
+     * Commits the transaction.
+     */
+    void CommitL();
+
+    /**
+     * Reverts all changes done to the preset prior to a commit.
+     */
+    void Rollback();
+
+    /**
+     * Sends data to the server via the client-server IPC framework.
+     * 
+     * @param   aServerCommand      Server opcode to use.
+     * @param   aValue              Data to write.
+     */
+    void SetL( TPSOpCode aServerCommand, TInt aValue );
+
+    /**
+     * Gets data from the server via the client-server IPC framework.
+     * 
+     * @param   aServerCommand      Server opcode to use.
+     * @param   aValue              Data to read.
+     */
+    void GetL( TPSOpCode aServerCommand, TInt& aValue );
+
+    /**
+     * Sends data to the server via the client-server IPC framework.
+     * 
+     * @param   aServerCommand      Server opcode to use.
+     * @param   aValue              Data to write.
+     */
+    void SetL( TPSOpCode aServerCommand, const TDesC8& aValue );    
+    
+    /**
+     * Gets data from the server via the client-server IPC framework.
+     * 
+     * @param   aServerCommand      Server opcode to use.
+     * @param   aLengthCommand      PS operation code.
+     * @param   aValue              Data to read.
+     */
+    void GetL( TPSOpCode aServerCommand, TPSOpCode aLengthCommand, HBufC8*& aValue );
+    
+    /**
+     * Sends data to the server via the client-server IPC framework.
+     * 
+     * @param   aServerCommand      Server opcode to use.
+     * @param   aValue              Data to write.
+     */
+    void SetL( TPSOpCode aServerCommand, const TDesC& aValue );    
+
+    /**
+     * Gets data from the server via the client-server IPC framework.
+     * 
+     * @param   aServerCommand      Server opcode to use.
+     * @param   aLengthCommand      PS operation code.
+     * @param   aValue              Data to read.
+     */
+    void GetL( TPSOpCode aServerCommand, TPSOpCode aLengthCommand, HBufC*& aValue );    
+
+private:
+
+    /** Preset server client. */
+    RPSServ& iPresetServ;
+    /** Id of the preset this session is bound to. */
+    TInt iId;
+
+    };
+
+#endif // R_RPSSERVSESSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientinc/pstransaction.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2006-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:  Defines a transaction
+*
+*/
+
+
+#ifndef C_CPSTRANSACTION_H
+#define C_CPSTRANSACTION_H
+
+#include <e32base.h>
+
+/**
+ * Pure virtual base class for transactions.
+ */
+NONSHARABLE_CLASS( MPSTransactionEntity )
+    {
+
+public:
+
+    /**
+     * Begins an explicit transaction.
+     */
+    virtual void BeginTransactionL() = 0;
+    
+    /**
+     * Commits changes done during the transaction.
+     */
+    virtual void CommitL() = 0;
+    
+    /**
+     * Reverts changes done during the transaction.
+     */
+    virtual void Rollback() = 0;
+
+    };
+
+/**
+ * Defines a transaction.
+ *
+ * Transactions must be created whenever any value of the transaction is to be modified. They provide
+ * means to synchronize transaction item updates so that they cannot be updated simultaneously by two clients.
+ *
+ * Transactions cannot be created as is, as they must be created through transactable entities.
+ *
+ * To create a transaction with a preset, use CPSPresetInterface::CreateTransactionL() or CPSPresetInterface::CreateTransactionLC().
+ *
+ * When a transaction is started, the transaction entity remains in locked state until it is either committed or rollbacked.
+ */
+NONSHARABLE_CLASS( CPSTransaction ) : public CBase
+    {
+
+public:
+
+    /**
+     * Destructor
+     */
+    IMPORT_C ~CPSTransaction();
+    
+    /**
+     * Completes the transaction, committing all changes done to the preset.
+     */
+    IMPORT_C void CommitL();
+
+    /**
+     * Completes the transaction, reverting all changes done to the preset.
+     */
+    IMPORT_C void Rollback();
+
+public:
+
+    /**
+     * Creates a new preset transaction object.
+     * 
+     * @param   aEntity     The transaction entity to start the transaction with.
+     */
+    static CPSTransaction* NewL( MPSTransactionEntity& aEntity );
+
+private:
+
+    /**
+     * Constructor.
+     * 
+     * @param   aEntity     The transaction entity to start the transaction with.
+     */
+    CPSTransaction( MPSTransactionEntity& aEntity );
+
+    /** 
+     * Second-phase constructor.
+     */
+    void ConstructL();     
+           
+private:
+    
+    /** The transaction entity. */
+    MPSTransactionEntity& iEntity;
+    /** Extension. */
+    TAny* iExtension;
+
+    };
+
+#endif // C_CPSTRANSACTION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientsrc/Pspresetinterface.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2006-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:  Preset interface implementation
+*
+*/
+
+
+#include <ecom.h>
+#include <pscommon.h>
+#include <pspresetinterface.h>
+#include <pspresetnotifier.h>
+#include <pstransaction.h>
+#include <s32mem.h>
+
+#include "psdebug.h"
+#include "psservsession.h"
+
+const TInt KPSExternalizeBufGranularity = 32; // Granularity of the preset data externalisation buffer.
+
+/**
+ * Preset interface initialization parameters.
+ */
+typedef struct
+    {
+    /** Session with the preset server. */
+    RPSServ* iServ;
+    /** Data handler of the preset. */
+    TUid iDataHandler;
+    /** Id of the preset. */
+    TInt iId;
+    } TPSPresetInterfaceParams;
+
+// ---------------------------------------------------------------------------
+// Panics the process.
+// ---------------------------------------------------------------------------
+//
+void Panic( TInt aReason )
+    {
+    _LIT( category, "CPSPresetInterface" );
+    User::Panic( category, aReason );
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSPresetInterface* CPSPresetInterface::CreateL( RPSServ& aServ, TInt aId, TUid aDataHandler )
+    {
+    TPSPresetInterfaceParams params = { &aServ, aDataHandler, aId };
+    CPSPresetInterface* self = static_cast<CPSPresetInterface*>( REComSession::CreateImplementationL( aDataHandler, _FOFF( CPSPresetInterface, iDtor ), &params ) );
+    CleanupStack::PushL( self );
+    self->UpdatePresetL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSPresetInterface::~CPSPresetInterface()
+    {
+    delete iName;
+    delete iNotifier;
+    
+    if ( iSession )
+        {
+        iSession->Close();
+        }
+    delete iSession;
+    
+    REComSession::DestroyedImplementation( iDtor );
+    }
+
+// ---------------------------------------------------------------------------
+// Creates a transaction.
+// Transfers ownership.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSTransaction* CPSPresetInterface::CreateTransactionL()
+    {
+    CPSTransaction* transaction = CreateTransactionLC();
+    CleanupStack::Pop( transaction );
+    return transaction;
+    }
+
+// ---------------------------------------------------------------------------
+// Creates a transaction and leaves it on the cleanup stack.
+// Transfers ownership.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSTransaction* CPSPresetInterface::CreateTransactionLC()
+    {
+    CPSTransaction* transaction = CPSTransaction::NewL( *this );
+    CleanupStack::PushL( transaction );
+    return transaction;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the name of the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSPresetInterface::SetNameL( const TDesC& aName )
+    {
+    ValidateDataChange();
+
+    delete iName;
+    iName = NULL;
+    iName = aName.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the name of the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPSPresetInterface::Name() const
+    {
+    return *iName;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the index of the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSPresetInterface::SetIndex( TInt aIndex )
+    {    
+    ValidateDataChange();
+
+    iIndex = aIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the index of the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPSPresetInterface::Index() const
+    {
+    return iIndex; 
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the id of the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPSPresetInterface::Id() const
+    {
+    return iId;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the data handler of the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUid CPSPresetInterface::DataHandler() const
+    {
+    return iDataHandler;
+    }
+
+// ---------------------------------------------------------------------------
+// Performs base construction on the preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSPresetInterface::BaseConstructL( TAny* aParams )
+    {
+    const TPSPresetInterfaceParams& params = *static_cast<TPSPresetInterfaceParams*>( aParams );
+    
+    iDataHandler = params.iDataHandler;
+    iId = params.iId;
+
+    iSession = new ( ELeave ) RPSServSession( *params.iServ, iId );
+    iNotifier = CPSPresetNotifier::NewL( *params.iServ, *this, iId );
+    }
+
+// ---------------------------------------------------------------------------
+// Validates the preset for data change.
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C void CPSPresetInterface::ValidateDataChange()
+    {
+    __ASSERT_ALWAYS( iTransaction, Panic( KErrNotReady ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles changes in the preset.
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C void CPSPresetInterface::HandlePresetChangedL( TInt PSDEBUGVAR( aId ), TUid /*aDataHandler*/, MPSPresetObserver::TPSReason aReason )
+    {
+    __ASSERT_DEBUG( iId == aId, Panic( KErrCorrupt ) );
+
+    switch ( aReason )
+        {
+        case MPSPresetObserver::EPSModified:
+            UpdatePresetL();
+            break;            
+        case MPSPresetObserver::EPSDeleted:
+            // Preset deleted from the database, close the session.
+            iSession->Close();
+            delete iSession;
+            iSession = NULL;                            
+            break;
+        case MPSPresetObserver::EPSCreated: // Falls through.                
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Begins the transaction.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSPresetInterface::BeginTransactionL()
+    {
+    if( iSession )
+        {
+        iSession->BeginTransactionL();
+        iTransaction = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Commits the transaction.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSPresetInterface::CommitL()
+    {
+    if( iSession )
+        {
+        iSession->SetL( EPSOpSetPresetName, *iName );
+        iSession->SetL( EPSOpSetPresetIndex, iIndex );    
+    
+        CBufFlat* buf = CBufFlat::NewL( KPSExternalizeBufGranularity );
+        CleanupStack::PushL( buf );
+        RBufWriteStream stream( *buf );
+        CleanupClosePushL( stream );
+        ExternalizeL( stream );
+        stream.CommitL();
+        CleanupStack::PopAndDestroy( &stream );
+        iSession->SetL( EPSOpSetPresetData, buf->Ptr( 0 ) );
+        CleanupStack::PopAndDestroy( buf );
+
+        iSession->CommitL();
+    
+        iTransaction = EFalse;
+        }        
+    }
+    
+// ---------------------------------------------------------------------------
+// Reverts all changes done during the transaction.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSPresetInterface::Rollback()
+    {
+    if( iSession )
+        {
+        iSession->Rollback();
+        iTransaction = EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Updates the preset.
+// ---------------------------------------------------------------------------
+//  
+void CPSPresetInterface::UpdatePresetL()
+    {
+    if( iSession )
+        {
+        iSession->GetL( EPSOpGetPresetIndex, iIndex );
+    
+        delete iName;
+        iName = NULL;
+    
+        iSession->GetL( EPSOpGetPresetName, EPSOpGetPresetNameLength, iName );
+
+        HBufC8* data;
+        iSession->GetL( EPSOpGetPresetData, EPSOpGetPresetDataLength, data );
+        CleanupStack::PushL( data );
+    
+        if ( data->Length() )
+            {
+            // There was packed data in the database, implementing plugin can unpack it now.
+            RDesReadStream stream( *data );
+            CleanupClosePushL( stream );
+            InternalizeL( stream );
+            CleanupStack::PopAndDestroy( &stream );
+            }
+
+        CleanupStack::PopAndDestroy( data );
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientsrc/Pspresetnotifier.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2006-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:  Implementation of the public preset notifier
+*
+*/
+
+
+#include <pspresetnotifier.h>
+#include <psserv.h>
+
+#include "psservnotifier.h"
+
+const TInt KPSDefaultNotifierPriority = CActive::EPriorityLow; // Priority of the non-preset notifiers.
+const TInt KPSPresetNotifierPriority = CActive::EPriorityStandard; // Priority of the preset notifiers.
+
+const TInt KPSFailedRequestDelay = 5000000; // The delay after which a failed notify request is reissued to the server.
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSPresetNotifier* CPSPresetNotifier::NewL( RPSServ& aServ, MPSPresetObserver& aObserver )
+    {
+    CPSPresetNotifier* self = new ( ELeave ) CPSPresetNotifier( aServ, aObserver, KPSDefaultNotifierPriority );
+    CleanupStack::PushL( self );
+    self->ConstructL( KErrNotFound );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Non-exported two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSPresetNotifier* CPSPresetNotifier::NewL( RPSServ& aServ, MPSPresetObserver& aObserver, TInt aId )
+    {
+    CPSPresetNotifier* self = new ( ELeave ) CPSPresetNotifier( aServ, aObserver, KPSPresetNotifierPriority );
+    CleanupStack::PushL( self );
+    self->ConstructL( aId );
+    CleanupStack::Pop( self );
+    return self;
+    }     
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSPresetNotifier::CPSPresetNotifier( RPSServ& aServ, MPSPresetObserver& aObserver, TInt aPriority )
+    : CActive( aPriority ), iServ( aServ ), iObserver( aObserver )
+    {
+    CActiveScheduler::Add( this );
+    }
+        
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSPresetNotifier::ConstructL( TInt aId )
+    {
+    iTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+
+    iNotifier = new ( ELeave ) RPSServNotifier( iServ, aId );
+    iNotifier->Notify( iStatus );
+
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSPresetNotifier::~CPSPresetNotifier()
+    {
+    Cancel();
+
+    delete iNotifier;
+    delete iTimer;
+    }
+
+// ---------------------------------------------------------------------------
+// Cancels the pending notify.
+// ---------------------------------------------------------------------------
+//
+void CPSPresetNotifier::DoCancel()
+    {
+    if ( iNotifier )
+        {
+        iNotifier->CancelNotify();
+        }
+    
+    if ( iTimer )
+        {
+        iTimer->Cancel();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Invoked when a preset is changed.
+// ---------------------------------------------------------------------------
+//
+void CPSPresetNotifier::RunL()
+    {
+    User::LeaveIfError( iStatus.Int() );
+    iObserver.HandlePresetChangedL( iNotifier->Id(), iNotifier->DataHandler(), iNotifier->Reason() );
+
+    // Requesting the new notification must be done after the observer has been
+    // notified of the current one, as the request may complete synchronously on the 
+    // server side, causing it to overwrite the existing notify package and thus notifying
+    // the observer incorrectly.
+    
+    iNotifier->Notify( iStatus );
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// Called when RunL leaves.
+// ---------------------------------------------------------------------------
+//
+TInt CPSPresetNotifier::RunError( TInt /*aError*/ )
+    {
+    // After a notification fails for any reason, whether it is because the server side
+    // code has caused a leave or the observer's implementation of preset handling
+    // call back fails, we will request a new notification with a set delay. This
+    // prevents the notifier from being in a state where it can no longer keep track
+    // of its state.
+
+    iTimer->Cancel();
+    iTimer->Start( KPSFailedRequestDelay, KPSFailedRequestDelay, TCallBack( StaticDelayedNotifyCallBack, this ) );
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Static notify call back that is used after a failed notification.
+// ---------------------------------------------------------------------------
+//
+TInt CPSPresetNotifier::StaticDelayedNotifyCallBack( TAny* aSelf )
+    {
+    CPSPresetNotifier* self = static_cast<CPSPresetNotifier*>( aSelf );
+    if ( self )
+        {
+        self->iTimer->Cancel();
+
+        self->iNotifier->Notify( self->iStatus );
+        self->SetActive();
+        }
+
+    return KErrNone;
+    }
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientsrc/Psserv.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2006-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:  Preset server client implementation
+*
+*/
+
+
+#include <pspresetinterface.h>
+#include <psserv.h>
+
+// ======== LOCAL FUNCTIONS ========
+
+namespace 
+    {
+
+    // ---------------------------------------------------------------------------
+    // Panics the application with the supplied reason.
+    // ---------------------------------------------------------------------------
+    //
+    void Panic( TInt aReason )
+        {
+        _LIT( panic, "PSServ" );
+        User::Panic( panic, aReason );
+        }
+
+    // ---------------------------------------------------------------------------
+    // Checks whether or not the server is running.
+    // ---------------------------------------------------------------------------
+    //
+    TBool IsServerStarted()
+        {
+        TFindServer server( KPSServerName );
+        TFullName serverName;
+        return ( server.Next( serverName ) == KErrNone );
+        }
+    
+    // ---------------------------------------------------------------------------
+    // Starts the server.
+    // ---------------------------------------------------------------------------
+    //
+    TInt StartServer()
+        {
+        TInt result = KErrNone;
+
+        if ( !IsServerStarted() )
+            {
+            RProcess process;
+            result = process.Create( KPSServerExe, KNullDesC );
+
+            if ( result == KErrNone || result == KErrAlreadyExists )
+                {
+                TRequestStatus logonStatus;
+                TRequestStatus rendezvousStatus;
+                
+                process.Logon( logonStatus );
+                process.Rendezvous( rendezvousStatus );
+                
+                // start process
+                if ( result == KErrNone )
+                    {
+                    process.Resume();
+                    }
+                
+                // wait for either of statuses to be signaled
+                User::WaitForRequest( logonStatus, rendezvousStatus );
+
+                // if logonStatus was not signaled (it is still KRequestPending)
+                // cancel it
+                if ( logonStatus == KRequestPending ) // Server succesfully started.
+                    {
+                    process.LogonCancel( logonStatus );
+                    User::WaitForRequest( logonStatus );
+                    }
+                else
+                    {
+                    process.RendezvousCancel( rendezvousStatus );
+                    User::WaitForRequest( rendezvousStatus );
+                    }
+                }
+
+            __ASSERT_ALWAYS( IsServerStarted(), Panic( KErrNotFound ) );
+            }
+
+        return result;
+        }
+
+    // ---------------------------------------------------------------------------
+    // Returns the current version number.
+    // ---------------------------------------------------------------------------
+    //
+    TVersion Version()
+        {
+        return TVersion( KPSVersionMajor, KPSVersionMinor, KPSVersionBuild );
+        }
+
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RPSServ::RPSServ()
+    : RSessionBase(), iReserved()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Connects the session to the server.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RPSServ::Connect()
+    {
+    StartServer();
+    
+    return CreateSession( KPSServerName, Version() );
+    }
+
+// ---------------------------------------------------------------------------
+// Closes the session.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RPSServ::Close()
+    {
+    RHandleBase::Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Creates a preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSPresetInterface* RPSServ::CreatePresetL( TInt aIndex, TUid aDataHandler )
+    {
+    TPckgBuf<TInt> id;
+    User::LeaveIfError( SendReceive( EPSOpCreatePreset, TIpcArgs( aIndex, aDataHandler.iUid, &id ) ) );   
+    
+    return CPSPresetInterface::CreateL( *this, id(), aDataHandler );
+    }
+
+// ---------------------------------------------------------------------------
+// Opens a preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSPresetInterface* RPSServ::OpenPresetL( TInt aId )
+    {
+    TPckgBuf<TInt> dataHandler;
+    User::LeaveIfError( SendReceive( EPSOpGetPresetDataHandler, TIpcArgs( aId, &dataHandler ) ) );
+
+    return CPSPresetInterface::CreateL( *this, aId, TUid::Uid( dataHandler() ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Deletes a preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RPSServ::DeletePresetL( TInt aId )
+    {
+    User::LeaveIfError( SendReceive( EPSOpDeletePreset, TIpcArgs( aId ) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Moves a preset.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RPSServ::MovePresetL( TInt aId, TInt aDestinationIndex )
+    {
+    User::LeaveIfError( SendReceive( EPSOpMovePreset, TIpcArgs( aId, aDestinationIndex) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Gets all presets.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RPSServ::GetPresetsL( RPointerArray<CPSPresetInterface>& aPresets )
+    {
+    GetPresetsL<CPSPresetInterface>( aPresets, KNullUid );
+    }
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientsrc/Psservnotifier.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2006-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:  Client-server preset notifier
+*
+*/
+
+
+#include <pscommon.h>
+#include <psserv.h>
+
+#include "psservnotifier.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+RPSServNotifier::RPSServNotifier( RPSServ& aServer, TInt aId )
+    : iServer( aServer ), iData(), iId( aId )
+    {
+    // Initialize the last handled notification identifier to zero as the default constructor doesn't do it for us.
+    iData().iNotificationId = 0; 
+    }
+
+// ---------------------------------------------------------------------------
+// Closes the notifier.
+// ---------------------------------------------------------------------------
+//
+void RPSServNotifier::Close()
+    {
+    CancelNotify();
+    }
+
+// ---------------------------------------------------------------------------
+// Requests a notify when a preset changes.
+// ---------------------------------------------------------------------------
+//
+void RPSServNotifier::Notify( TRequestStatus& aStatus )
+    {
+    iServer.SendReceive( EPSOpNotify, TIpcArgs( reinterpret_cast<TInt>( this ), iId, &iData ), aStatus );
+    }
+
+// ---------------------------------------------------------------------------
+// Cancels a pending notify.
+// ---------------------------------------------------------------------------
+//
+void RPSServNotifier::CancelNotify()
+    {
+    iServer.SendReceive( EPSOpCancelNotify, TIpcArgs( reinterpret_cast<TInt>( this ) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the id of the preset that was changed.
+// ---------------------------------------------------------------------------
+//
+TInt RPSServNotifier::Id() const
+    {
+    return iData().iId;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the data handler of the preset that was changed.
+// ---------------------------------------------------------------------------
+//
+TUid RPSServNotifier::DataHandler() const
+    {
+    return iData().iDataHandler;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the reason for the change.
+// ---------------------------------------------------------------------------
+//
+MPSPresetObserver::TPSReason RPSServNotifier::Reason() const
+    {
+    return iData().iReason;
+    }
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientsrc/Psservsession.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2006-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:  Implementation of RPSServSession
+*
+*/
+
+
+#include <pscommon.h>
+#include <psserv.h>
+
+#include "psservsession.h"
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+RPSServSession::RPSServSession( RPSServ& aServ, TInt aId )
+    : iPresetServ( aServ ), iId( aId )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Closes the session.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::Close()
+    {
+    Rollback();
+    }
+
+// ---------------------------------------------------------------------------
+// Begins a transaction.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::BeginTransactionL()
+    {
+    User::LeaveIfError( iPresetServ.SendReceive( EPSOpStartTransaction, TIpcArgs( iId ) ) ); 
+    }
+
+// ---------------------------------------------------------------------------
+// Commits the transaction.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::CommitL()
+    {
+    User::LeaveIfError( iPresetServ.SendReceive( EPSOpCommitTransaction, TIpcArgs( iId ) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Reverts all changes done during the transaction.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::Rollback()
+    {
+    iPresetServ.Send( EPSOpRollbackTransaction, TIpcArgs( iId ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets an integer value.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::SetL( TPSOpCode aServerCommand, TInt aValue )
+    {
+    User::LeaveIfError( iPresetServ.SendReceive( aServerCommand, TIpcArgs( iId, aValue ) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Gets an integer value.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::GetL( TPSOpCode aServerCommand, TInt& aValue )
+    {
+    TPckgBuf<TInt> value;
+    User::LeaveIfError( iPresetServ.SendReceive( aServerCommand, TIpcArgs( iId, &value) ) );
+    aValue = value();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets an 8-bit descriptor value.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::SetL( TPSOpCode aServerCommand, const TDesC8& aValue )
+    {
+    User::LeaveIfError( iPresetServ.SendReceive( aServerCommand, TIpcArgs( iId, &aValue) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Gets a 8-bit descriptor value.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::GetL( TPSOpCode aServerCommand, TPSOpCode aLengthCommand, HBufC8*& aValue )
+    {
+    TPckgBuf<TInt> length;
+    User::LeaveIfError( iPresetServ.SendReceive( aLengthCommand, TIpcArgs( iId, &length ) ) );
+
+    HBufC8* buf = HBufC8::NewLC( length() );
+    TPtr8 ptr( buf->Des() );
+
+    User::LeaveIfError( iPresetServ.SendReceive( aServerCommand, TIpcArgs( iId, &ptr ) ) );
+    
+    CleanupStack::Pop( buf );
+    
+    aValue = buf;
+    }
+    
+// ---------------------------------------------------------------------------
+// Sets a 16-bit descriptor value.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::SetL( TPSOpCode aServerCommand, const TDesC& aValue )
+    {
+    User::LeaveIfError( iPresetServ.SendReceive( aServerCommand, TIpcArgs( iId, &aValue) ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Gets a 16-bit descriptor value.
+// ---------------------------------------------------------------------------
+//
+void RPSServSession::GetL( TPSOpCode aServerCommand, TPSOpCode aLengthCommand, HBufC*& aValue )
+    {
+    TPckgBuf<TInt> length;
+    User::LeaveIfError( iPresetServ.SendReceive( aLengthCommand, TIpcArgs( iId, &length ) ) );
+
+    HBufC* buf = HBufC::NewLC( length() );
+    TPtr ptr( buf->Des() );
+
+    User::LeaveIfError( iPresetServ.SendReceive( aServerCommand, TIpcArgs( iId, &ptr ) ) );
+
+    CleanupStack::Pop( buf );
+    
+    aValue = buf;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/clientsrc/Pstransaction.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2006-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:  Transaction implementation
+*
+*/
+
+
+#include <pstransaction.h>
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSTransaction* CPSTransaction::NewL( MPSTransactionEntity& aEntity )
+    {
+    CPSTransaction* self = new ( ELeave ) CPSTransaction( aEntity );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSTransaction::CPSTransaction( MPSTransactionEntity& aEntity )
+    : iEntity( aEntity )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSTransaction::ConstructL()
+    {
+    iEntity.BeginTransactionL();
+    }
+    
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPSTransaction::~CPSTransaction()
+    {
+    iEntity.Rollback();
+    }
+    
+// ---------------------------------------------------------------------------
+// Commits all changes done during the transaction.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSTransaction::CommitL()
+    {
+    iEntity.CommitL();
+    }
+    
+// ---------------------------------------------------------------------------
+// Reverts all changes done during the transaction.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPSTransaction::Rollback()
+    {
+    iEntity.Rollback();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/eabi/psclient100u.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,43 @@
+EXPORTS
+	_ZN14CPSTransaction7CommitLEv @ 1 NONAME
+	_ZN14CPSTransaction8RollbackEv @ 2 NONAME
+	_ZN14CPSTransactionD0Ev @ 3 NONAME
+	_ZN14CPSTransactionD1Ev @ 4 NONAME
+	_ZN14CPSTransactionD2Ev @ 5 NONAME
+	_ZN17CPSPresetNotifier4NewLER7RPSServR17MPSPresetObserver @ 6 NONAME
+	_ZN17CPSPresetNotifierD0Ev @ 7 NONAME
+	_ZN17CPSPresetNotifierD1Ev @ 8 NONAME
+	_ZN17CPSPresetNotifierD2Ev @ 9 NONAME
+	_ZN18CPSPresetInterface14BaseConstructLEPv @ 10 NONAME
+	_ZN18CPSPresetInterface17BeginTransactionLEv @ 11 NONAME
+	_ZN18CPSPresetInterface18CreateTransactionLEv @ 12 NONAME
+	_ZN18CPSPresetInterface18ValidateDataChangeEv @ 13 NONAME
+	_ZN18CPSPresetInterface19CreateTransactionLCEv @ 14 NONAME
+	_ZN18CPSPresetInterface20HandlePresetChangedLEi4TUidN17MPSPresetObserver9TPSReasonE @ 15 NONAME
+	_ZN18CPSPresetInterface7CommitLEv @ 16 NONAME
+	_ZN18CPSPresetInterface8RollbackEv @ 17 NONAME
+	_ZN18CPSPresetInterface8SetIndexEi @ 18 NONAME
+	_ZN18CPSPresetInterface8SetNameLERK7TDesC16 @ 19 NONAME
+	_ZN18CPSPresetInterfaceD0Ev @ 20 NONAME
+	_ZN18CPSPresetInterfaceD1Ev @ 21 NONAME
+	_ZN18CPSPresetInterfaceD2Ev @ 22 NONAME
+	_ZN7RPSServ11GetPresetsLER13RPointerArrayI18CPSPresetInterfaceE @ 23 NONAME
+	_ZN7RPSServ11MovePresetLEii @ 24 NONAME
+	_ZN7RPSServ11OpenPresetLEi @ 25 NONAME
+	_ZN7RPSServ13CreatePresetLEi4TUid @ 26 NONAME
+	_ZN7RPSServ13DeletePresetLEi @ 27 NONAME
+	_ZN7RPSServ5CloseEv @ 28 NONAME
+	_ZN7RPSServ7ConnectEv @ 29 NONAME
+	_ZN7RPSServC1Ev @ 30 NONAME
+	_ZN7RPSServC2Ev @ 31 NONAME
+	_ZNK18CPSPresetInterface11DataHandlerEv @ 32 NONAME
+	_ZNK18CPSPresetInterface2IdEv @ 33 NONAME
+	_ZNK18CPSPresetInterface4NameEv @ 34 NONAME
+	_ZNK18CPSPresetInterface5IndexEv @ 35 NONAME
+	_ZTI18CPSPresetInterface @ 36 NONAME ; #<TI>#
+	_ZTV18CPSPresetInterface @ 37 NONAME ; #<VT>#
+	_ZThn4_N18CPSPresetInterface20HandlePresetChangedLEi4TUidN17MPSPresetObserver9TPSReasonE @ 38 NONAME ; #<thunk>#
+	_ZThn8_N18CPSPresetInterface17BeginTransactionLEv @ 39 NONAME ; #<thunk>#
+	_ZThn8_N18CPSPresetInterface7CommitLEv @ 40 NONAME ; #<thunk>#
+	_ZThn8_N18CPSPresetInterface8RollbackEv @ 41 NONAME ; #<thunk>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/group/backup_registration.xml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,8 @@
+<?xml version = "1.0" standalone = "yes"?>
+<backup_registration version = "1.0">
+  <system_backup/>
+  <passive_backup>
+    <include_file name = "pspresets.db"/>
+  </passive_backup>
+  <restore requires_reboot = "no"/>
+</backup_registration>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/group/bld.inf	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006-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:  Build information file for project PresetServer
+*
+*/
+
+#include    <platform_paths.hrh>
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+../clientinc/pspresetinterface.h            /epoc32/include/pspresetinterface.h
+../clientinc/pspresetnotifier.h             /epoc32/include/pspresetnotifier.h
+../clientinc/psserv.h                       /epoc32/include/psserv.h
+../clientinc/psserv.inl                     /epoc32/include/psserv.inl
+../clientinc/pstransaction.h                /epoc32/include/pstransaction.h
+../include/pscommon.h                       /epoc32/include/pscommon.h
+../serverinc/pspresetobserver.h             /epoc32/include/pspresetobserver.h
+
+backup_registration.xml /epoc32/data/z/private/10281cb5/backup_registration.xml
+
+../rom/presetserver.iby                     CORE_APP_LAYER_IBY_EXPORT_PATH(presetserver.iby)
+
+
+PRJ_MMPFILES
+psserver.mmp
+psclient.mmp
+psrfsplugin.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/group/psclient.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2006-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:  Project definition file for project PresetClient
+*
+*/
+
+#include <platform_paths.hrh>
+ 
+TARGET                  psclient100.dll
+TARGETTYPE              DLL
+UID                     0x1000008D 0x10281CB4
+#ifdef __S60_50__
+VERSION                 10.0
+#endif //__S60_50__
+
+CAPABILITY              CAP_CLIENT_DLL
+VENDORID                VID_DEFAULT
+
+#ifdef __S60_50__
+PAGED
+#endif //__S60_50__
+
+SOURCEPATH              ../clientsrc
+SOURCE                  Pspresetinterface.cpp
+SOURCE                  Pspresetnotifier.cpp
+SOURCE                  Psserv.cpp
+SOURCE                  Psservnotifier.cpp
+SOURCE                  Psservsession.cpp
+SOURCE                  Pstransaction.cpp
+
+USERINCLUDE             ../clientinc
+USERINCLUDE             ../include
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+LIBRARY                 ecom.lib
+LIBRARY                 euser.lib
+LIBRARY                 estor.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/group/psrfsplugin.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2007-2007 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:  Project definition file for project Preset Server RFS plugin.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET                  psrfsplugin.dll
+TARGETTYPE              PLUGIN
+UID                     0x10009D8D 0x10282BB2
+
+CAPABILITY              CAP_ECOM_PLUGIN
+VENDORID                VID_DEFAULT
+
+#ifdef __S60_50__
+PAGED
+#endif //__S60_50__
+
+SOURCEPATH              ../rfspluginsrc
+SOURCE                  Psrfsplugin.cpp
+SOURCE                  Psrfspluginproxy.cpp
+
+SOURCEPATH              ../resources
+START RESOURCE          10282bb2.rss
+TARGET                  psrfsplugin.rsc
+END // RESOURCE
+
+USERINCLUDE             ../include
+USERINCLUDE             ../rfsplugininc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+
+LIBRARY                 ecom.lib
+LIBRARY                 efsrv.lib
+LIBRARY                 euser.lib
+LIBRARY                 platformenv.lib
+LIBRARY        		bafl.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/group/psserver.mmp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006-2007 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:  Project definition file for project PresetServer
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET                  psserver.exe
+TARGETTYPE              EXE
+#ifdef __S60_50__
+EPOCHEAPSIZE            0x1000 0x300000 // 4KB - 3MB
+#endif //__S60_50__
+UID                     0x1000008D 0x10281CB5
+#ifdef __S60_50__
+VERSION                 10.0
+#endif //__S60_50__
+
+CAPABILITY              None
+VENDORID                VID_DEFAULT
+
+#ifdef __S60_50__
+PAGED
+#endif //__S60_50__
+
+SOURCEPATH              ../serversrc
+SOURCE                  Psdatabase.cpp
+SOURCE                  Psdatabasecleanup.cpp
+SOURCE                  Pspendingpreset.cpp
+SOURCE                  Psscheduler.cpp
+SOURCE                  Psserver.cpp
+SOURCE                  Pssession.cpp
+SOURCE                  Psshutdown.cpp
+SOURCE                  Pspropertyobserver.cpp
+
+USERINCLUDE             ../include
+USERINCLUDE             ../serverinc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
+SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(connect)
+
+LIBRARY                 bafl.lib
+LIBRARY                 ecom.lib
+LIBRARY                 edbms.lib
+LIBRARY                 efsrv.lib
+LIBRARY                 estor.lib
+LIBRARY                 euser.lib
+LIBRARY                 platformenv.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/include/pscommon.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2006-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:  Common client-server header file for the Preset Server
+*
+*/
+
+
+#ifndef PSCOMMON_H
+#define PSCOMMON_H
+
+#include <e32std.h>
+#include <pspresetobserver.h>
+
+const TInt KPSVersionMajor = 1;     /**< Major version number of the server. */
+const TInt KPSVersionMinor = 0;     /**< Minor version number of the server. */
+const TInt KPSVersionBuild = 0;     /**< Build version number of the server. */
+
+_LIT( KPSServerExe, "psserver.exe" );           /**< Name of the preset server executable. */
+_LIT( KPSServerName, "PresetServer" );          /**< Name of the preset server process. */
+
+/**
+ * Notification package struct.
+ *
+ * Used when a preset change notification is requested or completed.
+ */
+typedef struct
+    {
+    /** Identifier of the preset the observer is interested in, or <code>KErrNotFound</code> if all changes should be notified. */
+    TInt iId;
+    /** Data handler of the preset (UID of the ECom plugin that handles this kind of presets). */
+    TUid iDataHandler;
+    /** Reason for the change. */
+    MPSPresetObserver::TPSReason iReason;
+    /** Unique identifier for the notification. */
+    TUint64 iNotificationId;
+    /** Universal time for this notification's origin. This is not used in the client-server communication and can be omitted. */
+    TTime iNotificationTime;
+    } TPSNotifyDataPackage;
+
+/**
+ * Client-server operation codes.
+ */
+enum TPSOpCode
+    {
+
+    /**
+     * Creates a new preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Index of the preset to create.
+     *  [IN]    Int1    Data handler of the preset to create.
+     *  [OUT]   Int2    Id of the preset that was created.
+     */
+    EPSOpCreatePreset,         
+
+    /**
+     * Deletes a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset to delete.
+     */
+    EPSOpDeletePreset,
+
+    /**
+     * Starts an explicit read/write transaction with a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     */
+    EPSOpStartTransaction,
+
+    /**
+     * Commits the changes made to a preset during a transaction.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     */
+    EPSOpCommitTransaction,
+
+    /**
+     * Reverts all changes made to a preset during a transaction.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     */
+    EPSOpRollbackTransaction,
+
+    /**
+     * Moves a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     *  [IN]    Int1    Destination index of the preset.
+     */
+    EPSOpMovePreset,
+
+    /**
+     * Notifies on preset changes.
+     *
+     * Parameters:
+     *  [IN]    Int0    Pointer to the notifier as an integer.
+     *  [IN]    Int1    ID of the preset to observe, or <code>KErrNotFound</code>
+                        if all changes should result in a notification.
+     *  [IN]    Ptr2    Packed data of type TPSNotifyDataPackage.
+     */
+    EPSOpNotify,
+
+    /**
+     * Cancels a pending notification of a preset change.
+     *
+     * Parameters:
+     *  [IN]    Int0    Pointer to the notifier as an integer.
+     */
+    EPSOpCancelNotify,
+
+    /**
+     * Sets the name of a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     *  [IN]    Ptr1    Name of the preset.
+     */
+    EPSOpSetPresetName,
+
+    /**
+     * Sets the index of a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     *  [IN]    Int1    Index to set.
+     */
+    EPSOpSetPresetIndex,
+
+    /**
+     * Sets the data of a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     *  [IN]    Ptr1    Data to set.
+     */
+    EPSOpSetPresetData,
+
+    /**
+     * Gets the name of a preset.
+     * 
+     * Parameters:
+     * [IN]     Int0    The id of the preset.
+     * [OUT]    Ptr1    The name of the preset.
+     */
+    EPSOpGetPresetName,
+
+    /**
+     * Gets the length of a preset's name.
+     * 
+     * Parameters:
+     * [IN]     Int0    Id of the preset.
+     * [OUT]    Int1    Length of the preset's name.
+     */
+    EPSOpGetPresetNameLength,
+
+    /**
+     * Gets the index of a preset.
+     *
+     * Parameters:
+     * [IN]     Int0    Id of the preset.
+     * [OUT]    Int1    Index of the preset.
+     */
+    EPSOpGetPresetIndex,
+
+    /**
+     * Gets the data handler of a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     *  [OUT]   Int1    Data handler of the preset.
+     */
+    EPSOpGetPresetDataHandler,
+
+    /**
+     * Gets the data of a preset.
+     *
+     * Parameters:
+     *  [IN]    Int0    Id of the preset.
+     *  [OUT]   Ptr1    Data of the preset.
+     */
+    EPSOpGetPresetData,
+
+    /**
+     * Gets the length of a preset's data.
+     * 
+     * Parameters:
+     * [IN]     Int0    Id of the preset.
+     * [OUT]    Int1    Length of the preset's data.
+     */
+    EPSOpGetPresetDataLength,
+
+    /**
+     * Gets an array of preset ids.
+     *
+     * Parameters:
+     *  [IN]    Int0    Data handler of the presets.
+     *  [OUT]   Ptr1    Preset ids matching the data handler.
+     */
+    EPSOpGetPresets,
+
+    /**
+     * Gets the length of the preset array.
+     * 
+     * Parameters:
+     *  [IN]    Int0    Data handler of the presets.
+     *  [OUT]   Int1    Length of the array.
+     */
+    EPSOpGetPresetsLength
+
+    };
+
+#endif // PSCOMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/include/psdebug.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2006-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:  Debug header file for Preset Server.
+*
+*/
+
+
+#ifndef PSDEBUG_H
+#define PSDEBUG_H
+
+#include <e32svr.h>
+
+// Define PS_ALL_DEBUG to get debug output from Preset Server.
+// It is automatically enabled for debug builds.
+// #define PS_ALL_DEBUG
+
+#ifdef _DEBUG
+#ifndef PS_ALL_DEBUG
+#define PS_ALL_DEBUG
+#endif // PS_ALL_DEBUG
+#endif // _DEBUG
+
+#ifdef PS_ALL_DEBUG
+    #define PSDEBUG( a ) RDebug::Print( _L( a ) )
+    #define PSDEBUG2( a, b ) RDebug::Print( _L( a ), b )
+    #define PSDEBUG3( a, b, c ) RDebug::Print( _L( a ), b, c )
+    #define PSDEBUG4( a, b, c, d ) RDebug::Print( _L( a ), b, c, d )
+    #define PSDEBUG5( a, b, c, d, e ) RDebug::Print( _L( a ), b, c, d, e )
+    #define PSDEBUGVAR( a ) a
+#else
+    #define PSDEBUG( a )
+    #define PSDEBUG2( a, b )
+    #define PSDEBUG3( a, b, c )
+    #define PSDEBUG4( a, b, c, d ) 
+    #define PSDEBUG5( a, b, c, d, e )
+    #define PSDEBUGVAR( a )
+#endif // PS_ALL_DEBUG
+
+#endif // PSDEBUG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/include/psutils.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2007-2007 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:  Common utility methods.
+*
+*/
+
+
+#ifndef PSUTILS_H
+#define PSUTILS_H
+
+#include <f32file.h>
+#include <pathinfo.h>
+
+#include "psdebug.h"
+
+/**
+ * Static class that provides common utility methods.
+ */
+class PSUtils
+    {
+
+public:
+
+    /**
+     * Gets the full file name and path to the preset database file.
+     *
+     * @param   aFullName       On return, contains the full file name and path
+     *                          to the database file.
+     */
+    inline static void GetDatabaseFullNameL( TFileName& aFullName );
+
+    };
+    
+#include "psutils.inl"
+
+#endif // PSUTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/include/psutils.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2007-2007 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:  Common utility methods.
+*
+*/
+
+
+#if defined __SERIES60_30__ || defined __SERIES60_31__
+_LIT( KPSDatabaseFileName, "\\data\\pspresets.db" );    // File name of the preset database.
+#else
+_LIT( KPSDatabaseFileName, "pspresets.db" );            // File name of the preset database.
+#endif
+
+// ---------------------------------------------------------------------------
+// Gets the full file name and path to the preset database file.
+// ---------------------------------------------------------------------------
+//
+inline void PSUtils::GetDatabaseFullNameL( TFileName& aFullName )
+    {
+    PSDEBUG( "PSUtils::GetDatabaseFullNameL( TFileName& ) - Enter" );
+
+    TParsePtrC phoneMemoryRootPath( PathInfo::PhoneMemoryRootPath() );
+    TPtrC drive( phoneMemoryRootPath.Drive() );
+
+    TParse parse;
+
+#if defined __SERIES60_30__ || defined __SERIES60_31__
+    parse.Set( KPSDatabaseFileName, &drive, NULL );
+#else
+    // The database file resides in the server's private directory from 3.2 onwards.
+    TFileName privatePath;
+    
+    RFs fsSession;
+    User::LeaveIfError( fsSession.Connect() );
+    CleanupClosePushL( fsSession );
+    
+    User::LeaveIfError( fsSession.PrivatePath( privatePath ) );
+    parse.Set( privatePath, &KPSDatabaseFileName, &drive );
+
+    CleanupStack::PopAndDestroy( &fsSession );
+#endif
+
+    aFullName = parse.FullName();
+
+    PSDEBUG2( "PSUtils::GetDatabaseFullNameL( aFullName = %S ) - Exit", &aFullName );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/resources/10282bb2.rss	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 1028 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:  Resource definitions for project Preset Server RFS plugin
+*
+*/
+
+
+#include <registryinfo.rh>
+
+// ---------------------------------------------------------------------------
+// r_ps_rfs_plugin_registry_info
+// Registry info for the Preset Server RFS ECOM plugin.
+// ---------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO r_ps_rfs_plugin_registry_info
+    {
+    dll_uid = 0x10282BB2;
+    interfaces =
+        {
+        INTERFACE_INFO
+            {
+            interface_uid = 0x102073BB;
+            implementations =
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = 0x10282BB3;
+                    version_no = 1;
+                    display_name = "Preset Server RFS Plugin";
+                    default_data = "N"; // Normal RFS.
+                    opaque_data = "";
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/rfsplugininc/psrfsplugin.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007-2007 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:  RFS ECOM plugin for Preset Server
+*
+*/
+
+
+#ifndef C_PSRRFSPLUGIN_H
+#define C_PSRRFSPLUGIN_H
+
+#include <rfsPlugin.h>
+
+/**
+ *  Preset Server RFS ECOM plugin implementation.
+ *
+ *  Handles deleting of Preset Server files when RFS operation is invoked.
+ *
+ *  @since S60 v3.2
+ */
+class CPSRfsPlugin : public CRFSPlugin
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @since   S60 v3.2
+     * @param   aInitParams   Initialisation parameters.
+     * @return  The created object.
+     */
+    static CPSRfsPlugin* NewL( TAny* aInitParams );
+
+    /**
+     * Destructor.
+     *
+     * @since   S60 v3.2
+     */
+    ~CPSRfsPlugin();
+
+private:
+
+    /**
+     * Constructor.
+     *
+     * @since   S60 v3.2
+     * @param   aInitParams   Initialisation parameters.
+     */
+    CPSRfsPlugin( TAny* aInitParams );
+
+    /**
+     * Second-phase constructor.
+     *
+     * @since   S60 v3.2
+     */
+    void ConstructL();
+
+// from base class CRFSPlugin
+
+    void RestoreFactorySettingsL( const TRfsReason aType );
+    void GetScriptL( const TRfsReason aType, TDes& aPath );
+    void ExecuteCustomCommandL( const TRfsReason aType, TDesC& aCommand );
+
+    /**
+     * Resolves the most recently updated location for a file.
+     * The paths searched are, in order, RAM and MMC.
+     * 
+     * @param   aFs         The file server session to use.
+     * @param   aFileName   The file name of the file which is wanted to find.
+     *                      On return, will contain the full path to the file.
+     * @param   aPath       The absolute path to the file. If drive letter is
+     *                      given then that one will be first tried. 
+     * @return KErrNotFound if the file is not found, otherwise KErrNone
+     */
+    TInt ResolveDrive( RFs& aFs, TFileName& aFileName, const TFileName& aPath );
+    
+    
+    };
+
+#endif // C_CPSRFSPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/rfspluginsrc/Psrfsplugin.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2007-2007 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:  Preset Server RFS ECOM plugin implementation
+*
+*/
+
+
+#include "psdebug.h"
+#include "psrfsplugin.h"
+#include <bautils.h>
+
+_LIT( KPSDatabaseFileName, "pspresets.db" );    // File name of the preset database.
+#if defined __SERIES60_30__ || defined __SERIES60_31__
+_LIT( KPSDatabasePath, "\\data\\" );    // File name of the preset database.
+#else
+_LIT( KPSDatabasePath, "\\private\\10281cb5\\" );            // File name of the preset database.
+#endif
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSRfsPlugin* CPSRfsPlugin::NewL( TAny* aInitParams )
+    {
+    CPSRfsPlugin* self = new ( ELeave ) CPSRfsPlugin( aInitParams );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSRfsPlugin::CPSRfsPlugin( TAny* /*aInitParams*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSRfsPlugin::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CPSRfsPlugin::~CPSRfsPlugin()
+    {
+    // Base class handles the ECOM cleanup.
+    }
+
+// ---------------------------------------------------------------------------
+// From base class CRFSPlugin
+// ---------------------------------------------------------------------------
+//
+void CPSRfsPlugin::RestoreFactorySettingsL( const TRfsReason aType )
+    {
+    PSDEBUG(" *** CPSRfsPlugin::RestoreFactorySettingsL - Enter" );
+    if ( aType == ENormalRfs )
+        {
+        PSDEBUG(" *** CPSRfsPlugin::RestoreFactorySettingsL - Deleting Preset Server files" );
+
+        TFileName databaseFullName( KPSDatabaseFileName );
+         
+        RFs fsSession;
+        User::LeaveIfError( fsSession.Connect() );
+        CleanupClosePushL( fsSession );
+        
+        TInt err = ResolveDrive( fsSession, databaseFullName, KPSDatabasePath() );
+        
+        if ( err == KErrNone )
+            {
+            err = fsSession.Delete( databaseFullName );
+            PSDEBUG3(" *** CPSRfsPlugin::RestoreFactorySettingsL - Deleted preset database (file = %S, err = %d)", &databaseFullName, err );
+            }
+        else
+            {
+            PSDEBUG2(" *** CPSRfsPlugin::RestoreFactorySettingsL - err = %d)", err );
+            }
+        CleanupStack::PopAndDestroy( &fsSession );
+        }
+    else
+        {
+        PSDEBUG2(" *** CPSRfsPlugin::RestoreFactorySettingsL - RFS type (%d) not supported", static_cast<TInt>( aType ) );
+        }
+    PSDEBUG(" *** CPSRfsPlugin::RestoreFactorySettingsL - Exit" );
+    }
+
+// ---------------------------------------------------------------------------
+// From base class CRFSPlugin
+// ---------------------------------------------------------------------------
+//
+void CPSRfsPlugin::GetScriptL( const TRfsReason /*aType*/, TDes& aPath )
+    {
+    aPath.Zero();
+    }
+
+// ---------------------------------------------------------------------------
+// From base class CRFSPlugin
+// ---------------------------------------------------------------------------
+//
+void CPSRfsPlugin::ExecuteCustomCommandL( const TRfsReason /*aType*/, TDesC& /*aCommand*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ResolveDrive
+// ---------------------------------------------------------------------------
+//
+TInt CPSRfsPlugin::ResolveDrive( RFs& aFs, TFileName& aFileName, const TFileName& aPath )
+    {
+    PSDEBUG3( "*** CPSRfsPlugin::ResolveDrive( aFileName = %S, aPath = %s )", &aFileName, &aPath );
+
+    TFindFile finder( aFs );
+    TInt err = finder.FindByDir( aFileName, aPath );
+    if ( err )
+        {
+        PSDEBUG3( "*** CPSRfsPlugin::ResolveDrive - File '%S%S' not found!", &aPath, &aFileName );
+        return KErrNotFound;
+        }
+    
+    aFileName.Copy( finder.File() );
+    PSDEBUG2("*** CPSRfsPlugin::ResolveDrive( aFileName = %S )", &aFileName );
+    return KErrNone;
+    }
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/rfspluginsrc/Psrfspluginproxy.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007-2007 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 of the RFS ECOM plugin proxy
+*
+*/
+
+
+#include <implementationproxy.h>
+
+#include "psrfsplugin.h"
+
+// The implementation proxy table that lists all interfaces and their implementations contained within this plugin.
+const TImplementationProxy KPSRfsPluginImplementationTable[] =
+    {
+    /*lint -save -e611 (Warning -- Suspicious cast)*/
+    IMPLEMENTATION_PROXY_ENTRY( 0x10282BB3, CPSRfsPlugin::NewL )
+    /*lint -restore*/
+    };
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ======== GLOBAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Entry point for ECOM plugins.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof( KPSRfsPluginImplementationTable ) / sizeof( TImplementationProxy );
+    return KPSRfsPluginImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/rom/presetserver.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2007-2007 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:  Image description file for project PresetServer
+*
+*/
+
+
+#ifndef PRESETSERVER_IBY
+#define PRESETSERVER_IBY
+
+S60_APP_EXE(psserver)
+
+file = ABI_DIR\BUILD_DIR\psclient100.dll            SHARED_LIB_DIR\psclient100.dll
+
+data = DATAZ_\SYSTEM\install\presetserver.sis       SYSTEM\install\presetserver.sis
+data = ZPRIVATE\10281cb5\backup_registration.xml    PRIVATE\10281cb5\backup_registration.xml
+
+ECOM_PLUGIN(psrfsplugin.dll, 10282bb2.rsc)
+
+#endif // PRESETSERVER_IBY
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/psdatabase.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-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:  Preset database used by the preset server
+*
+*/
+
+
+#ifndef R_PSDATABASE_H
+#define R_PSDATABASE_H
+
+#include <d32dbms.h>
+
+class CPSPendingPreset;
+class MPSPresetObserver;
+
+/**
+ * Preset database used by the preset server.
+ *
+ * Handles all database related functionality related to saving and retrieving presets.
+ */
+NONSHARABLE_CLASS( RPSDatabase ) : public RDbNamedDatabase
+    {
+
+public:
+
+    /**
+     * Constructor.
+     *
+     * @param   aObserver   The observer to notify when the database is changed.
+     */
+    RPSDatabase( MPSPresetObserver& aObserver );
+
+    /**
+     * Opens an existing database or creates a new one if it doesn't exist already.
+     *
+     * The directory supplied is created if it doesn't exist.
+     *
+     * @param   aFs         File server session.
+     * @param   aFileName   Full path and file name to the database.
+     */
+    void OpenL( RFs& aFs, const TDesC& aFileName );
+
+    /**
+     * Deletes presets from the database that have no data handler installed for them.
+     *
+     * @param   aDataHandlers       Currently installed data handlers.
+     */
+    void DeleteOrphanedPresetsL( const RArray<TInt>& aDataHandlers );
+
+    /**
+     * Gets a list of presets matching the supplied data handler.
+     *
+     * If <code>KNullUid</code> is supplied as the data handler, all presets from the database are retrieved.
+     *
+     * @param   aPresets        On return, the presets matching the data handler supplied.
+     * @param   aDataHandler    Data handler for the presets, or <code>KNullUid</code> if all presets are to be retrieved.
+     */
+    void GetPresetListL( RArray<TInt>& aPresets, TUid aDataHandler );
+
+    /**
+     * Inserts a new preset into the database.
+     *
+     * The preset with the supplied data handler and index must not exist in the database,
+     * or the call will leave with <code>KErrAlreadyExists</code>.
+     *
+     * @param   aIndex          Index of the preset.
+     * @param   aDataHandler    Data handler of the preset.
+     * @return  The ID of the created preset.
+     */
+    TInt CreatePresetL( TInt aIndex, TUid aDataHandler );
+
+    /**
+     * Deletes a preset from the database.
+     *
+     * @param   aId     ID of the preset to delete.
+     */
+    void DeletePresetL( TInt aId );
+    
+    /**
+     * Commits a pending preset to the database.
+     *
+     * @param   aPreset     The preset to commit.
+     */
+    void CommitPresetL( const CPSPendingPreset& aPreset );
+
+    /**
+     * Moves a preset in the database.
+     *
+     * @param   aId                 ID of the preset to move.
+     * @param   aDestinationIndex   Index to move the preset to.
+     */
+    void MovePresetL( TInt aId, TInt aDestinationIndex );
+
+    /**
+     * Returns the name of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Name of the preset, ownership is transferred to the caller.
+     */
+    HBufC* PresetNameL( TInt aId );
+
+    /**
+     * Returns the length of a preset's name.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Length of the preset's name.
+     */
+    TInt PresetNameLengthL( TInt aId );
+
+    /**
+     * Returns the index of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Index of the preset.
+     */
+    TInt PresetIndexL( TInt aId );
+
+    /**
+     * Returns the data handler of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Data handler of the preset.
+     */
+    TUid PresetDataHandlerL( TInt aId );
+
+    /**
+     * Returns the data of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Data of the preset, ownership is transferred to the caller.
+     */
+    HBufC8* PresetDataL( TInt aId );    
+
+    /**
+     * Returns the length of a preset's data.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Length of the preset's data.
+     */
+    TInt PresetDataLengthL( TInt aId );
+
+private:
+
+    /**
+     * Returns the length of a column in the database.
+     *
+     * @param   aColumn     The column to return the length of.
+     * @param   aId         ID of the preset.
+     * @return  Length of the column.
+     */
+    TInt ColumnLengthL( const TDesC& aColumn, TInt aId );
+
+    /**
+     * Returns the current database version.
+     *
+     * @return  The current database version.
+     */
+    TInt CurrentDatabaseVersionL();
+
+    /**
+     * Updates the database version.
+     *
+     * @param   aVersion    Dtabase version to update to.
+     */
+    void UpdateDatabaseVersionL( TInt aVersion );
+
+    /**
+     * Runs all update functions on the database.
+     */
+    void UpdateDatabaseL();
+
+    /**
+     * Database version 1 update function.
+     *
+     * Creates the tables in the database as they were defined.
+     */
+    void CreateTablesL();
+
+    /**
+     * Prints database information to debug output.
+     */
+    void PrintDatabaseL();
+
+private:
+
+    /** The observer that is notified upon changes in the database. */
+    MPSPresetObserver& iObserver;
+
+    /** Database update function pointer. */
+    typedef void (RPSDatabase::*KPSDatabaseUpdateFunction)();
+    
+    /** Supported database update functions. */
+    static const KPSDatabaseUpdateFunction iDatabaseUpdateFunctions[];
+
+    };
+
+#endif // R_PSDATABASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/psdatabasecleanup.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2006-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:  Handles periodical database cleanup routines
+*
+*/
+
+
+#ifndef C_CPSDATABASECLEANUP_H
+#define C_CPSDATABASECLEANUP_H
+
+#include <e32base.h>
+
+class RPSDatabase;
+
+/**
+ * Handles periodical database cleanup routines.
+ */
+NONSHARABLE_CLASS( CPSDatabaseCleanup ) : public CTimer
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param   aDatabase   The preset database to use.
+     * @return  The newly created object.
+     */
+    static CPSDatabaseCleanup* NewL( RPSDatabase& aDatabase );
+
+    /**
+     * Destructor.
+     */
+    ~CPSDatabaseCleanup();
+    
+    /**
+     * Requests database cleanup asynchronously.
+     *
+     */
+    void RequestCleanupCheck();
+
+private:
+
+    /**
+     * Constructor.
+     *
+     * @param   aDatabase   The preset database to use.
+     */
+    CPSDatabaseCleanup( RPSDatabase& aDatabase );
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Deletes orphaned presets from the database.
+     */
+    void DeleteOrphanedPresetsL();
+
+// from base class CTimer
+
+    /**
+     * @see CTimer::RunL().
+     */
+    void RunL();
+
+private:
+
+    /** The preset database. */
+    RPSDatabase& iDatabase;
+    
+    };
+
+#endif // C_CPSDATABASECLEANUP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/pspendingpreset.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006-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:  Represents a pending preset that has not yet been committed
+*
+*/
+
+
+#ifndef C_CPSPENDINGPRESET_H
+#define C_CPSPENDINGPRESET_H
+
+#include <e32base.h>
+
+/**
+ * Represents a pending preset that has not yet been committed.
+ */
+NONSHARABLE_CLASS( CPSPendingPreset ) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param   aId     Id of the preset.
+     */
+    static CPSPendingPreset* NewL( TInt aId );
+
+    /**
+     * Destructor.
+     */
+    ~CPSPendingPreset();
+
+    /**
+     * Returns the id of the preset.
+     *
+     * @return  Id of the preset.
+     */    
+    TInt Id() const;
+
+    /**
+     * Sets the index of the preset.
+     *
+     * @param   aIndex      Index of the preset.
+     */    
+    void SetIndex( TInt aIndex );
+
+    /**
+     * Returns the index of the preset.
+     *
+     * @return  Index of the preset.
+     */    
+    TInt Index() const;
+
+    /**
+     * Sets the name of the preset.
+     *
+     * @param   aName       Name of the preset.
+     */
+    void SetNameL( const TDesC& aName );
+
+    /**
+     * Returns the name of the preset.
+     *
+     * @return  Name of the preset.
+     */
+    const TDesC& Name() const;    
+
+    /**
+     * Sets the data of the preset.
+     *
+     * @param   aData       Data of the preset.
+     */    
+    void SetDataL( const TDesC8& aData );
+
+    /**
+     * Returns the data of the preset.
+     *
+     * @return  Data of the preset.
+     */    
+    const TDesC8& Data() const;
+    
+private:
+
+    /**
+     * Constructor.
+     *
+     * @param   aId     Id of the preset.
+     */
+    CPSPendingPreset( TInt aId );
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+private:
+
+    /** Id of the preset. */
+    TInt iId;
+    /** Index of the preset. */
+    TInt iIndex;
+    /** Name of the preset. */
+    RBuf iName;
+    /** Data of the preset. */
+    RBuf8 iData;
+
+    };
+
+#endif // C_CPSPENDINGPRESET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/pspresetobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2006-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:  Observer interface to notify of preset changes
+*
+*/
+
+
+#ifndef M_MPSPRESETOBSERVER_H
+#define M_MPSPRESETOBSERVER_H
+
+#include <e32base.h>
+
+/**
+ * Observer interface to notify of preset changes.
+ */
+class MPSPresetObserver
+    {
+
+public:
+
+    /**
+     * Possible reasons indicating why the preset was changed.
+     */
+    enum TPSReason
+        {
+
+        /**
+         * The preset was created.
+         */
+        EPSCreated,
+
+        /**
+         * The preset was deleted.
+         */
+        EPSDeleted,
+
+        /**
+         * The preset was modified.
+         */
+        EPSModified
+
+        };
+
+public:
+
+    /**
+     * Invoked when a preset has been changed.
+     *
+     * @param   aId             Id of the preset that was changed.
+     * @param   aDataHandler    Data handler of the preset that was changed.
+     * @param   aType           Reason for the change.
+     */
+    virtual void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aType ) = 0;
+
+    };
+
+#endif // M_MPSPRESETOBSERVER_H
+			   
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/pspropertyobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2005-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:  Observer for Publish & Subscribe keys
+*
+*/
+
+
+#ifndef CPSPROPERTYOBSERVER_H
+#define CPSPROPERTYOBSERVER_H
+
+#include <e32base.h>
+#include <e32property.h>
+
+/** 
+ * Defines text property with maximum size, that is RProperty::
+ * KKMaxPropertySize bytes. 
+ */
+typedef TBuf8<RProperty::KMaxPropertySize> TPSTextProperty;
+
+/**
+ * MPSPropertyChangeObserver
+ *
+ * Abstract interface for handling property change events.
+ */
+class MPSPropertyChangeObserver
+{
+
+public:
+ 
+    /**
+     * This is a callback function which is called when a property value of 
+     * type int is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     *
+     * @param aValue the new value
+     */
+    virtual void HandlePropertyChangeL(
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TInt aValue ) = 0;
+    
+    /**
+     * This is a callback function which is called when a property value of 
+     * type text is changed.
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aValue the new value
+     **/
+    /*lint -save -e1053*/
+    virtual void HandlePropertyChangeL( 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const TPSTextProperty& aValue ) = 0;
+    /*lint -restore*/
+    
+    /**
+     * This is a callback function which is called when a P&S components 
+     * returns an error
+     *
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event
+     * @param aError an error code
+     */
+    virtual void HandlePropertyChangeErrorL(
+        const TUid& aCategory, 
+        const TUint aKey, 
+        TInt aError) = 0;
+    
+};
+
+
+
+/**
+ * Observer class that observes changes of Property values and propogates 
+ * them further.
+ * The class defines a handle to a property, a single data value representing
+ * an item of state information.
+ *
+ */
+ class CPSPropertyObserver : public CActive
+	{  
+	
+ public:  // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+    static CPSPropertyObserver* NewL(
+        MPSPropertyChangeObserver& aObserver, 
+        const TUid& aCategory, 
+        const TUint aKey, 
+        const RProperty::TType aPropertyType);
+
+    /**
+     * Destructor.
+     */
+    ~CPSPropertyObserver();
+    
+    /**
+     * Updates an int value reference in correspondence with the current 
+     * Property value
+     *
+     * @param aValue handle to a value which will be updated
+     **/	
+	void GetValue( TInt& aValue ) const;
+	
+	/**
+     * Updates a text value reference in correspondence with the current 
+     * Property value
+     *
+     * @param aValue handle to a value which will be updated
+     */	
+    /*lint -save -e1053*/
+	void GetValue( TPSTextProperty& aValue ) const;
+    /*lint -restore*/
+		
+private:
+
+    /**
+     * C++ default constructor overload.
+     * Two-phased constructor.
+     *
+     * @param aObserver a reference to the observer interface implementer
+     * @param aCategory UID of Publish And Subscribe category
+     * @param aKey subkey to specify the category event; to be used with 
+     * Publish And Subscribe
+     * @param aPropertyType property type to observe
+     */
+	CPSPropertyObserver(
+	    MPSPropertyChangeObserver& aObserver, 
+	    const TUid& aCategory, 
+	    const TUint aKey, 
+	    const RProperty::TType aPropertyType);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     **/
+    void ConstructL();
+
+protected:  
+    
+    // from base class Cactive
+    /**
+     * From CActive
+     *
+     * @see CActive::RunL()
+     */
+    void RunL();
+
+    /**
+     * From CActive, 
+     * 
+     * @see CActive::DoCancel()
+     */
+    void DoCancel();
+
+private:  
+
+ 	/** 
+ 	 * Value of a subscribed category property of type int. 
+ 	 */
+ 	TInt iValueInt;
+ 	
+ 	/** 
+ 	 * Value of a subscribed category property of type text. 
+ 	 */
+ 	TPSTextProperty iValueText;
+ 	
+    /** 
+     * Handle to Publish And Subscribe component
+     */ 
+    RProperty iProperty;
+    
+    /**
+     * Observer to be notified when particular Property value has changed
+     */
+    MPSPropertyChangeObserver& iObserver;
+    
+    /** 
+     * UID of Publish And Subscribe category
+     */
+    TUid iCategory;
+    
+    /**
+     * Subkey to be used with Publish And Subscribe
+     */
+    TUint iKey;
+    
+    /** 
+     * Type of the observed property. 
+     */
+    RProperty::TType iPropertyType;
+    
+	};
+
+#endif  // CPSPROPERTYOBSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/psscheduler.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2006-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:  Custom active scheduler for the preset server
+*
+*/
+
+
+#ifndef C_CPSSCHEDULER_H
+#define C_CPSSCHEDULER_H
+
+#include <e32base.h>
+
+class CPSServer;
+
+/**
+ * Custom active scheduler for the preset server.
+ */
+NONSHARABLE_CLASS( CPSScheduler ) : public CActiveScheduler
+    {
+
+public:
+
+    /**
+     * Constructor.
+     */
+    CPSScheduler();
+
+    /**
+     * Destructor.
+     */
+    ~CPSScheduler();    
+
+    /**
+     * Sets the server to use.
+     *
+     * @param   aServer     The server to use.
+     */
+    void SetServer( CPSServer* aServer );
+
+// from CActiveScheduler
+
+    /**
+     * @see CActiveScheduler::Error( TInt aError ) const
+     */
+    void Error( TInt aError ) const;
+    
+private:
+
+    /** The preset server. */
+    CPSServer* iServer;
+    
+    };
+
+#endif // C_CPSSCHEDULER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/psserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2006-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:  Implementation of the preset server
+*
+*/
+
+
+#ifndef C_CPSSERVER_H
+#define C_CPSSERVER_H
+
+#include <pscommon.h>
+#include <pspresetobserver.h>
+
+#include "psdatabase.h"
+#include "pspropertyobserver.h"
+
+class CPSDatabaseCleanup;
+class CPSShutdown;
+
+/**
+ * Implementation of the preset server.
+ */
+NONSHARABLE_CLASS( CPSServer ) : public CServer2, public MPSPresetObserver, public MPSPropertyChangeObserver
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @return  The newly created object.
+     */
+    static CPSServer* NewL();
+
+    /**
+     * Destructor.
+     */
+    ~CPSServer();      
+
+    /**
+     * Panics the client with a specific reason.
+     *
+     * @param   aReason     Reason of the panic.
+     */
+    void PanicClient( TInt aReason ) const;
+
+    /**
+     * Returns the current IPC message.
+     *
+     * @return  The current IPC message.
+     */
+    const RMessage2& Message() const;
+
+    /**
+     * Returns the preset database.
+     *
+     * @return  The preset database.
+     */
+    RPSDatabase& Database();
+    
+    /**
+     * Increments the session count. Should be called whenever a new session is created.
+     */
+    void IncrementSessionCount();
+
+    /**
+     * Decrements the session count. Should be called whenever a session is destroyed.
+     */
+    void DecrementSessionCount();
+
+    /**
+     * Called when a session is disconnected.
+     *
+     * @param	aMessage	Disconnect message.
+     */
+    void SessionDisconnected( const RMessage2& aMessage );
+
+    /**
+     * Appends a preset observer.
+     *
+     * @param   aMessage    IPC message of the request.
+     */
+    void AppendPresetObserverL( const RMessage2& aMessage );
+
+    /**
+     * Removes a preset change observer.
+     *
+     * @param   aMessage    IPC message of the request.
+     */
+    void RemovePresetObserver( const RMessage2& aMessage );
+
+    /**
+     * Appends a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     */
+    void AppendPendingPresetL( TInt aId );
+
+    /**
+     * Commits a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     */
+    void CommitPendingPresetL( TInt aId );
+
+    /**
+     * Removes a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     */
+    void RemovePendingPreset( TInt aId );
+
+    /**
+     * Sets the index of a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     * @param   aIndex   Index to set.
+     */
+    void SetPendingPresetIndexL( TInt aId, TInt aIndex );
+
+    /**
+     * Sets the name of a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     * @param   aName   Name to set.
+     */
+    void SetPendingPresetNameL( TInt aId, const TDesC& aName );
+
+    /**
+     * Sets the data of a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     * @param   aData   Data to set.
+     */
+    void SetPendingPresetDataL( TInt aId, const TDesC8& aData );
+
+// from CServer2
+
+    /**
+     * @see CServer2::NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const
+     */
+    CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const;
+
+// from MPSPresetObserver
+
+    /**
+     * @see MPSPresetObserver::HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason )
+     */
+    void HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+    
+// from MPSPropertyChangeObserver
+
+    /**
+     * @see MPSPropertyChangeObserver::HandlePropertyChangeL( const TUid& aCategory, const TUint aKey, const TInt aValue )
+     */
+    void HandlePropertyChangeL( const TUid& aCategory, const TUint aKey, const TInt aValue );
+    
+    /**
+     * @see MPSPropertyChangeObserver::HandlePropertyChangeL( const TUid& aCategory, const TUint aKey, const TPSTextProperty& aValue )
+     */    
+    void HandlePropertyChangeL( const TUid& aCategory, const TUint aKey, const TPSTextProperty& aValue );
+    
+    /**
+     * @see MPSPropertyChangeObserver::HandlePropertyChangeErrorL( const TUid& aCategory, const TUint aKey, TInt aError)
+     */
+    void HandlePropertyChangeErrorL( const TUid& aCategory, const TUint aKey, TInt aError);    
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CPSServer();
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Returns the index of the preset observer matching the supplied IPC message.
+     *
+     * @param   aMessage    IPC message of the request.
+     * @return  Index of the observer, or <code>KErrNotFound</code> if it doesn't exist.
+     */ 
+    TInt PresetObserverIndex( const RMessage2& aMessage ) const;
+
+    /**
+     * Returns the index of a pending preset.
+     *
+     * @param   aId     Id of the preset.
+     * @return  Index of the preset, or <code>KErrNotFound</code> if it doesn't exist.
+     */
+    TInt PendingPresetIndex( TInt aId ) const;
+
+    /**
+     * Notifies the preset observers about preset changes.
+     *
+     * @param   aId         Id of the preset that was changed.
+     * @param   aReason     Reason for the change.
+     */
+    void NotifyPresetObserversL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason );
+
+    /**
+     * Returns the index of the next unhandled notification related to the last handled notification identifier and the identifier of the observed preset.
+     *
+     * @param   aHandledNotificationId  Identifier of the notification that was most recently handled.
+     * @param   aObservedPresetId       Identifier of the observed preset.
+     * @return  Index of the notification matching the supplied parameters, or <code>KErrNotFound</code> if no such notification exists.
+     */
+    TInt NextUnhandledNotificationIndexById( TUint64 aHandledNotificationId, TInt aObservedPresetId );
+
+    /**
+     * Cleanup routine for deleting unused cached notifications.
+     *
+     * @param   aSelf   Pointer to self.
+     * @return  Always <code>KErrNone</code>.
+     */
+    static TInt StaticCleanCachedNotifications( TAny* aSelf );
+
+private:
+
+    /** The preset database. */
+    RPSDatabase iDatabase;
+    /** Shutdown timer that is activated after the last client disconnects. */
+    CPSShutdown* iShutdown;
+    /** Cleaner periodic that deletes all unused cached notifications. */
+    CPeriodic* iCachedNotificationCleaner;
+    /** Shutdown delay */
+    TTimeIntervalMicroSeconds32 iShutdownDelay;
+    /** The database cleanup handler. */
+    CPSDatabaseCleanup* iCleanup;
+    /** Presets that are locked, but not yet committed. */
+    RPointerArray<CPSPendingPreset> iPendingPresets;
+    /** File server session. */
+    RFs iFs;
+    /** Preset change notification requests. */
+    RArray<RMessage2> iPresetObservers;    
+    /** Notifications received so far. */
+    RArray<TPSNotifyDataPackage> iNotifications;
+    /* Pub&Sub observer */
+    CPSPropertyObserver* iPropertyObserver;
+    /** Number of connected sessions. */
+    TInt iSessionCount;
+    /** Running unique identifier for cached notifications. */
+    TUint64 iCachedNotificationId;
+    };
+
+#endif // C_CPSSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/pssession.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2006-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:  Defines a session with the preset server
+*
+*/
+
+
+#ifndef C_CPSSESSION_H
+#define C_CPSSESSION_H
+
+#include <e32base.h>
+
+class CPSServer;
+
+/**
+ * Defines a session with the preset server, as per client-server architecture.
+ */
+NONSHARABLE_CLASS( CPSSession ) : public CSession2
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CPSSession* NewL( CPSServer& aServer );
+
+    /**
+     * Destructor.
+     */
+    ~CPSSession();
+
+// from base class CSession2
+
+    /**
+     * @see CSession2::ServiceL( const RMessage2& aMessage )
+     */
+    void ServiceL( const RMessage2& aMessage );
+
+    /**
+     * @see CSession2::Disconnect( const RMessage2& aMessage )
+     */
+    void Disconnect( const RMessage2 &aMessage);
+    
+private:
+
+    /**
+     * Constructor.
+     */
+    CPSSession( CPSServer& aServer );
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Handles all service commands from the client. @see TPSOpCode.
+     *
+     * @param   aMessage    The IPC message.
+     * @return  <code>ETrue</code> if the message was handled and can be completed, <code>EFalse</code> otherwise.
+     */
+    TBool DoServiceL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpCreatePreset.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void CreatePresetL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpDeletePreset.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void DeletePresetL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpStartTransaction.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void StartTransactionL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpCommitTransaction.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void CommitTransactionL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpRollbackTransaction.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void RollbackTransaction( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpMovePreset.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void MovePresetL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpNotify.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void NotifyPresetChangeL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpCancelNotify.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void CancelNotifyPresetChange( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpSetPresetName.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void SetPresetNameL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpSetPresetIndex.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void SetPresetIndexL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpSetPresetData.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void SetPresetDataL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetName.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetNameL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetNameLength.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetNameLengthL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetIndex.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetIndexL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetDataHandler.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetDataHandlerL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetData.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetDataL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetDataLength.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetDataLengthL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresets.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetsL( const RMessage2& aMessage );
+
+    /**
+     * Handles EPSOpGetPresetsLength.
+     *
+     * @param   aMessage    The IPC message.
+     */
+    void GetPresetsLengthL( const RMessage2& aMessage );
+
+private:
+
+    /** The preset server. */
+    CPSServer& iPresetServer;
+
+    };
+
+#endif // C_CPSSESSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/psshutdown.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2006-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:  Shutdown timer for the preset server
+*
+*/
+
+
+#ifndef C_CPSSHUTDOWN_H
+#define C_CPSSHUTDOWN_H
+
+#include <e32base.h>
+
+/**
+ * Shutdown timer for the preset server.
+ * 
+ * Closes the server when it has been unused for a set period of time.
+ */
+NONSHARABLE_CLASS( CPSShutdown ) : public CTimer
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @return  The newly created object.
+     */
+    static CPSShutdown* NewL();
+    
+    /**
+     * Destructor.
+     */    
+    ~CPSShutdown();
+    
+    /**
+     * Starts the shutdown timer.
+     * @param   aDelay  The delay after PresetServer is shut down.
+     */    
+    void Start( TTimeIntervalMicroSeconds32 aDelay );
+
+
+// from base class CActive
+
+    /**
+     * @see CActive::RunL()
+     */
+    void RunL();
+
+    /**
+     * @see CActive::DoCancel()
+     */
+    void DoCancel();
+
+private:
+
+    /**
+     * Constructor.
+     */    
+    CPSShutdown();
+    
+    /**
+     * Second-phase constructor.
+     */    
+    void ConstructL();
+
+    };
+
+#endif // C_CPSSHUTDOWN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Psdatabase.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,924 @@
+/*
+* Copyright (c) 2006-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:  Implementation of the preset database
+*
+*/
+
+
+#include <bautils.h>
+#include <pscommon.h>
+
+#include "psdebug.h"
+#include "pspendingpreset.h"
+#include "psdatabase.h"
+#include "pspresetobserver.h"
+
+// Uncomment the line below to get database print outs.
+// Warning! This may cause a lot of debug messages, so use with caution.
+// #define PS_DATABASE_PRINT_DEBUG
+
+#ifdef PS_DATABASE_PRINT_DEBUG
+    #define PS_PRINT_DATABASE  RPSDatabase::PrintDatabaseL()
+#else
+    #define PS_PRINT_DATABASE
+#endif
+
+const TInt KPSDatabaseVersion   = 1; // The latest version of the database. Must be kept up to date when adding new versions.
+
+const TInt KPSDatabaseVersion1  = 1; // Database version 1 identifier.
+
+// This array contains function pointers to all database update packages. One update corresponds to one function call, therefore
+// when adding new database updates it is imperative that this array be updated as well.
+
+const RPSDatabase::KPSDatabaseUpdateFunction RPSDatabase::iDatabaseUpdateFunctions[] =
+    {
+        &RPSDatabase::CreateTablesL
+    };
+
+// Table and columns literals.
+
+_LIT( KPSPresetsTable,              "Presets" );
+_LIT( KPSPresetsIdColumn,           "Id" );
+_LIT( KPSPresetsNameColumn,         "Name" );
+_LIT( KPSPresetsIndexColumn,        "Index" );
+_LIT( KPSPresetsDataHandlerColumn,  "DataHandler" );
+_LIT( KPSPresetsDataColumn,         "Data" );
+
+_LIT( KPSVersionsTable,             "Versions" );
+_LIT( KPSVersionsVersionColumn,     "Version" );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+RPSDatabase::RPSDatabase( MPSPresetObserver& aObserver )
+    : RDbNamedDatabase(), iObserver( aObserver )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Opens the database.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::OpenL( RFs& aFs, const TDesC& aFileName )
+    {
+    Close(); // Ensure that the database is closed before trying to open it.
+
+    BaflUtils::EnsurePathExistsL( aFs, aFileName );
+
+    TInt err = RDbNamedDatabase::Create( aFs, aFileName );
+    
+    if ( err == KErrAlreadyExists )
+        {
+        // The database already existed, need to open it.
+        User::LeaveIfError( RDbNamedDatabase::Open( aFs, aFileName ) );
+        }
+    else
+        {
+        User::LeaveIfError( err );
+        }
+        
+    if ( IsDamaged() || !InTransaction() )
+        {
+        err = Recover();
+        
+        if ( !err )
+            {
+            err = Compact();
+            }
+        }
+
+    if ( err )
+        {
+        Close();
+        User::Leave( err );
+        }
+
+    // The database is now open and functional, check if the structure needs to be updated.
+    TRAP( err, UpdateDatabaseL() )
+    
+    if ( err )
+        {
+        Destroy();
+        User::Leave( err );
+        }
+
+    PS_PRINT_DATABASE;
+    }
+
+// ---------------------------------------------------------------------------
+// Deletes all presets whose data handler is no longer available.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::DeleteOrphanedPresetsL( const RArray<TInt>& aDataHandlers )
+    {
+    PS_PRINT_DATABASE;
+
+    _LIT( sql, "DELETE FROM %S" );
+    _LIT( sqlWhere, " WHERE %S <> %d" );
+    _LIT( sqlAnd, " AND %S <> %d" );
+
+    TInt count = aDataHandlers.Count();
+
+    // Constructs the query that selects all presets that have no registered data handlers.
+    
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsTable().Length() + count * KDefaultRealWidth +
+                                  Min( 1, count ) * (sqlWhere().Length() + KPSPresetsDataHandlerColumn().Length()) +
+                                  Max( 0, count - 1 ) * (sqlAnd().Length() + KPSPresetsDataHandlerColumn().Length()) );
+
+    TPtr sqlPtr( sqlBuf->Des() );
+    sqlPtr.Format( sql, &KPSPresetsTable );
+    
+    if ( count > 0 )
+        {
+        HBufC* tempBuf = HBufC::NewLC( sqlWhere().Length() + KPSPresetsDataHandlerColumn().Length() + KDefaultRealWidth );
+        tempBuf->Des().Format( sqlWhere, &KPSPresetsDataHandlerColumn, aDataHandlers[0] );
+        sqlPtr.Append( *tempBuf );
+        CleanupStack::PopAndDestroy( tempBuf );
+
+        for ( TInt i = 1; i < count; i++ )
+            {
+            tempBuf = HBufC::NewLC( sqlAnd().Length() + KPSPresetsDataHandlerColumn().Length() + KDefaultRealWidth );
+            tempBuf->Des().Format( sqlAnd, &KPSPresetsDataHandlerColumn, aDataHandlers[i] );
+            sqlPtr.Append( *tempBuf );
+            CleanupStack::PopAndDestroy( tempBuf );
+            }
+        }
+
+    TInt rowsDeleted = Execute ( sqlPtr );
+    User::LeaveIfError(rowsDeleted);
+    
+    CleanupStack::PopAndDestroy( sqlBuf );
+
+    if (rowsDeleted > 0)
+    	{
+        User::LeaveIfError( Compact() );
+    	}
+
+    PS_PRINT_DATABASE;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets all presets matching the supplied data handler.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::GetPresetListL( RArray<TInt>& aPresets, TUid aDataHandler )
+    {
+    HBufC* sqlBuf = NULL;
+
+    if ( aDataHandler == KNullUid )
+        {
+        _LIT( sql, "SELECT %S FROM %S" );
+        
+        sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsIdColumn().Length() + KPSPresetsTable().Length() );
+        
+        sqlBuf->Des().Format( sql, &KPSPresetsIdColumn, &KPSPresetsTable );
+        }
+    else
+        {
+        _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+        
+        sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsIdColumn().Length() + KPSPresetsTable().Length() +
+                                      KPSPresetsDataHandlerColumn().Length() + KDefaultRealWidth );
+        
+        sqlBuf->Des().Format( sql, &KPSPresetsIdColumn, &KPSPresetsTable, &KPSPresetsDataHandlerColumn, aDataHandler.iUid );
+        }
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    CDbColSet* columns = view.ColSetL();
+    TInt idColumn = columns->ColNo( KPSPresetsIdColumn );
+    delete columns;
+
+    for ( view.FirstL(); view.AtRow(); view.NextL() )
+        {
+        view.GetL();
+        aPresets.AppendL( view.ColInt32( idColumn ) );
+        }
+
+    CleanupStack::PopAndDestroy( &view );                                  
+    }
+
+// ---------------------------------------------------------------------------
+// Creates a preset.
+// ---------------------------------------------------------------------------
+//
+TInt RPSDatabase::CreatePresetL( TInt aIndex, TUid aDataHandler )
+    {
+    PS_PRINT_DATABASE;
+
+    _LIT( sql, "SELECT * FROM %S WHERE %S = %d AND %S = %d" );
+    
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsTable().Length() + KPSPresetsIndexColumn().Length() +
+                                  KPSPresetsDataHandlerColumn().Length() + 2 * KDefaultRealWidth );
+    
+    sqlBuf->Des().Format( sql, &KPSPresetsTable, &KPSPresetsIndexColumn, aIndex, &KPSPresetsDataHandlerColumn, aDataHandler.iUid );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+    User::LeaveIfError( view.EvaluateAll() );
+
+    TInt id = KErrNotFound;
+    
+    if ( view.FirstL() )
+        {
+        User::Leave( KErrAlreadyExists );
+        }
+    else
+        {
+        view.InsertL();
+        
+        CDbColSet* columns = view.ColSetL();
+        TInt indexColumn = columns->ColNo( KPSPresetsIndexColumn );
+        TInt dataHandlerColumn = columns->ColNo( KPSPresetsDataHandlerColumn );
+        TInt idColumn = columns->ColNo( KPSPresetsIdColumn );
+        delete columns;
+        
+        view.SetColL( indexColumn, aIndex );
+        view.SetColL( dataHandlerColumn, aDataHandler.iUid );
+        
+        view.PutL();
+        
+        id = view.ColInt32( idColumn );
+        
+        iObserver.HandlePresetChangedL( id, aDataHandler, MPSPresetObserver::EPSCreated );
+        }
+        
+    CleanupStack::PopAndDestroy( &view );
+
+    PS_PRINT_DATABASE;
+
+    return id;
+    }
+
+// ---------------------------------------------------------------------------
+// Deletes a preset.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::DeletePresetL( TInt aId )
+    {
+    PS_PRINT_DATABASE;
+
+    _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsTable().Length() + KPSPresetsDataHandlerColumn().Length() +
+                                  KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+    sqlBuf->Des().Format( sql, &KPSPresetsDataHandlerColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    User::LeaveIfError( view.EvaluateAll() );
+
+    if ( view.FirstL() )
+        {
+        view.GetL();
+        CDbColSet* columns = view.ColSetL();
+        TUid uid = TUid::Uid( view.ColInt32( columns->ColNo( KPSPresetsDataHandlerColumn ) ) );
+        delete columns;
+        view.DeleteL();
+        iObserver.HandlePresetChangedL( aId, uid, MPSPresetObserver::EPSDeleted );
+        }
+
+    CleanupStack::PopAndDestroy( &view );
+
+    PS_PRINT_DATABASE;
+    }
+
+// ---------------------------------------------------------------------------
+// Commits a preset to the database.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::CommitPresetL( const CPSPendingPreset& aPreset )
+    {
+    PS_PRINT_DATABASE;
+
+    _LIT( sql, "SELECT * FROM %S WHERE %S = %d" );
+    
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsTable().Length() + KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+    sqlBuf->Des().Format( sql, &KPSPresetsTable, &KPSPresetsIdColumn, aPreset.Id() );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    User::LeaveIfError( view.EvaluateAll() );
+    
+    if ( view.FirstL() )
+        {
+        CDbColSet* columns = view.ColSetL();
+        CleanupStack::PushL( columns );
+
+        view.UpdateL();
+
+        RDbColWriteStream stream;
+
+        stream.OpenLC( view, columns->ColNo( KPSPresetsNameColumn ) );
+        stream.WriteL( aPreset.Name() );
+        stream.CommitL();
+
+        CleanupStack::PopAndDestroy( &stream );
+
+        view.SetColL( columns->ColNo( KPSPresetsIndexColumn ), aPreset.Index() );
+        
+        stream.OpenLC( view, columns->ColNo( KPSPresetsDataColumn ) );
+        stream.WriteL( aPreset.Data() );
+        stream.CommitL();
+        CleanupStack::PopAndDestroy( &stream );
+
+        view.PutL();
+
+        TUid uid = TUid::Uid( view.ColInt32( columns->ColNo( KPSPresetsDataHandlerColumn ) ) );
+
+        CleanupStack::PopAndDestroy( columns );
+        
+        iObserver.HandlePresetChangedL( aPreset.Id(), uid, MPSPresetObserver::EPSModified );
+        }
+
+    CleanupStack::PopAndDestroy( &view );
+    
+    PS_PRINT_DATABASE;
+    }
+
+// ---------------------------------------------------------------------------
+// Moves a preset to the supplied index.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::MovePresetL( TInt aId, TInt aDestinationIndex )
+    {
+    PS_PRINT_DATABASE;
+
+    if ( aDestinationIndex < 0 )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    // First, fetch the index and data handler of the preset that is about to be moved.
+
+    _LIT( selectPreset, "SELECT %S, %S FROM %S WHERE %S = %d" );
+    
+    HBufC* selectPresetBuf = HBufC::NewLC( selectPreset().Length() + KPSPresetsIndexColumn().Length() + KPSPresetsDataHandlerColumn().Length() + 
+                                           KPSPresetsTable().Length() + KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+    
+    selectPresetBuf->Des().Format( selectPreset, &KPSPresetsIndexColumn, &KPSPresetsDataHandlerColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+    
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *selectPresetBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( selectPresetBuf );
+    CleanupClosePushL( view );
+    
+    if ( !view.FirstL() )
+        {
+        User::Leave( KErrNotFound );
+        }
+
+    view.GetL();
+    CDbColSet* columns = view.ColSetL();
+    TInt sourceIndex = view.ColInt32( columns->ColNo( KPSPresetsIndexColumn ) );
+    TUid dataHandler = TUid::Uid( view.ColInt32( columns->ColNo( KPSPresetsDataHandlerColumn ) ) );
+    delete columns;
+    CleanupStack::PopAndDestroy( &view );
+
+    TInt minIndex = Min( sourceIndex, aDestinationIndex );
+    TInt maxIndex = Max( sourceIndex, aDestinationIndex );
+    
+    TBool direction = ( aDestinationIndex > sourceIndex ); // EFalse means that the preset is to be moved up, ETrue means that it is to be moved down.
+
+    _LIT( asc, "ASC" );
+    _LIT( desc, "DESC" );
+
+    TPtrC sortPtr( direction ? desc() : asc() );
+    
+    // Selects all preset in between the source and destination indices.
+     _LIT( sql, "SELECT * FROM %S WHERE %S >= %d AND %S <= %d AND %S = %d ORDER BY %S %S" );
+    
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsIndexColumn().Length() * 3 + KPSPresetsTable().Length() +
+                                  KPSPresetsDataHandlerColumn().Length() + sortPtr.Length() + KDefaultRealWidth * 3 );
+
+    sqlBuf->Des().Format( sql, &KPSPresetsTable, &KPSPresetsIndexColumn, minIndex, &KPSPresetsIndexColumn,
+                          maxIndex, &KPSPresetsDataHandlerColumn, dataHandler.iUid, &KPSPresetsIndexColumn, &sortPtr );
+
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    User::LeaveIfError( view.EvaluateAll() );
+
+    TInt lastIndex = aDestinationIndex;
+
+    if ( view.LastL() ) // Handle the preset that is to be moved first.    
+        {
+        view.GetL();
+        view.UpdateL();
+        
+        columns = view.ColSetL();
+        CleanupStack::PushL( columns );
+        
+        view.SetColL( columns->ColNo( KPSPresetsIndexColumn ), aDestinationIndex );
+        view.PutL();
+        
+        iObserver.HandlePresetChangedL( view.ColInt32( columns->ColNo( KPSPresetsIdColumn ) ),
+                                        TUid::Uid( view.ColInt32( columns->ColNo( KPSPresetsDataHandlerColumn ) ) ),
+                                        MPSPresetObserver::EPSModified );
+
+        view.FirstL(); // Start iterating the presets from the beginning (the last element is always the preset that is to be moved).
+
+        for ( TInt i = 0; i < view.CountL() - 1; i++ ) // The preset that was moved has already been handled.
+            {
+            view.GetL();
+            view.UpdateL();
+            
+            TInt index = view.ColInt32( columns->ColNo( KPSPresetsIndexColumn ) );
+
+            if ( lastIndex != index )
+                {
+                // If there was no preset with the index that the previous preset was moved to, there's no need to continue.
+                /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+                break;
+                /*lint -restore*/
+                }
+            else 
+                {
+                // Preset was moved on top of another preset, continue iterating through the presets.
+                index += direction ? -1 : 1; // If moving up, all preset indices are incremented by one, otherwise they are decremented by one.
+                lastIndex = index;
+                view.SetColL( columns->ColNo( KPSPresetsIndexColumn ), index );
+                view.PutL();
+
+                iObserver.HandlePresetChangedL( view.ColInt32( columns->ColNo( KPSPresetsIdColumn ) ),
+                                                TUid::Uid( view.ColInt32( columns->ColNo( KPSPresetsDataHandlerColumn ) ) ),
+                                                MPSPresetObserver::EPSModified );
+                }
+
+            view.NextL();
+            }
+        
+        CleanupStack::PopAndDestroy( columns );
+        }
+
+    CleanupStack::PopAndDestroy( &view );
+
+    PS_PRINT_DATABASE;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the name of a preset.
+// ---------------------------------------------------------------------------
+//
+HBufC* RPSDatabase::PresetNameL( TInt aId )
+    {
+    _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsNameColumn().Length() + KPSPresetsTable().Length() +
+                                  KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+
+    sqlBuf->Des().Format( sql, &KPSPresetsNameColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    TInt nameLength = PresetNameLengthL( aId );
+    HBufC* name = HBufC::NewLC( nameLength );
+
+    if ( view.FirstL() )
+        {
+    
+        view.GetL();
+        CDbColSet* columns = view.ColSetL();
+        TInt nameColumn = columns->ColNo( KPSPresetsNameColumn );
+        delete columns;
+
+        RDbColReadStream stream;
+        TPtr namePtr = name->Des();
+        stream.OpenLC( view, nameColumn );
+        stream.ReadL( namePtr, nameLength );
+        CleanupStack::PopAndDestroy( &stream);
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+    
+    CleanupStack::Pop( name );    
+    CleanupStack::PopAndDestroy( &view );
+
+    return name;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the length of the name field for a preset.
+// ---------------------------------------------------------------------------
+//
+TInt RPSDatabase::PresetNameLengthL( TInt aId )
+    {
+    return ColumnLengthL( KPSPresetsNameColumn, aId );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the index of a preset.
+// ---------------------------------------------------------------------------
+//
+TInt RPSDatabase::PresetIndexL( TInt aId )
+    {
+    _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsIndexColumn().Length() + KPSPresetsTable().Length() +
+                                  KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+
+    sqlBuf->Des().Format( sql, &KPSPresetsIndexColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    TInt index = KErrNotFound;
+
+    if ( view.FirstL() )
+        {
+        view.GetL();
+        CDbColSet* columns = view.ColSetL();
+        index = view.ColInt32( columns->ColNo( KPSPresetsIndexColumn ) );
+        delete columns;
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+        
+    CleanupStack::PopAndDestroy( &view );
+
+    return index;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the data handler of a preset.
+// ---------------------------------------------------------------------------
+//
+TUid RPSDatabase::PresetDataHandlerL( TInt aId )
+    {
+    _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsDataHandlerColumn().Length() + KPSPresetsTable().Length() +
+                                  KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+
+    sqlBuf->Des().Format( sql, &KPSPresetsDataHandlerColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    TUid dataHandler = KNullUid;
+
+    if ( view.FirstL() )
+        {
+        view.GetL();
+        CDbColSet* columns = view.ColSetL();
+        dataHandler.iUid = view.ColInt32( columns->ColNo( KPSPresetsDataHandlerColumn ) );
+        delete columns;
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+        
+    CleanupStack::PopAndDestroy( &view );
+
+    return dataHandler;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the binary data of a preset.
+// ---------------------------------------------------------------------------
+//
+HBufC8* RPSDatabase::PresetDataL( TInt aId )
+    {
+    _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + KPSPresetsDataColumn().Length() + KPSPresetsTable().Length() +
+                                  KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+
+    sqlBuf->Des().Format( sql, &KPSPresetsDataColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    HBufC8* data = NULL;
+
+    if ( view.FirstL() )
+        {
+        view.GetL();
+        CDbColSet* columns = view.ColSetL();
+        TInt columnNo = columns->ColNo( KPSPresetsDataColumn );
+        delete columns;
+        
+        data = HBufC8::NewLC( view.ColLength( columnNo ) );
+        TPtr8 ptr( data->Des() );
+        
+        RDbColReadStream stream;
+        stream.OpenLC( view, columnNo );
+        stream.ReadL( ptr, view.ColLength( columnNo ) );
+        CleanupStack::PopAndDestroy( &stream );
+        CleanupStack::Pop( data );
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+        
+    CleanupStack::PopAndDestroy( &view );
+
+    return data;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the length of the binary data of a preset.
+// ---------------------------------------------------------------------------
+//
+TInt RPSDatabase::PresetDataLengthL( TInt aId )
+    {
+    return ColumnLengthL( KPSPresetsDataColumn, aId );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the current database version number.
+// ---------------------------------------------------------------------------
+//
+TInt RPSDatabase::CurrentDatabaseVersionL()
+    {
+    TInt version = 0;
+
+    RDbTable table;
+    TInt err = table.Open( *this, KPSVersionsTable, RDbTable::EReadOnly );
+    
+    if ( err != KErrNotFound )
+        {
+        User::LeaveIfError( err );
+
+        CleanupClosePushL( table );
+
+        if ( table.FirstL() )
+            {
+            table.GetL();
+
+            CDbColSet* columns = table.ColSetL();
+            version = table.ColInt32( columns->ColNo( KPSVersionsVersionColumn ) );
+            delete columns;
+            }
+
+        CleanupStack::PopAndDestroy( &table );
+        }
+
+    return version;
+    }
+
+// ---------------------------------------------------------------------------
+// Updates the database version number.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::UpdateDatabaseVersionL( TInt aVersion )
+    {
+    RDbTable table;
+    User::LeaveIfError( table.Open( *this, KPSVersionsTable ) );
+    CleanupClosePushL( table );
+    
+    CDbColSet* columns = table.ColSetL();
+    CleanupStack::PushL( columns );
+
+    table.Reset();
+    table.FirstL() ? table.UpdateL() : table.InsertL(); // If a row exists open it for update, otherwise create a new one.
+    table.SetColL( columns->ColNo( KPSVersionsVersionColumn ), aVersion );
+    table.PutL();
+
+    CleanupStack::PopAndDestroy( 2, &table );
+    }
+
+// ---------------------------------------------------------------------------
+// Updates the whole database to the latest version.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::UpdateDatabaseL()
+    {
+    TInt currentVersion = CurrentDatabaseVersionL();
+
+    if ( currentVersion < KPSDatabaseVersion )
+        {
+        for ( TInt i = currentVersion; i < KPSDatabaseVersion; i++ )
+            {
+            ((*this).*iDatabaseUpdateFunctions[i])(); // All of these function calls can leave.
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Creates the tables.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::CreateTablesL()
+    {
+    // Creates the preset table.
+    TDbCol presetsIdColumn( KPSPresetsIdColumn, EDbColInt32 );
+    presetsIdColumn.iAttributes = TDbCol::EAutoIncrement;
+
+    CDbColSet* columns = CDbColSet::NewLC();
+    columns->AddL( presetsIdColumn );
+    columns->AddL( TDbCol( KPSPresetsNameColumn, EDbColLongText ) );
+    columns->AddL( TDbCol( KPSPresetsIndexColumn, EDbColInt32 ) );
+    columns->AddL( TDbCol( KPSPresetsDataHandlerColumn, EDbColInt32 ) );
+    columns->AddL( TDbCol( KPSPresetsDataColumn, EDbColLongText8 ) );
+
+    User::LeaveIfError( CreateTable( KPSPresetsTable, *columns ) );
+    
+    CleanupStack::PopAndDestroy( columns );
+
+    // This is a hack to circumvent problems with Publish & Subscribe, as it initializes all data properties to zero,
+    // causing a notification to fire with the value of zero. This is the reason why most users of the API have defined
+    // zero to be the uninitialized state of the property. The problem caused by this is that the DBMS API's auto increment
+    // field starts from zero, and should there exist a preset with such an ID, it could not be properly conveyed to the
+    // interested parties. Thus, we will make a dummy preset now that the preset table is created and remove it instantly,
+    // thereby making the auto increment column to start from one instead of zero.
+    
+    _LIT( selectAll, "SELECT * FROM %S" );
+
+    HBufC* sqlBuf = HBufC::NewLC( selectAll().Length() + KPSPresetsTable().Length() );
+    sqlBuf->Des().Format( selectAll, &KPSPresetsTable );
+    
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+    User::LeaveIfError( view.EvaluateAll() );
+
+    view.FirstL();    
+    view.InsertL();
+    view.PutL();
+    view.DeleteL();
+
+    CleanupStack::PopAndDestroy( &view );
+
+    // Creates the version table.
+    columns = CDbColSet::NewLC();
+    columns->AddL( TDbCol( KPSVersionsVersionColumn, EDbColInt32 ) );
+    
+    User::LeaveIfError( CreateTable( KPSVersionsTable, *columns ) );
+    
+    CleanupStack::PopAndDestroy( columns );
+    
+    UpdateDatabaseVersionL( KPSDatabaseVersion1 ); // Version 1 of the database successfully created.
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the length of a column.
+// ---------------------------------------------------------------------------
+//
+TInt RPSDatabase::ColumnLengthL( const TDesC& aColumn, TInt aId )
+    {
+    _LIT( sql, "SELECT %S FROM %S WHERE %S = %d" );
+
+    TInt length = KErrNotFound;
+
+    HBufC* sqlBuf = HBufC::NewLC( sql().Length() + aColumn.Length() + KPSPresetsTable().Length() + KPSPresetsIdColumn().Length() + KDefaultRealWidth );
+    sqlBuf->Des().Format( sql, &aColumn, &KPSPresetsTable, &KPSPresetsIdColumn, aId );
+
+    RDbView view;
+    User::LeaveIfError( view.Prepare( *this, *sqlBuf, RDbView::EReadOnly ) );
+    CleanupStack::PopAndDestroy( sqlBuf );
+    CleanupClosePushL( view );
+
+    if ( view.FirstL() )
+        {
+        view.GetL();
+        CDbColSet* columns = view.ColSetL();
+        length = view.ColLength( columns->ColNo( aColumn ) );
+        delete columns;
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+        
+    CleanupStack::PopAndDestroy( &view );
+
+    return length;
+    }
+    
+// ---------------------------------------------------------------------------
+// Debug method that prints the contents of the database.
+// ---------------------------------------------------------------------------
+//
+void RPSDatabase::PrintDatabaseL()
+    {
+    PSDEBUG( "RPSDatabase::PrintDatabaseL() - Versions:" );
+
+    RDbTable table;
+    TInt err = table.Open( *this, KPSVersionsTable, RDbTable::EReadOnly );
+    
+    if ( err == KErrNotFound )
+        {
+        PSDEBUG( "\tYarr, thar database be not in this world, mate!" );
+        }
+    else
+        {
+        User::LeaveIfError( err );
+
+        CleanupClosePushL( table );
+
+        if ( table.FirstL() )
+            {
+            CDbColSet* columns = table.ColSetL();
+            TInt versionColumn = columns->ColNo( KPSVersionsVersionColumn );
+            delete columns;
+            
+            do  
+                {
+                table.GetL();
+                PSDEBUG2( "\t%d", table.ColInt32( versionColumn ) );
+                } while ( table.NextL() );
+            }
+        else
+            {
+            PSDEBUG( "\tYarr, thar table be empty!" );
+            }
+
+        CleanupStack::PopAndDestroy( &table );
+        }
+    
+    PSDEBUG( "RPSDatabase::PrintDatabaseL() - Presets:" );
+
+    err = table.Open( *this, KPSPresetsTable, RDbTable::EReadOnly );
+    
+    if ( err == KErrNotFound )
+        {
+        PSDEBUG( "\tYarr, thar database be not in this world, mate!" );
+        }
+    else
+        {
+        User::LeaveIfError( err );
+        
+        CleanupClosePushL( table );
+
+		if ( table.FirstL() )
+		    {
+            CDbColSet* columns = table.ColSetL();
+            TInt idColumn = columns->ColNo( KPSPresetsIdColumn );
+            TInt dataHandlerColumn = columns->ColNo( KPSPresetsDataHandlerColumn );
+            TInt indexColumn = columns->ColNo( KPSPresetsIndexColumn );
+            TInt nameColumn = columns->ColNo( KPSPresetsNameColumn );
+            delete columns;
+            
+            do  
+                {
+                table.GetL();
+                // stream is needed for long columns
+                RDbColReadStream stream;
+                TInt nameLength = PresetNameLengthL( table.ColInt32( idColumn ) );
+                HBufC* name = HBufC::NewLC( nameLength );
+                TPtr namePtr = name->Des();
+                stream.OpenLC( table, nameColumn );
+                stream.ReadL( namePtr, nameLength );
+
+                CleanupStack::PopAndDestroy( &stream );
+                
+                PSDEBUG5( "\tId: %10u\tData Handler: 0x%x\tIndex: %10u\tName: %S", table.ColInt32( idColumn ), table.ColInt32( dataHandlerColumn ), table.ColInt32( indexColumn ), name );
+                
+                CleanupStack::PopAndDestroy( name );
+                } while ( table.NextL() );
+		    }
+        else
+            {
+            PSDEBUG( "\tYarr, thar table be empty!" );
+            }
+    
+        CleanupStack::PopAndDestroy( &table );
+        }
+    }
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Psdatabasecleanup.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2006-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:  Handles periodical database cleanup routines
+*
+*/
+
+
+#include <ecom.h>
+#include <pspresetinterface.h>
+
+#include "psdatabase.h"
+#include "psdatabasecleanup.h"
+#include "psdebug.h"
+
+const TInt KPSCleanupInterval = 480000000; // Interval for periodical compaction attempts
+const TInt KPSRequestCleanupCheckDelay = 20000000; // Delay when compaction attempt is done after a request to check.
+const TInt KPSCleanupAmountOfDirtAllowed = 300*1024; // Amount of dirty data allowed in database (bytes).
+const TInt KPSCleanupCompactThresholdPercentage = 50; // Threshold percentage in database data efficiency when db compact process is triggered.
+
+// ======== LOCAL FUNCTIONS ========
+
+namespace
+    {
+    
+    // ---------------------------------------------------------------------------
+    // ?description_if_needed
+    // ---------------------------------------------------------------------------
+    //
+    void CleanupImplArray( TAny* aSelf )
+        {
+        RImplInfoPtrArray& self = *static_cast<RImplInfoPtrArray*>( aSelf );
+        self.ResetAndDestroy();
+        self.Close();
+        }
+    
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CPSDatabaseCleanup::CPSDatabaseCleanup( RPSDatabase& aDatabase )
+    : CTimer( CActive::EPriorityStandard ), iDatabase( aDatabase )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CPSDatabaseCleanup::ConstructL()
+    {
+    CTimer::ConstructL();
+
+    RunL();
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CPSDatabaseCleanup* CPSDatabaseCleanup::NewL( RPSDatabase& aDatabase )
+    {
+    CPSDatabaseCleanup* self = new ( ELeave ) CPSDatabaseCleanup( aDatabase );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CPSDatabaseCleanup::~CPSDatabaseCleanup()
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// From class ?base_class.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void CPSDatabaseCleanup::RunL()
+    {
+    After( KPSCleanupInterval );
+
+    User::LeaveIfError( iDatabase.UpdateStats() ); // Update the statistics
+    RDbDatabase::TSize size = iDatabase.Size();
+    
+    PSDEBUG( "PSDatabaseCleanup::RunL()" );
+    PSDEBUG3( "\tCompacting the database: iSize = %d, iUsage = %d", size.iSize, size.iUsage );
+
+    // Perform database compaction only if efficient data in database in percents is below defined percentage or the amount of dirty
+    // data in database file is at least a defined constant value of bytes.
+    TInt dirt = size.iSize * (100 - size.iUsage) / 100;
+    if (dirt > KPSCleanupAmountOfDirtAllowed || size.iUsage < KPSCleanupCompactThresholdPercentage)
+    	{
+        User::LeaveIfError( iDatabase.Compact() );
+        PSDEBUG3( "\tDatabase compacted succesfully: iSize = %d, iUsage = %d", iDatabase.Size().iSize, iDatabase.Size().iUsage );
+    	}
+
+    // Perform orphan cleanup.
+    DeleteOrphanedPresetsL();
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CPSDatabaseCleanup::DeleteOrphanedPresetsL()
+    {
+    RArray<TInt> dataHandlers;
+    CleanupClosePushL( dataHandlers );
+    RImplInfoPtrArray implementations;
+    CleanupStack::PushL( TCleanupItem( CleanupImplArray, &implementations ) );
+    
+    REComSession::ListImplementationsL( KPSPresetInterface, implementations );
+    
+    for ( TInt i = 0; i < implementations.Count(); i++ )
+        {
+        dataHandlers.AppendL( implementations[i]->ImplementationUid().iUid );
+        }
+
+    CleanupStack::PopAndDestroy(); // implementations
+    
+    REComSession::FinalClose();
+    
+    iDatabase.DeleteOrphanedPresetsL( dataHandlers );
+    
+    CleanupStack::PopAndDestroy( &dataHandlers );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CPSDatabaseCleanup::RequestCleanupCheck()
+	{
+	Cancel();
+	After(KPSRequestCleanupCheckDelay);
+	}
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Pspendingpreset.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2006-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:  Represents a pending preset that has not yet been committed
+*
+*/
+
+
+#include "pspendingpreset.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSPendingPreset* CPSPendingPreset::NewL( TInt aId )
+    {
+    CPSPendingPreset* self = new ( ELeave ) CPSPendingPreset( aId );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSPendingPreset::CPSPendingPreset( TInt aId )
+    : iId( aId )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSPendingPreset::ConstructL()
+    {
+    iName.CreateL( KNullDesC );
+    iData.CreateL( KNullDesC8 );
+    }
+    
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CPSPendingPreset::~CPSPendingPreset()
+    {
+    iName.Close();
+    iData.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the ID of the preset.
+// ---------------------------------------------------------------------------
+//
+TInt CPSPendingPreset::Id() const
+    {
+    return iId;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the index of the preset.
+// ---------------------------------------------------------------------------
+//
+void CPSPendingPreset::SetIndex( TInt aIndex )
+    {
+    iIndex = aIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the index of the preset.
+// ---------------------------------------------------------------------------
+//
+TInt CPSPendingPreset::Index() const
+    {
+    return iIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the name of the preset.
+// ---------------------------------------------------------------------------
+//
+void CPSPendingPreset::SetNameL( const TDesC& aName )
+    {
+    iName.Close();
+    iName.CreateL( aName );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the name of the preset.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CPSPendingPreset::Name() const
+    {
+    return iName;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the data of the preset.
+// ---------------------------------------------------------------------------
+//
+void CPSPendingPreset::SetDataL( const TDesC8& aData )
+    {
+    iData.Close();
+    iData.CreateL( aData );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the data of the preset.
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CPSPendingPreset::Data() const
+    {
+    return iData;
+    }
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Pspropertyobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2006-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:  Observer for Publish & Subscribe keys
+*
+*/
+
+// INCLUDE FILES
+
+#include "pspropertyobserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::CPSPropertyObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPSPropertyObserver::CPSPropertyObserver(MPSPropertyChangeObserver& aObserver, const TUid& aCategory, const TUint aKey, const RProperty::TType aPropertyType)
+    : CActive( CActive::EPriorityStandard ),
+    iObserver( aObserver ),
+    iCategory( aCategory ),
+    iKey( aKey ),
+    iPropertyType( aPropertyType )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPSPropertyObserver::ConstructL()
+	{
+    User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+    CActiveScheduler::Add( this );
+    RunL();
+	}
+
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPSPropertyObserver* CPSPropertyObserver::NewL(MPSPropertyChangeObserver& aObserver, const TUid& aCategory, const TUint aKey, const RProperty::TType aPropertyType)
+	{
+    CPSPropertyObserver* self = new( ELeave )CPSPropertyObserver( aObserver, aCategory, aKey, aPropertyType );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+	}
+
+// Destructor
+CPSPropertyObserver::~CPSPropertyObserver()
+	{
+	Cancel();
+    iProperty.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::RunL
+// 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPSPropertyObserver::RunL()
+	{
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    
+    TInt err(KErrNone);
+    
+    switch (iPropertyType)
+        {
+        case RProperty::EInt:
+	        {
+	        err = iProperty.Get( iValueInt );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, iValueInt );
+             	}
+	        break;
+	        }
+	    case RProperty::EText:
+	        {
+	        err = iProperty.Get( iValueText );
+	        if (!err)
+            	{
+                iObserver.HandlePropertyChangeL( iCategory, iKey, iValueText );
+             	}
+	        break;
+	        }
+	    default:
+	        {
+	        break;
+	        }
+        }
+    
+    if (err)
+    	{
+        iObserver.HandlePropertyChangeErrorL(iCategory, iKey, err);
+     	}
+	}
+
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::DoCancel
+// Cancels an outstanding active request
+// -----------------------------------------------------------------------------
+//
+void CPSPropertyObserver::DoCancel()
+	{
+    iProperty.Cancel();
+	}
+
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::GetValue
+// -----------------------------------------------------------------------------
+//	
+void CPSPropertyObserver::GetValue(TInt& aValue) const
+	{
+	aValue = iValueInt;
+	}
+	
+// -----------------------------------------------------------------------------
+// CPSPropertyObserver::GetValue
+// -----------------------------------------------------------------------------
+//	
+void CPSPropertyObserver::GetValue(TPSTextProperty& aValue) const
+	{
+	aValue = iValueText;
+	}
+	
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Psscheduler.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2006-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:  Custom active scheduler for the preset server
+*
+*/
+
+
+#include "psscheduler.h"
+#include "psserver.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description
+// ---------------------------------------------------------------------------
+//
+
+namespace
+    {
+
+#ifdef _DEBUG
+    
+    void Panic( TInt aReason )
+        {
+        _LIT( schedulerPanic, "PSScheduler" );
+        User::Panic( schedulerPanic, aReason );
+        }
+
+#endif // _DEBUG
+    
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CPSScheduler::CPSScheduler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CPSScheduler::~CPSScheduler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CPSScheduler::SetServer( CPSServer* aServer )
+    {
+    iServer = aServer;
+    }
+
+// ---------------------------------------------------------------------------
+// From class ?base_class.
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void CPSScheduler::Error( TInt aError ) const
+    {
+    __ASSERT_DEBUG( iServer, Panic( KErrArgument ) );
+    
+    if ( iServer->IsActive() )
+        {
+        __DEBUGGER(); // Severe preset server error; activate a breakpoint if debugging.
+        }
+    else
+        {
+        if ( aError == KErrBadDescriptor )
+            {
+            iServer->PanicClient( aError );
+            }
+
+        iServer->Message().Complete( aError );
+        iServer->ReStart();
+        }
+    }
+	 
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Psserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,713 @@
+/*
+* Copyright (c) 2006-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:  Preset server implementation
+*
+*/
+
+
+#include <pscommon.h>
+#include <sbdefs.h>
+
+#include "psdatabasecleanup.h"
+#include "psdebug.h"
+#include "pspendingpreset.h"
+#include "psscheduler.h"
+#include "psserver.h"
+#include "pssession.h"
+#include "psshutdown.h"
+#include "psutils.h"
+
+using namespace conn;
+
+const TInt KPSPriority = CActive::EPriorityStandard;    // Priority of the preset server.
+
+const TInt KPSShutdownTime = 500000; // The time in microseconds between the last client disconnecting and the server being closed.
+const TInt KPSCachedNotificationCleanerPeriod = 60000000; // The period in microseconds between checking for unused cached notifications.
+const TInt KPSCachedNotificationKeepAliveTime = 300000000; // The amount of time in microseconds to keep cached notifications alive after they have been added.
+
+// ======== LOCAL FUNCTIONS ========
+
+namespace
+    {
+
+#ifdef _DEBUG
+
+    // ---------------------------------------------------------------------------
+    // Panics the process.
+    // ---------------------------------------------------------------------------
+    //
+    void Panic( TInt aReason )
+        {
+        User::Panic( KPSServerName, aReason );
+        }
+
+#endif // _DEBUG
+
+    // ---------------------------------------------------------------------------
+    // Sorts the array by priority of the notification observers. Descending order!
+    // ---------------------------------------------------------------------------
+    //
+    TInt SortPresetObserverArrayByPriority( const RMessage2& aMessage1, const RMessage2& aMessage2 )
+        {
+        if ( aMessage1.Int1() < aMessage2.Int1() )
+            {
+            return 1;
+            }
+        else if ( aMessage1.Int1() > aMessage2.Int1() )
+            {
+            return -1;
+            }
+        else
+            {
+            return 0;
+            }
+        }
+
+    // ---------------------------------------------------------------------------
+    // Initializes the server process.
+    // ---------------------------------------------------------------------------
+    //
+    void InitServerL()
+        {
+        User::RenameThread( KPSServerName );
+        
+        TFindServer findServer( KPSServerName );
+        TFullName fullName;
+        
+        if ( findServer.Next( fullName ) ) // Server has not yet been started.
+            {
+            CPSScheduler* scheduler = new ( ELeave ) CPSScheduler;
+            CleanupStack::PushL( scheduler );
+            CActiveScheduler::Install( scheduler );
+
+            CPSServer* server = CPSServer::NewL();
+            CleanupStack::Pop( scheduler );
+            scheduler->SetServer( server );
+
+            // Attention! Absolutely no code that can leave may be run after doing the rendezvous!
+
+            RProcess().Rendezvous( KErrNone );        
+
+            CActiveScheduler::Start();
+            
+            delete server;
+            delete scheduler;
+            }
+        else
+            {
+            RProcess().Rendezvous( KErrNone );
+            }
+        }
+
+    }
+    
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSServer::CPSServer()
+    : CServer2( KPSPriority ), iDatabase( *this ), iShutdownDelay( KPSShutdownTime )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::ConstructL()
+    {
+    PSDEBUG( "CPSServer::ConstructL() [enter]" );
+
+    User::LeaveIfError( iFs.Connect() );
+
+    TFileName databaseFullName;
+    PSUtils::GetDatabaseFullNameL( databaseFullName );
+
+    iDatabase.OpenL( iFs, databaseFullName );
+
+    iShutdown = CPSShutdown::NewL();
+    iCleanup = CPSDatabaseCleanup::NewL( iDatabase );
+
+    iCachedNotificationCleaner = CPeriodic::NewL( CActive::EPriorityStandard );
+    iCachedNotificationCleaner->Start( KPSCachedNotificationCleanerPeriod, KPSCachedNotificationCleanerPeriod,
+                                       TCallBack( StaticCleanCachedNotifications, this ) ); 
+    
+    iPropertyObserver = CPSPropertyObserver::NewL( *this, KUidSystemCategory, 
+                                                   KUidBackupRestoreKey, RProperty::EInt);
+    
+    StartL( KPSServerName );
+
+    PSDEBUG( "CPSServer::ConstructL() [exit]" );
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSServer* CPSServer::NewL()
+    {
+    CPSServer* self = new ( ELeave ) CPSServer;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CPSServer::~CPSServer()
+    {
+    PSDEBUG( "CPSServer::~CPSServer() [enter]" );
+
+    Cancel();
+    
+    delete iPropertyObserver;
+    delete iCachedNotificationCleaner;
+    delete iShutdown;
+    delete iCleanup;
+
+    iDatabase.Close();
+    iFs.Close();
+
+    while ( iPresetObservers.Count() )
+        {
+        if ( !iPresetObservers[0].IsNull() )
+            {
+            iPresetObservers[0].Complete( KErrServerTerminated );
+            }
+        iPresetObservers.Remove( 0 );
+        }
+    iPresetObservers.Close();
+
+    iNotifications.Close();
+    iPendingPresets.ResetAndDestroy();
+
+    PSDEBUG( "CPSServer::~CPSServer() [exit]" );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the current message.
+// ---------------------------------------------------------------------------
+//
+const RMessage2& CPSServer::Message() const
+    {
+    return CServer2::Message();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the database.
+// ---------------------------------------------------------------------------
+//
+RPSDatabase& CPSServer::Database()
+    {
+    return iDatabase;
+    }
+
+// ---------------------------------------------------------------------------
+// Panics the client.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::PanicClient( TInt aReason ) const
+    {
+    Message().Panic( KPSServerName, aReason );
+    }
+
+// ---------------------------------------------------------------------------
+// Increments the session count.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::IncrementSessionCount()
+    {
+    iSessionCount++;
+    
+    iShutdown->Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Decrements the session count.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::DecrementSessionCount()
+    {
+    iSessionCount--;
+    
+    if ( iSessionCount == 0 ) // Last session was closed, so we need to start the shutdown timer.
+        {
+        iShutdown->Start( iShutdownDelay );
+        }
+
+    __ASSERT_DEBUG( iSessionCount >= 0, Panic( KErrCorrupt ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Called when a session is disconnected.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::SessionDisconnected( const RMessage2& aMessage )
+    {
+    PSDEBUG( "CPSServer::SessionDisconnected( RMessage2& ) [enter]" );
+
+    for ( TInt i = 0; i < iPresetObservers.Count(); i++ )
+        {
+        const RMessage2& message = iPresetObservers[i];
+        
+        if ( message.Session() == aMessage.Session() )
+            {
+            if ( !message.IsNull() )
+                {
+                message.Complete( KErrDied );
+                }
+            iPresetObservers.Remove( i );
+            i--;
+            }
+        }
+
+    PSDEBUG( "CPSServer::SessionDisconnected( RMessage2& ) [exit]" );
+    }
+
+// ---------------------------------------------------------------------------
+// Appends a preset observer.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::AppendPresetObserverL( const RMessage2& aMessage )
+    {
+    PSDEBUG( "CPSServer::AppendPresetObserverL( RMessage2& ) [enter]" );
+
+    TInt idx = PresetObserverIndex( aMessage );
+    
+    if ( idx != KErrNotFound )
+        {
+        PSDEBUG( "CPSServer::AppendPresetObserverL - Preset observer already found" );
+        User::Leave( KErrAlreadyExists );
+        }
+
+    TPckgBuf<TPSNotifyDataPackage> data;
+    aMessage.ReadL( 2, data );
+    
+    TInt nextUnhandledNotificationIndex = NextUnhandledNotificationIndexById( data().iNotificationId, aMessage.Int1() );
+    
+    if ( data().iNotificationId > 0 && nextUnhandledNotificationIndex >= 0 )
+        {
+        PSDEBUG2( "CPSServer::AppendPresetObserverL - Cached notification that was missed was found at index %d", nextUnhandledNotificationIndex );
+
+        aMessage.WriteL( 2, TPckgC<TPSNotifyDataPackage>( iNotifications[nextUnhandledNotificationIndex] ) );
+        aMessage.Complete( KErrNone ); 
+        }
+    else
+        {
+        PSDEBUG( "CPSServer::AppendPresetObserverL - No cached notifications of interest were found, starting to observe further ones" );
+        iPresetObservers.AppendL( RMessage2( aMessage ) );
+        }
+
+    PSDEBUG( "CPSServer::AppendPresetObserverL( RMessage2& ) [enter]" );
+    }
+
+// ---------------------------------------------------------------------------
+// Removes a preset observer and completes it with KErrCancel.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::RemovePresetObserver( const RMessage2& aMessage )
+    {
+    TInt idx = PresetObserverIndex( aMessage );
+
+    if ( idx >= 0 )
+        {
+        if ( !iPresetObservers[idx].IsNull() )
+            {
+            iPresetObservers[idx].Complete( KErrCancel );
+            }
+        iPresetObservers.Remove( idx );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the index of a given preset observer.
+// ---------------------------------------------------------------------------
+//
+TInt CPSServer::PresetObserverIndex( const RMessage2& aMessage ) const
+    {
+    TInt idx = KErrNotFound;
+        
+    CSession2* currentSession = aMessage.Session();
+        
+    for ( TInt i = 0; i < iPresetObservers.Count(); i++ )
+        {
+        const RMessage2& message = iPresetObservers[i];
+
+        if ( !message.IsNull() && message.Session() == currentSession && message.Int0() == aMessage.Int0() )
+            {
+            idx = i;
+            /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+            break;
+            /*lint -restore*/
+            }
+        }
+    
+    return idx;
+    }
+
+// ---------------------------------------------------------------------------
+// Appends a pending preset.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::AppendPendingPresetL( TInt aId )
+    {
+    TInt idx = PendingPresetIndex( aId );
+
+    if ( idx == KErrNotFound )
+        {
+        CPSPendingPreset* preset = CPSPendingPreset::NewL( aId );
+        CleanupStack::PushL( preset );
+        iPendingPresets.AppendL( preset );
+        CleanupStack::Pop( preset );
+        }
+    else
+        {
+        User::Leave( KErrLocked );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Commits a pending preset.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::CommitPendingPresetL( TInt aId )
+    {
+    TInt idx = PendingPresetIndex( aId );
+
+    if ( idx >= 0 )
+        {
+        CPSPendingPreset* preset = iPendingPresets[idx];
+        iDatabase.CommitPresetL( *preset );
+        iPendingPresets.Remove( idx );
+        delete preset;
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Removes a pending preset from the array.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::RemovePendingPreset( TInt aId )
+    {
+    TInt idx = PendingPresetIndex( aId );
+    
+    if ( idx >= 0 )
+        {
+        CPSPendingPreset* preset = iPendingPresets[idx];
+        iPendingPresets.Remove( idx );
+        delete preset;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the index of a pending preset.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::SetPendingPresetIndexL( TInt aId, TInt aIndex )
+    {
+    TInt idx = PendingPresetIndex( aId );
+    
+    if ( idx >= 0 )
+        {
+        iPendingPresets[idx]->SetIndex( aIndex ); 
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the name of a pending preset.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::SetPendingPresetNameL( TInt aId, const TDesC& aName )
+    {
+    TInt idx = PendingPresetIndex( aId );
+    
+    if ( idx >= 0 )
+        {
+        iPendingPresets[idx]->SetNameL( aName ); 
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the data of a pending preset.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::SetPendingPresetDataL( TInt aId, const TDesC8& aData )
+    {
+    TInt idx = PendingPresetIndex( aId );
+    
+    if ( idx >= 0 )
+        {
+        iPendingPresets[idx]->SetDataL( aData ); 
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class CSession2
+// Creates a new session.
+// ---------------------------------------------------------------------------
+//
+CSession2* CPSServer::NewSessionL( const TVersion& aVersion, const RMessage2& /*aMessage*/ ) const
+    {
+    TVersion currentVersion( KPSVersionMajor, KPSVersionMinor, KPSVersionBuild );
+    
+    if ( !User::QueryVersionSupported( currentVersion, aVersion ) )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    return CPSSession::NewL( *const_cast<CPSServer*>( this ) );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MPSPresetObserver
+// Invoked when a preset is changed.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::HandlePresetChangedL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason )
+    {
+    NotifyPresetObserversL( aId, aDataHandler, aReason );
+    
+    if (aReason == MPSPresetObserver::EPSDeleted)
+    	{
+    	iCleanup->RequestCleanupCheck();
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the index of a pending preset matching the supplied id.
+// ---------------------------------------------------------------------------
+//
+TInt CPSServer::PendingPresetIndex( TInt aId ) const
+    {
+    TInt idx = KErrNotFound;
+
+    for ( TInt i = 0; i < iPendingPresets.Count(); i++ )
+        {
+        if ( iPendingPresets[i]->Id() == aId )
+            {
+            idx = i;
+            /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/
+            break;
+            /*lint -restore*/
+            }
+        }
+
+    return idx;
+    }
+
+// ---------------------------------------------------------------------------
+// Notifies the preset observers.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::NotifyPresetObserversL( TInt aId, TUid aDataHandler, MPSPresetObserver::TPSReason aReason )
+    {
+    PSDEBUG5( "CPSServer::NotifyPresetObserversL( aId = %d, aDataHandler = %d, aReason = %d ) - Notifications cached: %d", aId, aDataHandler.iUid, aReason, iNotifications.Count() );
+
+    TTime current;
+    current.UniversalTime();
+
+    iCachedNotificationId++; // Running cached notification identifier is incremented here. Must be done before the data package is constructed.
+    
+    TPSNotifyDataPackage data = { aId, aDataHandler, aReason, iCachedNotificationId, current };
+    iNotifications.AppendL( data );
+
+    // Sorts the preset observers array so, that presets are first, then other observers.
+    // This is done to ensure that presets are notified first, just in case.
+    iPresetObservers.Sort( TLinearOrder<RMessage2>( ::SortPresetObserverArrayByPriority ) );
+
+    TInt skipped = 0; // Number of observers that will not be notified, i.e. are skipped.
+
+    while ( iPresetObservers.Count() && skipped < iPresetObservers.Count() )
+        {
+        const RMessage2& message = iPresetObservers[skipped];
+
+        if ( message.IsNull() )
+            {
+            iPresetObservers.Remove( skipped ); // Dead notifiers are removed from the array.
+            }
+        else
+            {
+            TPckgBuf<TPSNotifyDataPackage> msgData;
+            message.ReadL( 2, msgData );
+
+            TInt observedPresetId = message.Int1();
+
+            // If the observer is interested in this preset or it is interested in them all (KErrNotFound),
+            // notify it about the change.
+            if ( aId == observedPresetId || observedPresetId == KErrNotFound )
+                {
+                message.WriteL( 2, TPckgC<TPSNotifyDataPackage>( data ) );
+                message.Complete( KErrNone );
+                
+                iPresetObservers.Remove( skipped );
+                }
+            else
+                {
+                skipped++;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Cleanup routine for deleting unused cached notifications.
+// ---------------------------------------------------------------------------
+//
+TInt CPSServer::NextUnhandledNotificationIndexById( TUint64 aHandledNotificationId, TInt aObservedPresetId )
+    {
+    TInt index = KErrNotFound;
+    
+    for ( TInt i = 0; i < iNotifications.Count() && index == KErrNotFound; i++ )
+        {
+        if ( iNotifications[i].iNotificationId > aHandledNotificationId )
+            {
+            if ( iNotifications[i].iId == aObservedPresetId || aObservedPresetId == KErrNotFound )
+                {
+                index = i;
+                }
+            }
+        }
+    
+    return index;
+    }
+
+// ---------------------------------------------------------------------------
+// Cleanup routine for deleting unused cached notifications.
+// ---------------------------------------------------------------------------
+//
+TInt CPSServer::StaticCleanCachedNotifications( TAny* aSelf )
+    {
+    CPSServer* self = static_cast<CPSServer*>( aSelf );
+    if ( self )
+        {
+        PSDEBUG2( "CPSServer::StaticCleanCachedNotifications [enter] - iNotifications.Count() = %d", self->iNotifications.Count() );
+
+        TTime current;
+        current.UniversalTime();
+        
+        for ( TInt i = 0; i < self->iNotifications.Count(); i++ )
+            {
+            TInt64 diff = current.MicroSecondsFrom( self->iNotifications[i].iNotificationTime ).Int64();
+
+            if ( diff > KPSCachedNotificationKeepAliveTime )
+                {
+                PSDEBUG2( "CPSServer::StaticCleanCachedNotifications - Removing cached notification entry from index with time difference of %d seconds", diff / 1000000 ); 
+                self->iNotifications.Remove( i );
+                i--;
+                }
+            }
+        
+        self->iNotifications.Compress();
+
+        PSDEBUG2( "CPSServer::StaticCleanCachedNotifications [exit] - iNotifications.Count() = %d", self->iNotifications.Count() );
+        }
+
+    return KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// From class MPSPropertyChangeObserver
+// Invoked when a TInt type property is changed.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::HandlePropertyChangeL( const TUid& /* aCategory */, const TUint /* aKey */, const TInt aValue )
+    {
+    PSDEBUG2( "CPSServer::HandlePropertyChangeL( aValue = %d )", aValue);
+    TUint backupPart = aValue & KBURPartTypeMask; 
+    if ( backupPart != EBURUnset && backupPart != EBURNormal ) // backup or restore -> shutdown when possible.
+        {
+        iShutdownDelay = 0;        
+        if ( iSessionCount == 0 )
+            {
+            iShutdown->Start( iShutdownDelay );
+            }
+        }
+    else
+        {
+        PSDEBUG("CPSServer::HandlePropertyChangeL - no backup/restore ongoing" );
+        }        
+    }
+
+// ---------------------------------------------------------------------------
+// From class MPSPropertyChangeObserver
+// Invoked when a TBuf8 type property is changed.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::HandlePropertyChangeL( const TUid& /* aCategory */, 
+                                       const TUint /*aKey*/, 
+                                       const TPSTextProperty& /*aValue */ ){}
+
+// ---------------------------------------------------------------------------
+// From class MPSPropertyChangeObserver
+// Invoked when an error is encountered in property processing.
+// ---------------------------------------------------------------------------
+//
+void CPSServer::HandlePropertyChangeErrorL( const TUid& /* aCategory */, 
+                                            const TUint /* aKey */, 
+                                            TInt /*aError */){}
+    
+    
+
+// ======== GLOBAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Application entry point.
+// ---------------------------------------------------------------------------
+//
+TInt E32Main()
+    {
+    __UHEAP_MARK;
+
+    TInt err = KErrNone;
+
+    CTrapCleanup* cleanupStack = CTrapCleanup::New();
+    if ( cleanupStack )
+        {
+        TRAP( err, InitServerL() )
+
+        __ASSERT_DEBUG( !err, Panic( err ) );
+        PSDEBUG( "CPSServer - Exiting" );
+        delete cleanupStack;        
+        }
+    else
+        {
+        err = KErrNoMemory;
+        }
+        
+    __UHEAP_MARKEND;
+    
+    return err;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Pssession.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,405 @@
+/*
+* Copyright (c) 2006-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:  Defines a session with the preset server
+*
+*/
+
+
+#include <pscommon.h>
+#include <s32mem.h>
+
+#include "psdebug.h"
+#include "psserver.h"
+#include "pssession.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSSession* CPSSession::NewL( CPSServer& aServer )
+    {
+    CPSSession* self = new ( ELeave ) CPSSession( aServer );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSSession::CPSSession( CPSServer& aServer )
+    : CSession2(), iPresetServer( aServer )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::ConstructL()
+    {
+    iPresetServer.IncrementSessionCount();
+    }
+    
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CPSSession::~CPSSession()
+    {
+    iPresetServer.DecrementSessionCount();
+    }
+
+// ---------------------------------------------------------------------------
+// From class CSession2
+// Invoked when a service request is made.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::ServiceL( const RMessage2& aMessage )
+    {
+    PSDEBUG2( "CPSSession::ServiceL >> OpCode = %d", static_cast<TInt>( aMessage.Function() ) );
+
+    TBool messageHandled = ETrue;
+
+    TRAPD( err, messageHandled = DoServiceL( aMessage ) )
+    
+    if ( messageHandled && !aMessage.IsNull() )
+        {
+        PSDEBUG2( "\tMessage was handled >> err = %d", err );
+        aMessage.Complete( err );
+        }
+
+    PSDEBUG( "CPSSession::ServiceL <<" );
+    }
+
+// ---------------------------------------------------------------------------
+// Service request implementation.
+// ---------------------------------------------------------------------------
+//
+TBool CPSSession::DoServiceL( const RMessage2& aMessage )
+    {
+    TPSOpCode opCode = static_cast<TPSOpCode>( aMessage.Function() );
+    TBool messageHandled = ETrue;
+
+    switch ( opCode )
+        {
+        case EPSOpCreatePreset:
+            CreatePresetL( aMessage );
+        break;
+        case EPSOpDeletePreset:
+            DeletePresetL( aMessage );
+        break;
+        case EPSOpStartTransaction:
+            StartTransactionL( aMessage );
+        break;
+        case EPSOpCommitTransaction:
+            CommitTransactionL( aMessage );
+        break;
+        case EPSOpRollbackTransaction:
+            RollbackTransaction( aMessage );
+        break;
+        case EPSOpMovePreset:
+            MovePresetL( aMessage );
+        break;
+        case EPSOpNotify:
+            NotifyPresetChangeL( aMessage );
+            messageHandled = EFalse;
+        break;
+        case EPSOpCancelNotify:
+            CancelNotifyPresetChange( aMessage );
+        break;
+        case EPSOpSetPresetName:
+            SetPresetNameL( aMessage );
+        break;
+        case EPSOpSetPresetIndex:
+            SetPresetIndexL( aMessage );
+        break;
+        case EPSOpSetPresetData:
+            SetPresetDataL( aMessage );
+        break;
+        case EPSOpGetPresetName:
+            GetPresetNameL( aMessage );
+        break;
+        case EPSOpGetPresetNameLength:
+            GetPresetNameLengthL( aMessage );
+        break;
+        case EPSOpGetPresetIndex:
+            GetPresetIndexL( aMessage );
+        break;
+        case EPSOpGetPresetDataHandler:
+            GetPresetDataHandlerL( aMessage );
+        break;
+        case EPSOpGetPresetData:
+            GetPresetDataL( aMessage );
+        break;
+        case EPSOpGetPresetDataLength:
+            GetPresetDataLengthL( aMessage );
+        break;
+        case EPSOpGetPresets:
+            GetPresetsL( aMessage );
+        break;
+        case EPSOpGetPresetsLength:
+            GetPresetsLengthL( aMessage );
+        break;
+        default:
+            iPresetServer.PanicClient( KErrArgument );
+        break;
+        }
+
+    return messageHandled;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CSession2
+// Invoked when a session is disconnected.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::Disconnect(const RMessage2 &aMessage)
+    {
+    iPresetServer.SessionDisconnected( aMessage );
+    
+    CSession2::Disconnect( aMessage );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a create preset message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::CreatePresetL( const RMessage2& aMessage )
+    {
+    TInt id = iPresetServer.Database().CreatePresetL( aMessage.Int0(), TUid::Uid( aMessage.Int1() ) );
+    TPckgBuf<TInt> idBuf( id );
+    aMessage.WriteL( 2, idBuf );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a delete preset message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::DeletePresetL( const RMessage2& aMessage )
+    {
+    iPresetServer.Database().DeletePresetL( aMessage.Int0() );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a start transaction message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::StartTransactionL( const RMessage2& aMessage )
+    {
+    iPresetServer.AppendPendingPresetL( aMessage.Int0() );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a commit transaction message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::CommitTransactionL( const RMessage2& aMessage )
+    {
+    iPresetServer.CommitPendingPresetL( aMessage.Int0() );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a rollback transaction message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::RollbackTransaction( const RMessage2& aMessage )
+    {
+    iPresetServer.RemovePendingPreset( aMessage.Int0() );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a move preset message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::MovePresetL( const RMessage2& aMessage )
+    {
+    iPresetServer.Database().MovePresetL( aMessage.Int0(), aMessage.Int1() );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a notify preset change message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::NotifyPresetChangeL( const RMessage2& aMessage )
+    {
+    iPresetServer.AppendPresetObserverL( aMessage );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a cancel notify preset change message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::CancelNotifyPresetChange( const RMessage2& aMessage )
+    {
+    iPresetServer.RemovePresetObserver( aMessage );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a set preset name message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::SetPresetNameL( const RMessage2& aMessage )
+    {
+    HBufC* name = HBufC::NewLC( aMessage.GetDesLengthL( 1 ) );
+    TPtr namePtr( name->Des() );
+    aMessage.ReadL( 1, namePtr );
+    iPresetServer.SetPendingPresetNameL( aMessage.Int0(), namePtr );
+    CleanupStack::PopAndDestroy( name );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a set preset index message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::SetPresetIndexL( const RMessage2& aMessage )
+    {
+    iPresetServer.SetPendingPresetIndexL( aMessage.Int0(), aMessage.Int1() );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a set preset data message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::SetPresetDataL( const RMessage2& aMessage )
+    {
+    HBufC8* data = HBufC8::NewLC( aMessage.GetDesLengthL( 1 ) );
+    TPtr8 dataPtr( data->Des() );
+    aMessage.ReadL( 1, dataPtr );
+    iPresetServer.SetPendingPresetDataL( aMessage.Int0(), dataPtr );
+    CleanupStack::PopAndDestroy( data );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get preset name message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetNameL( const RMessage2& aMessage )
+    {
+    HBufC* name = iPresetServer.Database().PresetNameL( aMessage.Int0() );
+    CleanupStack::PushL( name );
+    aMessage.WriteL( 1, *name );
+    CleanupStack::PopAndDestroy( name );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get preset name length message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetNameLengthL( const RMessage2& aMessage )
+    {
+    TInt length = iPresetServer.Database().PresetNameLengthL( aMessage.Int0() );
+    TPckgBuf<TInt> pckg( length );
+    aMessage.WriteL( 1, pckg );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get preset index message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetIndexL( const RMessage2& aMessage )
+    {
+    TPckgBuf<TInt> pckg( iPresetServer.Database().PresetIndexL( aMessage.Int0() ) );
+    aMessage.WriteL( 1, pckg );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get preset data handler message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetDataHandlerL( const RMessage2& aMessage )
+    {
+    TPckgBuf<TInt> pckg( iPresetServer.Database().PresetDataHandlerL( aMessage.Int0() ).iUid );
+    aMessage.WriteL( 1, pckg );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get preset data message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetDataL( const RMessage2& aMessage )
+    {
+    HBufC8* data = iPresetServer.Database().PresetDataL( aMessage.Int0() );
+    CleanupStack::PushL( data );
+    aMessage.WriteL( 1, *data );
+    CleanupStack::PopAndDestroy( data );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get preset data length message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetDataLengthL( const RMessage2& aMessage )
+    {
+    TInt length = iPresetServer.Database().PresetDataLengthL( aMessage.Int0() );
+    TPckgBuf<TInt> pckg( length );
+    aMessage.WriteL( 1, pckg );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get presets message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetsL( const RMessage2& aMessage )
+    {
+    RArray<TInt> presets;
+    CleanupClosePushL( presets );
+    
+    iPresetServer.Database().GetPresetListL( presets, TUid::Uid( aMessage.Int0() ) );
+
+    TInt count = presets.Count();
+
+    HBufC8* buf = HBufC8::NewLC( (presets.Count() + 1) * KDefaultRealWidth );
+    TPtr8 ptr( buf->Des() );
+    
+    RDesWriteStream stream( ptr );
+    CleanupClosePushL( stream );
+
+    stream << TCardinality( count );
+    
+    for ( TInt i = 0; i < count; i++ )
+        {
+        stream.WriteInt32L( presets[i] );
+        }
+    
+    stream.CommitL();
+
+    aMessage.WriteL( 1, *buf );
+    
+    CleanupStack::PopAndDestroy( 3, &presets );
+    }
+
+// ---------------------------------------------------------------------------
+// Handles a get presets length message.
+// ---------------------------------------------------------------------------
+//
+void CPSSession::GetPresetsLengthL( const RMessage2& aMessage )
+    {
+    RArray<TInt> presets;
+    CleanupClosePushL( presets );
+    
+    iPresetServer.Database().GetPresetListL( presets, TUid::Uid( aMessage.Int0() ) );
+
+    aMessage.WriteL( 1, TPckgC<TInt>( (presets.Count() + 1) * KDefaultRealWidth ) );
+    
+    CleanupStack::PopAndDestroy( &presets );
+    }
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serversrc/Psshutdown.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2006-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:  Shutdown timer for the preset server
+*
+*/
+
+
+#include "psdebug.h"
+#include "psshutdown.h"
+
+const TInt KPSShutdownPriority = CActive::EPriorityStandard; // The priority of the shutdown timer.
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSShutdown* CPSShutdown::NewL()
+    {
+    CPSShutdown* self = new ( ELeave ) CPSShutdown;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CPSShutdown::CPSShutdown()
+    : CTimer( KPSShutdownPriority )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPSShutdown::ConstructL()
+    {
+    CTimer::ConstructL();
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CPSShutdown::~CPSShutdown()
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Starts the shutdown timer.
+// ---------------------------------------------------------------------------
+//
+void CPSShutdown::Start(TTimeIntervalMicroSeconds32 aDelay)
+    {
+    PSDEBUG3( "CPSShutdown::Start() - Should start the shutdown timer now (IsActive() = %d, aDelay = %d).", 
+              IsActive(), aDelay.Int() );
+    Cancel();              
+    After( aDelay );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive
+// Called when the timer expires.
+// ---------------------------------------------------------------------------
+//
+void CPSShutdown::RunL()
+    {
+    PSDEBUG( "CPSShutdown::RunL() >> Timer expired. Stopping the preset server now!" );
+    CActiveScheduler::Stop();
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive
+// Called when the timer expires.
+// ---------------------------------------------------------------------------
+//
+void CPSShutdown::DoCancel()
+    {
+    PSDEBUG( "CPSShutdown::DoCancel() >> Timer halted." );
+    CTimer::DoCancel();
+    }
+
+// ======== GLOBAL FUNCTIONS ========
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/sis/presetserver_default/package_Inc4_Inc3.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,40 @@
+;
+; Copyright (c) 2006-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:  Package file for project PresetServer for 3.0 and 3.1 devices
+;
+
+; -------- general --------
+
+; Languages
+&EN
+
+; Header
+#{"PresetServer"},(0x10281CB5),1,0,0,TYPE=PU
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; -------- files --------
+
+"\epoc32\release\armv5\urel\psserver.exe"-"!:\sys\bin\psserver.exe"
+"\epoc32\release\armv5\urel\psclient100.dll"-"!:\sys\bin\psclient100.dll"
+
+"..\..\group\backup_registration.xml"-"!:\private\10281cb5\backup_registration.xml"
+
+"\epoc32\release\armv5\urel\psrfsplugin.dll"-"!:\sys\bin\psrfsplugin.dll"
+"\epoc32\data\z\resource\plugins\psrfsplugin.rsc"-"!:\resource\plugins\psrfsplugin.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/sis/presetserver_default/package_Inc5.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2006-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:  Package file for project PresetServer for 3.2 devices
+;
+
+; -------- general --------
+
+; Languages
+&EN
+
+; Header
+#{"PresetServer"},(0x10281CB5),1,0,0,TYPE=PU
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; -------- files --------
+
+"\epoc32\release\armv5\urel\psserver.exe"-"$:\sys\bin\psserver.exe"
+"\epoc32\release\armv5\urel\psclient100.dll"-"$:\sys\bin\psclient100.dll"
+
+"..\..\group\backup_registration.xml"-"$:\private\10281cb5\backup_registration.xml"
+
+"\epoc32\release\armv5\urel\psrfsplugin.dll"-"$:\sys\bin\psrfsplugin.dll"
+"\epoc32\data\z\resource\plugins\psrfsplugin.rsc"-"$:\resource\plugins\psrfsplugin.rsc"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/sis/presetserver_default/package_Inc6.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,41 @@
+;
+; Copyright (c) 2006-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:  Package file for project PresetServer for 5.0 devices
+;
+
+; -------- general --------
+
+; Languages
+&EN
+
+; Header
+#{"PresetServer"},(0x10281CB5),1,0,0,TYPE=SA,RU
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; -------- files --------
+
+"\epoc32\release\armv5\urel\psserver.exe"-"!:\sys\bin\psserver.exe"
+"\epoc32\release\armv5\urel\psclient100.dll"-"!:\sys\bin\psclient100.dll"
+
+"..\..\group\backup_registration.xml"-"!:\private\10281cb5\backup_registration.xml"
+
+"\epoc32\release\armv5\urel\psrfsplugin.dll"-"!:\sys\bin\psrfsplugin.dll"
+"\epoc32\data\z\resource\plugins\psrfsplugin.rsc"-"!:\resource\plugins\psrfsplugin.rsc"
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/sis/presetserver_default/stub.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,42 @@
+;
+; Copyright (c) 2006-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:  Stub package file for project PresetServer
+;
+
+; -------- general --------
+
+; Languages
+&EN
+
+; Header
+#{"PresetServer"},(0x10281CB5),1,0,0
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; -------- files --------
+
+; EXE/DLL
+""-"z:\sys\bin\psserver.exe"
+""-"z:\sys\bin\psclient100.dll"
+""-"z:\sys\bin\psrfsplugin.dll"
+
+; Resources
+""-"z:\resource\plugins\psrfsplugin.r*"
+
+; Other files
+""-"z:\private\10281cb5\backup_registration.xml"	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/all.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+#include <platform_paths.hrh>
+
+TEMPLATE = subdirs
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+                             "rom/qtinternetradio.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(qtinternetradio.iby)" 
+
+ 
+exists($${OS_LAYER_PLATFORM_EXPORT_PATH(qt/translations/internet_radio_10_1*.ts)}) {
+       BLD_INF_RULES.prj_exports += "rom/qtinternetradio_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(qtinternetradio_resources.iby)"  
+       message( "LOALIZATION IS TURNED ON" )       
+}                         
+                           
+
+ 
+
+SUBDIRS = irqlogger \
+          irqcommon \
+          irqsettings \
+          irqfavoritesdb \
+          irqisdsclient \
+          irqmediaplayer \
+          irqnetworkcontroller \
+          irqsonghistory \
+          irqmusicshop \
+          irqnwkinfoobserver \
+          irqstatisticsreport \
+          irqdiskspacewatcher \
+          irqstationexporter \
+          ui 
+          
+SYMBIAN_PLATFORMS = WINSCW ARMV5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqdiskspacewatcheru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,10 @@
+EXPORTS
+	?criticalLevel@IRQDiskSpaceWatcher@@QBE_JXZ @ 1 NONAME ; long long IRQDiskSpaceWatcher::criticalLevel(void) const
+	?startMonitorDrive@IRQDiskSpaceWatcher@@QAE_N_J@Z @ 2 NONAME ; bool IRQDiskSpaceWatcher::startMonitorDrive(long long)
+	??0IRQDiskSpaceWatcher@@QAE@XZ @ 3 NONAME ; IRQDiskSpaceWatcher::IRQDiskSpaceWatcher(void)
+	?startMonitorDrive@IRQDiskSpaceWatcher@@QAE_NXZ @ 4 NONAME ; bool IRQDiskSpaceWatcher::startMonitorDrive(void)
+	?isBelowCriticalLevel@IRQDiskSpaceWatcher@@QAE_N_J@Z @ 5 NONAME ; bool IRQDiskSpaceWatcher::isBelowCriticalLevel(long long)
+	?stopMonitorDrive@IRQDiskSpaceWatcher@@QAEXXZ @ 6 NONAME ; void IRQDiskSpaceWatcher::stopMonitorDrive(void)
+	?isBelowCriticalLevel@IRQDiskSpaceWatcher@@QAE_NXZ @ 7 NONAME ; bool IRQDiskSpaceWatcher::isBelowCriticalLevel(void)
+	??1IRQDiskSpaceWatcher@@UAE@XZ @ 8 NONAME ; IRQDiskSpaceWatcher::~IRQDiskSpaceWatcher(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqfavoritesu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,20 @@
+EXPORTS
+	?makePresetUserDefined@IRQFavoritesDB@@QAEHHH@Z @ 1 NONAME ; int IRQFavoritesDB::makePresetUserDefined(int, int)
+	?addPreset@IRQFavoritesDB@@QAEHABVIRQPreset@@@Z @ 2 NONAME ; int IRQFavoritesDB::addPreset(class IRQPreset const &)
+	?getPresets@IRQFavoritesDB@@QBEPAV?$QList@PAVIRQPreset@@@@XZ @ 3 NONAME ; class QList<class IRQPreset *> * IRQFavoritesDB::getPresets(void) const
+	?emptyPresetCount@IRQFavoritesDB@@QBEHXZ @ 4 NONAME ; int IRQFavoritesDB::emptyPresetCount(void) const
+	?searchPreset@IRQFavoritesDB@@QAEHHH@Z @ 5 NONAME ; int IRQFavoritesDB::searchPreset(int, int)
+	?deletePreset@IRQFavoritesDB@@QAEHH@Z @ 6 NONAME ; int IRQFavoritesDB::deletePreset(int)
+	?maxPresetCount@IRQFavoritesDB@@QAEHXZ @ 7 NONAME ; int IRQFavoritesDB::maxPresetCount(void)
+	?increasePlayedTimes@IRQFavoritesDB@@QAEXABVIRQPreset@@@Z @ 8 NONAME ; void IRQFavoritesDB::increasePlayedTimes(class IRQPreset const &)
+	?getPreviousPreset@IRQFavoritesDB@@QAEHH@Z @ 9 NONAME ; int IRQFavoritesDB::getPreviousPreset(int)
+	?getMoveStatus@IRQFavoritesDB@@QAE_NXZ @ 10 NONAME ; bool IRQFavoritesDB::getMoveStatus(void)
+	?getUniqId@IRQFavoritesDB@@QAEHH@Z @ 11 NONAME ; int IRQFavoritesDB::getUniqId(int)
+	?replaceUserDefinedPreset@IRQFavoritesDB@@QAEHABVIRQPreset@@@Z @ 12 NONAME ; int IRQFavoritesDB::replaceUserDefinedPreset(class IRQPreset const &)
+	?getNextPreset@IRQFavoritesDB@@QAEHH@Z @ 13 NONAME ; int IRQFavoritesDB::getNextPreset(int)
+	?getCIRFavoriteDB@IRQFavoritesDB@@QBEPAVCIRFavoritesDb@@XZ @ 14 NONAME ; class CIRFavoritesDb * IRQFavoritesDB::getCIRFavoriteDB(void) const
+	?replacePreset@IRQFavoritesDB@@QAEHABVIRQPreset@@@Z @ 15 NONAME ; int IRQFavoritesDB::replacePreset(class IRQPreset const &)
+	?addPreset@IRQFavoritesDB@@QAEHABVQString@@0@Z @ 16 NONAME ; int IRQFavoritesDB::addPreset(class QString const &, class QString const &)
+	?setMoveStatus@IRQFavoritesDB@@QAEX_N@Z @ 17 NONAME ; void IRQFavoritesDB::setMoveStatus(bool)
+	??0IRQFavoritesDB@@QAE@XZ @ 18 NONAME ; IRQFavoritesDB::IRQFavoritesDB(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqisdsclientu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,25 @@
+EXPORTS
+	?isdsMultSearch@IRQIsdsClient@@QAEXVQString@@000@Z @ 1 NONAME ; void IRQIsdsClient::isdsMultSearch(class QString, class QString, class QString, class QString)
+	?isdsSearchRequest@IRQIsdsClient@@QAEXABVQString@@@Z @ 2 NONAME ; void IRQIsdsClient::isdsSearchRequest(class QString const &)
+	?isdsLogoDownSendRequest@IRQIsdsClient@@QAEXPAVIRQPreset@@HHH@Z @ 3 NONAME ; void IRQIsdsClient::isdsLogoDownSendRequest(class IRQPreset *, int, int, int)
+	?isdsIsChannelBanner@IRQIsdsClient@@QAE_NXZ @ 4 NONAME ; bool IRQIsdsClient::isdsIsChannelBanner(void)
+	?isdsLogoDownSendCacheLogo@IRQIsdsClient@@QAEAAVTDesC8@@XZ @ 5 NONAME ; class TDesC8 & IRQIsdsClient::isdsLogoDownSendCacheLogo(void)
+	?isdsLogoDownCancelTransaction@IRQIsdsClient@@QAEXXZ @ 6 NONAME ; void IRQIsdsClient::isdsLogoDownCancelTransaction(void)
+	?isdsListenRequest@IRQIsdsClient@@QAEXH_N@Z @ 7 NONAME ; void IRQIsdsClient::isdsListenRequest(int, bool)
+	?isdsChannelRequest@IRQIsdsClient@@QAEXHAA_N@Z @ 8 NONAME ; void IRQIsdsClient::isdsChannelRequest(int, bool &)
+	?openInstance@IRQIsdsClient@@SAPAV1@PAVIRQFavoritesDB@@@Z @ 9 NONAME ; class IRQIsdsClient * IRQIsdsClient::openInstance(class IRQFavoritesDB *)
+	?isdsCategoryRequest@IRQIsdsClient@@QAEXW4IRQIsdsClientInterfaceIDs@1@AA_N@Z @ 10 NONAME ; void IRQIsdsClient::isdsCategoryRequest(enum IRQIsdsClient::IRQIsdsClientInterfaceIDs, bool &)
+	?isdsGetBrowseBanner@IRQIsdsClient@@QAEXAAVQString@@0@Z @ 11 NONAME ; void IRQIsdsClient::isdsGetBrowseBanner(class QString &, class QString &)
+	?isdsGetIRID@IRQIsdsClient@@QAEXXZ @ 12 NONAME ; void IRQIsdsClient::isdsGetIRID(void)
+	?isdsCancelRequest@IRQIsdsClient@@QAEXXZ @ 13 NONAME ; void IRQIsdsClient::isdsCancelRequest(void)
+	?isdsIsLogoCached@IRQIsdsClient@@QAE_NPAVIRQPreset@@HH@Z @ 14 NONAME ; bool IRQIsdsClient::isdsIsLogoCached(class IRQPreset *, int, int)
+	?isdsLogoDownCheckCacheLogo@IRQIsdsClient@@QAEXABVQString@@AAH@Z @ 15 NONAME ; void IRQIsdsClient::isdsLogoDownCheckCacheLogo(class QString const &, int &)
+	?isdsLogoDownIsRunning@IRQIsdsClient@@QBE_NXZ @ 16 NONAME ; bool IRQIsdsClient::isdsLogoDownIsRunning(void) const
+	?isdsIsCategoryCached@IRQIsdsClient@@QAE_NW4IRQIsdsClientInterfaceIDs@1@@Z @ 17 NONAME ; bool IRQIsdsClient::isdsIsCategoryCached(enum IRQIsdsClient::IRQIsdsClientInterfaceIDs)
+	?isdsIsChannelCached@IRQIsdsClient@@QAE_NH@Z @ 18 NONAME ; bool IRQIsdsClient::isdsIsChannelCached(int)
+	?closeInstance@IRQIsdsClient@@QAEXXZ @ 19 NONAME ; void IRQIsdsClient::closeInstance(void)
+	?isdsSyncPreset@IRQIsdsClient@@QAEHHABVQString@@@Z @ 20 NONAME ; int IRQIsdsClient::isdsSyncPreset(int, class QString const &)
+	?isdsPostLog@IRQIsdsClient@@QAEXABVQString@@@Z @ 21 NONAME ; void IRQIsdsClient::isdsPostLog(class QString const &)
+	?isdsIsCategoryBanner@IRQIsdsClient@@QAE_NXZ @ 22 NONAME ; bool IRQIsdsClient::isdsIsCategoryBanner(void)
+	?isdsIsConstructSucceed@IRQIsdsClient@@QBE_NXZ @ 23  NONAME ; bool IRQIsdsClient::isdsIsConstructSucceed(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqloggeru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,11 @@
+EXPORTS
+	?uninstallMessageHandler@FileLogger@@AAEXXZ @ 1  NONAME ; void FileLogger::uninstallMessageHandler(void)
+	?handleMessage@FileLogger@@CAXW4QtMsgType@@PBD@Z @ 2  NONAME ; void FileLogger::handleMessage(enum QtMsgType, char const *)
+	??0MethodLogger@@QAE@PBD@Z @ 3  NONAME ; MethodLogger::MethodLogger(char const *)
+	?connectAndAssert@@YA_NPBVQObject@@PBD01W4ConnectionType@Qt@@@Z @ 4  NONAME ; bool connectAndAssert(class QObject const *, char const *, class QObject const *, char const *, enum Qt::ConnectionType)
+	??1FileLogger@@QAE@XZ @ 5  NONAME ; FileLogger::~FileLogger(void)
+	?writeLog@SymbianLogger@@SAXABVQString@@@Z @ 6  NONAME ; void SymbianLogger::writeLog(class QString const &)
+	?connectAndTest@@YA_NPBVQObject@@PBD01W4ConnectionType@Qt@@@Z @ 7  NONAME ; bool connectAndTest(class QObject const *, char const *, class QObject const *, char const *, enum Qt::ConnectionType)
+	?installMessageHandler@FileLogger@@AAEXABVQString@@_N@Z @ 8  NONAME ; void FileLogger::installMessageHandler(class QString const &, bool)
+	??0FileLogger@@QAE@ABVQString@@_N@Z @ 9  NONAME ; FileLogger::FileLogger(class QString const &, bool)
+	??1MethodLogger@@QAE@XZ @ 10  NONAME ; MethodLogger::~MethodLogger(void)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqmediaplayeru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,9 @@
+EXPORTS
+	??0IRQMediaPlayer@@QAE@XZ @ 1 NONAME ; IRQMediaPlayer::IRQMediaPlayer(void)
+	?disableStereoEffect@IRQMediaPlayer@@QAEXXZ @ 2 NONAME ; void IRQMediaPlayer::disableStereoEffect(void)
+	?stop@IRQMediaPlayer@@QAEXXZ @ 3 NONAME ; void IRQMediaPlayer::stop(void)
+	?setVolume@IRQMediaPlayer@@QAEXH@Z @ 4 NONAME ; void IRQMediaPlayer::setVolume(int)
+	?enableStereoEffect@IRQMediaPlayer@@QAEXXZ @ 5 NONAME ; void IRQMediaPlayer::enableStereoEffect(void)
+	?getVolume@IRQMediaPlayer@@QAEHXZ @ 6 NONAME ; int IRQMediaPlayer::getVolume(void)
+	?playStation@IRQMediaPlayer@@QAEXABVQString@@H@Z @ 7 NONAME ; void IRQMediaPlayer::playStation(class QString const &, int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqmusicshopu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	?launchShazam@IRQMusicShop@@SA_NXZ @ 1 NONAME ; bool IRQMusicShop::launchShazam(void)
+	?launchMusicShop@IRQMusicShop@@SA_NXZ @ 2 NONAME ; bool IRQMusicShop::launchMusicShop(void)
+	?openInstance@IRQMusicShop@@SAPAV1@XZ @ 3 NONAME ; class IRQMusicShop * IRQMusicShop::openInstance(void)
+	?findInMusicShop@IRQMusicShop@@QAE_NABVQString@@00@Z @ 4 NONAME ; bool IRQMusicShop::findInMusicShop(class QString const &, class QString const &, class QString const &)
+	?closeInstance@IRQMusicShop@@QAEXXZ @ 5 NONAME ; void IRQMusicShop::closeInstance(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqnetworkcontrolleru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,19 @@
+EXPORTS
+	?getNetworkList@IRQNetworkController@@QAEXAAV?$QList@K@@@Z @ 1 NONAME ; void IRQNetworkController::getNetworkList(class QList<unsigned long> &)
+	?isWlanSupported@IRQNetworkController@@QBE_NXZ @ 2 NONAME ; bool IRQNetworkController::isWlanSupported(void) const
+	?getIAPId@IRQNetworkController@@QBE?AW4IRQError@@AAK@Z @ 3 NONAME ; enum IRQError IRQNetworkController::getIAPId(unsigned long &) const
+	?getApIdList@IRQNetworkController@@QAEXAAV?$QList@K@@@Z @ 4 NONAME ; void IRQNetworkController::getApIdList(class QList<unsigned long> &)
+	?cancelConnecting@IRQNetworkController@@QAEXXZ @ 5 NONAME ; void IRQNetworkController::cancelConnecting(void)
+	?isHandlingOverConnection@IRQNetworkController@@QAE_NXZ @ 6 NONAME ; bool IRQNetworkController::isHandlingOverConnection(void)
+	?getBearerList@IRQNetworkController@@QAEXAAV?$QList@K@@@Z @ 7 NONAME ; void IRQNetworkController::getBearerList(class QList<unsigned long> &)
+	?getAccessPointList@IRQNetworkController@@QAEXAAVQStringList@@@Z @ 8 NONAME ; void IRQNetworkController::getAccessPointList(class QStringList &)
+	?identifyConnectionType@IRQNetworkController@@QBE?AW4IRQConnectionType@@XZ @ 9 NONAME ; enum IRQConnectionType IRQNetworkController::identifyConnectionType(void) const
+	?openInstance@IRQNetworkController@@SAPAV1@XZ @ 10 NONAME ; class IRQNetworkController * IRQNetworkController::openInstance(void)
+	?closeInstance@IRQNetworkController@@QAEXXZ @ 11 NONAME ; void IRQNetworkController::closeInstance(void)
+	?notifyActiveNetworkObservers@IRQNetworkController@@QAEXW4IRQNetworkEvent@@@Z @ 12 NONAME ; void IRQNetworkController::notifyActiveNetworkObservers(enum IRQNetworkEvent)
+	?getNetworkStatus@IRQNetworkController@@QBE_NXZ @ 13 NONAME ; bool IRQNetworkController::getNetworkStatus(void) const
+	?resetConnectionStatus@IRQNetworkController@@QAEXXZ @ 14 NONAME ; void IRQNetworkController::resetConnectionStatus(void)
+	?isOfflineMode@IRQNetworkController@@QAE_NXZ @ 15 NONAME ; bool IRQNetworkController::isOfflineMode(void)
+	?isConnectRequestIssued@IRQNetworkController@@QBE_NXZ @ 16 NONAME ; bool IRQNetworkController::isConnectRequestIssued(void) const
+	?chooseAccessPoint@IRQNetworkController@@QAEXXZ @ 17 NONAME ; void IRQNetworkController::chooseAccessPoint(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqnwkinfoobserveru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	?closeInstance@IRQNwkInfoObserver@@QAEXXZ @ 1 NONAME ; void IRQNwkInfoObserver::closeInstance(void)
+	?startMonitorNwkInfo@IRQNwkInfoObserver@@QAEXXZ @ 2 NONAME ; void IRQNwkInfoObserver::startMonitorNwkInfo(void)
+	?stopMonitorNwkInfo@IRQNwkInfoObserver@@QAEXXZ @ 3 NONAME ; void IRQNwkInfoObserver::stopMonitorNwkInfo(void)
+	?openInstance@IRQNwkInfoObserver@@SAPAV1@XZ @ 4 NONAME ; class IRQNwkInfoObserver * IRQNwkInfoObserver::openInstance(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqsettingsu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,74 @@
+EXPORTS
+	?setStereoMode@IRQSettings@@QAEXH@Z @ 1 NONAME ; void IRQSettings::setStereoMode(int)
+	?setFlagIfAnyFav@IRQSettings@@QAEXXZ @ 2 NONAME ; void IRQSettings::setFlagIfAnyFav(void)
+	?setApId@IRQSettings@@QAEXK@Z @ 3 NONAME ; void IRQSettings::setApId(unsigned long)
+	?getNetworkId@IRQSettings@@QAE_NAAK@Z @ 4 NONAME ; bool IRQSettings::getNetworkId(unsigned long &)
+	?getApId@IRQSettings@@QAE_NAAK@Z @ 5 NONAME ; bool IRQSettings::getApId(unsigned long &)
+	?get3GBitrateQuality@IRQSettings@@QAEHXZ @ 6 NONAME ; int IRQSettings::get3GBitrateQuality(void)
+	?setVolumeSetting@IRQSettings@@QAEXH@Z @ 7 NONAME ; void IRQSettings::setVolumeSetting(int)
+	?getStickyViewFlag@IRQSettings@@QAE_NAA_N@Z @ 8 NONAME ; bool IRQSettings::getStickyViewFlag(bool &)
+	?setManuallyAddedChId@IRQSettings@@QAEXXZ @ 9 NONAME ; void IRQSettings::setManuallyAddedChId(void)
+	?setDisplayAccessPoint@IRQSettings@@QAEXXZ @ 10 NONAME ; void IRQSettings::setDisplayAccessPoint(void)
+	?timeCorrection@IRQSettings@@QAEHXZ @ 11 NONAME ; int IRQSettings::timeCorrection(void)
+	?setUserSavedApSettings@IRQSettings@@QAEXKKK@Z @ 12 NONAME ; void IRQSettings::setUserSavedApSettings(unsigned long, unsigned long, unsigned long)
+	?setFlagCostWarning@IRQSettings@@QAEXXZ @ 13 NONAME ; void IRQSettings::setFlagCostWarning(void)
+	?getStartingViewId@IRQSettings@@QAE_NAAW4TIRViewId@@@Z @ 14 NONAME ; bool IRQSettings::getStartingViewId(enum TIRViewId &)
+	?setUpdateAvailable@IRQSettings@@QAEXXZ @ 15 NONAME ; void IRQSettings::setUpdateAvailable(void)
+	?reSetFlagTermsAndConditions@IRQSettings@@QAEXXZ @ 16 NONAME ; void IRQSettings::reSetFlagTermsAndConditions(void)
+	?getSongHistoryShow@IRQSettings@@QAEHXZ @ 17 NONAME ; int IRQSettings::getSongHistoryShow(void)
+	?setUserDefinedSelection@IRQSettings@@QAEXK@Z @ 18 NONAME ; void IRQSettings::setUserDefinedSelection(unsigned long)
+	?getUserSavedApSettings@IRQSettings@@QAE_NAAK00@Z @ 19 NONAME ; bool IRQSettings::getUserSavedApSettings(unsigned long &, unsigned long &, unsigned long &)
+	?openInstance@IRQSettings@@SAPAV1@XZ @ 20 NONAME ; class IRQSettings * IRQSettings::openInstance(void)
+	?setSongHistoryShow@IRQSettings@@QAEXH@Z @ 21 NONAME ; void IRQSettings::setSongHistoryShow(int)
+	?setSilencePeriod@IRQSettings@@QAEXI@Z @ 22 NONAME ; void IRQSettings::setSilencePeriod(unsigned int)
+	?getVolumeSetting@IRQSettings@@QAEHXZ @ 23 NONAME ; int IRQSettings::getVolumeSetting(void)
+	?closeInstance@IRQSettings@@QAEXXZ @ 24 NONAME ; void IRQSettings::closeInstance(void)
+	?setGPRSBitrateQuality@IRQSettings@@QAEXH@Z @ 25 NONAME ; void IRQSettings::setGPRSBitrateQuality(int)
+	?getStereoMode@IRQSettings@@QAEHXZ @ 26 NONAME ; int IRQSettings::getStereoMode(void)
+	?getISDSBaseUrl@IRQSettings@@QAE_NAAVQString@@@Z @ 27 NONAME ; bool IRQSettings::getISDSBaseUrl(class QString &)
+	?setStartingViewId@IRQSettings@@QAEXK@Z @ 28 NONAME ; void IRQSettings::setStartingViewId(unsigned long)
+	?setFlagTermsAndConditions@IRQSettings@@QAEXXZ @ 29 NONAME ; void IRQSettings::setFlagTermsAndConditions(void)
+	?setDestinationId@IRQSettings@@QAEXK@Z @ 30 NONAME ; void IRQSettings::setDestinationId(unsigned long)
+	?setTimeCorrection@IRQSettings@@QAEXH@Z @ 31 NONAME ; void IRQSettings::setTimeCorrection(int)
+	?getIrappVersion@IRQSettings@@QAE_NAAVQString@@@Z @ 32 NONAME ; bool IRQSettings::getIrappVersion(class QString &)
+	?set3GBitrateQuality@IRQSettings@@QAEXH@Z @ 33 NONAME ; void IRQSettings::set3GBitrateQuality(int)
+	?privatePath@IRQSettings@@QAE?AVQString@@XZ @ 34 NONAME ; class QString IRQSettings::privatePath(void)
+	?setPreferredQuality@IRQSettings@@QAEXW4IRQPreferredQuality@@@Z @ 35 NONAME ; void IRQSettings::setPreferredQuality(enum IRQPreferredQuality)
+	?displayAccessPoint@IRQSettings@@QAE_NAA_N@Z @ 36 NONAME ; bool IRQSettings::displayAccessPoint(bool &)
+	?getLogRunningNo@IRQSettings@@QAEHXZ @ 37 NONAME ; int IRQSettings::getLogRunningNo(void)
+	?getSilencePeriod@IRQSettings@@QAE_NAAI@Z @ 38 NONAME ; bool IRQSettings::getSilencePeriod(unsigned int &)
+	?getTimeOut@IRQSettings@@QAEHXZ @ 39 NONAME ; int IRQSettings::getTimeOut(void)
+	?getStartingViewParameter@IRQSettings@@QAE_NAAW4TIRViewParameter@@@Z @ 40 NONAME ; bool IRQSettings::getStartingViewParameter(enum TIRViewParameter &)
+	?getGPRSBitrateQuality@IRQSettings@@QAEHXZ @ 41 NONAME ; int IRQSettings::getGPRSBitrateQuality(void)
+	?setSilencePeriodStart@IRQSettings@@QAEXABVQString@@@Z @ 42 NONAME ; void IRQSettings::setSilencePeriodStart(class QString const &)
+	?reSetDisplayAccessPoint@IRQSettings@@QAEXXZ @ 43 NONAME ; void IRQSettings::reSetDisplayAccessPoint(void)
+	?isUpdateAvailable@IRQSettings@@QAE_NAA_N@Z @ 44 NONAME ; bool IRQSettings::isUpdateAvailable(bool &)
+	?setBearerId@IRQSettings@@QAEXK@Z @ 45 NONAME ; void IRQSettings::setBearerId(unsigned long)
+	?setIrappVersion@IRQSettings@@QAEXABVQString@@@Z @ 46 NONAME ; void IRQSettings::setIrappVersion(class QString const &)
+	?getIRID@IRQSettings@@QAE_NAAVQString@@@Z @ 47 NONAME ; bool IRQSettings::getIRID(class QString &)
+	?setStickyViewFlag@IRQSettings@@QAEX_N@Z @ 48 NONAME ; void IRQSettings::setStickyViewFlag(bool)
+	?getPreferredQuality@IRQSettings@@QBE?AW4IRQPreferredQuality@@XZ @ 49 NONAME ; enum IRQPreferredQuality IRQSettings::getPreferredQuality(void) const
+	?getUserDefinedSelection@IRQSettings@@QAE_NAAW4TNetworkConnection@@@Z @ 50 NONAME ; bool IRQSettings::getUserDefinedSelection(enum TNetworkConnection &)
+	?setLogRunningNo@IRQSettings@@QAEXXZ @ 51 NONAME ; void IRQSettings::setLogRunningNo(void)
+	?maxPresetCount@IRQSettings@@QAEHXZ @ 52 NONAME ; int IRQSettings::maxPresetCount(void)
+	?setIRID@IRQSettings@@QAEXABVQString@@@Z @ 53 NONAME ; void IRQSettings::setIRID(class QString const &)
+	?setWiFiBitrateQuality@IRQSettings@@QAEXH@Z @ 54 NONAME ; void IRQSettings::setWiFiBitrateQuality(int)
+	?getWiFiBitrateQuality@IRQSettings@@QAEHXZ @ 55 NONAME ; int IRQSettings::getWiFiBitrateQuality(void)
+	?subscriberId@IRQSettings@@QAE_NAAV?$TBuf@$0P@@@@Z @ 56 NONAME ; bool IRQSettings::subscriberId(class TBuf<15> &)
+	?setNetworkId@IRQSettings@@QAEXK@Z @ 57 NONAME ; void IRQSettings::setNetworkId(unsigned long)
+	?setMaxPresetCount@IRQSettings@@QAEXH@Z @ 58 NONAME ; void IRQSettings::setMaxPresetCount(int)
+	?setISDSBaseUrl@IRQSettings@@QAEXABVQString@@@Z @ 59 NONAME ; void IRQSettings::setISDSBaseUrl(class QString const &)
+	?getManuallyAddedChId@IRQSettings@@QAEHXZ @ 60 NONAME ; int IRQSettings::getManuallyAddedChId(void)
+	?getBearerId@IRQSettings@@QAE_NAAK@Z @ 61 NONAME ; bool IRQSettings::getBearerId(unsigned long &)
+	?getDestinationId@IRQSettings@@QAE_NAAK@Z @ 62 NONAME ; bool IRQSettings::getDestinationId(unsigned long &)
+	?isFlagCostWarning@IRQSettings@@QAE_NAA_N@Z @ 63 NONAME ; bool IRQSettings::isFlagCostWarning(bool &)
+	?setTimeOut@IRQSettings@@QAEXH@Z @ 64 NONAME ; void IRQSettings::setTimeOut(int)
+	?getSilencePeriodStart@IRQSettings@@QAE_NAAVQString@@@Z @ 65 NONAME ; bool IRQSettings::getSilencePeriodStart(class QString &)
+	?setStartingViewParameter@IRQSettings@@QAEXK@Z @ 66 NONAME ; void IRQSettings::setStartingViewParameter(unsigned long)
+	?reSetFlagCostWarning@IRQSettings@@QAEXXZ @ 67 NONAME ; void IRQSettings::reSetFlagCostWarning(void)
+	?isFlagIfAnyFav@IRQSettings@@QAE_NAA_N@Z @ 68 NONAME ; bool IRQSettings::isFlagIfAnyFav(bool &)
+	?setSubscriberId@IRQSettings@@QAEXABV?$TBuf@$0P@@@@Z @ 69 NONAME ; void IRQSettings::setSubscriberId(class TBuf<15> const &)
+	?reSetUpdateAvailable@IRQSettings@@QAEXXZ @ 70 NONAME ; void IRQSettings::reSetUpdateAvailable(void)
+	?isFlagTermsAndConditions@IRQSettings@@QAE_NAA_N@Z @ 71 NONAME ; bool IRQSettings::isFlagTermsAndConditions(bool &)
+	?getGlobalAdvFlag@IRQSettings@@QAE_NAA_N@Z @ 72  NONAME ; bool IRQSettings::getGlobalAdvFlag(bool &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqsonghistoryu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,47 @@
+EXPORTS
+	?handleSongMetaDataReceivedL@IRQSongHistoryEngine@@AAEXABVIRQMetaData@@AAVQString@@@Z @ 1 NONAME ; void IRQSongHistoryEngine::handleSongMetaDataReceivedL(class IRQMetaData const &, class QString &)
+	?getSongName@IRQSongInfo@@QBEABVQString@@XZ @ 2 NONAME ; class QString const & IRQSongInfo::getSongName(void) const
+	?getImageUrl@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 3 NONAME ; class QString const & IRQSongHistoryInfo::getImageUrl(void) const
+	?getChannelType@IRQSongHistoryInfo@@QBEHXZ @ 4 NONAME ; int IRQSongHistoryInfo::getChannelType(void) const
+	?GetChannelId@CIRSongHistoryInfo@@QBEHXZ @ 5 NONAME ; int CIRSongHistoryInfo::GetChannelId(void) const
+	??1IRQSongHistoryInfo@@QAE@XZ @ 6 NONAME ; IRQSongHistoryInfo::~IRQSongHistoryInfo(void)
+	?handleMetaDataReceived@IRQSongHistoryEngine@@QAEXABVIRQMetaData@@ABVIRQPreset@@@Z @ 7 NONAME ; void IRQSongHistoryEngine::handleMetaDataReceived(class IRQMetaData const &, class IRQPreset const &)
+	?getAllSongHistory@IRQSongHistoryEngine@@QAEXAAV?$QList@PAVIRQSongInfo@@@@@Z @ 8 NONAME ; void IRQSongHistoryEngine::getAllSongHistory(class QList<class IRQSongInfo *> &)
+	??0IRQSongHistoryInfo@@QAE@XZ @ 9 NONAME ; IRQSongHistoryInfo::IRQSongHistoryInfo(void)
+	?GetChannelDesc@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 10 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetChannelDesc(void) const
+	?getChannelId@IRQSongHistoryInfo@@QBEHXZ @ 11 NONAME ; int IRQSongHistoryInfo::getChannelId(void) const
+	?SetHistoryInfo@CIRSongHistoryInfo@@QAEXAAVRBuf16@@000HHH000@Z @ 12 NONAME ; void CIRSongHistoryInfo::SetHistoryInfo(class RBuf16 &, class RBuf16 &, class RBuf16 &, class RBuf16 &, int, int, int, class RBuf16 &, class RBuf16 &, class RBuf16 &)
+	?GetStreamUrl@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 13 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetStreamUrl(void) const
+	?closeInstance@IRQSongHistoryEngine@@QAEXXZ @ 14 NONAME ; void IRQSongHistoryEngine::closeInstance(void)
+	?setMusicshopStatus@IRQSongInfo@@QAEXABVQString@@@Z @ 15 NONAME ; void IRQSongInfo::setMusicshopStatus(class QString const &)
+	?GetSongInfo@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 16 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetSongInfo(void) const
+	?setAllInfo@IRQSongInfo@@QAEXABVQString@@00@Z @ 17 NONAME ; void IRQSongInfo::setAllInfo(class QString const &, class QString const &, class QString const &)
+	?getChannelDesc@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 18 NONAME ; class QString const & IRQSongHistoryInfo::getChannelDesc(void) const
+	?updateSongHistoryDb@IRQSongHistoryEngine@@QAEXHABVQString@@000@Z @ 19 NONAME ; void IRQSongHistoryEngine::updateSongHistoryDb(int, class QString const &, class QString const &, class QString const &, class QString const &)
+	?syncHistory@IRQSongHistoryEngine@@QAEXH@Z @ 20 NONAME ; void IRQSongHistoryEngine::syncHistory(int)
+	?getAllHistory@IRQSongHistoryEngine@@QAEXAAV?$QList@PAVIRQSongHistoryInfo@@@@@Z @ 21 NONAME ; void IRQSongHistoryEngine::getAllHistory(class QList<class IRQSongHistoryInfo *> &)
+	?NewLC@CIRSongHistoryInfo@@SAPAV1@XZ @ 22 NONAME ; class CIRSongHistoryInfo * CIRSongHistoryInfo::NewLC(void)
+	?handleSongMetaDataReceived@IRQSongHistoryEngine@@QAEXABVIRQMetaData@@AAVQString@@@Z @ 23 NONAME ; void IRQSongHistoryEngine::handleSongMetaDataReceived(class IRQMetaData const &, class QString &)
+	?GetChannelMusicStatus@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 24 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetChannelMusicStatus(void) const
+	?GetBitrate@CIRSongHistoryInfo@@QBEHXZ @ 25 NONAME ; int CIRSongHistoryInfo::GetBitrate(void) const
+	?getArtistName@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 26 NONAME ; class QString const & IRQSongHistoryInfo::getArtistName(void) const
+	?getMusicStoreStatus@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 27 NONAME ; class QString const & IRQSongHistoryInfo::getMusicStoreStatus(void) const
+	?getBitrate@IRQSongHistoryInfo@@QBEHXZ @ 28 NONAME ; int IRQSongHistoryInfo::getBitrate(void) const
+	?GetChannelName@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 29 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetChannelName(void) const
+	?NewL@CIRSongHistoryInfo@@SAPAV1@XZ @ 30 NONAME ; class CIRSongHistoryInfo * CIRSongHistoryInfo::NewL(void)
+	?getMusicshopStatus@IRQSongInfo@@QBEABVQString@@XZ @ 31 NONAME ; class QString const & IRQSongInfo::getMusicshopStatus(void) const
+	?setSongName@IRQSongInfo@@QAEXABVQString@@@Z @ 32 NONAME ; void IRQSongInfo::setSongName(class QString const &)
+	?getArtistName@IRQSongInfo@@QBEABVQString@@XZ @ 33 NONAME ; class QString const & IRQSongInfo::getArtistName(void) const
+	?setArtistName@IRQSongInfo@@QAEXABVQString@@@Z @ 34 NONAME ; void IRQSongInfo::setArtistName(class QString const &)
+	?openInstance@IRQSongHistoryEngine@@SAPAV1@XZ @ 35 NONAME ; class IRQSongHistoryEngine * IRQSongHistoryEngine::openInstance(void)
+	?clearAllHistory@IRQSongHistoryEngine@@QAEHXZ @ 36 NONAME ; int IRQSongHistoryEngine::clearAllHistory(void)
+	?clearAllSongHistory@IRQSongHistoryEngine@@QAEHXZ @ 37 NONAME ; int IRQSongHistoryEngine::clearAllSongHistory(void)
+	?getChannelName@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 38 NONAME ; class QString const & IRQSongHistoryInfo::getChannelName(void) const
+	?getSongName@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 39 NONAME ; class QString const & IRQSongHistoryInfo::getSongName(void) const
+	??1CIRSongHistoryInfo@@UAE@XZ @ 40 NONAME ; CIRSongHistoryInfo::~CIRSongHistoryInfo(void)
+	?GetImageUrl@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 41 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetImageUrl(void) const
+	?GetArtistInfo@CIRSongHistoryInfo@@QBEABVRBuf16@@XZ @ 42 NONAME ; class RBuf16 const & CIRSongHistoryInfo::GetArtistInfo(void) const
+	?getStreamUrl@IRQSongHistoryInfo@@QBEABVQString@@XZ @ 43 NONAME ; class QString const & IRQSongHistoryInfo::getStreamUrl(void) const
+	?GetChannelType@CIRSongHistoryInfo@@QBEHXZ @ 44 NONAME ; int CIRSongHistoryInfo::GetChannelType(void) const
+	?deleteOneItem@IRQSongHistoryEngine@@QAE_NH@Z @ 45  NONAME ; bool IRQSongHistoryEngine::deleteOneItem(int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqstationexporteru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS 
+	??0IRQStationExporter@@QAE@XZ @ 1  NONAME ; IRQStationExporter::IRQStationExporter(void)
+	?sendViaMms@IRQStationExporter@@QAE_NABVIRQPreset@@ABVQString@@@Z @ 2  NONAME ; bool IRQStationExporter::sendViaMms(class IRQPreset const &, class QString const &)
+	?sendViaMms@IRQStationExporter@@QAE_NABV?$QList@PAVIRQPreset@@@@ABVQString@@@Z @ 3  NONAME ; bool IRQStationExporter::sendViaMms(class QList<class IRQPreset *> const &, class QString const &)
+	??1IRQStationExporter@@QAE@XZ @ 4  NONAME ; IRQStationExporter::~IRQStationExporter(void)
+	_E32Dll=__E32Dll	; Entry point for emulation
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqstatisticsreportu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,14 @@
+EXPORTS
+	?closeInstance@IRQStatisticsReporter@@QAEXXZ @ 1  NONAME ; void IRQStatisticsReporter::closeInstance(void)
+	?logNmsEvent@IRQStatisticsReporter@@QAEXW4IRQNmsType@@H@Z @ 2  NONAME ; void IRQStatisticsReporter::logNmsEvent(enum IRQNmsType, int)
+	?logServerResult@IRQStatisticsReporter@@QAEXABVQString@@W4IRQError@@@Z @ 3  NONAME ; void IRQStatisticsReporter::logServerResult(class QString const &, enum IRQError)
+	?logSongRecogEvent@IRQStatisticsReporter@@QAEXXZ @ 4  NONAME ; void IRQStatisticsReporter::logSongRecogEvent(void)
+	?markSessionStart@IRQStatisticsReporter@@QAEXXZ @ 5  NONAME ; void IRQStatisticsReporter::markSessionStart(void)
+	?openInstance@IRQStatisticsReporter@@SAPAV1@PAVIRQIsdsClient@@@Z @ 6  NONAME ; class IRQStatisticsReporter * IRQStatisticsReporter::openInstance(class IRQIsdsClient *)
+	?restartSession@IRQStatisticsReporter@@QAEXXZ @ 7  NONAME ; void IRQStatisticsReporter::restartSession(void)
+	?sessionEnded@IRQStatisticsReporter@@QAEXW4IRQTerminatedType@@@Z @ 8  NONAME ; void IRQStatisticsReporter::sessionEnded(enum IRQTerminatedType)
+	?sessionStarted@IRQStatisticsReporter@@QAE_NHW4IRQConnectedFrom@@@Z @ 9  NONAME ; bool IRQStatisticsReporter::sessionStarted(int, enum IRQConnectedFrom)
+	?suspendSession@IRQStatisticsReporter@@QAEXXZ @ 10  NONAME ; void IRQStatisticsReporter::suspendSession(void)
+	?updateCurrentNetwork@IRQStatisticsReporter@@QAEXABVQString@@0@Z @ 11  NONAME ; void IRQStatisticsReporter::updateCurrentNetwork(class QString const &, class QString const &)
+	?updateHomeOperator@IRQStatisticsReporter@@QAEXABVQString@@0@Z @ 12  NONAME ; void IRQStatisticsReporter::updateHomeOperator(class QString const &, class QString const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/bwins/irqutilityu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,25 @@
+EXPORTS
+	?convertSError2QError@IRQUtility@@SAXHAAH@Z @ 1 NONAME ; void IRQUtility::convertSError2QError(int, int &)
+	?openAdvLink@IRQUtility@@SA_NABVQString@@@Z @ 2 NONAME ; bool IRQUtility::openAdvLink(class QString const &)
+	?getAvailableBitrates@IRQPreset@@QBEXAAV?$QList@H@@@Z @ 3 NONAME ; void IRQPreset::getAvailableBitrates(class QList<int> &) const
+	?convertIRQPreset2CIRIsdsPreset@IRQUtility@@SAXABVIRQPreset@@AAVCIRIsdsPreset@@@Z @ 4 NONAME ; void IRQUtility::convertIRQPreset2CIRIsdsPreset(class IRQPreset const &, class CIRIsdsPreset &)
+	?clearChannelServerList@IRQPreset@@QAEXXZ @ 5 NONAME ; void IRQPreset::clearChannelServerList(void)
+	?insertChannelServer@IRQPreset@@QAEXABVIRQChannelServerURL@@@Z @ 6 NONAME ; void IRQPreset::insertChannelServer(class IRQChannelServerURL const &)
+	?isSorted@IRQPreset@@QBE_NXZ @ 7 NONAME ; bool IRQPreset::isSorted(void) const
+	?getChannelBitrate@IRQPreset@@QBEHHAAH@Z @ 8  NONAME ; int IRQPreset::getChannelBitrate(int, int &) const
+	?convertCIRPreset2IRQPreset@IRQUtility@@SAXABVCIRPreset@@AAVIRQPreset@@@Z @ 9 NONAME ; void IRQUtility::convertCIRPreset2IRQPreset(class CIRPreset const &, class IRQPreset &)
+	?convertCIRIsdsPreset2IRQPrest@IRQUtility@@SAXABVCIRIsdsPreset@@AAVIRQPreset@@@Z @ 10 NONAME ; void IRQUtility::convertCIRIsdsPreset2IRQPrest(class CIRIsdsPreset const &, class IRQPreset &)
+	??0IRQPreset@@QAE@XZ @ 11 NONAME ; IRQPreset::IRQPreset(void)
+	?isValidUrl@IRQUtility@@SA_NABVQString@@@Z @ 12 NONAME ; bool IRQUtility::isValidUrl(class QString const &)
+	?getURLsForBitrate@IRQPreset@@QBEPAV?$QList@VQString@@@@H@Z @ 13 NONAME ; class QList<class QString> * IRQPreset::getURLsForBitrate(int) const
+	??1IRQPreset@@QAE@XZ @ 14 NONAME ; IRQPreset::~IRQPreset(void)
+	?setUrlBitrate@IRQPreset@@QAE_NHH@Z @ 15 NONAME ; bool IRQPreset::setUrlBitrate(int, int)
+	?getChannelUrlAt@IRQPreset@@QBEHHAAVQString@@@Z @ 16 NONAME ; int IRQPreset::getChannelUrlAt(int, class QString &) const
+	?getChannelURLCount@IRQPreset@@QBEHXZ @ 17 NONAME ; int IRQPreset::getChannelURLCount(void) const
+	?sortURLArray@IRQPreset@@QAEXXZ @ 18 NONAME ; void IRQPreset::sortURLArray(void)
+	??4IRQPreset@@QAEAAV0@ABV0@@Z @ 19 NONAME ; class IRQPreset & IRQPreset::operator=(class IRQPreset const &)
+    ?externalize@IRQPreset@@QBEXAAVQDataStream@@@Z @ 20  NONAME ; void IRQPreset::externalize(class QDataStream &) const
+	?internalize@IRQPreset@@QAEXAAVQDataStream@@@Z @ 21  NONAME ; void IRQPreset::internalize(class QDataStream &)
+    ?writeLog2File@IRQUtility@@SAXABVQString@@_N@Z @ 22  NONAME ; void IRQUtility::writeLog2File(class QString const &, bool)
+	 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/common.pri	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,33 @@
+# Copyright (c) 2007-2007 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:
+
+DEFINES += USER_DEFINED_MUSICSHOP
+DEFINES += USER_DEFINED_DISKSPACE
+#DEFINES += USER_DEFINED_ISDSURL
+
+
+# ##########################################################
+# Logging flag definitions
+# ##########################################################
+
+# Enable logging in release builds
+# LOGGING_FLAGS += LOGGING_ENABLED
+
+# Combines Ui and Engine logs
+#  LOGGING_FLAGS += COMBINE_WITH_ENGINE_LOGGER
+
+# Writes debug prints to file if enabled
+#  LOGGING_FLAGS += TRACE_TO_FILE
+
+DEFINES += $$LOGGING_FLAGS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqdiskspacewatcheru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,13 @@
+EXPORTS
+	_ZN19IRQDiskSpaceWatcher16stopMonitorDriveEv @ 1 NONAME
+	_ZN19IRQDiskSpaceWatcher17startMonitorDriveEv @ 2 NONAME
+	_ZN19IRQDiskSpaceWatcher17startMonitorDriveEx @ 3 NONAME
+	_ZN19IRQDiskSpaceWatcher20isBelowCriticalLevelEv @ 4 NONAME
+	_ZN19IRQDiskSpaceWatcher20isBelowCriticalLevelEx @ 5 NONAME
+	_ZN19IRQDiskSpaceWatcherC1Ev @ 6 NONAME
+	_ZN19IRQDiskSpaceWatcherC2Ev @ 7 NONAME
+	_ZN19IRQDiskSpaceWatcherD0Ev @ 8 NONAME
+	_ZN19IRQDiskSpaceWatcherD1Ev @ 9 NONAME
+	_ZN19IRQDiskSpaceWatcherD2Ev @ 10 NONAME
+	_ZNK19IRQDiskSpaceWatcher13criticalLevelEv @ 11 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqfavoritesu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,21 @@
+EXPORTS
+	_ZN14IRQFavoritesDB12deletePresetEi @ 1 NONAME
+	_ZN14IRQFavoritesDB12searchPresetEii @ 2 NONAME
+	_ZN14IRQFavoritesDB13getMoveStatusEv @ 3 NONAME
+	_ZN14IRQFavoritesDB13getNextPresetEi @ 4 NONAME
+	_ZN14IRQFavoritesDB13replacePresetERK9IRQPreset @ 5 NONAME
+	_ZN14IRQFavoritesDB13setMoveStatusEb @ 6 NONAME
+	_ZN14IRQFavoritesDB14maxPresetCountEv @ 7 NONAME
+	_ZN14IRQFavoritesDB17getPreviousPresetEi @ 8 NONAME
+	_ZN14IRQFavoritesDB19increasePlayedTimesERK9IRQPreset @ 9 NONAME
+	_ZN14IRQFavoritesDB21makePresetUserDefinedEii @ 10 NONAME
+	_ZN14IRQFavoritesDB24replaceUserDefinedPresetERK9IRQPreset @ 11 NONAME
+	_ZN14IRQFavoritesDB9addPresetERK7QStringS2_ @ 12 NONAME
+	_ZN14IRQFavoritesDB9addPresetERK9IRQPreset @ 13 NONAME
+	_ZN14IRQFavoritesDB9getUniqIdEi @ 14 NONAME
+	_ZN14IRQFavoritesDBC1Ev @ 15 NONAME
+	_ZN14IRQFavoritesDBC2Ev @ 16 NONAME
+	_ZNK14IRQFavoritesDB10getPresetsEv @ 17 NONAME
+	_ZNK14IRQFavoritesDB16emptyPresetCountEv @ 18 NONAME
+	_ZNK14IRQFavoritesDB16getCIRFavoriteDBEv @ 19 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqisdsclientu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,25 @@
+EXPORTS
+	_ZN13IRQIsdsClient11isdsGetIRIDEv @ 1 NONAME
+	_ZN13IRQIsdsClient11isdsPostLogERK7QString @ 2 NONAME
+	_ZN13IRQIsdsClient12openInstanceEP14IRQFavoritesDB @ 3 NONAME
+	_ZN13IRQIsdsClient13closeInstanceEv @ 4 NONAME
+	_ZN13IRQIsdsClient14isdsMultSearchE7QStringS0_S0_S0_ @ 5 NONAME
+	_ZN13IRQIsdsClient14isdsSyncPresetEiRK7QString @ 6 NONAME
+	_ZN13IRQIsdsClient16isdsIsLogoCachedEP9IRQPresetii @ 7 NONAME
+	_ZN13IRQIsdsClient17isdsCancelRequestEv @ 8 NONAME
+	_ZN13IRQIsdsClient17isdsListenRequestEib @ 9 NONAME
+	_ZN13IRQIsdsClient17isdsSearchRequestERK7QString @ 10 NONAME
+	_ZN13IRQIsdsClient18isdsChannelRequestEiRb @ 11 NONAME
+	_ZN13IRQIsdsClient19isdsCategoryRequestENS_25IRQIsdsClientInterfaceIDsERb @ 12 NONAME
+	_ZN13IRQIsdsClient19isdsGetBrowseBannerER7QStringS1_ @ 13 NONAME
+	_ZN13IRQIsdsClient19isdsIsChannelBannerEv @ 14 NONAME
+	_ZN13IRQIsdsClient19isdsIsChannelCachedEi @ 15 NONAME
+	_ZN13IRQIsdsClient20isdsIsCategoryBannerEv @ 16 NONAME
+	_ZN13IRQIsdsClient20isdsIsCategoryCachedENS_25IRQIsdsClientInterfaceIDsE @ 17 NONAME
+	_ZN13IRQIsdsClient23isdsLogoDownSendRequestEP9IRQPresetiii @ 18 NONAME
+	_ZN13IRQIsdsClient25isdsLogoDownSendCacheLogoEv @ 19 NONAME
+	_ZN13IRQIsdsClient26isdsLogoDownCheckCacheLogoERK7QStringRi @ 20 NONAME
+	_ZN13IRQIsdsClient29isdsLogoDownCancelTransactionEv @ 21 NONAME
+	_ZNK13IRQIsdsClient21isdsLogoDownIsRunningEv @ 22 NONAME
+        _ZNK13IRQIsdsClient22isdsIsConstructSucceedEv @ 23 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqloggeru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,15 @@
+EXPORTS
+	_Z14connectAndTestPK7QObjectPKcS1_S3_N2Qt14ConnectionTypeE @ 1 NONAME
+	_Z16connectAndAssertPK7QObjectPKcS1_S3_N2Qt14ConnectionTypeE @ 2 NONAME
+	_ZN10FileLogger13handleMessageE9QtMsgTypePKc @ 3 NONAME
+	_ZN10FileLogger21installMessageHandlerERK7QStringb @ 4 NONAME
+	_ZN10FileLogger23uninstallMessageHandlerEv @ 5 NONAME
+	_ZN10FileLoggerC1ERK7QStringb @ 6 NONAME
+	_ZN10FileLoggerC2ERK7QStringb @ 7 NONAME
+	_ZN10FileLoggerD1Ev @ 8 NONAME
+	_ZN10FileLoggerD2Ev @ 9 NONAME
+	_ZN12MethodLoggerC1EPKc @ 10 NONAME
+	_ZN12MethodLoggerC2EPKc @ 11 NONAME
+	_ZN12MethodLoggerD1Ev @ 12 NONAME
+	_ZN12MethodLoggerD2Ev @ 13 NONAME
+	_ZN13SymbianLogger8writeLogERK7QString @ 14 NONAME
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqmediaplayeru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,10 @@
+EXPORTS
+	_ZN14IRQMediaPlayer11playStationERK7QStringi @ 1 NONAME
+	_ZN14IRQMediaPlayer18enableStereoEffectEv @ 2 NONAME
+	_ZN14IRQMediaPlayer19disableStereoEffectEv @ 3 NONAME
+	_ZN14IRQMediaPlayer4stopEv @ 4 NONAME
+	_ZN14IRQMediaPlayer9getVolumeEv @ 5 NONAME
+	_ZN14IRQMediaPlayer9setVolumeEi @ 6 NONAME
+	_ZN14IRQMediaPlayerC1Ev @ 7 NONAME
+	_ZN14IRQMediaPlayerC2Ev @ 8 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqmusicshopu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN12IRQMusicShop12launchShazamEv @ 1 NONAME
+	_ZN12IRQMusicShop12openInstanceEv @ 2 NONAME
+	_ZN12IRQMusicShop13closeInstanceEv @ 3 NONAME
+	_ZN12IRQMusicShop15findInMusicShopERK7QStringS2_S2_ @ 4 NONAME
+	_ZN12IRQMusicShop15launchMusicShopEv @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqnetworkcontrolleru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,19 @@
+EXPORTS
+	_ZN20IRQNetworkController11getApIdListER5QListImE @ 1 NONAME
+	_ZN20IRQNetworkController12openInstanceEv @ 2 NONAME
+	_ZN20IRQNetworkController13closeInstanceEv @ 3 NONAME
+	_ZN20IRQNetworkController13getBearerListER5QListImE @ 4 NONAME
+	_ZN20IRQNetworkController13isOfflineModeEv @ 5 NONAME
+	_ZN20IRQNetworkController14getNetworkListER5QListImE @ 6 NONAME
+	_ZN20IRQNetworkController16cancelConnectingEv @ 7 NONAME
+	_ZN20IRQNetworkController17chooseAccessPointEv @ 8 NONAME
+	_ZN20IRQNetworkController18getAccessPointListER11QStringList @ 9 NONAME
+	_ZN20IRQNetworkController21resetConnectionStatusEv @ 10 NONAME
+	_ZN20IRQNetworkController24isHandlingOverConnectionEv @ 11 NONAME
+	_ZN20IRQNetworkController28notifyActiveNetworkObserversE15IRQNetworkEvent @ 12 NONAME
+	_ZNK20IRQNetworkController15isWlanSupportedEv @ 13 NONAME
+	_ZNK20IRQNetworkController16getNetworkStatusEv @ 14 NONAME
+	_ZNK20IRQNetworkController22identifyConnectionTypeEv @ 15 NONAME
+	_ZNK20IRQNetworkController22isConnectRequestIssuedEv @ 16 NONAME
+	_ZNK20IRQNetworkController8getIAPIdERm @ 17 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqnwkinfoobserveru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN18IRQNwkInfoObserver12openInstanceEv @ 1 NONAME
+	_ZN18IRQNwkInfoObserver13closeInstanceEv @ 2 NONAME
+	_ZN18IRQNwkInfoObserver18stopMonitorNwkInfoEv @ 3 NONAME
+	_ZN18IRQNwkInfoObserver19startMonitorNwkInfoEv @ 4 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqsettingsu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,74 @@
+EXPORTS
+	_ZN11IRQSettings10getTimeOutEv @ 1 NONAME
+	_ZN11IRQSettings10setTimeOutEi @ 2 NONAME
+	_ZN11IRQSettings11getBearerIdERm @ 3 NONAME
+	_ZN11IRQSettings11privatePathEv @ 4 NONAME
+	_ZN11IRQSettings11setBearerIdEm @ 5 NONAME
+	_ZN11IRQSettings12getNetworkIdERm @ 6 NONAME
+	_ZN11IRQSettings12openInstanceEv @ 7 NONAME
+	_ZN11IRQSettings12setNetworkIdEm @ 8 NONAME
+	_ZN11IRQSettings12subscriberIdER4TBufILi15EE @ 9 NONAME
+	_ZN11IRQSettings13closeInstanceEv @ 10 NONAME
+	_ZN11IRQSettings13getStereoModeEv @ 11 NONAME
+	_ZN11IRQSettings13setStereoModeEi @ 12 NONAME
+	_ZN11IRQSettings14getISDSBaseUrlER7QString @ 13 NONAME
+	_ZN11IRQSettings14isFlagIfAnyFavERb @ 14 NONAME
+	_ZN11IRQSettings14maxPresetCountEv @ 15 NONAME
+	_ZN11IRQSettings14setISDSBaseUrlERK7QString @ 16 NONAME
+	_ZN11IRQSettings14timeCorrectionEv @ 17 NONAME
+	_ZN11IRQSettings15getIrappVersionER7QString @ 18 NONAME
+	_ZN11IRQSettings15getLogRunningNoEv @ 19 NONAME
+	_ZN11IRQSettings15setFlagIfAnyFavEv @ 20 NONAME
+	_ZN11IRQSettings15setIrappVersionERK7QString @ 21 NONAME
+	_ZN11IRQSettings15setLogRunningNoEv @ 22 NONAME
+	_ZN11IRQSettings15setSubscriberIdERK4TBufILi15EE @ 23 NONAME
+	_ZN11IRQSettings16getDestinationIdERm @ 24 NONAME
+	_ZN11IRQSettings16getSilencePeriodERj @ 25 NONAME
+	_ZN11IRQSettings16getVolumeSettingEv @ 26 NONAME
+	_ZN11IRQSettings16setDestinationIdEm @ 27 NONAME
+	_ZN11IRQSettings16setSilencePeriodEj @ 28 NONAME
+	_ZN11IRQSettings16setVolumeSettingEi @ 29 NONAME
+	_ZN11IRQSettings17getStartingViewIdER9TIRViewId @ 30 NONAME
+	_ZN11IRQSettings17getStickyViewFlagERb @ 31 NONAME
+	_ZN11IRQSettings17isFlagCostWarningERb @ 32 NONAME
+	_ZN11IRQSettings17isUpdateAvailableERb @ 33 NONAME
+	_ZN11IRQSettings17setMaxPresetCountEi @ 34 NONAME
+	_ZN11IRQSettings17setStartingViewIdEm @ 35 NONAME
+	_ZN11IRQSettings17setStickyViewFlagEb @ 36 NONAME
+	_ZN11IRQSettings17setTimeCorrectionEi @ 37 NONAME
+	_ZN11IRQSettings18displayAccessPointERb @ 38 NONAME
+	_ZN11IRQSettings18getSongHistoryShowEv @ 39 NONAME
+	_ZN11IRQSettings18setFlagCostWarningEv @ 40 NONAME
+	_ZN11IRQSettings18setSongHistoryShowEi @ 41 NONAME
+	_ZN11IRQSettings18setUpdateAvailableEv @ 42 NONAME
+	_ZN11IRQSettings19get3GBitrateQualityEv @ 43 NONAME
+	_ZN11IRQSettings19set3GBitrateQualityEi @ 44 NONAME
+	_ZN11IRQSettings19setPreferredQualityE19IRQPreferredQuality @ 45 NONAME
+	_ZN11IRQSettings20getManuallyAddedChIdEv @ 46 NONAME
+	_ZN11IRQSettings20reSetFlagCostWarningEv @ 47 NONAME
+	_ZN11IRQSettings20reSetUpdateAvailableEv @ 48 NONAME
+	_ZN11IRQSettings20setManuallyAddedChIdEv @ 49 NONAME
+	_ZN11IRQSettings21getGPRSBitrateQualityEv @ 50 NONAME
+	_ZN11IRQSettings21getSilencePeriodStartER7QString @ 51 NONAME
+	_ZN11IRQSettings21getWiFiBitrateQualityEv @ 52 NONAME
+	_ZN11IRQSettings21setDisplayAccessPointEv @ 53 NONAME
+	_ZN11IRQSettings21setGPRSBitrateQualityEi @ 54 NONAME
+	_ZN11IRQSettings21setSilencePeriodStartERK7QString @ 55 NONAME
+	_ZN11IRQSettings21setWiFiBitrateQualityEi @ 56 NONAME
+	_ZN11IRQSettings22getUserSavedApSettingsERmS0_S0_ @ 57 NONAME
+	_ZN11IRQSettings22setUserSavedApSettingsEmmm @ 58 NONAME
+	_ZN11IRQSettings23getUserDefinedSelectionER18TNetworkConnection @ 59 NONAME
+	_ZN11IRQSettings23reSetDisplayAccessPointEv @ 60 NONAME
+	_ZN11IRQSettings23setUserDefinedSelectionEm @ 61 NONAME
+	_ZN11IRQSettings24getStartingViewParameterER16TIRViewParameter @ 62 NONAME
+	_ZN11IRQSettings24isFlagTermsAndConditionsERb @ 63 NONAME
+	_ZN11IRQSettings24setStartingViewParameterEm @ 64 NONAME
+	_ZN11IRQSettings25setFlagTermsAndConditionsEv @ 65 NONAME
+	_ZN11IRQSettings27reSetFlagTermsAndConditionsEv @ 66 NONAME
+	_ZN11IRQSettings7getApIdERm @ 67 NONAME
+	_ZN11IRQSettings7getIRIDER7QString @ 68 NONAME
+	_ZN11IRQSettings7setApIdEm @ 69 NONAME
+	_ZN11IRQSettings7setIRIDERK7QString @ 70 NONAME
+	_ZNK11IRQSettings19getPreferredQualityEv @ 71 NONAME
+	_ZN11IRQSettings16getGlobalAdvFlagERb @ 72 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqsonghistoryu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,51 @@
+EXPORTS
+	_ZN11IRQSongInfo10setAllInfoERK7QStringS2_S2_ @ 1 NONAME
+	_ZN11IRQSongInfo11setSongNameERK7QString @ 2 NONAME
+	_ZN11IRQSongInfo13setArtistNameERK7QString @ 3 NONAME
+	_ZN11IRQSongInfo18setMusicshopStatusERK7QString @ 4 NONAME
+	_ZN18CIRSongHistoryInfo14SetHistoryInfoER6RBuf16S1_S1_S1_iiiS1_S1_S1_ @ 5 NONAME
+	_ZN18CIRSongHistoryInfo4NewLEv @ 6 NONAME
+	_ZN18CIRSongHistoryInfo5NewLCEv @ 7 NONAME
+	_ZN18CIRSongHistoryInfoD0Ev @ 8 NONAME
+	_ZN18CIRSongHistoryInfoD1Ev @ 9 NONAME
+	_ZN18CIRSongHistoryInfoD2Ev @ 10 NONAME
+	_ZN18IRQSongHistoryInfoC1Ev @ 11 NONAME
+	_ZN18IRQSongHistoryInfoC2Ev @ 12 NONAME
+	_ZN18IRQSongHistoryInfoD1Ev @ 13 NONAME
+	_ZN18IRQSongHistoryInfoD2Ev @ 14 NONAME
+	_ZN20IRQSongHistoryEngine11syncHistoryEi @ 15 NONAME
+	_ZN20IRQSongHistoryEngine12openInstanceEv @ 16 NONAME
+	_ZN20IRQSongHistoryEngine13closeInstanceEv @ 17 NONAME
+	_ZN20IRQSongHistoryEngine13getAllHistoryER5QListIP18IRQSongHistoryInfoE @ 18 NONAME
+	_ZN20IRQSongHistoryEngine15clearAllHistoryEv @ 19 NONAME
+	_ZN20IRQSongHistoryEngine17getAllSongHistoryER5QListIP11IRQSongInfoE @ 20 NONAME
+	_ZN20IRQSongHistoryEngine19clearAllSongHistoryEv @ 21 NONAME
+	_ZN20IRQSongHistoryEngine19updateSongHistoryDbEiRK7QStringS2_S2_S2_ @ 22 NONAME
+	_ZN20IRQSongHistoryEngine22handleMetaDataReceivedERK11IRQMetaDataRK9IRQPreset @ 23 NONAME
+	_ZN20IRQSongHistoryEngine26handleSongMetaDataReceivedERK11IRQMetaDataR7QString @ 24 NONAME
+	_ZN20IRQSongHistoryEngine27handleSongMetaDataReceivedLERK11IRQMetaDataR7QString @ 25 NONAME
+	_ZNK11IRQSongInfo11getSongNameEv @ 26 NONAME
+	_ZNK11IRQSongInfo13getArtistNameEv @ 27 NONAME
+	_ZNK11IRQSongInfo18getMusicshopStatusEv @ 28 NONAME
+	_ZNK18CIRSongHistoryInfo10GetBitrateEv @ 29 NONAME
+	_ZNK18CIRSongHistoryInfo11GetImageUrlEv @ 30 NONAME
+	_ZNK18CIRSongHistoryInfo11GetSongInfoEv @ 31 NONAME
+	_ZNK18CIRSongHistoryInfo12GetChannelIdEv @ 32 NONAME
+	_ZNK18CIRSongHistoryInfo12GetStreamUrlEv @ 33 NONAME
+	_ZNK18CIRSongHistoryInfo13GetArtistInfoEv @ 34 NONAME
+	_ZNK18CIRSongHistoryInfo14GetChannelDescEv @ 35 NONAME
+	_ZNK18CIRSongHistoryInfo14GetChannelNameEv @ 36 NONAME
+	_ZNK18CIRSongHistoryInfo14GetChannelTypeEv @ 37 NONAME
+	_ZNK18CIRSongHistoryInfo21GetChannelMusicStatusEv @ 38 NONAME
+	_ZNK18IRQSongHistoryInfo10getBitrateEv @ 39 NONAME
+	_ZNK18IRQSongHistoryInfo11getImageUrlEv @ 40 NONAME
+	_ZNK18IRQSongHistoryInfo11getSongNameEv @ 41 NONAME
+	_ZNK18IRQSongHistoryInfo12getChannelIdEv @ 42 NONAME
+	_ZNK18IRQSongHistoryInfo12getStreamUrlEv @ 43 NONAME
+	_ZNK18IRQSongHistoryInfo13getArtistNameEv @ 44 NONAME
+	_ZNK18IRQSongHistoryInfo14getChannelDescEv @ 45 NONAME
+	_ZNK18IRQSongHistoryInfo14getChannelNameEv @ 46 NONAME
+	_ZNK18IRQSongHistoryInfo14getChannelTypeEv @ 47 NONAME
+	_ZNK18IRQSongHistoryInfo19getMusicStoreStatusEv @ 48 NONAME
+	_ZN20IRQSongHistoryEngine13deleteOneItemEi @ 49  NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqstationexporteru.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,9 @@
+EXPORTS
+ 
+	_ZN18IRQStationExporter10sendViaMmsERK5QListIP9IRQPresetERK7QString @ 1 NONAME
+	_ZN18IRQStationExporter10sendViaMmsERK9IRQPresetRK7QString @ 2 NONAME
+	_ZN18IRQStationExporterC1Ev @ 3 NONAME
+	_ZN18IRQStationExporterC2Ev @ 4 NONAME
+	_ZN18IRQStationExporterD1Ev @ 5 NONAME
+	_ZN18IRQStationExporterD2Ev @ 6 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqstatisticsreportu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,16 @@
+EXPORTS
+
+	_ZN21IRQStatisticsReporter11logNmsEventE10IRQNmsTypei @ 1  NONAME
+	_ZN21IRQStatisticsReporter12openInstanceEP13IRQIsdsClient @ 2  NONAME
+	_ZN21IRQStatisticsReporter12sessionEndedE17IRQTerminatedType @ 3  NONAME
+	_ZN21IRQStatisticsReporter13closeInstanceEv @ 4  NONAME
+	_ZN21IRQStatisticsReporter14restartSessionEv @ 5  NONAME
+	_ZN21IRQStatisticsReporter14sessionStartedEi16IRQConnectedFrom @ 6  NONAME
+	_ZN21IRQStatisticsReporter14suspendSessionEv @ 7  NONAME
+	_ZN21IRQStatisticsReporter15logServerResultERK7QString8IRQError @ 8  NONAME
+	_ZN21IRQStatisticsReporter16markSessionStartEv @ 9  NONAME
+	_ZN21IRQStatisticsReporter17logSongRecogEventEv @ 10  NONAME
+	_ZN21IRQStatisticsReporter18updateHomeOperatorERK7QStringS2_ @ 11  NONAME
+	_ZN21IRQStatisticsReporter20updateCurrentNetworkERK7QStringS2_ @ 12  NONAME
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/eabi/irqutilityu.def	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,26 @@
+EXPORTS
+	_ZN10IRQUtility10isValidUrlERK7QString @ 1 NONAME
+	_ZN10IRQUtility11openAdvLinkERK7QString @ 2 NONAME
+	_ZN10IRQUtility20convertSError2QErrorEiRi @ 3 NONAME
+	_ZN10IRQUtility26convertCIRPreset2IRQPresetERK9CIRPresetR9IRQPreset @ 4 NONAME
+	_ZN10IRQUtility29convertCIRIsdsPreset2IRQPrestERK13CIRIsdsPresetR9IRQPreset @ 5 NONAME
+	_ZN10IRQUtility30convertIRQPreset2CIRIsdsPresetERK9IRQPresetR13CIRIsdsPreset @ 6 NONAME
+	_ZN9IRQPreset12sortURLArrayEv @ 7 NONAME
+	_ZN9IRQPreset13setUrlBitrateEii @ 8 NONAME
+	_ZN9IRQPreset19insertChannelServerERK19IRQChannelServerURL @ 9 NONAME
+	_ZN9IRQPreset22clearChannelServerListEv @ 10 NONAME
+	_ZN9IRQPresetC1Ev @ 11 NONAME
+	_ZN9IRQPresetC2Ev @ 12 NONAME
+	_ZN9IRQPresetD1Ev @ 13 NONAME
+	_ZN9IRQPresetD2Ev @ 14 NONAME
+	_ZN9IRQPresetaSERKS_ @ 15 NONAME
+	_ZNK9IRQPreset15getChannelUrlAtEiR7QString @ 16 NONAME
+	_ZNK9IRQPreset17getChannelBitrateEiRi @ 17 NONAME
+	_ZNK9IRQPreset17getURLsForBitrateEi @ 18 NONAME
+	_ZNK9IRQPreset18getChannelURLCountEv @ 19 NONAME
+	_ZNK9IRQPreset20getAvailableBitratesER5QListIiE @ 20 NONAME
+    _ZNK9IRQPreset8isSortedEv @ 21 NONAME
+    _ZN9IRQPreset11internalizeER11QDataStream @ 22  NONAME
+	_ZNK9IRQPreset11externalizeER11QDataStream @ 23  NONAME
+	_ZN10IRQUtility13writeLog2FileERK7QStringb @ 24 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/hb_armv5_urel.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,73 @@
+;
+; 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:
+;
+; hb_armv5_urel.pkg generated by qmake at 2009-08-28T15:17:52
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"hb"},(0xE1803b06),1,0,0
+
+; Localised Vendor name
+%{"Nokia, Qt Software"}
+
+; Unique Vendor name
+:"Nokia, Qt Software"
+
+; Dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+(0x2001E61C), 4, 5, 2, {"QtLibs pre-release"}
+
+; DEPLOYMENT
+"r:/epoc32/release/armv5/urel/HbCore.dll"    - "!:\sys\bin\HbCore.dll"
+"r:/epoc32/release/armv5/urel/HbWidgets.dll"    - "!:\sys\bin\HbWidgets.dll"
+"r:/epoc32/release/armv5/urel/HbTools.dll"    - "!:\sys\bin\HbTools.dll"
+"r:/epoc32/release/armv5/urel/HbInput.dll"    - "!:\sys\bin\HbInput.dll"
+"r:/epoc32/release/armv5/urel/HbFeedback.dll"    - "!:\sys\bin\HbFeedback.dll"
+"r:/epoc32/release/armv5/urel/HbTactilePlugin.dll"    - "!:\sys\bin\HbTactilePlugin.dll"
+"r:/orbit/hb/qmakepluginstubs/HbTactilePlugin.qtplugin"    - "!:\resource\qt\plugins\hb\interaction\HbTactilePlugin.qtplugin"
+
+"r:\epoc32\release\armv5\urel\hbthemeserver.exe"                          - "!:\sys\bin\hbthemeserver.exe"
+"r:\epoc32\data\z\resource\apps\hbthemeserver.rsc"                                - "!:\resource\apps\hbthemeserver.rsc"
+"r:\epoc32\data\z\private\10003a3f\import\apps\hbthemeserver_reg.rsc"             - "!:\private\10003a3f\import\apps\hbthemeserver_reg.rsc"
+ 
+"r:\epoc32\release\armv5\urel\hbiconpreloader.exe"                          - "!:\sys\bin\hbiconpreloader.exe"
+"r:\epoc32\data\z\resource\apps\hbiconpreloader.rsc"                              - "!:\resource\apps\hbiconpreloader.rsc"
+"r:\epoc32\data\z\private\10003a3f\import\apps\hbiconpreloader_reg.rsc"           - "!:\private\10003a3f\import\apps\hbiconpreloader_reg.rsc"
+ 
+"r:\epoc32\release\armv5\urel\hbdevicedialogappserver.exe"                        - "!:\sys\bin\hbdevicedialogappserver.exe"
+"r:\epoc32\data\z\resource\apps\hbdevicedialogappserver.rsc"                      - "!:\resource\apps\hbdevicedialogappserver.rsc"
+"r:\epoc32\data\z\private\10003a3f\import\apps\hbdevicedialogappserver_reg.rsc"   - "!:\private\10003a3f\import\apps\hbdevicedialogappserver_reg.rsc"
+
+"r:/epoc32/release/armv5/urel/HbGlobalCommonNotePlugin.dll"    - "!:\sys\bin\HbGlobalCommonNotePlugin.dll"
+"r:/orbit/hb/src/hbplugins/devicedialogs/globalcommonnoteplugin/qmakepluginstubs/HbGlobalCommonNotePlugin.qtplugin"    - "!:\resource\plugins\devicedialogs\HbGlobalCommonNotePlugin.qtplugin"
+
+"r:/epoc32/release/armv5/urel/HbDeviceNotificationDialogPlugin.dll"    - "!:\sys\bin\HbDeviceNotificationDialogPlugin.dll"
+"r:/orbit/hb/src/hbplugins/devicedialogs/devicenotificationdialogplugin/qmakepluginstubs/HbDeviceNotificationDialogPlugin.qtplugin"    - "!:\resource\plugins\devicedialogs\HbDeviceNotificationDialogPlugin.qtplugin"
+
+"r:/epoc32/release/armv5/urel/HbDeviceProgressDialogPlugin.dll"    - "!:\sys\bin\HbDeviceProgressDialogPlugin.dll"
+"r:/orbit/hb/src/hbplugins/devicedialogs/deviceprogressdialogplugin/qmakepluginstubs/HbDeviceProgressDialogPlugin.qtplugin"    - "!:\resource\plugins\devicedialogs\HbDeviceProgressDialogPlugin.qtplugin"
+
+"r:/epoc32/release/armv5/urel/HbGlobalConfirmationQueryPlugin.dll"    - "!:\sys\bin\HbGlobalConfirmationQueryPlugin.dll"
+"r:/orbit/hb/src/hbplugins/devicedialogs/globalconfirmationqueryplugin/qmakepluginstubs/HbGlobalConfirmationQueryPlugin.qtplugin"    - "!:\resource\plugins\devicedialogs\HbGlobalConfirmationQueryPlugin.qtplugin"
+
+"r:/epoc32/release/armv5/urel/HbIndicatorPopupPlugin.dll"    - "!:\sys\bin\HbIndicatorPopupPlugin.dll"
+"r:/orbit/hb/src/hbplugins/devicedialogs/indicatorpopupplugin/qmakepluginstubs/HbIndicatorPopupPlugin.qtplugin"    - "!:\resource\plugins\devicedialogs\HbIndicatorPopupPlugin.qtplugin"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/ir1_qt_libs_armv5_udeb.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,69 @@
+;
+; 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:
+;
+; qt_libs_armv5_udeb.pkg generated by qmake at Thu May 14 09:07:56 2009
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"QtLibs pre-release"},(0x2001E61C),4,5,0
+
+; Localised Vendor name
+%{"Nokia, Qt Software"}
+
+; Unique Vendor name
+:"Nokia, Qt Software"
+
+; Dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+(0x20009a80), 1, 0, 0, {"Symbian OS PIPS"}
+
+; DEPLOYMENT
+"r:\epoc32\data\z\resource\apps\s60main.rsc"    - "!:\resource\apps\s60main.rsc"
+"r:\epoc32\release\armv5\udeb\QtCore.dll"    - "!:\sys\bin\QtCore.dll"
+"r:\epoc32\release\armv5\udeb\QtXml.dll"    - "!:\sys\bin\QtXml.dll"
+"r:\epoc32\release\armv5\udeb\QtGui.dll"    - "!:\sys\bin\QtGui.dll"
+"r:\epoc32\release\armv5\udeb\QtNetwork.dll"    - "!:\sys\bin\QtNetwork.dll"
+"r:\epoc32\release\armv5\udeb\QtScript.dll"    - "!:\sys\bin\QtScript.dll"
+"r:\epoc32\release\armv5\udeb\QtTest.dll"    - "!:\sys\bin\QtTest.dll"
+"r:\epoc32\release\armv5\udeb\QtSvg.dll"    - "!:\sys\bin\QtSvg.dll"
+"r:\epoc32\release\armv5\udeb\qjpeg.dll"    - "!:\sys\bin\qjpeg.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qjpeg.qtplugin"    - "!:\resource\qt\plugins\imageformats\qjpeg.qtplugin"
+"r:\epoc32\release\armv5\udeb\qgif.dll"    - "!:\sys\bin\qgif.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qgif.qtplugin"    - "!:\resource\qt\plugins\imageformats\qgif.qtplugin"
+"r:\epoc32\release\armv5\udeb\qmng.dll"    - "!:\sys\bin\qmng.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qmng.qtplugin"    - "!:\resource\qt\plugins\imageformats\qmng.qtplugin"
+"r:\epoc32\release\armv5\udeb\qtiff.dll"    - "!:\sys\bin\qtiff.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qtiff.qtplugin"    - "!:\resource\qt\plugins\imageformats\qtiff.qtplugin"
+"r:\epoc32\release\armv5\udeb\qico.dll"    - "!:\sys\bin\qico.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qico.qtplugin"    - "!:\resource\qt\plugins\imageformats\qico.qtplugin"
+"r:\epoc32\release\armv5\udeb\qsvg.dll"    - "!:\sys\bin\qsvg.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qsvg.qtplugin"    - "!:\resource\qt\plugins\imageformats\qsvg.qtplugin"
+"r:\epoc32\release\armv5\udeb\qcncodecs.dll"    - "!:\sys\bin\qcncodecs.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qcncodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qcncodecs.qtplugin"
+"r:\epoc32\release\armv5\udeb\qjpcodecs.dll"    - "!:\sys\bin\qjpcodecs.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qjpcodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qjpcodecs.qtplugin"
+"r:\epoc32\release\armv5\udeb\qtwcodecs.dll"    - "!:\sys\bin\qtwcodecs.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qtwcodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qtwcodecs.qtplugin"
+"r:\epoc32\release\armv5\udeb\qkrcodecs.dll"    - "!:\sys\bin\qkrcodecs.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qkrcodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qkrcodecs.qtplugin"
+"r:\epoc32\release\armv5\udeb\qsvgicon.dll"    - "!:\sys\bin\qsvgicon.dll"
+"r:\qt\src\s60installs\qmakepluginstubs\qsvgicon.qtplugin"    - "!:\resource\qt\plugins\iconengines\qsvgicon.qtplugin"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/ir2_orbitinput_armv5_udeb.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+;
+; orbitinput_armv5_udeb.pkg generated by qmake at Fri May 15 11:26:50 2009
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"hbinput"},(0xE8bb8055),1,0,0
+
+; Localised Vendor name
+%{"Nokia, Qt Software"}
+
+; Unique Vendor name
+:"Nokia, Qt Software"
+
+; Dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+(0x2001E61C), 4, 5, 0, {"QtLibs pre-release"}
+
+; DEPLOYMENT
+"r:\epoc32\release\armv5\udeb\touchinput.dll"    - "!:\sys\bin\touchinput.dll"
+"r:\orbit\hbinputs\internal\build\qmakepluginstubs\touchinput.qtplugin"    - "!:\hbinputs\inputmethods\touchinput.qtplugin"
+"r:\orbit\hbinputs\resources\accent.png"    - "!:\hbinputs\resources\accent.png"
+"r:\orbit\hbinputs\resources\background.png"    - "!:\hbinputs\resources\background.png"
+"r:\orbit\hbinputs\resources\bullet.png"    - "!:\hbinputs\resources\bullet.png"
+"r:\orbit\hbinputs\resources\close_handle.png"    - "!:\hbinputs\resources\close_handle.png"
+"r:\orbit\hbinputs\resources\close_handle_background.png"    - "!:\hbinputs\resources\close_handle_background.png"
+"r:\orbit\hbinputs\resources\keypad_landscape.png"    - "!:\hbinputs\resources\keypad_landscape.png"
+"r:\orbit\hbinputs\resources\keypad_portrait.png"    - "!:\hbinputs\resources\keypad_portrait.png"
+"r:\orbit\hbinputs\resources\red_button.png"    - "!:\hbinputs\resources\red_button.png"
+"r:\orbit\hbinputs\resources\red_button_mask.png"    - "!:\hbinputs\resources\red_button_mask.png"
+"r:\orbit\hbinputs\resources\sym.png"    - "!:\hbinputs\resources\sym.png"
+"r:\orbit\hbinputs\resources\test_multimode_lower.png"    - "!:\hbinputs\resources\test_multimode_lower.png"
+"r:\orbit\hbinputs\resources\test_multimode_text.png"    - "!:\hbinputs\resources\test_multimode_text.png"
+"r:\orbit\hbinputs\resources\test_multimode_upper.png"    - "!:\hbinputs\resources\test_multimode_upper.png"
+"r:\orbit\hbinputs\resources\test_numbermode.png"    - "!:\hbinputs\resources\test_numbermode.png"
+"r:\orbit\hbinputs\resources\test_pinyin.png"    - "!:\hbinputs\resources\test_pinyin.png"
+"r:\orbit\hbinputs\resources\test_predictivemode_lower.png"    - "!:\hbinputs\resources\test_predictivemode_lower.png"
+"r:\orbit\hbinputs\resources\test_predictivemode_text.png"    - "!:\hbinputs\resources\test_predictivemode_text.png"
+"r:\orbit\hbinputs\resources\test_predictivemode_upper.png"    - "!:\hbinputs\resources\test_predictivemode_upper.png"
+"r:\orbit\hbinputs\resources\test_stroke.png"    - "!:\hbinputs\resources\test_stroke.png"
+"r:\orbit\hbinputs\resources\test_virtual_return.png"    - "!:\hbinputs\resources\test_virtual_return.png"
+"r:\orbit\hbinputs\resources\test_virtual_return_mask.png"    - "!:\hbinputs\resources\test_virtual_return_mask.png"
+"r:\orbit\hbinputs\resources\test_virtual_shift.png"    - "!:\hbinputs\resources\test_virtual_shift.png"
+"r:\orbit\hbinputs\resources\test_virtual_shift_mask.png"    - "!:\hbinputs\resources\test_virtual_shift_mask.png"
+"r:\orbit\hbinputs\resources\vkb_top.png"    - "!:\hbinputs\resources\vkb_top.png"
+"r:\orbit\hbinputs\resources\rocker_normal.svg"    - "!:\hbinputs\resources\rocker_normal.svg"
+"r:\orbit\hbinputs\resources\rocker_selection.svg"    - "!:\hbinputs\resources\rocker_selection.svg"
+"r:\orbit\hbinputs\resources\test_zhuyin.svg"    - "!:\hbinputs\resources\test_zhuyin.svg"
+"r:\epoc32\release\armv5\udeb\HbKeymappings_1.dll"    - "!:\sys\bin\HbKeymappings_1.dll"
+"r:\orbit\hbinputs\internal\build\qmakepluginstubs\HbKeymappings_1.qtplugin"    - "!:\hbinputs\keymappings\HbKeymappings_1.qtplugin"
+"r:\epoc32\release\armv5\udeb\HbKeymappings_2.dll"    - "!:\sys\bin\HbKeymappings_2.dll"
+"r:\orbit\hbinputs\internal\build\qmakepluginstubs\HbKeymappings_2.qtplugin"    - "!:\hbinputs\keymappings\HbKeymappings_2.qtplugin"
+"r:\epoc32\release\armv5\udeb\HbKeymappings_3.dll"    - "!:\sys\bin\HbKeymappings_3.dll"
+"r:\orbit\hbinputs\internal\build\qmakepluginstubs\HbKeymappings_3.qtplugin"    - "!:\hbinputs\keymappings\HbKeymappings_3.qtplugin"
+"r:\epoc32\release\armv5\udeb\HbKeymappings_4.dll"    - "!:\sys\bin\HbKeymappings_4.dll"
+"r:\orbit\hbinputs\internal\build\qmakepluginstubs\HbKeymappings_4.qtplugin"    - "!:\hbinputs\keymappings\HbKeymappings_4.qtplugin"
+"r:\epoc32\release\armv5\udeb\hb.dll"    - "!:\sys\bin\hb.dll"
+"r:\epoc32\release\armv5\udeb\hbinput.dll"    - "!:\sys\bin\hbinput.dll"
+"r:\epoc32\release\armv5\udeb\hbinputhw.dll"    - "!:\sys\bin\hbinputhw.dll"
+"r:\epoc32\release\armv5\udeb\hbinteractionmanager.dll"    - "!:\sys\bin\hbinteractionmanager.dll"
+"r:\epoc32\release\armv5\udeb\HbAutoComplete.dll"    - "!:\sys\bin\HbAutoComplete.dll"
+"r:\orbit\hbinputs\internal\build\qmakepluginstubs\HbAutoComplete.qtplugin"    - "!:\hbinputs\engines\HbAutoComplete.qtplugin"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/ir3_qtinternetradio_armv5_udeb.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+;
+; ui_armv5_udeb.pkg generated by qmake at Fri May 8 09:53:45 2009
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"QtInternetRadio"},(0xE28364bb),1,0,0
+
+; Localised Vendor name
+%{"Nokia, Qt Software"}
+
+; Unique Vendor name
+:"Nokia, Qt Software"
+
+; Dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+
+; Executable and default resource files
+
+
+;internetradio 2.0 sis file
+@"ir_package_deb.sis",(0x2000B499)
+
+;preset server
+@"package_Inc6.sis",(0x10281CB5)
+
+
+;qtinternetradio
+"\epoc32\release\armv5\udeb\qtinternetradio.exe"    - "!:\sys\bin\qtinternetradio.exe"
+"\epoc32\data\z\resource\apps\qtinternetradio.rsc"    - "!:\resource\apps\qtinternetradio.rsc"
+;"\epoc32\data\z\resource\apps\0xe28364bb.mif"    - "!:\resource\apps\0xe28364bb.mif"
+"\epoc32\data\z\private\10003a3f\import\apps\qtinternetradio_reg.rsc"    - "!:\private\10003a3f\import\apps\qtinternetradio_reg.rsc"
+"\epoc32\release\armv5\udeb\irqnetworkcontroller.dll"    - "!:\sys\bin\irqnetworkcontroller.dll"
+"\epoc32\release\armv5\udeb\irqisdsclient.dll"    - "!:\sys\bin\irqisdsclient.dll"
+"\epoc32\release\armv5\udeb\irqmediaplayer.dll"    - "!:\sys\bin\irqmediaplayer.dll"
+"\epoc32\release\armv5\udeb\irqutility.dll"    - "!:\sys\bin\irqutility.dll"
+"\epoc32\release\armv5\udeb\irqfavorites.dll"    - "!:\sys\bin\irqfavorites.dll"
+"\epoc32\release\armv5\udeb\irqsonghistory.dll"    - "!:\sys\bin\irqsonghistory.dll"
+"\epoc32\release\armv5\udeb\irqsettings.dll"    - "!:\sys\bin\irqsettings.dll"
+"\epoc32\release\armv5\udeb\irqmusicshop.dll"    - "!:\sys\bin\irqmusicshop.dll"
+"\epoc32\release\armv5\udeb\irqnwkinfoobserver.dll"    - "!:\sys\bin\irqnwkinfoobserver.dll"
+"\epoc32\release\armv5\udeb\irqstatisticsreport.dll"    - "!:\sys\bin\irqstatisticsreport.dll"
+"\epoc32\release\armv5\udeb\irqdiskspacewatcher.dll"    - "!:\sys\bin\irqdiskspacewatcher.dll"
+"\epoc32\release\armv5\udeb\irqstationexporter.dll"    - "!:\sys\bin\irqstationexporter.dll"
+"\epoc32\release\armv5\udeb\irqlogger.dll"    - "!:\sys\bin\irqlogger.dll"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/ir3_qtinternetradio_armv5_urel.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+;
+; ui_armv5_udeb.pkg generated by qmake at Fri May 8 09:53:45 2009
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"QtInternetRadio"},(0xE28364bb),1,0,0
+
+; Localised Vendor name
+%{"Nokia, Qt Software"}
+
+; Unique Vendor name
+:"Nokia, Qt Software"
+
+; Dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+
+; Executable and default resource files
+
+
+
+;internetradio 2.0 sis file
+@"IR_package.sis",(0x2000B499)
+
+;preset server
+@"package_Inc6.sis",(0x10281CB5)
+
+
+;qtinternetradio
+"\epoc32\release\armv5\urel\qtinternetradio.exe"    - "!:\sys\bin\qtinternetradio.exe"
+"\epoc32\data\z\resource\apps\qtinternetradio.rsc"    - "!:\resource\apps\qtinternetradio.rsc"
+;"\epoc32\data\z\resource\apps\0xe28364bb.mif"    - "!:\resource\apps\0xe28364bb.mif"
+"\epoc32\data\z\private\10003a3f\import\apps\qtinternetradio_reg.rsc"    - "!:\private\10003a3f\import\apps\qtinternetradio_reg.rsc"
+"\epoc32\release\armv5\urel\irqnetworkcontroller.dll"    - "!:\sys\bin\irqnetworkcontroller.dll"
+"\epoc32\release\armv5\urel\irqisdsclient.dll"    - "!:\sys\bin\irqisdsclient.dll"
+"\epoc32\release\armv5\urel\irqmediaplayer.dll"    - "!:\sys\bin\irqmediaplayer.dll"
+"\epoc32\release\armv5\urel\irqutility.dll"    - "!:\sys\bin\irqutility.dll"
+"\epoc32\release\armv5\urel\irqfavorites.dll"    - "!:\sys\bin\irqfavorites.dll"
+"\epoc32\release\armv5\urel\irqsonghistory.dll"    - "!:\sys\bin\irqsonghistory.dll"
+"\epoc32\release\armv5\urel\irqsettings.dll"    - "!:\sys\bin\irqsettings.dll"
+"\epoc32\release\armv5\urel\irqmusicshop.dll"    - "!:\sys\bin\irqmusicshop.dll"
+"\epoc32\release\armv5\urel\irqnwkinfoobserver.dll"    - "!:\sys\bin\irqnwkinfoobserver.dll"
+"\epoc32\release\armv5\urel\irqstatisticsreport.dll"    - "!:\sys\bin\irqstatisticsreport.dll"
+"\epoc32\release\armv5\urel\irqdiskspacewatcher.dll"    - "!:\sys\bin\irqdiskspacewatcher.dll"
+"\epoc32\release\armv5\urel\irqstationexporter.dll"    - "!:\sys\bin\irqstationexporter.dll"
+"\epoc32\release\armv5\urel\irqlogger.dll"    - "!:\sys\bin\irqlogger.dll"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/qt_libs_armv5_urel.pkg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,77 @@
+;
+; 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:
+;
+; qt_libs_armv5_urel.pkg generated by qmake at 2009-08-28T11:24:34
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"QtLibs pre-release"},(0x2001E61C),4,5,2
+
+; Localised Vendor name
+%{"Nokia, Qt Software"}
+
+; Unique Vendor name
+:"Nokia, Qt Software"
+
+; Dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+(0x20013851), 1, 5, 1, {"PIPS Installer"}
+(0x200110CB), 1, 5, 1, {"Open C LIBSSL Common"}
+(0x2000F866), 1, 0, 0, {"Standard C++ Library Common"}
+
+; DEPLOYMENT
+"r:/epoc32/data/z/resource/apps/s60main.rsc"    - "!:\resource\apps\s60main.rsc"
+"r:/epoc32/release/armv5/urel/QtCore.dll"    - "!:\sys\bin\QtCore.dll"
+"r:/epoc32/release/armv5/urel/QtXml.dll"    - "!:\sys\bin\QtXml.dll"
+"r:/epoc32/release/armv5/urel/QtGui.dll"    - "!:\sys\bin\QtGui.dll"
+"r:/epoc32/release/armv5/urel/QtNetwork.dll"    - "!:\sys\bin\QtNetwork.dll"
+"r:/epoc32/release/armv5/urel/QtScript.dll"    - "!:\sys\bin\QtScript.dll"
+"r:/epoc32/release/armv5/urel/QtTest.dll"    - "!:\sys\bin\QtTest.dll"
+"r:/epoc32/release/armv5/urel/QtSql.dll"    - "!:\sys\bin\QtSql.dll"
+"r:/epoc32/release/armv5/urel/qts60plugin_3_1.dll"    - "!:\sys\bin\qts60plugin_3_1.dll"
+"r:/epoc32/release/armv5/urel/qts60plugin_3_2.dll"    - "!:\sys\bin\qts60plugin_3_2.dll"
+"r:/epoc32/release/armv5/urel/qts60plugin_5_0.dll"    - "!:\sys\bin\qts60plugin_5_0.dll"
+"r:/epoc32/release/armv5/urel/sqlite3.dll"    - "!:\sys\bin\sqlite3.dll"
+"r:/epoc32/release/armv5/urel/QtSvg.dll"    - "!:\sys\bin\QtSvg.dll"
+"r:/epoc32/release/armv5/urel/Phonon.dll"    - "!:\sys\bin\Phonon.dll"
+"r:/epoc32/release/armv5/urel/qjpeg.dll"    - "!:\sys\bin\qjpeg.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qjpeg.qtplugin"    - "!:\resource\qt\plugins\imageformats\qjpeg.qtplugin"
+"r:/epoc32/release/armv5/urel/qgif.dll"    - "!:\sys\bin\qgif.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qgif.qtplugin"    - "!:\resource\qt\plugins\imageformats\qgif.qtplugin"
+"r:/epoc32/release/armv5/urel/qmng.dll"    - "!:\sys\bin\qmng.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qmng.qtplugin"    - "!:\resource\qt\plugins\imageformats\qmng.qtplugin"
+"r:/epoc32/release/armv5/urel/qtiff.dll"    - "!:\sys\bin\qtiff.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qtiff.qtplugin"    - "!:\resource\qt\plugins\imageformats\qtiff.qtplugin"
+"r:/epoc32/release/armv5/urel/qico.dll"    - "!:\sys\bin\qico.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qico.qtplugin"    - "!:\resource\qt\plugins\imageformats\qico.qtplugin"
+"r:/epoc32/release/armv5/urel/qsvg.dll"    - "!:\sys\bin\qsvg.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qsvg.qtplugin"    - "!:\resource\qt\plugins\imageformats\qsvg.qtplugin"
+"r:/epoc32/release/armv5/urel/qcncodecs.dll"    - "!:\sys\bin\qcncodecs.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qcncodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qcncodecs.qtplugin"
+"r:/epoc32/release/armv5/urel/qjpcodecs.dll"    - "!:\sys\bin\qjpcodecs.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qjpcodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qjpcodecs.qtplugin"
+"r:/epoc32/release/armv5/urel/qtwcodecs.dll"    - "!:\sys\bin\qtwcodecs.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qtwcodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qtwcodecs.qtplugin"
+"r:/epoc32/release/armv5/urel/qkrcodecs.dll"    - "!:\sys\bin\qkrcodecs.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qkrcodecs.qtplugin"    - "!:\resource\qt\plugins\codecs\qkrcodecs.qtplugin"
+"r:/epoc32/release/armv5/urel/qsvgicon.dll"    - "!:\sys\bin\qsvgicon.dll"
+"r:/qt/src/s60installs/qmakepluginstubs/qsvgicon.qtplugin"    - "!:\resource\qt\plugins\iconengines\qsvgicon.qtplugin"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/rd-key.pem	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDLRF+r1FGGkCwTrb420kbnAps7gi1yYUcXYUdWeFTuBeQe5eW4
+6Y+LWaA8HMlDdoHRB0FgASisYcFagwno9+oFf4AJka4H1gWEs5XTGwAA1s0d8XGh
+7W7Dt9F5FZij8F7/9Pi6+FhhxZFIf1DD+yry9D7+Sp+BgdNALe4XOpf25QIBAwKB
+gQCHgupyjYuvCsgNHn7PNtnvVxInrB5MQNoPli+O+uNJWUK/Q+57Rl+yO8AoEzDX
+pFaLWiuVVhsdloDnAgabT/FXzYncs6uOHyEUV+dSXb78vtLPJqAX+Fg2i3hOXreB
+yskcZ13/OsKVOu5wgrJkx2baZufkqMwOSytf5y9nwjEIKwJBAP+inobagVNrN62j
+KQva3cC+UN/6XnKdTc0CA6bHyLOaJoH1xiMwG/VS2PGjHI0tiSMNtLn/QPpHJ003
+iabGhdUCQQDLjp/9UjFT6K6CF66Chqf30pZXhx+GTSQZmv/gvZiMly7X9fX9BGX3
+2MbJohBC4yI21XKTbisWywkF73Hwh+TRAkEAqmxprzxWN5zPyRdwspHpKymLP/w+
+9xOJM1atGdqFzRFvAU6EF3Vn+OHl9my9s3OwwgkjJqorUYTE3iUGby8D4wJBAIe0
+aqjhdjfwdFa6dFcEb/qMZDpaFQQzbWZnVUB+ZbMPdI/5TqitmU/l2dvBYCyXbCSO
+TGJJcg8yBgP09qBamIsCQFL7j1tM0XPVQJQ89WpKCld7O9ORxRGVj1eG0tWijrH8
+mGbYh8SGCVoWV3vrKSS8GBrFVgQnqUaHuEdtM7tpCAQ=
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/rd.cer	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICzDCCAjWgAwIBAgIBADANBgkqhkiG9w0BAQUFADArMRAwDgYDVQQKEwdSRCBD
+ZXJ0MRcwFQYDVQQDEw5SRCBDZXJ0aWZpY2F0ZTAeFw0wNDExMTUxMjQyMDZaFw0z
+NzA5MjMxMjQyMDZaMCsxEDAOBgNVBAoTB1JEIENlcnQxFzAVBgNVBAMTDlJEIENl
+cnRpZmljYXRlMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDLRF+r1FGGkCwT
+rb420kbnAps7gi1yYUcXYUdWeFTuBeQe5eW46Y+LWaA8HMlDdoHRB0FgASisYcFa
+gwno9+oFf4AJka4H1gWEs5XTGwAA1s0d8XGh7W7Dt9F5FZij8F7/9Pi6+FhhxZFI
+f1DD+yry9D7+Sp+BgdNALe4XOpf25QIBA6OCAQAwgf0wDAYDVR0TBAUwAwEB/zAL
+BgNVHQ8EBAMCAoQwHQYDVR0OBBYEFFi/kuGzxhVpjGxe9ZwlxC3fH9jFMFMGA1Ud
+IwRMMEqAFFi/kuGzxhVpjGxe9ZwlxC3fH9jFoS+kLTArMRAwDgYDVQQKEwdSRCBD
+ZXJ0MRcwFQYDVQQDEw5SRCBDZXJ0aWZpY2F0ZYIBADBsBgNVHSAEZTBjMGEGBFUd
+IAAwWTATBggrBgEFBQcCARYHaHR0cDovLzBCBggrBgEFBQcCAjA2GjRGb3IgUiZE
+IHVzYWdlIG9ubHkuIFRoaXMgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWQuMA0G
+CSqGSIb3DQEBBQUAA4GBAHGB4RQMAgBdeT2hxfOr6f2nA/dZm+M5yX5daUtZnET9
+Ed0A9sazLawfN2G1KFQT9kxEParAyoAkpbMAsRrnRz/9cM3OHgFm/NiKRnf50DpT
+7oCx0I/65mVD2kt+xXE62/Ii5KPnTufIkPi2uLvURCia1tTS8JmJ8dtxDGyQt8BR
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/install/readme.txt	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,18 @@
+steps to create sis file:
+1. copy rd.cer and rd-key.pem to r:\qt
+2. build armv5 udeb for QTIR
+3. in this folder, run "createpackage IR1_qt_libs_armv5_udeb.pkg"
+4. in this folder, run "createpackage IR2_orbitinput_armv5_udeb.pkg"
+5. in folder InternetRadio2.0/install", run "createpackage cenrep.pkg" and "createpackage ir_package.pkg",
+   then copy ir_package.sisx to QtInternetRadio/install.
+6. in folder PresetServer/sis/presetserver_default, run "createpackage package_Inc6.pkg", then copy         package_inc6.sisx to QtInternetRadio/install.
+7. in this folder, run "createpackage ir3_qtinternetradio_armv5_udeb.pkg"
+
+install steps:
+1. ir1_qt_libs_armv5_udeb.sisx
+2. ir2_orbitinput_armv5_udeb.sisx
+3. ir3_QtInternetRadio_armv5_udeb.sisx
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/inc/irqenums.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,94 @@
+/*
+* 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 IRQENUMS_H_
+#define IRQENUMS_H_
+
+#define RETURN_IF_ERR(err)  if( EIRQErrorNone != (err) ) \
+  return EIRQErrorGeneral;
+
+enum IRQError
+{
+    EIRQErrorNone = 0,
+    EIRQErrorGeneral = -1000,
+    EIRQErrorBadParameter,
+    EIRQErrorOutOfMemory,
+    EIRQErrorOpenInstanceFailed,
+    EIRQErrorNotFound,
+    EIRQErrorAlreadyExist,
+    EIRQErrorCouldNotConnect,
+    EIRQErrorTimeOut,
+    EIRQErrorServiceUnavailable,
+    EIRQErrorCorrupt,
+    EIRQErrorFull,
+    
+    //player engine errors
+    EIRQPlayerErrorGeneral,
+    EIRQPlayerErrorConnectingFailed,   //Failed to connect to station
+    EIRQPlayerErrorConnectionLost,     //Connection lost
+    EIRQPlayerErrorAudioDeviceLost,    //Audio device is occupied by another app with higher priority
+    EIRQPlayerErrorSetStereoFailed,    //Set setero effect failed
+    EIRQPlayerErrorServerFull,
+    EIRQPlayerErrorTimeOut
+};
+
+enum IRQTerminatedType
+{
+    EIRQUnknownTermination = -1,
+    //terminated by user
+    EIRQUserTerminated = 0,
+    //no connection to the server
+    EIRQNoConnectionToServer,
+    //no connection to the network
+    EIRQNoConnectionToNetwork
+};
+
+enum IRQConnectedFrom
+{
+    //when session started straight from station details in iSDS
+    EIRQIsds = 0,
+    //when session started from a station details saved to iRAPP favorites and the station is not from iSDS (channel_Id = 0 )
+    EIRQPresetAdhoc,
+    //when session started from a station details saved to iRAPP favorites and the station is from iSDS (channel_ID is iSDS channel_ID)
+    EIRQPresetIsds,
+    //when session started from iRAPP 'station play history' and the station is not from iSDS (channel_Id = 0 )
+    EIRQHistoryAdhoc,
+    //when session started from iRAPP 'station play history' and the station is from iSDS (channel_ID is iSDS channel_ID )
+    EIRQHistoryIsds,
+    //when session started from manually entered stream url
+    EIRQAdhocManual,
+    //when iRAPP session started/triggered from any iRAPP external client e.g. Browser or SMS/MMS
+    EIRQAdhocExternal,
+    // Max value
+    EIRQConnectedFromMaxValue
+};
+
+enum IRQNmsType
+{
+    //find in music shop 
+    EIRQFind = 0,
+    //launch music shop
+    EIRQLaunch
+};
+
+enum IRQPreferredQuality
+{
+    EIRQStandardQuality = 0,
+    EIRQHighQuality
+};
+
+#endif /* IRQERROR_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/inc/irqevent.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRQEVENT_H_
+#define IRQEVENT_H_
+
+/**
+* Identifies the type of connection
+*/
+enum IRQConnectionType
+    {
+    EIRQGprs,
+    EIRQWcdma,
+    EIRQCdma2000,
+    EIRQWiFi,
+    EIRQEdge
+    };
+
+/**
+* Indicates the various Network events
+*/
+enum IRQNetworkEvent
+{
+    EIRQNetworkConnectionConnecting,
+    EIRQNetworkConnectionEstablished,
+    EIRQNetworkConnectionDisconnected,
+    EIRQDisplayNetworkMessageNoConnectivity,
+    EIRQDisplayOfflineMode,
+    EIRQDisplayNoAccessPointsDefined,
+    EIRQAccessPointSelectionCancelled,
+    EIRQConnectingCancelled
+};
+
+
+#endif /* IRQEVENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/inc/irqisdsdatastructure.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* 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 IRQISDSDATASTRUCTURE_H
+#define IRQISDSDATASTRUCTURE_H
+#include <QList>
+#include <QString>
+
+#include <e32base.h>
+
+#define DEBUG_ISDS_DATA 0
+
+class QDataStream;
+
+class IRQBrowseCategoryItem
+{
+public:  
+  QString catName;
+  int     size;
+};
+
+
+class IRQChannelItem
+{
+public:
+   QString channelName;
+   QString shortDescription;
+   QString imageURL;
+};
+
+class IRQChannelServerURL
+{
+public:
+    void internalize(QDataStream &aStream);
+    void externalize(QDataStream &aStream) const;
+    
+public:
+   QString serverName;
+   QString url;
+   int     bitrate;
+};
+
+class IRQPreset
+{
+public:
+  enum IRQPresetType  
+    {   
+      EUser,
+      EIsds
+    };
+  
+   
+   IMPORT_C IRQPreset();
+   IMPORT_C ~IRQPreset();  
+   IMPORT_C IRQPreset& operator = (const IRQPreset& aOther); 
+   
+   IMPORT_C void internalize(QDataStream &aStream);
+   IMPORT_C void externalize(QDataStream &aStream) const;
+   
+   /* get the bitrates of the preset.
+    */
+   IMPORT_C void getAvailableBitrates(QList<int>& aBitrates) const;
+   /* get the url for the specify bitrate
+    * the caller should delete the QList */
+   IMPORT_C QList<QString> * getURLsForBitrate(int aBitrate) const;
+   /* the following functions may be changed in future */
+   IMPORT_C int getChannelUrlAt(int aIndex, QString& aURL) const;   
+   IMPORT_C int getChannelBitrate(int aIndex, int &aBitrate) const;    
+   
+   /* sort the urlArray with bitrates by ascending. for 
+    * there are not many items, here we use bubble sorting.
+    */
+   IMPORT_C void sortURLArray();
+   /* check wether the internal list is sorted 
+    */
+   IMPORT_C bool isSorted() const;
+   /* append a channel server into a internal list 
+    */
+   IMPORT_C void insertChannelServer(const IRQChannelServerURL& aURL);
+   /* clear the internal list 
+    */
+   IMPORT_C void clearChannelServerList();   
+   
+   IMPORT_C int getChannelURLCount() const;
+   
+   IMPORT_C bool setUrlBitrate(const int aUrlIndex, const int aBitrate);
+  
+   int uniqID; //unique id generated for the preset saved at favourite
+   
+   int type; //0 for user defined 1 for isds type.
+   int index;//index in the preset table
+   int presetId;//isds generated preset id
+   QString name; //preset name        
+   QString languageCode;//preset language code
+   QString languageName; // preset language
+   QString countryCode;//preset country of origin code     
+   QString countryName;//preset country of origin      
+   QString lastModified;//preset last modified     
+   QString musicStoreStatus;//musicStoreEnabled value
+   //QByteArray logoData;//Logo Data
+   RBuf8   logoData;
+   QString description;//channel description       
+   QString shortDesc;//channel short desription    
+   QString genreName;//channel genre name 
+   QString genreId;//channel genre id     
+   int bitrate;//channel bitrate
+
+   //in our spec but not in current code 
+   QString advertisementUrl; 
+   QString advertisementInUse; 
+   QString imgUrl;        
+   
+ 
+private:
+  /* for one preset, there may be many servers*/
+  QList<IRQChannelServerURL> urlArray;
+  bool iIsSorted;
+  int  iChannelUrlCount; //no of channel urls
+  
+private:
+    friend class IRQUtility;
+ 
+};
+
+bool bitrateLessThan(const IRQChannelServerURL &url1, const IRQChannelServerURL &url2);
+
+#endif /* IRQISDSDATASTRUCTURE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/inc/irqutility.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef _IRQUTILITY_H
+#define _IRQUTILITY_H
+
+#include "irqenums.h"
+
+class IRQPreset;
+class CIRPreset;
+class CIRIsdsPreset; 
+class CFbsBitmap;
+class QPixmap;
+class QString;
+
+class IRQUtility 
+{
+public:
+  
+  /* convert the CIRIsdsPreset to the IRQPreset. 
+   */
+  IMPORT_C static void convertCIRIsdsPreset2IRQPrest(const CIRIsdsPreset& aCIRIsdsPreset, IRQPreset& aQIRPreset);
+  /* convert the IRQPreset to the CIRIsdsPreset 
+   */
+  IMPORT_C static void convertIRQPreset2CIRIsdsPreset(const IRQPreset& aQIRPreset, CIRIsdsPreset& aCIRIsdsPreset);
+  /* convert CIRPreset to the IRQPreset 
+   */
+  IMPORT_C static void convertCIRPreset2IRQPreset(const CIRPreset& aCIRPreset, IRQPreset& aIRQPreset);
+  /* switch from the symbian error code to the IRQ error code 
+   */
+  IMPORT_C static void convertSError2QError(const int aSError, int& aQError);
+
+  IMPORT_C static bool isValidUrl(const QString& aUrl);
+
+  IMPORT_C static bool openAdvLink(const QString& aUrl);
+  
+  /**
+   * this function is only used when in debug mode, for it's a time costing operation
+   */
+  IMPORT_C static void writeLog2File(const QString& aString, bool aDeleteOldFile = false);
+
+private:
+  
+  void static appendURLL(const IRQPreset& aQIRPreset, CIRIsdsPreset& aCIRIsdsPreset);
+  bool static openAdvLinkL(const QString& aUrl);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/inc/irviewdefinitions.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* 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 IRVIEWDEFINITIONS_H
+#define IRVIEWDEFINITIONS_H
+
+enum TIRViewId
+{
+    EIRView_InvalidId = -1,
+    EIRView_MainView,
+    EIRView_CategoryView,
+    EIRView_StationsView,
+    EIRView_PlayingView,
+    EIRView_FavoritesView,
+    EIRView_HistoryView,
+    EIRView_StationDetailsView,
+    EIRView_SettingsView,
+	EIRView_OpenWebAddressView,
+	EIRView_SearchView,
+	EIRView_SearchResultView,
+	EIRView_SongHistoryView,
+	EIRView_PlsView,
+    EIRView_ViewCount
+};
+
+enum TIRViewParameter
+{
+    EIRViewPara_InvalidId = -1,
+    EIRViewPara_Genre,
+    EIRViewPara_Language,
+    EIRViewPara_Country,
+    EIRViewPara_PopularStations,
+    EIRViewPara_CategoryStations,
+    EIRViewPara_SearchResults,
+    EIRViewPara_ViewCounts
+};
+
+enum TIRHandleResult
+{
+    EIR_DoDefault,
+    EIR_NoDefault
+};
+
+enum TIRViewCommand
+{
+    EIR_ViewCommand_ACTIVATED,
+    EIR_ViewCommand_DEACTIVATE,
+    EIR_ViewCommand_EffectFinished,
+    EIR_ViewCommand_MAX
+};
+
+enum TIRViewCommandReason
+{
+    EIR_ViewCommandReason_Show,
+    EIR_ViewCommandReason_Hide,  //a new view becomes current view, old view is deactivated and push into view stack
+    EIR_ViewCommandReason_Back   //current view is deactivated, the top view in view stack becomes current view
+};
+
+enum TIRUseNetworkReason
+{
+    EIR_UseNetwork_NoReason,
+    EIR_UseNetwork_SelectItem,
+    EIR_UseNetwork_StartingView,
+    EIR_UseNetwork_OpenWebAddress,
+    EIR_UseNetwork_StartSearch,
+    EIR_UseNetwork_DownloadLogo,
+    EIR_UseNetwork_LoadCategory,
+    EIR_UseNetwork_PlayStation
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/irqcommon.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+TEMPLATE = lib
+
+TARGET = irqutility
+TARGET.CAPABILITY += CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH = src
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+INCLUDEPATH += ../../internetradio2.0/datastructuresinc \
+               ../../internetradio2.0/presetplugininc
+
+LIBS += -lirdatastructures \
+        -lfbscli \
+        -lcone \
+        -lws32 \
+        -lapgrfx \
+        -lapmime
+        
+symbian{
+  TARGET.UID3 = 0xef3c4675
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+       
+#input
+
+#header files list
+HEADERS += inc\irqisdsdatastructure.h \
+           inc\irqutility.h
+                       
+
+#source files list
+SOURCES += irqisdsdatastructure.cpp \
+           irqutility.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/src/irqisdsdatastructure.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* 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 <QtAlgorithms>
+#include <QDataStream>
+#include "irqisdsdatastructure.h"
+#include "irqenums.h"
+
+void IRQChannelServerURL::internalize(QDataStream &aStream)
+{
+    aStream>>serverName>>url>>bitrate;
+}
+
+void IRQChannelServerURL::externalize(QDataStream &aStream) const
+{
+    aStream<<serverName<<url<<bitrate;
+}
+
+EXPORT_C IRQPreset::IRQPreset()
+{
+    iIsSorted = false;
+    iChannelUrlCount = 0;
+}
+
+EXPORT_C IRQPreset::~IRQPreset()
+{
+    urlArray.clear();
+    logoData.Close();
+}
+
+EXPORT_C IRQPreset& IRQPreset::operator =(const IRQPreset& aOther)
+{
+    if (this == &aOther)
+        return *this;
+
+    urlArray.clear();
+    int count = aOther.urlArray.count();
+    IRQChannelServerURL aURL;
+    for (int i = 0; i < count; i++)
+    {
+        aURL.bitrate = aOther.urlArray[i].bitrate;
+        aURL.serverName = aOther.urlArray[i].serverName;
+        aURL.url = aOther.urlArray[i].url;
+        this->urlArray.append(aURL);
+    }
+
+    this->iIsSorted = aOther.iIsSorted;
+    this->imgUrl = aOther.imgUrl;
+    this->advertisementInUse = aOther.advertisementInUse;
+    this->advertisementUrl = aOther.advertisementUrl;
+    this->bitrate = aOther.bitrate;
+    this->genreId = aOther.genreId;
+    this->genreName = aOther.genreName;
+    this->shortDesc = aOther.shortDesc;
+    this->description = aOther.description;
+    this->logoData.Close();
+    this->logoData.Create(aOther.logoData);
+    this->musicStoreStatus = aOther.musicStoreStatus;
+    this->lastModified = aOther.lastModified;
+    this->countryCode = aOther.countryCode;
+    this->countryName = aOther.countryName;
+    this->languageCode = aOther.languageCode;
+    this->languageName = aOther.languageName;
+    this->name = aOther.name;
+    this->presetId = aOther.presetId;
+    this->index = aOther.index;
+    this->type = aOther.type;
+    this->iChannelUrlCount = aOther.iChannelUrlCount;
+    this->uniqID = aOther.uniqID;
+    return *this;
+}
+
+EXPORT_C void IRQPreset::internalize(QDataStream &aStream)
+{
+    aStream>>uniqID>>presetId>>index>>type>>iChannelUrlCount;
+    
+    aStream>>languageCode>>languageName 
+           >>countryCode>>countryName
+           >>genreName>>genreId
+           >>name>>lastModified
+           >>advertisementUrl>>advertisementInUse
+           >>imgUrl>>description>>shortDesc
+           >>musicStoreStatus;
+    
+    urlArray.clear();
+    for (int i = 0; i < iChannelUrlCount; ++i)
+    {
+        IRQChannelServerURL url;
+        url.internalize(aStream);
+        urlArray.append(url);
+    }
+}
+
+EXPORT_C void IRQPreset::externalize(QDataStream &aStream) const
+{
+    aStream<<uniqID<<presetId<<index<<type<<iChannelUrlCount;
+    
+    aStream<<languageCode<<languageName
+           <<countryCode<<countryName
+           <<genreName<<genreId
+           <<name<<lastModified
+           <<advertisementUrl<<advertisementInUse
+           <<imgUrl<<description<<shortDesc
+           <<musicStoreStatus;
+    
+    for (int i = 0; i < iChannelUrlCount; ++i)
+    {
+        urlArray.at(i).externalize(aStream);
+    }
+}
+   
+//get the bitrates of the preset. Duplicated bitrate will just save once.
+EXPORT_C void IRQPreset::getAvailableBitrates(QList<int>& aBitrates) const
+{
+    aBitrates.clear();
+    int bitrate = 0;
+
+    for (int i = 0; i < urlArray.count(); i++)
+    {
+        bitrate = urlArray[i].bitrate;
+        if (!aBitrates.contains(bitrate))
+        {
+            aBitrates.append(bitrate);
+        }
+    }
+}
+
+//get the url for the specify bitrate
+//the caller should delete the QList 
+//
+EXPORT_C QList<QString> * IRQPreset::getURLsForBitrate(int aBitrate) const
+{
+    int upLimit = urlArray.count();
+    
+    //if the urls list has no item
+    if( 0 == upLimit )
+    {
+        return NULL;
+    }
+    
+    //check if the bitrate in our range
+    QList<int> bitRateList;
+    getAvailableBitrates(bitRateList);
+    if(!bitRateList.contains(aBitrate))
+    {         
+        return NULL;
+    }
+    
+    QList<QString> *stringList = new QList<QString> (); 
+    for (int i = 0; i < upLimit; i++)
+    {
+        if (urlArray[i].bitrate == aBitrate)
+        {
+            stringList->append(urlArray[i].url);
+        }
+    }
+
+    return stringList;
+}
+
+//the following functions may be changed in future 
+//
+EXPORT_C int IRQPreset::getChannelUrlAt(int aIndex, QString& aURL) const
+{
+    int upLimit = urlArray.count();
+
+    if (aIndex < 0 || aIndex >= upLimit)
+        return EIRQErrorBadParameter;
+
+    aURL = urlArray[aIndex].url;
+    return EIRQErrorNone;
+}
+
+EXPORT_C int IRQPreset::getChannelBitrate(int aIndex, int &aBitrate) const
+{
+    if (aIndex >= 0 && aIndex < urlArray.count())
+    {
+        aBitrate = urlArray[aIndex].bitrate;
+        return EIRQErrorNone;
+    }
+    
+    return EIRQErrorBadParameter;
+}
+
+//append a channel server into a internal list 
+//
+EXPORT_C void IRQPreset::insertChannelServer(const IRQChannelServerURL& aURL)
+{
+    urlArray.append(aURL);
+    iChannelUrlCount++;
+    iIsSorted = false;
+}
+
+EXPORT_C void IRQPreset::clearChannelServerList()
+{
+    urlArray.clear();
+    iChannelUrlCount = 0;
+    iIsSorted = false;
+}
+
+//sort the urlArray with bitrates by ascending. for 
+//there are not many items, here we use bubble sorting.
+//
+EXPORT_C void IRQPreset::sortURLArray()
+{
+    if (iIsSorted)
+        return;
+
+    qSort(urlArray.begin(), urlArray.end(),  bitrateLessThan);
+
+    iIsSorted = true;
+}
+
+EXPORT_C bool IRQPreset::setUrlBitrate(const int aUrlIndex, const int aBitrate)
+{
+    if(aUrlIndex < 0 || aUrlIndex > (urlArray.count()-1) )
+    {
+        return false;
+    }
+    
+    urlArray[aUrlIndex].bitrate = aBitrate;
+    return true;
+}
+
+//check wether the internal list is sorted 
+//
+EXPORT_C bool IRQPreset::isSorted() const
+{
+    return iIsSorted;
+}
+
+EXPORT_C int IRQPreset::getChannelURLCount() const
+{
+    return iChannelUrlCount;
+}
+
+bool bitrateLessThan(const IRQChannelServerURL &url1,
+        const IRQChannelServerURL &url2)
+{
+    return url1.bitrate < url2.bitrate;
+}
+
+ 
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/src/irqutility.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,341 @@
+/*
+* 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 <QString>
+#include <QByteArray>
+#include <QPixmap>
+#include <e32err.h>
+#include <fbs.h>
+#include <apmstd.h>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <coemain.h> 
+
+#ifdef _DEBUG
+#include <QFile>
+#include <QTextStream>
+#endif
+
+#include "irqutility.h"
+#include "irchannelserverurl.h"
+#include "irqisdsdatastructure.h"
+#include "irisdspreset.h"
+#include "irpreset.h"
+
+_LIT8( KIRHtmlMimeType, "text/html" );
+/** Browser prefix: See browser API specification */
+_LIT( KBrowserPrefix, "4 " );
+
+//
+//convert the CIRIsdsPreset to the IRQPreset. 
+//
+EXPORT_C void IRQUtility::convertCIRIsdsPreset2IRQPrest(const CIRIsdsPreset& aCIRIsdsPreset, IRQPreset& aQIRPreset)
+{
+  aQIRPreset.uniqID = aCIRIsdsPreset.UniqId(); 
+  aQIRPreset.type = aCIRIsdsPreset.GetChannelType();
+  aQIRPreset.index  = aCIRIsdsPreset.GetIndex();
+  
+  aQIRPreset.presetId = aCIRIsdsPreset.GetId();
+  aQIRPreset.iChannelUrlCount  = aCIRIsdsPreset.GetUrlCount();
+  aQIRPreset.name = QString::fromUtf16((aCIRIsdsPreset.GetName()).Ptr(), (aCIRIsdsPreset.GetName()).Length());
+  
+  aQIRPreset.languageCode  = QString::fromUtf16(aCIRIsdsPreset.GetLangId().Ptr(), aCIRIsdsPreset.GetLangId().Length());
+  aQIRPreset.languageName  = QString::fromUtf16(aCIRIsdsPreset.GetLangName().Ptr(), aCIRIsdsPreset.GetLangName().Length());
+  
+  aQIRPreset.countryCode  = QString::fromUtf16(aCIRIsdsPreset.GetCountryId().Ptr(),aCIRIsdsPreset.GetCountryId().Length());
+  aQIRPreset.countryName  = QString::fromUtf16(aCIRIsdsPreset.GetCountryName().Ptr(),aCIRIsdsPreset.GetCountryName().Length());
+  
+  aQIRPreset.lastModified  = QString::fromUtf16(aCIRIsdsPreset.GetLastModifiedTime().Ptr(), aCIRIsdsPreset.GetLastModifiedTime().Length());
+  aQIRPreset.description  = QString::fromUtf16(aCIRIsdsPreset.GetDescription().Ptr(), aCIRIsdsPreset.GetDescription().Length());
+  aQIRPreset.shortDesc  = QString::fromUtf16(aCIRIsdsPreset.GetShortDescription().Ptr(), aCIRIsdsPreset.GetShortDescription().Length());
+  
+  aQIRPreset.genreId  = QString::fromUtf16(aCIRIsdsPreset.GetGenreId().Ptr(), aCIRIsdsPreset.GetGenreId().Length());
+  aQIRPreset.genreName  = QString::fromUtf16(aCIRIsdsPreset.GetGenreName().Ptr(), aCIRIsdsPreset.GetGenreName().Length());
+  
+  aQIRPreset.advertisementUrl  = QString::fromUtf16(aCIRIsdsPreset.GetAdvertisementUrl().Ptr(), aCIRIsdsPreset.GetAdvertisementUrl().Length());
+  aQIRPreset.advertisementInUse  = QString::fromUtf16(aCIRIsdsPreset.GetAdvertisementInUse().Ptr(),aCIRIsdsPreset.GetAdvertisementInUse().Length());
+  
+  aQIRPreset.imgUrl  = QString::fromUtf16(aCIRIsdsPreset.GetImgUrl().Ptr(), aCIRIsdsPreset.GetImgUrl().Length());   
+  aQIRPreset.logoData.Close();
+  aQIRPreset.logoData.Create(aCIRIsdsPreset.GetLogoData());
+  
+  aQIRPreset.musicStoreStatus  = QString::fromUtf16(aCIRIsdsPreset.GetMusicStoreStatus().Ptr(), aCIRIsdsPreset.GetMusicStoreStatus().Length());
+  aQIRPreset.clearChannelServerList();
+  
+  IRQChannelServerURL url;
+  CIRChannelServerUrl *tempServerUrl = NULL;
+  
+  for(int i=0; i<aCIRIsdsPreset.iUrlArray->Count(); i++)
+  {
+      tempServerUrl = aCIRIsdsPreset.iUrlArray->At(i);
+      url.bitrate = tempServerUrl->GetBitRate();
+      url.serverName = QString::fromUtf16(tempServerUrl->GetServerName().Ptr(), tempServerUrl->GetServerName().Length());
+      url.url = QString::fromUtf16(tempServerUrl->GetServerUrl().Ptr(), tempServerUrl->GetServerUrl().Length());
+      aQIRPreset.insertChannelServer(url);
+  }
+  
+  aQIRPreset.sortURLArray();   
+}
+
+//convert the IRQPreset to the CIRIsdsPreset 
+//
+EXPORT_C void IRQUtility::convertIRQPreset2CIRIsdsPreset(const IRQPreset& aQIRPreset, CIRIsdsPreset& aCIRIsdsPreset)
+{
+  aCIRIsdsPreset.SetId(aQIRPreset.uniqID);
+  aCIRIsdsPreset.SetIndex(aQIRPreset.index);
+  aCIRIsdsPreset.SetId(aQIRPreset.presetId);
+  aCIRIsdsPreset.SetUrlCount(aQIRPreset.iChannelUrlCount);
+  aCIRIsdsPreset.SetChannelType(aQIRPreset.type);  
+  
+  TPtrC16 namePtr(reinterpret_cast<const TUint16*>(aQIRPreset.name.utf16()));
+  aCIRIsdsPreset.SetName(namePtr);
+  
+  TPtrC16 languageCodePtr(reinterpret_cast<const TUint16*>(aQIRPreset.languageCode.utf16()));
+  aCIRIsdsPreset.SetLangCode(languageCodePtr);
+  
+  TPtrC16 languageNamePtr(reinterpret_cast<const TUint16*>(aQIRPreset.languageName.utf16()));
+  aCIRIsdsPreset.SetLang(languageNamePtr);
+  
+  TPtrC16 countryCode(reinterpret_cast<const TUint16*>(aQIRPreset.countryCode.utf16()));
+  aCIRIsdsPreset.SetCountryCode(countryCode);
+  
+  TPtrC16 countryName(reinterpret_cast<const TUint16*>(aQIRPreset.countryName.utf16()));
+  aCIRIsdsPreset.SetCountryName(countryName);
+  
+  TPtrC16 lastModified(reinterpret_cast<const TUint16*>(aQIRPreset.lastModified.utf16()));
+  aCIRIsdsPreset.SetLastModifiedTime(lastModified);
+  
+  TPtrC16 description(reinterpret_cast<const TUint16*>(aQIRPreset.description.utf16()));
+  aCIRIsdsPreset.SetDescription(description);
+  
+  TPtrC16 shortDescription(reinterpret_cast<const TUint16*>(aQIRPreset.shortDesc.utf16()));
+  aCIRIsdsPreset.SetShortDesc(shortDescription);
+  
+  TPtrC16 genreId(reinterpret_cast<const TUint16*>(aQIRPreset.genreId.utf16()));
+  aCIRIsdsPreset.SetGenreId(genreId);
+  
+  TPtrC16 genreName(reinterpret_cast<const TUint16*>(aQIRPreset.genreName.utf16()));
+  aCIRIsdsPreset.SetGenreName(genreName);
+  
+  TPtrC16 advertisementUrl(reinterpret_cast<const TUint16*>(aQIRPreset.advertisementUrl.utf16()));
+  aCIRIsdsPreset.SetAdvertisementUrl(advertisementUrl);
+  
+  TPtrC16 advertisementINUse(reinterpret_cast<const TUint16*>(aQIRPreset.advertisementInUse.utf16()));
+  aCIRIsdsPreset.SetAdvertisementInUse(advertisementINUse);
+  
+  TPtrC16 imgUrl(reinterpret_cast<const TUint16*>(aQIRPreset.imgUrl.utf16()));
+  aCIRIsdsPreset.SetImgUrl(imgUrl);
+  
+  TPtrC16 musicStoreStatus(reinterpret_cast<const TUint16*>(aQIRPreset.musicStoreStatus.utf16()));
+  aCIRIsdsPreset.SetMusicStoreStatus(musicStoreStatus);   
+  aCIRIsdsPreset.SetLogoData(aQIRPreset.logoData);
+
+  TRAP_IGNORE(appendURLL(aQIRPreset, aCIRIsdsPreset));    
+}
+
+//convert CIRPreset to the IRQPreset 
+//
+EXPORT_C void IRQUtility::convertCIRPreset2IRQPreset(const CIRPreset& aCIRPreset, IRQPreset& aIRQPreset)
+{
+  CIRIsdsPreset * cirIsdsPreset = NULL;  
+  TRAPD(err, cirIsdsPreset = CIRIsdsPreset::NewL());
+  if( KErrNone != err)
+    return;
+   
+  aCIRPreset.CopyPresetData(*cirIsdsPreset);  
+  convertCIRIsdsPreset2IRQPrest(*cirIsdsPreset, aIRQPreset);
+  delete cirIsdsPreset;  
+}
+
+//switch from the symbian error code to the IRQ error code 
+//
+EXPORT_C void IRQUtility::convertSError2QError(const int aSError, int& aQError)
+{
+  if( aSError > 0 )
+  {
+    aQError = aSError;
+    return;
+  }
+  
+  switch( aSError )
+  {
+    case KErrNone:
+      aQError = EIRQErrorNone;
+      break;
+    case KErrNotFound:
+      aQError = EIRQErrorNotFound;
+      break;
+    case KErrAlreadyExists:
+      aQError = EIRQErrorAlreadyExist;
+      break;
+      
+    case KErrNoMemory:
+        aQError = EIRQErrorOutOfMemory;
+        break;
+        
+    default:
+      aQError = EIRQErrorGeneral;
+      break;
+  } 
+}
+
+/*
+ * Description : check the validity of URL
+ * return value: true: the URL is valid, vice versa.
+ */
+EXPORT_C bool IRQUtility::isValidUrl(const QString& aUrl)
+{
+    if (aUrl.size() < 8)
+    {
+        return false;
+    }
+
+    QString prefix7 = aUrl.left(7);
+    QString prefix6 = aUrl.left(6);
+
+    if (0 == prefix7.compare("http://", Qt::CaseInsensitive) ||
+        0 == prefix7.compare("rtsp://", Qt::CaseInsensitive) ||
+        0 == prefix6.compare("mms://", Qt::CaseInsensitive))
+    {
+        return true;
+    }
+
+    return false;
+}
+
+/*
+ * Description : check the validity of URL
+ * return value: true: the URL is valid, vice versa.
+ */
+EXPORT_C bool IRQUtility::openAdvLink(const QString& aUrl)
+{
+    bool retval = false;
+    TRAP_IGNORE(retval = openAdvLinkL(aUrl));
+
+    return retval;
+}
+
+EXPORT_C void IRQUtility::writeLog2File(const QString& aString, bool aDeleteOldFile)
+{       
+#ifdef _DEBUG 
+    QFile file("C:\\data\\QTIRLog.txt");
+    
+    if (file.exists() && aDeleteOldFile)
+    {
+        bool ret = file.remove();
+        if (!ret)
+        {
+            return;
+        }
+    }
+
+    bool ret = file.open(QIODevice::ReadWrite);    
+    if( !ret )
+    {
+        return;
+    }
+    
+    QTextStream stream(&file);
+    stream << aString;
+    stream << "\r\n";    
+
+    stream.flush();
+    file.close();
+   
+#else
+    Q_UNUSED(aString);
+    Q_UNUSED(aDeleteOldFile);
+#endif
+
+}
+
+void IRQUtility::appendURLL(const IRQPreset& aQIRPreset, CIRIsdsPreset& aCIRIsdsPreset)
+{
+    int count = aQIRPreset.urlArray.count();
+    for( int i=0; i<count; i++)
+    {
+      CIRChannelServerUrl*  tempServerUrl = CIRChannelServerUrl::NewLC(); 
+      TPtrC16 serverName(reinterpret_cast<const TUint16*>(aQIRPreset.urlArray[i].serverName.utf16()));
+      TPtrC16 url(reinterpret_cast<const TUint16*>(aQIRPreset.urlArray[i].url.utf16()));
+      tempServerUrl->SetServerName(serverName);
+      tempServerUrl->SetServerUrl(url);
+      tempServerUrl->SetBitRate(aQIRPreset.urlArray[i].bitrate);
+      aCIRIsdsPreset.iUrlArray->AppendL(tempServerUrl);
+      CleanupStack::Pop(tempServerUrl);     
+    } 
+}
+
+bool IRQUtility::openAdvLinkL(const QString& aUrl)
+{
+    if (aUrl.size() == 0)
+    {
+        return false;
+    }
+
+    bool ret = true;
+
+    RWsSession wsSession;
+    User::LeaveIfError(wsSession.Connect());
+    CleanupClosePushL(wsSession);
+
+    RApaLsSession ls;
+    User::LeaveIfError(ls.Connect());
+    CleanupClosePushL( ls );
+
+    TDataType htmlDataType( KIRHtmlMimeType );
+    TUid uid;
+    TPtrC16 httpLink(reinterpret_cast<const TUint16*>(aUrl.utf16()));;
+
+    // Get UID of the browser.
+    TInt retVal = ls.AppForDataType( htmlDataType, uid );
+
+    if ( retVal == KErrNone && uid != KNullUid )
+    {
+        // We must check if the browser is already open and if it is, 
+        // switch its currently opened file to the correct URL.
+        TApaTaskList taskList( wsSession );
+        TApaTask task = taskList.FindApp( uid );
+        if ( task.Exists() )
+        {
+            HBufC8* url8 = HBufC8::NewLC( httpLink.Length() );
+            url8->Des().Copy( httpLink );
+            task.SendMessage( TUid::Uid( 0 ), url8->Des() );
+            task.BringToForeground();
+            CleanupStack::PopAndDestroy( url8 );
+        }
+        else
+        {
+            TThreadId threadId;
+            HBufC* newUrl = HBufC::NewLC( httpLink.Length() + KBrowserPrefix().Length() );
+            newUrl->Des().Append( KBrowserPrefix );
+            newUrl->Des().Append( httpLink );
+            ls.StartDocument( newUrl->Des(), uid, threadId );
+            CleanupStack::PopAndDestroy( newUrl );
+        }
+    }
+    else
+    {
+        ret = false;
+    }
+    CleanupStack::PopAndDestroy( &ls );
+
+    wsSession.Flush();    
+    CleanupStack::PopAndDestroy( &wsSession );
+
+    return ret;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqdiskspacewatcher/inc/irqdiskspaceobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,108 @@
+/*
+* 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:  Contains logic for watching certain disk's space
+*
+*/
+
+#ifndef IRQDISKSPACEOBSERVER_H_
+#define IRQDISKSPACEOBSERVER_H_
+
+#include <e32base.h>  // CActive
+#include <f32file.h>  // RFs
+
+class MIRQDiskSpaceObserver;
+
+/**
+ * Defines disk space observer. 
+ *
+ * Observers defined disk and notifies observer if disk space drops below
+ * certain level.
+ */
+class  IRQDiskSpaceObserver  : public CActive
+    {
+
+public:
+
+    /**
+     * Static constructor 
+     *
+     * @param aObserver Observer who is interested if disk 
+     * space drops below certain level.
+     */
+    static IRQDiskSpaceObserver* NewL(MIRQDiskSpaceObserver* aObserver);
+
+    /**
+     * Destructor
+     */
+    ~IRQDiskSpaceObserver();
+    
+    /**
+     * Start Monitoring 
+     */
+    void start(const TInt64 aCriticalLevel);
+
+    /**
+     * Tells observed critical level.
+     *
+     * @return critical level which is been observed by this session.
+     */
+    TInt64 criticalLevel() const;
+    
+    /**
+     * Returns whether or disk defined by parameter 
+     * contains less than the critical level free disk space.
+     */
+    bool isBelowCriticalLevel(const TInt64 aCriticalLevel) const;
+       
+protected:
+    /**
+     * From CActive 
+     */
+    void DoCancel();
+    void RunL();
+
+private:
+
+    /**
+     * C++ constructor.  
+     */
+    IRQDiskSpaceObserver(MIRQDiskSpaceObserver* aObserver);
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+    
+    void run();
+    
+private: 
+
+    /** 
+     * The observer to be notified when critical disk space limit is reached. 
+     */
+    MIRQDiskSpaceObserver* iObserver;
+
+    /** 
+     * Critical disk space level. 
+     */
+    TInt64 iCriticalLevel;
+
+    /** 
+     * Handle to the file system. 
+     */
+    RFs iFs;
+};
+
+
+#endif // IRQDISKSPACEOBSERVER_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqdiskspacewatcher/inc/irqdiskspaceobserverinterface.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:  Disk space observer, information about low disk space.
+*
+*/
+
+
+#ifndef IRQDISKSPACEOBSERVERINTERFACE_H_
+#define IRQDISKSPACEOBSERVERINTERFACE_H_
+
+#include <QtGlobal>
+
+/**
+ *  Observer of low disk space 
+ *
+ *  Observer which is interested low disk space situations. 
+ */
+class MIRQDiskSpaceObserver
+{
+public:
+
+    /**
+     * notifyLowDiskSpace Called when the observed disk's free disk space is
+     * less than the critical level.
+     */
+    virtual void notifyLowDiskSpace(const qint64 aCriticalLevel) = 0;
+};
+
+#endif // IRQDiskSpaceObserverInterface_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqdiskspacewatcher/inc/irqdiskspacewatcher.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* 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:  Disk space watcher, information about low disk space.
+*
+*/
+
+
+#ifndef IRQDISKSPACEWATCHER_H_
+#define IRQDISKSPACEWATCHER_H_
+
+#include <QObject>
+#include <QtGlobal>
+
+#include "irqdiskspaceobserverinterface.h"  // MIRQDiskSpaceObserver
+
+class IRQDiskSpaceObserver;
+
+class IRQDiskSpaceWatcher : public QObject, 
+                            public MIRQDiskSpaceObserver
+{
+    Q_OBJECT
+    
+public:
+    /*!
+     * Constructor.
+     */
+    IMPORT_C IRQDiskSpaceWatcher();
+    
+    /*!
+     * Destructor.
+     */    
+    IMPORT_C ~IRQDiskSpaceWatcher();
+
+public:   
+    /*!
+     *  start monitoring disk space change
+     *  @param aCriticalLevel critical level which is been observed.
+     *                        can NOT less than 0
+     */
+    IMPORT_C bool startMonitorDrive(const qint64 aCriticalLevel);
+                                    
+    IMPORT_C bool startMonitorDrive();
+                                    
+    /*!
+     *  stop monitoring disk space change
+     */    
+    IMPORT_C void stopMonitorDrive();
+
+    /**
+     * @return critical level which is been observed.
+     *         if -1 is returned, indicates watcher can NOT work
+     */
+    IMPORT_C qint64 criticalLevel() const;
+    
+                                           
+    /**
+     * Returns whether or disk defined by parameter 
+     * contains less than the critical level free disk space.
+     *
+     * @param aCriticalLevel critical level which is been observed.
+     * @return true if there is less free disk space than the critical 
+     * level, otherwise false.
+     */
+    IMPORT_C bool isBelowCriticalLevel(const qint64 aCriticalLevel );
+    IMPORT_C bool isBelowCriticalLevel();    
+public:      
+    /*!
+     * From MIRQDiskSpaceObserver.
+     */  
+    void notifyLowDiskSpace(const qint64 aCriticalLevel);
+
+signals:
+    void diskSpaceLow(qint64 aCriticalLevel); 
+
+private:
+    IRQDiskSpaceObserver*  iDiskSpaceObserver;
+    qint64  iDefaultLevel;
+};
+
+#endif // IRQDISKSPACEWATCHER_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqdiskspacewatcher/irqdiskspacewatcher.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+TARGET = irqdiskspacewatcher
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+MOC_DIR = moc
+
+DEPENDPATH += src
+INCLUDEPATH += inc 
+
+symbian{
+  TARGET.UID3 = 0xe14876d7
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+LIBS += -lefsrv \
+        -lplatformenv
+
+
+# Input
+HEADERS += inc\irqdiskspaceobserver.h \
+           inc\irqdiskspaceobserverinterface.h \
+           inc\irqdiskspacewatcher.h
+
+SOURCES += irqdiskspaceobserver.cpp \
+           irqdiskspacewatcher.cpp
+
+include(../common.pri)
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqdiskspacewatcher/src/irqdiskspaceobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,179 @@
+/*
+* 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:  Contains logic for watching certain disk's space
+*
+*/
+#include <pathinfo.h>
+#include "irqdiskspaceobserver.h"
+#include "irqdiskspaceobserverinterface.h"
+
+const TDriveNumber KQtIRDefaultDrive = EDriveC;
+
+const TUint KDriveAValue = 'A';
+const TUint KDriveZValue = 'Z';
+const TUint KDriveaValue = 'a';
+const TUint KDrivezValue = 'z';
+
+static TDriveNumber phoneMemRootDrive();
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+IRQDiskSpaceObserver* IRQDiskSpaceObserver::NewL(MIRQDiskSpaceObserver* aObserver)
+{
+    IRQDiskSpaceObserver* self = new (ELeave) IRQDiskSpaceObserver(aObserver);
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    
+}
+
+// ---------------------------------------------------------------------------
+// Second stage constructor
+// ---------------------------------------------------------------------------
+//
+void IRQDiskSpaceObserver::ConstructL()
+{
+    CActiveScheduler::Add(this);
+    User::LeaveIfError(iFs.Connect());
+}
+
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//
+IRQDiskSpaceObserver::IRQDiskSpaceObserver( MIRQDiskSpaceObserver* aObserver )
+                              : CActive( CActive::EPriorityStandard ),       
+                                iObserver( aObserver ),
+                                iCriticalLevel(0)
+{
+}
+            
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//            
+IRQDiskSpaceObserver::~IRQDiskSpaceObserver()
+{
+    Cancel();
+    iFs.Close();    
+}
+
+// ---------------------------------------------------------------------------
+// Critical Level
+// ---------------------------------------------------------------------------
+//
+TInt64 IRQDiskSpaceObserver::criticalLevel() const
+{
+    if(IsActive())
+    {
+        return iCriticalLevel;
+    }
+    else
+    {
+        return -1;
+    }    
+}
+
+// ---------------------------------------------------------------------------
+// Start Monitoring
+// ---------------------------------------------------------------------------
+//
+void IRQDiskSpaceObserver::start(const TInt64 aCriticalLevel)
+{
+    Cancel();
+    iCriticalLevel = aCriticalLevel;
+    run();
+}
+
+
+// ---------------------------------------------------------------------------
+// From class CActive. 
+// Cancels the pending request.
+// ---------------------------------------------------------------------------
+//
+void IRQDiskSpaceObserver::DoCancel() 
+{    
+    iFs.NotifyDiskSpaceCancel(iStatus);
+}
+
+
+// ---------------------------------------------------------------------------
+// From class CActive. 
+// Invoked when the observed disk's free disk space has run below
+// the supplied critical level.
+// Notifies the observer and regenerates the request to RFs' NotifyDiskSpace.
+// ---------------------------------------------------------------------------
+//
+void IRQDiskSpaceObserver::RunL()
+{       
+    run();   
+}
+    
+
+// ---------------------------------------------------------------------------
+// Returns true if below the critical level in defined disk, otherwise false
+// ---------------------------------------------------------------------------
+//
+bool IRQDiskSpaceObserver::isBelowCriticalLevel(const TInt64 aCriticalLevel) const
+{
+    TVolumeInfo volInfo;
+    if(KErrNone == iFs.Volume(volInfo, KQtIRDefaultDrive))
+    {
+        if(volInfo.iFree < aCriticalLevel)
+        {
+            return true;
+        }
+    }
+    
+    return false;
+}
+
+void IRQDiskSpaceObserver::run()
+{
+    if( iObserver && isBelowCriticalLevel(iCriticalLevel))
+    {
+        iObserver->notifyLowDiskSpace((qint64)iCriticalLevel);
+    }
+        
+    iFs.NotifyDiskSpace(iCriticalLevel, phoneMemRootDrive(), iStatus);
+    SetActive(); 
+}
+
+TDriveNumber phoneMemRootDrive()
+{
+    TParsePtrC phoneMemoryRootPath( PathInfo::PhoneMemoryRootPath() );
+    TPtrC drive( phoneMemoryRootPath.Drive() );
+    TUint driveValue = drive[0];
+    TUint delta = 0;
+    if( driveValue >= KDriveAValue &&
+        driveValue <= KDriveZValue)
+    {
+        delta = driveValue - KDriveAValue;
+    }
+    else if( driveValue >= KDriveaValue &&
+            driveValue <= KDrivezValue)
+    {
+        delta = driveValue - KDriveaValue;
+    }
+    else
+    {
+        return KQtIRDefaultDrive;
+    }
+    
+    return static_cast<TDriveNumber>(EDriveA + delta);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqdiskspacewatcher/src/irqdiskspacewatcher.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,176 @@
+/*
+* 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:  Contains logic for watching certain disk's space
+*
+*/
+
+#include <e32base.h>
+#ifdef USER_DEFINED_DISKSPACE
+#include <QFile>
+#include <QTextStream>
+#include <QStringList>
+#endif
+#include "irqdiskspacewatcher.h"
+#include "irqdiskspaceobserver.h"
+
+const TInt KIR_DEFAULT_CRITICAL_LEVEL = 3*1024*1024;    // 3MB
+
+#ifdef USER_DEFINED_DISKSPACE
+void getDiskSpaceCriticalLevel(qint64 & aLevel);
+#endif
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQDiskSpaceWatcher::IRQDiskSpaceWatcher()
+       : iDiskSpaceObserver(NULL),
+         iDefaultLevel(KIR_DEFAULT_CRITICAL_LEVEL) 
+{
+#ifdef USER_DEFINED_DISKSPACE
+    getDiskSpaceCriticalLevel(iDefaultLevel);
+#endif    
+}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQDiskSpaceWatcher::~IRQDiskSpaceWatcher()
+{
+    delete iDiskSpaceObserver;
+    iDiskSpaceObserver = NULL;
+}
+
+
+// ---------------------------------------------------------------------------
+// IRQDiskSpaceWatcher::criticalLevel()
+// return critical level which is been observed.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C qint64 IRQDiskSpaceWatcher::criticalLevel() const
+{
+    if(NULL != iDiskSpaceObserver)
+    {
+        return (qint64)(iDiskSpaceObserver->criticalLevel());
+    }
+    else
+    {
+        return -1;
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+// IRQDiskSpaceWatcher::startMonitorDrive()
+// start monitoring disk space change
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQDiskSpaceWatcher::startMonitorDrive(const qint64 aCriticalLevel)
+{
+    if(aCriticalLevel < 0)
+    {
+        return false;
+    }
+    
+    if(NULL == iDiskSpaceObserver)
+    {
+        TRAPD(err, iDiskSpaceObserver = IRQDiskSpaceObserver::NewL(this))
+        if(KErrNone != err)
+        {
+            return false;
+        }
+    }
+    
+    stopMonitorDrive();
+    iDiskSpaceObserver->start((TInt64)aCriticalLevel);
+    return true;
+}
+
+EXPORT_C bool IRQDiskSpaceWatcher::startMonitorDrive()
+{
+    return startMonitorDrive(iDefaultLevel);
+}
+// ---------------------------------------------------------------------------
+// IRQDiskSpaceWatcher::stopMonitorDrive()
+// stop monitoring disk space change
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQDiskSpaceWatcher::stopMonitorDrive()
+{
+    if(NULL != iDiskSpaceObserver)
+    {
+        iDiskSpaceObserver->Cancel();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQDiskSpaceWatcher::isBelowCriticalLevel()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQDiskSpaceWatcher::isBelowCriticalLevel( const qint64 aCriticalLevel )
+{
+    if(NULL == iDiskSpaceObserver)
+    {
+        TRAPD(err, iDiskSpaceObserver = IRQDiskSpaceObserver::NewL(this))
+        if(KErrNone != err)
+        {
+            return false;
+        }
+    }
+    
+    return iDiskSpaceObserver->isBelowCriticalLevel((TInt64)aCriticalLevel );
+}                               
+
+EXPORT_C bool IRQDiskSpaceWatcher::isBelowCriticalLevel()
+{
+    return isBelowCriticalLevel(iDefaultLevel);
+}
+
+// ---------------------------------------------------------------------------
+// From MIRQDiskSpaceObserver.
+// ---------------------------------------------------------------------------
+//
+void IRQDiskSpaceWatcher::notifyLowDiskSpace(const qint64 aCriticalLevel)
+{
+    emit diskSpaceLow(aCriticalLevel);
+}
+
+#ifdef USER_DEFINED_DISKSPACE
+void getDiskSpaceCriticalLevel(qint64 & aLevel)
+{
+    QFile file("C:\\data\\QTIRConfigure.txt");
+    if(file.open(QIODevice::ReadOnly)) 
+    {
+        QTextStream stream( &file );
+        QString line;
+        QStringList parameter;
+        while (!stream.atEnd())
+        {
+            line = stream.readLine();
+            parameter = line.split("=");
+            if (parameter.count() == 2)
+            {
+                if (parameter.first() == "diskSpaceCriticalLevel")
+                {
+                    QString level = parameter.last();
+                    aLevel = level.toLongLong();
+                    break;
+                }
+            }
+        }
+    }
+    file.close();
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqfavoritesdb/inc/irqfavoritesdb.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* 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 IRQFAVORITESDB_H
+#define IRQFAVORITESDB_H
+
+#include <QObject>
+#include <pspresetobserver.h> 
+
+class CIRFavoritesDb;
+class IRQPreset;
+
+class IRQFavoritesDB : public QObject, public MPSPresetObserver
+{
+Q_OBJECT
+public:
+
+    IMPORT_C IRQFavoritesDB();
+
+    ~IRQFavoritesDB();
+
+    /* add a preset 
+     * @param IRQPreset& the isds preset,
+     * @return  errcode
+     */
+    IMPORT_C int addPreset(const IRQPreset& aPreset);
+
+    /* add a preset manually
+     * @return  errcode
+     * @param 
+     */
+    IMPORT_C int addPreset(const QString& aName, const QString& aURL);
+
+    /* get a preset uniq id
+     * @return 
+     * @param
+     */
+    IMPORT_C int getUniqId(int aNum);
+    /* delete a preset by uniq id
+     * @return errcode
+     * @param
+     */
+    IMPORT_C int deletePreset(int aUniqId);
+    /* search a preset by uniqpresetId / isdspresetid
+     * warning: the function needs further checking
+     *  @return errcode
+     */
+    IMPORT_C int searchPreset(int aUniqPresetId, int aIsdsPresetId);
+
+    /* get the previouse preset index in the internal list
+     * @return the index
+     */
+    IMPORT_C int getPreviousPreset(int aIndex);
+
+    /* get the next preset index
+     * @return the index
+     */
+    IMPORT_C int getNextPreset(int aIndex); 
+
+    /* replace with new preset
+     * @return errcode 
+     */
+    IMPORT_C int replacePreset(const IRQPreset& aNewPreset);
+
+    /* @return errcode
+     */
+    IMPORT_C int replaceUserDefinedPreset(const IRQPreset& aNewPreset);
+
+    /* change the preset type to user defined
+     * @return errcode
+     */
+    IMPORT_C int makePresetUserDefined(int aChannelId,
+            int aUserDefinedChannelId);
+
+    /* get the empty preset left count
+     * @return the count of empty presets left 
+     */
+    IMPORT_C int emptyPresetCount() const;
+
+    /* get the max preset count supported now
+     * @return errcode 
+     */
+    IMPORT_C int maxPresetCount();
+
+    /* the interface is not used currently.
+     **/
+    IMPORT_C void setMoveStatus(bool aStatus);
+
+    /* the interface is not used currently 
+     */
+    IMPORT_C bool getMoveStatus();
+
+    /* for CIRPreset is just an interface so we can wrapper it into the IRQPreset.
+     * the interface get the IRQPreset list. The upper layer will free all the items
+     * in the list and the list self*/
+    IMPORT_C QList<IRQPreset*>* getPresets() const;
+
+    /*
+     * Increase the played times of the preset if it's in the favorites
+     */
+    IMPORT_C void increasePlayedTimes(const IRQPreset &aPreset);
+    
+    /*
+     * get the CIRFavoritesDb 
+     */
+    IMPORT_C CIRFavoritesDb * getCIRFavoriteDB() const;
+
+signals:
+    /*
+     * the signal will triggered when we receive the message that preset is changed
+     */
+    void presetChanged(int aId, TUid aDataHandler,
+            MPSPresetObserver::TPSReason aType);
+
+private:
+    CIRFavoritesDb * iIRFavoritesDb;
+    void addPresetL(const IRQPreset& aPreset, int& aRetValue);
+    void replacePresetL(const IRQPreset& aNewPreset);
+    void replaceUserDefinedPresetL(const IRQPreset& aNewPreset);
+    void increasePlayedTimesL(const IRQPreset &aPreset);
+    
+private:
+    /* from MPSPresetObserver */
+    void HandlePresetChangedL(TInt aId, TUid aDataHandler,
+            MPSPresetObserver::TPSReason aType);
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqfavoritesdb/irqfavoritesdb.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+
+TARGET = irqfavorites
+TARGET.CAPABILITY += CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH = src
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(ecom)}
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(http)}
+INCLUDEPATH += $${MW_LAYER_PUBLIC_EXPORT_PATH(http)}
+
+INCLUDEPATH += ..\..\internetradio2.0\favoritesdbinc \
+               ..\..\internetradio2.0\include \
+               ..\..\internetradio2.0\settingsinc \
+               ..\..\internetradio2.0\datastructuresinc \
+               ..\..\internetradio2.0\presetplugininc  \
+               ..\..\internetradio2.0\xmlparserinc   \
+               ..\irqcommon\inc
+             
+
+               
+               
+LIBS += -lestor \
+        -leuser \
+        -lirdatastructures \
+        -lirsettings \
+        -lpsclient100 \
+        -lirxmlparser \
+        -lflogger \
+        -lirfavoritesdb \
+        -lirqutility
+
+symbian{
+  TARGET.UID3 = 0xecbde2d8
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+
+#header files list
+HEADERS += inc\irqfavoritesdb.h  
+
+#source files list
+SOURCES += irqfavoritesdb.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqfavoritesdb/src/irqfavoritesdb.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,287 @@
+/*
+* 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 <e32err.h>
+#include "irqfavoritesdb.h" 
+#include "irqenums.h"
+#include "irqutility.h" 
+#include "irqisdsdatastructure.h"
+#include "irisdspreset.h"
+#include "irpreset.h"
+#include "irfavoritesdb.h"
+
+EXPORT_C IRQFavoritesDB::IRQFavoritesDB()
+{
+    TRAPD(err, iIRFavoritesDb = CIRFavoritesDb::NewL());
+    if( KErrNone != err)
+        return;
+
+    /* add self to the observers of the CIRFavoritesDb. When the call back function
+     * is called, it means that preset is changed and we send a signal to the uper layer*/
+    iIRFavoritesDb->AddObserver(*this);
+}
+IRQFavoritesDB::~IRQFavoritesDB()
+{
+    delete iIRFavoritesDb;
+}
+
+//add a preset 
+//@param CIRIsdsPreset& the isds preset
+//@return  errcode
+EXPORT_C int IRQFavoritesDB::addPreset(const IRQPreset& aPreset)
+{
+    int returnCode = 0;
+    TRAPD(err, addPresetL(aPreset, returnCode));
+    RETURN_IF_ERR(err);
+
+    int result = 0;
+    IRQUtility::convertSError2QError(returnCode, result);
+    return result;
+}
+
+//add a preset manually
+//@return  errcode
+//@param 
+//
+EXPORT_C int IRQFavoritesDB::addPreset(const QString& aName,
+        const QString& aURL)
+{
+    
+    if( 0 == aName.size() || 0 == aURL.size())
+        return EIRQErrorBadParameter;
+    
+    TPtrC16 nameptr(reinterpret_cast<const TUint16*> (aName.utf16()));
+    TPtrC16 urlptr(reinterpret_cast<const TUint16*> (aURL.utf16()));
+    int returnCode = 0;
+    TRAPD(err, (iIRFavoritesDb->AddPresetL(nameptr, urlptr, returnCode)));
+    RETURN_IF_ERR(err);
+
+    int result = 0;
+    IRQUtility::convertSError2QError(returnCode, result);
+    return result;
+}
+
+//get a preset uniq id
+//@return errcode
+//@param
+//
+EXPORT_C int IRQFavoritesDB::getUniqId(int aNum)
+{
+    if( aNum < 0 || aNum >= iIRFavoritesDb->iFavPresetList.Count())
+        return EIRQErrorBadParameter;
+    
+    return iIRFavoritesDb->iFavPresetList[aNum]->Id();
+}
+
+//delete a preset by uniq id
+//@return errcode
+//@param
+//
+EXPORT_C int IRQFavoritesDB::deletePreset(int aUniqId)
+{
+    TRAPD( err, (iIRFavoritesDb->DeletePresetL(aUniqId)));
+    RETURN_IF_ERR(err);
+    return EIRQErrorNone;
+}
+
+//search a preset by uniqpresetId / isdspresetid
+//warning: the function needs further checking
+//@return errcode
+//
+EXPORT_C int IRQFavoritesDB::searchPreset(int aUniqPresetId, int aIsdsPresetId)
+{
+    int returnCode = 0;
+    int result = 0; //for QT
+    returnCode = iIRFavoritesDb->SearchPreset(aUniqPresetId, aIsdsPresetId);
+    IRQUtility::convertSError2QError(returnCode, result);
+    return result;
+}
+
+//
+//get the previouse preset index in the internal list
+//@return the index
+//
+EXPORT_C int IRQFavoritesDB::getPreviousPreset(int aIndex)
+{
+    return iIRFavoritesDb->GetPreviousPreset(aIndex);
+}
+
+//
+//get the next preset index
+//@return the index
+//
+EXPORT_C int IRQFavoritesDB::getNextPreset(int aIndex)
+{
+    return iIRFavoritesDb->GetNextPreset(aIndex);
+}
+
+ 
+//replace with new preset
+//@return errcode 
+//
+EXPORT_C int IRQFavoritesDB::replacePreset(const IRQPreset& aNewPreset)
+{
+    TRAPD(err, replacePresetL(aNewPreset));
+    RETURN_IF_ERR(err);
+    return EIRQErrorNone;
+}
+
+//@return errcode
+//
+EXPORT_C int IRQFavoritesDB::replaceUserDefinedPreset(const IRQPreset& aNewPreset)
+{
+    TRAPD(err, replaceUserDefinedPresetL(aNewPreset));
+    RETURN_IF_ERR(err);
+    return EIRQErrorNone;
+}
+
+//change the preset type to user defined
+//@return errcode
+//
+EXPORT_C int IRQFavoritesDB::makePresetUserDefined(int aChannelId,
+        int aUserDefinedChannelId)
+{
+    TRAPD(err, (iIRFavoritesDb->MakePresetUserDefinedL(aChannelId, aUserDefinedChannelId)));
+    RETURN_IF_ERR(err);
+    return EIRQErrorNone;
+}
+
+//get the empty preset left count
+//@return the count of empty presets left 
+//
+EXPORT_C int IRQFavoritesDB::emptyPresetCount() const
+{
+    return iIRFavoritesDb->EmptyPresetCount();
+}
+
+//get the max preset count supported now
+//@return errcode 
+//
+EXPORT_C int IRQFavoritesDB::maxPresetCount()
+{
+    return iIRFavoritesDb->MaxPresetCount();
+}
+
+//the interface is not used currently.
+//
+EXPORT_C void IRQFavoritesDB::setMoveStatus(bool aStatus)
+{
+    iIRFavoritesDb->SetMoveStatus(aStatus);    
+}
+
+//the interface is not used currently 
+//
+EXPORT_C bool IRQFavoritesDB::getMoveStatus()
+{
+    return iIRFavoritesDb->GetMoveStatus();
+}
+
+//for CIRPreset is just an interface so we can wrapper it into the IRQPreset.
+//the interface get the IRQPreset list. The upper layer will free all the items
+//in the list and the list self
+//
+EXPORT_C QList<IRQPreset*>* IRQFavoritesDB::getPresets() const
+{
+    QList<IRQPreset*> * presetList = new QList<IRQPreset*> ();
+    const RIRPresetArray& cirPresetList = iIRFavoritesDb->GetAllSortedPresets();
+    int counts = cirPresetList.Count();
+    for (int i = 0; i < counts; i++)
+    {
+        IRQPreset *irqPreset = new IRQPreset();
+        IRQUtility::convertCIRPreset2IRQPreset(*(cirPresetList[i]), *irqPreset);
+        presetList->append(irqPreset);
+    }
+    return presetList;
+}
+
+/*
+ * Increase the played times of the preset if it's in the favorites
+ */
+EXPORT_C void IRQFavoritesDB::increasePlayedTimes(const IRQPreset &aPreset)
+{
+    TRAP_IGNORE(increasePlayedTimesL(aPreset));
+}
+
+EXPORT_C CIRFavoritesDb * IRQFavoritesDB::getCIRFavoriteDB() const
+{
+    return iIRFavoritesDb;
+}
+
+/*  None export functions */
+
+void IRQFavoritesDB::HandlePresetChangedL(TInt aId, TUid aDataHandler,
+        MPSPresetObserver::TPSReason aType)
+{
+    emit presetChanged(aId, aDataHandler, aType);
+}
+
+void IRQFavoritesDB::addPresetL(const IRQPreset& aPreset, int& aRetValue)
+{
+    CIRIsdsPreset * cirPreset = CIRIsdsPreset::NewLC();
+    IRQUtility::convertIRQPreset2CIRIsdsPreset(aPreset, *cirPreset);
+    iIRFavoritesDb->AddPresetL(*cirPreset, aRetValue);
+    CleanupStack::PopAndDestroy(cirPreset);
+}
+
+void IRQFavoritesDB::replacePresetL(const IRQPreset& aNewPreset)
+{
+    CIRIsdsPreset * cirPreset = CIRIsdsPreset::NewLC();
+    IRQUtility::convertIRQPreset2CIRIsdsPreset(aNewPreset, *cirPreset);
+    iIRFavoritesDb->ReplacePresetL(*cirPreset);
+    CleanupStack::PopAndDestroy(cirPreset);
+}
+
+void IRQFavoritesDB::replaceUserDefinedPresetL(const IRQPreset& aNewPreset)
+{
+    CIRIsdsPreset *cirPreset = CIRIsdsPreset::NewLC();
+    IRQUtility::convertIRQPreset2CIRIsdsPreset(aNewPreset, *cirPreset);
+    iIRFavoritesDb->ReplaceUserDefinedPresetL(*cirPreset);
+    CleanupStack::PopAndDestroy(cirPreset);
+}
+
+void IRQFavoritesDB::increasePlayedTimesL(const IRQPreset &aPreset)
+{
+    CIRIsdsPreset * cirPreset = CIRIsdsPreset::NewLC();
+    IRQUtility::convertIRQPreset2CIRIsdsPreset(aPreset, *cirPreset);
+    iIRFavoritesDb->IncreasePlayedTimesL(*cirPreset);    
+    CleanupStack::PopAndDestroy(cirPreset);
+}
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqisdsclient/inc/irqisdsclient.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2006-2007 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:  a new wrapper class in QT 
+ *
+*/
+
+#ifndef IRQISDSCLIENT_H
+#define IRQISDSCLIENT_H
+
+#include <QObject>
+#include <e32base.h>
+#include <badesca.h>
+#include <QList> 
+#include "irqenums.h" 
+ 
+class IRQIsdsClientImpl;
+class IRQFavoritesDB;
+class IRQPreset;
+class IRQBrowseCategoryItem;
+class IRQChannelItem;
+
+enum IRQSycPresetStatus
+{
+    EIRQIsdsSycPresetNoChange,
+    EIRQIsdsSycPresetRemoved,
+    EIRQIsdsSycPresetChanged
+};
+
+/**
+ *This class is being used by the UI to send request and get data from low layer
+ *All interfaces are QT-supported
+ */
+class IRQIsdsClient : public QObject
+{
+Q_OBJECT
+
+public:
+
+    /**
+     *IRQIsdsClient::IRQIsdsClientInterfaceIDs()
+     *enum to indicate which the type of category   
+     */
+    enum IRQIsdsClientInterfaceIDs
+    {
+        EGenre, ELanguages, ECountries, Ehotpicks
+    };
+
+    /**
+     *IRQIsdsClient::openInstance() 
+     *to get an instance of the IRQIsdsClient. 
+     *@return IRQIsdsClient *
+     */
+    IMPORT_C static IRQIsdsClient *openInstance(IRQFavoritesDB *aFavPresets);
+
+    /**
+     *IRQIsdsClient::CloseInstance() 
+     *close the instance.
+     *@return IRQIsdsClient *
+     */
+    IMPORT_C void closeInstance();
+
+    /**
+     *IRQIsdsClient::IsdsSearchRequestL()
+     *Issue a search request to the isds server
+     *@param QString, the requested search string
+     **/
+    IMPORT_C void isdsSearchRequest(const QString& aIsdsSearchString);
+
+    /**
+     *IRQIsdsClient::IsdsCategoryRequest()
+     *Send the category request by the category type
+     *@param IRQIsdsClientInterfaceIDs, the requested category type
+     **/
+    IMPORT_C void isdsCategoryRequest(
+            IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType, bool& aCache);
+    
+    /**
+     *IRQIsdsClient::isdsIsCategoryCached()
+     *to check wether the request data is cached. Different from the above
+     *function, this function will not send the http request if the data is 
+     *not cached in DB. Normally, we call this function to check the cache.
+     **/
+    IMPORT_C bool isdsIsCategoryCached(IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType);
+    
+    /**
+     *IRQIsdsClient::isdsIsChannelCached()
+     *to check wether the request data is cached. Different from the followed
+     *function, this function will not send the http request if the data is 
+     *not cached in DB. Normally, we call this function to check the cache.
+     **/
+    IMPORT_C bool isdsIsChannelCached(int aIndex);
+
+    /**
+     *IRQIsdsClient::IsdsChannelRequestL()
+     *Send the channels request by the channel index in the specify category
+     *@param int, the requested index from UI view   
+     **/
+    IMPORT_C void isdsChannelRequest(int aIndex, bool& aCache);
+
+    /**
+     *IRQIsdsClient::IsdsListenRequestL()
+     *issue a listen request to the isds client. 
+     *@param int,bool, the current index of channel, the history tag  
+     **/
+    IMPORT_C void isdsListenRequest(int aCurrentIndex, bool aHistoryBool =
+            false);
+
+    /**
+     *IRQIsdsClient::IsdsListenRequestL()
+     *to syncronize presets
+     *@param int,QString, the preset id and the last modified tag for the preset   
+     **/
+    IMPORT_C int isdsSyncPreset(int aPresetId, const QString& aIfModifySince);
+
+    /**
+     *IRQIsdsClient::IsdsCancelRequest()
+     *Cacel the request sent by the UI.
+     *@param None
+     **/
+    IMPORT_C void isdsCancelRequest();
+
+    /**
+     *IRQIsdsClient::IsdsGetCurrentPlayingIndex()
+     *get the playing song's index 
+     *@param None
+     **/
+    IMPORT_C int isdsGetCurrentPlayingIndex();
+
+    /**
+     *IRQIsdsClient::IsdsIsCategoryBanner()
+     *to see wether category view has a banner.
+     *@param None
+     **/
+    IMPORT_C bool isdsIsCategoryBanner();
+
+    /**
+     *IRQIsdsClient::IsdsIsChannelBanner()
+     *to see wether channel view has a banner.
+     *@param None
+     **/
+    IMPORT_C bool isdsIsChannelBanner();
+
+    /**
+     *IRQIsdsClient::IsdsLogoDownSendRequestL()
+     *the api is called from the UI(nowplaying view) to download logo.
+     *@param None
+     **/
+    IMPORT_C void isdsLogoDownSendRequest(IRQPreset* aPreset, int aNPVReq = 1,
+            int aXValue = 0, int aYValue = 0);
+
+    /**
+     *IRQIsdsClient::isdsIsLogoCached()
+     *to check wether the preset's logo is cached or not.      
+     **/
+    IMPORT_C bool isdsIsLogoCached(IRQPreset* aPreset, int aXValue = 0, int aYValue = 0);
+    /**
+     *IRQIsdsClient::isdsLogoDownCancelTransaction()
+     *the api is called to cancel the current transaction
+     *@param None
+     **/
+    IMPORT_C void isdsLogoDownCancelTransaction();
+
+    /**
+     * IRQIsdsClient::isdsLogoDownIsRunning()
+     *  To know the status of downloading logo
+     */
+    IMPORT_C bool isdsLogoDownIsRunning() const;
+
+    /**
+     * IRQIsdsClient::IsdsLogoDownCheckCacheLogoL()
+     * takes the url as a parameter and the return value indicates wether the 
+     * logo is in the cache. If the logo is in the cache, the logo data will 
+     * be saved in an internal member of the logodown engine and we can use 
+     * the next function to get it from the engine. 
+     * this API is called form the search results view.
+     * @param QString: the url of the img, int: the status for getting
+     */
+    IMPORT_C void isdsLogoDownCheckCacheLogo(const QString& aURL, int& aStatus);
+
+    /**
+     * IRQIsdsClient::IsdsLogoDownSendCacheLogo()
+     * get the cache logo from the logodown engine. The return value should 
+     * be changed to be QT value in future 
+     * @param None
+     */
+    IMPORT_C TDesC8& isdsLogoDownSendCacheLogo();
+    
+    /**
+     * IRQIsdsClient::isdsPostLog()
+     * send the log file to the isds server
+     * @param None
+     */
+    IMPORT_C void isdsPostLog(const QString& aFileName);
+    
+    /*
+     * IRQIsdsClient::isdsGetIRID()
+	 * get the irid of the application
+     */
+    IMPORT_C void isdsGetIRID();
+
+    /*
+     * IRQIsdsClient::isdsGetBrowseBanner()
+     * get the browse advertisement url and clickthrough url
+     */
+    IMPORT_C void isdsGetBrowseBanner(QString& aBannerUrl, QString& aClickThroughUrl);
+
+    /*
+     * IRQIsdsClient::isdsMultiSearch()
+     * the new interface of multi search
+     */
+    IMPORT_C void isdsMultSearch(QString aGenreID, QString aCountryID, QString aLanguageID, QString aSearchText);
+
+    IMPORT_C bool isdsIsConstructSucceed() const;
+    
+    signals:
+    /**
+     *IRQIsdsClient::categoryItemsChanged()
+     *A signal to notify UI that the category items data is changed
+     *@param QList<IRQBrowseCategoryItem *>, the data list sent to UI model
+     **/
+    void categoryItemsChanged(QList<IRQBrowseCategoryItem *> *aPushItemsList);
+    /**
+     *IRQIsdsClient::channelItemsChanged()
+     *A signal to notify UI that the channel items data is changed
+     *@param QList<QIRChannelItem *>, the data list sent to UI model
+     **/
+    void channelItemsChanged(QList<IRQChannelItem *> *aPushItemsList);
+    /**
+     *IRQIsdsClient::operationException()
+     *A signal to notify UI that some inner error occurs     
+     *@param IRQError, the error type notified
+     **/
+    void operationException(IRQError aError);
+
+    /**
+     *IRQIsdsClient::presetResponse()
+     *A signal to notify UI that the preset data is changed     * 
+     *@param QIRPreset*, the data sent to UI model
+     **/
+    void presetResponse(IRQPreset *aPreset);
+
+    /**
+     *IRQIsdsClient::presetResponse()
+     *A signal to notify UI that the preset data is changed     * 
+     *@param QIRPreset* IRQSycPresetStatus, the data sent to UI model
+     **/
+    void syncPresetResult(IRQSycPresetStatus aStatus, IRQPreset *aPreset);
+
+    /**
+     *IRQIsdsClient::presetLogoDownloaded()
+     *A signal to notify UI that the preset logo requested is downloaded from server 
+     *@param None
+     **/
+    void presetLogoDownloaded(IRQPreset* aPreset);
+
+    /**
+     *IRQIsdsClient::presetLogoDownloadError()
+     *A signal to notify UI that the preset logo downloading is error      
+     *@param None
+     **/
+    void presetLogoDownloadError();
+    
+    /*
+     * IRQIsdsClient::iridReceived()
+     * A signal to notify UI that the irid is received
+     */
+    void iridReceived(QString aIRID);
+    
+    
+
+private:
+
+    /*
+     * the IRQIsdsClientImpl of the IRQIsdsClient
+     */
+    IRQIsdsClientImpl *iImpl;
+
+    /**
+     *iSingletonInstances
+     * the count of reference of the object
+     */
+    int iSingletonInstances;
+
+    IRQIsdsClient(IRQFavoritesDB *aFavPresets);
+    /**
+     *IRQIsdsClient::~IRQIsdsClient()
+     *default c++ function
+     **/
+    ~IRQIsdsClient();
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqisdsclient/inc/irqisdsclientimpl.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,236 @@
+/*
+* 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 IRQISDSCLIENTIMPL_H_
+#define IRQISDSCLIENTIMPL_H_
+
+#include "irqisdsclient.h"
+#include "misdsresponseobserver.h"
+#include "mlogodownloadobserver.h"
+
+
+class CIRIsdsClient;
+class CIRFavoritesDb;
+class CIRLogoDownloadEngine;
+class IRQIsdsClientImpl : public QObject,
+        public MIsdsResponseObserver,
+        public MLogoDownloadObserver
+{
+Q_OBJECT
+
+public:
+    
+    IRQIsdsClientImpl(IRQFavoritesDB *aFavPresets);
+    
+    ~IRQIsdsClientImpl();
+    
+    void isdsSearchRequestImpl(const QString& aIsdsSearchString);
+    
+     
+    void isdsCategoryRequestImpl(
+            IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType, bool& aCache);
+
+    bool isdsIsCategoryCachedImpl(IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType);
+    
+    bool isdsIsChannelCachedImpl(int aIndex);
+    
+    void isdsChannelRequestImpl(int aIndex, bool& aCache);
+
+     
+    void isdsListenRequestImpl(int aCurrentIndex, bool aHistoryBool =
+            false);
+
+     
+    int isdsSyncPresetImpl(int aPresetId, const QString& aIfModifySince);   
+     
+    void isdsCancelRequestImpl();    
+    
+    bool isdsIsCategoryBannerImpl();
+     
+    bool isdsIsChannelBannerImpl();
+     
+    void isdsLogoDownSendRequestImpl(IRQPreset* aPreset, int aNPVReq = 1,
+            int aXValue = 0, int aYValue = 0);
+    
+    bool isdsIsLogoCachedImpl(IRQPreset* aPreset, int aXValue = 0, int aYValue = 0);
+    
+    void isdsLogoDownCancelTransactionImpl();
+     
+    bool isdsLogoDownIsRunningImpl() const;
+     
+    void isdsLogoDownCheckCacheLogoImpl(const QString& aURL, int& aStatus);
+     
+    TDesC8& isdsLogoDownSendCacheLogoImpl();
+    
+    void isdsPostLogImpl(const QString &aFileName);
+    
+    void isdsGetIRIDImpl();
+
+    void isdsGetBrowseBannerImpl(QString& aBannerUrl, QString& aClickThroughUrl);
+    
+    void isdsMultSearchImpl(QString aGenreID, QString aCountryID, QString aLanguageID, QString aSearchText);
+        
+    bool isdsIsConstructSucceed() const;
+    
+    signals:    
+    
+    void categoryItemsChangedImpl(QList<IRQBrowseCategoryItem *> *aPushItemsList);
+
+    void channelItemsChangedImpl(QList<IRQChannelItem *> *aPushItemsList);
+
+    void operationExceptionImpl(IRQError aError);
+
+    void presetResponseImpl(IRQPreset *aPreset);  
+ 
+    void syncPresetResultImpl(IRQSycPresetStatus aStatus, IRQPreset *aPreset);        
+
+    void presetLogoDownloadedImpl(IRQPreset* aPreset);
+
+    void presetLogoDownloadErrorImpl(); 
+    
+    void iridReceivedImpl(QString aIRID);   
+
+private:
+
+    /**
+     *IRQIsdsClientImpl::IsdsErrorL()
+     *used to indicate errors in retrieving data from isds server
+     *@param int, the error code sent by the http receiver 
+     **/
+    void IsdsErrorL(int aErrCode);
+    /**
+     *IRQIsdsClientImpl::IsdsCatogoryDataReceivedL()
+     *when we get the category data from low layer, the function is called and
+     *we will generate the data pushed to UI
+     **/
+    void IsdsCatogoryDataReceivedL(
+            CArrayPtrFlat<CIRBrowseCatagoryItems> & aParsedStructure);
+    /**
+     *IRQIsdsClientImpl::IsdsChannelDataReceivedL()
+     *when we get the channels data from low layer, the function is called and
+     *we will generate the data pushed to UI
+     **/
+    void IsdsChannelDataReceivedL(
+            CArrayPtrFlat<CIRBrowseChannelItems> & aParsedStructure);
+    /**
+     *IRQIsdsClientImpl::IsdsPresetDataReceivedL()
+     *when we get the presets data from low layer, the function is called and
+     *we will generate the data pushed to UI
+     **/
+    void IsdsPresetDataReceivedL(
+            CArrayPtrFlat<CIRIsdsPreset> & aParsedStructure);
+    /**
+     *IRQIsdsClientImpl::IsdsPresetRemovedL()
+     *when we find that the preset to be syc is deleted from isds server, the function 
+     *will be called to notify the UI.
+     **/
+    void IsdsPresetRemovedL(TInt aId);
+    /**
+     *IRQIsdsClientImpl::IsdsPresetChangedL()
+     *when we find that the preset to be syc is changed from isds server, the function 
+     *will be called to notify the UI.
+     **/
+    void IsdsPresetChangedL(CIRIsdsPreset& aPreset);
+    /**
+     *IRQIsdsClientImpl::IsdsPresetNoChangeL()
+     *when we find that the preset to be syc is not changed from isds server, the function 
+     *will be called to notify the UI.
+     **/
+    void IsdsPresetNoChangeL();
+    /**
+     * IRQIsdsClientImpl::PresetLogoDownloadedL()
+     * called back when a preset's logo has downloaded
+     * @param CIRIsdsPreset*, preset with downloaded logo
+     */
+    void PresetLogoDownloadedL(CIRIsdsPreset* aPreset);
+
+    /**
+     * IRQIsdsClientImpl::PresetLogoDownloadError()
+     * called back when a preset's logo has not downloaded
+     * @param CIRIsdsPreset*, preset with no logo data
+     */
+    void PresetLogoDownloadError(CIRIsdsPreset* aPreset);   
+    
+    
+    void IsdsOtaInfoRecieved( CIROTAUpdate &aOtaData);
+    
+    /*
+     * IRQIsdsClientImpl::IsdsIRIDRecieved()
+     * call back from MIsdsResponseObserver
+     */
+    void IsdsIRIDRecieved(const TDesC& aIRID);    
+    
+
+private:   
+ 
+    /**
+     * iISDSClient
+     * ISDS INTERFACE
+     */    
+    CIRIsdsClient *iISDSClient;    
+    
+    /*
+     * iFavPresets
+     * Instance of FavoritesDb
+     */
+    CIRFavoritesDb *iFavPresets;
+
+    /**
+     * iChannelBannerUrl
+     * banner url in statons view
+     */
+    QString iChannelBannerUrl;
+    
+    /**
+     * iCatBannerUrl
+     * banner url in category view
+     */
+    QString iCatBannerUrl;
+    
+    /**
+     * iChannelClickThroughUrl
+     * click through url in stations view
+     */
+    QString iChannelClickThroughUrl;
+    
+    /**
+     * iCatClickThroughUrl
+     * click through url in category view
+     */
+    QString iCatClickThroughUrl;
+    
+    /**
+     * iCatBannerTag
+     * bool value to show is there any category banner
+     */
+    bool iCatBannerTag;
+    
+    /**
+     * iChannelBannerTag
+     * bool value to show is there any channel banner
+     */
+    bool iChannelBannerTag;
+
+    
+    /**
+     *Pointet to Logo download
+     */
+    CIRLogoDownloadEngine* iLogoDownloadEngine;
+
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqisdsclient/irqisdsclient.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+
+TARGET = irqisdsclient
+TARGET.CAPABILITY += CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH = src
+
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(libc)}
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(ecom)}
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(http)}
+INCLUDEPATH += $${MW_LAYER_PUBLIC_EXPORT_PATH(http)}       
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(mmf/common)}
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(xml)}
+
+INCLUDEPATH += ..\..\internetradio2.0\settingsinc \
+               ..\..\internetradio2.0\datastructuresinc \
+               ..\..\internetradio2.0\favoritesdbinc \
+               ..\..\internetradio2.0\networkcontrollerinc \
+               ..\..\internetradio2.0\isdsclientinc  \
+               ..\..\internetradio2.0\resources \
+               ..\..\internetradio2.0\include  \
+               ..\..\internetradio2.0\dataproviderinc \
+               ..\..\internetradio2.0\cachemgmtinc \
+               ..\..\internetradio2.0\xmlparserinc \
+               ..\..\internetradio2.0\sessionloginc \
+               ..\..\internetradio2.0\settingsinc \
+               ..\irqcommon\inc \
+               ..\irqfavoritesdb\inc
+               
+LIBS += -lirdatastructures \
+        -lirfavoritesdb \
+        -lirqfavorites \
+        -lirnetworkcontroller \
+        -lirsettings \
+        -lisdsclientinterface \
+        -lirdataprovider \
+        -lflogger \
+        -lirqutility
+
+
+symbian{
+  TARGET.UID3 = 0xec6ecb67
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+#input
+
+#header files list
+HEADERS += inc\irqisdsclient.h \
+           inc\irqisdsclientimpl.h
+
+#source files list
+SOURCES += irqisdsclient.cpp \
+           irqisdscientimpl.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+include(../common.pri)
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqisdsclient/src/irqisdscientimpl.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,577 @@
+/*
+* 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 USER_DEFINED_ISDSURL
+#include <QFile>
+#include <QTextStream>
+#include <QStringList>
+#endif // USER_DEFINED_ISDSURL
+#include "irqisdsclientimpl.h"
+#include "irqenums.h"
+#include "irqfavoritesdb.h"
+#include "irlogodownloadengine.h"
+#include "irdataprovider.h"
+#include "irhttpdataprovider.h"
+#include "irqutility.h"
+#include "irbrowsecatagoryitems.h"
+#include "irbrowsechannelitems.h"
+#include "isdsclientdll.h"
+#include "irqisdsdatastructure.h"
+
+#ifdef USER_DEFINED_ISDSURL
+static const char* KDefaultIsdsUrl = "http://88.114.146.238/isds";
+void getIsdsUrlFromConfiguration(QString & aUrl);
+#endif // USER_DEFINED_ISDSURL
+
+IRQIsdsClientImpl::IRQIsdsClientImpl(IRQFavoritesDB *aFavPresets) : iISDSClient(NULL), iFavPresets(NULL),
+                                                                    iLogoDownloadEngine(NULL)
+{
+    iFavPresets = aFavPresets->getCIRFavoriteDB();
+#ifdef USER_DEFINED_ISDSURL
+    QString userDefinedIsdsUrl(KDefaultIsdsUrl);
+    getIsdsUrlFromConfiguration(userDefinedIsdsUrl);
+    TPtrC irqissbaseurl(reinterpret_cast<const TUint16*>(userDefinedIsdsUrl.utf16()));
+#else    
+    _LIT( irqissbaseurl, "http://idirectory.xgns.net/isds" );
+#endif    
+    TRAPD(error, iISDSClient = CIRIsdsClient::NewL(*this, irqissbaseurl));
+    if(KErrNone != error)
+    {
+        return;
+    }
+    
+    iLogoDownloadEngine
+            = iISDSClient->GetDataProvider()->GetHttpDataProvider()->GetLogoDownloadEngine();
+    iLogoDownloadEngine->SetFavDbInstance(iFavPresets);
+}
+
+IRQIsdsClientImpl::~IRQIsdsClientImpl()
+{
+    delete iISDSClient;
+}
+
+//used to indicate errors in retrieving data from isds server
+//@param int, the error code sent by the http receiver 
+//
+void IRQIsdsClientImpl::IsdsErrorL(int aErrCode)
+{
+    if (KNotFound == aErrCode)
+    {
+        emit operationExceptionImpl(EIRQErrorNotFound);
+    }
+    else if (KErrCouldNotConnect == aErrCode)
+    {
+        emit operationExceptionImpl(EIRQErrorCouldNotConnect);
+    }
+    else if (KDndTimedOut == aErrCode)
+    {
+        emit operationExceptionImpl(EIRQErrorTimeOut);
+    }
+    else if (KServiceUnavailable == aErrCode)
+    {
+        emit operationExceptionImpl(EIRQErrorServiceUnavailable);
+    }
+    else if (KErrCorrupt == aErrCode)
+    {
+        emit operationExceptionImpl(EIRQErrorCorrupt);
+    }
+    else if (KDataProviderTimeout == aErrCode)
+    {
+        emit operationExceptionImpl(EIRQErrorTimeOut);
+    }
+    else
+        emit operationExceptionImpl(EIRQErrorGeneral);
+}
+
+void IRQIsdsClientImpl::isdsSearchRequestImpl(const QString& aIsdsSearchString)
+{
+
+    TPtrC16 searchDes(
+            reinterpret_cast<const TUint16*> (aIsdsSearchString.utf16()));
+   
+    TRAPD( err, iISDSClient->IRISDSSearchL(searchDes));
+    if (KErrNone != err)
+    {
+        emit operationExceptionImpl(EIRQErrorGeneral);
+    }
+}
+
+ 
+
+//Send the category request by the category type
+// 
+void IRQIsdsClientImpl::isdsCategoryRequestImpl(
+        IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType, bool& aCache)
+{
+    iCatBannerTag = false;
+    TRAPD( err, aCache = !(iISDSClient->IRIsdsClientIntefaceL((CIRIsdsClient::TIRIsdsclientInterfaceIDs)aIDType)));
+    if (err != KErrNone)
+    {
+        emit operationExceptionImpl(EIRQErrorGeneral);
+    }
+}
+
+bool IRQIsdsClientImpl::isdsIsCategoryCachedImpl(IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType)
+{
+    bool cache = false;
+    TRAP_IGNORE(cache = iISDSClient->IRIsdsIsCategoryCachedL((CIRIsdsClient::TIRIsdsclientInterfaceIDs)aIDType));    
+    return cache;
+}
+
+bool IRQIsdsClientImpl::isdsIsChannelCachedImpl(int aIndex)
+{
+    bool cache = false;
+    TRAP_IGNORE(cache = iISDSClient->IRIsdsIsChannelCachedL(aIndex)); 
+    return cache;
+}
+
+//Send the channels request by the channel index in the specify category
+//
+void IRQIsdsClientImpl::isdsChannelRequestImpl(int aIndex, bool& aCache)
+{
+    iChannelBannerTag = false;
+    TRAPD( err, aCache = !(iISDSClient->IRIsdsClientIntefaceL(aIndex, CIRIsdsClient::ECatagory)));
+    if (err != KErrNone)
+    {
+        emit operationExceptionImpl(EIRQErrorGeneral);
+    }
+}
+
+//issue a listen request to the isds client
+//@param int,bool, the current index of channel, the history tag  
+//
+void IRQIsdsClientImpl::isdsListenRequestImpl(int aCurrentIndex,
+        bool aHistoryBool)
+{
+    if (aHistoryBool)
+    {
+        TRAPD( err, iISDSClient->IRIsdsClientIntefaceL(aCurrentIndex, CIRIsdsClient::EChannels, ETrue));
+        if (err != KErrNone)
+        {
+            emit operationExceptionImpl(EIRQErrorGeneral);
+        }
+    }
+    else
+    {
+         
+        TRAPD( err, iISDSClient->IRIsdsClientIntefaceL(aCurrentIndex, CIRIsdsClient::EChannels));
+        if (err != KErrNone)
+        {
+            emit operationExceptionImpl(EIRQErrorGeneral);
+        }
+    }
+}
+
+//to syncronize presets
+//@param int,QString, the preset id and the last modified tag for the preset   
+//
+int IRQIsdsClientImpl::isdsSyncPresetImpl(int aPresetId,
+        const QString& aIfModifySince)
+{
+    TPtrC16 modifySinceDes(
+            reinterpret_cast<const TUint16*> (aIfModifySince.utf16()));
+    TInt result = 0;
+    TRAP_IGNORE(result = iISDSClient->SyncPresetL(aPresetId,modifySinceDes));     
+    return result;
+}
+
+//Cacel the request sent by the UI.
+//@param None
+//
+void IRQIsdsClientImpl::isdsCancelRequestImpl()
+{
+    TRAPD( err, iISDSClient->IRISDSCancelRequest());
+    if (err != KErrNone)
+    {
+        emit operationExceptionImpl(EIRQErrorGeneral);
+    }
+}
+
+//to see wether category view has a banner.
+//@param None
+//
+bool IRQIsdsClientImpl::isdsIsCategoryBannerImpl()
+{
+    return iCatBannerTag;
+}
+
+//
+//to see wether channel view has a banner.
+//@param None
+bool IRQIsdsClientImpl::isdsIsChannelBannerImpl()
+{
+    return iChannelBannerTag;
+}
+
+ 
+//the api is called from the UI(nowplaying view) to download logo.
+//@param None
+//
+void IRQIsdsClientImpl::isdsLogoDownSendRequestImpl(IRQPreset* aPreset,
+        int aNPVReq, int aXValue, int aYValue)
+{
+    if (NULL == aPreset)
+        return;
+
+    CIRIsdsPreset *cirPreset = NULL;
+    TRAP_IGNORE(cirPreset = CIRIsdsPreset::NewL());
+    IRQUtility::convertIRQPreset2CIRIsdsPreset(*aPreset, *cirPreset);
+    
+    aXValue = aXValue % 1000;
+    aYValue = aYValue % 1000;
+    
+    TRAPD( err, iLogoDownloadEngine->SendRequestL(cirPreset,this, aNPVReq, aXValue, aYValue));//0 0 
+    delete cirPreset;
+    if (err != KErrNone)
+    {
+        emit operationExceptionImpl(EIRQErrorGeneral);
+    }
+}
+
+bool IRQIsdsClientImpl::isdsIsLogoCachedImpl(IRQPreset* aPreset, int aXValue, int aYValue)
+{
+    if( NULL == aPreset )
+        return false;
+    
+    bool cached = false;
+    CIRIsdsPreset *cirPreset = NULL;
+    TRAP_IGNORE(cirPreset = CIRIsdsPreset::NewL());
+    IRQUtility::convertIRQPreset2CIRIsdsPreset(*aPreset, *cirPreset);
+    aXValue = aXValue % 1000;
+    aYValue = aYValue % 1000;
+    
+    TRAP_IGNORE(cached = iLogoDownloadEngine->isLogoCachedL(cirPreset,aXValue, aYValue));
+	  delete cirPreset;
+	  cirPreset = NULL;
+	
+    return cached;
+}
+
+//
+//the api is called to cancel the current transaction
+//@param None
+//
+void IRQIsdsClientImpl::isdsLogoDownCancelTransactionImpl()
+{
+    iLogoDownloadEngine->CancelTransaction();
+}
+
+//
+//To know the status of downloading logo
+bool IRQIsdsClientImpl::isdsLogoDownIsRunningImpl() const
+{
+    return iLogoDownloadEngine->IsRunning();
+}
+
+//takes the url as a parameter and returns the logo data which is in cache
+//this API is called form the search results for to display logo on the view
+//@param QString: the url of the img, int: the status for getting
+//
+void IRQIsdsClientImpl::isdsLogoDownCheckCacheLogoImpl(
+        const QString& aURL, int& aStatus)
+{
+    TInt status = 0;
+    TPtrC16 url(reinterpret_cast<const TUint16*> (aURL.utf16()));
+    TRAP_IGNORE(iLogoDownloadEngine->GetCacheLogoL(url, status));       
+    aStatus = status;
+    
+}
+
+//get the cache logo from the logodown engine. The "send" is the point from a logodown engine
+//@param None
+//
+TDesC8& IRQIsdsClientImpl::isdsLogoDownSendCacheLogoImpl()
+{
+    return iLogoDownloadEngine->SendCacheLogo();
+}
+
+void IRQIsdsClientImpl::isdsPostLogImpl(const QString &aFileName)
+{
+    TPtrC16 fileName(
+                reinterpret_cast<const TUint16*> (aFileName.utf16()));
+    TBuf<256> fileBuf = fileName;
+    TRAP_IGNORE(iISDSClient->IRISDSPostL(fileBuf));     
+}
+
+void IRQIsdsClientImpl::isdsGetIRIDImpl()
+{
+    TRAP_IGNORE(iISDSClient->IRGetIRIDL());
+}
+
+void IRQIsdsClientImpl::isdsGetBrowseBannerImpl(QString& aBannerUrl, QString& aClickThroughUrl)
+{
+    aBannerUrl = iCatBannerUrl;
+    aClickThroughUrl = iCatClickThroughUrl;
+}
+
+void IRQIsdsClientImpl::isdsMultSearchImpl(QString aGenreID, QString aCountryID, QString aLanguageID, QString aSearchText)
+{
+    TPtrC16 genreID(reinterpret_cast<const TUint16*> (aGenreID.utf16()));
+    TPtrC16 countryID(reinterpret_cast<const TUint16*> (aCountryID.utf16()));
+    TPtrC16 languageID(reinterpret_cast<const TUint16*> (aLanguageID.utf16()));
+    TPtrC16 searchText(reinterpret_cast<const TUint16*> (aSearchText.utf16()));
+    TRAP_IGNORE(iISDSClient->IRISDSMultiSearchL(genreID, countryID, languageID, searchText));
+}
+//when we get the category data from low layer, the function is called and
+//we will generate the data pushed to UI, the IRQIsdsClientImpl will not free the 
+//memory.
+//
+void IRQIsdsClientImpl::IsdsCatogoryDataReceivedL(CArrayPtrFlat<
+        CIRBrowseCatagoryItems> & aParsedStructure)
+{
+    iCatBannerTag = false;
+    iCatBannerUrl.clear();
+    iCatClickThroughUrl.clear();
+
+    /* the data is pushed to the UI and irqisds is not care when it's deleted */
+    QList<IRQBrowseCategoryItem *> * pushBrowseCategoryItemList = new QList<
+            IRQBrowseCategoryItem *> ;
+    for (TInt i = 0; i < aParsedStructure.Count(); i++)
+    {
+        if (NULL != aParsedStructure[i]->iCatBannerUrl)
+        {
+            iCatBannerTag = true;
+            if (0 != aParsedStructure[i]->iCatBannerUrl->Length())
+            {
+                iCatBannerUrl = QString::fromUtf16(
+                        aParsedStructure[i]->iCatBannerUrl->Des().Ptr(),
+                        aParsedStructure[i]->iCatBannerUrl->Des().Length());
+            }
+
+            if (NULL != aParsedStructure[i]->iCatClickThroughUrl)
+            {
+                if (0 != aParsedStructure[i]->iCatClickThroughUrl->Length())
+                {
+                    iCatClickThroughUrl
+                            = QString::fromUtf16(
+                                    aParsedStructure[i]->iCatClickThroughUrl->Des().Ptr(),
+                                    aParsedStructure[i]->iCatClickThroughUrl->Des().Length());
+                }
+            }
+        }// end if ( NULL != ) 
+
+        if (NULL != aParsedStructure[i]->iCatName)
+        {
+            IRQBrowseCategoryItem * oneItem = new IRQBrowseCategoryItem();
+            oneItem->catName = QString::fromUtf16(
+                    aParsedStructure[i]->iCatName->Des().Ptr(),
+                    aParsedStructure[i]->iCatName->Des().Length());
+            oneItem->size = aParsedStructure[i]->iSize;
+            pushBrowseCategoryItemList->append(oneItem);
+        }
+    }// end for
+
+    /* now we get the data and we need to signal the ui to stop the 
+     dialog and emit and call the setdata of model*/
+    emit
+    categoryItemsChangedImpl(pushBrowseCategoryItemList);
+
+}
+
+//when we get the channels data from low layer, the function is called and
+//we will generate the data pushed to UI
+//
+void IRQIsdsClientImpl::IsdsChannelDataReceivedL(CArrayPtrFlat<
+        CIRBrowseChannelItems> & aParsedStructure)
+{
+    iChannelBannerTag = false;
+    iChannelBannerUrl.clear();
+    iChannelClickThroughUrl.clear();
+
+    QList<IRQChannelItem *> *pushBrowseChannelItemList = new QList<
+            IRQChannelItem *> ;
+
+    for (int i = 0; i < aParsedStructure.Count(); i++)
+    {
+        if (NULL != aParsedStructure[i]->iBannerUrl)
+        {
+            iChannelBannerTag = true;
+
+            if (0 != aParsedStructure[i]->iBannerUrl->Length())
+            {
+                iChannelBannerUrl = QString::fromUtf16(
+                        aParsedStructure[i]->iBannerUrl->Des().Ptr(),
+                        aParsedStructure[i]->iBannerUrl->Des().Length());
+            }
+
+            if (NULL != aParsedStructure[i]->iClickThroughUrl)
+            {
+                if (0 != aParsedStructure[i]->iClickThroughUrl->Length())
+                {
+                    iChannelClickThroughUrl
+                            = QString::fromUtf16(
+                                    aParsedStructure[i]->iClickThroughUrl->Des().Ptr(),
+                                    aParsedStructure[i]->iClickThroughUrl->Des().Length());
+                }
+            }
+        } //end if aParsedStructure[i]->
+
+        if (NULL != aParsedStructure[i]->iChannelName)
+        {
+            IRQChannelItem * oneChannelItem = new IRQChannelItem();
+            oneChannelItem->channelName = QString::fromUtf16(
+                    aParsedStructure[i]->iChannelName->Des().Ptr(),
+                    aParsedStructure[i]->iChannelName->Des().Length());
+            oneChannelItem->shortDescription = QString::fromUtf16(
+                    aParsedStructure[i]->iShortDescription->Des().Ptr(),
+                    aParsedStructure[i]->iShortDescription->Des().Length());
+
+            if (0 != aParsedStructure[i]->iImgUrl.Length())
+            {
+
+                oneChannelItem->imageURL = QString::fromUtf16(
+                        aParsedStructure[i]->iImgUrl.Ptr(),
+                        aParsedStructure[i]->iImgUrl.Length());;
+            }
+            else
+                oneChannelItem->imageURL = "";
+
+            pushBrowseChannelItemList->append(oneChannelItem);
+        }
+    }
+
+    /* after we get data, we push it to the UI to show*/
+    emit
+    channelItemsChangedImpl(pushBrowseChannelItemList);
+    
+}
+
+//when we get the presets data from low layer, the function is called and
+//we will generate the data pushed to UI. 
+//
+void IRQIsdsClientImpl::IsdsPresetDataReceivedL(
+        CArrayPtrFlat<CIRIsdsPreset> & aParsedStructure)
+{
+    CIRIsdsPreset* preset = aParsedStructure[0];
+    IRQPreset* qPreset = new IRQPreset();
+    /* we need convert the CIR to QT */
+    IRQUtility::convertCIRIsdsPreset2IRQPrest(*preset, *qPreset);
+    qPreset->type = IRQPreset::EIsds;
+    emit
+    presetResponseImpl(qPreset);
+    
+}
+
+//when we find that the preset to be syc is deleted from isds server, the function 
+//will be called to notify the UI. DISCUSSED FURTHER
+//
+void IRQIsdsClientImpl::IsdsPresetRemovedL(TInt aId)
+{
+    iFavPresets->MakePresetUserDefinedL(aId, 0);
+    emit
+    syncPresetResultImpl(EIRQIsdsSycPresetRemoved, NULL);
+}
+
+//when we find that the preset to be syc is changed from isds server, the function 
+//will be called to notify the UI.
+//
+void IRQIsdsClientImpl::IsdsPresetChangedL(CIRIsdsPreset& aPreset)
+{
+    iFavPresets->ReplacePresetL(aPreset);
+    IRQPreset* qPreset = new IRQPreset();
+    IRQUtility::convertCIRIsdsPreset2IRQPrest(aPreset, *qPreset);
+    qPreset->type = IRQPreset::EIsds;
+    emit syncPresetResultImpl(EIRQIsdsSycPresetChanged, qPreset);
+}
+
+//when we find that the preset to be syc is changed from isds server, the function 
+//will be called to notify the UI.
+//
+void IRQIsdsClientImpl::IsdsPresetNoChangeL()
+{
+    emit syncPresetResultImpl(EIRQIsdsSycPresetNoChange, NULL);
+
+}
+
+//called back when a preset's logo has downloaded
+//@param CIRIsdsPreset*, preset with downloaded logo
+//
+void IRQIsdsClientImpl::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
+{
+    if (NULL == aPreset)
+        return;
+
+    IRQPreset * irqPreset = new IRQPreset();
+    IRQUtility::convertCIRIsdsPreset2IRQPrest(*aPreset, *irqPreset);
+
+    emit presetLogoDownloadedImpl(irqPreset);
+}
+
+//called back when a preset's logo has not downloaded
+//@param CIRIsdsPreset*, preset with no logo data
+//
+void IRQIsdsClientImpl::PresetLogoDownloadError(CIRIsdsPreset* aPreset)
+{
+    if (NULL == aPreset)
+        return;
+
+    emit presetLogoDownloadErrorImpl();
+}
+
+//receive the irid from isds server, not implementated
+//
+void IRQIsdsClientImpl::IsdsIRIDRecieved(const TDesC& aIRID)
+{
+    //nothing now
+    QString irid = QString::fromUtf16(aIRID.Ptr(),aIRID.Length());
+    emit iridReceivedImpl(irid);     
+}
+
+ 
+
+
+//
+//receive the ota info from isds server, not implementated
+//
+void IRQIsdsClientImpl::IsdsOtaInfoRecieved(CIROTAUpdate &aOtaData)
+{
+    //nothing now
+    Q_UNUSED(aOtaData);    
+}
+
+bool IRQIsdsClientImpl::isdsIsConstructSucceed() const
+{
+    return iISDSClient != NULL;
+}
+
+
+#ifdef USER_DEFINED_ISDSURL
+void getIsdsUrlFromConfiguration(QString & aUrl)
+{
+    QFile file("C:\\data\\QTIRConfigure.txt");
+    if (file.open(QIODevice::ReadOnly)) 
+    {
+        QTextStream stream( &file );
+        QString line;
+        QStringList parameter;
+        while (!stream.atEnd())
+        {
+            line = stream.readLine();
+            parameter = line.split("=");
+            if (parameter.count() == 2)
+            {
+                if (parameter.first() == "userDefinedIsdsUrl")
+                {
+                    aUrl = parameter.last();
+                    break;
+                }
+            }
+        }
+        file.close();
+    }
+}
+#endif  // USER_DEFINED_ISDSURL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqisdsclient/src/irqisdsclient.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,278 @@
+/*
+* Copyright (c) 2006-2007 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:  a new wrapper class in QT 
+ *
+*/
+
+#include "irqisdsclientimpl.h"   
+ 
+//Static function
+//to get an instance of the IRQIsdsClient
+//@return IRQIsdsClient *
+EXPORT_C IRQIsdsClient *IRQIsdsClient::openInstance(IRQFavoritesDB *aFavPresets)
+{
+    if (NULL == aFavPresets)
+        return NULL;
+
+    IRQIsdsClient* irqisdsclient =
+            reinterpret_cast<IRQIsdsClient*> (Dll::Tls());
+
+    if (NULL == irqisdsclient)
+    {
+        irqisdsclient = new IRQIsdsClient(aFavPresets);
+        int result = 0;
+        result = Dll::SetTls(irqisdsclient); 
+        
+        if( KErrNone != result )
+        {
+            delete irqisdsclient;
+            return NULL;
+        }
+        
+        irqisdsclient->iSingletonInstances = 1;
+    }
+    else
+        irqisdsclient->iSingletonInstances++;
+
+    return irqisdsclient;
+}
+
+//
+//close the instance.
+//@return void
+EXPORT_C void IRQIsdsClient::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+
+    return;
+}
+
+//Issue a search request to the isds server
+//@param QString, the requested search string
+//
+EXPORT_C void IRQIsdsClient::isdsSearchRequest(const QString& aIsdsSearchString)
+{
+    iImpl->isdsSearchRequestImpl(aIsdsSearchString);     
+}
+
+//Send the category request by the category type
+// 
+EXPORT_C void IRQIsdsClient::isdsCategoryRequest(
+        IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType, bool& aCache)
+{ 
+    iImpl->isdsCategoryRequestImpl(aIDType, aCache);
+}
+
+EXPORT_C bool IRQIsdsClient::isdsIsCategoryCached(IRQIsdsClient::IRQIsdsClientInterfaceIDs aIDType)
+{
+    return iImpl->isdsIsCategoryCachedImpl(aIDType);
+}
+
+EXPORT_C bool IRQIsdsClient::isdsIsChannelCached(int aIndex)
+{
+    return iImpl->isdsIsChannelCachedImpl(aIndex);
+}
+//Send the channels request by the channel index in the specify category
+//
+EXPORT_C void IRQIsdsClient::isdsChannelRequest(int aIndex, bool& aCache)
+{
+    
+    if( 0 > aIndex )
+        return;
+    
+    /* if the isds has the banner, the index can't be 0 , or it will crash*/
+    if( isdsIsCategoryBanner() && 0 == aIndex )
+        return;
+    
+    iImpl->isdsChannelRequestImpl(aIndex, aCache);
+}
+
+//issue a listen request to the isds client
+//@param int,bool, the current index of channel, the history tag  
+//
+EXPORT_C void IRQIsdsClient::isdsListenRequest(int aCurrentIndex,
+        bool aHistoryBool)
+{ 
+    if (0 > aCurrentIndex)
+        return;
+
+    /* if the isds has the banner, the index can't be 0 , or it will crash*/
+    if (isdsIsChannelBanner() && 0 == aCurrentIndex)
+        return;
+    
+    iImpl->isdsListenRequestImpl(aCurrentIndex,aHistoryBool); 
+}
+
+//to syncronize presets
+//@param int,QString, the preset id and the last modified tag for the preset   
+//
+EXPORT_C int IRQIsdsClient::isdsSyncPreset(int aPresetId,
+        const QString& aIfModifySince)
+{     
+    TInt result = 0;
+    result = iImpl->isdsSyncPresetImpl(aPresetId, aIfModifySince);
+    return result;
+} 
+
+//Cacel the request sent by the UI.
+//@param None
+//
+EXPORT_C void IRQIsdsClient::isdsCancelRequest()
+{
+    iImpl->isdsCancelRequestImpl();  
+}
+
+ 
+
+//to see wether category view has a banner.
+//@param None
+//
+EXPORT_C bool IRQIsdsClient::isdsIsCategoryBanner()
+{
+    return iImpl->isdsIsCategoryBannerImpl();
+}
+
+//
+//to see wether channel view has a banner.
+//@param None
+EXPORT_C bool IRQIsdsClient::isdsIsChannelBanner()
+{
+    return iImpl->isdsIsChannelBannerImpl();
+}
+
+//the api is called from the UI(nowplaying view) to download logo.
+//@param None
+//
+EXPORT_C void IRQIsdsClient::isdsLogoDownSendRequest(IRQPreset* aPreset,
+        int aNPVReq, int aXValue, int aYValue)
+{ 
+    iImpl->isdsLogoDownSendRequestImpl(aPreset, aNPVReq, aXValue, aYValue);
+}
+
+EXPORT_C bool IRQIsdsClient::isdsIsLogoCached(IRQPreset* aPreset, int aXValue, int aYValue)
+{
+    return iImpl->isdsIsLogoCachedImpl(aPreset, aXValue, aYValue);
+}
+//
+//the api is called to cancel the current transaction
+//@param None
+//
+EXPORT_C void IRQIsdsClient::isdsLogoDownCancelTransaction()
+{
+    iImpl->isdsLogoDownCancelTransactionImpl();
+}
+
+//
+//To know the status of downloading logo
+EXPORT_C bool IRQIsdsClient::isdsLogoDownIsRunning() const
+{
+    return iImpl->isdsLogoDownIsRunningImpl();
+}
+
+//takes the url as a parameter and returns the logo data which is in cache
+//this API is called form the search results for to display logo on the view
+//@param QString: the url of the img, int: the status for getting
+//
+EXPORT_C void IRQIsdsClient::isdsLogoDownCheckCacheLogo(const QString& aURL,
+        int& aStatus)
+{ 
+    iImpl->isdsLogoDownCheckCacheLogoImpl(aURL, aStatus);
+}
+
+//get the cache logo from the logodown engine. The "send" is the point from a logodown engine
+//@param None
+//
+EXPORT_C TDesC8& IRQIsdsClient::isdsLogoDownSendCacheLogo()
+{
+    return iImpl->isdsLogoDownSendCacheLogoImpl();
+}
+
+EXPORT_C void IRQIsdsClient::isdsPostLog(const QString& aFileName)
+{
+    iImpl->isdsPostLogImpl(aFileName);
+}
+
+EXPORT_C void IRQIsdsClient::isdsGetIRID()
+{
+    iImpl->isdsGetIRIDImpl();
+}
+
+EXPORT_C void IRQIsdsClient::isdsGetBrowseBanner(QString& aBannerUrl, QString& aClickThroughUrl)
+{
+    iImpl->isdsGetBrowseBannerImpl(aBannerUrl, aClickThroughUrl);
+}
+
+EXPORT_C void IRQIsdsClient::isdsMultSearch(QString aGenreID, QString aCountryID, QString aLanguageID, QString aSearchText)
+{
+    iImpl->isdsMultSearchImpl(aGenreID, aCountryID, aLanguageID, aSearchText);
+}
+
+EXPORT_C bool IRQIsdsClient::isdsIsConstructSucceed() const
+{
+    return iImpl->isdsIsConstructSucceed();
+}
+
+/************************ private functions **************************/
+//the c++ default destruction function
+// private
+IRQIsdsClient::~IRQIsdsClient()
+{    
+    delete iImpl;
+}
+
+
+IRQIsdsClient::IRQIsdsClient(IRQFavoritesDB *aFavPresets)
+{    
+    iImpl = new IRQIsdsClientImpl(aFavPresets); 
+    Q_ASSERT(iImpl);
+    
+    connect(iImpl, SIGNAL(categoryItemsChangedImpl(QList<IRQBrowseCategoryItem *> *)),
+                this, SIGNAL(categoryItemsChanged(QList<IRQBrowseCategoryItem *> *)));
+    
+    connect(iImpl, SIGNAL(channelItemsChangedImpl(QList<IRQChannelItem *> *)),
+                    this, SIGNAL(channelItemsChanged(QList<IRQChannelItem *> *)));
+    
+    connect(iImpl, SIGNAL(operationExceptionImpl(IRQError)),
+            this, SIGNAL(operationException(IRQError)));
+    
+    
+    connect(iImpl, SIGNAL(presetResponseImpl(IRQPreset *)),
+            this, SIGNAL(presetResponse(IRQPreset *)));
+   
+    
+    connect(iImpl, SIGNAL(syncPresetResultImpl(IRQSycPresetStatus, IRQPreset*)),
+                this, SIGNAL(syncPresetResult(IRQSycPresetStatus,  IRQPreset*)));
+    
+    
+    connect(iImpl, SIGNAL(presetLogoDownloadedImpl(IRQPreset*)),
+                    this, SIGNAL(presetLogoDownloaded(IRQPreset*)));
+   
+    
+    connect(iImpl, SIGNAL(presetLogoDownloadErrorImpl()),
+                        this, SIGNAL(presetLogoDownloadError()));     
+   
+    
+    connect(iImpl, SIGNAL(iridReceivedImpl(QString)), 
+                        this, SIGNAL(iridReceived(QString)));
+    
+}
+
+ 
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqlogger/inc/irqlogger.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* 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 _IRQLOGGER_H_
+#define _IRQLOGGER_H_
+
+#include <QDebug>
+#include <QString>
+#include "irqloggerexport.h"
+
+static const char* KLogMarker = "[QtInternetRadio]";
+static const char* KTraceOutputFile = "c:/logs/internetradio/iruilog.txt";
+#define FILTER_BY_LOGMARKER true
+
+#ifdef LOGGING_ENABLED
+
+#ifdef COMBINE_WITH_ENGINE_LOGGER
+    #define WRITELOG(msg) \
+            { \
+                QString tmpStr(msg); \
+                SymbianLogger::writeLog(tmpStr); \
+            }  
+    #define INSTALL_MESSAGE_HANDLER
+#else // COMBINE_WITH_ENGINE_LOGGER
+
+    #define WRITELOG(msg) qDebug()<<KLogMarker<<msg
+    
+    #ifdef TRACE_TO_FILE
+        #define INSTALL_MESSAGE_HANDLER FileLogger __fileLogger(QString(KTraceOutputFile), FILTER_BY_LOGMARKER)
+    #else // TRACE_TO_FILE
+        #define INSTALL_MESSAGE_HANDLER
+    #endif // TRACE_TO_FILE
+    
+#endif // COMBINE_WITH_ENGINE_LOGGER
+
+// Helper macro to get a const char* out of a QString so that it can be logged. Can be used with LOG_FORMAT()
+#define STRING2CHAR(qstring) qstring.toAscii().constData()
+
+// Macro that simply logs a string
+// Example:
+// LOG( "This is a test" );
+#define LOG(string) WRITELOG( string )
+
+
+// Macro that logs a string with multiple parameters
+// Examples:
+// LOG_FORMAT( "This is an integer %d, and this is a float with two digits %.2f", 42, 3.14 );
+// LOG_FORMAT( "This is a QString %s", STRING2CHAR(someQString) );
+#define LOG_FORMAT(fmt,args...) \
+    { \
+        QString tmp; \
+        WRITELOG( tmp.sprintf(fmt,args) ); \
+    }
+
+// Macro that logs function enter, exit and exception
+// Example (Simply put it in the beginning of a function):
+// LOG_METHOD;
+// Output:
+// --> SomeFunction(int,const char*)
+// <-- SomeFunction(int,const char*)
+// <-- SomeFunction(int,const char*): Exception raised!
+#define LOG_METHOD MethodLogger ___methodLogger( __PRETTY_FUNCTION__ )
+
+// Logs function enter but does not log exit or leave. This is meant to be lighter than LOG_METHOD macro
+#define LOG_METHOD_ENTER LOG_FORMAT( "<--> %s", __PRETTY_FUNCTION__ )
+
+
+// Assert macro for logging. If the condition is false, the expression is performed
+// Example:
+// LOG_ASSERT( thisMustBeTrue, LOG_FORMAT( "OMG! That was not true: %d", thisMustBeTrue ) );
+#define LOG_ASSERT(cond,expr) \
+    { \
+        if (!cond) { expr; } \
+    }
+
+// Macro to log slot function caller by its class name.
+#define LOG_SLOT_CALLER \
+    { \
+        QObject* caller = sender(); \
+        if ( caller ) \
+        { \
+            LOG_FORMAT( "SLOT %s called by %s. Objectname: %s", __PRETTY_FUNCTION__, \
+                        caller->metaObject()->className(), STRING2CHAR( caller->objectName() ) ); \
+        } else { \
+            LOG_FORMAT( "SLOT %s called as regular function. ", __PRETTY_FUNCTION__ ); \
+        } \
+    }
+
+#else // LOGGING_ENABLED
+    #define LOG(string)
+    #define STRING2CHAR(qstring)
+    #define LOG_FORMAT(fmt,args...)
+    #define LOG_METHOD
+    #define LOG_METHOD_ENTER
+    #define LOG_ASSERT(cond,expr)
+    #define LOG_SLOT_CALLER
+    #define INSTALL_MESSAGE_HANDLER
+#endif // LOGGING_ENABLED
+
+
+
+
+// Class declaration
+class IRQLOGGER_DLL_EXPORT SymbianLogger
+{
+public:
+    static void writeLog( const QString& aMsg );
+};
+
+// Class declaration
+class IRQLOGGER_DLL_EXPORT MethodLogger
+{
+public:
+    MethodLogger( const char* aFunction );
+    ~MethodLogger();
+
+private:
+    const char* iFunction;
+};
+
+// Class declaration
+class IRQLOGGER_DLL_EXPORT FileLogger
+{
+public:
+    FileLogger(const QString& aFileName, bool aFilterByMarker);
+    ~FileLogger();
+private:
+    void installMessageHandler( const QString& aFileName, bool aFilterByMarker );
+    void uninstallMessageHandler();    
+    static void handleMessage( QtMsgType aType, const char* aMsg );
+};
+
+// ============================================================================
+// SIGNAL/SLOT CONNECTION CHECKER
+// ============================================================================
+IRQLOGGER_DLL_EXPORT bool connectAndTest( const QObject* aSender, const char* aSignal,
+                            const QObject* aReceiver, const char* aMember,
+                            Qt::ConnectionType aType = Qt::AutoConnection );
+
+IRQLOGGER_DLL_EXPORT bool connectAndAssert( const QObject* aSender, const char* aSignal,
+                            const QObject* aReceiver, const char* aMember,
+                            Qt::ConnectionType aType = Qt::AutoConnection );
+
+#endif // _IRQLOGGER_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqlogger/inc/irqloggerexport.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* 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 IRQLOGGER_EXPORT_H_
+#define IRQLOGGER_EXPORT_H_
+
+#include <QtGlobal>
+
+#ifdef BUILD_IRQLOGGER_DLL
+    #define IRQLOGGER_DLL_EXPORT Q_DECL_EXPORT
+#else
+    #define IRQLOGGER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // IRQLOGGER_EXPORT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqlogger/irqlogger.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+#
+
+include(../common.pri)
+
+TEMPLATE    =  lib
+TARGET      =  irqlogger
+CONFIG      += dll
+DEFINES     += BUILD_IRQLOGGER_DLL
+
+
+
+MOC_DIR = moc
+DEPENDPATH = src
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+INCLUDEPATH += inc \
+               ../../internetradio2.0/include
+
+LIBS += -lflogger
+        
+symbian{
+  TARGET.UID3 = 0xEc6eac02
+  TARGET.EPOCALLOWDLLDATA = 1
+  TARGET.CAPABILITY += CAP_GENERAL_DLL
+}
+       
+#header files list
+HEADERS += inc/irqlogger.h \
+           inc/irqloggerexport.h
+                       
+
+#source files list
+SOURCES += irqlogger.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqlogger/src/irqlogger.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,186 @@
+/*
+* 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 <QFile>
+#include <QTextStream>
+#include <QDateTime>
+#include "irqlogger.h"
+
+// ============================================================================
+// SymbianLogger Defenition
+// ============================================================================
+#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER
+
+#include "irdebug.h"
+
+void SymbianLogger::writeLog( const QString& aMsg )
+{
+    TPtrC tmpDesc(reinterpret_cast<const TUint16*>(aMsg.utf16()), aMsg.length());
+    IRLOG_DEBUG_DESC( tmpDesc );
+}
+
+#else // LOGGING_ENABLED && COMBINE_WITH_ENGINE_LOGGER
+
+void SymbianLogger::writeLog( const QString& aMsg )
+{
+    Q_UNUSED(aMsg);
+}
+
+#endif // LOGGING_ENABLED && COMBINE_WITH_ENGINE_LOGGER
+
+// ============================================================================
+// MethodLogger Defenition
+// ============================================================================
+#ifdef LOGGING_ENABLED
+
+const char* KLogEnter = "--> %s";
+const char* KLogExit = "<-- %s";
+const char* KLogExitRet = "<-- %s, Returning %s";
+const char* KLogExitException = "<-- %s, Exception raised";
+
+MethodLogger::MethodLogger( const char* aFunction ) :
+    iFunction( aFunction )
+{
+    QString msg;
+    msg.sprintf( KLogEnter, iFunction );
+    WRITELOG( msg );
+}
+
+MethodLogger::~MethodLogger()
+{
+    QString msg;
+    if ( std::uncaught_exception() )
+    {
+        msg.sprintf( KLogExitException, iFunction );
+        WRITELOG( msg );
+    }
+    else
+    {
+        msg.sprintf( KLogExit, iFunction );
+        WRITELOG( msg );
+    }
+}
+
+#else // LOGGING_ENABLED
+
+MethodLogger::MethodLogger( const char* aFunction ) :
+    iFunction( aFunction )
+{
+}
+
+MethodLogger::~MethodLogger()
+{
+}
+
+#endif // LOGGING_ENABLED
+
+
+// ============================================================================
+// FileLogger Defenition
+// ============================================================================
+QFile gDebugFile;
+bool  gFilterByLogMarker = false;
+
+#if defined LOGGING_ENABLED && defined TRACE_TO_FILE && !defined COMBINE_WITH_ENGINE_LOGGER
+
+FileLogger::FileLogger(const QString& aFileName, bool aFilterByMarker)
+{
+    installMessageHandler( aFileName, aFilterByMarker );
+}
+
+FileLogger::~FileLogger()
+{
+    uninstallMessageHandler();
+}
+
+#else // LOGGING_ENABLED && TRACE_TO_FILE && !COMBINE_WITH_ENGINE_LOGGER
+
+FileLogger::FileLogger(const QString& aFileName, bool aFilterByMarker)
+{
+    Q_UNUSED(aFileName);
+    Q_UNUSED(aFilterByMarker);
+}
+
+FileLogger::~FileLogger()
+{
+}
+
+#endif // LOGGING_ENABLED && TRACE_TO_FILE && !COMBINE_WITH_ENGINE_LOGGER
+
+void FileLogger::installMessageHandler( const QString& aFileName, bool aFilterByMarker )
+{
+    gDebugFile.setFileName( aFileName );
+    gFilterByLogMarker = aFilterByMarker;
+    
+    gDebugFile.open( QIODevice::Text | QIODevice::WriteOnly );
+
+    if ( gDebugFile.isOpen() )
+    {
+        qInstallMsgHandler( FileLogger::handleMessage );
+    }
+}
+
+void FileLogger::uninstallMessageHandler()
+{
+    if ( gDebugFile.isOpen() )
+    {
+        qInstallMsgHandler( 0 );
+        gDebugFile.close();
+    }
+}
+
+void FileLogger::handleMessage( QtMsgType aType, const char* aMsg )
+{
+    if ( aType == QtDebugMsg )
+    {
+        QString message( aMsg );
+        if ( gFilterByLogMarker && message.contains( QString( KLogMarker ) ) )
+        {
+            QTextStream debugStream( &gDebugFile );
+            QDateTime dateTime( QDateTime::currentDateTime() );            
+            debugStream<<dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz")<<" : "<<message<<endl;
+        }
+    }
+}
+// ============================================================================
+// SIGNAL/SLOT CONNECTION CHECKER
+// ============================================================================
+bool connectAndTest( const QObject* aSender, const char* aSignal,
+                            const QObject* aReceiver, const char* aMember,
+                            Qt::ConnectionType aType )
+{
+    bool connected = QObject::connect( aSender, aSignal, aReceiver, aMember, aType );
+    if ( !connected )
+    {
+        LOG( "Failed to make a signal-slot connection!" );
+        LOG_FORMAT( "sender: %s", aSender->metaObject()->className() );
+        LOG_FORMAT( "signal: %s", aSignal );
+        LOG_FORMAT( "receiver: %s", aReceiver->metaObject()->className() );
+        LOG_FORMAT( "slot: %s", aMember );
+    }
+    return connected;
+}
+
+bool connectAndAssert( const QObject* aSender, const char* aSignal,
+                            const QObject* aReceiver, const char* aMember,
+                            Qt::ConnectionType aType )
+{
+    bool connected = connectAndTest( aSender, aSignal, aReceiver, aMember, aType );
+    Q_ASSERT( connected );
+    return connected;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/inc/irqmediaplayer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* 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 IRQMEDIAPLAYER_H_
+#define IRQMEDIAPLAYER_H_
+
+#include <QObject>
+#include "irqenums.h"
+
+class IRQPlayerAdapterInterface;
+class IRQMetaData;
+class CStereoWidening;
+
+/**
+ * This class provides the interface to IR Media Player component
+ */
+
+class IRQMediaPlayer : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    /**
+     *  Constructor
+     */
+    IMPORT_C IRQMediaPlayer();
+
+    /**
+     *  Destructor
+     */
+    ~IRQMediaPlayer();
+
+    /**
+     *  Returns the current volume of playback, it's a percentage
+     *  @return int
+     */
+    IMPORT_C int  getVolume();
+
+public slots:
+
+    /**
+     *  Plays a radio station
+     */
+    IMPORT_C void playStation(const QString &aUrl, int aApId);
+
+    /**
+     *  Stops playback
+     */
+    IMPORT_C void stop();
+
+    /**
+     *  Sets the volume to player, it's a percentage
+     */
+    IMPORT_C void setVolume(int aVolume);
+
+    /**
+     *  Turns on the stereo effect
+     */
+    IMPORT_C void enableStereoEffect();
+
+    /**
+     *  Turns off the stereo effect
+     */
+    IMPORT_C void disableStereoEffect();
+
+signals:
+
+    /**
+     *  Notifies the successful connection with a radio station
+     */
+    void connectionEstablished(int aBitrate);
+
+    /**
+     *  Notifies the error
+     */
+    void errorOccured(IRQError aError);
+
+    /**
+     *  Notifies the buffering status
+     */
+    void percentageBuffered(int aPercentage);
+
+    /**
+     *  Notifies the meta data
+     */
+    void metaDataReceived(IRQMetaData& aIRMetaData);
+
+    /**
+     *  Gets the preset volume, it's a percentage
+     */
+    void volumeExpected(int& aVolume);
+
+private:
+    /**
+     *  Turns on the stereo effect
+     */
+    void enableStereoEffectL();
+
+private:
+
+    /**
+     *  Player adpater interface
+     */
+    IRQPlayerAdapterInterface* iPlayer;
+
+    /**
+     *  Used for handling Stereo Mode
+     */
+    CStereoWidening* iStereoEffect;
+};
+
+#endif /* IRQMEDIAPLAYER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/inc/irqmetadata.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,151 @@
+/*
+* 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 IRQMETADATA_H_
+#define IRQMETADATA_H_
+
+#include <QString>
+
+/**
+ * Station meta data information wrapper.
+ *
+ * Supports all ICY protocol specified meta data information.
+ * Including station URL, station name, artist - song name and bitrate.
+ */
+
+class IRQMetaData
+{
+public:
+    inline IRQMetaData();
+    inline IRQMetaData(const IRQMetaData& aMetaData);
+    inline ~IRQMetaData();
+
+    /**
+     * Copies values from the supplied meta data object.
+     *
+     * Resulting object is identical to the supplied one after the call
+     * has been successfully completed.
+     *
+     * @param   aMetaData   Meta data to copy information from.
+     */
+    inline void setMetaData(const IRQMetaData& aMetaData);
+
+    /**
+     * Clears all data in class.
+     */
+    inline void clear();
+
+    /**
+     * Sets the stream Url.
+     *
+     * @param   aUrl     The stream Url.
+     */
+    inline void setStreamUrl(const QString& aUrl);
+
+    /**
+     * Sets the artist and song name.
+     *
+     * @param   aArtistSongName     The artist and song name to set.
+     */
+    inline void setArtistSongName(const QString& aArtistSongName);
+
+    /**
+     * Sets the artist name.
+     *
+     * @param   aArtistName     The artist name to set.
+     */
+    inline void setArtistName(const QString& aArtistName);
+
+    /**
+     * Sets the song name.
+     *
+     * @param   aSongName     The song name to set.
+     */
+    inline void setSongName(const QString& aSongName);
+
+    /**
+     * Sets the audio bitrate.
+     *
+     * @param   aBitrate     The bitrate to set.
+     */
+    inline void setBitrate(const int& aBitrate);
+
+    /**
+     * Returns the stream Url.
+     *
+     * @return  The stream Url.
+     */
+    inline const QString& getStreamUrl() const;
+
+    /**
+     * Returns the artist and song name.
+     *
+     * @return  The artist and song name.
+     */
+    inline const QString& getArtistSongName() const;
+
+    /**
+     * Returns the artist name.
+     *
+     * @return  The artist name.
+     */
+    inline const QString& getArtistName() const;
+
+    /**
+     * Returns the song name.
+     *
+     * @return  The song name.
+     */
+    inline const QString& getSongName() const;
+
+    /**
+     * Returns the bitrate.
+     *
+     * @return  The bitrate.
+     */
+    inline const int& getBitrate() const;
+
+    /**
+     * Equality comparison operator.
+     *
+     * Compares two meta data objects and returns whether or not they are identical.
+     *
+     * @param   aMetaData   Meta data to be used for comparison.
+     * @return  <code>True</code> if the objects are identical, <code>False</code> otherwise.
+     */
+    inline bool operator==(const IRQMetaData& aMetaData) const;
+
+    /**
+     * Inequality comparison operator.
+     *
+     * Compares two meta data objects and returns whether or not they are not identical.
+     *
+     * @param   aMetaData   Meta data to be used for comparison.
+     * @return  <code>True</code> if the objects are not identical, <code>False</code> otherwise.
+     */
+    inline bool operator!=(const IRQMetaData& aMetaData) const;
+
+private:
+    QString iUrl;
+    QString iArtistSongName;
+    QString iArtistName;
+    QString iSongName;
+    int iBitrate;
+};
+
+#include "irqmetadata.inl"
+
+#endif /* IRQMETADATA_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/inc/irqmetadata.inl	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,214 @@
+/*
+* 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 information wrapper
+*
+*/
+/*
+* ============================================================================
+*  Name        : IRQMetaData.inl
+*  Part of     : Internet Radio / MediaPlayer
+*  Description : Meta data information wrapper
+*  Version     :
+*/
+
+#include <QStringList>
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+inline IRQMetaData::IRQMetaData() :
+    iBitrate(0)
+{
+}
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+inline IRQMetaData::IRQMetaData(const IRQMetaData& aMetaData)
+{
+    setMetaData(aMetaData);
+}
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+inline IRQMetaData::~IRQMetaData()
+{
+}
+
+// ---------------------------------------------------------------------------
+// Copies values from the supplied meta data object.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::setMetaData(const IRQMetaData& aMetaData)
+{
+    setStreamUrl(aMetaData.iUrl);
+    setArtistSongName(aMetaData.iArtistSongName);
+    setBitrate(aMetaData.iBitrate);
+}
+
+// ---------------------------------------------------------------------------
+// Clears all the data in class.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::clear()
+{
+    iUrl.clear();
+    iArtistSongName.clear();
+    iArtistName.clear();
+    iSongName.clear();
+    iBitrate = 0;
+}
+
+// ---------------------------------------------------------------------------
+// Sets the stream Url.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::setStreamUrl(const QString& aUrl)
+{
+    iUrl = aUrl;
+}
+
+// ---------------------------------------------------------------------------
+// Sets the artist and song name.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::setArtistSongName(const QString& aArtistSongName)
+{
+    iArtistSongName = aArtistSongName;
+    QStringList nameList = iArtistSongName.split(" - ");
+    
+    if (nameList.count() == 1)
+    {
+        // if there's no " - " found, we think there's only a song name
+        iSongName = aArtistSongName;
+    }
+    else  // either artist and song name exist, or they are all empty
+    {
+        if (false == nameList.isEmpty())
+        {
+            iArtistName = nameList.first();
+            nameList.removeFirst();
+        }
+    
+        if (false == nameList.isEmpty())
+        {
+            iSongName = nameList.join(" - ");
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// Sets the artist name.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::setArtistName(const QString& aArtistName)
+{
+    iArtistName = aArtistName;
+}
+
+// ---------------------------------------------------------------------------
+// Sets the song name.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::setSongName(const QString& aSongName)
+{
+    iSongName = aSongName;
+}
+
+// ---------------------------------------------------------------------------
+// Sets the audio bitrate.
+// ---------------------------------------------------------------------------
+//
+inline void IRQMetaData::setBitrate(const int& aBitrate)
+{
+    iBitrate = aBitrate;
+}
+
+// ---------------------------------------------------------------------------
+// Returns the stream Url.
+// ---------------------------------------------------------------------------
+//
+inline const QString& IRQMetaData::getStreamUrl() const
+{
+    return iUrl;
+}
+
+// ---------------------------------------------------------------------------
+// Returns the artist and song name.
+// ---------------------------------------------------------------------------
+//
+inline const QString& IRQMetaData::getArtistSongName() const
+{
+    return iArtistSongName;
+}
+
+// ---------------------------------------------------------------------------
+// Returns the artist name.
+// ---------------------------------------------------------------------------
+//
+inline const QString& IRQMetaData::getArtistName() const
+{
+    return iArtistName;
+}
+
+// ---------------------------------------------------------------------------
+// Returns the song name.
+// ---------------------------------------------------------------------------
+//
+inline const QString& IRQMetaData::getSongName() const
+{
+    return iSongName;
+}
+
+// ---------------------------------------------------------------------------
+// Returns the audio bitrate.
+// ---------------------------------------------------------------------------
+//
+inline const int& IRQMetaData::getBitrate() const
+{
+    return iBitrate;
+}
+
+// ---------------------------------------------------------------------------
+// Equality comparison operator.
+// ---------------------------------------------------------------------------
+//
+bool IRQMetaData::operator==(const IRQMetaData& aMetaData) const
+{
+    bool ret = false;
+
+    if (iUrl == aMetaData.iUrl
+        && iArtistSongName == aMetaData.iArtistSongName
+        && iArtistName == aMetaData.iArtistName
+        && iSongName == aMetaData.iSongName
+        && iBitrate == aMetaData.iBitrate)
+    {
+        ret = true;
+    }
+
+    return ret;
+}
+
+// ---------------------------------------------------------------------------
+// Inequality comparison operator.
+// ---------------------------------------------------------------------------
+//
+bool IRQMetaData::operator!=(const IRQMetaData& aMetaData) const
+{
+    return !(*this == aMetaData);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/inc/irqmmfadapter.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* 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 IRQMMFADAPTER_H_
+#define IRQMMFADAPTER_H_
+
+#include <videoplayer2.h>
+#include <MMFMetadataEventConfigConstants.h>
+#include "irqplayeradapterinterface.h"
+
+class IRQMetaData;
+
+/**
+ * This class wraps the MMF interface CVideoPlayerUtility
+ */
+class IRQMMFAdapter : public IRQPlayerAdapterInterface,
+                      public MVideoPlayerUtilityObserver,
+                      public MVideoLoadingObserver
+{
+    Q_OBJECT
+
+public:
+    IRQMMFAdapter();
+    ~IRQMMFAdapter();
+
+    // IRQPlayerAdapterInterface methods
+    void  playStation(const QString &aUrl, int aApId); // Play specific url via certain access point id
+    void  stop();                                      // Stop Playback
+    void  setVolume(int aVolume);                      // Set volume to player
+    int   getVolume();                                 // Get current volume from player
+    void* getPlayerInstance();                         // Get audio player instance for stereo effect
+
+    // Callback functions, MVideoPlayerUtilityObserver methods
+    void MvpuoOpenComplete(TInt aError);                  // Opening url completed
+    void MvpuoPlayComplete(TInt aError);                  // Playback completed, never called
+    void MvpuoEvent(const TMMFEvent& aEvent);             // Events from player
+    void MvpuoPrepareComplete(TInt aError);               // Preparation for playback completed.
+    void MvpuoFrameReady(CFbsBitmap& aFrame,TInt aError); // For video playback only.
+
+    // Callback functions, MVideoLoadingObserver methods
+    void MvloLoadingStarted();                      // Buffering started
+    void MvloLoadingComplete();                     // Buffering completed.
+
+private:
+    void playL(const QString &aUrl, int aApId);     // Play a station
+    void getRefreshedMetaDataL(TInt aIndex);        // Get refreshed data from player
+    void createPlayerL();                           // Created player
+    void destroyPlayer();                           // Destroy player
+    void setMetadataEventConfig();                  // Enable meta data event
+    static TInt isPrepareCompleted(TAny* aPointer); // Periodic called function
+    void checkPrepare();                            // Check if preparation completed
+
+private:
+    CVideoPlayerUtility2*  iVideoPlayer;
+    IRQMetaData*          iQMetaData;       // Saving meta data
+    /*
+     * Sometimes the station server is on without encoder. In this case,
+     * MvpuoPrepareComplete is not called after MvpuoOpenComplete. Need to stop playback
+     * in this case. So start a timer to check if the preparation is complete.
+     */
+    CPeriodic*            iPrepareTimer;
+    QString               iLastArtistSongName;
+};
+
+#endif /* IRQMMFADAPTER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/inc/irqphononadapter.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* 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 IRQPHONONADAPTER_H_
+#define IRQPHONONADAPTER_H_
+
+#include <QObject>
+#include "irqplayeradapterinterface.h"
+
+/**
+ * This class wraps the PHONON interface
+ */
+class IRQPHONONAdapter : public IRQPlayerAdapterInterface
+{
+    Q_OBJECT
+
+public:
+    IRQPHONONAdapter();
+    ~IRQPHONONAdapter();
+
+    // Inherited from IRQPlayerAdapterInterface
+    void  playStation(const QString &aUrl, int aApId);
+    void  stop();
+    void  setVolume(int aVolume);
+    int   getVolume();
+    void* getPlayerInstance();
+};
+
+#endif /* IRQPHONONADAPTER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/inc/irqplayeradapterinterface.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRQPLAYERADAPTERINTERFACE_H_
+#define IRQPLAYERADAPTERINTERFACE_H_
+
+#include <QObject>
+#include "irqenums.h"
+
+class IRQMetaData;
+
+/*
+ * IRQPlayerAdapterInterface is the interface to use MMF adapter or PHONON adapter
+ */
+class IRQPlayerAdapterInterface : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    /**
+     *  Play specific url via certain access point id
+     */
+    virtual void playStation(const QString &aUrl, int aApId) = 0;
+
+    /**
+     *  Stop Playback
+     */
+    virtual void stop() = 0;
+
+    /**
+     *  Set volume to player
+     */
+    virtual void setVolume(int aVolume) = 0;
+
+    /**
+     *  Get current volume from player
+     */
+    virtual int getVolume() = 0;
+
+    /**
+     *  Get audio player instance
+     */
+    virtual void* getPlayerInstance() = 0;
+
+signals:
+
+    /**
+     *  Connection is established
+     */
+    void connectionEstablished(int aBitrate);
+
+    /**
+     *  Send errors out
+     */
+    void errorOccured(IRQError aError);
+
+    /**
+     *  Send buffering progress out
+     */
+    void percentageBuffered(int aPercentage);
+
+    /**
+     *  Send meta data out
+     */
+    void metaDataReceived(IRQMetaData& aIRmetaData);
+
+    /**
+     *  Gets the preset volume
+     */
+    void volumeExpected(int& aVolume);
+
+public:
+
+    enum PlayState
+    {
+        EStopped     = 0,                    // Initial state; playback stopped
+        EOpenning    = 1,                    // Try to open the url through MMF
+        EConnecting  = 2,                    // Try to connect to the url
+        EBuffering   = 3,                    // Buffer data
+        EPlaying     = 4                     // Play the audio stream
+    };
+
+    PlayState             iPlayState;        // A simple state machine
+};
+
+#endif /* IRQPLAYERADAPTERINTERFACE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/irqmediaplayer.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+TARGET = irqmediaplayer
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+DEFINES += MMFADAPTER
+
+DEPENDPATH += src
+LIBS += -lmediaclientvideo \
+        -lmmfcontrollerframework \
+        -lstereowideningeffect  \
+        -lws32
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+INCLUDEPATH += inc  \
+               ..\irqcommon\inc
+                        
+                  
+MOC_DIR = moc
+
+symbian{
+  TARGET.UID3 = 0xea3ed061
+  TARGET.EPOCALLOWDLLDATA = 1
+  TARGET.VID = VID_DEFAULT
+}
+
+# Input
+HEADERS += inc\irqplayeradapterinterface.h \
+           inc\irqmediaplayer.h  \
+           inc\irqmmfadapter.h  \
+           inc\irqphononadapter.h
+
+SOURCES += irqmediaplayer.cpp \
+           irqmmfadapter.cpp \
+           irqphononadapter.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5 
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/src/irqmediaplayer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,193 @@
+/*
+* 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 <StereoWideningBase.h>
+#include "irqmediaplayer.h"
+#if defined(MMFADAPTER)
+#include "irqmmfadapter.h"
+#elif defined(PHONONAdapter)
+#include "irqphononadapter.h"
+#endif
+
+//Constants
+const int KDefaultStereoLevel = 100;            // Default stereo level
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::IRQMediaPlayer
+// Constructor
+// Creates player adpater and connect the signals
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQMediaPlayer::IRQMediaPlayer() :
+    iStereoEffect(NULL)
+{
+#if defined(MMFADAPTER)
+    iPlayer = new IRQMMFAdapter();
+#elif defined(PHONONAdapter)
+    iPlayer = new IRQPHONONAdapter();
+#endif
+
+    connect(iPlayer, SIGNAL(connectionEstablished(int)),
+            this, SIGNAL(connectionEstablished(int)));
+    connect(iPlayer, SIGNAL(errorOccured(IRQError)),
+            this, SIGNAL(errorOccured(IRQError)));
+    connect(iPlayer, SIGNAL(percentageBuffered(int)),
+            this, SIGNAL(percentageBuffered(int)));
+    connect(iPlayer, SIGNAL(metaDataReceived(IRQMetaData&)),
+            this, SIGNAL(metaDataReceived(IRQMetaData&)));
+    connect(iPlayer, SIGNAL(volumeExpected(int&)),
+            this, SIGNAL(volumeExpected(int&)));
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::~IRQMediaPlayer
+// Destructor
+// Delete player adapter
+// ---------------------------------------------------------------------------
+//
+IRQMediaPlayer::~IRQMediaPlayer()
+{
+    delete iPlayer;
+    iPlayer = NULL;
+
+    delete iStereoEffect;
+    iStereoEffect = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::playStation
+// Plays a specific radio station via certain access point id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMediaPlayer::playStation(const QString &aUrl, int aApId)
+{
+    if (iPlayer)
+    {
+        iPlayer->playStation(aUrl, aApId);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::stop
+// Stops the playback
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMediaPlayer::stop()
+{
+    if (iPlayer)
+    {
+        iPlayer->stop();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::setVolume
+// Sets the volume
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMediaPlayer::setVolume(int aVolume)
+{
+    if (iPlayer)
+    {
+        iPlayer->setVolume(aVolume);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::getVolume
+// Gets the current volume of playback
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQMediaPlayer::getVolume()
+{
+    int val = 0;
+
+    if (iPlayer)
+    {
+        val = iPlayer->getVolume();
+    }
+
+    return val;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::enableStereoEffect
+// Turns on stereo effect
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMediaPlayer::enableStereoEffect()
+{
+    if (!iPlayer || IRQPlayerAdapterInterface::EPlaying != iPlayer->iPlayState)
+    {
+        return;
+    }
+
+    TRAPD(error, enableStereoEffectL());
+    if (KErrNone != error)
+    {
+        emit errorOccured(EIRQPlayerErrorSetStereoFailed);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::disableStereoEffect
+// Turns off stereo effect
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMediaPlayer::disableStereoEffect()
+{
+    if (iStereoEffect)
+    {
+        if (iStereoEffect->IsEnabled())
+        {
+            TRAPD(error, iStereoEffect->DisableL());
+            if (KErrNone != error)
+            {
+                emit errorOccured(EIRQPlayerErrorSetStereoFailed);
+            }
+            delete iStereoEffect;
+            iStereoEffect = NULL;
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMediaPlayer::enableStereoEffectL
+// Turns on stereo effect
+// ---------------------------------------------------------------------------
+//
+void IRQMediaPlayer::enableStereoEffectL()
+{
+
+    TUint stereoLevel = KDefaultStereoLevel;
+
+    if (!iStereoEffect)
+    {
+#if defined(MMFADAPTER)
+        CVideoPlayerUtility* playerInstance = (CVideoPlayerUtility*)iPlayer->getPlayerInstance();
+#elif defined(PHONONAdapter)
+        void* playerInstance = iPlayer->getPlayerInstance();
+#endif
+        iStereoEffect = CStereoWidening::NewL(*playerInstance, EFalse, stereoLevel);
+    }
+
+    if (!iStereoEffect->IsEnabled())
+    {
+        iStereoEffect->EnableL();
+        iStereoEffect->SetStereoWideningLevelL(stereoLevel);
+        iStereoEffect->ApplyL();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/src/irqmmfadapter.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,520 @@
+/*
+* 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 <mmf/common/mmferrors.h>
+#include <NokiaAudioPreference.h>
+#include <coedef.h>
+#include <QStringList>
+#include <hxmetadatakeys.h>
+#include "irqmetadata.h"
+#include "irqenums.h"
+#include "irqmmfadapter.h"
+
+//Constants
+const TUid KUidController        = { 0x101F8514 }; // Helix Video controller UID
+const TInt KConnectingTime       = 30*1000000;     // 30 seconds
+const TInt KVolumeMinPercentage  = 0;              // Minimum volume percentage
+const TInt KVolumeMaxPercentage  = 100;            // Maximum volume percentage
+const TInt KLoadingCompletePercentage = 100;       // Loading Complete percentage
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::IRQMMFAdapter
+//  Constructor
+//  Initialize viriants
+// ---------------------------------------------------------------------------
+//
+IRQMMFAdapter::IRQMMFAdapter() :
+    iVideoPlayer(NULL)
+    ,iQMetaData(NULL)
+    ,iPrepareTimer(NULL)
+{
+    iPlayState = EStopped;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::~IRQMMFAdapter
+//  Destructor
+//  Clean up resources
+// ---------------------------------------------------------------------------
+//
+IRQMMFAdapter::~IRQMMFAdapter()
+{
+    destroyPlayer();
+
+    delete iQMetaData;
+    iQMetaData = NULL;
+
+    if (iPrepareTimer)
+    {
+        if (iPrepareTimer->IsActive())
+        {
+            iPrepareTimer->Cancel();
+        }
+        delete iPrepareTimer;
+        iPrepareTimer = NULL;
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::playStation
+//  IRQPlayerAdapterInterface method
+//  Play url via specific access point id
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::playStation(const QString &aUrl, int aApId)
+{
+    TRAPD(error, playL(aUrl, aApId));
+    if (NULL == iQMetaData)
+    {
+        emit errorOccured(EIRQErrorOutOfMemory);
+    }
+
+    if (KErrNone != error)
+    {
+        emit errorOccured(EIRQPlayerErrorGeneral);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::playL
+//  Play url via specific access point id
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::playL(const QString &aUrl, int aApId)
+{
+    // Save stream Url
+    if (NULL == iQMetaData)
+    {
+        iQMetaData = new (ELeave) IRQMetaData();
+    }
+    else
+    {
+        // Clear MetaData
+        iQMetaData->clear();
+    }
+    iQMetaData->setStreamUrl(aUrl);
+
+    // Transfer url from QString to TDesC
+    TPtrC stationUrl(reinterpret_cast<const TUint16*>(aUrl.utf16()));
+
+    // Create player if it doesn't exist
+    if (NULL == iVideoPlayer)
+    {
+        createPlayerL();
+    }
+
+    // If the status is not stopped, clean up last playback resources
+    stop();
+
+    // Open url
+    iVideoPlayer->OpenUrlL(stationUrl, aApId, KNullDesC8, KUidController);
+    iPlayState = EOpenning;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::stop
+//  IRQPlayerAdapterInterface method
+//  Stop playback, call Close() to clean up allocated resources
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::stop()
+{
+    if (iVideoPlayer && EStopped != iPlayState)
+    {
+        if (iPrepareTimer)
+        {
+            if (iPrepareTimer->IsActive())
+            {
+                iPrepareTimer->Cancel();
+            }
+        }
+
+        iVideoPlayer->Stop();
+        iVideoPlayer->Close();
+        iPlayState = EStopped;
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::setVolume
+//  IRQPlayerAdapterInterface method
+//  Set volume to player
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::setVolume(int aVolume)
+{
+    if (iVideoPlayer && iPlayState > EOpenning)
+    {
+        // aVolume is a percentage
+        if (aVolume < KVolumeMinPercentage)
+        {
+            aVolume = KVolumeMinPercentage;
+        }
+        else if (aVolume > KVolumeMaxPercentage)
+        {
+            aVolume = KVolumeMaxPercentage;
+        }
+        int volume = aVolume*iVideoPlayer->MaxVolume()/KVolumeMaxPercentage;
+
+        TRAPD(error, iVideoPlayer->SetVolumeL(volume));
+        if (KErrNone != error)
+        {
+            emit errorOccured(EIRQPlayerErrorGeneral);
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::getVolume
+//  IRQPlayerAdapterInterface method
+//  Get current volume value from player
+// ---------------------------------------------------------------------------
+//
+int IRQMMFAdapter::getVolume()
+{
+    int volume = KVolumeMinPercentage;
+
+    if (iVideoPlayer && iPlayState > EOpenning)
+    {
+        // Return a percentage
+        volume = iVideoPlayer->Volume()*KVolumeMaxPercentage/iVideoPlayer->MaxVolume();
+    }
+    return volume;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::getPlayerInstance
+//  IRQPlayerAdapterInterface method
+//  Get audio player instance
+// ---------------------------------------------------------------------------
+//
+void* IRQMMFAdapter::getPlayerInstance()
+{
+    return (void*)iVideoPlayer;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvpuoOpenComplete
+//  Callback function, MVideoPlayerUtilityObserver method
+//  Called after calling CVideoPlayerUtility::OpenUrlL()
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvpuoOpenComplete(TInt aError)
+{
+    if (KErrNone == aError)
+    {
+        if (NULL == iPrepareTimer)
+        {
+            TRAPD(error, iPrepareTimer = CPeriodic::NewL(CPeriodic::EPriorityStandard));
+            if (KErrNone != error)
+            {
+                emit errorOccured(EIRQErrorOutOfMemory);
+                return;
+             }
+        }
+
+        // Prepare to playback
+        iVideoPlayer->Prepare();
+        iPlayState = EConnecting;
+
+        // Start a timer to check preparation status
+        if (iPrepareTimer->IsActive())
+        {
+            // Cancel the previous request if pending
+            iPrepareTimer->Cancel();
+        }
+        TTimeIntervalMicroSeconds32 interval(KConnectingTime);
+        iPrepareTimer->Start(interval,interval,
+                             TCallBack(IRQMMFAdapter::isPrepareCompleted,this));
+    }
+    else
+    {
+        emit errorOccured(EIRQPlayerErrorConnectingFailed);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvpuoPrepareComplete
+//  Callback function, MVideoPlayerUtilityObserver method
+//  Called after calling CVideoPlayerUtility::Prepare. Since some audio types
+//  are not explicitly(hxmmffourccmap.cpp), they are not retrieved here.
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvpuoPrepareComplete(TInt aError)
+{
+    // Cancel the previous request if pending
+    if (iPrepareTimer->IsActive())
+    {
+        iPrepareTimer->Cancel();
+    }
+
+    if (KErrNone == aError)
+    {
+        // Get volume from preset
+        int volumeval = KVolumeMaxPercentage/2;
+        emit volumeExpected(volumeval);
+        setVolume(volumeval);
+
+        // Save bit rate
+        int bitrate = 0;
+        TRAPD(error, bitrate = iVideoPlayer->AudioBitRateL());
+        if (KErrNone == error)
+        {
+            iQMetaData->setBitrate(bitrate/1000);
+        }
+
+        // Send signal ConnectionEstablished
+        emit connectionEstablished(iQMetaData->getBitrate());
+
+        // Set specific event to get meta data from player
+        setMetadataEventConfig();
+
+        // Start playback
+        iVideoPlayer->Play();
+        iPlayState = EBuffering;
+    }
+    else if (KErrServerBusy == aError)
+    {
+        emit errorOccured(EIRQPlayerErrorServerFull);
+    }
+    else
+    {
+        emit errorOccured(EIRQPlayerErrorConnectingFailed);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvpuoPlayComplete
+//  Callback function, MVideoPlayerUtilityObserver method
+//  Notification that video playback has completed. This is not called if play
+//  back is explicitly stopped by calling Stop. Moreover, radio station stream
+//  has no end. So it should be NEVER called.
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvpuoPlayComplete(TInt aError)
+{
+    if (KErrNone != aError)
+    {
+        emit errorOccured(EIRQPlayerErrorGeneral);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvpuoEvent
+//  Callback function, MVideoPlayerUtilityObserver method
+//  Handle events from player.
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvpuoEvent(TMMFEvent const & aEvent)
+{
+    if (KMMFEventCategoryVideoPlayerGeneralError == aEvent.iEventType)
+    {
+        switch (aEvent.iErrorCode)
+        {
+            case KErrHardwareNotAvailable:
+            case KErrMMAudioDevice:
+                // Higher priority application has taken over the
+                // audio device. --> Do stop.
+                emit errorOccured(EIRQPlayerErrorAudioDeviceLost);
+                break;
+            case KErrDisconnected:
+                emit errorOccured(EIRQPlayerErrorConnectionLost);
+                break;
+            case KErrTimedOut:    
+                emit errorOccured(EIRQPlayerErrorTimeOut);
+                break;
+            case KErrServerBusy:    
+                emit errorOccured(EIRQPlayerErrorServerFull);
+                break;                                            
+            default:
+                emit errorOccured(EIRQPlayerErrorGeneral);			
+                break;
+        }
+    }
+    else if (KMMFRefreshMetaData == aEvent.iEventType)
+    {
+        // Get refreshed meta data
+        TRAPD(error, getRefreshedMetaDataL(aEvent.iErrorCode));
+        if (KErrNone != error)
+        {
+            emit errorOccured(EIRQPlayerErrorGeneral);
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvpuoFrameReady
+//  Callback function, MVideoPlayerUtilityObserver method
+//  For video stream only, never called
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvpuoFrameReady(CFbsBitmap& aFrame,TInt aError)
+{
+    Q_UNUSED(aFrame);
+    Q_UNUSED(aError);
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvloLoadingStarted
+//  Callback function, MVideoLoadingObserver method
+//  Start buffering after CVideoPlayerUtility::Play() is called
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvloLoadingStarted()
+{
+    // Get buffering progress and send it to application
+    int percentageComplete = 0;
+
+    TRAPD(error, iVideoPlayer->GetVideoLoadingProgressL(percentageComplete));
+
+    if (KErrNone == error)
+    {
+        // Send signal to UpdateProgress
+        emit percentageBuffered(percentageComplete);
+    }
+    else
+    {
+        emit errorOccured(EIRQPlayerErrorGeneral);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::MvloLoadingComplete
+//  Callback function, MVideoLoadingObserver method
+//  Send 100% buffering status out
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::MvloLoadingComplete()
+{
+    iPlayState = EPlaying;
+
+    // Send signal to update progress, 100%
+    emit percentageBuffered(KLoadingCompletePercentage);
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::getRefreshedMetaData
+//  Get refreshed meta data according to the index
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::getRefreshedMetaDataL(TInt index)
+{
+    if (iQMetaData)
+    {
+        CMMFMetaDataEntry* pMetadataEntry = iVideoPlayer->MetaDataEntryL(index);
+
+        QString entryName = QString::fromUtf16(pMetadataEntry->Name().Ptr(),
+                                               pMetadataEntry->Name().Length());
+
+        // If the meta data is the same as last, we don't need to report it.
+        if (iLastArtistSongName == entryName)
+        {
+            return;
+        }
+        else
+        {
+            iLastArtistSongName = entryName;
+        }
+
+        // Artist, song name
+        if (entryName == HXAuthor)
+        {
+            QString songArtist = QString::fromUtf16(pMetadataEntry->Value().Ptr(),
+                                                    pMetadataEntry->Value().Length());
+            iQMetaData->setArtistSongName(songArtist);
+
+            // Send signal HandleMetaDataReceived
+            emit metaDataReceived(*iQMetaData);
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::createPlayer
+//  Create player instance
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::createPlayerL()
+{
+    // Create player instance
+    iVideoPlayer = CVideoPlayerUtility2::NewL(*this,KAudioPriorityAudioPlaybackStreaming ,
+                                             (TMdaPriorityPreference)KAudioPrefRealOneStreaming);
+    // Register loading notification
+    iVideoPlayer->RegisterForVideoLoadingNotification(*this);
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::destroyPlayer
+//  Destroy player
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::destroyPlayer()
+{
+    delete iVideoPlayer;
+    iVideoPlayer = NULL;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::SetMetadataEventConfig
+//  Enable meta data event
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::setMetadataEventConfig()
+{
+    TMMFMessageDestinationPckg  destinationPckg(KUidInterfaceMMFControllerMetadataEventMsg);
+    TPckgBuf<TBool>             metadataEventPckg(EMMFEnableMetadataEvent);
+
+    //  Enable meta data event.
+    iVideoPlayer->CustomCommandSync(destinationPckg,
+                                    EMMFSetMetadataEventConfig,
+                                    metadataEventPckg,
+                                    KNullDesC8);
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::isPrepareCompleted
+//  Static function for periodic call
+// ---------------------------------------------------------------------------
+//
+TInt IRQMMFAdapter::isPrepareCompleted(TAny* aPtr)
+{
+    IRQMMFAdapter* self = static_cast<IRQMMFAdapter*>(aPtr);
+    if (self)
+    {
+        self->checkPrepare();
+    }
+    return KErrNone;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQMMFAdapter::checkPrepare
+//  Check if the preparation is complete
+// ---------------------------------------------------------------------------
+//
+void IRQMMFAdapter::checkPrepare()
+{
+    if (iPrepareTimer->IsActive())
+    {
+        // Cancel the previous request if pending
+        iPrepareTimer->Cancel();
+    }
+
+    if (EConnecting == iPlayState)
+    {
+        emit errorOccured(EIRQPlayerErrorConnectingFailed);
+        stop();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmediaplayer/src/irqphononadapter.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* 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 "irqphononadapter.h"
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::IRQMMFAdapter
+//  Constructor
+//  Initialize viriants
+// ---------------------------------------------------------------------------
+//
+IRQPHONONAdapter::IRQPHONONAdapter()
+{
+    iPlayState = EStopped;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::~IRQMMFAdapter
+//  Destructor
+//  Clean up resources
+// ---------------------------------------------------------------------------
+//
+IRQPHONONAdapter::~IRQPHONONAdapter()
+{
+}
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::playStation
+//  IRQPlayerAdapterInterface method
+//  Play url via specific access point id
+// ---------------------------------------------------------------------------
+//
+void IRQPHONONAdapter::playStation(const QString &aUrl, int aApId)
+{
+    Q_UNUSED(aUrl);
+    Q_UNUSED(aApId);
+}
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::stop
+//  IRQPlayerAdapterInterface method
+//  Stop playback, call Close() to clean up allocated resources
+// ---------------------------------------------------------------------------
+//
+void IRQPHONONAdapter::stop()
+{
+}
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::setVolume
+//  IRQPlayerAdapterInterface method
+//  Set volume to player
+// ---------------------------------------------------------------------------
+//
+void IRQPHONONAdapter::setVolume(int aVolume)
+{
+    Q_UNUSED(aVolume);
+}
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::getVolume
+//  IRQPlayerAdapterInterface method
+//  Get current volume value from player
+// ---------------------------------------------------------------------------
+//
+int IRQPHONONAdapter::getVolume()
+{
+    return 0;
+}
+
+// ---------------------------------------------------------------------------
+//  IRQPHONONAdapter::getPlayerInstance
+//  IRQPlayerAdapterInterface method
+//  Get audio player instance
+// ---------------------------------------------------------------------------
+//
+void* IRQPHONONAdapter::getPlayerInstance()
+{
+    return NULL;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmusicshop/inc/irqmusicshop.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2009-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:  class declaration for visiting nokia music shop
+*
+*/
+
+
+#ifndef IRQMUSICSHOP_H_
+#define IRQMUSICSHOP_H_
+
+#include <QString>
+
+class CMPXFindInMShop; //For Find in Shop
+
+
+/*!
+ * This class provides music shop related interface.
+ *
+ */
+class IRQMusicShop
+{
+public:
+
+    /*!
+     *  Get the instance of IRQMusicShop
+     *  @return IRQMusicShop*
+     */
+    IMPORT_C static  IRQMusicShop* openInstance();
+
+    /*!
+     *  Close the instance of IRQMusicShop
+     */
+    IMPORT_C void closeInstance();
+
+private:
+
+    /**
+     *  Creates IRQMusicShop instance
+     */
+    static IRQMusicShop* createInstanceL();
+    
+    /*!
+     * Constructor.
+     */
+    IRQMusicShop();
+    
+    /*!
+     * Destructor.
+     */    
+    ~IRQMusicShop();
+    
+    
+    void constructL();
+
+public:
+    /*!
+     * Launch music shop app
+     * @return bool  ture if launch successfully, otherwise return false
+     */                              
+    IMPORT_C static bool launchMusicShop();  
+
+    /*!
+     * Launch shazam app
+     * @return bool  ture if launch successfully, otherwise return false
+     */                              
+    IMPORT_C static bool launchShazam(); 
+                                          
+    /*!
+     * Find song in music shop app
+     * @param   const QString& aSongName
+     * @param   const QString& aArtistName
+     * @param   const QString& aAlbumName
+     * @return bool  ture if operation successfully, otherwise return false
+     */                              
+    IMPORT_C bool findInMusicShop(const QString& aSongName,
+                                  const QString& aArtistName = QString(),
+                                  const QString& aAlbumName = QString());
+
+#ifdef USER_DEFINED_MUSICSHOP
+private:
+    void resetMusicShopUrlL();
+    void restoreMusicShopUrlL();
+#endif
+    
+private:
+
+    CMPXFindInMShop* iMPXFindInShop;
+       
+    /**
+     * Number of objects currently referring to the singleton object
+     */
+    int iSingletonInstances;
+	
+#ifdef USER_DEFINED_MUSICSHOP    
+    QString iMusicShopUrl;
+    bool iResetAlready;
+#endif	
+};
+
+#endif /* IRQMUSICSHOP_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmusicshop/irqmusicshop.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+
+TARGET = irqmusicshop
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH += src
+
+INCLUDEPATH += inc 
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+symbian{
+  TARGET.UID3 = 0xe2480ba4
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+# DEFINES += MUSICSHOP_AVAILABLE
+
+LIBS += -lapgrfx \
+        -lws32 \
+        -lcentralrepository \
+        -lecom
+
+# Input
+HEADERS += inc\irqmusicshop.h
+SOURCES += irqmusicshop.cpp
+
+include(../common.pri)
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmusicshop/src/irqmusicshop.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2009-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:  class implementation for visiting nokia music shop
+*
+*/
+
+
+#include <apgtask.h> // TApaTask, TApaTaskList
+#include <apgcli.h>  // RApaLsSession
+#include <e32std.h>  // TThreadId
+
+#include <w32std.h> // RWsSession
+#include <e32cmn.h>
+#include <e32def.h>
+#ifdef USER_DEFINED_MUSICSHOP
+#include <QFile>
+#include <QTextStream>
+#include <QStringList>
+#endif
+
+#ifdef MUSICSHOP_AVAILABLE
+#include <e32property.h>
+#include <centralrepository.h>
+#include <mpxfindinmusicshopcommon.h> // P/S Keys, KSearchUrlMaxSize, KCategoryValueMaxSize
+#include <musicstoreuidconstants.h>   // KUidMusicStore
+#include <mpxfindinmusicshop.h>       // CMPXFindInMShop
+#include <musicwapcenrepkeys.h>       // Central Repository : KCRUidMusicShopSettings,KMusicShopURI
+#ifdef USER_DEFINED_MUSICSHOP
+const TInt KMaxUrlLenth = 512;
+const char* const KNewMusicShopUrl = "http://music.nokia.co.uk";
+void getUrlFromConfiguration(QString & aUrl);
+#endif //for USER_DEFINED_MUSICSHOP
+#endif //for MUSICSHOP_AVAILABLE
+
+#include "irqmusicshop.h"
+
+
+const TUid KUidShazam = { 0x200265B3 };
+bool launchAppByUid(const TUid aUid);
+
+#ifdef MUSICSHOP_AVAILABLE
+// ---------------------------------------------------------------------------
+// IRQMusicShop::openInstance()
+// Static function to get a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQMusicShop* IRQMusicShop::openInstance()
+{
+    // Get singleton instance
+    IRQMusicShop* musicShop =
+                           reinterpret_cast<IRQMusicShop*>(Dll::Tls());
+
+    if(NULL == musicShop)
+    {
+        TRAPD(error, musicShop = createInstanceL());
+        if (KErrNone != error)
+        {
+            delete musicShop;
+            musicShop = NULL;
+            Dll::SetTls(NULL);
+        }
+    }
+    else
+    {
+        musicShop->iSingletonInstances++;
+    }
+
+    return musicShop;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::closeInstance()
+// Close a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMusicShop::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::createInstanceL()
+// Creates IRQMusicShop instance
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop* IRQMusicShop::createInstanceL()
+{
+    IRQMusicShop* musicShop = new (ELeave) IRQMusicShop();
+    musicShop->constructL();
+    User::LeaveIfError(Dll::SetTls(musicShop));
+    musicShop->iSingletonInstances = 1;
+    return musicShop;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::IRQMusicShop()
+// Default Constructor.
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::IRQMusicShop():iMPXFindInShop(NULL),
+                             iSingletonInstances(0)   
+                             #ifdef USER_DEFINED_MUSICSHOP
+                             ,iResetAlready(false)
+                             #endif
+{   
+    _LIT_SECURITY_POLICY_C1(KReadPolicy, ECapabilityReadUserData);
+    _LIT_SECURITY_POLICY_C1(KWritePolicy, ECapabilityWriteUserData);
+    
+    RProperty::Define(KUidMusicStore, KMShopCategoryId, RProperty::EInt, KReadPolicy, KWritePolicy);
+    RProperty::Define(KUidMusicStore, KMShopCategoryName, RProperty::ELargeText, KReadPolicy, KWritePolicy);    
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQMusicShop::constructL()
+{
+    iMPXFindInShop = CMPXFindInMShop::NewL();
+#ifdef USER_DEFINED_MUSICSHOP
+    resetMusicShopUrlL();
+#endif 
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::~IRQMusicShop()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::~IRQMusicShop()
+{
+    delete iMPXFindInShop;
+    iMPXFindInShop = NULL;
+#ifdef USER_DEFINED_MUSICSHOP    
+    TRAP_IGNORE(restoreMusicShopUrlL());
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::findInMusicShop()
+// Find song in music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::findInMusicShop(const QString& aSongName,
+                                            const QString& aArtistName,
+                                            const QString& aAlbumName)
+{
+    if(NULL == iMPXFindInShop)
+    {
+        return false;
+    }
+
+    TPtrC songName(reinterpret_cast<const TUint16*>(aSongName.utf16()));
+    TPtrC artistName(reinterpret_cast<const TUint16*>(aArtistName.utf16()));
+    TPtrC albumName(reinterpret_cast<const TUint16*>(aAlbumName.utf16()));
+    
+    HBufC* url = NULL;
+    TRAPD(error, url = iMPXFindInShop->CreateSearchURLL(songName,
+                                                artistName,
+                                                albumName,
+                                                KNullDesC,    // Composer - Not used
+                                                KNullDesC)); // Genre - Not used
+    
+    bool retVal = false;
+    if( (KErrNone == error) &&
+        (KErrNone == RProperty::Set(KUidMusicStore,
+                          KMShopCategoryId,
+                          KFindInMShopKeyValid)) &&
+        (KErrNone == RProperty::Set(KUidMusicStore,
+                          KMShopCategoryName,
+                          *url))
+      )
+    {
+        retVal = launchMusicShop();
+    }
+
+    delete url;
+    REComSession::FinalClose();
+    return retVal;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchMusicShop()
+// Launch music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchMusicShop()
+{
+    return launchAppByUid(KUidMusicStore);
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchShazam()
+// Launch shazam app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchShazam()
+{
+    return launchAppByUid(KUidShazam);
+}
+
+
+#ifdef USER_DEFINED_MUSICSHOP
+// ---------------------------------------------------------------------------
+// resetMusicShopUrlL
+// Reset Music Shop Url in the Central Repository
+// ---------------------------------------------------------------------------
+//
+void IRQMusicShop::resetMusicShopUrlL()
+{
+    CRepository* pRepository = CRepository::NewL(KCRUidMusicShopSettings);
+    CleanupStack::PushL(pRepository);
+
+    TInt urlLenth = KMaxUrlLenth;
+    HBufC* valueString = HBufC::NewLC(urlLenth);
+    
+    TInt error = KErrNone;
+    do
+    {
+        TPtr ptr = valueString->Des();
+        error = pRepository->Get(KMusicShopURI,ptr);
+        if(error == KErrTooBig)
+        {
+            CleanupStack::PopAndDestroy(valueString);
+            urlLenth = 2 * urlLenth;
+            valueString = HBufC::NewLC(urlLenth);
+        }
+    } while(error == KErrTooBig);
+    
+    User::LeaveIfError(error);
+
+    iMusicShopUrl =  QString::fromUtf16(valueString->Ptr(),valueString->Length());
+        
+    QString newMusicShopUrl(KNewMusicShopUrl);
+    getUrlFromConfiguration(newMusicShopUrl);
+    
+    
+    if(0 != iMusicShopUrl.compare(newMusicShopUrl,Qt::CaseInsensitive))
+    {   
+        TPtrC urlDesc(reinterpret_cast<const TUint16*>(newMusicShopUrl.utf16())); 
+        User::LeaveIfError(pRepository->Set(KMusicShopURI,urlDesc));
+        iResetAlready = true;
+    }
+
+    CleanupStack::PopAndDestroy(valueString);
+    CleanupStack::PopAndDestroy(pRepository);
+}
+
+void IRQMusicShop::restoreMusicShopUrlL()
+{
+    if(iResetAlready)
+    {
+        CRepository* pRepository = CRepository::NewL(KCRUidMusicShopSettings);
+        TPtrC16 oldMusicShopUrl(reinterpret_cast<const TUint16*>(iMusicShopUrl.utf16()));
+        pRepository->Set(KMusicShopURI,oldMusicShopUrl);
+        delete pRepository;
+    }
+}
+
+
+void getUrlFromConfiguration(QString & aUrl)
+{
+    QFile file("C:\\data\\QTIRConfigure.txt");
+    if (file.open(QIODevice::ReadOnly)) 
+    {
+        QTextStream stream( &file );
+        QString line;
+        QStringList parameter;
+        while (!stream.atEnd())
+        {
+            line = stream.readLine();
+            parameter = line.split("=");
+            if (parameter.count() == 2)
+            {
+                if (parameter.first() == "userDefinedMusicStoreUrl")
+                {
+                    aUrl = parameter.last();
+                    break;
+                }
+            }
+        }
+        file.close();
+    }
+}
+#endif
+
+#else //for MUSICSHOP_AVAILABLE
+// ---------------------------------------------------------------------------
+// IRQMusicShop::openInstance()
+// Static function to get a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQMusicShop* IRQMusicShop::openInstance()
+{
+    // Get singleton instance
+    IRQMusicShop* musicShop =
+                           reinterpret_cast<IRQMusicShop*>(Dll::Tls());
+
+    if(NULL == musicShop)
+    {
+        musicShop = new IRQMusicShop();
+        musicShop->iSingletonInstances = 1;
+    }
+    else
+    {
+        musicShop->iSingletonInstances++;
+    }
+
+    return musicShop;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::closeInstance()
+// Close a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMusicShop::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::IRQMusicShop()
+// Default Constructor.
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::IRQMusicShop():iMPXFindInShop(NULL),
+                             iSingletonInstances(0)   
+                             #ifdef USER_DEFINED_MUSICSHOP
+                             ,iResetAlready(false)
+                             #endif
+{   
+
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::~IRQMusicShop()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::~IRQMusicShop()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::findInMusicShop()
+// Find song in music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::findInMusicShop(const QString& aSongName,
+                                            const QString& aArtistName,
+                                            const QString& aAlbumName)
+{
+    Q_UNUSED(aSongName)
+    Q_UNUSED(aArtistName)
+    Q_UNUSED(aAlbumName)
+    return false;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchMusicShop()
+// Launch music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchMusicShop()
+{
+	return false;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchShazam()
+// Launch shazam app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchShazam()
+{
+    return launchAppByUid(KUidShazam);
+}
+
+#endif //for MUSICSHOP_AVAILABLE
+
+bool launchAppByUid(const TUid aUid)
+{
+    RWsSession wsSession;
+    if(KErrNone != wsSession.Connect())
+    {
+        return false;
+    }
+    
+    bool retVal = false;
+    TApaTaskList tasList(wsSession);
+    TApaTask task = tasList.FindApp(aUid);
+
+    if(task.Exists())
+    {
+        task.BringToForeground();
+        retVal = true;
+    }
+    else
+    {
+        RApaLsSession session;
+        if(KErrNone == session.Connect())
+        {
+            TThreadId threadId;
+            TInt err = session.CreateDocument(KNullDesC, aUid, threadId);
+            if(KErrNone == err)
+            {
+                retVal = true;
+            }
+            session.Close();
+        }      	
+    }
+    
+    wsSession.Flush();    
+    wsSession.Close();
+    return retVal;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnetworkcontroller/inc/irqnetworkcontroller.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,189 @@
+/*
+* 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 IRQNETWORKCONTROLLER_H_
+#define IRQNETWORKCONTROLLER_H_
+
+#include <QObject>
+
+#include "irqenums.h"
+#include "irqevent.h"
+
+class IRQNetworkControllerBody;
+
+/**
+ * This class provides the interface to IR Network Controller component
+ *
+ * IRQNetworkController follows a singleton pattern
+ * hence the destructor is private and to destroy it we need to use an API
+ *
+ */
+
+class IRQNetworkController : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    /**
+     *  Get the instance of IRQNetworkController
+     *  @return IRQNetworkController*
+     */
+    IMPORT_C static  IRQNetworkController* openInstance();
+
+    /**
+     *  Close the instance of IRQNetworkController
+     */
+    IMPORT_C void closeInstance();
+
+    /**
+     *  Return the variable which indicates if connection is active or not
+     *  @return bool
+     */
+    IMPORT_C bool getNetworkStatus() const;
+
+    /**
+     *  Return the IAP Id of the chosen IAP
+     *  @return int Error code
+     */
+    IMPORT_C IRQError getIAPId(unsigned long& aIapId) const;
+
+    /**
+     *  Returns the list of available access points
+     *  @return QStringList &aList specifying the access point names
+     */
+    IMPORT_C void getAccessPointList(QStringList &aList);
+
+    /**
+     *  Returns the list of iap ids for available access points
+     *  @return QList<unsigned long> &aList specifying the iap ids
+     */
+    IMPORT_C void getApIdList(QList<unsigned long> &aList);
+
+    /**
+     *  Returns the list of bearer ids for available access points
+     *  @return QList<unsigned long> &aList specifying the bearer ids
+     */
+    IMPORT_C void getBearerList(QList<unsigned long> &aList);
+
+    /**
+     *  Returns the list of network ids for available access points
+     *  @return QList<unsigned long> &aList specifying the network ids
+     */
+    IMPORT_C void getNetworkList(QList<unsigned long> &aList);
+    
+    /**
+     *  Configure the Access Point which is used by all the components for network connectivity
+     */
+    IMPORT_C void  chooseAccessPoint();
+
+    /*
+     * Cancel configuring access point
+     */
+    IMPORT_C void cancelConnecting();
+    
+    /**
+     *  This api is used to determine if the phone is in offline mode
+     *  @return True if the phone is in offline mode else False
+     */
+    IMPORT_C bool isOfflineMode();
+
+    /**
+     *  This api is used to determine if the phone supports WLan usage
+     *  @return True if the phone supports else False
+     */
+    IMPORT_C bool isWlanSupported() const;
+
+    /**
+     *  Reset the connection status to Disconnected state
+     */
+    IMPORT_C void resetConnectionStatus();
+
+    /**
+     *  Used to determine the type of connection
+     *  @return enum describing the type of connection ( GPRS/3G/WiFi )
+     */
+    IMPORT_C IRQConnectionType identifyConnectionType() const;
+
+    /**
+     *  Notifies all observers whose network request is active to reissue the request
+     */
+    IMPORT_C void notifyActiveNetworkObservers(IRQNetworkEvent aEvent);
+
+    /**
+     *  Indicates if the hand over of network connection has happened
+     */
+    IMPORT_C bool isHandlingOverConnection();
+
+    /**
+     *  Indicates if chooseAccessPoint is called
+     */
+    IMPORT_C bool isConnectRequestIssued() const;
+    
+signals:
+
+    /**
+     *  Notifies all observers whose network request is active to reissue the request
+     */
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+
+    /**
+     *  Notifies all observers whose network request is active to reset the pending request status
+     */
+    void pendingRequestsReset(bool aValue);
+
+    /**
+     *  Notifies the type of network event that occurred
+     */
+    void networkEventNotified(IRQNetworkEvent aEvent);
+
+    /**
+     *  Notifies the error
+     */
+    void errorOccured(IRQError aError);
+
+private:
+    /**
+     *  Creates IRQNetworkController instance
+     */
+    static IRQNetworkController* createInstanceL();
+        
+    void constructL();
+
+    /**
+     *  Default C++ Constructor
+     */
+    IRQNetworkController();
+
+    /**
+     *  Default C++ Destructor
+     */
+    ~IRQNetworkController();
+
+private:
+
+    /**
+     *  IRQNetworkControllerBody instance
+     */
+    IRQNetworkControllerBody* iBody;
+
+    /**
+     * Number of objects currently referring to the singleton object IRQNetworkController
+     */
+    int iSingletonInstances;
+};
+
+#endif /* IRQNETWORKCONTROLLER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnetworkcontroller/inc/irqnetworkcontrollerbody.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,182 @@
+/*
+* 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 IRQNETWORKCONTROLLERBODY_H_
+#define IRQNETWORKCONTROLLERBODY_H_
+
+#include <QObject>
+#include "irnetworkcontroller.h"
+#include "irqenums.h"
+#include "irqevent.h"
+
+/**
+ * This class implements the IR Network Controller component
+ */
+
+class IRQNetworkControllerBody : public QObject
+                               , public MIRActiveNetworkObserver
+                               , public MIRNetworkController
+{
+    Q_OBJECT
+
+public:
+    /**
+     *  Create resources
+     */
+    void initL();
+    /**
+     *  Default C++ Destructor
+     */
+    ~IRQNetworkControllerBody();
+
+    /**
+     *  Return the variable which indicates if connection is active or not
+     *  @return bool
+     */
+    bool getNetworkStatus() const;
+
+    /**
+     *  Return the IAP Id of the chosen IAP
+     *  @return int Error code
+     */
+    IRQError getIAPId(unsigned long& aIapId) const;
+
+    /**
+     *  Returns the list of available access points
+     *  @return QStringList &aList specifying the access point names
+     */
+    void getAccessPointList(QStringList &aList);
+
+    /**
+     *  Returns the list of iap ids for available access points
+     *  @return QList<unsigned long> &aList specifying the iap ids
+     */
+    void getApIdList(QList<unsigned long> &aList);
+
+    /**
+     *  Returns the list of bearer ids for available access points
+     *  @return QList<unsigned long> &aList specifying the bearer ids
+     */
+    void getBearerList(QList<unsigned long> &aList);
+
+    /**
+     *  Returns the list of network ids for available access points
+     *  @return QList<unsigned long> &aList specifying the network ids
+     */
+    void getNetworkList(QList<unsigned long> &aList);
+    
+    /**
+     *  Configure the Access Point which is used by all the components for network connectivity
+     */
+    void  chooseAccessPoint();
+
+    /*
+     * Cancel configuring access point
+     */
+    void cancelConnecting();
+    
+    /**
+     *  This api is used to determine if the phone is in offline mode
+     *  @return True if the phone is in offline mode else False
+     */
+    bool isOfflineMode();
+
+    /**
+     *  This api is used to determine if the phone supports WLan usage
+     *  @return True if the phone supports else False
+     */
+    bool isWlanSupported() const;
+
+    /**
+     *  Reset the connection status to Disconnected state
+     */
+    void resetConnectionStatus();
+
+    /**
+     *  Used to determine the type of connection
+     *  @return enum describing the type of connection ( GPRS/3G/WiFi )
+     */
+    IRQConnectionType identifyConnectionType() const;
+
+    /**
+     *  Notifies all observers whose network request is active to reissue the request
+     */
+    void notifyActiveNetworkObservers(IRQNetworkEvent aEvent);
+
+    /**
+     *  Indicates if the hand over of network connection has happened
+     */
+    bool isHandlingOverConnection();
+
+    /**
+     *  Indicates if chooseAccessPoint is called
+     */
+    bool isConnectRequestIssued() const;
+
+    /**
+     *  MIRActiveNetworkObserver::NotifyActiveNetworkObserversL()
+     *  Callback which notifies all observers whose network request is active to reissue the request
+     *  @param aEvent Indicates the type of network event that occurred
+     */
+    void NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent);
+
+    /**
+     *  MIRActiveNetworkObserver::ResetPendingRequests()
+     *  Callback which notifies all observers whose network request is active to reset the pending
+     *  request status
+     */
+    void ResetPendingRequests(TBool aValue);
+
+    /**
+     *  MIRNetworkController::IRNetworkEventL()
+     *  @param aEvent Indicates the type of network event that occurred
+     */
+    void IRNetworkEventL(TIRNetworkEvent aEvent);
+    
+signals:
+
+    /**
+     *  Notifies all observers whose network request is active to reissue the request
+     *  Called in NotifyActiveNetworkObserversL()
+     */
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+
+    /**
+     *  Notifies all observers whose network request is active to reset the pending request status
+     *  Called in ResetPendingRequests()
+     */
+    void pendingRequestsReset(bool aValue);
+
+    /**
+     *  Notifies the type of network event that occurred
+     *  Called in IRNetworkEventL
+     */
+    void networkEventNotified(IRQNetworkEvent aEvent);
+
+    /**
+     *  Notifies the error
+     */
+    void errorOccured(IRQError aError);
+
+private:
+
+    /**
+     *  NetworkController singleton instance
+     */
+    CIRNetworkController* iNetworkController;
+};
+
+#endif /* IRQNETWORKCONTROLLERBODY_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnetworkcontroller/irqnetworkcontroller.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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
+
+TARGET = irqnetworkcontroller
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH += src
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(http)}
+INCLUDEPATH += $${MW_LAYER_PUBLIC_EXPORT_PATH(http)}
+
+INCLUDEPATH += inc \
+               ..\irqcommon\inc \
+               ..\..\internetradio2.0\networkcontrollerinc    
+
+LIBS += -lirnetworkcontroller -lnetmeta
+
+symbian{
+  TARGET.UID3 = 0xe71db754
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+# Input
+HEADERS += inc\irqnetworkcontroller.h inc\irqnetworkcontrollerbody.h
+SOURCES += irqnetworkcontroller.cpp irqnetworkcontrollerbody.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnetworkcontroller/src/irqnetworkcontroller.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,283 @@
+/*
+* 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 <QStringList>
+
+#include "irqnetworkcontroller.h"
+#include "irqnetworkcontrollerbody.h" 
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::openInstance()
+// Static function to get a singleton instance of IRQNetworkController
+// @return IRQNetworkController *
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQNetworkController* IRQNetworkController::openInstance()
+{
+    // Get singleton instance
+    IRQNetworkController* irqnetworkcontroller =
+                           reinterpret_cast<IRQNetworkController*>(Dll::Tls());
+
+    if (NULL == irqnetworkcontroller)
+    {
+        TRAPD(error, irqnetworkcontroller = createInstanceL());
+        if (KErrNone != error)
+        {
+            delete irqnetworkcontroller;
+            irqnetworkcontroller = NULL;
+            Dll::SetTls(NULL);
+        }
+    }
+    else
+    {
+        irqnetworkcontroller->iSingletonInstances++;
+    }
+
+    return irqnetworkcontroller;
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::closeInstance()
+// Close a singleton instance of IRQNetworkController
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::GetNetworkStatus()
+// Returns the variable which indicates if connection is active or not
+// @return bool
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQNetworkController::getNetworkStatus() const
+{
+    return iBody->getNetworkStatus();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::getIAPId()
+// Gets the IAP Id of the chosen IAP
+// @return IRQError
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQError IRQNetworkController::getIAPId(unsigned long& aIapId) const
+{
+    return iBody->getIAPId(aIapId);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::getAccessPointList()
+// Returns the list of available access points
+// @return QStringList &aList specifying the access point names
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::getAccessPointList(QStringList &aList)
+{
+    iBody->getAccessPointList(aList);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::getApIdList()
+// Returns the list of iap ids for available access points
+// @return QList<unsigned long> &aList specifying the iap ids
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::getApIdList(QList<unsigned long> &aList)
+{
+    iBody->getApIdList(aList);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::getBearerList()
+// Returns the list of bearer ids for available access points
+// @return QList<unsigned long> &aList specifying the bearer ids
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::getBearerList(QList<unsigned long> &aList)
+{
+    iBody->getBearerList(aList);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::getNetworkList()
+// Returns the list of network ids for available access points
+// @return QList<unsigned long> &aList specifying the network ids
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::getNetworkList(QList<unsigned long> &aList)
+{
+    iBody->getNetworkList(aList);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::chooseAccessPoint()
+// Configures the Access Point which is used by all the components for network
+// connectivity
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::chooseAccessPoint()
+{
+    iBody->chooseAccessPoint();
+}
+
+/*
+ * Cancel configuring access point
+ */
+EXPORT_C void IRQNetworkController::cancelConnecting()
+{
+    iBody->cancelConnecting();
+    iBody->resetConnectionStatus();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::isOfflineMode()
+// Indicates if the phone is in offline mode
+// @return True if the phone is in offline mode else False
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQNetworkController::isOfflineMode()
+{
+    return iBody->isOfflineMode();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::isWlanSupported()
+// Indicates if the phone supports WLan usage
+// @return True if the phone supports else False
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQNetworkController::isWlanSupported() const
+{
+    return iBody->isWlanSupported();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::resetConnectionStatus()
+// Resets the connection status to Disconnected state
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::resetConnectionStatus()
+{
+    iBody->resetConnectionStatus();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::identifyConnectionType()
+// Indicates the type of connection
+// @return enum describing the type of connection ( GPRS/3G/WiFi )
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQConnectionType IRQNetworkController::identifyConnectionType() const
+{
+    return iBody->identifyConnectionType();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::notifyActiveNetworkObservers()
+// Notifies all observers whose network request is active to reissue the request
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNetworkController::notifyActiveNetworkObservers(IRQNetworkEvent aEvent)
+{
+    iBody->notifyActiveNetworkObservers(aEvent);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::isHandlingOverConnection()
+// Indicates if the hand over of network connection has happened
+// @return bool
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQNetworkController::isHandlingOverConnection()
+{
+    return iBody->isHandlingOverConnection();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::isConnectRequestIssued()
+// Indicates if chooseAccessPoint is called
+// @return bool
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQNetworkController::isConnectRequestIssued() const
+{
+    return iBody->isConnectRequestIssued();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::IRQNetworkController()
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+IRQNetworkController::IRQNetworkController()
+{
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::~IRQNetworkController()
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+IRQNetworkController::~IRQNetworkController()
+{
+    delete iBody;
+    iBody = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkController::constructL()
+{
+    iBody = new (ELeave) IRQNetworkControllerBody();
+    Q_ASSERT(iBody);
+    iBody->initL();
+    
+    connect(iBody, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+            this, SIGNAL(networkRequestNotified(IRQNetworkEvent)));
+    connect(iBody, SIGNAL(pendingRequestsReset(bool)),
+            this, SIGNAL(pendingRequestsReset(bool)));
+    connect(iBody, SIGNAL(networkEventNotified(IRQNetworkEvent)),
+            this, SIGNAL(networkEventNotified(IRQNetworkEvent)));
+    connect(iBody, SIGNAL(errorOccured(IRQError)),
+            this, SIGNAL(errorOccured(IRQError)));
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkController::createInstanceL()
+// Creates IRQNetworkController instance
+// ---------------------------------------------------------------------------
+//
+IRQNetworkController* IRQNetworkController::createInstanceL()
+{
+    IRQNetworkController* nwkController = new (ELeave) IRQNetworkController();
+    nwkController->constructL();
+    User::LeaveIfError(Dll::SetTls(nwkController));
+    nwkController->iSingletonInstances = 1;
+    return nwkController;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnetworkcontroller/src/irqnetworkcontrollerbody.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,270 @@
+/*
+* 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 <QStringList>
+#include "irqnetworkcontrollerbody.h"
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::~IRQNetworkControllerBody()
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+IRQNetworkControllerBody::~IRQNetworkControllerBody()
+{
+    if (iNetworkController)
+    {
+        iNetworkController->Close();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::GetNetworkStatus()
+// Returns the variable which indicates if connection is active or not
+// @return bool
+// ---------------------------------------------------------------------------
+//
+bool IRQNetworkControllerBody::getNetworkStatus() const
+{
+    return (bool)iNetworkController->GetNetworkStatus();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::getIAPId()
+// Gets the IAP Id of the chosen IAP
+// @return IRQError
+// ---------------------------------------------------------------------------
+//
+IRQError IRQNetworkControllerBody::getIAPId(unsigned long& aIapId) const
+{
+    IRQError retval = EIRQErrorNone;
+
+    if (KErrNotFound == iNetworkController->GetIAPId(aIapId))
+    {
+        retval = EIRQErrorNotFound;
+    }
+
+    return retval;
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::getAccessPointList()
+// Returns the list of available access points
+// @return QStringList &aList specifying the access point names
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::getAccessPointList(QStringList &aList)
+{
+    const CDesCArray *apArray = iNetworkController->GetAccessPointList();
+    int count = apArray->MdcaCount();
+    for (int i = 0; i < count; ++i)
+    {
+        QString str = QString::fromUtf16(apArray->MdcaPoint(i).Ptr(), apArray->MdcaPoint(i).Length());
+        aList.append(str);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::getApIdList()
+// Returns the list of iap ids for available access points
+// @return QList<unsigned long> &aList specifying the iap ids
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::getApIdList(QList<unsigned long> &aList)
+{
+    const RArray<TUint32>& accessPointIDArray = iNetworkController->GetApList();
+    for (int i = 0; i < accessPointIDArray.Count(); ++i)
+    {
+        aList.append(accessPointIDArray[i]);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::getBearerList()
+// Returns the list of bearer ids for available access points
+// @return QList<unsigned long> &aList specifying the bearer ids
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::getBearerList(QList<unsigned long> &aList)
+{
+    const RArray<TUint32>& bearerIDArray = iNetworkController->GetBearerList();
+    for (int i = 0; i < bearerIDArray.Count(); ++i)
+    {
+        aList.append(bearerIDArray[i]);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::getNetworkList()
+// Returns the list of network ids for available access points
+// @return QList<unsigned long> &aList specifying the network ids
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::getNetworkList(QList<unsigned long> &aList)
+{
+    const RArray<TUint32>& networkIDArray = iNetworkController->GetNetworkList();
+    for (int i = 0; i < networkIDArray.Count(); ++i)
+    {
+        aList.append(networkIDArray[i]);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::chooseAccessPoint()
+// Configures the Access Point which is used by all the components for network
+// connectivity
+// ---------------------------------------------------------------------------
+//
+void  IRQNetworkControllerBody::chooseAccessPoint()
+{
+    TRAPD(error, iNetworkController->ChooseAccessPointL());
+    if (KErrNone != error)
+    {
+        emit errorOccured(EIRQErrorGeneral);
+    }
+}
+
+/*
+ * Cancel configuring access point
+ */
+void IRQNetworkControllerBody::cancelConnecting()
+{
+    iNetworkController->CancelConnecting();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::isOfflineMode()
+// Indicates if the phone is in offline mode
+// @return True if the phone is in offline mode else False
+// ---------------------------------------------------------------------------
+//
+bool IRQNetworkControllerBody::isOfflineMode()
+{
+    return (bool)iNetworkController->IsOfflineMode();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::isWlanSupported()
+// Indicates if the phone supports WLan usage
+// @return True if the phone supports else False
+// ---------------------------------------------------------------------------
+//
+bool IRQNetworkControllerBody::isWlanSupported() const
+{
+    return (bool)iNetworkController->IsWlanSupported();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::resetConnectionStatus()
+// Resets the connection status to Disconnected state
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::resetConnectionStatus()
+{
+    iNetworkController->ResetConnectionStatus();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::identifyConnectionType()
+// Indicates the type of connection
+// @return enum describing the type of connection ( GPRS/3G/WiFi )
+// ---------------------------------------------------------------------------
+//
+IRQConnectionType IRQNetworkControllerBody::identifyConnectionType() const
+{
+    return (IRQConnectionType)iNetworkController->IdentifyConnectionType();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::notifyActiveNetworkObservers()
+// Notifies all observers whose network request is active to reissue the request
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::notifyActiveNetworkObservers(IRQNetworkEvent aEvent)
+{
+    TRAPD(error, iNetworkController->NotifyActiveNetworkObserversL((TIRNetworkEvent)aEvent));
+    if (KErrNone != error)
+    {
+        emit errorOccured(EIRQErrorGeneral);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::isHandlingOverConnection()
+// Indicates if the hand over of network connection has happened
+// @return bool
+// ---------------------------------------------------------------------------
+//
+bool IRQNetworkControllerBody::isHandlingOverConnection()
+{
+    return (bool)iNetworkController->IsHandingOverConnection();
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::isConnectRequestIssued()
+// Indicates if chooseAccessPoint is called
+// @return bool
+// ---------------------------------------------------------------------------
+//
+bool IRQNetworkControllerBody::isConnectRequestIssued() const
+{
+    return (bool)iNetworkController->iIsConnectRequestIssued;
+}
+
+// ---------------------------------------------------------------------------
+// MIRActiveNetworkObserver::NotifyActiveNetworkObserversL()
+// Callback which notifies all observers whose network request is active to reissue the request
+// @param aEvent Indicates the type of network event that occurred
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+{
+    emit networkRequestNotified((IRQNetworkEvent)aEvent);
+}
+
+// ---------------------------------------------------------------------------
+// MIRActiveNetworkObserver::ResetPendingRequests()
+// Callback which notifies all observers whose network request is active to
+// reset the pending request status
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::ResetPendingRequests(TBool aValue)
+{
+    emit pendingRequestsReset((bool)aValue);
+}
+
+// ---------------------------------------------------------------------------
+// MIRNetworkController::IRNetworkEventL()
+// @param aEvent Indicates the type of network event that occurred
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::IRNetworkEventL(TIRNetworkEvent aEvent)
+{
+    emit networkEventNotified((IRQNetworkEvent)aEvent);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNetworkControllerBody::initL()
+// Create resources
+//
+// ---------------------------------------------------------------------------
+//
+void IRQNetworkControllerBody::initL()
+{
+    // Get singleton instance
+    iNetworkController = CIRNetworkController::OpenL(this);
+    iNetworkController->RegisterActiveNetworkObserverL(*this);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnwkinfoobserver/inc/irqnwkinfoobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2009-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:  class declaration for monitoring network info change
+*
+*/
+
+
+#ifndef IRQNWKINFOOBSERVER_H_
+#define IRQNWKINFOOBSERVER_H_
+
+#include <QObject>
+#include <QString>
+
+#include "irqnwkobserverinterface.h"  // MIRQNwkInfoUpdate
+
+class IRQNwkInfoObserverImpl;
+
+class IRQNwkInfoObserver : public QObject, 
+                           public MIRQNwkInfoUpdate
+{
+    Q_OBJECT
+    
+public:
+    /*!
+     *  Get the instance of IRQNwkInfoObserver
+     *  @return IRQNwkInfoObserver*
+     */
+    IMPORT_C static  IRQNwkInfoObserver* openInstance();
+
+    /*!
+     *  Close the instance of IRQNwkInfoObserver
+     */
+    IMPORT_C void closeInstance();
+
+public:   
+    /*!
+     *  start monitoring network info change
+     */
+    IMPORT_C void startMonitorNwkInfo();
+
+    /*!
+     *  stop monitoring network info change
+     */    
+    IMPORT_C void stopMonitorNwkInfo();
+
+signals:
+
+    void currentNwkChanged(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC);
+    
+    void homeNwkChanged(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC);  
+    
+private:
+
+    /*!
+     * Constructor.
+     */
+    IRQNwkInfoObserver();
+    
+    /*!
+     * Destructor.
+     */    
+    ~IRQNwkInfoObserver();
+    
+    /**
+     *  Creates IRQNwkInfoObserver instance
+     */
+    static IRQNwkInfoObserver* createInstanceL();
+    
+    void constructL();    
+    
+public:      
+    /*!
+     * From MIRQNwkInfoUpdate.
+     */  
+    void updateCurrentNwkInfo(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC);
+    
+    void updateHomeNwkInfo(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC);  
+    
+private:
+
+    IRQNwkInfoObserverImpl *iBody;
+    
+    int iSingletonInstances;    
+};
+
+#endif // IRQNWKINFOOBSERVER_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnwkinfoobserver/inc/irqnwkinfoobserverimpl.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2009-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:  class declaration for monitoring current network info change
+*
+*/
+
+
+#ifndef IRQNWKINFOOBSERVERIMPL_H_
+#define IRQNWKINFOOBSERVERIMPL_H_
+
+
+#include <e32base.h> // CActive
+#include <etel3rdparty.h> // CTelephony
+#include <QString>
+
+class MIRQNwkInfoUpdate;
+
+class IRQNwkInfoObserverImpl : public CActive
+{
+public:
+    static IRQNwkInfoObserverImpl* NewL(MIRQNwkInfoUpdate *aObserver);
+
+    /*!
+     * Destructor.
+     */
+    ~IRQNwkInfoObserverImpl();
+    
+    /*!
+     * starts network info monitoring
+     */
+    void startNwkInfoMonitor();    
+        
+private:
+    /*!
+     * Constructor
+     */
+    explicit IRQNwkInfoObserverImpl(MIRQNwkInfoUpdate *aObserver);
+    
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+private:
+  
+    /*!
+     * Issue Subsequent network monitoring request
+     */
+    void issueRequest();
+
+    /*!
+     * From CActive.
+     */
+    void DoCancel();
+    void RunL();
+    
+private:  
+
+    CTelephony* iTelephony;
+    
+    //Current Network
+    CTelephony::TNetworkInfoV1 iCurrentNetworkInfo;
+    CTelephony::TNetworkInfoV1Pckg iCurrentNetworkInfoV1Pckg;
+  
+    //Home Operator
+    CTelephony::TNetworkRegistrationV1 iHomeOperatorInfo;
+    CTelephony::TNetworkRegistrationV1Pckg iHomeOperatorInfoPckg;  
+      
+    QString iCurrentNwkMCC;
+    QString iCurrentNwkMNC;
+    
+    QString iHomeNetworkMCC;
+    QString iHomeNetworkMNC;    
+
+    bool iFirstTime;
+    bool iCurrentNetworkType;
+    bool iHomeNetworkType;
+  
+    MIRQNwkInfoUpdate *iObserver;
+};
+
+#endif // IRQNWKINFOOBSERVERIMPL_H_
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnwkinfoobserver/inc/irqnwkobserverinterface.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009-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:  interface for updating network info
+*
+*/
+
+
+#ifndef IRQNWKOBSERVERINTERFACE_H_
+#define IRQNWKOBSERVERINTERFACE_H_
+
+#include <QString>
+
+class MIRQNwkInfoUpdate
+{
+public:
+    virtual void updateCurrentNwkInfo(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC) = 0;
+    virtual void updateHomeNwkInfo(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC) = 0;
+};
+
+#endif // IRQNWKOBSERVERINTERFACE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnwkinfoobserver/irqnwkinfoobserver.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+
+TARGET = irqnwkinfoobserver
+TARGET.CAPABILITY = CAP_GENERAL_DLL ReadDeviceData
+
+MOC_DIR = moc
+DEPENDPATH += src
+
+INCLUDEPATH += inc
+
+symbian{
+  TARGET.UID3 = 0xe906e618
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+LIBS += -letel3rdparty
+
+# Input
+HEADERS += inc\irqnwkinfoobserver.h \
+           inc\irqnwkinfoobserverimpl.h \
+           inc\irqnwkobserverinterface.h
+
+SOURCES += irqnwkinfoobserver.cpp \
+           irqnwkinfoobserverimpl.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnwkinfoobserver/src/irqnwkinfoobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* 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 "irqnwkinfoobserver.h"
+#include "irqnwkinfoobserverimpl.h"
+
+// ---------------------------------------------------------------------------
+// IRQNwkInfoObserver::openInstance()
+// Static function to get a singleton instance of IRQNwkInfoObserver
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQNwkInfoObserver* IRQNwkInfoObserver::openInstance()
+{
+    // Get singleton instance
+    IRQNwkInfoObserver* nwkInfoObserver =
+                           reinterpret_cast<IRQNwkInfoObserver*>(Dll::Tls());
+
+    if(NULL == nwkInfoObserver)
+    {
+        TRAPD(error, nwkInfoObserver = createInstanceL());
+        if (KErrNone != error)
+        {
+            delete nwkInfoObserver;
+            nwkInfoObserver = NULL;
+            Dll::SetTls(NULL);
+        }
+    }
+    else
+    {
+        nwkInfoObserver->iSingletonInstances++;
+    }
+
+    return nwkInfoObserver;
+}
+
+// ---------------------------------------------------------------------------
+// IRQNwkInfoObserver::closeInstance()
+// Close a singleton instance of IRQNwkInfoObserver
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNwkInfoObserver::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+IRQNwkInfoObserver::IRQNwkInfoObserver():iBody(NULL),
+                                         iSingletonInstances(0)
+{
+    
+}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQNwkInfoObserver::~IRQNwkInfoObserver()
+{
+    stopMonitorNwkInfo();
+    
+    delete iBody;
+    iBody = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// IRQNwkInfoObserver::createInstanceL()
+// Creates IRQNwkInfoObserver instance
+// @return IRQNwkInfoObserver*
+// ---------------------------------------------------------------------------
+//
+IRQNwkInfoObserver* IRQNwkInfoObserver::createInstanceL()
+{
+    IRQNwkInfoObserver* nwkInfoObserver = new (ELeave) IRQNwkInfoObserver();
+    nwkInfoObserver->constructL();
+    User::LeaveIfError(Dll::SetTls(nwkInfoObserver));
+    nwkInfoObserver->iSingletonInstances = 1;
+
+    return nwkInfoObserver;
+}
+
+// ---------------------------------------------------------------------------
+// IRQNwkInfoObserver::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQNwkInfoObserver::constructL()
+{
+    iBody = IRQNwkInfoObserverImpl::NewL(this);
+}
+
+// ---------------------------------------------------------------------------
+// IRQNwkInfoObserver::startMonitorNwkInfo()
+// start monitoring network info change
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNwkInfoObserver::startMonitorNwkInfo()
+{
+    if(iBody)
+    {
+        iBody->startNwkInfoMonitor();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQNwkInfoObserver::stopMonitorNwkInfo()
+// stop monitoring network info change
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQNwkInfoObserver::stopMonitorNwkInfo()
+{
+    if(iBody)
+    {
+        iBody->Cancel();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// From MIRQNwkInfoUpdate.
+// ---------------------------------------------------------------------------
+//
+void IRQNwkInfoObserver::updateCurrentNwkInfo(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC)
+{
+    emit currentNwkChanged(aCurrentNwkMCC,aCurrentNwkMNC);
+}
+
+
+// ---------------------------------------------------------------------------
+// From MIRQNwkInfoUpdate.
+// ---------------------------------------------------------------------------
+//
+void IRQNwkInfoObserver::updateHomeNwkInfo(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC)
+{
+    emit homeNwkChanged(aHomeNetworkMCC,aHomeNetworkMNC);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqnwkinfoobserver/src/irqnwkinfoobserverimpl.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,227 @@
+/*
+* 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 "irqnwkinfoobserverimpl.h"
+#include "irqnwkobserverinterface.h"
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+IRQNwkInfoObserverImpl* IRQNwkInfoObserverImpl::NewL( MIRQNwkInfoUpdate *aObserver)
+{
+    IRQNwkInfoObserverImpl* self = new ( ELeave ) IRQNwkInfoObserverImpl( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+}
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+IRQNwkInfoObserverImpl::IRQNwkInfoObserverImpl(MIRQNwkInfoUpdate *aObserver) : CActive(EPriorityLow),
+                                                 iTelephony(NULL),
+                                                 iCurrentNetworkInfoV1Pckg(iCurrentNetworkInfo),
+                                                 iHomeOperatorInfoPckg(iHomeOperatorInfo),
+                                                 iFirstTime(true),
+                                                 iCurrentNetworkType(true),
+                                                 iHomeNetworkType(false),
+                                                 iObserver(aObserver)
+{
+}
+
+// ---------------------------------------------------------------------------
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQNwkInfoObserverImpl::ConstructL()
+{
+    iTelephony = CTelephony::NewL();
+    CActiveScheduler::Add(this);
+}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQNwkInfoObserverImpl::~IRQNwkInfoObserverImpl()
+{
+    Cancel();
+    delete iTelephony;
+    iTelephony = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// Function : IRQNwkInfoObserverImpl::startNwkInfoMonitor()
+// Function to start network monitoring
+// ---------------------------------------------------------------------------
+//
+
+void IRQNwkInfoObserverImpl::startNwkInfoMonitor()
+{
+    if(!IsActive() && iTelephony)
+    {
+        //get the current network info for the first time
+        iCurrentNetworkType = true;
+        iHomeNetworkType = false;
+        iTelephony->GetCurrentNetworkInfo(iStatus, iCurrentNetworkInfoV1Pckg);      
+        SetActive(); 
+    }  
+}
+
+// ---------------------------------------------------------------------------
+// Function : IRQNwkInfoObserverImpl::issueRequest()
+// Issue Subsequent network monitoring request
+// ---------------------------------------------------------------------------
+//
+
+void IRQNwkInfoObserverImpl::issueRequest()
+{
+    if(iCurrentNetworkType)
+    {
+        if(!IsActive() && iTelephony)
+        {
+            //notify if current operator changes
+            iTelephony->NotifyChange(iStatus,
+                    CTelephony::ECurrentNetworkInfoChange,
+                    iCurrentNetworkInfoV1Pckg);
+            SetActive();
+        }      
+    }
+    
+    if(iHomeNetworkType)
+    {
+        if(!IsActive() && iTelephony)
+        {
+            //notify if home operator changes
+            iTelephony->NotifyChange(iStatus,
+                      CTelephony::ENetworkRegistrationStatusChange,
+                      iHomeOperatorInfoPckg);
+            SetActive();
+        }  
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+// From CActive.
+// ---------------------------------------------------------------------------
+//
+void IRQNwkInfoObserverImpl::DoCancel()
+{
+    if(IsActive() && iTelephony)
+    {
+        //cancel the out standing requests if any
+        iTelephony->CancelAsync(CTelephony::ECurrentNetworkInfoChangeCancel);
+        iTelephony->CancelAsync(CTelephony::ENetworkRegistrationStatusChangeCancel);  
+        iTelephony->CancelAsync(CTelephony::EGetCurrentNetworkInfoCancel);
+        iTelephony->CancelAsync(CTelephony::EGetNetworkRegistrationStatusCancel);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// From CActive.
+// ---------------------------------------------------------------------------
+//
+void IRQNwkInfoObserverImpl::RunL()
+{  
+    if(KErrNone == iStatus.Int())
+    {    
+        if(iCurrentNetworkType)
+        {
+            //if the request was to find the current network changes
+            //then the value is updated
+          #ifdef __WINS__
+            iCurrentNwkMCC = "0";
+            iCurrentNwkMNC = "0";  
+          #else
+            iCurrentNwkMCC = QString::fromUtf16( iCurrentNetworkInfo.iCountryCode.Ptr(),
+                                            iCurrentNetworkInfo.iCountryCode.Length());
+            iCurrentNwkMNC = QString::fromUtf16( iCurrentNetworkInfo.iNetworkId.Ptr(),
+                                            iCurrentNetworkInfo.iNetworkId.Length());
+          #endif
+            //updating mcc+mnc value
+            if(iObserver)
+            {
+                iObserver->updateCurrentNwkInfo(iCurrentNwkMCC,iCurrentNwkMNC);
+            }
+            
+            iHomeNetworkType = ETrue;
+            iCurrentNetworkType = EFalse;
+            if(iFirstTime && iTelephony)
+            {
+                //if first time we have check the current operator is home operator
+                iTelephony->GetNetworkRegistrationStatus(iStatus,iHomeOperatorInfoPckg);      
+                SetActive();
+                iFirstTime = EFalse;
+            }
+            else
+            {
+                //else issue request is called for notifying home operator change
+                issueRequest();  
+            }      
+        }
+        else if(iHomeNetworkType)
+        {
+            //home operator (or the change in home operator is notified. 
+          #ifdef __WINS__
+            iHomeNetworkMCC = "0";
+            iHomeNetworkMNC = "0";
+            if(iObserver)
+            {            
+                iObserver->updateHomeNwkInfo(iHomeNetworkMCC,iHomeNetworkMNC);
+            }
+          #else
+            //if registration status shows that user is registered in home network
+            //and not in roaming status, the current operator is updated
+            if(CTelephony::ERegisteredOnHomeNetwork == iHomeOperatorInfo.iRegStatus)
+            {
+                iHomeNetworkMCC = iCurrentNwkMCC;
+                iHomeNetworkMNC = iCurrentNwkMNC;
+                if(iObserver)
+                {                    
+                    iObserver->updateHomeNwkInfo(iHomeNetworkMCC,iHomeNetworkMNC);
+                }
+            }
+          #endif
+                //issue request to find the current network change
+                iHomeNetworkType = EFalse;
+                iCurrentNetworkType = ETrue;
+                issueRequest();
+
+        }    
+        else
+        {
+            return;  
+        }
+    }
+    //if any error network is updated to zero    
+    else
+    {
+        iCurrentNwkMCC = "0";
+        iCurrentNwkMNC = "0";  
+        iHomeNetworkMCC = "0";
+        iHomeNetworkMNC = "0";
+        if(iObserver)
+        {
+            iObserver->updateCurrentNwkInfo(iCurrentNwkMCC,iCurrentNwkMNC);
+            iObserver->updateHomeNwkInfo(iHomeNetworkMCC,iHomeNetworkMNC);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsettings/inc/irqsettings.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* 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 IRQSETTINGS_H_
+#define IRQSETTINGS_H_
+
+#include <QString>
+#include <etelmm.h>
+
+#include "irqenums.h"
+#include "irviewdefinitions.h"
+
+enum TNetworkConnection
+{
+    EIRAlwaysAsk,
+    EIRDefaultConnection,
+    EIRDestination,
+    EIRConnectionMethod
+};
+
+class CIRSettings;
+
+/**
+ * This class provides the interface to IR settings component
+ *
+ * IRQSettings follows a singleton pattern
+ * hence the destructor is private and to destroy it we need to use an API
+ *
+ */
+
+class IRQSettings
+{
+public:
+
+    /**
+     *  Get the instance of IRQSettings
+     *  @return IRQSettings*
+     */
+    IMPORT_C static IRQSettings* openInstance();
+    IMPORT_C void closeInstance();
+
+    IMPORT_C bool isFlagCostWarning(bool& aFlag);
+    IMPORT_C void setFlagCostWarning();
+    IMPORT_C void reSetFlagCostWarning();
+    IMPORT_C bool isFlagTermsAndConditions(bool& aFlag);
+    IMPORT_C void setFlagTermsAndConditions();
+    IMPORT_C void reSetFlagTermsAndConditions();
+    IMPORT_C void setIrappVersion(const QString& aIRAppVersion);
+    IMPORT_C bool getIrappVersion(QString& aIrappVersion);
+
+    IMPORT_C void setIRID(const QString& aIrid);
+    IMPORT_C bool getIRID(QString& aIRID);
+    IMPORT_C bool getISDSBaseUrl(QString& aISDSBaseUrl);
+    IMPORT_C void setISDSBaseUrl(const QString& aIsdsUrl);
+    IMPORT_C int getVolumeSetting();
+    IMPORT_C void setVolumeSetting(int aPlayVolume);
+    IMPORT_C int getManuallyAddedChId();
+    IMPORT_C void setManuallyAddedChId();
+    IMPORT_C bool isUpdateAvailable(bool& aFlag);
+    IMPORT_C void setUpdateAvailable();
+    IMPORT_C void reSetUpdateAvailable();
+    IMPORT_C int getLogRunningNo();
+    IMPORT_C void setLogRunningNo();
+    IMPORT_C void setTimeOut(int aTimeOut);
+    IMPORT_C int getTimeOut();
+    IMPORT_C void setSilencePeriod(unsigned int aSilencePeriod);
+    IMPORT_C bool getSilencePeriod(unsigned int& aSilencePeriod);
+    IMPORT_C void setSilencePeriodStart(const QString& aSilencePeriodStart);
+    IMPORT_C bool getSilencePeriodStart(QString& aSilencePeriodStart);
+    IMPORT_C bool displayAccessPoint(bool& aFlag);
+    IMPORT_C void setDisplayAccessPoint();
+    IMPORT_C void reSetDisplayAccessPoint();
+    IMPORT_C void setBearerId(unsigned long aBearerId);
+    IMPORT_C bool getBearerId(unsigned long& aBearerId);
+    IMPORT_C void setNetworkId(unsigned long aBearerId);
+    IMPORT_C bool getNetworkId(unsigned long& aNetworkId);
+    IMPORT_C void setApId(unsigned long aBearerId);
+    IMPORT_C bool getApId(unsigned long& aApId);
+    IMPORT_C void setUserSavedApSettings( unsigned long aBearerId,unsigned long aNetworkId,unsigned long aApId);
+    IMPORT_C bool getUserSavedApSettings( unsigned long& aBearerId,
+                    unsigned long& aNetworkId,unsigned long& aApId);
+    IMPORT_C void setGPRSBitrateQuality(int aBitrate);
+    IMPORT_C int getGPRSBitrateQuality();
+    IMPORT_C void setWiFiBitrateQuality(int aBitrate);
+    IMPORT_C int getWiFiBitrateQuality();
+    IMPORT_C void set3GBitrateQuality(int aBitrate);
+    IMPORT_C int get3GBitrateQuality();
+    IMPORT_C void setMaxPresetCount(int aMaxCount);
+    IMPORT_C int maxPresetCount();
+    IMPORT_C void setTimeCorrection(int aCorrection);
+    IMPORT_C int timeCorrection();
+    IMPORT_C QString privatePath();
+    IMPORT_C void setStereoMode(int val);
+    IMPORT_C int getStereoMode();
+    IMPORT_C int getSongHistoryShow();
+    IMPORT_C void setSongHistoryShow(int aShowFlag);
+
+
+    //Methods to determine if any channel was added to favorites
+    IMPORT_C bool isFlagIfAnyFav(bool& aFlag);
+    IMPORT_C void setFlagIfAnyFav();
+
+    //Added for ALR/SNAP
+    /**
+     * setUserDefinedSelection()
+     * Sets the UserDefinedSelection in cenrep
+     */
+    IMPORT_C void setUserDefinedSelection(unsigned long aUserDefinedSelection);
+
+    /**
+     * getUserDefinedSelection()
+     * Gets the UserDefinedSelection from cenrep
+     */
+    IMPORT_C bool getUserDefinedSelection(TNetworkConnection& aSelection);
+
+    /**
+     * setDestinationId()
+     * Sets the DestinationId in cenrep
+     */
+    IMPORT_C void setDestinationId(unsigned long aDestinationId);
+
+    /**
+     * getDestinationId()
+     * Gets the DestinationId from cenrep
+     */
+    IMPORT_C bool getDestinationId(unsigned long& aDestinationId);
+
+    /**
+     * Returns the current saved subscriber identifier (IMSI code).
+     *
+     * @return  The saved subscriber identifier.
+     */
+    IMPORT_C bool subscriberId(RMobilePhone::TMobilePhoneSubscriberId& aIRMobilePhoneSubscriberId);
+
+    /**
+     * Sets the subscriber identifier (IMSI code).
+     *
+     * @param   Subscriber identifier to set.
+     */
+    IMPORT_C void setSubscriberId( const RMobilePhone::TMobilePhoneSubscriberId& aSubscriberId );
+    
+    /**
+     * setStartingViewId()
+     * Sets the starting view Id in cenrep
+     */
+    IMPORT_C void setStartingViewId(unsigned long aStartingViewId);
+
+    /**
+     * getStartingViewId()
+     * Gets the starting view Id from cenrep
+     */
+    IMPORT_C bool getStartingViewId(TIRViewId& aStartingViewId);
+
+    /**
+     * setStartingViewParameter()
+     * Sets the starting view parameter in cenrep
+     */
+    IMPORT_C void setStartingViewParameter(unsigned long aParameter);
+
+    /**
+     * getStartingViewParameter()
+     * Gets the starting view parameter from cenrep
+     */
+    IMPORT_C bool getStartingViewParameter(TIRViewParameter& aParameter);
+    
+    /**
+     * setStickyViewFlag()
+     * Sets the sticky view flag in cenrep
+     */
+    IMPORT_C void setStickyViewFlag(bool aFlag);
+
+    /**
+     * getStickyViewFlag()
+     * Gets the sticky view flag from cenrep
+     */
+    IMPORT_C bool getStickyViewFlag(bool& aFlag);
+    
+    /**
+     * setPreferredQuality()
+     * Sets the Preferred Quality in cenrep
+     */
+         
+    IMPORT_C void setPreferredQuality(IRQPreferredQuality aQualityValue);
+
+    /**
+     * getPreferredQuality()
+     * Gets the Preferred Quality from cenrep
+     */    
+    IMPORT_C IRQPreferredQuality getPreferredQuality() const;      
+
+    /**
+     * getGlobalAdvFlag()
+     * Gets the global adv flag from cenrep. True: enable NAE adv
+     */
+    IMPORT_C bool getGlobalAdvFlag(bool& aFlag);
+
+private:
+
+    /**
+     *  Default constructor must be private
+	 */
+    IRQSettings();
+
+    ~IRQSettings();
+
+    /**
+     *  Creates IRQSettings instance
+     */
+    static IRQSettings* createInstanceL();
+    
+    void constructL();
+
+private:
+
+    /**
+     *  IRQSettings singleton instance
+     */
+    CIRSettings* iSettings;
+
+    /**
+     * Number of objects currently referring to the singleton object IRQSettings
+     */
+    int iSingletonInstances;
+};
+
+#endif /* IRQSETTINGS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsettings/irqsettings.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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 = lib
+
+TARGET = irqsettings
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH += src
+
+INCLUDEPATH += inc \
+               ..\irqcommon\inc \
+               ..\..\internetradio2.0\settingsinc
+
+LIBS += -lirsettings
+
+symbian{
+  TARGET.UID3 = 0xe7437cbb
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+# Input
+HEADERS += inc\irqsettings.h
+SOURCES += irqsettings.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsettings/src/irqsettings.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,986 @@
+/*
+* 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 "irsettings.h"
+#include "irqsettings.h"
+
+// ---------------------------------------------------------------------------
+// IRQSettings::openInstance()
+// Static function to get a singleton instance of IRQSettings
+// @return IRQSettings *
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQSettings* IRQSettings::openInstance()
+{
+    // Get singleton instance
+    IRQSettings* irqsettings =
+                           reinterpret_cast<IRQSettings*>(Dll::Tls());
+
+    if (NULL == irqsettings)
+    {
+        TRAPD(error, irqsettings = createInstanceL());
+        if (KErrNone != error)
+        {
+            delete irqsettings;
+            irqsettings = NULL;
+            Dll::SetTls(NULL);
+        }
+    }
+    else
+    {
+        irqsettings->iSingletonInstances++;
+    }
+
+    return irqsettings;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::closeInstance()
+// Close a singleton instance of IRQSettings
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::isFlagCostWarning()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::isFlagCostWarning(bool& aFlag)
+{
+    TRAPD(error, aFlag = (bool)iSettings->IsFlagCostWarningL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setFlagCostWarning()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setFlagCostWarning()
+{
+    TRAP_IGNORE(iSettings->SetFlagCostWarningL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::reSetFlagCostWarning()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::reSetFlagCostWarning()
+{
+    TRAP_IGNORE(iSettings->ReSetFlagCostWarningL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::isFlagTermsAndConditions()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::isFlagTermsAndConditions(bool& aFlag)
+{
+    TRAPD(error, aFlag = (bool)iSettings->IsFlagTermsAndConditionsL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setFlagTermsAndConditions()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setFlagTermsAndConditions()
+{
+    TRAP_IGNORE(iSettings->SetFlagTermsAndConditionsL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::reSetFlagTermsAndConditions()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::reSetFlagTermsAndConditions()
+{
+    TRAP_IGNORE(iSettings->ReSetFlagTermsAndConditionsL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setIrappVersion()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setIrappVersion(const QString& aIRAppVersion)
+{
+    if (aIRAppVersion.length() > KMaxVersionName)
+    {
+        return;
+    }
+    
+    TPtrC irAppVersion(reinterpret_cast<const TUint16*>(aIRAppVersion.utf16()));
+    TRAP_IGNORE(iSettings->SetIrappVersionL(irAppVersion));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getIrappVersion()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getIrappVersion(QString& aAppVersion)
+{
+    TVersionName irAppVersion;
+    TRAPD(error, irAppVersion = iSettings->GetIrappVersionL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    aAppVersion = QString::fromUtf16(irAppVersion.Ptr(), irAppVersion.Length());
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setIRID()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setIRID(const QString& aIrid)
+{
+    TPtrC irid(reinterpret_cast<const TUint16*>(aIrid.utf16()));
+    TRAP_IGNORE(iSettings->SetIRIDL(irid));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getIRID()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getIRID(QString& aIRID)
+{
+    TDeviceInfo irid;
+    TRAPD(error, irid = iSettings->GetIRIDL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    aIRID = QString::fromUtf16(irid.Ptr(), irid.Length());
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getISDSBaseUrl()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getISDSBaseUrl(QString& aUrl)
+{
+    TPath isdsBaseUrl;
+    TRAPD(error, isdsBaseUrl = iSettings->GetISDSBaseUrlL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    aUrl = QString::fromUtf16(isdsBaseUrl.Ptr(), isdsBaseUrl.Length());
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setISDSBaseUrl()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setISDSBaseUrl(const QString& aIsdsUrl)
+{
+    TPtrC isdsUrl(reinterpret_cast<const TUint16*>(aIsdsUrl.utf16()));
+    TRAP_IGNORE(iSettings->SetISDSBaseUrlL(isdsUrl));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getVolumeSetting()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getVolumeSetting()
+{
+    return (int)iSettings->GetVolumeSetting();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setVolumeSetting()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setVolumeSetting(int aPlayVolume)
+{
+    TRAP_IGNORE(iSettings->SetVolumeSettingL((TInt)aPlayVolume));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getManuallyAddedChId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getManuallyAddedChId()
+{
+    return (int)iSettings->GetManuallyAddedChId();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setManuallyAddedChId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setManuallyAddedChId()
+{
+    TRAP_IGNORE(iSettings->SetManuallyAddedChIdL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::isUpdateAvailable()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::isUpdateAvailable(bool& aFlag)
+{
+    TRAPD(error, aFlag = (bool)iSettings->IsUpdateAvailableL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setUpdateAvailable()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setUpdateAvailable()
+{
+    TRAP_IGNORE(iSettings->SetUpdateAvailableL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::reSetUpdateAvailable()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::reSetUpdateAvailable()
+{
+    TRAP_IGNORE(iSettings->ReSetUpdateAvailableL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getLogRunningNo()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getLogRunningNo()
+{
+    return (int)iSettings->GetLogRunningNo();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setLogRunningNo()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setLogRunningNo()
+{
+    TRAP_IGNORE(iSettings->SetLogRunningNoL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setTimeOut()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setTimeOut(int aTimeOut)
+{
+    TRAP_IGNORE(iSettings->SetTimeOutL((TInt)aTimeOut));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getTimeOut()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getTimeOut()
+{
+    return (int)iSettings->GetTimeOut();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setSilencePeriod()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setSilencePeriod(unsigned int aSilencePeriod)
+{
+    TRAP_IGNORE(iSettings->SetSilencePeriodL((TUint)aSilencePeriod));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getSilencePeriod()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getSilencePeriod(unsigned int& aPeriod)
+{
+    TRAPD(error, aPeriod = iSettings->GetSilencePeriodL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+    return false;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setSilencePeriodStart()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setSilencePeriodStart(const QString& aSilencePeriodStart)
+{
+    if( aSilencePeriodStart.length() > KMaxLengthSilencePeriod )
+    { 
+        return;
+    }
+    
+    TPtrC silencePeriodStart(reinterpret_cast<const TUint16*>(aSilencePeriodStart.utf16()));
+    TRAP_IGNORE(iSettings->SetSilencePeriodStartL(silencePeriodStart));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getSilencePeriodStart()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getSilencePeriodStart(QString& aPeriodStart)
+{
+    TBuf<KMaxLengthSilencePeriod> silencePeriodStart;
+    TRAPD(error, silencePeriodStart = iSettings->GetSilencePeriodStartL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    aPeriodStart = QString::fromUtf16(silencePeriodStart.Ptr(), silencePeriodStart.Length());
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::displayAccessPoint()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::displayAccessPoint(bool& aFlag)
+{
+    TRAPD(error, aFlag = (bool)iSettings->DisplayAccessPointL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setDisplayAccessPoint()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setDisplayAccessPoint()
+{
+    TRAP_IGNORE(iSettings->SetDisplayAccessPointL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::reSetDisplayAccessPoint()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::reSetDisplayAccessPoint()
+{
+    TRAP_IGNORE(iSettings->ReSetDisplayAccessPointL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setBearerId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setBearerId(unsigned long aBearerId)
+{
+    TRAP_IGNORE(iSettings->SetBearerIdL((TUint32)aBearerId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getBearerId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getBearerId(unsigned long& aBearerId)
+{
+    TRAPD(error, aBearerId = iSettings->GetBearerIdL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setNetworkId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setNetworkId(unsigned long aBearerId)
+{
+    TRAP_IGNORE(iSettings->SetNetworkIdL((TUint32)aBearerId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getNetworkId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getNetworkId(unsigned long& aNetworkId)
+{
+    TRAPD(error, aNetworkId = iSettings->GetNetworkIdL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setApId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setApId(unsigned long aBearerId)
+{
+    TRAP_IGNORE(iSettings->SetApIdL((TUint32)aBearerId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getApId()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getApId(unsigned long& aApId)
+{
+    TRAPD(error, aApId = iSettings->GetApIdL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setUserSavedApSettings()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setUserSavedApSettings(unsigned long aBearerId,
+                               unsigned long aNetworkId,unsigned long aApId)
+{
+    TRAP_IGNORE(iSettings->SetUserSavedApSettingsL((TUint32)aBearerId,
+                (TUint32)aNetworkId, (TUint32)aApId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getUserSavedApSettings()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getUserSavedApSettings(unsigned long& aBearerId,
+                    unsigned long& aNetworkId,unsigned long& aApId)
+{
+    TRAPD(error, iSettings->GetUserSavedApSettingsL(aBearerId, aNetworkId, aApId));
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setGPRSBitrateQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setGPRSBitrateQuality(int aBitrate)
+{
+    TRAP_IGNORE(iSettings->SetGPRSBitrateQualityL((TInt)aBitrate));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getGPRSBitrateQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getGPRSBitrateQuality()
+{
+    return (int)iSettings->GetGPRSBitrateQuality();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setWiFiBitrateQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setWiFiBitrateQuality(int aBitrate)
+{
+    TRAP_IGNORE(iSettings->SetWiFiBitrateQualityL((TInt)aBitrate));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getWiFiBitrateQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getWiFiBitrateQuality()
+{
+    return (int)iSettings->GetWiFiBitrateQuality();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::set3GBitrateQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::set3GBitrateQuality(int aBitrate)
+{
+    TRAP_IGNORE(iSettings->Set3GBitrateQualityL((TInt)aBitrate));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::get3GBitrateQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::get3GBitrateQuality()
+{
+    return (int)iSettings->Get3GBitrateQuality();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setMaxPresetCount()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setMaxPresetCount(int aMaxCount)
+{
+    TRAP_IGNORE(iSettings->SetMaxPresetCountL((TInt)aMaxCount));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::maxPresetCount()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::maxPresetCount()
+{
+    return (int)iSettings->MaxPresetCount();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setTimeCorrection()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setTimeCorrection(int aCorrection)
+{
+    TRAP_IGNORE(iSettings->SetTimeCorrectionL((TInt)aCorrection));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::timeCorrection()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::timeCorrection()
+{
+    return (int)iSettings->TimeCorrection();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::timeCorrection()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C QString IRQSettings::privatePath()
+{
+    TPath privatePath = iSettings->PrivatePath();
+
+    return QString::fromUtf16(privatePath.Ptr(), privatePath.Length());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setStereoMode()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setStereoMode(int val)
+{
+    TRAP_IGNORE(iSettings->SetStereoModeL((TInt)val));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getStereoMode()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSettings::getStereoMode()
+{
+    return (int)iSettings->GetStereoMode();
+}
+
+EXPORT_C void IRQSettings::setSongHistoryShow(int aShowFlag)
+{
+    TRAP_IGNORE(iSettings->SetSongHisotryShowL(aShowFlag));
+}
+
+EXPORT_C int IRQSettings::getSongHistoryShow()
+{                     
+    return iSettings->GetSongHistoryShow();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::isFlagIfAnyFav()
+// Methods to determine if any channel was added to favorites
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::isFlagIfAnyFav(bool& aFlag)
+{
+    TRAPD(error, aFlag = iSettings->IsFlagIfAnyFavL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setFlagIfAnyFav()
+// Methods to determine if any channel was added to favorites
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setFlagIfAnyFav()
+{
+    TRAP_IGNORE(iSettings->SetFlagIfAnyFavL());
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setUserDefinedSelection()
+// Added for ALR/SNAP. Sets the UserDefinedSelection in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setUserDefinedSelection(unsigned long aUserDefinedSelection)
+{
+    TRAP_IGNORE(iSettings->SetUserDefinedSelectionL((TUint32)aUserDefinedSelection));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getUserDefinedSelection()
+// Added for ALR/SNAP. Gets the UserDefinedSelection from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getUserDefinedSelection(TNetworkConnection& aSelection)
+{
+    TUint32 selection = 0;
+    TRAPD(error, selection = iSettings->GetUserDefinedSelectionL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    aSelection = (TNetworkConnection)selection;
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setDestinationId()
+// Added for ALR/SNAP. Sets the DestinationId in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setDestinationId(unsigned long aDestinationId)
+{
+    TRAP_IGNORE(iSettings->SetDestinationIdL((TUint32)aDestinationId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getDestinationId()
+// Added for ALR/SNAP. Gets the DestinationId from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getDestinationId(unsigned long& aDestinationId)
+{
+    TRAPD(error, aDestinationId = iSettings->GetDestinationIdL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::subscriberId()
+// Returns the current saved subscriber identifier (IMSI code).
+// @return  The saved subscriber identifier.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::subscriberId(RMobilePhone::TMobilePhoneSubscriberId& aIRMobilePhoneSubscriberId)
+{
+    TRAPD(error, aIRMobilePhoneSubscriberId = iSettings->SubscriberIdL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setSubscriberId()
+// Sets the subscriber identifier (IMSI code).
+// @param   Subscriber identifier to set.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setSubscriberId(const RMobilePhone::TMobilePhoneSubscriberId& aSubscriberId)
+{
+    if( aSubscriberId.Length() > RMobilePhone::KIMSISize )
+    {
+        return;
+    }
+    
+    TRAP_IGNORE(iSettings->SetSubscriberIdL(aSubscriberId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setStartingViewId()
+// Sets the starting view Id in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setStartingViewId(unsigned long aStartingViewId)
+{
+    TRAP_IGNORE(iSettings->SetStartingViewIdL((TUint32)aStartingViewId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getStartingViewId()
+// Gets the starting view Id from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getStartingViewId(TIRViewId& aStartingViewId)
+{
+    TUint32 startingViewId = 0;
+    TRAPD(error, startingViewId = iSettings->GetStartingViewIdL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+	aStartingViewId = (TIRViewId)startingViewId;
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setStartingViewParameter()
+// Sets the starting view parameter in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setStartingViewParameter(unsigned long aParameter)
+{
+    TRAP_IGNORE(iSettings->SetStartingViewParameterL((TUint32)aParameter));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getStartingViewParameter()
+// Gets the starting view parameter from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getStartingViewParameter(TIRViewParameter& aParameter)
+{
+    TUint32 parameter = 0;
+    TRAPD(error, parameter = iSettings->GetStartingViewParameterL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    aParameter = (TIRViewParameter)parameter;
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setStickyViewFlag()
+// Sets the sticky view flag in cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setStickyViewFlag(bool aFlag)
+{
+    TRAP_IGNORE(iSettings->SetStickyViewFlagL(aFlag));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getStickyViewFlag()
+// Gets the sticky view flag from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getStickyViewFlag(bool& aFlag)
+{
+    TRAPD(error, aFlag = iSettings->GetStickyViewFlagL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+
+// ---------------------------------------------------------------------------
+// IRQSettings::setPreferredQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSettings::setPreferredQuality(IRQPreferredQuality aQualityValue)
+{
+    TInt value = 0;
+    switch(aQualityValue)
+    {
+        case EIRQHighQuality:
+            value = 1;
+            break;
+		default:
+            break;
+    }
+        
+    TRAP_IGNORE(iSettings->SetPreferredQualityL(value));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getPreferredQuality()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQPreferredQuality IRQSettings::getPreferredQuality() const
+{
+    TInt value = iSettings->GetPreferredQuality();
+    switch(value)
+    {
+        case 1:
+            return EIRQHighQuality;
+        default:
+            return EIRQStandardQuality;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::getGlobalAdvFlag()
+// Gets the global advertisement flag from cenrep
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQSettings::getGlobalAdvFlag(bool& aFlag)
+{
+    TRAPD(error, aFlag = iSettings->GetGlobalAdvFlagL());
+    if (KErrNone != error)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::IRQSettings()
+// Constructor
+// ---------------------------------------------------------------------------
+//
+IRQSettings::IRQSettings()
+{
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::~IRQSettings()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQSettings::~IRQSettings()
+{
+    if (iSettings)
+    {
+        iSettings->Close();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::createInstanceL()
+// Creates IRQSettings instance
+// @return IRQSettings*
+// ---------------------------------------------------------------------------
+//
+IRQSettings* IRQSettings::createInstanceL()
+{
+    IRQSettings* irqsettings = new (ELeave) IRQSettings();
+    irqsettings->constructL();
+    User::LeaveIfError(Dll::SetTls(irqsettings));
+    irqsettings->iSingletonInstances = 1;
+
+    return irqsettings;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSettings::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQSettings::constructL()
+{
+    // Get singleton instance
+    iSettings = CIRSettings::OpenL();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsonghistory/inc/irqsonghistoryengine.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,139 @@
+/*
+* 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 IRQSONGHISTORYENGINE_H_
+#define IRQSONGHISTORYENGINE_H_
+
+#include <QObject>
+
+class IRQMetaData;
+class IRQPreset;
+class IRQSongHistoryInfo;
+class CIRSongHistoryDb;
+class IRQSongInfo;
+
+/**
+* Engine component for Internet Radio SongHistory.
+*/
+class IRQSongHistoryEngine : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    IMPORT_C static IRQSongHistoryEngine* openInstance();
+    IMPORT_C void closeInstance();
+
+    /**
+    * Get all history from daba base
+    * @param    QList<IRQSongHistoryInfo *>
+    */
+    IMPORT_C void getAllHistory(QList<IRQSongHistoryInfo *>& aSongHistoryArr);
+    
+    /**
+     * this is songs' get, the above will be changed to the stations only
+     */
+    IMPORT_C void getAllSongHistory(QList<IRQSongInfo *>& aSongHistoryArr);
+
+    /**
+    * Clear all history in data base
+    */
+    IMPORT_C int clearAllHistory();
+    
+    IMPORT_C int clearAllSongHistory();
+
+    /**
+    * Called by the UI when a particular channel has been removed from the ISDS.
+    */
+    IMPORT_C void syncHistory(int aChannelId);
+
+    /**
+    * Called by the UI when a particular channel has been changed in the ISDS.
+    */
+
+    IMPORT_C void updateSongHistoryDb(int aChannelId,
+                                      const QString& aChannelName,
+                                      const QString& aChannelUrl,
+                                      const QString& aImageUrl,
+                                      const QString& aMusicFlag);
+
+    /**
+    * Connected with play controller with the song name changed.
+    * @param    aMetaData   The meta data contains song name, artist and bitrate.
+    * @param    aPreset     The preset contains other information.
+    */
+    IMPORT_C void handleMetaDataReceived(const IRQMetaData& aMetaData, const IRQPreset& aPreset);
+    /**
+    * Connected with play controller with the song name changed.
+    * @param    aMetaData   The meta data contains song name, artist and bitrate.
+    * @param    aMusicshopStatus     The music shop status of the song
+    */
+    IMPORT_C void handleSongMetaDataReceived(const IRQMetaData& aMetaData, QString& aMusicshopStatus);
+    
+    /*
+     * delete one item from the station history db
+     * @param   aIndex    the index of the item need deleted
+     */
+    IMPORT_C bool deleteOneItem(int aIndex);
+
+private:
+
+    enum TSongHistoryItemChange
+    {
+        ENOCHANGE = 0,
+        ECHANNELCHANGED,
+        EMETADATACHANGED,
+        EBLANKENTRIES
+    };
+
+private:
+
+    /**
+     *  Creates IRQSongHistoryEngine instance
+     */
+    static IRQSongHistoryEngine* createInstanceL();
+    
+    void constructL();
+
+    /**
+    * Constructor.
+    */
+    IRQSongHistoryEngine();
+
+    /**
+    * Destructor.
+    */
+    ~IRQSongHistoryEngine();
+    
+    TSongHistoryItemChange detectSongHistoryItemChangesL(const IRQMetaData& aMetaData, const QString& aChannelName);
+    
+    void handleMetaDataReceivedL(const IRQMetaData& aMetaData, const IRQPreset& aPreset);
+	void getAllHistoryL(QList<IRQSongHistoryInfo *>& aSongHistoryArr);
+	void handleSongMetaDataReceivedL(const IRQMetaData& aMetaData, QString& aMusicshopStatus);
+    void getAllSongHistoryL(QList<IRQSongInfo *>& aSongHistoryArr);
+
+private:
+
+    /** An instance of songhistory database. */
+    CIRSongHistoryDb* iSongHistoryDb;
+
+    /**
+     * Number of objects currently referring to the singleton object IRQSongHistoryEngine
+     */
+    int iSingletonInstances;
+};
+
+#endif //IRQSONGHISTORYENGINE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsonghistory/inc/irqsonghistoryinfo.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* 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 IRQSONGHISTORYINFO_H_
+#define IRQSONGHISTORYINFO_H_
+
+#include <QString>
+
+/**
+ * SongHistory meta data information wrapper.
+ */
+class IRQSongHistoryInfo
+{
+public:
+
+    /**
+     * Default constructor.
+     */
+    IMPORT_C IRQSongHistoryInfo();
+
+    /**
+    *IRQSongHistoryInfo::~IRQSongHistoryInfo()
+    *standard C++ destructor
+    */
+    IMPORT_C ~IRQSongHistoryInfo();
+
+    /**
+    *IRQSongHistoryInfo::getArtistName()
+    *Function to get artist name from a TDesC
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getArtistName() const;
+
+    /**
+    *IRQSongHistoryInfo::getSongName()
+    *Function to get song name from a TDesC
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getSongName() const;
+
+    /**
+    *IRQSongHistoryInfo::getStreamUrl()
+    *Function to get url name from a TDesC
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getStreamUrl() const;
+
+    /**
+    *IRQSongHistoryInfo::getChannelName()
+    *Function to get channel name from a TDesC
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getChannelName() const;
+
+    /**
+    *IRQSongHistoryInfo::getChannelDesc()
+    *Function to get channel Description
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getChannelDesc() const;
+
+    /**
+    *IRQSongHistoryInfo::getImageURL()
+    *Function to get channel image URL
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getImageUrl() const;
+
+    /**
+    *IRQSongHistoryInfo::getMusicStoreStatus()
+    *Function to get channel MusicStoreStatus
+    *@return QString& instance
+    */
+    IMPORT_C const QString& getMusicStoreStatus() const;
+
+    /**
+    *IRQSongHistoryInfo::getChannelType()
+    *Function to get channel Type
+    *@return int channeltype
+    */
+    IMPORT_C  int getChannelType() const;
+
+    /**
+    *IRQSongHistoryInfo::getChannelId()
+    *Function to get channel Id
+    *@return int channelId
+    */
+    IMPORT_C  int getChannelId() const;
+
+    /**
+    *IRQSongHistoryInfo::getBitrate()
+    *Function to get channel bitrate
+    *@return int bitrate
+    */
+    IMPORT_C  int getBitrate() const;
+
+    /**
+    *IRQSongHistoryInfo::setHistoryInfoL()
+    *Function to set songhistory info
+    */
+    void setHistoryInfo(const QString& aArtistName,
+                        const QString& aSongName,
+                        const QString& aStreamUrl,
+                        const QString& aChannelName,
+                        const QString& aChannelDesc,
+                        const QString& aImageUrl,
+                        const QString& aMusicStoreStatus, 
+                        int aChannelType,
+                        int aChannelId,
+                        int aBitrate);
+
+    /**
+    *IRQSongHistoryInfo::setArtistName()
+    *Function to set artist name from a QString
+    *@param QString aArtistName
+    */
+    void setArtistName(const QString& aArtistName);
+
+    /**
+    *IRQSongHistoryInfo::setSongName()
+    *Function to set song name from a QString
+    *@param QString aSongName
+    */
+    void setSongName (const QString& aSongName);
+
+    /**
+    *IRQSongHistoryInfo::setStreamUrl()
+    *Function to set stream url from a QString
+    *@param QString aStreamUrl
+    */
+    void setStreamUrl(const QString& aStreamUrl);
+
+    /**
+    *IRQSongHistoryInfo::setChannelName()
+    *Function to set channel name from a QString
+    *@param QString aChannelName
+    */
+    void setChannelName(const QString& aChannelName);
+
+    /**
+    *IRQSongHistoryInfo::setChannelDesc()
+    *Function to set channel Description
+    * @param QString aChannelDesc
+    */
+    void setChannelDesc(const QString& aChannelDesc);
+
+    /**
+    *IRQSongHistoryInfo::setImageURL()
+    *Function to set channel image URL
+    * @param QString aImageUrl
+    */
+    void setImageUrl(const QString& aImageUrl);
+
+    /**
+    *IRQSongHistoryInfo::setMusicStoreStatus()
+    *Function to set Channel MusicStoreStatus
+    *@param QString aMusicStoreStatus
+    */
+    void setMusicStoreStatus(const QString& aMusicStoreStatus);
+
+    /**
+    *IRQSongHistoryInfo::setChannelType()
+    *Function to set channel Type
+    *@param int aChannelType
+    */
+    void setChannelType(int aChannelType);
+
+    /**
+    *IRQSongHistoryInfo::setChannelId()
+    *Function to set channel Id
+    *@param int aChannelId
+    */
+    void setChannelId(int aChannelId);
+
+    /**
+    *IRQSongHistoryInfo::setBitrate()
+    *Function to set channel bitrate
+    *@param int aBitrate
+    */
+    void setBitrate(int aBitrate);
+
+private:
+
+    /**
+     * The name of the artist.
+     */
+    QString iArtistName;
+
+    /**
+     * The name of the song.
+     */
+    QString iSongName;
+
+    /**
+     * The stream URL.
+     */
+    QString iStreamUrl;
+
+    /**
+     * Channel Name.
+     */
+    QString iChannelName;
+
+    /**
+     * Channel Description.
+     */
+    QString iChannelDescription;
+
+    /**
+     * Channel's image Url.
+     */
+    QString iImageUrl;
+
+    /**
+     * Channel's MusicStoreStatus.
+     */
+    QString iMusicStoreStatus;
+
+    /**
+     * Channel Type.
+     */
+    int iChannelType;
+
+    /**
+     * Channel Id.
+     */
+    int iChannelId;
+
+    /**
+     * Channel bitrate.
+     */
+    int iBitrate;
+};
+
+class IRQSongInfo
+{
+public:
+  
+    
+    IMPORT_C void setSongName(const QString& aName);
+    IMPORT_C const QString& getSongName() const;
+    
+    IMPORT_C void setArtistName(const QString& aArtist);
+    IMPORT_C const QString& getArtistName()const;
+    
+    IMPORT_C void setMusicshopStatus(const QString& aStatus);
+    IMPORT_C const QString& getMusicshopStatus()const;
+    
+    IMPORT_C void setAllInfo(const QString& aName, const QString& aArtist, const QString& aStatus);
+    
+private:
+    
+    QString iSongName;
+    QString iSongArtist;
+    QString iMusicshopStatus;
+
+};
+#endif // IRQSONGHISTORYINFO_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsonghistory/irqsonghistory.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+TARGET = irqsonghistory
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+DEPENDPATH += src ..\..\internetradio2.0\songhistorysrc
+LIBS += -lbafl -ledbms -lefsrv -lirsettings -lflogger
+
+INCLUDEPATH += inc \
+               ..\irqmediaplayer\inc \
+               ..\irqcommon\inc \
+               ..\..\internetradio2.0\songhistoryinc \
+               ..\..\internetradio2.0\settingsinc \
+               ..\..\internetradio2.0\include
+
+MOC_DIR = moc
+
+symbian{
+  TARGET.UID3 = 0xe009dfe1
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+# Input
+HEADERS += inc\irqsonghistoryengine.h \
+           inc\irqsonghistoryinfo.h
+
+SOURCES += irqsonghistoryengine.cpp \
+           irqsonghistoryinfo.cpp \
+           irsonghistorydb.cpp \
+           irsonghistoryinfo.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsonghistory/src/irqsonghistoryengine.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,482 @@
+/*
+* 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 "irsonghistoryinfo.h"
+#include "irsonghistorydb.h"
+#include "irqsonghistoryinfo.h"
+#include "irqisdsdatastructure.h"
+#include "irqmetadata.h"
+#include "irqsonghistoryengine.h"
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::openInstance()
+// Static function to get a singleton instance of IRQSongHistoryEngine
+// @return IRQSongHistoryEngine *
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQSongHistoryEngine* IRQSongHistoryEngine::openInstance()
+{
+    // Get singleton instance
+    IRQSongHistoryEngine* irqSongHistoryEngine =
+                           reinterpret_cast<IRQSongHistoryEngine*>(Dll::Tls());
+
+    if (NULL == irqSongHistoryEngine)
+    {
+        TRAPD(error, irqSongHistoryEngine = createInstanceL());
+        if (KErrNone != error)
+        {
+            delete irqSongHistoryEngine;
+            irqSongHistoryEngine = NULL;
+            Dll::SetTls(NULL);
+        }
+    }
+    else
+    {
+        irqSongHistoryEngine->iSingletonInstances++;
+    }
+
+    return irqSongHistoryEngine;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::closeInstance()
+// Close a singleton instance of IRQSongHistoryEngine
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSongHistoryEngine::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::createInstanceL()
+// Creates IRQSongHistoryEngine instance
+// @return IRQSongHistoryEngine*
+// ---------------------------------------------------------------------------
+//
+IRQSongHistoryEngine* IRQSongHistoryEngine::createInstanceL()
+{
+    IRQSongHistoryEngine* irqSongHistoryEngine = new (ELeave) IRQSongHistoryEngine();
+    irqSongHistoryEngine->constructL();
+    User::LeaveIfError(Dll::SetTls(irqSongHistoryEngine));
+    irqSongHistoryEngine->iSingletonInstances = 1;
+
+    return irqSongHistoryEngine;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryEngine::constructL()
+{
+    iSongHistoryDb = CIRSongHistoryDb::NewL();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::IRQSongHistoryEngine()
+// standard C++ Constructor
+// ---------------------------------------------------------------------------
+//
+IRQSongHistoryEngine::IRQSongHistoryEngine()
+{
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::~IRQSongHistoryEngine()
+// standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+IRQSongHistoryEngine::~IRQSongHistoryEngine()
+{
+    delete iSongHistoryDb;
+    iSongHistoryDb = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::handleMetaDataReceivedL()
+// Invoked when channel name or song & artist name are changed.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQSongHistoryEngine::handleMetaDataReceived(const IRQMetaData& aMetaData,
+        const IRQPreset& aPreset)
+{
+    TRAPD(error, handleMetaDataReceivedL(aMetaData, aPreset));
+    if (KErrNone != error)
+    {
+        
+    }
+}
+
+EXPORT_C void IRQSongHistoryEngine::handleSongMetaDataReceived(const IRQMetaData& aMetaData,
+        QString& aMusicshopStatus)
+{
+    TRAPD(error, handleSongMetaDataReceivedL(aMetaData,aMusicshopStatus));
+    if (KErrNone != error)
+    {        
+    }
+}
+
+EXPORT_C void IRQSongHistoryEngine::handleSongMetaDataReceivedL(const IRQMetaData& aMetaData,
+        QString& aMusicshopStatus)
+{
+    TPtrC songName(reinterpret_cast<const TUint16*>(aMetaData.getSongName().utf16()), aMetaData.getSongName().length());
+    TPtrC artistName(reinterpret_cast<const TUint16*>(aMetaData.getArtistName().utf16()), aMetaData.getArtistName().length());    
+    TPtrC musicFlag(reinterpret_cast<const TUint16*>(aMusicshopStatus.utf16()), aMusicshopStatus.length());    
+    TBool bExceededMax = iSongHistoryDb->AddToSongHistoryDb2L(songName,
+                             artistName,
+                             musicFlag);                            
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::handleMetaDataReceivedL()
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryEngine::handleMetaDataReceivedL(const IRQMetaData& aMetaData,
+        const IRQPreset& aPreset)
+{
+    // Read Channel properties
+    TPtrC songName(reinterpret_cast<const TUint16*>(aMetaData.getSongName().utf16()), aMetaData.getSongName().length());
+    TPtrC artistName(reinterpret_cast<const TUint16*>(aMetaData.getArtistName().utf16()), aMetaData.getArtistName().length());
+    TPtrC channelUrl(reinterpret_cast<const TUint16*>(aMetaData.getStreamUrl().utf16()), aMetaData.getStreamUrl().length());
+    TPtrC channelName(reinterpret_cast<const TUint16*>(aPreset.name.utf16()), aPreset.name.length());
+    TPtrC channelDesc(reinterpret_cast<const TUint16*>(aPreset.description.utf16()), aPreset.description.length());
+    TPtrC imageUrl(reinterpret_cast<const TUint16*>(aPreset.imgUrl.utf16()), aPreset.imgUrl.length());
+    TPtrC musicFlag(reinterpret_cast<const TUint16*>(aPreset.musicStoreStatus.utf16()), aPreset.musicStoreStatus.length());
+    TUint8 channelType = aPreset.type;
+    TUint16 channelId = aPreset.presetId;
+    TUint16 bitrate = aMetaData.getBitrate();
+
+    if (channelType == 1)
+    {
+        TInt ret = iSongHistoryDb->GetIdPresentInDbL( channelId );
+        if(ret)
+        {
+            TInt modified = iSongHistoryDb->UpdateSongHistoryDbL( channelId ,
+                       channelName ,channelUrl ,imageUrl ,musicFlag);   
+            // TODO notify uplayer to change layout?
+        }
+    }
+    else if (channelType != 0)
+    {
+        // the channel type can only be 1 (isds channel) or 0 (user defined channel)
+        channelType = 0;
+    }
+    
+    iSongHistoryDb->SearchAndDeleteRecordL(channelName, channelUrl, channelType);
+    
+	RBuf delSongName;
+	delSongName.CleanupClosePushL();
+	RBuf delArtistName;
+	delArtistName.CleanupClosePushL();
+	RBuf delChannelName;
+	delChannelName.CleanupClosePushL();
+	RBuf delChannelUrl;
+	delChannelUrl.CleanupClosePushL();
+    TBool bExceededMax = iSongHistoryDb->AddToSongHistoryDbL(songName,
+                         artistName,
+                         channelName,
+                         channelUrl,
+                         delSongName,
+                         delArtistName,
+                         delChannelName,
+                         delChannelUrl ,
+                         channelType,
+                         channelId,
+                         bitrate,
+                         channelDesc,
+                         imageUrl,
+                         musicFlag);
+
+    CleanupStack::PopAndDestroy(4, &delSongName);
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::detectSongHistoryItemChangesL()
+// To detect any change in the song history items.
+// ---------------------------------------------------------------------------
+//
+IRQSongHistoryEngine::TSongHistoryItemChange IRQSongHistoryEngine::detectSongHistoryItemChangesL(
+        const IRQMetaData& aMetaData, const QString& aChannelName)
+{
+	if(aChannelName.length() == 0)
+	{
+		return EBLANKENTRIES;
+	}
+
+	RBuf song;
+	song.CleanupClosePushL();
+	RBuf artist;
+	artist.CleanupClosePushL();
+	RBuf channel;
+	channel.CleanupClosePushL();
+	RBuf url;
+	url.CleanupClosePushL();
+
+	iSongHistoryDb->GetLastHistoryItemL(song, artist, channel, url);
+
+	TSongHistoryItemChange retval = ENOCHANGE;
+
+    QString tmpsong = QString::fromUtf16(song.Ptr(), song.Length());
+    QString tmpartist = QString::fromUtf16(artist.Ptr(), artist.Length());
+    QString tmpchannel = QString::fromUtf16(channel.Ptr(), channel.Length());
+    QString tmpurl = QString::fromUtf16(url.Ptr(), url.Length());
+	if (tmpsong == aMetaData.getSongName() && tmpartist == aMetaData.getArtistName()
+	       && tmpchannel == aChannelName && tmpurl == aMetaData.getStreamUrl())
+	{
+		retval = ENOCHANGE;
+	}
+	else
+	{
+		retval = ECHANNELCHANGED;
+	}
+
+    CleanupStack::PopAndDestroy(4, &song);
+
+	return retval;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::getAllHistory
+// Invoked when when UI request.
+// Getting the data from SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+EXPORT_C void IRQSongHistoryEngine::getAllHistory(QList<IRQSongHistoryInfo *>& aSongHistoryArr)
+{
+    TRAP_IGNORE(getAllHistoryL(aSongHistoryArr));
+}
+
+EXPORT_C void IRQSongHistoryEngine::getAllSongHistory(QList<IRQSongInfo *>& aSongHistoryArr)
+{
+    TRAP_IGNORE(getAllSongHistoryL(aSongHistoryArr));
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::getAllHistoryL
+// Invoked when when UI request.
+// Getting the data from SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+void IRQSongHistoryEngine::getAllHistoryL(QList<IRQSongHistoryInfo *>& aSongHistoryArr)
+{
+    // clear the array
+    while (!aSongHistoryArr.isEmpty())
+    {
+        delete aSongHistoryArr.takeFirst();
+    }
+
+    int songCount = iSongHistoryDb->CountSongHistoryDb();
+
+    if (songCount == 0)
+    {
+        return;
+    }
+
+    // get song history list
+    RPointerArray<CIRSongHistoryInfo> historyDataArr;
+    for (int arrCount = 0 ; arrCount < songCount ; arrCount++ )
+    {
+        CIRSongHistoryInfo *songHistory = CIRSongHistoryInfo::NewL();
+        CleanupStack::PushL(songHistory);
+        historyDataArr.AppendL(songHistory);
+        CleanupStack::Pop(songHistory);
+    }
+
+    iSongHistoryDb->GetAllSongHistoryListL(historyDataArr);
+
+    // create IRQSongHistoryInfo array and set
+    QString songName;
+    QString artist;
+    QString streamUrl;
+    QString channelName;
+    int channelType;
+    int channelId;
+    int bitrate;
+    QString channelDesc;
+    QString imageUrl;
+    QString musicStoreStatus;
+    for (int arrCount = 0 ; arrCount < songCount ; arrCount++ )
+    {
+        songName = QString::fromUtf16(historyDataArr[arrCount]->GetSongInfo().Ptr(),
+                             historyDataArr[arrCount]->GetSongInfo().Length());
+        artist = QString::fromUtf16(historyDataArr[arrCount]->GetArtistInfo().Ptr(),
+                             historyDataArr[arrCount]->GetArtistInfo().Length());
+        streamUrl = QString::fromUtf16(historyDataArr[arrCount]->GetStreamUrl().Ptr(),
+                             historyDataArr[arrCount]->GetStreamUrl().Length());
+        channelName = QString::fromUtf16(historyDataArr[arrCount]->GetChannelName().Ptr(),
+                             historyDataArr[arrCount]->GetChannelName().Length());
+        channelType = historyDataArr[arrCount]->GetChannelType();
+        channelId = historyDataArr[arrCount]->GetChannelId();
+        bitrate = historyDataArr[arrCount]->GetBitrate();
+        channelDesc = QString::fromUtf16(historyDataArr[arrCount]->GetChannelDesc().Ptr(),
+                             historyDataArr[arrCount]->GetChannelDesc().Length());
+        imageUrl = QString::fromUtf16(historyDataArr[arrCount]->GetImageUrl().Ptr(),
+                                     historyDataArr[arrCount]->GetImageUrl().Length());
+        musicStoreStatus = QString::fromUtf16(historyDataArr[arrCount]->GetChannelMusicStatus().Ptr(),
+                             historyDataArr[arrCount]->GetChannelMusicStatus().Length());
+       IRQSongHistoryInfo* irqsongHistory = new IRQSongHistoryInfo();
+       if (NULL == irqsongHistory)
+       {
+           break;
+       }
+       irqsongHistory->setHistoryInfo(artist, songName, streamUrl, channelName, channelDesc 
+                                      , imageUrl, musicStoreStatus, channelType, channelId, bitrate);
+       aSongHistoryArr.append(irqsongHistory);
+    }
+    
+    historyDataArr.ResetAndDestroy();
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::getAllHistoryL
+// Invoked when when UI request.
+// Getting the data from SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+void IRQSongHistoryEngine::getAllSongHistoryL(QList<IRQSongInfo *>& aSongHistoryArr)
+{
+    // clear the array
+    while (!aSongHistoryArr.isEmpty())
+    {
+        delete aSongHistoryArr.takeFirst();
+    }
+
+    int songCount = iSongHistoryDb->CountSongHistoryDb2();
+
+    if (songCount == 0)
+    {
+        return;
+    }
+
+    // get song history list
+    RPointerArray<CIRSongHistoryInfo> historyDataArr;
+    for (int arrCount = 0 ; arrCount < songCount ; arrCount++ )
+    {
+        CIRSongHistoryInfo *songHistory = CIRSongHistoryInfo::NewL();
+        CleanupStack::PushL(songHistory);
+        historyDataArr.AppendL(songHistory);
+        CleanupStack::Pop(songHistory);
+    }
+
+    iSongHistoryDb->GetAllSongHistoryList2L(historyDataArr);
+
+    // create IRQSongHistoryInfo array and set
+    QString songName;
+    QString artist;     
+    QString musicStoreStatus;
+    
+    for (int arrCount = 0; arrCount < songCount; arrCount++)
+    {
+        songName = QString::fromUtf16(
+                historyDataArr[arrCount]->GetSongInfo().Ptr(),
+                historyDataArr[arrCount]->GetSongInfo().Length());
+        artist = QString::fromUtf16(
+                historyDataArr[arrCount]->GetArtistInfo().Ptr(),
+                historyDataArr[arrCount]->GetArtistInfo().Length());
+        musicStoreStatus = QString::fromUtf16(
+                historyDataArr[arrCount]->GetChannelMusicStatus().Ptr(),
+                historyDataArr[arrCount]->GetChannelMusicStatus().Length());
+        IRQSongInfo* irqsong = new IRQSongInfo();
+
+        irqsong->setAllInfo(songName, artist, musicStoreStatus);
+        aSongHistoryArr.append(irqsong);
+    }
+    
+    historyDataArr.ResetAndDestroy();
+}
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::clearAllHistory
+// Invoked when when UI request.
+// Clears the SongHistoryDb.
+// ---------------------------------------------------------------------------
+
+ EXPORT_C int IRQSongHistoryEngine::clearAllHistory( )
+ {
+     return iSongHistoryDb->ClearAllSongHistoryFromDb();
+ }
+ 
+ EXPORT_C int IRQSongHistoryEngine::clearAllSongHistory( )
+ {
+     return iSongHistoryDb->ClearAllSongHistoryFromDb2();
+ }
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::syncHistory
+// Invoked when when UI request.
+// Synchronises the Song history DB with the new data in the ISDS.
+// ---------------------------------------------------------------------------
+EXPORT_C void IRQSongHistoryEngine::syncHistory(int aChannelId)
+{
+    TRAPD(err,iSongHistoryDb->SyncSongHistoryDbL(aChannelId));
+    if (err)
+    {
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryEngine::updateSongHistoryDb
+// Invoked when when UI request.
+// Synchronises the Song history DB with the new data in the ISDS.
+// ---------------------------------------------------------------------------
+EXPORT_C void IRQSongHistoryEngine::updateSongHistoryDb(int aChannelId,
+        const QString& aChannelName,
+        const QString& aChannelUrl,
+        const QString& aImageUrl,
+        const QString& aMusicFlag)
+{
+    TInt ret = KErrNone ;
+    TUint16 channelId = aChannelId; // prevent data overflow
+
+    TRAPD(err,ret = iSongHistoryDb->GetIdPresentInDbL( channelId ));
+
+    if (err)
+    {
+        return;
+    }
+
+    if (ret)
+    {
+        TPtrC channelName(reinterpret_cast<const TUint16*>(aChannelName.utf16()));
+        TPtrC channelUrl(reinterpret_cast<const TUint16*>(aChannelUrl.utf16()));
+        TPtrC imageUrl(reinterpret_cast<const TUint16*>(aImageUrl.utf16()));
+        TPtrC musicFlag(reinterpret_cast<const TUint16*>(aMusicFlag.utf16()));
+        TRAP_IGNORE(iSongHistoryDb->UpdateSongHistoryDbL( channelId ,
+                channelName,
+                channelUrl,
+                imageUrl,
+                musicFlag));
+    }
+}
+
+EXPORT_C bool IRQSongHistoryEngine::deleteOneItem(int aIndex)
+{    
+    int retValue = 0;
+    retValue = iSongHistoryDb->DeleteOneHistory(aIndex);
+    if( KErrNone != retValue )
+    {
+        return false;
+    }
+    
+    return true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqsonghistory/src/irqsonghistoryinfo.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,304 @@
+/*
+* 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 "irqsonghistoryinfo.h"
+
+// ---------------------------------------------------------------------------
+//IRQSongHistoryInfo::~IRQSongHistoryInfo()
+//standard C++ constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQSongHistoryInfo::IRQSongHistoryInfo()
+{
+    iChannelType = 0;
+    iChannelId = 0;
+    iBitrate = 0;
+}
+
+// ---------------------------------------------------------------------------
+//IRQSongHistoryInfo::~IRQSongHistoryInfo()
+//standard C++ destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQSongHistoryInfo::~IRQSongHistoryInfo()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getArtistName
+// gets Artist name
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getArtistName() const
+{
+    return iArtistName;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getSongName
+// gets the song information
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getSongName() const
+{
+    return iSongName;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getStreamUrl
+// gets StreamUrl
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getStreamUrl() const
+{
+    return iStreamUrl;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getChannelName
+// gets Channel name
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getChannelName() const
+{
+    return iChannelName;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getChannelDesc
+// gets Channel Description
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getChannelDesc() const
+{
+    return iChannelDescription;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getImageUrl
+// gets Channel image Url
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getImageUrl() const
+{
+    return iImageUrl;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getMusicStoreStatus
+// gets Channel MusicStoreStatus
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const QString& IRQSongHistoryInfo::getMusicStoreStatus() const
+{
+    return iMusicStoreStatus;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getChannelType
+// gets Channel Type
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSongHistoryInfo::getChannelType() const
+{
+    return iChannelType;
+}
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getChannelId
+// gets Channel Id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSongHistoryInfo::getChannelId() const
+{
+    return iChannelId;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::getBitrate
+// gets Channel bitrate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C int IRQSongHistoryInfo::getBitrate() const
+{
+    return iBitrate;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setHistoryInfo
+// sets Song History Information.
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setHistoryInfo(const QString& aArtistName,
+        const QString& aSongName,
+        const QString& aStreamUrl,
+        const QString& aChannelName,
+        const QString& aChannelDesc,
+        const QString& aImageUrl,
+        const QString& aMusicStoreStatus, 
+        int aChannelType,
+        int aChannelId,
+        int aBitrate)
+{
+    setArtistName(aArtistName);
+    setSongName(aSongName);
+    setStreamUrl(aStreamUrl);
+    setChannelName(aChannelName);
+    setChannelDesc(aChannelDesc);
+    setImageUrl(aImageUrl);
+    setMusicStoreStatus(aMusicStoreStatus);
+    setChannelType(aChannelType);
+    setChannelId(aChannelId);
+    setBitrate(aBitrate);
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setArtistName
+// sets Artist name
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setArtistName(const QString& aArtistName)
+{
+    iArtistName = aArtistName;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setSongName
+// sets Song name
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setSongName (const QString& aSongName)
+{
+    iSongName = aSongName;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setStreamUrl
+// sets Stream url
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setStreamUrl(const QString& aStreamUrl)
+{
+    iStreamUrl = aStreamUrl;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setChannelName
+// sets Channel name
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setChannelName(const QString& aChannelName)
+{
+    iChannelName = aChannelName;
+}
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setChannelDesc
+// sets Channel description
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setChannelDesc(const QString& aChannelDesc)
+{
+    iChannelDescription = aChannelDesc;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setImageUrl
+// sets Channel image Url
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setImageUrl(const QString& aImageUrl)
+{
+    iImageUrl = aImageUrl;
+}
+
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setMusicStoreStatus
+// sets Channel's MusicStoreStatus
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setMusicStoreStatus(const QString& aMusicStoreStatus)
+{
+    iMusicStoreStatus = aMusicStoreStatus;
+}
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setChannelType
+// sets Channel type
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setChannelType(int aChannelType)
+{
+    iChannelType = aChannelType;
+}
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setChannelId
+// sets Channel Id
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setChannelId(int aChannelId)
+{
+    iChannelId = aChannelId;
+}
+// ---------------------------------------------------------------------------
+// IRQSongHistoryInfo::setBitrate
+// sets Channel bitrate
+// ---------------------------------------------------------------------------
+//
+void IRQSongHistoryInfo::setBitrate(int aBitrate)
+{
+    iBitrate = aBitrate;
+}
+
+
+
+EXPORT_C void IRQSongInfo::setSongName(const QString& aName)
+{
+    iSongName = aName;
+}
+
+EXPORT_C const QString& IRQSongInfo::getSongName() const
+{
+    return iSongName;
+}
+
+EXPORT_C void IRQSongInfo::setArtistName(const QString& aArtist)
+{
+    iSongArtist = aArtist;
+}
+
+EXPORT_C const QString& IRQSongInfo::getArtistName() const
+{
+    return iSongArtist;
+}
+
+EXPORT_C void IRQSongInfo::setMusicshopStatus(const QString& aStatus)
+{
+    iMusicshopStatus = aStatus;
+}
+
+EXPORT_C const QString& IRQSongInfo::getMusicshopStatus() const
+{
+    return iMusicshopStatus;
+}
+
+EXPORT_C void IRQSongInfo::setAllInfo(const QString& aName, const QString& aArtist, const QString& aStatus)
+{
+    iSongName =   aName;
+    iSongArtist = aArtist;
+    iMusicshopStatus = aStatus;    
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstationexporter/inc/irqstationexporter.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2009-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:  class declaration for sharing stations
+*
+*/
+
+
+#ifndef IRQSTATIONEXPORTER_H_
+#define IRQSTATIONEXPORTER_H_
+
+#include <QString>
+#include <QList>
+
+class IRQPreset;
+
+/*!
+ * This class provides station exporter related interface.
+ *
+ */
+class IRQStationExporter
+{
+public:
+    /*!
+     * Constructor.
+     */
+    IMPORT_C IRQStationExporter();
+    
+    /*!
+     * Destructor.
+     */    
+    IMPORT_C ~IRQStationExporter();
+        
+public:
+    /*!
+     * Launch MMS editor to send station list 
+     * @return bool  ture if launch successfully, otherwise return false
+     */                              
+    IMPORT_C bool sendViaMms(const QList<IRQPreset*> &aPresetList, const QString& aMsg);
+    IMPORT_C bool sendViaMms(const IRQPreset &aPreset, const QString& aMsg);
+
+private:
+    void sendViaMmsL(const QString& aMsg);
+    bool constructPlsFile(const QList<IRQPreset*> &aPresetList);
+    bool constructPlsFile(const IRQPreset &aPreset);
+        
+private:
+    QString  iPlsFilePath;
+};
+
+#endif // IRQSTATIONEXPORTER_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstationexporter/irqstationexporter.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+
+TEMPLATE = lib
+TARGET = irqstationexporter
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH += src
+
+INCLUDEPATH += inc \
+               ..\irqcommon\inc
+
+symbian{
+  TARGET.UID3 = 0xe861ee7d
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+LIBS += -lsendui \
+        -letext \
+        -leikcore \
+        -leuser \
+        -lcone \
+        -lirqutility
+
+# Input
+HEADERS += inc\irqstationexporter.h
+SOURCES += irqstationexporter.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstationexporter/src/irqstationexporter.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2009-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:  class declaration for sharing stations
+*
+*/
+
+
+#include <CMessageData.h>
+#include <sendui.h>
+#include <SendUiConsts.h>
+#include <eikenv.h>
+#include <txtrich.h>
+#include <QTextStream>
+#include <QFile>
+#include <QCoreApplication>
+
+#include "irqstationexporter.h"
+#include "irqisdsdatastructure.h"
+
+const char KPlsFilePath[]  = "c:\\data\\share.pls";
+const char KPlsFileHeading[]  = "[playlist]";
+const char KPlsFileEntryNum[]  = "NumberOfEntries";
+const char KPlsFileEnding[]   = "Version=2";
+const char KPlsEntryElementFile[]   = "File";
+const char KPlsEntryElementTitle[]  = "Title";
+const char KPlsEntryElementLength[] = "Length";
+const char KPlsIndefiniteLength[] = "-1";
+
+static void constructPlsElement( QTextStream &aOutput, 
+                          const IRQPreset &aPreset, 
+                          int &aStationIndexBase);
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQStationExporter::IRQStationExporter()
+            : iPlsFilePath(KPlsFilePath)
+{
+}             
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQStationExporter::~IRQStationExporter()
+{
+}
+
+// ---------------------------------------------------------------------------
+// sendViaMms
+// NOTE : MUST ensure no changes to all the elements in the list,
+//        so, can ONLY access element via const_iterator
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQStationExporter::sendViaMms(const QList<IRQPreset*> &aPresetList, const QString& aMsg)
+{
+    if(!constructPlsFile(aPresetList))
+    {
+        return false;
+    }
+    
+    TRAPD(err,sendViaMmsL(aMsg));
+    return KErrNone == err;
+}
+
+EXPORT_C bool IRQStationExporter::sendViaMms(const IRQPreset &aPreset, const QString& aMsg)
+{
+    if(!constructPlsFile(aPreset))
+    {
+        return false;
+    }
+    
+    TRAPD(err,sendViaMmsL(aMsg));
+    return KErrNone == err;
+}
+
+void IRQStationExporter::sendViaMmsL(const QString& aMsg)
+{
+    CMessageData* messageData = CMessageData::NewLC();
+
+    TPtrC plsFilePath(reinterpret_cast<const TUint16*>(iPlsFilePath.utf16()));
+    messageData->AppendAttachmentL(plsFilePath);
+    
+    CEikonEnv* eikonEnv = CEikonEnv::Static();
+    CRichText* text =
+    CRichText::NewL( eikonEnv->SystemParaFormatLayerL(),
+                     eikonEnv->SystemCharFormatLayerL() );
+    CleanupStack::PushL(text);
+    
+    QString shareMsgContentStr(aMsg);
+    TPtrC16 shareMsgContentDesc(reinterpret_cast<const TUint16*>(shareMsgContentStr.utf16()));
+    
+    text->InsertL(0, shareMsgContentDesc);
+    messageData->SetBodyTextL( text );
+    CleanupStack::PopAndDestroy(text);
+
+    CSendUi* sendUi = CSendUi::NewL();
+    CleanupStack::PushL(sendUi);
+    sendUi->CreateAndSendMessageL(KSenduiMtmUniMessageUid,messageData);
+    CleanupStack::PopAndDestroy(sendUi);
+
+    CleanupStack::PopAndDestroy( messageData );
+}
+
+// ---------------------------------------------------------------------------
+// constructPlsFile
+// NOTE : MUST ensure no changes to all the elements in the list,
+//        so, can ONLY access element via const_iterator
+// ---------------------------------------------------------------------------
+//
+bool IRQStationExporter::constructPlsFile(const QList<IRQPreset*> &aPresetList)
+{
+    if(0 == aPresetList.count())
+    {
+        return false;
+    }
+    
+    QFile plsFile(iPlsFilePath);
+    if( !plsFile.open(QIODevice::ReadWrite | QIODevice::Truncate) )
+    {
+        return false;
+    }
+    QTextStream outputStream( &plsFile );
+    outputStream<<KPlsFileHeading<<endl;
+    
+    int entryNum = 0;
+    for (QList<IRQPreset*>::const_iterator it = aPresetList.begin(); it != aPresetList.end(); ++it)
+    {
+        entryNum += (*it)->getChannelURLCount();
+    }
+    QString totalEntry;
+    totalEntry.setNum(entryNum);
+    outputStream<<KPlsFileEntryNum<<"="<<totalEntry<<endl;
+    
+    int stationIndexBase = 1;
+    for (QList<IRQPreset*>::const_iterator it = aPresetList.begin(); it != aPresetList.end(); ++it)
+    {
+        constructPlsElement(outputStream,*(*it),stationIndexBase);
+    }
+    
+    outputStream<<KPlsFileEnding;
+    plsFile.close();
+    return true;
+}
+
+bool IRQStationExporter::constructPlsFile(const IRQPreset &aPreset)
+{       
+    QFile plsFile(iPlsFilePath);
+    if( !plsFile.open(QIODevice::ReadWrite | QIODevice::Truncate) )
+    {
+        return false;
+    }
+    QTextStream outputStream( &plsFile );
+    outputStream<<KPlsFileHeading<<endl;
+    
+    QString totalEntry;
+    totalEntry.setNum(aPreset.getChannelURLCount());
+    outputStream<<KPlsFileEntryNum<<"="<<totalEntry<<endl;
+    
+    int stationIndexBase = 1;
+    constructPlsElement(outputStream,aPreset,stationIndexBase);
+    
+    outputStream<<KPlsFileEnding;
+    plsFile.close();
+    return true;
+}
+
+static void constructPlsElement( QTextStream &aOutput,
+                          const IRQPreset &aPreset,
+                          int &aStationIndexBase)
+{
+    QList<int> bitrateList;
+    aPreset.getAvailableBitrates(bitrateList);
+    
+    int urlIndex = 1;
+    QString stationName;
+    QList<QString> *urlList = NULL;
+    
+    for( int i=0; i<bitrateList.count(); i++ )
+    {
+        urlList = aPreset.getURLsForBitrate(bitrateList.at(i));
+        for( int j=0; j<urlList->count(); j++ )
+        {
+            QString stationUrl = urlList->at(j);
+            
+            if( aPreset.getChannelURLCount() <= 1 )
+            {
+                stationName = aPreset.name;
+            }
+            else
+            {
+                QString stationUrlIndex;
+                stationUrlIndex.setNum(urlIndex);             
+                stationName = aPreset.name + " #[" + stationUrlIndex + "]";
+            }
+
+            QString stationIndex;
+            stationIndex.setNum(aStationIndexBase);              
+            aOutput<<KPlsEntryElementFile<<aStationIndexBase
+                   <<"="<<stationUrl<<endl;
+            aOutput<<KPlsEntryElementTitle<<aStationIndexBase
+                   <<"="<<stationName<<endl;            
+            aOutput<<KPlsEntryElementLength<<aStationIndexBase
+                   <<"="<<KPlsIndefiniteLength<<endl;            
+            
+            urlIndex++;
+            aStationIndexBase++;            
+        }
+        
+        delete urlList;
+    }
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstatisticsreport/inc/irqreportsender.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2009-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:  class used for sending report to isds server
+*
+*/
+
+
+#ifndef IRQREPORTSENDER_H
+#define IRQREPORTSENDER_H
+
+#include <QObject>
+
+#include "irdbstatusobserver.h"
+
+class IRQSettings;
+class IRQIsdsClient;
+class IRQNetworkController;
+
+class IRQReportSender : public QObject,
+                        public MIRLogDbStatusObserver
+{
+    Q_OBJECT
+
+public:
+    /*!
+     * Constructor.
+     */
+    explicit IRQReportSender(IRQIsdsClient *aIsdsClient);
+
+    /*!
+     * Destructor.
+     */
+    ~IRQReportSender();
+    
+private:
+
+    /*!
+     * From MIRLogDbStatusObserver.
+     */       
+    void LogDbNeedFlush();
+    
+    /*!
+     * Function: sendReport
+     * send the statistics report to isds server.
+     */    
+    void sendReport();
+    
+signals:
+    void reportSent();
+    
+private:
+    /*!
+     * Used for sending out report
+     */     
+    IRQIsdsClient *iIsdsClient;  
+     
+    /*!
+     * Used for getting the private path of the log file
+     */       
+    IRQSettings *iSettingManager;
+    
+    /*!
+     * Used for querying the connection status
+     */    
+    IRQNetworkController *iNetworkController;       
+};
+
+#endif // IRQREPORTSENDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstatisticsreport/inc/irqstatisticsreporter.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2009-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:  Qt wrapper class declaration for CIRReportGenerator
+*
+*/
+
+
+#ifndef IRQSTATISTICSREPORTER_H_
+#define IRQSTATISTICSREPORTER_H_
+
+#include <QObject>
+#include <QString>
+
+#include "irqevent.h"
+#include "irqenums.h"
+
+class CIRReportGenerator;
+class IRQNetworkController;
+class IRQIsdsClient;
+class IRQReportSender;
+
+/*!
+ * This class provides usage report related interface.
+ *
+ * IRQReportGenerator follows singleton pattern
+ *
+ */
+class IRQStatisticsReporter : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    /*!
+     *  Get the instance of IRQStatisticsReporter
+     *  @return IRQStatisticsReporter*
+     */
+    IMPORT_C static  IRQStatisticsReporter* openInstance(IRQIsdsClient *aIsdsClient);
+
+    /*!
+     *  Close the instance of IRQStatisticsReporter
+     */
+    IMPORT_C void closeInstance();
+
+private:
+    /**
+     *  Creates IRQStatisticsReporter instance
+     */
+    static IRQStatisticsReporter* createInstanceL(IRQIsdsClient *aIsdsClient);
+    
+    /*!
+     * Constructor.
+     */
+    IRQStatisticsReporter();
+    
+    void constructL(IRQIsdsClient *aIsdsClient);
+    
+    /*!
+     * Destructor.
+     */    
+    ~IRQStatisticsReporter();
+   
+public:    
+
+    /*!
+     * The following methods are for Nms Event Usage Logging 
+     *
+     * <session starttime="R" duration="R" terminatedBy="R" connectedFrom="R" id="R">
+     *    <channelid>1234</channelid>
+     *    <serverResult url="R">Connected</serverResult>
+      *    <connection type="R">
+      *      <operator currentNetwork="R" homeOperator=""/>
+      *    </connection>
+      * </session>
+     */  
+    
+    /*!
+     * Function: sessionStarted
+     * starts a new session
+     * @return bool  return ture if session is started successfully, otherwise, return false.
+     */  
+    IMPORT_C bool sessionStarted(const int aChannelId, const IRQConnectedFrom aConnectedFrom);
+
+    /*!
+     * Function: markSessionStart
+     * marks the start of a session
+     */  
+    IMPORT_C void markSessionStart();
+
+    /*!
+     * Function: suspendSession
+     * function handle session suspend
+     */
+    IMPORT_C void suspendSession();
+
+    /*!
+     * Function: restartSession
+     * function handle session restart
+     */
+    IMPORT_C void restartSession();
+                
+    /*!
+     * Function: sessionEnd
+     * ends the session
+     */    
+    IMPORT_C void sessionEnded(const IRQTerminatedType aTerminatedBy);
+
+    /*!
+     * Function: logServerResult
+     * logs server connection result
+     * @param aUrl URL to which connection is attempted
+     * @param aServerResult response from server
+     */    
+    IMPORT_C void logServerResult(const QString& aUrl, const IRQError aServerResult);  
+
+    /*!
+     * The following methods are for Nms Event Usage Logging 
+     *
+     * <nmsLog>
+     *    <nmsEvent timeStamp="R" channelId="" type="R">
+     *      <operator currentNetwork="R" homeOperator=""/>
+     *    </nmsEvent>
+     * </nmsLog>    
+     */  
+    
+    /*!
+     * Function: logNmsEvent
+     * logs nmsEvent to Xml file
+     * @param aNmsType Nms type  
+     * @param aChannelId Nms channel id        
+     */  
+    IMPORT_C void logNmsEvent(const IRQNmsType aNmsType, const int aChannelId);
+    
+    /*!
+     * Function: logSongRecogEvent
+     * logs songRecog event to Xml file 
+     */  
+    IMPORT_C void logSongRecogEvent();    
+    
+public slots:
+
+    /*!
+     * Function: updateCurrentNetwork
+     * updates the current network
+     */  
+    IMPORT_C void updateCurrentNetwork(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC);
+    
+    /*!
+     * Function: updateHomeOperator
+     * updates the home network
+     */  
+    IMPORT_C void updateHomeOperator(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC);
+   
+private slots:
+
+    /*!
+     * Function: reportSent
+     * should be called after report is sent to isds server
+     */
+    void reportSent();
+       
+private:
+
+    /*!
+     * Function: updateTerminatedBy
+     * updates the termination status
+     * @param aTerminatedBy terminated by information
+     */      
+    void updateTerminatedBy(const IRQTerminatedType aTerminatedBy);
+
+    /*!
+     * Function: updateConnectedFrom
+     * updateds connected information 
+     * @param aConnectedFrom connected from information
+     */  
+    void updateConnectedFrom(const IRQConnectedFrom aConnectedFrom);
+        
+    /*!
+     * Function: updateConnectionType
+     * updates the connection type
+     */  
+    void updateConnectionType();
+    
+    /*!
+     * Function: updateNmsType
+     * updates the nokia music shop access type
+     */  
+    void updateNmsType(const IRQNmsType aNmsType);
+    
+    /*!
+     * Function: doLogNmsEventL
+     * logs nmsEvents to Xml file
+     * @param aNmsType Nms type  
+     * @param aChannelId Nms channel id        
+     */  
+    void doLogNmsEventL(const IRQNmsType aNmsType, const int aChannelId);    
+    
+private:
+
+    CIRReportGenerator *iBody;
+    
+    IRQReportSender *iSender;
+    
+    /*!
+     * Used for retrieving Connection Type
+     */    
+    IRQNetworkController *iNetworkController;
+    
+    int iCurrentNetwork;
+    
+    int iHomeOperator;   
+    
+    /*!
+     * Number of objects currently referring to the singleton object
+     */
+    int iSingletonInstances;
+};
+
+#endif /* IRQSTATISTICSREPORTER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstatisticsreport/irqstatisticsreport.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -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:  Project definition file for internet radio statisticsreport
+
+TEMPLATE = lib
+
+TARGET = irqstatisticsreport
+TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+MOC_DIR = moc
+DEPENDPATH += src
+
+INCLUDEPATH += inc \
+               ..\irqcommon\inc \
+               ..\..\internetradio2.0\sessionloginc \
+               ..\irqisdsclient\inc \
+               ..\irqnetworkcontroller\inc \
+               ..\irqsettings\inc
+
+symbian{
+  TARGET.UID3 = 0xe3801560
+  TARGET.EPOCALLOWDLLDATA = 1
+}
+
+LIBS += -lirsessionlog \
+        -lirqnetworkcontroller \
+        -lirqisdsclient \
+        -lirqsettings
+
+# Input
+HEADERS += inc\irqstatisticsreporter.h \
+           inc\irqreportsender.h
+           
+SOURCES += irqstatisticsreporter.cpp \
+           irqreportsender.cpp
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstatisticsreport/src/irqreportsender.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2009-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:  interface for updating network info
+*
+*/
+
+
+#include "irqreportsender.h"
+#include "irqisdsclient.h"
+#include "irqsettings.h"
+#include "irqnetworkcontroller.h"
+#include "irreportsettings.h"
+
+// ---------------------------------------------------------------------------
+// IRQReportSender::IRQReportSender()
+// Constructor
+// ---------------------------------------------------------------------------
+//
+IRQReportSender::IRQReportSender(IRQIsdsClient *aIsdsClient):iIsdsClient(aIsdsClient),
+                                                             iSettingManager(NULL),
+                                                             iNetworkController(NULL)
+{
+    iNetworkController = IRQNetworkController::openInstance();
+    
+    iSettingManager = IRQSettings::openInstance();
+}
+
+// ---------------------------------------------------------------------------
+// IRQReportSender::~IRQReportSender()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQReportSender::~IRQReportSender()
+{
+    if(iSettingManager)
+    {
+        iSettingManager->closeInstance();
+    }
+    
+    if(iNetworkController)
+    {
+        iNetworkController->closeInstance();
+    }    
+}
+
+// ---------------------------------------------------------------------------
+// IRQReportSender::LogDbNeedFlush()
+// From MIRLogDbStatusObserver
+// ---------------------------------------------------------------------------
+//
+void IRQReportSender::LogDbNeedFlush()
+{
+    sendReport();
+}
+
+// ---------------------------------------------------------------------------
+// IRQReportSender::sendReport()
+// Send the statistics report to isds server
+// ---------------------------------------------------------------------------
+//
+void IRQReportSender::sendReport()
+{
+    if(iNetworkController)
+    {
+    	  if(iNetworkController->getNetworkStatus() 
+    	     && iIsdsClient && iSettingManager)
+    	  {
+            QString logFilePath = iSettingManager->privatePath();
+            QString logFileName = QString::fromUtf16(KGZipLogFileName().Ptr(), KGZipLogFileName().Length());
+            iIsdsClient->isdsPostLog(logFilePath + logFileName);
+            emit reportSent();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqstatisticsreport/src/irqstatisticsreporter.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,463 @@
+/*
+* Copyright (c) 2009-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:  Qt wrapper class implementation for CIRReportGenerator
+*
+*/
+
+#include "irsessionlogger.h" // CIRReportGenerator
+
+#include "irqstatisticsreporter.h"
+#include "irqnetworkcontroller.h"
+#include "irqreportsender.h"
+
+//Network Indicator
+_LIT(KGPRS,"gprs");
+_LIT(KWCDMA,"wcdma");
+_LIT(KWLAN,"wlan");
+_LIT(KCDMA2000,"cdma2000");
+_LIT(KEDGE,"edge");
+
+//Music Shop Type
+_LIT(KFind,"find");
+_LIT(KLaunch,"launch");
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::openInstance()
+// Static function to get a singleton instance of IRQStatisticsReporter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQStatisticsReporter* IRQStatisticsReporter::openInstance(IRQIsdsClient *aIsdsClient)
+{
+    // Get singleton instance
+    IRQStatisticsReporter* reportGenerator =
+                           reinterpret_cast<IRQStatisticsReporter*>(Dll::Tls());
+
+    if (NULL == reportGenerator)
+    {
+        TRAPD(error, reportGenerator = createInstanceL(aIsdsClient));
+        if (KErrNone != error)
+        {
+            delete reportGenerator;
+            reportGenerator = NULL;
+            Dll::SetTls(NULL);
+        }
+    }
+    else
+    {
+        reportGenerator->iSingletonInstances++;
+    }
+
+    return reportGenerator;
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::closeInstance()
+// Close a singleton instance of IRQStatisticsReporter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::closeInstance()
+{
+    iSingletonInstances--;
+
+    if (0 == iSingletonInstances)
+    {
+        Dll::SetTls(NULL);
+        delete this;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::IRQStatisticsReporter()
+// Creates IRQStatisticsReporter instance
+// ---------------------------------------------------------------------------
+//
+IRQStatisticsReporter* IRQStatisticsReporter::createInstanceL(IRQIsdsClient *aIsdsClient)
+{
+    IRQStatisticsReporter* reportGenerator = new (ELeave) IRQStatisticsReporter();
+    reportGenerator->constructL(aIsdsClient);
+    User::LeaveIfError(Dll::SetTls(reportGenerator));
+    reportGenerator->iSingletonInstances = 1;
+
+    return reportGenerator;
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::IRQStatisticsReporter()
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+IRQStatisticsReporter::IRQStatisticsReporter():iBody(NULL),
+                                               iSender(NULL),
+                                               iNetworkController(NULL),
+                                               iCurrentNetwork(0),
+                                               iHomeOperator(0),
+                                               iSingletonInstances(0)
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::constructL(IRQIsdsClient *aIsdsClient)
+{
+    iBody = CIRReportGenerator::OpenL();
+
+    iNetworkController = IRQNetworkController::openInstance();
+
+    iSender = new IRQReportSender(aIsdsClient);
+
+    if(iBody && iSender)
+    {
+        iBody->SetDbStatusObserser(iSender);
+    }
+
+    connect(iSender, SIGNAL(reportSent()), this, SLOT(reportSent()));
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::~IRQStatisticsReporter()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+IRQStatisticsReporter::~IRQStatisticsReporter()
+{
+    if(iBody)
+    {
+        iBody->SetDbStatusObserser(NULL);
+        iBody->Close();
+    }
+
+    if(iNetworkController)
+    {
+        iNetworkController->closeInstance();
+    }
+
+    delete iSender;
+    iSender = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::sessionStarted()
+// starts a new session
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQStatisticsReporter::sessionStarted(const int aChanneldId, const IRQConnectedFrom aConnectedFrom)
+{
+    if(iBody)
+    {
+    	updateConnectedFrom(aConnectedFrom);
+        iBody->UpdateChannelID(aChanneldId);
+        updateConnectionType();
+
+        TRAPD(error,iBody->SessionStartedL());
+        if(error)
+        {
+            return false;
+        }
+        else
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::markSessionStart()
+// marks the start of a session
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::markSessionStart()
+{
+    if(iBody)
+    {
+        iBody->MarkSessionStart();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::suspendSession()
+// function handle session suspend
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::suspendSession()
+{
+    if(iBody)
+    {
+        iBody->HandleStopEvents(EFalse);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::restartSession()
+// function handle session restart
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::restartSession()
+{
+    if(iBody)
+    {
+        iBody->HandleStopEvents(ETrue);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::sessionEnded()
+// ends the session
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::sessionEnded(const IRQTerminatedType aTerminatedBy)
+{
+    if(iBody)
+    {
+        updateTerminatedBy(aTerminatedBy);
+        TRAP_IGNORE(iBody->SessionEndL(EFalse));
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::logServerResult()
+// logs server connection result
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::logServerResult(const QString& aUrl, const IRQError aServerResult)
+{
+    if(iBody)
+    {
+        TPtrC url(reinterpret_cast<const TUint16*>(aUrl.utf16()));
+        switch(aServerResult)
+        {
+            case EIRQErrorNone:
+                iBody->LogServerResult(url,EIRConnected);
+                break;
+            case EIRQPlayerErrorServerFull:
+                iBody->LogServerResult(url,EIRFull);
+                break;
+            case EIRQPlayerErrorTimeOut:
+                iBody->LogServerResult(url,EIRConnTimeOut);
+                break;
+            case EIRQPlayerErrorConnectingFailed:
+                iBody->LogServerResult(url,EIRConnFailed);
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::logNmsEvents()
+// logs nmsEvents to Xml file
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::logNmsEvent(const IRQNmsType aNmsType, const int aChanneldId)
+{
+    TRAP_IGNORE(doLogNmsEventL(aNmsType,aChanneldId));
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::doLogNmsEventsL()
+// logs nmsEvents to Xml file
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::doLogNmsEventL(const IRQNmsType aNmsType, const int aChanneldId)
+{
+    if(iBody)
+    {
+    	updateNmsType(aNmsType);
+        iBody->UpdateNmsChannelID(aChanneldId);
+        iBody->NmsLogStartedL();
+        iBody->WriteNmsLogtoXmlL();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::logSongRecogEvent()
+// logs songRecog event to Xml file 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::logSongRecogEvent()
+{
+    if(iBody)
+    {
+        iBody->LogSongRecog();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::updateCurrentNetwork()
+// updates the current network
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::updateCurrentNetwork(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC)
+{
+    QString nwkCode = aCurrentNwkMCC + aCurrentNwkMNC;
+    iCurrentNetwork = nwkCode.toInt();
+    iBody->UpdateCurrentNetwork(iCurrentNetwork);
+    iBody->UpdateCurrentBrowseNetwork(iCurrentNetwork);
+    iBody->UpdateNmsCurrentNetwork(iCurrentNetwork);    
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::updateHomeOperator()
+// updates the home network
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQStatisticsReporter::updateHomeOperator(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC)
+{
+    QString nwkCode = aHomeNetworkMCC + aHomeNetworkMNC;
+    iHomeOperator = nwkCode.toInt();
+    iBody->UpdateHomeOperator(iHomeOperator);
+    iBody->UpdateNmsHomeOperator(iHomeOperator);    
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::reportSent()
+// should be called after report is sent to isds server
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::reportSent()
+{
+    if(iBody)
+    {
+        iBody->ReportSent();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::updateTerminatedBy()
+// updates the termination status
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::updateTerminatedBy(const IRQTerminatedType aTerminatedBy)
+{
+    if(iBody)
+    {
+        switch(aTerminatedBy)
+        {
+            case EIRQUserTerminated:
+                iBody->UpdateTerminatedBy(EUserTerminated);
+                break;
+            case EIRQNoConnectionToServer:
+                iBody->UpdateTerminatedBy(ENoConnectionToServer);
+                break;
+            case EIRQNoConnectionToNetwork:
+                iBody->UpdateTerminatedBy(ENoConnectionToNetwork);
+                break;
+            default:
+                // do NOT cover all cases
+                iBody->UpdateTerminatedBy(EUserTerminated);
+                break;
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::updateConnectedFrom()
+// updateds connected information
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::updateConnectedFrom(const IRQConnectedFrom aConnectedFrom)
+{
+    if(iBody)
+    {
+        switch(aConnectedFrom)
+        {
+            case EIRQIsds:
+                iBody->UpdateConnectedFrom(EIRIsds);
+                break;
+            case EIRQPresetAdhoc:
+                iBody->UpdateConnectedFrom(EIRPresetAdhoc);
+                break;
+            case EIRQPresetIsds:
+                iBody->UpdateConnectedFrom(EIRPresetIsds);
+                break;
+            case EIRQHistoryAdhoc:
+                iBody->UpdateConnectedFrom(EIRHistoryAdhoc);
+                break;
+            case EIRQHistoryIsds:
+                iBody->UpdateConnectedFrom(EIRHistoryIsds);
+                break;
+            case EIRQAdhocManual:
+                iBody->UpdateConnectedFrom(EIRAdhocManual);
+                break;
+            case EIRQAdhocExternal:
+                iBody->UpdateConnectedFrom(EIRAdhocExternal);
+                break;                                
+            default:
+                break;
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::updateConnectionType()
+// updates the connection type
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::updateConnectionType()
+{
+    if(iBody && iNetworkController)
+    {
+        IRQConnectionType connectionType = iNetworkController->identifyConnectionType();
+        switch(connectionType)
+        {
+            case EIRQGprs:
+                iBody->UpdateConnectionType(KGPRS);
+                break;
+            case EIRQWcdma:
+                iBody->UpdateConnectionType(KWCDMA);
+                break;
+            case EIRQCdma2000:
+                iBody->UpdateConnectionType(KCDMA2000);
+                break;                
+            case EIRQWiFi:
+                iBody->UpdateConnectionType(KWLAN);
+                break;
+            case EIRQEdge:
+                iBody->UpdateConnectionType(KEDGE);
+                break;
+            default:
+                // do NOT cover all cases
+                iBody->UpdateConnectionType(KNullDesC);
+                break;
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRQStatisticsReporter::updateNmsType()
+// updates the nokia music shop access type
+// ---------------------------------------------------------------------------
+//
+void IRQStatisticsReporter::updateNmsType(const IRQNmsType aNmsType)
+{
+    if(iBody)
+    {
+        switch(aNmsType)
+        {
+            case EIRQFind:
+                iBody->UpdateNmsType(KFind);
+                break;
+            case EIRQLaunch:
+                iBody->UpdateNmsType(KLaunch);
+                break;
+            default:
+                break;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/rom/internetradio_binaries.txt	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,22 @@
+# internet radio
+internetradio.exe
+irdatastructures.dll
+ircommandchannel.dll
+irdataprovider.dll
+irxmlparser.dll
+isdsclientinterface.dll
+irstreamsource.dll
+irfavoritesdb.dll
+ircachemgmt.dll
+irnetworkcontroller.dll
+irsettings.dll
+irsessionlog.dll
+iractiveidleengine.dll
+irsonghistory.dll
+irsettingsview.dll
+irmediaengine.dll
+irfilerecognizer.dll
+presetplugin.dll
+irrfsplugin.dll
+irgeneralsettings200.dll
+iractiveidle.dll
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/rom/qtinternetradio.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* 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 QTINTERNETRADIO_IBY
+#define QTINTERNETRADIO_IBY
+
+#include <bldvariant.hrh>
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\internet_radio_10_1.exe     SHARED_LIB_DIR\internet_radio_10_1.exe
+file=ABI_DIR\BUILD_DIR\irqnetworkcontroller.dll    SHARED_LIB_DIR\irqnetworkcontroller.dll
+file=ABI_DIR\BUILD_DIR\irqisdsclient.dll           SHARED_LIB_DIR\irqisdsclient.dll
+file=ABI_DIR\BUILD_DIR\irqmediaplayer.dll          SHARED_LIB_DIR\irqmediaplayer.dll
+file=ABI_DIR\BUILD_DIR\irqutility.dll              SHARED_LIB_DIR\irqutility.dll
+file=ABI_DIR\BUILD_DIR\irqfavorites.dll            SHARED_LIB_DIR\irqfavorites.dll
+file=ABI_DIR\BUILD_DIR\irqsongHistory.dll          SHARED_LIB_DIR\irqsonghistory.dll
+file=ABI_DIR\BUILD_DIR\irqsettings.dll             SHARED_LIB_DIR\irqsettings.dll
+file=ABI_DIR\BUILD_DIR\irqmusicshop.dll            SHARED_LIB_DIR\irqmusicshop.dll
+file=ABI_DIR\BUILD_DIR\irqnwkinfoobserver.dll      SHARED_LIB_DIR\irqnwkinfoobserver.dll
+file=ABI_DIR\BUILD_DIR\irqstatisticsreport.dll     SHARED_LIB_DIR\irqstatisticsreport.dll
+file=ABI_DIR\BUILD_DIR\irqstationexporter.dll      SHARED_LIB_DIR\irqstationexporter.dll 
+file=ABI_DIR\BUILD_DIR\irqdiskspacewatcher.dll     SHARED_LIB_DIR\irqdiskspacewatcher.dll
+file=ABI_DIR\BUILD_DIR\irqlogger.dll               SHARED_LIB_DIR\irqlogger.dll
+
+data=ZRESOURCE\apps\internet_radio_10_1.mif    APP_RESOURCE_DIR\internet_radio_10_1.mif
+data=DATAZ_\PRIVATE\10003A3F\IMPORT\APPS\internet_radio_10_1_reg.rsc     Private\10003a3f\import\apps\internet_radio_10_1_reg.rsc
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/rom/qtinternetradio_binaries.txt	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,5 @@
+#qtinternetradio
+qtinternetradio.exe
+irqutility.dll
+irqisdsclient.dll
+irqmediaplayer.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/rom/qtinternetradio_resources.iby	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef QTINTERNETRADIO_RESOURCES_IBY
+#define QTINTERNETRADIO_RESOURCES_IBY
+
+#include <data_caging_paths_for_iby.hrh> 
+data=DATAZ_\APP_RESOURCE_DIR\internet_radio_10_1.rsc APP_RESOURCE_DIR\internet_radio_10_1.rsc
+data=DATAZ_\QT_TRANSLATIONS_DIR\internet_radio_10_1.qm QT_TRANSLATIONS_DIR\internet_radio_10_1.qm 
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/rom/readme.txt	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,34 @@
+pre-conditions:
+1. pf5250_200848 SDK
+2. Qt garden release and Orbit
+3. compile PresetServer and InternetRadio for armv5 urel
+4. compile QTIR for armv5 udeb
+
+create image
+1. copy QtInternetRadio.iby to \epoc32\rom\include\core\app
+
+2. copy internetradio_binaries.txt and QtInternetRadio_binaries.txt to \epoc32\rombuild\iad
+
+3. modify \s60\tools\platformtools\iad_rofs\data\iad_rofs_config.xml to add the following:
+   <component desc="InternetRadio"    infile="\epoc32\rombuild\iad\internetradio_binaries.txt"       outfile="\epoc32\rombuild\IAD_internetradio_rofsfiles.txt"/> 
+
+   <component desc="QtInternetRadio" infile="\epoc32\rombuild\iad\QtInternetRadio_binaries.txt"      outfile="\epoc32\rombuild\IAD_QtInternetRadio_rofsfiles.txt"/>
+
+
+4. check dependencies of listed binaries:
+checkDependency.pl -i \s60\tools\platformtools\iad_rofs\data\iad_rofs_config.xml -o \epoc32\rombuild\IAD_rofsfiles.txt
+
+   After running this, IAD_QtInternetRadio_rofsfiles.txt should be generated under folder \epoc32\rombuild\.
+   Also, IAD_QtInternetRadio_rofsfiles.txt should be included in file IAD_rofsfiles.txt.
+
+5. run createor.pl
+
+create .sis file
+1. copy internetradio_binaries.txt to \epoc32\rombuild\iad
+2. modify \s60\tools\platformtools\iad_rofs\data\iad_rofs_config.xml to add the following:
+   <component desc="InternetRadio"    infile="\epoc32\rombuild\iad\internetradio_binaries.txt"       outfile="\epoc32\rombuild\IAD_internetradio_rofsfiles.txt"/> 
+
+3. check dependencies of listed binaries:
+   checkDependency.pl -i \s60\tools\platformtools\iad_rofs\data\iad_rofs_config.xml -o \epoc32\rombuild\IAD_rofsfiles.txt
+
+4. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irabstractlistviewbase.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRABSTRACTLISTVIEWBASE_H
+#define IRABSTRACTLISTVIEWBASE_H
+
+
+#include <hbeffect.h>
+#include "irbaseview.h"
+#include "irqenums.h"
+
+class HbListView;
+class IrNowPlayingBannerLabel;
+class IrViewBannerLabel;
+class HbAction;
+class HbLabel;
+class IRQMetaData;
+class HbAbstractViewItem;
+
+class IrAbstractListViewBase : public IRBaseView
+{
+	Q_OBJECT
+public:
+	void setHeadingText(const QString &aText);
+	QString getHeadingText() const;
+    virtual void resetCurrentItem();
+	
+    ~IrAbstractListViewBase();
+    
+protected:    
+    IrAbstractListViewBase(IRApplication *aApplication, TIRViewId aViewId);
+    virtual void storeCurrentItem();
+    virtual void handleItemSelected();
+    
+   
+    //we call the functin when we handle the handleitemselect.
+    //The return value shows wether we need to connect to the
+    //network, true means we connect and false means do not    
+	//eg. click song name, Music Shop will be open. IR needn't connect netork
+    virtual void itemAboutToBeSelected(bool &aNeedNetwork);
+    
+    virtual void setCheckedAction();
+    
+    virtual void updateView();
+
+    //from base
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
+private slots:
+    void clickItem(const QModelIndex &aIndex);
+
+	void collectionsActionClicked();
+	
+	void favoritesActionClicked();
+	
+	void searchActionClicked();
+
+	virtual void prepareMenu();
+	
+	void metaDataAvailable(IRQMetaData*);
+	
+	void removeBanner();
+	
+	void notReady();
+
+    void gotoNowPlaying();
+    
+    void launchSettingsView();
+    
+	void openWebAddress();
+	
+	virtual void listViewLongPressed(HbAbstractViewItem *aItem, const QPointF &aCoords);
+	
+	void selectEffectComplete1(HbEffect::EffectStatus aStatus);
+	
+	void selectEffectComplete2(HbEffect::EffectStatus aStatus);
+private:
+    void initMenu();
+    void initToolBar();
+    void initContentWidget();
+    void initEffects();
+    void initScrollBar();
+    void addBanner(const QString &aText);
+    void clickAfterEffects();
+    
+    
+    
+protected:
+	HbListView  *iListView;
+	IrNowPlayingBannerLabel *iBannerLabel;
+	IrViewBannerLabel *iHeadingLabel;
+	HbAction      *iOpenWebAddressAction;
+	HbAction      *iCollectionsAction;
+	HbAction      *iFavoritesAction;
+	HbAction      *iGenresAction;
+	HbAction      *iSearchAction;
+	QTimer        *iConvertTimer;
+	bool          iEffectOnGoing;
+	QModelIndex   iChosenIndex;
+};
+
+#endif // IRABSTRACTLISTVIEWBASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irabstractviewmanager.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* 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 IRABSTRACTVIEWMANAGER_H
+#define IRABSTRACTVIEWMANAGER_H
+
+#include <hbmainwindow.h>
+
+#include "irviewdefinitions.h"
+#include "irsystemeventobserver.h"
+
+class IRApplication;
+class IRBaseView;
+
+class IRAbstractViewManager : public HbMainWindow
+{
+public:
+    IRAbstractViewManager();
+    void setApplication(IRApplication *aApplication);
+    
+public:
+    virtual IRBaseView* getView(TIRViewId aViewId, bool aCreateIfNotExist = false) = 0;
+    
+    virtual bool isViewInStack(TIRViewId aViewId) const = 0;
+    
+    virtual void activateView(TIRViewId aViewId, bool aPushCurrentView = true) = 0;
+    
+    virtual void activateView(IRBaseView *aView, bool aPushCurrentView = true) = 0;  
+    
+    virtual TIRViewId currentViewId() const = 0;
+    
+    virtual void pushViewById(TIRViewId aViewId) = 0;
+    
+    //Peter : use of TIRSystemEventType causes dependence of InternetRadio/uiinc/irsystemeventobserver.h
+    virtual TIRHandleResult handleSystemEvent(TIRSystemEventType aEvent) = 0;
+    
+    virtual void backToPreviousView() = 0;
+    
+protected:
+    IRApplication* iApplication;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irapplication.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,163 @@
+/*
+* 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 IRAPPLICATION_H
+#define IRAPPLICATION_H
+
+#include <QObject>
+#include <QEvent>
+#include <hbglobal.h>
+#include "irqevent.h"
+#include "irviewdefinitions.h"
+
+ 
+
+class IRAbstractViewManager;
+class IRQIsdsClient;
+class IRPlayController;     
+class IRQSettings;
+class IRMediaKeyObserver;
+class IRLastPlayedStationInfo;
+class IRQFavoritesDB;
+class IRQNetworkController;
+class IRQNwkInfoObserver;
+class IRQStatisticsReporter;
+class IRQMusicShop;
+class IRQDiskSpaceWatcher;
+class QLocalServer;
+class IRQAdvClient;
+class HbMessageBox;
+
+#ifdef LOCALIZATION
+class QTranslator;
+#endif
+
+class IRApplication : public QObject
+{
+    Q_OBJECT
+    
+public:
+    explicit IRApplication(IRAbstractViewManager *aViewManager);
+    ~IRApplication();
+    
+    bool verifyNetworkConnectivity(const QString &aConnectingText = hbTrId("Connecting to server..."));
+    
+    void createConnectingDialog();
+    
+    void closeConnectingDialog();
+    
+    IRAbstractViewManager* getViewManager() const;
+    IRQNetworkController* getNetworkController();
+    IRQIsdsClient* getIsdsClient();
+    IRPlayController* getPlayController();
+    IRLastPlayedStationInfo* getLastPlayedStationInfo();
+    IRQFavoritesDB* getFavoritesDB();
+    IRQSettings *   getSettings();
+    IRMediaKeyObserver* getMediaKeyObserver();
+    IRQNwkInfoObserver* getNwkInfoObserver();
+    IRQStatisticsReporter* getStatisticsReporter();
+    IRQMusicShop* getMusicShop();
+    IRQAdvClient* getAdvClient();
+	
+    //from QObject
+    bool event(QEvent* e);
+
+#ifdef _DEBUG
+public:
+    bool iTestPreferredBitrate;
+#endif
+
+signals:
+    void quit();
+
+private slots:
+    //connect to signal 'networkEventNotified' from IRQNetworkController
+    void networkEventNotified(IRQNetworkEvent aEvent);
+    void cancelConnect();
+    void loadGenre();
+    void newLocalSocketConnection();
+    void handleDiskSpaceLow(qint64 aCriticalLevel);
+    
+private:
+    void createComponents();
+    void destroyComponents();
+    void setupConnection();
+    void setLaunchView();
+    void launchStartingView();
+    void startMonitoringNwkInfo();
+    void startMonitoringDiskSpace();
+    void initApp();
+    void setExitingView();
+    
+    TIRHandleResult handleConnectionEstablished();
+    
+    void startLocalServer();
+    
+#ifdef LOCALIZATION
+    void initLanguage();
+#endif
+    
+#ifdef _DEBUG
+    void readConfiguration();
+#endif
+
+private:
+    IRAbstractViewManager* iViewManager;
+    
+    IRQNetworkController* iNetworkController;
+    
+    IRQIsdsClient* iIsdsClient;
+    
+    IRPlayController* iPlayController;
+    
+    IRQFavoritesDB* iFavPresets;
+    
+    IRQSettings      *iSettings;
+
+    IRMediaKeyObserver *iMediaKeyObserver;
+
+    IRLastPlayedStationInfo *iLastPlayedStationInfo;
+
+    IRQNwkInfoObserver *iNwkInfoObserver;
+
+    IRQStatisticsReporter *iStatisticsReporter;
+    
+    IRQMusicShop *iMusicShop;
+
+    IRQAdvClient *iAdvertisementClient;
+
+    IRQDiskSpaceWatcher *iDiskSpaceWatcher;
+
+    bool iEnableGlobalAdv;
+
+    bool iDisconnected;
+
+    bool iConnectingCanceled;
+
+    QEvent::Type iInitEvent;
+
+    QString iConnectingText;
+    
+    QLocalServer *iLocalServer;
+    
+    HbMessageBox *iConnectingNote;
+    
+#ifdef LOCALIZATION
+    QTranslator  *iTranslator;
+#endif
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irbannerlabel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRBANNERLABEL_H
+#define IRBANNERLABEL_H
+
+#include <HbTextItem>
+#include <HbMarqueeItem>
+
+class IrViewBannerLabel : public HbTextItem    
+{
+    Q_OBJECT
+
+public:
+    explicit IrViewBannerLabel(QGraphicsItem *parent = 0);
+
+protected:
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+};
+
+class IrNowPlayingBannerLabel : public HbMarqueeItem
+{    
+    Q_OBJECT
+
+public:
+    IrNowPlayingBannerLabel(QGraphicsItem *parent = 0);
+    
+signals:
+    void pressed();
+    
+protected:
+    //from base class QGraphicsWidget
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+    
+    //from base class QGraphicsItem
+    void mousePressEvent(QGraphicsSceneMouseEvent *event);
+};
+
+#endif // IRBANNERLABEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irbaseview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRBASEVIEW_H
+#define IRBASEVIEW_H
+
+#include <hbview.h>
+#include <hbmessagebox.h>
+
+#include "irdocumentloader.h"
+#include "irviewdefinitions.h"
+#include "irsystemeventobserver.h"   //located in InternetRadio/uiinc
+
+class IRApplication;
+class IRAbstractViewManager;
+class IRPlayController;
+class IRQIsdsClient;
+class IRQNetworkController;
+class IRQFavoritesDB;
+class IRQSettings;
+
+enum TViewFlag
+{
+    EViewFlag_UnStackable = 0x01,
+    EViewFlag_ClearStackWhenActivate = 0x02
+};
+
+class IRBaseView : public HbView
+{
+public:
+    TIRViewId id() const;
+    virtual TIRHandleResult handleSystemEvent(TIRSystemEventType aEvent);
+    virtual TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    virtual void launchAction();
+    virtual void updateView();
+    
+    void setFlag(int aFlag);
+    int flag() const;
+    
+    void setUseNetworkReason(TIRUseNetworkReason aReason);
+        
+    TIRUseNetworkReason getUseNetworkReason() const;
+        
+protected:
+    IRBaseView(IRApplication *aApplication, TIRViewId aViewId);
+
+    IRAbstractViewManager* getViewManager() const;
+
+    void popupNote(const QString &aNote, const HbMessageBox::MessageBoxType &aNoteType) const;
+
+protected:
+    IRApplication* iApplication;
+    
+    //reference, owned by IRApplication
+    IRPlayController *iPlayController;
+    IRQIsdsClient    *iIsdsClient;
+    IRQNetworkController *iNetworkController;
+    IRQFavoritesDB       *iFavorites;
+    IRQSettings          *iSettings;
+    IRDocumentLoader iLoader;
+
+private:
+    TIRViewId      iViewId;
+    int            iFlag;
+    TIRUseNetworkReason iUseNetworkReason;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/ircategorymodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IR_CATEGORY_MODEL_H
+#define IR_CATEGORY_MODEL_H
+
+#include <QAbstractItemModel>
+
+class IRQBrowseCategoryItem;
+
+class IRCategoryModel : public QAbstractListModel
+{
+	Q_OBJECT
+
+public:
+    explicit IRCategoryModel(QObject *aParent = 0);
+    ~IRCategoryModel();
+    
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+    
+    const QString& categoryName(const QModelIndex &aIndex) const;
+    
+signals:
+    void dataChanged();
+    
+private slots:
+    void categoryReceived(QList<IRQBrowseCategoryItem*> *aItems);
+    
+private:
+    void destroyAllItems();
+    
+private:
+    QList<IRQBrowseCategoryItem*> *iItems;
+};
+
+
+#endif // IR_CATEGORY_MODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/ircategoryview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRCATEGORYVIEW_H
+#define IRCATEGORYVIEW_H
+
+#include "irabstractlistviewbase.h"
+#include "irqevent.h"
+#include "irqisdsclient.h"
+
+class IRCategoryModel;
+
+class IRCategoryView : public IrAbstractListViewBase
+{
+	Q_OBJECT
+public:
+	~IRCategoryView();
+
+    void setViewParameter(TIRViewParameter aParameter);
+    TIRViewParameter getViewParameter() const;
+	 
+    void loadCategory(IRQIsdsClient::IRQIsdsClientInterfaceIDs aCategory);
+    
+protected:
+    IRCategoryView(IRApplication* aApplication, TIRViewId aViewId);
+       
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
+    //from base class IRBaseView
+    void launchAction();
+    void itemAboutToBeSelected(bool &aNeedNetwork);
+    
+private slots:       
+    void cancelRequest();    
+    
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+    
+    void dataChanged();
+    
+    //used for connect signal from isds client
+    void operationException(IRQError aError);
+    
+    
+private:
+    //from base class IrAbstractListViewBase
+    void setCheckedAction();
+    
+    void resetCurrentItem();
+    void storeCurrentItem();
+    void handleItemSelected();
+    
+    void createWaitDialog(const QString &aText);
+    
+    void connectToIsdsClient();
+    
+    void disconnectIsdsClient();
+    
+private:
+	HbMessageBox *iWaitDialog;
+    TIRViewParameter iViewParameter;
+    int iLastSelectItem;
+    IRCategoryModel *iModel;
+    
+    friend class IRViewManager;
+};
+
+#endif // IRCATEGORYVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irchannelmodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* 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 IRCHANNELMODEL_H
+#define IRCHANNELMODEL_H
+
+#include <QAbstractItemModel>
+
+class HbIcon;
+class IRQChannelItem;
+
+class IrChannelModel : public QAbstractListModel
+{
+    Q_OBJECT
+
+public:
+    explicit IrChannelModel(QObject *aParent = NULL);
+    ~IrChannelModel();
+
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+    QString imageUrl(int aRow);
+    void setLogo(HbIcon *aIcon, int aIndex);
+
+    void clearAndDestroyLogos();
+    
+public slots:
+    void updateData(QList<IRQChannelItem*> *aPushItemsList);
+
+signals:
+    void dataAvailable();
+
+private:
+    void clearAndDestroyItems();
+    
+private:
+    QList<IRQChannelItem*> *iChannelList;
+    QMap<int, HbIcon*>     iLogos;
+    HbIcon *iStationLogo;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/ircombobox.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRCOMBOBOX_H_
+#define IRCOMBOBOX_H_
+
+#include <hbcombobox.h>
+ 
+ 
+
+class IrComboBox : public HbComboBox    
+{    
+    Q_OBJECT
+
+public:
+    IrComboBox(QGraphicsItem *parent = NULL);
+
+signals:
+    void pressed();
+    
+protected:     
+    void mousePressEvent(QGraphicsSceneMouseEvent *event);
+};
+
+#endif /* IRCOMBOBOX_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irdocumentloader.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRDOCUMENTLOADER_H_
+#define IRDOCUMENTLOADER_H_
+
+#include <hbdocumentloader.h>
+
+class IRDocumentLoader : public HbDocumentLoader
+{
+public:
+    IRDocumentLoader(QObject *aParent);
+    
+    QObjectList load(const QString &aFileName, const QString &aSection, QObject *aParent = NULL);
+    QObjectList load(const QString &aFileName, QObject *aParent = NULL);
+    
+public:
+    virtual QObject *createObject(const QString& aType, const QString &aName);
+    
+private:
+    QObject *iParent;
+};
+
+#endif /* IRDOCUMENTLOADER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irfavoritesmodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRFAVORITESMODEL_H
+#define IRFAVORITESMODEL_H
+
+#include <QAbstractItemModel>
+
+class IRQPreset;
+class IRQFavoritesDB;
+class HbIcon;
+
+class IRFavoritesModel : public QAbstractListModel
+{    
+    
+Q_OBJECT
+
+public:
+    explicit IRFavoritesModel(IRQFavoritesDB *aFavoritesDb, QObject *aParent = NULL);
+    ~IRFavoritesModel();
+    
+    IRQPreset* getPreset(int aIndex) const;
+    QString    getImgUrl(int aIndex) const;
+    
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+    void setLogo(HbIcon *aIcon, int aIndex);
+    bool checkFavoritesUpdate();
+    
+    void clearFavoriteDB();
+    void clearAndDestroyLogos();
+    bool deleteOneFavorite(int aIndex);    
+    
+signals:
+    void modelChanged();
+    
+    
+private:
+    void clearPresetList();
+    
+private:
+    IRQFavoritesDB    *iFavoritesDb;
+    QList<IRQPreset*> *iPresetsList;
+    HbIcon            *iStationLogo;
+    QMap<int, HbIcon*>     iLogos;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irfavoritesview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRFAVORITESVIEW_H
+#define IRFAVORITESVIEW_H
+
+#include "irabstractlistviewbase.h"
+#include "irqevent.h"
+
+class IRFavoritesModel;
+class IRQPreset;
+
+class IRFavoritesView : public IrAbstractListViewBase 
+{
+    Q_OBJECT
+
+public:
+    ~IRFavoritesView();
+    
+protected:
+    IRFavoritesView(IRApplication *aApplication, TIRViewId aViewId);
+    
+    //from base
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
+private slots:
+    void clearAllFavorites();        
+    void networkRequestNotified(IRQNetworkEvent aEvent);    
+    void convertAnother();
+    void presetLogoDownload(IRQPreset* aPreset);
+    void presetLogoDownloadError();	
+    void modelChanged();
+    
+private:
+    //from IrAbstractListViewBase
+    void setCheckedAction();
+    void handleItemSelected();
+    void prepareMenu();
+    void startConvert(int aIndex); 
+    void deleteContextAction();
+    //from base view 
+    void listViewLongPressed(HbAbstractViewItem *aItem, const QPointF& aCoords);
+    
+    
+    
+private:
+    
+    IRFavoritesModel  *iModel;
+    HbAction          *iClearFavoriteAction;
+    //the following are used to support the img
+    QList<int>         iIconIndexArray;
+    IRQPreset         *iLogoPreset;
+    
+    friend class IRViewManager;
+};
+
+#endif //IRFAVORITESVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irhistorymodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRHISTORYMODEL_H_
+#define IRHISTORYMODEL_H_
+
+#include <QAbstractItemModel>
+
+class IRQSongHistoryEngine;
+class IRQSongHistoryInfo;
+class HbIcon;
+
+class IRHistoryModel : public QAbstractListModel
+{
+Q_OBJECT
+public:
+    explicit IRHistoryModel(QObject *aParent = NULL);
+    ~IRHistoryModel();
+    
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+    
+    IRQSongHistoryInfo* getHistoryInfo(int aIndex);
+    void clearAllList();
+    bool checkHistoryUpdate();
+    void clearAndDestroyLogos();
+    QString getImageUrl(int aRow) const;
+    void setLogo(HbIcon *aIcon, int aIndex);
+    bool deleteOneItem(int aIndex);
+    
+signals:
+    void modelChanged();   
+
+private:
+    void getAllList();
+
+private:
+    QList<IRQSongHistoryInfo *> iHistoryList;
+    IRQSongHistoryEngine *iHistoryEngine;
+    QMap<int, HbIcon*>     iLogos;
+    HbIcon *iStationLogo;
+};
+
+#endif /* IRHISTORYMODEL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irhistoryview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRHISTORYVIEW_H
+#define IRHISTORYVIEW_H
+
+#include "irabstractlistviewbase.h" 
+#include "irqevent.h"
+
+class IRQPreset;
+class IRHistoryModel;
+class IRQSongHistoryInfo; 
+
+class IRHistoryView : public IrAbstractListViewBase
+{
+    Q_OBJECT
+
+public:
+    ~IRHistoryView();
+    
+protected:
+    IRHistoryView(IRApplication *aApplication, TIRViewId aViewId);
+    
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+   
+private slots:
+    void clearAllList();
+    void presetResponse(IRQPreset *aPreset);
+    void operationException(IRQError aError);
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+    void cancelRequest();
+    //to start the convertion asynchronously
+    void convertAnother();
+    void presetLogoDownload(IRQPreset* aPreset);
+    void presetLogoDownloadError();
+    void modelChanged();
+    void gotoSongHistory();
+    
+private:
+    void showHistory();
+    void handleItemSelected();
+    void listViewLongPressed(HbAbstractViewItem *aItem, const QPointF& aCoords);
+    
+    //from IrAbstractListViewBase
+    void prepareMenu();
+    void startConvert(int aIndex); 
+    void convertStationHistory2Preset(const IRQSongHistoryInfo& aHistoryInfo, IRQPreset& aPreset);
+    void addContextAction();
+    void deleteContextAction();
+
+private:  
+    IRHistoryModel *iModel;
+    HbAction       *iClearHistoryAction;
+    HbAction       *iSongHistoryAction;
+    
+
+    //the following are used to support the img
+    QList<int> iIconIndexArray;
+    IRQPreset *iLogoPreset;
+     
+    
+    friend class IRViewManager;
+};
+
+#endif //IRHISTORYVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irlastplayedstationinfo.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRLASTPLAYEDSTATIONINFO_H
+#define IRLASTPLAYEDSTATIONINFO_H
+
+#include "irqenums.h"
+
+class IRQPreset;
+
+class IRLastPlayedStationInfo
+{
+public:
+    IRLastPlayedStationInfo();
+    ~IRLastPlayedStationInfo();
+    
+    void updateLastPlayedStation(IRQPreset *aPreset, IRQConnectedFrom aConnectedFrom);
+    void commitLastPlayedStation();
+    
+    IRQPreset * getLastPlayedStation() const;
+    IRQConnectedFrom connectedFrom() const;
+    
+private:
+    void readLastPlayedStation();
+    
+private:
+    IRQPreset *iLastPlayedStation;
+    bool       iUpdated;
+    IRQConnectedFrom iConnectedFrom;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irlineeditor.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,36 @@
+/*
+* 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 IRLINEEDITOR_H_
+#define IRLINEEDITOR_H_
+
+#include <hblineedit.h>
+
+class IrLineEditor : public HbLineEdit
+{
+    Q_OBJECT
+
+public:
+    IrLineEditor(QGraphicsItem *parent = NULL);
+
+signals:
+    void pressed(void);
+    
+protected:     
+    void mousePressEvent(QGraphicsSceneMouseEvent *event);
+};
+
+#endif /* IRLINEEDITOR_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irmainmodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRMAINMODEL_H
+#define IRMAINMODEL_H
+
+#include <QAbstractListModel>
+#include <QStringList>
+
+class IRMainModel : public QAbstractListModel
+{
+    Q_OBJECT
+public:
+    explicit IRMainModel(QObject *aParent = 0);
+    
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+
+    void checkUpdate();
+    
+private:
+    void initModel();
+    
+private:
+    QStringList iPrimaryTexts;
+    QStringList iSecondaryTexts;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irmainview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRMAINVIEW_H
+#define IRMAINVIEW_H
+
+#include "irabstractlistviewbase.h"
+#include "irqevent.h"
+
+class IRMainModel;
+
+class IRMainView : public IrAbstractListViewBase
+{
+	Q_OBJECT
+public:
+	~IRMainView();
+        
+protected:
+    //only friend class IRViewManager can create this view
+    IRMainView(IRApplication *aApplication, TIRViewId aViewId);
+    
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
+private slots:
+	/*
+	 * Description : slot function for active network event
+	 * Parameters  : aEvent, see the definition of IRQNetworkEvent
+	 */
+	void networkRequestNotified(IRQNetworkEvent aEvent);
+	
+private:
+    //from base class IrAbstractListViewBase
+    void handleItemSelected();
+ 
+    void itemAboutToBeSelected(bool& aNeedNetwork);
+ 
+    void setCheckedAction();
+ 
+    //from base class IRBaseView
+    void updateView();
+    
+private:
+    IRMainModel *iMainModel;
+
+    enum TUserSelection
+    {
+        ERecentlyPlayedStations,
+        EBrowseByCountry,
+        EBrowseByLanguage,
+        ESongsPlayed,
+        EPlayList
+    };
+    
+    friend class IRViewManager;
+};
+
+#endif // IRMAINVIEW_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irmediakeyobserver.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* 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 IRMEDIAKEYOBSERVER_H_
+#define IRMEDIAKEYOBSERVER_H_
+
+#include <QObject>
+#include <remconcoreapitargetobserver.h>
+
+class CRemConInterfaceSelector;
+class HbVolumeSliderPopup;
+class QTimer;
+class IRApplication;
+class IRPlayController;
+
+/**
+ * This class observes the media key events and controls the volume.
+ */
+
+class IRMediaKeyObserver : public QObject, public MRemConCoreApiTargetObserver
+{
+    Q_OBJECT
+
+public:
+    explicit IRMediaKeyObserver(IRApplication* aApplication);
+    ~IRMediaKeyObserver();
+
+signals:
+    void playPausePressed();
+    void stopPressed();
+
+public slots:
+    void showVolumeSlider();
+
+private slots:
+    void volumeCallback();
+    int changingVolume();
+    void volumeChanged(int aVolume);
+
+private:
+    //from base class MRemConCoreApiTargetObserver
+    //respond to the media button
+    void MrccatoCommand(TRemConCoreApiOperationId aOperationId,
+            TRemConCoreApiButtonAction aButtonAct);
+
+    //from base class MRemConCoreApiTargetObserver
+    //respond for play command
+    void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed,
+            TRemConCoreApiButtonAction aButtonAct);
+
+    void initializeL();
+
+private:
+    /*
+     * iSelector
+     * Instance of CRemConInterfaceSelector For
+     * Handling Media Keys
+     */
+    CRemConInterfaceSelector* iInterfaceSelector;
+
+    /*
+     * Respond continuous volume change
+     */
+    QTimer* iVolumeControlTimer;
+
+    HbVolumeSliderPopup *iVolumeSlider;
+    bool iIncreseVolume;
+
+    IRPlayController *iPlayController;
+};
+
+#endif /* IRMEDIAKEYOBSERVER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irmemorycollector.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRMEMORYCOLLECTOR_H
+#define IRMEMORYCOLLECTOR_H
+
+#include <QObject>
+
+class IRApplication;
+
+class IRMemoryCollector : public QObject
+{
+    Q_OBJECT
+public:
+    IRMemoryCollector(IRApplication* aApplication);
+    
+private slots:
+    void aboutToQuit();
+    
+private:
+    IRApplication *iApplication;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irnowplayingcontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* 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 IRNOWPLAYINGCONTAINER_H
+#define IRNOWPLAYINGCONTAINER_H
+
+#include <hbwidget.h>
+#include "irdocumentloader.h"
+
+class HbTextItem;
+class HbLabel;
+class HbMarqueeItem;
+
+/**
+ * This class is a widget of now playing view. It displays the
+ * main information of the channel server.
+ */
+
+class IRNowPlayingContainer : public HbWidget
+{
+    Q_OBJECT
+
+public:
+    explicit IRNowPlayingContainer(QObject *aLoaderParent, QGraphicsItem *aParent = 0);
+    ~IRNowPlayingContainer();
+
+    // Methods to set station information
+    void setStationName(const QString &aStationName);
+    void setCategory(const QString &aCategory);
+    void setSongName(const QString &aSongName);
+    void setLogo(const HbIcon& aLogo);
+    void setAdvImage(const HbIcon& aAdvImage);
+
+signals:
+    // This signal will cause the popup of volume slider control
+    void volumePressed(void);
+    // This signal will cause a browser open a link to the adv.
+    void advertisementPressed(void);
+
+protected:
+    // Inherited methods
+    void mousePressEvent(QGraphicsSceneMouseEvent *aEvent);
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+private slots:
+    void orientationChanged(Qt::Orientation aOrientation);
+
+private:
+    void constructContainer();
+    void resizeContainer(Qt::Orientation aOrientation);
+
+private:
+    // This loader is for XML layout.
+    IRDocumentLoader iLoader;
+
+    // Station information
+    HbTextItem *iStationName;
+    HbTextItem *iCategory;
+    HbMarqueeItem *iSongName;
+    HbLabel *iAdvImage;
+    HbLabel *iLogo;
+};
+
+#endif   //IRNOWPLAYINGCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irnowplayingview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,139 @@
+/*
+* 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 IRNOWPLAYINGVIEW_H
+#define IRNOWPLAYINGVIEW_H
+
+#include <hbeffect.h>
+
+#include "irbaseview.h"
+#include "irqevent.h"
+
+class IRNowPlayingContainer;
+class IRStationDetailsContainer;
+class HbAction;
+class IRQPreset;
+class IRQMusicShop;
+class IRQStatisticsReporter;
+class IRQMetaData;
+class IRQStationExporter;
+
+/**
+ * This class shows the station information when it's played.
+ */
+
+class IRNowPlayingView : public IRBaseView
+      
+{
+    Q_OBJECT
+
+public:
+    ~IRNowPlayingView();
+
+protected:
+    IRNowPlayingView(IRApplication* aApplication, TIRViewId aViewId);
+    //from base class IRBaseView
+    TIRHandleResult handleSystemEvent(TIRSystemEventType aEvent);
+
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+
+    //from base class IRBaseView
+    void launchAction();
+
+    
+
+private slots:
+    void presetLogoDownload(IRQPreset* aPreset);
+    void playStopControl();
+    void stop();
+    void playingStarted();
+    void playingStopped();
+    void add2FavControl();
+    void flipControl();
+    void hidePlayingWidgetComplete(HbEffect::EffectStatus status);
+    void hideDetailsWidgetComplete(HbEffect::EffectStatus status);
+    void stereoControl();
+    void openWebAddressControl();
+    void launchSettingsView();
+    void updateSongInfo(IRQMetaData*);
+    void updateLogoInfo();
+    void initializeLogo();
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+    void findInMusicShop();
+    void helpAction();
+    void playPressed();
+    void gotoMusicStore();
+    void recognizeSong();
+    void openAdvLink();
+    void shareStationViaMms();
+    void prepareMenu();
+
+private:
+    void createMenu();
+    void createToolBar();
+    void updateStationInfo();
+    void updateAdvImage();
+    void showWidget();
+    void initialize();
+    void updateMusicStatus();
+
+private:
+    // preset to save station big logo
+    IRQPreset *iLogoPreset;
+    IRNowPlayingContainer *iNowPlayingContainer;
+    IRStationDetailsContainer *iStationDetailsContainer;
+    // save the pointer of idle container
+    QGraphicsWidget *iIdleContainer;
+    IRQMusicShop *iMusicShop;
+    IRQStatisticsReporter *iStatisticsReporter;
+    IRQStationExporter *iStationExporter;
+
+    // menu bar actions
+    HbAction *iStereoAction;
+
+    // tool bar actions
+    HbAction *iMusicShopAction;
+    HbAction *iPlayStopAction;
+    HbAction *iAdd2FavAction;
+    HbAction *iFlipAction;
+
+    QString iAdvImageUrl;
+    QString iTempAdvClickThroughUrl;
+    QString iAdvClickThroughUrl;
+    bool    iGettingAdv;
+    HbIcon *iStationLogo;
+
+    int  iStereoMode;
+    bool iShowStationInfo;
+
+    enum LogoState
+    {
+        EDefaultLogo    = 0, // Use default logo
+        ERequestIssued  = 1, // Issue request to get logo from server
+        ELogoDetermined = 2, // Logo got from server or user defined
+                             // stations with default logo
+    };
+    LogoState iLogoStatus;
+    
+    bool iFindinNmsAllowed;
+    
+    bool iSongNameAvailable;
+    
+    friend class IRViewManager;
+};
+
+#endif   //IRNOWPLAYINGVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/iropenwebaddressview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* 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 IROPENWEBADDRESSVIEW_H_
+#define IROPENWEBADDRESSVIEW_H_
+
+#include "irbaseview.h"
+#include "irqevent.h"
+
+class IRQPreset;
+class HbLineEdit;
+class IrLineEditor;
+class HbPushButton;
+
+/**
+ * This class is for users to input a station manually.
+ */
+
+class IROpenWebAddressView : public IRBaseView
+{
+Q_OBJECT
+
+public:
+    ~IROpenWebAddressView();
+
+    // from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+
+protected:
+    IROpenWebAddressView(IRApplication* aApplication, TIRViewId aViewId);
+   
+private:
+    void initDetails();
+    void initButtons();
+    bool initPreset(IRQPreset &aPreset);
+
+private slots:
+    // add the station to favorites
+    void add2Fav();
+
+    // play this station
+    void play();
+
+    // get network controller event.
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+    
+    // used to check the url editor status
+    void urlEditorTextChanged(const QString &aString);
+
+    // clear name editor
+    void nameEditorClicked();
+    
+    void handleOrientationChanged(Qt::Orientation aOrientation);
+
+private:
+    // station information
+    HbLineEdit*   iUrl;
+    IrLineEditor* iName;
+    HbLineEdit*   iDescription;
+    bool          iNameClicked;
+    
+    HbPushButton* iPlayButton;
+    HbPushButton* iAdd2FavButton;
+    friend class IRViewManager;
+};
+
+#endif /* IROPENWEBADDRESSVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irplaycontroller.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* 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 IRPLAYCONTROLLER_H
+#define IRPLAYCONTROLLER_H
+
+#include <QObject>
+#include <hbglobal.h>
+
+#include "irqenums.h"
+
+class HbProgressDialog;
+class IRApplication;
+class IRQMediaPlayer;
+class IRQPreset;
+class IRQMetaData;
+class IRQSongHistoryEngine;
+class IRQStatisticsReporter;
+
+/**
+ * This class is a wrapper for IRQMediaPlayer.
+ */
+
+class IRPlayController : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit IRPlayController(IRApplication* aApplication);
+    ~IRPlayController();
+
+    // Play a station
+    void connectToChannel(IRQPreset *aPreset, IRQConnectedFrom aConnectedFrom);
+
+    // Create a buffering dialog
+    void createBufferingDialog(const QObject *aReceiver, const char *aFunc);
+
+    // Close the buffering dialog
+    void closeBufferingDialog();
+
+    // Play control methods
+    void resume();
+    void stop(IRQTerminatedType aStopReason);
+    int getVolume() const;
+    void setVolume(int aVolume);
+    void enableStereo();
+    void disableStereo();
+
+    // Check the playing status
+    bool isPlaying() const;
+
+    // Check the playing status
+    bool isStopped() const;
+
+    // Get the preset of now playing
+    IRQPreset * getNowPlayingPreset() const;
+
+    // Get the meta data
+    IRQMetaData * getMetaData() const;
+    
+    IRQTerminatedType getStopReason() const;
+    
+#ifdef _DEBUG
+    int bitrateTrying() const;
+#endif 
+
+signals:
+    // emitted when meta data is available
+    void metaDataAvailable(IRQMetaData*);
+
+    // emitted when playing started
+    void playingStarted();
+
+    // emitted when playing stopped
+    void playingStopped();
+
+    // emitted when logo needs to update
+    void initializeLogo();
+
+private slots:
+    // slots connected with IRQMediaPlayer
+    void connectionEstablished(int aBitrate);
+    void errorOccured(IRQError aError);
+    void updateProgress(int aProgress);
+    void fetchVolume(int &aVolume);
+    void handleMetaDataReceived(IRQMetaData& aIRmetaData);
+
+    // slots connected with own functions
+    void cancelBuffering();
+    void handleError();
+
+private:
+    void createNote(const QString &aNote = hbTrId("txt_irad_info_failed_to_connect"));
+    void connectSignalSlot();
+
+    // Play next URL if the previous failed to connect.
+    bool playNextUrl();
+
+    void doPlay(const QString& aUrl);
+	
+	void startSession();
+	void endSession(IRQTerminatedType aStopReason);
+
+private:
+    IRApplication *iApplication;
+    IRQMediaPlayer *iMediaPlayer;
+    
+    IRQStatisticsReporter *iStatisticsReporter;
+    IRQConnectedFrom iConnectedFrom;
+    bool iSessionStarted;
+    bool iGetServerResult;
+    
+    HbProgressDialog *iBufferingDialog;
+    IRQPreset *iNowPlayingPreset;
+    // reference of IRQMediaPlayer meta data
+    IRQMetaData *iMetaData;
+    IRQSongHistoryEngine *iSongHistoryEngine;
+
+    enum EPlayState
+    {
+        //initial state
+        EStopped = 0,
+        //connecting station and buffering
+        EBuffering,
+        //playing
+        EPlaying
+    };
+
+    EPlayState iPlayState;
+    // If resuming the last played url fails, connect to all the preset.
+    bool iResuming;
+
+    // variants for play next URL
+    // available bitrates in the preset
+    QList<int> iAvailableBitrate;
+
+    // the bitrate is now tried.
+    int iTryingBitrate;
+
+    // the URLs of a specific bitrate
+    QList<QString> *iUrlArray;
+
+#ifdef __WINS__
+    QString iLastPlayedChannelName;
+#endif
+
+    // the bitrate from real station feedback.
+    int iRealBitrate;
+    QString iLastPlayedUrl;
+    // To handle error async
+    IRQError iLastError;
+    
+    IRQTerminatedType iStopReason;
+};
+
+#endif  //IRPLAYCONTROLLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irplsmodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRPLSMODEL_H
+#define IRPLSMODEL_H
+
+#include <QAbstractListModel>
+
+class IRSymbianDocument;
+
+class IRPlsModel : public QAbstractListModel
+{
+public:
+    explicit IRPlsModel(QObject *aParent = 0);
+    
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+    
+    const QString& getFile(int aIndex) const;
+    const QString& getTitle(int aIndex) const;
+    
+private:
+    IRSymbianDocument *iDocument;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irplsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRPLSVIEW_H
+#define IRPLSVIEW_H
+
+#include "irabstractlistviewbase.h"
+#include "irqevent.h"
+
+class IRPlsModel;
+
+class IRPlsView : public IrAbstractListViewBase
+{
+    Q_OBJECT
+public:
+    ~IRPlsView();
+    
+protected:
+    //only friend class IRViewManager can create this view
+    IRPlsView(IRApplication *aApplication, TIRViewId aViewId);
+    
+private slots:
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+    
+private:
+    //from base class IrAbstractListViewBase
+    void handleItemSelected();    
+    
+    //from base class IRBaseView
+    void updateView();
+    
+private:
+    IRPlsModel *iPlsModel;
+    
+    friend class IRViewManager;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsearchchannelsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#ifndef IRSEARCHVIEWC_H
+#define IRSEARCHVIEWC_H
+
+ 
+#include "irqevent.h"
+#include "irbaseview.h" 
+ 
+ 
+class HbPushButton; 
+class HbAction;   
+class HbLabel;  
+class IrComboBox; 
+class IrNowPlayingBannerLabel;
+class IRQMetaData;
+class IRSearchCriteriaDB;
+
+
+class IRSearchChannelsView : public IRBaseView
+{
+    Q_OBJECT
+    
+public:
+    
+    ~IRSearchChannelsView();
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
+protected:
+    IRSearchChannelsView(IRApplication* aApplication, TIRViewId aViewId);
+    
+private:
+    
+    //move from irabstractlistbaseview
+    void updateView();
+    void initMenu();
+    void initToolBar();    
+    void initContentWidget();    
+    void addBanner(const QString &aText);
+    void createDB();
+    
+    
+private slots:
+    
+    void collectionsActionClicked();
+    void favoritesActionClicked();    
+ 
+    void startSearch(bool aBool);     
+    void helpAction();        
+    void searchBoxTextChanged(const QString &aString);    
+    void cancelRequest();
+    void networkRequestNotified(IRQNetworkEvent aEvent);  
+    void comboboxClicked();
+    void launchSettingsView();
+    void openWebAddress();
+    void gotoNowPlaying();
+    void metaDataAvailable(IRQMetaData* aMetaData);
+    void removeBanner();    
+    void dbDataChanged();
+    
+private: // members    
+    
+    HbAction            *iCollectionsAction;
+    HbAction            *iFavoritesAction;
+    HbAction            *iGenresAction;
+    HbAction            *iSearchAction;             
+    HbPushButton        *iSearchButton;       
+    HbLabel             *iSearchText;
+    HbLabel             *iSearchIconLabel;
+    IrComboBox          *iSearchCombobox;
+    bool                 iFirstTime;
+    IrNowPlayingBannerLabel *iBannerLabel;
+    IRSearchCriteriaDB   *iDB;
+
+    friend class IRViewManager;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsearchcriteriadb.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRSEARCHCRITERIADB_H
+#define IRSEARCHCRITERIADB_H
+
+#include <QObject>
+#include <QEvent>
+#include <QStringList>
+#include "irqenums.h"
+
+/* use this macro to limit the length of the input string */
+#define CRITERIA_UPLIMIT_LENGTH 127
+ 
+class QSqlDatabase;
+
+class IRSearchCriteriaDB : public QObject
+{
+	Q_OBJECT
+	
+public:
+		
+    explicit IRSearchCriteriaDB(int aMaxCount = 100);     
+	~IRSearchCriteriaDB();
+	IRQError addOneCriteria(const QString& aCriteria);
+    bool getAllCriteria(QStringList& aStrList) const;
+    bool isAlreadyExist(const QString& aCriteria) const;
+
+signals:
+    void dataAdded();   
+    
+private:		
+    void createDBConnection();
+    bool deleteSomeCriteria();
+		
+private:
+		
+	  QSqlDatabase         *iDB;  	 
+	  int          iMaxCount;					
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsettingsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRSETTINGSVIEW_H
+#define IRSETTINGSVIEW_H
+
+#include "irbaseview.h"
+
+class HbDataForm;
+class HbDataFormModel;
+
+ 
+
+class IRSettingsView : public IRBaseView
+{
+    Q_OBJECT
+public:
+    ~IRSettingsView();
+    
+protected:
+    IRSettingsView(IRApplication *aApplication, TIRViewId aViewId);
+    
+
+
+private slots:
+    void startingViewSelected(int aIndex);
+    void preferredQualitySelected(int aIndex);
+    
+private:
+    void initView();
+    void setNetworkChooseList();
+    void setStartingViewList();
+    void setPreferredQuality();
+    int getStartingViewSelection();
+    
+private:
+    HbDataForm *iForm;
+    HbDataFormModel *iModel;
+    QStringList iStartingViews;
+    QStringList iPreferredQuality;
+    friend class IRViewManager;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsonghistorymodel.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRSONGHISTORYMODEL_H_
+#define IRSONGHISTORYMODEL_H_
+
+#include <QAbstractItemModel>
+
+class IRQSongHistoryEngine;
+class IRQSongInfo;
+class IRQMetaData;
+
+class IRSongHistoryModel : public QAbstractListModel
+{
+Q_OBJECT
+public:
+    explicit IRSongHistoryModel(QObject *aParent = NULL);
+    ~IRSongHistoryModel();
+    
+    int rowCount(const QModelIndex &aParent = QModelIndex()) const;
+    QVariant data(const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
+    
+    IRQSongInfo* getSongHistoryInfo(int aIndex);
+    void clearAllList();
+    bool checkSongHistoryUpdate();   
+    void clearHisotrySongDB();  
+    
+signals:
+    void modelChanged();   
+
+private:
+    void getAllList();
+
+private:
+    QList<IRQSongInfo *> iSongHistoryList;
+    IRQSongHistoryEngine *iHistoryEngine;  
+};
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsonghistoryview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* 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 IRSONGHISTORYVIEW_H_
+#define IRSONGHISTORYVIEW_H_
+
+#include "irabstractlistviewbase.h" 
+#include "irqevent.h"
+
+class IRQPreset;
+class IRSongHistoryModel;
+class IRQMusicShop;
+class IRQStatisticsReporter;
+class IRQMetaData; 
+class HbIcon;
+class QTimer;
+
+class IRSongHistoryView : public IrAbstractListViewBase 
+{
+    Q_OBJECT
+
+public:
+    ~IRSongHistoryView();
+    
+protected:
+    IRSongHistoryView(IRApplication *aApplication, TIRViewId aViewId);
+    
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+     
+private slots:
+    void clearAllList(); 
+    void modelChanged();
+    void newMetadataAdded(IRQMetaData * aMetadata);
+    void clearHisotrySongDB();   
+    void showPrompt();
+    void gotoStationHistory();
+    
+private:
+    void showSongHistory();
+    void handleItemSelected();         
+    //from IrAbstractListViewBase
+    void prepareMenu(); 
+    void itemAboutToBeSelected(bool& needNetwork);
+	
+private:  
+    IRSongHistoryModel *iModel;
+    HbAction           *iClearSongHistoryAction;   
+    HbAction           *iStationHistoryAction;
+    IRQMusicShop       *iMusicShop;
+    IRQStatisticsReporter *iStatisticsReporter;     
+    int           iShowPrompt;
+     
+     
+    friend class IRViewManager;
+};
+
+#endif  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irstationdetailscontainer.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* 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 IRSTATIONDETAILSCONTAINER_H_
+#define IRSTATIONDETAILSCONTAINER_H_
+
+#include <hbscrollarea.h>
+#include "irdocumentloader.h"
+
+class HbLabel;
+class HbTextItem;
+class HbListWidget;
+
+/**
+ * This class is a widget of now playing view. It displays all the
+ * information of the channel server.
+ */
+
+class IRStationDetailsContainer : public HbScrollArea
+{
+public:
+    explicit IRStationDetailsContainer(QObject *aLoaderParent, QGraphicsItem *aParent = 0);
+    ~IRStationDetailsContainer();
+
+    // Methods to set station information
+    void setDetails(IRQPreset *aNowPlayingPreset, const HbIcon& aIcon);
+    void setLogo(const HbIcon& aIcon);
+
+protected:
+    // Inherited method to respond to direction change
+    void resizeEvent(QGraphicsSceneResizeEvent *aEvent);
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+private:
+    void createDetails();
+    void resizeContainer();
+    void resizeWidget();
+    qreal countWidgetHeight(HbTextItem* aTextItem);
+
+private:
+    // This loader is for XML layout.
+    IRDocumentLoader iLoader;
+
+    // In portrait mode or landscape mode
+    bool iPortrait;
+
+    HbWidget* iContainer;
+
+    // Station information
+    HbLabel *iLogo;
+    HbTextItem *iStationName;
+    HbTextItem *iDescription;
+    HbTextItem *iGenres;
+    HbTextItem *iLanguage;
+    HbTextItem *iCountry;
+    HbTextItem *iType;
+    HbListWidget *iStreamsList;
+};
+
+#endif /* IRSTATIONDETAILSCONTAINER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irstationsview.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* 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 IRSTATIONSVIEW_H
+#define IRSTATIONSVIEW_H
+
+ 
+#include "irabstractlistviewbase.h"
+#include "irqevent.h"
+ 
+class IRQPreset;
+class IrChannelModel;
+class QTimer;
+
+class IRStationsView : public IrAbstractListViewBase
+{
+    Q_OBJECT
+    
+public:
+    ~IRStationsView();
+
+    void setViewParameter(TIRViewParameter aParameter);
+    TIRViewParameter getViewParameter() const;
+    
+    void loadCategoryStations(int aIndex, const QString &aHeadingText);
+    
+    void loadPopularStations(bool aShowWaitDialog);
+    
+    void loadSearchResult(const QString &aStr);
+    
+protected:
+    IRStationsView(IRApplication* aApplication, TIRViewId aViewId);
+    
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
+    //from base class IRBaseView
+    void launchAction();
+    
+private slots:  
+    void presetResponse(IRQPreset *aPreset);
+    
+    void presetLogoDownload(IRQPreset* aPreset);
+    
+    void presetLogoDownloadError();
+    
+    void networkRequestNotified(IRQNetworkEvent aEvent);
+    
+    void dataChanged();
+    
+    //used for connect signal from isds client
+    void operationException(IRQError aError);
+    
+    //to start the convertion 
+    void convertAnother();
+    
+    void connectTimeOut(); 
+  
+    void cancelRequest();
+    
+private:
+    void resetCurrentItem();
+    void storeCurrentItem();
+    void handleItemSelected();
+    
+    void startConvert(int aIndex); 
+    
+    void cleanupResource();   
+    
+    void connectToIsdsClient();
+    
+    void disconnectIsdsClient();
+    
+    void createWaitDialog(QString aStr);   
+    
+private:
+    IRQPreset *iLogoPreset;
+    IRQPreset *iPreset; //the object is created by IsdsClient, but application is responsible for free
+    HbMessageBox *iWaitDialog;
+    TIRViewParameter iViewParameter;
+    int iLastSelectitem;
+    int iLastPopularItem;
+    
+    //the following are used to support the img
+    QList<int> iIconIndexArray;
+    IrChannelModel *iChannelModel;
+    QTimer *iConnectTimer;
+    
+    friend class IRViewManager;
+};
+
+#endif //IRSTATIONSVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsymbianapplication.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRSYMBIANAPPLICATION_H
+#define IRSYMBIANAPPLICATION_H
+
+#include <QS60MainApplication>
+
+CApaApplication *newS60Application();
+
+class IRSymbianApplication : public QS60MainApplication
+{
+public:
+    static IRSymbianApplication * getInstance();
+    bool getInstanceFlag() const;
+    
+private:
+    IRSymbianApplication();
+    
+    virtual CApaDocument *CreateDocumentL();
+    virtual void PreDocConstructL();
+    
+private:
+    static IRSymbianApplication * appInstance;
+    bool iSecondInstance;
+};
+
+
+#endif  //IRSYMBIANAPPLICATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsymbianappui.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* 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 IRSYMBIANAPPUI_H
+#define IRSYMBIANAPPUI_H
+
+#include <QS60MainAppUi>
+
+class IRSymbianAppui : public QS60MainAppUi
+{
+public:
+    //from base class CEikAppUi
+    void ConstructL();
+};
+
+#endif //IRSYMBIANAPPUI_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irsymbiandocument.h	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#ifndef IRSYMBIANDOCUMENT_H
+#define IRSYMBIANDOCUMENT_H
+
+#include <QS60MainDocument>
+
+#include <QString>
+#include <QList>
+
+class QTextStream;
+
+class IRPlsPlayListItem
+{
+public:
+    IRPlsPlayListItem(const QString &aFile, const QString &aTitle, int aLength);
+    
+    const QString & file() const;
+    const QString & title() const;
+    
+private:
+    QString iFile;
+    QString iTitle;
+    int     iLength;
+};
+
+class IRSymbianDocument : public QS60MainDocument
+{
+public:
+    static IRSymbianDocument *getInstance();
+    bool isPlsAvailable() const;
+    int getNumberOfEntries() const;
+    IRPlsPlayListItem* getEntry(int aIndex);
+    
+    void parseFile(const QString &aFileName);
+    
+private:
+    IRSymbianDocument(CEikApplication &mainApplication);
+    ~IRSymbianDocument();
+    
+private:
+    //from base class CEikDocument
+    void OpenFileL(CFileStore*& aFileStore, RFile& aFile);
+    CEikAppUi* CreateAppUiL();
+    
+    void parsePlsFile(const QString &aFileName);
+    void parseM3uFile(const QString &aFileName);
+    
+    void clearPlsList();
+    QString readValue(QTextStream &aStream, const QString &aKey);
+    
+private:
+    static IRSymbianDocument *documentInstance;
+    QList<IRPlsPlayListItem*> iPlsList;
+};
+
+#endif //IRSYMBIANDOCUMENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/iruidefines.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* 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 IRUIDEFINES_H_
+#define IRUIDEFINES_H_
+
+const QColor KListOddRowColor(211, 211, 211, 127);
+const QColor KListEvenRowColor(255, 250, 250, 127);
+const QColor KListMusicshopDisableColor(200, 0, 0, 127);
+const QColor KListMusicshopEnableColor(0,200,0,127);
+
+// Docml File
+static const char* ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME     = ":/layout/abstractlistviewbase.docml";
+static const char* STATION_DETAILS_CONTAINER_LAYOUT_FILENAME   = ":/layout/stationdetailscontainer.docml";
+static const char* NOW_PLAYING_VIEW_LAYOUT_FILENAME            = ":/layout/nowplayingview.docml";
+static const char* NOW_PLAYING_CONTAINER_LAYOUT_FILENAME       = ":/layout/nowplayingcontainer.docml";
+static const char* OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME       = ":/layout/openwebaddressview.docml";
+static const char* SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME        = ":/layout/searchchannelsview.docml";
+
+// IrAbstractListViewBase -- Object Name
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_VIEW                        = "ext-IrAbstractListViewBase";
+// menu action
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_OPEN_WEB_ADDRESS_ACTION     = "openWebAddressAction";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_SETTING_ACTION              = "settings";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_HELP_ACTION                 = "help";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_EXIT_ACTION                 = "exit";
+// tool bar action
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_TOOLBAR              = "toolbar";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_COLLECTION_ACTION    = "collections";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_FAVORITE_ACTION      = "favorites";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_GENRE_ACTION         = "genres";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_SEARCH_ACTION        = "search";
+// widget
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_HEADINGTEXTLABEL     = "headingText";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_PLAYINGBANNER        = "playingBanner";
+static const char* ABSTRACT_LIST_VIEW_BASE_OBJECT_LISTVIEW             = "listView";
+
+// IrAbstractListViewBase -- Section Name
+static const char* ABSTRACT_LIST_VIEW_BASE_NO_PLAYINGBANNER_SECTION    = "section_no_playingbanner";
+static const char* ABSTRACT_LIST_VIEW_BASE_WITH_PLAYINGBANNER_SECTION  = "section_with_playingbanner";
+
+// IRSearchChannelsView -- Object Name
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_VIEW                        = "ext-IRSearchChannelsView";
+// menu action
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_SETTING_ACTION              = "settings";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_OPEN_WEB_ADDRESS_ACTION     = "openWebAddressAction";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_HELP_ACTION                 = "help";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_EXIT_ACTION                 = "exit";
+// tool bar action
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_TOOLBAR                     = "toolbar";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_COLLECTION_ACTION           = "collections";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_FAVORITES_ACTION            = "favorites";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_GENRES_ACTION               = "genres";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_SEARCH_ACTION               = "search";
+// widget
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_LABEL             = "searchKey";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_BUTTON            = "searchButton";
+static const char* SEARCH_CHANNELS_VIEW_OBJECT_PLAYING_BANNER              = "playingBanner";
+
+// IRSearchChannelsView -- Section Name
+static const char* SEARCH_CHANNELS_VIEW_NO_PLAYINGBANNER_SECTION      = "section_no_playingbanner";
+static const char* SEARCH_CHANNELS_VIEW_WITH_PLAYINGBANNER_SECTION    = "section_with_playingbanner";
+
+
+#endif /* IRUIDEFINES_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irviewmanager.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* 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 IRVIEWMANAGER_H
+#define IRVIEWMANAGER_H
+
+#include <QStack>
+#include <hbeffect.h>
+
+#include "irabstractviewmanager.h"
+
+class QTimer;
+
+class IRViewManager : public IRAbstractViewManager
+{
+    Q_OBJECT
+public:
+    IRViewManager();
+    ~IRViewManager();
+    
+    //from base class IRAbstractViewManager
+    IRBaseView* getView(TIRViewId aViewId, bool aCreateIfNotExist);
+    
+    //from base class IRAbstractViewManager
+    bool isViewInStack(TIRViewId aViewId) const;
+    
+    //from base class IRAbstractViewManager
+    void activateView(TIRViewId aViewId, bool aPushCurrentView);
+    
+    //from base class IRAbstractViewManager
+    void activateView(IRBaseView *aView, bool aPushCurrentView);
+    
+    //from base class IRAbstractViewManager
+    void pushViewById(TIRViewId aViewId);
+    
+    //from base class IRAbstractViewManager
+    TIRViewId currentViewId() const;
+    
+    //from base class IRAbstractViewManager
+    TIRHandleResult handleSystemEvent(TIRSystemEventType aEvent);
+    
+    bool isExiting() const;
+       
+protected:
+    void mousePressEvent(QMouseEvent *aEvent);
+    void mouseReleaseEvent(QMouseEvent *aEvent);
+
+    void paintEvent(QPaintEvent *aEvent);
+    
+private slots:
+    void backToPreviousView();
+    /*we need to start the logo-down process after the effect for the process
+     * may block some painting event in QT enviroment*/
+    void showEffectFinished(HbEffect::EffectStatus aStatus);
+    void hideEffectFinished(HbEffect::EffectStatus aStatus);
+    void currentViewChanged(HbView *aView);
+    
+    void crossLineReset();
+    void exitTimeout();
+        
+private:
+    void backToView(TIRViewId aViewId);
+    IRBaseView* createView(IRApplication* aApplication, TIRViewId aViewId);
+    void clearStack();
+    void updateSoftkey();
+    
+    bool readyToQuit();
+    
+    void switchToNextView(IRBaseView *aView);
+        
+private:
+    QStack<IRBaseView*> iViewStack;
+    HbAction       *iBackAction;
+    HbAction       *iExitAction;
+    IRBaseView     *iViewToHide;
+    
+    bool iCrossLineAReady;
+    bool iCrossLineBReady;
+    bool iCrossLineEnable;
+
+    bool iCrossLineShowing;
+
+    QLineF iCrossLineA;
+    QLineF iCrossLineB;
+
+    QTimer *iCrossLineTimer;
+    QTimer *iExitTimer;
+    
+    bool iExiting;    
+};
+
+#endif
Binary file qtinternetradio/ui/resources/albumart.jpg has changed
Binary file qtinternetradio/ui/resources/default_cd.png has changed
Binary file qtinternetradio/ui/resources/default_cd1.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/effect/effects_item_select.fxml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,27 @@
+<!-- This effect file was generated by effectDialog -->
+
+<layers>
+<visual>
+
+<param name="scale_x" type="anim">
+<duration>0.3</duration>
+<style>inoutback</style>
+<keyframe at="0.0">1.0</keyframe>
+<keyframe at="1.0">1.2</keyframe>
+</param>
+<param name="scale_y" type="anim">
+<keyframe at="0.0">1.0</keyframe>
+<keyframe at="1.0">1.2</keyframe>
+</param>
+<param name="scale_origin_x" ref="visual.width">0.5</param>
+<param name="scale_origin_y" ref="visual.height">0.5</param>
+<param name="opacity" type="anim">
+<duration>0.3</duration>
+<style>linear</style>
+<keyframe at="0.0">1.0</keyframe>
+<keyframe at="1.0">0.5</keyframe>
+</param>
+
+</visual>
+</layers>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/effect/effects_item_select_end.fxml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,27 @@
+<!-- This effect file was generated by effectDialog -->
+
+<layers>
+<visual>
+
+<param name="scale_x" type="anim">
+<duration>0.3</duration>
+<style>inoutback</style>
+<keyframe at="0.0">1.2</keyframe>
+<keyframe at="1.0">1.0</keyframe>
+</param>
+<param name="scale_y" type="anim">
+<keyframe at="0.0">1.2</keyframe>
+<keyframe at="1.0">1.0</keyframe>
+</param>
+<param name="scale_origin_x" ref="visual.width">0.5</param>
+<param name="scale_origin_y" ref="visual.height">0.5</param>
+<param name="opacity" type="anim">
+<duration>0.3</duration>
+<style>linear</style>
+<keyframe at="0.0">0.5</keyframe>
+<keyframe at="1.0">1.0</keyframe>
+</param>
+
+</visual>
+</layers>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/effect/view_flip_hide.fxml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,36 @@
+<!-- This effect file was generated by effectDialog -->
+
+<layers>
+<visual>
+
+<param name="rotation_angle" type="anim">
+<duration>0.5</duration>
+<style>linear</style>
+<keyframe at="0.0">0</keyframe>
+<keyframe at="1.0">-90</keyframe>
+</param>
+<param name="rotation_origin_x" ref="visual.width">
+0.5
+</param>
+<param name="rotation_origin_y" ref="visual.height">
+0.5
+</param>
+<param name="rotation_axis_x" type="anim">
+0
+</param>
+<param name="rotation_axis_y" type="anim">
+1
+</param>
+<param name="rotation_axis_z" type="anim">
+0
+</param>
+<param name="opacity" type="anim">
+<duration>0.5</duration>
+<style>linear</style>
+<keyframe at="0.0">1.0</keyframe>
+<keyframe at="1.0">0.2</keyframe>
+</param>
+
+</visual>
+</layers>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/effect/view_flip_show.fxml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,36 @@
+<!-- This effect file was generated by effectDialog -->
+
+<layers>
+<visual>
+
+<param name="rotation_angle" type="anim">
+<duration>0.5</duration>
+<style>linear</style>
+<keyframe at="0.0">90</keyframe>
+<keyframe at="1.0">0</keyframe>
+</param>
+<param name="rotation_origin_x" ref="visual.width">
+0.5
+</param>
+<param name="rotation_origin_y" ref="visual.height">
+0.5
+</param>
+<param name="rotation_axis_x" type="anim">
+0
+</param>
+<param name="rotation_axis_y" type="anim">
+1
+</param>
+<param name="rotation_axis_z" type="anim">
+0
+</param>
+<param name="opacity" type="anim">
+<duration>0.5</duration>
+<style>linear</style>
+<keyframe at="0.0">0.2</keyframe>
+<keyframe at="1.0">1.0</keyframe>
+</param>
+
+</visual>
+</layers>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/effect/viewchangeeffects_hide.fxml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,21 @@
+<layers>
+    <visual>
+
+        <param name="translation_x" type="anim">
+            <duration>.6</duration>
+            <!--style>inoutcubic</style-->
+            <keyframe at="0.0">0.0</keyframe>
+            <keyframe at="1.0">1.0</keyframe>
+            <start ref="visual.left">1</start>
+            <end ref="visual.right">-0.6</end>
+        </param>
+        
+        <param name="opacity" type="anim">
+            <duration>.6</duration>
+            <!--style>inoutcubic</style-->
+	          <keyframe at="0.0">1.0</keyframe>
+	          <keyframe at="1.0">0.0</keyframe>
+	      </param>
+	      
+    </visual>
+</layers>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/effect/viewchangeeffects_show.fxml	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,21 @@
+<layers>
+    <visual>
+
+        <param name="translation_x" type="anim">
+            <duration>.6</duration>
+            <!--style>inoutcubic</style-->
+            <keyframe at="0.0">0.0</keyframe>
+            <keyframe at="1.0">1.0</keyframe>
+            <start ref="visual.right">.5</start>
+            <end ref="visual.left">1</end>
+        </param>
+
+        <param name="opacity" type="anim">
+            <duration>.6</duration>
+            <!--style>inoutcubic</style-->
+	          <keyframe at="0.0">0.0</keyframe>
+	          <keyframe at="1.0">1.0</keyframe>
+	      </param>
+
+    </visual>
+</layers>
\ No newline at end of file
Binary file qtinternetradio/ui/resources/favorites.png has changed
Binary file qtinternetradio/ui/resources/flip.png has changed
Binary file qtinternetradio/ui/resources/genres.png has changed
Binary file qtinternetradio/ui/resources/history.png has changed
Binary file qtinternetradio/ui/resources/icon_earphone.png has changed
Binary file qtinternetradio/ui/resources/icon_favorite.png has changed
Binary file qtinternetradio/ui/resources/icon_loudspeaker.png has changed
Binary file qtinternetradio/ui/resources/icon_musicshop_disable.png has changed
Binary file qtinternetradio/ui/resources/icon_musicshop_enable.png has changed
Binary file qtinternetradio/ui/resources/icon_pause.png has changed
Binary file qtinternetradio/ui/resources/icon_play.png has changed
Binary file qtinternetradio/ui/resources/icon_songhistory.png has changed
Binary file qtinternetradio/ui/resources/icon_stationdefault.png has changed
Binary file qtinternetradio/ui/resources/icon_stop.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/irqradio.svg	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="800px" height="800px" viewBox="0 0 800 800" enable-background="new 0 0 800 800" xml:space="preserve">
+<g>
+	<g>
+		<g>
+			<path d="M603.928,308.727c-20.073,0-36.364,16.291-36.364,36.364v235.291c0,20.072,16.291,36.363,36.364,36.363h62.745
+				c20.072,0,36.363-16.291,36.363-36.363V345.091c0-20.073-16.291-36.364-36.363-36.364H603.928z"/>
+		</g>
+		<g>
+			<path d="M133.327,308.727c-20.073,0-36.363,16.291-36.363,36.364v235.291c0,20.072,16.291,36.363,36.363,36.363h62.746
+				c20.073,0,36.364-16.291,36.364-36.363V345.091c0-20.073-16.291-36.364-36.364-36.364H133.327z"/>
+		</g>
+		<g>
+			<path d="M149.018,462.728c0,67.055,26.109,130.091,73.509,177.509c47.4,47.382,110.418,73.491,177.454,73.491
+				c138.382,0,250.982-112.582,250.982-251c0-138.382-112.582-250.964-250.982-250.964
+				C261.6,211.764,149.018,324.346,149.018,462.728z"/>
+		</g>
+		<circle fill="#635E54" cx="400" cy="462.728" r="235.291"/>
+		<path fill="#AAA096" d="M210.382,573.327l391.945-195.963C568.945,298.563,490.818,243.146,400,243.146
+			c-121.091,0-219.618,98.509-219.618,219.6C180.382,503.055,191.364,540.818,210.382,573.327z"/>
+		<g>
+			<path fill="#4F4A44" d="M337.582,242.473h-19.709c-9.382,3.509-18.564,7.455-27.328,12.073v19.327c0,0,0,15.673-15.691,15.673
+				s-31.4,0-31.4,0s-0.854,0-2.073-0.218c-39.982,36.618-67.254,86.728-74.509,143.236c7.891,7.909,13.873,13.891,13.873,13.891
+				s-15.673,15.637,0,31.364c15.691,15.673,78.436,78.418,78.436,78.418s-15.691,15.691,0,31.382
+				c14.6,14.582,31.382,31.4,31.382,31.4v51.963c23.982,12.637,50.4,21.109,78.418,24.801v-14.019
+				c15.691,0,31.364-15.709,31.364-31.4v-78.418c0-13.854-16.601-31.382-31.364-31.382s-31.382,0-31.382,0
+				s-6.127-6.127-15.69-15.673c-9.563-9.581-22.273-9.163-31.364,0c-9.091,9.109-15.691,15.673-15.691,15.673l-31.382-31.382
+				c7.764-7.764,8.364-22.709,0-31.072c-8.364-8.382-15.654-16-15.654-16c-8.109-8.073-8.109-23.31,0-31.382
+				c8.036-8.073,23.254-8.073,31.345,0l15.691,15.728v31.363c0,7.836,15.691,7.836,15.691,0v-31.363l31.364-47.073c0,0,0,0,15.69,0
+				c15.673,0,31.382-15.709,31.382-31.4c0-15.655-15.69-31.382-31.382-31.382c-14.654,0-7.836,0-15.69,0s-7.854-15.709,0-15.709
+				s31.363,0,31.363,0s-0.018,0,15.691,15.709c7.854,7.873,23.527,7.836,31.382,0c7.836-7.854,7.8-23.527,0-31.382
+				C399.072,303.982,337.582,242.473,337.582,242.473z M630.473,415.019h-26.218l-31.382,31.418c0,0-31.364,0-47.037,0
+				c-15.69,0-31.399,15.636-31.399,31.363v47.055c0,15,16.745,31.363,31.399,31.363c0,0.164,15.673,0,15.673,0s0,15.691,0,31.382
+				c0,15.691,15.691,15.691,15.691,15.691v34.236c47.836-43.073,78.091-105.291,78.091-174.764
+				C635.291,446.437,633.6,430.437,630.473,415.019z M525.836,430.69c15.673,0,15.673-15.672,15.673-15.672v-31.31
+				c0,0,0.091-15.745,15.709-15.745h47.019c0,0,0,15.691,15.69,15.691c0.491,0,0.946,0,1.437,0
+				c-23.272-65.218-74.399-117.019-139.236-141.182h-3.399l-31.364,31.382v47.109l12.654,12.654c4.037,4.073,11.655,4.073,15.673,0
+				c4.055-4.036,4.055-11.654,0-15.691l-4.636-4.618c-8.219-8.236,0-15.909,0-15.909s7.654-7.873,15.527,0
+				c7.836,7.854,15.636,15.764,15.636,15.764s-31.891,31.927-39.163,39.146c-7.255,7.291,0,15.709,0,15.709l15.654,15.691
+				c0,0,0,15.654,0,31.31c0,15.673,15.691,15.673,15.691,15.673S510.146,430.69,525.836,430.69z"/>
+			<path fill="#FFFDFC" d="M332.509,237.4c-21.108,6.291-40.927,15.582-59.109,27.182c-1.582,4.164-5.182,8.618-13.036,9.109
+				c-57.655,42.636-95.255,110.854-95.582,188.037c0.091,0.108,0.164,0.236,0.291,0.363c15.673,15.691,78.418,78.418,78.418,78.418
+				s-15.654,15.691,0,31.364c14.6,14.6,31.382,31.418,31.382,31.418v58.491c23.655,14.908,50.073,25.872,78.418,31.6V666
+				c15.69,0,31.382-15.673,31.382-31.363V556.2c0-13.909-16.601-31.4-31.382-31.4c-14.782,0-31.363,0-31.363,0
+				s-6.128-6.108-15.673-15.654c-9.563-9.582-22.272-9.127-31.382,0c-9.091,9.109-15.691,15.654-15.691,15.654l-31.363-31.346
+				c7.727-7.764,8.327-22.69,0-31.072c-8.382-8.363-15.709-15.981-15.709-15.981c-8.073-8.109-8.073-23.31,0-31.382
+				c8.055-8.091,23.291-8.091,31.364,0l15.691,15.672v31.382c0,7.837,15.691,7.837,15.691,0V430.69l31.382-47.072c0,0,0,0,15.673,0
+				c15.69,0,31.363-15.654,31.363-31.345c0-15.709-15.673-31.4-31.363-31.4c-14.654,0-7.854,0-15.673,0
+				c-7.854,0-7.854-15.672,0-15.672c7.836,0,31.363,0,31.363,0s-0.036-0.019,15.673,15.672c7.837,7.854,23.546,7.854,31.382,0
+				c7.837-7.836,7.818-23.563,0-31.363C383.728,288.6,350.146,255.036,332.509,237.4z M634.382,444.418
+				c-1.601-2.6-1.69-5.437-0.637-8.108c-1.418-12.637-3.963-24.982-7.327-36.964h-37.836l-31.364,31.363c0,0-31.382,0-47.072,0
+				c-15.691,0-31.4,15.691-31.4,31.382v47.055c0,14.981,16.764,31.382,31.4,31.382c0,0.146,15.69,0,15.69,0s0,15.69,0,31.363
+				c0,15.691,15.673,15.691,15.673,15.691v62.891c56.873-42.945,93.782-110.945,93.782-187.709
+				C635.291,456.563,634.836,450.491,634.382,444.418z M510.146,415.019c15.69,0,15.69-15.673,15.69-15.673v-31.328
+				c0,0,0.073-15.764,15.71-15.764h47.018c0,0,0,15.709,15.673,15.709c3.745,0,7.473,0,11.036,0
+				c-29.2-66.273-88.055-116.291-159.727-133.655l-23.873,23.836v47.109l12.654,12.637c4.073,4.036,11.654,4.036,15.691,0
+				c4.036-4,4.036-11.618,0-15.655l-4.637-4.636c-8.236-8.236,0-15.909,0-15.909s7.673-7.891,15.509,0
+				c7.837,7.873,15.655,15.764,15.655,15.764s-31.928,31.909-39.183,39.164c-7.254,7.273,0,15.691,0,15.691l15.691,15.709
+				c0,0,0,15.6,0,31.328c0,15.673,15.654,15.673,15.654,15.673S494.437,415.019,510.146,415.019z"/>
+		</g>
+		<path fill="#4F4A44" d="M595.563,331.854c-4.382,2.782-7.327,7.655-7.327,13.236v235.291c0,5.582,2.945,10.437,7.327,13.236
+			c25.091-37.437,39.745-82.437,39.745-130.891C635.291,414.291,620.654,369.291,595.563,331.854z"/>
+		<path fill="#4F4A44" d="M204.455,593.618c4.382-2.782,7.309-7.654,7.309-13.236V345.091c0-5.582-2.927-10.437-7.309-13.236
+			c-25.091,37.418-39.746,82.418-39.746,130.854C164.709,511.182,179.364,556.2,204.455,593.618z"/>
+		<path d="M400,78.418L400,78.418L400,78.418c-202.818,0-352.945,79.982-352.945,266.673c0,114.255,1.127,153.491,47.054,188.236
+			h54.909V431.382H94.109c0,0-1.127-15.109-1.127-40.327c0-169.055,131.345-245.382,307-245.382l0,0
+			c175.655,0,307,76.327,307,245.382c0,25.236-1.127,40.327-1.127,40.327h-54.909v101.945h54.909
+			c45.945-34.745,47.073-118.764,47.073-188.236C752.945,158.418,602.8,78.418,400,78.418z"/>
+		<g>
+			<path fill="#D9D9D9" d="M62.746,345.091L62.746,345.091c0,110.8,1.854,143.728,37.182,172.546c6.346,0,19.764,0,33.4,0
+				c0-18.382,0-52.219,0-70.601c-16,0-54.473,0-54.473,0l-0.382-14.527l-1.164-41.491c0-163.473,120.636-261.073,322.691-261.073
+				s322.691,97.618,322.691,261.073l-1.601,56.727l-15.218-0.727c0,0-23.2,0-39.2,0c0,18.382,0,52.218,0,70.6
+				c13.399,0,26.091,0,32.836,0c37.437-32.891,37.746-113.182,37.746-172.545c0-218.345-211.291-250.964-337.255-250.964
+				S62.746,126.728,62.746,345.091z"/>
+		</g>
+		<rect x="133.327" y="345.091" fill="#6EC3FF" width="62.746" height="235.291"/>
+		<polygon fill="#2882C8" points="180.382,345.091 180.382,564.709 133.327,564.709 133.327,580.4 196.073,580.4 196.073,345.091 		
+			"/>
+		<rect x="603.928" y="345.091" fill="#6EC3FF" width="62.745" height="235.291"/>
+		<polygon fill="#2882C8" points="650.981,345.091 650.981,564.709 603.928,564.709 603.928,580.4 666.673,580.4 666.673,345.091 		
+			"/>
+		<path d="M400,78.437L400,78.437L400,78.437c-210.364,0-320.091,88.473-337.254,219.6h86.272
+			C172.182,195.909,247.891,156.4,400,156.091l0,0v0.018c152.127,0.291,227.818,39.8,250.964,141.927h86.272
+			C720.072,166.909,610.346,78.437,400,78.437z"/>
+		<rect fill="none" width="800" height="800"/>
+		<g>
+			<path fill="#595959" d="M70.073,282.346c21.254,0,52.582,0,66.927,0c27.673-98.891,107.146-141.637,262.964-141.946
+				c155.891,0.309,235.363,43.055,263.018,141.946c14.346,0,45.655,0,66.928,0C692.272,119.473,508.873,94.109,400,94.109
+				C291.127,94.109,107.727,119.473,70.073,282.346z"/>
+		</g>
+		<rect x="666.673" y="447.055" fill="#8A8A8A" width="15.673" height="70.6"/>
+		<path fill="#383838" d="M730.473,282.346h-29.346c2.273,5.109,4.31,10.363,6.236,15.69h26.146
+			C732.637,292.673,731.637,287.455,730.473,282.346z"/>
+		<path fill="#383838" d="M66.491,298.036h26.146c1.909-5.327,3.964-10.582,6.218-15.69H69.527
+			C68.364,287.455,67.364,292.673,66.491,298.036z"/>
+		<rect x="117.654" y="447.055" fill="#8A8A8A" width="15.691" height="70.6"/>
+		<path fill="#8A8A8A" d="M400,94.109c-108.873,0-292.273,25.364-329.927,188.237c1.254-5.4,2.727-10.582,4.273-15.691h51.418
+			c32.673-97.709,117.473-141.636,274.164-141.945c30.927,0.055,58.963,1.891,84.436,5.418l44.909-22.437
+			C483.327,97.236,437.291,94.109,400,94.109z M399.981,140.418c21,0.037,40.437,0.964,58.728,2.582l0.164-0.073"/>
+	</g>
+</g>
+<path fill="#3FA000" d="M752.928,738.356c0,5.05-3.582,9.144-8,9.144H492.575c-4.418,0-8-4.094-8-9.144V564.343
+	c0-5.05,3.582-9.144,8-9.144h252.353c4.418,0,8,4.094,8,9.144V738.356z"/>
+<g>
+	<path fill="#FFFFFF" d="M566.819,703.577c-11.526-2.939-20.229-9.804-26.109-20.596c-5.881-10.79-8.82-26.446-8.82-46.969
+		c0-22.345,4.014-38.824,12.04-49.438s19.979-15.921,35.855-15.921c15.935,0,27.931,5.322,35.987,15.965
+		c8.056,10.644,12.084,27.109,12.084,49.395c0,20.582-3.103,36.548-9.306,47.895c-6.205,11.35-15.511,18.083-27.917,20.2
+		c1.06,4.939,2.735,8.672,5.028,11.201c2.293,2.528,7.057,3.793,14.289,3.793v13.937h-5.821c-10.88,0-19.141-2.191-24.785-6.571
+		C573.699,722.085,569.522,714.455,566.819,703.577z M579.785,689.818c7.35,0,12.951-3.837,16.803-11.512
+		c3.851-7.674,5.778-21.771,5.778-42.294c0-18.581-1.912-31.592-5.734-39.03c-3.823-7.438-9.438-11.158-16.847-11.158
+		c-7.352,0-12.952,3.603-16.804,10.805c-3.852,7.204-5.777,20.332-5.777,39.384c0,17.936,1.882,31.388,5.646,40.354
+		C566.612,685.335,572.257,689.818,579.785,689.818z"/>
+	<path fill="#FFFFFF" d="M676.457,704.988c-8.585,0-14.922-1.97-19.007-5.909c-4.088-3.939-6.131-10.025-6.131-18.258V614.49
+		h-12.966v-8.29l28.49-29.108h8.468v23.374h23.903v14.024h-23.903v62.891c0,5.469,0.851,8.997,2.558,10.585
+		c1.705,1.588,4.292,2.381,7.762,2.381c3.821,0,8.879-0.822,15.171-2.469v13.671C692.511,703.843,684.396,704.988,676.457,704.988z"
+		/>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/irui.qrc	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,53 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+	<file>effect/viewchangeeffects_show.fxml</file>   
+	<file>effect/viewchangeeffects_hide.fxml</file>
+	<file>effect/effects_item_select.fxml</file>
+	<file>effect/effects_item_select_end.fxml</file>
+    <file>effect/view_flip_show.fxml</file>
+    <file>effect/view_flip_hide.fxml</file>		      
+</qresource>
+
+<qresource prefix="/playback">
+    <file>icon_musicshop_enable.png</file>
+    <file>icon_musicshop_disable.png</file>
+    <file>icon_favorite.png</file>
+    <file>icon_loudspeaker.png</file>
+	<file>icon_play.png</file>
+    <file>icon_stop.png</file>
+    <file>flip.png</file>
+    <file>volume.png</file>        
+    <file>default_cd.png</file>
+    <file>albumart.jpg</file>
+    <file>search.png</file>
+    <file>ovi.jpg</file>
+</qresource>
+
+<qresource prefix="/mainview">
+	<file>stations.png</file>
+    <file>favorites.png</file>
+    <file>history.png</file>
+    <file>search.png</file>
+    <file>genres.png</file>
+</qresource>
+
+<qresource prefix="/stationlist">
+    <file>icon_stationdefault.png</file>
+</qresource>   
+
+<qresource prefix="/toolBar">
+    <file>icon_songhistory.png</file>
+    <file>history.png</file>
+</qresource>
+
+
+<qresource>
+    <file>layout/abstractlistviewbase.docml</file>
+    <file>layout/searchchannelsview.docml</file>
+    <file>layout/openwebaddressview.docml</file>
+    <file>layout/nowplayingview.docml</file>
+    <file>layout/nowplayingcontainer.docml</file>
+    <file>layout/stationdetailscontainer.docml</file>    
+</qresource>
+
+</RCC>
Binary file qtinternetradio/ui/resources/ovi.jpg has changed
Binary file qtinternetradio/ui/resources/pagecurl_big.png has changed
Binary file qtinternetradio/ui/resources/search.png has changed
Binary file qtinternetradio/ui/resources/stations.png has changed
Binary file qtinternetradio/ui/resources/volume.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irabstractlistviewbase.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,385 @@
+/*
+* 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 <hbmenu.h>
+#include <hbtoolbar.h>
+#include <hbaction.h>
+#include <hblistview.h>
+#include <hbabstractviewitem.h>
+#include <hbscrollbar.h>
+#include <QTimer>
+
+#include "irabstractviewmanager.h"
+#include "irabstractlistviewbase.h"
+#include "irbannerlabel.h"
+#include "irplaycontroller.h"
+#include "irapplication.h"
+#include "irqmetadata.h"
+#include "irqisdsdatastructure.h"
+#include "irqisdsclient.h"
+#include "irqenums.h"
+#include "iruidefines.h"
+ 
+
+IrAbstractListViewBase::IrAbstractListViewBase(IRApplication *aApplication, TIRViewId aViewId)
+    : IRBaseView(aApplication, aViewId),
+	  iListView(NULL),
+      iBannerLabel(NULL),
+      iHeadingLabel(NULL),
+      iCollectionsAction(NULL), iFavoritesAction(NULL),
+      iGenresAction(NULL), iSearchAction(NULL),iConvertTimer(NULL), iEffectOnGoing(false)
+{
+    // Create widget hierarchy
+    setObjectName( ABSTRACT_LIST_VIEW_BASE_OBJECT_VIEW );
+
+    // List existing root elements - this allows us to refer to objects in the XML 
+    // which are created outside the document.
+    QObjectList roots;
+    roots.append( this ); // abstractlistviewbase is referred in the XML document
+    iLoader.setObjectTree( roots );
+    
+    // Load the XML file
+    iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME);
+        
+    iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_NO_PLAYINGBANNER_SECTION);
+    initEffects();
+    initMenu();
+    initContentWidget();
+    initScrollBar();
+    initToolBar();
+
+    connect(iListView, SIGNAL(activated(const QModelIndex&)), this, SLOT(clickItem(const QModelIndex&)));
+    connect(iListView, SIGNAL(longPressed(HbAbstractViewItem *,const QPointF&)), this, SLOT(listViewLongPressed(HbAbstractViewItem *,const QPointF&)));     
+    connect(iBannerLabel, SIGNAL(pressed()), this, SLOT(gotoNowPlaying()));
+    connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(metaDataAvailable(IRQMetaData*)));
+    connect(iPlayController, SIGNAL(playingStopped()), this, SLOT(removeBanner()));
+}
+
+IrAbstractListViewBase::~IrAbstractListViewBase()
+{
+    HbEffect::remove(QString("viewItem"), QString(":/effect/effects_item_selecte.fxml"), QString("chosen") );
+    HbEffect::remove(QString("viewItem"), QString(":/effect/effects_item_select_end.fxml"),QString("chosenEnd"));
+}
+
+void IrAbstractListViewBase::initMenu()
+{
+    HbMenu *viewMenu = menu();
+    connect(viewMenu, SIGNAL(aboutToShow()), this, SLOT(prepareMenu()));
+
+    iOpenWebAddressAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_OPEN_WEB_ADDRESS_ACTION));
+    connect(iOpenWebAddressAction, SIGNAL(triggered()), this, SLOT(openWebAddress()));
+
+    QObject *settings = iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_SETTING_ACTION);
+    connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
+    
+    QObject *helpAction = iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_HELP_ACTION);
+    connect(helpAction, SIGNAL(triggered()), this, SLOT(notReady()));
+    
+    QObject *exitAction = iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_EXIT_ACTION);
+    connect(exitAction, SIGNAL(triggered()), iApplication, SIGNAL(quit()));
+}
+
+void IrAbstractListViewBase::initToolBar()
+{
+    HbToolBar *viewToolBar = qobject_cast<HbToolBar *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_TOOLBAR));
+    QActionGroup *actionGroup = new QActionGroup(viewToolBar);
+    iCollectionsAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_COLLECTION_ACTION));
+	iCollectionsAction->setActionGroup(actionGroup);
+	iFavoritesAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_FAVORITE_ACTION));
+	iFavoritesAction->setActionGroup(actionGroup);
+	iGenresAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_GENRE_ACTION));
+	iGenresAction->setActionGroup(actionGroup);	 
+	iSearchAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_SEARCH_ACTION));
+	iSearchAction->setActionGroup(actionGroup);
+
+	connect(iCollectionsAction, SIGNAL(triggered()), this, SLOT(collectionsActionClicked()));
+	connect(iFavoritesAction, SIGNAL(triggered()), this, SLOT(favoritesActionClicked()));
+	connect(iSearchAction, SIGNAL(triggered()), this, SLOT(searchActionClicked()));
+	connect(iGenresAction, SIGNAL(triggered()), iApplication, SLOT(loadGenre()));
+
+	setCheckedAction();
+}
+
+void IrAbstractListViewBase::initContentWidget()
+{
+    iHeadingLabel = qobject_cast<IrViewBannerLabel *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_HEADINGTEXTLABEL));
+    QFont font;
+    font.setBold(true);
+    iHeadingLabel->setFont(font);
+    
+    iBannerLabel = qobject_cast<IrNowPlayingBannerLabel *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_PLAYINGBANNER)); 
+    iBannerLabel->setFont(font);
+
+    iListView = qobject_cast<HbListView *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_LISTVIEW));
+}
+
+void IrAbstractListViewBase::initScrollBar()
+{
+    iListView->setScrollingStyle( HbListView::PanOrFlick );
+    HbScrollBar *scrollbar = iListView->verticalScrollBar();
+    scrollbar->setVisible(true);
+    scrollbar->setInteractive(true);
+    iListView->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
+}
+
+void IrAbstractListViewBase::setCheckedAction()
+{       
+    //default implementation
+    QList<QAction*> actionList = iCollectionsAction->actionGroup()->actions();
+    for (QList<QAction*>::const_iterator it = actionList.begin(); it != actionList.end(); ++it)
+    {
+        (*it)->setChecked(false);
+    }
+}
+
+void IrAbstractListViewBase::setHeadingText(const QString &aText)
+{
+    if (iHeadingLabel)
+    {
+        iHeadingLabel->setText(aText);
+    }
+}
+
+QString IrAbstractListViewBase::getHeadingText() const
+{
+    if (iHeadingLabel)
+    {
+        return iHeadingLabel->text();
+    }
+    return ("");
+}
+
+void IrAbstractListViewBase::resetCurrentItem()
+{
+    
+}
+
+void IrAbstractListViewBase::storeCurrentItem()
+{
+}
+
+/*
+ * handle the signal of one item being selected.
+ * Default implementation is doing nothing.
+ */
+void IrAbstractListViewBase::handleItemSelected()
+{
+}
+
+/*
+ * we call the functin when we handle the handleitemselect.
+ * The return value shows wether we need to connect to the
+ * network, true means we connect and false means do not
+ */
+void IrAbstractListViewBase::itemAboutToBeSelected(bool &aNeedNetwork)
+{    
+    aNeedNetwork =  true;
+}
+
+TIRHandleResult IrAbstractListViewBase::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = EIR_DoDefault;
+
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        updateView();
+        iBannerLabel->startAnimation();
+        break;
+
+    case EIR_ViewCommand_DEACTIVATE:
+        storeCurrentItem();
+        iBannerLabel->stopAnimation();
+        ret = EIR_NoDefault;
+        break;
+
+    default:
+        break;
+    }
+
+    return ret;
+}
+
+/*
+ * When a view is shown, update the view.
+ */
+void IrAbstractListViewBase::updateView()
+{
+    if (iPlayController->isPlaying())
+    {
+        IRQMetaData *metaData = iPlayController->getMetaData();
+        if (metaData && "" != metaData->getArtistSongName().trimmed() &&
+            "-" != metaData->getArtistSongName().trimmed())
+        {
+            //set the banner text as song name
+            addBanner(metaData->getArtistSongName());
+        }
+        else
+        {
+            //set the banner text as station name
+            IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+            Q_ASSERT(nowPlayingPreset);
+            addBanner(nowPlayingPreset->name);
+        }
+    }
+    else
+    {
+        removeBanner();
+    }
+    
+    setCheckedAction();
+}
+
+void IrAbstractListViewBase::collectionsActionClicked()
+{
+    getViewManager()->activateView(EIRView_MainView);
+}
+
+void IrAbstractListViewBase::favoritesActionClicked()
+{
+    getViewManager()->activateView(EIRView_FavoritesView);
+}
+
+void IrAbstractListViewBase::searchActionClicked()
+{
+    getViewManager()->activateView(EIRView_SearchView);
+}
+
+void IrAbstractListViewBase::openWebAddress()
+{
+    getViewManager()->activateView(EIRView_OpenWebAddressView);
+}
+
+/*
+ * dynamically set the text of menu item or remove menu item.
+ * Concrete classes can override this function if needed
+ */
+void IrAbstractListViewBase::prepareMenu()
+{
+}
+
+void IrAbstractListViewBase::addBanner(const QString &aText)
+{
+    iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_WITH_PLAYINGBANNER_SECTION);
+    iBannerLabel->setText(aText);
+    iBannerLabel->setLoopCount(-1);
+
+}
+
+void IrAbstractListViewBase::launchSettingsView()
+{
+    getViewManager()->activateView(EIRView_SettingsView);
+}
+
+void IrAbstractListViewBase::metaDataAvailable(IRQMetaData* aMetaData)
+{
+    if (!aMetaData)
+    {
+        return;
+    }
+    
+    const QString artistSongName = aMetaData->getArtistSongName();
+    if ("" != artistSongName.trimmed() && "-" != artistSongName.trimmed())
+    {
+        addBanner(aMetaData->getArtistSongName());
+    }
+    else
+    {
+        //set the banner text as station name
+        IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+        Q_ASSERT(nowPlayingPreset);
+        addBanner(nowPlayingPreset->name);
+    }
+}
+
+void IrAbstractListViewBase::removeBanner()
+{
+    if (getViewManager()->currentView() == this)
+    {
+        iBannerLabel->stopAnimation();
+        iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_NO_PLAYINGBANNER_SECTION);
+    }
+}
+
+void IrAbstractListViewBase::notReady()
+{
+	popupNote(tr("Not ready"), HbMessageBox::MessageTypeInformation );
+}
+
+void IrAbstractListViewBase::gotoNowPlaying()
+{
+    Q_ASSERT(iPlayController->isPlaying());
+    
+    getViewManager()->activateView(EIRView_PlayingView);
+}
+
+void IrAbstractListViewBase::listViewLongPressed(HbAbstractViewItem *aItem, const QPointF &aCoords)
+{    
+    Q_UNUSED(aItem);
+    Q_UNUSED(aCoords);    
+}
+
+void IrAbstractListViewBase::clickItem(const QModelIndex &aIndex)
+{   
+    if (!iEffectOnGoing)
+    {        
+        HbAbstractViewItem *listViewItem = iListView->itemByIndex(aIndex);
+        iEffectOnGoing = true;         
+        iChosenIndex = aIndex;
+        HbEffect::start(listViewItem, "viewItem", "chosen",this, "selectEffectComplete1");
+    } 
+}
+
+void IrAbstractListViewBase::initEffects()
+{
+    HbEffect::add(QString("viewItem"), QString(":/effect/effects_item_select.fxml"),
+        QString("chosen") );
+    HbEffect::add(QString("viewItem"), QString(":/effect/effects_item_select_end.fxml"),QString("chosenEnd"));
+}
+
+void IrAbstractListViewBase::selectEffectComplete1(HbEffect::EffectStatus aStatus )
+{
+    Q_UNUSED(aStatus);
+    HbAbstractViewItem *listViewItem = iListView->itemByIndex(iChosenIndex);     
+    HbEffect::start(listViewItem, QString("viewItem"), QString("chosenEnd"),this, "selectEffectComplete2");
+}
+
+void IrAbstractListViewBase::selectEffectComplete2(HbEffect::EffectStatus aStatus )
+{
+    Q_UNUSED(aStatus);
+    iEffectOnGoing = false;        
+    clickAfterEffects();
+}
+
+void IrAbstractListViewBase::clickAfterEffects()
+{        
+    bool needNetwork;
+    itemAboutToBeSelected(needNetwork);     
+    if (needNetwork)
+    {
+        setUseNetworkReason(EIR_UseNetwork_SelectItem);
+        if (false == iApplication->verifyNetworkConnectivity())
+        {
+            return;
+        }
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+    }
+
+    handleItemSelected();          
+}
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irabstractviewmanager.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#include "irabstractviewmanager.h"
+
+
+/*
+ * Description : constructor
+ * Parameters  : None
+ * Return      : None
+ */
+IRAbstractViewManager::IRAbstractViewManager() : iApplication(NULL)
+{
+    
+}
+
+/*
+ * Description : set the application to view manager. View manager then use it to pass to 
+ *               a view during view creation
+ * Parameters  : aApplication : pointer to internet radio application
+ * Return      : None   
+ */
+void IRAbstractViewManager::setApplication(IRApplication *aApplication)
+{
+    iApplication = aApplication;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irapplication.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,815 @@
+/*
+* 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 <hbaction.h>
+#include <qcoreapplication.h>
+#include <hbdevicemessagebox.h>
+#include <QLocalServer>
+#include <QLocalSocket>
+#include <QFile>
+#include <QTextStream>
+#include <QDir>
+ 
+
+#ifdef LOCALIZATION 
+#include <QTranslator>
+#include "irqutility.h" 
+#endif
+
+#include "irabstractviewmanager.h"
+#include "irapplication.h"
+
+#include "irqnetworkcontroller.h"
+#include "irqisdsclient.h"
+#include "irplaycontroller.h"
+#include "irlastplayedstationinfo.h"
+#include "irqfavoritesdb.h"
+#include "irqsettings.h"  
+#include "irmediakeyobserver.h"
+#include "ircategoryview.h"
+#include "irstationsview.h"
+#include "irqmusicshop.h"
+#include "irqnwkinfoobserver.h"
+#include "irqstatisticsreporter.h"
+#include "irsymbiandocument.h"
+#include "irqdiskspacewatcher.h"
+#include "irqlogger.h"
+/*
+ * Description : constructor, initialize all data members
+ * Parameters  : aViewManager : pointer to the view manager object
+ * Return      : None
+ */
+IRApplication::IRApplication(IRAbstractViewManager* aViewManager):
+#ifdef _DEBUG
+                                     iTestPreferredBitrate(false),
+#endif
+                                     iViewManager(aViewManager),
+                                     iNetworkController(NULL),    
+                                     iIsdsClient(NULL),  
+                                     iPlayController(NULL),  
+                                     iFavPresets(NULL),                                     
+                                     iSettings(NULL),
+                                     iMediaKeyObserver(NULL),                                                                                                                                                                                                                     
+                                     iLastPlayedStationInfo(NULL),
+                                     iNwkInfoObserver(NULL),
+                                     iStatisticsReporter(NULL),
+                                     iMusicShop(NULL),
+                                     iAdvertisementClient(NULL),
+                                     iDiskSpaceWatcher(NULL),
+                                     iEnableGlobalAdv(true),
+                                     iDisconnected(false),
+                                     iConnectingCanceled(false),
+                                     iLocalServer(NULL),
+                                     iConnectingNote(NULL)
+                                     #ifdef LOCALIZATION
+                                     ,iTranslator(NULL)
+                                     #endif
+{
+    LOG_METHOD;
+    iViewManager->setApplication(this);
+
+#ifdef _DEBUG
+    readConfiguration();
+#endif
+
+    createComponents();
+    // get advertisement setting
+    iSettings->getGlobalAdvFlag(iEnableGlobalAdv);
+    setupConnection();
+    setLaunchView();
+#ifdef LOCALIZATION
+    initLanguage();
+#endif
+}
+
+/*
+ * Description : destructor, destroy all data members
+ * Parameters  : None
+ * Return      : None
+ */
+IRApplication::~IRApplication()
+{
+    LOG_METHOD;
+    setExitingView();
+    destroyComponents();
+    
+    if (iLocalServer)
+    {
+        iLocalServer->close();
+    }
+    
+    delete iLastPlayedStationInfo;
+    iLastPlayedStationInfo = NULL;
+    
+    delete iConnectingNote;
+    iConnectingNote = NULL;
+    
+#ifdef LOCALIZATION
+    if( iTranslator )
+    {
+        qApp->removeTranslator(iTranslator);
+        delete iTranslator;
+        iTranslator = NULL;
+    }
+#endif
+}
+
+#ifdef LOCALIZATION
+void IRApplication::initLanguage()
+{
+    iTranslator = new QTranslator();    
+    QString lang = QLocale::system().name();
+    LOG_FORMAT( "Current language is %s", STRING2CHAR(lang) );
+    QString path = "z:/resource/qt/translations/";  //this will be changed to a micro in future
+    bool ret = iTranslator->load(path + "internet_radio_10_1_" + lang);        
+    qApp->installTranslator(iTranslator); 
+}
+#endif
+/*
+ * Description : When ir application is launched, set the correct view according to whether the 
+ *               application is used for the first time
+ * Parameters  : None
+ * Return      : None
+ */
+void IRApplication::setLaunchView()
+{
+    IRSymbianDocument *document = IRSymbianDocument::getInstance();
+    if (document && document->isPlsAvailable())
+    {
+        iViewManager->activateView(EIRView_PlsView);
+    }
+    else
+    {
+        launchStartingView();
+    }
+    
+    QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+    
+    iInitEvent = static_cast<QEvent::Type>(QEvent::registerEventType());
+    QEvent* initEvent = new QEvent(iInitEvent);
+    QCoreApplication::postEvent(this, initEvent, Qt::HighEventPriority);
+}
+
+/*
+ * Description : verify if the network connection has been established
+ * Parameters  : None
+ * Return      : true : network connection has been established
+ *               false : network connection has not been established
+ */
+bool IRApplication::verifyNetworkConnectivity(const QString &aConnectingText)
+{
+    Q_ASSERT(iNetworkController);
+    
+    bool ret = true;
+    
+    if (!iNetworkController->getNetworkStatus())
+    {
+        ret = false;
+        if (!iNetworkController->isConnectRequestIssued())
+        {
+            iConnectingText = aConnectingText;
+            iNetworkController->chooseAccessPoint();
+        }
+    }
+    
+    return ret;
+}
+
+void IRApplication::createConnectingDialog()
+{
+    LOG_METHOD_ENTER;
+    if (NULL == iConnectingNote)
+    {
+        iConnectingNote = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+        iConnectingNote->setModal(true);
+        iConnectingNote->setTimeout(HbPopup::NoTimeout);
+        HbAction *cancelAction = new HbAction(hbTrId("txt_common_button_cancel"), iConnectingNote);
+        iConnectingNote->setPrimaryAction(cancelAction);
+        connect(cancelAction, SIGNAL(triggered()), this, SLOT(cancelConnect()));
+    }
+    
+    iConnectingNote->setText(iConnectingText);
+    iConnectingNote->show();
+}
+
+void IRApplication::closeConnectingDialog()
+{
+    LOG_METHOD_ENTER;
+    if (iConnectingNote)
+    {
+        iConnectingNote->close();
+        delete iConnectingNote;
+        iConnectingNote = NULL;
+    }
+}
+
+/*
+ * Description : return the pointer to the view manager object
+ * Parameters  : None
+ * Return      : the pointer to the view manager object
+ */
+IRAbstractViewManager* IRApplication::getViewManager() const
+{
+    return iViewManager;
+}
+
+/* 
+ * Description : return the pointer to the network controller object
+ * Parameters  : None
+ * Return      : the pointer to the network controller object
+ */
+IRQNetworkController* IRApplication::getNetworkController()
+{
+    if(NULL == iNetworkController)
+    {
+        iNetworkController = IRQNetworkController::openInstance(); 
+    } 
+    return iNetworkController;
+}
+
+/*
+ * Description : return the pointer to the isds client object
+ * Parameters  : None
+ * Return      : the pointer to the isds client object
+ */
+IRQIsdsClient* IRApplication::getIsdsClient()
+{
+    if(NULL == iIsdsClient)
+    {
+        iIsdsClient = IRQIsdsClient::openInstance(getFavoritesDB()); 
+    }
+    return iIsdsClient;
+}
+
+/*
+ * Description : return the pointer to the play controller object
+ * Parameters  : None
+ * Return      : the pointer to the play controller object
+ */
+IRPlayController* IRApplication::getPlayController()
+{
+    if(NULL == iPlayController)
+    {
+        iPlayController = new IRPlayController(this);
+    }
+    return iPlayController;
+}
+
+IRLastPlayedStationInfo* IRApplication::getLastPlayedStationInfo()
+{
+    if(NULL == iLastPlayedStationInfo)
+    {
+        iLastPlayedStationInfo = new IRLastPlayedStationInfo();
+    }
+    return iLastPlayedStationInfo;
+}
+
+IRQFavoritesDB* IRApplication::getFavoritesDB()
+{
+    if(NULL == iFavPresets)
+    {
+        iFavPresets = new IRQFavoritesDB();
+    }
+    return iFavPresets;
+}
+
+IRQSettings * IRApplication::getSettings()
+{
+    if(NULL == iSettings)
+    {
+        iSettings = IRQSettings::openInstance();
+    }   
+    return iSettings;
+}
+
+IRMediaKeyObserver* IRApplication::getMediaKeyObserver()
+{
+    if(NULL == iMediaKeyObserver)
+    {
+    iMediaKeyObserver = new IRMediaKeyObserver(this);
+    }
+    return iMediaKeyObserver;
+}
+
+IRQNwkInfoObserver * IRApplication::getNwkInfoObserver()
+{
+    if(NULL == iNwkInfoObserver)
+    {
+        iNwkInfoObserver = IRQNwkInfoObserver::openInstance();
+    }
+    return iNwkInfoObserver;
+}
+
+IRQStatisticsReporter * IRApplication::getStatisticsReporter()
+{
+    if(NULL == iStatisticsReporter)
+    {
+        iStatisticsReporter = IRQStatisticsReporter::openInstance(getIsdsClient());
+    }
+    return iStatisticsReporter;
+}
+
+IRQMusicShop * IRApplication::getMusicShop()
+{
+    if(NULL == iMusicShop)
+    {
+        iMusicShop = IRQMusicShop::openInstance();
+    }
+    return iMusicShop;
+}
+
+IRQAdvClient* IRApplication::getAdvClient()
+{
+    if(iEnableGlobalAdv && (NULL == iAdvertisementClient))
+    {
+        //iAdvertisementClient = IRQAdvClient::openInstance();
+    }
+
+    return iAdvertisementClient;
+}
+/*
+ * Description : create all the application level components, including network controller,
+ *               favorites db, isds client, play controller, etc
+ * Parameters  : None
+ * Return      : None
+ */
+void IRApplication::createComponents()
+{
+    getNetworkController();
+    getSettings();
+}
+
+/*
+ * Descriiption : destroy all the application level components 
+ * Parameters   : None
+ * Return       : None
+ */
+void IRApplication::destroyComponents()
+{	
+    delete iPlayController;
+    iPlayController = NULL;
+    
+	delete iDiskSpaceWatcher;
+    iDiskSpaceWatcher = NULL;
+	    
+    if(iIsdsClient)
+    {    
+        iIsdsClient->closeInstance();
+        iIsdsClient = NULL;
+    }
+    
+    delete iFavPresets;
+    iFavPresets = NULL;
+    
+    if(iStatisticsReporter)
+    {
+        iStatisticsReporter->closeInstance();
+        iStatisticsReporter = NULL;
+    }
+    
+    if(iNwkInfoObserver)
+    {
+        iNwkInfoObserver->closeInstance();
+        iNwkInfoObserver = NULL;
+    }
+    
+    if(iMusicShop)
+    {
+        iMusicShop->closeInstance();
+        iMusicShop = NULL;
+    }
+    
+    if(iNetworkController)
+    {             
+        iNetworkController->closeInstance();
+        iNetworkController = NULL;
+    }
+    
+    if(iSettings)
+    {    
+        iSettings->closeInstance();
+        iSettings = NULL;
+    }
+    
+    delete iMediaKeyObserver;
+    iMediaKeyObserver = NULL;
+}
+
+void IRApplication::setupConnection()
+{
+    //connect IRApplication to IRQNetworkController
+    connect(iNetworkController, SIGNAL(networkEventNotified(IRQNetworkEvent)), 
+            this, SLOT(networkEventNotified(IRQNetworkEvent)));
+
+    connect(this, SIGNAL(quit()), qApp, SLOT(quit()));
+}
+
+void IRApplication::cancelConnect()
+{
+    if (iConnectingCanceled)
+    {
+        return;
+    }
+    
+    iConnectingCanceled = true;
+    if (iNetworkController->getNetworkStatus())
+    {
+        getIsdsClient()->isdsCancelRequest();
+    }
+    else
+    {
+        iNetworkController->cancelConnecting();
+    }
+    
+    iNetworkController->notifyActiveNetworkObservers(EIRQConnectingCancelled);
+}
+
+// ---------------------------------------------------------------------------
+//  IRApplication::startMonitoringNwkInfo
+//  Start to monitor network info changes
+// ---------------------------------------------------------------------------
+//
+void IRApplication::startMonitoringNwkInfo()
+{
+    getNwkInfoObserver();
+    getStatisticsReporter();
+    if(iNwkInfoObserver)
+    {
+        iNwkInfoObserver->startMonitorNwkInfo();	
+        connectAndAssert(iNwkInfoObserver, SIGNAL(currentNwkChanged(const QString, const QString)), 
+            iStatisticsReporter, SLOT(updateCurrentNetwork(const QString, const QString)));
+        connectAndAssert(iNwkInfoObserver, SIGNAL(homeNwkChanged(const QString, const QString)),
+            iStatisticsReporter, SLOT(updateHomeOperator(const QString, const QString)));   	
+    }	
+ 
+}
+   
+//connect to signal 'networkEventNotified' from IRQNetworkController
+void IRApplication::networkEventNotified(IRQNetworkEvent aEvent)
+{
+    LOG_SLOT_CALLER;
+    switch (aEvent)
+    {
+        case EIRQNetworkConnectionConnecting :
+            createConnectingDialog();
+            iConnectingCanceled = false;
+            break;
+            
+        case EIRQNetworkConnectionEstablished :
+            iDisconnected = false;
+            if (EIR_DoDefault == handleConnectionEstablished())
+            {
+                iNetworkController->notifyActiveNetworkObservers(aEvent);               
+            }
+            
+            if (EIRQNoConnectionToNetwork == getPlayController()->getStopReason() &&
+                iNetworkController->isHandlingOverConnection())
+            {
+                getPlayController()->resume();
+            }
+            break;
+            
+        case EIRQAccessPointSelectionCancelled : 
+            closeConnectingDialog();
+            cancelConnect();
+            break;
+            
+        case EIRQNetworkConnectionDisconnected:
+            {
+                iDisconnected = true;
+                iNetworkController->resetConnectionStatus();
+                getPlayController()->stop(EIRQNoConnectionToNetwork);
+                iNetworkController->notifyActiveNetworkObservers(aEvent);
+            }
+            break;
+            
+        case EIRQDisplayNetworkMessageNoConnectivity:
+            {
+                closeConnectingDialog();
+                HbMessageBox note(hbTrId("txt_irad_info_no_network_connectiion"), HbMessageBox::MessageTypeWarning);
+                note.exec();
+                
+                //reset setting to 'Always ask'
+                iSettings->setUserDefinedSelection(EIRAlwaysAsk);
+                iSettings->setDisplayAccessPoint();        
+
+                if (!iDisconnected)
+                {
+                    /* the handling is up to each view */
+                    iNetworkController->notifyActiveNetworkObservers(EIRQDisplayNetworkMessageNoConnectivity);
+                }
+                
+            }
+            break;
+            
+        default:
+            break;
+    }    
+     
+}
+
+void IRApplication::loadGenre()
+{
+    LOG_SLOT_CALLER;
+    bool hasCache = iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::EGenre);
+
+    if (!hasCache)
+    {
+        IRBaseView *currView = static_cast<IRBaseView*>(iViewManager->currentView());
+        Q_ASSERT(currView);
+        currView->setUseNetworkReason(EIR_UseNetwork_LoadCategory);
+        if (false == verifyNetworkConnectivity())
+        {
+            return;
+        }
+        currView->setUseNetworkReason(EIR_UseNetwork_NoReason);
+    }
+    
+    IRCategoryView *categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
+    categoryView->loadCategory(IRQIsdsClient::EGenre);
+}
+
+void IRApplication::newLocalSocketConnection()
+{
+    QLocalSocket *socket = iLocalServer->nextPendingConnection();
+    if (!socket)
+    {
+        return;
+    }
+    
+    socket->waitForReadyRead(1000);
+    QTextStream stream(socket);
+    QString fileName;
+    stream>>fileName;
+    IRSymbianDocument *document = IRSymbianDocument::getInstance();
+    document->parseFile(fileName);
+    
+    if (document->isPlsAvailable())
+    {
+        iViewManager->activateView(EIRView_PlsView);
+    }
+    else
+    {
+        IRBaseView *topView = static_cast<IRBaseView*>(iViewManager->currentView());
+        topView->updateView();
+    }
+    
+    iViewManager->raise();
+    delete socket;
+}
+
+void IRApplication::initApp()
+{
+    if (!iIsdsClient->isdsIsConstructSucceed())
+    {
+        HbMessageBox note("No available access points, exiting...", HbMessageBox::MessageTypeWarning);
+        note.setPrimaryAction(NULL);
+        note.setTimeout(5000);
+        note.setModal(true);
+        note.exec();
+        qApp->quit();
+    }
+    else
+    {
+        static_cast<IRBaseView*>(iViewManager->currentView())->launchAction();
+    }
+    
+    getMediaKeyObserver();	
+    startMonitoringNwkInfo();
+    startMonitoringDiskSpace();
+    startLocalServer();
+}
+
+bool IRApplication::event(QEvent* e)
+{
+    if(e->type() == iInitEvent)
+    {
+        initApp();
+        return true;        
+    }
+    
+    return QObject::event(e);
+}
+
+TIRHandleResult IRApplication::handleConnectionEstablished()
+{
+    IRBaseView *currView = static_cast<IRBaseView*>(iViewManager->currentView());
+    Q_ASSERT(currView);
+    
+    if (EIR_UseNetwork_LoadCategory == currView->getUseNetworkReason())
+    {
+        closeConnectingDialog();
+        IRCategoryView *categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
+        categoryView->loadCategory(IRQIsdsClient::EGenre);
+        currView->setUseNetworkReason(EIR_UseNetwork_NoReason);
+        return EIR_NoDefault;
+    }
+    
+    return EIR_DoDefault;
+}
+
+void IRApplication::launchStartingView()
+{
+    TIRViewId viewId = EIRView_CategoryView;
+    iSettings->getStartingViewId(viewId);
+    TIRViewParameter viewParameter = EIRViewPara_Genre;
+    iSettings->getStartingViewParameter(viewParameter);
+
+    iViewManager->activateView(viewId);
+    IRBaseView *currentView = iViewManager->getView(viewId);
+        
+    switch (viewId)
+    {
+    case EIRView_CategoryView:
+    {
+        IRCategoryView* categoryView = static_cast<IRCategoryView*> (currentView);
+        categoryView->setViewParameter(viewParameter);
+
+        switch (viewParameter)
+        {
+        case EIRViewPara_Genre:
+            categoryView->setHeadingText(tr("Genre"));
+            break;
+
+        case EIRViewPara_Language:
+            categoryView->setHeadingText(tr("Language"));
+            break;
+
+        case EIRViewPara_Country:
+            categoryView->setHeadingText(tr("Country/Region"));
+            break;
+
+        default:
+            break;
+        }
+    }
+        break;
+
+    case EIRView_PlayingView:
+        iViewManager->pushViewById(EIRView_MainView);
+        break;
+
+    default:
+        break;
+    }   
+}
+
+void IRApplication::setExitingView()
+{
+    IRQSettings *settings = getSettings();
+    bool flag = false;
+    settings->getStickyViewFlag(flag);
+    if (!flag)
+    {
+        return;
+    }
+
+    TIRViewId viewId = iViewManager->currentViewId();
+
+    switch (viewId)
+    {
+      case EIRView_CategoryView:
+      {
+          IRCategoryView *topView = (IRCategoryView*)(iViewManager->currentView());
+          TIRViewParameter parameter = topView->getViewParameter();
+          settings->setStartingViewParameter(parameter);
+      }
+      break;
+      
+      case EIRView_StationsView:
+      {
+          IRStationsView *topView = (IRStationsView*)(iViewManager->currentView());
+          TIRViewParameter parameter = topView->getViewParameter();
+          if (parameter == EIRViewPara_PopularStations)
+          {
+              settings->setStartingViewParameter(EIRViewPara_PopularStations);
+          }
+          else if (parameter == EIRViewPara_CategoryStations)
+          {
+              IRBaseView *baseView = iViewManager->getView(EIRView_CategoryView, false);
+              if (baseView)
+              {
+                  IRCategoryView *categoryView = (IRCategoryView*)baseView;
+                  TIRViewParameter parameter = categoryView->getViewParameter();
+                  settings->setStartingViewParameter(parameter);
+                  settings->setStartingViewId(EIRView_CategoryView);
+                  return;
+              }
+          }
+          else if (parameter == EIRViewPara_SearchResults)
+          {
+                
+          }
+      }
+      break;
+      
+      case EIRView_InvalidId:
+      case EIRView_StationDetailsView:
+      case EIRView_SettingsView:
+      case EIRView_OpenWebAddressView:
+      case EIRView_SearchView:
+      case EIRView_SearchResultView:
+      case EIRView_PlsView:    
+      case EIRView_HistoryView:
+      case EIRView_SongHistoryView:
+      case EIRView_ViewCount:
+      {
+          // these views are not starting view, so do not change settings.
+          return;
+      }
+      
+      default:
+          break;
+    }
+
+    settings->setStartingViewId(viewId);
+}
+
+void IRApplication::startLocalServer()
+{
+    QString serverName = QCoreApplication::applicationName();
+    iLocalServer = new QLocalServer(this);
+    connect(iLocalServer, SIGNAL(newConnection()),
+            this, SLOT(newLocalSocketConnection()));
+    
+    if (!iLocalServer->listen(serverName)) 
+    {
+        QAbstractSocket::SocketError error = iLocalServer->serverError();
+        QString fullServerName;
+        fullServerName = QDir::cleanPath(QDir::tempPath());
+        fullServerName += QLatin1Char('/') + serverName;
+        bool fileExists = QFile::exists(fullServerName);
+        
+        if (error == QAbstractSocket::AddressInUseError && fileExists) 
+        {
+            QFile::remove(fullServerName);
+            iLocalServer->listen(serverName);
+        }
+    }
+}
+
+void IRApplication::startMonitoringDiskSpace()
+{
+    if(NULL == iDiskSpaceWatcher)
+    {
+        iDiskSpaceWatcher = new IRQDiskSpaceWatcher();
+    }
+    
+    if(NULL != iDiskSpaceWatcher)
+    {
+        connect(iDiskSpaceWatcher, SIGNAL(diskSpaceLow(qint64)), 
+            this, SLOT(handleDiskSpaceLow(qint64)));        
+        iDiskSpaceWatcher->startMonitorDrive();
+    }
+}
+    
+void IRApplication::handleDiskSpaceLow(qint64 aCriticalLevel)
+{
+    Q_UNUSED(aCriticalLevel);
+    HbDeviceMessageBox messageBox(hbTrId("txt_irad_info_no_space_on_c_drive_internet_radio_closed"),
+            HbMessageBox::MessageTypeWarning);
+    messageBox.setTimeout(HbPopup::NoTimeout);
+    messageBox.exec();
+    qApp->quit();    
+}
+
+#ifdef _DEBUG
+void IRApplication::readConfiguration()
+{
+    QFile file("C:\\data\\QTIRConfigure.txt");
+    if (file.open(QIODevice::ReadOnly)) 
+    {
+        QTextStream stream( &file );
+        QString line;
+        QStringList parameter;
+        while (!stream.atEnd())
+        {
+            line = stream.readLine();
+            parameter = line.split("=");
+            if (parameter.count() == 2)
+            {
+                if (parameter.first() == "testPreferredBitrate"
+                    && parameter.last() == "true")
+                {
+                    iTestPreferredBitrate = true;
+                }
+            }
+        }
+    }
+    file.close();
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irbannerlabel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include <QPainter>
+
+#include "irbannerlabel.h"
+
+IrViewBannerLabel::IrViewBannerLabel(QGraphicsItem *parent) : HbTextItem(parent)
+{
+}
+
+
+void IrViewBannerLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    QColor color(138,128,151);
+	painter->setPen(color);
+	painter->setBrush(color);
+	
+	QRectF labelRect = rect();
+	painter->drawRect(labelRect);
+	HbTextItem::paint(painter, option, widget);
+}
+
+IrNowPlayingBannerLabel::IrNowPlayingBannerLabel(QGraphicsItem *parent) : HbMarqueeItem(parent)
+{
+}
+
+void IrNowPlayingBannerLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+
+    QColor color(216, 209, 84);
+    painter->setPen(color);
+    painter->setBrush(color);
+    
+    QRectF labelRect = rect();
+    painter->drawRect(labelRect);
+}
+
+void IrNowPlayingBannerLabel::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);
+    emit pressed();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irbaseview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* 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 "irapplication.h"
+#include "irbaseview.h"
+#include "irabstractviewmanager.h"
+
+/*
+ * Description  : constructor
+ * Parameters   : aApplication : the pointer to the internet radio application object
+ *                aViewId      : the id of the view
+ * Return       : None
+ */
+IRBaseView::IRBaseView(IRApplication* aApplication, TIRViewId aViewId) : iApplication(aApplication),
+                                                                         iLoader(aApplication->getViewManager()),
+                                                                         iViewId(aViewId),                                                                         
+                                                                         iFlag(0),
+                                                                         iUseNetworkReason(EIR_UseNetwork_NoReason)
+{
+    setTitle(hbTrId("txt_irad_title_internet_radio"));
+    
+    iPlayController = iApplication->getPlayController();
+    iIsdsClient = iApplication->getIsdsClient();
+    iNetworkController = iApplication->getNetworkController();
+    iFavorites = iApplication->getFavoritesDB();
+    iSettings = iApplication->getSettings();
+}
+
+TIRViewId IRBaseView::id() const
+{
+    return iViewId;
+}
+
+/*
+ * Description : handle system events reported by system event collector. If a sub-class wants
+ *               to handle such system events, it must override this function.
+ * Parameters  : aEvent : TIRSystemEventType
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRBaseView::handleSystemEvent(TIRSystemEventType aEvent)
+{
+    Q_UNUSED(aEvent);
+    
+    return EIR_DoDefault;
+}
+
+/*
+ * Description : handle view commands : EIR_ViewCommand_ACTIVATE, EIR_ViewCommand_DEACTIVATE,
+ *               EIR_ViewCommand_BACK
+ * Parameters  : aCommand : TIRViewCommand
+ *               aReason  : TIRViewCommandReason
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRBaseView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aCommand);
+    Q_UNUSED(aReason);
+    
+    return EIR_DoDefault;
+}
+
+/*
+ * Description : the action to be done when the view is starting view. Default implementation 
+ *               is doing nothing.
+ *               Note : 1.this function should only be called in void IRApplication::setLaunchView().  
+ *                      2.this funciton is called after view is showed up,
+ *                       so can NOT put any UI-related code here.   
+ */
+void IRBaseView::launchAction()
+{
+}
+
+void IRBaseView::updateView()
+{
+}
+
+void IRBaseView::setFlag(int aFlag)
+{
+    iFlag |= aFlag;
+}
+
+int IRBaseView::flag() const
+{
+    return iFlag;
+}
+
+void IRBaseView::setUseNetworkReason(TIRUseNetworkReason aReason)
+{
+    iUseNetworkReason = aReason;
+}
+    
+TIRUseNetworkReason IRBaseView::getUseNetworkReason() const
+{
+    return iUseNetworkReason;
+}
+    
+/*
+ * Description : return the pointer to the view manager object owned by application
+ * Parameters  : None
+ * Return      : the pointer to the view manager object owned by application
+ */
+IRAbstractViewManager* IRBaseView::getViewManager() const
+{
+    return iApplication->getViewManager();
+}
+
+void IRBaseView::popupNote(const QString &aNote, const HbMessageBox::MessageBoxType &aNoteType) const
+{
+    HbMessageBox note(aNote, aNoteType);
+    note.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/ircategorymodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include <QBrush>
+
+#include "irqisdsdatastructure.h"
+#include "iruidefines.h"
+#include "ircategorymodel.h"
+
+
+IRCategoryModel::IRCategoryModel(QObject *aParent) : QAbstractListModel(aParent), iItems(NULL)
+{
+}
+
+IRCategoryModel::~IRCategoryModel()
+{
+    destroyAllItems();
+    delete iItems;
+    iItems = NULL;
+}
+
+int IRCategoryModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    
+    if (iItems)
+    {
+        int count = iItems->count();
+        return count;
+    }
+    
+    return 0;
+}
+
+QVariant IRCategoryModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+        return QVariant();
+
+    if (aIndex.row() >= iItems->count())
+        return QVariant();
+
+    if (aRole == Qt::DisplayRole)
+    {
+        int row = aIndex.row();
+        
+        QString catNum;
+        catNum.setNum(iItems->at(row)->size);
+        QString secondaryText = catNum + QString(" Stations");
+
+        QVariantList list;
+        list.append(iItems->at(row)->catName);
+        list.append(secondaryText);
+        return list;
+    }
+    else if (aRole == Qt::BackgroundRole)
+    {
+        if (aIndex.row() % 2 == 0)
+        {
+            return QBrush(KListEvenRowColor);
+        }
+        else
+        {
+            return QBrush(KListOddRowColor);
+        }
+    }
+
+    return QVariant();
+}
+
+const QString& IRCategoryModel::categoryName(const QModelIndex &aIndex) const
+{
+    int row = aIndex.row();
+    Q_ASSERT(row >= 0 && row < iItems->count());
+
+    return iItems->at(row)->catName;
+}
+
+void IRCategoryModel::categoryReceived(QList<IRQBrowseCategoryItem*> *aItems)
+{
+    destroyAllItems();
+    delete iItems;
+    
+    iItems = aItems;
+
+    emit dataChanged();
+}
+
+void IRCategoryModel::destroyAllItems()
+{
+    if (iItems)
+    {
+        while (!iItems->isEmpty())
+        {
+            IRQBrowseCategoryItem *firstItem = iItems->takeFirst();
+            delete firstItem;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/ircategoryview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,453 @@
+/*
+* 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 <hbaction.h>
+#include <hblistview.h>
+
+#include "irapplication.h"
+#include "irabstractviewmanager.h"
+#include "ircategoryview.h"
+#include "irstationsview.h"
+#include "irqnetworkcontroller.h"
+#include "ircategorymodel.h"
+
+//                                    public functions             
+
+/*
+ * Description : constructor
+ */
+IRCategoryView::IRCategoryView(IRApplication* aApplication, TIRViewId aViewId) 
+                               : IrAbstractListViewBase(aApplication, aViewId),
+                                 iWaitDialog(NULL),
+                                 iViewParameter(EIRViewPara_InvalidId),
+                                 iLastSelectItem(0)
+{	
+    iModel = new IRCategoryModel(this);
+    iListView->setModel(iModel);
+    
+    connect(iModel, SIGNAL(dataChanged()), this, SLOT(dataChanged()));
+    
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+            this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+}
+
+/*
+ * Description : destructor
+ */
+IRCategoryView::~IRCategoryView()
+{
+    delete iWaitDialog;
+    iWaitDialog = NULL;
+}
+
+/*
+ * Description : virtual functions from base class IRBaseView. 
+ *               handle view commands
+ * 
+ * see also    : IRBaseView::handleCommand
+ */
+TIRHandleResult IRCategoryView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+    
+    switch (aCommand)
+    {
+        case EIR_ViewCommand_ACTIVATED:
+        break;
+        
+        case EIR_ViewCommand_DEACTIVATE:
+            if (iWaitDialog)
+            {
+                iWaitDialog->close();
+                ret = EIR_NoDefault;
+            }
+            break;
+            
+        default:
+            break;
+    }
+    
+    return ret;
+}
+
+void IRCategoryView::launchAction()
+{    
+    bool ret = false;
+    switch(iViewParameter)
+    {
+        case EIRViewPara_Genre:
+            ret = iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::EGenre);
+            break;
+        case EIRViewPara_Language:
+            ret = iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::ELanguages);
+            break;
+        case EIRViewPara_Country:
+            ret = iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::ECountries);
+            break;
+
+        default:
+            break;
+    }
+    
+    if ( !ret )
+    {
+        setUseNetworkReason(EIR_UseNetwork_StartingView);
+        iApplication->verifyNetworkConnectivity();
+    }   
+    else
+    {
+        IRQIsdsClient::IRQIsdsClientInterfaceIDs request =
+                IRQIsdsClient::EGenre;
+
+        switch (iViewParameter)
+        {
+            case EIRViewPara_Genre:
+                request = IRQIsdsClient::EGenre;
+                break;
+
+            case EIRViewPara_Language:
+                request = IRQIsdsClient::ELanguages;
+                break;
+
+            case EIRViewPara_Country:
+                request = IRQIsdsClient::ECountries;
+                break;
+
+            default:
+                break;
+        }
+
+        connectToIsdsClient();
+        bool cache = false;
+        iIsdsClient->isdsCategoryRequest(request, cache);
+    }
+}
+
+void IRCategoryView::setViewParameter(TIRViewParameter aParameter)
+{
+    iViewParameter = aParameter;
+}
+
+TIRViewParameter IRCategoryView::getViewParameter() const
+{
+    return iViewParameter;
+}
+
+void IRCategoryView::loadCategory(IRQIsdsClient::IRQIsdsClientInterfaceIDs aCategory)
+{
+    connectToIsdsClient();
+    
+    bool cache = false;
+    switch (aCategory)
+    {
+    case IRQIsdsClient::EGenre : 
+        setHeadingText(tr("Genre"));
+        if (EIRViewPara_Genre != getViewParameter())
+        {
+            //the view is used for other categories other than Genre
+            resetCurrentItem();
+        }
+        setViewParameter(EIRViewPara_Genre);
+        iIsdsClient->isdsCategoryRequest(IRQIsdsClient::EGenre, cache);
+        break;
+        
+    case IRQIsdsClient::ELanguages : 
+        setHeadingText(hbTrId("txt_irad_list_stations_by_language"));
+        if (EIRViewPara_Language != getViewParameter())
+        {
+            //the view is used for other categories other than Language
+            resetCurrentItem();
+        }
+        setViewParameter(EIRViewPara_Language);
+        iIsdsClient->isdsCategoryRequest(IRQIsdsClient::ELanguages, cache);
+        break;
+        
+    case IRQIsdsClient::ECountries :
+        setHeadingText(hbTrId("txt_irad_list_stations_by_country_region"));
+        if (EIRViewPara_Country != getViewParameter())
+        {
+            //the view is used for other categories other than Country
+            resetCurrentItem();
+        }
+        setViewParameter(EIRViewPara_Country);
+        iIsdsClient->isdsCategoryRequest(IRQIsdsClient::ECountries, cache);
+        break;
+        
+    default:
+        Q_ASSERT(false);
+        break;
+    }
+    
+    if (!cache)
+    {
+        createWaitDialog(hbTrId("txt_common_info_loading"));
+    }
+}
+
+void IRCategoryView::storeCurrentItem()
+{
+    iLastSelectItem = iListView->currentIndex().row();
+}
+
+void IRCategoryView::resetCurrentItem()
+{
+    iLastSelectItem = 0;
+    IRBaseView *stationView = getViewManager()->getView(EIRView_StationsView);
+    if( stationView )
+    {
+        static_cast<IrAbstractListViewBase*>(stationView)->resetCurrentItem();
+    }
+}
+
+/*
+ * Description : slot function for active network event
+ * Parameters  : aEvent, see the definition of IRQNetworkEvent
+ */
+void IRCategoryView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    Q_ASSERT(iViewParameter != EIRViewPara_InvalidId);
+    
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        if (EIR_UseNetwork_StartingView == getUseNetworkReason())
+        {
+            IRQIsdsClient::IRQIsdsClientInterfaceIDs request = IRQIsdsClient::EGenre;
+        
+            switch (iViewParameter)
+            {
+            case EIRViewPara_Genre:
+                request = IRQIsdsClient::EGenre;
+                break;
+
+            case EIRViewPara_Language:
+                request = IRQIsdsClient::ELanguages;
+                break;
+
+            case EIRViewPara_Country:
+                request = IRQIsdsClient::ECountries;
+                break;
+
+            default:
+                break;
+            }
+
+            connectToIsdsClient();
+            bool cache = false;
+            iIsdsClient->isdsCategoryRequest(request, cache);
+        }
+        //for there may be some cache, and when we click, we need to handle here        
+        else if ( EIR_UseNetwork_SelectItem == getUseNetworkReason())
+        {
+            iApplication->closeConnectingDialog();
+            handleItemSelected();               
+        }        
+        
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+       
+    case EIRQConnectingCancelled:
+    case EIRQDisplayNetworkMessageNoConnectivity:
+        if (iListView->model()->rowCount() == 0)
+        {
+            getViewManager()->activateView(EIRView_MainView);
+        }
+        else
+        {
+            setCheckedAction();
+        }
+        
+        break;
+        
+    default:
+        setCheckedAction();
+        break;
+    }
+}
+
+
+//                                 slots functions 
+
+void IRCategoryView::itemAboutToBeSelected(bool &aNeedNetwork)
+{
+ 
+    if (iIsdsClient && iListView)
+    {
+        int index = iListView->currentIndex().row();         
+        if (iIsdsClient->isdsIsCategoryBanner())
+        {
+            ++index;
+        }       
+         
+        aNeedNetwork = !iIsdsClient->isdsIsChannelCached(index);              
+    }       
+}
+/*
+ * Description  : slot function when an item in a list is clicked. call isds client to get 
+ *                channel list under the clicked category.
+ * Parameters   : aItem  : pointer to the clicked item
+ * Return       : None
+ */
+void IRCategoryView::handleItemSelected()
+{
+    if (iIsdsClient && iListView)
+    {
+        int index = iListView->currentIndex().row();
+        if ( iLastSelectItem != index )
+        {
+            IRBaseView *stationView = getViewManager()->getView(EIRView_StationsView);
+            if( stationView )
+            {
+                static_cast<IrAbstractListViewBase*>(stationView)->resetCurrentItem();
+            }
+        }
+        iLastSelectItem = index;
+        if (iIsdsClient->isdsIsCategoryBanner())
+        {
+            ++index;
+        }
+        
+        const QString& headingText = iModel->categoryName(iListView->currentIndex());
+        IRStationsView *stationsView =
+        static_cast<IRStationsView*>(getViewManager()->getView(EIRView_StationsView, true));
+        stationsView->loadCategoryStations(index, headingText);
+    }
+}
+
+/*
+ * Description : data is received from isds client. Load the data to the list widget and display
+ *               the category view
+ * 
+ */
+void IRCategoryView::dataChanged()
+{
+    disconnectIsdsClient();
+    iApplication->closeConnectingDialog();
+    if (iWaitDialog)
+    {
+        iWaitDialog->close();
+    }
+
+    iListView->reset();
+    iListView->setCurrentIndex(iModel->index(iLastSelectItem));
+    iListView->scrollTo(iModel->index(iLastSelectItem));
+    getViewManager()->activateView(this);
+}
+
+/*
+ * Description : slot function for canceling request.
+ *               Before data is received, cancel requests through isds client
+ */
+void IRCategoryView::cancelRequest()
+{
+    iIsdsClient->isdsCancelRequest();
+    disconnectIsdsClient();
+}
+
+/*
+ * Description  : slot function for operation failure. The signal is emitted by isds client
+ * Parameters   : aError : see the definition of IRQError
+ */
+void IRCategoryView::operationException(IRQError aError)
+{
+    Q_UNUSED(aError);
+    iApplication->closeConnectingDialog();
+    
+    if (iWaitDialog)
+    {
+        iWaitDialog->close();
+    }
+    
+    disconnectIsdsClient();
+    
+    popupNote(hbTrId("txt_irad_info_failed_to_connect"), HbMessageBox::MessageTypeWarning);
+    
+    //if category view is starting view and failed to get data from ISDS server, back to main view
+    if (getViewManager()->currentView() == this &&
+        iListView->model()->rowCount() == 0)
+    {
+        getViewManager()->activateView(EIRView_MainView);
+    }
+}
+
+//                                        private functions
+
+/*
+ * Description : Show a wait dialog to inform user that data is being loaded. If wait dialog doesn't
+ *               exist yet, create first
+ */
+void IRCategoryView::createWaitDialog(const QString &aText)
+{
+    if (!iWaitDialog)
+    {
+        iWaitDialog = new HbMessageBox(tr(""), HbMessageBox::MessageTypeInformation);
+        //iWaitDialog->setTimeout(HbPopupBase::NoTimeout);
+        iWaitDialog->setTimeout(HbPopup::NoTimeout); // JM: changed in w47 Orbit
+        iWaitDialog->setModal(true);
+        //iWaitDialog->setDismissPolicy(HbPopupBase::NoDismiss);
+        iWaitDialog->setDismissPolicy(HbPopup::NoDismiss); // JM: changed in w47 Orbit
+        HbAction *cancelAction = new HbAction(hbTrId("txt_common_button_cancel"), iWaitDialog);
+        iWaitDialog->setPrimaryAction(cancelAction);
+        connect(cancelAction, SIGNAL(triggered()), this, SLOT(cancelRequest()));
+    }
+    
+    iWaitDialog->setText(aText);
+    iWaitDialog->exec();
+}
+
+void IRCategoryView::connectToIsdsClient()
+{
+    connect(iIsdsClient, SIGNAL(categoryItemsChanged(QList<IRQBrowseCategoryItem *> *)),
+            iModel, SLOT(categoryReceived(QList<IRQBrowseCategoryItem *> *)));
+    connect(iIsdsClient, SIGNAL(operationException(IRQError)),
+            this, SLOT(operationException(IRQError)));
+}
+
+void IRCategoryView::disconnectIsdsClient()
+{
+    disconnect(iIsdsClient, SIGNAL(categoryItemsChanged(QList<IRQBrowseCategoryItem *> *)),
+               iModel, SLOT(categoryReceived(QList<IRQBrowseCategoryItem *> *)));
+    disconnect(iIsdsClient, SIGNAL(operationException(IRQError)),
+               this, SLOT(operationException(IRQError)));
+}
+
+/*
+ * Description : set the checked action in toolbar. For categoryview, iGenresAction should be
+ *               checked if the view is for genre display. For other categories, iGenresAction
+ *               should not be checked
+ */
+void IRCategoryView::setCheckedAction()
+{
+    if (EIRViewPara_Genre == getViewParameter())
+    {
+        iGenresAction->setChecked(true);
+    }
+    else
+    {
+        QList<QAction*> actionList = iCollectionsAction->actionGroup()->actions();
+        for (QList<QAction*>::const_iterator it = actionList.begin(); it != actionList.end(); ++it)
+        {
+            (*it)->setChecked(false);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irchannelmodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,163 @@
+/*
+* 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 <hbicon.h>
+#include <QBrush>
+
+#include "irchannelmodel.h"
+#include "irqisdsdatastructure.h"
+#include "iruidefines.h"
+
+IrChannelModel::IrChannelModel(QObject *aParent): QAbstractListModel(aParent)
+                                                , iChannelList(NULL)
+{
+    QIcon icon(":/stationlist/icon_stationdefault.png");
+    iStationLogo = new HbIcon(icon);   
+}
+
+IrChannelModel::~IrChannelModel()
+{
+    clearAndDestroyItems();
+
+    delete iStationLogo;
+    iStationLogo = NULL;
+    
+    clearAndDestroyLogos();
+}
+
+int IrChannelModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    int count = 0;
+    
+    if(iChannelList)
+    {
+        count = iChannelList->count();
+    }
+    return count;
+}
+
+QString IrChannelModel::imageUrl(int aRow)
+{
+    if (iChannelList)
+    {
+        return iChannelList->at(aRow)->imageURL;
+    }
+    else
+    {
+        return "";
+    }
+}
+
+void IrChannelModel::setLogo(HbIcon *aIcon, int aIndex)
+{
+    iLogos[aIndex] = aIcon;
+    emit dataChanged(index(aIndex), index(aIndex));
+}
+
+QVariant IrChannelModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+        return QVariant();
+
+    if (aIndex.row() >= iChannelList->count())
+        return QVariant();
+
+    if (aRole == Qt::DisplayRole)
+    {
+        QVariantList list;
+        int row = aIndex.row();
+
+        list.append(iChannelList->at(row)->channelName);       
+        // fix bug #9888,if left descriptions as blank, only one line appears
+        QString tempDes = iChannelList->at(row)->shortDescription;        
+        if( 0 == tempDes.length() )
+        {
+            tempDes = " ";
+        }
+        list.append(tempDes);       
+        
+        return list;
+    }
+    else if (aRole == Qt::DecorationRole)
+    {
+        QVariantList list;
+        int row = aIndex.row();
+        const HbIcon *icon = iLogos.value(row);
+        if (icon)
+        {
+            list.append(*icon);
+        }
+        else
+        {
+            list.append(*iStationLogo);
+        }
+        
+        return list;
+    }
+    else if (aRole == Qt::BackgroundRole)
+    {
+        if (aIndex.row() % 2 == 0)
+        {
+            return QBrush(KListEvenRowColor);
+        }
+        else
+        {
+            return QBrush(KListOddRowColor);
+        }
+    }
+    else
+    {
+        return QVariant();
+    }
+}
+
+void IrChannelModel::updateData(QList<IRQChannelItem*> *aPushItemsList)
+{
+    if (iChannelList != aPushItemsList)
+    {
+        clearAndDestroyItems();
+        iChannelList = aPushItemsList;
+    }
+    
+    clearAndDestroyLogos();
+    
+    emit dataAvailable();
+}
+
+void IrChannelModel::clearAndDestroyLogos()
+{
+    for (QMap<int, HbIcon*>::iterator it = iLogos.begin(); it != iLogos.end(); ++it)
+    {
+        delete it.value();
+    }
+    
+    iLogos.clear();
+}
+
+void IrChannelModel::clearAndDestroyItems()
+{
+    if (iChannelList)
+    {
+        for (QList<IRQChannelItem*>::iterator it = iChannelList->begin(); it != iChannelList->end(); ++it)
+        {
+            delete *it;
+        }
+        delete iChannelList;
+        iChannelList = NULL;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/ircombobox.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+
+#include "ircombobox.h"
+
+
+IrComboBox::IrComboBox(QGraphicsItem *parent) : HbComboBox(parent)
+{
+    
+}
+
+ 
+
+void IrComboBox::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);    
+    HbComboBox::mousePressEvent(event);     
+    emit pressed();      
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irdocumentloader.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,108 @@
+/*
+* 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 "irdocumentloader.h"
+#include "irbannerlabel.h"
+#include "ircombobox.h"
+#include "irlineeditor.h"
+
+IRDocumentLoader::IRDocumentLoader(QObject *aParent) : iParent(aParent)
+{
+    
+}
+
+QObjectList IRDocumentLoader::load(const QString &aFileName, const QString &aSection, QObject *aParent)
+{
+    bool ok = false;
+    QObjectList list = HbDocumentLoader::load(aFileName, aSection, &ok);
+    Q_ASSERT_X(ok, "void IRDocumentLoader::load(const QString &aFileName, const QString &aSection)", "load failed");
+    
+    int size = list.count();
+    QObject *parent = aParent ? aParent : iParent;
+    for (int i = 0; i < size; i++)
+    {
+        QObject *obj = list[i];
+        if (obj != parent)
+        {
+            obj->setParent(parent);
+        }
+    }
+    
+    return list;
+}
+
+QObjectList IRDocumentLoader::load(const QString &aFileName, QObject *aParent)
+{
+    bool ok = false;
+    QObjectList list = HbDocumentLoader::load(aFileName, &ok);
+    Q_ASSERT_X(ok, "void IRDocumentLoader::load(const QString &aFileName)", "load failed");
+    
+    int size = list.count();
+    QObject *parent = aParent ? aParent : iParent;
+    for (int i = 0; i < size; i++)
+    {
+        QObject *obj = list[i];
+        if (obj != parent)
+        {
+            obj->setParent(parent);
+        }
+    }
+    
+    return list;
+}
+
+QObject *IRDocumentLoader::createObject(const QString& aType, const QString &aName)
+{
+    if (aType == IrViewBannerLabel::staticMetaObject.className())
+    {
+        QObject *object = new IrViewBannerLabel();
+        object->setObjectName(aName);
+        return object;
+    }
+    else if(aType == IrNowPlayingBannerLabel::staticMetaObject.className())
+    {
+        QObject *object = new IrNowPlayingBannerLabel();
+        object->setObjectName(aName);
+        return object;
+    }
+    else if(aType == IrComboBox::staticMetaObject.className())
+    {
+        QObject *object = new IrComboBox();
+        object->setObjectName(aName);
+        return object;
+    }
+    else if(aType == IrLineEditor::staticMetaObject.className())
+    {
+        QObject *object = new IrLineEditor();
+        object->setObjectName(aName);
+        return object;
+    }
+    else if (aType == HbTextItem::staticMetaObject.className())
+    {
+        QObject *object = new HbTextItem;
+        object->setObjectName(aName);
+        return object;
+    }
+    else if (aType == HbMarqueeItem::staticMetaObject.className())
+    {
+        QObject *object = new HbMarqueeItem;
+        object->setObjectName(aName);
+        return object;
+    }
+
+    return HbDocumentLoader::createObject(aType, aName);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irfavoritesmodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* 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 <hbicon.h>
+#include <QBrush>
+
+#include "irqfavoritesdb.h"
+#include "irqisdsdatastructure.h"
+#include "iruidefines.h"
+#include "irfavoritesmodel.h"
+
+IRFavoritesModel::IRFavoritesModel(IRQFavoritesDB *aFavoritesDb, QObject *aParent) 
+                                  : QAbstractListModel(aParent), iFavoritesDb(aFavoritesDb),
+                                    iPresetsList(NULL)
+{
+    if (aFavoritesDb)
+    {
+        iPresetsList = aFavoritesDb->getPresets();
+    }
+    
+    iStationLogo = new HbIcon(":/stationlist/icon_stationdefault.png");
+}
+
+IRFavoritesModel::~IRFavoritesModel()
+{
+    delete iStationLogo;
+    clearPresetList();
+    clearAndDestroyLogos();
+}
+
+IRQPreset* IRFavoritesModel::getPreset(int aIndex) const
+{
+    if (iPresetsList && aIndex >= 0 && aIndex < iPresetsList->count())
+    {
+        return iPresetsList->at(aIndex);
+    }
+    
+    return NULL;
+}
+
+QString  IRFavoritesModel::getImgUrl(int aIndex) const
+{
+    if( aIndex<0 || aIndex >=iPresetsList->count() )
+    {
+        return "";
+    }
+    return iPresetsList->at(aIndex)->imgUrl;     
+}
+
+int IRFavoritesModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    if (iPresetsList)
+    {
+        int count = iPresetsList->count();
+        return count;
+    }
+    
+    return 0;
+}
+
+void IRFavoritesModel::setLogo(HbIcon *aIcon, int aIndex)
+{
+    iLogos[aIndex] = aIcon;
+    emit dataChanged(index(aIndex), index(aIndex));
+}
+
+QVariant IRFavoritesModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+    {
+        return QVariant();
+    }
+
+    if (aIndex.row() >= iPresetsList->count())
+    {
+        return QVariant();
+    }
+    
+    if (aRole == Qt::DisplayRole)
+    {
+        QVariantList list;
+        int row = aIndex.row();
+
+        QString primaryText = QString::number(row+1) + ". " + iPresetsList->at(row)->name;
+        list.append(primaryText);
+        QString secondaryText = iPresetsList->at(row)->shortDesc;
+        
+        // fix bug #9888,if left descriptions as blank,
+        // only one line displays in favorites view
+        if (0 == secondaryText.length())
+        {
+            secondaryText = " ";
+        }
+        
+        list.append(secondaryText);
+        return list;
+    }
+	else if( aRole == Qt::DecorationRole)
+	{
+	    QVariantList list;
+		int row = aIndex.row();
+        const HbIcon *icon = iLogos.value(row);
+        if (icon)
+        {
+            list.append(*icon);
+        }
+        else
+        {
+            list.append(*iStationLogo);
+        }
+		
+        return list;
+    }
+    else if (aRole == Qt::BackgroundRole)
+    {
+        if (aIndex.row() % 2 == 0)
+        {
+            return QBrush(KListEvenRowColor);
+        }
+        else
+        {
+            return QBrush(KListOddRowColor);
+        }
+    }
+
+    return QVariant();
+}
+
+bool IRFavoritesModel::checkFavoritesUpdate()
+{
+    clearPresetList();
+    clearAndDestroyLogos();
+    iPresetsList = iFavoritesDb->getPresets();
+    emit modelChanged();
+    return true;
+}
+
+void IRFavoritesModel::clearAndDestroyLogos()
+{
+    for (QMap<int, HbIcon*>::iterator it = iLogos.begin(); it != iLogos.end(); ++it)
+    {
+        delete it.value();
+    }
+
+    iLogos.clear();
+}
+
+void IRFavoritesModel::clearFavoriteDB()
+{
+    if (NULL == iPresetsList)
+    {
+        return;
+    }
+    
+    int presetSize = iPresetsList->count();
+    int uniqId = 0;
+         
+    for (int i = 0; i < presetSize; ++i)
+    {
+        uniqId = iFavoritesDb->getUniqId(i);
+        iFavoritesDb->deletePreset(uniqId);
+    }    
+ 
+    clearPresetList();
+    clearAndDestroyLogos();
+    emit modelChanged();
+}
+
+void IRFavoritesModel::clearPresetList()
+{
+    if (NULL == iPresetsList)
+    {
+        return;
+    }
+    
+    while (!iPresetsList->isEmpty())
+    {
+        delete iPresetsList->takeLast();
+    }
+    delete iPresetsList;
+    iPresetsList = NULL;
+}
+
+bool IRFavoritesModel::deleteOneFavorite(int aIndex)
+{
+    if( aIndex < 0 || aIndex >= iPresetsList->size())
+    {
+        return false;
+    }
+    
+    IRQPreset *preset = iPresetsList->at(aIndex);        
+    int ret = iFavoritesDb->deletePreset(preset->uniqID);   
+    
+    
+    if( 0 != ret )
+    {
+        return false;
+    }
+    
+    beginRemoveRows(QModelIndex(), aIndex, aIndex);
+    iPresetsList->removeAt(aIndex);
+    endRemoveRows();
+    emit modelChanged();
+    return true;    
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irfavoritesview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,317 @@
+/*
+* 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 <hblistview.h>
+#include <hbaction.h>
+#include <hbmenu.h>
+#include <QPixmap>
+#include <QTimer>
+
+#include "irabstractviewmanager.h"
+#include "irfavoritesview.h"
+#include "irapplication.h"
+#include "irqfavoritesdb.h"
+#include "irqisdsclient.h"
+#include "irqnetworkcontroller.h"
+#include "irplaycontroller.h"
+#include "irfavoritesmodel.h"
+#include "irqenums.h"
+#include "irqisdsdatastructure.h"
+#include "irqutility.h"
+
+const int KBitmapSize = 59;
+//                                        public functions
+
+/*
+ * Description : constructor
+ */
+IRFavoritesView::IRFavoritesView(IRApplication *aApplication, TIRViewId aViewId) 
+                                 : IrAbstractListViewBase(aApplication, aViewId),
+                                   iClearFavoriteAction(NULL),iLogoPreset(NULL)
+								  
+{    
+    iClearFavoriteAction = new HbAction(hbTrId("txt_irad_opt_clear_favorites"), menu());
+    connect(iClearFavoriteAction, SIGNAL(triggered()), this, SLOT(clearAllFavorites()));    
+  
+    iModel = new IRFavoritesModel(iFavorites, this);
+    iListView->setModel(iModel);
+    iListView->setCurrentIndex(iModel->index(0));
+    
+    iConvertTimer = new QTimer(this);
+    iConvertTimer->setInterval(10);
+    
+    connect(iModel, SIGNAL(modelChanged()), this, SLOT(modelChanged()));
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+            this, SLOT(networkRequestNotified(IRQNetworkEvent))); 
+    connect(iConvertTimer, SIGNAL(timeout()), this, SLOT(convertAnother()));
+}
+
+/*
+ * Description : destructor
+ */
+IRFavoritesView::~IRFavoritesView()
+{
+    delete iLogoPreset;
+    iLogoPreset = NULL;
+}
+
+TIRHandleResult IRFavoritesView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+    int leftCount = 0;
+    
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:        
+        connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
+                this, SLOT(presetLogoDownload(IRQPreset* )));
+        connect(iIsdsClient, SIGNAL(presetLogoDownloadError()),
+                this, SLOT(presetLogoDownloadError()));
+        
+        
+        iModel->checkFavoritesUpdate();          
+        ret = EIR_NoDefault;
+        break;
+
+    case EIR_ViewCommand_DEACTIVATE:        		 
+        
+        iModel->clearAndDestroyLogos();
+        iConvertTimer->stop();
+        iIsdsClient->isdsLogoDownCancelTransaction();
+        //iIconIndexArray must be cleared, because timer call back convertAnother() might be
+        //called after view is deactivated. In that case, iModel->getImgURL(aIndex); will crash
+        iIconIndexArray.clear();
+        
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset*)),
+                   this, SLOT(presetLogoDownload(IRQPreset* )));
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloadError()),
+                   this, SLOT(presetLogoDownloadError()));
+
+        ret = EIR_NoDefault;
+        break;
+     
+    case EIR_ViewCommand_EffectFinished:
+        
+        /* when the effect is finished, we start showing the logos  */
+        leftCount = iIconIndexArray.count();
+        if( leftCount > 0 )
+        {
+            iConvertTimer->start();
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    return ret;
+}
+
+void IRFavoritesView::handleItemSelected()
+{
+    int currentIndex = iListView->currentIndex().row();
+    IRQPreset * currentPreset = iModel->getPreset(currentIndex);
+
+    if (currentPreset)
+    {
+        if(IRQPreset::EIsds == currentPreset->type)
+        {
+            iPlayController->connectToChannel(currentPreset,EIRQPresetIsds);
+        }
+        else
+        {
+            iPlayController->connectToChannel(currentPreset,EIRQPresetAdhoc);
+        }
+    }        
+}
+
+// ---------------------------------------------------------------------------
+// IRFavoritesView::clearAllList()
+//---------------------------------------------------------------------------
+void IRFavoritesView::clearAllFavorites()
+{
+    iIconIndexArray.clear();
+    iModel->clearFavoriteDB();   
+    iIsdsClient->isdsLogoDownCancelTransaction();
+    iConvertTimer->stop();
+    updateView();
+}
+
+void IRFavoritesView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        iApplication->closeConnectingDialog();
+        if (EIR_UseNetwork_SelectItem == getUseNetworkReason())
+        {
+            handleItemSelected();
+        }
+        
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+
+    default:
+        setCheckedAction();
+        break;
+    }
+}
+
+void IRFavoritesView::prepareMenu()
+{
+    HbMenu *viewMenu = menu();
+    
+    viewMenu->removeAction(iClearFavoriteAction);
+    if (iModel->rowCount() > 0)
+    {
+        viewMenu->insertAction(iOpenWebAddressAction, iClearFavoriteAction);
+    }
+}
+
+void IRFavoritesView::startConvert(int aIndex)
+{     
+    QString url = iModel->getImgUrl(aIndex);
+    
+    IRQPreset tempPreset;
+    tempPreset.imgUrl = url;
+    tempPreset.type = IRQPreset::EIsds;
+
+    iIsdsClient->isdsLogoDownSendRequest(&tempPreset, 0, KBitmapSize, KBitmapSize); 
+}
+
+//if the logo is downloaded ok
+void IRFavoritesView::presetLogoDownload(IRQPreset* aPreset)
+{
+    if (NULL == aPreset)
+    {
+        presetLogoDownloadError();
+        return;
+    }
+
+    delete iLogoPreset;
+    iLogoPreset = aPreset;
+
+    if (iLogoPreset->logoData != KNullDesC8)
+    {
+        const unsigned char * logoData = iLogoPreset->logoData.Ptr();
+        QPixmap tempMap;
+        bool ret = tempMap.loadFromData(logoData,iLogoPreset->logoData.Length());
+        if( ret )
+        {
+            QIcon convertIcon(tempMap);
+            HbIcon *hbIcon = new HbIcon(convertIcon);
+            int index = iIconIndexArray[0];
+            iModel->setLogo(hbIcon, index);
+            iIconIndexArray.removeAt(0);
+            int leftCount = iIconIndexArray.count();
+            if( leftCount > 0 )
+            {
+                iConvertTimer->start();  
+            }            
+            return;             
+        }        
+    }    
+    
+    presetLogoDownloadError();
+}
+
+//if the logo download fails
+void IRFavoritesView::presetLogoDownloadError()
+{
+    iIconIndexArray.removeAt(0);
+    int leftCount = 0;
+    leftCount = iIconIndexArray.count();
+    if( leftCount > 0 )
+    {
+        iConvertTimer->start();
+    }    
+}
+
+void IRFavoritesView::convertAnother()
+{
+    iConvertTimer->stop();
+    int leftCount = iIconIndexArray.count();
+
+    if (0 != leftCount)
+    {
+        startConvert(iIconIndexArray[0]);
+    }
+}
+
+void IRFavoritesView::modelChanged()
+{
+    QString headingStr = tr("Favorites") + " (" + QString::number(iModel->rowCount()) + ")";
+    setHeadingText(headingStr);
+    iIconIndexArray.clear();
+    
+    for (int i = 0; i < iModel->rowCount(); ++i)
+    {
+        if (iModel->getImgUrl(i) != "")
+        {
+            iIconIndexArray.append(i);
+        }
+    }
+    
+    iListView->reset();
+    iListView->setCurrentIndex(iModel->index(0));
+}
+
+/*
+ * Description : set the checked action in toolbar. for favoritesview, iFavoritesAction should
+ *               be checked
+ */
+void IRFavoritesView::setCheckedAction()
+{
+    iFavoritesAction->setChecked(true);
+}
+
+void IRFavoritesView::listViewLongPressed(HbAbstractViewItem *aItem, const QPointF& aCoords)
+{
+    Q_UNUSED(aItem);             
+    HbMenu *contextMenu = 0;
+    HbAction *action = 0;
+    
+    contextMenu = new HbMenu(); 
+    action = contextMenu->addAction(QString(hbTrId("txt_common_menu_delete")));
+    action->setObjectName("delete");
+    action = contextMenu->exec(aCoords);
+    
+    if( action )
+    {
+        QString objectName = action->objectName();      
+        if( objectName == "delete")
+        {
+            deleteContextAction();                            
+        }
+    }          
+} 
+
+void IRFavoritesView::deleteContextAction()
+{
+    int current = iListView->currentIndex().row();
+    bool ret = iModel->deleteOneFavorite(current);   
+	  if( !ret )
+	  {
+	    popupNote(hbTrId("txt_irad_info_operation_failed"), HbMessageBox::MessageTypeWarning);
+	  }
+}
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irhistorymodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,190 @@
+/*
+* 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 <hbicon.h>
+#include <QBrush>
+
+#include "irqsonghistoryinfo.h"
+#include "irqsonghistoryengine.h"
+#include "irhistorymodel.h"
+#include "iruidefines.h"
+
+IRHistoryModel::IRHistoryModel(QObject *aParent) : QAbstractListModel(aParent)
+{
+    iStationLogo = new HbIcon(":/stationlist/icon_stationdefault.png");
+
+    iHistoryEngine = IRQSongHistoryEngine::openInstance();
+    getAllList();
+}
+
+IRHistoryModel::~IRHistoryModel()
+{
+    delete iStationLogo;
+    iStationLogo = NULL;
+
+    clearAndDestroyLogos();
+
+    while (!iHistoryList.isEmpty())
+    {
+        delete iHistoryList.takeFirst();
+    }
+    
+    if (iHistoryEngine)
+    {
+        iHistoryEngine->closeInstance();
+        iHistoryEngine = NULL;
+    }
+}
+
+int IRHistoryModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    return iHistoryList.count();
+}
+
+QString IRHistoryModel::getImageUrl(int aRow) const
+{
+    return iHistoryList.at(aRow)->getImageUrl();
+}
+
+void IRHistoryModel::setLogo(HbIcon *aIcon, int aIndex)
+{
+    iLogos[aIndex] = aIcon;
+    emit dataChanged(index(aIndex), index(aIndex));
+}
+
+QVariant IRHistoryModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+    {
+        return QVariant();
+    }
+
+    if (aIndex.row() >= iHistoryList.count())
+    {
+        return QVariant();
+    }
+    
+    if (aRole == Qt::DisplayRole)
+    {
+        QVariantList list;
+        
+        int row = aIndex.row();
+        QString primaryText = QString::number(row+1) + ". " + iHistoryList.at(row)->getChannelName();
+        list.append(primaryText);
+        // fix bug #9888,if left descriptions as blank, only one line appears
+        QString tempDes = iHistoryList.at(row)->getChannelDesc();
+        if (0 == tempDes.length())
+        {
+            tempDes = " ";
+        }
+        list.append(tempDes);
+        
+        return list;
+    }
+    else if (aRole == Qt::DecorationRole)
+    {
+        QVariantList list;
+        int row = aIndex.row();
+        const HbIcon *icon = iLogos.value(row);
+        if (icon)
+        {
+            list.append(*icon);
+        }
+        else
+        {
+            list.append(*iStationLogo);
+        }
+        
+        return list;
+    }
+    else if (aRole == Qt::BackgroundRole)
+    {
+        if (aIndex.row() % 2 == 0)
+        {
+            return QBrush(KListEvenRowColor);
+        }
+        else
+        {
+            return QBrush(KListOddRowColor);
+        }
+    }
+
+    return QVariant();
+}
+
+IRQSongHistoryInfo* IRHistoryModel::getHistoryInfo(int aIndex)
+{
+    if (aIndex >= 0 && aIndex < iHistoryList.count())
+    {
+        return iHistoryList.at(aIndex);
+    }
+
+    return NULL;
+}
+
+void IRHistoryModel::clearAllList()
+{
+    while (!iHistoryList.isEmpty())
+    {
+        IRQSongHistoryInfo *firstItem = iHistoryList.takeFirst();
+        delete firstItem;
+    }
+    iHistoryEngine->clearAllHistory();
+    clearAndDestroyLogos();
+    emit modelChanged();
+}
+
+bool IRHistoryModel::checkHistoryUpdate()
+{
+    getAllList();    
+    return true;
+}
+
+void IRHistoryModel::clearAndDestroyLogos()
+{
+    for (QMap<int, HbIcon*>::iterator it = iLogos.begin(); it != iLogos.end(); ++it)
+    {
+        delete it.value();
+    }
+    
+    iLogos.clear();
+}
+
+void IRHistoryModel::getAllList()
+{
+    iHistoryEngine->getAllHistory(iHistoryList);
+
+    emit modelChanged();
+}
+
+bool IRHistoryModel::deleteOneItem(int aIndex)
+{
+    bool ret = iHistoryEngine->deleteOneItem(aIndex);
+     
+    if( !ret )
+    {
+        return false;                
+    }
+    
+    beginRemoveRows(QModelIndex(), aIndex, aIndex);
+    iHistoryList.removeAt(aIndex);
+    endRemoveRows(); 
+    
+    emit modelChanged();    
+    return true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irhistoryview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,453 @@
+/*
+* 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 <hblistview.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <QPixmap>
+#include <QTimer>
+
+#include "irabstractviewmanager.h"
+#include "irapplication.h"
+#include "irqisdsclient.h"
+#include "irplaycontroller.h"
+#include "irhistoryview.h"
+#include "irqisdsdatastructure.h"
+#include "irhistorymodel.h"
+#include "irqsonghistoryinfo.h"
+#include "irqnetworkcontroller.h" 
+#include "irqutility.h"
+#include "irqenums.h"
+#include "irqfavoritesdb.h"
+
+const int KBitmapSize = 59;
+
+//                                         public functions
+
+/*
+ * Description : constructor
+ */
+IRHistoryView::IRHistoryView(IRApplication *aApplication, TIRViewId aViewId) :
+    IrAbstractListViewBase(aApplication, aViewId), iClearHistoryAction(NULL),
+    iLogoPreset(NULL)
+{
+    
+    iModel = new IRHistoryModel(this);
+    iListView->setModel(iModel);
+    iListView->setCurrentIndex(iModel->index(0));
+    
+    iClearHistoryAction = new HbAction(hbTrId("txt_irad_opt_clear_station_history"), menu());
+    iSongHistoryAction = new HbAction(hbTrId("txt_irad_opt_recently_played_songs"), menu());	 
+    menu()->insertAction(iOpenWebAddressAction, iSongHistoryAction);
+    
+    iConvertTimer = new QTimer(this);
+    iConvertTimer->setInterval(10);
+    
+    connect(iClearHistoryAction, SIGNAL(triggered()), this, SLOT(clearAllList()));
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+    this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+    connect(iModel, SIGNAL(modelChanged()), this, SLOT(modelChanged()));
+    connect(iSongHistoryAction, SIGNAL(triggered()), this, SLOT(gotoSongHistory()));
+    connect(iConvertTimer, SIGNAL(timeout()), this, SLOT(convertAnother()));
+}
+
+void IRHistoryView::gotoSongHistory()
+{
+    getViewManager()->activateView(EIRView_SongHistoryView);
+}
+
+/* 
+ * Description : destructor
+ */
+IRHistoryView::~IRHistoryView()
+{
+    delete iLogoPreset;
+    iLogoPreset = NULL; 
+}
+
+/*
+ * Description : virtual functions from base class IRBaseView. 
+ *               handle view commands
+ * 
+ * see also    : IRBaseView::handleCommand
+ */
+TIRHandleResult IRHistoryView::handleCommand(TIRViewCommand aCommand,
+        TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+    int leftCount = 0;
+    
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        connect(iIsdsClient, SIGNAL(presetResponse(IRQPreset *)),
+                this, SLOT(presetResponse(IRQPreset *)));
+        connect(iIsdsClient, SIGNAL(operationException(IRQError)),
+                this, SLOT(operationException(IRQError)));
+        connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
+                this, SLOT(presetLogoDownload(IRQPreset* )));
+        connect(iIsdsClient, SIGNAL(presetLogoDownloadError()),
+                this, SLOT(presetLogoDownloadError()));
+        
+        showHistory();
+        ret = EIR_NoDefault;
+        break;
+
+    case EIR_ViewCommand_DEACTIVATE:
+
+        iModel->clearAndDestroyLogos();
+        iConvertTimer->stop();
+        iIsdsClient->isdsLogoDownCancelTransaction();     
+        
+        //iIconIndexArray must be cleared, because timer call back convertAnother() might be
+        //called after view is deactivated. In that case, iModel->getImgURL(aIndex); will crash
+        iIconIndexArray.clear();
+                
+        disconnect(iIsdsClient, SIGNAL(presetResponse(IRQPreset *)),
+                   this, SLOT(presetResponse(IRQPreset *)));
+        disconnect(iIsdsClient, SIGNAL(operationException(IRQError)),
+                   this, SLOT(operationException(IRQError)));
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset*)),
+                   this, SLOT(presetLogoDownload(IRQPreset* )));
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloadError()),
+                   this, SLOT(presetLogoDownloadError()));
+        ret = EIR_NoDefault;
+        break;
+    
+    case EIR_ViewCommand_EffectFinished:
+        /* when the effect is finished, we start showing the logos  */
+        leftCount = iIconIndexArray.count();
+        if( leftCount > 0 )
+        {
+            iConvertTimer->start();
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    return ret;
+}
+
+//                                 slots functions 
+
+/*
+ * Description : slot function when an item in a list is clicked.
+ *               issue a listen request to isds client
+ * Parameters  : aItem : pointer to the clicked item.
+ */
+void IRHistoryView::handleItemSelected()
+{
+    int index = iListView->currentIndex().row();
+    IRQSongHistoryInfo *hisInfo = iModel->getHistoryInfo(index);
+    if (NULL == hisInfo)
+    {
+        return;
+    }
+
+    if (hisInfo->getChannelType())
+    {
+        // channel from isds server, get this preset
+        iPlayController->createBufferingDialog(this, SLOT(cancelRequest()));
+        iIsdsClient->isdsListenRequest(hisInfo->getChannelId(), true);
+    }
+    else
+    {
+        // user defined channel
+        IRQChannelServerURL server;
+        server.bitrate = hisInfo->getBitrate();
+        server.url = hisInfo->getStreamUrl();
+        server.serverName = hisInfo->getChannelName();
+        IRQPreset preset;
+        preset.insertChannelServer(server);
+        preset.name = hisInfo->getChannelName();
+        preset.description = hisInfo->getChannelDesc();
+        preset.shortDesc = hisInfo->getChannelDesc();
+        preset.type = 0;
+        preset.uniqID = 0;
+        preset.presetId = 0;
+
+        iPlayController->connectToChannel(&preset,EIRQHistoryAdhoc);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRHistoryView::presetResponse()
+// gets the preset from isds client and play
+//---------------------------------------------------------------------------
+void IRHistoryView::presetResponse(IRQPreset *aPreset)
+{
+    iPlayController->connectToChannel(aPreset,EIRQHistoryIsds);
+}
+
+void IRHistoryView::operationException(IRQError aError)
+{
+    Q_UNUSED(aError);
+    iPlayController->closeBufferingDialog();
+
+    popupNote(hbTrId("txt_irad_info_failed_to_connect"), HbMessageBox::MessageTypeWarning);
+}
+
+void IRHistoryView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        iApplication->closeConnectingDialog();
+
+        if (EIR_UseNetwork_SelectItem == getUseNetworkReason())
+        {
+            handleItemSelected();
+        }
+        
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+        
+    default:
+        setCheckedAction();
+        break;
+    }
+}
+
+void IRHistoryView::cancelRequest()
+{
+    iIsdsClient->isdsCancelRequest();
+}
+
+// ---------------------------------------------------------------------------
+// IRHistoryView::showHistory()
+// gets the List which was stored earlier
+//---------------------------------------------------------------------------
+void IRHistoryView::showHistory()
+{
+    if (iModel->checkHistoryUpdate())
+    {
+        iListView->reset();
+        iListView->setCurrentIndex(iModel->index(0));
+
+        //because we get all the history refreshed, so clear the icon array.
+        iIconIndexArray.clear();
+
+        //initialize the iconindices
+        for (int i = 0; i < iModel->rowCount(); ++i)
+        {
+            if (iModel->getImageUrl(i) != "")
+            {
+                iIconIndexArray.append(i);
+            }
+        }  
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRHistoryView::clearAllList()
+// gets the List which was stored earlier
+//---------------------------------------------------------------------------
+void IRHistoryView::clearAllList()
+{
+    iIconIndexArray.clear();
+    iModel->clearAllList();
+    iConvertTimer->stop();
+    iIsdsClient->isdsLogoDownCancelTransaction();
+    iListView->reset();
+    updateView();
+}
+
+void IRHistoryView::prepareMenu()
+{
+    HbMenu *viewMenu = menu();
+    
+    viewMenu->removeAction(iClearHistoryAction);
+    if (iModel->rowCount() > 0)
+    {
+        viewMenu->insertAction(iOpenWebAddressAction, iClearHistoryAction);
+    }
+} 
+
+void IRHistoryView::startConvert(int aIndex)
+{
+    QString url = iModel->getImageUrl(aIndex);
+
+    IRQPreset tempPreset;
+    tempPreset.imgUrl = url;
+    tempPreset.type = IRQPreset::EIsds;
+    iIsdsClient->isdsLogoDownSendRequest(&tempPreset, 0, KBitmapSize, KBitmapSize);
+}
+
+//if the logo is downloaded ok
+void IRHistoryView::presetLogoDownload(IRQPreset* aPreset)
+{
+    if (NULL == aPreset)
+    {
+        presetLogoDownloadError();
+        return;
+    }
+
+ 
+    delete iLogoPreset;             
+    iLogoPreset = aPreset;
+     
+    if (iLogoPreset->logoData != KNullDesC8)
+    {
+        const unsigned char * logoData = iLogoPreset->logoData.Ptr();
+        QPixmap tempMap;
+        bool ret = tempMap.loadFromData(logoData,iLogoPreset->logoData.Length());
+        if( ret )
+        {
+            QIcon convertIcon(tempMap);
+            HbIcon *hbIcon = new HbIcon(convertIcon);
+            int index = iIconIndexArray[0];
+            iModel->setLogo(hbIcon, index);
+            iIconIndexArray.removeAt(0);
+            int leftCount = iIconIndexArray.count();
+            if( leftCount > 0 )
+            {
+                iConvertTimer->start();  
+            }
+            return;
+        }           
+    } 
+ 
+    presetLogoDownloadError();
+}
+
+ 
+
+//if the logo download fails
+void IRHistoryView::presetLogoDownloadError()
+{
+    // if the logo download fails, try to download the next
+    iIconIndexArray.removeAt(0);
+    int leftCount = 0;
+    leftCount = iIconIndexArray.count();
+    if( leftCount > 0 )
+    {
+        iConvertTimer->start();
+    }    
+}
+
+void IRHistoryView::convertAnother()
+{     
+    iConvertTimer->stop();
+    int leftCount = iIconIndexArray.count();
+
+    if (0 != leftCount)
+    {
+        startConvert(iIconIndexArray[0]);
+    }
+}
+
+void IRHistoryView::modelChanged()
+{
+    QString headingStr = hbTrId("Station History") + " (" + QString::number(iModel->rowCount()) + ")";  
+    setHeadingText(headingStr);
+}
+ 
+ 
+void IRHistoryView::addContextAction()
+{        
+    QModelIndex current = iListView->currentIndex();     
+    IRQSongHistoryInfo * currentInfo = iModel->getHistoryInfo(current.row());
+    IRQPreset preset;
+    convertStationHistory2Preset(*currentInfo, preset);   
+    int retValue = iFavorites->addPreset(preset);
+
+    switch (retValue)
+    {
+    case EIRQErrorNone:
+	    popupNote(hbTrId("txt_irad_menu_add_to_favorite"), HbMessageBox::MessageTypeInformation);
+        
+        break;
+
+    case EIRQErrorOutOfMemory:
+	    popupNote(hbTrId("txt_irad_info_can_not_add_more"), HbMessageBox::MessageTypeInformation);
+		break;
+
+    case EIRQErrorAlreadyExist:
+	    popupNote(hbTrId("txt_irad_info_favorite_updated"), HbMessageBox::MessageTypeInformation);
+		break;
+ 
+    default:         
+    break;
+    }    
+} 
+
+void IRHistoryView::deleteContextAction()
+{
+    int current = iListView->currentIndex().row();     
+    bool ret = iModel->deleteOneItem(current);     
+    if( !ret )
+	  {
+	    popupNote(hbTrId("txt_irad_info_operation_failed"), HbMessageBox::MessageTypeWarning);
+	  }
+}
+ 
+ 
+ 
+void IRHistoryView::listViewLongPressed(HbAbstractViewItem *aItem, const QPointF& aCoords)
+{
+    Q_UNUSED(aItem);             
+    HbMenu *contextMenu = 0;
+    HbAction *action = 0;
+    
+    contextMenu = new HbMenu();
+    action = contextMenu->addAction(QString(hbTrId("txt_irad_menu_add_to_favorite")));
+    action->setObjectName("add");
+    action = contextMenu->addAction(QString(hbTrId("txt_common_menu_delete")));
+    action->setObjectName("delete");
+    action = contextMenu->exec(aCoords);
+    
+    if( action )
+    {
+        QString objectName = action->objectName();
+        if ( objectName == "add" )
+        {
+            addContextAction();                          	        	            
+        }
+        else if( objectName == "delete")
+        {
+            deleteContextAction();                            
+        }
+    }          
+} 
+
+void IRHistoryView::convertStationHistory2Preset(const IRQSongHistoryInfo& aHistoryInfo, IRQPreset& aPreset)
+{
+    IRQChannelServerURL url;
+    url.url = aHistoryInfo.getStreamUrl();
+    url.bitrate = aHistoryInfo.getBitrate();
+    aPreset.name = aHistoryInfo.getChannelName();
+    aPreset.insertChannelServer(url);
+    aPreset.type = aHistoryInfo.getChannelType();
+    aPreset.presetId = aHistoryInfo.getChannelId();
+    aPreset.shortDesc = aHistoryInfo.getChannelDesc();  
+    aPreset.imgUrl = aHistoryInfo.getImageUrl();
+    aPreset.description = aHistoryInfo.getChannelDesc();
+    aPreset.musicStoreStatus = aHistoryInfo.getMusicStoreStatus();
+}
+
+ 
+ 
+ 
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irlastplayedstationinfo.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#include <QDataStream>
+#include <QFile>
+
+#include "irqisdsdatastructure.h"
+#include "irlastplayedstationinfo.h"
+
+const QString KFileName("C:\\Private\\E28364bb\\lastPlayed.dat");
+
+IRLastPlayedStationInfo::IRLastPlayedStationInfo() : iLastPlayedStation(NULL), iUpdated(false),
+                                                     iConnectedFrom(EIRQIsds)
+{
+    readLastPlayedStation();
+}
+    
+IRLastPlayedStationInfo::~IRLastPlayedStationInfo()
+{
+    delete iLastPlayedStation;
+    iLastPlayedStation = NULL;
+}
+    
+void IRLastPlayedStationInfo::updateLastPlayedStation(IRQPreset *aPreset, IRQConnectedFrom aConnectedFrom)
+{
+    Q_ASSERT(aPreset);
+    
+    if (iLastPlayedStation == NULL)
+    {
+        iLastPlayedStation = new IRQPreset;
+    }
+    
+    *iLastPlayedStation = *aPreset;
+    
+    iConnectedFrom = aConnectedFrom;
+    
+    iUpdated = true;
+}
+    
+void IRLastPlayedStationInfo::commitLastPlayedStation()
+{
+    if (NULL == iLastPlayedStation || false == iUpdated)
+    {
+        return;
+    }
+    
+    QFile file(KFileName);
+    bool ret = file.open(QIODevice::Truncate | QIODevice::WriteOnly);
+    if (!ret)
+    {
+        return;
+    }
+    
+    QDataStream outStream(&file);
+    qint32 connectedFrom = iConnectedFrom;
+    outStream<<connectedFrom;
+    iLastPlayedStation->externalize(outStream);
+    file.close();
+    iUpdated = false;
+}
+
+IRQPreset * IRLastPlayedStationInfo::getLastPlayedStation() const
+{
+    return iLastPlayedStation;
+}
+
+void IRLastPlayedStationInfo::readLastPlayedStation()
+{ 
+    if (!QFile::exists(KFileName))
+    {
+        return;
+    }
+    
+    QFile file(KFileName);
+    bool ret = file.open(QIODevice::ReadOnly);
+    if (!ret)
+    {
+        return;
+    }
+    
+    QDataStream inStream(&file);
+    qint32 connectedFrom = EIRQIsds;
+    inStream>>connectedFrom;
+    if(connectedFrom < EIRQConnectedFromMaxValue)
+    {
+        iConnectedFrom = static_cast<IRQConnectedFrom>(connectedFrom);
+    }
+    else
+    {
+        iConnectedFrom = EIRQIsds;
+    }
+    
+    iLastPlayedStation = new IRQPreset;
+    iLastPlayedStation->internalize(inStream);
+    file.close();
+}
+
+IRQConnectedFrom IRLastPlayedStationInfo::connectedFrom() const
+{
+    return iConnectedFrom;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irlineeditor.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include "irlineeditor.h"
+ 
+
+IrLineEditor::IrLineEditor(QGraphicsItem *parent) : HbLineEdit(parent)
+{
+    
+}
+
+
+
+void IrLineEditor::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);    
+    emit pressed();
+    HbLineEdit::mousePressEvent(event);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irmainmodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* 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 <QBrush>
+#include <hbglobal.h>
+
+#include "iruidefines.h"
+#include "irmainmodel.h"
+#include "irsymbiandocument.h"
+
+IRMainModel::IRMainModel(QObject *aParent) : QAbstractListModel(aParent)
+{
+    initModel();
+}
+
+int IRMainModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    return iPrimaryTexts.count();
+}
+
+QVariant IRMainModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+        return QVariant();
+
+    if (aIndex.row() >= rowCount(QModelIndex()))
+        return QVariant();
+    
+    if (aRole == Qt::DisplayRole)
+    {
+        int row = aIndex.row();
+        QVariantList list;
+        list.append(iPrimaryTexts.at(row));
+        list.append(iSecondaryTexts.at(row));
+        return list;
+    }
+    else if (aRole == Qt::BackgroundRole)
+    {
+        if (aIndex.row() % 2 == 0)
+        {
+            return QBrush(KListEvenRowColor);
+        }
+        else
+        {
+            return QBrush(KListOddRowColor);
+        }
+    }
+    
+    return QVariant();
+}
+
+void IRMainModel::initModel()
+{
+    iPrimaryTexts << hbTrId("txt_irad_list_recently_played_stations") 
+                  << hbTrId("txt_irad_list_stations_by_country_region")
+                  << hbTrId("txt_irad_list_stations_by_language")
+                  << hbTrId("txt_irad_list_recently_played_songs");
+    iSecondaryTexts << tr("BBC World Service, Cloud FM ...") << tr("US, UK, France, Korea, Mexico ...") 
+                    << tr("English, French, German...")
+                    << tr("Recently played songs");
+}
+void IRMainModel::checkUpdate()
+{
+    IRSymbianDocument *document = IRSymbianDocument::getInstance();
+    QString primary = hbTrId("txt_irad_subtitle_stations_from_play_list");     
+    QString secondary = tr("Stations from play list file");
+    if (document->isPlsAvailable())
+    {
+        //if pls item is not in collections view, add
+        if (iPrimaryTexts.indexOf(primary) == -1)
+        {
+            int number = iPrimaryTexts.count();
+            beginInsertRows(QModelIndex(), number, number);
+            iPrimaryTexts << primary;
+            iSecondaryTexts << secondary;
+            endInsertRows();
+        }
+    }
+    else
+    {
+        //if pls item is in collections view, remove
+        int index = iPrimaryTexts.indexOf(primary);
+        if (index != -1)
+        {
+            beginRemoveRows(QModelIndex(), index, index);
+            iPrimaryTexts.removeAt(index);
+            iSecondaryTexts.removeAt(index);
+            endRemoveRows();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irmainview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* 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 <hbaction.h>
+#include <hblistview.h>
+
+#include "irapplication.h"
+#include "irabstractviewmanager.h"
+#include "irmainview.h"
+#include "ircategoryview.h"
+#include "irstationsview.h"
+#include "irqnetworkcontroller.h"
+#include "irmainmodel.h"
+#include "irqenums.h"
+
+//                                          public functions
+
+/*
+ * Description : constructor
+ */
+IRMainView::IRMainView(IRApplication* aApplication, TIRViewId aViewId) : 
+                                                      IrAbstractListViewBase(aApplication, aViewId),
+                                                      iMainModel(NULL)
+{
+    setFlag(EViewFlag_ClearStackWhenActivate);
+    
+	connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+	        this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+	setHeadingText(tr("Collections"));
+	
+	iMainModel = new IRMainModel(this);
+	iListView->setModel(iMainModel);
+}
+
+/*
+ * Description : destructor
+ */
+IRMainView::~IRMainView()
+{
+}
+
+/*
+ * Description : virtual function from base class IRBaseView.
+ *               handle view commands.
+ * Parameters  : aCommand : see the definition of TIRViewCommand
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRMainView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        updateView();
+        ret = EIR_NoDefault;
+        break;
+        
+    default:
+        break;
+    }
+    
+    return ret;
+}
+
+//                                       slots functions
+
+/*
+ * Description : slot function when an item in a list is clicked. if network is not opened yet,
+ *               choose access point firstly. Afterwards, issue a request through isds client
+ *               to get category list or popular stations
+ * Parameters  : aItem : pointer to the clicked item
+ */
+void IRMainView::handleItemSelected()
+{ 
+    QModelIndex index = iListView->currentIndex();
+    int currentRow = index.row();
+    
+    IRCategoryView *categoryView = NULL;
+    
+	if (ERecentlyPlayedStations == currentRow)
+	{
+        getViewManager()->activateView(EIRView_HistoryView);
+	}
+	else if (EBrowseByLanguage == currentRow)
+	{
+	    categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
+	    categoryView->loadCategory(IRQIsdsClient::ELanguages);
+	}
+	else if (EBrowseByCountry == currentRow)
+	{
+	    categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
+	    categoryView->loadCategory(IRQIsdsClient::ECountries);
+	}
+	else if (ESongsPlayed == currentRow)
+	{
+	    getViewManager()->activateView(EIRView_SongHistoryView);
+	}
+	else if (EPlayList == currentRow)
+	{
+	    getViewManager()->activateView(EIRView_PlsView);
+	}
+}
+
+/*
+ * Description : set the checked action in toolbar. For main view, iCollectionsAction should
+ *               be checked
+ */
+void IRMainView::setCheckedAction()
+{
+    iCollectionsAction->setChecked(true);
+}
+
+/*
+ * Description : slot function for active network event
+ * Parameters  : aEvent, see the definition of IRQNetworkEvent
+ */
+void IRMainView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    //simulate the item is clicked
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        iApplication->closeConnectingDialog();
+        
+        if (EIR_UseNetwork_SelectItem == getUseNetworkReason())
+        {
+            handleItemSelected();
+        }
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        
+        break;
+        
+    default:
+        setCheckedAction();
+        break;
+    }
+}
+
+/*
+ * Description : check wether the content we need is already cached
+ *  
+ */
+void IRMainView::itemAboutToBeSelected(bool& aNeedNetwork)
+{
+    QModelIndex index = iListView->currentIndex();
+    int currentRow = index.row();    
+    
+    if (EBrowseByLanguage == currentRow)
+    {
+        aNeedNetwork = !iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::ELanguages);
+    }
+    else if (EBrowseByCountry == currentRow)
+    {        
+        aNeedNetwork = !iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::ECountries);
+    }     
+    else if( ESongsPlayed == currentRow )
+    {
+        aNeedNetwork = false;
+    }
+    else if( ERecentlyPlayedStations == currentRow)
+    {
+        aNeedNetwork = false;
+    }
+    else if (EPlayList == currentRow)
+    {
+        aNeedNetwork = false;
+    }
+    else  
+    {
+        aNeedNetwork = true;         
+    }         
+}
+
+void IRMainView::updateView()
+{
+    IrAbstractListViewBase::updateView();
+    iMainModel->checkUpdate();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irmediakeyobserver.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,211 @@
+/*
+* 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 <remconcoreapitarget.h> 
+#include <remconinterfaceselector.h> 
+#include <QTimer>
+#include <hbvolumesliderpopup.h>
+
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "irmediakeyobserver.h"
+
+const int KMaxVolume = 100;
+const int KMinVolume = 0;
+const int KVolumeStep = 10;
+const int KFirstTimerExpiryInterval = 1;// Expire immediately
+const int KTimerExpiryInterval = 1000 / 6; // KAknStandardKeyboardRepeatRate
+
+IRMediaKeyObserver::IRMediaKeyObserver(IRApplication* aApplication) : iInterfaceSelector(NULL)
+           , iVolumeControlTimer(NULL), iVolumeSlider(NULL)
+           , iIncreseVolume(true), iPlayController(NULL)
+{
+    iPlayController = aApplication->getPlayController();
+
+    iVolumeControlTimer = new QTimer(this);
+    connect(iVolumeControlTimer, SIGNAL(timeout()), this, SLOT(volumeCallback()));
+
+    iVolumeSlider = new HbVolumeSliderPopup();
+    iVolumeSlider->setZValue(2.0);
+    connect(iVolumeSlider, SIGNAL(valueChanged(int)), this, SLOT(volumeChanged(int)));
+    iVolumeSlider->setVisible(false);
+
+    TRAP_IGNORE(initializeL());
+}
+
+IRMediaKeyObserver::~IRMediaKeyObserver()
+{
+    delete iVolumeSlider;
+    iVolumeSlider = NULL;
+
+    delete iInterfaceSelector;
+    iInterfaceSelector = NULL;
+}
+
+
+/*
+ * Description : handle the event from media key
+ */
+void IRMediaKeyObserver::MrccatoCommand(TRemConCoreApiOperationId aOperationId, 
+                                      TRemConCoreApiButtonAction aButtonAct)
+{
+    switch (aOperationId)
+    {
+    case ERemConCoreApiVolumeUp:
+    case ERemConCoreApiVolumeDown:
+        if (iVolumeControlTimer->isActive())
+        {
+            iVolumeControlTimer->stop();
+        }
+
+        if (ERemConCoreApiVolumeUp == aOperationId)
+        {
+            iIncreseVolume = true;
+        }
+        else
+        {
+            iIncreseVolume = false;
+        }
+
+        showVolumeSlider();
+        switch (aButtonAct)
+        {
+        case ERemConCoreApiButtonClick:
+            iVolumeSlider->setValue(changingVolume());
+            break;
+        case ERemConCoreApiButtonPress:
+            iVolumeControlTimer->start(KFirstTimerExpiryInterval);
+            break;
+        case ERemConCoreApiButtonRelease:
+            // Need not to stop volume control timer here because
+            // it's stopped above.
+        default:
+            break;
+        }
+        break;
+
+    case ERemConCoreApiPause:
+    case ERemConCoreApiStop:
+        if (aButtonAct == ERemConCoreApiButtonClick)
+        {
+            iPlayController->stop(EIRQUserTerminated);
+        }
+        break;
+
+    case ERemConCoreApiPausePlayFunction:
+    case ERemConCoreApiPlay:
+        if (aButtonAct == ERemConCoreApiButtonClick)
+        {
+            if (iPlayController->isStopped())
+            {
+                // Scenario 1: In station view, play the station highlighted.
+                // Scenario 2: In non-station view, play the last played station.
+                emit playPausePressed();
+            }
+        }
+        break;
+    default:
+        break;
+    }
+}
+
+/*
+ * Description : handle the play command
+ */
+void IRMediaKeyObserver::MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed,
+        TRemConCoreApiButtonAction aButtonAct)
+{
+    Q_UNUSED(aSpeed);
+    MrccatoCommand(ERemConCoreApiPlay, aButtonAct);
+}
+
+void IRMediaKeyObserver::initializeL()
+{
+    iInterfaceSelector = CRemConInterfaceSelector::NewL();
+    // Instance of CRemConCoreApiTarget For Handling Media Keys
+    CRemConCoreApiTarget* coreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *this);
+    CleanupStack::PushL( coreTarget );
+    iInterfaceSelector->OpenTargetL();
+    CleanupStack::Pop(coreTarget);
+}
+
+/*
+ * Description : slot function for volume timer timeout.
+ *               Set volume to media player through play controller.
+ * Parameters  : aDirection : true up, false down.
+ */
+void IRMediaKeyObserver::volumeCallback()
+{
+    iVolumeControlTimer->setInterval(KTimerExpiryInterval);
+
+    iVolumeSlider->setValue(changingVolume());
+}
+
+/*
+ * Description : return the volume value being about to change. 
+ */
+int IRMediaKeyObserver::changingVolume()
+{
+    int volume = iVolumeSlider->value();
+    if (iIncreseVolume)
+    {
+        volume = volume + KVolumeStep;
+        if (volume > KMaxVolume)
+        {
+            volume = KMaxVolume;
+        }
+    }
+    else
+    {
+        volume = volume - KVolumeStep;
+        if (volume < KMinVolume)
+        {
+            volume = KMinVolume;
+        }
+    }
+    return volume;
+}
+
+/*
+ * Description : slot function for signal sliderPositionChanged(int) of volume popup.
+ *               Set volume to media player through play controller.
+ * Parameters  : aVolume : the volume value. between 0 and 100
+ */
+void IRMediaKeyObserver::volumeChanged(int aVolume)
+{
+    iPlayController->setVolume(aVolume);
+
+    QString str = QString::number(aVolume);
+    str.append("%");
+    iVolumeSlider->setText(str);
+}
+
+/*
+ * Description : slot function for signal triggered() of volume action.
+ *               show the volume popup.
+ */
+void IRMediaKeyObserver::showVolumeSlider()
+{
+    if (!iVolumeSlider->isVisible())
+    {
+        int val = iPlayController->getVolume();
+        QString str = QString::number(val);
+        str.append("%");
+        iVolumeSlider->setValue(val);
+        iVolumeSlider->setText(str);
+        iVolumeSlider->show();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irmemorycollector.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include <QCoreApplication>
+
+#include "irmemorycollector.h"
+#include "irapplication.h"
+#include "irabstractviewmanager.h"
+#include "irplaycontroller.h"
+
+IRMemoryCollector::IRMemoryCollector(IRApplication* aApplication) : iApplication(aApplication)
+{
+    connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()));
+}
+
+void IRMemoryCollector::aboutToQuit()
+{
+    IRAbstractViewManager *viewManager = iApplication->getViewManager();
+    delete iApplication;
+    iApplication = NULL;
+        
+    delete viewManager;  
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irnowplayingcontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,196 @@
+/*
+* 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 <HbTextItem>
+#include <HbLabel>
+#include <hbeffect.h>
+#include <hbinstance.h>
+#include <QGraphicsSceneEvent>
+#include <hbmarqueeitem.h>
+#include <QTimer>
+
+#include "irnowplayingcontainer.h"
+#include "iruidefines.h"
+
+
+// Const strings
+const char* NOW_PLAYING_CONTAINER_OBJECT_NAME = "ex-IRNowPlayingContainer"; // object name in the XML
+
+/*
+ * Description : constructor
+ */
+IRNowPlayingContainer::IRNowPlayingContainer(QObject *aLoaderParent, QGraphicsItem *aParent) :
+    HbWidget(aParent), iLoader(aLoaderParent), iStationName(NULL),
+    iCategory(NULL),
+    iSongName(NULL),
+    iAdvImage(NULL),
+    iLogo(NULL)
+{
+    // Create widget hierarchy
+    setObjectName(NOW_PLAYING_CONTAINER_OBJECT_NAME);
+
+    // List existing root elements - this allows us to refer to objects in the XML 
+    // which are created outside the document.
+    QObjectList roots;
+    roots.append(this); // IRNowPlayingContainer is referred in the XML document
+    iLoader.setObjectTree(roots);
+
+    // Load the XML file
+    iLoader.load(NOW_PLAYING_CONTAINER_LAYOUT_FILENAME);
+
+    // Find the HbLabel objects
+    iStationName = qobject_cast<HbTextItem *> (iLoader.findObject("stationName"));
+    iStationName->setMaximumLines(2);
+    iCategory = qobject_cast<HbTextItem *> (iLoader.findObject("category"));
+    iCategory->setMaximumLines(2);
+    iSongName = qobject_cast<HbMarqueeItem *> (iLoader.findObject("artistNsongName"));
+    iAdvImage = qobject_cast<HbLabel *> (iLoader.findObject("advertisementImage"));
+    iLogo = qobject_cast<HbLabel *> (iLoader.findObject("stationIcon"));
+
+    // Set the wrap method
+    iStationName->setTextWrapping(Hb::TextWordWrap);
+    iCategory->setTextWrapping(Hb::TextWordWrap);
+    iSongName->setLoopCount(-1);
+
+    // Get the display direction
+    constructContainer();
+}
+
+IRNowPlayingContainer::~IRNowPlayingContainer()
+{
+}
+
+/*
+ * Description : construct the container widget.
+ */
+void IRNowPlayingContainer::constructContainer()
+{
+    // Set the text font. It may be deleted in the future to use the default
+    // font.
+    QFont playingFont;
+    playingFont.setPointSizeF(7.0);
+    playingFont.setBold(true);
+    iStationName->setFont(playingFont);
+    playingFont.setPointSizeF(6.0);
+    playingFont.setBold(false);
+    iCategory->setFont(playingFont);
+    iSongName->setFont(playingFont);
+
+    HbMainWindow *mainWindow = hbInstance->allMainWindows().at(0);
+    resizeContainer(mainWindow->orientation());
+}
+
+/*
+ * Description : set the station name text to the station label
+ * Parameters  : aStationName : station's name
+ */
+void IRNowPlayingContainer::setStationName(const QString &aStationName)
+{
+    iStationName->setText(aStationName);
+}
+
+/*
+ * Description : set the category text to the category label
+ * Parameters  : aCategory : station's category
+ */
+void IRNowPlayingContainer::setCategory(const QString &aCategory)
+{
+    iCategory->setText(aCategory);
+}
+
+/*
+ * Description : set the song name text to the song name label
+ * Parameters  : aSongName : song's name
+ */
+void IRNowPlayingContainer::setSongName(const QString &aSongName)
+{
+    iSongName->setText(aSongName);
+    if ( !iSongName->isAnimating() )
+    {
+        QTimer::singleShot(100, iSongName, SLOT(startAnimation()));
+    }
+}
+
+/*
+ * Description : set the logo picture to the logo label
+ * Parameters  : aLogo : logo picture
+ */
+void IRNowPlayingContainer::setLogo(const HbIcon& aLogo)
+{
+    iLogo->setIcon(aLogo);
+    HbEffect::start(iLogo, "nowplaying", "show");
+}
+
+/*
+ * Description : set the advertisment picture
+ * Parameters  : aAdvImage : advertisement picture
+ */
+void IRNowPlayingContainer::setAdvImage(const HbIcon& aAdvImage)
+{
+    iAdvImage->setIcon(aAdvImage);
+    HbEffect::start(iAdvImage, "nowplaying", "show");
+}
+
+/*
+ * Description : get the mouse press event and emit a signal.
+ */
+void IRNowPlayingContainer::mousePressEvent(QGraphicsSceneMouseEvent *aEvent)
+{
+    QRectF advRect = iAdvImage->geometry();
+    QPointF pos = aEvent->pos();
+    
+    if (advRect.contains(pos))
+    {
+        emit advertisementPressed();
+    }
+    else
+    {
+        emit volumePressed();   
+    }
+}
+
+/*
+ * Description : resize the container if the direction changes.
+ */
+void IRNowPlayingContainer::orientationChanged(Qt::Orientation aOrientation)
+{
+    resizeContainer(aOrientation);
+}
+
+/*
+ * Description : load the layout according to the direction.
+ */
+void IRNowPlayingContainer::resizeContainer(Qt::Orientation aOrientation)
+{
+    if (aOrientation == Qt::Vertical)
+    {
+        iLoader.load(NOW_PLAYING_CONTAINER_LAYOUT_FILENAME, "portrait");
+    }
+    else
+    {
+        iLoader.load(NOW_PLAYING_CONTAINER_LAYOUT_FILENAME, "landscape");
+    }
+}
+
+void IRNowPlayingContainer::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+
+    painter->setPen(QPen(Qt::darkGray));
+    painter->setBrush(QBrush(Qt::darkGray));
+    painter->drawRect(rect());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irnowplayingview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,880 @@
+/*
+* 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 <QPixmap>
+#include <QTimer>
+#include <hbmenu.h>
+#include <hbtoolbar.h>
+#include <hbaction.h>
+
+#include "irabstractviewmanager.h"
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "irnowplayingview.h"
+#include "irnowplayingcontainer.h"
+#include "irstationdetailscontainer.h"
+#include "irqisdsdatastructure.h"
+#include "irqmetadata.h"
+#include "irqutility.h"
+#include "irqisdsclient.h"
+#include "irqfavoritesdb.h"
+#include "irlastplayedstationinfo.h"
+#include "irqnetworkcontroller.h" 
+#include "irqmusicshop.h"
+#include "irqstatisticsreporter.h"
+#include "irqenums.h"
+#include "irmediakeyobserver.h"
+#include "irqsettings.h"
+#include "irqstationexporter.h"
+#include "iruidefines.h"
+
+// Const
+const int KNowPlayingLogoSize = 300; // Now playing logo size
+const char* NOW_PLAYING_VIEW_OBJECT_NAME = "ex-IRNowPlayingView"; // object name in the XML
+const char* KDefaultAdvertisementLink = ""; // default advertisement link
+
+//                                     public functions
+
+/*
+ * Description : constructor
+ */
+IRNowPlayingView::IRNowPlayingView(IRApplication* aApplication, TIRViewId aViewId) :
+    IRBaseView(aApplication, aViewId),
+    iLogoPreset(NULL),
+    iStationDetailsContainer(NULL),
+    iIdleContainer(NULL),
+    iMusicShop(NULL),
+    iStationExporter(NULL),
+    iStereoAction(NULL),
+    iMusicShopAction(NULL),
+    iPlayStopAction(NULL),
+    iAdd2FavAction(NULL),
+    iAdvClickThroughUrl(KDefaultAdvertisementLink),
+    iGettingAdv(false),
+    iStationLogo(NULL),
+    iStereoMode(0),
+    iShowStationInfo(FALSE),
+    iLogoStatus(EDefaultLogo),
+    iFindinNmsAllowed(false),
+    iSongNameAvailable(false)
+{
+    // Create widget hierarchy
+    setObjectName(NOW_PLAYING_VIEW_OBJECT_NAME);
+
+    // List existing root elements - this allows us to refer to objects in the XML 
+    // which are created outside the document.
+    QObjectList roots;
+    roots.append(this); // IRNowPlayingView is referred in XML file
+    iLoader.setObjectTree(roots);
+
+    // Load XML file
+    iLoader.load(NOW_PLAYING_VIEW_LAYOUT_FILENAME);
+
+    createMenu();
+    createToolBar();
+    initialize();
+
+    connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(updateSongInfo(IRQMetaData*)));
+    connect(iPlayController, SIGNAL(initializeLogo()), this, SLOT(initializeLogo()));
+    connect(iPlayController, SIGNAL(playingStarted()), this, SLOT(playingStarted()));
+    connect(iPlayController, SIGNAL(playingStopped()), this, SLOT(playingStopped()));
+
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+            this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+    connect(iApplication->getMediaKeyObserver(), SIGNAL(playPausePressed()), 
+            this, SLOT(playPressed()));
+    connect(iApplication->getMediaKeyObserver(), SIGNAL(stopPressed()), 
+            this, SLOT(stop()));
+
+    // Initialize logo
+    QIcon icon(":/playback/default_cd.png");
+    iStationLogo = new HbIcon(icon);
+
+    // Initialize advertisement image
+    QIcon advIcon(":/playback/default_cd.jpg");
+    HbIcon advInitialImage(advIcon);
+    iStationExporter = new IRQStationExporter();
+    iNowPlayingContainer = new IRNowPlayingContainer(getViewManager());
+    connect(getViewManager(), SIGNAL(orientationChanged(Qt::Orientation)), 
+            iNowPlayingContainer, SLOT(orientationChanged(Qt::Orientation)));
+    connect(iNowPlayingContainer, SIGNAL(volumePressed()), 
+            iApplication->getMediaKeyObserver(), SLOT(showVolumeSlider()));
+    connect(iNowPlayingContainer, SIGNAL(advertisementPressed()), 
+                this, SLOT(openAdvLink()));
+    setWidget(iNowPlayingContainer);
+    iNowPlayingContainer->setLogo(*iStationLogo);
+    iNowPlayingContainer->setAdvImage(advInitialImage);
+
+    HbEffect::add("nowplaying", ":/effect/view_flip_hide.fxml", "hide");
+    HbEffect::add("nowplaying", ":/effect/view_flip_show.fxml", "show");
+}
+
+/*
+ * Description : destructor
+ */
+IRNowPlayingView::~IRNowPlayingView()
+{
+    delete iIdleContainer;
+    iIdleContainer = NULL;
+
+    delete iStationExporter;
+    iStationExporter = NULL;
+
+    iNowPlayingContainer = NULL;
+    iStationDetailsContainer = NULL;
+
+    delete iLogoPreset;
+    iLogoPreset = NULL;
+
+    delete iStationLogo;
+    iStationLogo = NULL;
+    
+    HbEffect::remove("nowplaying", ":/playback/view_flip_hide.fxml", "hide");
+    HbEffect::remove("nowplaying", ":/playback/view_flip_show.fxml", "show");
+}
+
+/*
+ * Description : from base class IRBaseView.
+ *               handle system events reported by system event collector
+ * Parameters  : aEvent : see the definiton of TIRSystemEventType.
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRNowPlayingView::handleSystemEvent(TIRSystemEventType aEvent)
+{
+    Q_UNUSED(aEvent);
+    return EIR_DoDefault;
+}
+
+/*
+ * Description : from base class IRBaseView.
+ *               handle view commands.
+ * Parameters  : aCommand : see the definition of TIRViewCommand
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRNowPlayingView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = EIR_DoDefault;
+
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
+                this, SLOT(presetLogoDownload(IRQPreset* )));
+        showWidget();
+        break;
+
+    case EIR_ViewCommand_DEACTIVATE:
+        if (ERequestIssued == iLogoStatus)
+        {
+            // cancel downloading logo
+            iIsdsClient->isdsLogoDownCancelTransaction();
+            iLogoStatus = EDefaultLogo;
+        }
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset*)),
+                   this, SLOT(presetLogoDownload(IRQPreset* )));
+        break;
+    }
+
+    return ret;
+}
+
+/*
+ * Description : actions when view is launched.
+ */
+void IRNowPlayingView::launchAction()
+{
+    IRLastPlayedStationInfo *lastPlayedStationInfo =
+            iApplication->getLastPlayedStationInfo();
+    IRQPreset *preset = lastPlayedStationInfo->getLastPlayedStation();
+    if ( preset && (0 == preset->musicStoreStatus.compare("yes",Qt::CaseInsensitive)))
+    {
+        iFindinNmsAllowed = true;        
+    }
+    else
+    {
+        iFindinNmsAllowed = false;
+    }
+          
+    iShowStationInfo = true;
+    setUseNetworkReason(EIR_UseNetwork_StartingView);
+    iApplication->verifyNetworkConnectivity();
+}
+
+/*
+ * Description : start to converter the downloaded logo.
+ */
+void IRNowPlayingView::presetLogoDownload(IRQPreset* aPreset)
+{
+    if (NULL == aPreset)
+        return;
+
+    // Sometimes the logo downloaded by stationview will reach here because
+    // the isdsLogoDownCancelTransaction is delayed. So we judge the imageUrl here.
+    if (!iGettingAdv && (aPreset->imgUrl != iPlayController->getNowPlayingPreset()->imgUrl))
+    {
+        delete aPreset;
+        aPreset = NULL;
+        return;
+    }
+ 
+    delete iLogoPreset;
+    iLogoPreset = aPreset;
+    
+    const unsigned char * logoData = iLogoPreset->logoData.Ptr();
+    QPixmap tempMap;
+    bool ret = tempMap.loadFromData(logoData, iLogoPreset->logoData.Length());
+    if( !ret )
+    {
+        if (iGettingAdv)
+        {
+            iGettingAdv = false;
+            QTimer::singleShot(1, this, SLOT(updateLogoInfo()));
+        }
+        else
+        {
+            iLogoStatus = ELogoDetermined;
+        }
+        return;
+    }
+    
+    QIcon convertIcon(tempMap);
+    HbIcon hbIcon(convertIcon);   
+    
+    if (iGettingAdv)
+    {
+        iNowPlayingContainer->setAdvImage(hbIcon);
+        iAdvClickThroughUrl = iTempAdvClickThroughUrl;
+        iGettingAdv = false;
+        QTimer::singleShot(1, this, SLOT(updateLogoInfo()));
+    }
+    else
+    {
+        *iStationLogo = hbIcon;
+
+        // update the logo
+        iNowPlayingContainer->setLogo(hbIcon);
+        // temp solution, it will be deleted once there's adv info in preset
+        iNowPlayingContainer->setAdvImage(*iStationLogo);
+
+        if (iStationDetailsContainer)
+        {
+            iStationDetailsContainer->setLogo(hbIcon);
+        }
+        iLogoStatus = ELogoDetermined;
+    } 
+}
+
+/*
+ * Description: slot function for signal triggered() of iPlayStopAction and
+ *              playStopPressed() of irmediakeyobserver.
+ *              According to the playing state, play or stop.
+ */
+void IRNowPlayingView::playStopControl()
+{
+    setUseNetworkReason(EIR_UseNetwork_PlayStation);
+    if (false == iApplication->verifyNetworkConnectivity())
+    {
+        return;
+    }
+    setUseNetworkReason(EIR_UseNetwork_NoReason);
+    
+    if (iPlayController->isPlaying())
+    {
+        iPlayController->stop(EIRQUserTerminated);
+    }
+    else
+    {
+        iPlayController->resume();
+    }
+}
+
+/*
+ * Description: slot function for signal stopPressed() of irmediakeyobserver.
+ */
+void IRNowPlayingView::stop()
+{
+    iPlayController->stop(EIRQUserTerminated);
+}
+
+/*
+ * Description : update station info and now playing view
+ */
+void IRNowPlayingView::playingStarted()
+{
+    if (iShowStationInfo)
+    {
+        updateSongInfo(iPlayController->getMetaData());
+        updateAdvImage();
+        updateStationInfo();
+        iShowStationInfo = false;
+    }
+    updateMusicStatus();
+    HbIcon icon(QString("qtg_mono_stop"));
+    iPlayStopAction->setIcon(icon);
+}
+
+/*
+ * Description : update now playing view
+ */
+void IRNowPlayingView::playingStopped()
+{
+    HbIcon icon(QString("qtg_mono_play"));
+    iPlayStopAction->setIcon(icon);
+}
+
+/*
+ * Description: slot function for signal triggered() of iAdd2FavAction.
+ *              add this preset to favorites
+ */
+void IRNowPlayingView::add2FavControl()
+{
+    IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+    int retValue = iFavorites->addPreset(*nowPlayingPreset);
+    // show the information from favorites DB
+    switch (retValue)
+    {
+    case EIRQErrorNone:
+        popupNote(hbTrId("txt_irad_info_added_to_favorites"), HbMessageBox::MessageTypeInformation);
+        break;
+
+    case EIRQErrorOutOfMemory:
+        popupNote(hbTrId("txt_irad_info_can_not_add_more"), HbMessageBox::MessageTypeInformation);
+        break;
+
+    case EIRQErrorAlreadyExist:
+        popupNote(hbTrId("txt_irad_info_favorite_updated"), HbMessageBox::MessageTypeInformation);
+        break;
+
+    default:
+        Q_ASSERT(false);
+        break;
+    }
+}
+
+/*
+ * Description: slot function for signal triggered() of flip action.
+ *              change the container of now playing view.
+ */
+void IRNowPlayingView::flipControl()
+{
+    // disconnect the signal to avoid users to click several times quickly.
+    iFlipAction->disconnect(SIGNAL(triggered()));
+    if (iIdleContainer == iStationDetailsContainer)
+    {
+        if (NULL == iStationDetailsContainer)
+        {
+            iStationDetailsContainer = new IRStationDetailsContainer(getViewManager());
+        }
+
+        IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+        iStationDetailsContainer->setDetails(nowPlayingPreset, *iStationLogo);
+
+        HbEffect::start(iNowPlayingContainer, "nowplaying", QString("hide"), this, "hidePlayingWidgetComplete");
+    }
+    else
+    {
+        HbEffect::start(iStationDetailsContainer, "nowplaying", QString("hide"), this, "hideDetailsWidgetComplete");
+    }
+}
+
+// ---------------------------------------------------------------------------
+// Slot: Handle animation completion on main widget
+// ---------------------------------------------------------------------------
+//
+void IRNowPlayingView::hidePlayingWidgetComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    iIdleContainer = takeWidget();
+    setWidget(iStationDetailsContainer);
+    iFlipAction->setToolTip(hbTrId("txt_irad_tooltip_tiny_now_playing"));
+    HbEffect::start(iStationDetailsContainer, "nowplaying", QString("show"));
+
+    // reconnect the signal
+    iFlipAction->disconnect(SIGNAL(triggered()));
+    connect(iFlipAction, SIGNAL(triggered()), this, SLOT(flipControl()));
+}
+
+// ---------------------------------------------------------------------------
+// Slot: Handle animation completion on list widget
+// ---------------------------------------------------------------------------
+//
+void IRNowPlayingView::hideDetailsWidgetComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    iIdleContainer = takeWidget();
+    setWidget(iNowPlayingContainer);
+    iFlipAction->setToolTip(hbTrId("txt_irad_tooltip_tiny_details"));
+    HbEffect::start(iNowPlayingContainer, "nowplaying", QString("show"));
+
+    // reconnect the signal
+    iFlipAction->disconnect(SIGNAL(triggered()));
+    connect(iFlipAction, SIGNAL(triggered()), this, SLOT(flipControl()));
+}
+
+/*
+ * Description: slot function for signal triggered() of iStereoAction.
+ *              According to the stereo state.
+ */
+void IRNowPlayingView::stereoControl()
+{
+    if (iStereoMode)
+    {
+        iPlayController->disableStereo();
+        iStereoAction->setText(hbTrId("txt_irad_opt_activate_stereo"));
+        iStereoMode = 0;
+    }
+    else
+    {
+        iPlayController->enableStereo();
+        iStereoAction->setText(hbTrId("txt_irad_opt_deactivate_stereo"));
+        iStereoMode = 1;
+    }
+
+    iApplication->getSettings()->setStereoMode(iStereoMode);
+}
+
+/*
+ * Description: active open web address view
+ */
+void IRNowPlayingView::openWebAddressControl()
+{
+    getViewManager()->activateView(EIRView_OpenWebAddressView);
+}
+
+/*
+ * Description: active settings view
+ */
+void IRNowPlayingView::launchSettingsView()
+{
+    getViewManager()->activateView(EIRView_SettingsView);
+}
+
+/*
+ * Description : slot function for signal metaDataAvailable(IRQMetaData*) of play controller.
+ *               If metadata is available, update the text
+ */
+void IRNowPlayingView::updateSongInfo(IRQMetaData* aMetaData)
+{
+#ifdef _DEBUG
+    if (iApplication->iTestPreferredBitrate)
+    {
+        IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+        QList<int> bitRateList;
+        bitRateList.clear();
+        nowPlayingPreset->getAvailableBitrates(bitRateList);
+        QString songName;
+        QString bitrate;
+        for(int i=0; i<bitRateList.count(); i++)
+        {
+            songName = songName + bitrate.setNum(bitRateList[i]) + " : ";
+        }
+        songName = songName + " = " + bitrate.setNum(iPlayController->bitrateTrying());
+        iNowPlayingContainer->setSongName(songName);
+        return;
+    }
+#endif
+    iSongNameAvailable = false;
+    if (aMetaData)
+    {
+        iNowPlayingContainer->setSongName(aMetaData->getArtistSongName());
+        if(!aMetaData->getSongName().isEmpty() ||
+           !aMetaData->getArtistName().isEmpty())
+        {
+            iSongNameAvailable = true;
+        }
+    }
+    else
+    {
+        iNowPlayingContainer->setSongName("");
+    }
+    
+    if(iFindinNmsAllowed && iSongNameAvailable)
+    {
+        iMusicShopAction->setIcon(HbIcon(":/playback/icon_musicshop_enable.png"));
+    }
+    else
+    {
+        iMusicShopAction->setIcon(HbIcon(":/playback/icon_musicshop_disable.png"));
+    }    
+}
+
+// ---------------------------------------------------------------------------
+// IRNowPlayingView::initializeLogo()
+// Initialize the logo
+//---------------------------------------------------------------------------
+void IRNowPlayingView::initializeLogo()
+{
+    QIcon icon(":/playback/default_cd.png");
+    HbIcon hbIcon(icon);
+    *iStationLogo = hbIcon;
+    iLogoStatus = EDefaultLogo;
+
+    // While starting to play a new station, the container should be NowPlayingContainer
+    if (iStationDetailsContainer == widget())
+    {
+        flipControl();
+    }
+}
+
+/*
+ * Description : slot function for active network event
+ * Parameters  : aEvent, see the definition of IRQNetworkEvent
+ */
+void IRNowPlayingView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    //when we get here, it means that current view is the first view 
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        iApplication->closeConnectingDialog();
+        if (EIR_UseNetwork_StartingView == getUseNetworkReason())
+        {
+            IRLastPlayedStationInfo *lastPlayedStationInfo =
+                    iApplication->getLastPlayedStationInfo();
+            IRQPreset *preset = lastPlayedStationInfo->getLastPlayedStation();
+            if (preset)
+            {
+                iPlayController->connectToChannel(preset,lastPlayedStationInfo->connectedFrom());
+            }
+        }
+        else if (EIR_UseNetwork_PlayStation == getUseNetworkReason())
+        {
+            playStopControl();
+        }
+
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        
+        break;
+        
+    case EIRQConnectingCancelled:
+    case EIRQDisplayNetworkMessageNoConnectivity:
+        {
+            IRQPreset *preset = iPlayController->getNowPlayingPreset();
+            //if IRPlayController::connectToChannel(IRQPreset*) hasn't been called, back to main view.
+            //otherwise stay in nowplaying view.
+            if (NULL == preset || preset->name == "")
+            {
+                getViewManager()->activateView(EIRView_MainView);
+            }
+        }
+        break;
+        
+    default:
+        break;
+    }
+}
+
+//                                       private functions
+
+/*
+ * Description : create menu for now playing view
+ */
+void IRNowPlayingView::createMenu()
+{
+    iStereoAction = qobject_cast<HbAction *> (iLoader.findObject("activateStereo"));
+    iStereoMode = iApplication->getSettings()->getStereoMode();
+    if (iStereoMode == 1)
+    {
+        iStereoAction->setText(hbTrId("txt_irad_opt_deactivate_stereo"));
+    }
+    HbAction *openWebAddressAction = qobject_cast<HbAction *> (iLoader.findObject("openWebAddressAction"));
+    HbAction *shareStationAction = qobject_cast<HbAction *> (iLoader.findObject("shareStationAction"));
+    HbAction *songRecAction = qobject_cast<HbAction *> (iLoader.findObject("songRecAction"));
+    HbAction *gotoMusicStoreAction = qobject_cast<HbAction *> (iLoader.findObject("gotoMusicStoreAction"));
+    HbAction *settings = qobject_cast<HbAction *> (iLoader.findObject("settings"));
+    HbAction *helpAction = qobject_cast<HbAction *> (iLoader.findObject("help"));
+    HbAction *exitAction = qobject_cast<HbAction *> (iLoader.findObject("exit"));
+
+    connect(iStereoAction, SIGNAL(triggered()), this, SLOT(stereoControl()));
+    connect(openWebAddressAction, SIGNAL(triggered()), this, SLOT(openWebAddressControl()));
+    connect(shareStationAction, SIGNAL(triggered()), this, SLOT(shareStationViaMms()));
+    connect(songRecAction, SIGNAL(triggered()), this, SLOT(recognizeSong()));
+    connect(gotoMusicStoreAction, SIGNAL(triggered()), this, SLOT(gotoMusicStore()));
+    connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
+    connect(helpAction, SIGNAL(triggered()), this, SLOT(helpAction()));
+    connect(exitAction, SIGNAL(triggered()), iApplication, SIGNAL(quit()));
+
+    HbMenu *viewMenu = menu();
+    connect(viewMenu, SIGNAL(aboutToShow()), this, SLOT(prepareMenu()));    
+}
+
+/*
+ * Description : create tool bar for now playing view
+ */
+void IRNowPlayingView::createToolBar()
+{
+    iMusicShopAction = qobject_cast<HbAction *> (iLoader.findObject("musicShop"));
+    iPlayStopAction = qobject_cast<HbAction *> (iLoader.findObject("playStop"));
+    iAdd2FavAction = qobject_cast<HbAction *> (iLoader.findObject("addToFav"));
+    iFlipAction = qobject_cast<HbAction *> (iLoader.findObject("flip"));
+
+    iMusicShopAction->setAutoRepeat(false);
+    iPlayStopAction->setAutoRepeat(false);
+    iAdd2FavAction->setAutoRepeat(false);
+    iFlipAction->setAutoRepeat(false);
+    connect(iMusicShopAction, SIGNAL(triggered()), this, SLOT(findInMusicShop()));
+    connect(iPlayStopAction, SIGNAL(triggered()), this, SLOT(playStopControl()));
+    connect(iAdd2FavAction, SIGNAL(triggered()), this, SLOT(add2FavControl()));
+    connect(iFlipAction, SIGNAL(triggered()), this, SLOT(flipControl()));
+}
+
+/*
+ * Description : update station name and category according to the information in preset
+ */
+void IRNowPlayingView::updateStationInfo()
+{
+    IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+    const QString &stationName = nowPlayingPreset->name;
+    iNowPlayingContainer->setStationName(stationName);
+
+    QString category = nowPlayingPreset->genreName + " / "
+            + nowPlayingPreset->countryName + " / "
+            + nowPlayingPreset->languageName;
+    if (" /  / " == category)
+    {
+        category = "";
+    }
+    iNowPlayingContainer->setCategory(category);
+}
+
+/*
+ * Description : Update advertisement image
+ */
+void IRNowPlayingView::updateAdvImage()
+{
+    // TODO: in the future, it should judge the change of advertisement url
+    if (ELogoDetermined == iLogoStatus || ERequestIssued == iLogoStatus)
+    {
+        return;
+    }
+
+    IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+
+    // TODO: initialize adv, in the future it will use default adv image
+    QIcon icon(":/playback/default_cd.png");
+    HbIcon hbIcon(icon);
+    iNowPlayingContainer->setAdvImage(hbIcon);
+
+    if (nowPlayingPreset->type)
+    {
+        // isds server channel
+        // TODO: it should use adv in preset, now the variants is not clear
+        if (nowPlayingPreset->advertisementInUse.size() > 0
+                && iAdvImageUrl != nowPlayingPreset->advertisementInUse)
+        {
+            iAdvImageUrl = nowPlayingPreset->advertisementInUse;
+            iTempAdvClickThroughUrl = nowPlayingPreset->advertisementUrl;
+            IRQPreset advPreset;
+            advPreset.imgUrl = iAdvImageUrl;
+            advPreset.type = 1;
+            iGettingAdv = true;
+            iIsdsClient->isdsLogoDownSendRequest(&advPreset);
+        }
+        else
+        {
+            updateLogoInfo();
+        }
+    }
+    else
+    {
+        updateLogoInfo();
+    }
+}
+
+/*
+ * Description : Update logo info
+ */
+void IRNowPlayingView::updateLogoInfo()
+{
+    if (ELogoDetermined == iLogoStatus || ERequestIssued == iLogoStatus
+            || iGettingAdv)
+    {
+        return;
+    }
+
+    IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+
+    iNowPlayingContainer->setLogo(*iStationLogo);
+    if (nowPlayingPreset->type)
+    {
+        // isds server channel
+        iLogoStatus = ERequestIssued;
+        iIsdsClient->isdsLogoDownSendRequest(nowPlayingPreset, 2, KNowPlayingLogoSize, KNowPlayingLogoSize);
+    }
+    else
+    {
+        // users defined channel
+        if (iStationDetailsContainer)
+        {
+            iStationDetailsContainer->setLogo(*iStationLogo);
+        }
+        iLogoStatus = ELogoDetermined;
+    }
+}
+
+/*
+ * Description: show container
+ */
+void IRNowPlayingView::showWidget()
+{
+    if (iStationDetailsContainer)
+    {
+        IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+        iStationDetailsContainer->setDetails(nowPlayingPreset, *iStationLogo);
+    }
+
+    updateMusicStatus();
+    updateStationInfo();
+    updateSongInfo(iPlayController->getMetaData());
+    updateAdvImage();
+}
+
+/*
+ * Description: initializing.
+ */
+void IRNowPlayingView::initialize()
+{
+    iMusicShop = iApplication->getMusicShop();
+    iStatisticsReporter = iApplication->getStatisticsReporter();
+}
+
+
+
+/*
+* Description : slot function for music shop button in toolbar
+*/
+void IRNowPlayingView::findInMusicShop()
+{
+    if(!iFindinNmsAllowed)
+    {
+        popupNote(hbTrId("txt_irad_info_disallowed_by_this_station"), HbMessageBox::MessageTypeInformation);
+        return;        
+    }
+    
+    if(!iSongNameAvailable)
+    {
+        popupNote(hbTrId("txt_irad_info_no_song_info"), HbMessageBox::MessageTypeInformation);
+        return;        
+    }
+        
+    if(NULL == iMusicShop)
+    {
+        popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+        return;
+    }
+    
+    IRQMetaData *metaData = iPlayController->getMetaData();
+    if( iMusicShop->findInMusicShop(metaData->getSongName(), metaData->getArtistName()))
+    {
+        if(iStatisticsReporter)
+        {
+            int channelId = iPlayController->getNowPlayingPreset()->presetId;
+            iStatisticsReporter->logNmsEvent(EIRQFind,channelId);
+        }
+    }
+    else
+    {
+        popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+    }
+}
+
+void IRNowPlayingView::helpAction()
+{
+    popupNote(hbTrId("Not Ready"), HbMessageBox::MessageTypeInformation);
+}
+
+void IRNowPlayingView::playPressed()
+{
+    if (getViewManager()->currentView() == this)
+    {
+        iPlayController->resume();
+    }
+}
+
+void IRNowPlayingView::gotoMusicStore()
+{
+    if(IRQMusicShop::launchMusicShop())
+    {
+        if(iStatisticsReporter)
+        {
+            int channelId = 0;
+            if(iPlayController)
+            {
+                IRQPreset *preset = iPlayController->getNowPlayingPreset();
+                if(preset)
+                {
+                    channelId = preset->presetId;
+                }	      
+            }            
+            iStatisticsReporter->logNmsEvent(EIRQLaunch,channelId);
+        }        
+    }
+    else
+    {
+        popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+    }
+}
+
+void IRNowPlayingView::updateMusicStatus()
+{
+    IRQPreset *preset = iPlayController->getNowPlayingPreset();
+    if(preset && (0 == preset->musicStoreStatus.compare("yes",Qt::CaseInsensitive)))
+    {
+        iFindinNmsAllowed = true;
+    }
+    else
+    {
+        iFindinNmsAllowed = false;
+    }
+}
+
+void IRNowPlayingView::recognizeSong()
+{
+    if(IRQMusicShop::launchShazam())
+    {
+        if(iStatisticsReporter)
+        {           
+            iStatisticsReporter->logSongRecogEvent();    
+        }   
+    }
+    else
+    {
+        popupNote(hbTrId("txt_irad_info_song_recognition_not_available"), HbMessageBox::MessageTypeInformation);
+    }
+}
+
+void IRNowPlayingView::openAdvLink()
+{
+    IRQUtility::openAdvLink(iAdvClickThroughUrl);
+}
+void IRNowPlayingView::shareStationViaMms()
+{
+    popupNote(hbTrId("Not Ready"), HbMessageBox::MessageTypeInformation);
+}
+
+void IRNowPlayingView::prepareMenu()
+{
+    HbAction *songRecAction = qobject_cast<HbAction *> (iLoader.findObject("songRecAction"));
+    songRecAction->setEnabled(iPlayController->isPlaying());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/iropenwebaddressview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,306 @@
+/*
+* 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 <hbapplication.h>
+#include <hbmenu.h>
+#include <hbtoolbar.h>
+#include <hbpushbutton.h>
+#include <hblineedit.h>
+#include <hbinstance.h>
+
+#include "irabstractviewmanager.h"
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "iropenwebaddressview.h"
+#include "irqisdsdatastructure.h"
+#include "irqfavoritesdb.h"
+#include "irqnetworkcontroller.h"
+#include "irqutility.h"
+#include "irlineeditor.h"
+#include "irqenums.h"
+#include "iruidefines.h"
+
+// Const strings
+const char* OPEN_WEB_ADDRESS_VIEW_OBJECT_NAME = "ex-IRQOpenWebAddressView"; // object name in the XML
+
+IROpenWebAddressView::IROpenWebAddressView(IRApplication* aApplication, TIRViewId aViewId) :
+    IRBaseView(aApplication, aViewId),
+    iUrl(NULL),
+    iName(NULL),
+    iDescription(NULL),
+    iNameClicked(false),
+    iPlayButton(NULL),
+    iAdd2FavButton(NULL)
+{
+    connect( getViewManager(), SIGNAL( orientationChanged(Qt::Orientation) ),
+             this, SLOT( handleOrientationChanged(Qt::Orientation) ) );
+    
+    // Create widget hierarchy
+    setObjectName(OPEN_WEB_ADDRESS_VIEW_OBJECT_NAME);
+
+    // List existing root elements - this allows us to refer to objects in the XML 
+    // which are created outside the document.
+    QObjectList roots;
+    roots.append(this); // IROpenWebAddressView is referred in the XML file
+    iLoader.setObjectTree(roots);
+
+    // Load the XML file
+    iLoader.load(OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME);
+
+    // Find the HbLineEdit objects
+    iUrl = qobject_cast<HbLineEdit *> (iLoader.findObject("streamURL"));
+    iName = qobject_cast<IrLineEditor *> (iLoader.findObject("stationName"));
+    iDescription = qobject_cast<HbLineEdit *> (iLoader.findObject("description"));
+
+    initButtons();
+
+    // This view need not to be stacked.
+    setFlag(EViewFlag_UnStackable);
+
+    connect(iName, SIGNAL(pressed()), this, SLOT(nameEditorClicked()));
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+    this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+    
+    connect(iUrl, SIGNAL(textChanged(const QString&)),
+    this, SLOT(urlEditorTextChanged(const QString&)));
+
+    handleOrientationChanged(getViewManager()->orientation());
+}
+
+IROpenWebAddressView::~IROpenWebAddressView()
+{
+}
+
+/*
+ * Description : from base class IRBaseView.
+ *               handle view commands.
+ * Parameters  : aCommand : see the definition of TIRViewCommand
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IROpenWebAddressView::handleCommand(TIRViewCommand aCommand,
+        TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        initDetails();
+        return EIR_NoDefault;
+
+    case EIR_ViewCommand_DEACTIVATE:
+    default:
+        break;
+    }
+
+    return EIR_DoDefault;
+}
+
+/*
+ * Description : initialize the details.
+ */
+void IROpenWebAddressView::initDetails()
+{
+    // Set the initial text for line editor.
+    iUrl->setText("http://");
+    iName->setText(hbTrId("txt_irad_info_unnamed"));
+    iDescription->setText("");
+    iNameClicked = false;
+}
+
+/*
+ * Description : initialize the buttons.
+ */
+void IROpenWebAddressView::initButtons()
+{
+    // Find the HbAction objects
+    iPlayButton = qobject_cast<HbPushButton *> (iLoader.findObject("playButton"));
+    iAdd2FavButton = qobject_cast<HbPushButton *> (iLoader.findObject("add2FavButton"));
+    
+    connect(iPlayButton, SIGNAL(released()), this, SLOT(play()));
+    connect(iAdd2FavButton, SIGNAL(released()), this, SLOT(add2Fav()));
+}
+
+/*
+ * Description : add the station to favorites.
+ */
+void IROpenWebAddressView::add2Fav()
+{
+    // Create a IRQPreset using the inputted information.
+    IRQPreset preset;
+
+    if (!initPreset(preset))
+    {
+        return;
+    }
+
+    // Add to favorites.
+    int retValue = iFavorites->addPreset(preset);
+
+    // Show the information from favorites.
+    if (EIRQErrorAlreadyExist == retValue)
+    {
+        popupNote(hbTrId("txt_irad_info_favorite_updated"), HbMessageBox::MessageTypeInformation);
+    }
+    else if (EIRQErrorNone == retValue)
+    {
+        popupNote(hbTrId("txt_irad_info_added_to_favorites"), HbMessageBox::MessageTypeInformation);
+    }
+    else if (EIRQErrorOutOfMemory == retValue)
+    {
+        popupNote(hbTrId("txt_irad_info_can_not_add_more"), HbMessageBox::MessageTypeInformation);
+    }
+    else
+    {
+        Q_ASSERT(false);
+    }
+}
+
+/*
+ * Description : Play this station.
+ */
+void IROpenWebAddressView::play()
+{
+    // Create a IRQPreset using the inputted information
+    IRQPreset preset;
+
+    if (!initPreset(preset))
+    {
+        return;
+    }
+
+    setUseNetworkReason(EIR_UseNetwork_OpenWebAddress);
+
+    // Verify the connectivity
+    if (false == iApplication->verifyNetworkConnectivity())
+    {
+        return;
+    }
+
+    setUseNetworkReason(EIR_UseNetwork_NoReason);
+
+    // Play this preset
+    iPlayController->connectToChannel(&preset,EIRQAdhocManual);
+}
+
+/*
+ * Description : Handle the network event from network controller.
+ */
+void IROpenWebAddressView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        iApplication->closeConnectingDialog();
+
+        if (EIR_UseNetwork_OpenWebAddress == getUseNetworkReason())
+        {
+            play();
+        }
+
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+        
+    default:
+        break;
+    }
+}
+
+/*
+ * Description : Clear the name editor.
+ */
+void IROpenWebAddressView::nameEditorClicked()
+{    
+    if(!iNameClicked)
+    {
+        iName->setText("");
+        iNameClicked = true;
+    }     
+}
+
+/*
+ * Description : initialize a preset.
+ * return parameter: true, initialization succeeds; vice versa.
+ */
+bool IROpenWebAddressView::initPreset(IRQPreset &aPreset)
+{
+    IRQChannelServerURL server;
+
+    server.url = iUrl->text();
+    server.url.remove(" ");
+
+    // check the URL
+    if (!IRQUtility::isValidUrl(server.url))
+    {
+        popupNote(hbTrId("txt_irad_info_invalid_link_please_change_it"), HbMessageBox::MessageTypeInformation);
+        return false;
+    }
+
+    // Give it an initial value, supposed to be 32 kbps.
+    server.bitrate = 32;
+    server.serverName = iName->text();
+    if (0 == server.serverName.size())
+    {
+        server.serverName = hbTrId("txt_irad_info_unnamed");
+    }
+
+    aPreset.insertChannelServer(server);
+    aPreset.name = server.serverName;
+    aPreset.description = iDescription->text();
+    aPreset.shortDesc = aPreset.description;
+    aPreset.type = 0;     
+    aPreset.presetId = 0;
+    aPreset.uniqID = 0;
+
+    return true;
+}
+
+
+void IROpenWebAddressView::urlEditorTextChanged(const QString &aString)
+{
+    if(aString.size() < 8)
+    {
+        iPlayButton->setEnabled(false);
+        iAdd2FavButton->setEnabled(false);
+    }   
+    else
+    {
+        iPlayButton->setEnabled(true);
+        iAdd2FavButton->setEnabled(true);
+    }
+}
+
+/*
+ * Description : resize the container if the direction changes.
+ */
+void IROpenWebAddressView::handleOrientationChanged(Qt::Orientation aOrientation)
+{
+    // Load the XML file
+    if (aOrientation == Qt::Vertical)
+    {
+        iLoader.load(OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME, "portrait");
+    }
+    else
+    {
+        iLoader.load(OPEN_WEB_ADDRESS_VIEW_LAYOUT_FILENAME, "landscape");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irplaycontroller.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,698 @@
+/*
+* 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 <hbprogressdialog.h>
+#include <hbmessagebox.h>
+#include <QTimer>
+
+#include "irplaycontroller.h"
+#include "irapplication.h"
+#include "irqmediaplayer.h"
+#include "irabstractviewmanager.h"
+#include "irqisdsdatastructure.h"
+#include "irlastplayedstationinfo.h"
+#include "irqnetworkcontroller.h" 
+#include "irqsonghistoryengine.h"
+#include "irqmetadata.h"
+#include "irqsettings.h"
+#include "irqfavoritesdb.h"
+#include "irqstatisticsreporter.h"
+//                                        public functions
+
+/*
+ * Description : constructor
+ */
+IRPlayController::IRPlayController(IRApplication* aApplication) :
+    iApplication(aApplication),
+    iMediaPlayer(new IRQMediaPlayer()),
+    iStatisticsReporter(NULL),
+    iConnectedFrom(EIRQIsds),
+    iSessionStarted(false),  
+    iGetServerResult(false),
+    iBufferingDialog(NULL),
+    iNowPlayingPreset(new IRQPreset()),
+    iMetaData(NULL),
+    iSongHistoryEngine(IRQSongHistoryEngine::openInstance()),
+    iPlayState(EStopped),
+    iResuming(false),
+    iTryingBitrate(0),
+    iUrlArray(0),
+    iRealBitrate(0),
+    iLastError(EIRQErrorNone),
+    iStopReason(EIRQUnknownTermination)
+{
+    connectSignalSlot(); 
+    iStatisticsReporter = iApplication->getStatisticsReporter();
+}
+
+/*
+ * Description : destructor
+ */
+IRPlayController::~IRPlayController()
+{
+    iApplication = NULL;
+    iPlayState = EStopped;
+
+    delete iBufferingDialog;
+    iBufferingDialog = NULL;
+
+    stop(EIRQUserTerminated);
+    delete iMediaPlayer;
+    iMediaPlayer = NULL;
+
+    delete iNowPlayingPreset;
+    iNowPlayingPreset = NULL;
+
+    delete iUrlArray;
+    iUrlArray = NULL;
+
+    iMetaData = NULL;
+
+    if (iSongHistoryEngine)
+    {
+        iSongHistoryEngine->closeInstance();
+        iSongHistoryEngine = NULL;
+    }
+}
+
+/*
+ * Description : connect to a channel specified by aPreset.
+ * Parameters  : aPreset : the preset of the channel
+ */
+void IRPlayController::connectToChannel(IRQPreset *aPreset, IRQConnectedFrom aConnectedFrom)
+{
+    iConnectedFrom = aConnectedFrom;
+    if (!aPreset)
+    {
+        return;
+    }
+
+    if (iMediaPlayer)
+    {
+        // sort the URL by ascending order and get all available rates.
+        // iAvailableBitrate is cleared in getAvailableBitrates().
+        aPreset->sortURLArray();
+        aPreset->getAvailableBitrates(iAvailableBitrate);
+        if (iAvailableBitrate.count() == 0)
+        {
+            return;
+        }
+        
+        int selectedBitRate = 0;
+        IRQPreferredQuality preferredQuality = iApplication->getSettings()->getPreferredQuality();
+        switch(preferredQuality)
+        {
+            case EIRQStandardQuality:
+                selectedBitRate = iAvailableBitrate.first();
+                break;
+            case EIRQHighQuality:
+                selectedBitRate = iAvailableBitrate.last();
+                break;
+            default:
+                selectedBitRate = iAvailableBitrate.first();
+                break;
+        }
+
+        // get URL to play
+        iTryingBitrate = selectedBitRate;
+        *iNowPlayingPreset = *aPreset;
+        delete iUrlArray;
+        iUrlArray = NULL;
+        iUrlArray = iNowPlayingPreset->getURLsForBitrate(selectedBitRate);
+        if (iUrlArray)
+        {
+            QString url = iUrlArray->at(0);
+#ifdef __WINS__
+            if (iLastPlayedChannelName != aPreset->name)
+            {
+                emit initializeLogo();
+            }
+            url = tr("http://172.28.189.104:8000");
+            iLastPlayedChannelName = aPreset->name;
+#else
+            if (iLastPlayedUrl != iUrlArray->at(0))
+            {
+                emit initializeLogo();
+            }
+#endif
+            iLastPlayedUrl = url;
+            iResuming = false;
+            doPlay(url);
+        }
+    }
+}
+
+/*
+ * Description : RESUME playing after play is stopped.
+ *               Use the last played url as station's url.
+ */
+void IRPlayController::resume()
+{
+    qDebug("IRPlayController::resume(), Entering");
+    if (iMediaPlayer && (EStopped == iPlayState))
+    {
+        iResuming = true;
+        
+        if (iLastPlayedUrl != "")
+        {
+            qDebug("IRPlayController::resume(), iLastPlayedUrl is not empty, doPlay()");
+            doPlay(iLastPlayedUrl);
+        }
+    }
+    qDebug("IRPlayController::resume(), Exiting");
+}
+
+/*
+ * Description : stop playing
+ */
+void IRPlayController::stop(IRQTerminatedType aStopReason)
+{
+    qDebug("IRPlayController::stop, Entering, aStopReason=%d", aStopReason);
+    if (iMediaPlayer)
+    {
+        iMediaPlayer->disableStereoEffect();
+
+        iMediaPlayer->stop();
+
+        if (EPlaying == iPlayState)
+        {
+            iStopReason = aStopReason;
+            // playingStarted is emitted while iPlaying is set to true,
+            // so when stop() is called and iPlaying is true, playingStopped
+            // should be emitted.
+            qDebug("IRPlayController::stop, emit playingStopped()");
+            emit playingStopped();
+        }
+        iPlayState = EStopped;
+    }
+	endSession(aStopReason);
+	qDebug("IRPlayController::stop, Exiting");
+}
+
+/*
+ * Description : End Session
+ */
+void IRPlayController::endSession(IRQTerminatedType aStopReason)
+{
+    if(iStatisticsReporter && iSessionStarted)
+    {
+        if(!iGetServerResult)
+        {
+            iStatisticsReporter->logServerResult(iLastPlayedUrl,EIRQPlayerErrorConnectingFailed);
+        }
+        iStatisticsReporter->sessionEnded(aStopReason);
+        iSessionStarted = false;
+    }
+}
+
+/*
+ * Description : get current volume setting from media player or
+ *               central repository
+ * Return      : current volume
+ */
+int IRPlayController::getVolume() const
+{
+    if (EPlaying == iPlayState)
+    {
+        return iMediaPlayer->getVolume();
+    }
+    else
+    {
+        return iApplication->getSettings()->getVolumeSetting();
+    }
+}
+
+/*
+ * Description : set volume to media player and central repository
+ * Parameters  : aVolume : volume value, between 0 and 100
+ */
+void IRPlayController::setVolume(int aVolume)
+{
+    if (EPlaying == iPlayState)
+    {
+        iMediaPlayer->setVolume(aVolume);
+    }
+    iApplication->getSettings()->setVolumeSetting(aVolume);
+}
+
+/*
+ * Description : enable stereo effect
+ */
+void IRPlayController::enableStereo()
+{
+    if (iMediaPlayer)
+    {
+        iMediaPlayer->enableStereoEffect();
+    }
+}
+
+/*
+ * Description : disable stereo effect
+ */
+void IRPlayController::disableStereo()
+{
+    if (iMediaPlayer)
+    {
+        iMediaPlayer->disableStereoEffect();
+    }
+}
+
+/*
+ * Description : return the flag of playing state
+ * Return      : true  : playing is ongoing
+ *               false : playing is stopped
+ */
+bool IRPlayController::isPlaying() const
+{
+    return (EPlaying == iPlayState);
+}
+
+/*
+ * Description : return the flag of stopped state
+ * Return      : true  : playing is stopped
+ *               false : playing is ongoing
+ */
+bool IRPlayController::isStopped() const
+{
+    return (EStopped == iPlayState);
+}
+
+/*
+ * Description : return the now playing preset
+ * Return      : pointer to the now playing preset
+ */
+IRQPreset * IRPlayController::getNowPlayingPreset() const
+{
+    return iNowPlayingPreset;
+}
+
+/*
+ * Description : return current metadata
+ * Return      : pointer to current metadata
+ */
+IRQMetaData * IRPlayController::getMetaData() const
+{
+    return iMetaData;
+}
+
+IRQTerminatedType IRPlayController::getStopReason() const
+{
+    return iStopReason;
+}
+
+/*
+ * Description : show a buffering dialog to inform user the buffering stage.
+ *               If the dialog is not created yet, create first. 
+ */
+void IRPlayController::createBufferingDialog(const QObject *aReceiver, const char *aFunc)
+{
+    if (NULL == iBufferingDialog)
+    {
+        iBufferingDialog = new HbProgressDialog(HbProgressDialog::ProgressDialog);
+        iBufferingDialog->setMinimum(0);
+        iBufferingDialog->setMaximum(100);
+        iBufferingDialog->setModal(true);
+    }
+
+    //disconnect everything connected to signal cancelled()
+    iBufferingDialog->disconnect(SIGNAL(cancelled()));
+
+    connect(iBufferingDialog, SIGNAL(cancelled()), aReceiver, aFunc);
+    iBufferingDialog->setProgressValue(0);
+    iBufferingDialog->setText("0%");
+    iBufferingDialog->show();
+}
+
+/*
+ * Description : close the buffering dialog
+ */
+void IRPlayController::closeBufferingDialog()
+{
+    if (iBufferingDialog)
+    {
+        iBufferingDialog->close();
+        delete iBufferingDialog;
+        iBufferingDialog = NULL;
+    }
+}
+
+//                                           slot  functions
+
+/*
+ * Description : data connection has been established. Signal is emitted by media player.
+ * 
+ */
+void IRPlayController::connectionEstablished(int aBitrate)
+{
+    if(iStatisticsReporter && iSessionStarted)
+    {
+        iStatisticsReporter->logServerResult(iLastPlayedUrl,EIRQErrorNone);
+        iGetServerResult = true;
+        iStatisticsReporter->markSessionStart();
+    }
+
+    iMetaData = NULL;
+    iRealBitrate = aBitrate;
+
+    // update bitrate for user defined channel
+    if (0 == iNowPlayingPreset->type)
+    {
+        if (iTryingBitrate != iRealBitrate)
+        {
+            iNowPlayingPreset->setUrlBitrate(0,iRealBitrate);
+            //when bitrate is available, it should be written to favorites db
+            iApplication->getFavoritesDB()->replaceUserDefinedPreset(*iNowPlayingPreset);
+            iTryingBitrate = iRealBitrate;
+        }
+    }
+}
+
+/*
+ * Description : error occurred in media player. Signal is emitted by media player.
+ * Parameters  : aError : error value
+ */
+void IRPlayController::errorOccured(IRQError aError)
+{
+    iLastError = aError;
+
+    QTimer::singleShot(1, this, SLOT(handleError()));
+}
+
+/*
+ * Description : handle the error async.
+ */
+void IRPlayController::handleError()
+{
+    qDebug("IRPlayController::handleError(), Entering, iLastError - %d", iLastError);
+    switch (iLastError)
+    {
+    case EIRQPlayerErrorServerFull:
+    case EIRQPlayerErrorTimeOut:
+    case EIRQPlayerErrorConnectingFailed:
+        if(iStatisticsReporter)
+        {
+            iStatisticsReporter->logServerResult(iLastPlayedUrl,iLastError);
+            iGetServerResult = true;
+        }
+		
+        // if there's NO other URL to try, show warning.
+        if (iNowPlayingPreset->getChannelURLCount() == 1)
+        {
+		    endSession(EIRQNoConnectionToServer);
+            break;
+        }
+
+        if (iResuming)
+        {
+            HbMessageBox note(tr("Connecting failed, try next URL"), HbMessageBox::MessageTypeInformation);
+            note.exec();
+            connectToChannel(iNowPlayingPreset,iConnectedFrom);
+            iResuming = false;
+            return;
+        }
+
+        // try next
+        if (true == playNextUrl())
+        {
+            return;
+        }
+        else
+        {
+            endSession(EIRQNoConnectionToServer);
+        }
+        break;
+
+    case EIRQPlayerErrorConnectionLost:
+        qDebug("IRPlayController::handleError, connection lost");
+        stop(EIRQNoConnectionToServer);
+        break;
+		
+    case EIRQPlayerErrorGeneral:
+    case EIRQPlayerErrorAudioDeviceLost:
+    default:
+        stop(EIRQUnknownTermination);
+        break;
+    }
+
+    closeBufferingDialog();
+
+    createNote();
+    qDebug("IRPlayController::handleError(), Exiting");
+}
+
+/*
+ * Description : buffering process has updated, change the display of buffering dialog.
+ *               If aProress is 100, buffering is complete, now playing view needs to 
+ *               be shown to user.
+ * Parameters  : aProgress : progress value, between 0 and 100.
+ */
+void IRPlayController::updateProgress(int aProgress)
+{
+    /* we added this condition for sometimes, the function will be called
+     * when the state is playing. reference cr_9010
+     */
+    if( iBufferingDialog && EBuffering == iPlayState )
+    {        
+        iBufferingDialog->setProgressValue(aProgress);
+        iBufferingDialog->setText(QString("%1%").arg(aProgress));       
+    }
+    
+    if (100 == aProgress)
+    {
+        closeBufferingDialog();
+
+        //updateProgress(100) sometimes can be called more than one time, to improve performance,
+        //we only need to do the following work once.
+        if (EBuffering == iPlayState)
+        {
+            iApplication->getViewManager()->activateView(EIRView_PlayingView);
+            iPlayState = EPlaying;
+
+            //update last played station
+            IRLastPlayedStationInfo *lastPlayedStationInfo = iApplication->getLastPlayedStationInfo();
+            lastPlayedStationInfo->updateLastPlayedStation(iNowPlayingPreset,iConnectedFrom);
+            lastPlayedStationInfo->commitLastPlayedStation();
+
+            //increase the played times of current preset
+            iApplication->getFavoritesDB()->increasePlayedTimes(*iNowPlayingPreset);
+
+            emit playingStarted();
+
+            // if the metadata is available, show it.
+            emit metaDataAvailable(iMetaData);
+
+            // Save the station information to database
+            IRQMetaData tmpMetaData;
+            tmpMetaData.setBitrate(iRealBitrate);
+            tmpMetaData.setStreamUrl(iLastPlayedUrl);
+            iSongHistoryEngine->handleMetaDataReceived(tmpMetaData, *iNowPlayingPreset);
+            // open stereo according to settings
+            if (1 == iApplication->getSettings()->getStereoMode())
+            {
+                iMediaPlayer->enableStereoEffect();
+            }
+        }
+    }
+}
+
+/*
+ * Description : get volume value from application setting. media player use the value
+ *               to set volume.
+ * Parameters  : aVolume : volume value
+ */
+void IRPlayController::fetchVolume(int &aVolume)
+{
+    aVolume = iApplication->getSettings()->getVolumeSetting();
+}
+
+/*
+ * Description : handle the receiption of metadata. Notify now playing view to update display
+ * Parameters  : aIRmetaData : the metadata object
+ */
+void IRPlayController::handleMetaDataReceived(IRQMetaData& aIRmetaData)
+{
+    
+    
+    iMetaData = &aIRmetaData;
+    //TO DO: there maybe a potential bug when the user cancel the play, 	
+    if ((aIRmetaData.getSongName().trimmed() != "")
+            || (aIRmetaData.getArtistName().trimmed() != ""))
+    {
+        //when we are play the musicplayer and get the metadata from lower layer, we save the 
+        //song's metadata into the db.  After we save it to db, we emit the next signal to notify the UI         
+        iSongHistoryEngine->handleSongMetaDataReceived(*iMetaData,
+                iNowPlayingPreset->musicStoreStatus);  
+    }   
+
+    if (EPlaying == iPlayState)
+    {
+        // This signal will cause addBanner() work. Sometimes the metadata will come before
+        // the buffering is 100%, we need to avoid to show playing banner before 100% buffering.
+        emit metaDataAvailable(iMetaData);        
+    }    
+}
+
+/*
+ * Description : during buffering stage, cancel playing request
+ */
+void IRPlayController::cancelBuffering()
+{
+    stop(EIRQUserTerminated);
+    if (!iResuming && EIRView_PlayingView == iApplication->getViewManager()->currentViewId())
+    {
+        iApplication->getViewManager()->backToPreviousView();
+    }
+}
+
+//                                       private functions
+
+/*
+ * Description : show a note to user to inform that error occured.
+ *                
+ */
+void IRPlayController::createNote(const QString &aNote)
+{
+    HbMessageBox note(aNote, HbMessageBox::MessageTypeWarning);
+	note.setPrimaryAction(NULL);
+    note.exec();
+}
+
+/*
+ * Description : establish the signal&slot connection between media player and play controller
+ */
+void IRPlayController::connectSignalSlot()
+{
+    connect(iMediaPlayer, SIGNAL(connectionEstablished(int)), this, SLOT(connectionEstablished(int)));
+    connect(iMediaPlayer, SIGNAL(errorOccured(IRQError)), this, SLOT(errorOccured(IRQError)));
+    connect(iMediaPlayer, SIGNAL(percentageBuffered(int)), this, SLOT(updateProgress(int)));
+    connect(iMediaPlayer, SIGNAL(volumeExpected(int&)), this, SLOT(fetchVolume(int&)));
+    connect(iMediaPlayer, SIGNAL(metaDataReceived(IRQMetaData&)),
+            this, SLOT(handleMetaDataReceived(IRQMetaData&)));
+}
+
+/*
+ * Description : try to play the next url in the preset.
+ * return value: true: it will play next URL; false, not.
+ */
+bool IRPlayController::playNextUrl()
+{
+    // remove the first url from iUrlArray
+    iUrlArray->removeFirst();
+
+    if (iUrlArray->isEmpty()) // try next bitrate
+    {
+        int index = iAvailableBitrate.indexOf(iTryingBitrate);
+        if (-1 != index)
+        {
+            bool tryingContinue = true;
+            IRQPreferredQuality preferredQuality = iApplication->getSettings()->getPreferredQuality();
+            switch(preferredQuality)
+            {
+                case EIRQHighQuality:
+                    if(index > 0)
+                    {
+                        iTryingBitrate = iAvailableBitrate.at(--index);
+                    }
+                    else
+                    {
+                        tryingContinue = false;
+                    }
+                    break;
+                    
+                case EIRQStandardQuality:
+                default:
+                    if(index < (iAvailableBitrate.count()-1))
+                    {
+                        iTryingBitrate = iAvailableBitrate.at(++index);
+                    }
+                    else
+                    {
+                        tryingContinue = false;
+                    }
+                    break;
+            }        
+            
+            if(tryingContinue)
+            {
+                HbMessageBox note(tr("Connecting failed, try next URL"), HbMessageBox::MessageTypeInformation);
+                note.exec();  
+                delete iUrlArray;
+                iUrlArray = iNowPlayingPreset->getURLsForBitrate(iTryingBitrate);
+                iLastPlayedUrl = iUrlArray->at(0);
+                doPlay(iLastPlayedUrl);
+                return true;
+            }
+        }
+
+    }
+    else // try next url in iUrlArray
+    {
+        iLastPlayedUrl = iUrlArray->at(0);
+        doPlay(iLastPlayedUrl);
+
+        HbMessageBox note(tr("Connecting failed, try next URL"), HbMessageBox::MessageTypeInformation);
+        note.exec();
+
+        return true;
+    }
+    
+    return false;
+}
+
+/*
+ * Description : complete the play action
+ */
+void IRPlayController::doPlay(const QString& aUrl)
+{
+    // stop player, disable stereo effect, emit playstopped signal 
+    stop(EIRQUserTerminated);
+
+    //call getIAPId() every time before refering to it, because in ALR, the access point can 
+    //be changed
+    unsigned long apId = 0;
+    iApplication->getNetworkController()->getIAPId(apId);
+    qDebug("IRPlayController::doPlay, access point : %d", apId);
+    iMediaPlayer->playStation(aUrl, apId);
+    iPlayState = EBuffering;
+    startSession();
+    createBufferingDialog(this, SLOT(cancelBuffering()));
+}
+
+/*
+ * Description : start a session
+ */
+void IRPlayController::startSession()
+{
+	iGetServerResult = false;
+
+    int channelId = 0;
+    if(iNowPlayingPreset)
+    {
+        channelId = iNowPlayingPreset->presetId;
+    }
+	      
+    if(iStatisticsReporter && !iSessionStarted)
+    {
+        iSessionStarted = iStatisticsReporter->sessionStarted(channelId,iConnectedFrom);
+    }
+}
+
+#ifdef _DEBUG
+int IRPlayController::bitrateTrying() const
+{
+    return iTryingBitrate;
+}
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irplsmodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* 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 <QBrush>
+
+#include "iruidefines.h"
+#include "irplsmodel.h"
+#include "irsymbiandocument.h"
+
+
+IRPlsModel::IRPlsModel(QObject *aParent) : QAbstractListModel(aParent), iDocument(NULL)
+{
+    iDocument = IRSymbianDocument::getInstance();
+}
+
+int IRPlsModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    return iDocument->getNumberOfEntries();
+}
+
+QVariant IRPlsModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+        return QVariant();
+
+    if (aIndex.row() >= rowCount(QModelIndex()))
+        return QVariant();
+    
+    if (aRole == Qt::DisplayRole)
+    {
+        int row = aIndex.row();
+        QVariantList list;
+        IRPlsPlayListItem *item = iDocument->getEntry(row);
+        list.append(item->title());
+        list.append(item->file());
+        return list;
+    }
+    else if (aRole == Qt::BackgroundRole)
+    {
+        if (aIndex.row() % 2 == 0)
+        {
+            return QBrush(KListEvenRowColor);
+        }
+        else
+        {
+            return QBrush(KListOddRowColor);
+        }
+    }
+    
+    return QVariant();
+}
+
+const QString& IRPlsModel::getFile(int aIndex) const
+{
+    IRPlsPlayListItem *item = iDocument->getEntry(aIndex);
+    return item->file();
+}
+
+const QString& IRPlsModel::getTitle(int aIndex) const
+{
+    IRPlsPlayListItem *item = iDocument->getEntry(aIndex);
+    return item->title();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irplsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include <hblistview.h>
+
+#include "irplsview.h"
+#include "irapplication.h"
+#include "irabstractviewmanager.h"
+#include "irqnetworkcontroller.h"
+#include "irplsmodel.h"
+#include "irqisdsdatastructure.h"
+#include "irplaycontroller.h"
+
+IRPlsView::IRPlsView(IRApplication* aApplication, TIRViewId aViewId) : 
+                     IrAbstractListViewBase(aApplication, aViewId), iPlsModel(NULL)
+{
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+            this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+    setHeadingText(hbTrId("txt_irad_subtitle_stations_from_play_list"));
+        
+    iPlsModel = new IRPlsModel(this);
+    iListView->setModel(iPlsModel);
+    iListView->setCurrentIndex(iPlsModel->index(0));
+}
+
+IRPlsView::~IRPlsView()
+{
+}
+
+void IRPlsView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+        
+    switch (aEvent)
+    {
+        case EIRQNetworkConnectionEstablished:
+            iApplication->closeConnectingDialog();
+            
+            if (EIR_UseNetwork_SelectItem == getUseNetworkReason())
+            {
+                handleItemSelected();
+            }
+            setUseNetworkReason(EIR_UseNetwork_NoReason);
+            
+            break;
+            
+        default:
+            break;
+    }
+}
+
+void IRPlsView::handleItemSelected()
+{
+    int currentRow = iListView->currentIndex().row();
+    IRQChannelServerURL server;
+    server.bitrate = 0;
+    server.url = iPlsModel->getFile(currentRow);
+    server.serverName = iPlsModel->getTitle(currentRow);
+    IRQPreset preset;
+    preset.insertChannelServer(server);
+    preset.name = iPlsModel->getTitle(currentRow);
+    preset.description = iPlsModel->getFile(currentRow);
+    preset.shortDesc = iPlsModel->getFile(currentRow);
+    preset.type = 0;
+    preset.uniqID = 0;
+    preset.presetId = 0;
+
+    iPlayController->connectToChannel(&preset, EIRQAdhocExternal);
+}
+
+void IRPlsView::updateView()
+{
+    iListView->reset();
+    iListView->setCurrentIndex(iPlsModel->index(0));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsearchchannelsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,384 @@
+/*
+* 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 <hbpushbutton.h>
+#include <hbtoolbar.h>
+#include <hbaction.h> 
+#include <QFont>
+#include <QActionGroup> 
+#include <QSizePolicy> 
+#include <QStringList>
+#include <QStringListModel> 
+#include <QTimer>
+
+#include "irqisdsdatastructure.h"
+#include "irsearchchannelsview.h" 
+#include "irabstractviewmanager.h" 
+#include "irstationsview.h" 
+#include "irqnetworkcontroller.h" 
+#include "irbannerlabel.h"  
+#include "irqmetadata.h"
+#include "irplaycontroller.h"
+#include "irqisdsclient.h"
+#include "irapplication.h" 
+#include "irsearchcriteriadb.h"
+#include "ircombobox.h"
+#include "iruidefines.h" 
+
+const QString KInitialString = "Input key string";  
+
+IRSearchChannelsView::IRSearchChannelsView(IRApplication* aApplication,
+        TIRViewId aViewId): IRBaseView(aApplication, aViewId),iCollectionsAction(NULL),iFavoritesAction(NULL),
+        iGenresAction(NULL),iSearchAction(NULL),iSearchButton(NULL),iSearchText(NULL),iSearchIconLabel(NULL),
+        iSearchCombobox(NULL),iFirstTime(true),iBannerLabel(NULL),iDB(NULL)
+
+{
+    // Create widget hierarchy
+    setObjectName( SEARCH_CHANNELS_VIEW_OBJECT_VIEW );
+
+    // List existing root elements - this allows us to refer to objects in the XML 
+    // which are created outside the document.
+    QObjectList roots;
+    roots.append( this );
+    iLoader.setObjectTree( roots );
+
+    iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME);
+    iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME,SEARCH_CHANNELS_VIEW_NO_PLAYINGBANNER_SECTION); 
+
+    iSearchCombobox = qobject_cast<IrComboBox *> (iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_LABEL));       
+    iSearchButton = qobject_cast<HbPushButton *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCHKEY_BUTTON));    
+    iBannerLabel = qobject_cast<IrNowPlayingBannerLabel *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_PLAYING_BANNER));
+    
+    initContentWidget();
+    initToolBar();    
+    initMenu();        
+    createDB();   
+}
+
+IRSearchChannelsView::~IRSearchChannelsView()
+{
+    delete iDB;
+    iDB = NULL;
+}
+
+ 
+void IRSearchChannelsView::helpAction()
+{
+    popupNote(tr("Not ready"), HbMessageBox::MessageTypeInformation);
+}
+ 
+
+
+TIRHandleResult IRSearchChannelsView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = EIR_DoDefault;
+    QString str = "";
+    
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        updateView();
+        iBannerLabel->startAnimation();
+        str = iSearchCombobox->currentText();        
+        str = str.trimmed();
+        if( str == KInitialString || "" == str)
+            iSearchButton->setEnabled(false);
+        else
+            iSearchButton->setEnabled(true);        
+             
+        iSearchAction->setChecked(true);
+        break;
+
+    case EIR_ViewCommand_DEACTIVATE:              
+        iBannerLabel->stopAnimation();
+        break;
+    }
+
+    return ret;
+}
+
+ 
+void IRSearchChannelsView::initContentWidget()
+{
+    iBannerLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary)); 
+
+    iSearchButton->setEnabled(false);    
+    iSearchCombobox->setEditable(true);
+    iSearchCombobox->setEditText(KInitialString);
+    
+    connect(iSearchButton, SIGNAL(clicked(bool)),this, SLOT(startSearch(bool)));
+    connect(iSearchCombobox, SIGNAL(editTextChanged(const QString&)), this, SLOT(searchBoxTextChanged(const QString&)));   
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)), this, SLOT(networkRequestNotified(IRQNetworkEvent)));     
+    connect(iSearchCombobox, SIGNAL(pressed()), this, SLOT(comboboxClicked()));    
+    connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this,
+            SLOT(metaDataAvailable(IRQMetaData*)));
+    connect(iPlayController, SIGNAL(playingStopped()), this,
+            SLOT(removeBanner()));
+    connect(iBannerLabel, SIGNAL(pressed()), this, SLOT(gotoNowPlaying()));
+}
+
+void IRSearchChannelsView::initMenu()
+{          
+    
+    HbAction *settings = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SETTING_ACTION));
+    HbAction *openWebAdressAction = qobject_cast<HbAction*>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_OPEN_WEB_ADDRESS_ACTION));
+    HbAction *helpAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_HELP_ACTION));
+    HbAction *exitAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_EXIT_ACTION));    
+     
+    connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
+    connect(openWebAdressAction, SIGNAL(triggered()), this, SLOT(openWebAddress()));
+    connect(helpAction, SIGNAL(triggered()), this, SLOT(helpAction()));
+    connect(exitAction, SIGNAL(triggered()), iApplication, SIGNAL(quit()));
+}
+
+
+void IRSearchChannelsView::initToolBar()
+{
+    HbToolBar *viewToolBar = qobject_cast<HbToolBar *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_TOOLBAR));
+    
+    QActionGroup *actionGroup = new QActionGroup(this);
+
+    iCollectionsAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_COLLECTION_ACTION));
+    iCollectionsAction->setActionGroup(actionGroup);
+
+    iFavoritesAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_FAVORITES_ACTION));
+    iFavoritesAction->setActionGroup(actionGroup);
+
+    iGenresAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_GENRES_ACTION));
+    iGenresAction->setActionGroup(actionGroup);
+
+    iSearchAction = qobject_cast<HbAction *>(iLoader.findObject(SEARCH_CHANNELS_VIEW_OBJECT_SEARCH_ACTION));
+    iSearchAction->setActionGroup(actionGroup);
+    
+    connect(iCollectionsAction, SIGNAL(triggered()), this, SLOT(collectionsActionClicked()));
+    connect(iFavoritesAction, SIGNAL(triggered()), this, SLOT(favoritesActionClicked()));
+    connect(iGenresAction, SIGNAL(triggered()), iApplication, SLOT(loadGenre()));    
+
+    iSearchAction->setChecked(true);
+}
+
+void IRSearchChannelsView::collectionsActionClicked()
+{
+    getViewManager()->activateView(EIRView_MainView);
+}
+
+void IRSearchChannelsView::favoritesActionClicked()
+{
+    getViewManager()->activateView(EIRView_FavoritesView);
+}
+
+void IRSearchChannelsView::startSearch(bool aBool)
+{
+    Q_UNUSED(aBool);
+    setUseNetworkReason(EIR_UseNetwork_StartSearch);
+    if (false == iApplication->verifyNetworkConnectivity())
+    {
+        return;
+    }
+    setUseNetworkReason(EIR_UseNetwork_NoReason);
+    
+    QString str = iSearchCombobox->currentText();   
+    str = str.trimmed();
+    
+    if( "" == str )
+    {         
+        return;
+    }
+
+    bool exists = iDB->isAlreadyExist(str);
+    if (!exists)
+    {
+        iDB->addOneCriteria(str);
+    }
+
+    IRStationsView *searchResultView =
+            static_cast<IRStationsView*> (getViewManager()->getView(
+                    EIRView_SearchResultView, true));
+
+    searchResultView->loadSearchResult(str);     
+} 
+ 
+ 
+void IRSearchChannelsView::searchBoxTextChanged(const QString &aString)
+{
+    QString str = aString.trimmed();
+    if( "" != str )
+    {
+        iSearchButton->setEnabled(true);
+    }   
+    else  
+    {
+        iSearchButton->setEnabled(false);
+    }
+}  
+
+void IRSearchChannelsView::cancelRequest()
+{
+    iIsdsClient->isdsCancelRequest();
+} 
+
+void IRSearchChannelsView::networkRequestNotified(IRQNetworkEvent aEvent)
+{        
+    if (getViewManager()->currentView() != this)
+    {       
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        iApplication->closeConnectingDialog();
+        if(EIR_UseNetwork_StartSearch == getUseNetworkReason())
+        {
+            QString str = iSearchCombobox->currentText();
+            str = str.trimmed();
+
+            if ("" == str)
+            {
+                return;
+            }
+            
+            bool exists = iDB->isAlreadyExist(str);
+            if (!exists)
+            {             
+                iDB->addOneCriteria(str);
+            }
+
+            IRStationsView *searchResultView = static_cast<IRStationsView*> (getViewManager()->getView(
+                            EIRView_SearchResultView, true));
+
+            searchResultView->loadSearchResult(str);
+        }
+        
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+
+    default:
+        iSearchAction->setChecked(true);
+        break;
+    }   
+} 
+
+void IRSearchChannelsView::comboboxClicked()
+{        
+    if( iFirstTime )
+    {
+        iSearchCombobox->clearEditText();
+        iFirstTime = false;        
+    }     
+}
+
+
+void IRSearchChannelsView::launchSettingsView()
+{
+    getViewManager()->activateView(EIRView_SettingsView);
+}
+
+void IRSearchChannelsView::openWebAddress()
+{
+    getViewManager()->activateView(EIRView_OpenWebAddressView);
+}
+
+void IRSearchChannelsView::gotoNowPlaying()
+{
+    Q_ASSERT(iPlayController->isPlaying());
+    
+    getViewManager()->activateView(EIRView_PlayingView);
+}
+
+void IRSearchChannelsView::addBanner(const QString &aText)
+{
+    iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME, SEARCH_CHANNELS_VIEW_WITH_PLAYINGBANNER_SECTION);
+    iBannerLabel->setText(aText);
+    iBannerLabel->setLoopCount(-1);
+}
+
+void IRSearchChannelsView::metaDataAvailable(IRQMetaData* aMetaData)
+{
+    if (!aMetaData)
+    {
+        return;
+    }
+    
+    const QString artistSongName = aMetaData->getArtistSongName();
+    if ("" != artistSongName.trimmed() && "-" != artistSongName.trimmed())
+    {
+        addBanner(aMetaData->getArtistSongName());
+    }
+    else
+    {
+        //set the banner text as station name
+        IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+        Q_ASSERT(nowPlayingPreset);
+        addBanner(nowPlayingPreset->name);
+    }
+}
+
+void IRSearchChannelsView::updateView()
+{
+    if (iPlayController->isPlaying())
+    {
+        IRQMetaData *metaData = iPlayController->getMetaData();
+        if (metaData && "" != metaData->getArtistSongName().trimmed() &&
+            "-" != metaData->getArtistSongName().trimmed())
+        {
+            //set the banner text as song name
+            addBanner(metaData->getArtistSongName());
+        }
+        else
+        {
+            //set the banner text as station name
+            IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+            Q_ASSERT(nowPlayingPreset);
+            addBanner(nowPlayingPreset->name);
+        }
+    }
+    else
+    {
+        removeBanner();    	 
+    }
+}
+
+void IRSearchChannelsView::removeBanner()
+{
+    iBannerLabel->stopAnimation();
+    iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME,SEARCH_CHANNELS_VIEW_NO_PLAYINGBANNER_SECTION); 
+}
+
+void IRSearchChannelsView::createDB()
+{
+    iDB = new IRSearchCriteriaDB();
+    QStringList strList;
+    iDB->getAllCriteria(strList);
+    QStringListModel* comboboxListModel = new QStringListModel(iSearchCombobox);
+    iSearchCombobox->setModel(comboboxListModel);
+    comboboxListModel->setStringList(strList);
+    connect(iDB, SIGNAL(dataAdded()),this, SLOT(dbDataChanged()));   
+}
+
+void IRSearchChannelsView::dbDataChanged()
+{         
+    QStringList strList;
+    bool ret = iDB->getAllCriteria(strList);
+     
+    if (ret)
+    {         
+        (static_cast<QStringListModel*> (iSearchCombobox->model()))->setStringList(
+                strList);
+    }    
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsearchcriteriadb.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* 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 <QFile>
+#include <QSqlQuery>
+#include <QSqlRecord> 
+#include <QSqlDatabase>
+#include <QVariant>
+ 
+
+#include "irsearchcriteriadb.h"
+
+
+IRSearchCriteriaDB::IRSearchCriteriaDB(int aMaxCount):iDB(NULL),iMaxCount(aMaxCount)
+{
+    createDBConnection();
+}
+
+IRSearchCriteriaDB::~IRSearchCriteriaDB()
+{
+    if (iDB->isOpen())
+    {
+        iDB->close();
+    }        
+    
+    delete iDB;
+    iDB = NULL;
+}
+
+IRQError IRSearchCriteriaDB::addOneCriteria(const QString& aCriteria)
+{         
+    if (iDB->isOpen())
+    {
+        if( aCriteria.length() >= CRITERIA_UPLIMIT_LENGTH )
+        {             
+            //the unicode string is too long to store
+            return EIRQErrorBadParameter;
+        }
+        
+        QSqlQuery query("SELECT * FROM criteria");
+        QSqlRecord rec = query.record();         
+ 
+        if( rec.count() >= iMaxCount )
+        {
+            bool ret = deleteSomeCriteria();            
+            if( !ret )
+            {
+                return EIRQErrorGeneral;
+            }
+        }
+         
+        
+        bool ret = query.prepare("INSERT INTO criteria (cricolum) "
+            "VALUES (?)");
+        query.addBindValue(aCriteria,QSql::In);
+        ret = query.exec();        
+         
+        emit dataAdded();
+        return EIRQErrorNone;
+    }
+
+    return EIRQErrorServiceUnavailable;
+}
+
+bool IRSearchCriteriaDB::getAllCriteria(QStringList& aStrList) const
+{
+    aStrList.clear();     
+    if (iDB->isOpen())
+    {
+        QSqlQuery query("SELECT * FROM criteria");
+        QSqlRecord rec = query.record();         
+
+        int criteriaCol = rec.indexOf("cricolum");
+        while (query.next())
+        {
+            aStrList.append(query.value(criteriaCol).toString());
+        }
+        return true;
+    }
+
+    return false;
+}
+
+void IRSearchCriteriaDB::createDBConnection()
+{    
+    bool created = QFile::exists("searchcriteria.dat");    
+    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");     
+    iDB = new QSqlDatabase(db);
+
+    iDB->setDatabaseName("searchcriteria.dat");
+
+    if (!iDB->open())
+    {         
+        return;
+    }
+     
+
+    if (!created)
+    {
+    	  bool dbResult = false;
+        QSqlQuery query;         
+        dbResult = query.exec("CREATE TABLE criteria ("
+            "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+            "cricolum VARCHAR(255) NOT NULL)");
+
+        if (!dbResult)
+        {             
+            return;
+        }
+    }    
+}
+
+bool IRSearchCriteriaDB::isAlreadyExist(const QString& aCriteria) const
+{         
+    //TODO: change to the sql statement, but now the sqlquery binding 
+    //dose not work well 
+    if( aCriteria.length() >= CRITERIA_UPLIMIT_LENGTH )
+    {    	   
+        return true;
+    }
+    
+    QStringList strList;
+    getAllCriteria(strList);
+    
+    for(int i=0; i<strList.count(); i++)
+    {
+        if( 0 == strList[i].compare(aCriteria, Qt::CaseInsensitive))
+        {            
+            return true;
+        }
+    }     
+     
+    return false;
+}
+
+bool IRSearchCriteriaDB::deleteSomeCriteria()
+{
+    //TODO: to delete some items when the db is full
+    return true;   
+}
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsettingsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,205 @@
+/*
+ * 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 <hbdataform.h>
+#include <hbdataformmodelitem.h>
+#include <QGraphicsLinearLayout>
+#include <hbdataformviewitem.h>
+#include <hbdataformmodel.h>
+#include <hbradiobuttonlist.h>
+
+#include "irapplication.h"
+#include "irsettingsview.h"
+#include "irqsettings.h"
+#include "irqenums.h"
+#include "irlastplayedstationinfo.h"
+
+const QString KStartingViewGroupLabelKeyWord = QObject::tr("Choose Starting View");
+const QString KPreferredQualityGroupLabelKeyWord = QObject::tr(
+        "Choose Preferred Quality");
+
+IRSettingsView::IRSettingsView(IRApplication *aApplication, TIRViewId aViewId) :
+    IRBaseView(aApplication, aViewId), iForm(NULL),iModel(NULL)
+{
+    iStartingViews << tr("Browse by Genre") << tr("Browse by Language") << tr(
+            "Browse by Country") << tr("Collections view") << tr(
+            "Favorite stations") << tr("Last played station") << tr(
+            "Last exit view");
+    iPreferredQuality<<tr("Normal")<<tr("High");
+    initView();
+}
+
+IRSettingsView::~IRSettingsView()
+{
+}
+
+void IRSettingsView::startingViewSelected(int aIndex)
+{
+    if (iStartingViews.indexOf(tr("Last exit view")) != aIndex)
+    {
+        iSettings->setStickyViewFlag(false);
+    }
+
+    switch (aIndex)
+    {
+    case 0:
+        iSettings->setStartingViewId(EIRView_CategoryView);
+        iSettings->setStartingViewParameter(EIRViewPara_Genre);
+        break;
+    case 1:
+        iSettings->setStartingViewId(EIRView_CategoryView);
+        iSettings->setStartingViewParameter(EIRViewPara_Language);
+        break;
+    case 2:
+        iSettings->setStartingViewId(EIRView_CategoryView);
+        iSettings->setStartingViewParameter(EIRViewPara_Country);
+        break;
+    case 3:
+        iSettings->setStartingViewId(EIRView_MainView);
+        break;
+    case 4:
+        iSettings->setStartingViewId(EIRView_FavoritesView);
+        break;
+    case 5:
+        if (iApplication->getLastPlayedStationInfo()->getLastPlayedStation())
+        {
+            iSettings->setStartingViewId(EIRView_PlayingView);
+        }
+        else
+        {
+            iSettings->setStickyViewFlag(true);
+        }
+        break;
+    case 6:
+        iSettings->setStickyViewFlag(true);
+        break;
+    default:
+        iSettings->setStartingViewId(EIRView_CategoryView);
+        iSettings->setStartingViewParameter(EIRViewPara_Genre);
+        break;
+    }
+}
+
+
+void IRSettingsView::preferredQualitySelected(int aIndex)
+{
+    if (0 == aIndex)
+    {
+        iSettings->setPreferredQuality(EIRQStandardQuality);
+    }
+    else
+    {
+        iSettings->setPreferredQuality(EIRQHighQuality);
+    }
+}
+
+void IRSettingsView::initView()
+{
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical,
+            this);
+    setLayout(layout);
+    iForm = new HbDataForm();
+    layout->addItem(iForm);
+    iModel = new HbDataFormModel();
+    //set the starting view list
+    setStartingViewList();
+    //set the preferred quality
+    setPreferredQuality();
+    iForm->setModel(iModel);
+}
+
+void IRSettingsView::setStartingViewList()
+{
+    if (NULL == iApplication->getLastPlayedStationInfo()->getLastPlayedStation())
+    {
+        iStartingViews.removeAt(iStartingViews.count() - 2);
+    }
+    HbDataFormModelItem *startViewItemGroup = new HbDataFormModelItem(
+            HbDataFormModelItem::GroupItem, KStartingViewGroupLabelKeyWord);
+    iModel->appendDataFormItem(startViewItemGroup);
+    HbDataFormModelItem *startViewModelItem = iModel->appendDataFormItem(
+            HbDataFormModelItem::RadioButtonListItem, tr("StartView"),
+            startViewItemGroup);
+    startViewModelItem->setContentWidgetData(QString("items"), iStartingViews);
+    startViewModelItem->setData(HbDataFormModelItem::KeyRole, tr("Choose Startview"));
+    startViewModelItem->setContentWidgetData(QString("selected"),getStartingViewSelection());
+    iForm->addConnection(startViewModelItem,SIGNAL(itemSelected(int)),this,SLOT(startingViewSelected(int)));
+}
+
+void IRSettingsView::setPreferredQuality()
+{
+    HbDataFormModelItem *preferredQualityItemGroup = new HbDataFormModelItem(
+            HbDataFormModelItem::GroupItem, KPreferredQualityGroupLabelKeyWord);
+    iModel->appendDataFormItem(preferredQualityItemGroup);
+    HbDataFormModelItem *preferredQualityItem = iModel->appendDataFormItem(
+            HbDataFormModelItem::RadioButtonListItem, tr("Network Quality"),
+            preferredQualityItemGroup);
+    preferredQualityItem->setContentWidgetData(QString("items"), iPreferredQuality);
+    preferredQualityItem->setData(HbDataFormModelItem::KeyRole, tr("Choose Preferred Quality"));
+    IRQPreferredQuality settingValue = iSettings->getPreferredQuality();
+    preferredQualityItem->setContentWidgetData(QString("selected"), settingValue);
+    iForm->addConnection(preferredQualityItem,SIGNAL(itemSelected(int)),this,SLOT(preferredQualitySelected(int)));
+}
+
+int IRSettingsView::getStartingViewSelection()
+{
+    bool flag = false;
+    iSettings->getStickyViewFlag(flag);
+    if (flag)
+    {
+        return iStartingViews.indexOf(tr("Last exit view"));
+    }
+
+    TIRViewId startingViewId = EIRView_InvalidId;
+    iSettings->getStartingViewId(startingViewId);
+    int selected = 0;
+    switch (startingViewId)
+    {
+    case EIRView_CategoryView:
+        TIRViewParameter parameter;
+        iSettings->getStartingViewParameter(parameter);
+        switch (parameter)
+        {
+        case EIRViewPara_Genre:
+            selected = 0;
+            break;
+        case EIRViewPara_Language:
+            selected = 1;
+            break;
+        case EIRViewPara_Country:
+            selected = 2;
+            break;
+        default:
+            selected = 0;
+            break;
+        }
+        break;
+    case EIRView_MainView:
+        selected = 3;
+        break;
+    case EIRView_FavoritesView:
+        selected = 4;
+        break;
+    case EIRView_PlayingView:
+        selected = 5;
+        break;
+    default:
+        selected = 0;
+        break;
+    }
+    return selected;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsonghistorymodel.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,155 @@
+/*
+* 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 <QBrush>
+#include <hbglobal.h>
+
+#include "irqsonghistoryinfo.h"
+#include "irqsonghistoryengine.h"
+#include "irsonghistorymodel.h"
+#include "iruidefines.h"
+
+IRSongHistoryModel::IRSongHistoryModel(QObject *aParent) : QAbstractListModel(aParent)
+{     
+    iHistoryEngine = IRQSongHistoryEngine::openInstance();
+    getAllList();
+}
+
+IRSongHistoryModel::~IRSongHistoryModel()
+{
+    while (!iSongHistoryList.isEmpty())
+    {
+        delete iSongHistoryList.takeFirst();
+    }
+    
+    if (iHistoryEngine)
+    {
+        iHistoryEngine->closeInstance();
+        iHistoryEngine = NULL;
+    }
+}
+
+int IRSongHistoryModel::rowCount(const QModelIndex &aParent) const
+{
+    Q_UNUSED(aParent);
+    return iSongHistoryList.count();
+}
+ 
+ 
+QVariant IRSongHistoryModel::data(const QModelIndex &aIndex, int aRole) const
+{
+    if (!aIndex.isValid())
+    {
+        return QVariant();
+    }
+    
+    int row = aIndex.row();
+
+    if (aIndex.row() >= iSongHistoryList.count())
+    {
+        return QVariant();
+    }
+    
+    if (aRole == Qt::DisplayRole)
+    {
+        QVariantList list;      
+        
+        QString songName = iSongHistoryList.at(row)->getSongName();
+        songName = songName.trimmed();
+        if( "" == songName )
+        {
+            songName = hbTrId("txt_irad_list_unknown_song");
+        }
+        
+        songName = QString::number(row+1) + ". " + "\" " + songName + " \"";        
+        list.append(songName);
+        
+        QString artistName;
+        artistName = iSongHistoryList.at(row)->getArtistName();
+        artistName = artistName.trimmed();
+        if( "" == artistName )
+        {
+            artistName = "< " + hbTrId("txt_irad_list_unknown_artist") + " >";
+        }
+        else
+        {
+            artistName = "< " + iSongHistoryList.at(row)->getArtistName() + " >";
+        }
+        list.append(artistName);
+        return list;
+    }    
+    else if (aRole == Qt::BackgroundRole)
+    {
+        
+            if (aIndex.row() % 2 == 0)
+            {
+                return QBrush(KListEvenRowColor);
+            }
+            else
+            {
+                return QBrush(KListOddRowColor);
+            }        
+    }
+
+    return QVariant();
+}
+
+IRQSongInfo* IRSongHistoryModel::getSongHistoryInfo(int aIndex)
+{
+    if (aIndex >= 0 && aIndex < iSongHistoryList.count())
+    {
+        return iSongHistoryList.at(aIndex);
+    }
+
+    return NULL;
+}
+
+void IRSongHistoryModel::clearAllList()
+{
+    while (!iSongHistoryList.isEmpty())
+    {
+        IRQSongInfo *firstItem = iSongHistoryList.takeFirst();
+        delete firstItem;
+    }
+     
+    emit modelChanged();
+}
+
+bool IRSongHistoryModel::checkSongHistoryUpdate()
+{     
+    getAllList();    
+    return true;
+}
+ 
+
+void IRSongHistoryModel::getAllList()
+{
+    iHistoryEngine->getAllSongHistory(iSongHistoryList);
+
+    emit modelChanged();
+} 
+
+void IRSongHistoryModel::clearHisotrySongDB()
+{
+    while (!iSongHistoryList.isEmpty())
+    {
+        IRQSongInfo *firstItem = iSongHistoryList.takeFirst();
+        delete firstItem;
+    }
+    iHistoryEngine->clearAllSongHistory();     
+    emit modelChanged();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsonghistoryview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,244 @@
+/*
+* 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 <hblistview.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <hbicon.h>
+#include <QTimer> 
+
+#include "irabstractviewmanager.h"
+#include "irapplication.h" 
+#include "irplaycontroller.h"
+#include "irsonghistoryview.h" 
+#include "irsonghistorymodel.h"
+#include "irqsonghistoryinfo.h" 
+#include "irqenums.h"
+#include "irqmusicshop.h"
+#include "irqstatisticsreporter.h"
+#include "irqsettings.h"
+
+ 
+
+//                                         public functions
+
+/*
+ * Description : constructor
+ */
+IRSongHistoryView::IRSongHistoryView(IRApplication *aApplication, TIRViewId aViewId) :
+    IrAbstractListViewBase(aApplication, aViewId), iClearSongHistoryAction(NULL),
+    iShowPrompt(false)
+    
+{         
+    iModel = new IRSongHistoryModel(this);
+    iListView->setModel(iModel);
+    iListView->setCurrentIndex(iModel->index(0));
+    
+    iClearSongHistoryAction = new HbAction(hbTrId("txt_irad_opt_clear_song_history"), this);
+    iMusicShop = iApplication->getMusicShop();
+    iStatisticsReporter = iApplication->getStatisticsReporter();
+    
+    iStationHistoryAction = new HbAction(hbTrId("txt_irad_opt_recently_played_stations"), this);	 
+    menu()->insertAction(iOpenWebAddressAction, iStationHistoryAction);
+    connect(iStationHistoryAction, SIGNAL(triggered()), this, SLOT(gotoStationHistory()));
+    
+    iShowPrompt = iSettings->getSongHistoryShow();    
+    if( iShowPrompt )
+    {
+        iSettings->setSongHistoryShow(0);
+    }  
+    
+    connect(iClearSongHistoryAction, SIGNAL(triggered()), this, SLOT(clearHisotrySongDB()));    
+    connect(iModel, SIGNAL(modelChanged()), this, SLOT(modelChanged()));        
+}
+
+/* 
+ * Description : destructor
+ */
+IRSongHistoryView::~IRSongHistoryView()
+{
+ 
+}
+
+/*
+ * Description : virtual functions from base class IRBaseView. 
+ *               handle view commands
+ * 
+ * see also    : IRBaseView::handleCommand
+ */
+TIRHandleResult IRSongHistoryView::handleCommand(TIRViewCommand aCommand,
+        TIRViewCommandReason aReason)
+{     
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+     
+
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:        
+        connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(newMetadataAdded(IRQMetaData*)));
+        showSongHistory();
+        
+        if( iShowPrompt )
+        {             
+            QTimer::singleShot(5, this, SLOT(showPrompt()));
+            iShowPrompt = false;
+        }         
+        ret = EIR_NoDefault;       
+        break;
+
+    case EIR_ViewCommand_DEACTIVATE:        
+        disconnect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(newMetadataAdded(IRQMetaData*)));         
+        ret = EIR_NoDefault;        
+        break;
+
+    default:
+        break;
+    }
+
+    return ret;
+}
+
+//                                 slots functions 
+
+/*
+ * Description : slot function when an item in a list is clicked.
+ *               issue a listen request to isds client
+ * Parameters  : aItem : pointer to the clicked item.
+ */
+void IRSongHistoryView::handleItemSelected()
+{     
+    int index = iListView->currentIndex().row();
+    IRQSongInfo *hisInfo = iModel->getSongHistoryInfo(index);
+     
+
+    if(NULL == iMusicShop)
+    {
+        popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+        return;
+    }   
+    
+    if( (NULL == hisInfo) ||    
+        ( hisInfo->getSongName().isEmpty() &&  
+          hisInfo->getArtistName().isEmpty()
+        )
+      )
+    {
+        popupNote(hbTrId("txt_irad_info_no_song_info"), HbMessageBox::MessageTypeInformation);
+        return;
+    }
+
+
+    if( iMusicShop->findInMusicShop(hisInfo->getSongName(), hisInfo->getArtistName()))
+    {
+        if(iStatisticsReporter)
+        {
+            //we will add the report in future. Add the channel id in the song info db
+            //iStatisticsReporter->logNmsEvents(EIRQFind,channelId);
+        }
+    }
+    else
+    {
+        popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+    }     
+}
+   
+
+// ---------------------------------------------------------------------------
+// IRSongHistoryView::showSongHistory()
+// gets the List which was stored earlier
+//---------------------------------------------------------------------------
+void IRSongHistoryView::showSongHistory()
+{
+    if (iModel->checkSongHistoryUpdate())
+    {
+        iListView->reset();
+        iListView->setCurrentIndex(iModel->index(0));        
+    }
+}
+
+// ---------------------------------------------------------------------------
+// IRSongHistoryView::clearAllList()
+// gets the List which was stored earlier
+//---------------------------------------------------------------------------
+void IRSongHistoryView::clearAllList()
+{        
+    iModel->clearAllList();
+    iListView->reset();
+    updateView();     
+}
+
+void IRSongHistoryView::prepareMenu()
+{
+    HbMenu *viewMenu = menu();
+
+    viewMenu->removeAction(iClearSongHistoryAction);
+    if (iModel->rowCount() > 0)
+    {
+        viewMenu->insertAction(iOpenWebAddressAction, iClearSongHistoryAction);
+    }
+}
+    
+void IRSongHistoryView::modelChanged()
+{    
+    iListView->reset();
+    QString headingStr = hbTrId("txt_irad_list_recently_played_songs") + " (" + QString::number(iModel->rowCount()) + ")";    
+    setHeadingText(headingStr);
+ 
+    //the case is that, we active the song history view with no items
+    //but immediately, we get the metadata and show it on the list,
+    //then we need to remove the "no content" label
+    if( 1 == iListView->model()->rowCount())
+    {
+        updateView();
+    }     
+}
+
+void IRSongHistoryView::newMetadataAdded(IRQMetaData *aMetadata)
+{
+    Q_UNUSED(aMetadata);     
+    iModel->checkSongHistoryUpdate();
+     
+}
+
+void IRSongHistoryView::clearHisotrySongDB()
+{
+    iModel->clearHisotrySongDB(); 
+    updateView();    
+}
+
+void IRSongHistoryView::showPrompt()
+{
+    QString str = hbTrId("txt_irad_info_click_the_song_and_find_it_in_nokia_music_shop");
+    HbMessageBox promptDialog(str, HbMessageBox::MessageTypeInformation);          
+    //promptDialog.setTimeout(HbPopupBase::NoTimeout); 
+    promptDialog.setTimeout(HbPopup::NoTimeout); // JM: changed in w47 Orbit
+    promptDialog.setModal(true);
+    //promptDialog.setDismissPolicy(HbPopupBase::NoDismiss);    
+    promptDialog.setDismissPolicy(HbPopup::NoDismiss);    // JM: changed in w47 Orbit   
+    promptDialog.exec();
+}
+
+void IRSongHistoryView::itemAboutToBeSelected(bool& needNetwork)
+{
+    /* for in song history view, the data will retrived from the web browser*/
+    needNetwork = false;
+}
+ 
+void IRSongHistoryView::gotoStationHistory()
+{
+	  getViewManager()->activateView(EIRView_HistoryView);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irstationdetailscontainer.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+#include <HbTextItem>
+#include <HbLabel>
+#include <hbinstance.h>
+#include <hblistwidget.h>
+#include <hblistwidgetitem.h>
+#include <qtextlayout.h>
+#include <QGraphicsLinearLayout>
+
+#include "irqisdsdatastructure.h"
+#include "irstationdetailscontainer.h"
+#include "iruidefines.h"
+#include "irqenums.h"
+
+// Const qreal
+const qreal KOneListHeight = 30;
+const qreal KBlankHeight = 100;
+
+/*
+ * Description : constructor
+ */
+IRStationDetailsContainer::IRStationDetailsContainer(QObject *aLoaderParent, QGraphicsItem *aParent) :
+    HbScrollArea(aParent), iLoader(aLoaderParent)
+{
+    // Get the display direction
+    HbMainWindow *mainWindow = hbInstance->allMainWindows().at(0);
+    iPortrait = Qt::Vertical == mainWindow->orientation();
+
+    createDetails();
+}
+
+IRStationDetailsContainer::~IRStationDetailsContainer()
+{
+}
+
+/*
+ * Description : update the station information.
+ */
+void IRStationDetailsContainer::setDetails(IRQPreset* aNowPlayingPreset, const HbIcon& aIcon)
+{
+    iLogo->setIcon(aIcon);
+    iStationName->setText(tr("Name: ") + aNowPlayingPreset->name);
+    iDescription->setText(tr("Description: ") + aNowPlayingPreset->description);
+    iGenres->setText(tr("Genres: ") + aNowPlayingPreset->genreName);
+    iLanguage->setText(tr("Language: ") + aNowPlayingPreset->languageName);
+    iCountry->setText(tr("Country/Region: ") + aNowPlayingPreset->countryName);
+    if (aNowPlayingPreset->type)
+    {
+        iType->setText(tr("Type: Station directory"));
+    }
+    else
+    {
+        iType->setText(tr("Type: User defined"));
+    }
+
+    if (aNowPlayingPreset->getChannelURLCount() > 1)
+    {
+        aNowPlayingPreset->sortURLArray();
+    }
+
+    int bitrate;
+    QString bitr;
+    QString url;
+    QString streamItem;
+    int maxIndex = aNowPlayingPreset->getChannelURLCount();
+
+    iStreamsList->clear();
+
+    // add all the urls to the list.
+    for (int i = 0; i < maxIndex; i++)
+    {
+        int error = aNowPlayingPreset->getChannelBitrate(i, bitrate);
+        if (EIRQErrorNone == error)
+        {
+            bitr.setNum(bitrate);
+            aNowPlayingPreset->getChannelUrlAt(i, url);
+            streamItem = bitr + "kbps: " + url;
+            HbListWidgetItem *item = new HbListWidgetItem();
+            item->setData(QVariant(streamItem), Qt::DisplayRole);
+            iStreamsList->addItem(item);
+        }
+    }
+    resizeContainer();
+}
+
+/*
+ * Description : create the details of this widget.
+ */
+void IRStationDetailsContainer::createDetails()
+{
+    // Load the XML file
+    iLoader.load(STATION_DETAILS_CONTAINER_LAYOUT_FILENAME);
+    
+    // Find the station information objects
+    iContainer = qobject_cast<HbWidget *> (iLoader.findObject("container"));
+    iLogo = qobject_cast<HbLabel *> (iLoader.findObject("logo"));
+    iStationName = qobject_cast<HbTextItem *> (iLoader.findObject("stationName"));
+    iDescription = qobject_cast<HbTextItem *> (iLoader.findObject("description"));
+    iGenres = qobject_cast<HbTextItem *> (iLoader.findObject("genre"));
+    iLanguage = qobject_cast<HbTextItem *> (iLoader.findObject("language"));
+    iCountry = qobject_cast<HbTextItem *> (iLoader.findObject("country"));
+    iType = qobject_cast<HbTextItem *> (iLoader.findObject("type"));
+    iStreamsList = qobject_cast<HbListWidget *> (iLoader.findObject("streamList"));
+    // Set the wrap method
+    iStationName->setTextWrapping(Hb::TextWordWrap);
+    iDescription->setTextWrapping(Hb::TextWordWrap);
+    iGenres->setTextWrapping(Hb::TextWordWrap);
+    iLanguage->setTextWrapping(Hb::TextWordWrap);
+    iCountry->setTextWrapping(Hb::TextWordWrap);
+    
+    setContentWidget(iContainer);
+
+    // setting this flag prevents the list from scrolling outside it's assigned rectangle
+    setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
+
+    // this sets up the scroll area to scroll in the vertical direction only
+    setScrollDirections(Qt::Vertical);
+
+//    setInertiaEnabled(false);
+
+    setClampingStyle(HbScrollArea::StrictClamping);
+
+    resizeWidget();
+}
+
+/*
+ * Description : update the logo picture.
+ */
+void IRStationDetailsContainer::setLogo(const HbIcon& aIcon)
+{
+    iLogo->setIcon(aIcon);
+}
+
+/*
+ * Description : resize the container if the direction changes.
+ */
+void IRStationDetailsContainer::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+    bool prePortrait = iPortrait;
+    HbMainWindow *mainWindow = hbInstance->allMainWindows().at(0);
+    iPortrait = Qt::Vertical == mainWindow->orientation();
+    if (iPortrait != prePortrait)
+    {
+        resizeContainer();
+    }
+    HbWidget::resizeEvent(event);
+    if (iPortrait)
+    {
+        // portrait mode
+        iContainer->resize(size());
+    }
+    else
+    {
+        // landscape mode
+        iContainer->resize(size());
+    }
+}
+
+/*
+ * Description : load the layout according to the direction.
+ */
+void IRStationDetailsContainer::resizeContainer()
+{
+    if (iPortrait)
+    {
+        iLoader.load(STATION_DETAILS_CONTAINER_LAYOUT_FILENAME, "portrait");
+    }
+    else
+    {
+        iLoader.load(STATION_DETAILS_CONTAINER_LAYOUT_FILENAME, "landscape");
+    }
+    resizeWidget();
+}
+
+void IRStationDetailsContainer::resizeWidget()
+{
+    qreal totalHeight=0;
+    totalHeight+=iLogo->preferredHeight();
+    totalHeight += countWidgetHeight(iStationName);
+    totalHeight += countWidgetHeight(iDescription);
+    totalHeight += countWidgetHeight(iGenres);
+    totalHeight += countWidgetHeight(iLanguage);
+    totalHeight += countWidgetHeight(iCountry);
+    totalHeight += countWidgetHeight(iType);
+    qreal listHeight = KOneListHeight * iStreamsList->count();
+    iContainer->setMinimumHeight(totalHeight+listHeight+KBlankHeight);
+}
+
+qreal IRStationDetailsContainer::countWidgetHeight( HbTextItem* aTextItem )
+{
+    QTextLayout mTextLayout;
+    mTextLayout.setText(aTextItem->text());
+    mTextLayout.setFont(aTextItem->font());
+    mTextLayout.beginLayout();
+    QFontMetricsF fontMetrics(aTextItem->font());
+    qreal height = 0;
+    qreal width = iDescription->preferredWidth();
+    while(1)
+    {
+        QTextLine line = mTextLayout.createLine();
+        if(!line.isValid())
+        {
+            break;
+        }
+        line.setLineWidth( width );
+        height += fontMetrics.leading();
+        line.setPosition(QPointF(0, height));
+        height += line.height();
+    }
+    mTextLayout.endLayout();
+    aTextItem->setPreferredHeight(height);
+    return height;
+}
+
+void IRStationDetailsContainer::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+
+    painter->setPen(QPen(Qt::darkGray));
+    painter->setBrush(QBrush(Qt::darkGray));
+    painter->drawRect(rect());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irstationsview.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,575 @@
+/*
+* 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 <QPixmap>
+#include <hblistview.h>
+#include <hbaction.h>
+#include <QTimer>
+
+#include "irabstractviewmanager.h"
+#include "irstationsview.h"
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "irqisdsclient.h"
+#include "irqenums.h"
+#include "irqutility.h"
+#include "irchannelmodel.h"
+#include "irqisdsdatastructure.h"
+#include "irqnetworkcontroller.h"
+
+const int KBitmapSize = 59; 
+const uint KConnectTimeOut = 15000; //if the connecting take more than 15 seconds, we will show a pop up
+
+//                                      public functions
+
+/*
+ * Description : constructor
+ */
+IRStationsView::IRStationsView(IRApplication* aApplication, TIRViewId aViewId) 
+                               : IrAbstractListViewBase(aApplication, aViewId),
+                               iLogoPreset(NULL),  iPreset(NULL), 
+                               iWaitDialog(NULL),
+                               iViewParameter(EIRViewPara_InvalidId),iLastSelectitem(0),
+                               iLastPopularItem(0)                          
+{       
+    iIconIndexArray.clear();
+    iChannelModel = new IrChannelModel(this);
+    iListView->setModel(iChannelModel);
+    
+    
+    iConnectTimer = new QTimer(this);
+    iConnectTimer->setInterval(KConnectTimeOut);     
+    
+    iConvertTimer = new QTimer(this);
+    iConvertTimer->setInterval(10);    
+    
+    connect(iChannelModel, SIGNAL(dataAvailable()), this, SLOT(dataChanged()));    
+    connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+            this, SLOT(networkRequestNotified(IRQNetworkEvent)));    
+    connect(iConnectTimer, SIGNAL(timeout()), this, SLOT(connectTimeOut()));
+    connect(iConvertTimer, SIGNAL(timeout()), this, SLOT(convertAnother()));
+}
+
+/*
+ * Description : destructor
+ */
+IRStationsView::~IRStationsView()
+{
+    delete iPreset;
+    iPreset = NULL;
+
+    delete iLogoPreset;
+    iLogoPreset = NULL;
+
+    delete iWaitDialog;
+    iWaitDialog = NULL;
+    
+ 
+ 
+}
+
+void IRStationsView::setViewParameter(TIRViewParameter aParameter)
+{
+    iViewParameter = aParameter;
+}
+
+TIRViewParameter IRStationsView::getViewParameter() const
+{
+    return iViewParameter;
+}
+
+void IRStationsView::loadCategoryStations(int aIndex, const QString &aHeadingText)
+{
+    connectToIsdsClient();
+    setHeadingText(aHeadingText);
+    setViewParameter(EIRViewPara_CategoryStations);
+    
+    bool cache = false;
+    iIsdsClient->isdsChannelRequest(aIndex, cache);
+    
+    if (!cache)
+    {
+        createWaitDialog(hbTrId("txt_common_info_loading"));
+    }
+}
+
+void IRStationsView::loadPopularStations(bool aShowWaitDialog)
+{
+    connectToIsdsClient();
+    setViewParameter(EIRViewPara_PopularStations);
+    setHeadingText(tr("Popular stations"));
+    bool cache = false;
+    iIsdsClient->isdsCategoryRequest(IRQIsdsClient::Ehotpicks, cache);
+     
+    if (!cache && aShowWaitDialog)
+    {
+        createWaitDialog(hbTrId("txt_common_info_loading"));
+    }
+}
+
+void IRStationsView::loadSearchResult(const QString &aStr)
+{
+    connectToIsdsClient();
+    setViewParameter(EIRViewPara_SearchResults);
+    setHeadingText(hbTrId("txt_irad_subtitle_search_result"));
+    iIsdsClient->isdsSearchRequest(aStr);    
+    if( iConnectTimer->isActive() )
+    {
+        iConnectTimer->stop();
+    }
+    
+    iConnectTimer->start();
+    createWaitDialog(hbTrId("txt_common_info_searching"));
+}
+
+void IRStationsView::storeCurrentItem()
+{
+    switch (getViewParameter())
+    {
+    case EIRViewPara_PopularStations:
+        iLastPopularItem = iListView->currentIndex().row();
+        break;
+    case EIRViewPara_CategoryStations:
+        iLastSelectitem = iListView->currentIndex().row();
+        break;
+    default:
+        break;
+    }
+}
+
+void IRStationsView::resetCurrentItem()
+{
+    iLastSelectitem = 0;
+}
+
+/*
+ * Description : from base class IRBaseView.
+ *               handle view commands.
+ * Parameters  : aCommand : see the definition of TIRViewCommand
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRStationsView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+    int leftCount = 0;
+    
+    switch (aCommand)
+    {   
+    case EIR_ViewCommand_ACTIVATED:
+        connect(iIsdsClient, SIGNAL(presetResponse(IRQPreset *)),
+                this, SLOT(presetResponse(IRQPreset *)));
+        connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
+                this, SLOT(presetLogoDownload(IRQPreset* )));
+        connect(iIsdsClient, SIGNAL(presetLogoDownloadError()),
+                this, SLOT(presetLogoDownloadError()));
+        
+        ret = EIR_NoDefault;
+        break;
+        
+    case EIR_ViewCommand_DEACTIVATE:
+        if (aReason == EIR_ViewCommandReason_Back)
+        {
+            cleanupResource();
+        }
+        
+        iConnectTimer->stop();
+        iConvertTimer->stop();
+        iIsdsClient->isdsLogoDownCancelTransaction();         
+        
+        disconnect(iIsdsClient, SIGNAL(presetResponse(IRQPreset *)),
+                   this, SLOT(presetResponse(IRQPreset *)));
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset*)),
+                   this, SLOT(presetLogoDownload(IRQPreset* )));
+        disconnect(iIsdsClient, SIGNAL(presetLogoDownloadError()),
+                   this, SLOT(presetLogoDownloadError()));        
+        ret = EIR_NoDefault;
+        break;
+        
+    case EIR_ViewCommand_EffectFinished:
+        /* when the effect is finished, we start showing the logos  */
+        leftCount = iIconIndexArray.count();
+        if( leftCount > 0 )
+        {
+            iConvertTimer->start();
+        }
+        break;
+ 
+    default:
+        break;
+    }
+    
+    return ret;
+}
+
+void IRStationsView::launchAction()
+{
+    setUseNetworkReason(EIR_UseNetwork_StartingView);
+    iApplication->verifyNetworkConnectivity();
+}
+
+//                                      slots functions
+
+/*
+ * Description : slot function when an item in a list is clicked.
+ *               issue a listen request to isds client
+ * Parameters  : aItem : pointer to the clicked item.
+ */
+void IRStationsView::handleItemSelected()
+{
+    if (iListView)
+    {
+        int index = iListView->currentIndex().row();
+        if (index != -1)  
+        {
+            if (iIsdsClient)
+            {
+                connect(iIsdsClient, SIGNAL(operationException(IRQError)),
+                        this, SLOT(operationException(IRQError)));
+                
+                //once an item is selected, we show a dialog to prevent user from clicking the
+                //item again
+                iPlayController->createBufferingDialog(this, SLOT(cancelRequest()));
+                
+                if (iIsdsClient->isdsIsChannelBanner())
+                {
+                    iIsdsClient->isdsListenRequest(index + 1);
+                }
+                else
+                {
+                    iIsdsClient->isdsListenRequest(index);
+                }
+            }
+        }
+    }
+}
+
+/*
+ * Description : data is received from isds client. Load the data to the list widget and display
+ *               the stations view
+ */
+void IRStationsView::dataChanged()
+{
+	
+	int currentItem = 0;
+    iApplication->closeConnectingDialog();
+    iConnectTimer->stop();
+    if (iWaitDialog)
+    {
+        iWaitDialog->close();
+    }
+    
+    disconnectIsdsClient();
+    cleanupResource();
+ 
+    
+    switch (getViewParameter())
+    {
+    case EIRViewPara_SearchResults:
+        currentItem = 0;
+        break;
+    case EIRViewPara_PopularStations:
+        currentItem = iLastPopularItem;
+        break;
+    case EIRViewPara_CategoryStations:
+        currentItem = iLastSelectitem;
+        break;
+	  default:
+        break;
+    }
+    iListView->reset();
+    iListView->setCurrentIndex(iChannelModel->index(currentItem));
+    iListView->scrollTo(iChannelModel->index(currentItem));
+
+    //initialize the iconindices
+    for (int i = 0; i < iChannelModel->rowCount(); ++i)
+    {
+        if (iChannelModel->imageUrl(i) != "")
+        {
+            iIconIndexArray.append(i);
+        }
+    }
+
+    getViewManager()->activateView(this);   
+}
+
+/*
+ * Description : the preset of the selected station is received from isds client.
+ *               application is responsible for deleting old preset.
+ *               call player controler to play the station
+ * Parameters  : aPreset : the preset of the selected station            
+ */
+void IRStationsView::presetResponse(IRQPreset *aPreset)
+{
+    disconnect(iIsdsClient, SIGNAL(operationException(IRQError)),
+               this, SLOT(operationException(IRQError)));
+    
+    delete iPreset;
+    iPreset = aPreset;
+    
+    if (iPreset)
+    {
+        iPlayController->connectToChannel(iPreset,EIRQIsds);
+    }
+}
+
+
+/*
+ * Description  : slot function for operation failure. The signal is emitted by isds client
+ * Parameters   : aError : see the definition of IRQError
+ */
+void IRStationsView::operationException(IRQError aError)
+{
+    iApplication->closeConnectingDialog();
+    iPlayController->closeBufferingDialog();
+    
+    if (iWaitDialog)
+    {
+        iWaitDialog->close();
+    }
+    
+    disconnectIsdsClient();
+    QString errorString = hbTrId("txt_irad_info_failed_to_connect");
+    
+    switch (aError)
+    {   
+    case EIRQErrorNotFound:
+        errorString = hbTrId("txt_irad_info_no_matching_stations_found");
+        if (iConnectTimer->isActive())
+        {
+            iConnectTimer->stop();
+        }
+        break;
+        default:
+            break;
+    }
+    
+    popupNote(errorString, HbMessageBox::MessageTypeWarning);
+}
+
+void IRStationsView::cancelRequest()
+{
+    if( iWaitDialog )
+    {
+        iWaitDialog->close();
+    }
+    
+    if( iConnectTimer->isActive())
+    {
+        iConnectTimer->stop();
+    }    
+    iIsdsClient->isdsCancelRequest();
+    disconnectIsdsClient();
+}
+
+void IRStationsView::startConvert(int aIndex)
+{
+    QString url = iChannelModel->imageUrl(aIndex);
+ 
+    IRQPreset tempPreset;
+    tempPreset.imgUrl = url;
+    tempPreset.type = IRQPreset::EIsds;
+    
+    bool cached = iIsdsClient->isdsIsLogoCached(&tempPreset, KBitmapSize, KBitmapSize);
+    
+    if( !cached )
+    {
+        bool network = iApplication->verifyNetworkConnectivity(hbTrId("txt_irad_info_downloading_logos"));
+        if( !network )
+        {
+            //if user has clicked an item and the connection is being setup, we don't change the reason
+            if (EIR_UseNetwork_NoReason == getUseNetworkReason())
+            {
+                setUseNetworkReason(EIR_UseNetwork_DownloadLogo);
+            }
+            iConvertTimer->stop();
+            return;
+        }        
+    }
+    
+    iIsdsClient->isdsLogoDownSendRequest(&tempPreset, 0, KBitmapSize, KBitmapSize); 
+}
+
+ 
+//if the logo is downloaded ok
+void IRStationsView::presetLogoDownload(IRQPreset* aPreset)
+{
+    if( NULL == aPreset )
+    {
+        presetLogoDownloadError();
+        return;
+    } 
+    
+ 
+    delete iLogoPreset;            
+    iLogoPreset = aPreset;    
+
+    if (iLogoPreset->logoData != KNullDesC8)
+    {         
+        QPixmap tempMap;  
+        const unsigned char * logoData = iLogoPreset->logoData.Ptr();     
+        bool ret = tempMap.loadFromData(logoData, iLogoPreset->logoData.Length());
+        QIcon convertIcon(tempMap);
+       
+        if( ret )
+        {            
+            HbIcon *hbIcon = new HbIcon(convertIcon);
+            int index = iIconIndexArray[0];
+            iChannelModel->setLogo(hbIcon, index);
+            iIconIndexArray.removeAt(0);     
+            int leftCount = iIconIndexArray.count(); 
+            if( leftCount > 0 )
+            {
+                iConvertTimer->start();  
+            }
+            return;
+        }     
+    }    
+    
+    presetLogoDownloadError(); 
+}
+
+//if the logo download fails
+void IRStationsView::presetLogoDownloadError()
+{
+    // if the logo download fails, try to download the next
+    iIconIndexArray.removeAt(0);
+    int leftCount = iIconIndexArray.count();
+    if( leftCount > 0 )
+    {
+        iConvertTimer->start();
+    }    
+}
+
+void IRStationsView::cleanupResource()
+{
+    iIconIndexArray.clear();
+
+    //destroy icons in time to save memory
+    iChannelModel->clearAndDestroyLogos();
+}
+
+void IRStationsView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+    if (getViewManager()->currentView() != this)
+    {
+        return;
+    }
+    
+    switch (aEvent)
+    {
+    case EIRQNetworkConnectionEstablished:
+        if (EIR_UseNetwork_StartingView == getUseNetworkReason())
+        {
+            //when stations view is starting view(used to show popular stations), don't show wait dialog 
+            loadPopularStations(false);
+        }
+        else if(EIR_UseNetwork_DownloadLogo == getUseNetworkReason())
+        {
+            iApplication->closeConnectingDialog();
+            int leftCount = iIconIndexArray.count();
+            if(0 != leftCount)
+            {
+            	  iConvertTimer->start();
+            }            
+        }
+        else if (EIR_UseNetwork_SelectItem == getUseNetworkReason())
+        {
+            iApplication->closeConnectingDialog();
+            handleItemSelected();
+            int leftCount = iIconIndexArray.count();
+            if(0 != leftCount)
+            {
+                iConvertTimer->start();
+            }
+        }
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        
+        break;
+        
+    case EIRQConnectingCancelled:
+    case EIRQDisplayNetworkMessageNoConnectivity:
+        if (iListView->model()->rowCount() == 0)
+        {
+            getViewManager()->activateView(EIRView_MainView);
+        }
+        else
+        {
+            setCheckedAction();
+        }
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+        
+    default:
+        setCheckedAction();
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
+        break;
+    }
+}
+
+void IRStationsView::connectToIsdsClient()
+{
+    connect(iIsdsClient, SIGNAL(channelItemsChanged(QList<IRQChannelItem *> *)),
+            iChannelModel, SLOT(updateData(QList<IRQChannelItem *> *)));
+    
+    connect(iIsdsClient, SIGNAL(operationException(IRQError)),
+            this, SLOT(operationException(IRQError)));
+}
+
+void IRStationsView::disconnectIsdsClient()
+{
+    disconnect(iIsdsClient, SIGNAL(channelItemsChanged(QList<IRQChannelItem *> *)),
+               iChannelModel, SLOT(updateData(QList<IRQChannelItem *> *)));
+    
+    disconnect(iIsdsClient, SIGNAL(operationException(IRQError)),
+               this, SLOT(operationException(IRQError)));
+}
+
+void IRStationsView::createWaitDialog(QString aStr)
+{
+    if (!iWaitDialog)
+    {
+        iWaitDialog = new HbMessageBox(aStr, HbMessageBox::MessageTypeInformation);
+        //iWaitDialog->setTimeout(HbPopupBase::NoTimeout); 
+        iWaitDialog->setTimeout(HbPopup::NoTimeout); // JM: changed in w47 Orbit
+        iWaitDialog->setModal(true);
+        //iWaitDialog->setDismissPolicy(HbPopupBase::NoDismiss); 
+        iWaitDialog->setDismissPolicy(HbPopup::NoDismiss); // JM: changed in w47 Orbit
+        HbAction *cancelAction = new HbAction(hbTrId("txt_common_button_cancel"), iWaitDialog);
+        iWaitDialog->setPrimaryAction(cancelAction);
+        connect(cancelAction, SIGNAL(triggered()), this, SLOT(cancelRequest()));
+    }
+
+    iWaitDialog->exec();
+}
+
+void IRStationsView::convertAnother()
+{
+    iConvertTimer->stop();
+    int leftCount = iIconIndexArray.count();
+    
+    if(0 != leftCount)
+    {
+        startConvert(iIconIndexArray[0]);   
+    }
+}
+
+void IRStationsView::connectTimeOut()
+{    
+    iConnectTimer->stop();
+    cancelRequest();   
+    popupNote(hbTrId("txt_irad_info_connecting_timout"), HbMessageBox::MessageTypeWarning);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsymbianapplication.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2006-2007 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:  ?Description
+*
+*/
+
+#include <coemain.h>
+#include <apgwgnam.h>
+
+#include "irsymbianapplication.h"
+#include "irsymbiandocument.h"
+
+IRSymbianApplication * IRSymbianApplication::appInstance = NULL;
+
+CApaApplication *newS60Application()
+{
+    return IRSymbianApplication::getInstance();
+}
+
+IRSymbianApplication * IRSymbianApplication::getInstance()
+{
+    if (NULL == appInstance)
+    {
+        appInstance = new IRSymbianApplication;
+    }
+    
+    return appInstance;
+}
+
+bool IRSymbianApplication::getInstanceFlag() const
+{
+    return iSecondInstance;
+}
+
+IRSymbianApplication::IRSymbianApplication() : iSecondInstance(false)
+{
+    
+}
+
+CApaDocument * IRSymbianApplication::CreateDocumentL()
+{
+    return IRSymbianDocument::getInstance();
+}
+
+void IRSymbianApplication::PreDocConstructL()
+{
+    RWsSession& ws = iCoeEnv->WsSession();
+    const TInt myWgId = iCoeEnv->RootWin().Identifier();
+    TInt wgId = 0;
+    TUid uid(AppDllUid());
+    iSecondInstance = false;
+    
+    // Look for another instance of this app
+    while (wgId >= 0)
+    {
+        if (wgId && wgId != myWgId)
+        {
+            iSecondInstance = true;
+        }
+        CApaWindowGroupName::FindByAppUid(uid, ws, wgId);
+    }
+    
+    if (!iSecondInstance)
+    {
+        CAknApplication::PreDocConstructL(); 
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsymbianappui.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include "irsymbianapplication.h"
+#include "irsymbianappui.h"
+
+void IRSymbianAppui::ConstructL()
+{
+    IRSymbianApplication *app = IRSymbianApplication::getInstance();
+    if (app->getInstanceFlag())
+    {
+        BaseConstructL(ENoAppResourceFile);
+        return;
+    }
+    
+    QS60MainAppUi::ConstructL();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irsymbiandocument.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,284 @@
+/*
+* 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 <QFile>
+#include <QTextStream>
+#include <QStringList>
+#include <QLocalSocket>
+#include <qcoreapplication.h>
+
+#include "irsymbiandocument.h"
+#include "irsymbianapplication.h"
+#include "irsymbianappui.h"
+
+const QString KEqual("=");
+const QString KFile("File");
+const QString KTitle("Title");
+const QString KLength("Length");
+const QString KPlsExtension(".pls");
+const QString KM3uExtension(".m3u");
+
+IRSymbianDocument * IRSymbianDocument::documentInstance = NULL;
+
+IRPlsPlayListItem::IRPlsPlayListItem(const QString &aFile, const QString &aTitle, int aLength) :
+                                     iFile(aFile), iTitle(aTitle), iLength(aLength)
+{
+}
+
+const QString & IRPlsPlayListItem::file() const
+{
+    return iFile;
+}
+
+const QString & IRPlsPlayListItem::title() const
+{
+    return iTitle;
+}
+
+IRSymbianDocument * IRSymbianDocument::getInstance()
+{
+    if (NULL == documentInstance)
+    {
+        documentInstance = new IRSymbianDocument(*IRSymbianApplication::getInstance());
+    }
+    
+    return documentInstance;
+}
+
+bool IRSymbianDocument::isPlsAvailable() const
+{
+    return iPlsList.count() > 0;
+}
+
+int IRSymbianDocument::getNumberOfEntries() const
+{
+    return iPlsList.count();
+}
+
+IRPlsPlayListItem* IRSymbianDocument::getEntry(int aIndex)
+{
+    if (aIndex >=0 && aIndex < iPlsList.count())
+    {
+        return iPlsList.at(aIndex);
+    }
+    
+    return NULL;
+}
+
+IRSymbianDocument::IRSymbianDocument(CEikApplication &mainApplication) : QS60MainDocument(mainApplication)
+{
+    
+}
+
+IRSymbianDocument::~IRSymbianDocument()
+{
+    clearPlsList();
+}
+
+void IRSymbianDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile)
+{
+    aFileStore = NULL;
+    TBuf<255> fileName;
+    aFile.FullName(fileName);
+    TParsePtr ptr(fileName);    
+    TPtrC extension = ptr.Ext();
+    QString qExtension = QString::fromUtf16(extension.Ptr(), extension.Length());
+    
+    if (0 == qExtension.compare(KPlsExtension, Qt::CaseInsensitive) ||
+        0 == qExtension.compare(KM3uExtension, Qt::CaseInsensitive) ) 
+    { 
+        QString qFileName = QString::fromUtf16(fileName.Ptr(), fileName.Length());
+        IRSymbianApplication *symbianApp = static_cast<IRSymbianApplication*>(Application());
+        if (symbianApp->getInstanceFlag())
+        {
+            //if an instance is already running, send the file name to that instance through socket
+            QLocalSocket socket;
+            QString serverName = QCoreApplication::applicationName();
+            socket.connectToServer(serverName);
+            if (socket.waitForConnected(500)) 
+            {
+                QTextStream stream(&socket);
+                stream << qFileName;
+                stream.flush();
+                socket.waitForBytesWritten();
+            }
+        }
+        else
+        {
+            parseFile(qFileName);
+        }
+    }
+}
+
+CEikAppUi* IRSymbianDocument::CreateAppUiL()
+{
+    return new (ELeave) IRSymbianAppui;
+}
+
+void IRSymbianDocument::parseFile(const QString &aFileName)
+{
+    QString extension = aFileName.right(4);
+    
+    if (0 == extension.compare(KPlsExtension, Qt::CaseInsensitive))
+    {
+        parsePlsFile(aFileName);
+    }
+    else if (0 == extension.compare(KM3uExtension, Qt::CaseInsensitive))
+    {
+        parseM3uFile(aFileName);
+    }
+    else
+    {
+        Q_ASSERT(false);
+    }
+}
+
+void IRSymbianDocument::parsePlsFile(const QString &aFileName)
+{
+    if (aFileName.length() == 0)
+    {
+        return;
+    }
+  
+    clearPlsList();
+    
+    QFile file(aFileName);
+    if (!file.open(QIODevice::ReadOnly))
+    {
+        return;
+    }
+    
+    QTextStream stream(&file);
+    QString readStr = stream.readLine().trimmed();
+    if (readStr.compare("[playlist]", Qt::CaseInsensitive))
+    {
+        file.close();
+        return;
+    }
+    
+    readStr = stream.readLine().trimmed();
+    QStringList splitStr = readStr.split(KEqual);
+    if (splitStr.count() != 2)
+    {
+        file.close();
+        return;
+    }
+    
+    int nbEntries = 0;
+    if (0 == splitStr.first().compare("NumberOfEntries", Qt::CaseInsensitive))
+    {
+        nbEntries = splitStr.last().toInt();
+    }
+    
+    if (nbEntries <= 0)
+    {
+        file.close();
+        return;
+    }
+    
+    for (int i = 0; i < nbEntries; ++i)
+    {
+        //read file line : File=xxx     
+        QString filePath = readValue(stream, KFile);
+        if (filePath.length() == 0)
+        {
+            break;
+        }
+        
+        //read title line : Title=xxx
+        QString title = readValue(stream, KTitle);
+        if (title.length() == 0)
+        {
+            break;
+        }
+        
+        //read length line : Length=xxx
+        QString strLength = readValue(stream, KLength);
+        if (strLength.length() == 0)
+        {
+            break;
+        }
+        
+        int length = strLength.toInt();
+        
+        //all information is ready
+        if (length == -1)
+        {
+            IRPlsPlayListItem *item = new IRPlsPlayListItem(filePath, title, length);
+            iPlsList.append(item);
+        }
+    }
+    
+    file.close();
+}
+
+void IRSymbianDocument::parseM3uFile(const QString &aFileName)
+{
+    clearPlsList();
+    
+    QFile file(aFileName);
+    if (!file.open(QIODevice::ReadOnly))
+    {
+        return;
+    }
+    
+    QTextStream stream(&file);
+    QString readStr;
+    int stationCount = 0;
+    
+    while (!stream.atEnd())
+    {
+        readStr = stream.readLine().trimmed();
+        if (readStr.startsWith("http://", Qt::CaseInsensitive))
+        {
+            IRPlsPlayListItem *item = new IRPlsPlayListItem(readStr, "Station " + QString::number(++stationCount), -1);
+            iPlsList.append(item);
+        }
+    }
+    
+    file.close();
+}
+
+void IRSymbianDocument::clearPlsList()
+{
+    while (!iPlsList.isEmpty())
+    {
+        IRPlsPlayListItem *firstItem = iPlsList.takeFirst();
+        delete firstItem;
+    }
+}
+
+QString IRSymbianDocument::readValue(QTextStream &aStream, const QString &aKey)
+{
+    QString readStr;
+    QStringList splitStr;
+    
+    do
+    {
+        readStr = aStream.readLine().trimmed();    
+    }while (readStr.length() == 0 && !aStream.atEnd());
+            
+    splitStr = readStr.split(KEqual);
+    if (splitStr.count() != 2 || !splitStr.first().startsWith(aKey, Qt::CaseInsensitive))
+    {
+        return QString();
+    }
+    else
+    {
+        return splitStr.last();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irviewmanager.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,635 @@
+/*
+* 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 <hbaction.h>
+#include <QApplication>
+#include <QTimer>
+
+#include "irviewmanager.h"
+#include "irapplication.h"
+#include "irmainview.h"
+#include "ircategoryview.h"
+#include "irstationsview.h"
+#include "irnowplayingview.h"
+#include "irsearchchannelsview.h"
+#include "irfavoritesview.h"
+#include "irhistoryview.h"
+#include "irsettingsview.h"
+#include "iropenwebaddressview.h"
+#include "irsonghistoryview.h"
+#include "irplsview.h"
+
+const int KCrossLineWidth = 30; // pixel
+const double KCrossLineMinLenth = 180.0; // pixel
+
+const int KCrossLineTimeInterval = 1500; // ms
+const int KExitTimeInterval = 800; // ms, used for showing cross Line
+
+const int KCrossLineMinAngle = 15; // degree
+const int KCrossLineMaxAngle = 75; // degree
+
+static bool crossLineReady(const QLineF &aLine);
+static bool crossLineIntersected(const QLineF &aLineA, const QLineF &aLineB);
+
+enum CrossLineAngleType
+{
+    EPositiveAngle = 0,  // Line within 1,3 quadrant
+    ENegativeAngle       // Line within 2,4 quadrant
+};
+static CrossLineAngleType crossLineAngleType(const QLineF &aLine);
+
+/*
+ * Description : constructor.
+ *               add a softkey action to it in order to know that back buttion is touched.
+ */
+IRViewManager::IRViewManager() : iViewToHide(NULL),
+                                 iCrossLineAReady(false),
+                                 iCrossLineBReady(false),
+                                 iCrossLineEnable(true),
+                                 iCrossLineShowing(false),
+                                 iCrossLineTimer(NULL),
+                                 iExitTimer(NULL),
+                                 iExiting(false)
+{
+    iBackAction = new HbAction(Hb::BackNaviAction, this);
+    connect(iBackAction, SIGNAL(triggered()), this, SLOT(backToPreviousView()));
+    
+    iExitAction = new HbAction(Hb::QuitNaviAction, this);
+    connect(iExitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
+    
+    connect(this, SIGNAL(currentViewChanged(HbView *)), this, SLOT(currentViewChanged(HbView *)));
+    
+    //effect for item selection
+    HbEffect::add("irview", ":/effect/viewchangeeffects_show.fxml", "show");
+    HbEffect::add("irview", ":/effect/viewchangeeffects_hide.fxml", "hide");
+    
+    iCrossLineTimer = new QTimer(this);
+    iExitTimer = new QTimer(this);
+    iCrossLineTimer->setSingleShot(true);
+    iExitTimer->setSingleShot(true);
+    connect(iCrossLineTimer,SIGNAL(timeout()),this,SLOT(crossLineReset()));
+    connect(iExitTimer,SIGNAL(timeout()),this,SLOT(exitTimeout()));     
+}
+
+/*
+ * Description : destructor
+ */
+IRViewManager::~IRViewManager()
+{
+    HbEffect::remove("irview", ":/effect/viewchangeeffects_show.fxml", "show");
+    HbEffect::remove("irview", ":/effect/viewchangeeffects_hide.fxml", "hide");
+}
+
+/*
+ * Description : from base class IRAbstractViewManager.
+ *               get a pointer to a specified view. If the view is not created yet,
+ *               view manager can create it and then return pointer to it.
+ * Parameters  : aViewId : the view's id
+ *               aCreateIfNotExist : whether or not create a view if it doesn't exist
+ * Return      : pointer to the specified view.
+ */
+IRBaseView* IRViewManager::getView(TIRViewId aViewId, bool aCreateIfNotExist)
+{
+    int viewNumber = views().count();
+    for (int i = 0; i < viewNumber; ++i)
+    {
+        IRBaseView* addedView = static_cast<IRBaseView*>(views().at(i));
+        if (addedView && addedView->id() == aViewId)
+        {
+            return addedView;
+        }
+    }
+    
+    if (aCreateIfNotExist)
+    {
+        IRBaseView* newView = createView(iApplication, aViewId);
+        addView(newView);
+        return newView;
+    }
+    
+    return NULL;
+}
+
+/*
+ * Description : from base class IRAbstractViewManager.
+ *               Judge if a view is in the view stack.
+ * Parameters  : aViewId : the view's id
+ * Return      : true  : the view is in view stack
+ *               false : the view is not in view stack
+ */
+bool IRViewManager::isViewInStack(TIRViewId aViewId) const
+{
+    int numberOfViewsInStack = iViewStack.count();
+
+    for (int i = numberOfViewsInStack-1; i >=0 ; i--)
+    {
+        IRBaseView* view = iViewStack[i];
+        if (view)
+        {
+            if (view->id() == aViewId)
+            {
+               return true;
+            }
+        }
+    }
+    
+    return false;
+}
+
+/*
+ * Description : from base class IRAbstractViewManager.
+ *               Activate a view specified aViewId. The new view will be current view.
+ *               Old current view will be deactivated and pushed into view stack if 
+ *               aStackCurrent is true.
+ * Parameters  : aViewId : the view's id.
+ *               aStackCurrent : whether or not push current view into view stack
+ * Return      : None
+ */
+void IRViewManager::activateView(TIRViewId aViewId, bool aPushCurrentView)
+{    
+    if (isViewInStack(aViewId))
+    {
+        backToView(aViewId);
+        return;
+    }
+    
+    IRBaseView *baseView = static_cast<IRBaseView*>(currentView());
+    if (baseView && baseView->id() == aViewId)
+    {
+        baseView->updateView();
+        return;
+    }
+    
+    IRBaseView *view = getView(aViewId, true);
+    
+    if (view)
+    {
+        if (view->flag() & EViewFlag_ClearStackWhenActivate)
+        {
+            clearStack();
+        }
+        else
+        {    if (aPushCurrentView)
+             {
+                 if (baseView && !(baseView->flag() & EViewFlag_UnStackable))
+                 {
+                     iViewStack.push(baseView);
+                 }
+             }
+        
+             //deactivate current view
+             if (baseView)
+             {
+                 baseView->handleCommand(EIR_ViewCommand_DEACTIVATE, EIR_ViewCommandReason_Hide);
+             }
+        }      
+         
+        switchToNextView(view);
+    }
+}
+
+/*
+ * Description : from base class IRAbstractViewManager.
+ *               Activate a view specified by aView. The new view will be current view.
+ *               Old current view will be deactivated and pushed into view stack if 
+ *               aStackCurrent is true.
+ * Parameters  : aView : pointer to the view to be activated.
+ *               aStackCurrent : whether or not push current view into view stack
+ */
+void IRViewManager::activateView(IRBaseView *aView, bool aPushCurrentView)
+{
+    if (aView == NULL)
+    {
+        return;
+    }
+    
+    activateView(aView->id(), aPushCurrentView);
+}
+
+/*
+ * Description : back view stack until a view whose id is aViewId.
+ *               The view will become current view.
+ * Parameters  : aViewId : the view's id
+ */
+void IRViewManager::backToView(TIRViewId aViewId)
+{
+    if (aViewId == currentViewId())
+    {
+        return;
+    }
+    
+    //step 1 : back current view
+    IRBaseView *topView = static_cast<IRBaseView*>(currentView());
+    if (topView)
+    {
+        topView->handleCommand(EIR_ViewCommand_DEACTIVATE, EIR_ViewCommandReason_Back);
+    }
+    
+    //step 2 : back the views in view stack
+    while (!iViewStack.isEmpty())
+    {
+        topView = iViewStack.top();
+        if (topView->id() == aViewId)
+        {
+            break;
+        }
+        
+        topView->handleCommand(EIR_ViewCommand_DEACTIVATE, EIR_ViewCommandReason_Back);
+        iViewStack.pop();
+    }
+    
+    //step 3 : we back to the view or the view is not in view stack. Activate it.
+    if (!iViewStack.isEmpty())
+    {
+        topView = iViewStack.pop();
+        Q_ASSERT(topView->id() == aViewId);        
+        switchToNextView(topView);
+
+    }
+    else
+    {
+        //backToView(id) is called when view is in stack, it's impossible to get here
+        Q_ASSERT(false);
+    }
+}
+
+/*
+ * Description : from base class IRAbstractViewManager.
+ *               return the current view's id.
+ * Return      : current view's id. 
+ */
+TIRViewId IRViewManager::currentViewId() const
+{
+    IRBaseView *topView = static_cast<IRBaseView*>(currentView());
+    if (topView)
+    {
+        return topView->id();
+    }
+    
+    return EIRView_InvalidId;
+}
+
+/*
+ * Description : from base class IRAbstractViewManager.
+ *               handle system events reported by system event collector.
+ * Parameters  : aEvent : see the definition of TIRSystemEventType
+ * Return      : EIR_DoDefault : caller does default handling
+ *               EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRViewManager::handleSystemEvent(TIRSystemEventType aEvent)
+{
+    TIRHandleResult result = EIR_DoDefault;
+    IRBaseView *topView = static_cast<IRBaseView*>(currentView());
+    
+    if (topView)
+    {
+        result = topView->handleSystemEvent(aEvent);
+    }
+    
+    return result;
+}
+
+/*
+ * Description : push a view into the view stack by id *               
+ * Parameters  : aEvent : see the definition of TIRSystemEventType
+ * Return      : void :  there is no return value for the function
+ *                
+ */
+void IRViewManager::pushViewById(TIRViewId aViewId)
+{
+    if (isViewInStack(aViewId))
+    {     
+        return;
+    }
+    
+    IRBaseView *curView = getView(aViewId, true);
+    Q_ASSERT(curView);
+    iViewStack.push(curView);
+    
+    updateSoftkey();
+}
+ 
+
+//                                     slot functions
+
+/*
+ * Description : slot function for softkey action.
+ *               Bring user to a previous view. If view stack is empty, quit application.
+ */
+void IRViewManager::backToPreviousView()
+{
+    if(iViewStack.isEmpty())
+    {
+        return;
+    }
+
+    IRBaseView *topView = static_cast<IRBaseView*>(currentView());
+    IRBaseView *viewToShow = iViewStack.pop();
+    
+    if(viewToShow)
+    {
+        if(topView)
+        {
+            topView->handleCommand(EIR_ViewCommand_DEACTIVATE, EIR_ViewCommandReason_Back);
+        }
+        switchToNextView(viewToShow);
+    }
+}
+
+
+void IRViewManager::switchToNextView(IRBaseView *aView)
+{
+    if(NULL == aView)
+    {
+        return;
+    }
+    
+    // if this is the lauch view
+    if(views().count()<=1)
+    {
+        setCurrentView(aView,false);
+        aView->handleCommand(EIR_ViewCommand_ACTIVATED, EIR_ViewCommandReason_Show);  
+        aView->handleCommand(EIR_ViewCommand_EffectFinished, EIR_ViewCommandReason_Show);
+        return;
+    }
+
+    iViewToHide = static_cast<IRBaseView*>(currentView());
+    if(aView == iViewToHide)
+    {
+        aView->handleCommand(EIR_ViewCommand_ACTIVATED, EIR_ViewCommandReason_Show);  
+        aView->handleCommand(EIR_ViewCommand_EffectFinished, EIR_ViewCommandReason_Show);
+    }
+    else
+    {
+        setCurrentView(aView,false);
+        aView->handleCommand(EIR_ViewCommand_ACTIVATED, EIR_ViewCommandReason_Show);
+        iViewToHide->setVisible(true);
+    
+        HbEffect::start(iViewToHide, "irview", "hide", this, "hideEffectFinished");
+        HbEffect::start(aView, "irview", "show", this, "showEffectFinished");        
+    }
+}
+
+void IRViewManager::hideEffectFinished(HbEffect::EffectStatus aStatus)
+{
+    Q_UNUSED(aStatus); 
+    iViewToHide->setVisible(false);
+}
+
+void IRViewManager::showEffectFinished(HbEffect::EffectStatus aStatus)
+{
+    Q_UNUSED(aStatus);
+    IRBaseView* viewToShow = static_cast<IRBaseView*>(currentView());
+    viewToShow->handleCommand(EIR_ViewCommand_EffectFinished, EIR_ViewCommandReason_Show);
+}
+    
+
+void IRViewManager::currentViewChanged(HbView *aView)
+{
+    Q_UNUSED(aView);
+    
+    updateSoftkey();
+}
+
+/*
+ * Description : create a view specified by aViewId. A view is created only when it's 
+ *               first time requested
+ * Parameters  : aApplication : pointer to ir application object
+ *               aViewId      : the view's id
+ * Return      : pointer to the created view
+ */
+IRBaseView* IRViewManager::createView(IRApplication* aApplication, TIRViewId aViewId)
+{
+    switch (aViewId)
+    {
+        case EIRView_MainView:
+            return new IRMainView(aApplication, aViewId);
+        
+        case EIRView_CategoryView:
+            return new IRCategoryView(aApplication, aViewId);
+        
+        case EIRView_StationsView:
+        case EIRView_SearchResultView:
+            return new IRStationsView(aApplication, aViewId);
+        
+        case EIRView_PlayingView:
+            return new IRNowPlayingView(aApplication, aViewId);
+        
+        case EIRView_SearchView:
+            return new IRSearchChannelsView(aApplication, aViewId);
+        
+        case EIRView_FavoritesView:
+            return new IRFavoritesView(aApplication, aViewId);
+            
+        case EIRView_HistoryView:
+            return new IRHistoryView(aApplication, aViewId);
+            
+        case EIRView_SettingsView:
+            return new IRSettingsView(aApplication, aViewId);
+            
+        case EIRView_OpenWebAddressView:
+            return new IROpenWebAddressView(aApplication, aViewId);
+        
+        case EIRView_SongHistoryView:                        
+            return new IRSongHistoryView(aApplication, aViewId);
+            
+        case EIRView_PlsView:
+            return new IRPlsView(aApplication, aViewId);
+            
+        default:
+            break;
+    }
+    
+    return NULL;
+}
+
+void IRViewManager::clearStack()
+{
+    IRBaseView *topView = NULL;
+    
+    //deactivate and back current view if it exists
+    topView = static_cast<IRBaseView*>(currentView());
+    if (topView)
+    {
+        topView->handleCommand(EIR_ViewCommand_DEACTIVATE, EIR_ViewCommandReason_Back);
+    }
+    
+    while (!iViewStack.isEmpty())
+    {
+        topView = iViewStack.top();
+        if (topView)
+        {
+            topView->handleCommand(EIR_ViewCommand_DEACTIVATE, EIR_ViewCommandReason_Back);
+        }
+        iViewStack.pop();
+    }
+}
+
+void IRViewManager::updateSoftkey()
+{
+    HbView *topView = currentView();
+    if (topView)
+    {
+        if (iViewStack.isEmpty())
+        {
+            topView->setNavigationAction(iExitAction);
+        }
+        else
+        {
+            topView->setNavigationAction(iBackAction);
+        }
+    }
+}
+
+void IRViewManager::mousePressEvent(QMouseEvent *aEvent)
+{
+    if(iCrossLineEnable)
+    {
+        if(iCrossLineAReady)
+        {
+            iCrossLineB.setP1(aEvent->posF());
+        }
+        else
+        {
+            iCrossLineA.setP1(aEvent->posF());
+        }
+    }
+
+    HbMainWindow::mousePressEvent(aEvent);
+}
+
+void IRViewManager::mouseReleaseEvent(QMouseEvent *aEvent)
+{
+    if(iCrossLineEnable)
+    {    
+        if(iCrossLineAReady)
+        {
+            iCrossLineTimer->stop();
+
+            iCrossLineB.setP2(aEvent->posF());
+            iCrossLineBReady = crossLineReady(iCrossLineB);
+    
+            if(iCrossLineBReady && readyToQuit())
+            {   
+                iCrossLineEnable = false;
+                iCrossLineShowing = true;              
+                viewport()->repaint(); 
+                iExitTimer->start(KExitTimeInterval);       
+            }
+            else
+            {
+                crossLineReset();
+            }
+        }
+        else
+        {
+            iCrossLineA.setP2(aEvent->posF());
+            iCrossLineAReady = crossLineReady(iCrossLineA);
+    
+            if(iCrossLineAReady)
+            {
+                iCrossLineTimer->stop();
+                iCrossLineTimer->start(KCrossLineTimeInterval);
+            }
+        }
+    }
+    
+    HbMainWindow::mouseReleaseEvent(aEvent);
+}
+
+bool IRViewManager::readyToQuit()
+{
+    if(iCrossLineAReady && iCrossLineBReady)
+    {
+        return crossLineIntersected(iCrossLineA,iCrossLineB);
+    }
+
+    return false;
+}
+
+bool crossLineIntersected(const QLineF &aLineA, const QLineF &aLineB)
+{
+    if(crossLineAngleType(aLineA) != crossLineAngleType(aLineB))
+    {
+        return QLineF::BoundedIntersection == aLineA.intersect(aLineB,NULL);
+    }
+
+    return false;
+}
+
+void IRViewManager::paintEvent(QPaintEvent *aEvent)
+{
+    HbMainWindow::paintEvent(aEvent);
+
+    if(iCrossLineShowing)
+    {
+        QPainter painter(viewport());
+        painter.setPen(QPen(QColor(225,225,225,200),KCrossLineWidth));	
+        painter.drawLine(iCrossLineA);
+		painter.drawLine(iCrossLineB);
+    }
+}
+
+void IRViewManager::crossLineReset()
+{
+    iCrossLineAReady = false;
+    iCrossLineBReady = false;
+    iCrossLineShowing = false;
+}
+
+void IRViewManager::exitTimeout()
+{
+    crossLineReset();
+    viewport()->repaint();
+    HbMessageBox exitNote(hbTrId("txt_common_info_exiting"),
+            HbMessageBox::MessageTypeInformation);
+    exitNote.setPrimaryAction(NULL);
+    exitNote.exec();
+    qApp->quit();
+    iExiting = true;
+}
+
+bool IRViewManager::isExiting() const
+{
+    return iExiting;
+}
+
+
+
+CrossLineAngleType crossLineAngleType(const QLineF &aLine)
+{
+    int linePos = aLine.angle() / 90;
+    if( 0==linePos || 2==linePos )
+    {
+        return EPositiveAngle;
+    }
+    else
+    {
+        return ENegativeAngle;
+    }
+}
+
+bool crossLineReady(const QLineF &aLine)
+{
+    if(aLine.length()> KCrossLineMinLenth)
+    {
+        int lineDegree = qRound(aLine.angle()) % 90;
+        return (lineDegree<=KCrossLineMaxAngle) && (lineDegree>=KCrossLineMinAngle) ? true : false;
+    }
+    return false;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/main.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -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:
+*
+*/
+
+#include <hbapplication.h>
+#include <hbdevicemessagebox.h>
+#include "irviewmanager.h"
+#include "irapplication.h"
+#include "irqdiskspacewatcher.h"
+#include "irmemorycollector.h"
+#include "irsymbianapplication.h"
+#include "irqlogger.h"
+
+bool isDiskSpaceLow();
+
+int main(int argc, char* argv[])
+{
+    INSTALL_MESSAGE_HANDLER;
+    
+    QCoreApplication::setApplicationName("InternetRadioApplication");
+    HbApplication app(newS60Application, argc, argv);
+    if (IRSymbianApplication::getInstance()->getInstanceFlag())
+    {
+        return 0;
+    }
+    
+    if(isDiskSpaceLow())
+    {       
+        return 0;
+    }  
+
+    IRViewManager *mainWindow = new IRViewManager;
+    
+    mainWindow->show();
+    
+    //when constructing irapp, OpenFileL() has already been called
+    IRApplication *irapp = new IRApplication(mainWindow);
+    
+    IRMemoryCollector mc(irapp);
+    
+    if(!mainWindow->isExiting())
+    {
+        return app.exec();
+    }
+	return 0;
+}
+
+bool isDiskSpaceLow()
+{
+    IRQDiskSpaceWatcher diskSpaceWatcher;
+    bool ret = diskSpaceWatcher.isBelowCriticalLevel();
+    if(ret)
+    {
+        HbDeviceMessageBox messageBox(hbTrId("txt_irad_info_no_space_on_c_drive_internet_radio_closed"),
+                HbMessageBox::MessageTypeWarning);
+        messageBox.setTimeout(HbPopup::NoTimeout);
+        messageBox.exec();
+    }
+    return ret;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/ui.pro	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,177 @@
+# 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 <platform_paths.hrh>
+include(../common.pri)
+
+TEMPLATE = app
+TARGET = internet_radio_10_1
+TARGET.CAPABILITY += NetworkServices  AllFiles  ReadDeviceData WriteDeviceData ReadUserData WriteUserData
+
+MOC_DIR = moc
+DEPENDPATH = src
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(http)}
+INCLUDEPATH += $${MW_LAYER_PUBLIC_EXPORT_PATH(http)}
+
+INCLUDEPATH += inc \
+               ..\irqisdsclient\inc \
+               ..\irqmediaplayer\inc \
+               ..\irqcommon\inc \
+               ..\irqmusicshop\inc \
+               ..\irqnwkinfoobserver\inc \
+               ..\irqstatisticsreport\inc \
+               ..\irqfavoritesdb\inc \
+               ..\irqnetworkcontroller\inc \
+               ..\irqsonghistory\inc \
+               ..\irqsettings\inc    \
+               ..\irqstationexporter\inc \
+               ..\irqdiskspacewatcher\inc \	 
+               ..\irqlogger\inc \                      
+               ..\..\internetradio2.0\uiinc     #needed by irsystemeventobserver.h
+
+CONFIG += hb
+QT += sql
+ 
+exists($${OS_LAYER_PLATFORM_EXPORT_PATH(qt/translations/internet_radio_10_1*.ts)}) {           
+       TRANSLATIONS = internet_radio_10_1.ts
+       message( "LOALIZATION IS TURNED ON" )   
+       DEFINES += LOCALIZATION     
+}
+
+
+LIBS += -lirqnetworkcontroller \         
+        -lirqisdsclient \
+        -lirqmediaplayer \
+        -lirqutility \
+        -lirqfavorites \
+        -lirqsonghistory \
+        -lirqsettings \	    
+        -lremconcoreapi \
+        -lremconinterfacebase \
+        -lirqmusicshop \
+        -lirqnwkinfoobserver \
+        -lirqstatisticsreport \
+        -lirqdiskspacewatcher \	
+        -lirqlogger \
+        -lirqstationexporter
+	
+symbian{
+  TARGET.UID3 = 0xE28364bb
+  TARGET.EPOCHEAPSIZE = 0x020000 0x2000000
+  TARGET.VID = VID_DEFAULT
+  ICON = resources/irqradio.svg
+  datatype_list = "datatype_list={DATATYPE{priority=EDataTypePriorityHigh;type=\"audio/x-scpls\";}," \
+                                 "DATATYPE{priority=EDataTypePriorityHigh;type=\"audio/x-mpegurl\";}" \
+                  "};"
+  RSS_RULES += datatype_list 
+}
+
+#input
+#header files list
+HEADERS += inc\irapplication.h \
+           inc\irabstractviewmanager.h \ 
+           inc\irviewmanager.h \
+           inc\irbaseview.h \
+           inc\irmainview.h \
+           inc\irmainmodel.h \
+           inc\ircategoryview.h \      
+           inc\irstationsview.h \  
+           inc\irnowplayingview.h \
+           inc\irnowplayingcontainer.h \
+           inc\irplaycontroller.h \
+           inc\ircategorymodel.h \
+           inc\irchannelmodel.h \
+           inc\irabstractlistviewbase.h \
+           inc\irbannerlabel.h \
+           inc\irfavoritesview.h \
+           inc\irfavoritesmodel.h \
+           inc\irhistoryview.h \
+           inc\irsonghistoryview.h \
+           inc\irsettingsview.h \
+           inc\irlastplayedstationinfo.h \
+           inc\irstationdetailscontainer.h \
+           inc\iropenwebaddressview.h \
+           inc\irhistorymodel.h \
+           inc\irsonghistorymodel.h \
+           inc\irsearchcriteriadb.h \
+           inc\irsearchchannelsview.h \
+           inc\irdocumentloader.h \
+           inc\ircombobox.h \
+           inc\irlineeditor.h \
+           inc\irmediakeyobserver.h \
+           inc\irsymbianapplication.h \
+           inc\irsymbiandocument.h \
+           inc\irsymbianappui.h \
+           inc\irplsmodel.h \
+           inc\irplsview.h \
+           inc\irmemorycollector.h
+           
+#source files list
+SOURCES += main.cpp  \
+           irapplication.cpp \
+           irabstractviewmanager.cpp \
+           irviewmanager.cpp \
+           irbaseview.cpp \
+           irmainview.cpp \
+           irmainmodel.cpp \
+           ircategoryview.cpp \
+           irstationsview.cpp \
+           irnowplayingview.cpp \
+           irnowplayingcontainer.cpp \
+           irplaycontroller.cpp \
+           ircategorymodel.cpp \
+           irchannelmodel.cpp \
+           irabstractlistviewbase.cpp \
+           irbannerlabel.cpp \
+           irfavoritesview.cpp \
+           irfavoritesmodel.cpp \
+           irhistoryview.cpp \
+           irsonghistoryview.cpp \
+           irsettingsview.cpp \
+           irlastplayedstationinfo.cpp \
+           irstationdetailscontainer.cpp \
+           iropenwebaddressview.cpp \
+           irhistorymodel.cpp \
+           irsonghistorymodel.cpp \
+           irsearchcriteriadb.cpp \
+           irsearchchannelsview.cpp \
+           irdocumentloader.cpp \
+           ircombobox.cpp \
+           irlineeditor.cpp \
+           irmediakeyobserver.cpp \
+           irsymbianapplication.cpp \
+           irsymbiandocument.cpp \
+           irsymbianappui.cpp \
+           irplsmodel.cpp \
+           irplsview.cpp \
+           irmemorycollector.cpp
+          	   
+#resource
+RESOURCES += resources/irui.qrc
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+!exists( $(RVCT22BIN) ) {       
+        !exists( $(RVCT31BIN) ) {
+           exists( $(RVCT40BIN) ) {       
+               QMAKE_CFLAGS.ARMCC += --import_all_vtbl   
+           }           
+        }
+ }
+ 
+ 
+ 
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_5_1.dtd	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,88 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  proFile CDATA #IMPLIED
+  qmakeArgs CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>