--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/USIMExtension/src/CPsu2FixedDialingView.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,984 @@
+/*
+* Copyright (c) 2005-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: Phonebook 2 USIM UI Extension FDN names list view.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPsu2FixedDialingView.h"
+
+// Phonebook 2
+#include "CPsu2FixedDialingCall.h"
+#include "CPsu2ViewManager.h"
+#include "CPsu2SecUi.h"
+#include <MPbk2ContactUiControl.h>
+#include <CPbk2UIExtensionView.h>
+#include <MPbk2ViewActivationTransaction.h>
+#include <CPbk2AppUiBase.h>
+#include <MPbk2ViewExplorer.h>
+#include <TPbk2ContactEditorParams.h>
+#include <CPbk2ContactEditorDlg.h>
+#include <CPbk2FieldPropertyArray.h>
+#include <MPbk2FieldProperty.h>
+#include <Pbk2USimUIRes.rsg>
+#include <Pbk2UIControls.rsg>
+#include <CPbk2NamesListControl.h>
+#include <CPbk2ControlContainer.h>
+#include <CPbk2ViewState.h>
+#include <MPbk2CommandHandler.h>
+#include <MPbk2ApplicationServices.h>
+#include <Pbk2UID.h>
+#include <csxhelp/phob.hlp.hrh>
+
+// Virtual Phonebook
+#include <MVPbkSimPhone.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactStoreList.h>
+#include <VPbkContactStoreUris.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreInfo.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactFieldData.h>
+#include <MVPbkContactFieldTextData.h>
+#include <CVPbkFieldTypeSelector.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkContactOperationBase.h>
+
+// System includes
+#include <aknnavide.h>
+#include <aknnavi.h>
+#include <StringLoader.h>
+#include <eikmenup.h>
+#include <barsread.h>
+#include <aknnotewrappers.h>
+#include <AknUtils.h>
+#include <AiwCommon.hrh>
+#include <avkon.hrh>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+#ifdef _DEBUG
+
+enum TPanicCode
+ {
+ EAddFindTextL_Logic = 0
+ };
+
+void Panic(TInt aReason)
+ {
+ _LIT(KPanicText, "CPbk2CreateNewContactCmd");
+ User::Panic(KPanicText, aReason);
+ }
+#endif // _DEBUG
+
+/**
+ * Checks is the given field type included in
+ * the given selection.
+ *
+ * @param aResourceId Selector's resource id.
+ * @param aFieldType The field type to check.
+ * @param aManager Virtual Phonebook contact manager.
+ * @return ETrue if field type is included.
+ */
+TBool IsFieldTypeIncludedL(
+ const MVPbkFieldType& aFieldType,
+ const CVPbkContactManager& aManager,
+ const TInt aResourceId )
+ {
+ // Get the field type
+ TResourceReader resReader;
+ CCoeEnv::Static()->CreateResourceReaderLC
+ (resReader, aResourceId);
+
+ CVPbkFieldTypeSelector* selector =
+ CVPbkFieldTypeSelector::NewL(resReader, aManager.FieldTypes());
+ CleanupStack::PopAndDestroy(); // resReader
+
+ TBool ret = selector->IsFieldTypeIncluded(aFieldType);
+ delete selector;
+ return ret;
+ }
+
+/**
+ * Displays a note.
+ *
+ * @param aResourceId Note resource.
+ */
+void ShowNoteL( TInt aResourceId )
+ {
+ HBufC* prompt = StringLoader::LoadLC( aResourceId );
+ CAknInformationNote* dlg = new ( ELeave ) CAknInformationNote( EFalse );
+ dlg->ExecuteLD( *prompt );
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+/**
+ * Returns ETrue if shift is depressed in given key event.
+ *
+ * @param aKeyEvent Key event.
+ * @return ETrue if shift is pressed.
+ */
+inline TBool ShiftDown
+ (const TKeyEvent& aKeyEvent)
+ {
+ return (aKeyEvent.iModifiers &
+ (EModifierShift | EModifierLeftShift | EModifierRightShift)) != 0;
+ }
+
+} /// namespace
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::CPsu2FixedDialingView
+// --------------------------------------------------------------------------
+//
+CPsu2FixedDialingView::CPsu2FixedDialingView(
+ CPbk2UIExtensionView& aExtensionView,
+ CPsu2ViewManager& aViewManager ) :
+ CPsu2NameListViewBase( aExtensionView, aViewManager ),
+ iShowFdnNotActiveNote( ETrue )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::~CPsu2FixedDialingView
+// --------------------------------------------------------------------------
+//
+CPsu2FixedDialingView::~CPsu2FixedDialingView()
+ {
+ delete iFdnCall;
+ delete iContactLink;
+ delete iContact;
+ delete iContactRetriever;
+ delete iWaitOtherComplete;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::NewL
+// --------------------------------------------------------------------------
+//
+CPsu2FixedDialingView* CPsu2FixedDialingView::NewL(
+ CPbk2UIExtensionView& aExtensionView,
+ CPsu2ViewManager& aViewManager )
+ {
+ CPsu2FixedDialingView* self = new (ELeave) CPsu2FixedDialingView(
+ aExtensionView, aViewManager );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ConstructL()
+ {
+ iFdnStore =
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager().
+ ContactStoresL().Find
+ ( VPbkContactStoreUris::SimGlobalFdnUri() );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::HandleCommandKeyL
+// --------------------------------------------------------------------------
+//
+TBool CPsu2FixedDialingView::HandleCommandKeyL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ const TInt count = iControl->NumberOfContacts();
+ const TBool marked = iControl->ContactsMarked();
+ TBool itemSpecCommEnabled = Phonebook2::Pbk2AppUi()->ActiveView()->MenuBar()->ItemSpecificCommandsEnabled();
+
+ if ( aType == EEventKey )
+ {
+ if ( itemSpecCommEnabled && ( aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter ) )
+ {
+ if (!ShiftDown(aKeyEvent)) // pure OK/Enter key
+ {
+ if ( marked || count <= 0 )
+ {
+ iExtensionView.LaunchPopupMenuL(
+ R_PSU2_FIXED_DIALING_CONTEXT_MENUBAR );
+ }
+ else
+ {
+ if ( iControl->NumberOfContacts() > 0 )
+ {
+ OpenInfoViewCmdL( *iControl );
+ }
+ }
+ return ETrue;
+ }
+ }
+ // Send key
+ if ( itemSpecCommEnabled && aKeyEvent.iCode == EKeyPhoneSend )
+ {
+ if ( count > 0 && !marked )
+ {
+ CreateCallL( EPbk2CmdCall );
+ }
+ return ETrue;
+ }
+ // Delete key
+ else if ( ( itemSpecCommEnabled || marked ) && aKeyEvent.iCode == EKeyBackspace )
+ {
+ if ( iControl->FindTextL() == KNullDesC )
+ {
+ HandleCommandL( EPbk2CmdDeleteMe );
+ return ETrue;
+ }
+ }
+ else if ( aKeyEvent.iScanCode == EStdKeyNo )
+ {
+ // 'Red' button pressed, clear PIN2 query info
+ iViewManager.SecUi().Reset();
+ iShowFdnNotActiveNote = ETrue;
+ }
+ else { /* Empty to make PC-lint happy */ }
+ }
+
+ if ( ShiftDown( aKeyEvent ) )
+ {
+ // Update cbas when shift and msk is pressed.
+ UpdateCbasL();
+ }
+
+ return CPsu2NameListViewBase::HandleCommandKeyL( aKeyEvent, aType );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::HandlePointerEventL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::HandlePointerEventL(
+ const TPointerEvent& /*aPointerEvent*/ )
+ {
+ // nothing to do
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::DoActivateL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage)
+ {
+ // Load FDN title
+ HBufC* title = StringLoader::LoadLC(R_TEXT_FDN_LIST);
+ // Create FDN application context pane icon
+ TContextPaneIcon icon(EPsu2qgn_menu_simfdn);
+ CEikImage* image = icon.CreateLC();
+
+ // Set up view
+ MPbk2ViewActivationTransaction* viewActivationTransaction =
+ Phonebook2::Pbk2AppUi()->Pbk2ViewExplorer()->
+ HandleViewActivationLC
+ ( iExtensionView.Id(), aPrevViewId, title, image,
+ Phonebook2::EUpdateNaviPane |
+ Phonebook2::EUpdateContextPane |
+ Phonebook2::EUpdateTitlePane );
+
+ // Call base class
+ CPsu2NameListViewBase::DoActivateL(
+ aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ viewActivationTransaction->Commit();
+ CleanupStack::PopAndDestroy(3, title); // viewActivationTransaction,
+
+ // Update navi pane // icon, title
+ UpdateNaviPaneTextL();
+
+ if( aPrevViewId.iViewUid != TUid::Uid( EPsu2FixedDialingInfoViewId ) )
+ {
+ iShowFdnNotActiveNote = ETrue;
+ // Clear PIN2 query info
+ iViewManager.SecUi().Reset();
+ }
+ // Don't show note here, because there are many controls intializing, drawing and layouting
+ // will make the note flash. So delay the note pop up time to aviod the problem.
+ iWaitOtherComplete = CIdle::NewL( CActive::EPriorityIdle );
+ TCallBack callback( WaitOtherCompleteL, this );
+ iWaitOtherComplete->Start( callback );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::WaitOtherComplete
+// --------------------------------------------------------------------------
+//
+TInt CPsu2FixedDialingView::WaitOtherCompleteL( TAny* object )
+ {
+ STATIC_CAST( CPsu2FixedDialingView*, object )->CheckFDNActivityL();
+ return 0;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::CheckFDNActivity
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::CheckFDNActivityL()
+ {
+ if ( iShowFdnNotActiveNote )
+ {
+ if ( !iViewManager.SecUi().IsFDNActive() )
+ {
+ ShowNoteL( R_QTN_FDN_NOTE_NOT_ACTIVE );
+ }
+ iShowFdnNotActiveNote = EFalse;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::DoDeactivate
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::DoDeactivate()
+ {
+ DestroyNaviPaneText();
+ CPsu2NameListViewBase::DoDeactivate();
+
+ delete iWaitOtherComplete;
+ iWaitOtherComplete = NULL;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::HandleCommandL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::HandleCommandL(TInt aCommand)
+ {
+ iCommandIsBeingHandled = ETrue;
+ if ( Phonebook2::Pbk2AppUi()->ApplicationServices().CommandHandlerL()->
+ ServiceCmdByMenuCmd ( aCommand ) == KAiwCmdCall )
+ {
+ CreateCallL( aCommand );
+ }
+ else
+ {
+ switch( aCommand )
+ {
+ case EPsu2CmdOpenFixedDialingInfoView: // FALLTHROUGH
+ case EPsu2CmdActivateFDN: // FALLTHROUGH
+ case EPsu2CmdDeactivateFDN: // FALLTHROUGH
+ case EPsu2CmdNewContact: // FALLTHROUGH
+ case EPsu2CmdCopyFromContacts: // FALLTHROUGH
+ case EPbk2CmdEditMe: // FALLTHROUGH
+ case EPbk2CmdDeleteMe:
+ {
+ if ( iViewManager.StoreAvailableL() )
+ {
+ switch( aCommand )
+ {
+ case EPsu2CmdOpenFixedDialingInfoView:
+ {
+ OpenInfoViewCmdL( *iControl );
+ break;
+ }
+ case EPsu2CmdActivateFDN:
+ {
+ ActivateFDNCmdL();
+ break;
+ }
+ case EPsu2CmdDeactivateFDN:
+ {
+ DeactivateFDNCmdL();
+ break;
+ }
+ case EPsu2CmdNewContact:
+ {
+ if ( !FdnStoreFullL() &&
+ iViewManager.SecUi().ConfirmPin2L() )
+ {
+ CreateNewFdnContactL();
+ }
+ break;
+ }
+ case EPsu2CmdCopyFromContacts:
+ {
+ if ( !FdnStoreFullL() &&
+ iViewManager.SecUi().ConfirmPin2L() )
+ {
+ CPsu2NameListViewBase::HandleCommandL( aCommand );
+ }
+ break;
+ }
+ case EPbk2CmdEditMe:
+ {
+ if ( iViewManager.SecUi().ConfirmPin2L() )
+ {
+ delete iContactLink;
+ iContactLink = NULL;
+ iContactLink =
+ iControl->FocusedContactL()->CreateLinkLC();
+ CleanupStack::Pop();
+ iContactRetriever =
+ Phonebook2::Pbk2AppUi()->ApplicationServices().
+ ContactManager().RetrieveContactL(
+ *iContactLink, *this );
+ }
+ break;
+ }
+ default:
+ {
+ if ( iViewManager.SecUi().ConfirmPin2L() )
+ {
+ CPsu2NameListViewBase::HandleCommandL( aCommand );
+ }
+ break;
+ }
+ }
+ }
+ break;
+ }
+ case EPbk2CmdExit: // FALLTHROUGH
+ case EAknSoftkeyBack:
+ case EAknCmdHideInBackground:
+ {
+ // Clear PIN2 query info
+ iViewManager.SecUi().Reset();
+ // If the note has not popped up, cancel the popping up of the note.
+ if( iWaitOtherComplete->IsActive() )
+ {
+ iWaitOtherComplete->Cancel();
+ }
+ iShowFdnNotActiveNote = ETrue;
+
+ if ( aCommand == EAknCmdHideInBackground && iDlgEliminator )
+ {
+ iDlgEliminator->RequestExitL( EKeyEscape );
+ }
+
+ CPsu2NameListViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ default:
+ {
+ CPsu2NameListViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+ // Update CBAs, if command handler is consuming the command
+ // postcommandexecution is updating cbas
+ UpdateCbasL();
+ iCommandIsBeingHandled = EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::DynInitMenuPaneL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane)
+ {
+ const TInt count = iControl->NumberOfContacts();
+ const TBool marked = iControl->ContactsMarked();
+
+ switch( aResourceId )
+ {
+ case R_PSU2_FIXED_DIALING_OPEN_MENUPANE:
+ {
+ if ( count <= 0 || marked )
+ {
+ aMenuPane->SetItemDimmed
+ ( EPsu2CmdOpenFixedDialingInfoView , ETrue );
+ }
+ break;
+ }
+ case R_PSU2_FIXED_DIALING_MENUPANE:
+ {
+ if ( iViewManager.SecUi().IsFDNActive() )
+ {
+ aMenuPane->SetItemDimmed( EPsu2CmdActivateFDN, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EPsu2CmdDeactivateFDN, ETrue );
+ }
+ if ( count <= 0 )
+ {
+ aMenuPane->SetItemDimmed( EPbk2CmdEditMe , ETrue );
+ aMenuPane->SetItemDimmed( EPbk2CmdDeleteMe , ETrue );
+ }
+ else
+ {
+ if( marked )
+ {
+ aMenuPane->SetItemDimmed( EPsu2CmdNewContact , ETrue );
+ aMenuPane->SetItemDimmed( EPbk2CmdEditMe , ETrue );
+ aMenuPane->SetItemSpecific( EPbk2CmdDeleteMe, EFalse );
+ }
+ else
+ {
+ aMenuPane->SetItemSpecific( EPbk2CmdDeleteMe, ETrue );
+ }
+ }
+ break;
+ }
+ case R_PSU2_FIXED_DIALING_COPY_MENUPANE: // FALLTHROUGH
+ case R_PSU2_FIXED_DIALING_COPY_CONTEXT_MENUPANE:
+ {
+ if ( count <= 0 )
+ {
+ aMenuPane->SetItemDimmed( EPbk2CmdCopy, ETrue );
+ }
+ if ( marked )
+ {
+ aMenuPane->SetItemSpecific( EPbk2CmdCopy, EFalse );
+ aMenuPane->SetItemDimmed( EPsu2CmdCopyFromContacts, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemSpecific( EPbk2CmdCopy, ETrue);
+ }
+ break;
+ }
+ case R_PSU2_FIXED_DIALING_DELETE_MENUPANE:
+ {
+ if ( count <= 0 )
+ {
+ aMenuPane->SetItemDimmed( EPbk2CmdDeleteMe , ETrue );
+ }
+ break;
+ }
+ case R_PSU2_FIXED_DIALING_NEWCONTACT_MENUPANE:
+ {
+ if ( count > 0 )
+ {
+ aMenuPane->SetItemDimmed( EPsu2CmdNewContact , ETrue );
+ }
+ break;
+ }
+ default:
+ {
+ CPsu2NameListViewBase::DynInitMenuPaneL
+ ( aResourceId, aMenuPane );
+ break;
+ }
+ };
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::UpdateCbasL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::UpdateCbasL()
+ {
+ if ( iControl )
+ {
+ if ( iControl->NumberOfContacts() > 0 && !iControl->ContactsMarked() )
+ {
+ // Set middle softkey as Open.
+ iExtensionView.Cba()->SetCommandSetL(
+ R_PSU_FDN_SOFTKEYS_OPTIONS_BACK_OPEN );
+ iExtensionView.Cba()->DrawDeferred();
+ }
+ else
+ {
+ // Set middle softkey as Context menu.
+ iExtensionView.Cba()->SetCommandSetL(
+ R_PSU_SOFTKEYS_OPTIONS_BACK_CONTEXT );
+ iExtensionView.Cba()->DrawDeferred();
+ // Change context menu when marked items
+ iExtensionView.MenuBar()->SetContextMenuTitleResourceId(
+ R_PSU2_FIXED_DIALING_CONTEXT_MENUBAR );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::NameListControlResourceId
+// --------------------------------------------------------------------------
+//
+TInt CPsu2FixedDialingView::NameListControlResourceId() const
+ {
+ return R_PSU2_FIXED_DIALING_NAME_LIST_CONTROL;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ContactEditingComplete
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ContactEditingComplete(
+ MVPbkStoreContact* aEditedContact)
+ {
+ if( iControl )
+ {
+ // Reset Find before setting the focus because if new contact is created
+ // through find box, ResetFindL corrupts the focus.
+ TRAP_IGNORE( iControl->ResetFindL() );
+ if (aEditedContact)
+ {
+ // Focus the created contact
+ TRAPD( error, iControl->SetFocusedContactL( *aEditedContact ) );
+ if ( error != KErrNone )
+ {
+ CCoeEnv::Static()->HandleError( error );
+ }
+ }
+ }
+ delete aEditedContact; // not needed anymore
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ContactEditingDeletedContact
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ContactEditingDeletedContact(
+ MVPbkStoreContact* aEditedContact)
+ {
+ delete aEditedContact; // not needed anymore
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ContactEditingAborted
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ContactEditingAborted()
+ {
+ // Do nothing
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::VPbkSingleContactOperationComplete
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact )
+ {
+
+ if ( iContactRetriever == &aOperation && aContact)
+ {
+ delete iContactRetriever;
+ iContactRetriever = NULL;
+
+ delete iContact;
+ iContact = aContact;
+
+ TRAPD( error, iContact->LockL(*this) );
+ if ( error != KErrNone )
+ {
+ CCoeEnv::Static()->HandleError(error);
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::VPbkSingleContactOperationFailed
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError )
+ {
+ if ( iContactRetriever == &aOperation )
+ {
+ delete iContactRetriever;
+ iContactRetriever = NULL;
+
+ CCoeEnv::Static()->HandleError(aError);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ContactOperationCompleted
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ContactOperationCompleted(
+ TContactOpResult /*aResult*/ )
+ {
+ TRAPD(result, EditFdnContactL());
+
+ if (result != KErrNone)
+ {
+ CCoeEnv::Static()->HandleError(result);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ContactOperationFailed
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ContactOperationFailed(
+ TContactOp /*aOpCode*/,
+ TInt aErrorCode,
+ TBool /*aErrorNotified*/ )
+ {
+ CCoeEnv::Static()->HandleError(aErrorCode);
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::UpdateNaviPaneTextL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::UpdateNaviPaneTextL()
+ {
+ HBufC* text = NULL;
+ if (iViewManager.SecUi().IsFDNActive())
+ {
+ text = StringLoader::LoadLC(R_QTN_FDN_ACTIVE);
+ }
+ else
+ {
+ text = StringLoader::LoadLC(R_QTN_FDN_DEACTIVE);
+ }
+
+ DestroyNaviPaneText();
+ if (!iNaviPane)
+ {
+ iNaviPane = static_cast<CAknNavigationControlContainer*>(
+ iAvkonAppUi->StatusPane()->ControlL(
+ TUid::Uid(EEikStatusPaneUidNavi)));
+ }
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL(*text);
+ iNaviPane->PushL(*iNaviDecorator);
+
+ CleanupStack::PopAndDestroy(); // text
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::DestroyNaviPaneText
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::DestroyNaviPaneText()
+ {
+ if (iNaviPane && iNaviDecorator)
+ {
+ iNaviPane->Pop(iNaviDecorator);
+ }
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::OpenInfoViewCmdL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::OpenInfoViewCmdL
+ (MPbk2ContactUiControl& aUiControl) const
+ {
+ if (!aUiControl.ContactsMarked())
+ {
+ CPbk2ViewState* state = aUiControl.ControlStateL();
+ CleanupStack::PushL(state);
+ Phonebook2::Pbk2AppUi()->Pbk2ViewExplorer()->
+ ActivatePhonebook2ViewL
+ (TUid::Uid(EPsu2FixedDialingInfoViewId), state);
+ CleanupStack::PopAndDestroy( state ); // state
+ aUiControl.UpdateAfterCommandExecution();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::ActivateFDNCmdL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::ActivateFDNCmdL()
+ {
+ if ( !iViewManager.SecUi().IsFDNActive() )
+ {
+ iViewManager.SecUi().ActivateFDNL();
+ UpdateNaviPaneTextL();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::DeactivateFDNCmdL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::DeactivateFDNCmdL()
+ {
+ if ( iViewManager.SecUi().IsFDNActive() )
+ {
+ iViewManager.SecUi().DeactivateFDNL();
+ UpdateNaviPaneTextL();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::CreateNewFdnContactL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::CreateNewFdnContactL()
+ {
+ MVPbkStoreContact* newFdnContact = iFdnStore->CreateNewContactLC();
+
+ // Add find text to last name field, if any
+ AddFindTextL(*newFdnContact);
+
+ TUint32 flags = TPbk2ContactEditorParams::ENewContact;
+
+ TCoeHelpContext helpContext;
+ helpContext.iMajor.iUid = KPbk2UID3;
+ helpContext.iContext = KFDN_HLP_FDN_NUM_EDIT_VIEW;
+
+ TPbk2ContactEditorParams params( flags, NULL, &helpContext );
+ CPbk2ContactEditorDlg* editor =
+ CPbk2ContactEditorDlg::NewL(params, newFdnContact, *this);
+ CleanupStack::Pop(); // newFdnContact, whose ownership was taken away
+
+ iDlgEliminator = editor;
+ editor->ExecuteLD();
+ iDlgEliminator = NULL;
+ }
+
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::AddFindTextL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::AddFindTextL(MVPbkStoreContact& aContact)
+ {
+ const TDesC& findText = iControl->FindTextL();
+
+ if (findText != KNullDesC)
+ {
+ CPbk2FieldPropertyArray& fieldProperties =
+ Phonebook2::Pbk2AppUi()->ApplicationServices().FieldProperties();
+
+ const TInt fieldCount = fieldProperties.Count();
+ for (TInt i=0; i<fieldCount; ++i)
+ {
+ const MPbk2FieldProperty& prop = fieldProperties.At(i);
+
+ if (IsFieldTypeIncludedL(prop.FieldType(),
+ Phonebook2::Pbk2AppUi()->ApplicationServices().
+ ContactManager(),
+ R_PHONEBOOK2_LAST_NAME_SELECTOR))
+ {
+ MVPbkStoreContactField* field = aContact.CreateFieldLC
+ (prop.FieldType());
+
+ __ASSERT_DEBUG(field->FieldData().DataType() ==
+ EVPbkFieldStorageTypeText, Panic(EAddFindTextL_Logic));
+
+ MVPbkContactFieldTextData* fieldData =
+ &MVPbkContactFieldTextData::Cast(field->FieldData());
+ //The max length of a name in the Sim Card
+ TInt maxLength = fieldData->MaxLength();
+ fieldData->SetTextL( findText.Left( maxLength ));
+
+ TInt index = aContact.AddFieldL(field);
+ CleanupStack::Pop(); // field
+ break;
+ }
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::FdnStoreFullL
+// --------------------------------------------------------------------------
+//
+TBool CPsu2FixedDialingView::FdnStoreFullL()
+ {
+ TBool ret = EFalse;
+ const MVPbkContactStoreInfo& storeInfo = iFdnStore->StoreInfo();
+ if ( storeInfo.MaxNumberOfContactsL() <= storeInfo.NumberOfContactsL() )
+ {
+ ret = ETrue;
+ ShowNoteL( R_QTN_FDN_LIST_FULL );
+ }
+ return ret;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::CreateCallL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::CreateCallL( TInt aCommand )
+ {
+ if ( !iFdnCall )
+ {
+ iFdnCall = CPsu2FixedDialingCall::NewL
+ ( Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager(),
+ *Phonebook2::Pbk2AppUi()->ApplicationServices().
+ CommandHandlerL(),
+ iExtensionView );
+ }
+
+ MVPbkContactLink* contactLink =
+ iControl->FocusedContactL()->CreateLinkLC();
+ CleanupStack::Pop(); // CreateCall takes contactLink ownership
+ iFdnCall->CreateCallL( contactLink, aCommand );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::EditFdnContactL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::EditFdnContactL()
+ {
+ TCoeHelpContext helpContext;
+ helpContext.iMajor.iUid = KPbk2UID3;
+ helpContext.iContext = KFDN_HLP_FDN_NUM_EDIT_VIEW;
+
+ TPbk2ContactEditorParams params;
+ params.iHelpContext = &helpContext;
+
+ // create and execute editing dialog
+ CPbk2ContactEditorDlg* dlg =
+ CPbk2ContactEditorDlg::NewL( params, iContact, *this );
+ iContact = NULL; // ownership went to editor
+
+ iDlgEliminator = dlg;
+ dlg->ExecuteLD();
+ iDlgEliminator = NULL;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::HandleControlEventL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingView::HandleControlEventL(
+ MPbk2ContactUiControl& aControl,
+ const TPbk2ControlEvent& aEvent )
+ {
+ const TInt count = iControl->NumberOfContacts();
+ const TBool marked = iControl->ContactsMarked();
+
+ switch ( aEvent.iEventType )
+ {
+ case TPbk2ControlEvent::EContactTapped:
+ case TPbk2ControlEvent::EContactDoubleTapped:
+ {
+ if ( marked )
+ {
+ iExtensionView.LaunchPopupMenuL(
+ R_PSU2_FIXED_DIALING_CONTEXT_MENUBAR );
+ }
+ else
+ {
+ // Open contact
+ HandleCommandL( EPsu2CmdOpenFixedDialingInfoView );
+ }
+ break;
+ }
+ default:
+ {
+ CPsu2NameListViewBase::HandleControlEventL( aControl, aEvent );
+ break;
+ }
+ }
+ }
+
+// End of File