iaupdate/IAD/ui/inc/iaupdateuicontroller.h
changeset 0 ba25891c3a9e
child 9 51c0f5edf5ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdateuicontroller.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,613 @@
+/*
+* Copyright (c) 2007-2009 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 module contains the header file of CIAUpdateUiController 
+*                class .
+*
+*/
+
+
+
+//INCLUDES
+#ifndef IAUPDATEUICONTROLLER_H
+#define IAUPDATEUICONTROLLER_H
+
+#include <e32base.h>
+#include "iaupdateuidefines.h"
+#include "iaupdatecontroller.h"
+#include "iaupdatecontrollerobserver.h"
+#include "iaupdatenodeobserver.h"
+#include "iaupdatewaitdialogobserver.h"
+#include "iaupdatestarterobserver.h"
+#include "iaupdateroaminghandlerobserver.h"
+#include "iaupdaterefreshobserver.h"
+#include "iaupdateresultsinfo.h"
+#include "iaupdateversion.h"
+#include "iaupdateanynode.h"
+
+// FORWARD DECLARATIONS
+class CIAUpdateWaitDialog;
+class CIAUpdateProgressDialog;
+class CIAUpdateNodeFilter;
+class CIAUpdateStarter;
+class CIAUpdateControllerFile;
+class CIAUpdateUiConfigData;
+class CIAUpdateRoamingHandler;
+class CIAUpdateRefreshHandler;
+class MIAUpdateUiControllerObserver;
+class MIAUpdateHistory;
+class MIAUpdateFwNode;
+
+
+struct SIAUpdateNodeId
+    {
+    MIAUpdateAnyNode::TNodeType  iNodeType;
+    TUid                         iPackageUid;
+    TIAUpdateVersion             iVersion;	
+    TBool                        iSelected;
+    };
+
+
+// CLASS DECLARATION
+/**
+ *  CIAUpdateUiController controls update flow in UI  
+ *
+ */
+class CIAUpdateUiController : 
+    public CBase, 
+    public MIAUpdateControllerObserver,
+    public MIAUpdateNodeObserver,
+    public MIAUpdateWaitDialogObserver,
+    public MIAUpdateStarterObserver,
+    public MIAUpdateRoamingHandlerObserver,
+    public MIAUpdateRefreshObserver
+    {
+           
+public: //new functions
+
+    /**
+     * Symbian two phased constructor.
+     * @param aObserver Observer interface of controller
+     * @return Instance of the created server object.
+     */
+    static CIAUpdateUiController* NewLC( 
+        MIAUpdateUiControllerObserver& aObserver );    
+
+    /**
+     * Symbian two phased constructor.
+     * @param aObserver Observer interface of controller
+     * @return Instance of the created server object.
+     */
+    static CIAUpdateUiController* NewL( 
+        MIAUpdateUiControllerObserver& aObserver );    
+
+    /**
+     * Destructor
+     */
+    virtual ~CIAUpdateUiController();
+
+    /**
+     * @return const CIAUpdateUiConfigData& Configuration data
+     * from the configuration file.
+     */
+    const CIAUpdateUiConfigData& ConfigData() const;
+
+    /**
+     * @see MIAController::SetDefaultConnectionMethodL
+     */
+    void SetDefaultConnectionMethodL( 
+        const TIAUpdateConnectionMethod& aMethod );
+
+    /**
+     * Check updates
+     */
+    void CheckUpdatesL();
+
+    /**
+     * Start refresh
+     */
+    void StartRefreshL();
+
+    /**
+     * Starts installation
+     * @param aNodes An array of nodes to be installed
+     */
+    void StartInstallL( MIAUpdateNode& aNode );
+
+    /**
+     * Starts software updating.
+     */
+    void StartUpdateL();
+
+    /**
+     * Continue software updating, next item is handled.
+     * @param aSelfUpdateFinished ETrue if the update is continued right after
+     * the self update.
+     */
+    void ContinueUpdateL( TBool aSelfUpdateFinished );
+        
+    /**
+     * Get list of nodes
+     * @return An array of nodes 
+     */    
+    const RPointerArray< MIAUpdateNode >& Nodes() const;
+
+    /**
+     * Get list of firmware nodes
+     * @return An array of nodes 
+     */    
+    const RPointerArray< MIAUpdateFwNode >& FwNodes() const;
+    
+    /**
+     * @see MIAUpdateController::HistoryL
+     */ 
+    MIAUpdateHistory& HistoryL();    
+
+    /**
+     * Sets the request type
+     * @param aRequestType Request type
+     */
+    void SetRequestType( 
+        IAUpdateUiDefines::TIAUpdateUiRequestType aRequestType );
+
+    /**
+     * Cancel ongoing async operation
+     **/
+    void CancelOperation();
+
+    /**
+     * Info about success of updates
+     * @return TIAUpdateResultsInfo Describes success
+     * of update operations
+     **/
+    TIAUpdateResultsInfo ResultsInfo() const;
+
+    /**
+     * Count of available updates
+     * @return Count of available updates
+     **/
+    TInt CountOfAvailableUpdates() const; 
+
+    /**
+     * Gives access to starter object
+     * @return Pointer to CIAUpdateStarter instance
+     **/
+    const CIAUpdateStarter* Starter() const;
+    
+    /**
+     * Gives access to filter object
+     * @return Pointer to CIAUpdateNodeFilte instance
+     **/
+    const CIAUpdateNodeFilter* Filter() const;
+
+    /**
+     * Do cancel depending on request type and state
+     * @return True value if possible cancel has been performed 
+     *         and/or application can be closed by client
+     **/
+    TBool DoCancelIfAllowed(); 
+
+    /**
+     * Depending on request type and state closing Application update is
+     * allowed or not by a client application
+     *
+     * @return True if closing is allowed by a client
+     **/
+    TBool ClosingAllowedByClient();
+
+    /**
+     * Starts CIdle before update check. That's because waiting dialogs 
+     * may be shown before update check, still client's request to be responsed immediately  
+     *
+     * @param aParams Update parameters passed from a client
+     **/
+    void CheckUpdatesDeferredL( CIAUpdateParameters* aParams, TBool aRefreshFromNetworkDenied );
+    
+    
+    void PrepareRoamingHandlerL();
+
+    /**
+     * This function handles situation when the iaupdate has been restarted after
+     * self update. If restart has occurred, then the update operation will be continued
+     * to the end as in normal update case.
+     *
+     * @param aShutdownRequest True value means that update was completed by end key, 
+     *                         only purchase history to be updated in this function 
+     *
+     * @return TBool ETrue if the restart has occurred. EFalse if the application was
+     * not started from self updater.
+     */
+    TBool HandlePossibleSelfUpdateRestartL( TBool aShutdownRequest );
+    
+    /**
+    * This is used to get information after self update when
+    * IAD is restarted.
+    *
+    * @return CIAUpdateParameters* Parameter object that is read
+    * from the file. NULL if file was not found. 
+    * Ownership is not transferred.
+    */
+    CIAUpdateParameters* ParamsReadAndRemoveFileL();
+        
+    /**
+     * Is client role "testing"
+     *
+     * @return ETrue when client's role is "testing"
+     **/
+    TBool TestRole() const; 
+    
+            
+public: // MIAUpdateControllerObserver     
+
+    /**
+     * @see MIAUpdateControllerObserver::StartupComplete 
+     **/
+    void StartupComplete( TInt aError );
+ 
+    /**
+     * @see MIAUpdateControllerObserver::RefreshComplete
+     **/
+    void RefreshComplete( const RPointerArray< MIAUpdateAnyNode >& aNodes,
+                          TInt aError );
+
+    /**
+     * @see MIAUpdateControllerObserver::SelfUpdaterComplete
+     **/
+    void SelfUpdaterComplete( TInt aErrorCode );
+
+    /**
+     * @see MIAUpdateControllerObserver::ServerReportSent
+     **/
+    void ServerReportSent( TInt aError );
+    
+    /**
+     * @see MIAUpdateControllerObserver::ClientRole
+     **/
+    void ClientRole( const TDesC& aClientRole );
+
+
+public: // MIAUpdateNodeObserver
+            
+    /**
+     * @see MIAUpdateNodeObserver::DownloadProgress
+     **/
+    void DownloadProgress( MIAUpdateNode& aNode, 
+                           TUint aProgress,
+                           TUint aMaxProgress );
+                            
+    /**
+     * @see MIAUpdateNodeObserver::DownloadComplete
+     **/
+    void DownloadComplete( MIAUpdateNode& aNode,
+                           TInt aError );
+
+    /**
+     * @see MIAUpdateNodeObserver::InstallProgress
+     **/
+    void InstallProgress( MIAUpdateNode& aNode, 
+                          TUint aProgress,
+                          TUint aMaxProgress );
+                            
+    /**
+     * @see MIAUpdateNodeObserver::InstallComplete
+     **/
+    void InstallComplete( MIAUpdateNode& aNode,
+                          TInt aError );
+
+    
+private: // MIAUpdateStarterObserver    
+
+    /**
+     * Called when an outstanding request is completed
+     *
+     * @param aError Error code that informs the result 
+     * of the start operation. KErrNone if operation was
+     * succesfull.
+     */
+     void StartExecutableCompletedL( TInt aError );
+ 
+     
+private:  // MIAUpdateRoamingHandlerObserver
+
+     /**
+      * Called when roaming handler is prepared
+      */
+     void RoamingHandlerPrepared();
+  
+        
+private: // From MIAUpdateWaitDialogObserver    
+    
+    /**
+     * This is called when the dialog is about to be closed.
+     * @param aButtonId - Id of the button, which was used to cancel the dialog.
+     * @return ETrue, if it's ok to close the dialog, EFalse otherwise.
+     */
+    TBool HandleDialogExitL( TInt aButtonId );   
+    
+
+private: // From MIAUpdateRefreshObserver   
+
+     void HandleUiRefreshL();
+
+
+private: // construction
+
+    /**
+     * Perform the second phase construction of a CIAUpdateUiController 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 
+     * @param aObserver Observer interface of controller
+     */
+    CIAUpdateUiController( MIAUpdateUiControllerObserver& aObserver );
+
+
+private: // new functions
+
+    /**
+     * Called when refreshing updates list is completed.
+     *
+     * @param aNodes An array of nodes
+     * @param aError Error code
+     */
+    void RefreshCompleteL( const RPointerArray< MIAUpdateAnyNode >& aNodes,
+                           TInt aError );
+    
+    /**
+     * Called when refreshing updates list is completed. 
+     *
+     * @param aNodes An array of nodes
+     * @param aError Error code
+     */
+    void RefreshUiCompleteL( const RPointerArray< MIAUpdateAnyNode >& aNodes,
+                             TInt aError );
+    
+    
+    /**
+     * Called when downloading of an update is completed
+     *
+     * @param aNode Downloaded node
+     * @param aError Error code
+     */
+    void DownloadCompleteL( MIAUpdateNode& aNode, TInt aError );
+    
+    /**
+     * Called when installation of an update is completed
+     *
+     * @param aNode Installed node
+     * @param aError Error code
+     */
+    void InstallCompleteL( MIAUpdateNode& aNode, TInt aError );
+    
+    /**
+     * Called when updating is completed
+     *
+     * @param aError Error code
+     */
+    void UpdateCompleteL( TInt aError );
+
+    /**
+     * Finishes the update flow after server reports are sent
+     * or when cancel is called while sending.
+     *
+     * @param aError Error code
+     */
+    void EndUpdateFlowL( TInt aError );
+    
+    /**
+     * Callback of CIdle, calls CheckUpdates()
+     *
+     * @param aPtr Pointer to this instance
+     */
+    static TInt CheckUpdatesDeferredCallbackL( TAny* aPtr );
+                       
+    /**
+     * Shows waiting/progress dialog during update process.
+     *
+     * @param aTextResourceId Resource id of text (Downloading or Installing)
+     * @param aName           Name of update
+     * @param aNumber         Counter of current update
+     * @param aTotalCount     Total count of updates to be updated
+     */                   
+    void ShowUpdatingDialogL( TInt aTextResourceId,
+                              const TDesC& aName,
+                              TInt aNumber,
+                              TInt aTotalCount );  
+     
+    /**
+     * Shows waiting dialog during update process.
+     *
+     * @param aDisplayString       A string to be displayed
+     * @param aVisibilityDelayOff  ETrue if visibility delay is off
+     */                  
+    void ShowWaitDialogL( const TDesC& aDisplayString, 
+                          TBool aVisibilityDelayOff ); 
+    
+    /**
+     * Shows progress dialog during update process.
+     *
+     * @param aDisplayString       A string to be displayed
+     * @param aVisibilityDelayOff  ETrue if visibility delay is off
+     */  
+    void ShowProgressDialogL( const TDesC& aDisplayString, 
+                              TBool aVisibilityDelayOff ); 
+    
+    /**
+     * Removes all possible existing update flow dialogs.
+     * This method is a general way to handle removal of 
+     * wait or progress dialogs.
+     */
+    void RemoveUpdatingDialogsL();
+    
+    /**
+     * Removes waiting dialog.
+     */ 
+    void RemoveWaitDialogL();
+    
+    /**
+     * Removes progress dialog.
+     */ 
+    void RemoveProgressDialogL();
+    
+    /**
+     * Checks if refreshing of update list allowed from a network
+     * @return ETrue if network refresh allowed
+     */
+    TBool AllowNetworkRefreshL();
+    
+    /**
+     * Checks if local update list cache is expired
+     * @return ETrue if local cache is expired
+     */
+    TBool LocalNodesExpiredL();
+    
+    /**
+     * Updates local update list cache controller file
+     */
+    void UpdateControllerFileL();
+    
+    /**
+     * Checks if a phone is connected in a roaming network
+     * @return ETrue if roaming network 
+     */ 
+    TBool IsRoaming();
+    
+    /**
+     * Checks how iaupdate is started
+     * @return ETrue if started by iaupdatelauncher, otherwise started by a client application 
+     */
+    TBool IsStartedByLauncher();
+
+    /**
+     * Starts the self updater process if there exists updates that require separate
+     * updater.
+     * @return TBool ETrue if the updater is started. 
+     *               EFalse if updater was not started.
+     */
+    TBool StartPossibleSelfUpdateL();
+    
+    /**
+     * Updates self update item error codes into the purchase history
+     * after self updater could not do its job.
+     * @param aErrorCode Error code that self updater has failed with.
+     */
+    void UpdateFailedSelfUpdaterInfoToPurchaseHistoryL( TInt aErrorCode );
+    
+   /**
+     * Handles user cancel
+     */    
+    void HandleUserCancelL();
+
+    /**
+     * @return TBool ETrue if IAD has been started right after
+     * the self update. In other words, self update related data
+     * has not been handled yet. Else EFalse.
+     */
+    TBool CIAUpdateUiController::RestartedFromSelfUpdate();
+    
+    /**
+     * Writes the possible parameter information into the temporary
+     * file. This is used to save paremeter data during self update.
+     */    
+    void ParamsWriteFileL();
+    
+    /**
+     * Removes the temporary parameters file if it exists.
+     */
+    void ParamsRemoveFileL();
+            
+    void CreateSelectedNodesArrayL();
+    
+    TBool IAUpdateEnabledL() const;
+
+private: // data
+
+    enum TState
+        {
+        EIdle,
+        ERefreshing,
+        EDownloading,
+        EInstalling,
+        ESendingReport,
+        EUiRefreshing,
+        ESelfUpdating
+        };
+
+    MIAUpdateUiControllerObserver& iObserver;
+
+    MIAUpdateController* iController;
+    
+    RPointerArray< MIAUpdateNode > iNodes;   
+    
+    RPointerArray< MIAUpdateNode > iSelectedNodesArray; 
+
+    RPointerArray< MIAUpdateFwNode > iFwNodes;   
+   
+    CArrayFix<SIAUpdateNodeId>* iPreviousSelections;
+    
+    RPointerArray<MIAUpdateNode> iServicePackNodes;
+ 
+    CIAUpdateWaitDialog* iWaitDialog;
+    
+    CIAUpdateProgressDialog* iProgressDialog;
+    
+    CIAUpdateStarter* iStarter;
+    
+    CIAUpdateRoamingHandler* iRoamingHandler;
+    
+    CIAUpdateRefreshHandler* iRefreshHandler;
+    
+    TInt iCountOfAvailableUpdates;
+
+    TInt iNodeIndex;                               
+
+    CIAUpdateNodeFilter* iFilter;
+
+    CIAUpdateControllerFile* iControllerFile;
+    
+    CIdle* iIdle;
+            
+    CEikonEnv* iEikEnv; //not owned
+    
+    IAUpdateUiDefines::TIAUpdateUiRequestType iRequestType;
+    
+    TState iState;
+    
+    TBool iClosingAllowedByClient;
+    
+    CIAUpdateUiConfigData* iConfigData;
+    
+    CIAUpdateParameters* iParams;
+    
+    TBool iUserRoamingRejection;
+    
+    TBool iCancelling;
+    
+    TBool iFileInUseError;
+    
+    TBool iRefreshed;
+    
+    TBool iRefreshFromNetworkDenied; 
+    
+    TBool iOffConfigurated;
+        
+    TBool iTestRole;
+
+    };
+
+#endif // IAUPDATEUICONTROLLER_H
+