/*
* 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:  test case
*
*/


#include <aknlayoutscalable_avkon.cdl.h>
#include <AknLayout2ScalableDef.h>
#include <AknLayout2ScalableDataDef.h>
#include <AknLayout2ScalableDecode.h>
#include <eikcolib.h>

#include <badesca.h>
#include <w32std.h>
#include <coecntrl.h>
#include <eikenv.h>
#include <barsread.h>
#include <coemain.h>
#include <eikdialg.h>
#include <akndialog.h>
#include <AknOpenFileService.h>
#include <AknReadingConverter.h>
#include <aknnavi.h>
#include <eiktxlbm.h> // CTextListBoxModel
#include <eiktxlbx.h>
#include <eiklbi.h>
#include <s32file.h>
#include <f32file.h>
#include <AiwGenericParam.h>

#include <AknNotifierAppServer.h>
#include <AknNotiferAppServerApplication.h>
#include <AknNotifierAppServerSession.h>
#include <aknnotifiercontroller.h>
#include <AknNotifierControllerPlugin.h>
#include <AknNotifierControllerUtilities.h>
#include <AknNotifierWrapper.h>
#include <AknNullService.h>

#include <aknsignal.h>
#include <AknSignalNotify.h>
#include <AknSignalNotifyAddition.h>

#include <aknlongtapanimation.h>
#include <AknMarqueeControl.h>
#include <AknMediatorFacade.h>
#include <aknMemoryCardDialog.h>
#include <aknlistloadertfx.h>
#include <AknPhoneNumberGrouping.h>
#include <AknPhoneNumberTextUtils.h>
#include <AknPhoneNumberEditor.h>
#include <aknnoteattributes.h>
#include <eikdialg.h>
#include <eikmenup.h>

#include <bctestdomnotifier.rsg>
#include "PslnModel.h"
#include "bctestdomnotifiercase.h"
#include "bctestdomnotifiercontainer.h"
#include "bctestdomnotifier.hrh"
#include "bctestdomnotifierview.h"
#include "bctestdomnotifierapp.h"

