backsteppingsrv/src/bsengine.cpp
branchv5backport
changeset 16 66e84aa0ed46
parent 12 2f40063dfb5c
child 17 c9bafd575d88
--- a/backsteppingsrv/src/bsengine.cpp	Wed Mar 03 15:38:34 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,348 +0,0 @@
-/*
-* Copyright (c) 2007 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:  Engine for BS Engine
- *
-*/
-
-
-#include <apgtask.h>
-#include <apgwgnam.h>
-#include <eikenv.h>
-#include <e32base.h>
-
-#include "bsengineglobals.h"
-#include "bsdebug.h"
-#include "bsengine.h"
-#include "bsapplicationinfo.h"
-#include "bsconfiguration.h"
-
-// CONSTANTS
-const TInt KSecondTaskIndex( 1);
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CBSEngine::CBSEngine()
-    {
-    iEnv = CEikonEnv::Static( );
-    swap = EFalse;
-    wasPressed = EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CBSEngine::ConstructL()
-    {
-    DEBUG(("Create Engine"));
-    iConfiguration = CBSConfiguration::NewL( );
-    }
-
-// -----------------------------------------------------------------------------
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CBSEngine::~CBSEngine()
-    {
-    DEBUG(("~CBSEngine"));
-    iAppsStack.ResetAndDestroy( );
-    iFocusHistory.Close( );
-
-    delete iConfiguration;
-    }
-
-// -----------------------------------------------------------------------------
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CBSEngine* CBSEngine::NewL()
-    {
-    CBSEngine* self = CBSEngine::NewLC( );
-    CleanupStack::Pop( self ) ;
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CBSEngine* CBSEngine::NewLC()
-    {
-    CBSEngine* self = new ( ELeave ) CBSEngine();
-    CleanupStack::PushL( self );
-    self->ConstructL( ) ;
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-void CBSEngine::ApplicationKeyWasPressed()
-    {
-    wasPressed = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-void CBSEngine::HandleFocusChangeL( const TUid& aApp )
-    {
-    DEBUG(("-> HandleFocusChangeL(0x%X)", aApp.iUid ));
-    // check if application is not in ignored list
-    if ( iConfiguration->IsIgnored( aApp ) )
-        {
-        DEBUG(("\tIgnore the event - application in ignored list"));
-        return;
-        }
-
-    TInt fsCount = iFocusHistory.Count( );
-    if ( fsCount > 0 && iFocusHistory[fsCount - 1] == aApp.iUid )
-        {
-        DEBUG(("\tIgnore the event - application already on top"));
-        swap = EFalse;
-        wasPressed = EFalse;
-        return;
-        }
-
-    // check if we should not reset back stepping stack
-    if ( iConfiguration->IsReset( aApp ) )
-        {
-        swap = EFalse;
-        wasPressed = EFalse;
-        ResetHistory( );
-        }
-
-    // check if we should reset if application was started tru 
-    RArray<TInt>& thuApps = iConfiguration->ResetIfThruList( );
-
-    for ( TInt i = 0; i < thuApps.Count( ); i++ )
-        {
-        // position of application - i.e. fast swap
-        if ( aApp.iUid == thuApps[i] )
-            {
-            //mark that there is a fast swap or dialog
-            swap = ETrue;
-            return;
-            }
-        else
-            {
-            if ( swap )
-                {
-                swap = EFalse;
-                TInt currentApp = aApp.iUid;
-                TInt pos = iFocusHistory.Count( ) - 1;
-                if ( pos >= 0 )
-                    {
-                    TInt prevApp = iFocusHistory[pos];
-                    if ( currentApp != prevApp && wasPressed )
-                        {
-                        //we are here as the result of the fast swap
-                        ResetHistory( );
-                        iFocusHistory.AppendL( thuApps[i] );
-                        wasPressed = EFalse;
-                        }
-                    }
-                }
-            }
-        }
-    // add application to focus history list, 
-    iFocusHistory.AppendL( aApp.iUid );
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-TInt CBSEngine::HandleActivationEventL( const TUid& aApp,
-    const TDesC8& aState, TBool aItem )
-    {
-    DEBUG(("-> HandleActivationEventL(0x%X, %S, 0x%X)",
-                    aApp.iUid, &aState, aItem));
-    TInt result(EBSEngineCommandWasNotConsumed);
-
-#ifdef _DEBUG    
-    // check from which application it was started 
-    for ( TInt i = 0; i< iFocusHistory.Count( ); i++ )
-        {
-        DEBUG(("\tiFocusHistory[%d] = %X)", i, iFocusHistory[i]));
-        }
-#endif        
-
-    // is it the same application - i.e. internal state change - ignore       
-    CBSApplicationInfo* last(NULL);
-    if ( iAppsStack.Count( ) )
-        last = iAppsStack[iAppsStack.Count() - 1];
-
-    if ( last && last->AppUid( ) == aApp )
-        {
-        DEBUG(("\tIgnore the event, application is already on stack"));
-        }
-    else if ( aItem ) // store only item events
-        {
-        CBSApplicationInfo* newApp = CBSApplicationInfo::NewLC();
-        newApp->SetPrevAppUid( FindPreviousApp( aApp ) );
-        newApp->SetAppUid( aApp );
-        newApp->SetItemStateL( aState );
-
-        DEBUG(("\tAdd to BS stack app:0x%X, state:%S, prevapp:0x%X)",
-                        newApp->AppUid().iUid,
-                        &newApp->ItemState(),
-                        newApp->PrevAppUid().iUid));
-        iAppsStack.AppendL( newApp );
-        CleanupStack::Pop( newApp );
-        result = EBSEngineCommandWasConsumed;
-        }
-
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-TInt CBSEngine::HandleBackEventL( const TUid& aApp, const TDesC8& aState,
-    TBool aCheckOnly )
-    {
-    DEBUG(("-> HandleBackEventL(0x%X, %S, 0x%X )",
-                    aApp.iUid, &aState, aCheckOnly ));
-    TInt result(EBSEngineCommandWasNotConsumed);
-    // get last application at stack
-    CBSApplicationInfo* info(NULL);
-    if ( iAppsStack.Count( ) )
-        {
-        info = iAppsStack[iAppsStack.Count() - 1];
-
-        DEBUG(("\tcheck UIDs (0x%X-0x%X)", aApp.iUid, info->AppUid() ));
-        DEBUG(("\tcheck states (%S-%S)", &aState, &info->ItemState()));
-        if ( info && info->AppUid( ) == aApp && info->ItemState().Compare( aState ) == 0 )
-            {
-            DEBUG(("\tcheck prev app, if BS to be ignored = %d)",
-                            iConfiguration->IsIgnoredIfStartedFrom( info->PrevAppUid() ) ));
-
-            // check what application activated the application in question 
-            if ( !iConfiguration->IsIgnoredIfStartedFrom( info->PrevAppUid( ) ) )
-                {
-                // find the task which is directly below the current one
-                // in window group Z-order hierarchy
-                TApaTaskList taskList(iEnv->WsSession( ) );
-                // current task is in "0" position, next one is "1"
-                // NOTE: FindByPos doesn't return hidden tasks
-                TApaTask lowerTask = taskList.FindByPos( KSecondTaskIndex );
-                CApaWindowGroupName* apaWGName = CApaWindowGroupName::NewLC(
-                    iEnv->WsSession( ), lowerTask.WgId( ) );
-                TUid lowerTaskUid = apaWGName->AppUid( );
-                CleanupStack::PopAndDestroy( apaWGName );
-
-                DEBUG(("\tcheck task below (0x%X-0x%X)",
-                                lowerTaskUid.iUid, info->PrevAppUid().iUid));
-                // if the lower task is the one that activated the current one
-                // send the current one to background.
-                // the condition is false if i.e. the previous active task
-                // has been closed or sent to background (no explicit
-                // activation of the current task occured)
-                if ( lowerTaskUid == info->PrevAppUid( ) )
-                    {
-                    if ( !aCheckOnly )
-                        {
-                        SendToBackground( aApp );
-                        // remove history for the application    
-                        RemoveAppRecord( aApp );
-                        }
-                    result = EBSEngineCommandWasConsumed;
-                    }
-                }
-            }
-        }
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-void CBSEngine::SendToBackground( const TUid& aApp )
-    {
-    DEBUG(("-> SendToBackgroundL(0x%X)", aApp.iUid ));
-
-    TApaTaskList taskList(iEnv->WsSession( ));
-
-    TApaTask task = taskList.FindApp( aApp );
-    if ( task.Exists( ) )
-        {
-        // Request window server to send application to background
-        task.SendToBackground( );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//    
-TUid CBSEngine::FindPreviousApp( const TUid& aApp )
-    {
-    TUid result(TUid::Null( ));
-
-    for ( TInt i = iFocusHistory.Count( ) - 1; i >= 0; i-- )
-        {
-        if ( iFocusHistory[i] != aApp.iUid )
-            {
-            result = TUid::Uid( iFocusHistory[i] );
-            break;
-            }
-        }
-
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-void CBSEngine::RemoveAppRecord( const TUid& aApp )
-    {
-    DEBUG(("-> RemoveRecord(0x%X)", aApp.iUid ));
-
-    for ( TInt i = iAppsStack.Count( ) - 1; i >= 0; i-- )
-        {
-        CBSApplicationInfo* info = iAppsStack[i];
-        if ( info->AppUid( ) == aApp )
-            {
-            DEBUG(("\tRemove item - [%d]", i));
-            iAppsStack.Remove( i );
-            delete info;
-            break;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-void CBSEngine::ResetHistory()
-    {
-    DEBUG(("-> ResetHistory"));
-    iAppsStack.ResetAndDestroy( );
-    iFocusHistory.Reset( );
-    }
-
-// End of File
-
-