locationsystemui/locationsysui/locverifier/inc/lpdverifierplugin.h
branchRCL_3
changeset 21 6b6920c56e2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/locverifier/inc/lpdverifierplugin.h	Wed Sep 01 12:24:21 2010 +0100
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2002 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:  Verifier plug-in which derives from CPosPrivacyNotifier.
+*
+*/
+
+
+// INCLUDES
+
+#include <EPos_CPosPrivacyNotifier.h>
+#include <lbs/epos_privacy.h>
+#include <lbs/epos_cposrequestor.h>
+
+
+#include "lpdrequestao.h"
+#include "lpdresulthandler.h"
+#include "lpdperiodicreqinfo.h"
+#include "lpdperiodicprocessor.h"
+
+
+#ifndef CLPDVERIFIERDLG_H
+#define CLPDVERIFIERDLG_H
+
+// SYSTEM INCLUDE
+#include <bldvariant.hrh>               // For the 3.2 Flag
+
+
+// FORWARD DECLARATIONS
+class CLpdVerifierQueryLauncher;
+class CLpdNotifierQueryLauncher;
+class CEikonEnv;
+class CLpdRequestorProcessor;
+class RPosRequestorStack;
+class CLocRequestorUtilsResolver;
+class CLpdPeriodicProcessor;
+
+
+// CLASS DECLARATION
+
+/**
+*  Verifier plug-in which derives from CPosPrivacyNotifier.
+*  Notifiers are based on RNotifier framework, and this particular
+*  notifier is used to launch a privacy query for accepting/rejecting
+*  privacy requests. It also shows informational notes and error
+*  messages, which are received as notification.
+*
+*  @lib locverifierdlg.lib
+*  @since 2.1
+*/
+class CLpdVerifierPlugin : public CPosPrivacyNotifier, public MLpdResultHandler,
+                                             public MLpdPeriodicRequestObserver
+    {
+    // To allow calls to HandleNextRequest() from active object
+    friend class CLpdRequestAO;
+    
+    private:
+
+        /**
+         * Enumeration for defining the type of Verification or notification
+         * request
+         */
+        enum TDialogType
+            {
+            EVerificationRequest,
+            ENotification,
+            ENotificationTimeout,
+            ECancelNotification,
+            ESuplPeriodicNotification,
+            };
+
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @return created object
+        */
+        static CLpdVerifierPlugin* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CLpdVerifierPlugin();
+
+		/**
+		* To popup a notification note for verification cancellation event.
+		*/
+		void NotifyCancellationL(
+			TPosRequestSource aSource,
+			TPosVerifyCancelReason aReason,
+			TPosRequestDecision aDecision,
+			const RPosRequestorStack& aRequestors );
+
+        /**
+        * Method for cancelling query or freeing
+        * resources after finishing query.
+        */
+        void FreeQueryResources();
+
+    public: // Functions from base classes
+
+        /**
+        * From CPosPrivacyNotifier, called when a new request arrives.
+        * @param aRequestId identifier of received request
+        */
+        void HandleNewRequestL( TPosQNRequestId aRequestId );
+
+        /**
+        * From CPosPrivacyNotifier, called when request has been cancelled
+        * @param aRequestId identifier of cancelled request
+        */
+        void HandleRequestCancelled( TPosQNRequestId aRequestId );
+
+        /**
+        * From CPosPrivacyNotifier, called when all requests are cancelled.
+        */
+        void HandleAllRequestCancelled();
+
+        /**
+        * From MLpdResultHandler, called when verification result is available.
+        * @param aResultCode
+        */        
+        void HandleVerificationResultL( TInt aResultCode );
+
+        /**
+        * From MLpdResultHandler, called when notification has been done.
+        * @param aResultCode
+        */        
+        void HandleNotificationResultL( TInt aResultCode );
+
+        /**
+        * From MLpdResultHandler, called if leave occurred in callback method
+        * @param aError code
+        */        
+        void HandleLeave( TInt aError );
+        
+      
+
+
+    protected:  // New functions
+
+        /**
+        * Non-leaving internal method for handling next pending request.
+        */
+        void HandleNextRequest();
+        
+        /**
+        * Internal method for handling next pending request.
+        */
+        void HandleNextRequestL();
+
+        /**
+        * Internal helper method used by HandleNextRequestL().
+        */
+        void HandleNextVerificationL();
+
+        /**
+        * Internal helper method used by HandleNextRequestL().
+        */
+        void HandleNextNotificationL();
+
+        /**
+          * Internal helper method used by HandleNextNotificationL().
+          */
+        void HandleNextNonPeriodicNotificationL();
+
+        /**
+        * Internal helper method used by HandleNextNotificationL().
+        */
+        void HandleNextPeriodicNotificationL();        
+
+        /**
+        * Internal helper method.
+        */
+        void NotifyCancellationL( TPosRequestSource aSource, 
+                                  TPosVerifyCancelReason aReason,
+                                  TPosRequestDecision aDecision );
+
+        /**
+        * Internal helper method.
+        * Completes current request and continues queue handling.
+        */
+        void CompleteCurrentAndContinue( TInt aResultCode );
+
+        /**
+        * Handles assert errors. Panics in debug build but leaves in release
+        * build, as this component runs in EikSrv and must never panic.
+        */
+        void HandleAssertErrorL() const;
+
+        /**
+        * Panics in debug build but does nothing in release build.
+        */
+        void HandleDebugAssertError() const;
+        
+        /**
+        * Handle the request if it is periodic.
+        */
+        void EnqueIfPeriodicL(TPosQNRequestId aRequestId);
+        
+         /**
+        * From MLperiodicRequestObserver, called if the currently
+        * displayed notifier has to be updated
+        * @param aError code
+        */        
+        void UpdateCurrentNotifierL();
+        
+        /**
+        * Gets session id of request
+        * @param aSessionId The session id
+        */  
+        void GetSessionIdL( TInt64& aSessionId );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CLpdVerifierPlugin();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+    
+        /**
+         * Starts the Query dialog
+         * @param aQueryDialog Query dialog that has to be started
+         * @param aDialogType  Dialog type
+         * @param aDecision    Decision Type
+         */
+        void StartQueryDialogL( CLpdQueryLauncherBase*  aQueryDialog,
+                                TDialogType             aDialogType,
+                                TPosRequestDecision     aDecision );
+         
+        /**
+         * Packs the Requestor buffer to send across to Cover UI. The 
+         * ownership of the buffer is transferred back to the callee
+         * @return CBufFlat*    Flat buffer containing the list of requestors    
+         */
+        CBufFlat*  PackRequestorBufferL();
+                 
+        /**
+         * Determines the Cover UI command corresponding to a paricular
+         * request
+         * @param  TDialogType          Request Type
+         * @param  TPosRequestDecision  Decision Type
+         * @return TInt                 Cover UI Command ID.
+         */
+        TInt   CoverUICommandL( TDialogType         aRequestType, 
+                                TPosRequestDecision aDecision );
+        
+         /**
+          * Checks the type of request and helps to know
+          * if a given request is of SUPL periodic type
+          * @param aCurrentRequest request id
+          * @return CPosRequestor::TRequestType type of request enum
+         */
+        CPosRequestor::TRequestType CheckRequestTypeL();
+
+
+    private:    // Data
+
+        // Cancellation info needed if cancel handling is postponed
+        class TCancelInfo
+            {
+            public:
+                TBool iCancelled;
+                TPosVerifyCancelReason iReason;
+                TPosRequestDecision iDecision;
+                TPosRequestSource iSource;
+            };
+
+        // Cancellation info needed if verification query is cancelled
+        // during rule query and handling is therefore postponed
+        TCancelInfo iCancelInfo;
+
+        // Identifier of currently handled request
+        TPosQNRequestId iCurrentRequest;
+
+        // Type of the current request, valid if iCurrentRequest valid
+        TRequestType iCurrentRequestType;
+
+        // Result code of verifier query, needed if user cancels rule query
+        TInt iVerifyResult;
+
+        // Resource file needs to be explicitely added
+        // to the environment. Adding returns an offset value.
+        TInt iResourceOffset;
+
+        // Location request accept/reject query object
+        CLpdVerifierQueryLauncher* iVerifierQuery;  // owns
+
+        // Location request accept/reject query object
+        CLpdNotifierQueryLauncher* iNotifier;       // owns
+        
+        // Active object, used to let requests run to
+        // completion instead of recursive calls.
+        CLpdRequestAO* iRequestActiveObject;        // owns
+
+        CLpdRequestorProcessor* iRtorProcessor;     // owns
+        
+        CLocRequestorUtilsResolver* iUtils; // owns
+
+        CLpdPeriodicProcessor* iPeriodicProcessor;     // owns
+        
+        RArray<TLpdPeriodicReqInfo> iPeriodicNotQue; // owns
+
+        CEikonEnv* iEnv;                            // uses
+                        
+    };
+
+#endif      // CLPDVERIFIERDLG_H   
+            
+// End of File