phoneuis/easydialing/inc/easydialingcontactdatamanager.h
branchRCL_3
changeset 9 8871b09be73b
child 14 24062c24fe38
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcontactdatamanager.h	Fri Feb 19 22:50:26 2010 +0200
@@ -0,0 +1,322 @@
+/*
+* Copyright (c) 2010 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:  Easy dialing contact data manager.
+*
+*/
+
+
+#ifndef __EASYDIALINGCONTACTDATAMANAGER_H__
+#define __EASYDIALINGCONTACTDATAMANAGER_H__
+
+#include <MPbk2ImageOperationObservers.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactStoreObserver.h>
+#include <MVPbkOperationObserver.h>
+#include <MVPbkContactViewBase.h>
+#include <CPbkContactEngine.h>  // for TPbkNameOrder
+#include <TPbk2ImageManagerParams.h>
+#include "easydialingcontactdata.h"
+
+// FORWARD DECLARATIONS
+class CVPbkContactManager;
+class MContactDataManagerObserver;
+class MVPbkFieldType;
+class CPbk2ImageManager;
+class CVPbkTopContactManager;
+class CRepository;
+
+/**
+ *  CEasyDialingContactDataManager
+ *  Handles the loading and storing of thumbnail bitmaps
+ */
+class CEasyDialingContactDataManager : 
+        public CBase,
+        public MPbk2ImageGetObserver,
+        public MVPbkSingleContactOperationObserver,
+        public MVPbkContactStoreObserver,
+        public MVPbkOperationErrorObserver,
+        public MVPbkOperationResultObserver<MVPbkContactViewBase*>
+        
+    {
+public:
+    
+    
+    /**
+    * Constructor.
+    */
+    CEasyDialingContactDataManager(CVPbkContactManager* aContactManager);
+    
+    
+    /**
+     * Destructor.
+     */
+    ~CEasyDialingContactDataManager();
+    
+    
+    /**
+     * Second phase constructor of the class.
+     */
+    void ConstructL();
+    
+    /**
+    * Sets the observer. Observer is notified when thumbnail loading is complete
+    * @param aObserver
+    */
+    void SetObserver(MContactDataManagerObserver* aObserver);
+    
+    /**
+    * Sets the size of the thumbnails. If the loaded thumbnail is larger than
+    * the set size, thumnail is scaled to the size. If the set size is different
+    * from the old one, deletes all loaded thumbnails, which causes them to be
+    * reloaded when they are needed the next time.
+    * @param aSize The size of the thumbnails
+    */
+    void SetThumbnailSize(const TSize& aSize);
+    
+    /**
+    * Gets an id string for the thumbnail, if thumbnail exists for the contact.
+    * Used when the listbox items are created.
+    * @param aContact Contact link
+    * @param aMatchThumbnail If true, tries to match the link to the existing thumbnails
+    * @param aFav Is this contact a favourite
+    * @return id string. caller needs to delete this.
+    */
+    HBufC* GetThumbnailIdL( MVPbkContactLink* aContact, TBool aMatchThumbnail, TBool aFav );
+    
+    /**
+    * Gets the thumbnail for a contact item. If thumbnail is not loaded, starts
+    * loading it.
+    * @param aContact Contact link
+    * @param aThumbnail Outparam. Contact thumbnail. NULL if contact doesn't have thumbnail
+    * @param aFav Outparam. Favourite status
+    * @return true if contact data has been loaded
+    */
+    TBool GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav);
+    
+    /**
+    * Deletes all loaded thumbnails and cancel asynchronous operations.
+    */
+    void Reset();
+    
+    /**
+    * Returs ETrue if voice call is available for current contact.
+    */
+    TBool VoiceCallAvailable( TInt aIndex );
+    
+    
+    /**
+    * Returs ETrue if video call is available for current contact.
+    */
+    TBool VideoCallAvailable( TInt aIndex );
+    
+    
+    /**
+    * Returs ETrue if uni-editor is available for current contact.
+    */
+    TBool UniEditorAvailable( TInt aIndex );
+    
+    
+    /**
+    * Returns HBufC8 descriptor containing MVPbkContactLink
+    * link packaged.
+    */
+    HBufC8* ContactLinkLC( TInt aIndex );
+    
+    
+    /**
+     * Sets the iContactThumbnailSetting member variable to either true or false 
+     * which is read and if it is false then thumbnails are not shown 
+     * @param aContactThumbnailSetting which is cenrep value for ContactThumbnailSetting
+     */
+    void SetContactThumbnailSetting( TInt aContactThumbnailSetting );
+    
+    /**
+     * Gets the iContactThumbnailSetting member variable to either true or false 
+     * which is read and if it is false then thumbnails are not shown 
+     * returns iContactThumbnailSetting which is cenrep value for ContactThumbnailSetting
+     */
+    TBool GetContactThumbnailSetting( );
+    
+
+    /**
+    * Flushes the asynchronous contact data of all contacts.
+    */    
+    void Reload();
+    
+    /**
+    * Checks if contact link is a favourite. This is meant to be used for contacts that
+    * don't yet have contact data item. Since this needs to go through all the favourites,
+    * unnecessary calls should be avoided.
+    */    
+    TBool IsFavL( MVPbkContactLink* aLink );
+    
+    /**
+    * @return the number of favourites in contact db
+    */
+    TInt NumberOfFavsL();
+    
+    /**
+    * Creates contact link to a favourite contact.
+    * @param aIndex Index of the favourite in favourites view
+    * @return the newly created link (added to cleanupstack)
+    */
+    MVPbkContactLink* FavLinkLC( TInt aIndex );
+
+    /**
+    * Creates contact string for favourite contact. This string can be used directly
+    * in the contact listbox. F.ex. "Firstname Surname\tCompanyname".
+    * @param aIndex Index of the favourite in favourites view
+    * @param aNameOrder Name ordering to be used
+    * @return the newly created string (added to cleanupstack)
+    */
+    HBufC* FavContactStringLC( TInt aIndex, CPbkContactEngine::TPbkNameOrder aNameOrder );
+
+public:
+    
+    
+    /**
+     * From MPbk2ImageGetObserver.
+     */
+    void Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap);
+    
+    
+    /**
+     * From MPbk2ImageGetObserver.
+     */
+    void Pbk2ImageGetFailed(MPbk2ImageOperation& aOperation, TInt aError);
+
+private: 
+
+    
+    /**
+     * From MVPbkSingleContactOperationObserver.
+     */
+    void VPbkSingleContactOperationComplete(
+            MVPbkContactOperationBase& aOperation,
+            MVPbkStoreContact* aContact );
+
+    
+    /**
+     * From MVPbkSingleContactOperationObserver.
+     */
+    void VPbkSingleContactOperationFailed(
+            MVPbkContactOperationBase& aOperation, 
+            TInt aError );
+
+private:
+    
+    
+    /**
+     * From MVPbkContactStoreObserver.
+     */
+    void StoreReady( MVPbkContactStore& aContactStore );
+
+
+    /**
+     * From MVPbkContactStoreObserver.
+     */
+    void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason );
+    
+    
+    /**
+     * From MVPbkContactStoreObserver.
+     */
+    void HandleStoreEventL( MVPbkContactStore& aContactStore, 
+            TVPbkContactStoreEvent aStoreEvent );
+
+private:
+    /**
+     * From MVPbkOperationErrorObserver.
+     */
+    void VPbkOperationFailed(
+            MVPbkContactOperationBase* aOperation,
+            TInt aError );
+
+private:
+    /**
+     * From MVPbkOperationResultObserver.
+     */
+    void VPbkOperationResultCompleted(
+            MVPbkContactOperationBase* aOperation,
+            MVPbkContactViewBase* aOperationResult );
+
+private:
+       
+    void InitReady();
+    
+    TInt FindContactIndex( MVPbkContactLink* aContact );
+    
+    void LoadNextContactDataL();
+    
+    void DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex);
+    
+    void HandleError(TInt aError);
+    
+    void DoHandleContactOperationCompleteL( MVPbkStoreContact* aContact, TInt aIndex);
+    
+    void GetAvailableServicesL( MVPbkStoreContact* aContact, TInt aIndex );
+    
+    void InformObserver();
+
+private:
+    /** Array that contains all loaded contact data. Owned. */
+    RPointerArray<CEasyDialingContactData> iContactDataArray;
+
+    /** Array that contains indexes of thumbnails that are waiting to be loaded. Owned. */
+    RArray<TInt> iWaitingContacts;
+
+    /** Phonebook image manager. Owned. */
+    CPbk2ImageManager* iImageManager;
+    
+    /** Parameters for image manager. Contains info about the size of thumbnails. */
+    TPbk2ImageManagerParams iImageManagerParams;
+    
+    /** Field type. Not owned. */
+    const MVPbkFieldType* iThumbnailFieldType;
+    
+    /** Image loading operation. Owned. */
+    MPbk2ImageOperation* iImageOperation;
+    
+    /** Contact item for which a thumbnail is being loaded. Owned. */
+    MVPbkStoreContact* iStoreContact;
+    
+    /** Virtual phonebook contact manager. Not owned. */
+    CVPbkContactManager* iContactManager;
+
+    /** Contact data manager observer. Not owned. */
+    MContactDataManagerObserver* iObserver;
+
+    /** Top (i.e. favourite) contacts manager. Owned. */
+    CVPbkTopContactManager* iVPbkTopContactManager;
+    
+    /** Virtual phonebook operation handle. Owned. */
+    MVPbkContactOperationBase* iContactOperation;
+
+    /** Default contact store. Not owned. */
+    MVPbkContactStore* iContactStore;
+    
+    /** Variable which tells either to show or hide contact thumbnails. */
+    TBool iContactThumbnailSetting;
+    
+    /** ETrue if asynchronous opening of the contac store is ready. */
+    TBool iStoreReady;
+    
+    /** View to vpbk containing all favourite contacts. Owned. */
+    MVPbkContactViewBase* iFavsView;
+        
+    /** Virtual phonebook operation handle for getting favourites. Owned. */
+    MVPbkContactOperationBase* iFavsOperation;
+    };
+
+#endif //__EASYDIALINGTHUMBNAILMANAGER_H__