--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailserver/cmailhandlerplugin/src/fsmailledhandler.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,200 @@
+/*
+* 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: Class to handle mail led turning on. Uses parts from previous
+* Bridge implementation.
+*
+*/
+
+
+#include "emailtrace.h"
+#include <e32property.h>
+#include "EmailLedValues.h"
+#include "fsmailledhandler.h"
+#include "fsnotificationhandlertimer.h"
+
+
+// Timeout value for retrying to set the led property again
+static const TInt KLedRetryTimeout = 15*1000*1000;
+
+
+CFSMailLedHandler* CFSMailLedHandler::NewL(
+ MFSNotificationHandlerMgr& aOwner )
+ {
+ FUNC_LOG;
+ CFSMailLedHandler* self =
+ new (ELeave) CFSMailLedHandler( aOwner );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CFSMailLedHandler::CFSMailLedHandler(
+ MFSNotificationHandlerMgr& aOwner ) :
+ CFSNotificationHandlerBase( aOwner ),
+ iState( EStarting ),
+ iRetryCount( 0 )
+ {
+ FUNC_LOG;
+ }
+
+void CFSMailLedHandler::ConstructL()
+ {
+ FUNC_LOG;
+ CFSNotificationHandlerBase::ConstructL();
+
+ iTimer = CFSNotificationHandlerTimer::NewL( *this );
+
+ // Now try and retrieve the property value
+ TimerCallBackL( KErrNone );
+ }
+
+CFSMailLedHandler::~CFSMailLedHandler()
+ {
+ FUNC_LOG;
+ delete iTimer;
+ iTimer = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// At startup this function will try up to KMaxLedRetry times
+// to open the LED property. If the property still fails to open, we will
+// assume that the LED is not supported by the hardware.
+// ---------------------------------------------------------------------------
+//
+void CFSMailLedHandler::TimerCallBackL( TInt aError )
+ {
+ FUNC_LOG;
+ // request complete handler
+ if ( aError == KErrNone )
+ {
+ switch ( iState )
+ {
+ case EStarting:
+ {
+ // Check if LED property exists. If not then this handler
+ // is not necessary.
+ RProperty property;
+
+ TInt ret = property.Attach( KPropertyUidEmailLedCategory,
+ KEmailLEDOnRequest );
+ if ( KErrNone != ret )
+ {
+ // Led Starting Attach Failed
+ property.Close();
+
+ // timer not needed any more
+ delete iTimer;
+ iTimer = NULL;
+
+ ERROR_1( ret, "Attaching prop KPropertyUidEmailLedCategory failed: %d", ret )
+ return;
+ }
+
+ TInt val;
+ ret = property.Get( val );
+
+ if ( KErrNone != ret )
+ {
+ iRetryCount++;
+ if ( iRetryCount > KMaxLedRetry )
+ {
+ // Done Retrying, assume Led not supported
+ iState = ENotSupportLED;
+ }
+ else
+ {
+ //start a timer to wait 15 seconds
+ iTimer->After( KLedRetryTimeout );
+ }
+ }
+ else
+ {
+ // We are now ready to observe mail events
+ SetObserving( ETrue );
+ iState = ESupportLED;
+ }
+ property.Close();
+ break;
+ }
+ case ESupportLED:
+ case ENotSupportLED:
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// HandleEvent is implemented also here because we need to check the
+// Home Screen status.
+// ---------------------------------------------------------------------------
+//
+void CFSMailLedHandler::HandleEventL(
+ TFSMailEvent aEvent,
+ TFSMailMsgId aMailbox,
+ TAny* aParam1,
+ TAny* aParam2,
+ TAny* aParam3 )
+ {
+ FUNC_LOG;
+ // Event is checked also in CFSNotificationHandlerBase::HandleEventL.
+ // Implementation could be improved so that there would be no need
+ // for doing it twice. Now it has must be done here as we don't want
+ // to check HS if this would not be a new mail. Also
+ // CFSNotificationHandlerBase::HandleEventL needs the check the event
+ // because CFSNotificationHandlerBase::HandleEventL is used in some
+ // cases alone. (without the kind of prechecking that this function
+ // does)
+ if ( aEvent == TFSEventNewMail )
+ {
+ CFSNotificationHandlerBase::HandleEventL( aEvent,
+ aMailbox,
+ aParam1,
+ aParam2,
+ aParam3 );
+ }
+ }
+
+
+
+void CFSMailLedHandler::TurnNotificationOn()
+ {
+ FUNC_LOG;
+ RProperty property;
+
+ TInt ret = property.Attach( KPropertyUidEmailLedCategory, KEmailLEDOnRequest );
+
+ if ( KErrNone != ret )
+ {
+ // Led Attach Failed
+ property.Close();
+ return;
+ }
+
+ ret = property.Set( KSetEmailLedOn );
+ property.Close();
+ ERROR_1( ret, "TurnLedOn failed: %d", ret )
+ }
+
+void CFSMailLedHandler::TurnNotificationOff()
+ {
+ FUNC_LOG;
+ return;
+ }
+
+// End of file
+