epoc32/include/mw/cdownloadmgruiuserinteractions.h
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
--- a/epoc32/include/mw/cdownloadmgruiuserinteractions.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/mw/cdownloadmgruiuserinteractions.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,310 @@
-cdownloadmgruiuserinteractions.h
+/*
+* Copyright (c) 2002-2004 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:  Supports user interaction dialogs for downloads
+*
+*/
+
+
+
+#ifndef CDOWNLOADMGRUIUSERINTERACTIONS_H
+#define CDOWNLOADMGRUIUSERINTERACTIONS_H
+
+//  INCLUDES
+#include <CDownloadMgrUiBase.h>
+#include <DownloadMgrClient.h>
+#include <vwsdef.h>
+
+// CONSTANTS
+_LIT8( KDrmInnerContentTypesToLaunch, "application/java-archive application/x-java-archive x-epoc/x-sisx-app application/x-pip" );
+_LIT8( KSisxApplication, "x-epoc/x-sisx-app application/vnd.symbian.install x-epoc/x-app268436505" );
+_LIT8( KPipApplication, "application/x-pip" );
+_LIT8( KWidgetMimeType, "application/x-nokia-widget" );
+_LIT8( KSharingConfig, "application/isf.sharing.config" );
+
+// DATA TYPES
+enum TClientAppExitType
+    {
+    ETerminatedByUser,
+    ETerminatedBySystem
+    };
+
+// FORWARD DECLARATIONS
+class CUserInteractionsUtils;
+class CDownloadMgrUiLibRegistry;
+class CAsyncEventHandlerArray;
+class CEikAppUi;
+class CUserInteractionsExtension;
+
+// CLASS DECLARATION
+
+/**
+*  The User Interactions supports the followings:
+*  - User confirmation when content-type header arrives
+*  - Handling completed downloads
+*  - Querying HTTP authentication credentials
+*  - Querying proxy authentication credentials
+*  - Error notification
+*  - Client App termination by the User
+*
+*  @lib Download Manager UI Lib
+*  @since Series 60 2.8
+*/
+NONSHARABLE_CLASS( CDownloadMgrUiUserInteractions ) : 
+                                                public CDownloadMgrUiBase,
+                                                public MHttpDownloadMgrObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CDownloadMgrUiUserInteractions* NewL
+               ( CDownloadMgrUiLibRegistry& aRegistryModel );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CDownloadMgrUiUserInteractions();
+
+    public: // New functions
+
+        /**
+        * Client Apps can call this function before exiting the application. 
+        * It should be called when the user terminates the application. 
+        * It opens a confirmation query.
+        * @return OK to exit? True/False. It is only a suggested value!
+        */
+        IMPORT_C TBool OkToExitL();
+
+        /**
+        * Client Apps can call this function in the App UI's destructor. 
+        * It has been made non-leavable, so it can be called without TRAP.
+        * It initializes Grouped Soft Notifications, if necessary.
+        * @param aAppUi Reference to the actual App UI.
+        * @param aExitType Exit type when this function is called.
+        *                  Only ETerminatedBySystem is supported.
+        * @param aViewId View ID of the view where to switch in case user chooses
+        *                accept softkey in the soft notification.
+        * @param aCustomMessageId Custom message ID.
+        * @param aViewActivationMsg Custom message sent to the view in 
+        *                           the view activation process.
+        * @return Error code or KErrNone.
+        */
+        IMPORT_C TInt PrepareToExit( CEikAppUi& aAppUi, 
+                                     TClientAppExitType aExitType, 
+                                     TVwsViewId aViewId, 
+                                     TUid aCustomMessageId, 
+                                     const TDesC8& aViewActivationMsg );
+
+        /**
+        * Client Apps can call this function in the App UI's destructor. 
+        * It has been made non-leavable, so it can be called without TRAP.
+        * It initializes Grouped Soft Notifications, if necessary.
+        * @param aAppUid 3rd UID of the application.
+        * @param aViewId View ID that needs to be activated.
+        * @param aCustomMessageId Custom message ID.
+        * @return Error code or KErrNone.
+        */
+        IMPORT_C TInt PrepareToExit( TUint32 aAppUid,
+                                     TUint32 aViewId, 
+                                     TUint32 aCustomMessageId );
+
+        /**
+        * Currently it supports handling completed download.
+        * COD download is deleted, otherwise normal behaviour, that 
+        * depends on EDlAttrAction (EDoNothing/EMove/ELaunch).
+        * @param aDownload The actual download
+        * @return -
+        */
+        IMPORT_C void HandleDownloadL( RHttpDownload& aDownload );
+
+        /**
+        * The number of download confirmations being shown.
+        * @return Non-negative integer value.
+        */
+        TInt DownloadConfirmationsShown() const;
+
+        /**
+        * Ask if a handler or something uses the UI, so 
+        * others should postpone their tasks that require UI.
+        * @return yes/no.
+        */
+        TBool IsUiBusy() const;
+
+        /**
+        * Is a Cod ServiceFlow running?
+        * @return yes/no.
+        */
+        TBool IsCodServiceFlowRunning() const;
+
+        /**
+        * Is Cod ServiceFlow running of the given download?
+        * @param aDownload The download in question.
+        * @return yes/no.
+        */
+        TBool IsCodServiceFlowRunning( RHttpDownload& aDownload ) const;
+
+        /**
+        * Is a Cod ServiceFlow running?
+        * LEAVing version.
+        * @return yes/no.
+        */
+        TBool IsCodServiceFlowRunningL() const;
+
+        /**
+        * Is Cod ServiceFlow running of the given download?
+        * LEAVing version.
+        * @param aDownload The download in question.
+        * @return yes/no.
+        */
+        TBool IsCodServiceFlowRunningL( RHttpDownload& aDownload ) const;
+
+        /**
+        * Postpone handling the given COD download. The download is placed to a 
+        * LIFO queue, and SetHandlerRunning( EFalse ) handles (restarts) the first 
+        * download in it.
+        * @param aDownload The download to be postponed.
+        */
+        void PostponeCodHandlingL( RHttpDownload& aDownload );
+
+        /**
+        * Check if the given download is postponed.
+        * @param aDownload The download in question.
+        * @return true/false.
+        */
+        TBool IsPostponed( RHttpDownload& aDownload ) const;
+
+        /**
+        * Schedule a postponed download for running.
+        */
+        void SchedulePostponedDownloadL();
+
+    public: // Functions from CDownloadMgrUiBase
+
+        /// Attribute enumerations.
+        enum TDownloadMgrUiUserInteractionsAttr
+            {
+            EAttrSuppressDownloadConfirmation ///< TBool, default: EFalse
+            };
+
+        IMPORT_C virtual void GetIntAttributeL( const TUint aAttribute, TInt32& aValue );
+        IMPORT_C virtual void GetBoolAttributeL( const TUint aAttribute, TBool& aValue );
+        IMPORT_C virtual void GetStringAttributeL( const TUint aAttribute, TDes16& aValue  );
+        IMPORT_C virtual void GetStringAttributeL( const TUint aAttribute, TDes8& aValue  );
+        IMPORT_C virtual void SetIntAttributeL( const TUint aAttribute, TInt32 aValue );
+        IMPORT_C virtual void SetBoolAttributeL( const TUint aAttribute, TBool aValue );
+        IMPORT_C virtual void SetStringAttributeL( const TUint aAttribute, const TDesC16& aValue );
+        IMPORT_C virtual void SetStringAttributeL( const TUint aAttribute, const TDesC8& aValue );
+
+    protected: // Constructors
+
+        /**
+        * C++ default constructor.
+        */
+        CDownloadMgrUiUserInteractions( CDownloadMgrUiLibRegistry& aRegistryModel );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    protected: // New functions
+
+        // Event handler functions
+
+        /**
+        * Wraps DoHandleCompletionWithQueryL() to ensure that only one instance
+        * of the dialog is displayed at any point in time.
+        * @param aDownload The actual download
+        * @return void
+        */
+        void HandleCompletionWithQueryL( RHttpDownload& aDownload, 
+                                                                 TBool aIsUiBusy, 
+                                                                 TBool aIsSupported, 
+                                                                 TBool aIsDrm, 
+                                                                 TBool aDrmRightsOnPhone );
+        /**
+        * Handle download completion with query (wait) dialog.
+        * @param aDownload The actual download
+        * @return -
+        */
+        void DoHandleCompletionWithQueryL( RHttpDownload& aDownload, 
+                                                                 TBool aIsUiBusy, 
+                                                                 TBool aIsSupported, 
+                                                                 TBool aIsDrm, 
+                                                                 TBool aDrmRightsOnPhone );
+
+        /**
+        * Leaving version of PrepareToExit().
+        * @return None.
+        */
+        void PrepareToExitL( CEikAppUi* aAppUi, 
+                             TClientAppExitType aExitType, 
+                             TVwsViewId aViewId, 
+                             TUid aCustomMessageId, 
+                             const TDesC8& aViewActivationMsg );
+
+        /**
+        * Is a stand-alone instance running from the very same application?
+        * @return True/False.
+        */
+        TBool IsStandAloneAppRunning();
+
+        /**
+        * Delete Event Handler(s) showing download confirmation query.
+        * @param aDownload The actual download.
+        */
+        void DeleteEventHandlerShowingDlConfirmation( RHttpDownload& aDownload );
+
+        /**
+        * Delete Event Handler(s) belonging to the given download.
+        * @param aDownload The actual download.
+        */
+        void DeleteEventHandlers( RHttpDownload& aDownload );
+
+        /**
+        * Handle completed normal download (not COD or OMA, not DRM).
+        * @param aDownload The actual download
+        * @return -
+        */
+        void HandleNormalDownloadL( RHttpDownload& aDownload );
+
+        /**
+        * Check if the download is COD.
+        * @param aDownload The actual download
+        * @return ETrue/EFalse
+        */
+        TBool CodDownloadL( RHttpDownload& aDownload ) const;
+
+    protected: // Functions from MHttpDownloadMgrObserver
+
+        virtual void HandleDMgrEventL( RHttpDownload& aDownload, 
+                                       THttpDownloadEvent aEvent );
+
+    private:  // Data
+        
+        CUserInteractionsExtension* iExtension; ///< Extension class, Owned.
+
+        CUserInteractionsUtils*     iUiUtils; /**< Owned. Should be only one 
+                                                   instance in the UILib! */
+        CAsyncEventHandlerArray*    iEventHandlerArray; ///< Owned.
+
+        TBool                       iDlgActive;
+
+    private: // Friend classes
+
+        friend class CUserInteractionsExtension;
+    };
+
+#endif /* CDOWNLOADMGRUIUSERINTERACTIONS_H */