phonebookui/Speeddial/VPbkControlInc/speeddialprivate.h
changeset 0 e686773b3f54
child 26 0d28c1c5b6dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Speeddial/VPbkControlInc/speeddialprivate.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,719 @@
+/*
+* Copyright (c) 2006-2006 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:     This file contains the definition of CSpdiaDialogs class.
+*
+*/
+
+
+
+
+
+#ifndef SPEEDDIALPRIVATE_H
+#define SPEEDDIALPRIVATE_H
+
+#include <e32base.h>
+#include <coecntrl.h>
+#include <MPbk2ImageOperationObservers.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactFindObserver.h>
+#include <MVPbkContactAttributeManager.h>
+
+#include <MVPbkStoreContact.h>
+#include <AknUtils.h>
+
+#include <CPbk2ImageManager.h>
+#include <MVPbkContactViewObserver.h>
+
+#include <AiwCommon.h>
+#include <AiwContactSelectionDataTypes.h>
+#include <AiwContactAssignDataTypes.h>
+
+#include <MVPbkContactStoreObserver.h>
+#include <MVPbkContactObserver.h>
+#include "CVPbkContactManager.h"
+#include "centralrepository.h"
+
+// Forward Declarations
+class TSpdiaIndexDataVPbk;
+class CSpdiaGridVPbk;
+class CAknGrid;
+class CAknQueryDialog;
+class CSpdiaGridDlgVPbk;
+class CVPbkSpeedDialAttribute;
+class CVPbkContactLinkArray;
+class TPbk2IconId;
+class MVPbkContactAttribute;
+class CAiwServiceHandler;
+class MRefreshObserver;
+
+const TInt KArraySize =9;
+//for the timebeing..
+#define KErrCancelled 0x99
+
+NONSHARABLE_CLASS( CSpeedDialPrivate ) : public CCoeControl, public MPbk2ImageGetObserver,
+										 public MVPbkSingleContactOperationObserver,
+										 public MVPbkSetAttributeObserver,
+										 public MVPbkContactFindObserver,
+										 public MVPbkContactStoreObserver,
+										 public MAiwNotifyCallback,
+										 public MVPbkContactObserver
+										 
+{
+public:
+
+		enum eSpeedDialState
+		{
+			STATE_IDLE = 0,
+			STATE_INITIAL,
+			STATE_CONTACTCHANGE,
+			STATE_ASSIGN,
+			STATE_REMOVE	
+		};
+		
+		 // The type of the caller application.
+	    enum TGridUse
+	    {
+	    	EGridUse,               // SpeedDial
+	    	EGridUseAndUpdate,      // PhoneBook
+	    	EGridNoUse              // PhoneClient
+	    };
+			/**
+	    * Creates a new instace of this class.
+	    *
+	    */
+		IMPORT_C static CSpeedDialPrivate* NewL(CVPbkContactManager* aContactManager);
+			
+        /**
+        * The number of voice mail returned, if voice mail is assigned.
+        * Note: If the location is empty, required dialog
+        * will be displayed and voice mail will be defined.
+        *
+        * @param aNumber    reference of phone number.
+        * @retunr   EFalse if user cancel or failed.
+        */
+        IMPORT_C TBool VoiceMailL(TDes& aNumber);
+        
+        /**
+        * The number of voice mail returned, if voice mail is assigned.
+        * Note: If the location is empty, required dialog
+        * will be displayed and voice mail will be defined.
+        *
+        * @param aNumber    reference of phone number.
+        * @retunr   EFalse if user cancel or failed.
+        */
+        IMPORT_C TBool ExVoiceMailL(TDes& aNumber);
+        
+        IMPORT_C TBool ExVideoMailL(TDes& aNumber);
+        /**
+        * The value converted into the index of an array from
+        * the location of speeddial is returned.
+        *
+        * @param aDial      a location of speed dial.
+        * @return   the index of a speeddial index data, if not found -1
+        */
+        IMPORT_C TInt Index(TInt aDial) const;
+        
+        /**
+        * The value converted into the the location of speeddial
+        * from index of an array is returned.
+        *
+        * @param aIndex     a index of array.
+        * @return   location of speed dial(1-9), if not found -1
+        */
+        IMPORT_C TInt Number(TInt aIndex) const;
+        
+        /**
+        * Returns the phone number of a speed dial contact.
+        * Note: left and right spaces are removed.
+        *
+        * @param aIndex     a index of array.
+        */
+        IMPORT_C const TDesC& PhoneNumber(TInt aIndex) const;
+        
+          
+        /**
+        * Returns the thumbnail index of a grid array.
+        *
+        * @param aIndex     a index of array.
+        */
+        IMPORT_C TInt ThumbIndex(TInt aIndex) const;
+        
+        /**
+        * Icons, thumbnails and text array for the grid are created.
+        * Note: If a aIndex parameter is set, only the data of the value
+        *       will be set up.
+        * Note: CreateDataL() is used if App to be used is except SD.
+        *
+        * @param aGrid      the grid to set up
+        * @param aIndex     (TInt) if <-1, All values are set up.
+        */
+        IMPORT_C TBool CreateGridDataL(CAknGrid* aGrid, TBool aIndex);
+        
+        /**
+        * The position which a shadow draws is set up.
+        *
+        * @param aRect
+        */
+        IMPORT_C void SetLayout(const TRect& aRect);
+        
+         /**
+        * Returns the position of voice mail box
+        */
+        IMPORT_C TInt VMBoxPosition() const;
+        IMPORT_C TInt VdoMBoxPosition() const;
+              
+        /**
+        * Returns the icon index of grid array.
+        */
+        IMPORT_C TInt SpdIconIndex(TInt aIndex) const;
+				
+		/**
+        */
+		IMPORT_C void DeleteIconArray();
+		
+		/** 
+        */
+		IMPORT_C void ReloadIconArray();
+		
+		
+		IMPORT_C CArrayPtr<CGulIcon>* IconArray() const;
+		
+		
+		IMPORT_C TInt VoiceMailType();
+		
+		/**
+        * Returns last error.
+        */
+		IMPORT_C TInt GetSpdCtrlLastError();
+		       
+        /**
+        * Draw this control
+        */
+        void Draw(const TRect& aRect) const;
+        
+        /**
+        * Set size for the skin background context.
+        */
+        void SizeChanged();
+        
+        /**
+        * Passes skin information when needed.
+        **/
+        TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+                        
+        
+        /**
+        * Creates a grid itemArray.
+        * Note: It calls, when using a grid except SDM.
+        *
+        * @param aGrid      the grid to set up
+        * @param aUpdate    updates in an event.
+        */
+        TBool CreateDataL(const CAknGrid& aGrid);
+        
+      
+      	IMPORT_C void SetUpdateFlag(TBool aFlag);
+    	IMPORT_C TBool UpdateFlag();
+    	IMPORT_C  void SetState(eSpeedDialState);
+    	IMPORT_C  eSpeedDialState State();
+    	IMPORT_C  TGridUse GridStatus();
+    	IMPORT_C  void SetGridStatus(TGridUse aStatus);
+    	
+        /**
+        * Returns type of the phone number.
+        */
+        IMPORT_C TInt NumberType(TInt aIndex) const;
+        
+        
+        IMPORT_C MVPbkStoreContact* Contact(TInt aIndex);
+        
+        IMPORT_C HBufC* ContactTitleL( MVPbkBaseContact* aContact, TBool aUnnamed = ETrue);
+        
+		
+		/**
+        * Thumbnail's shadow is drawn.
+        *
+        * @param aGc    window gc
+        */
+        void DrawShadow(CWindowGc& aGc) const;
+        
+       	/**
+        * Internal rutine to check if pop up has to be shown
+        * to enable the One-Key-Dialling setting.
+        * @return   bool value of one key calling status on or off.
+        */
+       IMPORT_C  TBool CheckingIfPopUpNeededL( );
+        
+       /*********************************************************
+ 		********** MVPbkContactFindObserver APIs ****************
+ 		*********************************************************/
+        
+        void FindCompleteL(MVPbkContactLinkArray* aResults);
+        void FindFailed(TInt aError);
+        
+        
+         /********************************************************
+ 		 ********** MPbk2ImageGetObserver APIs *******************
+ 		 *********************************************************/
+       	
+       	/**
+    	 * Called when image loading is completed.
+         *
+         * @param aOperation    The completed operation.
+         * @param aBitmap       The loaded bitmap. Callee is responsible of
+         *                      the bitmap.
+         */
+         void Pbk2ImageGetComplete(
+                 MPbk2ImageOperation& aOperation,
+                 CFbsBitmap* aBitmap ) ;
+ 
+         /**
+          * Called if the image loading fails.
+          *
+          * @param aOperation    The failed operation.
+          * @param aError        Error code of the failure.
+          */
+         void Pbk2ImageGetFailed(
+                 MPbk2ImageOperation& aOperation,
+                 TInt aError );
+        
+        /*********************************************************
+ 		 ****** MVPbkSetAttributeObserver APIs *******************
+ 		 *********************************************************/
+        
+        /**
+        * Attribute operation completed.
+        * @param aOperation    Contact operation that was completed.
+        */
+        void AttributeOperationComplete(
+             MVPbkContactOperationBase& aOperation) ;
+             
+        /**
+        * Attribute operation failed.
+        * @param aOperation    Contact operation that failed.
+        * @param aError        Error code.
+        */
+         void AttributeOperationFailed(
+             MVPbkContactOperationBase& aOperation, TInt aError) ;
+
+		 /*********************************************************
+ 		 ****** MVPbkSingleContactOperationObserver APIs **********
+ 		 **********************************************************/
+                        
+    	/* Called when operation is completed.
+      	*
+      	* @param aOperation the completed operation.
+      	* @param aContact  the contact returned by the operation.
+      	*                  Client must take the ownership immediately.
+      	*
+      	*                  !!! NOTICE !!!
+      	*                  If you use Cleanupstack for MVPbkStoreContact
+      	*                  Use MVPbkStoreContact::PushL or
+      	*                  CleanupDeletePushL from e32base.h.
+      	*                  (Do Not Use CleanupStack::PushL(TAny*) because
+      	*                  then the virtual destructor of the M-class
+      	*                  won't be called when the object is deleted).
+      	*/
+      void VPbkSingleContactOperationComplete(
+             MVPbkContactOperationBase& aOperation,
+             MVPbkStoreContact* aContact);
+
+         /**
+          * Called if the operation fails.
+          *
+          * @param aOperation    the failed operation.
+          * @param aError        error code of the failure.
+          */
+         void VPbkSingleContactOperationFailed(
+                 MVPbkContactOperationBase& aOperation, 
+                 TInt aError);
+ 		
+ 	   /**********************************************************
+ 		**************** MAiwNotifyCallback APIs******************
+ 		**********************************************************/
+        TInt HandleNotifyL(
+		        TInt aCmdId,
+		        TInt aEventId,
+		        CAiwGenericParamList& aEventParamList,
+		        const CAiwGenericParamList& aInParamList);
+		
+	   /**********************************************************
+ 		**************** MAiwNotifyCallback APIs******************
+ 		**********************************************************/       
+        void StoreReady(MVPbkContactStore& aContactStore);
+        void StoreUnavailable(MVPbkContactStore& aContactStore, TInt aReason);
+        void HandleStoreEventL(
+                MVPbkContactStore& aContactStore, 
+                TVPbkContactStoreEvent aStoreEvent);
+                
+   	   /**********************************************************
+ 		**************** MVPbkContactObserver APIs****************
+ 		**********************************************************/               
+        void ContactOperationCompleted(TContactOpResult aResult);
+        void ContactOperationFailed(TContactOp aOpCode, TInt aErrorCode, 
+        							TBool aErrorNotified);
+ 		/**********************************************************
+ 		 ********************* Public APIs*************************
+ 		 **********************************************************/
+	
+		/**
+	    * Shows a selection grid dialog for assigning a speed dial.
+	    * After selecting the index from the grid, speed dial will be set for
+	    * the given contact.
+	    *
+	    * @param aContactLink Contact link pointing to contact and field.
+	    * @param aIndex On return contains the index where speed dial was assigned to.
+	    * @return ETrue if all dialgs were accepted.
+	    */
+       	IMPORT_C TInt ShowAssign( MVPbkContactLink& aContactLink, TInt& aIndex );
+	 	/**
+	    * Shows necessary dialog(s) to assign a contact to the given speed dial
+	    * index. After accepting the dialogs and selecting the contact, speed dial
+	    * will be set to the given index.
+	    *
+	    * @param aIndex Speed dial index.
+	    * @param aContactLink On return contains the contact, for which the speed dial was assigned to.
+	    * @return ETrue if all dialgs were accepted.
+	    */
+	    IMPORT_C TInt ShowAssign( TInt aIndex, MVPbkContactLink*& aContactLink );
+	    
+	    /**
+	    * Shows necessary dialog(s) to remove a speed dial from the given index. 
+	    * After accepting the dialog(s), speed dial will be removed from the index. 
+	    *
+	    * @param aIndex Index of the speed dial to be removed.
+	    * @return ETrue if all dialgos were accepted.
+	    */
+	    IMPORT_C TInt ShowRemove( TInt aIndex );
+	    
+	    /**
+        * Method is used to notify the cancel event
+        * 
+        * @return  KErrNone if Cancel is successful.
+        */
+	    IMPORT_C TBool Cancel();
+	    /**
+        * D'tor
+        * 
+        */
+	        
+	    IMPORT_C ~CSpeedDialPrivate();
+	    /**
+        * Retirves the Email Field attribute value
+        * 
+        */
+	          
+	    IMPORT_C HBufC* EMail(MVPbkStoreContact* aContact);
+        /**
+        * GetWait,monitors the Asynchronous behaviour upon client side
+        * 
+        */
+        
+        IMPORT_C CActiveSchedulerWait* GetWait();
+
+        /**
+         * Set the refresh observer.
+         * @param aObserver   the observer for refreshment.
+         */
+        IMPORT_C void SetRefreshObserver( MRefreshObserver* aObserver );
+        
+        /**
+         * Set Current Grid Index
+         * @param aCurrentGridIndex the current grid index.
+         */
+        IMPORT_C void SetCurrentGridIndex( TInt aCurrentGridIndex );
+        
+        /**
+         * Set Current iGrid and iIconArray as Null
+         */        
+        IMPORT_C void SetGridDataAsNull();
+private:
+
+        /**
+        * Index data are initialized.
+        */
+        void InitIndexDataL();
+        
+        /**
+        * Creates Item's descriptor for Grid.
+        *
+        * @param aSdmData   reference to the data currently used.
+        * @returen  a buffer containing the descriptor text.
+        */
+        HBufC* CreateItemDescriptorLC(const TSpdiaIndexDataVPbk& aSdmData);
+                 
+                          
+        /**
+        * A descriptor is added to a text.
+        *
+        * @param aSdmData   reference to the data currently used.
+        * @param aText      the text for storing
+        */
+        void AppendTextL(const TSpdiaIndexDataVPbk& aSdmData, TPtr& aText);
+        
+  
+                        
+        /**
+        * Operations to a CPbk2ImageManager are set.
+        * Note: call GetImageAsyncL().
+        */
+        void SetOperationsL();
+        
+        /**
+        * Updates data set to match index of the owned index data array.
+        */
+        TBool UpdateIndexDataL(TInt aIndex);
+        
+        /**
+        * Creates icon data for SDM control data by the data of parameters.
+        *
+        * @param aIndex             a index of array.
+        * @param aSdmData           reference to the data currently used.
+        * @param aSetUpdateThumb    thumbnail load start parameter set in index data
+        */
+        TBool CreateIndexIconL(TInt aIndex, TSpdiaIndexDataVPbk& aSdmData,
+                            TBool aSetUpdateThumb);
+                            
+        /**
+        * The position on the array that a grid uses from
+        * an item and a phone number is returned.
+        *
+        * @param aItem      contacd item
+        * @param aDial      phone number
+        */
+        //TInt IconPositionL( TInt aDial, TInt& aFieldId);
+        
+        /**
+        * Speeddial index data is changed by the data of parameters.
+        *
+        * @param aIndex     a index of array.
+        * @param aSdmData   reference to the data currently used.
+        */
+        void ChangeIndexDataL(TInt aIndex, const TSpdiaIndexDataVPbk& aSdmData);
+        
+        /**
+        * Searches icon of grid array for a match.
+        *
+        * @param aId     phone book icon id to match to.
+        * @return   the matching index, -1 if not found.
+        */
+      
+      	TInt FindIconIndex( TInt aId) const;
+
+
+		/**
+        * Gets Item's descriptor for Grid.
+        *
+        * @param aIndex     a index of array.
+        * @param aSdmData   reference to the data currently used.
+        * @return   a buffer containing the descriptor text.
+        */
+        HBufC* ItemDescriptorLC(TInt aIndex, const TSpdiaIndexDataVPbk& aSdmData);       
+        
+        /**
+        * The data of items are added to an array.
+        *
+        * @param aArray
+        */
+        void SetItemDataL(CDesCArray& aArray);
+        
+        /**
+        * Show note when the contact is in using.
+        *
+        * @param aResourceId    reaource id of the string to prompt.
+        */
+        void ShowNoteL( TInt aResourceId );
+        
+		/**
+        * From MContactDbObserver, Handles an event of type aEventType.
+        */
+  //      void HandleDatabaseEventL(TContactDbObserverEvent aEvent);
+        
+         /*********************************************************
+ 		 * 				Thumb operations 						  *
+ 		 **********************************************************/
+               
+        /**
+        * Gets actual size of thumbnial to be drawn.
+        * @return  size of thumbnail.
+        */
+        
+        TSize GetThumbnailSize();
+        /**
+        * Returns the thumbnail type.
+        *
+        * @param aIndex     a index of array.
+        */
+        TInt ThumbType(TInt aIndex) const;
+                       
+        /**
+        * Returns the thumbnail size.
+        *
+        * @param aIndex     a index of array.
+        */
+        TSize ThumbSize(TInt aIndex) const;
+        
+        /**
+        * Returns the type from a size of thumbnail.
+        *
+        * @param aSize  a thumbnail size
+        */
+        TInt ConvThumbType(const TSize& aSize) const; 
+        
+        /**
+        * The descriptor for thumbnail is added.
+        *
+        * @param aSdmData           reference to the data currently used.
+        * @param aText
+        * @param aFixedLocation
+        */
+        void AppendThumbnail(const TSpdiaIndexDataVPbk& aSdmData,
+                            TPtr& aText,
+                            TBool aFixedLocation);
+                                          
+                            
+	    /*********************************************************
+		*					Construction 						 *
+		**********************************************************/   
+        CSpeedDialPrivate(CVPbkContactManager* aContactManager);
+    	void ConstructL();
+    	
+    	/**
+        * A text array that a grid has is erased.
+        */
+        void ResetArray();
+    	
+    	/**
+        * Speeddial index data is set by the data of parameters.
+        *
+        * @param aIndex     a index of array.
+        * @param aSdmData   reference to the data currently used.
+        */
+        void SetIndexDataL(TInt aIndex, TSpdiaIndexDataVPbk& aSdmData);
+        
+        TInt HasImageOperation(MPbk2ImageOperation& aOperation);
+        
+        TInt  HasOperation(MVPbkContactOperationBase* aContactOpertion);
+        
+        TBool CheckSpaceBelowCriticalLevelL();
+        
+        void ExecuteSingleEntryFetchL(TInt aIndex,
+        TAiwSingleEntrySelectionDataV2 aData,
+        const TDesC& aUri1 = KNullDesC );
+        
+        void ExecuteSingleEntryAssignL(TInt aIndex,
+        AiwContactAssign::TAiwContactAttributeAssignDataV1 aData);
+    
+    	TInt SetIconArrayL(CArrayPtrFlat<CGulIcon>* aArray);
+    	void InitializeArray();
+    	void CreateFieldIconsL(CArrayPtrFlat<CGulIcon>* aArray);
+    	
+    	TBool AssignSpeedDialL(TInt aIndex);
+    	TBool RemoveSpeedDialL(TInt aIndex);
+    	
+    	void SetSpeedDialIndexL(MVPbkStoreContact* aContact);
+    	void Wait();
+    	void Release();
+    	
+    	void SetDetails(TInt aIndex);
+    	
+    	// Change to TInt from TBool for more value
+    	TInt FindInSpeedDialContacts(MVPbkContactLink* aContactLink);
+    	// TBool FindInSpeedDialContacts(MVPbkContactLink* aContactLink);
+    	
+    	TBool CheckContactAssignedFromPhoneBookL(MVPbkContactLink* aContactLink);
+    	
+    	TBool ShowAssignL( MVPbkContactLink& aContactLink, TInt& aIndex );
+	    TBool ShowAssignL( TInt aIndex, MVPbkContactLink*& aContactLink );
+	    TBool ShowRemoveL( TInt aIndex );
+	    
+	    void InitBmpArray();
+    	    
+	private:
+		void Pbk2ImageGetCompleteL(
+                 MPbk2ImageOperation& aOperation,
+                 CFbsBitmap* aBitmap ) ;
+                 
+        void ReplaceNonGraphicCharacters(TDes& aText, TText aChar);
+ 	
+ 	private:
+ 	
+    TGridUse iGridUsed;
+    CArrayPtrFlat<CGulIcon>* iIconArray;
+    TAknLayoutRect icellLayout[KArraySize];
+    CArrayFixFlat<TAknLayoutRect>* iShadowLayout;     // owned by this
+    CAknsBasicBackgroundControlContext* iBgContext;
+    
+    TInt iCurrentIndex;
+    TInt iType;
+    TInt iError;
+    TInt iSdmCount;                             // Grid cell count(Row * col)
+    TBool iSaveDlg;
+    TBool iPopupDialog;
+	CAknQueryDialog* iSaveChangesDialog;
+	CSpdiaGridDlgVPbk* iGridDlg; 
+	TBuf<254> iBmpPath;
+	TBool iBooleanVarForAddingDialogVariation;
+	TInt    iFileOffset;
+	
+	RArray<TAknsItemID>*iDialSkinBmp;
+	RArray<TAknsItemID>*iSkinIcons;
+
+	/* Member variables added for migration */
+	CVPbkContactManager* iContactManager;
+    MVPbkContactAttributeManager* iAttributeManager;
+    CPbk2ImageManager* iImageManager;
+    
+    const MVPbkContactLink* iContactLink;
+    MVPbkStoreContact *iContact;
+    MVPbkContactLinkArray* iContactLinkArray;
+    const MVPbkFieldType* iThumbNailFieldType;
+    
+    CVPbkSpeedDialAttribute* iSpeedDial;
+    
+    eSpeedDialState iState;
+    
+    TBool iRetrieveComplete;
+    TBool iOperationComplete;
+    TBool iFetchAll;
+    TBool iUpdateFlag;
+    TBool iFetchmail;
+        
+	CAknGrid* iGrid;	 
+	CArrayFixFlat<TSpdiaIndexDataVPbk>* iSdmArray;  // owned by this
+	CPbk2ImageManager* aImageManager;
+	CActiveSchedulerWait *iWait;
+	CAknQueryDialog* iQueryDialog;       
+	CRepository*  ivmbxvariation;
+	CRepository* ivmbxkey2;
+	TInt iVmbxkeypos;
+	TInt iVmbxsupported;
+	TBool iShowAssignCalled;
+	
+	TUint iDialBmp[9];
+	TUint iDialBmpMask[9];
+    TUint iDialHindiBmp[9];
+    TUint iDialHindiBmpMask[9];
+    HBufC* iMail;
+    TInt iVideoMail;
+    CAiwServiceHandler* iServiceHandler;
+
+    MRefreshObserver* iRefreshObserver;
+    TBool iCancelFlag;
+
+    CAknQueryDialog* iRemoveConfirmQueryDialog;
+};
+
+
+#endif //SPEEDDIALPRIVATE_H