uifw/AvKon/notifsrc/AknGlobalNote.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/notifsrc/AknGlobalNote.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2002-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:  Implementation for the client used to show global notes.
+*
+*/
+
+
+#include "AknGlobalNote.h"
+
+#include <s32mem.h>
+#include <AknNotifySignature.h>
+#include <aknSDData.h>
+
+#include <gfxtranseffect/gfxtranseffect.h>
+#include <akntransitionutils.h>
+
+const TInt KBufferGranularity    = 128;
+const TInt KGlobalNoteTextLength = 256;
+
+void CheckOpcodeForDisplayingGlobalNoteL( TInt aType )
+    {
+    if ( ( aType < EAknGlobalInformationNote ||
+           aType > EAknGlobalTextNote ||
+           aType == EAknCancelGlobalNote ) &&
+         aType != EAknGlobalBatteryFullUnplugNote &&
+         aType != EAknGlobalUnplugChargerNote )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    }
+
+EXPORT_C CAknGlobalNote* CAknGlobalNote::NewL()
+    {
+    CAknGlobalNote* self = NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+EXPORT_C CAknGlobalNote* CAknGlobalNote::NewLC()
+    {
+    CAknGlobalNote* self = new (ELeave) CAknGlobalNote;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+EXPORT_C CAknGlobalNote::~CAknGlobalNote()
+    {
+    delete iBuffer;
+    delete iCancelBuffer;
+    }
+
+EXPORT_C void CAknGlobalNote::SetTextProcessing( TBool aEnabled )
+    {
+    iTextProcessing = aEnabled;
+    }
+
+EXPORT_C TInt CAknGlobalNote::ShowNoteL( TRequestStatus& aStatus, 
+                                         TAknGlobalNoteType aType,
+                                         const TDesC& aNoteText )
+    {
+    CheckOpcodeForDisplayingGlobalNoteL( aType );
+    
+    // We need to pre-allocate a note id for the global note first. It is fetched synchronously.
+    TPckgBuf<TInt32> msg( KAKNNOTIFIERSIGNATURE_GETNOTEID );
+    TPckgBuf<SAknGlobalNoteReturnParams> noteIdRetPckg;
+    StartOrUpdateL( msg, noteIdRetPckg );
+
+    // Then the global note is shown asynchronously with pre-allocated note id as a parameter. 
+    PrepareBufferL( aType, aNoteText, noteIdRetPckg().iNoteId );
+    StartOrUpdateAndGetResponseL( aStatus, iBufferPtr, iRetPckg );
+
+    return noteIdRetPckg().iNoteId;
+    }
+
+EXPORT_C TInt CAknGlobalNote::ShowNoteL( TAknGlobalNoteType aType,
+                                         const TDesC& aNoteText )
+    {
+    CheckOpcodeForDisplayingGlobalNoteL( aType );
+    PrepareBufferL( aType, aNoteText );
+    TPckgBuf<SAknGlobalNoteReturnParams> retPckg;
+    StartOrUpdateL( iBufferPtr, retPckg );
+
+    return retPckg().iNoteId;
+    }
+
+void CAknGlobalNote::PrepareBufferL( 
+    TAknGlobalNoteType aType,
+    const TDesC& aNoteText,
+    TInt aPreallocatedGlobalNoteId)
+    {
+    CBufFlat* buffer = CBufFlat::NewL( KBufferGranularity );
+    CleanupStack::PushL( buffer );
+    
+    TBool isAdapterEnabled( EFalse );
+
+    if ( iPriority > 0xFFFF ) // It would overflow, we use this as an
+                              // indication that global note has been
+        {                     // activated from adapter.  
+        isAdapterEnabled = ETrue;
+        iPriority = 0;        // Restore default priority
+        }
+
+    DoGlobalNoteBufferL(
+        aType,
+        iPriority,
+        iSoftkeys,
+        iGraphic,
+        iGraphicMask,
+        iAnimation,
+        iTone,
+        isAdapterEnabled,
+        iTextProcessing,
+        aNoteText,
+        buffer,
+        aPreallocatedGlobalNoteId
+        );
+    
+    if ( SecondaryDisplayData() )
+        {
+        RBufWriteStream bufStream;
+        // To overwrite sd info previously set
+        bufStream.Open( *buffer, buffer->Size() - 1 );
+
+        CleanupClosePushL( bufStream );
+
+        bufStream.WriteInt8L( ETrue );
+        bufStream << *( SecondaryDisplayData() );        
+        
+        CleanupStack::PopAndDestroy( &bufStream );
+        }
+        
+    if (aType == EAknCancelGlobalNote)
+        {
+        delete iCancelBuffer;
+        iCancelBuffer = buffer;
+        iCancelBufferPtr.Set( buffer->Ptr( 0 ) );
+        }
+    else
+        {
+        delete iBuffer;
+        iBuffer = buffer;
+        iBufferPtr.Set( buffer->Ptr( 0 ) );
+        }        
+        
+    CleanupStack::Pop( buffer );
+    }
+
+EXPORT_C void CAknGlobalNote::CancelNoteL( TInt aNoteId )
+    {
+    TInt oldPriority = iPriority;
+    iPriority        = aNoteId;
+    
+    PrepareBufferL( EAknCancelGlobalNote, KNullDesC );
+    TPckgBuf<SAknGlobalNoteReturnParams> retPckg;
+    StartOrUpdateL( iCancelBufferPtr, retPckg );
+    iPriority = oldPriority;
+    }
+
+EXPORT_C void CAknGlobalNote::SetPriority( TInt aPriority )
+    {
+    iPriority = aPriority;
+    }
+
+EXPORT_C void CAknGlobalNote::SetSoftkeys( TInt aId )
+    {
+    iSoftkeys = aId;
+    }
+
+EXPORT_C void CAknGlobalNote::SetGraphic( TInt aId, TInt aMaskId )
+    {
+    iGraphic     = aId;
+    iGraphicMask = aMaskId;
+    }
+
+EXPORT_C void CAknGlobalNote::SetAnimation( TInt aResourceId )
+    {
+    iAnimation = aResourceId;
+    }
+
+EXPORT_C void CAknGlobalNote::SetTone( TInt aTone )
+    {
+    iTone = aTone;
+    }
+
+CAknGlobalNote::CAknGlobalNote() : CAknNotifyBase( KAknGlobalNoteUid )
+    {
+    iGraphic        = -1;
+    iGraphicMask    = -1;
+    iTone           = -1;
+    iTextProcessing = ETrue;
+    }
+
+void CAknGlobalNote::ConstructL()
+    {
+    CAknNotifyBase::ConstructL();
+    }
+
+EXPORT_C void CAknGlobalNote::CAknNotifyBase_Reserved()
+    {
+    }
+
+EXPORT_C void CAknGlobalNote::DoGlobaNoteBufferL(
+    TInt16 aType,
+    TInt16 aPriority,
+    TInt aSoftkeys,
+    TInt16 aGraphic,
+    TInt16 aGraphicMask,
+    TInt aAnimation,
+    TInt16 aTone,
+    TBool aAdapterUsed,
+    TBool aTextProcessingEnabled,
+    const TDesC& aNoteText,
+    CBufFlat* aBuffer )
+    {
+    DoGlobalNoteBufferL(
+        aType,
+        aPriority,
+        aSoftkeys,
+        aGraphic,
+        aGraphicMask,
+        aAnimation,
+        aTone,
+        aAdapterUsed,
+        aTextProcessingEnabled,
+        aNoteText,
+        aBuffer,
+        0);
+    }
+    
+void CAknGlobalNote::DoGlobalNoteBufferL(
+    TInt16 aType,
+    TInt16 aPriority,
+    TInt aSoftkeys,
+    TInt16 aGraphic,
+    TInt16 aGraphicMask,
+    TInt aAnimation,
+    TInt16 aTone,
+    TBool aAdapterUsed,
+    TBool aTextProcessingEnabled,
+    const TDesC& aNoteText,
+    CBufFlat* aBuffer,
+    TInt32 aPreallocatedGlobalNoteId)
+    {
+    if ( aNoteText.Length() > KGlobalNoteTextLength )
+        {
+        User::Leave( KErrTooBig );
+        }
+
+    RBufWriteStream bufStream;
+    bufStream.Open( *aBuffer );
+
+    CleanupClosePushL( bufStream );
+
+    bufStream.WriteInt32L( KAKNNOTIFIERSIGNATURE );
+
+    bufStream.WriteInt16L( aType );
+    bufStream << aNoteText;
+    bufStream.WriteInt16L( aPriority );
+    bufStream.WriteInt32L( aSoftkeys );
+    bufStream.WriteInt16L( aGraphic );
+    bufStream.WriteInt16L( aGraphicMask );
+    bufStream.WriteInt32L( aAnimation );
+    bufStream.WriteInt16L( aTone );
+    bufStream.WriteInt8L( aAdapterUsed );
+    bufStream.WriteInt8L( aTextProcessingEnabled );
+    bufStream.WriteInt32L( aPreallocatedGlobalNoteId );
+    bufStream.WriteInt8L( EFalse ); // suppress sd data by default
+
+    CleanupStack::PopAndDestroy( &bufStream );
+    }
+
+// End of File