testexecfw/useremul/inc/UserEmulatorAppUi.h
changeset 0 3e07fef1e154
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/useremul/inc/UserEmulatorAppUi.h	Mon Mar 08 15:03:44 2010 +0800
@@ -0,0 +1,498 @@
+/*------------------------------------------------------------------
+ -
+ * Software Name : UserEmulator
+ * Version       : v4.2.1309
+ * 
+ * Copyright (c) 2009 France Telecom. All rights reserved.
+ * This software is distributed under the License 
+ * "Eclipse Public License - v 1.0" the text of which is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * France Telecom 
+ *
+ * Contributors:
+ *------------------------------------------------------------------
+ -
+ * File Name: UserEmulatorAppUi.h
+ * 
+ * Created: 13/08/2009
+ * Author(s): Marcell Kiss, Reshma Sandeep Das
+ *   
+ * Description:
+ * Application User Interface class
+ *------------------------------------------------------------------
+ -
+ *
+ */
+ 
+#ifndef USEREMULATORAPPUI_H__
+#define USEREMULATORAPPUI_H__
+
+// System Includes
+#include <aknappui.h>
+#include <apgcli.h>
+#include <akntabgrp.h>              // CAknTabGroup
+#include <aknnavide.h>              // CAknNavigationDecorator
+
+// User Includes
+#include "XmlHandler.h"
+#include "ScanFolders.h"
+#include "DelayTimer.h"
+#include "Settings.h"
+#include "ThreadNotifier.h"
+#include "GlobalCapturer.h"
+#include "Logger.h"
+#include "clientdll.h"
+#include "clientcommander.h"
+#include "RandomTest.h"
+#include "ImageCapture.h"
+#include "Constants.h"
+// Constant
+_LIT( KServerDllFilename, "\\system\\apps\\anim\\ANIMATION_SERVER_0x20025CA8" );
+
+// Forward declarations
+class CUserEmulatorScriptsView;
+
+// Class Declaration
+
+/**
+ * CUserEmulatorAppUi application UI class.
+ * Interacts with the user through the UI and request message processing
+ * from the handler class
+ */
+class CUserEmulatorAppUi : public CAknAppUi,
+                           public MXmlHandlerObserver,
+                           public MActionObserver,
+                           public MKeyObserver,
+                           public MPanicObserver,
+                           public MScreenshotObserver
+{
+public:
+	/**
+	 * ConstructL.
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CUserEmulatorAppUi.
+	 * C++ default constructor. This needs to be public due to
+	 * the way the framework constructs the AppUi
+	 * @param aSession AppUi's Window session
+	 */
+	CUserEmulatorAppUi(RWsSession& aSession);
+
+	/**
+	 * ~CUserEmulatorAppUi.
+	 * Virtual Destructor.
+	 */
+	virtual ~CUserEmulatorAppUi();
+	
+   /**
+    * Callback function. Called when Power button is pressed and recording stops
+    */
+	void TerminationKeyReceived();
+	
+   /**
+    * Put this application foreground at the end of recording and at the end of script execution
+    */
+	void BringUserEmulatorToFront();
+   /**
+    * Callback from Thread Notifier when a panic occures
+    */
+	void PanicOccured();
+	
+	void RestartRandomTests();
+   /**
+    * Simply calls ScriptView's ShowScriptsL function
+    */
+	void ShowScriptsL();
+	
+   /**
+    * Gets Logger's reference
+    * @return   A CLogger instance
+    */
+	CLogger& Logger() const
+    {
+       return *iLogger;
+    }
+	
+   /**
+	* Starts script execution
+	*/
+	void StartTestL();
+	
+  /**
+   * Sets timer which calls PerformAction when expired.
+   * @param  aInterval Time in microsecs
+   */
+	void PerformNextAction(TInt aInterval);
+  
+  /**
+   * Simply calls XmlHandler's StartParsingL function
+   * @param  aFileName  Name of the xml script to parse
+   * return  Error code
+   */
+   TInt StartParsingL( const TDesC&  aFileName );
+  /**
+   * Put this application foreground.
+   */
+   void BringToForeground();
+  /**
+   * Stops random test
+   */
+   void RandomTestEndsL();
+   
+  /**
+   * Load application's TRect to a member variable of Setting
+   */
+   void SetApplicationRectInSettings();
+   
+  /**
+   * Set system info flag
+   */
+   void SetSystemInfoFlag(TBool aValue);
+  /**
+   * Queries if there was a change in script file folder
+   */
+   void RefreshFileNotification();
+   /**
+   * Reads command line arguments
+   * @param aParams - The arguments
+   */
+   void ProcessMessageL(TUid /*aUid*/, const TDesC8 &aParams);
+   /**
+   * Reads command line arguments
+   * @param aCommand - Launch command code
+   * @param aDocumentName - Buffer for arguments
+   * @param aTail - Command line tail
+   */
+   TBool ProcessCommandParametersL(TApaCommand aCommand,TFileName &aDocumentName,
+                const TDesC8 &aTail);
+    /**
+    * FolderScanCompletedL
+    * Callback function. Called when script file folder is scanned and list box is initialised.
+    */
+    void FolderScanCompletedL();
+private:
+
+    /**
+    * Converts portrait mode and landscape mode coordinates and it will converts coordinates for different devices
+    * @param   x       Input x coordinate
+    * @param   y       Input y coordinate
+    * @param   xMod    Output x coordinate
+    * @param   yMod    Output y coordinate
+    */
+    void CoordConversionByOrientation(TInt x, TInt y, TInt& xMod, TInt& yMod);
+    /**
+    * Finds app name in app list and gives back app uid
+    * @param aAppName Name of app
+    * @return App uid
+    */
+    TUid CUserEmulatorAppUi::GetAppUidFromName(TDesC& aAppName);
+    /**
+    * Processes command line arguments
+    * @param aParams  - Arguments
+    * @param aProcessByFolderScanCompleted - Flag. True if arguments have to be stored
+    * in an array and to be processed later. False if process can take place sraight away.
+    */
+    void ProcessCmdParamsL(const TDesC &aParams,TBool aProcessByFolderScanCompleted);
+    /**
+    * Reads command line arguments in the original way (args process)
+    * @param - output buffer for arguments
+    * @param - Number of arguments
+    * @return - False if params are longer (or equal) than 256 chars. True if shorter.
+    */
+    TBool GetArgsL(TDes& aParam, TInt& aArgs);
+    
+   /**
+    * Creates and loads client side dll
+    */
+    void SetupClientDllL();
+   /**
+    * Creates RClientCommander object to communicate with the server side
+    */
+    void SetupCommander();
+   /**
+    *  Displays Settings dialog
+    */
+    void DoCmdSettingsL();
+   /**
+    * Context specific menu function
+    * @param aResourceId   Menu Id
+    * @param aMenuPane     Menu pane
+    */
+    void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+   
+    //From CEikAppUi 
+   /** 
+    * From CEikAppUi, HandleCommandL.
+    * Takes care of command handling.
+    * @param aCommand Command to be handled.
+    */
+    void HandleCommandL(TInt aCommand);
+  
+   /**
+    * Callback function. Called when parsing is completed.
+    * @param aError    Result of parsing
+    * @param aState     not used
+    */
+	void OnParseCompletedL( TInt aError , TState aState);		
+	
+    /**
+     * Main worker function. Executes parsed scripts
+     */
+	void PerformActionL();
+	/**
+	 * Starts Browser using given URL
+	 * @param aUrl URL to Browser
+	 */
+    void OpenUrlL( const TPtrC& aUrl);
+    /**
+     *  Cancels script execution and resets the main list on screen after Power button pressed
+     */
+    void CancelScriptExecutionL();
+
+   /**
+    *  Start a Java app in Symbian app.
+    */   
+	TInt StartJavaApp(const TDesC&  aAppName);
+	
+   /**
+    *  Cut one input string into two strings. Delimiter character is ',' . Input string
+    *  can have 4 params and 3 delimiter. 
+    *  @param aParamString  Input string (Eq: 23,27,43,21)
+    *  @param aArgument1    First part of the original string with two params (Eq: 23,27)
+    *  @param aArgument2    The second part with two params (Eq: 43,21)
+    *  @return              Result if the function succeeded or not
+    */
+	TInt ParseMultipleParams(const TDesC& aParamString, TDes& aArgument1, TDes& aArgument2) const;
+	
+   /**
+    *  Cut one input string into two strings. Limiter chatacter is ','
+    *  @param aParamString  Input string
+    *  @param aAppName      First part of the original string
+    *  @param aArgument     The second part
+    *  @return              Result if the function succeeded or not
+    */
+    TInt ParseParams( const TDesC&  aParamString, TDes& aAppName, TDes& aArgument) const;
+    
+   /**
+    *  Cut one input string into one UId and one string. Limiter chatacter is ','
+    *  @param aParamString  Input string
+    *  @param anAppUid      Uid
+    *  @param aArgument     The second part
+    *  @return              Result if the function succeeded or not
+    */
+    TInt ParseParams( const TDesC&  aParamString, TUid& anAppUid, TDes& aArgument) const;
+    
+   /**
+    *  Cut one input string into three UIds and one string. Limiter chatacter is ','
+    *  @param aParamString  Input string
+    *  @param anAppUid      Uid
+    *  @param aViewUid      View Id
+    *  @param aCustomMessageUid Message UId
+    *  @param aCustomMessage    Custom message string
+    *  @param aAppName      App name instead of Uid
+    *  @return              Result if the function succeeded or not
+    */
+    TInt ParseParams( const TDesC&  aParamString, TUid& aAppUid,  TUid& aViewUid,
+			          TUid& aCustomMessageUid, TDes& aCustomMessage, TDes& aAppName ) const;
+	/**
+	 *  From CCoeAppUi, HelpContextL.
+	 *  Provides help context for the application.
+	 *  size is changed.
+	 *  @return    Help context array
+	 */
+	CArrayFix<TCoeHelpContext>* HelpContextL() const;
+	
+	/**
+     * Resets the action list (Action list contains parsed actions from xml script)
+     */
+	void ResetLists();
+	
+	/**
+     * Sends a 'button down' raw event with the given params
+     * @param intargx   X coordinate of  the event
+     * @param intargy   Y coordinate of  the event
+     */
+	void ButtonDownEvent(TInt intargx, TInt intargy);
+	
+	/**
+     * Sends a 'button up' raw event with the given params
+     * @param intargx   X coordinate of  the event
+     * @param intargy   Y coordinate of  the event
+     */
+	void ButtonUpEvent(TInt intargx, TInt intargy);
+	
+	/**
+     * Sends a 'drag' raw event with the given params.
+     * @param intargx   X coordinate of  the end point of drag
+     * @param intargy   Y coordinate of  the end point of drag
+     */
+	void PointerMoveEvent(TInt intargx, TInt intargy);
+	
+	/**
+     * Starts random event test
+     */
+	void StartRandomTestL();
+	
+	/**
+	 *  GetUid
+	 *  Get application Uid from the ApaList
+	 *  @param aAppuid AppUid Ex: [20001cf3]
+	 *  @return HBufC* appplication Uid in the Hex format Ex: 0x20001cf3
+	 */
+	HBufC* GetUidL(const TDesC& aAppuid);	
+
+public:
+  
+  /**
+   * Flag that indicates the system information status. 
+   */
+	TBool         iSystemInfo;
+
+private:
+    /**
+     * Reference to script view class
+     */
+	CUserEmulatorScriptsView* iScriptsView;
+	
+	/**
+     * Reference to xml handler class 
+     */
+	CXmlHandler*   iXmlHandler; // to parse XML document
+	
+	/**
+     * Reference to delay timer class 
+     */
+	CDelayTimer*   iDelayTimer;
+	
+	/**
+     * Action list related indexes 
+     */
+	TInt  iActionIndex;	
+	TInt  iLoopCount;
+	TBool iLoopExists;
+   /**
+    * A session with the application architecture server
+    */
+	RApaLsSession	iSession;
+	
+   /**
+    * Reference to Setting class
+    */
+	CSettings* iSettings;
+	
+   /**
+    * Flag. If true then last script was stopped
+    */
+	TBool      iStopScripts;
+	
+   /**
+    * Index of the selected script
+    */
+	TInt      iSelectedIndex;
+	
+   /**
+    * Descriptor for log entries
+    */
+	TBuf<KBuffer512> iLogBuffer;
+	
+   /**
+    * Action list (script execution)
+    */
+    RPointerArray<CAction>	iActionList;    
+    RArray<TUint>    		iScriptErrorIndexes;
+    
+   /**
+    * Flag. True if an error occured inside the application
+    */
+    TBool                   iError;
+    
+   /**
+    * Reference to thread notifier class
+    */
+    CThreadNotifier*        iThreadNotifier;
+    
+   /**
+    * Reference to global capturer class
+    */
+    CGlobalCapturer*        iGlobalCapturer;
+    
+   /**
+    * Reference to logger class
+    */
+    CLogger* 				iLogger;
+    
+   /**
+    * Represents actual loop's number
+    */
+    TInt                    iLoopCounter;
+    
+   /**
+    * Represents the selected script's number
+    */
+    TInt                    iSelectedScriptCount;
+    
+   /**
+    * Flag. True if a script is started
+    */
+	TBool					iScriptRun;
+	
+   /**
+    * Flag. True if recording started
+    */
+	TBool					iRecording;
+	
+   /**
+    * Flag. True if random test is started
+    */
+	TBool					iRandomTestStarted;
+	
+   /**
+    * Loads RClientDll object
+    */
+	RClientDll 				iClientDll;
+	
+   /**
+    * Initialises RClientCommander object
+    */
+	RClientCommander 		iClientCommander;
+	
+   /**
+    * Reference to random test class
+    */
+	CRandomTest*			iRandomTest;
+	
+   /**
+    * Uid of started Java applet
+    */
+	TUid					imidletUID;
+	
+   /**
+    * Counter. An error message 'Script might not work properly on Non touch enabled device'
+    * will be displayed only if this counter is zero. Otherwise the message would displayed many
+    * times in a loop 
+    */
+	TInt                    iPointerCount;   
+    /**
+    * Array for loops. Stores loop counter and 'action' number where execution has to continue
+    * after end of loop tag.
+    */	
+	RArray<TUint>           iNestedLoopArray;
+   /**
+    * Array for command-line arguments when they are processed later. (After list box initialisation)
+    */  
+	CDesC8Array*            iCommandLineScriptsArray;
+	
+	TBool                   iIsFolderScanCompletedCalled;
+	
+   /**
+    * Manufacturer code of the device
+    */
+    TInt iManufacturer;
+};
+#endif // USEREMULATORAPPUI_H__
+// End of File