Revision: 201025
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 14:07:20 +0300
changeset 12 608f67c22514
parent 11 f683e24efca3
child 13 c9471d26c7f2
child 14 896e9dbc5f19
Revision: 201025 Kit: 2010127
internetradio2.0/dataproviderinc/irdataprovider.h
internetradio2.0/dataproviderinc/irdataproviderconstants.h
internetradio2.0/dataprovidersrc/irdataprovider.cpp
internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp
internetradio2.0/favoritesdbinc/irfavoritesdb.h
internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp
internetradio2.0/group/irdataprovider.mmp
internetradio2.0/group/irfavoritesdb.mmp
internetradio2.0/group/presetplugin.mmp
internetradio2.0/presetplugininc/irpreset.h
internetradio2.0/sessionloginc/irsessionlogger.h
presetserver/clientinc/pspresetinterface.h
presetserver/clientinc/psserv.h
presetserver/clientinc/psservnotifier.h
presetserver/clientinc/psservsession.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/group/bld.inf
presetserver/group/psclient.mmp
presetserver/group/psserver.mmp
presetserver/include/pscommon.h
presetserver/serverinc/psserver.h
presetserver/serversrc/Psdatabase.cpp
presetserver/serversrc/Psdatabasecleanup.cpp
presetserver/serversrc/Psserver.cpp
presetserver/serversrc/Pssession.cpp
qtinternetradio/all.pro
qtinternetradio/common.pri
qtinternetradio/irhswidgetplugin/inc/irhswidget.h
qtinternetradio/irhswidgetplugin/inc/irhswidgetmetadatarow.h
qtinternetradio/irhswidgetplugin/inc/irhswidgettitlerow.h
qtinternetradio/irhswidgetplugin/inc/irhswidgetuiloader.h
qtinternetradio/irhswidgetplugin/inc/irserviceclient.h
qtinternetradio/irhswidgetplugin/irhswidgetplugin.pro
qtinternetradio/irhswidgetplugin/resource/irhswidget.docml
qtinternetradio/irhswidgetplugin/resource/irhswidgetmetadatarow.docml
qtinternetradio/irhswidgetplugin/resource/irhswidgettitlerow.docml
qtinternetradio/irhswidgetplugin/resources.qrc
qtinternetradio/irhswidgetplugin/src/irhswidget.cpp
qtinternetradio/irhswidgetplugin/src/irhswidgetmetadatarow.cpp
qtinternetradio/irhswidgetplugin/src/irhswidgettitlerow.cpp
qtinternetradio/irhswidgetplugin/src/irhswidgetuiloader.cpp
qtinternetradio/irhswidgetplugin/src/irserviceclient.cpp
qtinternetradio/irqcommon/inc/irservicedata.h
qtinternetradio/irqcommon/inc/irservicedef.h
qtinternetradio/irqcommon/irqcommon.pro
qtinternetradio/irqfavoritesdb/inc/irqfavoritesdb_p.h
qtinternetradio/irqfavoritesdb/irqfavoritesdb.pro
qtinternetradio/irqisdsclient/irqisdsclient.pro
qtinternetradio/rom/qtinternetradio.iby
qtinternetradio/ui/inc/irapplication.h
qtinternetradio/ui/inc/ircontrolservice.h
qtinternetradio/ui/inc/irfavoritesview.h
qtinternetradio/ui/inc/irhistoryview.h
qtinternetradio/ui/inc/irmainview.h
qtinternetradio/ui/inc/irmonitorservice.h
qtinternetradio/ui/inc/irnowplayingview.h
qtinternetradio/ui/inc/irplaycontroller.h
qtinternetradio/ui/inc/irplsview.h
qtinternetradio/ui/inc/irsearchchannelsview.h
qtinternetradio/ui/inc/irsonghistoryview.h
qtinternetradio/ui/inc/irstationsview.h
qtinternetradio/ui/inc/iruidefines.h
qtinternetradio/ui/inc/irviewmanager.h
qtinternetradio/ui/resources/layout/searchchannelsview.docml
qtinternetradio/ui/resources/splashscreen/internet_radio_default.docml
qtinternetradio/ui/resources/splashscreen/internet_radio_default.splashml
qtinternetradio/ui/resources/splashscreen/internet_radio_normal.docml
qtinternetradio/ui/resources/splashscreen/internet_radio_normal.splashml
qtinternetradio/ui/resources/splashscreen/internet_radio_nowplaying.docml
qtinternetradio/ui/resources/splashscreen/internet_radio_nowplaying.splashml
qtinternetradio/ui/src/irabstractlistviewbase.cpp
qtinternetradio/ui/src/irapplication.cpp
qtinternetradio/ui/src/ircategoryview.cpp
qtinternetradio/ui/src/ircontrolservice.cpp
qtinternetradio/ui/src/irfavoritesview.cpp
qtinternetradio/ui/src/irhistoryview.cpp
qtinternetradio/ui/src/irlastplayedstationinfo.cpp
qtinternetradio/ui/src/irmainmodel.cpp
qtinternetradio/ui/src/irmainview.cpp
qtinternetradio/ui/src/irmemorycollector.cpp
qtinternetradio/ui/src/irmonitorservice.cpp
qtinternetradio/ui/src/irnowplayingview.cpp
qtinternetradio/ui/src/iropenwebaddressview.cpp
qtinternetradio/ui/src/irplaycontroller.cpp
qtinternetradio/ui/src/irplaylist.cpp
qtinternetradio/ui/src/irplsview.cpp
qtinternetradio/ui/src/irsearchchannelsview.cpp
qtinternetradio/ui/src/irsettingsview.cpp
qtinternetradio/ui/src/irsonghistorymodel.cpp
qtinternetradio/ui/src/irsonghistoryview.cpp
qtinternetradio/ui/src/irstationsview.cpp
qtinternetradio/ui/src/irviewmanager.cpp
qtinternetradio/ui/src/main.cpp
qtinternetradio/ui/ui.pro
--- a/internetradio2.0/dataproviderinc/irdataprovider.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/dataproviderinc/irdataprovider.h	Tue Jul 06 14:07:20 2010 +0300
@@ -222,6 +222,13 @@
 	 */
 	void SetOffsetSeconds( const TTime& aTime );
 
+    /**
+	 *  CIRDataProvider::UnzipFileL()
+	 *  Unzip the gz file to xml file
+	 *  @param aOutputFile out put file
+	 */
+    void UnzipFileL( const TDesC& aOutputFile );
+
 private:
 
 	/**
@@ -248,6 +255,11 @@
     */
     RFile iFile;
 
+    /**
+     * Name of the Xml Gz file to be created
+     */
+    TFileName iXmlGzFilePath;
+
    	/**
 	 * Name of the Xml file to be created
 	 */
--- a/internetradio2.0/dataproviderinc/irdataproviderconstants.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/dataproviderinc/irdataproviderconstants.h	Tue Jul 06 14:07:20 2010 +0300
@@ -34,6 +34,8 @@
 _LIT8( KAcceptCharset, "iso-8859-1, utf-8, iso-10646-ucs-2; q=0.6" );
 // Used to specify the Accept Language
 _LIT8( KAcceptLanguage, "en" );
+// Used to specify the Accept encoding
+_LIT8( KAcceptEncoding, "gzip" );
 // Some texts for header output
 _LIT( KDPColon, ": " );
 // Default Content-Type
--- a/internetradio2.0/dataprovidersrc/irdataprovider.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/dataprovidersrc/irdataprovider.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -15,6 +15,9 @@
 *
 */
 
+#include <ezgzip.h>
+#include <bautils.h>
+#include <f32file.h>
 
 #include "irdataprovider.h"
 #include "irdataproviderobserver.h"
@@ -23,6 +26,9 @@
 #include "irhttprequestdata.h"
 #include "irsettings.h"
 
+_LIT( KGzXmlFile, "iSdsResponse.xml.gz" );
+_LIT( KXmlFile, "iSdsResponse.xml" );
+
 // ---------------------------------------------------------------------------
 //  CIRDataProvider::NewL(MIRDataProviderObserver& aObserver)
 //  Creates instance of CIRDataProvider.
@@ -110,7 +116,7 @@
 
 
     // Create or replace the file used to store xml response from iSDS
-    User::LeaveIfError(iFile.Replace( iFsSession, iXmlFilePath, EFileWrite ));
+    User::LeaveIfError(iFile.Replace( iFsSession, iXmlGzFilePath, EFileWrite ));
     iHttpDataProvider->CancelTransaction();
 
     TInt err = iHttpDataProvider->IssueHttpRequestL( aRequestObject );
@@ -179,6 +185,10 @@
     iFile.Close();
     iDataProviderTimer->Cancel();
 
+    // unzip the gz file
+    TRAP_IGNORE( UnzipFileL( iXmlFilePath ) );
+    // delete the original gz file
+    BaflUtils::DeleteFile( iFsSession, iXmlGzFilePath );
     // 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.
@@ -341,8 +351,7 @@
 void CIRDataProvider::ConstructL() // second-phase constructor
     {
     IRLOG_DEBUG( "CIRDataProvider::ConstructL - Entering" );
-    _LIT( KXmlFile, "iSdsResponse.xml" );
-    ConstructL(KXmlFile);
+    ConstructL( KGzXmlFile );
     iHttpDataProvider->iSetNonUAProfUserAgent = EFalse;
     IRLOG_DEBUG( "CIRDataProvider::ConstructL - Exiting" );
     }
@@ -359,8 +368,10 @@
     iDataProviderTimer = CIRDataProviderTimer::NewL( EPriorityHigh,  *this );
     User::LeaveIfError(iFsSession.Connect());
     iIRSettings = CIRSettings::OpenL();
-    iXmlFilePath = iIRSettings->PrivatePath();
-    iXmlFilePath.Append( aFileName );
+    iXmlGzFilePath = iIRSettings->PrivatePath();
+    iXmlFilePath = iXmlGzFilePath;
+    iXmlGzFilePath.Append( aFileName );
+    iXmlFilePath.Append( KXmlFile );
     iTimeOut = iIRSettings->GetTimeOut();
     iHttpDataProvider->iSetNonUAProfUserAgent = ETrue;
     IRLOG_DEBUG( "CIRDataProvider::ConstructL(const TDesC &aFileName) - Exiting." );
@@ -430,4 +441,25 @@
 	IRLOG_DEBUG( "CIRDataProvider::SetOffsetSeconds - Exiting." );
 	}
 
+// ---------------------------------------------------------------------------
+//  CIRDataProvider::UnzipFileL
+// ---------------------------------------------------------------------------
+//
+void CIRDataProvider::UnzipFileL( const TDesC& aOutputFile )
+    {
+    IRLOG_DEBUG( "CIRDataProvider::UnzipFileL - Enter." );
+    RFile outputFile;
+    CleanupClosePushL( outputFile );
+    User::LeaveIfError( outputFile.Replace( iFsSession, aOutputFile, 
+                        EFileStream | EFileWrite | EFileShareExclusive ) );
+    CEZGZipToFile* gZip = 
+        CEZGZipToFile::NewLC( iFsSession, iXmlGzFilePath, outputFile );
 
+    while ( gZip->InflateL() )
+        {
+        // unzip the gz file, quit when finish
+        }
+    CleanupStack::PopAndDestroy( gZip );
+    CleanupStack::PopAndDestroy( &outputFile );
+    IRLOG_DEBUG( "CIRDataProvider::UnzipFileL - Exit." );
+    }
--- a/internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/dataprovidersrc/irhttpdataprovider.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -667,6 +667,12 @@
         IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptLanguage = %S", &logstr );
         }
 
+    // Add Accept-Encoding: gzip HTTP request header. The server will use compression to improve data
+	// transfer speed.
+    SetHeaderL( header, HTTP::EAcceptEncoding, KAcceptEncoding );
+    logstr.Copy(KAcceptEncoding);
+    IRLOG_DEBUG2( "CIRHttpDataProvider::BuildHeadersL - HTTP::EAcceptEncoding = %S", &logstr );
+
     // Set the If-Modified-Since header if required
    if ( aRequestInfo.isIfModifiedSet )
         {
--- a/internetradio2.0/favoritesdbinc/irfavoritesdb.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/favoritesdbinc/irfavoritesdb.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,8 +19,8 @@
 #ifndef  IRFAVORITESDB_H
 #define  IRFAVORITESDB_H
 
-#include <pspresetobserver.h>
-#include <psserv.h>
+#include "pspresetobserver.h"
+#include "psserv.h"
 
 class CIRIsdsPreset;
 class CIRPreset;
--- a/internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,9 +16,8 @@
 */
 
 
-#include <pspresetnotifier.h>
-#include <pstransaction.h>
-
+#include "pspresetnotifier.h"
+#include "pstransaction.h"
 #include "irdebug.h"
 #include "irfavoritesdb.h"
 #include "irisdspreset.h"
--- a/internetradio2.0/group/irdataprovider.mmp	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/group/irdataprovider.mmp	Tue Jul 06 14:07:20 2010 +0300
@@ -41,6 +41,9 @@
 USERINCLUDE    ../presetplugininc
 USERINCLUDE    ../cachemgmtinc
 USERINCLUDE    ../sessionloginc
+USERINCLUDE    ../../presetserver/include
+USERINCLUDE    ../../presetserver/clientinc
+USERINCLUDE    ../../presetserver/serverinc
 
 APP_LAYER_SYSTEMINCLUDE
 // TODO will be removed after the changes of /epoc32/include
@@ -85,7 +88,7 @@
 LIBRARY pops.lib
 LIBRARY responsemsg.lib
 LIBRARY smts.lib
-
+LIBRARY ezlib.lib
 
 //test end
 
--- a/internetradio2.0/group/irfavoritesdb.mmp	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/group/irfavoritesdb.mmp	Tue Jul 06 14:07:20 2010 +0300
@@ -32,7 +32,9 @@
 USERINCLUDE     ../datastructuresinc
 USERINCLUDE     ../presetplugininc
 USERINCLUDE     ../xmlparserinc
-
+USERINCLUDE     ../../presetserver/include
+USERINCLUDE     ../../presetserver/clientinc
+USERINCLUDE     ../../presetserver/serverinc
 
 
 // Default system include paths for application layer modules.
--- a/internetradio2.0/group/presetplugin.mmp	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/group/presetplugin.mmp	Tue Jul 06 14:07:20 2010 +0300
@@ -33,6 +33,8 @@
 USERINCLUDE   ../presetplugininc
 USERINCLUDE   ../include
 USERINCLUDE   ../datastructuresinc
+USERINCLUDE   ../../presetserver/clientinc
+USERINCLUDE   ../../presetserver/serverinc
 
 // Default system include paths for application layer modules.
 APP_LAYER_SYSTEMINCLUDE
--- a/internetradio2.0/presetplugininc/irpreset.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/presetplugininc/irpreset.h	Tue Jul 06 14:07:20 2010 +0300
@@ -20,7 +20,8 @@
 #define IRPRESET_H
 
 #include <badesca.h>
-#include <pspresetinterface.h>
+
+#include "pspresetinterface.h"
 
 class CIRIsdsPreset;
 class CIRChannelServerUrl;
--- a/internetradio2.0/sessionloginc/irsessionlogger.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/internetradio2.0/sessionloginc/irsessionlogger.h	Tue Jul 06 14:07:20 2010 +0300
@@ -460,7 +460,10 @@
 	/**
 	* unicode buffer
 	*/ 
-	TBuf<256> iUniCodeBuf;  //Unicode
+	//"MAX_URL_CHARACTOR_NUMBER = 255" is defined 
+	// in iropenwebaddressview.cpp, it is 8bit len char.
+	// the memory should be double when tranfer 8bit to 16bit.  
+	TBuf<512> iUniCodeBuf;  //Unicode
 	
 	/**
 	* utf 8 buffer
--- a/presetserver/clientinc/pspresetinterface.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientinc/pspresetinterface.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,8 +19,8 @@
 #ifndef C_CPSPRESETINTERFACE_H
 #define C_CPSPRESETINTERFACE_H
 
-#include <pspresetobserver.h>
-#include <pstransaction.h>
+#include "pspresetobserver.h"
+#include "pstransaction.h"
 
 const TUid KPSPresetInterface = { 0x10281CB6 }; /**< The ECOM interface UID for preset plugins. */
 
--- a/presetserver/clientinc/psserv.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientinc/psserv.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,9 +19,10 @@
 #ifndef R_RPSSERV_H
 #define R_RPSSERV_H
 
-#include <pscommon.h>
 #include <s32mem.h>
 
+#include "pscommon.h"
+
 class CPSPresetInterface;
 
 /**
--- a/presetserver/clientinc/psservnotifier.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientinc/psservnotifier.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,8 +19,8 @@
 #ifndef R_RPSPRESETNOTIFIER_H
 #define R_RPSPRESETNOTIFIER_H
 
-#include <pscommon.h>
-#include <pspresetobserver.h>
+#include "pscommon.h"
+#include "pspresetobserver.h"
 
 class RPSServ;
 
--- a/presetserver/clientinc/psservsession.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientinc/psservsession.h	Tue Jul 06 14:07:20 2010 +0300
@@ -20,7 +20,8 @@
 #define R_RPSSERVSESSION_H
 
 #include <e32base.h>
-#include <pscommon.h>
+
+#include "pscommon.h"
 
 class RPSServ;
 
--- a/presetserver/clientsrc/Pspresetinterface.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientsrc/Pspresetinterface.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -17,12 +17,12 @@
 
 
 #include <ecom.h>
-#include <pscommon.h>
-#include <pspresetinterface.h>
-#include <pspresetnotifier.h>
-#include <pstransaction.h>
 #include <s32mem.h>
 
+#include "pscommon.h"
+#include "pspresetinterface.h"
+#include "pspresetnotifier.h"
+#include "pstransaction.h"
 #include "psdebug.h"
 #include "psservsession.h"
 
--- a/presetserver/clientsrc/Pspresetnotifier.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientsrc/Pspresetnotifier.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,9 +16,8 @@
 */
 
 
-#include <pspresetnotifier.h>
-#include <psserv.h>
-
+#include "pspresetnotifier.h"
+#include "psserv.h"
 #include "psservnotifier.h"
 
 const TInt KPSDefaultNotifierPriority = CActive::EPriorityLow; // Priority of the non-preset notifiers.
--- a/presetserver/clientsrc/Psserv.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientsrc/Psserv.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,8 +16,8 @@
 */
 
 
-#include <pspresetinterface.h>
-#include <psserv.h>
+#include "pspresetinterface.h"
+#include "psserv.h"
 
 // ======== LOCAL FUNCTIONS ========
 
--- a/presetserver/clientsrc/Psservnotifier.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientsrc/Psservnotifier.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,9 +16,8 @@
 */
 
 
-#include <pscommon.h>
-#include <psserv.h>
-
+#include "pscommon.h"
+#include "psserv.h"
 #include "psservnotifier.h"
 
 // ======== LOCAL FUNCTIONS ========
--- a/presetserver/clientsrc/Psservsession.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientsrc/Psservsession.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,9 +16,8 @@
 */
 
 
-#include <pscommon.h>
-#include <psserv.h>
-
+#include "pscommon.h"
+#include "psserv.h"
 #include "psservsession.h"
 
 // ---------------------------------------------------------------------------
--- a/presetserver/clientsrc/Pstransaction.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/clientsrc/Pstransaction.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-#include <pstransaction.h>
+#include "pstransaction.h"
 
 // ---------------------------------------------------------------------------
 // Two-phased constructor.
--- a/presetserver/group/bld.inf	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/group/bld.inf	Tue Jul 06 14:07:20 2010 +0300
@@ -21,14 +21,6 @@
 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)
--- a/presetserver/group/psclient.mmp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/group/psclient.mmp	Tue Jul 06 14:07:20 2010 +0300
@@ -40,6 +40,7 @@
 SOURCE                  Pstransaction.cpp
 
 USERINCLUDE             ../clientinc
+USERINCLUDE             ../serverinc
 USERINCLUDE             ../include
 
 APP_LAYER_SYSTEMINCLUDE
--- a/presetserver/group/psserver.mmp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/group/psserver.mmp	Tue Jul 06 14:07:20 2010 +0300
@@ -46,6 +46,7 @@
 
 USERINCLUDE             ../include
 USERINCLUDE             ../serverinc
+USERINCLUDE             ../clientinc
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE   OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
--- a/presetserver/include/pscommon.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/include/pscommon.h	Tue Jul 06 14:07:20 2010 +0300
@@ -20,7 +20,8 @@
 #define PSCOMMON_H
 
 #include <e32std.h>
-#include <pspresetobserver.h>
+
+#include "pspresetobserver.h"
 
 const TInt KPSVersionMajor = 1;     /**< Major version number of the server. */
 const TInt KPSVersionMinor = 0;     /**< Minor version number of the server. */
--- a/presetserver/serverinc/psserver.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/serverinc/psserver.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,9 +19,8 @@
 #ifndef C_CPSSERVER_H
 #define C_CPSSERVER_H
 
-#include <pscommon.h>
-#include <pspresetobserver.h>
-
+#include "pscommon.h"
+#include "pspresetobserver.h"
 #include "psdatabase.h"
 #include "pspropertyobserver.h"
 
--- a/presetserver/serversrc/Psdatabase.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/serversrc/Psdatabase.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -17,8 +17,8 @@
 
 
 #include <bautils.h>
-#include <pscommon.h>
 
+#include "pscommon.h"
 #include "psdebug.h"
 #include "pspendingpreset.h"
 #include "psdatabase.h"
--- a/presetserver/serversrc/Psdatabasecleanup.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/serversrc/Psdatabasecleanup.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -17,8 +17,8 @@
 
 
 #include <ecom.h>
-#include <pspresetinterface.h>
 
+#include "pspresetinterface.h"
 #include "psdatabase.h"
 #include "psdatabasecleanup.h"
 #include "psdebug.h"
--- a/presetserver/serversrc/Psserver.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/serversrc/Psserver.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -15,10 +15,9 @@
 *
 */
 
-
-#include <pscommon.h>
 #include <sbdefs.h>
 
+#include "pscommon.h"
 #include "psdatabasecleanup.h"
 #include "psdebug.h"
 #include "pspendingpreset.h"
--- a/presetserver/serversrc/Pssession.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/presetserver/serversrc/Pssession.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -15,10 +15,9 @@
 *
 */
 
-
-#include <pscommon.h>
 #include <s32mem.h>
 
+#include "pscommon.h"
 #include "psdebug.h"
 #include "psserver.h"
 #include "pssession.h"
--- a/qtinternetradio/all.pro	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/all.pro	Tue Jul 06 14:07:20 2010 +0300
@@ -37,7 +37,8 @@
           irqnetworkcontroller \
           irqsonghistory \
           irqnwkinfoobserver \
-          irqstatisticsreporter \          
+          irqstatisticsreporter \ 
+          irhswidgetplugin \         
           ui 
           
 SYMBIAN_PLATFORMS = WINSCW ARMV5
--- a/qtinternetradio/common.pri	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/common.pri	Tue Jul 06 14:07:20 2010 +0300
@@ -17,6 +17,7 @@
 DEFINES += USER_DEFINED_ISDSURL
 #DEFINES += NOWPLAYING_VIEW_OPTION_B
 #DEFINES += ADV_ENABLED
+DEFINES += HS_WIDGET_ENABLED
 
 # ##########################################################
 # Logging flag definitions
--- a/qtinternetradio/irhswidgetplugin/inc/irhswidget.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irhswidgetplugin/inc/irhswidget.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,15 +19,16 @@
 #define IRHSWIDGET_H
 
 // System includes
-#include <QObject>
 #include <hbwidget.h>
-#include <hbicon.h>
 
 // User includes
 #include "irservicedef.h"
 
 // Forward declarations
-class HbLabel;
+class QString;
+class QGraphicsLinearLayout;
+class IrHsWidgetTitleRow;
+class IrHsWidgetMetaDataRow;
 class IrServiceClient;
 
 class IrHsWidget : public HbWidget
@@ -61,23 +62,22 @@
     };
     void handleHsWidgetStateChange(IrHsWidgetState aNewState);
     
-    void loadStationLogo();
+       
+    void initHomeSreenWidget();
+    void resizeHomeScreenWidget();
     
-    void initHomeSreenWidget();
     void loadInitLayout();
     void loadStoppedLayout();
     void loadPlayingLayout();
     void loadLoadingLayout();
-
-    // from QObject
-    bool eventFilter(QObject *aObject, QEvent *aEvent);
+    
+    void enableUserAction();
+    void disableUserAction();
 
 private slots:
     // handle user press event
-    void handleLogoAreaAction();
+    void handleCommonAreaAction();
     void handleControlAreaAction();
-    void handleGoToIrAreaAction();
-    void handleCentralAreaAction();
     
     void handleControlFailed();
 
@@ -87,17 +87,12 @@
     void handleMetaDataUpdated(const QString &aMetaData);
     void handleIrStateUpdated(IrAppState::Type aNewState);
 
-private:   
-    HbIcon   mLoadingIcon;
+private:    
+    bool mUserActionEnabled;
     
-    HbLabel *mLogoLabel;
-    HbLabel *mControlLabel;
-    HbLabel *mGoToIrLabel;
-    HbLabel *mStationNameLabel;
-    HbLabel *mMetadataLabel;
-
-    HbWidget *mInfoControlArea;
-    HbWidget *mCentralArea;
+    QGraphicsLinearLayout   *mRowLayout;
+    IrHsWidgetTitleRow      *mTitleRow;
+    IrHsWidgetMetaDataRow   *mMetaDataRow;
 
     IrServiceClient *mServiceClient;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/inc/irhswidgetmetadatarow.h	Tue Jul 06 14:07:20 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:  Internet Radio home screen widget
+*
+*/
+
+
+#ifndef IRHSWIDGETMETADATAROW_H_
+#define IRHSWIDGETMETADATAROW_H_
+
+// System includes
+#include <HbWidget>
+#include <HbIcon>
+
+//FORWARD DECLARATIONS:
+class HbLabel;
+class HbMarqueeItem;
+
+class IrHsWidgetMetaDataRow : public HbWidget
+{
+    Q_OBJECT
+  
+public:
+    explicit IrHsWidgetMetaDataRow(QGraphicsItem *aParent = 0, Qt::WindowFlags aFlags = 0);
+    virtual ~IrHsWidgetMetaDataRow();
+
+    void setMetaData(const QString &aMetaData);
+  
+    void startMetaDataMarquee();  
+    void stopMetaDataMarquee();
+    
+    void setPlayIcon();
+    void setStopIcon();
+    void setLoadingIcon(); 
+    
+private:
+    // from QObject
+    bool eventFilter(QObject *aObject, QEvent *aEvent);
+
+private:
+    void loadUi();
+    void createLoadingIcon();
+    
+signals:
+    void controlAreaClicked();
+    void metaDataAreaClicked();
+
+private:
+    HbMarqueeItem *mMetaData;
+    HbLabel *mControlLabel;
+    HbIcon   mLoadingIcon;    
+};
+
+#endif // IRHSWIDGETMETADATAROW_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/inc/irhswidgettitlerow.h	Tue Jul 06 14:07:20 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:  Internet Radio home screen widget
+*
+*/
+
+#ifndef IRHSWIDGETTITLEROW_H_
+#define IRHSWIDGETTITLEROW_H_
+
+// System includes
+#include <HbWidget>
+
+//FORWARD DECLARATIONS:
+class HbLabel;
+
+class IrHsWidgetTitleRow : public HbWidget
+{
+    Q_OBJECT
+  
+public:
+    explicit IrHsWidgetTitleRow(QGraphicsItem *aParent = 0, Qt::WindowFlags aFlags = 0);
+    virtual ~IrHsWidgetTitleRow();
+    
+    void setDefaultTitle();
+    void setStationName(const QString &aStationName);
+  
+    void loadStationLogo();
+    void setDefaultLogo();
+    
+signals:
+    void titleRowClicked();
+    
+protected:
+    // from QGraphicsItem
+    void mousePressEvent(QGraphicsSceneMouseEvent *aEvent);
+
+private:
+    void loadUi();
+    
+private:
+    HbLabel *mStationLogo;
+    HbLabel *mStationName;
+};
+
+#endif // IRHSWIDGETTITLEROW_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/inc/irhswidgetuiloader.h	Tue Jul 06 14:07:20 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 IRHSWIDGETUILOADER_H_
+#define IRHSWIDGETUILOADER_H_
+
+#include <hbdocumentloader.h>
+
+class IRHsWidgetUiLoader : public HbDocumentLoader
+{
+public:
+    virtual QObject *createObject(const QString& aType, const QString &aName);
+};
+
+#endif /* IRHSWIDGETUILOADER_H_ */
--- a/qtinternetradio/irhswidgetplugin/inc/irserviceclient.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irhswidgetplugin/inc/irserviceclient.h	Tue Jul 06 14:07:20 2010 +0300
@@ -20,6 +20,7 @@
 
 // System includes
 #include <QObject>
