locationsystemui/locationsysui/locsettingsuiservice/locsettingsuiserver/inc/locsettingsuilaunchao.h
changeset 0 667063e416a2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/locsettingsuiservice/locsettingsuiserver/inc/locsettingsuilaunchao.h	Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2005 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:  The declaration for Settings Launch AO class of Location
+*                Settings UI Server
+*
+*/
+
+
+#ifndef C_LOCSETTINGSUILAUNCHAO_H
+#define C_LOCSETTINGSUILAUNCHAO_H
+
+#include <e32base.h>
+#include <e32std.h> //For TSglQue
+
+#include "locsettingsuiinfo.h"
+#include "locationui.h"
+
+//Forward Declaration
+class CLocSysUiEngine;
+class CEikonEnv;
+class CActiveSchedulerWait;
+/**
+ *  The Settings UI Launch class.
+ *
+ *  This class interacts with the LocationSysUi engine interface
+ *  to execute the requested settings UI.
+ *  It maintains a queue of all the requests and schedules them
+ *  to execute in a serialized manner.
+ *
+ *  @lib
+ *  @since S60 v3.1
+ */
+class CLocSettingsUISrvLaunchAO : public CActive,
+                                  public MLocationUIObserver
+    {
+public:
+    /**
+     * Symbian 2 Phase Constructor
+     *
+     * @since S60 v3.1
+     * @return A pointer to the created CLocSettingsUISrvLaunchAO object
+     */
+    static CLocSettingsUISrvLaunchAO* NewL();
+
+    /**
+     * Symbian 2 Phase Constructor
+     *
+     * @since S60 v3.1
+     * @return A pointer to the created CLocSettingsUISrvLaunchAO object
+     */
+    static CLocSettingsUISrvLaunchAO* NewLC();
+
+    /**
+     * Destructor
+     */
+    virtual ~CLocSettingsUISrvLaunchAO();
+
+public:
+    /**
+     * Enqueue the Settings UI launch request.
+     *
+     * @since S60 v3.1
+     * @param aReqInfo Pointer to the Settings UI Request Info class which
+     * contains all the information needed to launch the settings UI.
+     * @return None
+     */
+    void EnqueueRequest( CLocSettingsUIInfo* aReqInfo );
+
+    /**
+     * Cancel the launched Settings UI.
+     * Checks if the UI to be cancelled is in the queue. If so the item
+     * is removed from the queue. Otherwise if the setitngs UI is currently
+     * running then it is cancelled and then removed.
+     *
+     * @since S60 v3.1
+     * @param aSession The pointer to the session from which the settings UI
+     * launch was requested.
+     * @return None
+     */
+    void CancelRequest( const CSession2* aSession );
+
+    /**
+     * Returns whether the server is running in embedded application server
+     * mode or not.
+     *
+     * @since S60 v3.1
+     * @return ETrue if running in embedded application server mode. EFalse
+     * otherwise.
+     */
+    TBool IsSrvRunningAsEmbeddedApp() const;
+
+    /**
+     * From Base class MLocationUIObserver
+     * Notifies the termination of the Settings UI
+     *
+     * @param aErrorCode The termination reason. KErrNone for normal 
+     *					 terminations. In case of error or pre-mature
+     *					 aborting System wide Error codes.
+     */
+    virtual void LocationUIDismissed( TInt aErrorCode );
+
+protected: // Functions from base classes
+    /**
+     * From Base class CActive 
+     * Handles asynchronous request completion.
+     */
+    virtual void RunL();
+
+    /**
+     * From Base class CActive 
+     * Cancels any outstanding request.
+     */
+    virtual void DoCancel();
+
+    /**
+     * From Base class CActive 
+     * Handles a leave in RunL.
+     *
+     * @param aError The RunL leave code.
+     * @return Always KErrNone, because all errors are handled
+     */
+    virtual TInt RunError(TInt aError);
+
+private:
+    /**
+     * Constructor
+     */
+    CLocSettingsUISrvLaunchAO();
+
+    /**
+     * Symbian 2nd Phase Constructor
+     * Leaves in case of Error.
+     *
+     * @since S60 v3.1
+     * @return None
+     */
+    void ConstructL();
+
+private: // Helper methods
+    /**
+     * Complete the specified request.
+     * Deques the request from the queue and also updates the request count.
+     *
+     * @since S60 v3.1
+     * @param aReq pointer to the request to be completed and dequeued.
+     * @param aErrorCode the error code to be returned to the client that
+     * originated the request.
+     * @return None
+     */
+    void CompleteRequest( CLocSettingsUIInfo* aReq, TInt aErrorCode );
+    
+    /**
+     * Sends the Applicaiton Server UI to Background and hides it from
+     * the FSW as well.
+     *
+     * @since S60 v3.1
+     * @return None
+     */
+    void SendAppToBackground();
+
+    /**
+     * Brings the Application Server UI to Foreground and enables it in
+     * the FSW as well.
+     *
+     * @since S60 v3.1
+     * @return None
+     */
+    void BringAppToForeground();
+    
+    /**
+     * Since this Active Object is a dummy object we have to reschedule
+     * it to run when ever needed. This method does that functionality.
+     * mode or not.
+     *
+     * @since S60 v3.1
+     * @return None
+     */
+    void ScheduleAORun();
+
+private: // data
+
+    /**
+     * This data member maintains a list of all the Launch Requests.
+     */
+    TSglQue<CLocSettingsUIInfo> iRequestQue;
+
+    /**
+     * The Engine Interface for launching Settings UI.
+     * Does not own. Just for reference.
+     * Will be created in this class and then ownership will be transferred
+     * to the Document class.
+     */
+    CLocSysUiEngine* iEngine;
+
+    /**
+     * Reference to the Eikon Environment.
+     * It is accessed multiple times. Hence Stored here to prevent
+     * unnecessary access each time to the TLS.
+     */
+    CEikonEnv* iEikEnv;
+    
+    /**
+     * Determines whether this server is running as an embedded application
+     * server.
+     */
+    TBool iIsSrvRunningAsEmbeddedApp;
+    
+    /**
+     * Reference to the Location UI that is currently outstanding.
+     * At any instant of time there can be only one request outstanding.
+     * Incase, there are no requests outstanding then the value is set to
+     * NULL.
+     */
+    MLocationUI*        iLocationUI;
+    };
+
+#endif // C_LOCSETTINGSUILAUNCHAO_H