diff -r 000000000000 -r 3ce708148e4d devicediagnostics/devdiaggsplugin/src/gsdevdiagplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devicediagnostics/devdiaggsplugin/src/gsdevdiagplugin.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,327 @@ +/* +* Copyright (c) 2007-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: General Settings plug-in that launches an embedded +* application. +* +*/ + + +// INCLUDE FILES +#include "gsdevdiagplugin.h" +#include "gsdevdiagplugin.hrh" + +#include // Icons +#include +#include + +#include +#include +#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS +//const TInt KGSAutodTimeIndex = 0; + +_LIT( KGSDDPluginResourceFileName, "z:GSDevDiagPluginRsc.rsc" ); + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS ============================== + +// ========================= MEMBER FUNCTIONS ================================ + +// ---------------------------------------------------------------------------- +// CGSDevDiagPlugin::CGSDevDiagPlugin() +// +// Constructor +// ---------------------------------------------------------------------------- +// +CGSDevDiagPlugin::CGSDevDiagPlugin(): iResourceLoader( *iCoeEnv ), + iNullService(NULL) + { + } + + +// --------------------------------------------------------------------------- +// CGSDevDiagPlugin::NewL() +// +// Symbian OS default constructor +// --------------------------------------------------------------------------- +CGSDevDiagPlugin* CGSDevDiagPlugin::NewL( TAny* /*aInitParams*/ ) + { + CGSDevDiagPlugin* self = new( ELeave ) CGSDevDiagPlugin (); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// CGSDevDiagPlugin::ConstructL() +// +// Symbian OS two-phased constructor +// --------------------------------------------------------------------------- +void CGSDevDiagPlugin::ConstructL() + { + OpenLocalizedResourceFileL( KGSDDPluginResourceFileName, iResourceLoader); + } + + +// ---------------------------------------------------------------------------- +// CGSDevDiagPlugin::~CGSDevDiagPlugin +// +// Destructor +// ---------------------------------------------------------------------------- +CGSDevDiagPlugin::~CGSDevDiagPlugin() + { + iResourceLoader.Close(); + + if ( iNullService ) + { + delete iNullService; + } + } + + +// --------------------------------------------------------------------------- +// TUid CGSDevDiagPlugin::Id() +// +// Returns view's ID. +// --------------------------------------------------------------------------- +TUid CGSDevDiagPlugin::Id() const + { + return KGSDDPluginUid; + } + +// ---------------------------------------------------------------------------- +// CGSDevDiagPlugin::GetCaption +// +// Return application/view caption. +// ---------------------------------------------------------------------------- +// +void CGSDevDiagPlugin::GetCaptionL( TDes& aCaption ) const + { + // the resource file is already opened. + HBufC* result = StringLoader::LoadL( R_GS_DIAGNOSTICS_VIEW_CAPTION ); + + aCaption.Copy( *result ); + delete result; + } + + +// ---------------------------------------------------------------------------- +// CGSDevDiagPlugin::PluginProviderCategory +// +// A means to identify the location of this plug-in in the framework. +// ---------------------------------------------------------------------------- +// +TInt CGSDevDiagPlugin::PluginProviderCategory() const + { + //To identify internal plug-ins. + return KGSPluginProviderInternal; + } + + +// ----------------------------------------------------------------------------- +// CGSDevDiagPlugin::ItemType (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +TGSListboxItemTypes CGSDevDiagPlugin::ItemType() + { + return EGSItemTypeSettingDialog; + } + + +// ----------------------------------------------------------------------------- +// CGSDevDiagPlugin::GetValue (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +void CGSDevDiagPlugin::GetValue( const TGSPluginValueKeys /*aKey*/, + TDes& /*aValue*/ ) + { + } +// --------------------------------------------------------------------------- +// CAuthtypePlugin::CreateIconL +// --------------------------------------------------------------------------- +// +CGulIcon* CGSDevDiagPlugin::CreateIconL( const TUid aIconType ) + { + + //EMbm + CGulIcon* icon; + TParse* fp = new( ELeave ) TParse(); + CleanupStack::PushL( fp ); + fp->Set( KGSDDPluginIconDirAndName, &KDC_BITMAP_DIR, NULL ); + + if ( aIconType == KGSIconTypeLbxItem ) + { + icon = AknsUtils::CreateGulIconL( + AknsUtils::SkinInstance(), + KAknsIIDDefault, + fp->FullName(), + EMbmGsdevdiagpluginQgn_prop_set_conn_data, + EMbmGsdevdiagpluginQgn_prop_set_conn_data_mask ); + } + else + { + icon = CGSPluginInterface::CreateIconL( aIconType ); + } + + CleanupStack::PopAndDestroy( fp ); + return icon; + + } + +// ---------------------------------------------------------------------------- +// CGSDevDiagPlugin::DoActivateL +// +// Do nothing. See HandleSelection. +// ---------------------------------------------------------------------------- +// +void CGSDevDiagPlugin::DoActivateL( const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + } + +// ---------------------------------------------------------------------------- +// CGSDevDiagPlugin::DoDeactivate +// +// Do nothing. See HandleSelection. +// ---------------------------------------------------------------------------- +// +void CGSDevDiagPlugin::DoDeactivate() + { + } + + +// ---------------------------------------------------------------------------- +// Opens the resource file, because it is not loaded automatically by the +// GS framework. +// ---------------------------------------------------------------------------- +// +void CGSDevDiagPlugin::OpenLocalizedResourceFileL( + const TDesC& aResourceFileName, + RConeResourceLoader& aResourceLoader ) + { + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + + // Find the resource file: + TParse parse; + parse.Set( aResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + TFileName fileName( parse.FullName() ); + + // Get language of resource file: + BaflUtils::NearestLanguageFile( fsSession, fileName ); + + // Open resource file: + aResourceLoader.OpenL( fileName ); + + // If leave occurs before this, close is called automatically when the + // thread exits. + fsSession.Close(); + } + + + // ----------------------------------------------------------------------------- + // GS calls this function when plug-in is opened. + // + // ----------------------------------------------------------------------------- + // +void CGSDevDiagPlugin::HandleSelection( + const TGSSelectionTypes /*aSelectionType*/ ) + { + TRAP_IGNORE( LaunchDiagnosticsAppL() ); + } + + + // ----------------------------------------------------------------------------- + // CGSDevDiagPlugin::LaunchDiagnosticsAppL + // + // Checks first is the application already running. + // ----------------------------------------------------------------------------- + // +void CGSDevDiagPlugin::LaunchDiagnosticsAppL() + { + // Get the correct application data + RWsSession ws; + User::LeaveIfError(ws.Connect()); + CleanupClosePushL(ws); + + // Find the task with uid + TApaTaskList taskList(ws); + TApaTask task = taskList.FindApp( KGsDiagnosticsAppUid ); + + if ( task.Exists() ) + { + task.BringToForeground(); + } + else + { + //Launch Diagnostics application as embedded + TAppInfo app( KGsDiagnosticsAppUid, KGSDiagnosticsApp ); + EmbedAppL( app ); + } + CleanupStack::PopAndDestroy(&ws); + } + + + // ----------------------------------------------------------------------------- + // Handle Diagnostics application exit. GS should be closed down also. + // + // ----------------------------------------------------------------------------- + // +void CGSDevDiagPlugin::HandleServerAppExit(TInt aReason ) + { + if ( aReason != EAknSoftkeyBack ) + { + TRAP_IGNORE(AppUi()->HandleCommandL( EAknSoftkeyExit )); + } + } + + + // ----------------------------------------------------------------------------- + // Use null service to launch the embedded application + // + // ----------------------------------------------------------------------------- + // +void CGSDevDiagPlugin::EmbedAppL( const TAppInfo& aApp ) + { + if ( iNullService ) + { + delete iNullService; + iNullService = NULL; + } + + iNullService = CAknNullService::NewL( aApp.iUid, this ); + } + + +// End of File