+#include <QMutex>
 #include <xqappmgr.h>
 
 // User includes
@@ -37,12 +38,25 @@
 Q_OBJECT
 
 public:
-    explicit IrServiceClient(QObject *aParent = 0);
-    virtual ~IrServiceClient();
+    
+    /*!
+     *  Get the instance of IrServiceClient
+     *  @return IrServiceClient*
+     */
+    static IrServiceClient* openInstance();
+
+    /*!
+     *  Close the instance of IrServiceClient
+     */
+    void closeInstance();
+        
+private:
+    IrServiceClient();
+    virtual ~IrServiceClient();    
 
 public:
     bool startMonitoringIrState();
-    void stopMonitoringIrState();
+
 
     bool isStationPlayed();
     bool loadStationName(QString &aStationName);
@@ -64,6 +78,12 @@
     
     void controlFailed();
 
+private:
+    void notifyStationNameUpdated(const QString &aStationName);
+    void notifyStationLogoUpdated(bool aIsLogoAvailable);
+    void notifyMetaDataUpdated(const QString &aMetaData);
+    void notifyIrStateChanged(IrAppState::Type aNewState);
+
 private slots:
     // used for return value from Monitor Service via Qt HighWay
     void handleMonitorRequestOk(const QVariant &aRetValue);
@@ -80,6 +100,8 @@
     bool createControlServiceRequest();
     bool createMonitorServiceRequest();
     bool createRefreshServiceRequest();
+    
+    void clearMonitorServiceRequest();
 
     enum IrAppVisibilty
     {
@@ -96,9 +118,20 @@
     void processNotificationData(const IrServiceData &aServiceData);
     
     void initHsWidgetNoRunStopped();
-    void resetHsWidgetExitStopped();
+    
+    void refreshAllActiveHsWidgets();
     
-private:    
+private:
+    static QMutex           mMutex;
+    static int              mRef;  
+    static bool             mMonitoringStarted;
+    static IrServiceClient *mInstatnce;
+
+    QString          mStationName;
+    bool             mStationLogoAvailable; // true if station has its own logo
+    QString          mMetaData;
+    IrAppState::Type mIrState;
+                  
     IrAppInspector   *mIrAppInspector;
     
     bool  mMonitorReqOngoing;
--- a/qtinternetradio/irhswidgetplugin/irhswidgetplugin.pro	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irhswidgetplugin/irhswidgetplugin.pro	Tue Jul 06 14:07:20 2010 +0300
@@ -20,7 +20,8 @@
 
 LIBS += -lxqsettingsmanager \
         -lxqservice \
-        -lxqserviceutil
+        -lxqserviceutil \
+        -lirqlogger 
 
 MOC_DIR = moc
         
@@ -29,6 +30,7 @@
 
 INCLUDEPATH += ./inc               
 INCLUDEPATH += ../irqcommon/inc
+INCLUDEPATH += ../irqlogger/inc 
 
 UID = E257CD03
 RESOURCES = resources.qrc
--- a/qtinternetradio/irhswidgetplugin/resource/irhswidget.docml	Wed Jun 23 18:04:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="1.1">
-    <widget name="irhswidget" type="HbWidget">
-        <widget name="logoLabel" type="HbLabel">
-            <icon iconName="qtg_large_internet_radio" name="icon"/>
-            <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="14un" type="PREFERRED" width="10un"/>
-            <contentsmargins bottom="2un" left="1un" right="1un" top="2un"/>
-            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-        </widget>
-        <widget name="leftSideArea" type="HbWidget">
-            <widget name="stack_container" type="HbWidget">
-                <widget name="info_control_area" type="HbWidget">
-                    <widget name="infoLayout" type="HbWidget">
-                        <widget name="firstRowLabel" type="HbLabel">
-                            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                            <sizehint height="7un" type="PREFERRED" width="23un"/>
-                            <fontspec name="fontSpec" role="PrimarySmall" textheight="3.5un"/>
-                        </widget>
-                        <widget name="secondRowLabel" type="HbLabel">
-                            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                            <sizehint height="7un" type="PREFERRED" width="23un"/>
-                            <fontspec name="fontSpec" role="PrimarySmall" textheight="3un"/>
-                        </widget>
-                        <widget name="hInterLineLabel" type="HbLabel">
-                            <icon iconName="qtg_graf_divider_h_thin" name="icon"/>
-                            <sizehint height="1un" type="PREFERRED" width="23un"/>
-                            <contentsmargins bottom="0un" left="expr(var(hb-param-margin-gene-middle-horizontal) )" right="expr(var(hb-param-margin-gene-middle-horizontal) )" top="0un"/>
-                            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                        </widget>
-                        <sizehint height="14un" type="PREFERRED" width="23un"/>
-                        <layout orientation="Vertical" spacing="0un" type="linear">
-                            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-                            <linearitem itemname="firstRowLabel"/>
-                            <linearitem itemname="hInterLineLabel"/>
-                            <linearitem itemname="secondRowLabel"/>
-                        </layout>
-                    </widget>
-                    <widget name="vLineLabelRight" type="HbLabel">
-                        <icon iconName="qtg_graf_divider_v_thin" name="icon"/>
-                        <sizehint height="14un" type="PREFERRED" width="1un"/>
-                        <contentsmargins bottom="expr(var(hb-param-margin-gene-middle-vertical) )" left="0un" right="0un" top="expr(var(hb-param-margin-gene-middle-vertical) )"/>
-                        <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                    </widget>
-                    <widget name="controlLabel" type="HbLabel">
-                        <icon iconName="qtg_mono_play" name="icon"/>
-                        <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-                        <sizehint height="14un" type="PREFERRED" width="10un"/>
-                        <contentsmargins bottom="2un" left="2un" right="2un" top="2un"/>
-                        <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                    </widget>
-                    <sizehint height="14un" type="PREFERRED" width="34un"/>
-                    <layout orientation="Horizontal" spacing="0un" type="linear">
-                        <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-                        <linearitem itemname="infoLayout"/>
-                        <linearitem itemname="vLineLabelRight"/>
-                        <linearitem itemname="controlLabel"/>
-                    </layout>
-                </widget>
-                <widget name="goToIrLabel" type="HbLabel">
-                    <sizehint height="14un" type="PREFERRED" width="34un"/>
-                    <string name="plainText" value="Go To Internet Radio"/>
-                    <fontspec name="fontSpec" role="PrimarySmall" textheight="4un"/>
-                    <enums name="alignment" value="AlignLeft|AlignVCenter|AlignLeading"/>
-                </widget>
-                <sizehint height="14un" type="PREFERRED" width="34un"/>
-                <layout type="stacked">
-                    <stackitem itemname="info_control_area"/>
-                    <stackitem itemname="goToIrLabel"/>
-                </layout>
-            </widget>
-            <widget name="vLineLabelLeft" type="HbLabel">
-                <icon iconName="qtg_graf_divider_v_thin" name="icon"/>
-                <sizehint height="14un" type="PREFERRED" width="1un"/>
-                <contentsmargins bottom="expr(var(hb-param-margin-gene-middle-vertical) )" left="0un" right="0un" top="expr(var(hb-param-margin-gene-middle-vertical) )"/>
-                <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-            </widget>
-            <sizehint height="14un" type="PREFERRED" width="35un"/>
-            <layout orientation="Horizontal" spacing="0un" type="linear">
-                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-                <linearitem itemname="vLineLabelLeft"/>
-                <linearitem itemname="stack_container"/>
-            </layout>
-        </widget>
-        <size height="14un" name="size" width="45un"/>
-        <rect height="14un" name="geometry" width="45un" x="0" y="0"/>
-        <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-        <sizehint height="14un" type="PREFERRED" width="45un"/>
-        <layout orientation="Horizontal" spacing="0un" type="linear">
-            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-            <linearitem itemname="logoLabel"/>
-            <linearitem itemname="leftSideArea"/>
-        </layout>
-    </widget>
-    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
-        <uistate name="Common ui state" sections="#common"/>
-    </metadata>
-</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/resource/irhswidgetmetadatarow.docml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+    <widget name="metadatarow_layout" type="HbWidget">
+        <widget name="hSeparatorLabel" type="HbLabel">
+            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+            <icon iconName="qtg_graf_divider_h_thin" name="icon"/>
+            <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="2" type="PREFERRED"/>
+            <sizehint height="2" type="MINIMUM"/>
+            <contentsmargins bottom="0un" left="1un" right="1un" top="0un"/>
+            <sizehint height="2" type="MAXIMUM"/>
+            <enums name="aspectRatioMode" value="IgnoreAspectRatio"/>
+        </widget>
+        <widget name="lower_side_layout" type="HbWidget">
+            <widget name="vSeparatorRight" type="HbLabel">
+                <icon iconName="qtg_graf_divider_v_thin" name="icon"/>
+                <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+                <sizehint type="PREFERRED" width="2"/>
+                <sizehint type="MINIMUM" width="2"/>
+                <contentsmargins bottom="0.25un" left="0un" right="0un" top="0.25un"/>
+                <sizehint type="MAXIMUM" width="2"/>
+                <enums name="aspectRatioMode" value="IgnoreAspectRatio"/>
+            </widget>
+            <widget name="metadata_layout" type="HbWidget">
+                <widget name="metadata_label" type="HbMarqueeItem">
+                    <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                    <sizehint height="expr(var(hb-param-text-height-secondary))" type="PREFERRED"/>
+                    <sizehint height="expr(var(hb-param-text-height-secondary))" type="MINIMUM"/>
+                    <sizehint height="expr(var(hb-param-text-height-secondary))" type="MAXIMUM"/>
+                    <fontspec name="fontSpec" role="Secondary" textheight="expr(var(hb-param-text-height-secondary))"/>
+                </widget>
+                <layout orientation="Vertical" spacing="0un" type="linear">
+                    <contentsmargins bottom="var(hb-param-margin-gene-middle-vertical)" left="expr(var(hb-param-margin-gene-middle-horizontal))" right="expr(var(hb-param-margin-gene-middle-horizontal))" top="var(hb-param-margin-gene-middle-vertical)"/>
+                    <stretchitem stretchfactor="1"/>
+                    <linearitem itemname="metadata_label"/>
+                    <stretchitem stretchfactor="1"/>
+                </layout>
+            </widget>
+            <widget name="control_layout" type="HbWidget">
+                <widget name="control_label" type="HbLabel">
+                    <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                    <icon iconName="qtg_mono_play" name="icon"/>
+                    <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                    <sizehint height="6un" type="FIXED" width="6un"/>
+                    <sizehint height="6un" type="MINIMUM" width="6un"/>
+                    <sizehint height="6un" type="MAXIMUM" width="6un"/>
+                </widget>
+                <layout orientation="Vertical" spacing="0un" type="linear">
+                    <contentsmargins bottom="0un" left="expr(var(hb-param-margin-gene-left))" right="expr(var(hb-param-margin-gene-right))" top="0un"/>
+                    <stretchitem stretchfactor="1"/>
+                    <linearitem itemname="control_label"/>
+                    <stretchitem stretchfactor="1"/>
+                </layout>
+            </widget>
+            <layout orientation="Horizontal" spacing="0un" type="linear">
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                <linearitem itemname="metadata_layout"/>
+                <linearitem itemname="vSeparatorRight"/>
+                <linearitem itemname="control_layout"/>
+            </layout>
+        </widget>
+        <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+        <sizehint height="expr(7.5un+var(hb-param-text-height-secondary))" type="FIXED" width="46un"/>
+        <sizehint height="expr(7.5un+var(hb-param-text-height-secondary))" type="MINIMUM" width="46un"/>
+        <sizehint height="expr(7.5un+var(hb-param-text-height-secondary))" type="MAXIMUM" width="46un"/>
+        <layout orientation="Vertical" spacing="0un" type="linear">
+            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+            <linearitem itemname="hSeparatorLabel"/>
+            <linearitem itemname="lower_side_layout"/>
+        </layout>
+    </widget>
+    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/resource/irhswidgettitlerow.docml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+    <widget name="titlerow_layout" type="HbWidget">
+        <widget name="station_logo_layout" type="HbWidget">
+            <widget name="station_logo" type="HbLabel">
+                <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                <icon iconName="qtg_large_internet_radio" name="icon"/>
+                <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                <sizehint height="11un" type="FIXED" width="11un"/>
+                <sizehint height="11un" type="MINIMUM" width="11un"/>
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                <sizehint height="11un" type="MAXIMUM" width="11un"/>
+            </widget>
+            <layout orientation="Vertical" spacing="0un" type="linear">
+                <contentsmargins bottom="expr(var(hb-param-margin-gene-middle-vertical))" left="expr(var(hb-param-margin-gene-middle-horizontal))" right="expr(var(hb-param-margin-gene-middle-horizontal))" top="expr(var(hb-param-margin-gene-middle-vertical))"/>
+                <stretchitem stretchfactor="1"/>
+                <linearitem itemname="station_logo"/>
+                <stretchitem stretchfactor="1"/>
+            </layout>
+        </widget>
+        <widget name="upper_side_text_layout" type="HbWidget">
+            <widget name="station_name" type="HbLabel">
+                <enums name="alignment" value="AlignLeft|AlignVCenter|AlignLeading"/>
+                <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                <sizehint height="expr(var(hb-param-text-height-secondary))" type="PREFERRED"/>
+                <sizehint height="expr(var(hb-param-text-height-secondary))" type="MINIMUM"/>
+                <sizehint height="expr(var(hb-param-text-height-secondary))" type="MAXIMUM"/>
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                <fontspec name="fontSpec" role="Primary" textheight="expr(var(hb-param-text-height-secondary))"/>
+            </widget>
+            <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+            <layout orientation="Vertical" spacing="0un" type="linear">
+                <contentsmargins bottom="expr(var(hb-param-margin-gene-middle-vertical))" left="0un" right="expr(var(hb-param-margin-gene-middle-horizontal))" top="expr(var(hb-param-margin-gene-middle-vertical))"/>
+                <stretchitem stretchfactor="1"/>
+                <linearitem itemname="station_name"/>
+                <stretchitem stretchfactor="1"/>
+            </layout>
+        </widget>
+        <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+        <sizehint height="expr(11un+var(hb-param-margin-gene-middle-vertical)*2)" type="FIXED" width="46un"/>
+        <sizehint height="expr(11un+var(hb-param-margin-gene-middle-vertical)*2)" type="MINIMUM" width="46un"/>
+        <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+        <sizehint height="expr(11un+var(hb-param-margin-gene-middle-vertical)*2)" type="MAXIMUM" width="46un"/>
+        <layout orientation="Horizontal" spacing="0un" type="linear">
+            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+            <linearitem itemname="station_logo_layout"/>
+            <linearitem itemname="upper_side_text_layout"/>
+        </layout>
+    </widget>
+    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+    </metadata>
+</hbdocument>
--- a/qtinternetradio/irhswidgetplugin/resources.qrc	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irhswidgetplugin/resources.qrc	Tue Jul 06 14:07:20 2010 +0300
@@ -1,5 +1,6 @@
 <RCC>
     <qresource>
-        <file>resource/irhswidget.docml</file>
+        <file>resource/irhswidgetmetadatarow.docml</file>
+        <file>resource/irhswidgettitlerow.docml</file>
     </qresource>
 </RCC>
--- a/qtinternetradio/irhswidgetplugin/src/irhswidget.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irhswidgetplugin/src/irhswidget.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,57 +16,29 @@
 */
 
 // System includes
-#include <HbLabel>
-#include <HbDocumentLoader>
 #include <HbFrameDrawer>
 #include <HbFrameItem>
-#include <HbIconAnimationManager>
-#include <HbIconAnimationDefinition>
-#include <HbColorScheme>
-#include <HbStyleLoader>
 #include <QGraphicsLinearLayout>
-#include <QSettings>
-#include <QPixmap>
 
 // User includes
 #include "irhswidget.h"
 #include "irserviceclient.h"
-
-// Defines
-static const QString KIrHsWidgetDocml  = ":/resource/irhswidget.docml";
-static const QString KIrHsWidget       = "irhswidget";
-static const QString KLogoLabel        = "logoLabel";
-static const QString KGoToIrLabel      = "goToIrLabel";
-static const QString KControlLabel     = "controlLabel";
-static const QString KFirstRowLabel    = "firstRowLabel";
-static const QString KSecondRowLabel   = "secondRowLabel";
-static const QString KInfoControlArea  = "info_control_area";
-static const QString KCentrolArea      = "infoLayout";
+#include "irhswidgettitlerow.h"
+#include "irhswidgetmetadatarow.h"
+#include "irqlogger.h"
 
-static const QString KDefaultStationLogo = "qtg_large_internet_radio";
-static const QString KPlayButtonIcon     = "qtg_mono_play";
-static const QString KStopButtonIcon     = "qtg_mono_stop";
-
-static const QString KFrameGraphicsName  = "qtg_fr_hswidget_normal";
-static const QString KStationNameColor   = "qtc_hs_list_item_title";
-static const QString KMetaDataColor      = "qtc_hs_list_item_content";
-
-static const QString KLoadingAnimationPrefix  = "qtg_anim_loading_";
-static const QString KLoadingIconName = "LoadingAnimation";
-
-const int KIrHsWidgetLogoSize = 50; // hs widget logo size
+// Constants
+static const int KIrHsWidgetContentsMargin = 0;
+static const QString KIrHsWidgetBackgroundImage = "qtg_fr_hswidget_normal";
 
 // ======== MEMBER FUNCTIONS ========
 // Constructor
 IrHsWidget::IrHsWidget(QGraphicsItem* aParent, Qt::WindowFlags aFlags)
     : HbWidget(aParent, aFlags),
-      mLogoLabel(NULL),
-      mControlLabel(NULL),
-      mGoToIrLabel(NULL),
-      mStationNameLabel(NULL),
-      mMetadataLabel(NULL),
-      mInfoControlArea(NULL),
-      mCentralArea(NULL),
+      mUserActionEnabled(false),
+      mRowLayout(NULL),
+      mTitleRow(NULL),
+      mMetaDataRow(NULL),
       mServiceClient(NULL),
       mIrState(IrAppState::Unknown),
       mIrHsWidgetState(EUnknown)
@@ -74,13 +46,23 @@
     setupUi();
     initHomeSreenWidget();
     
-    mServiceClient = new IrServiceClient(this);
+    mServiceClient = IrServiceClient::openInstance();
     setupConnection();
 }
 
 // Destructor
 IrHsWidget::~IrHsWidget()
 {
+    if (mServiceClient)
+    {
+        mServiceClient->closeInstance();
+    } 
+    
+    if (mRowLayout->count() == 1)
+    {
+        delete mMetaDataRow;
+        mMetaDataRow = NULL;
+    }
 }
 
 // Initializes the widget.
@@ -98,98 +80,62 @@
 
 // Called when widget is shown in the home screen
 void IrHsWidget::onShow()
-{
+{ 
+    if (mRowLayout->count() == 2)
+    {
+        mMetaDataRow->startMetaDataMarquee();
+    }   
 }
 
 // Called when widget is hidden from the home screen
 void IrHsWidget::onHide()
 {
+    if (mRowLayout->count() == 2)
+    {
+        mMetaDataRow->stopMetaDataMarquee();
+    }  
 }
 
 
 void IrHsWidget::setupUi()
 {
-    HbDocumentLoader *uiLoader = new HbDocumentLoader();
-    uiLoader->reset();
-
-    bool loaded = false;
-    uiLoader->load(KIrHsWidgetDocml, &loaded);
-
-    if (loaded)
-    {
-        HbWidget *irHsWidget = qobject_cast<HbWidget *>(uiLoader->findWidget(KIrHsWidget));
-        HbFrameDrawer *irHsWidgetDrawer = new HbFrameDrawer(KFrameGraphicsName, HbFrameDrawer::NinePieces);
-        HbFrameItem   *irHsWidgetBgItem = new HbFrameItem(irHsWidgetDrawer, irHsWidget);
-        irHsWidgetBgItem->setPreferredSize(irHsWidget->preferredSize());
-
-        QGraphicsLinearLayout *irHsWidgetLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
-        irHsWidgetLayout->addItem(irHsWidget);
-        setLayout(irHsWidgetLayout);
-
-        mGoToIrLabel      = qobject_cast<HbLabel *>(uiLoader->findWidget(KGoToIrLabel));
-        mLogoLabel        = qobject_cast<HbLabel *>(uiLoader->findWidget(KLogoLabel));
-        mControlLabel     = qobject_cast<HbLabel *>(uiLoader->findWidget(KControlLabel));
-        mInfoControlArea  = qobject_cast<HbWidget *>(uiLoader->findWidget(KInfoControlArea));
-        mCentralArea      = qobject_cast<HbWidget *>(uiLoader->findWidget(KCentrolArea));
-
-        // make system's hs backgourd item under logo
-        irHsWidgetBgItem->stackBefore(mLogoLabel);
-
-        // set font for station name line
-        mStationNameLabel = qobject_cast<HbLabel *>(uiLoader->findWidget(KFirstRowLabel));
-        mStationNameLabel->setTextColor(HbColorScheme::color(KStationNameColor));
+    setContentsMargins( KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin,
+            KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin);
+    
+    //Setup layout
+    mRowLayout = new QGraphicsLinearLayout(Qt::Vertical);
 
-        // set font for meta data line
-        mMetadataLabel = qobject_cast<HbLabel *>(uiLoader->findWidget(KSecondRowLabel));
-        mMetadataLabel->setTextColor(HbColorScheme::color(KMetaDataColor));
-
-        // Create animation.
-        HbIconAnimationManager *animationManager = HbIconAnimationManager::global();
-        HbIconAnimationDefinition animationDefinition;
-        HbIconAnimationDefinition::AnimationFrame animationFrame;
-        QList<HbIconAnimationDefinition::AnimationFrame> animationFrameList;
-        
-        QString animationFrameIconName;
-        for (int i = 1; i < 11; i++)
-        {
-            animationFrame.duration = 100;
-            animationFrameIconName.clear();
-            animationFrameIconName.append(KLoadingAnimationPrefix);
-            animationFrameIconName.append(animationFrameIconName.number(i));
-            animationFrame.iconName = animationFrameIconName;
-            animationFrameList.append(animationFrame);
-        }
-        animationDefinition.setPlayMode(HbIconAnimationDefinition::Loop);
-        animationDefinition.setFrameList(animationFrameList);
-        animationManager->addDefinition(KLoadingIconName, animationDefinition);
-
-        // Construct an icon using the animation definition.
-        mLoadingIcon.setIconName(KLoadingIconName);        
-        
-        // install event filter to widget
-        mGoToIrLabel->installEventFilter(this);
-        mControlLabel->installEventFilter(this);
-        mLogoLabel->installEventFilter(this);
-        mCentralArea->installEventFilter(this);
-    }
-    
-    delete uiLoader;
+    mRowLayout->setContentsMargins(KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin,
+            KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin);
+    mRowLayout->setSpacing(KIrHsWidgetContentsMargin);
+    setLayout(mRowLayout);
+   
+   //background
+   HbFrameDrawer * backgroundFrameDrawer = new HbFrameDrawer(KIrHsWidgetBackgroundImage, HbFrameDrawer::NinePieces);
+   HbFrameItem* backgroundLayoutItem = new HbFrameItem(backgroundFrameDrawer); 
+   setBackgroundItem( backgroundLayoutItem );
 }
 
 void IrHsWidget::initHomeSreenWidget()
 {
+    mTitleRow = new IrHsWidgetTitleRow(); 
+    mMetaDataRow = new IrHsWidgetMetaDataRow();
+    
+    mRowLayout->addItem(mTitleRow);
+    resizeHomeScreenWidget();
+                
     if (mServiceClient->isStationPlayed())
     {
         loadStoppedLayout();
         QString stationName;
         if (mServiceClient->loadStationName(stationName))
         {
-            mStationNameLabel->setPlainText(stationName);
+            mTitleRow->setStationName(stationName);
         }
         
         if (mServiceClient->loadStationLogoFlag())
         {
-            loadStationLogo();
+            mTitleRow->loadStationLogo();
         }
     }
     else
@@ -198,6 +144,17 @@
     }
 }
 
+void IrHsWidget::resizeHomeScreenWidget()
+{
+    //resize here so homescreen will place widget correctly on screen
+    setPreferredSize( mRowLayout->preferredSize() );
+    if (parentWidget())
+    {
+        //to place widget properly after adding to homescreen
+        parentWidget()->resize(preferredSize()); 
+	}
+}
+    
 void IrHsWidget::setupConnection()
 {
     // signal - slot for service event
@@ -210,58 +167,19 @@
     QObject::connect(mServiceClient, SIGNAL(irStateChanged(IrAppState::Type)),
         this, SLOT(handleIrStateUpdated(IrAppState::Type)));
     QObject::connect(mServiceClient, SIGNAL(controlFailed()),
-        this, SLOT(handleControlFailed()));    
-}
-
-bool IrHsWidget::eventFilter(QObject *aObject, QEvent *aEvent)
-{
-    bool eventWasConsumed = false;
-    QString objectName     = aObject->objectName();
-    QEvent::Type eventType = aEvent->type();
-    
-    if (KGoToIrLabel == objectName)
-    {
-        if (QEvent::GraphicsSceneMousePress == eventType)
-        {
-            eventWasConsumed = true;
-            handleGoToIrAreaAction();
-        }
-    }
-    else if (KLogoLabel == objectName)
-    {
-        if (QEvent::GraphicsSceneMousePress == eventType)
-        {
-            eventWasConsumed = true;
-            handleLogoAreaAction();
-        }
-    }
-    else if (KControlLabel == objectName)
-    {
-        if (QEvent::GraphicsSceneMousePress == eventType)
-        {
-            eventWasConsumed = true;
-            handleControlAreaAction();
-        }
-    }
-    else if (KCentrolArea == objectName)
-    {
-        if (QEvent::GraphicsSceneMousePress == eventType)
-        {
-            eventWasConsumed = true;
-            handleCentralAreaAction();
-        }
-    }
+        this, SLOT(handleControlFailed()));  
         
-    return eventWasConsumed;
+    enableUserAction();          
 }
 
 // ================ handle user press event ===============
