webengine/wrtharvester/src/wrtharvester.cpp
branchRCL_3
changeset 93 79859ed3eea9
parent 92 e1bea15f9a39
child 94 919f36ff910f
--- a/webengine/wrtharvester/src/wrtharvester.cpp	Thu Aug 19 10:58:56 2010 +0300
+++ b/webengine/wrtharvester/src/wrtharvester.cpp	Tue Aug 31 16:17:46 2010 +0300
@@ -23,75 +23,32 @@
 #include "wrtharvesterpublisherobserver.h"
 
 #include "wrtharvesterconst.h"
-#include <widgetregistryconstants.h>
+#include <WidgetRegistryConstants.h>
 #include <wrtharvester.rsg>
-#include <startupdomainpskeys.h>
-#include <ecom/implementationproxy.h>
+
+#include <implementationproxy.h>
 
-#include <LiwServiceHandler.h>
-#include <LiwVariant.h>
-#include <LiwGenericParam.h>
+#include <liwservicehandler.h>
+#include <liwvariant.h>
+#include <liwgenericparam.h>
 #include <e32property.h>    //Publish & Subscribe
 #include <AknTaskList.h>
 #include <apaid.h>
 #include <apacmdln.h>
 #include <s32mem.h>
-#include <APGTASK.H>
+#include <apgtask.h>
 #include <coemain.h>
 #include <bautils.h>
 #include <f32file.h>
 #include <e32std.h>
 #include <AknNotify.h>
-#include <aknglobalconfirmationquery.h>
+#include <AknGlobalConfirmationQuery.h>
 #include <StringLoader.h>
 #include <data_caging_path_literals.hrh>
-#include <oommonitorsession.h>
-
-#ifndef BRDO_OOM_MONITOR2_COMPONENT_FF 
-#include <systemwarninglevels.hrh>
-#endif
-#include "browser_platform_variant.hrh"
 
 // CONSTANTS
 _LIT( KResourceFileName, "\\resource\\wrtharvester.rsc" );
 _LIT( KResourceDir, "Z:wrtharvester.rsc" );
-_LIT( KUid, "uid");
-_LIT( K0x, "0x");
-_LIT( KOpenPar, "(");
-_LIT( KClosePar, ")");
-_LIT8( KWidgetIcon, "widget_icon");
-#define KUidWidgetOOMPlugin 0x10282855
-const TInt KMemoryToLaunchWidgetUi = 17*1024*1024;
-
-
-
-/** 
-* Launch or bring foreground the asked widget.
-*
-* Launch widget.
-* @param aUid UID of the widget.
-* @param aOperation Operation to perform.
-*/
-static void LaunchWidgetL( const TUid& aUid, TUint32 aOperation );
-
-/** 
-* In case the widget cannot be launched because of OOM
-* Notify harvester and Clear event Queue
-* @return void
-*/
-static void NotifyCommandAndCleanUp();
-
-/** 
-* Launch new widget.
-*
-* Launch new widget.
-* @param aUid UID of the widget.
-* @param aOperation Operation to perform.
-*/
-static void LaunchWidgetUIL( 
-    const TUid& aUid, 
-    const TDesC8& aMessage, 
-    TUint32 aOperation );
 
 /**
 * Utility class to show the prompt for platform security access.
@@ -174,7 +131,6 @@
 // Returns the app full name
 // ----------------------------------------------------------------------------
 //
-/*
 static HBufC* GetAppNameLC( RApaLsSession& aSession, const TUid& aUid )
     {
     TApaAppInfo info;
@@ -182,8 +138,52 @@
     
     return info.iFullName.AllocLC();
     }
-*/
+    
+    
+// ----------------------------------------------------------------------------
+// Sends the command to Widget launcher
+// ----------------------------------------------------------------------------
+//
+static void HandleWidgetCommandL( 
+    RApaLsSession& aSession, 
+    const TDesC& aWidget,
+    const TUid& aUid,
+    TUint32 aOperation )
+    {
+    const TInt size( 2* aWidget.Length() + 3*sizeof( TUint32 ) );
+    
+    // Message format is <filenameLength><unicode_filename><someintegervalue>
+    CApaCommandLine* cmd( CApaCommandLine::NewLC() );
+    HBufC8* opaque( HBufC8::NewLC( size ) );
+    
+    RDesWriteStream stream;
+    TPtr8 des( opaque->Des() );
     
+    stream.Open( des );
+    CleanupClosePushL( stream );
+    
+    // Generate the command.
+    stream.WriteUint32L( aUid.iUid );
+    stream.WriteUint32L( aWidget.Length() );
+    stream.WriteL( reinterpret_cast< const TUint8* >( aWidget.Ptr() ),
+                   aWidget.Size() );
+    
+    stream.WriteInt32L( aOperation );
+    
+    CleanupStack::PopAndDestroy( &stream );
+    
+    // Generate command.
+    cmd->SetCommandL( EApaCommandBackgroundAndWithoutViews );
+    cmd->SetOpaqueDataL( *opaque );    
+
+    CleanupStack::PopAndDestroy( opaque );
+    
+    cmd->SetExecutableNameL( KLauncherApp );
+    
+    User::LeaveIfError( aSession.StartApp( *cmd ) );
+    CleanupStack::PopAndDestroy( cmd );
+    }
+
 // Map the interface UIDs to implementation factory functions
 const TImplementationProxy ImplementationTable[] = 
     {
@@ -220,21 +220,15 @@
 void CWrtHarvester::ConstructL()
     {
     User::LeaveIfError( iApaSession.Connect() );
-    	
-    iSystemShutdown = EFalse;
     iWidgetUIListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetUIState );
     iWidgetRegListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetRegAltered );
-    iWidgetSystemShutdownListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetSystemShutdown );
-    iMsModeListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetMassStorageMode );
     
     User::LeaveIfError( iFs.Connect() );
+    iWidgetUsbListener = CWrtUsbHandler::NewL( this, iFs );
     
+    iWidgetUsbListener->Start();
     SetMSMode(0);
     
-    iCanAccessRegistry = ETrue;    
-	iReinstallingWidget = EFalse;
-	
-	    
     TFileName resourceFileName;  
     TParse parse;    
     Dll::FileName (resourceFileName);           
@@ -280,19 +274,10 @@
     iObservers.ResetAll();
     iWidgetInfo.ResetAll();
     iWidgetStateArray.ResetAll();
-    
     delete iWidgetUIListener;
-    delete iWidgetRegListener;    
-    delete iMsModeListener;    
-    delete iWidgetSystemShutdownListener;
-    
-    if(iAsyncCallBack)
-        {
-        iAsyncCallBack->Cancel();       
-        }
-    delete iAsyncCallBack;
-    iAsyncCallBack = NULL;
-    iUid.Close();
+    delete iWidgetRegListener;
+    delete iWidgetMMCListener;
+    delete iWidgetUsbListener;
     iWidgetOperations.Close();
     iHSWidgets.ResetAndDestroy();
     iApaSession.Close();
@@ -315,30 +300,14 @@
     {
     
     //Do not send the Operations to the Widgets when in Mass storage mode.. . .  
+    if( IsInMSMode() == 1 )
+        {
+         if(aTrigger == KDeActive)
+         RemovePublisherAndObserverL(aContentId);
+         return;              
+        }
+   
     TUid uid( WidgetUid( aContentId ) );
-    
-    
-    if(iSystemShutdown && aTrigger == KDeActive )
-    	{
-    	return ;
-    	}
-    if( IsInMSMode() == 1 )
-      {
-      if( aTrigger == KDeActive && !iSystemShutdown )
-          {
-          RemovePublisherAndObserverL(aContentId);
-          RWidgetRegistryClientSession session;
-          CleanupClosePushL( session );
-          User::LeaveIfError( session.Connect() );
-          session.SetBlanketPermissionL( uid, EBlanketUnknown );
-          CleanupStack::PopAndDestroy( &session );
-          }
-      return; 
-      }
-      
-	if(!iCanAccessRegistry)
-		return;             
-		
     TWidgetOperations operation( Uninitialized );
     if( aTrigger == KActive )
         {
@@ -372,20 +341,8 @@
             break;
             }
           }
