diff -r 5315654608de -r 08c6ee43b396 taskswitcher/contextengine/hgfswserver/engine/src/hgfshiddenapplist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/contextengine/hgfswserver/engine/src/hgfshiddenapplist.cpp Mon Jan 18 20:10:36 2010 +0200 @@ -0,0 +1,226 @@ +/* +* ============================================================================ +* Name : hgfshiddenapplist.cpp +* Part of : Hg Teleport / Fast Swap module +* Description : Class that checks if chosen applications should be hidden +* from the task swap. +* Version : %version: sa1spcx1#3 % +* +* Copyright 2008 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. +* ============================================================================ +*/ + +// INCLUDES +#include "hgfshiddenapplist.h" +#include + +#include + +// the maximum size of array (25 32-bit UIDs equal 100 bytes) +const TInt KMaxHiddenApps = 25; + +/** + * Category id for the hidden application list. + */ +const TUid KPSUidUikon = { 0x101F8773 }; +const TUint32 KUikAppHiddenList = 0x00000010; + +/** + * Apps that are always hidden, no matter what settings the system reports. + */ +const TUint32 KHgFsAlwaysHiddenUidArray[] = + { + 0x100056CF // screensaver + }; + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::NewL +// ----------------------------------------------------------------------------- +// +CHgFsHiddenAppList* CHgFsHiddenAppList::NewL( + MHgFsHiddenAppListObserver& aObserver ) + { + CHgFsHiddenAppList* self = + new ( ELeave ) CHgFsHiddenAppList( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::NewLC +// ----------------------------------------------------------------------------- +// +CHgFsHiddenAppList* CHgFsHiddenAppList::NewLC( + MHgFsHiddenAppListObserver& aObserver ) + { + CHgFsHiddenAppList* self = CHgFsHiddenAppList::NewL( aObserver ); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::~CHgFsHiddenAppList +// ----------------------------------------------------------------------------- +// +CHgFsHiddenAppList::~CHgFsHiddenAppList() + { + Cancel(); + + ResetArray(); + delete iHiddenAppList; + + iProperty.Close(); + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::IsHiddenL +// ----------------------------------------------------------------------------- +// +TBool CHgFsHiddenAppList::IsHiddenL( TUid aAppUid, + const RWsSession& aWsSession, + TInt aWgId ) + { + TBool ret = EFalse; + + CApaWindowGroupName* windowName = + CApaWindowGroupName::NewLC( aWsSession, aWgId ); + + if ( windowName->Hidden() ) + { + ret = ETrue; + } + else + { + for ( TInt i = 0, ie = iHiddenAppList->Count(); i != ie; ++i ) + { + if ( aAppUid.iUid == iHiddenAppList->At( i ) ) + { + ret = ETrue; + break; + } + } + if ( !ret ) + { + for ( TInt i = 0, + arrCnt = sizeof( KHgFsAlwaysHiddenUidArray ) / sizeof( TUint32 ); + i != arrCnt; ++i ) + { + if ( KHgFsAlwaysHiddenUidArray[i] == aAppUid.iUid ) + { + ret = ETrue; + break; + } + } + } + } + + CleanupStack::PopAndDestroy( windowName ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::CHgFsHiddenAppList +// ----------------------------------------------------------------------------- +// +CHgFsHiddenAppList::CHgFsHiddenAppList( + MHgFsHiddenAppListObserver& aObserver ) + :CActive( CActive::EPriorityHigh ), iObserver( aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::ConstructL +// ----------------------------------------------------------------------------- +// +void CHgFsHiddenAppList::ConstructL() + { + const TInt KMaxGranularity = 4; + CActiveScheduler::Add( this ); + + iHiddenAppList = new (ELeave) CArrayFixFlat( KMaxGranularity ); + User::LeaveIfError( iProperty.Attach( KPSUidUikon, KUikAppHiddenList, EOwnerThread ) ); + + // must not call RunL directly from here as things are not fully initialized yet + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::ResetArray +// ----------------------------------------------------------------------------- +// +void CHgFsHiddenAppList::ResetArray() + { + if ( iHiddenAppList ) + { + iHiddenAppList->Reset(); + } + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::UpdateListL +// ----------------------------------------------------------------------------- +// +void CHgFsHiddenAppList::UpdateListL() + { + ResetArray(); + + // hidden list array + TBuf16 <2*KMaxHiddenApps> hiddenList; + iProperty.Get( hiddenList ); + + for ( TInt i = 0; i < hiddenList.Length(); i = i + 2 ) + { + TUint32 uid = 0x00000000; + uid = hiddenList[i]; + uid = uid << 16; // codescanner::magicnumbers + uid |= hiddenList[i+1]; + + if ( uid != 0 ) + { + iHiddenAppList->AppendL( uid ); + } + else + { + break; + } + } + + iObserver.HiddenAppListUpdated(); + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::DoCancel +// ----------------------------------------------------------------------------- +// +void CHgFsHiddenAppList::DoCancel() + { + iProperty.Cancel(); + } + +// ----------------------------------------------------------------------------- +// CHgFsHiddenAppList::RunL +// ----------------------------------------------------------------------------- +// +void CHgFsHiddenAppList::RunL() + { + if ( !IsActive() ) + { + iProperty.Subscribe( iStatus ); + SetActive(); + } + UpdateListL(); + } + + +// end of file