-void IrHsWidget::handleLogoAreaAction()
+void IrHsWidget::handleCommonAreaAction()
 {
     switch (mIrState)
     {
         case IrAppState::NoRunInit:
         case IrAppState::NoRunStopped:
+            disableUserAction();
             mServiceClient->launchIrNormally();
             break;
             
@@ -279,26 +197,28 @@
 
 void IrHsWidget::handleControlAreaAction()
 {
+    LOG("IrHsWidget::handleControlAreaAction()");
+    //here, for we will control the application by homescreen, 
+    //to avoid repeat actions, we disable all control event here
+    //and enable them when state changed or failed.      
+    disableUserAction();
+    
     switch (mIrState)
     {
-        case IrAppState::NoRunStopped:          
-            mServiceClient->launchIrNowPlaying();
-            loadLoadingLayout();              
+        case IrAppState::NoRunStopped:
+            mServiceClient->launchIrNowPlaying();           
             break;
                     
         case IrAppState::RunningStopped:
-            mServiceClient->startPlaying();
-            loadLoadingLayout();         
+            mServiceClient->startPlaying();        
             break;
                     
         case IrAppState::Playing:
-            mServiceClient->stopPlaying();
-            loadStoppedLayout();          
+            mServiceClient->stopPlaying();         
             break;
             
         case IrAppState::Loading: 
-            mServiceClient->cancelLoading();
-            loadStoppedLayout();                     
+            mServiceClient->cancelLoading();                  
             break;       
 
         default:
@@ -306,18 +226,11 @@
     }
 }
 
-void IrHsWidget::handleGoToIrAreaAction()
-{
-    handleLogoAreaAction();
-}
-
-void IrHsWidget::handleCentralAreaAction()
-{
-    handleLogoAreaAction();
-}
 
 void IrHsWidget::handleControlFailed()
-{
+{ 
+    LOG("handleControlFailed()");
+    enableUserAction();
     switch (mIrHsWidgetState)
     {
         case EInit:     // LAF == [logo][go to interneat radio]
@@ -345,35 +258,31 @@
 // ======== for service notification ========
 void IrHsWidget::handleStationNameUpdated(const QString &aStationName)
 {
-    if (mStationNameLabel->plainText() != aStationName)
-    {
-        mStationNameLabel->setPlainText(aStationName);
-    }
+    mTitleRow->setStationName(aStationName);
 }
 
 void IrHsWidget::handleStationLogoUpdated(bool aLogoAvailable)
 {    
     if (aLogoAvailable)
     {
-        loadStationLogo();
+        mTitleRow->loadStationLogo();
     }
     else
     {
-        mLogoLabel->setIcon(KDefaultStationLogo);
+        mTitleRow->setDefaultLogo();
     }
 }
 
 void IrHsWidget::handleMetaDataUpdated(const QString &aMetaData)
 {
-    if (mMetadataLabel->plainText() != aMetaData)
-    {
-        mMetadataLabel->setPlainText(aMetaData);
-    }    
+    mMetaDataRow->setMetaData(aMetaData); 
 }
 
 
 void IrHsWidget::handleIrStateUpdated(IrAppState::Type aNewState)
 {
+    LOG("IrHsWidget::handleIrStateUpdated()");
+    enableUserAction();
     if (aNewState == mIrState)
     {
         return;
@@ -438,47 +347,80 @@
 // LAF == [logo][go to interneat radio]
 void IrHsWidget::loadInitLayout()
 {
-    mInfoControlArea->hide();
-    mGoToIrLabel->show();
+    if (mRowLayout->count() == 2)
+    {
+        mRowLayout->removeItem(mMetaDataRow);
+        resizeHomeScreenWidget();      
+    }
+    
+    mTitleRow->setDefaultTitle();        
 }
 
 // LAF == [logo][StationInfo][Play]
 void IrHsWidget::loadStoppedLayout()
 {
-    mGoToIrLabel->hide();
-    mInfoControlArea->show();
-    mMetadataLabel->setPlainText(QString(""));
-    mControlLabel->setIcon(KPlayButtonIcon);
+    if (mRowLayout->count() == 1)
+    {
+        mRowLayout->addItem(mMetaDataRow);
+        resizeHomeScreenWidget();      
+    }
+    
+    mMetaDataRow->setPlayIcon();
 }
 
 // LAF == [logo][StationInfo][Stop]
 void IrHsWidget::loadPlayingLayout()
 {
-    mGoToIrLabel->hide();
-    mInfoControlArea->show();
-    mControlLabel->setIcon(KStopButtonIcon);      
+    if (mRowLayout->count() == 1)
+    {
+        mRowLayout->addItem(mMetaDataRow);
+        resizeHomeScreenWidget();      
+    }
+    
+    mMetaDataRow->setStopIcon();     
 }
 
 // LAF == [logo][StationInfo][Loading]
 void IrHsWidget::loadLoadingLayout()
 {
-    mGoToIrLabel->hide();
-    mInfoControlArea->show();
-    mMetadataLabel->setPlainText(QString(""));
-    mControlLabel->setIcon(mLoadingIcon);   
+    if (mRowLayout->count() == 1)
+    {
+        mRowLayout->addItem(mMetaDataRow);
+        resizeHomeScreenWidget();      
+    }
+    
+    mMetaDataRow->setLoadingIcon(); 
 }
 
-void IrHsWidget::loadStationLogo()
+
+
+void IrHsWidget::enableUserAction()
 {
-    QSettings settings(KIrSettingOrganization, KIrSettingApplicaton);
-    if (settings.value(KIrSettingStationLogo).canConvert<QPixmap>())
+    if (!mUserActionEnabled)
     {
-        QPixmap logoPixmap = settings.value(KIrSettingStationLogo).value<QPixmap>();
-        QPixmap newLogoPixmap = 
-             logoPixmap.scaled(QSize(KIrHsWidgetLogoSize,KIrHsWidgetLogoSize),Qt::KeepAspectRatio);
-        QIcon logoQIcon(newLogoPixmap);
-        HbIcon logoHbIcon(logoQIcon);            
-        mLogoLabel->setIcon(logoHbIcon);
-    }  
+        mUserActionEnabled = true;
+        // signal - slot for user click action
+        QObject::connect(mTitleRow, SIGNAL(titleRowClicked()),
+            this, SLOT(handleCommonAreaAction()));
+        QObject::connect(mMetaDataRow, SIGNAL(metaDataAreaClicked()),
+            this, SLOT(handleCommonAreaAction()));     
+        QObject::connect(mMetaDataRow, SIGNAL(controlAreaClicked()),
+            this, SLOT(handleControlAreaAction()));      
+    }
 }
 
+void IrHsWidget::disableUserAction()
+{
+    if (mUserActionEnabled)
+    {    
+        mUserActionEnabled = false;
+        // signal - slot for user click action
+        QObject::disconnect(mTitleRow, SIGNAL(titleRowClicked()),
+            this, SLOT(handleCommonAreaAction()));
+        QObject::disconnect(mMetaDataRow, SIGNAL(metaDataAreaClicked()),
+            this, SLOT(handleCommonAreaAction()));     
+        QObject::disconnect(mMetaDataRow, SIGNAL(controlAreaClicked()),
+            this, SLOT(handleControlAreaAction()));  
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/src/irhswidgetmetadatarow.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies 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 home screen widget
+*
+*/
+// System includes
+#include <QGraphicsLinearLayout>
+#include <HbLabel>
+#include <HbMarqueeItem>
+#include <HbIconAnimationManager>
+#include <HbIconAnimationDefinition>
+#include <HbColorScheme>
+#include <HbStyleLoader>
+
+// User includes
+#include "irhswidgetmetadatarow.h"
+#include "irhswidgetuiloader.h"
+
+// Constants
+static const QString KIrHsWidgetMetaDataRowDocML       = ":/resource/irhswidgetmetadatarow.docml";
+static const QString KIrHsWidgetMetaDataRowContainer   = "metadatarow_layout";
+static const QString KIrHsWidgetMetaDataLabel          = "metadata_label";
+static const QString KNmHsWidgetControlLabel           = "control_label";
+
+static const QString KPlayButtonIcon     = "qtg_mono_play";
+static const QString KStopButtonIcon     = "qtg_mono_stop";
+static const QString KMetaDataColor      = "qtc_hs_list_item_title";
+
+static const QString KLoadingAnimationPrefix  = "qtg_anim_loading_";
+static const QString KLoadingIconName         = "LoadingAnimation";
+
+static const int KIrHsWidgetContentsMargin  = 0;
+static const int KLoadingFramePostfixMin    = 1;  // loading animation frame name postfix (min value) defined in layout guide.
+static const int KLoadingFramePostfixMax    = 10; // loading animation frame name postfix (max value) defined in layout guide.
+static const int KLoadingAnimationDuration  = 100; // duration for frames to construct a animation, unit : ms
+
+IrHsWidgetMetaDataRow::IrHsWidgetMetaDataRow(QGraphicsItem *aParent, Qt::WindowFlags aFlags) :
+    HbWidget(aParent, aFlags), 
+    mMetaData(NULL), 
+    mControlLabel(NULL)
+{
+    loadUi();
+    createLoadingIcon();
+}
+
+
+IrHsWidgetMetaDataRow::~IrHsWidgetMetaDataRow()
+{
+}
+
+void IrHsWidgetMetaDataRow::loadUi()
+{
+    IRHsWidgetUiLoader loader;
+    loader.load(KIrHsWidgetMetaDataRowDocML);
+
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+    layout->setContentsMargins(KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin,
+        KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin);
+    layout->setSpacing(KIrHsWidgetContentsMargin);
+    setLayout(layout);
+
+    QGraphicsWidget *container = loader.findWidget(KIrHsWidgetMetaDataRowContainer);
+    layout->addItem(container);   
+                      
+    mMetaData = static_cast<HbMarqueeItem*> (loader.findWidget(KIrHsWidgetMetaDataLabel));
+    mControlLabel  = static_cast<HbLabel*> (loader.findWidget(KNmHsWidgetControlLabel));
+    mMetaData->setTextColor(HbColorScheme::color(KMetaDataColor));  
+    mMetaData->setLoopCount(-1);
+                    
+    mMetaData->installEventFilter(this);
+    mControlLabel->installEventFilter(this);        
+}
+
+void IrHsWidgetMetaDataRow::setMetaData(const QString &aMetaData)
+{      
+    if (mMetaData->text() != aMetaData)
+    {
+        mMetaData->setText(aMetaData);
+        if (aMetaData.isEmpty())
+        {
+            mMetaData->stopAnimation();        
+        }
+        else
+        {
+            mMetaData->startAnimation();
+        }
+    }    
+}
+
+void IrHsWidgetMetaDataRow::startMetaDataMarquee()
+{    
+    if (!mMetaData->text().isEmpty())
+    {
+        mMetaData->startAnimation();        
+    }      
+}
+    
+void IrHsWidgetMetaDataRow::stopMetaDataMarquee()
+{
+    mMetaData->stopAnimation(); 
+}   
+
+void IrHsWidgetMetaDataRow::setPlayIcon()
+{
+    mControlLabel->setIcon(KPlayButtonIcon);
+}
+    
+void IrHsWidgetMetaDataRow::setStopIcon()
+{
+    mControlLabel->setIcon(KStopButtonIcon);
+}
+    
+void IrHsWidgetMetaDataRow::setLoadingIcon()
+{
+    mControlLabel->setIcon(mLoadingIcon);
+}    
+    
+bool IrHsWidgetMetaDataRow::eventFilter(QObject *aObject, QEvent *aEvent)
+{
+    QString objectName     = aObject->objectName();
+    
+    if (QEvent::GraphicsSceneMousePress == aEvent->type())
+    {
+        
+        if (KIrHsWidgetMetaDataLabel == objectName)
+        {
+            emit metaDataAreaClicked();
+        }
+        else if (KNmHsWidgetControlLabel == objectName)
+        {
+            emit controlAreaClicked();
+        }
+    }
+        
+    return false;
+}
+
+void IrHsWidgetMetaDataRow::createLoadingIcon()
+{
+    HbIconAnimationManager *animationManager = HbIconAnimationManager::global();
+    HbIconAnimationDefinition animationDefinition;
+    HbIconAnimationDefinition::AnimationFrame animationFrame;
+    QList<HbIconAnimationDefinition::AnimationFrame> animationFrameList;
+    
+    QString animationFrameIconName;
+    for (int i = KLoadingFramePostfixMin; i <= KLoadingFramePostfixMax; i++)
+    {
+        animationFrame.duration = KLoadingAnimationDuration;
+        animationFrameIconName.clear();
+        animationFrameIconName.append(KLoadingAnimationPrefix);
+        animationFrameIconName.append(animationFrameIconName.number(i));
+        animationFrame.iconName = animationFrameIconName;
+        animationFrameList.append(animationFrame);
+    }
+    animationDefinition.setPlayMode(HbIconAnimationDefinition::Loop);
+    animationDefinition.setFrameList(animationFrameList);
+    animationManager->addDefinition(KLoadingIconName, animationDefinition);
+
+    mLoadingIcon.setIconName(KLoadingIconName);        
+}        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/src/irhswidgettitlerow.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,116 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies 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 home screen widget
+*
+*/
+// System includes
+#include <QGraphicsLinearLayout>
+#include <QSettings>
+#include <QPixmap>
+#include <HbLabel>
+#include <HbColorScheme>
+#include <HbStyleLoader>
+
+// User includes
+#include "irhswidgettitlerow.h"
+#include "irservicedef.h"
+#include "irhswidgetuiloader.h"
+
+// Constants
+static const QString KIrHsWidgetTitleRowDocML       = ":/resource/irhswidgettitlerow.docml";
+static const QString KIrHsWidgetTitleRowContainer   = "titlerow_layout";
+static const QString KIrHsWidgetStationLogo         = "station_logo";
+static const QString KNmHsWidgetStationName         = "station_name";
+
+static const QString KStationNameColor      = "qtc_hs_list_item_title";
+static const QString KDefaultStationLogo    = "qtg_large_internet_radio";
+
+static const int KIrHsWidgetContentsMargin  = 0;
+static const int KIrHsWidgetLogoSize        = 50; // hs widget logo size
+
+IrHsWidgetTitleRow::IrHsWidgetTitleRow(QGraphicsItem *aParent, Qt::WindowFlags aFlags) :
+    HbWidget(aParent, aFlags), 
+    mStationLogo(NULL), 
+    mStationName(NULL)
+{
+    loadUi();
+}
+
+IrHsWidgetTitleRow::~IrHsWidgetTitleRow()
+{
+}
+
+void IrHsWidgetTitleRow::loadUi()
+{
+    IRHsWidgetUiLoader loader;
+    loader.load(KIrHsWidgetTitleRowDocML);
+
+    //Create layout
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    layout->setContentsMargins(KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin,
+        KIrHsWidgetContentsMargin, KIrHsWidgetContentsMargin);
+    layout->setSpacing(KIrHsWidgetContentsMargin);
+    setLayout(layout);
+    
+    QGraphicsWidget *container = loader.findWidget(KIrHsWidgetTitleRowContainer);
+    layout->addItem(container);
+
+    mStationLogo = static_cast<HbLabel*> (loader.findWidget(KIrHsWidgetStationLogo));
+    mStationName = static_cast<HbLabel*> (loader.findWidget(KNmHsWidgetStationName));
+    mStationName->setTextColor(HbColorScheme::color(KStationNameColor));         
+}
+
+void IrHsWidgetTitleRow::setDefaultTitle()
+{
+#ifdef SUBTITLE_STR_BY_LOCID 
+    mStationName->setPlainText(hbTrId("txt_irad_title_internet_radio"));
+#else
+    mStationName->setPlainText(hbTrId("Internet radio"));    
+#endif
+}
+
+void IrHsWidgetTitleRow::setStationName(const QString& aStationName)
+{
+    if (mStationName->plainText() != aStationName)
+    {
+        mStationName->setPlainText(aStationName);
+    }   
+}
+    
+void IrHsWidgetTitleRow::loadStationLogo()
+{
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    if (settings.value(KIrSettingStationLogo).canConvert<QPixmap>())
+    {
+        QPixmap logoPixmap = settings.value(KIrSettingStationLogo).value<QPixmap>();
+        QPixmap newLogoPixmap = 
+             logoPixmap.scaled(QSize(KIrHsWidgetLogoSize,KIrHsWidgetLogoSize),Qt::KeepAspectRatio);
+        QIcon logoQIcon(newLogoPixmap);
+        HbIcon logoHbIcon(logoQIcon);            
+        mStationLogo->setIcon(logoHbIcon);
+    }  
+}
+
+void IrHsWidgetTitleRow::setDefaultLogo()
+{
+    mStationLogo->setIcon(KDefaultStationLogo);
+}
+
+
+void IrHsWidgetTitleRow::mousePressEvent(QGraphicsSceneMouseEvent *aEvent)
+{
+    Q_UNUSED(aEvent); 
+	emit titleRowClicked();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irhswidgetplugin/src/irhswidgetuiloader.cpp	Tue Jul 06 14:07:20 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:
+*
+*/
+#include <HbMarqueeItem>
+#include "irhswidgetuiloader.h" 
+
+QObject *IRHsWidgetUiLoader::createObject(const QString& aType, const QString &aName)
+{
+    if (aType == HbMarqueeItem::staticMetaObject.className())
+    {
+        QObject *object = new HbMarqueeItem;
+        object->setObjectName(aName);
+        return object;
+    }
+
+    return HbDocumentLoader::createObject(aType, aName);
+}
--- a/qtinternetradio/irhswidgetplugin/src/irserviceclient.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irhswidgetplugin/src/irserviceclient.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -37,10 +37,52 @@
 static const QString KIrServiceMonitorOperation     = "registerNotifications()";
 static const QString KIrServiceRefreshOperation     = "refreshAllData()";
 
+
+// Initialize the static member variable
+QMutex IrServiceClient::mMutex;
+int IrServiceClient::mRef = 0;
+bool IrServiceClient::mMonitoringStarted = false;    
+IrServiceClient *IrServiceClient::mInstatnce = NULL;
+
+
 // ==================== MEMBER FUNCTIONS ======================
+// Static function to get a singleton instance of IrServiceClient
+IrServiceClient* IrServiceClient::openInstance()
+{
+    mMutex.lock();
+    if (NULL == mInstatnce)
+    {
+        mInstatnce = new IrServiceClient();
+    }       
+    if (mInstatnce != NULL)
+    {
+        mRef++;
+    }
+    mMutex.unlock();
+    return mInstatnce;
+}
+
+// Close a singleton instance of IrServiceClient
+void IrServiceClient::closeInstance()
+{
+    if (mInstatnce != NULL)
+    {
+        mMutex.lock();
+        if (mRef > 0)
+        {
+            mRef--;
+        }
+        
+        if (0 == mRef)
+        {
+            delete mInstatnce;
+        }
+        mMutex.unlock();
+    }
+}
+
 // Constructor
-IrServiceClient::IrServiceClient(QObject *aParent) :
-    QObject(aParent),
+IrServiceClient::IrServiceClient() :
     mIrAppInspector(NULL),
     mMonitorReqOngoing(false),    
     mControlReqOngoing(false),
@@ -69,6 +111,14 @@
 
 bool IrServiceClient::startMonitoringIrState()
 {
+    if (mMonitoringStarted)
+    {
+        refreshAllActiveHsWidgets();
+        return true;
+    }
+       
+    // if this is the first active hs widget
+    mMonitoringStarted = true;
     bool retVal = false;
     if (mIrAppInspector->isIrRunning())
     {
@@ -82,37 +132,41 @@
         }
         else
         {
-            emit irStateChanged(IrAppState::NoRunInit);
+            notifyIrStateChanged(IrAppState::NoRunInit);
         }
     }
     
     return mIrAppInspector->startInspectingIrRunningStatus() && retVal;    
 }
 
-void IrServiceClient::stopMonitoringIrState()
-{
-    delete mMonitorRequest;
-    mMonitorRequest = NULL;
-
-    delete mRefreshRequest;
-    mRefreshRequest = NULL;
-}
 
 void IrServiceClient::initHsWidgetNoRunStopped()
-{
-    emit irStateChanged(IrAppState::NoRunStopped);
-    
+{    
     QString stationName;
     if (loadStationName(stationName))
     {
-        emit stationNameUpdated(stationName);
+        notifyStationNameUpdated(stationName);
     }
     else
     {
-        emit stationNameUpdated(QString(""));
+#ifdef SUBTITLE_STR_BY_LOCID
+        notifyStationNameUpdated(hbTrId("txt_irad_info_unnamed_station"));
+#else
+        notifyStationNameUpdated(hbTrId("Unnamed station"));
+#endif
     }
     
-    emit stationLogoUpdated(loadStationLogoFlag());
+    notifyStationLogoUpdated(loadStationLogoFlag());
+    
+    notifyIrStateChanged(IrAppState::NoRunStopped);    
+}
+
+void IrServiceClient::refreshAllActiveHsWidgets()
+{
+    emit stationNameUpdated(mStationName);
+    emit stationLogoUpdated(mStationLogoAvailable);
+    emit metaDataUpdated(mMetaData);
+    emit irStateChanged(mIrState);
 }
 
 /******************************************************************
@@ -224,16 +278,13 @@
     doSendMonitorRequest();
 
     if (aRetValue.isValid()
-         && aRetValue.canConvert(QVariant::List))
+         && aRetValue.canConvert<IrServiceDataList>())
     {
-        QVariantList dataList = aRetValue.toList();
-        foreach (const QVariant& data, dataList)
+        IrServiceDataList dataList;
+        dataList = qVariantValue<IrServiceDataList>(aRetValue);
+        foreach (const IrServiceData& data, dataList)
         {
-            if (data.canConvert<IrServiceData>())
-            {
-                IrServiceData serviceData = data.value<IrServiceData>();
-                processNotificationData(serviceData);
-            }
+            processNotificationData(data);
         }
     }
 }
@@ -383,27 +434,35 @@
             break;
             
         case IrAppInspector::Exiting :
-            stopMonitoringIrState();
-                    
-            if (isStationPlayed())
+        {
+            clearMonitorServiceRequest();
+            QString stationName;
+            if (loadStationName(stationName))
             {
-                resetHsWidgetExitStopped();
+                notifyMetaDataUpdated(QString(""));
+                notifyStationNameUpdated(stationName);        
+                notifyStationLogoUpdated(loadStationLogoFlag());
+                notifyIrStateChanged(IrAppState::NoRunStopped);
             }
             else
             {
-                emit irStateChanged(IrAppState::NoRunInit);
+                notifyIrStateChanged(IrAppState::NoRunInit);
             }            
             break;
+        }
             
         default:
             break;
     }
 }
 
-void IrServiceClient::resetHsWidgetExitStopped()
+void IrServiceClient::clearMonitorServiceRequest()
 {
-    emit irStateChanged(IrAppState::NoRunStopped);
-    emit metaDataUpdated(QString(""));
+    delete mMonitorRequest;
+    mMonitorRequest = NULL;
+
+    delete mRefreshRequest;
+    mRefreshRequest = NULL;
 }
 
 // used to process service data sent from IR app.
@@ -419,28 +478,28 @@
         case IrServiceNotification::StationName:
             if (data.canConvert(QVariant::String))
             {
-                emit stationNameUpdated(data.toString());
+                notifyStationNameUpdated(data.toString());
             }
             break;
 
         case IrServiceNotification::MetaData:
             if (data.canConvert(QVariant::String))
             {
-                emit metaDataUpdated(data.toString());
+                notifyMetaDataUpdated(data.toString());
             }
             break;
 
         case IrServiceNotification::StationLogo:
             if (data.canConvert(QVariant::Bool))
             {
-                emit stationLogoUpdated(data.toBool());
+                notifyStationLogoUpdated(data.toBool());
             }            
             break;
 
         case IrServiceNotification::IrState:
             if (data.canConvert(QVariant::Int))
             {
-                emit irStateChanged((IrAppState::Type)data.toInt());
+                notifyIrStateChanged((IrAppState::Type)data.toInt());
             }
             break;
 
@@ -476,22 +535,46 @@
     aRequest->setInfo(reqInfo);
 }
 
+void IrServiceClient::notifyStationNameUpdated(const QString &aStationName)
+{
+    mStationName = aStationName;
+    emit stationNameUpdated(mStationName);
+}
+
+void IrServiceClient::notifyStationLogoUpdated(bool aIsLogoAvailable)
+{
+    mStationLogoAvailable = aIsLogoAvailable;
+    emit stationLogoUpdated(mStationLogoAvailable);    
+}
+
+void IrServiceClient::notifyMetaDataUpdated(const QString &aMetaData)
+{
+    mMetaData = aMetaData;
+    emit metaDataUpdated(mMetaData);    
+}
+
+void IrServiceClient::notifyIrStateChanged(IrAppState::Type aNewState)
+{
+    mIrState = aNewState;
+    emit irStateChanged(mIrState);    
+}       
+        
 bool IrServiceClient::isStationPlayed()
 {
-    QSettings settings(KIrSettingOrganization, KIrSettingApplicaton);
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
     QString stationName = settings.value(KIrSettingStationName,KIrDefaultStationName).toString();
     return stationName != KIrDefaultStationName;
 }
 
 bool IrServiceClient::loadStationLogoFlag()
 {
-    QSettings settings(KIrSettingOrganization, KIrSettingApplicaton);
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
     return settings.value(KIrSettingStationLogoAvailable,false).toBool();
 }
 
 bool IrServiceClient::loadStationName(QString &aStationName)
 {
-    QSettings settings(KIrSettingOrganization, KIrSettingApplicaton);
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
     aStationName = settings.value(KIrSettingStationName,KIrDefaultStationName).toString();
     if(aStationName != KIrDefaultStationName)
     {
@@ -504,4 +587,5 @@
 }
 
 Q_IMPLEMENT_USER_METATYPE(IrServiceData)
+Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(IrServiceDataList)
 
--- a/qtinternetradio/irqcommon/inc/irservicedata.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irqcommon/inc/irservicedata.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,7 +19,6 @@
 #define IRSERVICEDATA_H
 
 #include <QVariant>
-#include <QMetaType>
 #include <xqserviceipcmarshal.h>
 
 class IrServiceData
@@ -34,11 +33,11 @@
 
     virtual ~IrServiceData() {}
 
+    int        mType;
+    QVariant   mData;
+    
     template <typename Stream> void serialize(Stream &aStream) const;
     template <typename Stream> void deserialize(Stream &aStream);
-
-    int         mType;
-    QVariant    mData;
 };
 
 template <typename Stream> inline void IrServiceData::serialize(Stream &aStream) const
@@ -53,8 +52,11 @@
     aStream >> mData;
 }
 
+
+typedef QList<IrServiceData> IrServiceDataList;
+
 Q_DECLARE_USER_METATYPE(IrServiceData)
-
+Q_DECLARE_USER_METATYPE_NO_OPERATORS(IrServiceDataList)
 
 
 #endif // IRSERVICEDATA_H
--- a/qtinternetradio/irqcommon/inc/irservicedef.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irqcommon/inc/irservicedef.h	Tue Jul 06 14:07:20 2010 +0300
@@ -22,11 +22,12 @@
 
 // For settings via QSetting
 static const QString KIrSettingOrganization = "nokia.s60.mymex";
-static const QString KIrSettingApplicaton   = "internetradio";
+static const QString KIrSettingApplication  = "internetradio";
 static const QString KIrSettingStationName  = "lastplayedinfo/station_name";
 static const QString KIrDefaultStationName  = "no_station_played_yet";
 static const QString KIrSettingStationLogo  = "lastplayedinfo/station_logo";
 static const QString KIrSettingStationLogoAvailable  = "lastplayedinfo/station_logo_available";
+static const QString KIrSettingSplashNowplaying = "splash/is_nowplaying_view";
 
 // For P&S XQSettingsManager
 const long int KInternetRadioPSUid = 0xE28364bb;   // Internet Radio's UID3
--- a/qtinternetradio/irqcommon/irqcommon.pro	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irqcommon/irqcommon.pro	Tue Jul 06 14:07:20 2010 +0300
@@ -22,7 +22,10 @@
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 
 INCLUDEPATH += ../../internetradio2.0/datastructuresinc \
-               ../../internetradio2.0/presetplugininc
+               ../../internetradio2.0/presetplugininc \
+               ../../presetserver/include \
+               ../../presetserver/clientinc \
+               ../../presetserver/serverinc
 
 LIBS += -lirdatastructures \
         -lfbscli \
--- a/qtinternetradio/irqfavoritesdb/inc/irqfavoritesdb_p.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irqfavoritesdb/inc/irqfavoritesdb_p.h	Tue Jul 06 14:07:20 2010 +0300
@@ -19,7 +19,8 @@
 #define IRQFAVORITESDB_P_H
 
 #include <QObject>
-#include <pspresetobserver.h>
+
+#include "pspresetobserver.h"
 
 class CIRFavoritesDb;
 class IRQPreset;
--- a/qtinternetradio/irqfavoritesdb/irqfavoritesdb.pro	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irqfavoritesdb/irqfavoritesdb.pro	Tue Jul 06 14:07:20 2010 +0300
@@ -27,9 +27,10 @@
 INCLUDEPATH += ../../internetradio2.0/favoritesdbinc \
                ../../internetradio2.0/datastructuresinc \
                ../../internetradio2.0/presetplugininc  \
-               ../irqcommon/inc
-             
-
+               ../irqcommon/inc \
+               ../../presetserver/include \
+               ../../presetserver/clientinc \
+               ../../presetserver/serverinc
                
                
 LIBS += -lirdatastructures \
--- a/qtinternetradio/irqisdsclient/irqisdsclient.pro	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/irqisdsclient/irqisdsclient.pro	Tue Jul 06 14:07:20 2010 +0300
@@ -28,22 +28,25 @@
 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 \
-               ..\irqlogger\inc
-               
+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 \
+               ../irqlogger/inc \
+               ../../presetserver/include \
+               ../../presetserver/clientinc \
+               ../../presetserver/serverinc
+
 LIBS += -lirdatastructures \
         -lirfavoritesdb \
         -lirqfavorites \
--- a/qtinternetradio/rom/qtinternetradio.iby	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/rom/qtinternetradio.iby	Tue Jul 06 14:07:20 2010 +0300
@@ -37,4 +37,12 @@
 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
 
+#the following is for splash screen
+data=ZRESOURCE\hb\splashml\internet_radio_default.splashml     RESOURCE_FILES_DIR\hb\splashml\internet_radio_default.splashml
+data=ZRESOURCE\hb\splashml\internet_radio_default.docml        RESOURCE_FILES_DIR\hb\splashml\internet_radio_default.docml
+data=ZRESOURCE\hb\splashml\internet_radio_normal.splashml      RESOURCE_FILES_DIR\hb\splashml\internet_radio_normal.splashml
+data=ZRESOURCE\hb\splashml\internet_radio_normal.docml         RESOURCE_FILES_DIR\hb\splashml\internet_radio_normal.docml
+data=ZRESOURCE\hb\splashml\internet_radio_nowplaying.splashml  RESOURCE_FILES_DIR\hb\splashml\internet_radio_nowplaying.splashml
+data=ZRESOURCE\hb\splashml\internet_radio_nowplaying.docml     RESOURCE_FILES_DIR\hb\splashml\internet_radio_nowplaying.docml
+
 #endif
--- a/qtinternetradio/ui/inc/irapplication.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irapplication.h	Tue Jul 06 14:07:20 2010 +0300
@@ -41,8 +41,12 @@
 class HbProgressDialog;
 class IRQSystemEventHandler;
 class IRPlayList;
-class HbIconItem;
+#ifdef HS_WIDGET_ENABLED
+class IrMonitorService;
+class IrControlService;
+#endif 
 class IRFileViewService;
+class HbMessageBox;
 
 #ifdef LOCALIZATION
 class QTranslator;
@@ -56,12 +60,19 @@
     IRApplication(IRViewManager *aViewManager, IRQSystemEventHandler* aSystemEventHandler);    
 
     ~IRApplication();
-    
+#ifdef SUBTITLE_STR_BY_LOCID
     bool verifyNetworkConnectivity(const QString &aConnectingText = hbTrId("txt_common_info_loading"));
+#else
+    bool verifyNetworkConnectivity(const QString &aConnectingText = hbTrId("Loading"));
+#endif
     
-    void startLoadingAnimation(const QObject *aReceiver, const char *aFunc);  
-    void startLoadingAnimation(const QPointF& aPos);
+    void startLoadingAnimation(const QObject *aReceiver, const char *aFunc);    
     void stopLoadingAnimation();
+	
+#ifdef HS_WIDGET_ENABLED    
+    bool startPlaying();
+    void cancelPlayerLoading();
+#endif
     
     IRViewManager* getViewManager() const;
     IRQNetworkController* getNetworkController();
@@ -73,8 +84,11 @@
     IRMediaKeyObserver* getMediaKeyObserver();
     IRQAdvClient* getAdvClient(); 
     IRPlayList* getPlayList() const;
+	
+    void setLaunchView();    
+    void launchStartingView(TIRViewId aViewId);
     
-    void launchStartingView(TIRViewId aViewId);
+    bool isAppFullyStarted() const;
     
 #ifdef LOCALIZATION
     /*
@@ -111,12 +125,9 @@
     void createComponents();
     void destroyComponents();
     void setupConnection();
-    void setLaunchView();
     void startSystemEventMonitor();
     void initApp();
-    void setExitingView();
-    void getLoadingAnimation();
-    
+    void setExitingView(); 
     TIRHandleResult handleConnectionEstablished();
     
     void startLocalServer();
@@ -165,10 +176,18 @@
     QTranslator  *iTranslator;
 #endif
     
-    IRQSystemEventHandler *iSystemEventHandler;
+    IRQSystemEventHandler *iSystemEventHandler;    	
+    TIRUseNetworkReason iUseNetworkReason;	
+    
+    bool iAppFullyStarted;
     
-    HbIconItem          *iLoadingAnimation;    
-    IRFileViewService *iFileViewService;
+#ifdef HS_WIDGET_ENABLED    
+    IrControlService    *iControlService;
+    IrMonitorService    *iMonitorService;
+#endif	
+      
+    IRFileViewService   *iFileViewService;
+    HbMessageBox *iMessageBox;
 };
 
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/ircontrolservice.h	Tue Jul 06 14:07:20 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 IRCONTROLSERVICE_H
+#define IRCONTROLSERVICE_H
+
+// System includes
+#include <QObject>
+#include <xqserviceprovider.h>
+
+// User includes
+#include "irservicedef.h"
+
+// Forward declarations
+class IRApplication;
+
+class IrControlService : public XQServiceProvider
+{
+    Q_OBJECT
+
+public:
+    explicit IrControlService(IRApplication *aIrApp, QObject *aParent = 0);
+    virtual ~IrControlService();
+
+public slots:
+    int handleCmd(int aCmdId);  // service interface, called via Qt Highway
+
+private:
+    IrServiceResult::Type handleLaunchNowPlayingViewCmd();
+    IrServiceResult::Type handleLaunchNormallyCmd();
+    IrServiceResult::Type handlePlayCmd();
+    IrServiceResult::Type handleStopCmd();
+    IrServiceResult::Type handleCancelCmd();
+
+private:
+    IRApplication    *mIrApp;
+    
+    Q_DISABLE_COPY(IrControlService)
+
+};
+
+#endif // IRCONTROLSERVICE_H
--- a/qtinternetradio/ui/inc/irfavoritesview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irfavoritesview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -51,6 +51,10 @@
     
 private:
     //from IrAbstractListViewBase
+#ifdef HS_WIDGET_ENABLED	
+    void itemAboutToBeSelected(bool &aNeedNetwork);
+#endif
+	
     void setCheckedAction();
     void handleItemSelected();
     void prepareMenu();
--- a/qtinternetradio/ui/inc/irhistoryview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irhistoryview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -38,7 +38,7 @@
     TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
    
 private slots:
-    void clearAllList();
+    void clearAllList(HbAction *aAction);
     void networkRequestNotified(IRQNetworkEvent aEvent);
     //to start the convertion asynchronously
     void convertAnother();
@@ -47,7 +47,7 @@
     void modelChanged();
     
     void actionClicked(HbAction *aAction);
-    
+    void popupClearHistoryConfirmMessageBox();    
 private:
     void showHistory();
     void handleItemSelected();
@@ -55,6 +55,9 @@
     
     //from IrAbstractListViewBase
     void prepareMenu();
+#ifdef HS_WIDGET_ENABLED	
+    void itemAboutToBeSelected(bool &aNeedNetwork);
+#endif	
     void startConvert(int aIndex); 
     void convertStationHistory2Preset(const IRQSongHistoryInfo& aHistoryInfo, IRQPreset& aPreset);
     void addContextAction();
--- a/qtinternetradio/ui/inc/irmainview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irmainview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -40,6 +40,9 @@
 	void networkRequestNotified(IRQNetworkEvent aEvent);
 	
 private:
+    //from base class IRBaseView
+    TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+    
     //from base class IrAbstractListViewBase
     void handleItemSelected();
  
@@ -52,6 +55,8 @@
     
     void lazyInit();
     
+    void normalInit();
+    
     void initToolBar();
     
 private:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/inc/irmonitorservice.h	Tue Jul 06 14:07:20 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 IRMONITORSERVICE_H
+#define IRMONITORSERVICE_H
+
+// System includes
+#include <QObject>
+#include <QList>
+#include <xqserviceprovider.h>
+
+// User includes
+#include "irservicedef.h"
+#include "irservicedata.h"
+
+// Forward declarations
+class IRApplication;
+class IRPlayController;
+class IRQMetaData;
+
+class IrMonitorService : public XQServiceProvider
+{
+    Q_OBJECT
+
+public:
+    explicit IrMonitorService(IRApplication *aIrApp, QObject *aParent = 0);
+    virtual ~IrMonitorService();
+
+public slots:
+    void registerNotifications();  // service interface, called via Qt Highway
+    void refreshAllData();     // service interface, called via Qt Highway
+
+private slots:
+    // slots for station logo update
+    void handleStationLogoUpdated(bool aLogoAvailable);
+    
+    // slots for play controller
+    void handleLoadingStarted(const QString &aStationName);
+    void handleLoadingCancelled(const QString &aStationName);    
+    void handlePlayStarted();
+    void handlePlayStopped();
+    void updateMetaData(IRQMetaData* aMetaData);
+
+public:
+     enum ReadyItem
+     {
+         StationName = 0x01,
+         StationLogo = 0x02,
+         MetaData    = 0x04,
+         IrState     = 0x08
+     };
+     Q_DECLARE_FLAGS(ReadyItems, ReadyItem)    
+
+private:
+    void setupConnection();
+    
+    void notifyAll();
+    bool notifyList(const IrServiceDataList &aDataList);
+
+private:
+    ReadyItems       mReadyItems;    
+    QString          mStationName;
+    bool             mStationLogoAvailable; // true if station has its own logo
+    QString          mMetaData;
+    IrAppState::Type mIrState;
+        
+    IRApplication    *mIrApp;
+    IRPlayController *mPlayController;    
+    
+    QList<int>       mRequestList; // used to maintain the async request
+
+    Q_DISABLE_COPY(IrMonitorService)
+
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(IrMonitorService::ReadyItems)
+
+#endif // IRMONITORSERVICE_H
--- a/qtinternetradio/ui/inc/irnowplayingview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irnowplayingview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -94,8 +94,9 @@
     void updateMusicStoreStatus();
     void updateForLauchAction();
     
-    void updateStationLogo();
-
+    void updateStationLogo();	
+    void loadStationLogo();
+    
     void lazyInit();
     void normalInit();
     
--- a/qtinternetradio/ui/inc/irplaycontroller.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irplaycontroller.h	Tue Jul 06 14:07:20 2010 +0300
@@ -28,7 +28,7 @@
 class IRQMetaData;
 class IRQSongHistoryEngine;
 class IRQStatisticsReporter;
-
+class HbMessageBox;
 /**
  * This class is a wrapper for IRQMediaPlayer.
  */
@@ -46,15 +46,47 @@
     explicit IRPlayController(IRApplication* aApplication);
     ~IRPlayController();
 
+#ifdef HS_WIDGET_ENABLED
+    // MUST be called before prepare the network for playback
+    // i.e., called before IRApplication::verifyNetworkConnectivity
+    void setConnectingStationName(const QString &aStationName, bool aForceConnecting = false); 
+    QString getConnectingStationName() const; 
+	   
+    // used when nowplaying view is the starting view, to reload preset to the player
+    // because by default, the player will load the last played station preset into it
+    // But when nowplaying view as starting view due to open pls with only one url, 
+    // should reload the preset from pls file
+    void reloadNowplayingPreset(IRQPreset *aPreset, bool aIsLogoAvailable, IRQConnectedFrom aConnectedFrom);
+#endif    
     // Play a station
     void connectToChannel(IRQPreset *aPreset, IRQConnectedFrom aConnectedFrom);
 
+    void emitStationLogoUpdated(bool aIsLogoAvailable);	
+    bool isStationLogoAvailable() const;
+    
     // Play control methods
     void resume();
     void stop(IRQTerminatedType aStopReason);
     int getVolume() const;
     void setVolume(int aVolume);
 
+    enum EPlayState
+    {
+        //initial state, never ever played station
+        EIdle = 0,
+        //a station has been stopped
+        EStopped,
+#ifdef HS_WIDGET_ENABLED		
+        //connecting network
+        EConnecting,
+#endif		
+        //stream buffering
+        EBuffering,		
+        //playing
+        EPlaying
+    };
+    EPlayState state() const;
+    
     // Check the playing status
     bool isPlaying() const;
 
@@ -89,8 +121,21 @@
     // emitted when playing stopped
     void playingStopped();
 
-    // emitted when logo needs to update
-    void initializeLogo();
+#ifdef HS_WIDGET_ENABLED
+    // emitted when loading(connecting) started
+    void connectingStarted(const QString &aStationName);
+    
+    // emitted when buffering started
+    void bufferingStarted(const QString &aStationName);    
+	    
+    // emitted when connecting is cancelled
+    void connectingCancelled(const QString &aStationName);
+
+    // emitted when buffering is cancelled
+    void bufferingCancelled(const QString &aStationName);
+	
+	void stationLogoUpdated(bool aIsDefaultLogo);
+#endif	
 
 private slots:
     // slots connected with IRQMediaPlayer
@@ -104,8 +149,14 @@
     void handleError();
 
 private:
-    void createNote(const QString &aNote = hbTrId("txt_irad_info_failed_to_connect"));
+#ifdef SUBTITLE_STR_BY_LOCID
+    void popupNote(const QString &aNote = hbTrId("txt_irad_info_failed_to_connect"));
+#else
+    void popupNote(const QString &aNote = hbTrId("Connecting failed"));
+#endif
     void connectSignalSlot();
+    
+    QString getFirstTryUrl(IRQPreset *aPreset);
 
     // Play next URL if the previous failed to connect.
     bool playNextUrl();
@@ -120,30 +171,32 @@
     IRQMediaPlayer *iMediaPlayer;
     
     IRQStatisticsReporter *iStatisticsReporter;
-    IRQConnectedFrom iConnectedFrom;
     bool iGetServerResult;
-    
+	
+#ifdef HS_WIDGET_ENABLED    
+    QString   iConnectingStationName; // used for home screen widget
+#endif	
+
     IRQPreset *iNowPlayingPreset;
-    //reserve the info in nowplay view
     IRQPreset *iNowPlayingPresetBackup;
-    // reference of IRQMediaPlayer meta data
+    
+    QString iLastPlayedUrl;
+    QString iLastPlayedUrlBackup; 
+        
+    IRQConnectedFrom iConnectedFrom;
+    IRQConnectedFrom iConnectedFromBackup;
+            
+    bool  iStationLogoAvailable;
+    bool  iStationLogoAvailableBackup;            
+    
+    // reference of IRQMediaPlayer meta data        
     IRQMetaData *iMetaData;
     IRQSongHistoryEngine *iSongHistoryEngine;
 
-    enum EPlayState
-    {
-        //initial state
-        EIdle = 0,
-        //a station has been stopped
-        EStopped,
-        //connecting station and buffering
-        EBuffering,
-        //playing
-        EPlaying
-    };
-
     EPlayState iPlayState;
-    // If resuming the last played url fails, connect to all the preset.
+    
+    // If resuming the last played url fails, reset the player to init state
+    // i.e., call connectToChannel() once again.
     bool iResuming;
 
     // variants for play next URL
@@ -156,19 +209,15 @@
     // the URLs of a specific bitrate
     QList<QString> *iUrlArray;
 
-#ifdef Q_CC_NOKIAX86
-    QString iLastPlayedChannelName;
-#endif
-
     // the bitrate from real station feedback.
     int iRealBitrate;
-    QString iLastPlayedUrl;
-    //reserve the info in nowplay view
-    QString iLastPlayedUrlBackup; 
+
     // To handle error async
     IRQError iLastError;
     
     IRQTerminatedType iStopReason;
+    
+    HbMessageBox *iErrorNote;
 };
 
 #endif  //IRPLAYCONTROLLER_H
--- a/qtinternetradio/ui/inc/irplsview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irplsview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -39,6 +39,9 @@
     
 private:
     //from base class IrAbstractListViewBase
+#ifdef HS_WIDGET_ENABLED	
+    void itemAboutToBeSelected(bool &aNeedNetwork);    
+#endif
     void handleItemSelected();
     void listViewLongPressed(HbAbstractViewItem *aItem, const QPointF &aCoords);
     void launchAction();
--- a/qtinternetradio/ui/inc/irsearchchannelsview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irsearchchannelsview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -20,13 +20,11 @@
 #include "irqevent.h"
 #include "irbaseview.h"
 #include "irqenums.h"
-
-class HbGroupBox;
+ 
 class HbListView;
 class HbSearchPanel;
 class HbAction;
-class IrChannelModel;
-class HbProgressDialog;
+class IrChannelModel; 
 class IRQPreset;
 class QTimer;
 
@@ -59,8 +57,7 @@
     void lazyInit();
     void startConvert(int aIndex);   
     void initTimer();
-    //set the subtitle and counter;
-    void setHeadingText(const QString &aText);
+    
 private slots: //slots
      
     void cancelRequest();
@@ -75,6 +72,8 @@
     void convertAnother();
     void presetLogoDownload(IRQPreset* aPreset);
     void presetLogoDownloadError();
+    
+public slots:    
     //this slot is used to back to previouse view or minimize the search widget
     void minimizeSearchPanel();   
     
@@ -85,7 +84,7 @@
         ESearch_init = 0,
         ESearch_Loading //loading means searching or buffering.
     };    
-    HbGroupBox          *iHeadingLabel;
+    
     HbListView          *iListView;
     QString              iKeyText;
     
--- a/qtinternetradio/ui/inc/irsonghistoryview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irsonghistoryview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -43,7 +43,8 @@
 private slots:
     void modelChanged();
     void newMetadataAdded(IRQMetaData * aMetadata);
-    void clearList();   
+    void popupClearHistoryConfirmMessageBox();   
+    void clearList(HbAction *aAction);   
     void showPrompt();
     void gotoStationHistory();
     void handleOrientationChanged(Qt::Orientation aOrientation);
--- a/qtinternetradio/ui/inc/irstationsview.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irstationsview.h	Tue Jul 06 14:07:20 2010 +0300
@@ -39,6 +39,10 @@
     
     //from base class IRBaseView
     TIRHandleResult handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason);
+#ifdef HS_WIDGET_ENABLED	
+    //from IrAbstractListViewBase
+    void itemAboutToBeSelected(bool &aNeedNetwork);
+#endif
     
 private slots:  
     void presetResponse(IRQPreset *aPreset);
--- a/qtinternetradio/ui/inc/iruidefines.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/iruidefines.h	Tue Jul 06 14:07:20 2010 +0300
@@ -70,7 +70,7 @@
 static const char* SEARCH_CHANNELS_VIEW_OBJECT_VIEW                   = "ext-IRSearchChannelsView"; 
 static const char* SEARCH_CHANNELS_VIEW_SEARCHPANEL_WIDGET            = "search_panel";
 static const char* SEARCH_CHANNELS_VIEW_SEARCHLISTVIEW_WIDGET         = "search_listview";
-static const char* SEARCH_CHANNELS_VIEW_HEADINGTEXT_WIDGET            = "headingText";
+ 
 
 // IRNowplayingView  -- Object Name
 static const char* NOW_PLAYING_VIEW_OBJECT_NAME                       = "ext-nowplayingview"; 
--- a/qtinternetradio/ui/inc/irviewmanager.h	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/inc/irviewmanager.h	Tue Jul 06 14:07:20 2010 +0300
@@ -26,6 +26,14 @@
 class IRBaseView;
 class QTimer;
 
+class ActivityInformation
+{
+public:
+    QPixmap screenShot;
+    QString activityId;
+    TIRViewId viewId;
+};
+
 class IRViewManager : public HbMainWindow
 {
     Q_OBJECT
@@ -49,6 +57,12 @@
     
     bool isExiting() const;
        
+    void saveScreenShot();
+    
+    void saveActivity();
+    
+    void removeActivity();
+    
 public slots:
     void backToPreviousView();
 
@@ -63,7 +77,8 @@
     void handleCurrentViewChanged(HbView *aView);
     void crossLineReset();
     void exitTimeout();
-        
+    void handleSaveScreenShot();
+    
 private:
     void backToView(TIRViewId aViewId);
     IRBaseView* createView(IRApplication* aApplication, TIRViewId aViewId);
@@ -73,7 +88,8 @@
     bool readyToQuit();
     
     void switchToNextView(IRBaseView *aView);
- 
+    void backupActivity();
+    
 private:
     IRApplication* iApplication;
     QStack<IRBaseView*> iViewStack;
@@ -93,6 +109,8 @@
     QTimer *iExitTimer;
     
     bool iExiting;    
+    QMap<TIRViewId, QPixmap> iScreenShots;
+    ActivityInformation iActivityBackup;
 };
 
 #endif
--- a/qtinternetradio/ui/resources/layout/searchchannelsview.docml	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/resources/layout/searchchannelsview.docml	Tue Jul 06 14:07:20 2010 +0300
@@ -5,16 +5,7 @@
     </object>
     <widget name="ext-IRSearchChannelsView" type="HbView">
         <widget name="content" role="HbView:widget" type="HbWidget">
-            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-            
-            <widget name="headingText" type="HbGroupBox">
-                <string locid="txt_irad_subtitle_search_result" name="heading"/>
-                <sizepolicy horizontalPolicy="Expanding" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                <sizehint height="expr(var(hb-param-text-height-secondary)+2*var(hb-param-margin-gene-middle-vertical))" type="PREFERRED"/>
-                <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
-                <bool name="visible" value="TRUE"/>
-            </widget>
-            
+            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>           
             <widget name="search_listview" type="HbListView">                 
             </widget>
             
@@ -24,8 +15,7 @@
             
             <real name="z" value="0"/>
             <layout orientation="Vertical" type="linear">
-                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-                <linearitem itemname="headingText" spacing="0un"/>
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>                
                 <linearitem itemname="search_listview" spacing="0un"/>                
                 <linearitem itemname="search_panel" spacing="0un"/>
             </layout>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/splashscreen/internet_radio_default.docml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+    <object name="genres" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_genres" name="icon"/>
+    </object>
+    <object name="collections" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_radio_collections" name="icon"/>
+    </object>
+    <object name="favorites" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_favourites" name="icon"/>
+    </object>
+    <object name="search" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_search" name="icon"/>
+    </object>
+    <widget name="internet_radio_defaultview" type="HbView">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <widget name="toolBar" type="HbToolBar">
+                <ref object="genres" role="HbToolBar:addAction"/>
+                <ref object="collections" role="HbToolBar:addAction"/>
+                <ref object="favorites" role="HbToolBar:addAction"/>
+                <ref object="search" role="HbToolBar:addAction"/>
+            </widget> 
+            <layout orientation="Vertical" type="linear">
+                <stretchitem stretchfactor="1"/>                 
+                <linearitem itemname="toolBar"/>
+            </layout>
+        </widget>
+        <string locid="txt_irad_title_internet_radio" name="title"/>
+    </widget>
+    <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+        <dummydata objectName="listView" section="#common" value="6"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/splashscreen/internet_radio_default.splashml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,6 @@
+<hbsplash version="1">
+    <docml>internet_radio_default.docml</docml>
+    <widget>internet_radio_defaultview</widget>
+    <appuid>0xe28364bb</appuid>
+    <tsappname>internet_radio_10_1</tsappname>     
+</hbsplash>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/splashscreen/internet_radio_normal.docml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+    <object name="genres" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_genres" name="icon"/>
+    </object>
+    <object name="collections" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_radio_collections" name="icon"/>
+    </object>
+    <object name="favorites" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_favourites" name="icon"/>
+    </object>
+    <object name="search" type="HbAction">
+        <bool name="checkable" value="TRUE"/>
+        <icon iconName="qtg_mono_search" name="icon"/>
+    </object>
+    <widget name="internet_radio_normalview" type="HbView">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <widget name="toolBar" type="HbToolBar">
+                <ref object="genres" role="HbToolBar:addAction"/>
+                <ref object="collections" role="HbToolBar:addAction"/>
+                <ref object="favorites" role="HbToolBar:addAction"/>
+                <ref object="search" role="HbToolBar:addAction"/>
+            </widget> 
+            <layout orientation="Vertical" type="linear">
+                <stretchitem stretchfactor="1"/>                 
+                <linearitem itemname="toolBar"/>
+            </layout>
+        </widget>
+        <string locid="txt_irad_title_internet_radio" name="title"/>
+    </widget>
+    <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+        <dummydata objectName="listView" section="#common" value="6"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/splashscreen/internet_radio_normal.splashml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,7 @@
+<hbsplash version="1">
+    <docml>internet_radio_normal.docml</docml>
+    <widget>internet_radio_normalview</widget>
+    <appuid>0xe28364bb</appuid>
+    <tsappname>internet_radio_10_1</tsappname>    
+    <screenid>normal_screen</screenid> 
+</hbsplash>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/splashscreen/internet_radio_nowplaying.docml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+    <object name="musicstore_act" type="HbAction">
+        <bool name="autoRepeat" value="FALSE"/>
+        <icon iconName="qtg_mono_store" name="icon"/>
+    </object>
+    <object name="play_stop_act" type="HbAction">
+        <bool name="autoRepeat" value="FALSE"/>
+        <icon iconName="qtg_mono_play" name="icon"/>
+    </object>
+    <object name="add_2_fav_act" type="HbAction">
+        <bool name="autoRepeat" value="FALSE"/>
+        <icon iconName="qtg_mono_favourites" name="icon"/>
+    </object>
+    <object name="detail_act" type="HbAction">
+        <bool name="autoRepeat" value="FALSE"/>
+        <icon iconName="qtg_mono_details" name="icon"/>
+    </object>
+    <widget name="internet_radio_nowplayingview" type="HbView">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <widget name="toolBar" type="HbToolBar">
+                <ref object="musicstore_act" role="HbToolBar:addAction"/>
+                <ref object="play_stop_act" role="HbToolBar:addAction"/>
+                <ref object="add_2_fav_act" role="HbToolBar:addAction"/>
+                <ref object="detail_act" role="HbToolBar:addAction"/>
+            </widget> 
+            <layout orientation="Vertical" type="linear">
+                <stretchitem stretchfactor="1"/>                 
+                <linearitem itemname="toolBar"/>
+            </layout>
+        </widget>
+        <string locid="txt_irad_title_internet_radio" name="title"/>
+    </widget>
+    <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+        <dummydata objectName="listView" section="#common" value="6"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/resources/splashscreen/internet_radio_nowplaying.splashml	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,7 @@
+<hbsplash version="1">
+    <docml>internet_radio_nowplaying.docml</docml>
+    <widget>internet_radio_nowplayingview</widget>
+    <appuid>0xe28364bb</appuid>
+    <tsappname>internet_radio_10_1</tsappname>    
+    <screenid>nowplaying_screen</screenid> 
+</hbsplash>
--- a/qtinternetradio/ui/src/irabstractlistviewbase.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irabstractlistviewbase.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -38,8 +38,7 @@
 #include "iruidefines.h"
  
 const int KAnimationLoopTimes = 2; // Animation loop times
-//#define NOW_PLAYING_BANNER_FRAME "qtg_fr_multimedia_trans"
-#define NOW_PLAYING_BANNER_FRAME "qtg_fr_popup_list_highlight"
+#define NOW_PLAYING_BANNER_FRAME "qtg_fr_multimedia_trans"
 
 IrAbstractListViewBase::IrAbstractListViewBase(IRApplication *aApplication, TIRViewId aViewId)
     : IRBaseView(aApplication, aViewId),
--- a/qtinternetradio/ui/src/irapplication.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irapplication.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,6 +16,7 @@
 */
 
 #include <hbaction.h>
+#include <hbapplication.h>
 #include <qcoreapplication.h>
 #include <hbdevicemessagebox.h>
 #include <hbprogressdialog.h>
@@ -24,11 +25,18 @@
 #include <QFile>
 #include <QTextStream>
 #include <QDir>
+#include <hbmessagebox.h>
 
 #include <xqserviceutil.h>
 #include <hbiconitem.h>
 #include <hbiconanimator.h>
 #include <hbiconanimationmanager.h>
+#ifdef HS_WIDGET_ENABLED
+#include <XQSettingsManager>
+#include <XQPublishAndSubscribeSettingsKey>
+#include <XQPublishAndSubscribeUtils>
+#include <QDateTime>
+#endif
 
 #ifdef LOCALIZATION 
 #include <QTranslator>
@@ -51,6 +59,13 @@
 #include "irqsystemeventhandler.h"
 #include "irabstractlistviewbase.h"
 #include "irfileviewservice.h"
+#ifdef HS_WIDGET_ENABLED
+#include "irmonitorservice.h"
+#include "ircontrolservice.h"
+#include "irservicedef.h"
+#include "irqisdsdatastructure.h"
+#include "irsearchchannelsview.h"
+#endif
 /*
  * Description : constructor, initialize all data members
  * Parameters  : aViewManager : pointer to the view manager object
@@ -78,9 +93,15 @@
                                      #ifdef LOCALIZATION
                                      iTranslator(NULL),
                                      #endif
-                                     iSystemEventHandler(aSystemEventHandler),
-                                     iLoadingAnimation(NULL),
-                                     iFileViewService(NULL)
+                                     iSystemEventHandler(aSystemEventHandler), 
+                                     iUseNetworkReason(EIR_UseNetwork_NoReason),									 
+                                     iAppFullyStarted(false),
+									 #ifdef HS_WIDGET_ENABLED
+                                     iControlService(NULL),
+                                     iMonitorService(NULL),
+									 #endif                                     
+                                     iFileViewService(NULL),
+                                     iMessageBox(NULL)
                                      
 {
     LOG_METHOD;
@@ -96,13 +117,19 @@
     // get advertisement setting
     iSettings->getGlobalAdvFlag(iEnableGlobalAdv);
     setupConnection();
-    setLaunchView();
+    
+    if (!XQServiceUtil::isService())
+    {
+        setLaunchView();
+    }
     
     QString name = XQServiceUtil::interfaceName();
     if (name == QString("com.nokia.symbian.IFileView"))
     {
         iFileViewService = new IRFileViewService(this);
     }
+    
+    iMessageBox = new HbMessageBox(hbTrId("No network connection!"),HbMessageBox::MessageTypeWarning,NULL);
 } 
 
 /*
@@ -114,6 +141,8 @@
 {
     LOG_METHOD;
     setExitingView();
+    iViewManager->saveActivity();
+    
     destroyComponents();
     
     if (iLocalServer)
@@ -127,6 +156,9 @@
     delete iLoadingNote;
     iLoadingNote = NULL;
     
+    delete iMessageBox;
+    iMessageBox = NULL;
+    
     delete iSystemEventHandler;
     
 #ifdef LOCALIZATION
@@ -140,6 +172,13 @@
     
     delete iFileViewService;
     iFileViewService = NULL;
+	
+#ifdef HS_WIDGET_ENABLED	
+    XQSettingsManager settingsManager;
+    XQPublishAndSubscribeUtils psUtils(settingsManager);
+    XQPublishAndSubscribeSettingsKey irStartupKey(KInternetRadioPSUid, KInternetRadioStartupKey);
+    psUtils.deleteProperty(irStartupKey);        
+#endif	
 }
 
  
@@ -151,10 +190,21 @@
  */
 void IRApplication::setLaunchView()
 {
-    if (!XQServiceUtil::isService())
+    //get starting view id according to activate reason
+    TIRViewId viewId = EIRView_CategoryView;
+    HbApplication *hbApp = qobject_cast<HbApplication*>(qApp);
+
+    if (hbApp->activateReason() == Hb::ActivationReasonActivity)
     {
-        //normal launch, launch starting view
-        TIRViewId viewId = EIRView_CategoryView;
+        QVariant data = hbApp->activateData();
+        QByteArray serializedModel = data.toByteArray();
+        QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+        int id = 0;
+        stream>>id;
+        viewId = TIRViewId(id);
+    }
+    else
+    {
         iSettings->getStartingViewId(viewId);
         if (EIRView_PlayingView == viewId)
         {
@@ -164,9 +214,9 @@
                 viewId = EIRView_CategoryView;
             }
         }
-        
-        launchStartingView(viewId);
     }
+    
+    launchStartingView(viewId);
 }
 
 /*
@@ -183,31 +233,18 @@
     
     if (!iNetworkController->getNetworkStatus())
     {
+        LOG( "IRApplication::verifyNetworkConnectivity--1");
         ret = false;
         if (!iNetworkController->isConnectRequestIssued())
         {
+            LOG( "IRApplication::verifyNetworkConnectivity--2");
             iConnectingText = aConnectingText;
             iNetworkController->chooseAccessPoint();
         }
     }
     
     return ret;
-}
-
-void IRApplication::startLoadingAnimation(const QPointF& aPos)
-{
-    if( NULL == iLoadingAnimation )
-    {
-        getLoadingAnimation();
-    }
-    
-    if (iLoadingAnimation)
-    {
-        iLoadingAnimation->setPos(aPos);
-        iLoadingAnimation->show();
-        iLoadingAnimation->animator().startAnimation();
-    }    
-}
+} 
 
 void IRApplication::startLoadingAnimation(const QObject *aReceiver, const char *aFunc)
 {
@@ -217,27 +254,27 @@
     //is initiated by low layer, we don't show any dialog
     if (!iNetworkController->getNetworkStatus())
     {
-        IRBaseView *currentView = static_cast<IRBaseView*>(iViewManager->currentView());
-        if (currentView && EIR_UseNetwork_NoReason == currentView->getUseNetworkReason())
-        {
-            return;
+        if (EIR_UseNetwork_NoReason == iUseNetworkReason) // network is not used by the Application
+        {            
+            IRBaseView *currentView = static_cast<IRBaseView*>(iViewManager->currentView());
+            if (currentView && EIR_UseNetwork_NoReason == currentView->getUseNetworkReason())
+            {
+                return;
+            }
         }
     }
     
-    //if in search, we could not show the dialog
-    TIRViewId curViewID = static_cast<IRBaseView*>(iViewManager->currentView())->id();
-    if ( EIRView_SearchView == curViewID )
-    {
-        return;        
-    }
-    
     if (NULL == iLoadingNote)
     {
         iLoadingNote = new HbProgressDialog(HbProgressDialog::WaitDialog);
         iLoadingNote->setModal(true);
         iLoadingNote->setTimeout(HbPopup::NoTimeout);
         QAction *action = iLoadingNote->actions().at(0);
+#ifdef SUBTITLE_STR_BY_LOCID
         action->setText(hbTrId("txt_common_button_cancel"));
+#else
+        action->setText(hbTrId("Cancel"));        
+#endif
     }
     
     iLoadingNote->disconnect(SIGNAL(cancelled()));
@@ -256,7 +293,11 @@
     }
     else
     {
+#ifdef SUBTITLE_STR_BY_LOCID
         iLoadingNote->setText(hbTrId("txt_common_info_loading"));
+#else
+        iLoadingNote->setText(hbTrId("Loading"));        
+#endif
     }
     
     iLoadingNote->show();
@@ -265,16 +306,19 @@
 void IRApplication::stopLoadingAnimation()
 {
     LOG_METHOD_ENTER;
+
+    // this function is the endpoint of cancel loading actions for all views
+	// so we can do cleanup action here, including player stop action.
+	// No need to stop the player in each views in the slot connected to the cancel signal of the loading note
+    if (!getPlayController()->isPlaying())
+    {
+        getPlayController()->stop(EIRQUnknownTermination);
+    }
+    
     if (iLoadingNote)
     {
         iLoadingNote->close();
-    }
-    
-    if( iLoadingAnimation )
-    {
-        iLoadingAnimation->animator().stopAnimation();
-        iLoadingAnimation->hide();         
-    }
+    } 
 }
 
 /*
@@ -407,6 +451,10 @@
 void IRApplication::createComponents()
 {
     getSettings();
+#ifdef HS_WIDGET_ENABLED    
+    iControlService = new IrControlService(this);
+    iMonitorService = new IrMonitorService(this);	
+#endif	
 }
 
 /*
@@ -445,6 +493,14 @@
     
     delete iMediaKeyObserver;
     iMediaKeyObserver = NULL;
+	
+#ifdef HS_WIDGET_ENABLED    
+    delete iControlService;
+    iControlService = NULL;
+    
+    delete iMonitorService;
+    iMonitorService = NULL;
+#endif	
 }
 
 void IRApplication::setupConnection()
@@ -514,8 +570,14 @@
             
         case EIRQDisplayNetworkMessageNoConnectivity:
             {
-                stopLoadingAnimation();
-                HbMessageBox::warning(hbTrId("txt_irad_info_no_network_connectiion"), (QObject*)NULL, NULL);
+                stopLoadingAnimation();                
+                LOG("IRApplication::networkEventNotified::no network connection");
+                if( !iMessageBox->isVisible() )
+                {
+                    LOG("IRApplication::networkEventNotified::no network connection -- show dialog");
+                    iMessageBox->show();
+                }
+                
                 if (!iDisconnected)
                 {
                     /* the handling is up to each view */
@@ -537,14 +599,12 @@
 
     if (!hasCache)
     {
-        IRBaseView *currView = static_cast<IRBaseView*>(iViewManager->currentView());
-        Q_ASSERT(currView);
-        currView->setUseNetworkReason(EIR_UseNetwork_LoadCategory);
+        iUseNetworkReason = EIR_UseNetwork_LoadCategory;
         if (false == verifyNetworkConnectivity())
         {
             return;
         }
-        currView->setUseNetworkReason(EIR_UseNetwork_NoReason);
+        iUseNetworkReason = EIR_UseNetwork_NoReason;
     }
     
     IRCategoryView *categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
@@ -561,26 +621,7 @@
     delete socket;
     
     iViewManager->raise();
-}
-
-void IRApplication::getLoadingAnimation()
-{
-    HbIconAnimationManager::global()->addDefinitionFile("qtg_anim_loading.axml");
-    iLoadingAnimation = new HbIconItem("qtg_anim_loading");
-    iLoadingAnimation->hide();
-    QGraphicsScene *targetScene = getViewManager()->scene();
-    QGraphicsScene *oldScene = iLoadingAnimation->scene();
-
-    if (targetScene != oldScene)
-    {
-        if (oldScene)
-        {
-            oldScene->removeItem(iLoadingAnimation);
-        }
-        targetScene->addItem(iLoadingAnimation); // takes ownership
-    }
-
-}
+} 
 
 void IRApplication::initApp()
 {
@@ -595,6 +636,19 @@
     getMediaKeyObserver();	
     startSystemEventMonitor();
     startLocalServer();
+    //when IR is running, remove activity. Otherwise user can see two items in task switcher
+    iViewManager->removeActivity();
+    
+#ifdef HS_WIDGET_ENABLED		
+    // Write the startup timestamp to P&S key for the homescreen widget
+    XQSettingsManager settingsManager;
+    XQPublishAndSubscribeUtils psUtils(settingsManager);
+    XQPublishAndSubscribeSettingsKey irStartupKey(KInternetRadioPSUid, KInternetRadioStartupKey);
+    if (psUtils.defineProperty(irStartupKey, XQSettingsManager::TypeInt))
+    {
+        settingsManager.writeItemValue(irStartupKey, (int)QDateTime::currentDateTime().toTime_t());
+    } 
+#endif        
 }
 
 bool IRApplication::event(QEvent* e)
@@ -610,18 +664,29 @@
 
 TIRHandleResult IRApplication::handleConnectionEstablished()
 {
-    IRBaseView *currView = static_cast<IRBaseView*>(iViewManager->currentView());
-    Q_ASSERT(currView);
-    
-    if (EIR_UseNetwork_LoadCategory == currView->getUseNetworkReason())
+    TIRHandleResult retVal = EIR_DoDefault;
+    switch (iUseNetworkReason)
     {
-        IRCategoryView *categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
-        categoryView->loadCategory(IRQIsdsClient::EGenre);
-        currView->setUseNetworkReason(EIR_UseNetwork_NoReason);
-        return EIR_NoDefault;
+        case EIR_UseNetwork_LoadCategory:
+        {
+            IRCategoryView *categoryView = static_cast<IRCategoryView*>(getViewManager()->getView(EIRView_CategoryView, true));
+            categoryView->loadCategory(IRQIsdsClient::EGenre); 
+            retVal = EIR_NoDefault;        
+            break;    
+        }
+            
+#ifdef HS_WIDGET_ENABLED            
+        case EIR_UseNetwork_PlayStation: // play last station when player is in Idle state while there is no connection.
+            getPlayController()->resume();
+            retVal = EIR_NoDefault;        
+            break;  
+#endif
+        default:
+            break;
     }
     
-    return EIR_DoDefault;
+    iUseNetworkReason = EIR_UseNetwork_NoReason;    
+    return retVal;
 }
 
 void IRApplication::handleTermsConsAccepted()
@@ -639,29 +704,33 @@
 
 void IRApplication::launchStartingView(TIRViewId aViewId)
 {
-    bool isFirstTimeUsage = false;
+    iStartingViewId = aViewId;
+    /* bool isFirstTimeUsage = false;
     iSettings->isFlagTermsAndConditions(isFirstTimeUsage);
-    iStartingViewId = aViewId;
+    
     if(isFirstTimeUsage)
     {
         iViewManager->activateView(EIRView_TermsConsView);  
 		QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);    
     }
-    else
+    else*/
     {
         iViewManager->activateView(iStartingViewId);
         QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
         QEvent* initEvent = new QEvent(iInitEvent);
         QCoreApplication::postEvent(this, initEvent, Qt::HighEventPriority);         
-    }	
+    }
+    
+    iAppFullyStarted = true;
+}
+
+bool IRApplication::isAppFullyStarted() const
+{
+    return iAppFullyStarted;
 }
 
 void IRApplication::setExitingView()
-{
-    if (XQServiceUtil::isService())
-    {
-        return;
-    }    
+{  
     TIRViewId viewId = iViewManager->getExitingView();
     if(EIRView_InvalidId != viewId)
     {
@@ -669,6 +738,52 @@
     }
 }
 
+
+#ifdef HS_WIDGET_ENABLED
+bool IRApplication::startPlaying()
+{
+    // if any loading is in progress, disallow to play
+    if (iLoadingNote && iLoadingNote->isVisible())
+    {
+        LOG( "IRApplication::startPlaying() in the return false1");
+        return false;
+    }
+    
+    if (getPlayController()->isStopped())
+    {         
+        LOG_FORMAT( "IRApplication::startPlaying(), the station name is %s", 
+                STRING2CHAR(getPlayController()->getNowPlayingPreset()->name));
+        iUseNetworkReason = EIR_UseNetwork_PlayStation;
+        getPlayController()->setConnectingStationName(getPlayController()->getNowPlayingPreset()->name);
+        if (verifyNetworkConnectivity())
+        {
+            iUseNetworkReason = EIR_UseNetwork_NoReason;
+            getPlayController()->resume();
+        }
+        return true;
+    }
+    else
+    {
+        LOG( "IRApplication::startPlaying() in the return false2");
+        return false;
+    }
+}
+
+void IRApplication::cancelPlayerLoading()
+{
+    if (IRPlayController::EConnecting == getPlayController()->state() 
+        || IRPlayController::EBuffering == getPlayController()->state())
+    {       
+        if (iLoadingNote && iLoadingNote->isVisible())
+        {
+            iLoadingNote->cancel();
+        }      
+    }   
+}
+
+#endif
+
+
 void IRApplication::startLocalServer()
 {
     QString serverName = QCoreApplication::applicationName();
@@ -745,8 +860,13 @@
 void IRApplication::handleDiskSpaceLow(qint64 aCriticalLevel)
 {
     Q_UNUSED(aCriticalLevel);
-    HbDeviceMessageBox messageBox(hbTrId("txt_irad_info_no_space_on_c_drive_internet_radio_closed"),
+#ifdef SUBTITLE_STR_BY_LOCID
+    HbDeviceMessageBox messageBox(hbTrId("txt_irad_info_insufficient_disk_space"),
             HbMessageBox::MessageTypeWarning);
+#else
+    HbDeviceMessageBox messageBox(hbTrId("Insufficient disk space"),
+                HbMessageBox::MessageTypeWarning);    
+#endif
     messageBox.setTimeout(HbPopup::NoTimeout);
     messageBox.exec();
     qApp->quit();    
--- a/qtinternetradio/ui/src/ircategoryview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/ircategoryview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -94,6 +94,13 @@
         }
         break;
 
+        case EIR_ViewCommand_ACTIVATED:
+            if (EIRViewPara_Genre == getViewParameter())
+            {
+                getViewManager()->saveScreenShot();
+            }
+            break;
+            
         default:
             break;
     }
@@ -103,23 +110,9 @@
 
 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;
+    Q_ASSERT(EIRViewPara_Genre == iViewParameter);
+    bool ret = iIsdsClient->isdsIsCategoryCached(IRQIsdsClient::EGenre);
 
-        default:
-            break;
-    }
-    
     if ( !ret )
     {
         setUseNetworkReason(EIR_UseNetwork_StartingView);
@@ -173,7 +166,11 @@
         break;
         
     case IRQIsdsClient::ELanguages : 
+#ifdef SUBTITLE_STR_BY_LOCID
         setHeadingText(hbTrId("txt_irad_list_stations_by_language"));
+#else
+        setHeadingText(hbTrId("Stations by language"));        
+#endif
         if (EIRViewPara_Language != getViewParameter())
         {
             //the view is used for other categories other than Language
@@ -186,7 +183,11 @@
         break;
         
     case IRQIsdsClient::ECountries :
+#ifdef SUBTITLE_STR_BY_LOCID
         setHeadingText(hbTrId("txt_irad_list_stations_by_country_region"));
+#else
+        setHeadingText(hbTrId("Stations by country/region"));        
+#endif
         if (EIRViewPara_Country != getViewParameter())
         {
             //the view is used for other categories other than Country
@@ -390,7 +391,11 @@
 
     disconnectIsdsClient();
     
+#ifdef SUBTITLE_STR_BY_LOCID
     popupNote(hbTrId("txt_irad_info_failed_to_connect"), HbMessageBox::MessageTypeWarning);
+#else
+    popupNote(hbTrId("Connecting failed"), HbMessageBox::MessageTypeWarning);
+#endif
     
     //if category view is starting view and failed to get data from ISDS server, back to main view
     if (getViewManager()->currentView() == this &&
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/ircontrolservice.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// System includes
+#include <xqserviceutil.h>
+
+// User includes
+#include "ircontrolservice.h"
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "irqlogger.h"
+
+// Contants
+static const QString IR_CONTROL_SERVICE_NAME = "internet_radio_10_1.com.nokia.symbian.IInternetRadioControl";
+
+// Constructor
+IrControlService::IrControlService(IRApplication *aIrApp, QObject *aParent) :
+    XQServiceProvider(IR_CONTROL_SERVICE_NAME, aParent),
+    mIrApp(aIrApp)
+{
+    publishAll();
+}
+
+// Destructor
+IrControlService::~IrControlService()
+{
+}
+
+// service interface, called via Qt Highway
+int IrControlService::handleCmd(int aCmdId)
+{
+    LOG_FORMAT( "IrControlService::handleCmd, the command is %d",  aCmdId);
+    IrServiceResult::Type result = IrServiceResult::Fail;
+        
+    switch (aCmdId)
+    {
+        case IrServiceCmd::LaunchNormally:
+            result = handleLaunchNormallyCmd();
+            break;
+                    
+        case IrServiceCmd::LaunchNowPlayingView:
+            result = handleLaunchNowPlayingViewCmd();
+            break;
+
+        case IrServiceCmd::Play:
+            result = handlePlayCmd();
+            break;
+
+        case IrServiceCmd::Stop:
+            result = handleStopCmd();
+            break;
+
+        case IrServiceCmd::Cancel:
+            result = handleCancelCmd();
+            break;
+
+        case IrServiceCmd::Foreground:
+            XQServiceUtil::toBackground(false);
+            result = IrServiceResult::Success;
+            break;
+
+        default:
+            break;
+    }
+    
+    if (!requestInfo().isSynchronous())
+    {
+        // NOTE ! we consider the Async to be success as long as the request can be sent here
+        completeRequest(setCurrentRequestAsync(), (int)result);
+    }
+    
+    return (int)result;
+}
+
+IrServiceResult::Type IrControlService::handleLaunchNowPlayingViewCmd()
+{
+    if (!mIrApp->isAppFullyStarted())
+    {
+        mIrApp->launchStartingView(EIRView_PlayingView);
+    }
+    return IrServiceResult::Success;
+}
+
+IrServiceResult::Type IrControlService::handleLaunchNormallyCmd()
+{
+    if (!mIrApp->isAppFullyStarted())
+    {
+        mIrApp->setLaunchView();
+    }
+    return IrServiceResult::Success;
+}
+
+IrServiceResult::Type IrControlService::handlePlayCmd()
+{           
+#ifdef HS_WIDGET_ENABLED    
+    LOG( "IrControlService::handlePlayCmd");
+    bool ret = mIrApp->startPlaying();
+    LOG_FORMAT( "IrControlService::handlePlayCmd, the ret is:%d",(int)ret);
+    return ret?IrServiceResult::Success : IrServiceResult::Fail;    
+#else
+    return IrServiceResult::Fail;
+#endif       
+    
+}
+
+IrServiceResult::Type IrControlService::handleStopCmd()
+{
+    if (mIrApp->getPlayController()->isPlaying())
+    {
+        mIrApp->getPlayController()->stop(EIRQUserTerminated);
+    }
+    return IrServiceResult::Success; 
+}
+
+IrServiceResult::Type IrControlService::handleCancelCmd()
+{
+#ifdef HS_WIDGET_ENABLED       
+    mIrApp->cancelPlayerLoading();
+#endif     
+    return IrServiceResult::Success;
+}
+
--- a/qtinternetradio/ui/src/irfavoritesview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irfavoritesview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -112,6 +112,8 @@
         {
             iConvertTimer->start();
         }
+        
+        getViewManager()->saveScreenShot();
         ret = EIR_NoDefault;
         break;
 
@@ -173,6 +175,16 @@
     }
 }
 
+#ifdef HS_WIDGET_ENABLED
+void IRFavoritesView::itemAboutToBeSelected(bool &aNeedNetwork)
+{
+    aNeedNetwork =  true;
+    
+    int currentIndex = iListView->currentIndex().row();
+    iPlayController->setConnectingStationName(iModel->getPreset(currentIndex)->name);     
+}
+#endif
+
 void IRFavoritesView::handleItemSelected()
 {
     int currentIndex = iListView->currentIndex().row();
@@ -202,7 +214,11 @@
         iMultiDeleteDialog->setSelectionMode(HbAbstractItemView::MultiSelection);
         
         HbGroupBox * header = new HbGroupBox;
-        header->setHeading(hbTrId("txt_irad_select_items_to_delete"));
+#ifdef SUBTITLE_STR_BY_LOCID
+        header->setHeading(hbTrId("txt_irad_subtitle_select_items_to_delete"));
+#else
+        header->setHeading(hbTrId("Select items to delete"));        
+#endif
         iMultiDeleteDialog->setHeadingWidget(header);
         
         
@@ -213,8 +229,13 @@
             delete oriActions.at(i);
         }
 
+#ifdef SUBTITLE_STR_BY_LOCID
         iMultiDeleteDialog->addAction(new HbAction(hbTrId("txt_common_button_delete")));
         iMultiDeleteDialog->addAction(new HbAction(hbTrId("txt_common_button_cancel")));
+#else
+        iMultiDeleteDialog->addAction(new HbAction(hbTrId("Delete")));
+        iMultiDeleteDialog->addAction(new HbAction(hbTrId("Cancel")));        
+#endif
     }
 
     iMultiDeleteDialog->setModel(iModel);
@@ -249,7 +270,11 @@
 {
     if (NULL == iMultiDeleteAction)
     {
-        iMultiDeleteAction = new HbAction(hbTrId("txt_irad_opt_delete_favorites"), menu());
+#ifdef SUBTITLE_STR_BY_LOCID 
+        iMultiDeleteAction = new HbAction(hbTrId("txt_irad_opt_delete_stations"), menu());
+#else
+        iMultiDeleteAction = new HbAction(hbTrId("Delete stations"), menu());        
+#endif
         connect(iMultiDeleteAction, SIGNAL(triggered()), this, SLOT(deleteFavorites()));
     }
 
@@ -364,7 +389,11 @@
             
             if(!iModel->deleteMultiFavorites(selectedIndexes))
             {
+#ifdef SUBTITLE_STR_BY_LOCID
                 popupNote(hbTrId("txt_irad_info_operation_failed"), HbMessageBox::MessageTypeWarning);
+#else
+                popupNote(hbTrId("Operation failed"), HbMessageBox::MessageTypeWarning);                
+#endif
             }
 
             updateIconIndexArray();
@@ -428,13 +457,29 @@
     contextMenu->setAttribute(Qt::WA_DeleteOnClose);
     connect(contextMenu, SIGNAL(triggered(HbAction*)), this, SLOT(actionClicked(HbAction*)));
     
-    action = contextMenu->addAction(hbTrId("txt_irad_opt_share_station"));
+#ifdef SUBTITLE_STR_BY_LOCID
+    action = contextMenu->addAction(hbTrId("txt_irad_opt_share"));
+#else
+    action = contextMenu->addAction(hbTrId("Share"));
+#endif
     action->setObjectName(KActionShareName);
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_common_menu_delete"));
+#else
+    action = contextMenu->addAction(hbTrId("Delete"));    
+#endif
     action->setObjectName(KActionDeleteName);
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_common_menu_rename_item"));
+#else
+    action = contextMenu->addAction(hbTrId("Rename"));
+#endif
     action->setObjectName(KActionRenameName);
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_common_menu_details"));
+#else
+    action = contextMenu->addAction(hbTrId("Details"));    
+#endif
     action->setObjectName(KActionDetailsName);
     
     contextMenu->open();         
@@ -469,7 +514,11 @@
 {
     int current = iListView->currentIndex().row();
     IRQPreset *preset = iModel->getPreset(current);
+#ifdef SUBTITLE_STR_BY_LOCID
     HbInputDialog::getText(hbTrId("txt_common_menu_rename_item"), this, SLOT(renameConfirmed(HbAction*)), preset->name);
+#else
+    HbInputDialog::getText(hbTrId("Rename"), this, SLOT(renameConfirmed(HbAction*)), preset->name);    
+#endif
 }
 
 void IRFavoritesView::detailsContextAction()
@@ -504,7 +553,11 @@
     }
     else
     {
+#ifdef SUBTITLE_STR_BY_LOCID
         popupNote(hbTrId("txt_irad_info_operation_failed"), HbMessageBox::MessageTypeWarning);
+#else
+        popupNote(hbTrId("Operation failed"), HbMessageBox::MessageTypeWarning);        
+#endif
     }
     
     if (!iIconIndexArray.empty())
@@ -526,7 +579,11 @@
             QString newName = dialog->value().toString().trimmed();
             if (newName.isEmpty())
             {
+#ifdef SUBTITLE_STR_BY_LOCID
                 newName = hbTrId("txt_irad_info_unnamed_station");
+#else
+                newName = hbTrId("Unnamed station");                
+#endif
             }
             
             if (newName == preset->name)
--- a/qtinternetradio/ui/src/irhistoryview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irhistoryview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -59,19 +59,29 @@
     iListView->setModel(iModel);
     iListView->setCurrentIndex(iModel->index(0));
     
-    iClearHistoryAction = new HbAction(hbTrId("txt_irad_menu_clear_list"), menu());
-
+#ifdef SUBTITLE_STR_BY_LOCID
+    iClearHistoryAction = new HbAction(hbTrId("txt_irad_opt_clear_list"), menu());
+#else
+    iClearHistoryAction = new HbAction(hbTrId("Clear list"), menu());    
+#endif
     
     iConvertTimer = new QTimer(this);
     iConvertTimer->setInterval(10);
     
-    connect(iClearHistoryAction, SIGNAL(triggered()), this, SLOT(clearAllList()));
+    connect(iClearHistoryAction, SIGNAL(triggered()), this, SLOT(popupClearHistoryConfirmMessageBox()));
     connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
     this, SLOT(networkRequestNotified(IRQNetworkEvent)));
     connect(iModel, SIGNAL(modelChanged()), this, SLOT(modelChanged()));
     connect(iConvertTimer, SIGNAL(timeout()), this, SLOT(convertAnother()));
 }
-
+void IRHistoryView::popupClearHistoryConfirmMessageBox()
+{
+#ifdef SUBTITLE_STR_BY_LOCID
+    HbMessageBox::question(hbTrId("txt_irad_info_clear_station_list"), this, SLOT(clearAllList(HbAction*)), hbTrId("txt_common_button_ok"), hbTrId("txt_common_button_cancel"));
+#else
+    HbMessageBox::question(hbTrId("Clear station list?"), this, SLOT(clearAllList(HbAction*)), hbTrId("Ok"), hbTrId("Cancel"));    
+#endif
+}
 /* 
  * Description : destructor
  */
@@ -171,6 +181,16 @@
     }
 }
 
