cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugin.cpp
changeset 23 7ec726f93df1
parent 20 9c97ad6591ae
child 25 d840bfde7d40
child 27 489cf6208544
--- a/cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugin.cpp	Mon May 03 12:53:07 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,675 +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: Cpp file for Connectivity Settings plugin.
-*
-*/
-
-
-// Includes
-#include <featmgr.h>
-#include "gsconnsettingsplugin.h"
-#include "gsconnsettingsplugin.hrh"
-#include "gsconnsettingspluginmodel.h"
-#include "gsconnsettingsplugincontainer.h"
-#include "gsconnsettingsselectiondlg.h"
-
-#include <gsconnsettingspluginrsc.rsg>
-#include <gsconnsettingsplugin.mbg>
-
-// Includes from GS framework:
-#include <gscommon.hrh>
-#include <gsfwviewuids.h>
-#include <gsprivatepluginproviderids.h>
-#include <gstabhelper.h>
-#include <gsmainview.h>
-
-#include <hlplch.h> // For HlpLauncher
-#include <featmgr.h>
-#include <csxhelp/cp.hlp.hrh>
-
-#include <gulicon.h>
-#include <AknsUtils.h>
-#include <aknViewAppUi.h>
-#include <aknradiobuttonsettingpage.h>
-#include <AknQueryDialog.h>
-#include <ConeResLoader.h>
-#include <barsread.h> // For TResourceReader
-#include <StringLoader.h>
-
-// Constants
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::CConnectivitySettingsPlugin()
-// Constructor
-// ---------------------------------------------------------------------------
-//
-CGSConnSettingsPlugin::CGSConnSettingsPlugin()
-    : iResourceLoader( *iCoeEnv )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::~CConnectivitySettingsPlugin()
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CGSConnSettingsPlugin::~CGSConnSettingsPlugin()
-    {
-    iResourceLoader.Close();
-    
-    
-    // Delete plugin loader
-    if ( iPluginLoader )
-        {
-        delete iPluginLoader;
-        }
-
-    // Delete possible plugins
-    if ( iPluginArray )
-        {
-        // Since the plugins are actually avkon views, avkon is responsible
-        // for owning the plugins. This means we do not reset and destroy
-        // the contents of the array in which the plugins reside. We have to
-        // leave it up to avkon to tidy up.
-        delete iPluginArray;
-        }      
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::NewL()
-// First phase constructor
-// ---------------------------------------------------------------------------
-//
-CGSConnSettingsPlugin* CGSConnSettingsPlugin::NewL( TAny* /*aInitParams*/ )
-    {
-    CGSConnSettingsPlugin* self = new(ELeave) CGSConnSettingsPlugin();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::ConstructL()
-// Second phase constructor
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::ConstructL()
-    {
-    // Initialize FeatureManager
-    FeatureManager::InitializeLibL();
-    iIsWlanSupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
-    // Unload FeatureManager
-    FeatureManager::UnInitializeLib();
-    
-    OpenLocalizedResourceFileL( KGSConnSettingsPluginResourceFileName,
-                                iResourceLoader ); 
-    BaseConstructL( R_GS_CONN_SETTINGS_PLUGIN_VIEW );
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::Id()
-// ---------------------------------------------------------------------------
-//
-TUid CGSConnSettingsPlugin::Id() const
-    {
-    return KGSConnSettingsPluginUid;
-    }
-
-
-
-// ----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::NewContainerL()
-// Creates new iContainer.
-//
-// ----------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::NewContainerL()
-    {
-    iContainer = new( ELeave ) CGSConnSettingsPluginContainer( *this );
-    
-    //Check if ECOM plugins are already loaded
-    if ( iPluginArray == NULL )
-        {
-        //Load plugins here after container is constructed. This saves memory when Connectivity Settings view
-        //is not visible(object from CGSConnSettingsPlugin is constructed already in Connectivity view by GS and
-        //container class only when the plugin is actually accessed) 
-
-        iPluginArray = new  ( ELeave ) CArrayPtrFlat<CGSPluginInterface>( KGConnSettingsPluginCount );
-        iPluginLoader = CGSPluginLoader::NewL( iAppUi );
-        iPluginLoader->SetObserver( this );
-        iPluginLoader->LoadAsyncL( KGSPluginInterfaceUid, Id(), iPluginArray ); 
-        }
-    
-    Container()->SetPluginArray( iPluginArray );
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::DoActivateL()
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::DoActivateL( const TVwsViewId& aPrevViewId,
-                                    TUid aCustomMessageId,
-                                    const TDesC8& aCustomMessage )
-    {
-    CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
-
-    // Add support for external view activation    
-    if ( iPrevViewId.iAppUid != KUidGS || iPrevViewId.iViewUid == TUid::Uid(0x0DEADBED) )
-      {
-      CEikButtonGroupContainer* cbaGroup = Cba();
-      if(cbaGroup)
-        {
-        HBufC* rightSKText = StringLoader::LoadLC (R_GS_CONN_SETTINGS_RSK_LABEL_EXIT);
-        TPtr rskPtr = rightSKText->Des();
-        cbaGroup->SetCommandL(2,EAknSoftkeyExit,*rightSKText);
-        CleanupStack::PopAndDestroy(rightSKText);
-        }
-      }    
-    iModel = Container()->Model();
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::DoDeactivate()
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::DoDeactivate()
-    {
-    CGSBaseView::DoDeactivate();
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin:: HandleForegroundEventL
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::HandleForegroundEventL( TBool aForeground )
-    {
-    //Load saved settings from Connection Settings API
-    //If function leaves it is trapped and ignored as there is nothing that we can do about it
-    if ( iModel && aForeground )
-        {
-        TRAP_IGNORE( iModel->LoadSettingsL() );
-        UpdateListBoxL( EGSSettIdDataUsageHomeNw );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::HandleCommandL
-//
-// Handles menu commands directed to this class.
-// ----------------------------------------------------------------------------
-void CGSConnSettingsPlugin::HandleCommandL( TInt aCommand )
-    {
-    switch ( aCommand )
-        {
-        case EGSConnSettMenuOpen:
-        case EGSConnSettMenuChange:
-        case EGSConnSettMskGeneral:
-            HandleListBoxSelectionL();
-            break;
-            
-        case EAknSoftkeyBack:
-            iAppUi->ActivateLocalViewL( KGSConPluginUid );
-            break;
-            
-        case EAknCmdHelp:
-            {
-            if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
-                {
-                HlpLauncher::LaunchHelpApplicationL(
-                    iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
-                }
-            break;
-            }
-        default:
-            iAppUi->HandleCommandL( aCommand );
-            break;
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CGSSensorPlugin::DynInitMenuPaneL
-// -----------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
-    {
-    // Check resource
-    if ( R_GS_CONN_SETTINGS_MENU_ITEM_OPEN == aResourceId )
-        {
-        // First, resolve current item in listbox
-        const TInt currentItem = Container()->CurrentFeatureId();
-
-        switch (currentItem)
-            {
-            case EGSSettIdUsageOfWlan:
-            case EGSSettIdDataUsageAbroad:
-            case EGSSettIdDataUsageHomeNw:
-                // Hide menu item 'Open'
-                aMenuPane->SetItemDimmed( EGSConnSettMenuOpen, ETrue );
-                aMenuPane->SetItemDimmed( EGSConnSettMenuChange, EFalse );
-            break;
-            
-            default:
-                {
-                // Hide menu item 'Change' if current item is ECOM plugin
-                aMenuPane->SetItemDimmed( EGSConnSettMenuOpen, EFalse );
-                aMenuPane->SetItemDimmed( EGSConnSettMenuChange, ETrue );
-                break;
-                }
-            }
-        }
-    // Forward to base class
-    CGSBaseView::DynInitMenuPaneL( aResourceId, aMenuPane );
-    }
-
-
-// ----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::HandleListBoxSelectionL()
-//
-// Handles events raised through a rocker key
-// ----------------------------------------------------------------------------
-void CGSConnSettingsPlugin::HandleListBoxSelectionL()
-    {
-    const TInt currentFeatureId = Container()->CurrentFeatureId();
-        
-    switch ( currentFeatureId )
-        {
-        case EGSSettIdUsageOfWlan:
-            ShowUsageOfWlanSettingPageL();
-            break;
-            
-        case EGSSettIdDataUsageAbroad:
-            ShowDataUsageAbroadSettingPageL();
-            break;
-            
-        case EGSSettIdDataUsageHomeNw:
-            ShowDataUsageInHomeNwSettingPageL();
-            break;
-            
-        default:
-            {
-            //Feature ID didn't match, try plugins
-            CGSPluginInterface* selectedPlugin( Container()->SelectedPluginL() );
-
-            switch( selectedPlugin->ItemType() )
-                {
-                // In these cases the plugin is a view:
-                case EGSItemTypeSingleLarge:
-                case EGSItemTypeSetting:
-                case EGSItemTypeSettingIcon:
-                    {
-                    CleanupStack::PushL( selectedPlugin );
-                    iAppUi->ActivateLocalViewL( selectedPlugin->Id() );
-                    CleanupStack::Pop( selectedPlugin );
-                    break;
-                    }
-                    
-                // In these cases the plugin is a dialog:
-                case EGSItemTypeSettingDialog:
-                case EGSItemTypeSingleLargeDialog:
-                     selectedPlugin->HandleSelection( EGSSelectionByMenu );
-                     break;
-                default:
-                    break;
-                }
-            break;
-            }        
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::UpdateListBoxL
-//
-//
-// ----------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::UpdateListBoxL( TInt aItemId )
-    {
-    if( Container() )
-        {
-        Container()->UpdateListBoxL( aItemId );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::Container
-//
-// Return handle to container class.
-// ----------------------------------------------------------------------------
-//
-CGSConnSettingsPluginContainer* CGSConnSettingsPlugin::Container()
-    {
-    return static_cast<CGSConnSettingsPluginContainer*>( iContainer );
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::UpperLevelViewUid()
-//
-//
-// ---------------------------------------------------------------------------
-//
-TUid CGSConnSettingsPlugin::UpperLevelViewUid()
-    {
-    return KGSConPluginUid;
-    }
-
-// -----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::GetHelpContext()
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::GetHelpContext( TCoeHelpContext& aContext )
-    {
-    aContext.iMajor = KUidGS;
-    aContext.iContext = KCP_HLP_ADMINISTRATIVE_SETTINGS;
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::GetCaptionL()
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::GetCaptionL( TDes& aCaption ) const
-    {
-    // The resource file is already opened by iResourceLoader.
-    HBufC* result = StringLoader::LoadL( R_GS_CONN_SETTINGS_VIEW_CAPTION );
-    aCaption.Copy( *result );
-    delete result;
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::CreateIconL
-//
-// Return the icon, if has one.
-// ---------------------------------------------------------------------------
-//
-CGulIcon* CGSConnSettingsPlugin::CreateIconL( const TUid aIconType )
-    {
-
-    //EMbm<Mbm_file_name><Bitmap_name>
-    CGulIcon* icon;
-    TParse* fp = new( ELeave ) TParse();
-    CleanupStack::PushL( fp );
-    fp->Set( KGSConnSettingsPluginIconDirAndName, &KDC_BITMAP_DIR, NULL );
-
-    if( aIconType == KGSIconTypeLbxItem )
-        {
-        icon = AknsUtils::CreateGulIconL(
-        AknsUtils::SkinInstance(),
-        KAknsIIDQgnPropCpConnAdmin,
-        fp->FullName(),
-// Let's use Connectivity plugin icon until we get graphics
-// for Connectivity Settings plugin icon
-//      EMbmGsconnsettingspluginQgn_prop_cp_conn_settings,
-//      EMbmGsconnsettingspluginQgn_prop_cp_conn_settings_mask );
-        EMbmGsconnsettingspluginQgn_prop_cp_conn, //from generated \epoc32\include\gsconnsettingsplugin.mbg
-        EMbmGsconnsettingspluginQgn_prop_cp_conn_mask ); //from generated \epoc32\include\gsconnsettingsplugin.mbg
-        }
-       else
-           {
-           icon = CGSPluginInterface::CreateIconL( aIconType );
-           }
-    CleanupStack::PopAndDestroy( fp );
-    return icon;
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::PluginProviderCategory()
-//
-//
-// ---------------------------------------------------------------------------
-//
-TInt CGSConnSettingsPlugin::PluginProviderCategory() const
-    {
-    return KGSPluginProviderInternal;
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::ShowUsageOfNewWlanSettingPageL()
-//
-// 
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::ShowUsageOfWlanSettingPageL()
-    {
-    TBool currentItem = (TBool)iModel->UsageOfWlan();
-    iModel->SetUsageOfWlan( !currentItem );
-    UpdateListBoxL( EGSSettIdUsageOfWlan );
-    //Save current settings when the setting is changed
-    //If function leaves it is trapped and ignored as there is nothing that we can do about it
-    TRAP_IGNORE(iModel->SaveSettingsL());
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::ShowDataUsageAbroadSettingPageL()
-//
-// 
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::ShowDataUsageAbroadSettingPageL()
-    {
-    CDesCArrayFlat* items;
-    
-    if ( iIsWlanSupported )
-        {
-        items = iCoeEnv->ReadDesC16ArrayResourceL(
-                R_DATA_USAGE_ABROAD_SETTING_PAGE_LBX );
-        }
-    else
-        {
-        items = iCoeEnv->ReadDesC16ArrayResourceL(
-                R_DATA_USAGE_ABROAD_SETTING_PAGE_LBX_NOWLAN );        
-        }
-    
-    CleanupStack::PushL( items );
-
-    TInt currentItem = iModel->DataUsageAbroad();
-    
-    // We may have to do in this way because EDataUsageAbroadDisabled is equal to 3
-    // and the actual index number should be 2 in this case
-    if( !iIsWlanSupported && currentItem == EDataUsageAbroadDisabled )
-        {
-        currentItem --;
-        }
-    
-    TInt oldItem = currentItem;
-
-    CAknSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage(
-            R_DATA_USAGE_ABROAD_SETTING_PAGE, currentItem, items );
-
-    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
-        {
-
-        if( currentItem != oldItem )
-            {
-            iModel->SetDataUsageAbroad( currentItem );
-            UpdateListBoxL( EGSSettIdDataUsageAbroad );
-            //Save current settings when the setting is changed
-            //If function leaves it is trapped and ignored as there is nothing that we can do about it
-            TRAP_IGNORE(iModel->SaveSettingsL());
-            }
-        }
-    CleanupStack::PopAndDestroy( items );
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::ShowDataUsageInHomeNwSettingPageL()
-//
-// 
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::ShowDataUsageInHomeNwSettingPageL()
-    {
-    CDesCArrayFlat* items;
-    
-    if ( iIsWlanSupported )
-        {
-        items = iCoeEnv->ReadDesC16ArrayResourceL(
-            R_DATA_USAGE_HOME_NW_SETTING_PAGE_LBX );
-        }
-    else
-        {
-        items = iCoeEnv->ReadDesC16ArrayResourceL(
-            R_DATA_USAGE_HOME_NW_SETTING_PAGE_LBX_NOWLAN );        
-        }
-    
-    CleanupStack::PushL( items );
-
-    TInt currentItem = iModel->DataUsageInHomeNw();
-    
-    // We may have to do in this way because EDataUsageAbroadDisabled is equal to 3
-    // and the actual index number should be 2 in this case
-    if( !iIsWlanSupported && currentItem == EDataUsageAbroadDisabled )
-        {
-        currentItem --;
-        }
-    
-    TInt oldItem = currentItem;
-
-    CAknSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage(
-            R_DATA_USAGE_HOME_NW_SETTING_PAGE, currentItem, items );
-
-    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
-        {
-
-        if( currentItem != oldItem )
-            {
-            iModel->SetDataUsageInHomeNw( currentItem );
-            UpdateListBoxL(  EGSSettIdDataUsageHomeNw );
-            //Save current settings when the setting is changed
-            //If function leaves it is trapped and ignored as there is nothing that we can do about it
-            TRAP_IGNORE(iModel->SaveSettingsL());
-            }
-        }
-    CleanupStack::PopAndDestroy( items );
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::CheckMiddleSoftkeyLabelL
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::CheckMiddleSoftkeyLabelL() 
-    {
-    //Resolve current item
-    const TInt currentItem = Container()->CurrentFeatureId();
-
-    //remove current middle soft key label
-    RemoveCommandFromMSK();
-
-    switch (currentItem)
-        {
-        case EGSSettIdUsageOfWlan:
-        case EGSSettIdDataUsageAbroad:
-        case EGSSettIdDataUsageHomeNw:
-            //Set middle soft key label to "Change"
-            SetMiddleSoftKeyLabelL( R_GS_CONN_SETTINGS_MSK_LABEL_CHANGE, EGSConnSettMskGeneral );
-        break;
-        
-        default:
-            {
-            //If current item is ECOM plugin set middle soft key label to "Open"
-            SetMiddleSoftKeyLabelL( R_GS_CONN_SETTINGS_MSK_LABEL_OPEN, EGSConnSettMskGeneral );
-            break;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::HandleListBoxEventL
-//
-// -----------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::HandleListBoxEventL( CEikListBox* /*aListBox*/,
-                                                TListBoxEvent aEventType )
-    {
-    switch ( aEventType )
-        {
-        case EEventEnterKeyPressed:
-        case EEventItemSingleClicked:
-            HandleListBoxSelectionL();
-            break;
-        default:
-           break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CGSConnSettingsPlugin::RemoveCommandFromMSK
-//
-// -----------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::RemoveCommandFromMSK()
-    {
-    CEikButtonGroupContainer* cbaGroup = Cba();
-    if ( cbaGroup )
-        {
-        // Remove command from stack
-        cbaGroup->RemoveCommandFromStack( KGSConnSettingsMSKControlID, EGSConnSettMskGeneral );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::SetMiddleSoftKeyLabelL 
-// Sets middle softkey label.
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::SetMiddleSoftKeyLabelL( 
-    const TInt aResourceId, const TInt aCommandId )
-    {
-    CEikButtonGroupContainer* cbaGroup = Cba();
-    if ( cbaGroup )
-        {
-        HBufC* middleSKText = StringLoader::LoadLC( aResourceId );
-        TPtr mskPtr = middleSKText->Des();
-        cbaGroup->AddCommandToStackL( 
-                KGSConnSettingsMSKControlID, 
-            aCommandId, 
-            mskPtr );
-        CleanupStack::Pop( middleSKText );
-        delete middleSKText;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CGSConnSettingsPlugin::HandlePluginLoaded
-// Called by GSPluginLoader when plugins are loaded or error occured during that
-// ---------------------------------------------------------------------------
-//
-void CGSConnSettingsPlugin::HandlePluginLoaded( KGSPluginLoaderStatus aStatus )
-    {
-    if ( iContainer && MGSPluginLoadObserver::EGSFinished == aStatus )
-        {
-        #ifdef __DEBUG
-        TRAPD( ignore, Container()->UpdateListBoxL( EGSExtPluginsListItemId ); );
-        TRACE_1( "[GSSensorPlugin] CGSSensorPlugin::HandlePluginLoaded() - Error: %i", ignore );
-        #else
-        TRAP_IGNORE( Container()->UpdateListBoxL( EGSExtPluginsListItemId ); );
-        #endif // __DEBUG
-        }
-    }
-
-// End of File