--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/widgetbackuprestore/Src/WidgetBackupRestore.cpp Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Widget's active data owner in backup/restore.
+*
+*/
+
+
+#include <abclient.h>
+#include <e32property.h>
+#include "widgetbackuprestore.h"
+#include "WidgetActiveCallback.h"
+
+
+// CONSTANTS
+
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CWidgetBackupRestore* CWidgetBackupRestore::NewL()
+ {
+ CWidgetBackupRestore* self =
+ new ( ELeave ) CWidgetBackupRestore();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CWidgetBackupRestore::~CWidgetBackupRestore()
+ {
+ Cancel();
+
+ iBackupProperty.Close();
+ delete iCallBack;
+ delete iActiveBackupClient;
+ }
+
+// ---------------------------------------------------------------------------
+// Active object's request handling.
+// ---------------------------------------------------------------------------
+//
+void CWidgetBackupRestore::RunL()
+ {
+ if ( iStatus.Int() == KErrNone )
+ {
+ TInt currentValue = KErrNone;
+ iBackupProperty.Get( currentValue );
+
+ HandleBackupStateL( currentValue );
+ }
+ else
+ {
+ //RunError( iStatus.Int() );
+ }
+
+ // Re-subscribe notifications.
+ SubscribePSKey();
+ }
+
+// ---------------------------------------------------------------------------
+// Active object's request error handling.
+// ---------------------------------------------------------------------------
+//
+TInt CWidgetBackupRestore::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// Cancel the request.
+// ---------------------------------------------------------------------------
+//
+void CWidgetBackupRestore::DoCancel()
+ {
+ iBackupProperty.Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CWidgetBackupRestore::CWidgetBackupRestore() :
+ CActive( EPriorityNormal )
+ {
+ // Add to active scheduler.
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CWidgetBackupRestore::ConstructL()
+ {
+#ifdef _DEBUG
+ _LIT(KDir, "WidgetBUR");
+ _LIT(KFile, "WidgetBUR.log");
+ TInt err( 0 );
+
+ err = iFileLogger.Connect();
+ if ( err == KErrNone )
+ {
+ iFileLogger.CreateLog( KDir(), KFile(), EFileLoggingModeOverwrite );
+ iCanLog = ETrue;
+ }
+#endif
+ iLastType = conn::EBURUnset;
+
+ // Attach to backup key.
+ iBackupProperty.Attach( KUidSystemCategory, conn::KUidBackupRestoreKey );
+
+ // Handle initial B&R key value, then start listening for further changes.
+ RunL();
+ }
+
+// ---------------------------------------------------------------------------
+// Handles changes in backup state.
+// ---------------------------------------------------------------------------
+//
+void CWidgetBackupRestore::HandleBackupStateL( const TInt aValue )
+ {
+ const TInt type = aValue & conn::KBURPartTypeMask;
+
+ // Test if the device is going into backup or restore mode, and we are
+ // required to participate.
+ if ( ( type == conn::EBURBackupFull || type == conn::EBURRestoreFull ) ||
+ ( type == conn::EBURBackupPartial || type == conn::EBURRestorePartial ) )
+ {
+ if ( !iCallBack )
+ {
+ iCallBack = CWidgetActiveCallback::NewL();
+ }
+
+ if ( !iActiveBackupClient )
+ {
+ iActiveBackupClient = conn::CActiveBackupClient::NewL( iCallBack );
+
+ if ( ( type == conn::EBURBackupPartial ||
+ type == conn::EBURRestorePartial ) &&
+ !iActiveBackupClient->DoesPartialBURAffectMeL() )
+ {
+ delete iCallBack;
+ iCallBack = NULL;
+ delete iActiveBackupClient;
+ iActiveBackupClient = NULL;
+ return;
+ }
+ }
+
+ iActiveBackupClient->ConfirmReadyForBURL( KErrNone );
+ }
+ else
+ {
+ if ( type == conn::EBURNormal )
+ {
+ if ( iLastType == conn::EBURBackupFull || iLastType == conn::EBURBackupPartial )
+ {
+ iCallBack->CleanupBackupDataL();
+ }
+
+ // delete once back to normal.
+ delete iCallBack;
+ iCallBack = NULL;
+ delete iActiveBackupClient;
+ iActiveBackupClient = NULL;
+
+ // Stop the scheduler, which will allow
+ // the process to exit.
+ CActiveScheduler::Stop();
+ }
+ }
+
+ iLastType = type;
+ }
+
+// ---------------------------------------------------------------------------
+// Subsribes notifications of backup/restore p&s key.
+// ---------------------------------------------------------------------------
+//
+void CWidgetBackupRestore::SubscribePSKey()
+ {
+ Cancel();
+
+ iBackupProperty.Subscribe( iStatus );
+ SetActive();
+ }
+
+void MainL()
+ {
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+ CActiveScheduler::Install( scheduler );
+ CleanupStack::PushL( scheduler );
+ //
+ CWidgetBackupRestore* widBUR = CWidgetBackupRestore::NewL();
+ CleanupStack::PushL( widBUR );
+ CActiveScheduler::Start();
+ //
+ CleanupStack::PopAndDestroy( 2, scheduler );
+ }
+
+TInt E32Main()
+ {
+ TInt err = KErrNoMemory;
+ //
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+ if ( cleanupStack )
+ {
+ TRAP( err, MainL() );
+ }
+ //
+ delete cleanupStack;
+ return err;
+ }