diff -r fb3763350a08 -r 4d54b72983ae taskswitcher/contextengine/hgfswpreviewprovider/src/previewprovider.cpp --- a/taskswitcher/contextengine/hgfswpreviewprovider/src/previewprovider.cpp Fri Jan 22 09:35:14 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,586 +0,0 @@ -/* -* ============================================================================== -* Name : %name: previewprovider.cpp % -* Part of : Hg fast swap preview provider plugin -* Description : Preview provider API -* Version : %version: sa1spcx1#3 % -* -* Copyright (c) 2008 Nokia Corporation. -* This material, including documentation and any related -* computer programs, is protected by copyright controlled by -* Nokia Corporation. All rights are reserved. Copying, -* including reproducing, storing, adapting or translating, any -* or all of this material requires the prior written consent of -* Nokia Corporation. This material also contains confidential -* information which may not be disclosed to others without the -* prior written consent of Nokia Corporation. -* ============================================================================== -*/ - -#include "hgpreviewprovider.h" -#include "hgpreviewobserver.h" -#include "previewmsg.h" -#include "previewproviderlogging.h" -#include -#include -#include - -#define SZ( x ) ( sizeof( x ) / sizeof( TInt ) ) - -// CONSTANTS - -// Publish & subscribe UID (akncapserver.exe SID so that it can define the keys) -const TUid KPSUidPreviewProvider = { 0x10207218 }; - -// P&S keys -const TUint32 KPSKeyWgId = 0x20016BE1; -const TUint32 KPSKeyFbsBitmapId = 0x20016BE2; -const TUint32 KPSKeyOperation = 0x20016BE3; - -/** - * Operation which will be done after P&S keys have changed. - */ -enum TPreviewOperation - { - EOperationNone, - EOperationUnregister, - EOperationBitmapUpdated - }; - -/** - * CPropertyListener - */ -NONSHARABLE_CLASS( CPropertyListener ) : public CActive - { -public: - static CPropertyListener* NewL( MHgFastSwapPreviewObserver& aObs ); - virtual ~CPropertyListener(); - -protected: - CPropertyListener( MHgFastSwapPreviewObserver& aObs ); - void ConstructL(); - -private: // From CActive - void RunL(); - void DoCancel(); - -private: - void ReadPropertiesL(); - void DefinePropertyL( TInt aPSKey ); - void Subscribe(); - -private: - MHgFastSwapPreviewObserver& iObs; - RProperty iProperty; - - TInt iWgId; - TInt iFbsBitmapId; - - TPreviewOperation iOperation; - }; - -// -------------------------------------------------------------------------- -// CPropertyListener::~CPropertyListener -// -------------------------------------------------------------------------- -// -CPropertyListener::~CPropertyListener() - { - Cancel(); - iProperty.Close(); - } - -// -------------------------------------------------------------------------- -// CPropertyListener::CPropertyListener -// -------------------------------------------------------------------------- -// -CPropertyListener::CPropertyListener( MHgFastSwapPreviewObserver& aObs ) : - CActive( CActive::EPriorityHigh ), iObs( aObs ) - { - } - -// -------------------------------------------------------------------------- -// CPropertyListener::NewL -// -------------------------------------------------------------------------- -// -CPropertyListener* CPropertyListener::NewL( MHgFastSwapPreviewObserver& aObs ) - { - CPropertyListener* self = new ( ELeave ) CPropertyListener( aObs ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// -------------------------------------------------------------------------- -// CPropertyListener::RunL -// -------------------------------------------------------------------------- -// -void CPropertyListener::RunL() - { - // Resubscribe before processing new value to prevent missing updates - Subscribe(); - - // Read all properties to member variables - ReadPropertiesL(); - - // Do the callback - switch( iOperation ) - { - case EOperationUnregister: - { - iObs.HandleFswPpApplicationUnregistered( iWgId ); - break; - } - case EOperationBitmapUpdated: - { - iObs.HandleFswPpApplicationChange( iWgId, iFbsBitmapId ); - break; - } - default: - break; - } - } - -// -------------------------------------------------------------------------- -// CPropertyListener::DoCancel -// -------------------------------------------------------------------------- -// -void CPropertyListener::DoCancel() - { - iProperty.Cancel(); - } - -// -------------------------------------------------------------------------- -// CPropertyListener::ReadProperties -// -------------------------------------------------------------------------- -// -void CPropertyListener::ReadPropertiesL() - { - // Read all properties - User::LeaveIfError( iProperty.Get( KPSUidPreviewProvider, KPSKeyWgId, iWgId ) ); - User::LeaveIfError( iProperty.Get( KPSUidPreviewProvider, KPSKeyFbsBitmapId, iFbsBitmapId ) ); - TInt operation( 0 ); - User::LeaveIfError( iProperty.Get( KPSUidPreviewProvider, KPSKeyOperation, operation ) ); - iOperation = static_cast( operation ); - } - -// -------------------------------------------------------------------------- -// CPropertyListener::DefinePropertyL -// -------------------------------------------------------------------------- -// -void CPropertyListener::DefinePropertyL( TInt aPSKey ) - { - TInt err = RProperty::Define( KPSUidPreviewProvider, aPSKey, RProperty::EInt ); - // Don't mind the already exists error - if ( err != KErrAlreadyExists && err != KErrPermissionDenied ) - { - User::LeaveIfError( err ); - } - } - -// -------------------------------------------------------------------------- -// CPropertyListener::Subscribe -// -------------------------------------------------------------------------- -// -void CPropertyListener::Subscribe() - { - iProperty.Subscribe( iStatus ); - SetActive(); - } - -// -------------------------------------------------------------------------- -// CPropertyListener::ConstructL -// -------------------------------------------------------------------------- -// -void CPropertyListener::ConstructL() - { - HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL ); - HGLOG_IN(); - - DefinePropertyL( KPSKeyWgId ); - DefinePropertyL( KPSKeyFbsBitmapId ); - DefinePropertyL( KPSKeyOperation ); - - User::LeaveIfError( iProperty.Attach( KPSUidPreviewProvider, KPSKeyWgId ) ); - CActiveScheduler::Add( this ); - - // initial subscription - Subscribe(); - - HGLOG_OUT(); - } - -/** - * CHgFastSwapPreviewProviderClient - */ -NONSHARABLE_CLASS( CHgFastSwapPreviewProviderClient ) : public CWsGraphic - { -public: - CHgFastSwapPreviewProviderClient( MHgFastSwapPreviewObserver& aObs ); - void ConstructL(); - void Register( TInt aWgId ); - void Unregister( TInt aWgId ); - void ChangeScreen( TInt aScreenNo ); - void SetPreviewParam( const TSize& aSize, TDisplayMode aMode ); - void TakePreview(); - void AckPreview( TInt aPreviewId ); - virtual ~CHgFastSwapPreviewProviderClient(); -private: - void HandleMessage( const TDesC8& aData ); - void OnReplace(); -private: - void DoHandleMessageL( const TDesC8& aData ); - void SetProperties( TInt aHandle, TInt aWgId, TInt aOp ); -private: - MHgFastSwapPreviewObserver& iObs; - CPropertyListener* iListener; - }; - - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::CHgFastSwapPreviewProviderClient -// -------------------------------------------------------------------------- -// -CHgFastSwapPreviewProviderClient::CHgFastSwapPreviewProviderClient( - MHgFastSwapPreviewObserver& aObs ) : iObs( aObs ) - { - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::~CHgFastSwapPreviewProviderClient -// -------------------------------------------------------------------------- -// -CHgFastSwapPreviewProviderClient::~CHgFastSwapPreviewProviderClient() - { - delete iListener; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::ConstructL -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::ConstructL() - { - HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL ); - HGLOG_IN(); - - const TUid id = { 0x20016BEC }; - BaseConstructL( id, KNullDesC8 ); - iListener = CPropertyListener::NewL( iObs ); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::Register -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::Register( TInt aWgId ) - { - HGLOG_CONTEXT( Register, HGLOG_LOCAL ); - HGLOG_IN(); - - const TInt msg[] = { - NPreviewMsg::ERegister, - aWgId - }; - TPckgC buf(msg); - SendMessage(buf); - Flush(); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::Unregister -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::Unregister( TInt aWgId ) - { - HGLOG_CONTEXT( Unregister, HGLOG_LOCAL ); - HGLOG_IN(); - - const TInt msg[] = { - NPreviewMsg::EUnregister, - aWgId - }; - TPckgC buf(msg); - SendMessage(buf); - Flush(); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::ChangeScreen -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::ChangeScreen( TInt aScreenNo ) - { - HGLOG_CONTEXT( ChangeScreen, HGLOG_LOCAL ); - HGLOG_IN(); - - const TInt msg[] = { - NPreviewMsg::EChangeScreen, - aScreenNo - }; - TPckgC buf(msg); - SendMessage(buf); - Flush(); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::SetPreviewParam -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::SetPreviewParam(const TSize& aSize, - TDisplayMode aMode) - { - HGLOG_CONTEXT( SetPreviewParam, HGLOG_LOCAL ); - HGLOG_IN(); - - const TInt msg[] = { - NPreviewMsg::ESetPreviewParam, - aSize.iWidth, - aSize.iHeight, - static_cast(aMode) - }; - TPckgC buf(msg); - SendMessage(buf); - Flush(); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::TakePreview -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::TakePreview() - { - HGLOG_CONTEXT( TakePreview, HGLOG_LOCAL ); - HGLOG_IN(); - - TPckgC buf(NPreviewMsg::ETakePreview); - SendMessage(buf); - Flush(); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::AckPreview -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::AckPreview( TInt aPreviwId ) - { - HGLOG_CONTEXT( TakePreview, HGLOG_LOCAL ); - HGLOG_IN(); - - const TInt msg[] = { NPreviewMsg::EAckPreviewReady, - aPreviwId }; - TPckgC buf(msg); - SendMessage(buf); - Flush(); - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::HandleMessage -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::HandleMessage( const TDesC8& aData ) - { - TRAP_IGNORE(DoHandleMessageL(aData)); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::DoHandleMessageL -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::DoHandleMessageL( const TDesC8& aData ) - { - HGLOG_CONTEXT( DoHandleMessageL, HGLOG_LOCAL ); - HGLOG_IN(); - - RDesReadStream in( aData ); - TInt message = in.ReadInt32L(); - switch ( message ) - { - case NPreviewMsg::EPreviewReady: - { - const TInt id = in.ReadInt32L(); - const TInt handle = in.ReadInt32L(); - SetProperties( handle, id, EOperationBitmapUpdated ); - } - break; - case NPreviewMsg::EUnregisterReady: - { - const TInt id = in.ReadInt32L(); - const TInt handle = in.ReadInt32L(); - SetProperties( handle, id, EOperationUnregister ); - } - break; - } - - HGLOG_OUT(); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::SetProperties -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::SetProperties(TInt aHandle, TInt aWgId, - TInt aOp) - { - // Notify CPropertyListener via P&S - RProperty::Set( KPSUidPreviewProvider, KPSKeyFbsBitmapId, aHandle ); - RProperty::Set( KPSUidPreviewProvider, KPSKeyOperation, aOp ); - // KPSKeyWgId should be notified first since that is being listened - // by CPropertyListener - RProperty::Set( KPSUidPreviewProvider, KPSKeyWgId, aWgId ); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProviderClient::OnReplace -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProviderClient::OnReplace() - { - } - -///////////////////////////////////////////////////////////////////////////// - - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::NewL -// -------------------------------------------------------------------------- -// -EXPORT_C CHgFastSwapPreviewProvider* CHgFastSwapPreviewProvider::NewL( - MHgFastSwapPreviewObserver& aObs) - { - CHgFastSwapPreviewProvider* p = new (ELeave) CHgFastSwapPreviewProvider(); - CleanupStack::PushL( p ); - p->ConstructL( aObs ); - CleanupStack::Pop( p ); - return p; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::~CHgFastSwapPreviewProvider -// -------------------------------------------------------------------------- -// -EXPORT_C CHgFastSwapPreviewProvider::~CHgFastSwapPreviewProvider() - { - if ( iClient ) - { - iClient->Destroy(); - } - delete iClient; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::Register -// -------------------------------------------------------------------------- -// -EXPORT_C TInt CHgFastSwapPreviewProvider::Register( TInt aWgId ) - { - iClient->Register( aWgId ); - return KErrNone; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::Unregister -// -------------------------------------------------------------------------- -// -EXPORT_C TInt CHgFastSwapPreviewProvider::Unregister( TInt aWgId ) - { - iClient->Unregister( aWgId ); - return KErrNone; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::ChangeScreen -// -------------------------------------------------------------------------- -// -EXPORT_C TInt CHgFastSwapPreviewProvider::ChangeScreen( TInt aScreenId ) - { - iClient->ChangeScreen( aScreenId ); - return KErrNone; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::SetPreviewParam -// -------------------------------------------------------------------------- -// -EXPORT_C TInt CHgFastSwapPreviewProvider::SetPreviewParam(const TSize& aSize, - TDisplayMode aMode) - { - HGLOG_CONTEXT( SetPreviewParam, HGLOG_LOCAL ); - HGLOG_IN(); - - TInt error( KErrNone ); - - if ( aMode == ENone || aMode == EColor64K ) - { - iClient->SetPreviewParam( aSize, aMode ); - } - else - { - error = KErrNotSupported; - } - - HGLOG_OUT(); - return error; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::TakePreview -// -------------------------------------------------------------------------- -// -EXPORT_C TInt CHgFastSwapPreviewProvider::TakePreview() - { - // Reset timer for screensaver (dismiss screensaver) - User::ResetInactivityTime(); - - iClient->TakePreview(); - return KErrNone; - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::AckPreview -// -------------------------------------------------------------------------- -// -EXPORT_C void CHgFastSwapPreviewProvider::AckPreview( TInt aPreviewId ) - { - iClient->AckPreview( aPreviewId ); - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::CHgFastSwapPreviewProvider -// -------------------------------------------------------------------------- -// -CHgFastSwapPreviewProvider::CHgFastSwapPreviewProvider() - { - } - -// -------------------------------------------------------------------------- -// CHgFastSwapPreviewProvider::ConstructL -// -------------------------------------------------------------------------- -// -void CHgFastSwapPreviewProvider::ConstructL( MHgFastSwapPreviewObserver& aObs ) - { - HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL ); - HGLOG_IN(); - - iClient = new ( ELeave ) CHgFastSwapPreviewProviderClient( aObs ); - iClient->ConstructL(); - - HGLOG_OUT(); - } - -// End of file -