+#ifdef HS_WIDGET_ENABLED
+void IRHistoryView::itemAboutToBeSelected(bool &aNeedNetwork)
+{
+    aNeedNetwork =  true;
+    
+    int index = iListView->currentIndex().row();
+    iPlayController->setConnectingStationName(iModel->getHistoryInfo(index)->getChannelName()); 
+}
+#endif
+
 void IRHistoryView::networkRequestNotified(IRQNetworkEvent aEvent)
 {
     if (getViewManager()->currentView() != this)
@@ -224,13 +244,20 @@
 // IRHistoryView::clearAllList()
 // gets the List which was stored earlier
 //---------------------------------------------------------------------------
-void IRHistoryView::clearAllList()
+void IRHistoryView::clearAllList(HbAction *aAction)
 {
-    iIconIndexArray.clear();
-    iModel->clearAllList();
-    iConvertTimer->stop();
-    iIsdsClient->isdsLogoDownCancelTransaction();
-    iListView->reset();
+    HbMessageBox *dialog = static_cast<HbMessageBox*>(sender());
+    if (dialog)
+    {
+        if (aAction == dialog->actions().at(0))
+        {
+            iIconIndexArray.clear();
+            iModel->clearAllList();
+            iConvertTimer->stop();
+            iIsdsClient->isdsLogoDownCancelTransaction();
+            iListView->reset();
+        }
+    }    
 }
 
 void IRHistoryView::prepareMenu()
@@ -366,19 +393,31 @@
     switch (retValue)
     {
     case EIRQErrorNone:
+#ifdef SUBTITLE_STR_BY_LOCID
         add2FavNote->setTitle(hbTrId("txt_irad_info_added_to_favorites"));
+#else
+        add2FavNote->setTitle(hbTrId("Added to Favorites"));        
+#endif
         //add2FavNote->setIcon(HbIcon( QString("qtg_large_ok")));
         add2FavNote->show();
         break;
 
     case EIRQErrorOutOfMemory:
+#ifdef SUBTITLE_STR_BY_LOCID
         add2FavNote->setTitle(hbTrId("txt_irad_info_can_not_add_more"));
+#else
+        add2FavNote->setTitle(hbTrId("Can't add more"));        
+#endif
         //add2FavNote->setIcon(HbIcon( QString("qtg_large_ok")));
         add2FavNote->show();        
         break;
 
     case EIRQErrorAlreadyExist:
+#ifdef SUBTITLE_STR_BY_LOCID
         add2FavNote->setTitle(hbTrId("txt_irad_info_favorite_updated"));
+#else
+        add2FavNote->setTitle(hbTrId("Favorite updated"));        
+#endif
         //add2FavNote->setIcon(HbIcon( QString("qtg_large_ok")));
         add2FavNote->show();           
         break;
@@ -395,7 +434,11 @@
     bool ret = iModel->deleteOneItem(current);     
     if( !ret )
 	  {
+#ifdef SUBTITLE_STR_BY_LOCID
 	    popupNote(hbTrId("txt_irad_info_operation_failed"), HbMessageBox::MessageTypeWarning);
+#else
+	    popupNote(hbTrId("Operation failed"), HbMessageBox::MessageTypeWarning);	    
+#endif
 	  }
 }
 void IRHistoryView::detailsContextAction()
@@ -422,11 +465,23 @@
     contextMenu->setAttribute(Qt::WA_DeleteOnClose);
     connect(contextMenu, SIGNAL(triggered(HbAction*)), this, SLOT(actionClicked(HbAction*)));
     
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_irad_menu_add_to_favorite"));
+#else
+    action = contextMenu->addAction(hbTrId("Add to favorites"));    
+#endif
     action->setObjectName(KActionAddName);
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_common_menu_delete"));
+#else
+    action = contextMenu->addAction(hbTrId("Delete"));    
+#endif
     action->setObjectName(KActionDeleteName);
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_common_menu_details"));
+#else
+    action = contextMenu->addAction(hbTrId("Details"));    
+#endif
     action->setObjectName(KActionDetailsName);
     
     contextMenu->open();
--- a/qtinternetradio/ui/src/irlastplayedstationinfo.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irlastplayedstationinfo.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,6 +16,10 @@
 */
 #include <QDataStream>
 #include <QFile>
+#ifdef HS_WIDGET_ENABLED
+#include <QSettings>
+#include "irservicedef.h"
+#endif
 
 #include "irqisdsdatastructure.h"
 #include "irlastplayedstationinfo.h"
@@ -57,6 +61,11 @@
         return;
     }
     
