--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gssettingsuis/Gs/GSCallBarringPlugin/Src/GSCellularCallBarringView.cpp Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,575 @@
+/*
+* Copyright (c) 2002-2005 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: View for the Barring folder
+*
+*/
+
+
+// INCLUDE FILES
+#include "GSCellularCallBarringView.h" //for CGSSettListBarringView
+#include "GSCellularCallBarringContainer.h"//for CGSBaseContainer
+#include "GSPhoneSettingConstants.h" //for constant values
+#include "GSCallBarringPlugin.h" //for plugin UID
+#include "GsLogger.h"
+#include "LocalViewIds.h" //for KTellBarringViewId
+
+#include <gscommon.hrh>
+#include <coeaui.h>
+#include <hlplch.h> // For HlpLauncher
+#include <e32base.h>
+#include <featmgr.h>
+#include <GSCallBarringPluginRsc.rsg> //for resource IDs
+#include <exterror.h> //for extended error codes
+#include <StringLoader.h> //for StringLoader
+#include <PsetContainer.h> //for CPsetContainer
+#include <PsuiContainer.h> //for CPsuiContainer
+#include <eikmenup.h> //for menu bar
+#include <SecUiCodeQueryDialog.h>
+#include <nwdefs.h>
+#include <aknViewAppUi.h>
+#include <gsfwviewuids.h>
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+#include <spsettings.h>
+#endif // __VOIP && RD_VOIP_REL_2_2
+
+// ========================= MEMBER FUNCTIONS ================================
+// ---------------------------------------------------------------------------
+//
+// C++ constructor.
+//
+// ---------------------------------------------------------------------------
+CGSSettListBarringView::CGSSettListBarringView()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Symbian OS two-phased constructor (second phase)
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::ConstructL()
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::ConstructL");
+ BaseConstructL( R_GS_BARRING_VIEW );
+
+ iSettings = CPsetContainer::NewL();
+ iObsContainer = CPsuiContainer::NewL();
+ iCbObserver = iObsContainer->CreateCBObsL();
+ iBarring = iSettings->CreateCBObjectL( *iCbObserver );
+ iRockerPress = EFalse;
+ iContextMenuInitialized = EFalse;
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::ConstructL");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CGSSettListBarringView::NewL()
+// Symbian OS two-phased constructor
+//
+// ---------------------------------------------------------------------------
+CGSSettListBarringView* CGSSettListBarringView::NewL()
+ {
+ CGSSettListBarringView* self = NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// Symbian OS two-phased constructor (first phase)
+//
+// ---------------------------------------------------------------------------
+CGSSettListBarringView* CGSSettListBarringView::NewLC()
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::NewLC");
+ CGSSettListBarringView* self = new ( ELeave ) CGSSettListBarringView;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::NewLC");
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// C++ destructor
+//
+// ---------------------------------------------------------------------------
+CGSSettListBarringView::~CGSSettListBarringView()
+ {
+ delete iBarring;
+ delete iSettings;
+ delete iObsContainer;
+ delete iCbObserver;
+ iRockerPress = EFalse;
+
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Returns Id of the Barring view.
+//
+// ---------------------------------------------------------------------------
+TUid CGSSettListBarringView::Id() const
+ {
+ return KCallBarringViewId;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Handles other than list box events.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::HandleCommandL( TInt aCommand )
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::HandleCommandL");
+ iRockerPress = EFalse;
+
+ TCallBarringSetting barringSetting;
+ iCurrentItem = iContainer->iListBox->CurrentItemIndex();
+ SetBarringType(
+ aCommand,
+ barringSetting,
+ static_cast <TGSBarringSetting> (iCurrentItem) );
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+ CSPSettings* spSettings = CSPSettings::NewL();
+ TBool showVoipFeatures( EFalse );
+ if ( spSettings->IsFeatureSupported( ESupportVoIPFeature ) &&
+ spSettings->IsFeatureSupported( ESupportVoIPSSFeature ) )
+ {
+ showVoipFeatures = ETrue;
+ }
+#endif // __VOIP && RD_VOIP_REL_2_2
+
+ switch ( aCommand )
+ {
+ case EGSCmdAppChange:
+ iRockerPress = EFalse;
+ HandleListBoxEventL( iContainer->iListBox, EEventEnterKeyPressed );
+ break;
+ case EAknSoftkeyBack:
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+ if ( showVoipFeatures )
+ {
+ iAppUi->ActivateLocalViewL( KCallMainBarringViewId );
+ }
+ else
+ {
+ iAppUi->ActivateLocalViewL( KGSTelPluginUid );
+ }
+#else // __VOIP && RD_VOIP_REL_2_2
+ if ( FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) )
+ {
+ iAppUi->ActivateLocalViewL( KCallMainBarringViewId );
+ }
+ else
+ {
+ iAppUi->ActivateLocalViewL( KGSTelPluginUid );
+ }
+#endif // __VOIP && RD_VOIP_REL_2_2
+ break;
+ case EGSCmdBarringActivate:
+ barringSetting.iSetting = EActivateBarring;
+ HandleBarringOperationL( barringSetting, EAllTeleAndBearer );
+ break;
+ case EGSCmdBarringCancel:
+ barringSetting.iSetting = ECancelBarring;
+ HandleBarringOperationL( barringSetting, EAllTeleAndBearer );
+ break;
+ case EGSCmdBarringInquiry:
+ iBarring->GetBarringStatusL( EServiceGroupVoice,
+ barringSetting.iType );
+ break;
+ case EGSCmdBarringChangePwd:
+ ChangeBarringPwdL();
+ break;
+ case EGSCmdBarringCancelAll:
+ CancelAllBarringsL();
+ break;
+ case EAknCmdHelp:
+ {
+ if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ HlpLauncher::LaunchHelpApplicationL(
+ iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
+ }
+ break;
+ }
+ default:
+ iAppUi->HandleCommandL( aCommand );
+ break;
+ }
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::HandleCommandL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Activates view.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::DoActivateL");
+ CGSLocalBaseView::DoActivateL( aPrevViewId, aCustomMessageId,
+ aCustomMessage );
+
+ iContainer->iListBox->SetTopItemIndex(iTopItemIndex);
+
+ if (iCurrentItem >= 0 &&
+ iCurrentItem < iContainer->iListBox->Model()->NumberOfItems())
+ {
+ iContainer->iListBox->SetCurrentItemIndexAndDraw(iCurrentItem);
+ }
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::DoActivateL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Deactivates view.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::DoDeactivate()
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::DoDeactivate");
+ if ( iContainer )
+ {
+ iCurrentItem = iContainer->iListBox->CurrentItemIndex();
+ iTopItemIndex = iContainer->iListBox->TopItemIndex();
+
+ iAppUi->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::DoDeactivate");
+ }
+
+
+ // -----------------------------------------------------------------------------
+// CGSSettListBarringView::ProcessCommandL
+// -----------------------------------------------------------------------------
+void CGSSettListBarringView::ProcessCommandL( TInt aCommand )
+ {
+ // Context menu is needed to be initialized only if selection key
+ // is pressed. Initialization need to be performed only once.
+ if( aCommand == EAknSoftkeyContextOptions &&
+ !iContextMenuInitialized )
+ {
+ MenuBar()->SetContextMenuTitleResourceId(
+ R_CALL_BARRING_MSK_CONTEXTMENUBAR );
+ iContextMenuInitialized = ETrue;
+ }
+
+ // Call base class
+ CAknView::ProcessCommandL( aCommand );
+ }
+// ---------------------------------------------------------------------------
+//
+// Before showing a options menu, delete options key specific settings if
+// rocker key has been pressed.
+// ---------------------------------------------------------------------------
+//
+void CGSSettListBarringView::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::DynInitMenuPaneL");
+ CEikMenuBar* menuBar = MenuBar();
+ // show or hide the 'help' menu item when supported
+ if( aResourceId == R_GS_MENU_ITEM_HELP )
+ {
+ if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ }
+
+ if ( iRockerPress )
+ {
+ // always hide 'help' & 'exit' menu items when rocker key is pressed
+ if( aResourceId == R_GS_MENU_ITEM_EXIT )
+ {
+ aMenuPane->SetItemDimmed( EAknCmdExit, ETrue );
+ }
+ else if ( aResourceId == R_GS_MENU_ITEM_HELP )
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ else if ( aResourceId == R_GS_BARRING_VIEW_MENU )
+ {
+ // these options are not initialized in restricted call barring
+ if ( !FeatureManager::FeatureSupported( KFeatureIdRestrictedCallBarring ) )
+ {
+ aMenuPane->SetItemDimmed( EGSCmdBarringCancelAll, ETrue );
+ aMenuPane->SetItemDimmed( EGSCmdBarringChangePwd, ETrue );
+ }
+ }
+ }
+ else if (aResourceId == R_GS_BARRING_VIEW_MENU)
+ {
+ if (!menuBar->ItemSpecificCommandsEnabled() && menuBar->GetMenuType()
+ == CEikMenuBar::EMenuOptions)
+ {
+ aMenuPane->SetItemDimmed(EGSCmdBarringActivate, ETrue);
+ aMenuPane->SetItemDimmed(EGSCmdBarringCancel, ETrue);
+ aMenuPane->SetItemDimmed(EGSCmdBarringInquiry, ETrue);
+ }
+ }
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::DynInitMenuPaneL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Queries password from the user.
+//
+// ---------------------------------------------------------------------------
+//
+TInt CGSSettListBarringView::BarringPasswordQueryL(
+ TBarringPassword& aBarringPassword,
+ const TInt& aTitleID )
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::BarringPasswordQueryL");
+ TBool continueLoop = ETrue;
+
+ while ( continueLoop )
+ {
+ aBarringPassword = KNullDesC;
+ CCodeQueryDialog* dlg = new (ELeave)
+ CCodeQueryDialog( aBarringPassword, KGSBarringPasswordLength,
+ KGSBarringPasswordLength, ESecUiNone );
+ dlg->PrepareLC( R_BARRING_PASSWORD_DLG );
+
+ HBufC* string = NULL;
+ string = StringLoader::LoadLC( aTitleID );
+ dlg->SetPromptL( *string );
+ CleanupStack::PopAndDestroy( string );
+
+ TInt res = dlg->RunLD();
+ dlg = NULL;
+
+ if ( res )
+ {
+ if ( aBarringPassword.Length() == KGSBarringPasswordLength )
+ {
+ continueLoop = EFalse;
+ }
+ }
+ else
+ {
+ __GSLOGSTRING("[GS] BarringPasswordQueryL: EAknSoftkeyCancel returned");
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::BarringPasswordQueryL");
+ return EAknSoftkeyCancel;
+ }
+ }
+ __GSLOGSTRING("[GS] BarringPasswordQueryL: EAknSoftkeyOk returned");
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::BarringPasswordQueryL");
+ return EAknSoftkeyOk;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Adds given item to a given list
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::AppendItemL(
+ CDesCArrayFlat& aList, const TInt aItem )
+ {
+ HBufC* string = NULL;
+ string = StringLoader::LoadLC( aItem );
+ aList.AppendL( *string );
+ CleanupStack::PopAndDestroy( string );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Handles barring operation requests.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::HandleBarringOperationL(
+ TCallBarringSetting aBarringSetting, TBasicServiceGroups aBsc )
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::HandleBarringOperationL");
+ TInt ret = KErrNone;
+ ret = BarringPasswordQueryL(
+ aBarringSetting.iPassword, R_BARRING_PASSWORD );
+ if ( ret == EAknSoftkeyOk )
+ {
+ iBarring->SetBarringL( aBarringSetting, aBsc );
+ }
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::HandleBarringOperationL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Sets barring type. Switches from GS internal values, to values
+// shared by phone/phonesettings.
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::SetBarringType( TInt& aCommand,
+ TCallBarringSetting& aBarringSetting,
+ TGSBarringSetting aType )
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::SetBarringType");
+ if ( aCommand != EGSCmdBarringActivate &&
+ aCommand != EGSCmdBarringCancel &&
+ aCommand != EGSCmdBarringInquiry &&
+ aCommand != EGSCmdBarringChangePwd &&
+ aCommand != EGSCmdBarringCancelAll )
+ {
+ __GSLOGSTRING("[GS] SetBarringType: No barring variables set");
+ return; //in case of exit do not set barring variables.
+ }
+
+ aBarringSetting.iServiceGroup = EServiceGroupVoice;
+
+ switch ( aType )
+ {
+ case EGSCBOutgoing:
+ aBarringSetting.iType = EBarringTypeAllOutgoing;
+ break;
+ case EGSCBInternational:
+ aBarringSetting.iType = EBarringTypeOutgoingInternational;
+ break;
+ case EGSCBInternationalExceptHome:
+ aBarringSetting.iType =
+ EBarringTypeOutgoingInternationalExceptToHomeCountry;
+ break;
+ case EGSCBIncoming:
+ aBarringSetting.iType = EBarringTypeAllIncoming;
+ break;
+ case EGSCBAbroad:
+ aBarringSetting.iType = EBarringTypeIncomingWhenRoaming;
+ break;
+ default:
+ aBarringSetting.iType = EBarringTypeAllBarrings;
+ break;
+ }
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdRestrictedCallBarring ) )
+ {
+ // Restricted call barring only support EBarringTypeIncomingWhenRoaming
+ aBarringSetting.iType = EBarringTypeIncomingWhenRoaming;
+ }
+
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::SetBarringType");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates a request to cancel all barrings.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::CancelAllBarringsL()
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::CancelAllBarringsL");
+ TCallBarringSetting cancelAllCB;
+
+ TInt retValue = KErrNone;
+ retValue = BarringPasswordQueryL( cancelAllCB.iPassword,
+ R_BARRING_PASSWORD );
+ if ( retValue == EAknSoftkeyOk )
+ {
+ cancelAllCB.iSetting = ECancelBarring;
+ cancelAllCB.iType = EBarringTypeAllBarrings;
+ cancelAllCB.iServiceGroup = EServiceGroupVoice;
+ iBarring->SetBarringL( cancelAllCB, EAllTeleAndBearer );
+ }
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::CancelAllBarringsL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Handles changing of barring password.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::ChangeBarringPwdL()
+ {
+ __GSLOGSTRING("[GS]--> CGSSettListBarringView::ChangeBarringPwdL");
+ TInt returnValue = KErrNone;
+ RMobilePhone::TMobilePhonePasswordChangeV2 pwd;
+
+ returnValue = BarringPasswordQueryL(
+ pwd.iOldPassword, R_CURRENT_BARRING_PASSWORD );
+
+ if ( returnValue != EAknSoftkeyOk ) //cancelled or error
+ {
+ __GSLOGSTRING("[GS] ChangeBarringPwdL: Current PW cancelled/error");
+ return;
+ }
+ returnValue = BarringPasswordQueryL( pwd.iNewPassword,
+ R_NEW_BARRING_PASSWORD );
+ if ( returnValue != EAknSoftkeyOk ) //cancelled or error
+ {
+ __GSLOGSTRING("[GS] ChangeBarringPwdL: New PW cancelled/error");
+ return;
+ }
+ returnValue = BarringPasswordQueryL( pwd.iVerifiedPassword ,
+ R_VERIFY_NEW_BARRING_PASSWORD );
+ if ( returnValue != EAknSoftkeyOk )
+ {
+ __GSLOGSTRING("[GS] ChangeBarringPwdL: Verify PW1 cancelled/error");
+ return;
+ }
+ // check if newpw and verifypw do not
+ // match->password error->return to query
+ while ( pwd.iNewPassword.Compare( pwd.iVerifiedPassword ) != 0 )
+ {
+ iCbObserver->HandleBarringErrorL( KErrGsmSSNegativePasswordCheck );
+
+ returnValue = BarringPasswordQueryL( pwd.iVerifiedPassword,
+ R_VERIFY_NEW_BARRING_PASSWORD );
+ if ( returnValue != EAknSoftkeyOk ) //cancelled or error
+ {
+ __GSLOGSTRING("[GS] ChangeBarringPwdL: Verify PW2 cancelled/error");
+ return;
+ }
+ }
+ iBarring->ChangePasswordL( pwd, ETrue );
+ __GSLOGSTRING("[GS] <--CGSSettListBarringView::ChangeBarringPwdL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates new iContainer.
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::NewContainerL()
+ {
+ iContainer = new (ELeave) CGSSettListBarringContainer;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Handles listbox selection
+//
+// ---------------------------------------------------------------------------
+void CGSSettListBarringView::HandleListBoxSelectionL()
+ {
+ iRockerPress = ETrue;
+ CEikMenuBar* menuBar = this->MenuBar();
+ menuBar->SetMenuType( CEikMenuBar::EMenuContext );
+ menuBar->SetContextMenuTitleResourceId(R_CALL_BARRING_MSK_CONTEXTMENUBAR);
+ // Display menu bar.
+ menuBar->TryDisplayContextMenuBarL();
+ iRockerPress = EFalse;
+ menuBar->SetMenuType( CEikMenuBar::EMenuOptions );
+ iContextMenuInitialized = ETrue;
+ }
+
+
+ // End of file