diff -r fb3763350a08 -r 4d54b72983ae taskswitcher/contextengine/tsfswserver/engine/src/tsfshiddenapplist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/contextengine/tsfswserver/engine/src/tsfshiddenapplist.cpp Tue Jan 26 11:48:23 2010 +0200 @@ -0,0 +1,226 @@ +/* +* Copyright (c) 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: Class that checks if chosen applications should be hidden +* from the task swap. +* +*/ + + +// INCLUDES +#include "tsfshiddenapplist.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 KTsFsAlwaysHiddenUidArray[] = + { + 0x100056CF // screensaver + }; + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::NewL +// ----------------------------------------------------------------------------- +// +CTsFsHiddenAppList* CTsFsHiddenAppList::NewL( + MTsFsHiddenAppListObserver& aObserver ) + { + CTsFsHiddenAppList* self = + new ( ELeave ) CTsFsHiddenAppList( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::NewLC +// ----------------------------------------------------------------------------- +// +CTsFsHiddenAppList* CTsFsHiddenAppList::NewLC( + MTsFsHiddenAppListObserver& aObserver ) + { + CTsFsHiddenAppList* self = CTsFsHiddenAppList::NewL( aObserver ); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::~CTsFsHiddenAppList +// ----------------------------------------------------------------------------- +// +CTsFsHiddenAppList::~CTsFsHiddenAppList() + { + Cancel(); + + ResetArray(); + delete iHiddenAppList; + + iProperty.Close(); + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::IsHiddenL +// ----------------------------------------------------------------------------- +// +TBool CTsFsHiddenAppList::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( KTsFsAlwaysHiddenUidArray ) / sizeof( TUint32 ); + i != arrCnt; ++i ) + { + if ( KTsFsAlwaysHiddenUidArray[i] == aAppUid.iUid ) + { + ret = ETrue; + break; + } + } + } + } + + CleanupStack::PopAndDestroy( windowName ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::CTsFsHiddenAppList +// ----------------------------------------------------------------------------- +// +CTsFsHiddenAppList::CTsFsHiddenAppList( + MTsFsHiddenAppListObserver& aObserver ) + :CActive( CActive::EPriorityHigh ), iObserver( aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::ConstructL +// ----------------------------------------------------------------------------- +// +void CTsFsHiddenAppList::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(); + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::ResetArray +// ----------------------------------------------------------------------------- +// +void CTsFsHiddenAppList::ResetArray() + { + if ( iHiddenAppList ) + { + iHiddenAppList->Reset(); + } + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::UpdateListL +// ----------------------------------------------------------------------------- +// +void CTsFsHiddenAppList::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(); + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::DoCancel +// ----------------------------------------------------------------------------- +// +void CTsFsHiddenAppList::DoCancel() + { + iProperty.Cancel(); + } + +// ----------------------------------------------------------------------------- +// CTsFsHiddenAppList::RunL +// ----------------------------------------------------------------------------- +// +void CTsFsHiddenAppList::RunL() + { + if ( !IsActive() ) + { + iProperty.Subscribe( iStatus ); + SetActive(); + } + UpdateListL(); + } + + +// end of file