diff -r 051d34a3f367 -r 2c9d3aa5bea2 gssettingsuis/Gs/GSNetworkPlugin/Src/GSNetworkPluginContainer.cpp --- a/gssettingsuis/Gs/GSNetworkPlugin/Src/GSNetworkPluginContainer.cpp Mon Jan 18 20:31:08 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,604 +0,0 @@ -/* -* Copyright (c) 2003 - 2006 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: Container for Network folder in GSTelPlugin. -* -*/ - - -// INCLUDE FILES -#include "GSNetworkPluginModel.h" //for CGSModel -#include "gssettingid.h" //for view IDs -#include "GSNetworkPluginContainer.h" //for CGSNetworkPluginContainer -#include "GsLogger.h" - - -#include //for CAknSettingStyleListBox -#include //for AknErrorNote -#include //for iAvkonAppUi -#include //for StringLoader -#include //for resource IDs -#include //for CPsetContainer -#include //for CPsetNetwork -#include //for listbox classes -#include -#include // for KUidGS -#include //for network mode values -#include //for GSM-specific error messages -#include //Feature Manager -#include -#include "GSNetworkDebugHelper.h" - -#ifndef RD_STARTUP_CHANGE - #include //Startup reasons -#else - #include // Startup reasons -#endif // RD_STARTUP_CHANGE - - -// LOCAL CONSTANTS -_LIT( KNameOfClass, "CGSNetworkPluginContainer" ); - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------------------------- -// C++ Constructor. Needed for initializing iPlugin. -// --------------------------------------------------------------------------- -CGSNetworkPluginContainer::CGSNetworkPluginContainer( CGSNetworkPlugin* aPlugin ) - :iPlugin( aPlugin ) - { - } - -// --------------------------------------------------------------------------- -// -// Symbian OS two phased constructor with pointer to Network object -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::ConstructL( const TRect& aRect ) - { - iListBox = new ( ELeave ) CAknSettingStyleListBox; - - //model construction - iModel = CGSNetworkPluginModel::NewL( this, iPlugin ); - - BaseConstructL( aRect, - R_GS_NET_VIEW_TITLE, - R_NET_LBX ); - } - -// --------------------------------------------------------------------------- -// -// Destructor -// -// --------------------------------------------------------------------------- -CGSNetworkPluginContainer::~CGSNetworkPluginContainer() - { - if ( iListboxItemArray ) - { - delete iListboxItemArray; - iListboxItemArray = NULL; - } - - if( iModel ) - { - delete iModel; - iModel = NULL; - } - } - -// --------------------------------------------------------------------------- -// -// Creates list box -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::ConstructListBoxL( TInt aResLbxId ) - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::ConstructListBoxL"); - iListBox->ConstructL( this, EAknListBoxSelectionList ); - iListboxItemArray = CGSListBoxItemTextArray::NewL( aResLbxId, - *iListBox, *iCoeEnv ); - iListBox->Model()->SetItemTextArray( iListboxItemArray ); - iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); - - CreateListBoxItemsL(); - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::ConstructListBoxL"); - } - -// --------------------------------------------------------------------------- -// -// Creates list box items -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::CreateListBoxItemsL() - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::CreateListBoxItemsL"); -// do not get check CSP if not using WINS -#ifndef __WINS__ - //Set CSP on, if it is not already - if ( !iModel->GetCSPStatus() ) - { - iModel->SetCSPActiveL( ETrue ); - } -#endif - - if ( FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ) ) - { - if ( iModel->IsNetworkModeVisible() ) - { - MakeNwModeUiItemL(); - } - } - - MakeNwItemL(); - MakeMcnItemL(); - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::CreateListBoxItemsL"); - } - -// --------------------------------------------------------------------------- -// -// Updates changed list box item -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::UpdateListBoxL( TInt aFeatureId, TInt aValue ) - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::UpdateListBoxL"); - switch ( aFeatureId ) - { - case EGSNetworkModeItemId: - if ( FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ) ) - { - if ( iModel->IsNetworkModeVisible() ) - { - MakeNwModeUiItemL(); - } - } - break; - case EGSNetworkModeSelectionItemId: - MakeNwItemL( aValue ); - break; - case EGSMCNItemId: - MakeMcnItemL(); - break; - default: - Panic( KNameOfClass, EInvalidIndex ); - break; - } - iListBox->HandleItemAdditionL(); - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::UpdateListBoxL"); - } - -// --------------------------------------------------------------------------- -// -// Creates new Network list box item -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::MakeNwItemL( TInt aValue ) - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::MakeNwItemL"); - HBufC* dynamicText = NULL; - TInt currentValue = KErrNone; - - if ( aValue != KErrNotFound ) - { - currentValue = aValue; - } - else - { - //use bogus values for WINS to avoid jamming the emulator -#ifdef __WINS__ - currentValue = EGSManualSelectMode; -#else - currentValue = GetSelectionMode(); -#endif // __WINS__ - } - - TUint32 resourceId = R_NETSL_NETSELECTMODE_LBX; - TInt featureId = EGSAutomaticSelectMode; - - if ( currentValue == EGSManualSelectMode ) - { - featureId = EGSManualSelectMode; - } - - dynamicText = CGSItemTextArray::GetItemCaptionFromFeatureIdLC( - resourceId, - featureId, - *iCoeEnv ); - -#ifndef __WINS__ - //Create network mode setting item - if ( iModel->IsSettingSupported( EGSCSPManualNetworkSelection ) ) - { -#endif - // Finally, set the dynamic text - iListboxItemArray->SetDynamicTextL( EGSNetworkModeSelectionItemId, - *dynamicText ); - - // And add to listbox - iListboxItemArray->SetItemVisibilityL( EGSNetworkModeSelectionItemId, - CGSListBoxItemTextArray::EVisible ); - -#ifndef __WINS__ - } -#endif - - CleanupStack::PopAndDestroy( dynamicText ); - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::MakeNwItemL"); - } - -// --------------------------------------------------------------------------- -// -// Gets the currently active selection mode. -// -// --------------------------------------------------------------------------- -TInt CGSNetworkPluginContainer::GetSelectionMode() - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::GetSelectionMode"); - MPsetNetworkSelect::TSelectMode mode = - iModel->GetNetworkSelectionMode(); - - if ( mode == MPsetNetworkSelect::ENetSelectModeManual ) - { - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::GetSelectionMode"); - return EGSManualSelectMode; - } - else - { - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::GetSelectionMode"); - return EGSAutomaticSelectMode; - } - } - -// --------------------------------------------------------------------------- -// -// Creates new MCN list box item -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::MakeMcnItemL() - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::MakeMcnItemL"); - HBufC* dynamicText = NULL; - TInt readValue = 0; - - GetMcnValue( readValue ); - TUint32 resourceId = R_MCN_CELL_INFO_DISP_MODE_LBX; - TInt featureId = EGSMcnSetOn; - - switch ( readValue ) //resource manipulation - { - case 0: // Off should be displayed in UI - featureId = EGSMcnSetOff; - break; - case 1: // On should be displayed in UI - featureId = EGSMcnSetOn; - break; - default: - break; - } - - dynamicText = CGSItemTextArray::GetItemCaptionFromFeatureIdLC( - resourceId, - featureId, - *iCoeEnv ); - - // Finally, set the dynamic text - iListboxItemArray->SetDynamicTextL( EGSMCNItemId, *dynamicText ); - - // And add to listbox - iListboxItemArray->SetItemVisibilityL( EGSMCNItemId, - CGSListBoxItemTextArray::EVisible ); - - CleanupStack::PopAndDestroy( dynamicText ); - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::MakeMcnItemL"); - } - -// --------------------------------------------------------------------------- -// -// Gets MCN value from model. -// -// --------------------------------------------------------------------------- -// -void CGSNetworkPluginContainer::GetMcnValue( TInt &aMcnValue ) - { - iModel->GetMCNSettingValue( aMcnValue ); - } - -// --------------------------------------------------------------------------- -// -// Sets MCN value from model. -// -// --------------------------------------------------------------------------- -// -void CGSNetworkPluginContainer::SetMcnValue( TInt &aMcnValue ) - { - iModel->SetMCNSettingValue( aMcnValue ); - } - - -// --------------------------------------------------------------------------- -// -// Creates network mode ui list box item -// -// --------------------------------------------------------------------------- -void CGSNetworkPluginContainer::MakeNwModeUiItemL() - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::MakeNwModeUiItemL"); - HBufC* dynamicText = NULL; - - // In here KGSNetworkModeCapsNotUpdated means mode is not updated yet - if( iModel->GetNetworkMode() != KGSNetworkModeCapsNotUpdated ) - { - // Allocate value to dynamicText from the resource item - TUint32 resourceId= R_NET_NETWORK_MODE_LBX; - dynamicText = CGSItemTextArray::GetItemCaptionFromFeatureIdLC( - resourceId, GetCurrentNetworkModeSelectionL(), *iCoeEnv ); - } - else - { - _LIT( KEmpty, " "); - dynamicText = KEmpty().AllocLC ( ); - } - - // Finally, set the dynamic text - iListboxItemArray->SetDynamicTextL( EGSNetworkModeItemId, *dynamicText ); - - // And add to listbox - iListboxItemArray->SetItemVisibilityL( EGSNetworkModeItemId, - CGSListBoxItemTextArray::EVisible ); - - // this variable needs to be removed from cleanup stack - CleanupStack::PopAndDestroy( dynamicText ); - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::MakeNwModeUiItemL"); - } - - -// --------------------------------------------------------------------------- -// CGSNetworkPluginContainer::CheckAndAlterContentsL -// -// Trims non-supported variable options from the array. -// This array items are displayed as radio button setting page items -// --------------------------------------------------------------------------- -// -void CGSNetworkPluginContainer::CheckAndAlterContentsL( - CGSRadioButtonSettingPageItemTextArray& aItemArray ) - { - __GSLOGSTRING("[GS]--> CGSNetworkPluginContainer::CheckAndAlterContentsL"); - TInt value = 0; - TInt supportedNetworks = iModel->GetSupportedNetworksL(); - __GSLOGSTRING1("[GS] CheckAndAlterContentsL: supportedNetworks: %d", supportedNetworks); - - // The 0th item corresponds to DualMode. This is always available in the - // setting page, so no actions required, just make it visible. - aItemArray.SetItemVisibilityL( EGSNetworkModeDualmode, - CGSListBoxItemTextArray::EVisible ); - - // the first bit corresponds to UMTS - value = supportedNetworks & ENetFirstBit; - __GSLOGSTRING1("[GS] CheckAndAlterContentsL: (UMTS)value: %d", value); - - if ( value == EGSNetworkModeUMTS ) - { - aItemArray.SetItemVisibilityL( EGSNetworkModeUMTS, - CGSListBoxItemTextArray::EVisible ); - } - else - { - aItemArray.SetItemVisibilityL( EGSNetworkModeUMTS, - CGSListBoxItemTextArray::EInvisible ); - } - - // Get the zeroeth value (GSM) from the list - value = supportedNetworks & ENetSecondBit; - __GSLOGSTRING1("[GS] CheckAndAlterContentsL: (GSM)value: %d", value); - - if ( value == EGSNetworkModeGSM ) - { - aItemArray.SetItemVisibilityL( EGSNetworkModeGSM, - CGSListBoxItemTextArray::EVisible ); - } - else - { - aItemArray.SetItemVisibilityL( EGSNetworkModeGSM, - CGSListBoxItemTextArray::EInvisible ); - } - - __GSLOGSTRING("[GS] <--CGSNetworkPluginContainer::CheckAndAlterContentsL"); - } - -// --------------------------------------------------------------------------- -// CGSNetworkPluginContainer::GetHelpContext(TCoeHelpContext& aContext) const -// Gets Help -// -// --------------------------------------------------------------------------- -// -void CGSNetworkPluginContainer::GetHelpContext(TCoeHelpContext& aContext) const - { - aContext.iMajor = KUidGS; - aContext.iContext = KCP_HLP_NETWORK; - } - -// --------------------------------------------------------------------------- -// CGSSettListCallContainer::CurrentFeatureId() -// -// --------------------------------------------------------------------------- -// -TInt CGSNetworkPluginContainer::CurrentFeatureId( ) const - { - return iListboxItemArray->CurrentFeature( ); - } - - -void CGSNetworkPluginContainer::HandleNetworkModeChangeL() - { - UpdateListBoxL( EGSNetworkModeItemId, GetCurrentNetworkModeSelectionL() ); - - //updating value - CGSRadioButtonSettingPageItemTextArray* nwModeArray = - CGSRadioButtonSettingPageItemTextArray::NewL( - R_NET_NETWORK_MODE_LBX, - *iCoeEnv, - NULL ); - // For showing updated network mode value??? - CleanupStack::PushL( nwModeArray ); - CheckAndAlterContentsL( *nwModeArray ); - TInt currentIndex = nwModeArray->IndexForFeatureIdL( - GetCurrentNetworkModeSelectionL() ); - HBufC* buf = StringLoader::LoadL( - R_CONFIRM_NOTE_NWMODE_STRING, - nwModeArray->MdcaPoint( currentIndex ), - iEikonEnv ); - CleanupStack::PushL( buf ); - CAknConfirmationNote* note = new( ELeave ) CAknConfirmationNote( ETrue ); - note->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - CleanupStack::PopAndDestroy( nwModeArray ); - } - - -// --------------------------------------------------------------------------- -// CGSNetworkPluginContainer::TelPluginModel -// -// Return the model pointer for use in view class -// --------------------------------------------------------------------------- -// -CGSNetworkPluginModel* CGSNetworkPluginContainer::NetPluginModel() - { - return iModel; - } - -// --------------------------------------------------------------------------- -// Sets observer for MSK label updations. -// --------------------------------------------------------------------------- -// -void CGSNetworkPluginContainer::SetMiddleSoftkeyObserver( - MGsFWMSKObserver* aObserver ) - { - if ( !iMSKObserver && aObserver ) - { - iMSKObserver = aObserver; - } - } - -// --------------------------------------------------------------------------- -// CGSNetworkPluginContainer::OfferKeyEventL -// Called when a key is pressed. -// --------------------------------------------------------------------------- -TKeyResponse CGSNetworkPluginContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - switch ( aKeyEvent.iCode ) - { - case EKeyUpArrow: - case EKeyDownArrow: - { - TKeyResponse listboxResp = - iListBox->OfferKeyEventL( aKeyEvent, aType ); - if ( iMSKObserver ) - { - iMSKObserver->CheckMiddleSoftkeyLabelL(); - } - return listboxResp; - } - case EKeyLeftArrow: - case EKeyRightArrow: - // Listbox takes all events even if it doesn't use them - return EKeyWasNotConsumed; - default: - break; - } - - return iListBox->OfferKeyEventL( aKeyEvent, aType ); - } - - -// --------------------------------------------------------------------------- -// CGSNetworkPluginContainer::GetCurrentNetworkModeSelectionL -// -// Returns the current listbox selection of network mode. -// --------------------------------------------------------------------------- -// -TGSNetworkModeItems CGSNetworkPluginContainer::GetCurrentNetworkModeSelectionL() - { - TGSNetworkModeItems featureId = EGSNetworkModeDualmode; - - switch( iModel->GetNetworkMode() ) - { - case RMmCustomAPI::KCapsNetworkModeGsm: - featureId = EGSNetworkModeGSM; - break; - - case RMmCustomAPI::KCapsNetworkModeUmts: - featureId = EGSNetworkModeUMTS; - break; - - case RMmCustomAPI::KCapsNetworkModeDual: - featureId = EGSNetworkModeDualmode; - break; - default: - // Mode might not be updated yet, in which case default is dual. - // Not a perfect solution but have to have an item selected in - // options box - featureId = EGSNetworkModeDualmode; - break; - } - -#ifdef _DEBUG - TBuf selectedModeBuf; - GSNetworkDebugHelper::NwToDes( featureId, selectedModeBuf ); - __GSLOGSTRING1( "[CGSNetworkPluginContainer::GetCurrentNetworkModeSelectionL] %S ", - &selectedModeBuf ); -#endif // _DEBUG - - iModel->CheckState( featureId ); - return featureId; - } - - -// --------------------------------------------------------------------------- -// CGSNetworkPluginContainer::SetCurrentNetworkModeSelectionL -// -// -// --------------------------------------------------------------------------- -// -void CGSNetworkPluginContainer::SetCurrentNetworkModeSelectionL( - TGSNetworkModeItems aNetworkModeLbxItem ) - { - __GSLOGSTRING1( "[CGSNetworkPluginContainer::SetCurrentNetworkModeSelectionL] Mode:%d", aNetworkModeLbxItem ); - TUint32 networkMode; - switch ( aNetworkModeLbxItem ) - { - case EGSNetworkModeGSM: //just using the index - networkMode = RMmCustomAPI::KCapsNetworkModeGsm; - break; - case EGSNetworkModeUMTS: - networkMode = RMmCustomAPI::KCapsNetworkModeUmts; - break; - case EGSNetworkModeDualmode: - default: - networkMode = RMmCustomAPI::KCapsNetworkModeDual; - break; - } - // Don't change the network mode if there is ongoing phone call - // since this will disconnect it - if ( !iModel->IsCallActive() ) - { - iModel->SetNetworkModeL( networkMode ); - iSelectedNetworkModeLbxItem = aNetworkModeLbxItem; - } - __GSLOGSTRING( "[CGSNetworkPluginContainer::SetCurrentNetworkModeSelectionL] End]" ); - } - - - -//End of File