diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/CommandsExtension/inc/CPbk2MergeContactsCmd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/CommandsExtension/inc/CPbk2MergeContactsCmd.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2009 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 merge contacts command. + * + */ + +#ifndef CPBK2MERGECONTACTSCMD_H +#define CPBK2MERGECONTACTSCMD_H + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CPbk2MergeResolver.h" +#include +#include + +// FORWARD DECLARATIONS +class MPbk2ContactUiControl; +class MVPbkContactOperationBase; +class CVPbkContactManager; +class MPbk2DialogEliminator; +class CVPbkContactStoreUriArray; +class CPbk2MergeResolver; +class CPbk2ApplicationServices; +class CAknNavigationDecorator; +class CImageDecoder; +class CFbsBitmap; +class CVPbkContactLinkArray; +class MVPbkStoreContactField; + +// CLASS DECLARATION +/** + * Phonebook 2 merge contacts command. + */ +class CPbk2MergeContactsCmd : public CActive, + public MPbk2Command, + private MPbk2FetchDlgObserver, + private MVPbkContactSelector, + private MVPbkContactViewObserver, + private MVPbkSingleContactOperationObserver, + private MVPbkBatchOperationObserver, + private MPbk2ExitCallback, + private MPbk2ProcessDecoratorObserver, + private MVPbkContactObserver + { +public: + // Construction and destruction + + /** + * Creates a new instance of this class. + * + * @param aUiControl The UI control. + * + * @return A new instance of this class. + */ + static CPbk2MergeContactsCmd* NewL(MPbk2ContactUiControl& aUiControl); + + /** + * Destructor. + */ + ~CPbk2MergeContactsCmd(); + +private: // From MVPbkContactSelector + TBool IsContactIncluded( + const MVPbkBaseContact& aContact ); + +private: // MPbk2ExitCallback + TBool OkToExitL(TInt aCommandId); + +private: //From MPbk2Command + void ExecuteLD(); + void ResetUiControl(MPbk2ContactUiControl& aUiControl); + void AddObserver(MPbk2CommandObserver& aObserver); + +private: // From MVPbkContactViewObserver + void ContactViewReady(MVPbkContactViewBase& aView); + void ContactViewUnavailable(MVPbkContactViewBase& aView); + void ContactAddedToView(MVPbkContactViewBase& aView, TInt aIndex, + const MVPbkContactLink& aContactLink); + void ContactRemovedFromView(MVPbkContactViewBase& aView, TInt aIndex, + const MVPbkContactLink& aContactLink); + void ContactViewError(MVPbkContactViewBase& aView, TInt aError, + TBool aErrorNotified); + +private: // From MVPbkSingleContactOperationObserver + void VPbkSingleContactOperationComplete( + MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ); + void VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& aOperation, TInt aError ); + +private: //Construction + CPbk2MergeContactsCmd(MPbk2ContactUiControl& aUiControl); + void ConstructL(); + +private: //From CActive + void RunL(); + TInt RunError(TInt aError); + void DoCancel(); + +private: // From MPbk2FetchDlgObserver + MPbk2FetchDlgObserver::TPbk2FetchAcceptSelection AcceptFetchSelectionL( + TInt aNumMarkedEntries, MVPbkContactLink& aLastSelection); + void FetchCompletedL(MVPbkContactLinkArray* aMarkedEntries); + void FetchCanceled(); + void FetchAborted(); + TBool FetchOkToExit(); + +private: // From MVPbkBatchOperationObserver + void StepComplete( + MVPbkContactOperationBase& aOperation, + TInt aStepSize ); + TBool StepFailed( + MVPbkContactOperationBase& aOperation, + TInt aStepSize, + TInt aError ); + void OperationComplete( + MVPbkContactOperationBase& aOperation ); + +private: // From MVPbkContactObserver + void ContactOperationCompleted( TContactOpResult aResult ); + void ContactOperationFailed + ( TContactOp aOpCode, TInt aErrorCode, TBool aErrorNotified ); +private: // From MPbk2ProcessDecoratorObserver + void ProcessDismissed( TInt aCancelCode ); + +private: // Implementation + enum TPhase + { + EPhaseNone, + EPhaseGetSelection, + EPhaseGetStoreContacts, + EPhaseMerge, + EPhaseResolveConflicts, + EPhaseResolvePhotoConflict, + EPhaseCreateMergedContact, + EPhaseGetGroups, + EPhaseAddGroups, + EPhaseFinish + }; + + void GetContactsFromUiFetchL(); + void Finish(TInt aReason); + void StartNext(TPhase aPhase); + void StartNext(); + void CleanAfterFetching(); + TBool IsFromReadOnlyStore( + const MVPbkContactLink& aContactLink ) const; + void RetrieveContactL( const MVPbkContactLink& aContactLink ); + void NotifyObservers(); + void SetTitlePaneL( TBool aCustom ); + void CheckPhotoConflictL(); + void ResolvePhotoConflictL(); + void ResolveAllPhotoConflicts( + EPbk2ConflictedNumber aConflictResolutionNumber ); + void InitBitmapL( CFbsBitmap*& aBitmap, TDesC8& aData ); + void AddFieldToMergedContactL( MVPbkStoreContactField& field ); + HBufC* ContactAsStringLC( MVPbkStoreContact* aStoreContact ); + void ShowContactsMergedNoteL(); + void GetStoreContactsL(); + void ResolveConflictsL(); + void FinalizeMergeL(); + void DeleteSourceContactsL(); + void DeleteMergedContact(); + void DeleteMergedContactL(); + void GetGroupsL(); + void AutomaticMergeL(); + void AddGroupsL(); + +private: // Data + + // Own: CPbk2MergeContactsCmd phase + TPhase iNextPhase; + + /// Ref + MPbk2CommandObserver* iCommandObserver; + + /// Ref + MPbk2ContactUiControl *iUiControl; + + /// Not own: contact manager + CVPbkContactManager* iContactManager; + + /// Own: all contacts view sans read-only stores + // Not constructed if current store configuration doesn't include + // read-only stores + MVPbkContactViewBase* iAllContactsView; + + /// Not own: Used to getting view notifications + MVPbkContactViewBase* iObservedView; + + /// Own: reference to the fetch dlg, to insure is deleted + MPbk2DialogEliminator* iFetchDlgEliminator; + + /// Own: Store uris used for the fetch dlg + CVPbkContactStoreUriArray* iStoreUris; + + //Own: Fitst contact for merging + MVPbkContactLink* iContactFirst; + + //Own: Second contact for merging + MVPbkContactLink* iContactSecond; + + //Own: Merged contact + MVPbkContactLink* iMergedContactLink; + + /// Own: First store contact + MVPbkStoreContact* iStoreContactFirst; + + /// Own: Second store contact + MVPbkStoreContact* iStoreContactSecond; + + /// Own: Merged store contact + MVPbkStoreContact* iMergedContact; + + // Own: Merge resolver + CPbk2MergeResolver* iMergeResolver; + + /// Own: Retrieve operation + MVPbkContactOperationBase* iRetrieveOperation; + + /// Own: Delete operation + MVPbkContactOperationBase* iDeleteOperation; + + /// Own: Commit operation + MVPbkContactOperationBase* iCommitOperation; + + /// Own: Delete merged contact operation + MVPbkContactOperationBase* iDeleteMergedOperation; + + /// Own: Results + CVPbkContactLinkArray* iContactsToDelete; + + /// Own: Results + CArrayPtrFlat* iContactToCommit; + + /// Own: Application Services pointer + CPbk2ApplicationServices* iAppServices; + + /// Own: Image field data from first contact + TPtrC8 iDataFirst; + + /// Own: Image field data from second contact + TPtrC8 iDataSecond; + + /// Own: Conflict image from first contact + CFbsBitmap* iBitmapFirst; + + /// Own: Conflict image from second contact + CFbsBitmap* iBitmapSecond; + + /// Own: Converts images of any type to bitmaps + CImageDecoder* iImgDecoder; + + /// Own: Index of photo conflict + // KErrNotFound if conflit does not exist + TInt iPhotoConflictIndex; + + /// Own: Count of image type conflicts + TInt iImageTypeConflictsCount; + + /// Own: All groups for merged contact + CArrayPtrFlat* iGroupsToAdd; + + /// Own: Groups links array of first contact + CVPbkContactLinkArray* iGroupLinksFirst; + + /// Own: Groups links array of second contact + CVPbkContactLinkArray* iGroupLinksSecond; + + /// Own: Waiting note + MPbk2ProcessDecorator* iWaitDecorator; + }; + +#endif // CPBK2MERGECONTACTSCMD_H +// End of File