--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/inc/easydialingplugin.h Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,548 @@
+/*
+* 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 plugin implementation.
+*
+*/
+
+
+#ifndef __CEASYDIALINGPLUGIN_H__
+#define __CEASYDIALINGPLUGIN_H__
+
+// INCLUDES
+
+#include "dialingextensioninterface.h"
+#include <MPsResultsObserver.h>
+#include <mccaconnection.h>
+#include <mccaconnectionext.h>
+#include "measydialingcenreplistenerobserver.h"
+#include "mcontactdatamanagerobserver.h"
+#include "medcontactorobserver.h"
+#include "easydialingcontactdatamanager.h" // for TNameOrder
+
+// ListBox Observer API
+#include <eiklbo.h>
+
+// MAknInputBlockCancelHandler
+#include <akninputblock.h>
+
+
+// CONSTANTS
+
+/** Maximum constact search string length. */
+const TInt KEDMaxSearchStringLength = 200;
+
+/** Maximum string length for listbox model string. */
+const TInt KEDMaxContactStringLength = 600;
+
+/** Maximum phone number length. */
+const TInt KEDMaxPhoneNumberLength = 64;
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+class CPSRequestHandler;
+class CPsQuery;
+class CEasyDialingListBox;
+class MVPbkContactLink;
+class CEasyDialingCenrepListener;
+class CEasyDialingContactDataManager;
+class CEDContactorService;
+class CEikMenuPane;
+class CAsyncCallBack;
+class CEikLabel;
+
+// CLASS DECLARATION
+
+/**
+* Easy dialing plugin.
+*/
+class CEasyDialingPlugin : public CDialingExtensionInterface,
+ public MPsResultsObserver,
+ public MCCAObserver,
+ public MEasyDialingCenrepListenerObserver,
+ public MContactDataManagerObserver,
+ public MEDContactorObserver,
+ public MEikListBoxObserver,
+ public MAknInputBlockCancelHandler,
+ public MCoeForegroundObserver
+{
+public:
+
+ /**
+ * Static constructor.
+ * @return: Created object.
+ */
+ static CEasyDialingPlugin* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CEasyDialingPlugin();
+
+public: // from CCoeControl
+
+ /**
+ * From CCoeControl.
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * From CCoeControl
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * From CCoeControl
+ */
+ void MakeVisible( TBool aVisible );
+
+ /**
+ * From CCoeControl
+ */
+ void HandleResourceChange( TInt aType );
+
+protected:
+
+ /**
+ * See CCoeControl
+ */
+ void SizeChanged();
+
+ /**
+ * See CCoeControl
+ */
+ void FocusChanged( TDrawNow aDrawNow );
+
+public: // from CDialingExtensionInterface
+
+ /**
+ * Does further initialization to component.
+ * @param: parent container of this control.
+ */
+ virtual void InitializeL( CCoeControl& aParent );
+
+ /**
+ * Reset the previour easy dialing search.
+ */
+ void Reset();
+
+ /**
+ * Adds an observer to dialing extension.
+ * @param: aObserver: observer to be added.
+ */
+ void AddObserverL( MDialingExtensionObserver* aObserver );
+
+ /**
+ * Removes an observer from dialing extension.
+ * @param: aObserver: observer to be removed.
+ */
+ void RemoveObserver( MDialingExtensionObserver* aObserver );
+
+ /**
+ * Sets input string (search string) to easy dialing.
+ * @param: aDesC: input string descriptor.
+ */
+ void SetInputL( const TDesC& aDesC );
+
+ /**
+ * Returns the number of matching contacts in previous search.
+ * @return: number of matches.
+ */
+ TInt MatchingContactCount();
+
+ /**
+ * Gets the resource id of plugin's control button area resource.
+ *
+ * @return Resource id.
+ */
+ TInt CbaResourceId();
+
+ /**
+ * From CDialingExtensionInterface.
+ * Gets the resource id of plugin's menu bar resource.
+ *
+ * @return Resource id.
+ */
+ TInt MenuResourceId();
+
+ /**
+ * From CDialingExtensionInterface.
+ * Gets the resource id of plugin's menu bar resource.
+ *
+ * @param aMenuPane Menu pane
+ * @param aMenuResourceId Menu bar resource id.
+ * @return Resource id.
+ */
+ TBool InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId );
+
+ /**
+ * From CDialingExtensionInterface.
+ * Gets the resource id of plugin's menu bar resource.
+ *
+ * @param aCommand Command id.
+ * @return ETrue if command was handled, EFalse otherwise.
+ */
+ TBool HandleCommandL( TInt aCommand );
+
+ /**
+ * Tells if extension is currently enabled from settings.
+ * @return ETrue if extension is enabled, EFalse otherwise.
+ */
+ TBool IsEnabled() const;
+
+ /**
+ * Tells if extension is currently enabled from settings.
+ * @return ETrue if extension is enabled, EFalse otherwise.
+ */
+ void SetKeyboardMode( TKeyboardMode aMode );
+
+public:
+
+ /**
+ * From MEasyDialingCenrepListenerObserver.
+ */
+ void EasyDialingSettingsChanged( TInt aValue );
+
+ /**
+ * From MEasyDialingCenrepListenerObserver.
+ */
+ void EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue );
+
+ /**
+ * From MContactDataManagerObserver.
+ */
+ void AllContactDataLoaded();
+
+ /**
+ * From MContactDataManagerObserver.
+ */
+ void NameOrderChanged();
+
+ /**
+ * From MContactDataManagerObserver.
+ */
+ void FavouritesChanged();
+
+ /**
+ * From MContactDataManagerObserver.
+ */
+ void StoreConfigurationChanged();
+
+ /**
+ * From MEDContactorObserver.
+ */
+ void InformContactorEvent( MEDContactorObserver::TEvent aEvent );
+
+ /**
+ * From MEikListBoxObserver.
+ */
+ void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+ /**
+ * From MAknInputBlockCancelHandler.
+ */
+ void AknInputBlockCancel();
+
+ /**
+ * From MCoeForegroundObserver.
+ */
+ void HandleGainingForeground();
+
+ /**
+ * From MCoeForegroundObserver.
+ */
+ void HandleLosingForeground();
+
+private:
+
+ /**
+ * Constructor.
+ */
+ CEasyDialingPlugin ();
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL ();
+
+ void InitPredictiveContactSearchL();
+
+ void SetupPcsSettingsL();
+
+ void SetSortOrderL( CEasyDialingContactDataManager::TNameOrder aNameOrder );
+
+ /**
+ * From MPsResultsObserver.
+ */
+ virtual void HandlePsResultsUpdate( RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs );
+ virtual void HandlePsError( TInt aErrorCode );
+ virtual void CachingStatus( TCachingStatus& aStatus, TInt& aError );
+
+ /**
+ * FindContactFieldPCSIndex
+ * Searches the index that stores the given contact field.
+ * To see possible contact field numbering, see file "vpbkeng.rsg".
+ * @param: contact field to search for. See file "vpbkeng.rsg"
+ * for contact field numbering.
+ * @return: index of the contact field. KErrNotFound if field was not found.
+ * Non-negative return values are for indexing CPsClientData array.
+ */
+ TInt FindContactFieldPCSIndexL( TInt aIndex );
+
+ /**
+ * HandlePsResultsUpdateL
+ * A leaving function to be trapped in HandlePsResultsUpdate.
+ */
+ void HandlePsResultsUpdateL( RPointerArray<CPsClientData>& aResults, RPointerArray<CPsPattern>& aSeqs );
+
+public:
+
+ /**
+ * MCCAObserver function handling exit of CCA launcher.
+ */
+ void CCASimpleNotifyL( TNotifyType aType, TInt aReason );
+
+private:
+
+ /*
+ * Informs all observers registered with AddObserverL.
+ * @param: aEvent: event id to be informed.
+ */
+ void InformObservers( MDialingExtensionObserver::TEvent aEvent );
+
+
+private:
+
+ /**
+ * This method perform the drawing functionality of the component.
+ * @param: aRect: The rect to be rendered
+ * @return None
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * Initiates predictive contact search.
+ */
+ void LaunchSearchL();
+
+ /**
+ * Opens ca launcher for currently selected contact.
+ */
+ void LaunchCurrentContactL();
+
+ /**
+ * Creates listbox model string.
+ */
+ void CreateListBoxContactStringL(
+ const TDesC& aContactString,
+ MVPbkContactLink *aLink,
+ TBool aMatchThumbnails,
+ TBool aFav );
+
+ /**
+ * Creates string with first name, last name and company name.
+ */
+ HBufC* CreateContactStringLC( CPsClientData* aResult,
+ CEasyDialingContactDataManager::TNameOrder aNameOrder );
+
+ /** Possible actions launched by this plugin. */
+ enum TEasyDialingAction
+ {
+ ENoActionDefined,
+ ECallCurrentContact,
+ EVideoCallCurrentContact,
+ ESendMessageCurrentContact,
+ ELaunchCurrentContact,
+ ELaunchSearch,
+ EInitializePcs,
+ ESimulateKeyEvent
+ };
+
+ /**
+ * Simulates a key event asynchronously
+ */
+ void AsyncSimulateKeyEvent( const TKeyEvent& aKeyEvent );
+
+ /**
+ * Initiates asynchronous callback to launch action and sets
+ * input blocker active.
+ */
+ void AsyncActionLaunchL( TEasyDialingAction aAction );
+
+ /**
+ * Callback for CAsyncCallBack. Launches action set in iActionToBeLaunched
+ * and stops input block when launch is done.
+ */
+ static TInt AsyncCallBackToLaunchAction( TAny* aPtr );
+
+ /**
+ * Launches action defined in iActionToBeLaunched.
+ */
+ void DoLaunchActionL();
+
+ /**
+ * Cancels async action launch and input block.
+ */
+ void CancelActionLaunchAndInputBlock();
+
+ /**
+ * Handles change events from contact database and favourites view.
+ */
+ void DoHandleContactsChangedL();
+
+ /**
+ * Makes contact listbox visible. Effect is used if feasible.
+ */
+ void ShowContactListBoxWithEffect();
+
+ /**
+ * Makes contact listbox invisible. Effect is used if feasible.
+ */
+ void HideContactListBoxWithEffect();
+
+ /**
+ * Checks if listbox effect can be triggered. Eg checks if
+ * app is in the foreground.
+ */
+ TBool CanListBoxEffectBeUsed() const;
+
+ /**
+ * Sets correct info label text color from theme.
+ */
+ void SetInfoLabelColourL();
+
+ /**
+ * Sets info label visibility.
+ */
+ void SetInfoLabelVisibleL( TBool aVisible );
+
+private:
+
+ /** Textual version of current search string. */
+ TBuf<KEDMaxSearchStringLength> iSearchString;
+
+ /** Handle to predictive search engine. Owned. */
+ CPSRequestHandler* iPredictiveContactSearchHandler;
+
+ /** PCS type of presentation of the current search string. Owned. */
+ CPsQuery* iPredictiveSearchQuery;
+
+ /** If ETrue, completing PCS searches are not displayed but just discarded. */
+ TBool iDiscardCompletingSearches;
+
+ /** ETrue if contact database has been changed and a new search is needed. */
+ TBool iNewSearchNeeded;
+
+ /** Array of used data stores. Owned. */
+ RPointerArray<TDesC> iContactDataStores;
+
+ /** Search result field index for first name field. */
+ TInt iFirstNamePCSIndex;
+
+ /** Search result field index for last name field. */
+ TInt iLastNamePCSIndex;
+
+ /** Search result field index for first name field. */
+ TInt iCompanyNamePCSIndex;
+
+ /** Array containing observers to this class. Owned. */
+ RPointerArray<MDialingExtensionObserver> iObservers;
+
+ /** Contact listbox. Owned. */
+ CEasyDialingListBox* iContactListBox;
+
+ /** Listbox model from search results. Owned. */
+ CDesCArrayFlat* iListBoxModel;
+
+ /** Number of found matching contacts from most recent search. */
+ TInt iNumberOfNames;
+
+ /** Handle to contact launcher. */
+ MCCAConnectionExt* iContactLauncher;
+
+ /** ETrue if contact launcher (a.k.a. communication launcher) is open. */
+ TBool iContactLauncherActive;
+
+ /** If true, contact listbox must not reset focus when contact launcher exits. */
+ TBool iRememberFocus;
+
+ /** Working buffer for creating contact string to listbox. */
+ TBuf<KEDMaxContactStringLength> iContactStringCreationBuffer;
+
+ /** Central repository listener. Owned. */
+ CEasyDialingCenrepListener* iCenrepListener;
+
+ /** Contact data manager. Owned. */
+ CEasyDialingContactDataManager* iContactDataManager;
+
+ /** Easy dialing contactor service. Owned. */
+ CEDContactorService* iContactorService;
+
+ /** Easy dialing resource file offset in current application. */
+ TInt iResourceFileOffset;
+
+ /** Blocks user input when action is being launched. NULL if not active. Owned. */
+ CAknInputBlock* iInputBlocker;
+
+ /** Used to launch action asynchronously. Owned.*/
+ CAsyncCallBack* iAsyncCallBack;
+
+ /** Action to be launched next asynchronously. */
+ TEasyDialingAction iActionToBeLaunched;
+
+ /** Contact link related to the asynchronous action. */
+ HBufC8* iContactToBeLaunched;
+
+ /** Contact name related to the asynchronous action. */
+ HBufC* iContactToBeLaunchedName;
+
+ /** Key event to be simulated asynchronously. */
+ TKeyEvent iKeyEventToSimulate;
+
+ /** Is virtual keyboard currently open or not.*/
+ TBool iVirtualKeyboardOpen;
+
+ /** First line of info text shown when number entry is empty. Owned. */
+ HBufC* iInfoLabelTextLine1;
+
+ /** Second line of info text shown when number entry is empty. Owned. */
+ HBufC* iInfoLabelTextLine2;
+
+ /** Label for showing first line of info text when number entry is empty. Owned. */
+ CEikLabel* iInfoLabelLine1;
+
+ /** Label for showing second line of info text when number entry is empty. Owned. */
+ CEikLabel* iInfoLabelLine2;
+
+ /** Keyboard mode to be used in matching. */
+ TKeyboardMode iKeyboardMode;
+
+ /** 'Flag' if contact have been long tapped, so ECE launcher opens. Long tap contact = True, default = False */
+ TBool iLongTapped;
+};
+
+
+#endif //__CEASYDIALINGPLUGIN_H__
+
+// End of File