/*
* Copyright (c) 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: 
*      Declaration of class CRoapAppUi.   
*      
*
*/


#ifndef ROAP_APP_UI_H
#define ROAP_APP_UI_H

// INCLUDES

#include <e32base.h>
#include <f32file.h>
#include <AknAppUi.h>
#include <AknServerApp.h>
#include <RoapObserver.h>
#include <DownloadMgrClient.h>
#include "RoapAppWaitDialog.h"
#include <CentralRepository.h>

// FORWARD DECLARATIONS

class CRoapAppView;
class CRoapAppDocument;
class CRequestCompleteCallback;
class CDocumentHandler;

// CONSTANTS
const TUid KDRMHelperUid = {0x101F85C7}; // KBrowserHelpUid = {0x10008D39} 

/**
* ROAP Application UI.
*/
class CRoapAppUi
: public CAknAppUi,
  public MRoapDialogCommandObserver,
  public Roap::MRoapObserver,
  public MAknServerAppExitObserver,
  public MHttpDownloadMgrObserver
    {

    public:     // Constructors and destructor

        /**
        * Constructor.
        */      
        CRoapAppUi();
        
        /**
        * Second phase constructor. Leaves on failure.
        */      
        void ConstructL();

        /**
        * Destructor.
        */      
        virtual ~CRoapAppUi();

    public:     // from CAknAppUi

        /**
        * Open a file.
        * @param aFileName File name to open.
        */
        virtual void OpenFileL( const TDesC& aFileName );

        /**
        * Handle command.
        * @param aCommand Command id.
        */
        virtual void HandleCommandL( TInt aCommand );

    protected:  // from CAknAppUi

        /**
        * Process command line parameters.
        * @param aCommand Command.
        * @param aDocumentName Document name.
        * @param aTail Don't know what; ignored.
        * @return EFalse.
        */
        virtual TBool ProcessCommandParametersL
            (
            TApaCommand aCommand,
            TFileName& aDocumentName,
            const TDesC8& aTail
            );

        /**
        * Handle resource change.
        * @param aType Resource type.
        */
        virtual void HandleResourceChangeL( TInt aType );

    private:    // from Roap::MRoapObserver
    
        /**
        * Confirm creating network connection.
        * @return ETrue if network connection confirmed.
        */
        virtual TBool ConnectionConfL();

        /**
        * Confirm contacting Rights Issuer.
        * @return ETrue if confirmed.
        */
        virtual TBool ContactRiConfL();
		
        /**
        * Confirm transaction ID tracking.
        * @return ETrue if transaction ID tracking confirmed.
        */
        virtual TBool TransIdConfL();

       /**
        * Handle right objects after a successful RoAcq.
        * @param aRightsList Received right objects.
        */
		virtual void RightsObjectDetailsL
	        ( const RPointerArray<CDRMRights>& aRightsList );
		
        /**
        * ROAP response returned multipart response, return parameters
        * needed saving.
        * @param aTempFolder Folder for temp file returned here.
        * @param aContentName Name for content file returned here.
        * @param aMaxSize Safety size limit returned here.
        */
        virtual void ContentDownloadInfoL
            ( TPath& aTempFolder, TFileName& aContentName, TInt& aMaxSize );

        /**
        * Details of DCF file received in ROAP (saved by ROAP Engine).
        * @param aPath: The path and the filename of the saved DCF file.
        * @param aType: The plain MIME type of the saved DCF file.
        * @param aAppUid: The handler app UID of the saved DCF file.
        */
		virtual void ContentDetailsL
		    ( const TDesC& aPath, const TDesC8& aType, const TUid& aAppUid );
                                      
        /**
        * Handle DCF file (received in multipart RO response).
        * @aFilename File name.
        */
        virtual void HandleDCFPartL( const TDesC8& aFilename );

        /**
        * Progress callback.
        * @param aProgressInfo Percentage completed.
        */
		virtual void RoapProgressInfoL( const TInt aProgressInfo );
		
       /**
        * ErrorUrl
        * @param aErrorUrl: The error URL
        * @return void
        */
        virtual void ErrorUrlL( const TDesC8& aErrorUrl );

        /**
        * PostResponseUrlL
        * @param aPrUrl: The PostResponseURL
        * @return void
        */
        virtual void PostResponseUrlL( const TDesC8& aPrUrl );
        
	private:	//from MHttpDownloadMgrObserver        
        /**
        * Indicates an event.
        * @param aDownload The download with which the event occured.
        * @param aEvent Event type.
        * @return None.
        */
        virtual void HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent );

        		
    private:    // from MAknServerAppExitObserver
    
        /**
        * Handle exmbedded application exit.
        * @param aReason Exit reason.
        */
        virtual void HandleServerAppExit( TInt aReason );
    
    public:     // new methods

        /**
        * Trigger parsed.
        */
        void HandleTriggerParsedL();
        
        /**
        * Call back function to launch the help 
        */ 
        static TInt ShowRoapCallback( TAny* aPtr ); 

        /**
        * Handle One Pass RO
        */
        void HandleOnePassRoL( TInt aError);

    private:    // new methods
            
        /**
        * Start ROAP.
        */
        void StartRoapL();
    
        /**
        * Cancel ROAP.
        */
        void CancelRoap();
    
        /**
        * Handle ROAP completion.
        */
        void RoapDone();

        /**
        * Handle successful ROAP.
        * @return ETrue if application should exit.
        */
        TBool RoapOkL();

        /**
        * Handle successful RoAcq ROAP.
        * @return ETrue if application should exit.
        */
        TBool RoAcqOkL();

        /**
        * Handle failed ROAP.
        * @param aError ROAP error.
        * @return ETrue if application should exit.
        */
        TBool RoapFailedL( TInt aError );

        /**
        * Handle ROAP completion (static wrapper for TCallBack use).
        * @param aPtr Pointer passed to the callback (this object as TAny*).
        * @return EFalse (as TInt).
        */
        static TInt StaticRoapDone( TAny* aPtr );

    private:    // new methods

        /**
        * Access the document (casted to its real type).
        * @return The document (casted to its real type).
        */
        CRoapAppDocument* RoapDocument();

    private:    // from MRoapDialogCommandObserver

        /**
        * Handle dialog command (from wait note).
        * @param aCommand Dialog command id.
        */
        void HandleDialogCommandL( TInt aCommand );

    private:    // new methods

        /**
        * Show an information note.
        * @param aPromptResourceId Resource id of prompt text (RESOURCE TBUF).
        */
        void InfoNoteL( TInt aPromptResourceId );

        /**
        * Show an information note.
        * @param aPrompt Prompt text.
        */
        void InfoNoteL( const TDesC& aPrompt );

        /**
        * Show an confirmation note.
        * @param aPromptResourceId Resource id of prompt text (RESOURCE TBUF).
        */
        void ConfNoteL( TInt aPromptResourceId );

        /**
        * Show an confirmation note.
        * @param aPrompt Prompt text.
        */
        void ConfNoteL( const TDesC& aPrompt );

    private:    // new methods

        /**
        * Check if file can be opened (unprotected, or rights present).
        * @param aFile File.
        * @return ETrue if file can be opened.
        */
        TBool CanOpenL( RFile& aFile ) const;
        
       /**
        * Launch help dialog
        * @param TDesC aContext
        * @return void
        */
        void LaunchHelpL( const TDesC& aContext );
		
    private:    // data

        /// App's view (control). Owned.
        CRoapAppView* iView;
        /// Wait note. Owned.
        CRoapAppWaitDialog* iWaitNote;
        /// Callback object. Owned.
        CRequestCompleteCallback* iCallback;
        /// Document handler or NULL. Owned.
        CDocumentHandler* iDocHandler;
        /// File Server Session.
        RFs iFs;
        /// MO associated with the received RO.
        RFile iFile;
        /// Download manager
        RHttpDownloadMgr   iDownloadMgr;
        /// Download status of PostResponse URL 
        TBool iPostResponseURLDownLoad;
    };

#endif /* def ROAP_APP_UI_H */
