--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/inc/CPbk2ContactRelocator.h Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,326 @@
+/*
+* 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 contacts relocator.
+*
+*/
+
+
+#ifndef CPBK2CONTACTRELOCATOR_H
+#define CPBK2CONTACTRELOCATOR_H
+
+// INCLUDES
+#include <e32base.h>
+#include <MVPbkContactStoreObserver.h>
+#include <MVPbkContactCopyObserver.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactObserver.h>
+
+// FORWARD DECLARATIONS
+class MVPbkStoreContact;
+class MVPbkContactOperationBase;
+class CVPbkContactLinkArray;
+class MVPbkContactStore;
+class MPbk2ContactRelocatorObserver;
+class MVPbkContactCopyPolicy;
+class CVPbkContactCopyPolicyManager;
+class MVPbkContactLinkArray;
+class CAknQueryDialog;
+class CPbk2ApplicationServices;
+
+// CLASS DECLARATION
+
+namespace Pbk2ContactRelocator {
+
+/**
+ * Query policy.
+ */
+enum TPbk2ContactRelocationQueryPolicy
+ {
+ /// Do not display any queries
+ EPbk2DisplayNoQueries,
+ /// Display 'copy %U to phone memory' query
+ EPbk2DisplayBasicQuery,
+ /// Display 'store does not support, copy/move to %U memory' query
+ EPbk2DisplayStoreDoesNotSupportQuery
+ };
+
+ /**
+ * Relocation policy.
+ */
+enum TPbk2ContactRelocationPolicy
+ {
+ /// Copy contact to phone memory, value used from CenRep
+ EPbk2CopyContactToPhoneMemory,
+ /// Move contact to phone memory, value used from CenRep
+ EPbk2MoveContactToPhoneMemory,
+ /// Copy contact to phone memory and lock it
+ EPbk2CopyContactToPhoneMemoryAndLock,
+ /// Move contact to phone memory and lock it
+ EPbk2MoveContactToPhoneMemoryAndLock
+ };
+} /// namespace
+
+/**
+ * Phonebook 2 contacts relocator.
+ */
+class CPbk2ContactRelocator : public CActive,
+ public MVPbkContactStoreObserver,
+ public MVPbkContactCopyObserver,
+ public MVPbkSingleContactOperationObserver,
+ public MVPbkContactObserver
+ {
+ public: // Data structure
+
+ enum TFlags
+ {
+ /// The contact exists in the store and can be deleted
+ /// if the relocation policy is to move contact.
+ EPbk2RelocatorExistingContact = 0x01,
+ /// Relocator assumes that contact is new and doesn't try to
+ /// delete the contact if the policy is move contact.
+ EPbk2RelocatorNewContact = 0x02
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Creates and returns a new instance of this class.
+ *
+ * @return A new instance of this class.
+ */
+ IMPORT_C static CPbk2ContactRelocator* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CPbk2ContactRelocator();
+
+ public: // Interface
+
+ /**
+ * Relocates given contact to phone memory store.
+ *
+ * @param aContact The contact to relocate. Ownership of
+ * the contact is taken.
+ * @param aObserver Observer for the relocation process.
+ * @param aQueryPolicy Query policy.
+ * @param aFlags A set of TFlags
+ * @return ETrue if user has accepted relocation, otherwise EFalse.
+ * NOTE! Do not delete relocator instance. Relocator will
+ * be completed asynchronusly through aObserver.
+ */
+ IMPORT_C TBool RelocateContactL(
+ MVPbkStoreContact* aContact,
+ MPbk2ContactRelocatorObserver& aObserver,
+ Pbk2ContactRelocator::TPbk2ContactRelocationQueryPolicy
+ aQueryPolicy,
+ TUint32 aFlags );
+
+ /**
+ * Relocates given contact to phone memory store.
+ * After the contact has been relocated, the contact
+ * is locked.
+ *
+ * @param aContact The contact to relocate. Ownership of
+ * the contact is taken.
+ * @param aObserver Observer for the relocation process.
+ * @param aQueryPolicy Query policy.
+ * @param aFlags A set of TFlags
+ * @return ETrue if user has accepted relocation, otherwise EFalse.
+ * NOTE! Do not delete relocator instance. Relocator will
+ * be completed asynchronusly through aObserver.
+ */
+ IMPORT_C TBool RelocateAndLockContactL(
+ MVPbkStoreContact* aContact,
+ MPbk2ContactRelocatorObserver& aObserver,
+ Pbk2ContactRelocator::TPbk2ContactRelocationQueryPolicy
+ aQueryPolicy,
+ TUint32 aFlags );
+
+ /**
+ * Relocates given contacts to phone memory store.
+ *
+ * @param aContacts The contacts to relocate. Ownership of
+ * the link array is taken.
+ * @param aObserver Observer for the relocation process.
+ * @param aQueryPolicy Query policy, this function ignores
+ * this parameter currently.
+ * @return ETrue if user has accepted relocation, otherwise EFalse.
+ * NOTE! Do not delete relocator instance. Relocator will
+ * be completed asynchronusly through aObserver.
+ */
+ IMPORT_C TBool RelocateContactsL(
+ CVPbkContactLinkArray* aContacts,
+ MPbk2ContactRelocatorObserver& aObserver,
+ Pbk2ContactRelocator::TPbk2ContactRelocationQueryPolicy
+ aQueryPolicy );
+
+ /**
+ * Checks is the given contact a phone memory contact.
+ *
+ * @param aContact The contact to inspect.
+ * @return ETrue if aContact belongs to phone memory store.
+ */
+ IMPORT_C TBool IsPhoneMemoryContact(
+ const MVPbkStoreContact& aContact ) const;
+
+ /**
+ * Inspects is phone memory part of the current Phonebook 2
+ * store configuration.
+ *
+ * @return ETrue if phone memory belongs to configuration.
+ */
+ IMPORT_C TBool IsPhoneMemoryInConfigurationL() const;
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(
+ TInt aError );
+
+ private: // From MVPbkContactStoreObserver
+ void StoreReady(
+ MVPbkContactStore& aContactStore );
+ void StoreUnavailable(
+ MVPbkContactStore& aContactStore,
+ TInt aReason );
+ void HandleStoreEventL(
+ MVPbkContactStore& aContactStore,
+ TVPbkContactStoreEvent aStoreEvent );
+
+ private: // From MVPbkContactCopyObserver
+ void FieldAddedToContact(
+ MVPbkContactOperationBase& aOperation );
+ void FieldAddingFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError );
+ void ContactsSaved(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkContactLinkArray* aResults );
+ void ContactsSavingFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError );
+
+ private: // From MVPbkSingleContactOperationObserver
+ void VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact );
+ void VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError );
+
+ private: // From MVPbkContactObserver
+ void ContactOperationCompleted(
+ TContactOpResult aResult );
+ void ContactOperationFailed(
+ TContactOp aOpCode,
+ TInt aErrorCode,
+ TBool aErrorNotified );
+
+ private: // Data structures
+ /**
+ * Relocaltion query type
+ */
+ enum TPbk2RelocationQueryType
+ {
+ /// No relocation query
+ EPbk2NoRelocationQuery,
+ /// §qtn.phob.query.copy.to.store§ query
+ EPbk2CopyOneToStoreQuery,
+ /// §qtn.phob.query.move.to.store§ query
+ EPbk2MoveOneToStoreQuery,
+ /// §qtn.phob.query.copy.to.phone.mem§ query
+ EPbk2CopyOneToPhoneQuery,
+ /// §qtn.phob.query.move.to.phone.mem§ query
+ EPbk2MoveOneToPhoneQuery,
+ /// §qtn.phob.query.copy.many.to.store§ query
+ EPbk2CopyManyToStoreQuery,
+ /// §qtn.phob.query.move.many.to.store§
+ EPbk2MoveManyToStoreQuery
+ };
+
+ private: // Implementation
+ CPbk2ContactRelocator();
+ void ConstructL();
+ Pbk2ContactRelocator::TPbk2ContactRelocationPolicy ReadRelocationPolicyL();
+ void OpenTargetStoreL();
+ void DoRelocateContactL();
+ void InitCopyPolicyL();
+ void DoHandleContactRelocated();
+ void DeleteSourceContact();
+ TBool AskConfirmationL(
+ MVPbkStoreContact* aContact,
+ CVPbkContactLinkArray* aContacts,
+ TPbk2RelocationQueryType aRelocationQueryType );
+ void RetrieveSavedContactL(
+ const MVPbkContactLink& aLink );
+ void VerifyPolicy(
+ MVPbkStoreContact* aContact, TUint32 aFlags );
+ TBool PrepareToRelocateContactL(
+ MVPbkStoreContact* aContact,
+ CVPbkContactLinkArray* aContacts,
+ MPbk2ContactRelocatorObserver& aObserver,
+ Pbk2ContactRelocator::TPbk2ContactRelocationQueryPolicy
+ aQueryPolicy,
+ TUint32 aFlags );
+ void CopyContactL(
+ MVPbkStoreContact& aContact );
+ void FinalizeIfReady();
+ TPbk2RelocationQueryType SelectRelocationQueryType(
+ MVPbkStoreContact* aContact,
+ CVPbkContactLinkArray* aContacts,
+ Pbk2ContactRelocator::TPbk2ContactRelocationQueryPolicy
+ aQueryPolicy );
+ void IssueRequest();
+
+ private: // Data
+ /// Own: Relocation policy
+ Pbk2ContactRelocator::TPbk2ContactRelocationPolicy iRelocationPolicy;
+ /// Own: Relocation policy
+ Pbk2ContactRelocator::TPbk2ContactRelocationPolicy iActivePolicy;
+ /// Ref: Target store for copied contacts
+ MVPbkContactStore* iTargetStore;
+ /// Own: Indication of target store state
+ TBool iTargetStoreOpen;
+ /// Own: Copy policy manager
+ CVPbkContactCopyPolicyManager* iCopyPolicyManager;
+ /// Ref: Copy policy
+ MVPbkContactCopyPolicy* iCopyPolicy;
+ /// Own: Contact retriever
+ MVPbkContactOperationBase* iSavedContactsRetriever;
+ /// Own: Relocatable contact retriever
+ MVPbkContactOperationBase* iContactRetriever;
+ /// Own: Copy operation
+ MVPbkContactOperationBase* iContactCopier;
+ /// Own: Relocated contact
+ MVPbkStoreContact* iRelocatedContact;
+ /// Ref: Observer for the relocation process
+ MPbk2ContactRelocatorObserver* iObserver;
+ /// Own: The contact to relocate
+ MVPbkStoreContact* iSourceContact;
+ /// Own: The contacts to relocate
+ CVPbkContactLinkArray* iSourceContacts;
+ /// Own: Error code for asynchronous error notification
+ TInt iErrorCode;
+ /// Own: Query dialog
+ CAknQueryDialog* iQueryDialog;
+ /// Own: To check is this destroyed
+ TBool* iDestroyedPtr;
+ /// Own: Application services
+ CPbk2ApplicationServices* iAppServices;
+ };
+
+#endif // CPBK2CONTACTRELOCATOR_H
+
+// End of File