iaupdate/IAD/ui/inc/iaupdateappui.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:22:02 +0100
branchRCL_3
changeset 66 8b7f4e561641
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007-2010 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:   This file contains the header file of the CIAUpdateAppUi class 
*
*/



#ifndef __IAUPDATE_APPUI_H__
#define __IAUPDATE_APPUI_H__

//INCLUDES
#include <e32base.h>
#include <aknViewAppUi.h> 
#include <cmmanagerext.h>

#include "iaupdateuidefines.h"
#include "iaupdateuicontrollerobserver.h"
#include "iaupdatedialogutil.h"
#include "iaupdateuitimerobserver.h"

// FORWARD DECLARATIONS
class CIAUpdateMainView;
class CIAUpdateHistoryView;
class CIAUpdateUiController;
class CIAUpdateParameters;
class MIAUpdateRequestObserver;
class CIAUpdateGlobalLockHandler;
class CIAUpdateUITimer;

/*! 
@class CIAUpdateAppUi
  
An instance of class CIAUpdateAppUi is the UserInterface part of the AVKON
application framework for the IAUpdate example application
*/
class CIAUpdateAppUi : 
    public CAknViewAppUi, 
    public MIAUpdateUiControllerObserver,
    public MIAUpdateTextLinkObserver,
    public MIAUpdateUITimerObserver
    {
public:

    /*
     * Perform the second phase construction of a CIAUpdateAppUi object
     * this needs to be public due to the way the framework constructs the AppUi 
     */
    void ConstructL();
    
    /*!
     * Perform the first phase of two phase construction.
     * This needs to be public due to the way the framework constructs the AppUi 
     */
    CIAUpdateAppUi();


    /*
     * Destroy the object and release all memory objects
     */
    virtual ~CIAUpdateAppUi();
    
    void StartedByLauncherL( MIAUpdateRequestObserver& aObserver, 
                             TBool aRefreshFromNetworkDenied );
    
    /**
     * When the update check operation is started through
     * the API, the session directs the requests for the UI. UI will
     * handle the operation and inform the observer when the operation is
     * completed.
     * @param aObserver This observer is informed when the operation has
     * been completed.
     * @param aFilterParams These parameters are used when update items
     * are filtered for the UI list.
     */
    void CheckUpdatesRequestL( MIAUpdateRequestObserver& aObserver,
                               CIAUpdateParameters* aFilterParams,
                               TBool aForcedRefresh );

    /**
     * When the show update operation is started through
     * the API, the session directs the requests for the UI. UI will
     * hanle the operation and inform the observer when the operation is
     * completed.
     * @param aObserver This observer is informed when the operation has
     * been completed.
     * @param aFilterParams These parameters are used when update items
     * are filtered for the UI list.
     */
    void ShowUpdatesRequestL( MIAUpdateRequestObserver& aObserver,
                              CIAUpdateParameters* aFilterParams );
    
             
    
    /** 
     * When the update operation is started through
     * the API, the session directs the requests for the UI. UI will
     * hanle the operation and inform the observer when the operation is
     * completed.
     * @param aObserver This observer is informed when the operation has
     * been completed.
     * @param aUid  Uid of the caller of the request
     */
    void ShowUpdateQueryRequestL( MIAUpdateRequestObserver& aObserver, TUint aUid );
    
    /**
     *  Handle removal of observer
     */    
    void HandleObserverRemoval();
    
    /**
    * Set this application visible/unvisible
    * @param aVisible If EFalse application is put background and is hidden in FSW 
    */
    void SetVisibleL( TBool aVisible );
    
    /**
    * Show status dialog of update
    */ 
    void ShowStatusDialogL();
    
    /**
    * Starts CIdle. Status dialog is shown in callback function. 
    */ 
    void ShowStatusDialogDeferredL();
    
    /**
    * Get CIAUpdateUiController instance
    * @return Returns pointer of iController
    */    
    CIAUpdateUiController* Controller() const;
    
    /**
    * Performs cancel depending on ongoing request and state
    */   
    void PotentialCancel();
    
    /**
    * Set ordinal position to foreground and 
    * set iClientMovedToBackground to EFalse
    */  
    void HandleClientToForegroundL();
    
    /**
    * Handle situation when iaupdate.exe leaves running although 
    * client session has been closed
    */
    void HandleAllClientsClosedL();
    
    /**
    * Indicates whether Status dialog to be shown or not when history view is deactivated
    *
    * @return ETrue when status dialog to be re-shown
    */ 
    TBool ShowStatusDialogAgain() const;
        
    /**
    * Starts monitoring of window group list changes 
    */
    void StartWGListChangeMonitoring();
    
    /**
    * Stops monitoring of window group list changes 
    */
    void StopWGListChangeMonitoring();
    
    /**
    * Set window group id of client application 
    *
    * @param aWgId Window group id
    */
    void SetClientWgId( TInt aWgId );
    
    /**
    * Is client application in backround
    *
    * @param True value if client application is in background
    */
    TInt ClientInBackgroundL() const;
    
    
    /**
    * Set DM support
    * 
    * @param True value if DM is supported
    */
    void SetDMSupport( TBool aDMSupport );
    
    /**
    * Check DM support
    * 
    * @return True value if DM is supported
    */
    TBool IsDMSupport();
    
    /**
     * Check if DM support is set
     * 
     * @return True value if DM support is set
     */
    TBool IsDMSupportSet();
    
    /**
    * Check if UI refresh allowed
    * 
    * @return True value if UI refresh is allowed 
    */
    TBool UiRefreshAllowed();
    
        
private: // from CAknViewAppUi
    
    /*!
     * @function HandleCommandL  
     * @discussion Handle user menu selections
     * @param aCommand the enumerated code for the option selected
     */
    void HandleCommandL( TInt aCommand );
    
    /**
    * Handle window server event
    *
    * @param aEvent The window server event that occurred
    * @param aDestination The controller associated with the event 
    */
    void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination );
    
             