+#ifdef HS_WIDGET_ENABLED	
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    settings.setValue(KIrSettingStationName,iLastPlayedStation->name);
+#endif
+    
     QFile file(KFileName);
     bool ret = file.open(QIODevice::Truncate | QIODevice::WriteOnly);
     if (!ret)
--- a/qtinternetradio/ui/src/irmainmodel.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irmainmodel.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -51,10 +51,17 @@
 
 void IRMainModel::initModel()
 {
+#ifdef SUBTITLE_STR_BY_LOCID
     iPrimaryTexts << hbTrId("txt_irad_list_stations_by_country_region")
                   << hbTrId("txt_irad_list_stations_by_language")
-                  << hbTrId("txt_irad_list_recently_played_stations")
-                  << hbTrId("txt_irad_list_recently_played_songs");
+                  << hbTrId("txt_irad_list_stations_recently_played")
+                  << hbTrId("txt_irad_list_songs_recently_played");
+#else
+    iPrimaryTexts << hbTrId("Stations by country/region")
+                  << hbTrId("Stations by language")
+                  << hbTrId("Stations recently played")
+                  << hbTrId("Songs recently played");    
+#endif
 }
 
 void IRMainModel::checkUpdate()
@@ -64,7 +71,12 @@
         return;
     }
     
