/*
* 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 CCodAppUi.
*
*/


#ifndef COD_APP_UI_H
#define COD_APP_UI_H

// INCLUDES

#include <e32base.h>
#include <AknAppUi.h>
#include <AknServerApp.h>
#include <CodLoadObserver.h>
#include "CodWaitDialog.h"

// FORWARD DECLARATIONS

class CCodView;
class CCodDocument;
class CCodEng;
class CDocumentHandler;
class CRequestCompleteCallback;
class CErrorUI;
class CCodUiResource;

// CLASS DECLARATION

/**
* COD Application UI.
*/
NONSHARABLE_CLASS( CCodAppUi )
: public CAknAppUi,
  public MCodLoadObserver,
  public MCodDialogCommandObserver,
  public MAknServerAppExitObserver
    {

    public:     // Constructors and destructor

        /**
        * @param aCod COD or DD?
        * Constructor.
        */      
        CCodAppUi( TBool aCod );
        
        /**
        * Second phase constructor. Leaves on failure.
        */      
        void ConstructL();

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

    public:     // new methods

        /**
        * Open file done.
        * @param aError Error code.
        */
        void OpenFileDone( TInt aError );

        /**
        * Set service flow settings.
        * @param aSilentMode Silent Mode.
        * @param aSuppressNextUrl Suppress Next-URL.
        * @param aSuppressLaunch Suppress launch.
        */
        void SetServiceFlow
            (
            TBool aSilentMode,
            TBool aSuppressNextUrl,
            TBool aSuppressLaunch
            );

    public:     // from CAknAppUi

        /**
        * Handle model change.
        */
        virtual void HandleModelChangeL();

        /**
        * 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 key event.
        * @param aKeyEvent The key event.
        * @param aType Key event type.
        * @return Response (was the key event consumed?).
        */
        virtual TKeyResponse HandleKeyEventL
            ( const TKeyEvent& aKeyEvent, TEventCode aType );

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

    private:    // from MCodLoadObserver

        /**
        * Get download root path.
        * Leave with KErrCancel if query is cancelled.
        * @param aRootPath Root path returned here.
        */
        virtual void GetRootPathL( TDes& aRootPath );

        /**
        * Starting load (fetch content or error-notify).
        * @param aStatusCode HTTP status code.
        * - 900 (Success) indicates start of content load.
        * - Other values indicate start of error report.
        */
        virtual void StartLoadL( TInt aStatusCode );

        /**
        * Cancelling the fetch started. Start wait note.
        */
        virtual void StartCancelL();

        /**
        * Load progress update.
        * @param aFinalValue Final progress value.
        * @param aCurrentValue Current progress value.
        */
        virtual void ProgressL( TInt aFinalValue, TInt aCurrentValue );

        /**
        * Processing (content load or error report) ended.
        * Note that if processing does not include loading, this method can be
        * called without a preceding StartLoadL call.
        * @param aStatusCode HTTP status code (aError mapped to HTTP status
        * code).
        * @param aError Error code of result. (The Set(), Accept() or Reject()
        * request to CodEng will also complete with this value.)
        */
        virtual void Done( TInt aStatusCode, TInt aError );

        /**
        * Get confirmation for creating network connection.
        * @return ETrue if connection can be created.
        */
        virtual TBool ConfirmConnectL();
        /**
        * Opening a connection.
        * @param aIap AP to be used for creating the connection.
        */
        virtual void StartConnect( TUint32 aIap );

        /**
        * Connected.
        */
        virtual void EndConnect();

        /**
        * Authenticate user.
        * @param aHost Host.
        * @param aRealm Realm.
        * @param aProxyAuth ETrue if this is a proxy authentication.
        * @param aUsername Return username here.
        * @param aPasssword Return password here.
        * @return ETrue if auth is OK, EFalse if cancelled.
        */
        virtual TBool UserAuthL
            (
            const TDesC& aHost,
            const TDesC& aRealm,
            TBool aProxyAuth,
            TDes& aUsername,
            TDes& aPassword
            );

        /**
        * ROAP Trigger parsed (success or error).
        * @param aData ROAP Trigger data.
        */
        virtual void RoapTriggerParsedL( const CRoapData& aData );

        /**
        * Connection Error
        * return: Connection Error .
        */
		inline virtual void SetConnError( TInt aError) {iConnError = aError;}

        /**
        * Connection Error
        * return: Connection Error .
        */
		inline virtual TInt ConnError () {return iConnError;}

        /**
        * Progresive download "Play" is available
        * return: Connection Error .
        */
		virtual void PdPlayAvailable();
        
        /**
        * Set Active Download
        */
        inline virtual void SetActiveDownload( ){}
       
        /**
        * Displays Info message "Waiting for license" 
        */
		virtual void WaitForLicenseL();

        /**
        * To indicate the download is paused
        */
        inline virtual void DownloadPaused() {}

        /**
        * To indicate the download is resumed and ready for PD
        */
        inline virtual void DownloadResumedPdAvailable() {}
        
        /**
        * To update the server about whether or not download is pausable
        */
        inline virtual void UpdatePausable( TBool /*aPausable*/ ) {}
        
        /**
        * To update the server about next media object being downloaded.
        */        
        inline virtual void MediaObjectNameChanged() {}
        
        /**
        * To update the server about next media object being downloaded.
        */        
        inline virtual void ContentTypeChanged() {}
                        
        /**
        * To update the server about updated media info
        */
        inline virtual void UpdateMediaInfoL() {}
        
        /**
        * To update the server about updated media info
        */
        inline virtual void UpdateTrackInfoL() {}
        
        /**
        * To handle PostResponseUrlL as part of metering response
		*/	        
        inline virtual void HandleRoapPostResponseUrlL( const TDesC8& /*aPrUrl*/ ) {}
        
                        
    private:    // from MCodDialogCommandObserver

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

    private:    // from MAknServerAppExitObserver

        /**
        * Embedded document viewing has ended.
        * @param aReason Exit reason (unused).
        */
        void HandleServerAppExit( TInt aReason );

    private:    // new methods

        /**
        * Open file done.
        */
        void OpenFileDoneL();

        /**
        * Static wrapper around LoadDone (for TCallBack use).
        * @param aPtr Pointer passed to the callback (this object as TAny*).
        * @return EFalse (as TInt).
        */
        static TInt StaticLoadDone( TAny* aPtr );

        /**
        * Load done, follow-up processing and exit.
        */
        void LoadDone();

        /**
        * Load done, follow-up processing and exit.
        */
        void LoadDoneL();

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

        /**
        * Handle failed load.
        * @return ETrue if application should exit.
        */
        TBool LoadFailedL();

        /**
        * 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.
        * @return ETrue if application should exit.
        */
        TBool RoapFailedL();

        /**
        * Launch content.
        * @param aFname File name.
        * @param aType MIME type.
        * @return ETrue if application should exit.
        */
        TBool LaunchContentL( const TDesC& aFname, const TDesC8& aType );
        
        /**
        * Service flow: launch browser and (optionally) activate Next-URL,
        * if exists.
        */
        void ActivateNextUrlL();

    private:    // new methods

        /**
        * Set CBA.
        * @param aCommandSetResourceId Command set resource id.
        */
        void SetCbaL( TInt aCommandSetResourceId );

        /**
        * Access the document.
        * @return The document.
        */
        inline CCodDocument* CodDocument();

    private:    // data

        
        TBool iCod;                         ///< COD or DD?
        CCodUiResource* iCodResource;       ///< CodUi resource. Owned.
        CCodView* iView;                    ///< App's view (control). Owned.
        CCodWaitDialog* iWaitNote;          ///< Wait note. Owned.
        CRequestCompleteCallback* iCallback;///< Callback object. Owned.
        TInt iCurrentCba;                   ///< Current CBA.
        CErrorUI* iErrorUi;                 ///< Error UI. Owned.
        CDocumentHandler* iDocHandler;      ///< DocHandler or NULL. Owned.
        CAiwGenericParamList* iDocParams;   ///< DocHandler params. Owned.
        RFs iFs;                            ///< File Server Session.
        TInt iError;                        ///< Error code.
        TBool iSilentMode;                  ///< Silent mode.
        TBool iSuppressNextUrl;             ///< Suppress Next-URL.
        TBool iSuppressLaunch;              ///< Suppress launch.
        TBool iRoap;                        ///< ROAP involved?
        TInt iConnError;					///< Connection Error
    };

#endif /* def COD_APP_UI_H */
