sysresmonitoring/oommonitor/tsrc/oomtest/t_oomtestapp/src/t_oomtestappappui.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:24:48 +0100
branchRCL_3
changeset 20 c2c61fdca848
parent 19 924385140d98
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2006 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:  
*
*/




// INCLUDE FILES
#include <avkon.hrh>
#include <aknquerydialog.h>
#include <commondialogs.hrh>
#include <akncommondialogsdynmem.h>
#include <f32file.h>
#include <t_oomtestapp.rsg>
#include "t_oomtestappcmd.hrh"
#include "t_oomtestappApplication.h"
#include "t_oomtestappAppUi.h"
#include "t_oomtestappAppView.h"

_LIT( KOomConfigTargetFile, "c:\\private\\10207218\\oomconfig.xml" );
_LIT( KOomPriorityNormal, "normal" );
_LIT( KOomPriorityHigh, "high" );
_LIT( KOomPriorityBusy, "busy" );
const TInt KInitialAllocSize = 2048;

// ---------------------------------------------------------------------------
// AskPathL
// ---------------------------------------------------------------------------
//
static TBool AskPathL( TDes& aPath )
    {
    TParsePtr parse( aPath );
    TPtrC rootFolder = parse.DriveAndPath();
    TBool ret = AknCommonDialogsDynMem::RunSelectDlgLD(
        AknCommonDialogsDynMem::EMemoryTypePhone |
        AknCommonDialogsDynMem::EMemoryTypeMMC,
        aPath,
        rootFolder,
        R_MEMORY_SELECTION,
        R_FILE_SELECTION );
    return ret;
    }


// ============================ MEMBER FUNCTIONS ===============================


// -----------------------------------------------------------------------------
// Ct_oomtestappAppUi::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void Ct_oomtestappAppUi::ConstructL()
	{
	// Initialise app UI with standard value.
	BaseConstructL(CAknAppUi::EAknEnableSkin);

	User::LeaveIfError( iOomSession.Connect() );

	// Create view object
	iAppView = Ct_oomtestappAppView::NewL(ClientRect(), *this);
	
	}

// -----------------------------------------------------------------------------
// Ct_oomtestappAppUi::Ct_oomtestappAppUi()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
Ct_oomtestappAppUi::Ct_oomtestappAppUi()
	{
	}

// -----------------------------------------------------------------------------
// Ct_oomtestappAppUi::~Ct_oomtestappAppUi()
// Destructor.
// -----------------------------------------------------------------------------
//
Ct_oomtestappAppUi::~Ct_oomtestappAppUi()
	{
    delete iAppView;
    iOomSession.Close();
    User::Free(iMem);
	}

// -----------------------------------------------------------------------------
// Ct_oomtestappAppUi::HandleCommandL()
// Takes care of command handling.
// -----------------------------------------------------------------------------
//
void Ct_oomtestappAppUi::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
        case EOomTestAppSelectConfig:
            {
            TFileName fileName;
            if ( AskPathL( fileName ) )
                {
                RFs& fs( iEikonEnv->FsSession() );
                fs.MkDirAll( KOomConfigTargetFile ); // Ignore error
                CFileMan* fileMan = CFileMan::NewL( fs );
                CleanupStack::PushL( fileMan );
                User::LeaveIfError( fileMan->Copy( fileName, KOomConfigTargetFile ) );
                CleanupStack::PopAndDestroy( fileMan );
                }
            break;
            }
        case EOomTestAppToggleSystem:
            {
            iEikonEnv->SetSystem( !(iEikonEnv->IsSystem()) );
            iAppView->DrawDeferred();
            break;
            }
        case EOomTestAppAllocMemory:
            {
            TInt size(KInitialAllocSize);
            CAknNumberQueryDialog* query = CAknNumberQueryDialog::NewL(size);
            if ( query->ExecuteLD( R_ALLOC_QUERY ) )
                {
                User::Free(iMem);
                iMem = NULL;
                size *= KKiloByte;
                iMem = User::AllocL(size);
                iAppView->DrawDeferred();
                }
            break;
            }
        case EOomTestAppFreeMemory:
            {
            User::Free(iMem);
            iMem = NULL;
            iAppView->DrawDeferred();
            break;
            }
        case EOomTestAppAllocMemWithPermission:
            {
            TInt size(KInitialAllocSize);
            CAknNumberQueryDialog* query = CAknNumberQueryDialog::NewL(size);
            if ( query->ExecuteLD( R_ALLOC_QUERY ) )
                {
                User::Free(iMem);
                iMem = NULL;
                size *= KKiloByte;
                if ( iPriority != ROomMonitorSession::EOomPriorityBusy )
                    {
                    // Prevent OOM to close this app while it is freeing memory
                    iOomSession.SetOomPriority(ROomMonitorSession::EOomPriorityBusy);
                    }
                iOomSession.RequestFreeMemory( size );
                if ( iPriority != ROomMonitorSession::EOomPriorityBusy )
                    {
                    // Allow OOM to close this app again
                    iOomSession.SetOomPriority(iPriority);
                    }
                iMem = User::AllocL(size);
                iAppView->DrawDeferred();
                }
            break;
            }
        case EOomTestAppSetPriorityNormal:
            {
            iPriority = ROomMonitorSession::EOomPriorityNormal;
            iOomSession.SetOomPriority(iPriority);
            iAppView->DrawDeferred();
            break;
            }
        case EOomTestAppSetPriorityHigh:
            {
            iPriority = ROomMonitorSession::EOomPriorityHigh;
            iOomSession.SetOomPriority(iPriority);
            iAppView->DrawDeferred();
            break;
            }
        case EOomTestAppSetPriorityBusy:
            {
            iPriority = ROomMonitorSession::EOomPriorityBusy;
            iOomSession.SetOomPriority(iPriority);
            iAppView->DrawDeferred();
            break;
            }    
		case EEikCmdExit:
		case EAknSoftkeyExit: // Fall through
		    {
			Exit();
			break;
		    }
		default:
		    {
			break;
		    }
		}
	}

// -----------------------------------------------------------------------------
//  Called by the framework when the application status pane
//  size is changed.  Passes the new client rectangle to the
//  AppView
// -----------------------------------------------------------------------------
//
void Ct_oomtestappAppUi::HandleStatusPaneSizeChange()
	{
	iAppView->SetRect(ClientRect());
	}

// -----------------------------------------------------------------------------
// Ct_oomtestappAppUi::AllocatedHeap
// -----------------------------------------------------------------------------
//
TInt Ct_oomtestappAppUi::AllocatedHeap() const
    {
    TInt ret( 0 );
    RHeap& heap( User::Heap() );
    heap.AllocSize( ret );
    return ret;
    }

// -----------------------------------------------------------------------------
// Ct_oomtestappAppUi::Priority
// -----------------------------------------------------------------------------
//
TPtrC Ct_oomtestappAppUi::Priority() const
    {
    switch ( iPriority )
        {
        case ROomMonitorSession::EOomPriorityNormal:
            {
            return KOomPriorityNormal();
            }
        case ROomMonitorSession::EOomPriorityHigh:
            {
            return KOomPriorityHigh();
            }
        case ROomMonitorSession::EOomPriorityBusy:
            {
            return KOomPriorityBusy();
            }
        default:
            {
            break;
            }
        }
    return KNullDesC();
    }
        

// End of File