--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/SysApEtelSmsStoreObserver.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,247 @@
+/*
+* 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: CSysApEtelSmsStoreObserver implementation
+*
+*/
+
+
+// INCLUDES
+#include "SysApEtelSmsStoreObserver.h"
+#include "SysApAppUi.h"
+
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::NewL()
+// ----------------------------------------------------------------------------
+CSysApEtelSmsStoreObserver* CSysApEtelSmsStoreObserver::NewL( CSysApAppUi& aSysApAppUi, RMobileSmsStore& aStore )
+ {
+ CSysApEtelSmsStoreObserver* self = new(ELeave) CSysApEtelSmsStoreObserver( aSysApAppUi, aStore );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::CSysApEtelSmsStoreObserver()
+// ----------------------------------------------------------------------------
+CSysApEtelSmsStoreObserver::CSysApEtelSmsStoreObserver( CSysApAppUi& aSysApAppUi, RMobileSmsStore& aStore )
+ : CActive(EPriorityStandard),
+ iSysApAppUi( aSysApAppUi ),
+ iStore( aStore ),
+ iStoreFull( EFalse )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::ConstructL()
+// ----------------------------------------------------------------------------
+void CSysApEtelSmsStoreObserver::ConstructL()
+ {
+ // Get initial value (will also reorder in RunL)
+ TRACES( RDebug::Print(_L("CSysApEtelSmsStoreObserver::ConstructL - Ordering sms store change notifications." ) ) );
+ OrderNotification();
+ }
+
+// ----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::~CSysApEtelSmsStoreObserver()
+// ----------------------------------------------------------------------------
+
+CSysApEtelSmsStoreObserver::~CSysApEtelSmsStoreObserver()
+ {
+ TRACES( RDebug::Print( _L("CSysApEtelSmsStoreObserver::~CSysApEtelSmsStoreObserver") ) );
+ Cancel();
+ delete iStatusReader;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::RunL
+// Handle notification from pubsub session.
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::RunL()
+ {
+ // Check status before reordering as that resets it
+ if ( iStatus == KErrNone )
+ {
+ // Reorder notification
+ OrderNotification();
+ if ( iStatusReader )
+ {
+ iStatusReader->Cancel(); // Status read is not required anymore
+ }
+ TBool previous = iStoreFull;
+
+ TRACES( RDebug::Print(_L("CSysApEtelSmsStoreObserver::RunL - EMobilePhoneStoreNotifyStoreEvent, iNewEvent: 0x%x" ), iNewEvent) );
+ if ( iNewEvent & RMobilePhoneStore::KStoreFull )
+ {
+ iStoreFull = ETrue;
+ }
+ else if ( iNewEvent & RMobilePhoneStore::KStoreHasSpace || iNewEvent & RMobilePhoneStore::KStoreEmpty )
+ {
+ iStoreFull = EFalse;
+ }
+
+ TRACES(RDebug::Print(_L("CSysApEtelSmsStoreObserver::RunL - previous:%d iStoreFull:%d"),previous,iStoreFull));
+
+ // Notify SysApAppUi
+ if ( previous != iStoreFull )
+ {
+ TRAPD(err, iSysApAppUi.HandleSmsStorageNotificationL(iStoreFull));
+ if ( err != KErrNone )
+ {
+ TRACES( RDebug::Print(_L("CSysApEtelSmsStoreObserver::RunL - HandleSmsStorageNotificationL error: %d" ), err ));
+ }
+ }
+ }
+ else
+ {
+ TRACES( RDebug::Print(_L("CSysApEtelSmsStoreObserver::RunL - error: %d" ), iStatus.Int()) );
+
+ // Reorder notification
+ OrderNotification();
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::DoCancel
+// Handle cancel order on this active object.
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::DoCancel()
+ {
+ if ( IsActive() )
+ {
+ iStore.CancelAsyncRequest(EMobilePhoneStoreNotifyStoreEvent);
+ }
+ }
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::OrderNotification
+// Order new notification from CenRep.
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::OrderNotification()
+ {
+ iStore.NotifyStoreEvent(iStatus, iNewEvent, iChangedIndex);
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::IsFull
+// -----------------------------------------------------------------------------
+//
+TInt CSysApEtelSmsStoreObserver::IsFull() const
+ {
+ return iStoreFull;
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::ReadStatusInStartup
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::ReadStatusInStartup()
+ {
+ if ( !iStatusReader )
+ {
+ iStatusReader = new CStoreStatusReader( *this );
+ if ( iStatusReader )
+ {
+ iStatusReader->Start();
+ }
+ else
+ {
+ TRACES( RDebug::Print( _L( "CSysApEtelSmsStoreObserver::ReadStatusInStartup - no memory" ) ) );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::CStoreStatusReader::CStoreStatusReader
+// -----------------------------------------------------------------------------
+//
+CSysApEtelSmsStoreObserver::CStoreStatusReader::CStoreStatusReader(
+ CSysApEtelSmsStoreObserver& aObserver ) :
+ CActive( EPriorityStandard ),
+ iObserver( aObserver ),
+ iInfoPckg( aObserver.iStoreInfo )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::CStoreStatusReader::~CStoreStatusReader
+// -----------------------------------------------------------------------------
+//
+CSysApEtelSmsStoreObserver::CStoreStatusReader::~CStoreStatusReader()
+ {
+ Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::CStoreStatusReader::RunL
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::CStoreStatusReader::RunL()
+ {
+ TInt err( iStatus.Int() );
+ if ( err == KErrNone && !iObserver.iStoreFull )
+ {
+ RMobilePhoneStore::TMobilePhoneStoreInfoV1& info( iObserver.iStoreInfo );
+
+ TRACES( RDebug::Print(
+ _L( "CSysApEtelSmsStoreObserver::CStoreStatusReader::RunL - used:%d total:%d" ),
+ info.iUsedEntries, info.iTotalEntries ) );
+
+ if ( info.iTotalEntries > 0 && info.iUsedEntries >= info.iTotalEntries )
+ {
+ // Blink the Envelope indicator
+ iObserver.iSysApAppUi.SetIndicatorStateL(
+ EAknIndicatorEnvelope, EAknIndicatorStateAnimate );
+ iObserver.iStoreFull = ETrue;
+ }
+ }
+
+ TRACES( RDebug::Print(
+ _L( "CSysApEtelSmsStoreObserver::CStoreStatusReader::RunL - err:%d full:%d" ),
+ err, iObserver.iStoreFull ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::CStoreStatusReader::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::CStoreStatusReader::DoCancel()
+ {
+ iObserver.iStore.CancelAsyncRequest( EMobilePhoneStoreGetInfo );
+ }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelSmsStoreObserver::CStoreStatusReader::Start
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelSmsStoreObserver::CStoreStatusReader::Start()
+ {
+ if ( !IsActive() )
+ {
+ iObserver.iStore.GetInfo( iStatus, iInfoPckg );
+ SetActive();
+ }
+ }
+
+// End of file