-        delete temp;
-        
-        // Removing . Miniview, shall remove full view as well. For blanket permissions
-        // will be revoked for miniview
-         
-      	if(!iSystemShutdown)
-      	    {        
-            RWidgetRegistryClientSession session;
-            CleanupClosePushL( session );
-            User::LeaveIfError( session.Connect() );
-            session.SetBlanketPermissionL( uid, EBlanketUnknown );
-            CleanupStack::PopAndDestroy( &session );
-            }
-      }
+        delete temp;        
+        }
     else if( aTrigger == KSuspend )
         {
         operation = WidgetSuspend;
@@ -428,11 +385,6 @@
 //
 void CWrtHarvester::UpdatePublishersL() 
     {
-    if(iReinstallingWidget)
-        {        
-        iReinstallingWidget = EFalse;
-        return;
-        }
     iRegistryAccess.WidgetInfosL( iWidgetInfo );
     RemoveObsoletePublishersL();
     
@@ -529,38 +481,8 @@
             if( publisherMap && publisherMap->FindL( KContentId , variant ))
                 {
                  HBufC* bundleId = variant.AsDes().AllocLC();
-                 variant.Reset();
-                 TBool isNokiaWidget = EFalse;
-                 if ( publisherMap->FindL( KDataMap, variant) )
-                     {
-                     CLiwDefaultMap* dataMap = CLiwDefaultMap::NewLC();
-                     variant.Get( *dataMap );
-                     variant.Reset();
-                     if ( dataMap->FindL( KWidgetInfo, variant ) )
-                         {
-                         CLiwDefaultMap* widgetInfoMap = CLiwDefaultMap::NewLC();
-                         variant.Get( *widgetInfoMap );
-                         if ( widgetInfoMap->FindL( KWidgetType, variant ) )
-                             {
-                             if ( KS60Widget == variant.AsTInt32())
-                                 {
-                                 isNokiaWidget = ETrue;
-                                 }
-                             }
-                         CleanupStack::PopAndDestroy( widgetInfoMap );
-                         }
-                     CleanupStack::PopAndDestroy( dataMap );
-                     }
-                 
-                 if (isNokiaWidget )
-                     {
-                     publishers.AppendL( bundleId );
-                     CleanupStack::Pop( bundleId );
-                     }
-                 else
-                     {
-                     CleanupStack::PopAndDestroy( bundleId );
-                     }
+                 publishers.AppendL( bundleId );
+                 CleanupStack::Pop( bundleId );
                  }
              CleanupStack::PopAndDestroy( publisherMap );     
              }
@@ -581,17 +503,7 @@
     __UHEAP_MARK;
     TInt id( KErrNotFound );
     if( iCPSInterface )
-        {
-        TBuf<10> uid(wrtInfo.iUid.Name());  // [12345678]
-        uid.Delete(0,1);                    // 12345678]
-        uid.Delete( uid.Length()-1, 1);     // 12345678
-        TBuf<50> wrtuid;
-        wrtuid.Append(KUid);                // uid
-        wrtuid.Append(KOpenPar);            // uid(
-        wrtuid.Append(K0x);                 // uid(0x
-        wrtuid.Append(uid );			  // uid(0x12345678
-        wrtuid.Append(KClosePar);           // uid(0x12345678)
-   
+        {   
         CLiwGenericParamList* inparam( CLiwGenericParamList::NewLC() );
         CLiwGenericParamList* outparam( CLiwGenericParamList::NewLC() );
 
@@ -605,25 +517,21 @@
         cpdatamap->InsertL( KPublisherId, TLiwVariant( KWRTPublisher ));
         cpdatamap->InsertL( KContentType, TLiwVariant( KTemplatedWidget ));
         cpdatamap->InsertL( KContentId, TLiwVariant( wrtInfo.iBundleId ));
+        // Widget info map
+    	CLiwDefaultMap* widgetInfo = CLiwDefaultMap::NewLC();
+		widgetInfo->InsertL( KTemplateType, TLiwVariant( KTemplateName ));
+		widgetInfo->InsertL( KWidgetName, TLiwVariant( wrtInfo.iDisplayName ));
+		datamap->InsertL( KWidgetInfo , TLiwVariant( widgetInfo ));
+		CleanupStack::PopAndDestroy( widgetInfo );
         
-        // Widget info map
-    	  CLiwDefaultMap* widgetInfo = CLiwDefaultMap::NewLC();
-		    widgetInfo->InsertL( KTemplateType, TLiwVariant( KTemplateName ));
-		    widgetInfo->InsertL( KWidgetName, TLiwVariant( wrtInfo.iDisplayName ));
-		    widgetInfo->InsertL( KWidgetIcon, TLiwVariant( wrtuid));  // uid(0x12345678) This is the expected format 
-            widgetInfo->InsertL( KWidgetType, TLiwVariant( TInt32 (wrtInfo.iType ) ));
-
-		    datamap->InsertL( KWidgetInfo , TLiwVariant( widgetInfo ));
-		    CleanupStack::PopAndDestroy( widgetInfo );
-        
-		    // Take dynamic menu items into use
-		    if (networkAccess)
-		        {
-		        CLiwDefaultMap* mapMenu = CLiwDefaultMap::NewLC();
-		        mapMenu->InsertL( KItemOnlineOffline, TLiwVariant( KMyActionName ));
-		        datamap->InsertL( KMenuItems, TLiwVariant( mapMenu ));
-		        CleanupStack::PopAndDestroy(mapMenu);
-		        }
+		// Take dynamic menu items into use
+		if (networkAccess)
+		    {
+		    CLiwDefaultMap* mapMenu = CLiwDefaultMap::NewLC();
+		    mapMenu->InsertL( KItemOnlineOffline, TLiwVariant( KMyActionName ));
+		    datamap->InsertL( KMenuItems, TLiwVariant( mapMenu ));
+		    CleanupStack::PopAndDestroy(mapMenu);
+		    }
 
         cpdatamap->InsertL( KDataMap, TLiwVariant(datamap) );
         
@@ -772,42 +680,13 @@
 void CWrtHarvester::QueueOperationL( TWidgetOperations aOperation, TUid aUid )
     {
     //Hack to find out if WidgetUi exist as Queue keeps filling up
-    SWidgetOperation op = { aOperation, aUid };
-    
-    TInt value = KErrNone;
-    TInt error = iWidgetUIListener->GetValue(value);
-    
-    if((iHSCount*3 <= iWidgetOperations.Count() && !CheckTaskExistsL() ) || (aOperation == WidgetSelect && !CheckTaskExistsL() && value ) )
-        {        
+    if((iHSCount*3 <= iWidgetOperations.Count() && !CheckTaskExistsL()) || (aOperation == WidgetSelect))
+        {
         ClearAllOperations();
         iWidgetUIListener->SetValue(1);
-        } 
-    
-    TBool queued (EFalse);
-    for(TInt i =0; i < iWidgetOperations.Count() && (aOperation == WidgetResume || aOperation == WidgetSuspend ) ; i++)
-        {
-        SWidgetOperation opInQueue = iWidgetOperations[i];
-        //we get resume but we already have suspend in Queue
-        //make Resume as Suspend    
-        if(op.iOperation == WidgetResume && opInQueue.iUid == op.iUid && opInQueue.iOperation == WidgetSuspend )
-            {            
-            iWidgetOperations[i].iOperation = WidgetResume;
-            queued = ETrue;
-            break;
-            }            
-        //we get suspend but we already have resume in Queue
-        //make Suspend as Resume    
-        if(op.iOperation == WidgetSuspend  && opInQueue.iUid == op.iUid && opInQueue.iOperation == WidgetResume )
-            {            
-            iWidgetOperations[i].iOperation = WidgetSuspend;
-            queued = ETrue;
-            break;
-            }    
-        }
-            
-    if(!queued)
-        iWidgetOperations.Append( op );
-            
+        }        
+    SWidgetOperation op = { aOperation, aUid };
+    iWidgetOperations.Append( op );
     TryLaunchNextOperationL();
     }
 
@@ -837,17 +716,13 @@
     {
     TInt value = KErrNone;
     TInt error = iWidgetUIListener->GetValue(value);
-    if( error == KErrNone && value == 1 && iWidgetOperations.Count() != 0 && iCanAccessRegistry )
+    if( error == KErrNone && value == 1 && iWidgetOperations.Count() != 0 )
         {
         // Set value to 0 so that next widget is not launched before Widget App sets value to 1.
         iWidgetUIListener->SetValue( 0 );
         //Always launch the first in operation
         LaunchWidgetOperationL( iWidgetOperations[0] );
-        
-        if(iWidgetOperations[0].iOperation == WidgetSelect)
-        	ClearAllOperations();        
-        else
-        	iWidgetOperations.Remove( 0 );
+        iWidgetOperations.Remove( 0 );
         }
     }
 
@@ -906,7 +781,9 @@
 //
 void CWrtHarvester::LaunchWidgetOperationL( SWidgetOperation aOperation )
     {
-    LaunchWidgetL (aOperation.iUid, aOperation.iOperation );
+    HBufC* widgetName( GetAppNameLC( iApaSession, aOperation.iUid) );
+    HandleWidgetCommandL( iApaSession, *widgetName, aOperation.iUid, aOperation.iOperation );
+    CleanupStack::PopAndDestroy( widgetName );
     }
 
 // ----------------------------------------------------------------------------
@@ -918,28 +795,12 @@
     RWidgetRegistryClientSession session;
     CleanupClosePushL( session );
     User::LeaveIfError( session.Connect() );
-
-    CWidgetPropertyValue* property = session.GetWidgetPropertyValueL( aUid, EPreInstalled );
-    TBool preInstalled = property && *(property);
-    delete property;
-
-    // Set blanket permission to true for pre-installed widgets
-    if ( preInstalled )
-        {
-        session.SetBlanketPermissionL( aUid, EBlanketTrue );
-        }
-    
-    if ( session.IsBlanketPermGranted ( aUid ) == EBlanketUnknown && !iDialogShown 
-         &&  iCanAccessRegistry  )
+    if ( session.IsBlanketPermGranted ( aUid ) == EBlanketUnknown && !iDialogShown )
         {
         iDialogShown = ETrue;            
         AllowPlatformAccessL( aUid );
         }
-    else if(session.IsBlanketPermGranted ( aUid ) == EBlanketUnknown)
-        {
-        iUid.Append(aUid);
-        }
-    else
+    else if(!iDialogShown)
         {
         QueueOperationL( WidgetResume, aUid );
         }        
@@ -1013,42 +874,11 @@
     RWidgetRegistryClientSession session;
     CleanupClosePushL( session );
     User::LeaveIfError( session.Connect() );
-
-    CWidgetPropertyValue* value = session.GetWidgetPropertyValueL( aUid, EAllowNetworkAccess );
-    TBool networkAccess = value && *(value);
-    delete value;
-
+    TBool networkAccess = *(session.GetWidgetPropertyValueL( aUid, EAllowNetworkAccess ) );
     CleanupStack::PopAndDestroy( &session );
     
     return networkAccess;
     }
-// ----------------------------------------------------------------------------
-// 
-// ----------------------------------------------------------------------------
-//
-TInt CWrtHarvester::DeleteCallback(TAny* aPtr)
-    {
-    CWrtHarvester* self = (CWrtHarvester*)aPtr;    
-    self->QueueResumeL(self->iUid[0]);
-    self->iUid.Remove(0);    
-    delete self->iAsyncCallBack;
-    self->iAsyncCallBack = NULL;
-    return 0;
-    }
-
-// ----------------------------------------------------------------------------
-// 
-// ----------------------------------------------------------------------------
-//
-void CWrtHarvester::DialogShown()
-    {
-    iDialogShown = EFalse;
-    if(iUid.Count())
-        {
-        iAsyncCallBack = new (ELeave) CAsyncCallBack(TCallBack(DeleteCallback,this),CActive::EPriorityUserInput);
-        iAsyncCallBack->CallBack(); 
-        }
-    }
 
 // ----------------------------------------------------------------------------
 // 
@@ -1163,147 +993,5 @@
                                 aMessage,
                                 aSoftkeys);
     }
