coreapplicationuis/SysAp/Src/SysApEtelSmsStoreObserver.cpp
changeset 0 2e3d3ce01487
child 19 924385140d98
--- /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