diff -r 8bda91a87a00 -r 8ee96d21d9bf gssettingsuis/Gs/GSCallDivertPlugin/Src/GSCallDivertPlugin.cpp --- a/gssettingsuis/Gs/GSCallDivertPlugin/Src/GSCallDivertPlugin.cpp Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,432 +0,0 @@ -/* -* Copyright (c) 2006-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: Main view handling for Call Divert. -* -*/ - - -// INCLUDE FILES -#include "GSCallDivertPlugin.h" -#include "GSCallDivertPluginContainer.h" -#include "GSCallDivertView.h" -#include "LocalViewId.h" -#include "GSCallDivertModel.h" - -#include -#include -#include // For HlpLauncher -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// LOCAL CONSTANTS -_LIT( KGSCallDivertPluginResourceFileName, "z:GSCallDivertPluginRsc.rsc" ); -_LIT( KGSNameOfClass, "CGSCallDivertPlugin" ); -enum - { - EGSCallDivertPluginPanicNullPtr - }; - -// ========================= MEMBER FUNCTIONS ================================ -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::CGSCallDivertPlugin -// -// C++ constructor. -// --------------------------------------------------------------------------- -CGSCallDivertPlugin::CGSCallDivertPlugin() - { - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::ConstructL -// -// Symbian OS two-phased constructor -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::ConstructL() - { - FeatureManager::InitializeLibL(); - OpenLocalizedResourceFileL( KGSCallDivertPluginResourceFileName, - iResourceLoader ); - - //PS listener initialization - iBtSapListener = CGSPubSubsListener::NewL( - KPSUidBluetoothSapConnectionState, - KBTSapConnectionState, this ); - - SetCSPActiveL( ETrue ); - BaseConstructL( R_CF_MAIN_VIEW ); - - iCallDivertModel = CGSCallDivertModel::NewL(); - CGSCallDivertView* callDivertView = CGSCallDivertView::NewLC( iCallDivertModel ); - iAppUi->AddViewL( callDivertView ); - CleanupStack::Pop( callDivertView ); - iCallDivertView = callDivertView; - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::~CGSCallDivertPlugin -// -// Destructor. -// --------------------------------------------------------------------------- -CGSCallDivertPlugin::~CGSCallDivertPlugin() - { - FeatureManager::UnInitializeLib(); - TRAP_IGNORE( SetCSPActiveL( EFalse ) ); - if ( iBtSapListener ) - { - delete iBtSapListener; - } - - if( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - AppUi()->RemoveView( KCallDivertPluginId ); - delete iContainer; - } - delete iCallDivertModel; - } - - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::NewL() -// -// Symbian OS default constructor -// --------------------------------------------------------------------------- -CGSCallDivertPlugin* CGSCallDivertPlugin::NewL( TAny* /*aInitParams*/ ) - { - CGSCallDivertPlugin* self = new( ELeave ) CGSCallDivertPlugin(); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::NewLC -// -// 1st phase constructor. -// --------------------------------------------------------------------------- -CGSCallDivertPlugin* CGSCallDivertPlugin::NewLC() - { - CGSCallDivertPlugin* self = - new ( ELeave ) CGSCallDivertPlugin; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::NewContainerL -// -// Creates new iContainer. -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::NewContainerL() - { - iContainer = new ( ELeave ) CGSCallDivertPluginContainer; - } - - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::Id -// -// implementation of the frameworks virtual function, closely related with view -// architecture and has little or no relevance here -// --------------------------------------------------------------------------- -TUid CGSCallDivertPlugin::Id() const - { - return KCallDivertPluginId; - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::HandleCommandL -// -// Handles the received commands -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::HandleCommandL( TInt aCommand ) - { - switch ( aCommand ) - { - case EAknSoftkeyBack: - iAppUi->ActivateLocalViewL( KGSTelPluginUid ); - break; - case EGSCmdAppOpen: - case EAknSoftkeyOpen: - HandleListBoxSelectionL(); - break; - case ECFCmdCancelAll: - iCallDivertView->HandleCommandL( ECFCmdCancelAll ); - break; - case EAknCmdHelp: - { - if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - HlpLauncher::LaunchHelpApplicationL( - iEikonEnv->WsSession(), iAppUi->AppHelpContextL() ); - } - break; - } - default: - iAppUi->HandleCommandL( aCommand ); - break; - } - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::HandleListBoxSelectionL -// -// Handles List box selection -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::HandleListBoxSelectionL() - { - // Other components will see updated value each time this funciton is - // called. - iCallDivertModel->SetDivertServiceGroup( Container()->CurrentFeatureId() ); - - switch ( iCallDivertModel->DivertServiceGroup() ) - { - case EGSSettIdVoiceDivert: - case EGSSettIdVideoDivert: - iAppUi->ActivateLocalViewL( KCallDivertViewId ); - break; - default: - break; - } - } - - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::UpdateListBox -// -// Calls Containers UpdateListBoxL method -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::UpdateListBox( TInt aItemId ) - { - if ( Container() ) - { - TRAP_IGNORE( Container()->UpdateListBoxL( aItemId ) ); - } - } - - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::DoActivateL -// -// Activates view -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); - - iContainer->iListBox->SetTopItemIndex( iTopItemIndex ); - - if ( iCurrentItem >= 0 && - iCurrentItem < iContainer->iListBox->Model()->NumberOfItems() ) // magic - { - iContainer->iListBox->SetCurrentItemIndexAndDraw( iCurrentItem ); - } - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::DoDeactivate -// -// Deactivates view -// --------------------------------------------------------------------------- -void CGSCallDivertPlugin::DoDeactivate() - { - CGSBaseView::DoDeactivate(); - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::Container -// -// Returns call container item -// --------------------------------------------------------------------------- -// -CGSCallDivertPluginContainer* CGSCallDivertPlugin::Container() - { - return static_cast ( iContainer ); - } - - -// ========================= From CGSPluginInterface ================== - -// ---------------------------------------------------------------------------- -// CGSCallDivertPlugin::GetCaption -// -// Return application/view caption. -// ---------------------------------------------------------------------------- -// -void CGSCallDivertPlugin::GetCaptionL( TDes& aCaption ) const - { - // the resource file is already opened. - HBufC* result = StringLoader::LoadL( R_GS_CALL_DIVERT_CAPTION ); - - aCaption.Copy( *result ); - delete result; - } - - -// ---------------------------------------------------------------------------- -// CGSCallDivertPlugin::PluginProviderCategory -// -// A means to identify the location of this plug-in in the framework. -// ---------------------------------------------------------------------------- -// -TInt CGSCallDivertPlugin::PluginProviderCategory() const - { - //To identify internal plug-ins. - return KGSPluginProviderInternal; - } - - -// ---------------------------------------------------------------------------- -// CGSCallDivertPlugin::Visible -// -// Provides the visibility status of self to framework. -// ---------------------------------------------------------------------------- -// -TBool CGSCallDivertPlugin::Visible() const - { - TBool result( ETrue ); - TInt value = 0; - iBtSapListener->Get( value ); - if ( value == EBTSapNotConnected || value == EBTSapConnecting ) - { - //Now checking also for CSP support - __ASSERT_ALWAYS( iCSP, User::Panic( KGSNameOfClass, - EGSCallDivertPluginPanicNullPtr ) ); - TInt err = KErrNone; - err = iCSP->IsCFSupported( result ); - //CSP modifies result value even if something goes wrong - //CSP will return KErrNotSupported (-5) in cases when - //it is not possible to read CSP values from SIM card - //Call Barring should be still displayed in this case - if ( err != KErrNone ) - { - result = ETrue; - } - } - else - { - result = EFalse; - } - return result; - } - -// ----------------------------------------------------------------------------- -// CGSCallDivertPlugin::CreateIconL() -// -// -// ----------------------------------------------------------------------------- -// -CGulIcon* CGSCallDivertPlugin::CreateIconL( const TUid aIconType ) - { - //EMbm - CGulIcon* icon; - TParse* fp = new( ELeave ) TParse(); - CleanupStack::PushL( fp ); - fp->Set( KGSCallDivertPluginIconDirAndName, &KDC_BITMAP_DIR, NULL ); - - if( aIconType == KGSIconTypeLbxItem ) - { - icon = AknsUtils::CreateGulIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnPropSetDivSub, - fp->FullName(), - EMbmGscalldivertpluginQgn_prop_set_div_sub, - EMbmGscalldivertpluginQgn_prop_set_div_sub_mask ); - } - else - { - icon = CGSPluginInterface::CreateIconL( aIconType ); - } - - CleanupStack::PopAndDestroy( fp ); - - return icon; - } - -// --------------------------------------------------------------------------- -// CGSCallDivertPlugin::HandleNotifyPSL -// -// Handling PS keys change -// --------------------------------------------------------------------------- -// -void CGSCallDivertPlugin::HandleNotifyPSL( const TUid aUid, const TInt& aKey, - const TRequestStatus& /* aStatus */ ) - { - if ( aUid == KPSUidBluetoothSapConnectionState && - aKey == KBTSapConnectionState ) - { - Visible(); - } - } - -// ---------------------------------------------------------------------------- -// CGSCallDivertPlugin::SetCSPActiveL -// -// Set Customer Service Profile active -// ---------------------------------------------------------------------------- -// -void CGSCallDivertPlugin::SetCSPActiveL( TBool aValue ) - { - if ( aValue ) - { - iCSP = CPsetCustomerServiceProfile::NewL(); - User::LeaveIfError( iCSP->OpenCSProfileL() ); - } - else - { - delete iCSP; - iCSP = NULL; - } - } - - -// ---------------------------------------------------------------------------- -// CGSCallDivertPlugin::DynInitMenuPaneL() -// -// Display the dynamic menu -// ---------------------------------------------------------------------------- -void CGSCallDivertPlugin::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - // show or hide the 'help' menu item when supported - if( aResourceId == R_GS_MENU_ITEM_HELP ) - { - User::LeaveIfNull( aMenuPane ); - - if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); - } - else - { - aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); - } - } - } - -// End of File