+#ifdef SUBTITLE_STR_BY_LOCID
     QString primary = hbTrId("txt_irad_subtitle_stations_from_play_list");
+#else
+    QString primary = hbTrId("Stations from play list");    
+#endif
+    
     if (iPlayList->getNumberOfEntries() > 0)
     {
         //if pls item is not in collections view, add
--- a/qtinternetradio/ui/src/irmainview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irmainview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -43,7 +43,7 @@
 	//if this view is not starting view, finish all initialization in constructor
 	if (getViewManager()->views().count() > 0)
 	{
-	    lazyInit();
+	    normalInit();
 	}
 }
 
@@ -172,10 +172,45 @@
     iMainModel->checkUpdate();
 }
 
+//from base class IRBaseView
+TIRHandleResult IRMainView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+    if (!initCompleted())
+    {
+        return EIR_DoDefault;
+    }
+    
+    Q_UNUSED(aReason);
+    TIRHandleResult ret = IrAbstractListViewBase::handleCommand(aCommand, aReason);
+    
+    switch (aCommand)
+    {
+    case EIR_ViewCommand_ACTIVATED:
+        getViewManager()->saveScreenShot();
+        break;
+        
+    default:
+        break;
+    }
+    
+    return ret;
+}
+
 void IRMainView::lazyInit()
 {
     if (!initCompleted())
     {
+        normalInit();
+        
+        //initialization from handleCommand()
+        handleCommand(EIR_ViewCommand_ACTIVATED, EIR_ViewCommandReason_Show);
+    }
+}
+
+void IRMainView::normalInit()
+{
+    if (!initCompleted())
+    {
         IrAbstractListViewBase::lazyInit();
         initToolBar();
         setCheckedAction();
--- a/qtinternetradio/ui/src/irmemorycollector.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irmemorycollector.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -16,10 +16,12 @@
 */
 
 #include <QCoreApplication>
+#include <QSettings>
 
 #include "irmemorycollector.h"
 #include "irapplication.h"
 #include "irviewmanager.h"
+#include "irservicedef.h"
 
 IRMemoryCollector::IRMemoryCollector(IRApplication* aApplication) : iApplication(aApplication)
 {
@@ -29,6 +31,15 @@
 void IRMemoryCollector::aboutToQuit()
 {
     IRViewManager *viewManager = iApplication->getViewManager();
+    
+    //we need to save the status for splash view, need to extend in future
+    TIRViewId exitingID = viewManager->getExitingView();
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    QVariant data(QVariant::Bool);
+    bool isNowplaying = (EIRView_PlayingView == exitingID)? true:false;
+    data.setValue(isNowplaying);
+    settings.setValue(KIrSettingSplashNowplaying,data); 
+    
     delete iApplication;
     iApplication = NULL;
         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irmonitorservice.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -0,0 +1,299 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// System includes
+#include <QSettings>
+
+// User includes
+#include "irmonitorservice.h"
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "irlastplayedstationinfo.h"
+#include "irqisdsdatastructure.h"
+#include "irqmetadata.h"
+#include "irplaylist.h"
+#include "irviewmanager.h"
+#include "irqlogger.h"
+
+// Contants
+static const QString IR_MONITOR_SERVICE = "internet_radio_10_1.com.nokia.symbian.IInternetRadioMonitor";
+
+#define IS_READY(itemFlag)   mReadyItems.testFlag(itemFlag)
+#define SET_FLAG(itemFlag)   mReadyItems |= itemFlag
+#define CLEAR_FLAG(itemFlag) mReadyItems &= ~itemFlag
+#define CLEAR_ALL_FLAGS()    mReadyItems &= !mReadyItems
+#define ANY_READY() \
+        mReadyItems.testFlag(StationName) || \
+        mReadyItems.testFlag(StationLogo) || \
+        mReadyItems.testFlag(MetaData) || \
+        mReadyItems.testFlag(IrState)
+
+// Constructor
+IrMonitorService::IrMonitorService(IRApplication *aIrApp, QObject *aParent) :
+    XQServiceProvider(IR_MONITOR_SERVICE, aParent),
+    mStationLogoAvailable(false),
+    mIrState(IrAppState::Unknown),
+    mIrApp(aIrApp),
+    mPlayController(NULL)
+{   
+    publishAll();
+    mPlayController = mIrApp->getPlayController();
+    setupConnection();
+}
+
+// Destructor
+IrMonitorService::~IrMonitorService()
+{
+}
+
+void IrMonitorService::setupConnection()
+{
+    // meta data update
+    connect(mPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), 
+        this, SLOT(updateMetaData(IRQMetaData*)));
+    // station logo update
+    connect(mPlayController, SIGNAL(stationLogoUpdated(bool)), 
+        this, SLOT(handleStationLogoUpdated(bool)));
+    // connecting started
+    connect(mPlayController, SIGNAL(connectingStarted(QString)), 
+        this, SLOT(handleLoadingStarted(QString))); 
+    // buffering started   
+    connect(mPlayController, SIGNAL(bufferingStarted(QString)), 
+        this, SLOT(handleLoadingStarted(QString))); 
+    // playing started  
+    connect(mPlayController, SIGNAL(playingStarted()), 
+        this, SLOT(handlePlayStarted()));
+     // playing stopped  
+    connect(mPlayController, SIGNAL(playingStopped()), 
+        this, SLOT(handlePlayStopped()));  
+    // connecting cancelled
+    connect(mPlayController, SIGNAL(connectingCancelled(QString)), 
+        this, SLOT(handleLoadingCancelled(QString)));  
+    // buffering cancelled
+    connect(mPlayController, SIGNAL(bufferingCancelled(QString)), 
+        this, SLOT(handleLoadingCancelled(QString)));          
+}
+
+// service interface, called via Qt Highway
+void IrMonitorService::registerNotifications()
+{
+    mRequestList.append(setCurrentRequestAsync());
+    
+    if (ANY_READY())
+    {
+        notifyAll();
+    }
+}
+
+// service interface, called via Qt Highway
+void IrMonitorService::refreshAllData()
+{
+    IrServiceDataList notificationList;
+    
+    IRQPreset * currentPreset = mPlayController->getNowPlayingPreset();    
+    
+    switch (mPlayController->state())
+    {
+        case IRPlayController::EIdle:
+            notificationList.append(IrServiceData((int)IrServiceNotification::IrState, (int)IrAppState::RunningInit));
+            break;
+                    
+        case IRPlayController::EStopped:
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationName, currentPreset->name));
+#ifdef HS_WIDGET_ENABLED                
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationLogo, mPlayController->isStationLogoAvailable()));
+#endif                
+            notificationList.append(IrServiceData((int)IrServiceNotification::MetaData, QString("")));            
+            notificationList.append(IrServiceData((int)IrServiceNotification::IrState, (int)IrAppState::RunningStopped));                           
+            break;
+
+#ifdef HS_WIDGET_ENABLED
+        case IRPlayController::EConnecting:   
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationName, mPlayController->getConnectingStationName()));
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationLogo, mPlayController->isStationLogoAvailable()));   
+            notificationList.append(IrServiceData((int)IrServiceNotification::MetaData, QString("")));                       
+            notificationList.append(IrServiceData((int)IrServiceNotification::IrState, (int)IrAppState::Loading));
+            break;
+#endif            
+                        
+        case IRPlayController::EBuffering:         
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationName, currentPreset->name));
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationLogo, mPlayController->isStationLogoAvailable()));   
+            notificationList.append(IrServiceData((int)IrServiceNotification::MetaData, QString("")));                       
+            notificationList.append(IrServiceData((int)IrServiceNotification::IrState, (int)IrAppState::Loading));
+            break;
+
+        case IRPlayController::EPlaying:
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationName, currentPreset->name));
+#ifdef HS_WIDGET_ENABLED                
+            notificationList.append(IrServiceData((int)IrServiceNotification::StationLogo, mPlayController->isStationLogoAvailable()));  
+#endif                 
+            notificationList.append(IrServiceData((int)IrServiceNotification::MetaData, mMetaData));             
+            notificationList.append(IrServiceData((int)IrServiceNotification::IrState, (int)IrAppState::Playing));      
+            break;
+
+        default:
+            break;
+    }
+    
+    completeRequest(setCurrentRequestAsync(), qVariantFromValue(notificationList));
+}
+
+/********************************************************************************************************
+ * SLOT for Play Controller
+ *******************************************************************************************************
+ */
+
+void IrMonitorService::updateMetaData(IRQMetaData* aMetaData)
+{    
+    if (aMetaData)
+    {
+        SET_FLAG(MetaData);
+        mMetaData = aMetaData->getArtistSongName();
+        
+        notifyAll();
+    }
+}
+ 
+void IrMonitorService::handleStationLogoUpdated(bool aLogoAvailable)
+{
+    mStationLogoAvailable = aLogoAvailable;
+    SET_FLAG(StationLogo);
+    
+    notifyAll();
+}
+ 
+void IrMonitorService::handleLoadingStarted(const QString &aStationName)
+{
+    mMetaData.clear();
+    SET_FLAG(MetaData);
+    
+    mStationName = aStationName;        
+    SET_FLAG(StationName);
+    
+    mIrState = IrAppState::Loading;
+    SET_FLAG(IrState);
+                 
+    notifyAll();
+}
+
+void IrMonitorService::handleLoadingCancelled(const QString &aStationName)
+{
+    mMetaData.clear();
+    SET_FLAG(MetaData);
+    
+    mStationName = aStationName;
+    SET_FLAG(StationName);
+    
+    if (mPlayController->isStopped())
+    {
+        mIrState = IrAppState::RunningStopped;
+    }
+    else
+    {
+        mIrState = IrAppState::RunningInit;
+    }   
+    SET_FLAG(IrState); 
+
+    notifyAll();
+}
+
+void IrMonitorService::handlePlayStarted()
+{
+    mMetaData.clear();
+    SET_FLAG(MetaData);
+    
+    IRQPreset * currentPreset = mPlayController->getNowPlayingPreset();
+    mStationName = currentPreset->name;
+    SET_FLAG(StationName);
+    
+    mIrState = IrAppState::Playing;
+    SET_FLAG(IrState);
+    
+    notifyAll();
+}
+
+void IrMonitorService::handlePlayStopped()
+{
+    mMetaData.clear();
+    SET_FLAG(MetaData);
+
+    mIrState = IrAppState::RunningStopped;
+    SET_FLAG(IrState);
+        
+    notifyAll();
+}
+
+
+/********************************************************************************************************
+ * Others
+ *******************************************************************************************************
+ */
+void IrMonitorService::notifyAll()
+{
+    IrServiceDataList notificationList;
+    
+    if(IS_READY(StationName))
+    {
+        notificationList.append(IrServiceData((int)IrServiceNotification::StationName, mStationName)); 
+    }
+    
+    if(IS_READY(StationLogo))
+    {
+        notificationList.append(IrServiceData((int)IrServiceNotification::StationLogo, mStationLogoAvailable)); 
+    }
+    
+    if(IS_READY(MetaData))
+    {
+        notificationList.append(IrServiceData((int)IrServiceNotification::MetaData, mMetaData)); 
+    }
+    
+    if(IS_READY(IrState))
+    {
+        notificationList.append(IrServiceData((int)IrServiceNotification::IrState, (int)mIrState)); 
+    }
+    
+    if(notifyList(notificationList))
+    {
+        CLEAR_ALL_FLAGS();        
+    }
+}
+
+bool IrMonitorService::notifyList(const IrServiceDataList &aDataList)
+{
+    bool retVal = true;
+    
+    if (mRequestList.count() > 0
+        && aDataList.count() > 0)
+    {
+        foreach (int requestId, mRequestList) 
+        {
+            retVal &= completeRequest(requestId, qVariantFromValue(aDataList));
+        }
+        mRequestList.clear();
+    }
+    else
+    {
+        return false;
+    }
+    
+    return retVal;
+}
+
+Q_IMPLEMENT_USER_METATYPE(IrServiceData)
+Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(IrServiceDataList)
+
--- a/qtinternetradio/ui/src/irnowplayingview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irnowplayingview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -19,6 +19,7 @@
 #include <hbaction.h>
 #include <hblabel.h>
 #include <hbnotificationdialog.h>
+#include <QSettings>
 
 #ifdef NOWPLAYING_VIEW_OPTION_B
 #include <hbframedrawer.h>
@@ -45,6 +46,7 @@
 #include "irqlogger.h"
 #include "irplaylist.h"
 #include "irstationdetailsview.h"
+#include "irservicedef.h"
 
 #ifdef ADV_ENABLED
 #include <QTimer>
@@ -61,6 +63,9 @@
 static const QString KLcdGraphics("qtg_fr_lcd");
 #endif
 
+
+static void saveStationLogo(const QPixmap &aStationLogo);
+
 /*
  * Description : constructor
  */
@@ -215,10 +220,16 @@
  */
 void IRNowPlayingView::updateWidgets()
 {
+    if (iLaunchActionNeeded) // if lunch as starting view, leave the update action to launchAction()
+    {
+        return;
+    }
+    
     if(iPlayController->getNowPlayingPreset())
     {
         iStationName->setPlainText(iPlayController->getNowPlayingPreset()->name);
     }
+    loadStationLogo();
 }
 
 void IRNowPlayingView::updateMusicStoreStatus()
@@ -331,6 +342,7 @@
         connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
                 this, SLOT(handleLogoDownloaded(IRQPreset* )));
         updateStationLogo();
+        getViewManager()->saveScreenShot();
         break;
         
     case EIR_ViewCommand_DEACTIVATE:
@@ -355,14 +367,19 @@
 void IRNowPlayingView::launchAction()
 {      
     setUseNetworkReason(EIR_UseNetwork_StartingView);
+    updateForLauchAction();
+#ifdef HS_WIDGET_ENABLED	
+    iPlayController->setConnectingStationName(iStationName->plainText());
+#endif	
     iApplication->verifyNetworkConnectivity();
     getViewManager()->pushViewById(EIRView_MainView);
-    iLaunchActionNeeded = true;
-    updateForLauchAction();
+    iLaunchActionNeeded = false;
 }
 
 void IRNowPlayingView::lazyInit()
 {
+    iLaunchActionNeeded = true;
+    
     if (!initCompleted())
     {       
         normalInit();
@@ -408,22 +425,33 @@
         IRQPreset *preset = playList->getPresetForEntry(0);
         iStationName->setPlainText(preset->name);
         iFindinNmsAllowed = (0 == preset->musicStoreStatus.compare("yes",Qt::CaseInsensitive));
+#ifdef HS_WIDGET_ENABLED            
+        iPlayController->reloadNowplayingPreset(preset,false,EIRQAdhocExternal);
+#endif
+        iStationLogo->setIcon(HbIcon(KDefaultStationLogo));
+        iLogoNeedUpdate = true;            
+#ifdef ADV_ENABLED
+        iAdvUrl = KDefaultAdvLink; 
+        iAdvImage->setIcon(logoHbIcon);
+        iAdvImageNeedUpdate = true;  
+#endif
         delete preset;
     }
     else
     {
         IRLastPlayedStationInfo *lastPlayedStationInfo = iApplication->getLastPlayedStationInfo();
         IRQPreset *lastPreset = lastPlayedStationInfo->getLastPlayedStation();
-        
         if (lastPreset)
         {
             iStationName->setPlainText(lastPreset->name); 
-            iFindinNmsAllowed = (0 == lastPreset->musicStoreStatus.compare("yes",Qt::CaseInsensitive)); 
+            iFindinNmsAllowed = (0 == lastPreset->musicStoreStatus.compare("yes",Qt::CaseInsensitive));
         }
         else
         {
+            iStationName->setPlainText(QString("")); 
             iFindinNmsAllowed = false;
         }
+        loadStationLogo();
     }
 }
 
@@ -464,13 +492,16 @@
     if( logoPixmap.loadFromData(logoRawData, aPreset->logoData.Length()) )
     {
         if( EDownloadLogo == iLogoDownloadState )
-        {
+        {		
+            saveStationLogo(logoPixmap);
             QPixmap newLogoPixmap = 
-                 logoPixmap.scaled(QSize(KNowPlayingLogoSize,KNowPlayingLogoSize),Qt::KeepAspectRatio);      
+                 logoPixmap.scaled(QSize(KNowPlayingLogoSize,KNowPlayingLogoSize),Qt::KeepAspectRatio);
             QIcon logoQIcon(newLogoPixmap);
             HbIcon logoHbIcon(logoQIcon);
-            iStationLogo->setIcon(logoHbIcon);        
+            iStationLogo->setIcon(logoHbIcon);
+            iPlayController->emitStationLogoUpdated(true);
             iLogoNeedUpdate = false;          
+            getViewManager()->saveScreenShot();
 #ifdef ADV_ENABLED
             QTimer::singleShot(1, this, SLOT(updateAdvImage()));
 #endif
@@ -547,7 +578,7 @@
             }
             else if( EIR_UseNetwork_PlayStation == getUseNetworkReason() )
             {
-                handlePlayStopAction();
+                iPlayController->resume();
             }
             break;
         }
@@ -581,11 +612,6 @@
  */
 void IRNowPlayingView::handlePlayStarted()
 {
-    if(iLaunchActionNeeded)
-    {
-        iLaunchActionNeeded = false;
-        updateStationLogo();
-    }
     iPlayStopAction->setIcon(HbIcon(KStopButtonIcon));
 }
 
@@ -595,17 +621,6 @@
     iSongName->setPlainText("");
     iArtistName->setPlainText("");
     iSongNameAvailable = false;
-        
-    if( this != getViewManager()->currentView() )
-    {
-        iStationLogo->setIcon(HbIcon(KDefaultStationLogo));
-        iLogoNeedUpdate = true;
-#ifdef ADV_ENABLED
-        iAdvUrl = KDefaultAdvLink;
-        iAdvImage->setIcon(HbIcon(KDefaultStationLogo));
-        iAdvImageNeedUpdate = true;  
-#endif        
-    }
 }
 
 void IRNowPlayingView::updateMetaData(IRQMetaData* aMetaData)
@@ -650,7 +665,11 @@
 {
     if(!iFindinNmsAllowed)
     {
-        popupNote(hbTrId("txt_irad_info_disallowed_by_this_station"), HbMessageBox::MessageTypeInformation);
+#ifdef SUBTITLE_STR_BY_LOCID
+        popupNote(hbTrId("txt_irad_info_not_allowed_by_this_station"), HbMessageBox::MessageTypeInformation);
+#else
+        popupNote(hbTrId("Not allowed by this station"), HbMessageBox::MessageTypeInformation);        
+#endif
         return;        
     }
     
@@ -660,8 +679,12 @@
         return;        
     }
     
-    // Need to log the find song in NMS event, iStatisticsReporter->logNmsEvent(IRQStatisticsReporter::EIRFind,channelId);   
+    // Need to log the find song in NMS event, iStatisticsReporter->logNmsEvent(IRQStatisticsReporter::EIRFind,channelId); 
+#ifdef SUBTITLE_STR_BY_LOCID
     popupNote(hbTrId("txt_irad_info_music_store_not_available"), HbMessageBox::MessageTypeInformation);
+#else
+    popupNote(hbTrId("Music store not available"), HbMessageBox::MessageTypeInformation);    
+#endif
 }
 
 void IRNowPlayingView::handleIdentifySongAction()
