nwnotifier/src/networknotifiernotewrapper.cpp
branchRCL_3
changeset 3 a4a774cb6ea7
child 6 1b9ee3c7442d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nwnotifier/src/networknotifiernotewrapper.cpp	Fri Feb 19 23:21:58 2010 +0200
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2010 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: Active object wrapper to handle popup note.
+*
+*/
+
+// System includes
+#include <avkon.hrh>
+#include <aknglobalconfirmationquery.h> 
+#include <bautils.h>
+#include <pathinfo.h>
+
+// Includes
+#include "networknotifiernotewrapper.h"
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNetworkNotifierNoteWrapper* CNetworkNotifierNoteWrapper::NewL( MNoteWrapperObserver& aObserver,
+                                                                TInt aResID )
+    {
+    CNetworkNotifierNoteWrapper* self = new( ELeave ) CNetworkNotifierNoteWrapper( aObserver,
+                                                                                   aResID );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );    
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::ConstructL
+// 
+// -----------------------------------------------------------------------------
+//
+void CNetworkNotifierNoteWrapper::ConstructL()
+    {
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::ConstructL() -START") );
+    
+    User::LeaveIfError( iFs.Connect() );
+    
+    HBufC* note = ReadResourceLC();
+    
+    if( note )
+        {
+        DisplayPopupNoteL( note );
+        CleanupStack::PopAndDestroy( note );
+        }
+    
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::ConstructL() -END") );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::CNetworkNotifierNoteWrapper
+// 
+// -----------------------------------------------------------------------------
+//
+CNetworkNotifierNoteWrapper::CNetworkNotifierNoteWrapper( MNoteWrapperObserver& aObserver, 
+                                                          TInt aResID ) : 
+                                                          CActive( EPriorityStandard ), 
+                                                          iObserver( aObserver ) 
+    {
+    iErrNotes.Insert( aResID, 0 );
+    CActiveScheduler::Add( this );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::~CNetworkNotifierNoteWrapper
+// 
+// -----------------------------------------------------------------------------
+//
+CNetworkNotifierNoteWrapper::~CNetworkNotifierNoteWrapper()
+    {
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::~CNetworkNotifierNoteWrapper() -START") );
+    
+    iFs.Close();
+    iErrNotes.Close(); // cleanup and close
+    
+    Cancel();
+    delete iGlobalQuery;
+    
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::~CNetworkNotifierNoteWrapper() -END") );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::AppendNote
+//
+// Monitor inserts the latest error notification err# from ETEL to this stack
+// -----------------------------------------------------------------------------
+//
+void CNetworkNotifierNoteWrapper::AppendNote( const TInt aResID )
+    {
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::AppendNote() -START") );
+    iErrNotes.Insert( aResID, 0 );
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::AppendNote() -END") );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::DisplayPopupNoteL
+// 
+// -----------------------------------------------------------------------------
+//
+void CNetworkNotifierNoteWrapper::DisplayPopupNoteL( HBufC* aNote )
+    {
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::DisplayPopupNoteL() -START") );
+    
+    if( !IsActive() )
+        {   
+        if( !iGlobalQuery )
+			{
+            iGlobalQuery = CAknGlobalConfirmationQuery::NewL();
+        	}
+		if( aNote )
+			{
+        	iGlobalQuery->ShowConfirmationQueryL( iStatus, 
+                                                  *aNote, 
+                                                  R_AVKON_SOFTKEYS_OK_EMPTY, 
+                                                  R_QGN_NOTE_WARNING_ANIM );
+			}
+		
+        SetActive();
+        }
+
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::DisplayPopupNoteL() -END") );
+    }
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::ReadResourceLC
+//
+// Just to read localized error strings from resource 
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CNetworkNotifierNoteWrapper::ReadResourceLC()
+    {
+    RDebug::Print(
+            _L("NW: CNetworkNotifierNoteWrapper::ReadResourceLC() -START") );
+
+    TInt resId;
+    RResourceFile resFile;
+    TResourceReader reader;
+
+    TFileName fullFileName;
+    TDriveUnit driveNum = PathInfo::RomRootPath();
+
+    fullFileName.Insert( 0, driveNum.Name() );
+    fullFileName.Append( KResFile );
+
+    TFileName file( fullFileName );
+    HBufC16* textBuffer = NULL;
+    
+    // We are interested in the most recent err note at a time
+    resId = iErrNotes[0];
+
+    // Err# can be removed from the stack now
+    iErrNotes.Remove( 0 );
+        
+    BaflUtils::NearestLanguageFile( iFs, file );   
+    resFile.OpenL( iFs, file );
+    // According to SDK docs, resFile will be closed if this function leaves
+    resFile.ConfirmSignatureL();
+    
+    HBufC8* readBuffer = resFile.AllocReadLC( resId );
+    reader.SetBuffer( readBuffer );
+    
+    TPtrC textdata = reader.ReadTPtrC();
+    textBuffer = HBufC16::NewL( textdata.Length() );
+    *textBuffer = textdata;
+    
+    CleanupStack::PopAndDestroy( readBuffer );
+    CleanupStack::PushL( textBuffer );
+    
+    resFile.Close();
+        
+    RDebug::Print(
+            _L("NW: CNetworkNotifierNoteWrapper::ReadResourceLC() -END"));
+    return textBuffer;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::RunL
+// Pure virtuals from CActive implemented in this derived class.
+// iStatus error handling is not needed here, since the service provider for
+// this AO (in DisplayPopupNoteL) will leave in case of an error, and will 
+// therefore be handled in RunError.
+// -----------------------------------------------------------------------------
+//
+void CNetworkNotifierNoteWrapper::RunL()
+    {
+    RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::RunL -START") );
+        
+    if( iErrNotes.Count() ) // There are more errors to display: 
+        { 
+        HBufC* note = ReadResourceLC();
+        
+        if ( note )
+            {
+            DisplayPopupNoteL( note );
+            CleanupStack::PopAndDestroy( note );
+            }
+        }
+    else
+        { 
+        // Error note stack is empty, since this task has completed and let monitor 
+        // to destruct this instance
+        RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::RunL : No more notes to display") );
+        iObserver.PopupNoteClosed();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::DoCancel
+// 
+// -----------------------------------------------------------------------------
+//
+void CNetworkNotifierNoteWrapper::DoCancel()
+    {
+    if( iGlobalQuery )
+        {
+        iGlobalQuery->CancelConfirmationQuery();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CNetworkNotifierNoteWrapper::RunError()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNetworkNotifierNoteWrapper::RunError( TInt aError )
+    {
+    // Resource reader failed in ReadResourceLC
+    // Just reissue the request
+    if ( aError )
+        {
+        RDebug::Print( _L("NW: CNetworkNotifierNoteWrapper::RunError: Showing of the note failed!") );
+        }
+    
+    return KErrNone;
+    }
+
+// end of file