devicemgmtnotifications/dmdevdialogserver/inc/dmdevicedialogserver.h
branchRCL_3
changeset 25 b183ec05bd8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devicemgmtnotifications/dmdevdialogserver/inc/dmdevicedialogserver.h	Tue Aug 31 16:04:06 2010 +0300
@@ -0,0 +1,345 @@
+/*
+ * Copyright (c) 2009 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: Implementation of DM Device Dialogs
+ */
+
+#ifndef __DMDEVDIALOGSERVER_H__
+#define __DMDEVDIALOGSERVER_H__
+
+#include <e32base.h>
+#include <e32std.h>
+#include <hbdevicedialogsymbian.h>
+#include <hbindicatorsymbian.h>
+#include <hbsymbianvariant.h>
+#include <SyncMLObservers.h>
+#include <SyncMLClient.h>
+#include <SyncMLClientDM.h>
+#include "dmdevdialogclientserver.h"
+#include "dmdevicedialogdebug.h"
+
+class CDmDeviceDialogSession;
+class CDmDeviceDialogServer;
+class CHbIndicatorSymbian;
+
+
+_LIT(KDeviceDialogType,"com.nokia.hb.devicemanagementdialog/1.0");
+_LIT(KNotifierType, "syncmlfw");
+_LIT(KProfileId, "profileid");
+_LIT(KUImode, "uimode");
+_LIT(KServerdisplayname, "serverdisplayname");
+_LIT(KDMJobId, "jobid");
+_LIT(KServerpushalertInfo, "serverpushinformative");
+_LIT(KServerpushalertConfirm, "serverpushconfirmative");
+_LIT(KDMProgressIndicatorType, "com.nokia.devicemanagement.progressindicatorplugin/1.0");
+_LIT(KFotaDefaultProfile, "fotadefaultprofile");
+_LIT(KPkgZeroTimeout, "pkgzerotimeout");
+
+
+const TInt KRequestTriggerWaitTime(1000000);
+
+const TInt KDefaultNotifierId = 1000000;
+const TInt KConnectNotifierId = 1000001;
+// Device manager key UID
+const TUid KCRUidNSmlDMSyncApp = {0x101f6de5};
+// CenRep keys for default dm profile used in the
+// firmware update over the air.
+const TUint32 KNSmlDMDefaultFotaProfileKey = 0x00000002;
+
+#define KSosServerUid   0x101f99fb
+#define KFotaServerUid  0x102072C4
+#define KScomoServerUid 0x200267FB
+
+
+
+class CDmDeviceDialogServer : public CServer2,
+        public MHbDeviceDialogObserver,
+        public MSyncMLEventObserver,
+        public MHbIndicatorSymbianObserver
+    {
+    friend class CDmDeviceDialogSession;
+
+public:
+    enum TNoteType
+        {
+        EPkgZeroNote,
+        EConnectNote,
+        EInformativeAlertNote,
+        EConfirmationAlertNote
+        };
+    
+    enum TSyncMLSANSupport
+        {
+        ESANNotSpecified,
+        ESANSilent,
+        ESANUserInformative,
+        ESANUserInteractive
+        };
+    /**
+     * Destructor
+     */
+    virtual ~CDmDeviceDialogServer();
+
+    /**
+     * Static method which creates the server instance
+     * @param None
+     * @return CServer2*
+     */
+    static CServer2* NewLC();
+
+    /**
+     * Stops the session and closes the server
+     * @param None
+     * @return None
+     */
+    void CloseServer();
+
+    /**
+     * For asynchronous network request to be 
+     * logged on active object, using CPeriodic
+     * @param None
+     * @return None
+     */
+     void PeriodicServerCloseL();
+    
+    /**
+     * Launches package zero device dialog
+     * @param aProfileId, ProfileId of the DM server
+     * @param ajobId, Id of the DM job created due to package zero
+     * @param aUimode, Server alert ui mode type
+     * @param aReplySlot, Response to Sos server
+     * @param aMessage, reference to RMessage2 of current session.
+     * @return None.
+     */
+    void LaunchPkgZeroNoteL(TInt &aProfileId, TInt &aJobId,
+                    const TInt &aReplySlot, TInt &aUimode,
+                    const RMessage2& aMessage);
+    
+    /**
+     * Launches display alert specific device dialog
+     * @param aAlertText, Text to be dsiplayed on display alert     
+     * @param aMessage, reference to RMessage2 of current session.
+     * @return None.
+     */   
+    void ShowDisplayalertL(const TDesC &aAlertText,
+                    const RMessage2& aMessage);
+    
+    /**
+     * Launches Confirmation(1101) alert dialog
+     * @param aTimeout, Timeout of the dialog. 
+     * @param aNoteDisplayText, Text to be displayed on the note           
+     * @param aNoteHeader, Text to be displayed as dialog header  
+     * @param aMessage, reference to RMessage2 of current session.       
+     * @return None.        
+     */   
+    void ShowConfirmationalertL(const TInt& aTimeOut, const TDesC& aHeader,
+            const TDesC& aText, const RMessage2& aMessage);
+    
+    /**
+     * Keeps track of number of asynchronous requests
+     * @param None.      
+     * @return None.        
+     */    
+    void NewAsyncRequest();
+    
+    /**
+     * Tells any request pending or not
+     * @param None.      
+     * @return None.        
+     */    
+    TBool RequestPending();
+    
+    /**
+     * Cancels the earlier requested server shutdown
+     * annd serves for the incoming request.
+     * @param None.      
+     * @return None.        
+     */
+    void CancelServerCloseRequest(); 
+    
+    /**
+     * Callback method from Device dialog plugin for user action.
+     * @param aData, User response to the device dialog note            
+     * @return None.        
+     */   
+    virtual void DataReceived(CHbSymbianVariantMap& aData);
+
+    /**
+     * Callback method from Device dialog plugin when dialog gets closed.
+     * @param aCompletionCode, Error code.            
+     * @return None.        
+     */    
+    virtual void DeviceDialogClosed(TInt aCompletionCode);
+
+    /**
+    * From MSyncMLEventObserver
+    * Called when SyncML session events oocur.
+    * @param aEvent Sync event
+    * @param aIdentifier Identifier for the sync event
+    * @param aError Synce event error
+    * @param aAdditionalData.
+    * @return None.
+    */    
+    virtual void OnSyncMLSessionEvent(TEvent aEvent, TInt aIdentifier,
+            TInt aError, TInt aAdditionalData);
+    
+    /**
+     * Tells whether package zero query is currently shown or not.
+     * @param None.            
+     * @return TBool, status of package zero note display.        
+     */
+    TBool IsPkgZeroNoteDisplaying();
+    
+    /**
+     * Cancels outstanding package zero request.
+     * @param None.            
+     * @return None.        
+     */
+    void CancelPendingServerAlert();
+    
+    /**
+     * Callback method from Device dialog Indicator when user taps on Indicator.
+     * @param aType - Type of the indicator that user interacted with.
+     * @param aData - Data sent by the indicator.               
+     * @return None.        
+     */    
+    virtual void  IndicatorUserActivated (const TDesC &aType,
+                        CHbSymbianVariantMap &aData); 
+
+private:
+
+    /**
+     * second phase constructor
+     * @param None
+     */
+    void ConstructL();
+
+    /**
+     * Default constructor
+     * @param None
+     */
+    CDmDeviceDialogServer();
+
+    /**
+    * Called to close the server.
+    * @param None.    
+    * @return None.
+    */    
+    void StopServer();
+    
+    /**    
+    * Dsimisses the Connect device dialog
+    * @param None.
+    * @return None.
+    */     
+    void DismissDialog();
+    
+    /**
+    * Starts DM Job after user accepted the package zero message.
+    * @param None.
+    * @return None.
+    */     
+    void GetDMJobStatusL();
+    
+    /**
+     * Tells whether connect dialog is currently shown or not.
+     * @param None.
+     * @return boolean, status of the connect dialog.
+     */
+    TBool IsConenctDialogDisplaying();
+    
+    /**
+    * Display connect dialog, if dismissed earlier.
+    * @param None.
+    * @return None.
+    */     
+    void ShowConnectDialogAgainL();
+    
+    /**
+    * Called to process the response of user action on specified Device dialog
+    * @param aData, User response to the device dialog note           
+    * @return None.
+    */     
+    void DevDialogResponseL(CHbSymbianVariantMap& aData);
+    
+protected:
+
+    /**
+     * Calls when a New session is getting created
+     * @param aVersion
+     * @param aMessage
+     * @return CSession2*
+     */
+    CSession2* NewSessionL(const TVersion& aVersion,
+            const RMessage2& aMessage) const;
+
+private:
+    //Periodic timer used while shutting down the server
+    CPeriodic* iServerCloseRequest;
+
+    //DM Server Profile Id
+    TInt iProfileId;
+
+    //Current Dm Session Job Id
+    TInt iJobId;
+    
+    //Server alert type of package zero message
+    TUint iUimode;
+    
+    //Pointer to Device dialog server
+    CHbDeviceDialogSymbian* iDevDialog;
+    
+    //Reference to Indicator framework
+    CHbIndicatorSymbian* iDmIndicator;
+    
+    //Status variable to identify the status of Connecting note
+    TBool iPkgZeroConnectionNoteShown;
+    
+    //User response of device dialog note
+    TInt iResponse;
+
+    //RMessage reference used to notify the caller
+    RMessage2 iMessage;
+    
+    //Status variable to know whether server can be stopped or not
+    TBool iStopServer;
+    
+    // SyncML Session
+    RSyncMLSession iSyncMLSession;
+
+    // Job id after starting DM Job
+    TInt iSyncJobId;
+
+    // DM job
+    RSyncMLDevManJob iSyncJob;    
+    
+    //Status variable to know whether a DM Job is ongoing or not
+    TBool iJobongoing;
+    
+    //Status variable to know currently any device dialog is displayed or not
+    TBool iAnyDialogDisplaying;
+    
+    //Status variable to know whether an Indicator is launched or not
+    TBool iIndicatorLaunched;
+    
+    //Identifies the number of requests pending
+    TInt iSessionCount; 
+    
+    //Identifies whether package zero note is displaying or not
+    TBool iPkgZeroQueryNoteDisplaying;
+    
+	//Response slot to write the result
+    TInt iReplySlot;
+    };
+
+#endif