--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/USIMExtension/src/CPsu2FixedDialingInfoView.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,555 @@
+/*
+* 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 contact info view.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPsu2FixedDialingInfoView.h"
+
+// Phonebook 2
+#include "CPsu2ViewManager.h"
+#include "CPsu2FixedDialingCall.h"
+#include "CPsu2SecUi.h"
+#include <CPbk2UIExtensionView.h>
+#include <MPbk2ViewActivationTransaction.h>
+#include <CPbk2AppUiBase.h>
+#include <MPbk2ViewExplorer.h>
+#include <Pbk2USimUIRes.rsg>
+#include <CPbk2ViewState.h>
+#include <MPbk2ContactUiControl.h>
+#include <Pbk2UIControls.rsg>
+#include <MPbk2CommandHandler.h>
+#include <MPbk2ApplicationServices.h>
+#include <TPbk2ContactEditorParams.h>
+#include <CPbk2ContactEditorDlg.h>
+#include <Pbk2UID.h>
+#include <csxhelp/phob.hlp.hrh>
+#include <CPbk2PresentationContact.h>
+#include <CPbk2FieldPropertyArray.h>
+#include <CPbk2PresentationContactFieldCollection.h>
+#include <MPbk2PointerEventInspector.h>
+
+// Virtual Phonebook
+#include <MVPbkSimPhone.h>
+#include <MVPbkBaseContact.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkStoreContact.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactOperationBase.h>
+
+// System includes
+#include <StringLoader.h>
+#include <AknUtils.h>
+#include <AiwCommon.hrh>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::CPsu2FixedDialingInfoView
+// --------------------------------------------------------------------------
+//
+CPsu2FixedDialingInfoView::CPsu2FixedDialingInfoView
+ ( CPbk2UIExtensionView& aExtensionView,
+ CPsu2ViewManager& aViewManager ) :
+ CPsu2InfoViewBase( aExtensionView, aViewManager )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::~CPsu2FixedDialingInfoView
+// --------------------------------------------------------------------------
+//
+CPsu2FixedDialingInfoView::~CPsu2FixedDialingInfoView()
+ {
+ delete iFdnCall;
+ delete iContactLink;
+ delete iContact;
+ delete iContactRetriever;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::NewL
+// --------------------------------------------------------------------------
+//
+CPsu2FixedDialingInfoView* CPsu2FixedDialingInfoView::NewL
+ ( CPbk2UIExtensionView& aExtensionView,
+ CPsu2ViewManager& aViewManager )
+ {
+ CPsu2FixedDialingInfoView* self =
+ new ( ELeave ) CPsu2FixedDialingInfoView
+ ( aExtensionView, aViewManager );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::ConstructL()
+ {
+ BaseConstructL();
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::DoActivateL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::DoActivateL
+ ( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+ const TDesC8& aCustomMessage)
+ {
+ // Set up view
+ delete iViewActivationTransaction;
+ iViewActivationTransaction = NULL;
+ iViewActivationTransaction =
+ Phonebook2::Pbk2AppUi()->Pbk2ViewExplorer()->
+ HandleViewActivationLC( iExtensionView.Id(), aPrevViewId,
+ NULL, NULL, Phonebook2::EUpdateNaviPane );
+ CleanupStack::Pop(); //iViewActivationTransaction
+
+ // Call base class
+ CPsu2InfoViewBase::DoActivateL
+ ( aPrevViewId, aCustomMessageId, aCustomMessage );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::DoDeactivate
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::DoDeactivate()
+ {
+ CPsu2InfoViewBase::DoDeactivate();
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::HandleCommandKeyL
+// --------------------------------------------------------------------------
+//
+TBool CPsu2FixedDialingInfoView::HandleCommandKeyL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TBool ret = EFalse;
+
+ if ( aType == EEventKey )
+ {
+ if( aKeyEvent.iCode == EKeyPhoneSend )
+ {
+ CreateCallL( EPbk2CmdCall );
+ ret = ETrue;
+ }
+ else if( aKeyEvent.iCode == EKeyBackspace )
+ {
+ HandleCommandL( EPbk2CmdDeleteMe );
+ ret = ETrue;
+ }
+ else
+ {
+ if ( aKeyEvent.iScanCode == EStdKeyNo )
+ {
+ // 'Red' button pressed, clear PIN2 query info
+ iViewManager.SecUi().Reset();
+ }
+ }
+ }
+ else
+ {
+ ret = CPsu2InfoViewBase::HandleCommandKeyL( aKeyEvent, aType );
+ }
+
+ return ret;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::HandleCommandL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::HandleCommandL( TInt aCommand )
+ {
+ if ( Phonebook2::Pbk2AppUi()->ApplicationServices().CommandHandlerL()->
+ ServiceCmdByMenuCmd( aCommand ) == KAiwCmdCall )
+ {
+ if ( iViewManager.StoreAvailableL() )
+ {
+ CreateCallL( aCommand );
+ }
+ }
+ else
+ {
+ switch( aCommand )
+ {
+ 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;
+ }
+ case EPbk2CmdDeleteMe:
+ {
+ if ( iViewManager.SecUi().ConfirmPin2L() )
+ {
+ CPsu2InfoViewBase::HandleCommandL( aCommand );
+ }
+ break;
+ }
+ case EPbk2CmdExit:
+ case EAknCmdHideInBackground:
+ {
+ if ( aCommand == EAknCmdHideInBackground && iDlgEliminator )
+ {
+ iDlgEliminator->RequestExitL( EKeyEscape );
+ }
+
+ // Clear PIN2 query info
+ iViewManager.SecUi().Reset();
+ CPsu2InfoViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ default:
+ {
+ CPsu2InfoViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ };
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::DynInitMenuPaneL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ switch( aResourceId )
+ {
+ case R_PSU2_FIXED_DIALING_INFO_COPY_MENUPANE:
+ {
+ break;
+ }
+ case R_PSU2_FIXED_DIALING_INFO_MENUPANE:
+ {
+ break;
+ }
+ default:
+ {
+ CPsu2InfoViewBase::DynInitMenuPaneL( aResourceId, aMenuPane );
+ break;
+ }
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::NameListControlResourceId
+// --------------------------------------------------------------------------
+//
+TInt CPsu2FixedDialingInfoView::NameListControlResourceId() const
+ {
+ return 0;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::NaviPaneLabelL
+// --------------------------------------------------------------------------
+//
+HBufC* CPsu2FixedDialingInfoView::NaviPaneLabelL() const
+ {
+ HBufC* text = NULL;
+ if ( iViewManager.SecUi().IsFDNActive() )
+ {
+ text = StringLoader::LoadLC( R_QTN_FDN_ACTIVE );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( R_QTN_FDN_DEACTIVE );
+ }
+
+ CleanupStack::Pop(); // text
+ return text;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::UpdateCbasL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::UpdateCbasL()
+ {
+ // Set cba command set "Options - Context Menu - Back"
+ iExtensionView.Cba()->SetCommandSetL
+ ( R_PBK2_SOFTKEYS_OPTIONS_BACK_CONTEXT );
+ iExtensionView.Cba()->DrawDeferred();
+ // Set context menu
+ iExtensionView.MenuBar()->SetContextMenuTitleResourceId
+ ( R_PSU2_FIXED_DIALING_INFO_CONTEXT_MENUBAR );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::VPbkSingleContactOperationComplete
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::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);
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::VPbkSingleContactOperationFailed
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError )
+ {
+ if ( iContactRetriever == &aOperation )
+ {
+ delete iContactRetriever;
+ iContactRetriever = NULL;
+
+ CCoeEnv::Static()->HandleError(aError);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::ContactEditingCompletebasL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::ContactEditingComplete(
+ MVPbkStoreContact* aEditedContact )
+ {
+ PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+ ("CPsu2FixedDialingInfoView(%x)::ContactEditingComplete()"),
+ this);
+
+ iContact = aEditedContact;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::ContactEditingDeletedContact
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::ContactEditingDeletedContact(
+ MVPbkStoreContact* aEditedContact )
+ {
+ PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+ ("CPsu2FixedDialingInfoView(%x)::ContactEditingDeletedContact()"),
+ this);
+
+ delete aEditedContact; // not needed anymore
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::ContactEditingAborted
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::ContactEditingAborted()
+ {
+ // Do nothing
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::ContactOperationCompleted
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::ContactOperationCompleted(
+ TContactOpResult /*aResult*/ )
+ {
+ TRAPD(result, EditFdnContactL());
+
+ if (result != KErrNone)
+ {
+ CCoeEnv::Static()->HandleError(result);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::ContactOperationFailed
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::ContactOperationFailed(
+ TContactOp /*aOpCode*/,
+ TInt aErrorCode,
+ TBool /*aErrorNotified*/ )
+ {
+ CCoeEnv::Static()->HandleError(aErrorCode);
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::CreateCallL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::CreateCallL( TInt aCommand )
+ {
+ if ( !iFdnCall )
+ {
+ iFdnCall = CPsu2FixedDialingCall::NewL
+ ( Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager(),
+ *Phonebook2::Pbk2AppUi()->ApplicationServices().
+ CommandHandlerL(),
+ iExtensionView );
+ }
+
+ MVPbkContactLink* contactLink =
+ iControl->FocusedContactL()->CreateLinkLC();
+ CleanupStack::Pop(); // CreateCallL takes contactLink
+ iFdnCall->CreateCallL( contactLink, aCommand );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::EditFdnContactL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::EditFdnContactL()
+ {
+ PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+ ("CPsu2FixedDialingInfoView(%x)::EditFdnContactL()"), this);
+
+ // adjust focus
+ TInt focusedFieldIndex = KErrNotFound;
+ if (iControl)
+ {
+ focusedFieldIndex = iControl->FocusedFieldIndex();
+ }
+
+ TPbk2ContactEditorParams params;
+ if ( focusedFieldIndex != KErrNotFound )
+ {
+ params.iFocusedContactField =
+ FocusedFieldLC( *iContact );
+ }
+
+ TCoeHelpContext helpContext;
+ helpContext.iMajor.iUid = KPbk2UID3;
+ helpContext.iContext = KFDN_HLP_FDN_NUM_EDIT_VIEW;
+ 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;
+
+ // clean after dialog execution
+ if ( focusedFieldIndex != KErrNotFound )
+ {
+ CleanupStack::PopAndDestroy(); //params.iFocusedContactField
+ }
+
+ if ( iControl )
+ {
+ // If editing has been aborted we don't set focused contact.
+ if ( iContact )
+ {
+ // It is possible that the contact got changed while in edit
+ iControl->SetFocusedFieldIndex( params.iFocusedIndex );
+ iControl->SetFocusedContactL( *iContact );
+ delete iContact;
+ iContact = NULL;
+ }
+
+ // If contact got deleted in the editor, this call ensures
+ // that the contact info view is switched to the names list
+ iControl->UpdateAfterCommandExecution();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::FocusedFieldLC
+// --------------------------------------------------------------------------
+//
+MVPbkStoreContactField* CPsu2FixedDialingInfoView::FocusedFieldLC(
+ MVPbkStoreContact& aStoreContact )
+ {
+ CPbk2PresentationContact* presentationContact =
+ CPbk2PresentationContact::NewL( aStoreContact,
+ Phonebook2::Pbk2AppUi()->ApplicationServices().FieldProperties() );
+ CleanupStack::PushL( presentationContact );
+
+ TInt index = KErrNotFound;
+ if (iControl)
+ {
+ index = presentationContact->PresentationFields().StoreIndexOfField(
+ iControl->FocusedFieldIndex() );
+ }
+
+ CleanupStack::PopAndDestroy( presentationContact );
+
+ if ( index != KErrNotFound )
+ {
+ // Use FieldAtLC to avoid the unvalidity of the field after new
+ // FieldAt call.
+ return aStoreContact.Fields().FieldAtLC( index );
+ }
+ return NULL;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingInfoView::HandleControlEventL
+// --------------------------------------------------------------------------
+//
+void CPsu2FixedDialingInfoView::HandleControlEventL(
+ MPbk2ContactUiControl& aControl,
+ const TPbk2ControlEvent& aEvent )
+ {
+ switch ( aEvent.iEventType )
+ {
+ case TPbk2ControlEvent::EContactTapped:
+ case TPbk2ControlEvent::EContactDoubleTapped:
+ case TPbk2ControlEvent::EControlEnterKeyPressed:
+ {
+ HandleCommandL( EPbk2CmdEditMe );
+ break;
+ }
+ default:
+ {
+ CPsu2InfoViewBase::HandleControlEventL( aControl, aEvent );
+ break;
+ }
+ }
+ }
+
+// End of File