profilesservices/MediaFileList/Src/mediafiletest.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:44 +0100
branchRCL_3
changeset 54 7e0eff37aedb
parent 0 8c5d936e5675
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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:   Class create for testing.
*
*/




// INCLUDE FILES

#include "mediafiletest.h"
#include "mediafiledialog.h"
#include "mediafilepreview.h"
#include "mediafilelistdebug.h"

#include <mediafilelist.rsg>

#include <aknappui.h>  // for macro iAvkonAppUi
#include <eikcapc.h>   // for CEikCaptionedControl
#include <e32math.h>  // Math::FRand

#include <bautils.h>  // bafl.lib
#include <s32file.h>  // RFileReadStream



#ifdef _DEBUG
/******************************************************************************
 * class CMFDialogTest
 ******************************************************************************/



// -----------------------------------------------------------------------------
// CMFDialogTest::NewL
//
// -----------------------------------------------------------------------------
CMFDialogTest* CMFDialogTest::NewL( CMediaFileDialog* aDialog )
    {
    CMFDialogTest* self = new (ELeave) CMFDialogTest( aDialog );
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);

    return self;
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::CMFDialogTest
// 
// -----------------------------------------------------------------------------
//
CMFDialogTest::CMFDialogTest( CMediaFileDialog* aDialog )
    {
    iDlg = aDialog;
    
    iTestCounter = 0;
    iBottomVisited = EFalse;
    iDestroyedPtr = NULL;
    }


