diff -r ebe688cedc25 -r 7fdbb852d323 messagingappbase/mce/src/mceiaupdateutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/src/mceiaupdateutils.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,315 @@ +/* +* Copyright (c) 2002 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: +* Application class for Mce. +* +*/ + +// system include files go here: + +#include +#include +#include +#include + +// user include files go here: +#include "mceui.h" +#include "mceiaupdateutils.h" +#include "MceLogText.h" + +// CONSTANT + +// Defines the time span in hours for the next IAD update check event +// which will be trigered. +const TInt KMceIADUpdateCheckRetryInterval = 24; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ default constructor. +// --------------------------------------------------------------------------- +// +CMceIAUpdateUtils::CMceIAUpdateUtils(CMceUi& aMceUi) +: CActive(EPriorityStandard),iUpdate( NULL ), iParameters( NULL ),iMceUi( aMceUi ) + { + CActiveScheduler::Add(this); + } + + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::ConstructL() + { + iUpdate = NULL; + iParameters = NULL; + // set it to current time. + iPrevIADUpdateCheckTry.UniversalTime(); + } + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CMceIAUpdateUtils* CMceIAUpdateUtils::NewL(CMceUi& aMceUi) + { + CMceIAUpdateUtils* self = new( ELeave ) CMceIAUpdateUtils(aMceUi); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CMceIAUpdateUtils::~CMceIAUpdateUtils() + { + Delete(); + Cancel(); + } + +// --------------------------------------------------------------------------- +// Start IA update process. +// --------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::DoStartL( const TUid aAppUid ) + { + if(!iUpdate) + { + iUpdate = CIAUpdate::NewL( *this ); + } + + if( !iParameters ) + { + iParameters = CIAUpdateParameters::NewL(); + } + + if( iUpdate && iParameters ) + { + iParameters->SetUid( aAppUid ); + + // Don't want any wait dialog. + iParameters->SetShowProgress( EFalse ); + + // Check the updates + MCELOGGER_WRITE("StartL --- check updates"); + iUpdate->CheckUpdates( *iParameters ); + } + else + { + Delete(); //Delete session with IAD server + } + } + +// --------------------------------------------------------------------------- +// Cleanup function. +// --------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::Delete() + { + if( iUpdate ) + { + delete iUpdate; + iUpdate = NULL; + } + if( iParameters ) + { + delete iParameters; + iParameters = NULL; + } + } + +// ----------------------------------------------------------------------------- +// From class MIAUpdateObserver. +// This callback function is called when the update checking operation has +// completed. +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::CheckUpdatesComplete( TInt aErrorCode, + TInt aAvailableUpdates ) + { + TBool bContinue = EFalse; + + if ( aErrorCode == KErrNone ) + { + if ( aAvailableUpdates > 0 ) + { + if((iMceUi.IsForeground())&&(iMceUi.MceViewActive(EMceMainViewActive))) + { + // There were some updates available. + MCELOGGER_WRITE("CheckUpdatesComplete --- updates available"); + iUpdate->UpdateQuery(); + bContinue = ETrue; + } + else + { + MCELOGGER_WRITE("CheckUpdatesComplete --- But MessageView or Delivery Reports View is active"); + } + } + else + { + // No updates available. + MCELOGGER_WRITE("CheckUpdatesComplete --- no updates available"); + } + } + if(!bContinue) + { + Delete(); //Delete session with IAD server + } + + } + +// ----------------------------------------------------------------------------- +// From class MIAUpdateObserver. +// This callback function is called when an update operation has completed. +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::UpdateComplete( TInt aErrorCode, CIAUpdateResult* aResult ) + { + if ( aErrorCode == KErrNone ) + { + // The update process that the user started from IAUpdate UI is now + // completed. + // If the client application itself was updated in the update process, + // this callback is never called, since the client is not running anymore. + MCELOGGER_WRITE("UpdateComplete ---"); + TInt successCount = aResult->SuccessCount(); + } + + if( aResult ) + { + // Ownership was transferred, so this must be deleted by the client. + delete aResult; + } + + // We do not need the client-server session anymore. + Delete(); + } + +// ----------------------------------------------------------------------------- +// From class MIAUpdateObserver. +// This callback function is called when an update query operation has completed. +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::UpdateQueryComplete( TInt aErrorCode, TBool aUpdateNow ) + { + TBool bContinue = EFalse; + if ( aErrorCode == KErrNone ) + { + if ( aUpdateNow ) + { + // User choosed to update now, so let's launch the IAUpdate UI. + MCELOGGER_WRITE("UpdateQueryComplete --- now"); + iUpdate->ShowUpdates( *iParameters ); + bContinue = ETrue; + } + else + { + // The answer was 'Later'. + MCELOGGER_WRITE("UpdateQueryComplete --- later"); + } + } + if(!bContinue) + { + Delete(); //Delete session with IAD server + } + } +// ----------------------------------------------------------------------------- +// From class MIAUpdateObserver. +// This callback function is called when an update query operation has completed. +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::StartL(const TUid aAppUid) + { + if (IsActive()) + { + return; + } + iAppUid = aAppUid; + CompleteSelf(); + } +// ----------------------------------------------------------------------------- +// +// For Setting the Active Object Active +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::CompleteSelf() + { + iStatus = KRequestPending; + TRequestStatus* pStatus = &iStatus; + SetActive(); + User::RequestComplete( pStatus, KErrNone ); + } +// ----------------------------------------------------------------------------- +// From class CActive. +// For Starting the update in a seperate Thread +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::RunL() + { + DoStartL( iAppUid ); + } +// ----------------------------------------------------------------------------- +// From class CActive. +// Nothing to do here +// ----------------------------------------------------------------------------- +// +void CMceIAUpdateUtils::DoCancel() + { + + } + +// --------------------------------------------------------------------------- +// Is IAD Update requried to do now +// YES, If the KMceIADUpdateCheckRetryInterval is over after the previous try +// NO, If the KMceIADUpdateCheckRetryInterval is not over after the previous retry +// --------------------------------------------------------------------------- +// +TBool CMceIAUpdateUtils::IsUpdateRequired() + { + TBool required = EFalse; + TTime currTime; + TTimeIntervalHours hourInterval; + TInt err = KErrNone; + + currTime.UniversalTime(); + + err = currTime.HoursFrom(iPrevIADUpdateCheckTry,hourInterval); + + // KErrNone-> successful case, + // reset the iPrevIADUpdateCheckTry to current time, + // start IAD check update + + // KErrOverflow -> if the calculated interval + // is too large for a 32-bit integer + // reset the iPrevIADUpdateCheckTry to current time + // start IAD check update + + // in all other cases don't do any thing. + + if(((err == KErrNone)&& + (hourInterval.Int() >= KMceIADUpdateCheckRetryInterval )) + ||(err == KErrOverflow)) + { + iPrevIADUpdateCheckTry.UniversalTime(); + required = ETrue; + } + + return required; + } +// EOF