browserutilities/browsertelservice/inc/BrowserTelService.h
changeset 0 dd21522fd290
child 25 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/browsertelservice/inc/BrowserTelService.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,671 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*	  Declaration of class CBrowserTelService.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#ifndef __BROWSERTELSERVICE_H
+#define __BROWSERTELSERVICE_H
+
+#include "BrowserTelServiceEtelWatcher.h"
+
+#include <e32def.h> //resolve NULL redefinition warning (conflict with time.h).
+#include <e32base.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <f32file.h>
+#include <AknProgressDialog.h>
+#include <AknWaitDialog.h>
+#include <ConnectionObservers.h>
+#include <ApEngineConsts.h>
+#include <errorui.h> 
+#include <bldvariant.hrh>
+#include <ConeResLoader.h>
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+// AIW related headers
+#include <AiwServiceHandler.h>
+
+
+#include <AiwDialData.h>
+#include <AiwDialDataExt.h>
+
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+
+#define JAPANESE ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
+
+// FORWARD DECLARATIONS
+class MBrowserTelServiceObserver;
+class CSendAppUi;
+class CContactIdArray;
+class CPbkContactEngine;
+class CPbkContactItem;
+
+// DATA TYPES
+enum TBrowserTelServiceState
+	{
+	EIdle,
+	EDialing,
+	EDialingDTMF,
+	EConnected
+	};
+
+enum TBrowserTelServiceError
+	{
+	ESendDTMFFailed
+	};
+
+enum TBrowserTelServiceDlgType
+	{
+	EConfirmMakeCall,
+	EConfirmSendDTMF,
+	EConfirmAddToPb,
+    ESendingDTMF
+	};
+
+enum TMatchType
+	{
+	EPhoneNumber,
+	EEmail
+	};
+
+// CONSTANTS
+
+const TUid KUidBrowserApplication = { 0x10008D39 };
+
+// The Central Repository key used to determine how BrowserTelService
+// should handle a 'mailto' attribute of an html link element:
+//     0 = email;  1 = MMS composer
+const TUint32 KBrowserMailtoSendingApp = 0x00000004;
+
+// Return values
+const TInt KErrInvocationError = (-200);
+const TInt KErrNoCallActive = (-108);	// KErrGsmNoCallActive
+const TInt KErrUserNoAnswer = (-107);	// KErrGsmCCUserNoAnswer
+const TInt KErrNoService = (-106);		// KErrGsmNoService
+const TInt KErrUserBusy = (-105);		// KErrGsmCCUserBusy
+const TInt KErrPBPhoneBookFull = (-104);
+const TInt KErrPBWriteError = (-103);
+const TInt KErrPBNumberTooLong = (-102);
+const TInt KErrPBNameTooLong = (-100);
+const TInt KErrUnspecified = (-1);
+
+// CLASS DECLARATION
+
+/**
+*  Implements telephony services for browser.
+*  This class implements required telephony services for multipurpose browser.
+*/
+class CBrowserTelService : public CActive, 
+						   public MBrowserTelServiceEtelWatcherObserver, 
+						   public MConnectionStageObserver,
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+                           public MAiwNotifyCallback,
+#endif // __BROWSER_TEL_SERVICES_CALLUI__                           
+						   public MProgressDialogCallback
+	{
+	public:		// Constructors and destructor			
+		/**
+        * Destructor.
+        */
+		IMPORT_C ~CBrowserTelService();
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @param aObserver The observer for CBrowserTelService.
+        * Defaults to NULL.
+        * @return The constructed CBrowserTelService object.
+        */		
+		IMPORT_C static CBrowserTelService* NewL( MBrowserTelServiceObserver* 
+													aObserver = NULL );
+		IMPORT_C static CBrowserTelService* NewLC( MBrowserTelServiceObserver* 
+													aObserver = NULL );
+
+        /**
+        * Parses given phone number. If specified number contains DTMF 
+		* sequence it will be
+        * extracted from the phone number.
+        * @param aNumber. Phone number with possible DTMF sequence.
+        * @return The extracted DTMF sequence
+        */
+        IMPORT_C HBufC* ParsePhoneNumberL( TDes* aNumber );
+
+	public:		// New functions
+		/**
+        * Call the given phone number synchronously.
+        * @param aNumber The phone number to be called.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        *
+        * NOTE: If the specified phone number contains DTMF sequence, it will 
+		* be extracted from the number. After the call has been established 
+		* the dtmf sequence will be send immediately. This function will 
+		* return after the dtmf sending has 
+        * been handled.
+        */	
+		IMPORT_C TInt MakeCall( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );
+
+		/**
+        * Call the given phone number asynchronously.
+        * @param aStatus Request status.
+		* @param aNumber The phone number to be called.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        *
+        * NOTE: If the specified phone number contains DTMF sequence then it 
+		* will be extracted from the number. After the call has been 
+		* established the dtmf sequence will be sent immediately.
+        */	
+		IMPORT_C void MakeCall( TRequestStatus& aStatus, TDesC& aNumber, 
+							    TBool aSendDTMFAlwaysConfirm );	
+
+		/**
+        * Cancel the request set with 
+		* MakeCallL(TRequestStatus& aStatus,TDesC& aNumber)
+        */
+		IMPORT_C void CancelMakeCall();
+		
+		/**
+        * Send given DTMF sequence (needs an active call) synchronously.
+        * @param aNumber DTMF number.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        */
+		IMPORT_C TInt SendDTMF( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );	
+
+		/**
+        * Send given DTMF sequence (needs an active call) asynchronously.
+        * @param aStatus Request status.
+		* @param aNumber DTMF number.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        */	
+		IMPORT_C void SendDTMF( TRequestStatus& aStatus,TDesC& aNumber, 
+							    TBool aSendDTMFAlwaysConfirm );
+		
+		/**
+        * Cancel the request set with SendDTMFL().
+        */
+		IMPORT_C void CancelSendDTMFL();
+
+		/**
+        * Create a new phonebook entry. Draw up a dialog. Fill its names, 
+		* and phonenumber fields with the given values.
+        * @param aNumber Phone number
+		* @param aName Name
+		* @param aEmail Email address
+        * @return always KErrNone
+        */	
+		IMPORT_C TInt AddPBEntryL( TDesC& aNumber, 
+								   TDesC& aName, 
+								   TDesC& aEmail );
+
+		/**
+        * Current state of the engine
+        * @return TBrowserTelServiceState
+        */	
+		IMPORT_C TBrowserTelServiceState State() const; 
+
+		/**
+        * Add observer. Observers are notified whenever 
+		* the engine state changes.
+        * @param aObserver The Observer.
+        */
+		IMPORT_C void AddObserver( MBrowserTelServiceObserver* aObserver );
+
+		/**
+        * Remove observer.
+        * @param aObserver The Observer.
+        */
+		IMPORT_C void RemoveObserver( MBrowserTelServiceObserver* aObserver ); 
+
+		/**
+        * Create the message and open up the email editor as ready to send.
+        * @param aToRecipients To recipients.
+		* @param aCcRecipients Cc recipients.
+		* @param aParams Other parameters ??.
+		* @param aBody Body text.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        */	
+		IMPORT_C TInt SendEmailMessageL( const TDesC& aToRecipients,
+										 const TDesC& aCcRecipients, 
+										 const TDesC& /*aParams*/,
+										 const TDesC& aBody );
+		/**
+        * Create the message and open up the email editor as ready to send.
+        * @param aToRecipients To recipients.
+		* @param aCcRecipients Cc recipients.
+		* @param aParams Other parameters ??.
+		* @param aBody Body text.
+		* @param aLaunchEmbedded information to launch embedded mode or not
+        * @return Typically KErrNone or another of the system-wide error codes.
+        */	
+		IMPORT_C TInt SendEmailMessageL( const TDesC& aToRecipients,	
+										 const TDesC& aCcRecipients,	
+										 const TDesC& aParams,
+										 const TDesC& aBody,
+										 TBool aLaunchEmbedded );
+
+		/**
+		* Check for active CSD/HSCSD connection and disconnect if active.
+		*/
+		IMPORT_C void DisconnectActiveCSDConnectionL();
+
+        /**
+        * Displays specified type of dialog.
+        * @param aDynamicText. Typically a phone number, 
+		* dtmf string or email address.
+        * @param aDlgType. Dialog type.
+        * @return 0 if cancelled otherwise non zero.
+        */
+		IMPORT_C TInt ShowDialogL( const TDesC& aDynamicText, 
+								   const TBrowserTelServiceDlgType& aDlgType );
+								   
+		
+		/**
+        * Call the given phone number synchronously.
+        * @param aNumber The phone number to be called.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        *
+        * NOTE: If the specified phone number contains DTMF sequence, it will 
+		* be extracted from the number. After the call has been established 
+		* the dtmf sequence will be send immediately. This function will 
+		* return after the dtmf sending has 
+        * been handled.
+        */	
+		IMPORT_C TInt MakeVOIPCall( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );
+		
+
+	protected:	// Functions from base classes
+		/**
+		* From CActive
+		*/
+		void DoCancel();
+		void RunL();
+
+        /**
+        * From MProgressDialogCallback
+        *
+        * Get's called when a dialog is dismissed.
+        */
+        virtual void DialogDismissedL( TInt aButtonId );
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+
+        /**
+        * From MAiwNotifyCallback
+        */
+        TInt HandleNotifyL( TInt aCmdId,
+                            TInt aEventId,
+                            CAiwGenericParamList& aEventParamList,
+                            const CAiwGenericParamList& aInParamList );
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+
+	private:	// New functions
+	    /**
+        * C++ default constructor.
+        */
+		CBrowserTelService();
+		
+		/**
+        * Second phase constructor. Leaves on failure.
+        * @param aObserver The observer for CBrowserTelService. 
+        */
+		void ConstructL( MBrowserTelServiceObserver* aObserver );
+
+		/**
+        * Set the internal state of CBrowserTelService.
+        * @param aState The state.
+        */		
+		void SetState( TBrowserTelServiceState aState );
+
+		/**
+        * Set the internal state to idle and notify observers.
+		* Just a convenience function.
+        */
+		void SetStateIdleAndNotifyObservers();	
+
+		/**
+        * Notify observers of the current state of CBrowserTelService.
+        */
+		void NotifyObservers();
+
+		/**
+        * Notify observers of error that occurred
+        * @param aError The error. 
+        */
+		void NotifyObservers( TBrowserTelServiceError aError );
+
+        /**
+        * Initialization before DoMakeCallL
+		* @param aNumber The phone number to be called.
+        * @return Typically KErrNone or another of the system-wide error codes.
+        */
+        void MakeCallL( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm, TBool voipCall = EFalse );
+
+        /**
+        * Called if anything went wrong in MakeCall
+        */
+        void CleanupBuffers();
+
+		/**
+        * Make phone call.
+        */
+		void DoMakeCallL( TDesC& aNumber, TBool voipCall = 0 );
+
+		/**
+        * Leave version of exported SendDTMF function.
+        */	
+		void SendDTMFL( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );	
+
+		/**
+        * Leave version of exported SendDTMF function.
+        */	
+		void SendDTMFL( TRequestStatus& aStatus,TDesC& aNumber, 
+							    TBool aSendDTMFAlwaysConfirm );
+
+		/**
+        * Send DTMF sequence.
+        * @param aNumber The DTMF number. 
+        */
+		void DoSendDTMFL( TDesC& aNumber );
+
+		/**
+		* Validates the given phone number. Rips all the "-","(",")", 
+		* and white spaces off. If the given string has any 
+		* alphabetical(excluding w and p) characters, 
+		* then NULL will be returned.
+        * @param aNumber The phone number.
+		* @return If the given string has any alphabetical characters, 
+		* then NULL will be returned.
+		* Otherwise the validated phone number.
+        */
+		HBufC* ValidateNumberL( TDesC& aNumber );
+
+        /**
+        * Looks for DTMF sequence from a specified phone number.
+        * @param aNumber The phone number that might contain a DTMF sequence
+        * @return NULL if DTMF sequence couldn't be found. 
+		* Otherwise the DTMF number.
+        * NOTE: The DTMF sequence will be ripped off from 
+		* the given phone number if found.
+        */
+        HBufC* FindAndRipDTMFSequenceL( TDes* aNumber );
+
+        /**
+        * Looks for tel URI parameters from a specified phone number.
+        * @param aNumber The phone number that might contain URI parameters
+        * @return HBufC containing URI parameters, if parameters couldn't 
+        * be found the HBufC with zero len is returned
+        * NOTE: The parameters will be ripped off from the given phone 
+        * number if found.
+        */        
+        HBufC* FindAndRipURIParametersL( TDes& aNumber );
+        
+        
+        /**
+        * Looks for voip parameters from a specified phone number.
+        * @param aNumber The phone number that might contain voip parameters
+        * NOTE: The parameters will be ripped off from the given phone 
+        * number if found.
+        */        
+        void FindAndRipVoipParametersL( TDes& aNumber );
+
+        /**
+        * Validates the given dtmf number. Characters [p w 0...9 * / ,] 
+		* are allowed, with the exception that only one "w" or "/" 
+		* (wait) in succession is allowed.
+        * @param aNumber The dtmf number do be validated.
+        * NOTE: Removes all invalid characters.
+        */
+        void ValidateDTMFNumberL( TDes* aNumber );
+
+        /**
+        * Parses given string into sequences. Sequences are determined 
+		* by [ w / p , ] characters.
+        * Each sequence begins with [ w / p , ] character.
+        */
+        CArrayPtrFlat<HBufC>* ParseDTMFSequencesL( const TDesC* aDTMFString );
+
+        /**
+        * Parses given string to sequences.
+        */
+        CArrayPtrFlat<HBufC>* ParseDTMFSequencesForDlgL(
+								const TDesC* aDTMFString );
+
+        /**
+        * Rips off [ w / p , ] character.
+        * NOTE: Assumes that the wait/pause char is the first character of 
+		* the given string. If the first character is not a wait/pause 
+		* char then this function does nothing.
+        */
+        TChar RipWaitChar( TDes* aNumber );
+
+        /**
+        * Analyses given number whether the DTMF confirmation query 
+		* should be displayed.
+        * @param aNumber
+        * @return ETrue if dialog should be displayed.
+        * NOTE: The given string will be modified if a wait 
+		* char [/ w p ,]is found. The
+        * wait char is deleted from the aNumber.
+        */
+        TBool DisplaySendDTMFDialog( TDes* aNumber );
+
+        /**
+        * Seeks given number in phone book.
+        * @param aPhoneNumber The phone number to look for.
+        * @return owner's name of the number, 
+		* if not found then NULL will be returned.
+        */
+		HBufC* SearchPbForMatchL( const TDesC& aPhoneNumber );
+		CContactIdArray* SearchPbForMatchLC( CPbkContactEngine& aPbkEngine,
+                                             const TDesC& aToMatch,
+											 const TMatchType& aMatchType );
+
+		/**
+        * Closes all open etel sessions.
+        */
+		void CloseAllSessions();
+
+		/**
+        * Internal error handling.
+        * @param aError The error.
+        */
+		void HandleError( TInt aError );
+
+		static TInt IdleCallback( TAny* aTelService );
+		void DoIdleCallback();
+
+        /**
+        * 
+        * @return EFalse if nothing to handle, otherwise ETrue (processing).
+        */
+        TBool HandleInternalSendDTMFL();
+
+        /**
+        * Brings Browser to the foreground.
+        */
+        void BringBrowserToForeground();
+
+		/**
+        * Check if there are activate voice call on.
+        */
+		void CheckIsThereActivateVoiceCallOnL();
+		
+		/**
+        * Check from DTMF number is there any illeagal char's.
+		* aNumber DTMF sequence for check.
+		* Return ETrue if everything OK and EFalse if illeagal char
+		* in DTMF sequence.
+        */
+		void CheckDTMFNumberL( TDesC& aNumber );
+
+        /**
+        * Search for existing contact item, or create a new empty one.
+        * @param aPbkEngine phonebook engine
+        * @param aNumber Phone number
+		* @param aEmail Email address
+        * @param aNewContact ETrue if new contact item created
+        * @return existing/new contact item 
+        */
+        CPbkContactItem* SearchPBItemLC( CPbkContactEngine& aPbkEngine,
+                                         TDesC& aNumber, 
+                                         TDesC& aEmail,
+                                         TBool& aNewContact );                                       
+
+        /**
+        * Set contact item's field. If field doesn't exist in the contact 
+        * item, a new one is added.
+        * @param aField field to set
+        * @param phonebook engine
+        * @param aContactItem contact item of which field is set
+        * @param aFieldValue contact item field value
+        * @param index of field to focus initially in contact editor dialog
+        */
+        void SetPBEntryFieldL( TInt aField,
+                               CPbkContactEngine* aPbkEngine,
+                               CPbkContactItem* aContactItem,
+                               const TPtrC& aFieldValue,
+                               TInt& aFormIndex );
+                      
+        /**
+        * Parse recipients received in aRecipients.
+        * Recipients are separaret by commas.
+        * @param aRecipients Recipient list. Items separated by commas.
+        * @return array of recipients
+        */
+        CPtrC16Array* ParseRecipientsLC( const TDesC& aRecipients );
+        /**
+        * Looks for postd from a specified phone number.
+        * @param aNumber The phone number that might contain a postd parameter
+        * @return NULL if postd parameter couldn't be found. 
+		* Otherwise the DTMF number.
+        */
+        HBufC* FindPostdParmL( TDes& aNumber );
+
+	private:	// Functions from base classes	
+		/** 
+		* From MBrowserTelServiceEtelWatcherObserver
+		*/
+		void BrowserTelServiceEtelWatcherEvent( RCall::TStatus& aStatus );	
+
+		/** 
+		* From MConnectionStageObserver
+		*/
+		void ConnectionStageAchievedL();
+
+        /**
+        * @return the bearer type of connection
+        */
+        TApBearerType ConnectionTypeL( TUint aApId );
+
+    private:
+
+        void ErrorHandler( TInt aErrorId );
+
+        /**
+        * Create the message and open up the mms editor as ready to send.
+        * @param aToRecipients To recipients.
+		* @param aCcRecipients Cc recipients.
+		* @param aParams Other parameters ??.
+		* @param aBody Body text.
+		* @param aLaunchEmbedded information to launch embedded mode or not
+        * @return Typically KErrNone or another of the system-wide error codes.
+        */	
+        TInt SendMmsMessageL( const TDesC& aToRecipients,
+							  const TDesC& aCcRecipients, 
+                              const TDesC& aParams,
+							  const TDesC& aBody,
+							  TBool aLaunchEmbedded );
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+
+        /**
+        * Show confirmation query before sending dtmf when CallUi is used.
+		* @param aDTMF DTMF sequence
+        * @return TBool User esponse.
+        */
+       TBool SendDMFConfQueryL( const TDesC& aDTMF );
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+    
+	private:	// Data
+        CArrayPtrFlat<HBufC>* iSendableDTMFNumbers;
+        CArrayPtrFlat<HBufC>* iDlgDTMFNumbers;
+		RPointerArray<MBrowserTelServiceObserver> iObserverList;
+		HBufC* iDTMFNumber;
+		TBrowserTelServiceState iState;
+		RTelServer iRTelServer;
+		RPhone iRPhone;
+		//RAdvGsmPhone iRAdvGsmPhone;
+        RMobilePhone iRAdvGsmPhone;
+		RLine iRLine;
+		RCall iRCall;
+		RCall::TStatus iCallStatus;
+		CBrowserTelServiceEtelWatcher* iWatcher;
+		TBool iSynch;
+		TInt iRetVal;
+		CActiveSchedulerWait iWait;
+		TRequestStatus* iUserRequestStatus;
+		TBool iAgentDisconnected;
+        CAknWaitDialog* iWaitDlg;
+        TBool iInternalDTMFWaitStarted;
+        TBool iConfirmedOnce;
+        TBool iDTMFAlwaysConfirm;
+		CIdle* iIdle;
+        CErrorUI* iErrorUi;
+        
+        TFileName                   iResourceFileName; ///< Temp storage for the file name.
+        RConeResourceLoader         iResourceLoader; ///< Resource loader.
+        TBool                       iResourceOpened; ///< Indicate if the resource is opened.
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+
+		// AIW related members
+        CAiwServiceHandler* iServiceHandler;
+
+        // DialData.
+        CAiwDialData*      iDialData;
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+        
+	};
+
+/**
+* This class defines a protocol for observing CBrowserTelService stages.
+* You should inherit from this if you want to observe 
+* CBrowserTelService stages.
+*/
+class MBrowserTelServiceObserver
+	{
+	public:	// New functions
+		/**
+        * Notification of the state change.
+        * @param aEvent The new state.
+        */
+		virtual void BrowserTelServiceEvent( 
+								TBrowserTelServiceState aEvent ) = 0;
+
+		/**
+        * Notification of the error that occurred.
+        * @param aError The error.
+        */
+		virtual void BrowserTelServiceError(
+								TBrowserTelServiceError aError ) = 0;
+	};
+
+#endif // __BROWSERTELSERVICE_H
\ No newline at end of file