// ----------------------------------------------------------------------------
// Destructor
//
// ----------------------------------------------------------------------------
//
CMFDialogTest::~CMFDialogTest()
    {
    SetScreenSaverPeriod( iScreenSaverPeriod );
    
    delete iTestCaller;
    delete iRandomNum;
   
    if ( iPopupNote )
        {
        iPopupNote->HideInfoPopupNote();
        delete iPopupNote;
        }

    if ( iDestroyedPtr )
        {
        *iDestroyedPtr = ETrue;
        iDestroyedPtr = NULL;
        }
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::ConstructL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::ConstructL()
    {
    const TInt KLongPeriod = 60*60*24; // 24 h in seconds
    
    iTestCaller = CMFActiveCaller::NewL( this );
    iRandomNum = CRandomNum::NewL();
   
    iScreenSaverPeriod = ScreenSaverPeriodL();
    SetScreenSaverPeriod( KLongPeriod );
    
    iPopupNote = CAknInfoPopupNoteController::NewL();
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::TestL
//
// -----------------------------------------------------------------------------
//
TBool CMFDialogTest::TestL( TInt /*aAttr*/ )
    {
    TInt index = 0;
    CDesCArray *arr = new(ELeave) CDesCArrayFlat( 1 );
    CleanupStack::PushL( arr );
     
    arr->AppendL(_L("random play"));
    arr->AppendL(_L("test 1"));
    arr->AppendL(_L("test 2"));

    if ( !TMFDialogUtil::ShowListQueryL( _L("huu"), arr, &index ) )
        {
        CleanupStack::PopAndDestroy( arr );
        return EFalse;
        }
    if ( index == 0 )
        {
        NextListItemL();
        }
    else if ( index == 1 )
        {
        Test1L( 0 );    
        }
    else if ( index == 2 )
        {
        Test2L( 0 );
        }
    else
        {
        }

    CleanupStack::PopAndDestroy( arr );
    return ETrue; 
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::Test1L
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::Test1L( TInt /*aAttr*/ )
    {
    }



// -----------------------------------------------------------------------------
// CMFDialogTest::Test2L
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::Test2L( TInt /*aAttr*/ )
    {
    TInt num10 = 0; TInt num11 = 0; TInt num12 = 0; 
    TInt num13 = 0; TInt num14 = 0; TInt num15 = 0;
    TInt num16 = 0; TInt num17 = 0; TInt num18 = 0;
    TInt num19 = 0; TInt num20 = 0; TInt numOther = 0;
    
    for (TInt i=0; i<100000; i++)
        {
        TInt num = iRandomNum->Random( 10, 20 );
        
        if ( num == 10 )
            {
            num10++;
            }
        else if ( num == 11 )
            {
            num11++;
            }
        else if ( num == 12 )
            {
            num12++;
            }
        else if ( num == 13 )
            {
            num13++;
            }
        else if ( num == 14 )
            {
            num14++;
            }
        else if ( num == 15 )
            {
            num15++;
            }
        else if ( num == 16 )
            {
            num16++;
            }
        else if ( num == 17 )
            {
            num17++;
            }
        else if ( num == 18 )
            {
            num18++;
            }
        else if ( num == 19 )
            {
            num19++;
            }
        else if ( num == 20 )
            {
            num20++;
            }
        else
            {
            numOther++;
            }
      
        }
    
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::NextFolderL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::NextFolderL() 
    {
    const TInt KDelay = 2000;
    
    TBool destroyed = EFalse;
    iDestroyedPtr = &destroyed;  // updated in this class destructor
    
    TInt currentFolder = iDlg->iState->CurrentFolder();
    TInt currentIndex = iDlg->CurrentItemListIndex();
    TInt folderId = iDlg->iState->FolderId( currentIndex );
    
    if ( currentFolder == EEFolderRoot )
        {
        // root folder
        iBottomVisited = EFalse;
        if ( iRandomNum->Match( 30 ) )
            {
            SimulateSearchEventL();  // search
            }
        else if ( folderId == EEFolderMusic || folderId == EEFolderTones ||
             folderId == EEFolderRecordings || folderId == EEFolderVideos )
            {
            SimulateOpenEventL();  // go down    
            }
        else
            {
            iTestCaller->Start( ENextListItem, KDelay );
            }
        }
    else if ( currentIndex == KErrNotFound )
        {
        // empty folder
        SimulateBackEventL();  // go up
        }
    else if ( folderId == KErrNotFound )
        {
        // this folder has files, not subfolders
        iBottomVisited = ETrue;
        if ( iRandomNum->Match( 50 ) )
            {
            // stay in this folder and select a file
            iTestCaller->Start( ENextListItem, KDelay );
            return;
            }
        else
            {
            SimulateBackEventL();  // go up
            }
        }
    else  // this folder has subfolders
        {
        TInt num = 15;
        if ( !iBottomVisited )
            {
            num = 85;
            }
            
        if ( iRandomNum->Match( num ) )
            {
            SimulateOpenEventL();  // go down 
            }
        else
            {
            SimulateBackEventL();  // go up
            }
        }
    
    // select listbox item after delay
    if ( !destroyed )
        {
        iDestroyedPtr = NULL;
        iTestCaller->Start( ENextListItem, KDelay );
        }
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::NextListItemL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::NextListItemL() 
    {
    const TInt KDelay = 250;
    const TInt KLongDelay = 2000;
    
    TInt delay = KDelay;
    
    TInt currentIndex = iDlg->CurrentItemListIndex();
    TInt folderId = iDlg->iState->FolderId( currentIndex );
    
    if ( folderId == KErrNotFound && currentIndex == 0 )
        {
        // this folder contain files - make delay longer to 
        // allow first file preview
        delay = KLongDelay;  
        }
        
    TInt itemCount = iDlg->iListBox->Model()->NumberOfItems();
    iNewIndex = iRandomNum->Random( itemCount - 1);
   
    if ( iDlg->iState->CurrentFolder() == EEFolderRoot )
        {
        if ( iRandomNum->Match( 50 ) )
            {
            iNewIndex = 2; // more chances to Music folder
            }
        }
    
    if ( iNewIndex == currentIndex )
        {
        iTestCaller->Start( ENextFolder, delay );
        }
    else
        {
        iTestCaller->Start( EMovePosition, delay );
        }
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::MovePositionL
//
// Scrolls listbox until selected item (iNewIndex) is found.
// -----------------------------------------------------------------------------
//
void CMFDialogTest::MovePositionL()
    {
    const TInt KMoveDelay = 150;
    const TInt KThousand = 1000;
   
    TInt currentIndex = iDlg->CurrentItemListIndex();
    TInt folderId = iDlg->iState->FolderId( currentIndex );
    TInt itemCount = iDlg->iListBox->Model()->NumberOfItems();

    TBool itemFound = EFalse;
    if ( currentIndex == iNewIndex )
        {
        itemFound = ETrue; // listbox has scrolled to new item
        }
    if ( currentIndex == KErrNotFound )
        {
        itemFound = ETrue; // folder is empty
        }
    if ( iNewIndex >= itemCount )
        {
        itemFound = ETrue; // wrong folder
        }

    if ( itemFound )
        {
        // next listbox selection found
        
        TInt delay = KMoveDelay;
        if ( folderId == KErrNotFound )
            {
            // selection is file - allow time for preview
            delay = iRandomNum->Random( 3, 10 );
            delay = delay * KThousand;
            }
        iTestCaller->Start( ENextFolder, delay );
        return;
        }
    
    // Simulate listbox item selection.
    SimulateKeyEventL( EKeyUpArrow );
    
    //FLOG( _L("CMediaFileDialog::MovePositionL '%d/%d'"), currentIndex, iNewIndex );
    
    iTestCaller->Start( EMovePosition, KMoveDelay );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SimulateKeyEventL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SimulateKeyEventL( TInt aEvent )
    {
    TKeyEvent key;
    key.iModifiers = 0;
    key.iRepeats = 0;
    key.iCode = aEvent;
    key.iScanCode = aEvent;

    //iListBox->SetCurrentItemIndexAndDraw( newIndex );
    CCoeEnv::Static()->SimulateKeyEventL( key, EEventKey );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SimulateOpenEventL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SimulateOpenEventL()
    {
    TKeyEvent keyEvent;
    keyEvent.iCode = EKeyDevice3;
    keyEvent.iScanCode = EStdKeyDevice3;
    keyEvent.iRepeats = 0;          
    CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SimulateBackEventL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SimulateBackEventL()
    {
    TKeyEvent keyEvent;
    keyEvent.iCode = EKeyDevice1;
    keyEvent.iScanCode = EStdKeyDevice1;
    keyEvent.iRepeats = 0;          
    CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SimulateSearchEventL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SimulateSearchEventL()
    {
    // letter a 97/65
    // letter b 98/66
    
    TKeyEvent keyEvent;
    keyEvent.iCode = 97;
    keyEvent.iScanCode = 65;
    keyEvent.iRepeats = 0;          
    CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SetScreenSaverPeriod
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SetScreenSaverPeriod( TInt aPeriod )
    {
    TRAP_IGNORE( SetScreenSaverPeriodL( aPeriod ) );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SetScreenSaverPeriodL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SetScreenSaverPeriodL( TInt aPeriod )
    {
    // from SettingsInternalCRKeys.h
    const TUid KCRUidPersonalizationSettings = {0x101F877C};
    const TUint32 KSettingsScreenSaverPeriod =  0x00000008;

    CRepository* repository =
                 CRepository::NewL( KCRUidPersonalizationSettings );
    
    // ignore error
    repository->Set( KSettingsScreenSaverPeriod, aPeriod );
    
    delete repository;
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::ScreenSaverPeriodL
//
// -----------------------------------------------------------------------------
//
TInt CMFDialogTest::ScreenSaverPeriodL()
    {
    // from SettingsInternalCRKeys.h
    const TUid KCRUidPersonalizationSettings = {0x101F877C};
    const TUint32 KSettingsScreenSaverPeriod =  0x00000008;

    CRepository* repository =
                 CRepository::NewL( KCRUidPersonalizationSettings );
    
    TInt period = 60; // 60 seconds
    // ignore error
    repository->Get( KSettingsScreenSaverPeriod, period );

    delete repository;
    
    return period;
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::HandleActiveCallL (from MMFActiveCallerObserver)
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::HandleActiveCallL( TInt aCallId )
    {
    if ( aCallId == ENextFolder )
        {
        //FLOG( _L("CMFDialogTest::HandleActiveCallL: ENextFolder") );
        
        TRAP_IGNORE( NextFolderL() );
        iDestroyedPtr = NULL;
        }
    if ( aCallId == ENextListItem )
        {
        //FLOG( _L("CMFDialogTest::HandleActiveCallL: ENextListItem") );
        NextListItemL();    
        }

    if ( aCallId == EMovePosition )
        {
        //FLOG( _L("CMFDialogTest::HandleActiveCallL: EMovePosition") );
        
        MovePositionL();    
        }
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::SetTime
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::SetTime()
    {
    iTime = TimeBefore();
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::PrintTimeL
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::PrintTimeL( const TDesC& aText )
    {
    TBuf<128> buf;
    TInt milliSeconds = TimeAfter( iTime );
    buf.Format( _L("%S %d ms"), &aText, milliSeconds );
    
    ShowPopupNoteL( buf );
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::TimeBefore
//
// Function returns TTime of the current time (needed with function TimeAfter).
// -----------------------------------------------------------------------------
//
TTime CMFDialogTest::TimeBefore()
    {
    TTime now;
    now.UniversalTime();
    return now;
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::TimeAfter
//
// Function returns milliseconds passed since aBefore.
// -----------------------------------------------------------------------------
//
TInt64 CMFDialogTest::TimeAfter( TTime aBefore )
    {
    TTime after;
    after.UniversalTime();
    TTimeIntervalMicroSeconds microSeconds=after.MicroSecondsFrom( aBefore ); 
    TInt64 milliSeconds=microSeconds.Int64()/1000;
    return milliSeconds;
    }


// -----------------------------------------------------------------------------
// CMFDialogTest::ShowPopupNote
//
// -----------------------------------------------------------------------------
//
void CMFDialogTest::ShowPopupNoteL( const TDesC& aText ) 
    {
    const TInt KPopupDisplayTime = 3*1000;
    const TInt KPopupDelayTime = 500;
    
    iPopupNote->SetTextL( aText );
    iPopupNote->SetTimeDelayBeforeShow( KPopupDelayTime );
    iPopupNote->SetTimePopupInView( KPopupDisplayTime );    
    iPopupNote->ShowInfoPopupNote();    
    }




/******************************************************************************
 * class CRandomNum
 ******************************************************************************/


 
// -----------------------------------------------------------------------------
// CRandomNum::NewLC
// 
// -----------------------------------------------------------------------------
//
CRandomNum* CRandomNum::NewLC()
    {
    CRandomNum* randomdata = new (ELeave) CRandomNum;
    CleanupStack::PushL( randomdata );
    return randomdata;
    }


// -----------------------------------------------------------------------------
// CRandomNum::NewL
// 
// -----------------------------------------------------------------------------
//
CRandomNum* CRandomNum::NewL()
    {
    CRandomNum* randomdata = new (ELeave) CRandomNum;
    return randomdata;
    }

// -----------------------------------------------------------------------------
// CRandomNum::CRandomNum
// 
// -----------------------------------------------------------------------------
//
CRandomNum::CRandomNum()
    {
    TTime now;
    now.UniversalTime();
    iSeed = now.Int64();
    }

// -----------------------------------------------------------------------------
// CRandomNum::~CRandomNum
// 
// -----------------------------------------------------------------------------
//
CRandomNum::~CRandomNum()
    {
    }


// -----------------------------------------------------------------------------
// CRandomNum::Random
// 
// Return random integer from 0 to aMax (including 0 and aMax).
// -----------------------------------------------------------------------------
//
TInt CRandomNum::Random( TInt aMax )
    {
    TReal real = Math::FRand( iSeed ); // FRand updates iSeed
    TReal real2 = real * ( aMax+1 );
    TInt num = (TInt) real2;
    return num;
    }


// -----------------------------------------------------------------------------
// CRandomNum::Random
// 
// Return random integer from aMin to aMax (including aMin and aMax).
// -----------------------------------------------------------------------------
//
TInt CRandomNum::Random( TInt aMin, TInt aMax )
    {
    if ( aMin >= aMax )
        {
        return aMin;
        }
    
    TInt range = aMax - aMin;
    
    TInt num = Random( range );
    
    return aMin + num;
    }


// -----------------------------------------------------------------------------
// CRandomNum::Match
//
// Return ETrue according to percentage parameter (eg. in case
// aPercentage is 10 Match returns ETrue in 10% of the calls).
// -----------------------------------------------------------------------------
//
TBool CRandomNum::Match( TInt aPercentage )
    {
    if ( aPercentage < 1 )
        {
        return EFalse;
        }
    
    TInt num = Random( 99 ); // 0..99
    num++; // 1..100

    if ( num <= aPercentage )
        {
        return ETrue;
        }
    
    return EFalse;
    }






/******************************************************************************
 * class CMediaFileDialog3
 ******************************************************************************/

/*

// -----------------------------------------------------------------------------
// media file dialog resource (test code).
// -----------------------------------------------------------------------------
//
RESOURCE DIALOG r_media_file_dialog_3
    {
    //flags = EEikDialogFlagNoBackup | EEikDialogFlagFillAppClientRect;
    flags=EEikDialogFlagWait | EEikDialogFlagFillAppClientRect | EEikDialogFlagNotifyEsc;
    //buttons = R_AVKON_SOFTKEYS_OK_BACK__OK;
    buttons = r_media_file_dialog_3_cba;

    items=
        {
        DLG_LINE
            {
            type=EAknCtSingleGraphicListBox;
            itemflags=EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
            id=1;
            control=LISTBOX
                {
                flags = EAknListBoxSelectionList;
                };   
            }
        };
    
    }


//------------------------------------------------------------------------------
// Softkey resource
//------------------------------------------------------------------------------
//
RESOURCE CBA r_media_file_dialog_3_cba
    {
    buttons =
        {
        CBA_BUTTON
            {
            id = EAknSoftkeyOptions;
            txt = text_softkey_option;
            },
        CBA_BUTTON
            {
            id = EAknSoftkeyBack;
            txt = text_softkey_back;
            },
        CBA_BUTTON
            {
            id = EAknSoftkeySelect;
            txt = qtn_msk_select;
            }
        };
    }

RESOURCE MENU_BAR r_media_file_dialog_3_menu
    {
    titles= 
        { 
        MENU_TITLE 
            { 
            menu_pane=r_media_file_dialog_3_menu_pane;
            }
        };
    }

RESOURCE MENU_PANE r_media_file_dialog_3_menu_pane
    {
    items=
        {
        MENU_ITEM { command=EAknCmdOpen; txt=qtn_options_open; },
        MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
        MENU_ITEM { command=EAknCmdExit; txt=qtn_options_exit; }        
        };
    }
*/
/*
 
// -----------------------------------------------------------------------------
// CMediaFileDialog3::ShowDialogL
// 
// -----------------------------------------------------------------------------
TBool CMediaFileDialog3::ShowDialogL()
    {
    CMediaFileDialog3* dlg = CMediaFileDialog3::NewL();
    TBool ret = dlg->ExecuteLD( R_MEDIA_FILE_DIALOG_3 );

    return ret;
    }

// ----------------------------------------------------------------------------
// Destructor
//
// ----------------------------------------------------------------------------
//
CMediaFileDialog3::~CMediaFileDialog3()
    {
    delete iVideoPreviewHandler;
    
    if ( iAvkonAppUi )
        {
        iAvkonAppUi->RemoveFromStack( this );
        }
    }


// -----------------------------------------------------------------------------
// CMediaFileDialog3::CMediaFileDialog3
// 
// -----------------------------------------------------------------------------
//
CMediaFileDialog3::CMediaFileDialog3()
    {
    }


// -----------------------------------------------------------------------------
// CMediaFileDialog3::NewL
//
// -----------------------------------------------------------------------------
CMediaFileDialog3* CMediaFileDialog3::NewL()
    {
    CMediaFileDialog3* self = new (ELeave) CMediaFileDialog3();
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);

    return self;
    }

// -----------------------------------------------------------------------------
// CMediaFileDialog3::ConstructL
//
// -----------------------------------------------------------------------------
//
void CMediaFileDialog3::ConstructL()
    {
    FLOG( _L("CMediaFileDialog3::ConstructL START") );
    
    CAknDialog::ConstructL( R_MEDIA_FILE_DIALOG_3_MENU );

    iVideoPreviewHandler = CMFVideoPreviewHandler::NewL();
    
    FLOG( _L("CMediaFileDialog3::ConstructL END") );
    }

// -----------------------------------------------------------------------------
// CMediaFileDialog3::PreLayoutDynInitL
// 
// -----------------------------------------------------------------------------
//
void CMediaFileDialog3::PreLayoutDynInitL()
    {
    }

//------------------------------------------------------------------------------
// CMediaFileDialog3::OkToExitL
//
//------------------------------------------------------------------------------
//
TBool CMediaFileDialog3::OkToExitL(TInt aButtonId)
    {
    if ( aButtonId == EAknSoftkeyBack )
        {
        }

    return CAknDialog::OkToExitL( aButtonId );
    }



//------------------------------------------------------------------------------
// CMediaFileDialog3::ProcessCommandL
//
// Handle commands from menu.
//------------------------------------------------------------------------------
//
void CMediaFileDialog3::ProcessCommandL(TInt aCommandId)
    {
    HideMenu();
    
    
    switch (aCommandId)
        {
        case EAknCmdHelp:
            {
            break;
            }
            
        case EAknCmdOpen:
            {
            CEikCaptionedControl *ctrl = Line( 1 );  // dialog has one line (listbox) with id 1
            iVideoPreviewHandler->SetAttrL( TMFDialogUtil::EAttrDrawingWindow, (ctrl->iControl->DrawableWindow()) );
                
            iVideoPreviewHandler->SetAttrL( TMFDialogUtil::EAttrFileName, _L("C:\\Data\\Videos\\video2.mp4") );
            iVideoPreviewHandler->PlayL(); 

            break;
            }
 
        case EAknCmdExit:
        case EEikCmdExit:
            {
            // close dialog and exit calling application
            iAvkonAppUi->ProcessCommandL( EAknCmdExit );
            break;
            }

        default:            
            break;
        }
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::QueryAllL (obsolete)
// 
// Finds all tones, music, videos or recordings.
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::QueryAllL( TInt aAttr )
    {
    if ( !iSessionOpen )
        {
        User::Leave( KErrDisconnected );
        }

    if ( aAttr != EAttrMusic && aAttr != EAttrVideo )
        {
        User::Leave( KErrNotSupported );
        }
        
    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    CMdEObjectDef& musicObjectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
    CMdEObjectDef& videoObjectDef = defNS.GetObjectDefL( MdeConstants::Video::KVideoObject );
   
    delete iQuery;
    iQuery = NULL;

    if ( aAttr == EAttrVideo )
        {
        iQuery = iSession->NewObjectQueryL( defNS, videoObjectDef, this );
        iQueryType = EQueryVideo;
        }
    else
        {
        iQuery = iSession->NewObjectQueryL( defNS, musicObjectDef, this );
        iQueryType = EQueryAudio;
        }
    
    
    // set attributes that are included in query result  
    CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
    iQuery->AddPropertyFilterL( &namePropertyDef );
    
    // define sort order
    iQuery->AppendOrderRuleL( TMdEOrderRule( namePropertyDef, ESortAscending ) );
    
    iQuery->SetResultMode( EQueryResultModeItem );
    
    iQuery->FindL();
    
    iQueryType = EQueryAudio;
    }
*/




// -----------------------------------------------------------------------------
// CMediaFileHandler::QueryArtistUnknownL (obsolete)
// 
// Finds all songs for aArtist that miss album property.
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::QueryArtistUnknownL( const TDesC& aArtist )
    {
    if ( !iSessionOpen )
        {
        return;
        }

    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );

    iQueryType = EQueryAudio;
    
    delete iQuery;
    iQuery = NULL;
    iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
    
    iQuery->SetResultMode( EQueryResultModeItem );
    
    CMdEPropertyDef& artistPropertyDef = PropertyDefL( EAttrArtist );
    CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
    CMdEPropertyDef& albumPropertyDef = PropertyDefL( EAttrAlbum );
    
    
    CMdELogicCondition& conditions = iQuery->Conditions();
    
    // add root condition: get all songs by aArtist
    conditions.AddPropertyConditionL( artistPropertyDef, 
                                      ETextPropertyConditionCompareEquals,
                                      aArtist );
                                      
    // set attributes that are included in query result  
    iQuery->AppendOrderRuleL( TMdEOrderRule( namePropertyDef, ESortAscending ) );
    iQuery->AddPropertyFilterL( &namePropertyDef );
    iQuery->AddPropertyFilterL( &artistPropertyDef );
    
    
    // add other condition: get songs that do not have album attribute
    CMdELogicCondition& albumCondition = 
        conditions.AddLogicConditionL( ELogicConditionOperatorAnd );
    albumCondition.AddPropertyConditionL( albumPropertyDef );
    albumCondition.SetNegate( ETrue );

    iQuery->FindL();
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler2::QueryAlbumsL (obsolete)
// 
// Finds all albums for aArtist.
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::QueryAlbumsL( const TDesC& aArtist )
    {
    if ( !iSessionOpen )
        {
        return;
        }

    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );

    iQueryType = EQueryAudio;
    
    delete iQuery;
    iQuery = NULL;
    iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
    
    iQuery->SetResultMode( EQueryResultModeDistinctValues );
    
    CMdEPropertyDef& propertyDef = PropertyDefL( EAttrAlbum );
    
    // distinct query requires exactly one property filter
    CMdELogicCondition& conditions = iQuery->Conditions();
    conditions.AddPropertyConditionL( propertyDef );
    iQuery->AppendOrderRuleL( TMdEOrderRule( propertyDef, ESortAscending ) );
    iQuery->AddPropertyFilterL( &propertyDef );
    
    CMdEPropertyDef& propertyDef2 = PropertyDefL( EAttrArtist );
    conditions.AddPropertyConditionL( propertyDef2, 
                            ETextPropertyConditionCompareEquals, aArtist );
        
    iQuery->FindL();
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler::QueryArtistAlbumL (obsolete)
// 
// Finds songs for aArtist/aAlbum.
// -----------------------------------------------------------------------------
//

/*
void CMediaFileHandler::QueryArtistAlbumL( const TDesC& aArtist, const TDesC& aAlbum )
    {
    if ( !iSessionOpen )
        {
        return;
        }
    
    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );

    iQueryType = EQueryAudio;

    delete iQuery;
    iQuery = NULL;
    iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
    
    iQuery->SetResultMode( EQueryResultModeItem );
    
    CMdEPropertyDef& artistDef = PropertyDefL( EAttrArtist );
    CMdEPropertyDef& albumDef = PropertyDefL( EAttrAlbum );
    CMdEPropertyDef& nameDef = PropertyDefL( EAttrSongName );
    
    CMdELogicCondition& conditions = iQuery->Conditions();
    
    conditions.AddPropertyConditionL( artistDef, 
                            ETextPropertyConditionCompareEquals, aArtist );

    conditions.AddPropertyConditionL( albumDef, 
                            ETextPropertyConditionCompareEquals, aAlbum );
        
    iQuery->AppendOrderRuleL( TMdEOrderRule( nameDef, ESortAscending ) );
    iQuery->AddPropertyFilterL( &nameDef );
   
    
    User::Leave(KErrNoMemory);
    iQuery->FindL();
    
    
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::QueryL (test code)
// 
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::QueryL( TInt aAttr )
    {
    if ( aAttr != EAttrArtist && aAttr != EAttrAlbum &&
         aAttr != EAttrGenre && aAttr != EAttrComposer )
        {
        User::Leave( KErrNotSupported );
        }
   

    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
    iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
    
    
    RArray<TItemId> itemIds;
    itemIds.Append( 22 );
    itemIds.Append( 5 );
    itemIds.Append( 18 );
    //itemLogicCondition->AddObjectConditionL(itemIds);
            
    CMdELogicCondition& conditions = iQuery->Conditions();
    conditions.AddObjectConditionL( itemIds );
    iQuery->SetResultMode( EQueryResultModeItem );
    
    itemIds.Close();
    
    iQuery->FindL();
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler::QueryL (test code)
// 
// -----------------------------------------------------------------------------
//

/*
void CMediaFileHandler::QueryL()
    {
    if ( !iSession )
        {
        User::Leave( KErrSessionClosed );
        }
   
    delete iQuery;
    iQuery = NULL;
    
    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    
    CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
    iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
    iQuery->SetResultMode( EQueryResultModeId );
    iQuery->FindL();
    
    
    CMdELogicCondition& conditions = iQuery->Conditions();
    
    //conditions.AddPropertyConditionL(composerPropertyDef, 
    //CMdETextPropertyCondition::ECompareEquals, text);

    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::HandleQueryCompletedOneL
// 
// -----------------------------------------------------------------------------
//

/*
void CMediaFileHandler::HandleQueryCompletedOneL( CMdEQuery& aQuery, 
                                                  TInt aError )
    {
    CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
    
    CMdEObjectDef& objectDef      = defNS.GetObjectDefL( 
                                    MdeConstants::Object::KBaseObject );
    CMdEObjectDef& mediaObjectDef = defNS.GetObjectDefL( 
                                    MdeConstants::MediaObject::KMediaObject );
    CMdEObjectDef& audioObjectDef = defNS.GetObjectDefL( 
                                    MdeConstants::Audio::KAudioObject );
    
    
    CMdEPropertyDef& songPropertyDef   = objectDef.GetPropertyDefL( 
                                         MdeConstants::Object::KTitleProperty );
    CMdEPropertyDef& artistPropertyDef = mediaObjectDef.GetPropertyDefL( 
                                         MdeConstants::MediaObject::KArtistProperty );
    CMdEPropertyDef& albumPropertyDef  = audioObjectDef.GetPropertyDefL( 
                                         MdeConstants::Audio::KAlbumProperty );
    CMdEPropertyDef& genrePropertyDef  = mediaObjectDef.GetPropertyDefL( 
                                         MdeConstants::MediaObject::KGenreProperty );

    CMdEProperty* property = NULL;
    
    const RArray<TItemId>& arr = iQuery->ResultIds();
    
    TBuf<256> buf;
    TInt count = arr.Count();
    for ( TInt i=0; i<count; i++ )
        {
        TItemId id = arr[i];
        CMdEObject* object = iSession->GetFullObjectL( id );
        CleanupStack::PushL( object );
        
        buf = object->Uri();
        TInt propertyCount = object->PropertyCount();
        for ( TInt j=0; j<propertyCount; j++ )
            {
            CMdEProperty& pr = object->PropertyL( j );
            const CMdEPropertyDef& prDef = pr.Def();
            buf.Append(_L(" "));
            buf.Append(prDef.Name());
            }
        TMFDialogUtil::ShowInformationQueryL( buf );
        
        CMdEPropertyDef& tmpDef = object->Def().GetPropertyDefL( MdeConstants::MediaObject::KArtistProperty );
        TInt ret = object->Property( tmpDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            buf = property->TextValueL();    
            }

        
        ret = object->Property( songPropertyDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            buf = property->TextValueL();    
            }

        ret = object->Property( artistPropertyDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            buf = property->TextValueL();    
            }
        
        ret = object->Property( albumPropertyDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            buf = property->TextValueL();    
            }
            
        ret = object->Property( genrePropertyDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            buf = property->TextValueL();    
            }
        

        CleanupStack::PopAndDestroy( object );
        }
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler::HandleQueryCompletedTwoL
// 
// -----------------------------------------------------------------------------
//

/*
void CMediaFileHandler::HandleQueryCompletedTwoL( CMdEQuery& aQuery,
                                                  TInt aError )
    {
    TBuf<256> buf;
    
    TInt count = iQuery->Count();
    for ( TInt i=0; i<count; i++ )
        {
        buf = iQuery->ResultDistinctValue( i );
       
        CMdEObject& object = iQuery->Result( i );
        
        buf = object.Uri();
        TInt propertyCount = object.PropertyCount();
        for ( TInt j=0; j<propertyCount; j++ )
            {
            CMdEProperty& pr = object.PropertyL( j );
            const CMdEPropertyDef& prDef = pr.Def();
            buf.Append(_L(" "));
            buf.Append(prDef.Name());
            }
        TMFDialogUtil::ShowInformationQueryL( buf );
        
        CMdEProperty* property = NULL;
        CMdEPropertyDef& propDef = object.Def().GetPropertyDefL( MdeConstants::Audio::KAlbumProperty );
        TInt ret = object.Property( propDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            buf = property->TextValueL();    
            }
        }
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::ResultCount
// 
// -----------------------------------------------------------------------------
//

/*
TInt CMediaFileHandler::ResultCount()
    {
    if ( iQueryType == EQueryRomFile )
        {
        return iRomFileList.Count();
        }
         
    if ( iQueryType == ESearchVideo )
        {
        return iSearchList->Count();
        }

    if ( !iQuery || !iQueryReady || !iSessionOpen )
        {
        return 0;
        }
        
    TInt count = 0;
    TQueryResultMode resultMode = iQuery->ResultMode();
    
    if ( resultMode == EQueryResultModeDistinctValues ||
         resultMode == EQueryResultModeItem ||
         resultMode == EQueryResultModeCount )
        {
        count = iQuery->Count();
        }
    else if ( resultMode == EQueryResultModeId )
        {
        count = iQuery->Count();
        const RArray<TItemId>& arr = iQuery->ResultIds();
        count = arr.Count();
        }
    
    return count;
    }
*/    


// -----------------------------------------------------------------------------
// CMediaFileHandler::GetRecentFileAttribute
// 
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::GetRecentFileAttribute( TInt aIndex, TInt aAttr, TDes& aValue )
    {
    TInt count = iRecentList->Count();
    
    __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) );
    
    if ( aAttr == EAttrFullName )
        {
        StrCopy( aValue, iRecentList->FileName( aIndex ) );
        }
    else if ( aAttr == EAttrSongName || aAttr == EAttrFileName )
        {
        TParsePtrC parse( iRecentList->FileName( aIndex ) );
        StrCopy( aValue, parse.Name() );
        }
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::RecentFileAttribute
// 
// -----------------------------------------------------------------------------
//
/*
TInt CMediaFileHandler::RecentFileAttribute( TInt aIndex, TInt aAttr )
    {
    TInt count = iRecentList->Count();
    __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) );
    
    TInt ret = KErrNotFound;
    
    if ( aAttr == EAttrMediaType )
        {
        ret = EAttrMusic;
        }
    if ( aAttr == EAttrStorageType )
        {
        ret = EPhoneMemory;
        }

    return ret;
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::Attribute
// 
// -----------------------------------------------------------------------------
//
/*
TInt CMediaFileHandler::Attribute( TInt aIndex, TInt aAttr )
    {
    if ( iQueryType == EQueryRomFile )
        {
        return RomFileAttribute( aIndex, aAttr );
        }
    if ( iQueryType == ESearchVideo )
         {
         return iSearchList->Attribute( aIndex, aAttr );
         }
  
    if ( aAttr == EAttrMediaType )
        {
        if ( iQueryType == EQueryVideo )
            {
            return EAttrVideo;
            }
        else
            {
            return EAttrMusic;
            }
        }
    else if ( aAttr == EAttrStorageType )
         {
         TInt ret = CMediaFileHandler::EPhoneMemory;

         if ( !iQuery || !iQueryReady || !iSessionOpen )
              {
              return ret;
              }
         TQueryResultMode resultMode = iQuery->ResultMode();
         if ( resultMode != EQueryResultModeItem )
             {
             return ret;
             }
         
         CMdEObject& object = iQuery->Result( aIndex );
         if ( iDriveUtil->IsMemoryCard( object.Uri() ) )
             {
             ret = CMediaFileHandler::EMemoryCard;
             }
         else if ( iDriveUtil->IsMassStorage( object.Uri() ) )
             {
             ret = CMediaFileHandler::EMassStorage;
             }
         return ret;
         }
    
    else if ( aAttr == EAttrMediaFileId )
          {
          if ( !iQuery || !iQueryReady || !iSessionOpen )
              {
              return KErrNotFound;
              }
          CMdEObject& object = iQuery->Result( aIndex );
          return object.Id();
          }

    return KErrNotFound;
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::GetAttributeL
// 
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::GetAttributeL( TInt aIndex, TInt aAttr, TDes& aValue )
    {
    aValue = KNullDesC;
    
    if ( iQueryType == EQueryRomFile )
        {
        GetRomFileAttribute( aIndex, aAttr, aValue );
        return;
        }
    if ( iQueryType == ESearchVideo )
        {
        if ( iSessionOpen )
            {
            iSearchList->SetSession( iSession );
            }
        else
            {
            iSearchList->SetSession( NULL );
            }
        iSearchList->GetAttributeL( aIndex, aAttr, aValue );
        return;
        }
    

    if ( !iQuery || !iQueryReady || !iSessionOpen )
        {
        return;
        }

    TInt count = ResultCount();
    __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) );
    
    TQueryResultMode resultMode = iQuery->ResultMode();
    
    if ( resultMode == EQueryResultModeDistinctValues )
        {
        TPtrC ptr = iQuery->ResultDistinctValue( aIndex );
        StrCopy( aValue, ptr );
        }

    if ( resultMode == EQueryResultModeItem )
        {
        CMdEObject& object = iQuery->Result( aIndex );
        
        if ( aAttr == EAttrFullName )
            {
            StrCopy( aValue, object.Uri() );
            return;
            }
        
        CMdEPropertyDef& propDef = PropertyDefL( aAttr );
        CMdEProperty* property = NULL;
        TInt ret = object.Property( propDef, property, 0 );
        if ( ret != KErrNotFound )
            {
            StrCopy( aValue, property->TextValueL() );
            }
        else if ( aAttr == EAttrSongName || aAttr == EAttrFileName)
            {
            TParsePtrC parse( object.Uri() );
            StrCopy( aValue, parse.Name() );
            }
        }
    }
*/    


// -----------------------------------------------------------------------------
// CMediaFileHandler::UpdateRecentListL
//
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::UpdateRecentListL()
    {
    if ( !iSessionOpen )
        {
        return;
        }
    
    TInt count = iRecentList->Count();
    
    for ( TInt i=0; i<count; i++ )
        {
        TItemId id = iRecentList->Id( i );
        CMdEObject* object = NULL;
        
        TInt err = KErrNone;
        TRAP( err, object = iSession->GetFullObjectL( id ) );
        if ( err != KErrNone || !object )
            {
            iRecentList->SetPresent( EFalse, i );
            }
        else
            {
            CleanupStack::PushL( object );
            iRecentList->SetFileNameL( object->Uri(), i );
            CleanupStack::PopAndDestroy( object );
            }        
        }
        
    iRecentList->Clean();
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler::StoreRecentFileL
//
// -----------------------------------------------------------------------------
//
/*
void CMediaFileHandler::StoreRecentFileL( TInt aIndex )
    {
    if ( iQueryType == EQueryRomFile )
        {
        return;  // tones not part of recent files
        }
    
    if ( iQueryType == EQueryRecentFile )
        {
        TInt64 id = iRecentList->Id( aIndex );
        iRecentList->AddItemL( id );
        return;
        }
        
    if ( !iQuery || !iQueryReady || !iSessionOpen )
        {
        return;
        }

    TQueryResultMode resultMode = iQuery->ResultMode();
    if ( resultMode == EQueryResultModeItem )
        {
        CMdEObject& object = iQuery->Result( aIndex );
        TItemId id = object.Id();
        iRecentList->AddItemL( id );
        }
    }
*/


// -----------------------------------------------------------------------------
// CMediaFileHandler::HandleQueryCompletedL
//
// -----------------------------------------------------------------------------
//

/*
void CMediaFileHandler::HandleQueryCompletedL( CMdEQuery& aQuery, TInt aError )
    {
    iQueryReady = ETrue;
    
    if ( !iQuery )
        {
        iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, KErrCancel );
        return;  // query has been canceled
        }
    
    if ( aError != KErrNone )
        {
        iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, aError );
        return;
        }
    
    TQueryResultMode resultMode = iQuery->ResultMode();
    
    if ( resultMode == EQueryResultModeDistinctValues )
        {
        iObserver->HandleMFEventL( MMediaFileHandlerObserver::EQueryComplete, aError );
        }
    else if ( resultMode == EQueryResultModeId )
        {
        // const RArray<TItemId>& arr = iQuery->ResultIds();
        // CopyArrayL( iResultArray, arr );
        //
        // copy this arr into member iResultIds and perform full search
        // for the whole set or a partial search if result set is very large
        // partial search indexes could be in another member iPartialResultdIds
        // observer gets notified after the first partial search
        
        iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, KErrNotSupported );
        }
    else if ( resultMode == EQueryResultModeCount )
        {
        iObserver->HandleMFEventL( MMediaFileHandlerObserver::EUnknownQueryComplete, aError );
        }
    else if ( resultMode == EQueryResultModeItem )
        {
        if ( iQueryType == ESearchAudio )
            {
            iSearchList->Reset();
            iSearchList->TakeResultL( iQuery, EAttrMusic );
            SearchVideoL( iSearchText );
            }
        else if ( iQueryType == ESearchVideo )
            {
            iSearchList->TakeResultL( iQuery, EAttrVideo );
            iSearchList->Sort();
            iObserver->HandleMFEventL( MMediaFileHandlerObserver::EQueryComplete, aError );
            }
        else
            {
            iObserver->HandleMFEventL( MMediaFileHandlerObserver::EQueryComplete, aError );
            }
        }
    else
        {
        iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, KErrNotSupported );
        }
    }
*/


/*
    //private:
        //void ReadDirectoryL( const TDesC& aDirectory );
        //void ReadRomFilesL();
        //void SortRomFiles();
        //static TInt CompareFileName( const TFileName& aFirst, const TFileName& aSecond );
        //static TInt CompareStr( const TFileName& aFirst, const TFileName& aSecond );
  
// -----------------------------------------------------------------------------
// CMediaFileHandler::ReadRomFilesL (to be removed)
//
// -----------------------------------------------------------------------------
//
void CMediaFileHandler::ReadRomFilesL()
    {
    _LIT( KFormat, "%S%S" );
    
    iRomFileList.Reset();
    
    TFileName fileName;
    fileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::SoundsPath() );
    TRAP_IGNORE( ReadDirectoryL( fileName ) );
    
    fileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::DigitalSoundsPath() );
    TRAP_IGNORE( ReadDirectoryL( fileName ) );

    fileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::SimpleSoundsPath() );
    TRAP_IGNORE( ReadDirectoryL( fileName ) );

    TInt count = iRomFileList.Count();
    for ( TInt i=0; i<count; i++ )
        {
        fileName = iRomFileList[i];
        }
        
    SortRomFiles();
    }


// -----------------------------------------------------------------------------
// CMediaFileHandler::ReadDirectoryL (to be removed)
//
// -----------------------------------------------------------------------------
//
void CMediaFileHandler::ReadDirectoryL( const TDesC& aDirectory )
    {
    _LIT( KFormat, "%S%S" );
    
    TBuf<128> buf( aDirectory );
    
    CDir* dir = NULL;
    RFs fsSession;
    User::LeaveIfError( fsSession.Connect() ); 
    CleanupClosePushL( fsSession );
    
    if ( !BaflUtils::FolderExists( fsSession, aDirectory ) )
        {
        User::Leave( KErrNotFound );
        }
    
    TInt err = fsSession.GetDir( aDirectory, KEntryAttNormal, ESortByName, dir );
    User::LeaveIfError( err );
    CleanupStack::PushL( dir );
    
    TInt count = dir->Count();
    
    for ( TInt i=0; i<count; i++ )
        {
        const TEntry item = (*dir)[i];
        TFileName fullName;
        fullName.Format( KFormat, &aDirectory, &item.iName );
        iRomFileList.Append( fullName );
        }

    CleanupStack::PopAndDestroy( dir );

    CleanupStack::PopAndDestroy(); // fsSession
    }


// -----------------------------------------------------------------------------
// CMediaFileHandler::SortRomFiles (to be removed)
//
// -----------------------------------------------------------------------------
//
void CMediaFileHandler::SortRomFiles()
    {
    iRomFileList.Sort(TLinearOrder<TFileName>(CMediaFileHandler::CompareFileName));
    }


// -----------------------------------------------------------------------------
// CMediaFileHandler::QueryRomFilesL (to be removed)
// 
// Finds all tones from rom directories.
// -----------------------------------------------------------------------------
//
void CMediaFileHandler::QueryRomFilesL( TInt aAttr )
    {
    QueryEmptyL();
    
    iQueryType = EQueryRomFile;
    }


// -----------------------------------------------------------------------------
// CMediaFileHandler::GetRomFileAttribute (to be removed)
// 
// -----------------------------------------------------------------------------
//
void CMediaFileHandler::GetRomFileAttribute( TInt aIndex, TInt aAttr, TDes& aValue )
    {
    TInt count = iRomFileList.Count();
    
    __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) );
    
    if ( aAttr == EAttrFullName )
        {
        StrCopy( aValue, iRomFileList[aIndex] );
        }
    else if ( aAttr == EAttrSongName || aAttr == EAttrFileName )
        {
        TParsePtrC parse( iRomFileList[aIndex] );
        StrCopy( aValue, parse.Name() );
        }
    }


// -----------------------------------------------------------------------------
// CMediaFileHandler::RomFileAttribute (to be removed)
// 
// -----------------------------------------------------------------------------
//
TInt CMediaFileHandler::RomFileAttribute( TInt aIndex, TInt aAttr )
    {
    TInt count = iRomFileList.Count();
    
    __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) );
    
    TInt ret = KErrNotFound;
    if ( aAttr == EAttrMediaType )
        {
        ret = EMediaTypeTone;
        }
    else if ( aAttr == EAttrStorageType )
        {
        ret = EPhoneMemory;
        }
    
    return ret;
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler::CompareFileName
//
// -----------------------------------------------------------------------------
//
/*
TInt CMediaFileHandler::CompareFileName(const TFileName& aFirst, const TFileName& aSecond)
    {
    TParsePtrC parseFirst( aFirst );
    TParsePtrC parseSecond( aSecond );
    
    return parseFirst.Name().Compare( parseSecond.Name() );
    }
*/

// -----------------------------------------------------------------------------
// CMediaFileHandler::CompareStr
//
// -----------------------------------------------------------------------------
//
/*
TInt CMediaFileHandler::CompareStr(const TFileName& aFirst, const TFileName& aSecond)
    {
    return aFirst.Compare( aSecond );
    }
*/



/*******************************************************************************
 * class TMediaFileHistoryItem
 *******************************************************************************/

/*
// -----------------------------------------------------------------------------
// TMediaFileHistoryItem::Id
//
// -----------------------------------------------------------------------------
//
TInt64 TMediaFileHistoryItem::Id()
    {
    return iId;
    }


// -----------------------------------------------------------------------------
// TMediaFileHistoryItem::SetId
//
// -----------------------------------------------------------------------------
//
void TMediaFileHistoryItem::SetId( TInt64 aId )
    {
    iId = aId;
    }


// -----------------------------------------------------------------------------
// TMediaFileHistoryItem::Time
//
// -----------------------------------------------------------------------------
//
TTime TMediaFileHistoryItem::Time()
    {
    return iTime;
    }


// -----------------------------------------------------------------------------
// TMediaFileHistoryItem::SetTime
//
// -----------------------------------------------------------------------------
//
void TMediaFileHistoryItem::SetTime( TTime aTime )
    {
    iTime = aTime;
    }


// -----------------------------------------------------------------------------
// TMediaFileHistoryItem::InternalizeL
//
// -----------------------------------------------------------------------------
//
void TMediaFileHistoryItem::InternalizeL( RReadStream& aStream )
    {
    aStream >> iId;

    if ( iId < 0 )
        {
        User::Leave( KErrCorrupt );
        }

    TInt64 temp = 0;
    aStream >> temp;
    
    if ( temp <= 0 )
        {
        User::Leave( KErrCorrupt );
        }
    TTime time( temp );
    iTime = time;
    
    iPresent = ETrue;
    iFullName = KNullDesC;
    }


// -----------------------------------------------------------------------------
// TMediaFileHistoryItem::ExternalizeL
//
// -----------------------------------------------------------------------------
//
void TMediaFileHistoryItem::ExternalizeL( RWriteStream& aStream )
    {
    aStream << iId;
    aStream << iTime.Int64();
    }
*/



/*******************************************************************************
 * class CMediaFileHistory
 *******************************************************************************/

/*
// -----------------------------------------------------------------------------
// CMediaFileHistory::NewL
//
// -----------------------------------------------------------------------------
//
CMediaFileHistory* CMediaFileHistory::NewL()
    {
    CMediaFileHistory* self = new (ELeave) CMediaFileHistory();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(self );

    return self;
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::CMediaFileHistory
// 
// -----------------------------------------------------------------------------
//
CMediaFileHistory::CMediaFileHistory()
    {
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::ConstructL
//
// Note: Sessionpath in emulator is '\epoc32\winscw\c\private\2000F85A'
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::ConstructL()
    {
    _LIT( KHistoryFile, "MediaFileHistory" );
    const TInt KHistoryDrive = EDriveC;
    
    User::LeaveIfError( iFsSession.Connect() );
    User::LeaveIfError( iFsSession.SetSessionToPrivate( KHistoryDrive ) );
    
    User::LeaveIfError( iFsSession.SessionPath( iPath ) );
    BaflUtils::EnsurePathExistsL( iFsSession, iPath );
    iPath.Append( KHistoryFile );
    
    TInt err = KErrNone;
    TRAP( err, ReadHistoryL() );
    
    if ( err != KErrNone && err != KErrNoMemory )
        {
        // history file was just created or it is corrupted
        iList.Reset();
        }
    } 


// ----------------------------------------------------------------------------
// Destructor
//
// ----------------------------------------------------------------------------
//
CMediaFileHistory::~CMediaFileHistory()
    {
    Clean();
    
    TRAP_IGNORE( WriteHistoryL() );
    
    iList.Close();
    iFsSession.Close();
    }
    

// -----------------------------------------------------------------------------
// CMediaFileHistory::AddItemL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::AddItemL( TInt64 aId )
    {
    TMediaFileHistoryItem item;
    
    TTime t;
    t.UniversalTime();
    
    item.SetTime( t );
    item.SetId( aId );
    
    AddItemL( item );
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::Count
//
// -----------------------------------------------------------------------------
//
TInt CMediaFileHistory::Count()
    {
    return iList.Count();
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::Reset
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::Reset()
    {
    iList.Reset();
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::SetFileNameL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::SetFileNameL( const TDesC& aFullName, TInt aIndex )
    {
    if ( aIndex < 0 || aIndex >= iList.Count() )
        {
        TMFDialogUtil::Panic( KErrArgument );
        }
        
    TMediaFileHistoryItem& item = iList[aIndex];
    TMFDialogUtil::StrCopy( item.iFullName, aFullName );
    }
    
    
// -----------------------------------------------------------------------------
// CMediaFileHistory::FileName
//
// -----------------------------------------------------------------------------
//
const TDesC& CMediaFileHistory::FileName( TInt aIndex )
    {
    if ( aIndex < 0 || aIndex >= iList.Count() )
        {
        TMFDialogUtil::Panic( KErrArgument );
        }
        
    TMediaFileHistoryItem& item = iList[aIndex];
    return item.iFullName;
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::SetPresent
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::SetPresent( TBool aPresent, TInt aIndex )
    {
    if ( aIndex < 0 || aIndex >= iList.Count() )
        {
        TMFDialogUtil::Panic( KErrArgument );
        }
        
    TMediaFileHistoryItem& item = iList[aIndex];
    item.iPresent = aPresent;
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::Id
//
// -----------------------------------------------------------------------------
//
TInt64 CMediaFileHistory::Id( TInt aIndex )
    {
    if ( aIndex < 0 || aIndex >= iList.Count() )
        {
        TMFDialogUtil::Panic( KErrArgument );
        }
        
    TMediaFileHistoryItem& item = iList[aIndex];
    return item.iId;

    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::InternalizeL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::InternalizeL( RReadStream& aStream )
    {
    TInt count = aStream.ReadInt32L();
    if ( count < 0 || count > KMaxHistoryItemCount )
        {
        User::Leave( KErrCorrupt );
        }
    
    for ( TInt i=0; i<count; i++ )
        {
        TMediaFileHistoryItem item;
        TInt err = KErrNone;
        TRAP( err, item.InternalizeL( aStream ) );
        if ( err != KErrNone )
            {
            User::Leave( err );
            }
        iList.AppendL( item );
        }
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::ExternalizeL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::ExternalizeL(RWriteStream& aStream)
    {
    TInt count = iList.Count();
    aStream.WriteInt32L( count );
        
    for ( TInt i=0; i<count; i++ )
        {
        TMediaFileHistoryItem& item = iList[i];
        item.ExternalizeL( aStream );
        }
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::ReadHistoryL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::ReadHistoryL()
    {
    RFile file;
    TInt err = file.Open( iFsSession, iPath, EFileRead );
    if ( err == KErrNotFound )
        {
        err = file.Create( iFsSession, iPath, EFileRead );
        }
    User::LeaveIfError( err );
        
    CleanupClosePushL( file );
    
    RFileReadStream stream( file, 0 );
    CleanupClosePushL( stream );

    TRAP( err, InternalizeL( stream ) );
    User::LeaveIfError( err );

    CleanupStack::PopAndDestroy( &stream );
    CleanupStack::PopAndDestroy( &file );
    }



// -----------------------------------------------------------------------------
// CMediaFileHistory::WriteHistoryL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::WriteHistoryL()
    {
    RFile file;
    User::LeaveIfError( file.Replace( iFsSession, iPath, EFileWrite ) );
    CleanupClosePushL( file );
    
    RFileWriteStream stream( file, 0 );
    CleanupClosePushL( stream );

    TInt err = KErrNone;
    TRAP( err, ExternalizeL( stream ) );
    
    if ( err == KErrNone )
        {
        TRAP( err, stream.CommitL() );
        User::LeaveIfError( err );
        }

    CleanupStack::PopAndDestroy( &stream );
    CleanupStack::PopAndDestroy( &file );
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::Clean
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::Clean()
    {
    Sort();
    
    for (;;)
        {
        TInt ret = RemoveOldItem();
        if ( !ret )
            {
            break;
            }
        }
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::RemoveOldItem
//
// -----------------------------------------------------------------------------
//
TBool CMediaFileHistory::RemoveOldItem()
    {
    TInt count = iList.Count();
    
    for ( TInt i=0; i<count; i++ )
        {
        TMediaFileHistoryItem& item= iList[i];
        if ( !item.iPresent )
            {
            iList.Remove( i );
            return ETrue;
            }
        }
    
    count = iList.Count();
    
    if ( count > KMaxHistoryItemCount )
        {
        iList.Remove( count - 1 );
        return ETrue;
        }
    
    return EFalse;
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::AddItemL
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::AddItemL( TMediaFileHistoryItem aItem )
    {
    TInt index = ItemIndex( aItem.iId );
    if ( index != KErrNotFound )
        {
        iList.Remove(index);
        }

    User::LeaveIfError( iList.Append( aItem ) );
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::ItemIndex
//
// -----------------------------------------------------------------------------
//
TInt CMediaFileHistory::ItemIndex( TInt aId )
    {
    TInt count = iList.Count();
    
    for (TInt i=0; i<count; i++)
        {
        TMediaFileHistoryItem& item= iList[i];
        if ( item.iId == aId )
            {
            return i;
            }
        }
        
    return KErrNotFound;
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::Item
//
// -----------------------------------------------------------------------------
//
TMediaFileHistoryItem& CMediaFileHistory::Item( TInt aIndex )
    {
    if ( aIndex < 0 || aIndex >= iList.Count() )
        {
        TMFDialogUtil::Panic( KErrArgument );
        }

    return iList[aIndex];
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::Sort
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::Sort()
    {
    iList.Sort( TLinearOrder<TMediaFileHistoryItem>(CMediaFileHistory::CompareItems) );
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::CompareItems
//
// -----------------------------------------------------------------------------
//
TInt CMediaFileHistory::CompareItems( const TMediaFileHistoryItem& aFirst, 
                                      const TMediaFileHistoryItem& aSecond )
    {
    if ( aFirst.iTime > aSecond.iTime )
        {
        return -1;
        }
    else if ( aFirst.iTime < aSecond.iTime )
        {
        return 1;
        }
    return 0;
    }


// -----------------------------------------------------------------------------
// CMediaFileHistory::GetTimeText
//
// -----------------------------------------------------------------------------
//
void CMediaFileHistory::GetTimeText( TDes& aText, TTime aTime )
    {
    _LIT( KFormat, "%02d.%02d.%04d %02d:%02d:%02d" );
    
    TDateTime dt = aTime.DateTime();
    aText.Format( KFormat, dt.Day()+1, dt.Month()+1, dt.Year(),  dt.Hour(), dt.Minute(), dt.Second() );
    }

*/

#endif  // #ifdef _DEBUG

//  End of File