taskswitcher/contextengine/tsfswserver/engine/src/tsfshiddenapplist.cpp
changeset 4 4d54b72983ae
child 30 b8fae6b8a148
--- /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 <apgwgnam.h>
+
+#include <eikenv.h>
+
+// 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<TInt>( 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