// ======== MEMBER FUNCTIONS ========
// ---------------------------------------------------------------------------
// Symbian 2nd static Constructor
// ---------------------------------------------------------------------------
//
CBCDomainTestNotifierCase* CBCDomainTestNotifierCase::NewL( CBCDomainTestNotifierContainer*
    aContainer )
    {
    CBCDomainTestNotifierCase* self = new( ELeave ) CBCDomainTestNotifierCase(
        aContainer );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// C++ default constructor
// ---------------------------------------------------------------------------
//
CBCDomainTestNotifierCase::CBCDomainTestNotifierCase( CBCDomainTestNotifierContainer*
    aContainer )
    : iContainer( aContainer )
    {
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CBCDomainTestNotifierCase::~CBCDomainTestNotifierCase()
    {
    }

// ---------------------------------------------------------------------------
// Symbian 2nd Constructor
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::ConstructL()
    {
    BuildScriptL();
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::BuildScriptL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::BuildScriptL()
    {
    // Add script as your need.
    AddTestL( DELAY(1), LeftCBA, KeyOK, LeftCBA, Down, KeyOK, LeftCBA, Down,
        Down, KeyOK, DELAY(3), RightCBA, LeftCBA, Down, Down, Down, KeyOK, DELAY(3), RightCBA,
        TEND  );
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::RunL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::RunL( TInt aCmd )
    {
    if ( aCmd < EBCTestCmdOutline1 || aCmd > EBCTestCmdOutline4 )
        {
        return;
        }
    // Call release before prepare to let container has time to draw the
    // control created in PrepareCaseL.
    ReleaseCaseL();
    PrepareCaseL( aCmd );
    switch ( aCmd )
        {
        case EBCTestCmdOutline1:
            TestFunctionL();
            break;
        case EBCTestCmdOutline2:
// TestSignalL() has some problem, so comment it currently.
//            TestSignalL();
            break;
        case EBCTestCmdOutline3:
            TestOtherL();
            break;
        case EBCTestCmdOutline4:
            TestPhoneL();
			break;
        default:
            break;
        }
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::PrepareCaseL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::PrepareCaseL( TInt aCmd )
    {
    switch ( aCmd )
        {
        case EBCTestCmdOutline1:
            // Here is a simple demo. You should create your control
            // instead of this.
            iControl = new( ELeave ) CCoeControl();
            iControl->SetContainerWindowL( *iContainer );
            iControl->MakeVisible( ETrue );
            break;
        default:
            break;
        }
    // Pass the owner of iControl to iContainer.
    iContainer->SetControl( iControl );
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::ReleaseCaseL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::ReleaseCaseL()
    {
    // let container delete the component control.
    iContainer->ResetControl();
    iControl = NULL;
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::TestFunctionL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::TestFunctionL()
    {
    //aknopenfileservice.h

    RFs& fs = CEikonEnv::Static()->FsSession();
    RFile rfile;
    _LIT( KFilePath, "c:\\BCTestLog\\test.txt" );
    rfile.Create( fs, KFilePath, EFileWrite | EFileShareAny );
    CleanupClosePushL( rfile );

    CAiwGenericParamList* aiwparalist = CAiwGenericParamList::NewL();
    CPslnModel* psmodel= CPslnModel::NewL();
    MAknServerAppExitObserver* serappexit =
        static_cast<MAknServerAppExitObserver*> ( psmodel );

    CAknOpenFileService* fileserv = NULL;
    TRAPD( err, fileserv = CAknOpenFileService::NewL(
        KFilePath, serappexit, aiwparalist ) );
    _LIT( KCAknOpenFileServiceNewL, "CAknOpenFileService::NewL()" );
    AssertTrueL( ETrue, KCAknOpenFileServiceNewL );
    delete fileserv;
    fileserv = NULL;

    TUid KUid = { 0xA0004001 };
    TInt err1;
    TRAP( err1, fileserv = CAknOpenFileService::NewL(
        KUid, rfile, serappexit, aiwparalist ) );
    _LIT( KCAknOpenFileServiceNewLOver, "CAknOpenFileService::NewL()" );
    AssertTrueL( ETrue, KCAknOpenFileServiceNewLOver );

    CleanupStack::PopAndDestroy(); // rfile 
    delete fileserv;
    delete psmodel;
    delete aiwparalist;
    _LIT( KCAknNotifierAppServerAppUi,"CAknNotifierAppServerAppUi" );
    // AknNotiferAppServerApplication.h

    CBCNotifierAppServer *notifierapp = new ( ELeave )
         CBCNotifierAppServer();
    CleanupStack::PushL( notifierapp );
    CApaDocument* tmp = notifierapp->CreateDocumentL();

    CApaAppServer* appserver = NULL;
    notifierapp->NewAppServerL( appserver );

    delete tmp;
    delete appserver;
    CleanupStack::PopAndDestroy( notifierapp );

    _LIT( KHandleCommandL, "HandleCommandL" );
    _LIT( KSetFadedL, "SetFadedL" );
    _LIT( KHandleKeyEventL, "HandleKeyEventL" );
    _LIT( KHandleError, "HandleError" );
    _LIT( KHandleSystemEventL, "HandleSystemEventL" );
    _LIT( KManager, "Manager" );
    _LIT( KSetManager, "SetManager" );
    _LIT( KEikSrvBlocked, "EikSrvBlocked" );

    CAknNotifierAppServerAppUi* notifier = static_cast<CAknNotifierAppServerAppUi*>
        ( CEikonEnv::Static()->AppUi() );

    notifier->CAknNotifierAppServerAppUi::HandleCommandL( EEikCmdCanceled );
    AssertTrueL( ETrue, KHandleCommandL );

    notifier->SetFadedL( EFalse );
    AssertTrueL( ETrue, KSetFadedL );

    TKeyEvent keyevent = { EKeyEnter, EStdKeyEnter, 0, 0  };
    notifier->HandleKeyEventL( keyevent, EEventNull );
    AssertTrueL( ETrue, KHandleKeyEventL );

    TInt handleErr = 0;
    SExtendedError exterr;
    TBuf<32> errbuf( KCAknNotifierAppServerAppUi );
    notifier->HandleError( handleErr, exterr , errbuf , errbuf );
    AssertTrueL( ETrue, KHandleError );

    TWsEvent wsevent;
    notifier->HandleSystemEventL( wsevent );
    AssertTrueL( ETrue, KHandleSystemEventL );

    MEikSrvNotifierManager* manager = notifier->Manager();
    AssertTrueL( ETrue, KManager );

    notifier->SetManager( manager );
    AssertTrueL( ETrue, KSetManager );

    notifier->EikSrvBlocked();
    AssertTrueL( ETrue, KEikSrvBlocked );

    //notifier->SuppressAppSwitching( ETrue );
    //_LIT( KSuppressAppSwitching, "SuppressAppSwitching" );
    //AssertTrueL( ETrue, KSuppressAppSwitching );

    // AknNotiferAppServer.h
    _LIT( KNotiServer, "CAknNotifierAppServer");
    _LIT( KStartNotifierL, "StartNotifierL");
    _LIT( KUpdateNotifierL, "UpdateNotifierL");
    _LIT( KCancelNotifier, "CancelNotifier");
    _LIT( KStartNotifierAndGetResponseL, "StartNotifierAndGetResponseL");
    _LIT( KAppendNotifierLibNameL, "AppendNotifierLibNameL");
    _LIT( KSetImplementationFinderL, "SetImplementationFinderL");
    _LIT( KUnbalanceReferenceCountForNotif, "UnbalanceReferenceCountForNotif");
    _LIT( KCreateServiceL, "CreateServiceL");
    _LIT( KLoadNotifiersL, "LoadNotifiersL");
    _LIT( KCAknNotifierAppServerDestroy, "SCAknNotifierAppServerDestroy" );
    _LIT( KUpdateNotifierAndGetResponseL, "UpdateNotifierAndGetResponseL" );
////////////////////////////////////////////////////////////////////////////////////////////////
    CAknNotifierAppServer *notiserver = new ( ELeave ) CAknNotifierAppServer();
    CleanupStack::PushL( notiserver );
    AssertNotNullL( notiserver, KNotiServer );
    
    _LIT(KLabName, "ictsuiutilsnotif.dll");
	//_LIT(KLabName, "aknoldstylenotif.dll");
    notiserver->AppendNotifierLibNameL( KLabName );
    AssertTrueL( ETrue,KAppendNotifierLibNameL );
    
    //TRAP( err, notiserver->LoadNotifiersL() );
    //AssertTrueL( ETrue,KLoadNotifiersL );

    TBuf8<32> bf;
    TRAP( err,notiserver->StartNotifierL(
        KUidBCDomainTestNotifier, bf, bf ) );
    AssertTrueL( ETrue,KStartNotifierL );

    TRAP( err, notiserver->UpdateNotifierL(
        KUidBCDomainTestNotifier, bf, bf ) );
    AssertTrueL( ETrue,KUpdateNotifierL );

    notiserver->CancelNotifier( KUidBCDomainTestNotifier );
    AssertTrueL( ETrue,KCancelNotifier );

    RMessagePtr2 msg;
    TInt replyslot = 1;
    TRAP( err, notiserver->StartNotifierAndGetResponseL(
        KUidBCDomainTestNotifier, bf, msg, replyslot ) );
    AssertTrueL( ETrue, KStartNotifierAndGetResponseL );


    MNotifLibraryOwningServer* pFinder = NULL;
    notiserver->SetImplementationFinderL( pFinder );
    AssertTrueL( ETrue, KSetImplementationFinderL );

    notiserver->UnbalanceReferenceCountForNotif(
        KUidBCDomainTestNotifier, EFalse );
    AssertTrueL( ETrue,KUnbalanceReferenceCountForNotif );

    TRAP( err, notiserver->CreateServiceL( KUidBCDomainTestNotifier ) );
    AssertTrueL( ETrue, KCreateServiceL );



    TRAP( err, notiserver->UpdateNotifierAndGetResponseL(
        KUidBCDomainTestNotifier, bf, msg, replyslot ) );
    AssertTrueL( ETrue, KUpdateNotifierAndGetResponseL );

    CleanupStack::PopAndDestroy( notiserver );
    AssertTrueL( ETrue,KCAknNotifierAppServerDestroy );
////////////////////////////////////////////////////////////////////////////////////
    // AknNotifierAppServerSession.h
    // aknnotifiercontrollerutilities.h

    CAknNotifierControllerUtility* ntf =
                new ( ELeave )CAknNotifierControllerUtility(0);
    CleanupStack::PushL( ntf );
    ntf->DoStopNotifications();
    CleanupStack::PopAndDestroy( ntf );

    _LIT( KCAknNotifierControllerUtility,
                "CAknNotifierControllerUtility::DoStopNotifications()" );
    AssertTrueL( ETrue, KCAknNotifierControllerUtility );

    // aknnotifiercontroller.h
    _LIT( KCancelAllNotifications, "CancelAllNotifications" );
    _LIT( KHideAllNotifications, "HideAllNotifications" );

    AknNotifierController::HideAllNotifications( EFalse );
    AssertTrueL( ETrue, KHideAllNotifications );

    AknNotifierController::CancelAllNotifications();
    AssertTrueL( ETrue, KCancelAllNotifications );

    // aknnullservice.h

    _LIT( KCAknNullService, "CAknNullService" );
    _LIT( KCAknNullServiceDestroy, "CAknNullServiceDestroy" );

    MAknServerAppExitObserver* os = new ( ELeave ) CBCserverAppExitObserver();
    TUid KUidTest = { 0xA004000 };
    CAknNullService* nullserv = NULL;
    TRAP( err, nullserv = CAknNullService::NewL( KUidTest, os ) );
    CleanupStack::PushL( nullserv );
    AssertTrueL( ETrue,KCAknNullService );
    CleanupStack::Pop();
    AssertTrueL( ETrue,KCAknNullServiceDestroy );
    delete os;


    CAknLongTapAnimation* ltAnimation = CAknLongTapAnimation::NewL();
    CleanupStack::PushL( ltAnimation );
    _LIT( KCAknLongTapAnimationNewL, "CAknLongTapAnimation::NewL()" );
    AssertTrueL( ETrue, KCAknLongTapAnimationNewL );

    if (ltAnimation)
        {
        ltAnimation->ShowAnimationL( 10, 10 );
        _LIT( KCAknLongTapAnimationShowAnimationL,
            "CAknLongTapAnimation::ShowAnimationL()" );
        AssertTrueL( ETrue, KCAknLongTapAnimationShowAnimationL );

        ltAnimation->HideAnimation();
        _LIT( KCAknLongTapAnimationHideAnimation,
            "CAknLongTapAnimation::HideAnimation()" );
        AssertTrueL( ETrue, KCAknLongTapAnimationHideAnimation );
        }

    CleanupStack::PopAndDestroy();//ltAnimation

    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::TestSignalL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::TestSignalL()
    {
    // aknsignal.h
    _LIT( KCAknSignalPane, "CAknSignalPane" );
    _LIT( KConstructFromResourceL, "ConstructFromResourceL" );
    _LIT( KSetSignalLevel, "SetSignalLevel" );
    _LIT( KShowGprsIcon, "ShowGprsIcon" );
    _LIT( KShowCommonPacketDataIcon, "ShowCommonPacketDataIcon" );
    _LIT( KShowWcdmaIcon, "ShowWcdmaIcon" );
    _LIT( KShowHsdpaIcon, "ShowHsdpaIcon" );
    _LIT( KShowEdgeIcon, "ShowEdgeIcon" );
    _LIT( KCAknSignalPaneDestroy, "SCAknSignalPaneDestroy" );

    CAknSignalPane* signalpane = new ( ELeave ) CAknSignalPane();
    CleanupStack::PushL( signalpane );
    AssertNotNullL( signalpane, KCAknSignalPane );

    TResourceReader reader;
    CEikonEnv::Static()->CreateResourceReaderLC( reader,
        R_BCTESTDOMNOTIFIER_VIEW );

    signalpane->ConstructFromResourceL( reader );
    AssertTrueL( ETrue, KConstructFromResourceL );

    signalpane->SetSignalLevel( 5 );
    AssertTrueL( ETrue, KSetSignalLevel );

    signalpane->ShowGprsIcon( EAknSignalGprsIndicatorOff );
    AssertTrueL( ETrue, KShowGprsIcon );

    signalpane->ShowCommonPacketDataIcon(
        EAknSignalCommonPacketDataIndicatorOff );
    AssertTrueL( ETrue,KShowCommonPacketDataIcon );

    signalpane->ShowWcdmaIcon( EAknSignalWcdmaIndicatorOff );
    AssertTrueL( ETrue, KShowWcdmaIcon );

    signalpane->ShowHsdpaIcon( EAknSignalHsdpaIndicatorOff );
    AssertTrueL( ETrue, KShowHsdpaIcon );

    signalpane->ShowCdmaIcon( EAknSignalCdmaIndicatorOff );
    AssertTrueL( ETrue, KShowHsdpaIcon );

    signalpane->ShowEdgeIcon( EAknSignalEdgeIndicatorOff );
    AssertTrueL( ETrue, KShowEdgeIcon );

    signalpane->SetNaviPaneBackgroundType( EAknNaviPaneBackgroundTypeNotDefined );

    // Extension Func ExtensionInterface()
    _LIT( KPositionChanged,"PositionChanged" );

    CleanupStack::PopAndDestroy();// reader
    CleanupStack::PopAndDestroy( signalpane );
    AssertTrueL( ETrue,KCAknSignalPaneDestroy );

    CBCSignalPane* bcsinpane = new ( ELeave ) CBCSignalPane();
    CEikonEnv::Static()->CreateResourceReaderLC( reader,
         R_BCTESTDOMNOTIFIER_VIEW );
    bcsinpane->ConstructFromResourceL( reader );

    bcsinpane->PositionChanged();
    AssertTrueL( ETrue, KPositionChanged );

    CleanupStack::PopAndDestroy();//reader
    delete bcsinpane;
    AssertTrueL( ETrue,KPositionChanged );

    // AknSignalNotifyAddition.h
    _LIT( KAknSignalNotifyAddition, "AknSignalNotifyAddition" );

    CAknNavigationControlContainer* navicontrol = new ( ELeave )
         CAknNavigationControlContainer();
    navicontrol->ConstructL();
    AssertTrueL( ETrue, KAknSignalNotifyAddition );
    delete navicontrol;

    //AknNotifierWrapper.h
    _LIT( KCAknCommonNotifierWrapper, "CAknCommonNotifierWrapper" );
    _LIT( KSetCustomSecurityHandler, "SetCustomSecurityHandler" );
    _LIT( KStartNotifierL, "StartNotifierL" );
    _LIT( KCancelNotifier, "SCancelNotifier" );
    _LIT( KStartNotifierL2, "StartNotifierL2" );
    _LIT( KUpdateNotifierL1, "UpdateNotifierL1" );
    _LIT( KUpdateNotifierL2, "UpdateNotifierL2" );
    _LIT( KDoNotifierControllerCommand, "DoNotifierControllerCommand" );
    _LIT( KStartL1, "StartL1" );
    _LIT( KStartL2, "StartL2" );
    _LIT( KUpdateL, "UpdateL" );
    _LIT( KSInfo, "Info" );
    _LIT( KNotifierCapabilites, "NotifierCapabilites" );
    _LIT( KCancel, "Cancel" );
    _LIT( KNewServerRequestL, "NewServerRequestL" );
    _LIT( KAsyncMessageCompleted, "AsyncMessageCompleted" );

    TBuf<32> plibaryname;
    TUid kuid = {0xA0004000};
    TUid  channel = EAknNotifierChannelNote;

    CAknCommonNotifierWrapper* notiwrap = CAknCommonNotifierWrapper::NewL(
        kuid, channel, MEikSrvNotifierBase2::ENotifierPriorityLowest,
        KSInfo, 64, EFalse );
    CleanupStack::PushL( notiwrap );
    AssertNotNullL( notiwrap, KCAknCommonNotifierWrapper );

    TBuf8<32> bf;
    RMessagePtr2 msg;
    TInt replyslot = 1;

    TUid KUid1 = { 0xA0004001 };
    TUid KUid2 = { 0xA0004002 };

    MAknNotifierCustomSecurityCheck* handler = NULL;
    notiwrap->SetCustomSecurityHandler( handler );
    AssertTrueL( ETrue, KSetCustomSecurityHandler );
    delete handler;

    notiwrap->StartNotifierL( KUid1, bf, replyslot, msg );
    AssertTrueL( ETrue, KStartNotifierL );

    TInt err = 0;
    TRAP( err, notiwrap->StartNotifierL( KUid2, bf ) );
    AssertTrueL( ETrue, KStartNotifierL2 );

    notiwrap->CancelNotifier( KUid1 );
    notiwrap->CancelNotifier( KUid2 );
    AssertTrueL( ETrue, KCancelNotifier );

    TRAP( err, notiwrap->UpdateNotifierL( KUid1, bf ) );
    AssertTrueL( ETrue, KUpdateNotifierL1 );

    TRAP( err, notiwrap->MAknNotifierWrapper::UpdateNotifierL( KUid2, bf, replyslot,msg ) );
    AssertTrueL( ETrue, KUpdateNotifierL2 );

    notiwrap->DoNotifierControllerCommand( 1 );
    AssertTrueL( ETrue,KDoNotifierControllerCommand );

    notiwrap->StartL( bf,replyslot,msg );
    AssertTrueL( ETrue,KStartL1 );

    notiwrap->Info();
    AssertTrueL( ETrue,KSInfo );

    TRAP( err, notiwrap->UpdateL( bf ) );
    AssertTrueL( ETrue,KUpdateL );

    notiwrap->NotifierCapabilites();
    AssertTrueL( ETrue,KNotifierCapabilites );

    TRAP( err, notiwrap->StartL( bf ) );
    AssertTrueL( ETrue,KStartL2 );

    MAknNotifierWrapper* owner = NULL;
    RMessagePtr2 ptr;
    CAknNotifierMessageObserver* notimessa = CAknNotifierMessageObserver::
        NewServerRequestL( KUidBCDomainTestNotifier, owner, ptr, replyslot );
    CleanupStack::PushL( notimessa );
    AssertNotNullL( notimessa, KNewServerRequestL );

    notiwrap->AsyncMessageCompleted( notimessa );
    AssertTrueL( ETrue, KAsyncMessageCompleted );

    CleanupStack::PopAndDestroy( notimessa );

    notiwrap->Cancel();
    AssertTrueL( ETrue, KCancel );

    notiwrap->Release();
    _LIT( KRelease, "Release" );
    AssertTrueL( ETrue, KRelease );
    CleanupStack::Pop( notiwrap );    

    TUid ntfUid = { 0x10aa0d10 };
    CAknNotifierWrapper* notifierWrap =
            CAknNotifierWrapper::NewL( ntfUid , ntfUid,  0,  ntfUid, 0);
    CleanupStack::PushL( notifierWrap );

    TBuf8<10> buf;
    RMessagePtr2 message;
    notifierWrap->StartNotifierL( ntfUid, buf,  0,  message );

    TInt errno;
    TRAP( errno, notifierWrap->StartNotifierL( ntfUid, buf ) );

    CleanupStack::PopAndDestroy( notifierWrap );

    _LIT( KCAknNotifierWrapper, "CAknNotifierWrapper::StartNotifierL(4)" );
    AssertTrueL( ETrue, KCAknNotifierWrapper );
    _LIT( KCAknNotifierWrapper2, "CAknNotifierWrapper::StartNotifierL(2)" );
    AssertTrueL( ETrue, KCAknNotifierWrapper2 );

    // AknSignalNotify.h
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::TestOtherL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::TestOtherL()
    {

    // AknMarqueeControl.h

    _LIT( KCAknMarqueeControl, "CAknMarqueeControl" );
    _LIT( KStart, "Start" );
    _LIT( KReset, "Reset" );
    _LIT( KStop, "Stop" );
    _LIT( KIsMarqueeOn, "IsMarqueeOn" );
    _LIT( KUseLogicalToVisualConversion, "UseLogicalToVisualConversion" );
    _LIT( KSetSpeedInPixels, "SetSpeedInPixels" );
    _LIT( KSetDelay, "SetDelay" );
    _LIT( KSetInterval, "SetInterval" );
    _LIT( KSetLoops, "SetLoops" );
    _LIT( KEnableMarquee, "EnableMarquee" );
    _LIT( KSCAknMarqueeControlDestroy, "SSCAknMarqueeControlDestroy" );

    CAknMarqueeControl* marcontrol = CAknMarqueeControl::NewL();
    CleanupStack::PushL( marcontrol );
    AssertNotNullL( marcontrol, KCAknMarqueeControl );
    marcontrol->Start();
    AssertTrueL( ETrue, KStart );
    marcontrol->Reset();
    AssertTrueL( ETrue, KReset );
    marcontrol->Stop();
    AssertTrueL( ETrue, KStop );
    marcontrol->IsMarqueeOn();
    AssertTrueL( ETrue, KIsMarqueeOn );
    marcontrol->UseLogicalToVisualConversion( EFalse );
    AssertTrueL( ETrue, KUseLogicalToVisualConversion );
    marcontrol->SetSpeedInPixels( 4 );
    AssertTrueL( ETrue, KSetSpeedInPixels );
    marcontrol->SetDelay( 8 );
    AssertTrueL( ETrue, KSetDelay );
    marcontrol->SetInterval( 8 );
    AssertTrueL( ETrue, KSetInterval );
    marcontrol->SetLoops( 1 );
    AssertTrueL( ETrue, KSetLoops );
    marcontrol->EnableMarquee( EFalse );
    AssertTrueL( ETrue, KEnableMarquee );

    const TBuf<32>  txt( KStart );
    const TInt      baselineoffset = 8;
    const CGraphicsContext::TTextAlign align( CGraphicsContext::ELeft );
    TRect rect( TRect(1,1,99,99) );
    const CFont* font = CEikonEnv::Static()->NormalFont();
    TAknTextComponentLayout textlayout;

    marcontrol->SetContainerWindowL( *iContainer );
    CWindowGc& gc = marcontrol->SystemGc();

    marcontrol->DrawText( gc, rect, txt, baselineoffset, align, *font );
    //marcontrol->DrawText( gc, rect, textlayout, txt, font );

    CleanupStack::PopAndDestroy( marcontrol );
    AssertTrueL( ETrue, KSCAknMarqueeControlDestroy );

    //  AknMediatorFacade.h
    CEikDialog *dialog = new ( ELeave ) CEikDialog();
    CleanupStack::PushL( dialog );
    CAknMediatorFacade* mediatorFacade = CAknMediatorFacade::NewL( dialog );
    CleanupStack::PushL( mediatorFacade );
    _LIT( KCAknMediatorFacade, "CAknMediatorFacade::CAknMediatorFacade()" );
    AssertTrueL( ETrue, KCAknMediatorFacade );

    mediatorFacade->ResetBuffer();
    _LIT( KCMFacadeResetBuffer, "CAknMediatorFacade::ResetBuffer()" );
    AssertTrueL( ETrue, KCMFacadeResetBuffer );

    mediatorFacade->PostUpdatedDataL();
    _LIT( KCMFacadePostUpdatedDataL, "CAknMediatorFacade::PostUpdatedDataL()" );
    AssertTrueL( ETrue, KCMFacadePostUpdatedDataL );

    AknMediatorFacade( dialog );
    _LIT( KGlobalAknMediatorFacade, "Global::AknMediatorFacade" );
    AssertTrueL( ETrue, KGlobalAknMediatorFacade );


    TInt& index = mediatorFacade->DialogIndex();
    index = 1;
    mediatorFacade->IssueCommand();
    _LIT( KCMFacadeIssueCommand, "CAknMediatorFacade::IssueCommand()" );
    AssertTrueL( ETrue, KCMFacadeIssueCommand );

    mediatorFacade->CancelCommand();
    _LIT( KCMFacadeCancelCommand, "CAknMediatorFacade::CancelCommand()" );
    AssertTrueL( ETrue, KCMFacadeCancelCommand );

    mediatorFacade->SetObserver( NULL );
    _LIT( KCMFacadeSetObserver, "CAknMediatorFacade::SetObserver()" );
    AssertTrueL( ETrue, KCMFacadeSetObserver );

    CleanupStack::PopAndDestroy( mediatorFacade );
    CleanupStack::PopAndDestroy( dialog );

    //  aknlistloadertfx.h
    _LIT( KTfxApiInternal, "TfxApiInternal" );
    _LIT( KTfxApi, "TfxApi" );
    _LIT( KRemoveTfxGc, "RemoveTfxGc" );
    _LIT( KCreateTfxGc, "CreateTfxGc" );
    _LIT( KInvalidateAll, "InvalidateAll" );

    CAknListLoader::TfxApiInternal( &gc );
    AssertTrueL( ETrue, KTfxApiInternal );
    CAknListLoader::TfxApi( &gc );
    AssertTrueL( ETrue, KTfxApi );


    CAknDialog* dlg = new ( ELeave ) CAknDialog();
	CleanupStack::PushL( dlg );
    CEikMenuPane* menupane = new (ELeave) CEikMenuPane(dlg);
	CleanupStack::PushL( menupane );
    TInt topindex = 0;
    TInt itemsthatfitinview = 1;
    CAknListLoader::CreateTfxGc( *menupane, topindex, itemsthatfitinview );

	
    //CDesCArray* txtarray = new (ELeave) CDesCArraySeg(1);
	//CleanupStack::PushL( txtarray );
    //TBuf<32> item( KStart );
    //txtarray->AppendL( item );
    

    //CTextListBoxModel* model = new( ELeave ) CTextListBoxModel();
    //CleanupStack::PushL( model );
    //model->ConstructL();
	

    //CTextListItemDrawer* drawer = new( ELeave ) CTextListItemDrawer();
    //CleanupStack::PushL( drawer );
    //drawer->ConstructL( CEikonEnv::Static()->NormalFont() );

    //CEikListBox* lstbox = new ( ELeave ) CEikListBox();
    //CleanupStack::PushL( lstbox );

    //TGulBorder tborder( TGulBorder::ESingleGray );
    //lstbox->ConstructL(  iContainer );
     //   EAknListBoxSelectionList | EAknListBoxViewerFlags );

    //CAknListLoader::CreateTfxGc( *lstbox );
    //AssertTrueL( ETrue, KCreateTfxGc );

    
       
    CAknListLoader::RemoveTfxGc( &gc );
    AssertTrueL( ETrue, KRemoveTfxGc );
    
	
    CAknListLoader::InvalidateAll();
    AssertTrueL( ETrue, KInvalidateAll );
	
	//CleanupStack::PopAndDestroy( lstbox );
	//CleanupStack::PopAndDestroy( drawer );
	//CleanupStack::PopAndDestroy( model );
	//CleanupStack::PopAndDestroy( txtarray );
	
	CleanupStack::PopAndDestroy( menupane);
	CleanupStack::PopAndDestroy( dlg );
    // AknReadingConverter.h
    _LIT( KCReadingConverter, "CReadingConverter" );
    _LIT( KHandleCompletionOfTransactionL, "HandleCompletionOfTransactionL" );
    _LIT( KMainEditor, "MainEditor" );
    _LIT( KReadingEditor, "ReadingEditor" );
    _LIT( KSetReadingEditor, "SetReadingEditor" );
    _LIT( KSetMainEditor, "SetMainEditor" );


    CReadingConverter* rdconver = CReadingConverter::NewL();
    CleanupStack::PushL( rdconver );
    AssertNotNullL( rdconver, KCReadingConverter );
    CleanupStack::PopAndDestroy();

    CEikEdwin* maineditor = NULL;
    rdconver = CReadingConverter::NewL( *maineditor, *maineditor );
    CleanupStack::PushL( rdconver );

    rdconver->HandleCompletionOfTransactionL();
    AssertTrueL( ETrue, KHandleCompletionOfTransactionL );

    rdconver->MainEditor();
    AssertTrueL( ETrue, KMainEditor );

    rdconver->ReadingEditor();
    AssertTrueL( ETrue, KReadingEditor );

    rdconver->SetReadingEditor( *maineditor );
    AssertTrueL( ETrue, KSetReadingEditor );

    rdconver->SetMainEditor( *maineditor );
    AssertTrueL( ETrue, KSetMainEditor );

    CleanupStack::PopAndDestroy( rdconver );

    //  aknMemoryCardDialog.h
    _LIT( KCAknMemoryCardDialog, "CAknMemoryCardDialog" );
    _LIT( KSetSelfPointer, "SetSelfPointer" );
    _LIT( KUnlockCardLD, "UnlockCardLD" );
    _LIT( KNotifierArray, "NotifierArray" );

    CAknMemoryCardDialog* memdlg = CAknMemoryCardDialog::NewLC();
    AssertTrueL( ETrue, KCAknMemoryCardDialog );

    CArrayPtr<MEikSrvNotifierBase2>* notifies = NotifierArray();
    AssertTrueL( ETrue, KNotifierArray );

    memdlg->SetSelfPointer( &memdlg );
    AssertTrueL( ETrue, KSetSelfPointer );
    memdlg->UnlockCardLD( EDriveE );
    AssertTrueL( ETrue, KUnlockCardLD );

    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::TestPhoneL
// ---------------------------------------------------------------------------
//
void CBCDomainTestNotifierCase::TestPhoneL()
    {
  // AknPhoneNumberGrouping.h

    _LIT( KSet, "Set" );
    _LIT( KFormattedNumber, "FormattedNumber" );
    _LIT( KCopyFormattedNumber, "CopyFormattedNumber" );
    _LIT( KGrouphonenumber, "Grouphonenumber" );
    _LIT( KCreateGroupedPhoneNumberL, "CreateGroupedPhoneNumberL" );
    _LIT( KCAknPhoneNumberGroupingDestroy, "CAknPhoneNumberGroupingDestroy" );
    _LIT( KNumberGroup, "NuberGroup::NewL" );

    TBuf<32>  num( KNumberGroup );
    CAknPhoneNumberGrouping* phonenumber = CAknPhoneNumberGrouping::NewL( 10 );
    CleanupStack::PushL( phonenumber );
    AssertNotNullL( phonenumber,KNumberGroup );

    phonenumber->Set( num );
    AssertTrueL( ETrue, KSet );
    phonenumber->FormattedNumber();
    AssertTrueL( ETrue, KFormattedNumber );

    TBuf<32>  tarea( KNumberGroup );
    phonenumber->CopyFormattedNumber( tarea );
    AssertTrueL( ETrue, KCopyFormattedNumber );
    phonenumber->GroupPhoneNumber( tarea,num );
    AssertTrueL( ETrue, KGrouphonenumber );
    phonenumber->GroupPhoneNumber( num );
    AssertTrueL( ETrue, KGrouphonenumber );
    HBufC* rturn = phonenumber->CreateGroupedPhoneNumberL( num );
    AssertTrueL( ETrue, KCreateGroupedPhoneNumberL );

    delete rturn;
    CleanupStack::PopAndDestroy();
    AssertTrueL( ETrue, KCAknPhoneNumberGroupingDestroy );

    // AknPhoneNumberTextUtils.h
    _LIT( KWrapPhonenumberToArrayL, "WrapPhonenumberToArrayL" );
    _LIT( KClipLineOnLeft, "ClipLineOnLeft" );
    _LIT( KCharsThatFitOnRight, "CharsThatFitOnRight" );

    TBuf<32> tbuf( KNumberGroup );
    const CFont *tfont = CEikonEnv::Static()->NormalFont();
    CArrayFix<TPtrC>* ary = new ( ELeave ) CArrayFixFlat<TPtrC>( 32 );
	CleanupStack::PushL( ary );
    TPtrC tptr( tbuf );

    AknPhoneNumberTextUtils::WrapPhoneNumberToArrayL(
        tarea, 2, 16, *tfont, *ary );
    AssertTrueL( ETrue, KWrapPhonenumberToArrayL );
    AknPhoneNumberTextUtils::ClipLineOnLeft( tptr, tbuf, 1, *tfont );
    AssertTrueL( ETrue, KClipLineOnLeft );
    AknPhoneNumberTextUtils::CharsThatFitOnRight( tarea, 2, *tfont );
    AssertTrueL( ETrue, KCharsThatFitOnRight );
	CleanupStack::PopAndDestroy( ary );
    //delete ary;

    // AknPhoneNumberEditor.h
    _LIT( KCAknPhoneNumberEditor, "CAknPhoneNumberEditor" );
    _LIT( KConstructFromResourceL, "ConstructFromResourceL" );
    _LIT( KFormat, "Format" );
    _LIT( KWouldTextFitInFormat, "WouldTextFitInFormat" );
    _LIT( KCurrentFormatIndex, "CurrentFormatIndex" );
    _LIT( KSetFormat, "SetFormat" );
    _LIT( KText, "Text" );
    _LIT( KSizeChanged, "SizeChanged" );
    _LIT( KMinimumSize, "MinimumSize" );
    _LIT( KInputCapabilities, "InputCapabilities" );
    _LIT( KTextLength, "TextLength" );
    _LIT( KCursorPos, "CursorPos" );
    _LIT( KSelectionLength, "SelectionLength" );
    _LIT( KSelection, "Selection" );
    _LIT( KClearSelectionL, "ClearSelectionL" );
    _LIT( KSetSelectionL, "SetSelectionL" );
    _LIT( KSetCursorPosL, "SetCursorPosL" );
    _LIT( KSelectAllL, "SelectAllL" );
    _LIT( KGetText, "GetText" );
    _LIT( KGetTextInHBufL, "GetTextInHBufL" );
    _LIT( KSetTextL, "SetTextL" );
    _LIT( KSetText, "SetText" );
    _LIT( KGetEditorMode, "KGetEditorMode" );
    _LIT( KCancelFepTransaction, "CancelFepTransaction" );
    _LIT( KUpdateScrollBarsL, "UpdateScrollBarsL" );
    _LIT( KCreateScrollBarFrameL, "CreateScrollBarFrameL" );
    _LIT( KLineCursorWidth, "LineCursorWidth" );
    _LIT( KMargins, "Margins" );
    _LIT( KChangeEditorMode, "ChangeEditorMode" );
    _LIT( KResetEditorToDefaultValues, "ResetEditorToDefaultValues" );
    _LIT( KOfferKeyEventL, "OfferKeyEventL" );
    _LIT( KFocusChanged, "FocusChanged" );
    _LIT( KCAknPhoneNumberEditorDestroy, "KCAknPhoneNumberEditorDestroy" );
    _LIT( KCAknPhoneNumberEditorDraw, "Draw" );

    CAknPhoneNumberEditor* phonenumeditor =
        new ( ELeave ) CAknPhoneNumberEditor;
    CleanupStack::PushL( phonenumeditor );
    //AssertNotNullL( phonenumeditor,KCAknPhoneNumberEditor  );
    phonenumeditor->SetContainerWindowL( *iContainer );
    TResourceReader reader;
    CEikonEnv::Static()->CreateResourceReaderLC( reader,
	          R_PHONEEDAPP_RESEDIT );


    phonenumeditor->ConstructFromResourceL( reader );
    AssertTrueL( ETrue,KConstructFromResourceL  );
    CleanupStack::PopAndDestroy();//reader
	
    phonenumeditor->Format( 0 );
    AssertTrueL( ETrue, KFormat );

    //Draw() function will be called.
    iContainer->SetControl( phonenumeditor ); 
    AssertTrueL( ETrue, KCAknPhoneNumberEditorDraw );

    TInt tcount = phonenumeditor->CountFormats();
    phonenumeditor->WouldTextFitInFormat( tcount-1 );
    AssertTrueL( ETrue, KWouldTextFitInFormat );
    tcount = phonenumeditor->CurrentFormatIndex();
    AssertTrueL( ETrue, KCurrentFormatIndex );
    phonenumeditor->SetFormat( tcount );
    AssertTrueL( ETrue, KSetFormat );
    phonenumeditor->Text();
    AssertTrueL( ETrue, KText );
    phonenumeditor->SizeChanged();
    AssertTrueL( ETrue, KSizeChanged );
    phonenumeditor->MinimumSize();
    AssertTrueL( ETrue, KMinimumSize );
    phonenumeditor->InputCapabilities();
    AssertTrueL( ETrue, KInputCapabilities );

    phonenumeditor->TextLength();
    AssertTrueL( ETrue, KTextLength );
    phonenumeditor->CursorPos();
    AssertTrueL( ETrue, KCursorPos );
    phonenumeditor->SelectionLength();
    AssertTrueL( ETrue, KSelectionLength );
    phonenumeditor->Selection();
    AssertTrueL( ETrue, KSelection );
    phonenumeditor->ClearSelectionL();
    AssertTrueL( ETrue, KClearSelectionL );
    phonenumeditor->SetSelectionL( 0,0 );
    AssertTrueL( ETrue, KSetSelectionL );
    phonenumeditor->SetCursorPosL( 0,0 );
    AssertTrueL( ETrue, KSetCursorPosL );
    phonenumeditor->SelectAllL();
    AssertTrueL( ETrue, KSelectAllL );
    phonenumeditor->GetText( tarea );
    AssertTrueL( ETrue, KGetText );
    HBufC* temp = phonenumeditor->GetTextInHBufL();
	CleanupStack::PushL( temp );
    AssertTrueL( ETrue, KGetTextInHBufL );
	CleanupStack::PopAndDestroy( temp );

    phonenumeditor->SetTextL( &tarea );
    AssertTrueL( ETrue, KSetTextL );

    phonenumeditor->SetText( tarea );
    AssertTrueL( ETrue, KSetText );

    phonenumeditor->CancelFepTransaction();
    AssertTrueL( ETrue, KCancelFepTransaction );

    phonenumeditor->UpdateScrollBarsL();
    AssertTrueL( ETrue, KUpdateScrollBarsL );
    CEikScrollBarFrame* pScrBar = phonenumeditor->CreateScrollBarFrameL();
	CleanupStack::PushL( pScrBar );
    AssertTrueL( ETrue, KCreateScrollBarFrameL );
    CleanupStack::PopAndDestroy( pScrBar );
    phonenumeditor->LineCursorWidth();
    AssertTrueL( ETrue, KLineCursorWidth );
    phonenumeditor->Margins();
    AssertTrueL( ETrue, KMargins );

    phonenumeditor->ChangeEditorMode();
    AssertTrueL( ETrue, KChangeEditorMode );
    phonenumeditor->GetEditorMode();
    AssertTrueL( ETrue, KGetEditorMode );
    phonenumeditor->ResetEditorToDefaultValues();
    AssertTrueL( ETrue, KResetEditorToDefaultValues );

    TKeyEvent keyevent = { EKeyEnter, EStdKeyEnter, 0, 0  };
    phonenumeditor->OfferKeyEventL( keyevent,EEventKey );
    AssertTrueL( ETrue, KOfferKeyEventL );
    phonenumeditor->FocusChanged( EDrawNow );//Draw() function will be called.
    AssertTrueL( ETrue, KFocusChanged );

    iContainer->ResetControl();
	CleanupStack::Pop();
    //CleanupStack::PopAndDestroy();
    AssertTrueL( ETrue, KCAknPhoneNumberEditorDestroy );

    TestFormatL();
    }

// ---------------------------------------------------------------------------
// CBCDomainTestNotifierCase::TestFormatL
// ---------------------------------------------------------------------------
//
void  CBCDomainTestNotifierCase::TestFormatL()
    {
    _LIT( KCAknPhoneNumberEditor, "CAknPhoneNumberEditor" );
    _LIT( KConstructL, "ConstructL" );
    _LIT( KString, "..." );
    _LIT( KTFormat, "TFormat" );
    _LIT( KAddFormat, "AddFormat" );
    _LIT( KCAknPhoneNumberEditorDestroy, "CAknPhoneNumberEditorDestroy" );
    _LIT( KCAknMemoryCardDialog, "CAknMemoryCardDialog" );
    _LIT( KGetSkinnedBitmapID, "GetSkinnedBitmapID" );
    _LIT( KUnlockCardLD, "UnlockCardLD" );

    CAknPhoneNumberEditor* phonenumeditor = new ( ELeave ) CAknPhoneNumberEditor;
    AssertNotNullL( phonenumeditor, KCAknPhoneNumberEditor );

    phonenumeditor->SetContainerWindowL( *iContainer );
    phonenumeditor->ConstructL(  30, 3, 3, KString);
    AssertTrueL( ETrue, KConstructL );

    const CFont *tfont = CEikonEnv::Static()->NormalFont();
    CAknPhoneNumberEditor::TFormat tformat( CAknPhoneNumberEditor::TFormat(
        TRect( 10, 10, 70, 55 ), 0, 3, 3, 15, tfont ) );
    AssertTrueL( ETrue, KTFormat );

    phonenumeditor->AddFormat( tformat );
    AssertTrueL( ETrue, KAddFormat );

    TResourceReader reader;
    CEikonEnv::Static()->CreateResourceReaderLC( reader,
         R_NUMBER_FIELD_FORM );
    CAknPhoneNumberEditor::TFormat readformat( reader );
    AssertTrueL( ETrue, KTFormat );

    CleanupStack::PopAndDestroy( );//reader
    delete phonenumeditor;    
    AssertTrueL( ETrue, KCAknPhoneNumberEditorDestroy  );


    CAknNoteAttributes::GetSkinnedBitmapID( 0 );
    AssertTrueL( ETrue, KGetSkinnedBitmapID  );

    //aknmemorycarddialog.h
    CAknMemoryCardDialog* memdlg = CAknMemoryCardDialog::NewLC();
    AssertNotNullL( memdlg, KCAknMemoryCardDialog );

    memdlg->UnlockCardLD( ETrue );
    AssertTrueL( ETrue, KUnlockCardLD );

    }
