diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/notifsrc/AknGlobalNote.cpp --- /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 +#include +#include + +#include +#include + +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 msg( KAKNNOTIFIERSIGNATURE_GETNOTEID ); + TPckgBuf 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 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 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