phoneuis/easydialing/inc/easydialingcontactdatamanager.h
branchRCL_3
changeset 62 5266b1f337bd
child 81 c26cc2a7c548
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingcontactdatamanager.h	Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,461 @@
+/*
+* 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 <MPbk2StoreConfigurationObserver.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactStoreListObserver.h>
+#include <MVPbkOperationObserver.h>
+#include <MVPbkContactViewBase.h>
+#include <TPbk2ImageManagerParams.h>
+#include <MPbkGlobalSetting.h> // For name order setting
+#include <MVPbkContactViewObserver.h>
+#include "easydialingcontactdata.h"
+
+// FORWARD DECLARATIONS
+class CPbk2StoreConfiguration;
+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 MVPbkContactStoreListObserver,
+        public MVPbkOperationErrorObserver,
+        public MVPbkOperationResultObserver<MVPbkContactViewBase*>,
+        public MPbk2StoreConfigurationObserver,
+        public MPbkGlobalSettingObserver,
+        public MVPbkContactViewObserver
+        
+    {
+public:
+    
+    /**
+     * Contact name display order 
+     */
+    enum TNameOrder
+        {
+        EFirstnameLastname,
+        ELastnameFirstname
+        };
+    
+public: // constructor and destructor
+    
+    /**
+    * Two-phased constructor
+    */
+    static CEasyDialingContactDataManager* NewL();
+    
+    /**
+     * Destructor.
+     */
+    ~CEasyDialingContactDataManager();
+    
+private: // constructors
+    /**
+    * Constructor.
+    */
+    CEasyDialingContactDataManager();
+    
+    
+    /**
+     * Second phase constructor of the class.
+     */
+    void ConstructL();
+    
+public: // new methods
+    /**
+    * Sets the observer. Observer is notified when thumbnail loading is complete
+    * @param aObserver
+    */
+    void SetObserver(MContactDataManagerObserver* aObserver);
+    
+    /**
+     * Gets a handle to the VPbk contact manager
+     */
+    CVPbkContactManager& ContactManager();
+    
+    /**
+    * 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 internal index for a contact item with the given internal ID.
+     */
+    TInt IndexForId( const TDesC& aId ) const;
+    
+    /**
+    * Gets the thumbnail for a contact item. If thumbnail is not loaded, starts
+    * loading it.
+    * @param aIndex Internal index for the contact, obtained with IndexForId
+    * @param aThumbnail Outparam. Contact thumbnail. NULL if contact doesn't have thumbnail
+    * @return true if contact data has been loaded
+    */
+    TBool GetThumbnail( TInt aIndex, CFbsBitmap*& aThumbnail );
+    
+    /**
+     * Checks if contact is a favorite contact
+     * @param   aIndex  Internal index fo the contact, obtained with IndexForId
+     * @return  ETrue if contact is a favorite contact
+     */
+    TBool IsFav( TInt aIndex ) const;
+    
+    /**
+     * Checks if contact is a SIM contact
+     * @param   aIndex  Internal index fo the contact, obtained with IndexForId
+     * @return  ETrue if contact is a SIM contact
+     */
+    TBool IsSimContact( TInt aIndex ) const;
+    
+    /**
+     * Checks if contact is a service number contact
+     * @param   aIndex  Internal index fo the contact, obtained with IndexForId
+     * @return  ETrue if contact is a service number contact
+     */
+    TBool IsSdnContact( TInt aIndex ) const;
+    
+    /**
+    * 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, TNameOrder aNameOrder );
+    
+    /**
+     * @return Contact name display order
+     */
+    TNameOrder NameOrder();
+
+    /**
+     * Get URIs of the contact stores which are currently shown in Phonebook.
+     * @param   aUris   On return, contains heap descriptors identifying the contact
+     *                  stores which are active. Ownership of the descriptors is given.
+     */
+    void GetCurrentStoreUrisL( RPointerArray<TDesC>& aUris );
+    
+    /**
+     * Pause the loading of contact data. This is used to make sure listbox is responsive
+     * and smooth during panning and flicking.
+     * @param aPause Pause on/off
+     */
+    void Pause( TBool aPause );
+
+public:
+    
+    /**
+     * From MPbk2ImageGetObserver.
+     */
+    void Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap);
+    
+    
+    /**
+     * From MPbk2ImageGetObserver.
+     */
+    void Pbk2ImageGetFailed(MPbk2ImageOperation& aOperation, TInt aError);
+
+public:
+    
+    /**
+     * From MPbk2StoreConfigurationObserver
+     */
+    void ConfigurationChanged();
+
+    /**
+     * From MPbk2StoreConfigurationObserver
+     */
+    void ConfigurationChangedComplete();
+    
+
+public:
+    
+    /**
+     * From MPbkGlobalSettingObserver.
+     */
+    void SettingChangedL( MPbkGlobalSetting::TPbkGlobalSetting aKey );
+    
+private: 
+    
+    /**
+     * From MVPbkSingleContactOperationObserver.
+     */
+    void VPbkSingleContactOperationComplete(
+            MVPbkContactOperationBase& aOperation,
+            MVPbkStoreContact* aContact );
+
+    
+    /**
+     * From MVPbkSingleContactOperationObserver.
+     */
+    void VPbkSingleContactOperationFailed(
+            MVPbkContactOperationBase& aOperation, 
+            TInt aError );
+
+private:
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void StoreReady( MVPbkContactStore& aContactStore );
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason );
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void HandleStoreEventL( MVPbkContactStore& aContactStore, 
+                            TVPbkContactStoreEvent aStoreEvent );
+    
+    /**
+     * From MVPbkContactStoreListObserver.
+     */
+    void OpenComplete();
+    
+private:
+    /**
+     * From MVPbkOperationErrorObserver.
+     */
+    void VPbkOperationFailed(
+            MVPbkContactOperationBase* aOperation,
+            TInt aError );
+
+private:
+    /**
+     * From MVPbkOperationResultObserver.
+     */
+    void VPbkOperationResultCompleted(
+            MVPbkContactOperationBase* aOperation,
+            MVPbkContactViewBase* aOperationResult );
+
+    
+private:
+    /**
+     * From MVPbkContactViewObserver.
+     * For observing changes to favourites view.
+     */
+    virtual void ContactViewReady(
+            MVPbkContactViewBase& aView );
+
+    virtual void ContactViewUnavailable(
+            MVPbkContactViewBase& aView );
+
+    virtual void ContactAddedToView(
+            MVPbkContactViewBase& aView, 
+            TInt aIndex, 
+            const MVPbkContactLink& aContactLink );
+
+    virtual void ContactRemovedFromView(
+            MVPbkContactViewBase& aView, 
+            TInt aIndex, 
+            const MVPbkContactLink& aContactLink );
+
+    virtual void ContactViewError(
+            MVPbkContactViewBase& aView, 
+            TInt aError, 
+            TBool aErrorNotified );
+
+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();
+    
+    void UpdateNameOrderL();
+    
+    void SetupFavStoreSearchedL();
+    
+    void SetStoreFlagsForContact( CEasyDialingContactData* aContactData ) const;
+
+private:
+    /** Phonebook store configuration. Owned. */
+    CPbk2StoreConfiguration* iPbkStoreConfiguration;
+    
+    /** 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. 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;
+
+    /** 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;
+        
+    /** Favourites view is ready to be used. */
+    TBool iFavsViewReady;
+    
+    /** Contact store containing favourite contacts is configured to be searched. */
+    TBool iFavStoreSearched;
+    
+    /** Virtual phonebook operation handle for getting favourites. Owned. */
+    MVPbkContactOperationBase* iFavsOperation;
+    
+    /** Phonebook settings interface. */
+    MPbkGlobalSetting* iPbkSettings;
+    
+    /** Contact name display order. */
+    TNameOrder iNameOrder;
+    
+    /** Contact data manager pause status */
+    TBool iPause;
+    };
+
+#endif //__EASYDIALINGTHUMBNAILMANAGER_H__