-//======================================================================
-// Launch widget.
-//===========================================================================
-//
-void LaunchWidgetL( const TUid& aUid, TUint32 aOperation )
-    {
-    __UHEAP_MARK;
-    
-    TUid widgetAppUid( TUid::Uid( KWidgetAppUid ) );
-    
-    RWsSession wsSession;
-    ROomMonitorSession monitorSession;
-    TApaTaskList taskList( wsSession );
-    HBufC8* message( HBufC8::NewLC( KWidgetUiMaxMessageLength ) );
-    TPtr8 des( message->Des() );
-    TInt err(KErrNone);
-    RDesWriteStream stream( des );
-    
-    CleanupClosePushL( stream );
-    
-    // Make the message to be sent.
-    stream.WriteUint32L( 1 );
-    stream.WriteUint32L( aUid.iUid );
-    stream.WriteInt32L( aOperation );
-        
-    CleanupStack::PopAndDestroy( &stream );
-    
-    // Create Window server session
-    User::LeaveIfError( wsSession.Connect() );
-    User::LeaveIfError( monitorSession.Connect() );
-    CleanupClosePushL( wsSession );
 
-    // Get the task list
-    // Try to find out if stub ui is already running
-    TApaTask task = taskList.FindApp( widgetAppUid );
-
-    if ( task.Exists() )
-        {
-        // TODO make something here, or not...
-        widgetAppUid = TUid::Uid( 1 );
-        if ( aOperation == WidgetSelect )
-            {
-            task.BringToForeground();
-            }
-        task.SendMessage( widgetAppUid, des );
-        }
-    else
-        {
-        // TODO CONST
-        if ( aOperation == LaunchMiniview ||
-             aOperation == WidgetSelect ||
-             aOperation == WidgetResume ||
-             aOperation == WidgetRestart ) //WidgetUI has died -> re-launch
-            {
-            TInt bytesAvailaible(0);
-            if (aOperation != WidgetSelect )
-                {
-#ifdef BRDO_OOM_MONITOR2_COMPONENT_FF
-                err = monitorSession.RequestOptionalRam(KMemoryToLaunchWidgetUi, KMemoryToLaunchWidgetUi,KUidWidgetOOMPlugin, bytesAvailaible);
-#else
-                   TMemoryInfoV1Buf info;
-                   UserHal::MemoryInfo(info);
-                   err = info().iFreeRamInBytes > KMemoryToLaunchWidgetUi +  KRAMGOODTHRESHOLD ? KErrNone : KErrNoMemory;
-#endif
-                if( err == KErrNone)
-                    {
-                    LaunchWidgetUIL( widgetAppUid, *message, aOperation );
-                    }
-                }
-            else
-                {
-                //The modification is related to the manual starting of WRT widgets from HS. After noticing an issue when
-                //the user taps manually a WRT widget from the HS. 
-                //If RAM is not available with RequestOptionalRam() API, the manual tapping does nothing
-                //and that is incorrect behaviour. Therefore if widgetSelect -event is sent to the launcher we are using RequestFreeMemory() instead of using RequestOptionalRam() API. 
-                //This means that we apply mandatory RAM allocation when a widget is started manually from HS in order to make sure that RAM is released properly
-                err = monitorSession.RequestFreeMemory( KMemoryToLaunchWidgetUi );
-                if( err == KErrNone)
-                    {
-                    LaunchWidgetUIL( widgetAppUid, *message, aOperation );
-                    }
-                }
-            if(err != KErrNone)
-                NotifyCommandAndCleanUp();
-            }
-        else
-            {
-            NotifyCommandAndCleanUp();
-            }
-            
-        }
-        
-    CleanupStack::PopAndDestroy( 2, message );
-    monitorSession.Close();
-    __UHEAP_MARKEND;
-    }
-
-//===========================================================================
-// Launch Widget UI.
-//===========================================================================
-void LaunchWidgetUIL( 
-    const TUid& aUid, 
-    const TDesC8& aMessage, 
-    TUint32 aOperation )
-    {
-    HBufC* document( NULL );
-    CApaCommandLine* line( CApaCommandLine::NewLC() );
-    TApaAppInfo info;
-    RApaLsSession session;
-    
-    User::LeaveIfError( session.Connect() );
-    CleanupClosePushL( session );
-    
-    User::LeaveIfError( session.GetAppInfo( info, aUid ) );
-        
-    document = HBufC::NewMaxLC( TReal( TReal( aMessage.Length() )  / 2.0 ) + 0.5 );
-
-    Mem::Copy( 
-        reinterpret_cast< TUint8* >( const_cast< TUint16* >( document->Ptr() ) ),
-        aMessage.Ptr(),
-        KWidgetUiMaxMessageLength );
-        
-    line->SetDocumentNameL( *document );
-    line->SetExecutableNameL( info.iFullName );
-        
-    // TODO make const definitions.
-    if ( aOperation == 1 || aOperation == 3 )
-        {
-        line->SetCommandL( EApaCommandBackground );
-        }
-        
-    session.StartApp( *line );
-
-    CleanupStack::PopAndDestroy( 3, line );
-    }
-
-void NotifyCommandAndCleanUp()
-    {
-    const TUid KMyPropertyCat = { 0x10282E5A };
-    enum TMyPropertyKeys { EWidgetUIState = 109 };
-    TInt state( 2 );
-    RProperty::Set( KMyPropertyCat, EWidgetUIState , state );    
-    }
  //  End of File