skins/AknSkins/srvsrc/aknssrvactivedataowner.cpp
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/srvsrc/aknssrvactivedataowner.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2007-2008 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:  Skin server's active data owner in backup/restore.
+*
+*/
+
+
+#include <connect/abclient.h>
+#include <connect/sbdefs.h>
+#include <e32property.h>
+
+#include "aknssrvactivedataowner.h"
+#include "aknssrvactivebackupdataclient.h"
+
+#include "AknsDebug.h"
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvActiveDataOwner* CAknsSrvActiveDataOwner::NewL( RFs& aFsSession )
+    {
+    AKNS_TRACE_DEBUG("CAknsSrvActiveDataOwner::NewL");
+    CAknsSrvActiveDataOwner* self =
+        new ( ELeave ) CAknsSrvActiveDataOwner( aFsSession );
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAknsSrvActiveDataOwner::~CAknsSrvActiveDataOwner()
+    {
+    AKNS_TRACE_DEBUG("CAknsSrvActiveDataOwner::destructor");
+    DoCancel();
+    iBackupProperty.Close();
+    delete iCallBack;
+    delete iActiveBackupClient;
+    }
+
+// ---------------------------------------------------------------------------
+// Active object's request handling.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvActiveDataOwner::RunL()
+    {
+    AKNS_TRACE_DEBUG("CAknsSrvActiveDataOwner::RunL");
+    if ( iStatus.Int() == KErrNone )
+        {
+        TInt currentValue = KErrNone;
+        iBackupProperty.Get( currentValue );
+
+        HandleBackupStateL( currentValue );
+        }
+    // Re-subscribe notifications.
+    SubscribePSKey();
+    }
+
+// ---------------------------------------------------------------------------
+// Active object's request error handling.
+// ---------------------------------------------------------------------------
+//
+TInt CAknsSrvActiveDataOwner::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Cancel the request.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvActiveDataOwner::DoCancel()
+    {
+    AKNS_TRACE_DEBUG("CAknsSrvActiveDataOwner::DoCancel");
+    if ( IsActive() )
+        {
+        iBackupProperty.Cancel();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvActiveDataOwner::CAknsSrvActiveDataOwner( RFs& aFsSession ) :
+    CActive( EPriorityNormal ), iFsSession( aFsSession )
+    {
+    AKNS_TRACE_DEBUG("CAknsSrvActiveDataOwner::ConstructL");
+
+    // Attach to backup key.
+    iBackupProperty.Attach( KUidSystemCategory, conn::KUidBackupRestoreKey );
+
+    // Add to active scheduler.
+    CActiveScheduler::Add( this );
+
+    // Start listening for changes in backup/restore p&s-key.
+    SubscribePSKey();
+    }
+
+// ---------------------------------------------------------------------------
+// Handles changes in backup state.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvActiveDataOwner::HandleBackupStateL( const TInt aValue )
+    {
+    AKNS_TRACE_DEBUG1("CAknsSrvActiveDataOwner::HandleBackupStateL %d", aValue );
+    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 = CAknsSrvActiveBackupDataClient::NewL( iFsSession );
+            }
+        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;
+                }
+            }
+
+        iCallBack->PrepareForBURL( type );
+        iActiveBackupClient->ConfirmReadyForBURL( KErrNone );
+        }
+    else
+        {
+        if ( type == conn::EBURNormal )
+            {
+            // delete once back to normal.
+            delete iCallBack;
+            iCallBack = NULL;
+            delete iActiveBackupClient;
+            iActiveBackupClient = NULL;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Subsribes notifications of backup/restore p&s key.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvActiveDataOwner::SubscribePSKey()
+    {
+    AKNS_TRACE_DEBUG("CAknsSrvActiveDataOwner::SubscribePSKey" );
+    Cancel();
+    if ( !IsActive() )
+        {
+        iStatus = KRequestPending;
+        iBackupProperty.Subscribe( iStatus );
+        SetActive();
+        }
+    }
+
+// End of file