diff -r f742655b05bf -r d38647835c2e commsconfig/cscgsplugin/src/cscgsplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsconfig/cscgsplugin/src/cscgsplugin.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,280 @@ +/* +* Copyright (c) 2008-2008 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: cscgsplugin implementation. +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cscgsplugin.h" + +const TUid KCscGsPluginImplUid = { 0x1020E568 }; // dll impl uid +const TUid KCscAppUid = { 0x10275458 }; // from cscappui.mmp + +_LIT( KCscApp, "z:\\sys\\bin\\csc.exe" ); +_LIT( KCscGsPluginResourceFileName, "cscgspluginrsc.rsc" ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCscGsPlugin::CCscGsPlugin() + : iResources( *iCoeEnv ), iNullService(NULL) + { + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCscGsPlugin::~CCscGsPlugin() + { + FeatureManager::UnInitializeLib(); + iResources.Close(); + delete iNullService; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::ConstructL() + { + FeatureManager::InitializeLibL(); + OpenLocalizedResourceFileL( KCscGsPluginResourceFileName, iResources ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCscGsPlugin* CCscGsPlugin::NewL( TAny* /*aInitParams*/ ) + { + CCscGsPlugin* self = new ( ELeave ) CCscGsPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// CCscGsPlugin::Id() +// --------------------------------------------------------------------------- +// +TUid CCscGsPlugin::Id() const + { + return KCscGsPluginImplUid; + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// CCscGsPlugin::DoActivateL() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::DoActivateL( + const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// CCscGsPlugin::DoDeactivate() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::DoDeactivate() + { + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::GetCaptionL() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::GetCaptionL( TDes& aCaption ) const + { + HBufC* result = StringLoader::LoadL( R_CSCGSPLUGIN_CAPTION ); + + if ( result->Des().Length() < aCaption.MaxLength() ) + { + aCaption.Copy( *result ); + } + else + { + aCaption = KNullDesC; + } + + delete result; + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::PluginProviderCategory() +// --------------------------------------------------------------------------- +// +TInt CCscGsPlugin::PluginProviderCategory() const + { + return KGSPluginProviderInternal; + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::ItemType() +// --------------------------------------------------------------------------- +// +TGSListboxItemTypes CCscGsPlugin::ItemType() + { + return EGSItemTypeSettingDialog; + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::GetValue() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::GetValue( + const TGSPluginValueKeys /*aKey*/, + TDes& /*aValue*/ ) + { + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::HandleSelection() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::HandleSelection( + const TGSSelectionTypes /*aSelectionType*/ ) + { + TRAP_IGNORE( LaunchCscAppL() ); + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::CreateIconL() +// --------------------------------------------------------------------------- +// +CGulIcon* CCscGsPlugin::CreateIconL( const TUid /*aIconType*/ ) + { + return NULL; + } + +// --------------------------------------------------------------------------- +// From class CGSPluginInterface. +// CCscGsPlugin::Visible() +// --------------------------------------------------------------------------- +// +TBool CCscGsPlugin::Visible() const + { + TBool visible( ETrue ); + TBool voipSupported( EFalse ); + + // Im should be also checked from feature manager + TBool imSupported( EFalse ); + + voipSupported = FeatureManager::FeatureSupported( + KFeatureIdCommonVoip ); + + // If both voip and im are not supported --> set plugin not visible + if ( !voipSupported && !imSupported ) + { + visible = EFalse; + } + + return visible; + } + +// --------------------------------------------------------------------------- +// CCscGsPlugin::OpenLocalizedResourceFile() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::OpenLocalizedResourceFileL( + const TDesC& aResourceFileName, + RConeResourceLoader& aResourceLoader ) + { + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + CleanupClosePushL(fsSession); + + // 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 ); + + CleanupStack::PopAndDestroy(&fsSession); + } + + +// --------------------------------------------------------------------------- +// CCscGsPlugin::LaunchCscAppL() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::LaunchCscAppL() + { + // Get the correct application data + RWsSession ws; + CleanupClosePushL( ws ); + User::LeaveIfError( ws.Connect() ); + + // Find the task with uid + TApaTaskList taskList( ws ); + TApaTask task = taskList.FindApp( KCscAppUid ); + + if ( task.Exists() ) + { + //Bring CSC to foreground. + task.BringToForeground(); + } + else + { + //Launch csc application + TAppInfo app( KCscAppUid, KCscApp ); + iEmbedded = NULL; + EmbedAppL( app ); + } + CleanupStack::PopAndDestroy( &ws ); + } + + +// --------------------------------------------------------------------------- +// CCscGsPlugin::EmbedAppL() +// --------------------------------------------------------------------------- +// +void CCscGsPlugin::EmbedAppL( const TAppInfo& aApp ) + { + // Launch settings app + if ( iNullService ) + { + delete iNullService; + iNullService = NULL; + } + iNullService = CAknNullService::NewL( aApp.iUid, this ); + } + +