private: // From MIAUpdateTextLinkObserver    
    void TextLinkL( TInt aLinkId );

    
private: // From MIAUpdateUiControllerObserver   
    /**
    * Called when async engine start-up is completed
    *
    * @param aError Error code
    */
    void StartupComplete( TInt aError ); 
    
    /**
    * Leaving method, called as trapped in StartupComplete
    */
    void StartupCompleteL(); 
 
    
    /**
    * Handles leave error. 
    *
    * @param aError Error code
    */      
    void HandleLeaveErrorL( TInt aError );
    
    /**
    * Handles leave error withot leaving
    *
    * @param aError Error code
    */      
    void HandleLeaveErrorWithoutLeave( TInt aError );
            
    /**
    * Called when async update list refresh is completed
    *
    * @param aError Error code
    */
    void RefreshCompleteL( TBool aWithViewActivation, TInt aError );
    
    /**
    * Called when async updating is completed
    *
    * @param aError Error code
    */     
    void UpdateCompleteL( TInt aError );
    
    /**
    * Choose a usable IAP from all SNAPs
    *
    * @param aCmManagerExt handle of connection manager
    */  
    TUint32 GetBestIAPInAllSNAPsL( RCmManagerExt& aCmManagerExt  );
    
    /**
     * Choose a usable IAP from Internet SNAP
     *
     * @param aCmManagerExt handle of connection manager
     */
    TUint32 GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  );

    /**
    * Choose the best IAP under the given SNAP
    *
    * @param aCmManagerExt handle of connection manager
    * @param aSNAP SNAP ID
    */  
    TUint32 GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAP = 0);

private: // from MIAUpdateUITimerObserver

     virtual void BackgroundDelayComplete( TInt aError );   
     
     virtual void ForegroundDelayComplete( TInt aError );
     
     virtual void ProcessStartDelayComplete( TInt aError );

private: // new methods
           
    /**
    * Refreshes main view 
    * @param aError  Error code
    */              
    void RefreshL( TInt aError );
    
    /**
    * Informs an observer that its async request is completed 
    *
    * @param aError  Error code 
    */ 
    void InformRequestObserver( TInt aError );
    
    /**
     * Sets the default connection method used for network access.
     * Connection can be set as an accesspoint or as a snap for example.
     *
     * @param aTotalSilent Set to ETrue if want silent connection
     *
     * @note Not stored persistently. A client needs to set this 
     * again every time it creates the controller.
     *
     * @note Leaves with KErrNotFound if connection method was not
     * set in the repocitory.
     */
    void SetDefaultConnectionMethodL( TBool aTotalSilent );
        
    
    /**
    * Shows update query dialog (now/later) 
    */ 
    void ShowUpdateQueryL();
    
    /**
    * Hides this application from fast swap window 
    *
    * @param aAlwaysAsk
    */ 
    void HideApplicationInFSWL( TBool aHide);
    
    /**
    * Shows global error note 
    *
    * @param aError Symbian error code
    */ 
    void ShowGlobalErrorNoteL( TInt aError ) const;
       
    /**
    * CIdle callback function, that shows status dialog
    * To be used to guarantee that possible old status dialog is totally 
    * removed by AVKON before showing new one  
    *
    * @param aPtr  Pointer to this instance
    */ 
    static TInt ShowStatusDialogCallbackL( TAny* aPtr );
    
    /**
    * CIdle callback function, that shows update query dialog
    * To be used because a client to be informed immediately that its 
    * async request is issued. Waiting dialog cannot be shown before responding to a client  
    *
    * @param aPtr  Pointer to this instance
    */
    static TInt UpdateQueryCallbackL( TAny* aPtr );
    
    /**
    * CIdle callback function, that performs automatic update check ann query
    *
    * @param aPtr  Pointer to this instance
    */
    static TInt AutomaticCheckCallbackL( TAny* aPtr );
    
    /**
    * History view is activated from a link in message query
    */
    void HandleTextLinkL();
            
private:  //data

    CIAUpdateMainView* iMainView;

    CIAUpdateHistoryView* iHistoryView;
        
    CIAUpdateUiController* iController;
    
    CIAUpdateGlobalLockHandler* iGlobalLockHandler;
    
    CIAUpdateUITimer* iForegroundTimer; 
    
    CIAUpdateUITimer* iBackgroundTimer;
    
    MIAUpdateRequestObserver* iRequestObserver;
    
    TIAUpdateDialogParam* iDialogParam;
    
    IAUpdateUiDefines::TIAUpdateUiRequestType iRequestType;
    
    CIdle* iIdle;
    
    CIdle* iIdleAutCheck;
           
    TBool iShowStatusDialogAgain;
    
    TUint iUpdatequeryUid;
    
    TBool iUpdateNow;
    
    TBool iInstUiOnTop;
    
    TBool iStartedFromApplication;
    
    TBool iClientMovedToBackground;
    
    RArray<TUint32> iDestIdArray;
    
    TInt iWgId;
    
    TBool iIsDMSupported;
    
    TBool iIsDMSet;
    
    TBool iUiRefreshAllowed;
    
    TBool iRebootAfterInstall;
    };


#endif // __IAUPDATE_APPUI_H__