diff -r 000000000000 -r ba25891c3a9e iaupdate/IAD/ui/inc/iaupdateuicontroller.h --- /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 +#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* iPreviousSelections; + + RPointerArray 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 +