syncmlfw/syncmlnotifier/src/SyncMLNotifierBase.cpp
branchRCL_3
changeset 26 19bba8228ff0
parent 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/syncmlnotifier/src/SyncMLNotifierBase.cpp	Wed Sep 01 12:27:42 2010 +0100
@@ -0,0 +1,287 @@
+/*
+* Copyright (c) 2005 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:  Implementation of the SyncML Appserver starter notifier
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <settingsinternalcrkeys.h>
+#include <e32property.h>
+#include <coreapplicationuisdomainpskeys.h>
+#include <eikenv.h>          // Eikon environment
+#include <uikon/eiksrvui.h>        // Eikon server ui (for suppressing app -key)
+#include <bautils.h>         // BAFL utils (for language file)
+#include <data_caging_path_literals.hrh> 
+#include <AknNotiferAppServerApplication.h>
+
+#include "SyncMLNotifierBase.h"
+#include "SyncMLNotifDebug.h"
+
+// CONSTANTS
+// Literals for resource and bitmap files ( drive, directory, filename(s) )
+_LIT(KFileDrive,"z:");
+_LIT(KResourceFileName, "SyncMLNotifier.rsc");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::CSyncMLNotifierBase
+// C++ default constructor can NOT contain any code, that
+// might leave. Sets the AOs priority and puts
+// itself to the active scheduler stack.
+// -----------------------------------------------------------------------------
+//
+CSyncMLNotifierBase::CSyncMLNotifierBase() : CActive(EPriorityStandard)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::ConstructL
+// Symbian 2nd phase constructor can leave.
+// Create registry object and open resource file.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::ConstructL()
+    {
+    FLOG(_L("[SmlNotif]\t CSyncMLNotifierBase::ConstructL()"));
+
+    iEikEnv = CEikonEnv::Static();
+
+    TFileName filename;
+    filename += KFileDrive;
+    filename += KDC_RESOURCE_FILES_DIR; 
+    filename += KResourceFileName;
+    BaflUtils::NearestLanguageFile( iEikEnv->FsSession(), filename );
+    iResourceFileFlag = iEikEnv->AddResourceFileL( filename );
+    FLOG(_L("[SmlNotif]\t CSyncMLNotifierBase::ConstructL() completed"));
+    }
+    
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CSyncMLNotifierBase::~CSyncMLNotifierBase()
+    {
+    Cancel();
+    iEikEnv->DeleteResourceFile( iResourceFileFlag );
+
+    // Complete the RMessage2 if needed
+    //
+    if ( iNeedToCompleteMessage )
+        {
+        iMessage.Complete( KErrDied );
+        }
+
+	// Activate apps -key again (if not previously activated yet)
+	SuppressAppSwitching( EFalse );
+
+    iReplySlot = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::Release
+// Release itself. Call to destructor.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::Release()
+    {
+    delete this;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::Info
+// Return registered information.
+// -----------------------------------------------------------------------------
+//
+CSyncMLNotifierBase::TNotifierInfo CSyncMLNotifierBase::Info() const
+    {
+    return iInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::StartL
+// Synchronic notifier launch. Does nothing here.
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CSyncMLNotifierBase::StartL( const TDesC8& /*aBuffer*/ )
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::StartL(sync)") );
+    TPtrC8 ret( KNullDesC8 );
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::StartL(sync) completed") );
+    return ( ret );
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::StartL
+// Asynchronic notifier launch.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::StartL( const TDesC8& aBuffer,
+                                        TInt aReplySlot,
+                                  const RMessagePtr2& aMessage )
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::StartL(async)") );
+    TRAPD( err, GetParamsL( aBuffer, aReplySlot, aMessage ) );
+    if ( err )
+        {
+        aMessage.Complete( err );
+        iNeedToCompleteMessage = EFalse;
+        User::Leave( err );
+        }
+    FLOG(_L("[SmlNotif]\t CSyncMLNotifierBase::StartL(async) completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::Cancel
+// Cancelling method.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::Cancel()
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::Cancel()") );
+    if (iNeedToCompleteMessage)
+    	{
+    	iMessage.Complete(KErrCancel);
+    	iNeedToCompleteMessage = EFalse;
+    	}
+    iNeedToCompleteMessage = EFalse;
+    iReplySlot = NULL;
+
+    // Activate apps -key again (if not previously activated yet)
+	SuppressAppSwitching( EFalse );
+
+    CActive::Cancel();
+
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::Cancel() completed") );
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::UpdateL
+// Notifier update. Not supported.
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CSyncMLNotifierBase::UpdateL(const TDesC8& /*aBuffer*/)
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::UpdateL()") );
+    TPtrC8 ret(KNullDesC8);
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::UpdateL() completed") );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::DoCancel
+// This method will be called by framework (CActive)
+// if active object is still active.
+// Does nothing here.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::DoCancel()
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::DoCancel()") );
+	FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::DoCancel()--End") );
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::RunError
+// This method is called if any leaving has been occured
+// during RunL. Optional method for CActive derived objects.
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLNotifierBase::RunError( TInt aError )
+    {
+    FTRACE( FPrint( _L("[SmlNotif]\t CSyncMLNotifierBase::RunError() Error = %d"), aError ) );
+    // Activate apps -key again (if not previously activated yet)
+	SuppressAppSwitching( EFalse );
+
+    // Complete message if needed and return the error code.
+    if( iNeedToCompleteMessage )
+        {
+        iMessage.Complete( aError );
+        }
+    iNeedToCompleteMessage = EFalse;
+    iReplySlot = NULL;
+
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::RunError() completed") );
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::TurnLightsOn
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::TurnLightsOn()
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::TurnLightsOn()") );
+
+    RProperty::Set( KPSUidCoreApplicationUIs, KLightsControl, ELightsOn );
+    RProperty::Set( KPSUidCoreApplicationUIs, KLightsControl, ELightsOff );
+
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::TurnLightsOn() completed") );
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::AutoLockOnL
+// -----------------------------------------------------------------------------
+//
+TBool CSyncMLNotifierBase::AutoLockOnL()
+    {
+    FLOG( _L("[SmlNotif]\t CSyncMLNotifierBase::AutoLockOnL()") );
+
+    TBool result = EFalse;
+    TInt status = 1;
+    
+    // Connecting and initialization:
+    CRepository* repository = CRepository::NewL( KCRUidSecuritySettings );
+
+    repository->Get( KSettingsAutolockStatus, status );
+
+    // Closing connection:
+    delete repository;
+
+    if ( status == 1 )
+        {
+        result = ETrue;
+        }
+
+    FTRACE( FPrint(
+        _L("[SmlNotif]\t CSyncMLNotifierBase::AutoLockOnL() completed with %d"),
+        result ) );
+
+    return result;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSyncMLNotifierBase::SuppressAppSwitchching
+// -----------------------------------------------------------------------------
+//
+void CSyncMLNotifierBase::SuppressAppSwitching( TBool aEnable )
+    {	   
+    if ( iAppsKeyBlocked != aEnable )
+        {
+        TInt err = ( ( CAknNotifierAppServerAppUi* )
+            ( CEikonEnv::Static() )->EikAppUi() )->
+            SuppressAppSwitching( aEnable );
+        iAppsKeyBlocked = aEnable;
+        }
+    }
+
+//  End of File