@@ -675,27 +698,28 @@
 
 void IRNowPlayingView::handlePlayStopAction()
 {
-    if(iPlayController->isIdle())
+    switch (iPlayController->state())
     {
-        setUseNetworkReason(EIR_UseNetwork_StartingView);
-    }
-    else
-    {
-        setUseNetworkReason(EIR_UseNetwork_PlayStation);
+        case IRPlayController::EPlaying:
+            iPlayController->stop(EIRQUserTerminated);
+            return;
+                    
+        case IRPlayController::EStopped:
+            setUseNetworkReason(EIR_UseNetwork_PlayStation);
+            break;
+            
+        default:
+            return;
     }
     
-    if (false == iApplication->verifyNetworkConnectivity())
+ 
+#ifdef HS_WIDGET_ENABLED		
+    iPlayController->setConnectingStationName(iStationName->plainText());         
+#endif
+		
+    if (iApplication->verifyNetworkConnectivity())
     {
-        return;
-    }
-    setUseNetworkReason(EIR_UseNetwork_NoReason);
-    
-    if (iPlayController->isPlaying())
-    {
-        iPlayController->stop(EIRQUserTerminated);
-    }
-    else
-    {
+        setUseNetworkReason(EIR_UseNetwork_NoReason);
         iPlayController->resume();
     }
 }
@@ -710,19 +734,31 @@
     switch (retValue)
     {
     case EIRQErrorNone:
+#ifdef SUBTITLE_STR_BY_LOCID       
         add2FavNote->setTitle(hbTrId("txt_irad_info_added_to_favorites"));
+#else
+        add2FavNote->setTitle(hbTrId("Added to Favorites"));         
+#endif
         //add2FavNote->setIcon(HbIcon( QString("qtg_large_ok")));
         add2FavNote->show();
         break;
 
     case EIRQErrorOutOfMemory:
+#ifdef SUBTITLE_STR_BY_LOCID 
         add2FavNote->setTitle(hbTrId("txt_irad_info_can_not_add_more"));
+#else
+        add2FavNote->setTitle(hbTrId("Can't add more"));        
+#endif
         //add2FavNote->setIcon(HbIcon( QString("qtg_large_ok")));
         add2FavNote->show();        
         break;
 
     case EIRQErrorAlreadyExist:
+#ifdef SUBTITLE_STR_BY_LOCID 
         add2FavNote->setTitle(hbTrId("txt_irad_info_favorite_updated"));
+#else
+        add2FavNote->setTitle(hbTrId("Favorite updated"));        
+#endif
         //add2FavNote->setIcon(HbIcon( QString("qtg_large_ok")));
         add2FavNote->show();           
         break;
@@ -782,3 +818,42 @@
 }
 #endif
 
+void IRNowPlayingView::loadStationLogo()
+{
+    if (iPlayController->isStationLogoAvailable())    
+    { 
+        QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+        if (settings.value(KIrSettingStationLogo).canConvert<QPixmap>())
+        {
+            QPixmap logoPixmap = settings.value(KIrSettingStationLogo).value<QPixmap>();
+            QPixmap newLogoPixmap = 
+                 logoPixmap.scaled(QSize(KNowPlayingLogoSize,KNowPlayingLogoSize),Qt::KeepAspectRatio);
+            QIcon logoQIcon(newLogoPixmap);
+            HbIcon logoHbIcon(logoQIcon);
+            iStationLogo->setIcon(logoHbIcon);
+            iLogoNeedUpdate = false;            
+#ifdef ADV_ENABLED
+            iAdvUrl = iPlayController->getNowPlayingPreset()->advertisementUrl; 
+            iAdvImage->setIcon(logoHbIcon);
+            iAdvImageNeedUpdate = false;  
+#endif            	
+            return;
+        }  
+    }
+
+    iStationLogo->setIcon(HbIcon(KDefaultStationLogo));
+    iLogoNeedUpdate = true;            
+#ifdef ADV_ENABLED
+    iAdvUrl = KDefaultAdvLink; 
+    iAdvImage->setIcon(logoHbIcon);
+    iAdvImageNeedUpdate = true;  
+#endif
+}
+
+void saveStationLogo(const QPixmap &aStationLogo)
+{
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    QVariant logoData(QVariant::Pixmap);
+    logoData.setValue(aStationLogo);
+    settings.setValue(KIrSettingStationLogo,logoData);    
+}
--- a/qtinternetradio/ui/src/iropenwebaddressview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/iropenwebaddressview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -167,7 +167,11 @@
 
     if (0 == stationName.size())
     {
-        iName->setContentWidgetData(QString("text"), hbTrId("txt_irad_info_unnamed"));
+#ifdef SUBTITLE_STR_BY_LOCID
+        iName->setContentWidgetData(QString("text"), hbTrId("txt_irad_info_unnamed_station"));
+#else
+        iName->setContentWidgetData(QString("text"), hbTrId("Unnamed station"));        
+#endif
     }
     else
     {
@@ -189,7 +193,11 @@
     temp = iName->contentWidgetData(QString("text")).toString();
     if (0 == temp.size())
     {
-        iName->setContentWidgetData(QString("text"), hbTrId("txt_irad_info_unnamed"));
+#ifdef SUBTITLE_STR_BY_LOCID
+        iName->setContentWidgetData(QString("text"), hbTrId("txt_irad_info_unnamed_station"));
+#else
+        iName->setContentWidgetData(QString("text"), hbTrId("Unnamed station"));        
+#endif
     }
 }
 
@@ -206,8 +214,13 @@
     iUrl->setContentWidgetData("maxLength",MAX_URL_CHARACTOR_NUMBER);
     iModel->appendDataFormItem(iUrl);
 
+#ifdef SUBTITLE_STR_BY_LOCID
     iName = new HbDataFormModelItem(
             HbDataFormModelItem::TextItem, hbTrId("txt_irad_formlabel_station_name"));
+#else
+    iName = new HbDataFormModelItem(
+            HbDataFormModelItem::TextItem, hbTrId("Station name"));    
+#endif
     iName->setContentWidgetData("maxLength", MAX_URL_CHARACTOR_NUMBER);
     iModel->appendDataFormItem(iName);
 
@@ -229,7 +242,9 @@
     }
 
     setUseNetworkReason(EIR_UseNetwork_OpenWebAddress);
-
+#ifdef HS_WIDGET_ENABLED	
+    iPlayController->setConnectingStationName(preset.name);
+#endif
     // Verify the connectivity
     if (false == iApplication->verifyNetworkConnectivity())
     {
@@ -282,7 +297,11 @@
     // check the URL
     if (!IRQUtility::isValidUrl(server.url))
     {
-        popupNote(hbTrId("txt_irad_info_invalid_link_please_change_it"), HbMessageBox::MessageTypeInformation);
+#ifdef SUBTITLE_STR_BY_LOCID
+        popupNote(hbTrId("txt_irad_info_invalid_station_address"), HbMessageBox::MessageTypeInformation);
+#else
+        popupNote(hbTrId("Invalid station address"), HbMessageBox::MessageTypeInformation);        
+#endif
         return false;
     }
 
@@ -291,7 +310,11 @@
     server.serverName = iName->contentWidgetData(QString("text")).toString();
     if (0 == server.serverName.size())
     {
-        server.serverName = hbTrId("txt_irad_info_unnamed");
+#ifdef SUBTITLE_STR_BY_LOCID
+        server.serverName = hbTrId("txt_irad_info_unnamed_station");
+#else
+        server.serverName = hbTrId("Unnamed station");        
+#endif
     }
 
     aPreset.insertChannelServer(server);
@@ -345,7 +368,11 @@
     if( object == iNameEditorPtr
         && event->type() == QEvent::FocusIn )
     {
-        if(hbTrId("txt_irad_info_unnamed") == iName->contentWidgetData(QString("text")).toString())
+#ifdef SUBTITLE_STR_BY_LOCID
+        if(hbTrId("txt_irad_info_unnamed_station") == iName->contentWidgetData(QString("text")).toString())
+#else
+        if(hbTrId("Unnamed station") == iName->contentWidgetData(QString("text")).toString())            
+#endif
         {
             iName->setContentWidgetData(QString("text"), QString(""));
         }
--- a/qtinternetradio/ui/src/irplaycontroller.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irplaycontroller.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -20,6 +20,9 @@
 #include <QFile>
 #include <QTextStream>
 #endif
+#ifdef HS_WIDGET_ENABLED
+#include <QSettings>
+#endif
 
 #include "irplaycontroller.h"
 #include "irapplication.h"
@@ -35,6 +38,9 @@
 #include "irqstatisticsreporter.h"
 #include "irenummapper.h" 
 #include "irqlogger.h"
+#ifdef HS_WIDGET_ENABLED
+#include "irservicedef.h"
+#endif
 
 #ifdef Q_CC_NOKIAX86
 void getRadioServerAddress(QString & aUrl);
@@ -77,6 +83,10 @@
              IRQStatisticsReporter::IRConnectedFrom, \
              ui_enum, KConnectedFromMap )                 
 
+
+static bool loadStationLogoFlag();
+static void saveStationLogoFlag(bool aIsStationLogoAvailable);
+
 //                                        public functions
 
 /*
@@ -86,10 +96,13 @@
     iApplication(aApplication),
     iMediaPlayer(new IRQMediaPlayer()),
     iStatisticsReporter(NULL),
-    iConnectedFrom(EIRQIsds),
     iGetServerResult(false),
     iNowPlayingPreset(new IRQPreset()),
     iNowPlayingPresetBackup(new IRQPreset()),
+    iConnectedFrom(EIRQIsds),
+    iConnectedFromBackup(EIRQIsds),
+    iStationLogoAvailable(false),
+    iStationLogoAvailableBackup(false),
     iMetaData(NULL),
     iSongHistoryEngine(IRQSongHistoryEngine::openInstance()),
     iPlayState(EIdle),
@@ -98,8 +111,29 @@
     iUrlArray(0),
     iRealBitrate(0),
     iLastError(EIRQErrorNone),
-    iStopReason(EIRQUnknownTermination)
+    iStopReason(EIRQUnknownTermination),
+    iErrorNote(NULL)
 {
+    // use the last played station to initiliaze the backup value.
+    // can regard the player is bootup, and initilize its LCD screen with last played station info if available.
+    IRQPreset *lastPlayedPreset = iApplication->getLastPlayedStationInfo()->getLastPlayedStation();
+    if (lastPlayedPreset)
+    {
+        *iNowPlayingPreset      =   *lastPlayedPreset;
+        iLastPlayedUrl          =   getFirstTryUrl(lastPlayedPreset);
+        iConnectedFrom          =   iApplication->getLastPlayedStationInfo()->connectedFrom();
+        iStationLogoAvailable   =   loadStationLogoFlag();
+    }
+    
+    if (iNowPlayingPreset->getChannelURLCount())
+    {
+        iPlayState = EStopped;
+    }
+    else
+    {
+        iPlayState = EIdle;
+    }    
+    
     connectSignalSlot(); 
     iStatisticsReporter = IRQStatisticsReporter::openInstance();
 }
@@ -120,7 +154,12 @@
 
     delete iUrlArray;
     iUrlArray = NULL;
+    
+    delete iErrorNote;
+    iErrorNote = NULL;
 
+    saveStationLogoFlag(iStationLogoAvailable);
+	
     if (iSongHistoryEngine)
     {
         iSongHistoryEngine->closeInstance();
@@ -139,72 +178,74 @@
  */
 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)
+    {       
+        QString firstTryUrl = getFirstTryUrl(aPreset);
+        if (firstTryUrl.isEmpty())
         {
             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;
-        
-        //reserve the info in nowplay view
-        *iNowPlayingPresetBackup = *iNowPlayingPreset;
-        *iNowPlayingPreset = *aPreset;
+        *iNowPlayingPresetBackup = *iNowPlayingPreset;         
+        iLastPlayedUrlBackup = iLastPlayedUrl;
+        iConnectedFromBackup = iConnectedFrom;
         
-        delete iUrlArray;
-        iUrlArray = NULL;
-        iUrlArray = iNowPlayingPreset->getURLsForBitrate(selectedBitRate);
-        if (iUrlArray)
-        {
-            QString url = iUrlArray->at(0);
+        *iNowPlayingPreset = *aPreset;           
+        iLastPlayedUrl = firstTryUrl;
+        iConnectedFrom = aConnectedFrom;
+        iResuming = false;
+        doPlay(iLastPlayedUrl);
+    }
+}
+
+QString IRPlayController::getFirstTryUrl(IRQPreset *aPreset)
+{
+    QString firstTryUrl;
+    // 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 firstTryUrl;
+    }
+    
+    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;
+    
+    delete iUrlArray;
+    iUrlArray = NULL;
+    iUrlArray = aPreset->getURLsForBitrate(selectedBitRate);
+    if (iUrlArray)
+    {
+        firstTryUrl = iUrlArray->at(0);
 #ifdef Q_CC_NOKIAX86
-            if (iLastPlayedChannelName != aPreset->name)
-            {
-                emit initializeLogo();
-            }
-            url = "http://172.28.205.171:8000";
-            getRadioServerAddress(url);
-            iLastPlayedChannelName = aPreset->name;
-#else
-            if (iLastPlayedUrl != iUrlArray->at(0))
-            {
-                emit initializeLogo();
-            }
+        firstTryUrl = "http://172.28.182.59:8000";
+        getRadioServerAddress(firstTryUrl);
 #endif
-            //reserve the info in nowplay view
-            iLastPlayedUrlBackup = iLastPlayedUrl;
-            iLastPlayedUrl = url;
-            iResuming = false;
-            doPlay(url);
-        }
     }
