diff -r 75a71fdb4c92 -r 7d11f9a6646f devicediagnostics/devdiagapp/src/devdiagpluginview.cpp --- a/devicediagnostics/devdiagapp/src/devdiagpluginview.cpp Tue Feb 02 00:03:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,686 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Plug-in view -* -*/ - - -// INCLUDE FILES - -#include "devdiagapp.hrh" -#include "devdiagplugincontainer.h" -#include "devdiagengine.h" -#include "devdiagpluginview.h" -#include "devdiagdef.h" -#include "devdiag.pan" -#include "devdiagexecutionresults.h" - -#include -#include //resources -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // For HlpLauncher -#include -#include -#include -#include // Debug Logger -#include - -// EXTERNAL DATA STRUCTURES - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS - -// MACROS - -// LOCAL CONSTANTS AND MACROS -_LIT(KLinefeed, "\n"); -_LIT(KTabfeed, "\t"); -const TInt KFailedTestsMaxLength(1024); - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================= LOCAL FUNCTIONS ============================== - -// ========================= MEMBER FUNCTIONS ================================ - -// ---------------------------------------------------------------------------- -// CDevDiagPluginView::CDevDiagPluginView() -// -// Constructor -// ---------------------------------------------------------------------------- -// -CDevDiagPluginView::CDevDiagPluginView( CDevDiagEngine& aEngine, TUid aParentSuiteUid ): - iContainer(NULL), iEngine(aEngine), iParentSuiteUid( aParentSuiteUid ) - { - } - - -// --------------------------------------------------------------------------- -// CDevDiagPluginView::NewL() -// -// Symbian OS default constructor -// --------------------------------------------------------------------------- -CDevDiagPluginView* CDevDiagPluginView::NewL( CDevDiagEngine& aEngine, - TUid aParentSuiteUid ) - { - LOGSTRING("CDevDiagPluginView* CDevDiagPluginView::NewL"); - CDevDiagPluginView* self = new( ELeave ) - CDevDiagPluginView ( aEngine, aParentSuiteUid ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - -// --------------------------------------------------------------------------- -// CDevDiagPluginView::ConstructL() -// -// Symbian OS two-phased constructor -// --------------------------------------------------------------------------- -void CDevDiagPluginView::ConstructL() - { - if ( iParentSuiteUid == KDDHardwareSuiteUid ) - { - BaseConstructL( R_DD_HW_PLUGIN_VIEW ); - ChangeTitleL( R_DIAG_TITLE_HARDWARE ); - } - else if ( iParentSuiteUid == KDDConnectivitySuiteUid ) - { - BaseConstructL( R_DD_CONNECTIVITY_PLUGIN_VIEW ); - ChangeTitleL( R_DIAG_TITLE_CONNECTIVITY ); - } - else if ( iParentSuiteUid == KDDServicesSuiteUid ) - { - BaseConstructL( R_DD_SERVICE_PLUGIN_VIEW ); - ChangeTitleL( R_DIAG_TITLE_SERVICE ); - } - else if ( iParentSuiteUid == KDDCoverageSuiteUid) - { - BaseConstructL( R_DD_COVERAGE_PLUGIN_VIEW ); - ChangeTitleL( R_DIAG_TITLE_COVERAGE ); - } - else - { - Panic( EDDApplicationUnknownSuite ); - } - - } - - -// ---------------------------------------------------------------------------- -// CDevDiagPluginView::~CDevDiagPluginView -// -// Destructor -// ---------------------------------------------------------------------------- -CDevDiagPluginView::~CDevDiagPluginView() - { - - if ( iContainer ) - { - delete iContainer; - } - - } - - -// --------------------------------------------------------------------------- -// TUid CDevDiagPluginView::Id() -// -// Returns view's ID. -// --------------------------------------------------------------------------- -TUid CDevDiagPluginView::Id() const - { - return KDDPluginViewId; - } - - -// --------------------------------------------------------------------------- -// Set context menu bar according to the suite. -// --------------------------------------------------------------------------- -void CDevDiagPluginView::SetContextMenu() - { - if ( iParentSuiteUid == KDDHardwareSuiteUid ) - { - - MenuBar()->SetContextMenuTitleResourceId( R_DD_HW_CONTEXT_MENUBAR ); - } - else if ( iParentSuiteUid == KDDConnectivitySuiteUid ) - { - MenuBar()->SetContextMenuTitleResourceId( R_DD_CONNECTIVITY_CONTEXT_MENUBAR ); - } - else if ( iParentSuiteUid == KDDServicesSuiteUid ) - { - MenuBar()->SetContextMenuTitleResourceId( R_DD_SERVICE_CONTEXT_MENUBAR ); - } - else if ( iParentSuiteUid == KDDCoverageSuiteUid) - { - MenuBar()->SetContextMenuTitleResourceId( R_DD_COVERAGE_CONTEXT_MENUBAR ); - } - else - { - Panic( EDDApplicationUnknownSuite ); - } - } -// --------------------------------------------------------------------------- -// CDevDiagPluginView::HandleCommandL(TInt aCommand) -// -// Handles commands directed to this class. -// --------------------------------------------------------------------------- -void CDevDiagPluginView::HandleCommandL( TInt aCommand ) - { - LOGSTRING("CDevDiagPluginView::HandleCommandL"); - switch ( aCommand ) - { - - case EDDCmdPerformSingle: - { - // State == EStateReady then run tests - if (iEngine.GetState()== 2) - { - LOGSTRING("iState == EStateReady"); - iContainer->DisplayStartTestingL(); - - MDiagPlugin* plugin = NULL; - iContainer->SelectedPlugin(plugin); - - iEngine.ExecuteTestL( plugin->Uid(), *AppUi() ); - } - else - { - LOGSTRING2("PluginView::iEngine::iState = %d ", iEngine.GetState()); - LOGSTRING ("Trying to Execute Plugin @ Invalid State"); - } - break; - } - - case EAknSoftkeyBack: - { - if (iEngine.GetState()== 2) - { - LOGSTRING("Before Activate Local View for Back"); - - AppUi()->ActivateLocalViewL( KDDMainViewId ); - - LOGSTRING("After Activate Local View for Back"); - - } - - else - { - LOGSTRING2("PluginView::iEngine::iState = %d ", iEngine.GetState()); - LOGSTRING ("Trying to issue Back @ Invalid State"); - } - break; - } - - case EDDMenuCmdMainHelp: - { - MessageQueryDialogLaunchL( - R_MESSAGE_QUERY_HELP_NOTE ); - break; - } - - case EAknCmdHelp: - { - - - if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - AppUi()->AppHelpContextL() ); - } - - break; - } - - case EDDCmdPerformAllHwTests: - { - //ask confirmation from the user - TBool ok = MessageQueryDialogLaunchL( - R_MESSAGE_QUERY_PERFORM_ALL_HW_TESTS ); - if ( ok ) - { - iContainer->ResetL(); - iContainer->DisplayStartTestingL(); - //Engine will populate the suite - iEngine.ExecuteTestL( KDDHardwareSuiteUid, *AppUi() ); - } - - break; - } - - case EDDCmdPerformAllCoverageTests: - { - - //ask confirmation from the user - TBool ok = MessageQueryDialogLaunchL( - R_MESSAGE_QUERY_PERFORM_ALL_COVERAGE_TESTS ); - if ( ok ) - { - //Engine will populate the suite - iEngine.ExecuteTestL( KDDCoverageSuiteUid, *AppUi() ); - } - - break; - } - - //These have only one test, so performing all is not needed yet - case EDDCmdPerformAllServiceTests: - { - break; - } - - case EDDCmdPerformAllConnTests: - { - break; - } - case EAknCmdTaskSwapper: - { - /* - * MSK: Active Applications - * This command is actually handled by Avkon FW - * Applications should not handle this - */ - break; - } - - default: - AppUi()->HandleCommandL( aCommand ); - break; - } - } - -// ---------------------------------------------------------------------------- -// CDevDiagPluginView::DoActivateL -// -// First method called by the Avkon framwork to invoke a view. -// ---------------------------------------------------------------------------- -// -void CDevDiagPluginView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/ , - const TDesC8& /*aCustomMessage*/ ) - { - if( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - - delete iContainer; - iContainer = NULL; - } - - iContainer = CDevDiagPluginContainer::NewL( this, iEngine, ClientRect() ); - iContainer->SetMopParent( this ); - AppUi()->AddToStackL( iContainer ); - - iEngine.SetObserver( this ); - - //Construct the model - iContainer->UpdateModelL( iParentSuiteUid ); - - SetContextMenu(); - - //Retrieve last test results. HandleEngineCommandL with - //EDevDiagEngineCommandGetLastResults is called after this. - iEngine.GetLastResultsL( iParentSuiteUid ); - } - -// ---------------------------------------------------------------------------- -// CDevDiagPluginView::DoDeactivate -// -// Called by the Avkon view framework when closing. -// ---------------------------------------------------------------------------- -// -void CDevDiagPluginView::DoDeactivate() - { - if ( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - iContainer = NULL; - } - } - - -// ---------------------------------------------------------------------------- -// Handle CDevDiagEngine events. -// -// EDevDiagEngineCommandTestExecutionDone is called when single or group -// execution finishes. -// -// MDevDiagEngineObserver::EDevDiagEngineCommandResultsDataUpdated is called -// when a plug-in is executed. -// -// EDevDiagEngineCommandGetLastResults is called after -// iEngine.GetLastResultsL( iParentSuiteUid ) is called. It retrieves the -// last results. -// ---------------------------------------------------------------------------- -// -void CDevDiagPluginView::HandleEngineCommandL( TAppEngineCommand aCommand, - TInt aError, - TAny* aCustom ) - { - LOGSTRING("CDevDiagPluginView::HandleEngineCommandL"); - switch ( aCommand ) - { - case MDevDiagEngineObserver::EDevDiagEngineCommandGroupExecutionDone: - { - if ( aError != KErrNone ) - { - LOGSTRING2("MDevDiagEngineObserver::Exec Done Error: %d: ", aError); - return; - } - - iEngine.GetLastResultsL( iParentSuiteUid ); - - if ( iEngine.HasExecutionResults() ) - { - TInt failedCount = iEngine.ExecutionResults().FailedResultsCount(); - - TInt passedCount = iEngine.ExecutionResults().PassedResultsCount(); - - if ( failedCount == 0 && passedCount > 0) - { - DisplayConfirmationDialogL(R_DIAG_CONF_TEST_PASSED); - } - else if(failedCount > 0) - { - DisplayMessageQueryDialogFailedResultsL(); - } - } - - break; - } - - case MDevDiagEngineObserver::EDevDiagEngineCommandGroupExecutionProgress: - { - if ( aError != KErrNone ) - { - LOGSTRING2("MDevDiagEngineObserver::ExecutionProgress Error: %d: ", aError); - return; - } - - iEngine.GetLastResultsL( iParentSuiteUid ); - - iContainer->MoveStartTestingDownL(); - - break; - } - case MDevDiagEngineObserver::EDevDiagEngineCommandGetLastResults: - { - if ( aError != KErrNone ) - { - LOGSTRING2("MDevDiagEngineObserver::GetLastResults Error: %d: ", aError); - return; - } - - RPointerArray* array = - static_cast*> (aCustom); - iContainer->DisplayChildrenWithResultsL( *array ); - - - if ( iEngine.HasExecutionResults() && !iEngine.ExecutionResults().LastTestFinishedL()) - { - iContainer->MoveStartTestingDownL(); - } - - - break; - } - case MDevDiagEngineObserver::EDevDiagEngineCommandSinglePluginExecutionDone: - { - - if(!iEngine.GetPluginDependencyL()) - iEngine.GetLastResultsL( iParentSuiteUid ); - - if ( aError != KErrNone ) - { - LOGSTRING2("MDevDiagEngineObserver::SinglePluginExecutionDone Error: %d: ", aError); - return; - } - - //iEngine.GetLastResultsL( iParentSuiteUid ); // ADO & Platformization Changes - - // ADO & Platformization Changes - - ///@@@KSR: changes for Codescanner error val = High - //if(iEngine.ExecutionResults().SinglePluginExecutionL() && !iEngine.GetPluginDependency()) - if(iEngine.ExecutionResults().SinglePluginExecutionL() && !iEngine.GetPluginDependencyL()) - { - - const CDiagResultsDatabaseItem* aResult; - aResult = iEngine.ExecutionResults().GetSinglepluginExecutionResult(); - - - if(aResult->TestResult() == CDiagResultsDatabaseItem::ESuccess) - { - DisplayConfirmationDialogL(R_DIAG_CONF_TEST_PASSED_1); - LOGSTRING("The test has passed"); - } - else if(aResult->TestResult() == CDiagResultsDatabaseItem::EFailed) - { - DisplayConfirmationDialogL(R_DIAG_CONF_TEST_FAILED_1); - LOGSTRING("The test has failed"); - } - } - - - // Changes ends - - break; - } - - case MDevDiagEngineObserver::EDevDiagEngineCommandTestExecutionCancelled: - { - //Update container. - iEngine.GetLastResultsL( iParentSuiteUid ); - - if ( iEngine.HasExecutionResults() ) - { - TInt failedCount = iEngine.ExecutionResults().FailedResultsCount(); - - TInt passedCount = iEngine.ExecutionResults().PassedResultsCount(); - - if ( failedCount == 0 && passedCount > 0) - { - DisplayConfirmationDialogL(R_DIAG_CONF_TEST_PASSED); - } - else if(failedCount > 0) - { - DisplayMessageQueryDialogFailedResultsL(); - } - } - - break; - } - } - } - - -// ---------------------------------------------------------------------------- -// Change the title of the application. -// -// ---------------------------------------------------------------------------- -// -void CDevDiagPluginView::ChangeTitleL(TInt aResourceId) - { - CAknTitlePane* titlePane = - (CAknTitlePane*)(AppUi()->StatusPane())->ControlL( - TUid::Uid( EEikStatusPaneUidTitle ) ); - - HBufC* titleText = iEikonEnv->AllocReadResourceLC( aResourceId ); - titlePane->SetTextL( titleText->Des() ); - CleanupStack::PopAndDestroy(titleText); - } - - -// ---------------------------------------------------------------------------- -// Display a message query dialog. -// -// ---------------------------------------------------------------------------- -// -TBool CDevDiagPluginView::MessageQueryDialogLaunchL( TInt aResourceId ) - { - CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog(); - - dlg->PrepareLC( aResourceId ); - - if (dlg->RunLD()) - { - return ETrue; - } - - return EFalse; - } - - -// ---------------------------------------------------------------------------- -// This is needed after performing a group of tests succesfully. -// ---------------------------------------------------------------------------- -// -void CDevDiagPluginView::DisplayConfirmationDialogL(TInt aResourceId) - { - CAknConfirmationNote* note = - new (ELeave) CAknConfirmationNote( ETrue ); //Waiting - - HBufC* text = NULL; - - text = StringLoader::LoadLC( aResourceId ); - - note->ExecuteLD( *text ); //Blocks until note dismissed - - CleanupStack::PopAndDestroy(); - } - - -// ---------------------------------------------------------------------------- -// This is needed after performing a group of tests -// -// Display dialog text according to the test result. -// -// Message query dialog will display a list of failed test cases. -// ---------------------------------------------------------------------------- -// -void CDevDiagPluginView::DisplayMessageQueryDialogFailedResultsL() - { - CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog(); - - dlg->PrepareLC( R_DEVDIAG_FAILED_TESTS_MESSAGEQUERY_DIALOG ); - - HBufC* failText = StringLoader::LoadL( R_DIAG_CONF_TEST_FAILED ); - CleanupStack::PushL( failText ); - - HBufC* failedTests = CreateResultsTextsForFailedTestsLC( iEngine.ExecutionResults() ); - - TInt newBufLength = failText->Length() + failedTests->Length(); - - HBufC* text = HBufC::NewLC( newBufLength ); - - text->Des().Append( *failText ); - text->Des().Append( *failedTests ); - - dlg->SetMessageTextL( *text ); - - CleanupStack::PopAndDestroy(); - CleanupStack::PopAndDestroy(); - CleanupStack::PopAndDestroy(); - - if (dlg->RunLD()) - { - - } - } - - -// ---------------------------------------------------------------------------- -// Loads names of the tests that failed. -// ---------------------------------------------------------------------------- -// -HBufC* CDevDiagPluginView::CreateResultsTextsForFailedTestsLC( - const CDevDiagExecResults& aExecResults ) - { - RBuf resultText; - CleanupClosePushL( resultText ); - - resultText.CreateL( KFailedTestsMaxLength ); - - TBool firstLineFeed = ETrue; - - for ( TInt i = 0; i < aExecResults.Count(); ++i ) - { - const CDevDiagExecResults::CResult& result = aExecResults[i]; - - //if item == NULL it is a test suite - const CDiagResultsDatabaseItem* item = result.Result(); - - if (item && !item->WasDependency()) - { - //List failed test cases - if ( item && item->TestResult() == CDiagResultsDatabaseItem::EFailed ) - { - const MDiagPlugin& plugin = result.Plugin(); - - //Note the correct layout. Name is used in the pop-up info pane. - HBufC* name = plugin.GetPluginNameL( MDiagPlugin::ENameLayoutPopupInfoPane ); - CleanupStack::PushL( name ); - - if ( resultText.MaxLength() < resultText.Length() + name->Length() ) - { - HBufC* temp = resultText.AllocLC(); - resultText.ReAlloc( resultText.Length() + KFailedTestsMaxLength ); - resultText.Append( *temp ); - CleanupStack::PopAndDestroy(); - } - - if ( !firstLineFeed ) - { - resultText.Append( KLinefeed ); - } - else - { - firstLineFeed = EFalse; - } - - resultText.Append( *name ); - resultText.Append( KTabfeed ); - - CleanupStack::PopAndDestroy(); - } - } - } - - //contains combined result texts - HBufC* result = resultText.AllocL(); - - CleanupStack::PopAndDestroy(); - - CleanupStack::PushL( result ); - return result; - } - -// End of File