phonebookui/Phonebook2/inc/CPbk2ContactRelocator.h
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /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