+    
+    return firstTryUrl;
 }
 
 /*
@@ -232,23 +273,98 @@
  */
 void IRPlayController::stop(IRQTerminatedType aStopReason)
 {
-    qDebug("IRPlayController::stop, Entering, aStopReason=%d", aStopReason);
-    if (iMediaPlayer)
-    {
-        iMediaPlayer->disableStereoEffect();
-
-        iMediaPlayer->stop();
-
-        if (EPlaying == iPlayState)
-        {
+    qDebug("IRPlayController::stop, Entering, aStopReason=%d", aStopReason);        
+    
+    switch (iPlayState)
+    {   
+        case EPlaying:
+            iPlayState = EStopped; 
             iStopReason = aStopReason;
+            if (iMediaPlayer)
+            {
+                iMediaPlayer->disableStereoEffect();
+                iMediaPlayer->stop(); 
+            }
             // 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;
+            qDebug("IRPlayController::stop, emit playingStopped()");             
+            emit playingStopped();              
+            break;
+
+#ifdef HS_WIDGET_ENABLED			
+        case EConnecting:     
+            // No need to restore because when connecting occurs, because the connectToChannel() has NOT been invoked yet. 
+            // Only need to reset the player state                  
+            if (iNowPlayingPreset->getChannelURLCount())
+            {
+                iPlayState = EStopped;
+            }
+            else
+            {
+                iPlayState = EIdle;
+            }
+            
+            iStopReason = aStopReason;  
+            
+            // Only need to restore the station logo flag since we may force it to be false when connecting started.   
+            // force logo to be default when current view is NOT nowplaying view && is not resuming (start playing a different station.) 
+            if (EIRView_PlayingView != iApplication->getViewManager()->currentViewId()
+                && iConnectingStationName != iNowPlayingPreset->name)
+            {
+                iStationLogoAvailable = iStationLogoAvailableBackup;
+                emit stationLogoUpdated(iStationLogoAvailable);             
+            }                      
+            emit connectingCancelled(iNowPlayingPreset->name);
+            break;
+#endif
+            
+        case EBuffering:
+            if (iMediaPlayer)
+            {
+                iMediaPlayer->disableStereoEffect();
+                iMediaPlayer->stop(); 
+            }
+            // when player is forced to stop in bufferring state, we have to revert to backup preset.
+            // only with exception when current view is nowplaying view.
+            // in IR case, user can only stay in nowplaying view when buffering:
+            // 1. starging view is now playing view; 2. open a pls file with only one url
+            if (EIRView_PlayingView != iApplication->getViewManager()->currentViewId())
+            {
+                iLastPlayedUrl        = iLastPlayedUrlBackup;
+                *iNowPlayingPreset    = *iNowPlayingPresetBackup;
+                iConnectedFrom        = iConnectedFromBackup;               
+            }
+            
+            if (iNowPlayingPreset->getChannelURLCount())
+            {
+                iPlayState = EStopped;
+            }
+            else
+            {
+                iPlayState = EIdle;
+            }
+            
+            iStopReason = aStopReason;
+                        
+#ifdef HS_WIDGET_ENABLED            
+            // Need to restore the station logo flag since we may force it to be false when buffering started.  
+            // force logo to be default when current view is NOT nowplaying view && is not resuming (start playing a different station.) 
+            if (EIRView_PlayingView != iApplication->getViewManager()->currentViewId()
+                && !iResuming)
+            {
+                iStationLogoAvailable = iStationLogoAvailableBackup;
+                emit stationLogoUpdated(iStationLogoAvailable);             
+            }                         
+            emit bufferingCancelled(iNowPlayingPreset->name);
+#endif
+            break;
+		
+			
+        case EIdle:
+        case EStopped:		
+        default:              
+            break;
     }
 	endSession(aStopReason);
 	qDebug("IRPlayController::stop, Exiting");
@@ -299,6 +415,76 @@
     iApplication->getSettings()->setVolumeSetting(aVolume);
 }
 
+#ifdef HS_WIDGET_ENABLED
+void IRPlayController::setConnectingStationName(const QString &aStationName, bool aForceConnecting)
+{
+    iConnectingStationName = aStationName;
+    if (aForceConnecting
+         || !iApplication->getNetworkController()->getNetworkStatus())
+    {
+        LOG_FORMAT("IRPlayController::setConnectingStationName, the station name is %s", STRING2CHAR(aStationName));
+        iPlayState = EConnecting;   
+        
+        // force logo to be default when current view is NOT nowplaying view && is not resuming (start playing a different station.) 
+        if (EIRView_PlayingView != iApplication->getViewManager()->currentViewId()
+            && iConnectingStationName != iNowPlayingPreset->name)
+        {
+            emitStationLogoUpdated(false);
+        }        
+        emit connectingStarted(aStationName);
+    }
+}
+
+QString IRPlayController::getConnectingStationName() const
+{
+    return iConnectingStationName;
+}
+
+void IRPlayController::reloadNowplayingPreset(IRQPreset *aPreset, bool aIsLogoAvailable, IRQConnectedFrom aConnectedFrom)
+{
+    if (aPreset)
+    {
+        *iNowPlayingPreset      =   *aPreset;
+        iLastPlayedUrl          =   getFirstTryUrl(aPreset);
+        iConnectedFrom          =   aConnectedFrom;
+        iStationLogoAvailable   =   aIsLogoAvailable;
+    }
+    
+    if (iNowPlayingPreset->getChannelURLCount())
+    {
+        iPlayState = EStopped;
+    }
+    else
+    {
+        iPlayState = EIdle;
+    }     
+}
+
+bool IRPlayController::isStationLogoAvailable() const
+{
+    return iStationLogoAvailable;
+}
+
+void IRPlayController::emitStationLogoUpdated(bool aIsLogoAvailable)
+{
+    iStationLogoAvailableBackup = iStationLogoAvailable;
+    iStationLogoAvailable = aIsLogoAvailable;
+    emit stationLogoUpdated(iStationLogoAvailable);
+}
+
+bool loadStationLogoFlag()
+{
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    return settings.value(KIrSettingStationLogoAvailable,false).toBool();
+}
+
+#endif
+
+IRPlayController::EPlayState IRPlayController::state() const
+{
+    return iPlayState;
+}
+
 /*
  * Description : return the flag of playing state
  * Return      : true  : playing is ongoing
@@ -428,11 +614,6 @@
         // if there's NO other URL to try, show warning.
         if (iNowPlayingPreset->getChannelURLCount() == 1)
         {
-            //here recover info in nowplay view, only for cases:
-            //1/a channel has one url. 2/ invoked by "go to station" view.
-            //if a channel has more than one url, here can't be reached.
-            iLastPlayedUrl = iLastPlayedUrlBackup;
-            *iNowPlayingPreset = *iNowPlayingPresetBackup;
 		    stop(EIRQNoConnectionToServer);
             break;
         }
@@ -474,7 +655,7 @@
     }
 
     iApplication->stopLoadingAnimation();
-    createNote();
+    popupNote();
     qDebug("IRPlayController::handleError(), Exiting");
 }
 
@@ -488,36 +669,39 @@
 {
     if (100 == aProgress)
     {
+        //updateProgress(100) sometimes can be called more than one time, to improve performance,
+        //we only need to do the following work once.        
+        if (EPlaying == iPlayState)
+        {
+            iApplication->stopLoadingAnimation();
+            return;
+        }
+        
+        iPlayState = EPlaying;
         iApplication->stopLoadingAnimation();
 
-        //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;
+        iApplication->getViewManager()->activateView(EIRView_PlayingView);
 
-            //update last played station
-            IRLastPlayedStationInfo *lastPlayedStationInfo = iApplication->getLastPlayedStationInfo();
-            lastPlayedStationInfo->updateLastPlayedStation(iNowPlayingPreset,iConnectedFrom);
-            lastPlayedStationInfo->commitLastPlayedStation();
+        //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);
 
-            //increase the played times of current preset
-            iApplication->getFavoritesDB()->increasePlayedTimes(*iNowPlayingPreset);
+        emit playingStarted();
 
-            emit playingStarted();
-
-            // if the metadata is available, show it.
-            emit metaDataAvailable(iMetaData);
+        // 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 defaultly
-            iMediaPlayer->enableStereoEffect();
-        }
+        // Save the station information to database
+        IRQMetaData tmpMetaData;
+        tmpMetaData.setBitrate(iRealBitrate);
+        tmpMetaData.setStreamUrl(iLastPlayedUrl);
+        iSongHistoryEngine->handleMetaDataReceived(tmpMetaData, *iNowPlayingPreset);
+        // open stereo defaultly
+        iMediaPlayer->enableStereoEffect();
     }
 }
 
@@ -571,9 +755,21 @@
  * Description : show a note to user to inform that error occured.
  *                
  */
-void IRPlayController::createNote(const QString &aNote)
+void IRPlayController::popupNote(const QString &aNote)
 {
-    HbMessageBox::warning(aNote, (QObject*)NULL, NULL);
+    if (NULL == iErrorNote)
+    {
+        iErrorNote = new HbMessageBox(HbMessageBox::MessageTypeWarning);
+        iErrorNote->setModal(true);
+        iErrorNote->setTimeout(HbPopup::StandardTimeout);
+    }
+    
+    iErrorNote->setText(aNote);
+    // if there is already on error note showing, only change the text 
+    if (!iErrorNote->isVisible())
+    {
+        iErrorNote->show();
+    }
 }
 
 /*
@@ -670,6 +866,15 @@
     qDebug("IRPlayController::doPlay, access point : %d", apId);
     iMediaPlayer->playStation(aUrl, apId);
     iPlayState = EBuffering;
+#ifdef HS_WIDGET_ENABLED	
+    // force logo to be default when current view is NOT nowplaying view && is not resuming (start playing a different station.) 
+    if (EIRView_PlayingView != iApplication->getViewManager()->currentViewId()
+        && !iResuming)
+    {
+        emitStationLogoUpdated(false);             
+    }   
+    emit bufferingStarted(iNowPlayingPreset->name);
+#endif	
     startSession();
     iApplication->startLoadingAnimation(this, SLOT(cancelBuffering()));
 }
@@ -700,6 +905,14 @@
 }
 #endif 
 
+void saveStationLogoFlag(bool aIsStationLogoAvailable)
+{
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    QVariant data(QVariant::Bool);
+    data.setValue(aIsStationLogoAvailable);
+    settings.setValue(KIrSettingStationLogoAvailable,data);
+}
+
 //get IP address configuration of test radio server
 #ifdef Q_CC_NOKIAX86
 void getRadioServerAddress(QString & aUrl)
--- a/qtinternetradio/ui/src/irplaylist.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irplaylist.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -242,7 +242,11 @@
             else
             {
                 //no station name is available
-                item = new IRPlayListItem(currentLine, hbTrId("txt_irad_info_unnamed"), -1);
+#ifdef SUBTITLE_STR_BY_LOCID
+                item = new IRPlayListItem(currentLine, hbTrId("txt_irad_info_unnamed_station"), -1);
+#else
+                item = new IRPlayListItem(currentLine, hbTrId("Unnamed station"), -1);                
+#endif
             }
             iItemList.append(item);
         }
--- a/qtinternetradio/ui/src/irplsview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irplsview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -75,6 +75,16 @@
     setUseNetworkReason(EIR_UseNetwork_NoReason);
 }
 
+#ifdef HS_WIDGET_ENABLED
+void IRPlsView::itemAboutToBeSelected(bool &aNeedNetwork)
+{
+    aNeedNetwork =  true;
+    
+    int currentRow = iListView->currentIndex().row();
+    iPlayController->setConnectingStationName(iPlsModel->getTitle(currentRow));
+}
+#endif
+
 void IRPlsView::handleItemSelected()
 {
     int currentRow = iListView->currentIndex().row();
@@ -101,7 +111,11 @@
     
     HbMenu *contextMenu = new HbMenu;
     contextMenu->setAttribute(Qt::WA_DeleteOnClose);
+#ifdef SUBTITLE_STR_BY_LOCID
     HbAction *action = contextMenu->addAction(hbTrId("txt_common_menu_delete"));
+#else
+    HbAction *action = contextMenu->addAction(hbTrId("Delete"));    
+#endif
     action->setObjectName(KActionDeleteName);
     contextMenu->open();
     connect(contextMenu, SIGNAL(triggered(HbAction*)), this, SLOT(actionClicked(HbAction*)));
--- a/qtinternetradio/ui/src/irsearchchannelsview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irsearchchannelsview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -41,7 +41,7 @@
 
 IRSearchChannelsView::IRSearchChannelsView(IRApplication* aApplication,
         TIRViewId aViewId): IRBaseView(aApplication, aViewId),
-        iHeadingLabel(NULL),iListView(NULL),iSearchPanelWidget(NULL),iSearchState(ESearch_init),
+        iListView(NULL),iSearchPanelWidget(NULL),iSearchState(ESearch_init),
         iChannelModel(NULL),iPreset(NULL),iLogoPreset(NULL),
         iConvertTimer(NULL) 
 {
@@ -124,10 +124,7 @@
     QObjectList roots;
     roots.append( this );
     iLoader.setObjectTree( roots );
-    iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME);
-    
-    iHeadingLabel = qobject_cast<HbGroupBox *>(iLoader.findWidget(SEARCH_CHANNELS_VIEW_HEADINGTEXT_WIDGET));
-    
+    iLoader.load(SEARCH_CHANNELS_VIEW_LAYOUT_FILENAME);   
     
     iSearchPanelWidget = qobject_cast<HbSearchPanel *>(iLoader.findWidget(SEARCH_CHANNELS_VIEW_SEARCHPANEL_WIDGET));    
     
@@ -140,15 +137,7 @@
     
     iChannelModel = new IrChannelModel(this);
     iChannelModel->initWithCache();
-    iListView->setModel(iChannelModel);    
-    //anywhere, before show the count, updated it ahead.
-#ifdef SUBTITLE_STR_BY_LOCID
-    QString headingStr = hbTrId("txt_irad_subtitle_search_results") + " (" + QString::number(iChannelModel->rowCount()) + ")"; 
-#else
-    QString headingStr = hbTrId("Search results") + " (" + QString::number(iChannelModel->rowCount()) + ")";
-#endif
-
-    setHeadingText(headingStr);  
+    iListView->setModel(iChannelModel);     
 }
 
 void IRSearchChannelsView::connectWidget()
@@ -200,14 +189,8 @@
 {   
     iSearchPanelWidget->clearFocus();
     iListView->setFocus();
-    iSearchState = ESearch_Loading;
-    
-    QSizeF searchPanelSize = iSearchPanelWidget->size();
-    QSizeF windowSize = getViewManager()->size();
-    QPointF pos(windowSize.width()/2,(windowSize.height() - searchPanelSize.height())/2);
-    QPointF iconPos(LOADING_ANIMATION_ICON_SIZE/2, LOADING_ANIMATION_ICON_SIZE/2);
-    pos -= iconPos;
-    iApplication->startLoadingAnimation(pos);
+    iSearchState = ESearch_Loading; 
+    iApplication->startLoadingAnimation(this, SLOT(minimizeSearchPanel()));
 }
 
 void IRSearchChannelsView::handleItemSelected()
@@ -299,10 +282,18 @@
     switch(aError)
     {
     case EIRQErrorNotFound:
-        errStr = hbTrId("txt_irad_info_no_matching_stations_found");
+#ifdef SUBTITLE_STR_BY_LOCID 
+        errStr = hbTrId("txt_irad_info_no_matching_station_found");
+#else
+        errStr = hbTrId("No matching station found");        
+#endif
         break;
     default:
+#ifdef SUBTITLE_STR_BY_LOCID
         errStr = hbTrId("txt_irad_info_failed_to_connect");
+#else
+        errStr = hbTrId("Connecting failed");        
+#endif
         break;   
     }
     
@@ -313,6 +304,11 @@
 void IRSearchChannelsView::clickItem(const QModelIndex&)
 {
     setUseNetworkReason(EIR_UseNetwork_SelectItem);
+#ifdef HS_WIDGET_ENABLED	
+    int index = iListView->currentIndex().row();
+    IRQChannelItem* currentItem = iChannelModel->getChannelItemByIndex(index);    
+    iPlayController->setConnectingStationName(currentItem->channelName,true);
+#endif	
     if (false == iApplication->verifyNetworkConnectivity())
     {
         switch2LoadingState();
@@ -346,25 +342,10 @@
         startConvert(iIconIndexArray[0]);   
     }
 }
-
-//set the subtitle and counter;
-void IRSearchChannelsView::setHeadingText(const QString &aText)
-{
-    if (iHeadingLabel)
-    {
-        iHeadingLabel->setHeading(aText);
-    }    
-}
+ 
 void IRSearchChannelsView::dataChanged()
 {
-    switch2InitState(); 
-    //here update count in subtitle
-#ifdef SUBTITLE_STR_BY_LOCID
-    QString headingStr = hbTrId("txt_irad_subtitle_search_results") + " (" + QString::number(iChannelModel->rowCount()) + ")"; 
-#else
-    QString headingStr = hbTrId("Search results") + " (" + QString::number(iChannelModel->rowCount()) + ")";
-#endif
-    setHeadingText(headingStr);   
+    switch2InitState();      
     iListView->reset();
     if( iChannelModel->rowCount() )
     {
@@ -470,13 +451,7 @@
 {
     if( ESearch_Loading == iSearchState )
     {
-        if( ! ( iPlayController->isStopped() || iPlayController->isIdle() ) )
-        {
-            //cancel buffering
-            iPlayController->cancelBuffering();
-        }
-         
-        disconnectIsdsClient();
+        iPlayController->cancelBuffering(); 
         iIsdsClient->isdsCancelRequest();
         iConvertTimer->stop();
         iIsdsClient->isdsLogoDownCancelTransaction();
--- a/qtinternetradio/ui/src/irsettingsview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irsettingsview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -48,7 +48,11 @@
     setLayout(layout);
 
     HbGroupBox * titleText = new HbGroupBox();
-    titleText->setHeading( hbTrId("txt_common_opt_settings") ); 
+#ifdef SUBTITLE_STR_BY_LOCID
+    titleText->setHeading( hbTrId("txt_common_opt_settings") );
+#else
+    titleText->setHeading( hbTrId("Settings") );    
+#endif
     layout->addItem(titleText);
 
     iForm = new HbDataForm();
@@ -62,25 +66,44 @@
     iForm->setModel(iModel);
     
     HbMenu *viewMenu = menu();
-    viewMenu->addAction(hbTrId("txt_common_opt_exit"),iApplication, SIGNAL(quit()));    
+#ifdef SUBTITLE_STR_BY_LOCID
+    viewMenu->addAction(hbTrId("txt_common_opt_exit"),iApplication, SIGNAL(quit()));
+#else
+    viewMenu->addAction(hbTrId("Exit"),iApplication, SIGNAL(quit()));    
+#endif
 }
 
 void IRSettingsView::setPreferredQuality()
 {
+#ifdef SUBTITLE_STR_BY_LOCID
     HbDataFormModelItem *preferredQualityItem = new HbDataFormModelItem(
             HbDataFormModelItem::ToggleValueItem, hbTrId("txt_irad_setlabel_download_quality"));
+#else
+    HbDataFormModelItem *preferredQualityItem = new HbDataFormModelItem(
+            HbDataFormModelItem::ToggleValueItem, hbTrId("Download quality"));    
+#endif
     iModel->appendDataFormItem(preferredQualityItem);
 
     IRQPreferredQuality settingValue = iSettings->getPreferredQuality();
     if(EIRQStandardQuality == settingValue)
     {
+#ifdef SUBTITLE_STR_BY_LOCID
         preferredQualityItem->setContentWidgetData("text", hbTrId("txt_irad_setlabel_download_quality_val_standard"));
         preferredQualityItem->setContentWidgetData("additionalText", hbTrId("txt_irad_setlabel_download_quality_val_high"));
+#else
+        preferredQualityItem->setContentWidgetData("text", hbTrId("Standard"));
+        preferredQualityItem->setContentWidgetData("additionalText", hbTrId("High"));        
+#endif
     }
     else if(EIRQHighQuality == settingValue)
     {
+#ifdef SUBTITLE_STR_BY_LOCID
         preferredQualityItem->setContentWidgetData("text", hbTrId("txt_irad_setlabel_download_quality_val_high"));
-        preferredQualityItem->setContentWidgetData("additionalText", hbTrId("txt_irad_setlabel_download_quality_val_standard"));    
+        preferredQualityItem->setContentWidgetData("additionalText", hbTrId("txt_irad_setlabel_download_quality_val_standard"));
+#else
+        preferredQualityItem->setContentWidgetData("text", hbTrId("High"));
+        preferredQualityItem->setContentWidgetData("additionalText", hbTrId("Standard"));        
+#endif
     }
     
     connect(iModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), 
@@ -95,17 +118,29 @@
     
     if(item->type() == HbDataFormModelItem::ToggleValueItem) 
     {
-        if(item->data(HbDataFormModelItem::LabelRole).toString() == hbTrId("txt_irad_setlabel_download_quality")) 
+#ifdef SUBTITLE_STR_BY_LOCID
+        if(item->data(HbDataFormModelItem::LabelRole).toString() == hbTrId("txt_irad_setlabel_download_quality"))
+#else
+        if(item->data(HbDataFormModelItem::LabelRole).toString() == hbTrId("Download quality"))            
+#endif
         {
             QVariant data = item->contentWidgetData("text");
             QString value = data.toString();
             
+#ifdef SUBTITLE_STR_BY_LOCID
             if(value == (hbTrId("txt_irad_setlabel_download_quality_val_standard")))
+#else
+            if(value == (hbTrId("Standard")))                
+#endif
             {    
                 // User has made it Standard.
                 iSettings->setPreferredQuality(EIRQStandardQuality);
             }
+#ifdef SUBTITLE_STR_BY_LOCID
             else if(value == (hbTrId("txt_irad_setlabel_download_quality_val_high")))
+#else
+            else if(value == (hbTrId("High")))                
+#endif
             {
                 // User has made it High.
                 iSettings->setPreferredQuality(EIRQHighQuality);
--- a/qtinternetradio/ui/src/irsonghistorymodel.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irsonghistorymodel.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -68,13 +68,21 @@
         QString artistName = mSongHistoryList.at(row)->getArtistName().trimmed();
         if( "" == artistName )
         {
-            artistName = hbTrId("txt_irad_list_unknown_artist");
+#ifdef SUBTITLE_STR_BY_LOCID
+            artistName = hbTrId("txt_irad_list_unknown_artist_p");
+#else
+            artistName = hbTrId("Unknown artist");            
+#endif
         }
       
         QString songName = mSongHistoryList.at(row)->getSongName().trimmed();
         if( "" == songName )
         {
-            songName = hbTrId("txt_irad_list_unknown_song");
+#ifdef SUBTITLE_STR_BY_LOCID
+            songName = hbTrId("txt_irad_list_unknown_song_p");
+#else
+            songName = hbTrId("Unknown song");
+#endif
         }
         
         QString stationName = mSongHistoryList.at(row)->getStationName().trimmed();       
--- a/qtinternetradio/ui/src/irsonghistoryview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irsonghistoryview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -52,7 +52,11 @@
     iListView->setModel(iModel);
     iListView->setCurrentIndex(iModel->index(0));
     
-    iClearSongHistoryAction = new HbAction(hbTrId("txt_irad_menu_clear_list"), this);
+#ifdef SUBTITLE_STR_BY_LOCID
+    iClearSongHistoryAction = new HbAction(hbTrId("txt_irad_opt_clear_list"), this);
+#else
+    iClearSongHistoryAction = new HbAction(hbTrId("Clear list"), this);    
+#endif
     iStatisticsReporter = IRQStatisticsReporter::openInstance();
 
     iShowPrompt = iSettings->getSongHistoryShow();    
@@ -61,7 +65,7 @@
         iSettings->setSongHistoryShow(0);
     }  
     
-    connect(iClearSongHistoryAction, SIGNAL(triggered()), this, SLOT(clearList()));    
+    connect(iClearSongHistoryAction, SIGNAL(triggered()), this, SLOT(popupClearHistoryConfirmMessageBox()));    
     connect(iModel, SIGNAL(modelChanged()), this, SLOT(modelChanged()));        
 }
 
@@ -142,7 +146,11 @@
 
     // TODO : Add the report in future. Add the channel id in the song info db
     // iStatisticsReporter->logNmsEvents(EIRQFind,channelId);
-    popupNote(hbTrId("txt_irad_info_music_store_not_available"), HbMessageBox::MessageTypeInformation);    
+#ifdef SUBTITLE_STR_BY_LOCID
+    popupNote(hbTrId("txt_irad_info_music_store_not_available"), HbMessageBox::MessageTypeInformation);
+#else
+    popupNote(hbTrId("Music store not available"), HbMessageBox::MessageTypeInformation);    
+#endif
 }
    
 
@@ -193,14 +201,33 @@
      
 }
 
-void IRSongHistoryView::clearList()
+void IRSongHistoryView::popupClearHistoryConfirmMessageBox()
 {
-    iModel->clearList();  
+#ifdef SUBTITLE_STR_BY_LOCID
+    HbMessageBox::question(hbTrId("txt_irad_info_clear_song_list"), this, SLOT(clearList(HbAction*)), hbTrId("txt_common_button_ok"), hbTrId("txt_common_button_cancel"));
+#else
+    HbMessageBox::question(hbTrId("Clear song list?"), this, SLOT(clearList(HbAction*)), hbTrId("Ok"), hbTrId("Cancel"));    
+#endif
+}
+void IRSongHistoryView::clearList(HbAction *aAction)
+{
+    HbMessageBox *dialog = static_cast<HbMessageBox*>(sender());
+    if (dialog)
+    {
+        if (aAction == dialog->actions().at(0))
+        {
+            iModel->clearList();
+        }
+    }
 }
 
 void IRSongHistoryView::showPrompt()
 {
+#ifdef SUBTITLE_STR_BY_LOCID
     QString str = hbTrId("txt_irad_info_click_the_song_and_find_it_in_nokia_music_store");
+#else
+    QString str = hbTrId("Click the song and find it in nokia music store");    
+#endif
     popupNote(str, HbMessageBox::MessageTypeInformation);
 }
 
@@ -220,9 +247,17 @@
     contextMenu->setAttribute(Qt::WA_DeleteOnClose);
     connect(contextMenu, SIGNAL(triggered(HbAction*)), this, SLOT(actionClicked(HbAction*)));
 
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_irad_menu_search_in_music_store"));
+#else
+    action = contextMenu->addAction(hbTrId("Search in music store"));    
+#endif
     action->setObjectName(KActionSearchInMusicStoreName);
+#ifdef SUBTITLE_STR_BY_LOCID
     action = contextMenu->addAction(hbTrId("txt_common_menu_delete"));
+#else
+    action = contextMenu->addAction(hbTrId("Delete"));    
+#endif
     action->setObjectName(KActionDeleteName);
 
     contextMenu->open();
@@ -230,8 +265,12 @@
 
 void IRSongHistoryView::searchInMusicStoreContextAction()
 {
-    // Need to log the find song in NMS event, iStatisticsReporter->logNmsEvent(IRQStatisticsReporter::EIRFind,channelId);   
+    // Need to log the find song in NMS event, iStatisticsReporter->logNmsEvent(IRQStatisticsReporter::EIRFind,channelId);  
+#ifdef SUBTITLE_STR_BY_LOCID
     popupNote(hbTrId("txt_irad_info_music_store_not_available"), HbMessageBox::MessageTypeInformation);
+#else
+    popupNote(hbTrId("Music store not available"), HbMessageBox::MessageTypeInformation);    
+#endif
 }
 void IRSongHistoryView::deleteContextAction()
 {
@@ -239,7 +278,11 @@
     bool ret = iModel->deleteOneItem(current);     
     if( !ret )
     {
+#ifdef SUBTITLE_STR_BY_LOCID
         popupNote(hbTrId("txt_irad_info_operation_failed"), HbMessageBox::MessageTypeWarning);
+#else
+        popupNote(hbTrId("Operation failed"), HbMessageBox::MessageTypeWarning);        
+#endif
     }
 }
 
--- a/qtinternetradio/ui/src/irstationsview.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irstationsview.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -157,6 +157,16 @@
     return ret;
 }
 
+#ifdef HS_WIDGET_ENABLED
+void IRStationsView::itemAboutToBeSelected(bool &aNeedNetwork)
+{
+    aNeedNetwork =  true;
+    
+    int index = iListView->currentIndex().row();
+    iPlayController->setConnectingStationName(iChannelModel->getChannelItemByIndex(index)->channelName);
+}
+#endif
+
 //                                      slots functions
 
 /*
@@ -251,12 +261,20 @@
     iApplication->stopLoadingAnimation();
 
     disconnectIsdsClient();
+#ifdef SUBTITLE_STR_BY_LOCID
     QString errorString = hbTrId("txt_irad_info_failed_to_connect");
+#else
+    QString errorString = hbTrId("Connecting failed");    
+#endif
     
     switch (aError)
     {   
     case EIRQErrorNotFound:
-        errorString = hbTrId("txt_irad_info_no_matching_stations_found");
+#ifdef SUBTITLE_STR_BY_LOCID
+        errorString = hbTrId("txt_irad_info_no_matching_station_found");
+#else
+        errorString = hbTrId("No matching station found");        
+#endif
         if (iConnectTimer->isActive())
         {
             iConnectTimer->stop();
@@ -413,5 +431,9 @@
 {    
     iConnectTimer->stop();
     cancelRequest();   
+#ifdef SUBTITLE_STR_BY_LOCID
     popupNote(hbTrId("txt_irad_info_connecting_timout"), HbMessageBox::MessageTypeWarning);
+#else
+    popupNote(hbTrId("Connecting timeout"), HbMessageBox::MessageTypeWarning);    
+#endif
 }
--- a/qtinternetradio/ui/src/irviewmanager.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/irviewmanager.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -17,6 +17,10 @@
 #include <hbaction.h>
 #include <QApplication>
 #include <QTimer>
+#include <HbApplication>
+#include <HbActivityManager>
+#include <xqserviceutil.h>
+
 
 #include "irviewmanager.h"
 #include "irapplication.h"
@@ -46,6 +50,9 @@
 static bool crossLineReady(const QLineF &aLine);
 static bool crossLineIntersected(const QLineF &aLineA, const QLineF &aLineB);
 
+static const QString KActivityMainView("InternetRadioMainView");
+static const QString KActivityPlayingView("InternetRadioNowPlayingView");
+
 enum CrossLineAngleType
 {
     EPositiveAngle = 0,  // Line within 1,3 quadrant
@@ -349,7 +356,96 @@
     Q_ASSERT(curView);
     iViewStack.push(curView);
 }
- 
+
+void IRViewManager::saveScreenShot()
+{
+    //if capture screen shot immediately for first view, can't get correct result
+    //use timer as a temp solution, will raise error to Orbit
+    QTimer::singleShot(200, this, SLOT(handleSaveScreenShot()));
+}
+
+void IRViewManager::saveActivity()
+{
+    HbActivityManager *activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+    
+    //for embedded applications, don't publish activity. If backup activity is available, need to restore
+    if (XQServiceUtil::isEmbedded())
+    {
+        if (!iActivityBackup.activityId.isEmpty())
+        {
+            QVariantHash metadata;
+            metadata.insert("screenshot", iActivityBackup.screenShot);
+            
+            QByteArray serializedActivity;
+            QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+            stream<<iActivityBackup.viewId;
+            activityManager->addActivity(iActivityBackup.activityId, serializedActivity, metadata);
+        }
+        return;
+    }
+    
+    removeActivity();
+    
+    
+    QVariantHash metadata;
+        
+    QByteArray serializedActivity;
+    QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+    
+    TIRViewId viewId = getExitingView();
+    switch (viewId)
+    {
+    case EIRView_MainView:
+    case EIRView_FavoritesView:
+    case EIRView_CategoryView:
+        stream<<viewId;
+        metadata.insert("screenshot", iScreenShots[viewId]);
+        activityManager->addActivity(KActivityMainView, serializedActivity, metadata);
+        break;
+        
+    case EIRView_PlayingView:
+        stream<<viewId;
+        metadata.insert("screenshot", iScreenShots[viewId]);
+        activityManager->addActivity(KActivityPlayingView, serializedActivity, metadata);
+        break;
+        
+    default:
+        break;
+    }
+}
+
+void IRViewManager::removeActivity()
+{
+    if (XQServiceUtil::isEmbedded())
+    {
+        backupActivity();
+    }
+    
+    HbActivityManager *activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+    activityManager->removeActivity(KActivityMainView);
+    activityManager->removeActivity(KActivityPlayingView);
+}
+
+void IRViewManager::backupActivity()
+{
+    HbApplication *hbApp = qobject_cast<HbApplication*>(qApp);
+    HbActivityManager *activityManager = hbApp->activityManager();
+    QList<QVariantHash> params = activityManager->activities();
+    TInt count = params.count();
+    if (count > 0)
+    {
+        QVariantHash activity = params[0];        
+        QString path = activity.value(activity.keys().at(2)).toString();
+        iActivityBackup.screenShot = QPixmap(path);
+        iActivityBackup.activityId = activity.value(activity.keys().at(1)).toString();
+        
+        QByteArray serializedModel = activityManager->activityData(iActivityBackup.activityId).toByteArray();
+        QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+        int id = 0;
+        stream>>id;
+        iActivityBackup.viewId = TIRViewId(id);
+    }
+}
 
 //                                     slot functions
 
@@ -491,6 +587,15 @@
     }
 }
 
+void IRViewManager::handleSaveScreenShot()
+{
+    if (!XQServiceUtil::isEmbedded())
+    {
+        TIRViewId id = currentViewId();
+        iScreenShots[id] = QPixmap::grabWidget(this, rect());
+    }
+}
+
 void IRViewManager::mousePressEvent(QMouseEvent *aEvent)
 {
     if(iCrossLineEnable)
@@ -591,7 +696,11 @@
 {
     crossLineReset();
     viewport()->repaint();
+#ifdef SUBTITLE_STR_BY_LOCID
     HbMessageBox::information(hbTrId("txt_common_info_exiting"), (QObject*)NULL, NULL);
+#else
+    HbMessageBox::information(hbTrId("Exiting..."), (QObject*)NULL, NULL);    
+#endif
     qApp->quit();
     iExiting = true;
 }
--- a/qtinternetradio/ui/src/main.cpp	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/src/main.cpp	Tue Jul 06 14:07:20 2010 +0300
@@ -18,12 +18,16 @@
 #include <hbapplication.h>
 #include <hbdevicemessagebox.h>
 #include <QLocalSocket>
+#include <hbsplashscreen.h>
+#include <QSettings>
 
 #include "irviewmanager.h"
 #include "irapplication.h"
 #include "irmemorycollector.h"
 #include "irqlogger.h"
 #include "irqsystemeventhandler.h"
+#include "irqsettings.h"
+#include "irservicedef.h"
 
 #ifdef LOCALIZATION 
 #include <QTranslator> 
@@ -32,12 +36,18 @@
 
 bool isDiskSpaceLow(IRQSystemEventHandler* aEventHandler);
 bool isSecondInstance();
+void setSplashScreen();
+bool isSplashNowplaying();
 
 int main(int argc, char* argv[])
 {
     installLogDir();
     
     INSTALL_MESSAGE_HANDLER;
+    //the following is for splash screen, this must be placed 
+    //before the creating of HbApplication
+    setSplashScreen(); 
+    
     HbApplication app(argc, argv);
     
 #ifdef LOCALIZATION    
@@ -46,7 +56,11 @@
     Q_ASSERT( NULL != translator );
 #endif
     
+#ifdef SUBTITLE_STR_BY_LOCID
     QCoreApplication::setApplicationName(hbTrId("txt_irad_title_internet_radio"));
+#else
+    QCoreApplication::setApplicationName(hbTrId("Internet radio"));    
+#endif
     if (isSecondInstance())
     {
         return 0;
@@ -89,8 +103,13 @@
     bool ret = aEventHandler->isBelowCriticalLevel();
     if(ret)
     {
-        HbDeviceMessageBox messageBox(hbTrId("txt_irad_info_no_space_on_c_drive_internet_radio_closed"),
+#ifdef SUBTITLE_STR_BY_LOCID
+        HbDeviceMessageBox messageBox(hbTrId("txt_irad_info_insufficient_disk_space"),
                 HbMessageBox::MessageTypeWarning);
+#else
+        HbDeviceMessageBox messageBox(hbTrId("Insufficient disk space"),
+                HbMessageBox::MessageTypeWarning);        
+#endif
         messageBox.setTimeout(HbPopup::NoTimeout);
         messageBox.exec();
     }
@@ -123,3 +142,22 @@
         return false;
     }
 }
+
+void setSplashScreen()
+{     
+    if( isSplashNowplaying() )
+    {
+        HbSplashScreen::setScreenId("nowplaying_screen");
+    }
+    else
+    {
+        HbSplashScreen::setScreenId("normal_screen");
+    }    
+}
+
+bool isSplashNowplaying()
+{
+    QSettings settings(KIrSettingOrganization, KIrSettingApplication);
+    return settings.value(KIrSettingSplashNowplaying,false).toBool();
+}
+ 
--- a/qtinternetradio/ui/ui.pro	Wed Jun 23 18:04:00 2010 +0300
+++ b/qtinternetradio/ui/ui.pro	Tue Jul 06 14:07:20 2010 +0300
@@ -26,6 +26,33 @@
 INCLUDEPATH += $${OS_LAYER_PUBLIC_EXPORT_PATH(http)}
 INCLUDEPATH += $${MW_LAYER_PUBLIC_EXPORT_PATH(http)}
 
+#the following is for splash screen in phone
+BLD_INF_RULES.prj_exports += "resources/splashscreen/internet_radio_default.splashml       /epoc32/data/z/resource/hb/splashml/internet_radio_default.splashml" \
+                             "resources/splashscreen/internet_radio_default.docml          /epoc32/data/z/resource/hb/splashml/internet_radio_default.docml" \
+                             "resources/splashscreen/internet_radio_normal.splashml        /epoc32/data/z/resource/hb/splashml/internet_radio_normal.splashml" \
+                             "resources/splashscreen/internet_radio_normal.docml           /epoc32/data/z/resource/hb/splashml/internet_radio_normal.docml" \
+                             "resources/splashscreen/internet_radio_nowplaying.splashml    /epoc32/data/z/resource/hb/splashml/internet_radio_nowplaying.splashml" \
+                             "resources/splashscreen/internet_radio_nowplaying.docml       /epoc32/data/z/resource/hb/splashml/internet_radio_nowplaying.docml"
+
+#the following is for splash screen in winscw_udeb
+BLD_INF_RULES.prj_exports += "resources/splashscreen/internet_radio_default.splashml      /epoc32/release/winscw/udeb/z/resource/hb/splashml/internet_radio_default.splashml" \
+                             "resources/splashscreen/internet_radio_default.docml         /epoc32/release/winscw/udeb/z/resource/hb/splashml/internet_radio_default.docml" \
+                             "resources/splashscreen/internet_radio_normal.splashml       /epoc32/release/winscw/udeb/z/resource/hb/splashml/internet_radio_normal.splashml" \
+                             "resources/splashscreen/internet_radio_normal.docml          /epoc32/release/winscw/udeb/z/resource/hb/splashml/internet_radio_normal.docml" \
+                             "resources/splashscreen/internet_radio_nowplaying.splashml   /epoc32/release/winscw/udeb/z/resource/hb/splashml/internet_radio_nowplaying.splashml" \
+                             "resources/splashscreen/internet_radio_nowplaying.docml      /epoc32/release/winscw/udeb/z/resource/hb/splashml/internet_radio_nowplaying.docml" 
+                                                      
+
+#the following is for splash screen in winscw_urel
+BLD_INF_RULES.prj_exports += "resources/splashscreen/internet_radio_default.splashml      /epoc32/release/winscw/urel/z/resource/hb/splashml/internet_radio_default.splashml" \
+                             "resources/splashscreen/internet_radio_default.docml         /epoc32/release/winscw/urel/z/resource/hb/splashml/internet_radio_default.docml" \
+                             "resources/splashscreen/internet_radio_normal.splashml       /epoc32/release/winscw/urel/z/resource/hb/splashml/internet_radio_normal.splashml" \
+                             "resources/splashscreen/internet_radio_normal.docml          /epoc32/release/winscw/urel/z/resource/hb/splashml/internet_radio_normal.docml" \
+                             "resources/splashscreen/internet_radio_nowplaying.splashml   /epoc32/release/winscw/urel/z/resource/hb/splashml/internet_radio_nowplaying.splashml" \
+                             "resources/splashscreen/internet_radio_nowplaying.docml      /epoc32/release/winscw/urel/z/resource/hb/splashml/internet_radio_nowplaying.docml"                            
+                              
+
+
 INCLUDEPATH += inc \
                ..\irqisdsclient\inc \
                ..\irqmediaplayer\inc \
@@ -63,7 +90,8 @@
         -lirqlogger \
         -lshareui \
         -lirqsystemeventhandler \
-	-lxqservice \
+        -lxqsettingsmanager \
+        -lxqservice \
         -lxqserviceutil
         	
 symbian{
@@ -107,6 +135,8 @@
            inc\irstationshare.h \
            inc\irstationdetailsview.h \
            inc\irtermsconsview.h \
+           inc\ircontrolservice.h \
+           inc\irmonitorservice.h \           
            inc\irplaylist.h \
            inc\irsearchresultdb.h \
            inc\irfileviewservice.h
@@ -143,6 +173,8 @@
            irstationshare.cpp \
            irstationdetailsview.cpp \
            irtermsconsview.cpp \
+           ircontrolservice.cpp \
+           irmonitorservice.cpp \
            irplaylist.cpp \
            irsearchresultdb.cpp \
            irfileviewservice.cpp