--- a/pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpProvisioningSaver.cpp Tue Feb 02 00:03:17 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,407 +0,0 @@
-/*
-* Copyright (c) 2002-2006 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: Helper class for saving Provisioning settings.
-* Provides a progress note.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <AknQueryDialog.h>
-#include <eikprogi.h>
-#include <PnpProvisioning.rsg>
-#include <commdb.h>
-#include <CWPEngine.h>
-#include <CWPAdapter.h>
-#include <ActiveFavouritesDbNotifier.h>
-
-#include "PnpProvisioningSaver.h"
-#include "PnpLogger.h"
-#include "cwaitdialogmonitor.h"
-
-// CONSTANTS
-const TInt KMaxWaitTime = 1000000;
-
-// CLASS DECLARATION
-
-// ================= MEMBER FUNCTIONS =======================
-
-// C++ default constructor.
-CPnpProvisioningSaver::CPnpProvisioningSaver( CWPEngine& aEngine, TBool aSetAsDefault, TBool aWaitNote )
-: CActive( EPriorityStandard ), iEngine( aEngine ),
- iSetAsDefault( aSetAsDefault ),
- iCurrentItem( 0 ), iResult( KErrNone ),iEndKeyPressed(EFalse), iShowWaitNote(aWaitNote)
- {
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::ExecuteLD
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::PrepareLC()
- {
- // Assume ownership of this.
- CleanupStack::PushL( this );
-
- iApDbNotifier = CActiveApDb::NewL( EDatabaseTypeIAP );
- iApDbNotifier->AddObserverL( this );
-
- iRetryTimer = CPeriodic::NewL( EPriorityStandard );
-
- LOGSTRING("Constructing dialog");
-
- // Set up the dialog and callback mechanism.
- if(iSetAsDefault && iShowWaitNote)
- ShowWaitNoteL();
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::ExecuteLD
-// ---------------------------------------------------------
-//
-TInt CPnpProvisioningSaver::ExecuteLD( TInt& aNumSaved )
- {
- LOGSTRING( "ExecuteLD" );
- PrepareLC();
-
- // make sure RunL() gets called.
- CompleteRequest();
- iWait.Start();
-
- LOGSTRING("iWait.Start done");
- // Progress note has been finished/cancelled. Cache the result
- // and delete this.
- TInt result( iResult );
- aNumSaved = iCurrentItem;
- CleanupStack::PopAndDestroy( this ); // this
- LOGSTRING( "PopAndDestroy( this ), done" );
-
- return result;
- }
-
-// Destructor
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::~CPnpProvisioningSaver
-// ---------------------------------------------------------
-//
-CPnpProvisioningSaver::~CPnpProvisioningSaver()
- {
- LOGSTRING( "~CPnpProvisioningSaver" );
-
- if( IsActive() )
- {
- Cancel();
- }
-
- if( iApDbNotifier )
- {
- iApDbNotifier->RemoveObserver( this );
- delete iApDbNotifier;
- }
-
- if( iRetryTimer )
- {
- if( iRetryTimer->IsActive() )
- {
- iRetryTimer->Cancel();
- }
- delete iRetryTimer;
- }
-
-
- if( iGlobalWaitNote )
- {
- delete iGlobalWaitNote;
- }
-
- if( iWaitDialogMonitor )
- {
- iWaitDialogMonitor->Cancel();
- delete iWaitDialogMonitor;
- }
-
- LOGSTRING( "~CPnpProvisioningSaver - done" );
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::DoCancel
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::DoCancel()
- {
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::RunL
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::RunL()
- {
- // Choose whether to save or set as default
- TInt err( KErrNone );
- if( iSetAsDefault )
- {
- TRAP( err,
- if( iEngine.CanSetAsDefault( iCurrentItem ) )
- {
- iEngine.SetAsDefaultL( iCurrentItem );
- } );
- }
- else
- {
-
- LOGSTRING2("Saving item: %i", iCurrentItem );
- TRAP( err, iEngine.SaveL( iCurrentItem ) );
-
- }
-
- // If CommsDB or BookmarkDB are locked, schedule a retry
- if( err == EWPCommsDBLocked )
- {
- LOGSTRING( "CPnpProvisioningSaver: EWPCommsDBLocked" );
- iWaitCommsDb = ETrue;
- DelayedCompleteRequest();
- return;
- }
- else if( err == EWPBookmarksLocked )
- {
- LOGSTRING( "CPnpProvisioningSaver: EWPBookmarksLocked" );
- iWaitFavourites = ETrue;
- DelayedCompleteRequest();
- return;
- }
- else if( err == KErrLocked )
- {
- LOGSTRING( "CPnpProvisioningSaver: KErrLocked" );
- // Assume that commsdb caused the error
- iWaitCommsDb = ETrue;
- DelayedCompleteRequest();
- return;
- }
- // For all other errors, pass them through.
- User::LeaveIfError( err );
-
- // Normal progress
- if( iCurrentItem == iEngine.ItemCount()-1 )
- {
- LOGSTRING("All saved");
- //LOGSTRING2( "Saver RunL iWaitDialogMonitor->iStatus %i", iWaitDialogMonitor->iStatus.Int() );
- ProcessFinishedL();
- }
- else
- {
- //LOGSTRING2( "Saver RunL 2nd iWaitDialogMonitor->iStatus %i", iWaitDialogMonitor->iStatus.Int() );
- iCurrentItem++;
- CompleteRequest();
- }
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::ProcessFinishedL
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::ProcessFinishedL()
- {
- //LOGSTRING2( "Saver iWaitDialogMonitor->iStatus %i", iWaitDialogMonitor->iStatus.Int() );
- iWait.AsyncStop();
- if(iWaitDialogMonitor)
- {
- //End key or cancel pressed after saving settings
- if(iWaitDialogMonitor->iStatus == KErrCancel)
- {
- iEndKeyPressed = ETrue;
- }
- if( iGlobalWaitNote )
- {
- delete iGlobalWaitNote;
- iGlobalWaitNote = NULL;
- }
- }
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::RunError
-// ---------------------------------------------------------
-//
-TInt CPnpProvisioningSaver::RunError( TInt aError )
- {
- LOGSTRING2( "RunError: %i", aError );
- // There was a leave in RunL(). Store the error and
- // stop the dialog.
- iResult = aError;
- TInt err(KErrNone);
- TRAP( err, ProcessFinishedL() );
-
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::ShowWaitNoteL
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::ShowWaitNoteL()
- {
- HBufC* msgText = CEikonEnv::Static()->
- AllocReadResourceLC( R_TEXT_WAIT_SAVING );
-
- if (iWaitDialogMonitor)
- {
- iWaitDialogMonitor->Cancel();
- delete iWaitDialogMonitor;
- iWaitDialogMonitor = NULL;
- }
- // instantiate the active object CGlobalConfirmationObserver
- iWaitDialogMonitor = CWaitDialogMonitor::NewL( *this );
-
- // SetActive
- iWaitDialogMonitor->Start();
-
- if (!iGlobalWaitNote)
- {
- iGlobalWaitNote = CAknGlobalNote::NewL();
- }
-
- iGlobalWaitNote->SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY);
-
- iGlobalWaitNote->ShowNoteL(
- iWaitDialogMonitor->iStatus,
- EAknGlobalWaitNote,
- *msgText );
-
- CleanupStack::PopAndDestroy( msgText );
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::WaitDialogDismissedL
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::WaitDialogDismissedL( const TInt aStatusCode )
- {
- LOGSTRING( "DialogDismissedL" );
- if( aStatusCode == EAknSoftkeyCancel || aStatusCode == EAknSoftkeyExit )
- {
- LOGSTRING( "setting to KErrCancel" );
- iResult = KErrCancel;
- }
- //pressed end key and not all settings saved
- if( aStatusCode== KErrCancel && iEndKeyPressed )
- {
- LOGSTRING( "End key pressed" );
- iResult = KErrCancel;
- }
-
- iWait.AsyncStop();
- }
-
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::CompleteRequest
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::CompleteRequest()
- {
- // Schedule an immediate complete. Make sure that there
- // is no timer alive first
- if( IsActive() )
- {
- Cancel();
- }
- if( iRetryTimer->IsActive() )
- {
- iRetryTimer->Cancel();
- }
- SetActive();
- TRequestStatus* sp = &iStatus;
- User::RequestComplete( sp, KErrNone );
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::DelayedCompleteRequest
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::DelayedCompleteRequest()
- {
- // Schedule a delayed complete. Cancel first in case
- // an immediate request was scheduled.
- if( IsActive() )
- {
- Cancel();
- }
- if( iRetryTimer->IsActive() )
- {
- iRetryTimer->Cancel();
- }
-
- iRetryTimer->Start( KMaxWaitTime, 0, TCallBack( Timeout, this ) );
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::Retry
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::Retry()
- {
- // Immediate retry. Mark that we're not waiting
- // for an event and complete request.
- iWaitCommsDb = EFalse;
- iWaitFavourites = EFalse;
- CompleteRequest();
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::Timeout
-// ---------------------------------------------------------
-//
-TInt CPnpProvisioningSaver::Timeout(TAny* aSelf)
- {
- // There was a time-out. Retry saving even though we
- // didn't get a notify from database.
- CPnpProvisioningSaver* self = STATIC_CAST(CPnpProvisioningSaver*, aSelf);
- self->Retry();
-
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::HandleApDbEventL
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::HandleApDbEventL( TEvent aEvent )
- {
- // We received an event from CommsDB. Retry if we're
- // waiting for it.
- if( iWaitCommsDb && aEvent == EDbAvailable )
- {
- Retry();
- }
- }
-
-// ---------------------------------------------------------
-// CPnpProvisioningSaver::HandleFavouritesDbEventL
-// ---------------------------------------------------------
-//
-void CPnpProvisioningSaver::HandleFavouritesDbEventL( RDbNotifier::TEvent /*aEvent*/ )
- {
- // We received an event from BookmarkDB. Retry if we're
- // waiting for it.
- if( iWaitFavourites )
- {
- Retry();
- }
- }
-
-// End of File
-