memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiappui.cpp
changeset 0 f0f2b8682603
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiappui.cpp	Thu Feb 11 15:51:35 2010 +0200
@@ -0,0 +1,554 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies 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 <eikmenub.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <atconfigurationappgui.rsg>
+#include <stringloader.h>
+#include <aknnotewrappers.h>
+#include <s32stor.h> // CDictionaryStore
+
+#include "atconfigurationappguiappui.h"
+#include "atconfigurationappgui.hrh"
+#include "atconfigurationappguilistboxview.h"
+#include "atconfigurationappguiprocessview.h"
+#include "atconfigurationappguisettingitemlistview.h"
+#include "atconfigurationappguiapplication.h"
+#include "atlog.h"
+
+#include <aknmessagequerydialog.h>
+
+// CONSTANTS
+const TInt KATDefaultUpdatingInterval = 2000000;
+_LIT8( KSubTestId, "ATConfigUiSubTest" );
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::CATConfigurationAppGuiAppUi()
+// Construct the CATConfigurationAppGuiAppUi instance
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiAppUi::CATConfigurationAppGuiAppUi()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::CATConfigurationAppGuiAppUi()" );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::ConstructL()
+// Completes the second phase of Symbian object construction.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::ConstructL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::ConstructL()" );
+    
+    BaseConstructL( EAknEnableSkin  | 
+                     EAknEnableMSK ); 
+    InitializeContainersL();
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::~CATConfigurationAppGuiAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiAppUi::~CATConfigurationAppGuiAppUi()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::~CATConfigurationAppGuiAppUi()" );
+    
+    if ( iPeriodicTimer )
+        {
+        if ( iPeriodicTimer->IsActive() )
+            {
+            iPeriodicTimer->Cancel();
+            }  
+        delete iPeriodicTimer;  
+        }
+ 
+    iSubTestProcesses.Close();
+    iStorageServer.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::InitializeContainersL()
+// Initializes all the controls.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::InitializeContainersL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::InitializeContainersL()" );
+    
+    iPeriodicTimer = CPeriodic::New( CActive::EPriorityLow );
+        
+    iATConfigurationAppGuiListBoxView = CATConfigurationAppGuiListBoxView::NewL();
+    AddViewL( iATConfigurationAppGuiListBoxView );
+    iATConfigurationAppGuiProcessView = CATConfigurationAppGuiProcessView::NewL();
+    AddViewL( iATConfigurationAppGuiProcessView );
+    //iATConfigurationAppGuiSettingItemListView = CATConfigurationAppGuiSettingItemListView::NewL();
+    //AddViewL( iATConfigurationAppGuiSettingItemListView );
+    
+    SetDefaultViewL( *iATConfigurationAppGuiListBoxView );
+
+    TInt error = iStorageServer.Connect();
+        if ( error != KErrNone )
+            {
+            HBufC* noteText;
+            noteText = StringLoader::LoadLC( R_CANT_CONNECT_SERVER );
+            CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
+            note->ExecuteLD( *noteText );
+            CleanupStack::PopAndDestroy( noteText );
+            }
+    // Load application settings
+    //LoadSettingsL();
+    // Start updating the view
+    if ( iPeriodicTimer )
+        {
+        StartTimerL();    
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::HandleCommandL()
+// Handle a command for this appui.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::HandleCommandL( TInt aCommand )
+    {
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::HandleCommandL(%i)", 
+			aCommand );
+    
+    TBool commandHandled = EFalse;
+    switch ( aCommand )
+        { // Code to dispatch to the AppUi's menu and CBA commands is generated here
+        default:
+            break;
+        }
+
+    if ( !commandHandled ) 
+        {
+        if ( aCommand == EAknSoftkeyExit || aCommand == EEikCmdExit )
+            {
+            // Stop all subtests before closing handles
+            StopAllSubtestsL();
+            Exit();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::HandleResourceChangeL()
+// Override of the HandleResourceChangeL virtual function.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::HandleResourceChangeL( TInt aType )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::HandleResourceChangeL()" );
+    
+    CAknViewAppUi::HandleResourceChangeL( aType );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::HandleKeyEventL()
+// Override of the HandleKeyEventL virtual function.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CATConfigurationAppGuiAppUi::HandleKeyEventL(
+        const TKeyEvent& /*aKeyEvent*/,
+        TEventCode /*aType*/ )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::HandleKeyEventL()" );
+    
+    // The inherited HandleKeyEventL is private and cannot be called
+    return EKeyWasNotConsumed;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::HandleViewDeactivation()
+// Override of the HandleViewDeactivation virtual function.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::HandleViewDeactivation( 
+        const TVwsViewId& aViewIdToBeDeactivated, 
+        const TVwsViewId& aNewlyActivatedViewId )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::HandleViewDeactivation()" );
+    
+    CAknViewAppUi::HandleViewDeactivation( 
+            aViewIdToBeDeactivated, 
+            aNewlyActivatedViewId );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::SetProcessSubTestStartL()
+// Starts subtest for a process.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::SetProcessSubTestStartL( TUint aProcessId )
+    {
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::SetProcessSubTestStartL(%i)", 
+    		aProcessId );
+    
+    // Load the kernel side device driver
+    TInt loadErr = User::LoadLogicalDevice( KAnalyzeToolLddName );
+    TBool driverLoaded( EFalse );
+            
+    if ( loadErr == KErrNone || loadErr == KErrAlreadyExists )
+        {
+        driverLoaded = ETrue;
+        }
+        
+    RAnalyzeTool analyzeTool;    
+    TInt driverOpen = analyzeTool.Open();
+    TInt handleCount( KErrNone );
+    
+    if ( driverOpen == KErrNone )
+        {       
+        TATProcessHandlesBuf params;
+        params().iProcessId = aProcessId;
+        
+        analyzeTool.GetCurrentHandleCount( params );
+        handleCount = params().iCurrentHandleCount;
+        LOGSTR2( "CATConfigurationAppGuiAppUi::SetProcessSubTestStartL - %i current handle(s)",
+                params().iCurrentHandleCount );       
+        }
+    
+    TInt startErr = iStorageServer.StartSubTest( aProcessId, KSubTestId, handleCount );
+    if ( KErrNone == startErr )
+        {
+        iSubTestProcesses.Append( aProcessId );    
+        }
+    else if ( KErrNotSupported == startErr )
+        {
+        ShowErrorNoteL( R_CANT_START_SUBTEST_NOTSUPPORTED );
+        }
+    else // Could not start for a process
+        {
+        ShowErrorNoteL( R_CANT_START_SUBTEST_PROCESSID );  
+        }
+    
+    // The count of device driver users
+    TClientCountBuf count;
+    
+    // Check the flag
+    if ( driverOpen == KErrNone )
+        {
+        analyzeTool.ClientCount( count );
+        analyzeTool.Close();
+        }  
+    // Check the flag
+    if ( driverLoaded )
+        {
+        // Check if there is another user for device driver
+        if ( count().iClientCount <= 1 )
+            {
+            // There was no other users -> unload the device driver
+            User::FreeLogicalDevice( KAnalyzeToolLddName );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::SetProcessSubTestStopL()
+// Stops subtest for a process.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::SetProcessSubTestStopL( TUint aProcessId )
+    {
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::SetProcessSubTestStopL(%i)", 
+    		aProcessId );
+    
+    // Load the kernel side device driver
+    TInt loadErr = User::LoadLogicalDevice( KAnalyzeToolLddName );
+    TBool driverLoaded( EFalse );
+            
+    if ( loadErr == KErrNone || loadErr == KErrAlreadyExists )
+        {
+        driverLoaded = ETrue;
+        }
+        
+    RAnalyzeTool analyzeTool;
+    
+    TInt driverOpen = analyzeTool.Open();
+    TInt handleCount( KErrNone );
+    
+    if ( driverOpen == KErrNone )
+        {  
+        TATProcessHandlesBuf params;
+        params().iProcessId = aProcessId;
+        
+        analyzeTool.GetCurrentHandleCount( params );
+        handleCount = params().iCurrentHandleCount;
+        LOGSTR2( "CATConfigurationAppGuiAppUi::SetProcessSubTestStopL - %i current handle(s)",
+                params().iCurrentHandleCount );      
+        }
+        
+    TInt stopErr = iStorageServer.StopSubTest( aProcessId, KSubTestId, handleCount );
+    if ( KErrNone == stopErr )
+        {
+        TInt index = iSubTestProcesses.Find( aProcessId );
+        if ( index > KErrNotFound )
+            {
+            iSubTestProcesses.Remove( index );
+            if ( iSubTestProcesses.Count() == KErrNone )
+                iSubTestProcesses.Reset();
+            }             
+        }
+    else
+        {
+        ShowErrorNoteL( R_CANT_STOP_SUBTEST_PROCESSID );     
+        }
+    
+    // The count of device driver users
+    TClientCountBuf count;
+    
+    // Check the flag
+    if ( driverOpen == KErrNone )
+        {
+        analyzeTool.ClientCount( count );
+        analyzeTool.Close();
+        }  
+    // Check the flag
+    if ( driverLoaded )
+        {
+        // Check if there is another user for device driver
+        if ( count().iClientCount <= 1 )
+            {
+            // There was no other users -> unload the device driver
+            User::FreeLogicalDevice( KAnalyzeToolLddName );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::IsSubTestRunning()
+// Returns ETrue if subtest is running for a process.
+// -----------------------------------------------------------------------------
+//
+TInt CATConfigurationAppGuiAppUi::IsSubTestRunning( TUint aProcessId )
+    {
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::IsSubTestRunning(%i)", 
+    		aProcessId );
+    
+    return iSubTestProcesses.Find( aProcessId );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::LoadSettingsL()
+// Loads application settings.
+// -----------------------------------------------------------------------------
+//
+TInt CATConfigurationAppGuiAppUi::LoadSettingsL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::LoadSettingsL()" );
+    
+    /*CDictionaryStore* iniFile = Application()->OpenIniFileLC( CCoeEnv::Static()->FsSession() );
+ 
+    if ( iniFile->IsPresentL( KUidATConfigurationAppGuiApplication ) )
+        {
+        RDictionaryReadStream readStream;
+        readStream.OpenLC( *iniFile, KUidATConfigurationAppGuiApplication );
+        // Load warning tones value
+        iWarningTones = static_cast<TInt>( readStream.ReadInt32L() );
+        // Load update interval value
+        iUpdateInterval = static_cast<TInt>( readStream.ReadInt32L() );
+        // Initialize other settings
+ 
+        CleanupStack::PopAndDestroy( &readStream );
+        }
+    else
+        {
+        // ini doesn't exist, so use default values
+        iWarningTones = 0;
+        iUpdateInterval = 0;
+        }
+ 
+    CleanupStack::PopAndDestroy(iniFile);*/      
+        
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::ShowErrorNoteL()
+// Shows error note.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::ShowErrorNoteL( TInt aResourceId )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::ShowErrorNoteL()" );
+    
+    CAknErrorNote* errorNote = new ( ELeave ) CAknErrorNote();
+    HBufC* errorText = StringLoader::LoadLC( aResourceId );
+    errorNote->SetTextL( errorText->Des() );
+    errorNote->ExecuteLD();
+    CleanupStack::PopAndDestroy( errorText );      
+    }
+
+//-----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::HandleForegroundEventL
+// Handles fore ground events
+//-----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::HandleForegroundEventL( TBool aForeground )
+    {  
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::HandleForegroundEventL(%i)", 
+    		aForeground );
+    
+    if ( aForeground )
+        {
+        // Start timer when processes view gains foreground
+        if ( iDeactivatedId.iViewUid == TUid::Uid( EATConfigurationAppGuiListBoxViewId ) )
+            {
+            StartTimerL();    
+            }
+        }
+    else
+        {
+        // Cancel timer when not in foreground
+        TVwsViewId viewId;
+        GetActiveViewId( viewId );
+        // Save deactivated view's Id
+        iDeactivatedId = viewId;
+        TimerNotifyL( EFalse );        
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::StartTimerL
+// Starts timer with a specific time interval
+//-----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::StartTimerL()
+    {   
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::StartTimerL()" );
+    
+    if ( iPeriodicTimer->IsActive() )
+        {
+        iPeriodicTimer->Cancel();
+        }
+    iPeriodicTimer->Start( KATDefaultUpdatingInterval, 
+            KATDefaultUpdatingInterval, TCallBack( CallBackFunctionL, this ) );  
+    }
+    
+//-----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::TimerNotifyL
+// Periodic timer's callback function
+//-----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::TimerNotifyL( TBool aPeriod )
+    {
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::TimerNotifyL(%i)", 
+    		aPeriod );
+    
+    if ( iPeriodicTimer->IsActive() )
+        {
+        iPeriodicTimer->Cancel();
+        }   
+    if ( aPeriod )
+        {
+        if ( iATConfigurationAppGuiListBoxView )
+            {
+            iATConfigurationAppGuiListBoxView->UpdateViewL();
+            }
+        StartTimerL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiAppUi::StopAllSubtestsL()
+// Stops all subtests which are running
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiAppUi::StopAllSubtestsL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiAppUi::StopAllSubtestsL()" );
+    
+    TInt index( KErrNone );
+    RArray<TATProcessInfo> processes;
+    TInt err( iStorageServer.GetProcessesL( processes ) );
+    LOGSTR2( "iStorageServer.GetProcessesL(%i)", err ); 
+    
+    // Load the kernel side device driver
+    TInt loadErr( User::LoadLogicalDevice( KAnalyzeToolLddName ) );
+    TBool driverLoaded( EFalse );
+    LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::StopAllSubtestsL() loadErr(%i)", 
+    		loadErr );
+            
+    if ( loadErr == KErrNone || loadErr == KErrAlreadyExists )
+        {
+        driverLoaded = ETrue;
+        }
+    
+    RAnalyzeTool analyzeTool;    
+    TInt driverOpen( analyzeTool.Open() );
+    
+    while ( index < processes.Count() )
+        {
+        TUint processId = processes[ index ].iProcessId;
+        TInt handleCount( KErrNone );
+        
+        if ( driverOpen == KErrNone )
+            {  
+            TATProcessHandlesBuf params;
+            params().iProcessId = processId;
+            // Get process handle count
+            analyzeTool.GetCurrentHandleCount( params );
+            handleCount = params().iCurrentHandleCount;
+            LOGSTR2( "ATCU CATConfigurationAppGuiAppUi::StopAllSubtestsL() handleCount( %i )",
+            		handleCount );      
+            }        
+        
+        err = iStorageServer.StopSubTest( processId, KSubTestId, handleCount );
+        LOGSTR2( "ATCU > iStorageServer.StopSubTest( %i )", err ); 
+        
+        TInt find( iSubTestProcesses.Find( processId ) );
+        if ( find > KErrNotFound )
+            {
+            iSubTestProcesses.Remove( find );
+            if ( iSubTestProcesses.Count() == KErrNone )
+                {
+                iSubTestProcesses.Reset();
+                }  
+            } 
+        index++;
+        }
+    
+    // Close processes array
+    processes.Close();
+
+    // The count of device driver users
+    TClientCountBuf count;
+    
+    // Check the flag
+    if ( driverOpen == KErrNone )
+        {
+        analyzeTool.ClientCount( count );
+        analyzeTool.Close();
+        }  
+    // Check the flag
+    if ( driverLoaded )
+        {
+        // Check if there is another user for device driver
+        if ( count().iClientCount <= 1 )
+            {
+            // There was no other users -> unload the device driver
+            err = User::FreeLogicalDevice( KAnalyzeToolLddName );
+            LOGSTR2( "ATCU > FreeLogicalDevice( %i )", err ); 
+            }
+        }
+    }
+
+// End of File