contacts_plat/logs_ui_command_line_api/inc/LogsUiCmdStarter.inl
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contacts_plat/logs_ui_command_line_api/inc/LogsUiCmdStarter.inl	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Provides implementation of interface to start Logs application 
+*
+*/
+
+#ifndef LOGSUICMDSTARTER_INL
+#define LOGSUICMDSTARTER_INL
+
+//  INCLUDES
+#include <apgtask.h>
+#include <apgcli.h>
+
+// --------------------------------------------------------------------------
+// LogsUiCmdStarter::CmdStart
+// --------------------------------------------------------------------------
+//
+inline TInt LogsUiCmdStarter::CmdStart( const TPtrC8 aView )
+    {
+    TInt err( KErrNone );
+    TRAP(err, LogsUiCmdStarter::CmdStartL( aView ));
+    return err;
+    }
+
+
+// --------------------------------------------------------------------------
+// LogsUiCmdStarter::CmdStartL
+// --------------------------------------------------------------------------
+//
+
+inline void LogsUiCmdStarter::CmdStartL( const TPtrC8 aView )
+    {
+    /***********************************************
+    FIXME: Replaced by code below. Remove this code when sure that new code 
+           works better than this with the new ui effects implementation.
+    TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
+    TApaTask task = taskList.FindApp( LogsUiCmdStarterConsts::KLogsUID3 );
+    TPtrC8 msg;
+    msg.Set( aView );
+    
+    if( task.Exists() ) //Logs already open. Request it to
+        {               //activate the correct view
+        const TUid dummyUID = { 0x0 };
+        task.SendMessage( dummyUID, msg );
+        task.BringToForeground();  
+        }
+    else                //Start Logs and request it to activate
+        {               //the correct view
+        TApaAppInfo appInfo;
+        RApaLsSession lsSession;
+        User::LeaveIfError( lsSession.Connect() );        
+        CleanupClosePushL( lsSession );
+        
+        if( lsSession.GetAppInfo( appInfo, LogsUiCmdStarterConsts::KLogsUID3 ) == KErrNone )
+            {
+            CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+            cmdLine->SetExecutableNameL( appInfo.iFullName );
+            cmdLine->SetCommandL( EApaCommandRun );
+            cmdLine->SetTailEndL( msg );
+
+            lsSession.StartApp( *cmdLine );
+            CleanupStack::PopAndDestroy( cmdLine );
+            }
+
+        CleanupStack::PopAndDestroy();  // lsSession
+        }
+    ***********************************************/        
+
+    TPtrC8 msg;
+    msg.Set( aView );
+
+    // Check that Logs application exists
+    TApaAppInfo appInfo;
+    RApaLsSession lsSession;
+    User::LeaveIfError( lsSession.Connect() );        
+    CleanupClosePushL( lsSession );
+    User::LeaveIfError( lsSession.GetAppInfo( appInfo, LogsUiCmdStarterConsts::KLogsUID3 ) );
+
+    // Create command line for starting Logs
+    CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+    cmdLine->SetExecutableNameL( appInfo.iFullName );
+    cmdLine->SetCommandL( EApaCommandRun );
+
+    // Check if Logs is already running
+    TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
+    TApaTask task = taskList.FindApp( LogsUiCmdStarterConsts::KLogsUID3 );
+
+    if( task.Exists() )
+        {
+        // Logs already running. Request it to activate the correct view
+        const TUid dummyUID = { 0x0 };
+        task.SendMessage( dummyUID, msg );
+        
+        // The below is just to secure an unlikely case that StartApp() would in future anyhow 
+        // send command line parameter to application that is already running (currently
+        // it doesn't). The "dontactivate" just prevents double attempt of activation of
+        // view requested in msg SendMessage'd to Logs.
+        _LIT8(dontActivate, "dontactivate");
+        TPtrC8 dontActivateMsg = dontActivate(); 
+        cmdLine->SetTailEndL( dontActivateMsg );  
+        }
+    else                
+        {
+        // Logs not yet running. Request it to activate the correct view
+        cmdLine->SetTailEndL( msg );  
+       	// Start Logs 
+    	lsSession.StartApp( *cmdLine );
+        }
+  
+    CleanupStack::PopAndDestroy( cmdLine );
+    CleanupStack::PopAndDestroy();  //lsSession 
+    }
+
+#endif  //LOGSUICMDSTARTER_INL