ipsservices/ipssossettings/tsrc/IpsSosTestApp/src/TESTAPPAppUi.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:37:30 +0200
branchRCL_3
changeset 8 e1b6206813b4
parent 3 a4d6f1ea0416
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* Copyright (c) 2009 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: 
*
*/
/*
* ============================================================================
*  Name     : CTestAppAppUi from TestAppAppUi.cpp
*  Part of  : TestApp
* ============================================================================
*/

// INCLUDE FILES
#include <ipssostestapp.rsg>

#include <avkon.hrh>
#include <aknnotewrappers.h> 
#include <e32property.h>
#include <msvstd.h>
#include <ImumDaSettingsData.h>
#include <ImumDaSettingsDataCollection.h>
#include <ImumDaMailboxServices.h>
#include <ImumDaMailboxUtilities.h>
#include <ImumDomainApi.h>
#include <Imumdasettingskeys.h>
#include <senduiconsts.h>
#include <cemailaccounts.h>
//#include <ODSUtility.h>

#include "TestAppAppUi.h"
#include "TestAppContainer.h"
#include "TestApp.hrh"
#include "ipssetdataapi.h"
#include "ipssetwizardadapter.h"

//#include "ODSConfigSettings.h"

const TUid KTestAppCRUidWizardSettings   = {0x2000B112};

const TInt KTestAppWizardDataPopIndicator = 0;
const TInt KTestAppWizardDataImapIndicator = 1;

const TInt KTestAppWizardDataSecurityOff = 0;
const TInt KTestAppWizardDataSecurityTLS = 1;
const TInt KTestAppWizardDataSecuritySSL = 2;

_LIT( KTestAppFsBasicPluginStr, "fsp" );


           

// ================= MEMBER FUNCTIONS =======================
//
// ----------------------------------------------------------
// CTestAppAppUi::LaunchPluginL()
// ----------------------------------------------------------
//
void CTestAppAppUi::LaunchPluginL()
    {
    CIpsSetDataApi::LaunchSettingsL( iMailboxId );
    } 

// ----------------------------------------------------------
// CTestAppAppUi::WriteSettingsL()
// ----------------------------------------------------------
//  
void CTestAppAppUi::HandleSessionEventL(
        TMsvSessionEvent /*aEvent*/, 
        TAny* /*aArg1*/, 
        TAny* /*aArg2*/, 
        TAny* /*aArg3*/ )
    {
    
    }

// ----------------------------------------------------------
// CTestAppAppUi::WriteSettingsL()
// ----------------------------------------------------------
//    
void CTestAppAppUi::WriteSettingsViaODSUtilityL()
    {

    }


// ----------------------------------------------------------
// CTestAppAppUi::WriteSettingsToWizardCenRepL()
// ----------------------------------------------------------
// 
void CTestAppAppUi::WriteSettingsToWizardCenRepL()
    {
    CRepository* repository;
    repository = CRepository::NewL( KTestAppCRUidWizardSettings );
    CleanupStack::PushL( repository );
    TInt error = KErrNone; 
    error = repository->Set( CIpsSetWizardAdapter::ECRKSetupWizAccountType, 
            KTestAppFsBasicPluginStr );
    
    error = repository->Set( CIpsSetWizardAdapter::ECRKMaxAccountsReached,
            EFalse );
    
    
    if ( iProtocol == KSenduiMtmImap4UidValue )
        {
        error = repository->Set( 
                CIpsSetWizardAdapter::ECRKPopImapProtocolIndicatorId,
                KTestAppWizardDataImapIndicator );
        }
    else if ( iProtocol == KSenduiMtmPop3UidValue )
        {
        error = repository->Set( 
                CIpsSetWizardAdapter::ECRKPopImapProtocolIndicatorId,
                KTestAppWizardDataPopIndicator );
        }
    else
        {
        User::Leave( KErrArgument );
        }
    
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapEmailAddressId,
            iEmailAddress );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapUsernameId,
            iUserName );
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapPasswordId,
            iPassword );
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapIncomingServerId,
            iIncomingServerAddress );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapIncomingSecurityAuthId, 0 );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapIncomingSecurityProtocolId,
            iIncomingSecurity );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapIncomingPortId,
            iIncomingPort );
    
    iOutgoingServerAddress.ZeroTerminate();
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapOutgoingServerId,
            iOutgoingServerAddress );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapOutgoingSecurityAuthId, 0 );

    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapOutgoingSecurityProtocolId,
            iOutgoingSecurity );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapOutgoingPortId,
            iOutgoingPort );

    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapAccessPointId,
            iAccessPoint );
    
    error = repository->Set( 
            CIpsSetWizardAdapter::ECRKPopImapMailboxName,
            iMailboxName );
    
    
    CMsvSession* msvSession = CMsvSession::OpenSyncL( *this );
    CleanupStack::PushL( msvSession );
    CIpsSetDataApi* dataApi = CIpsSetDataApi::NewL( *msvSession );    
    CleanupStack::PushL( dataApi );
    
    error = dataApi->HandleMailboxCreation( TUid::Uid(iProtocol), *msvSession );
    
    CleanupStack::PopAndDestroy( 3, repository );
    }
// ----------------------------------------------------------
// CTestAppAppUi::WriteSettingsViaImumL()
// ----------------------------------------------------------
// 
void CTestAppAppUi::WriteSettingsViaImumL()
    {
    CImumDomainApi* api = CreateDomainApiLC(  );
    MImumDaMailboxServices& services = api->MailboxServicesL();

    CImumDaSettingsData* settings = services.CreateSettingsDataL( KNullUid );
    CleanupStack::PushL( settings );

    
    settings->SetAttr( TImumDaSettings::EKeyEmailAddress, iEmailAddress );
    settings->SetAttr( TImumDaSettings::EKeyMailboxName, iMailboxName ); 
    settings->SetAttr( TImumDaSettings::EKeyUserAlias, iUserAlias );
    
    TUid protocolUid = KSenduiMtmImap4Uid;  
    if ( TImumDaSettings::EValueProtocolPop3 == iProtocol )
        {
        protocolUid = KSenduiMtmPop3Uid;
        }
    MImumDaSettingsDataCollection& incoming = settings->AddSetL( protocolUid );

    incoming.SetAttr( TImumDaSettings::EKeyProtocol , iProtocol );
    incoming.SetAttr( TImumDaSettings::EKeyAccessPoint, iAccessPoint );
    incoming.SetAttr( TImumDaSettings::EKeyServer, iIncomingServerAddress );
    incoming.SetAttr( TImumDaSettings::EKeyUsername, iUserName );
    incoming.SetAttr( TImumDaSettings::EKeyPassword, iPassword );
    incoming.SetAttr( TImumDaSettings::EKeyPort, iIncomingPort );
    incoming.SetAttr( TImumDaSettings::EKeySecurity, iIncomingSecurity  ); 
   
    MImumDaSettingsDataCollection& smtpSettings = settings->AddSetL( KSenduiMtmSmtpUid );

    smtpSettings.SetAttr( TImumDaSettings::EKeyProtocol, TImumDaSettings::EValueProtocolSmtp );
    smtpSettings.SetAttr( TImumDaSettings::EKeyAccessPoint, iAccessPoint );
    smtpSettings.SetAttr( TImumDaSettings::EKeyServer, iOutgoingServerAddress );    
    smtpSettings.SetAttr( TImumDaSettings::EKeySecurity, iOutgoingSecurity );           
    smtpSettings.SetAttr( TImumDaSettings::EKeyPort, iOutgoingPort ); 
    
    TInt error( KErrNone ) ;              
    // this leaves if incorrect settings
    TRAP( error, iMailboxId = services.CreateMailboxL( *settings ) );   
    
    CleanupStack::PopAndDestroy( 2, api );
    if ( error == KErrNone )
        {
        // creation is done, save id
        SetRecentMsvIdL( iMailboxId ); 
        }
    else
        {
        User::Leave( error );
        }
        
    }

// ----------------------------------------------------------
// CTestAppAppUi::ReadSettingsL()
// ----------------------------------------------------------
//        
void CTestAppAppUi::ReadSettingsL( TInt aFileId )
    {
    TBuf<100> fileName( KIpsSosTestFilePath );
    fileName.Append( KIpsSosTestFileName );
    if ( KIpsSosTestDefaultFile != aFileId )
        {
        fileName.AppendNum( aFileId );
        }
    fileName.Append( KIpsSosTestFileExtension );
    // open the RFs
    RFs fileSession;
    User::LeaveIfError( fileSession.Connect() );
    CleanupClosePushL( fileSession );   // << fileSession

    // open the RFileReadStream
    RFileReadStream fileReader;
    User::LeaveIfError( fileReader.Open( fileSession, fileName, EFileShareExclusive ) );
    CleanupClosePushL( fileReader );    // << fileReader

    TBuf8<200> lineBuffer;
    TChar delim( KIpsSosTestLineFeed );

    TInt error( KErrNone );
    while ( KErrNone == error ) // Expected KErrEof
        {
        TRAP( error, fileReader.ReadL( lineBuffer, delim ) );
        TInt length = lineBuffer.Length();
        if ( length )
            {
            // remove line feed
            lineBuffer.Delete( length - KIpsSosTestDelimeterSize, KIpsSosTestDelimeterSize );
            // remove spaces
            lineBuffer.TrimAll();
            // ignore comment lines
            TInt comment = lineBuffer.FindF( KIpsSosTestIniCommentLine );
            if ( KErrNotFound == comment )
                {
                // find keys & values
                TInt separator = lineBuffer.FindF( KIpsSosTestIniSeparator );
                if ( KErrNotFound != separator  )
                    {
                    TPtrC8 key( KNullDesC8 );
                    TPtrC8 value( KNullDesC8 );
                    key.Set( lineBuffer.Left( separator ) );
                    TInt valueStart( separator );
                    valueStart += KIpsSosTestIniSeparator().Length();
                    value.Set( lineBuffer.Mid( valueStart ) );

                    HBufC* value16 = HBufC::NewLC( value.Length() );
                    value16->Des().Copy( value );
                    // protocol
                    if ( !key.CompareF( KIpsSosTestProtocol ) )
                        {
                        if ( !value.CompareF( KIpsSosTestPOP ) )
                            {
                            iProtocol = KSenduiMtmImap4UidValue;
                            }
                        else
                            {
                            iProtocol = KSenduiMtmPop3UidValue; 
                            }
                        }
                    // mailbox name
                    else if ( !key.CompareF( KIpsSosTestMailboxName ) )
                        {
                        iMailboxName = value16->Des();
                        }
                    // email address
                    else if ( !key.CompareF( KIpsSosTestEmailAddress ) )
                        {
                        iEmailAddress =  value16->Des();
                        }
                    // user name
                    else if ( !key.CompareF( KIpsSosTestUserName ) )
                        {
                        iUserName = value16->Des();
                        }
                    // password
                    else if ( !key.CompareF( KIpsSosTestPassword ) )
                        {
                        iPassword = value16->Des();
                        }
                   // alias
                   else if ( !key.CompareF( KIpsSosTestUserAlias ) )
                        {
                        iUserAlias =  value16->Des();
                        }
                    // signature
                    else if ( !key.CompareF( KIpsSosTestSignature ) )
                        {
                        iSignature =  value16->Des();
                        }
                    // folder path
                    else if ( !key.CompareF( KIpsSosTestFolderPath ) )
                        {
                        iFolderPath = value16->Des();
                        }
                    // access point
                    else if ( !key.CompareF( KIpsSosTestAccessPoint ) )
                        {
                        if ( !value.CompareF( KIpsSosTestAPAlwaysAsk) )
                            {
                             
                            iAccessPoint = _L(""); 
                            }
                        else
                            {
                            iAccessPoint = value16->Des(); 
                            }
                        }
                    // incoming server
                    else if ( !key.CompareF( KIpsSosTestIncomingServerAddress ) )
                        {
                        iIncomingServerAddress = value16->Des();
                        } 
                    // incoming port                       
                    else if ( !key.CompareF( KIpsSosTestIncomingPort ) )
                        {
                        if ( !value.CompareF( KIpsSosTestPortValueDefault ) )
                            {
                            iIncomingPort = KIpsSosTestPortDefault; 
                            }
                        else
                            {
                            TLex8 lex( value );
                            TInt port = 0;
                            TInt error = lex.Val( port );
                            iIncomingPort = port; 
                            }
                        } 
                    // incoming security
                    else if ( !key.CompareF( KIpsSosTestIncomingSecurity ) )
                        {
                        if ( !value.CompareF( KIpsSosTestSecurityTls ) )
                            {
                            iIncomingSecurity  = KTestAppWizardDataSecurityTLS;
                            }
                        else if ( !value.CompareF( KIpsSosTestSecuritySsl ) )
                            {
                            iIncomingSecurity  = KTestAppWizardDataSecuritySSL;
                            }
                        else 
                            {
                            iIncomingSecurity  = KTestAppWizardDataSecurityOff;
                            }
                        } 
                    // outgoing server
                    else if ( !key.CompareF( KIpsSosTestOutgoingServerAddress ) )
                        {
                        iOutgoingServerAddress =  value16->Des();
                        } 
                    // outgoing port
                    else if ( !key.CompareF( KIpsSosTestOutgoingPort ) )
                        {
                        if ( !value.CompareF( KIpsSosTestPortValueDefault) )
                            {
                            iOutgoingPort = KIpsSosTestPortDefault;
                            }
                        else
                            {
                            TLex8 lex( value );
                            TInt port = 0;
                            TInt error = lex.Val( port );
                            iOutgoingPort = port; 
                            }
                        } 
                    // outgoing security
                    else if ( !key.CompareF( KIpsSosTestOutgoingSecurity ) )
                        {
                        if ( !value.CompareF( KIpsSosTestSecurityTls ) )
                            {
                            iOutgoingSecurity  = KTestAppWizardDataSecurityTLS;
                            }
                        else if ( !value.CompareF( KIpsSosTestSecuritySsl ) )
                            {
                            iOutgoingSecurity  = KTestAppWizardDataSecuritySSL;
                            }
                        else 
                            {
                            iOutgoingSecurity  = KTestAppWizardDataSecurityOff;
                            }
                        }
                    else
                        {
                        ShowNoteL( KIpsSosTestUnknownValue );
                        }
                    CleanupStack::PopAndDestroy( value16 );
                    }
                }
            }
        }
        
    // close the RFileReadStream
    CleanupStack::PopAndDestroy( &fileReader );     // >>> fileReader

    // close the RFs
    CleanupStack::PopAndDestroy( &fileSession );    // >>> fileSession

    } 
    
// ----------------------------------------------------------
// CTestAppAppUi::ShowNoteL()
// ----------------------------------------------------------
//    
void CTestAppAppUi::ShowNoteL( const TDesC& aMessage )
    {
    CAknInformationNote* informationNote = new ( ELeave ) CAknInformationNote;
    informationNote->ExecuteLD( aMessage );
    }

// ----------------------------------------------------------
// CTestAppAppUi::DeleteAllSettingsL()
// ----------------------------------------------------------
//            
void CTestAppAppUi::DeleteAllSettingsL( )
    {
    TInt error( KErrNone );
    CEmailAccounts* accounts = CEmailAccounts::NewLC();
    // imap
    RArray<TImapAccount> imapArray;
    CleanupClosePushL( imapArray );
    accounts->GetImapAccountsL( imapArray );
    for ( TInt mailbox(0); mailbox < imapArray.Count(); mailbox++ )
        {
        TImapAccount imap = imapArray[mailbox];
        TRAP( error, accounts->DeleteImapAccountL( imap ) );
        }
    CleanupStack::PopAndDestroy( &imapArray );
    // pop
    RArray<TPopAccount> popArray;
    CleanupClosePushL( popArray );
    accounts->GetPopAccountsL( popArray );
    
    for ( TInt mailbox(0); mailbox < popArray.Count(); mailbox++ )
        {
        TPopAccount pop = popArray[mailbox];;
        TRAP( error, accounts->DeletePopAccountL( pop ) );
        }
    CleanupStack::PopAndDestroy( &popArray );
    // smtp
    RArray<TSmtpAccount> smtpArray;
    accounts->GetSmtpAccountsL( smtpArray );
    CleanupClosePushL( smtpArray );
    
    for ( TInt mailbox(0); mailbox < smtpArray.Count(); mailbox++ )
        {
        TSmtpAccount smtp = smtpArray[mailbox];
        TRAP( error, accounts->DeleteSmtpAccountL( smtp ) );
        }
    CleanupStack::PopAndDestroy( &smtpArray );
    
    CleanupStack::PopAndDestroy( accounts );
    }
    
// ----------------------------------------------------------
// CTestAppAppUi::ConstructL()
// ----------------------------------------------------------
//
void CTestAppAppUi::ConstructL()
    {
    BaseConstructL( EAknEnableSkin );
    iAppContainer = new (ELeave) CTestAppContainer;
    iAppContainer->SetMopParent( this );
    iAppContainer->ConstructL( ClientRect() );
    AddToStackL( iAppContainer );
    }

// ----------------------------------------------------
// CTestAppAppUi::~CTestAppAppUi()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CTestAppAppUi::~CTestAppAppUi()
    {
    if ( iAppContainer )
        {
        RemoveFromStack( iAppContainer );
        delete iAppContainer;
        }
    }

// ------------------------------------------------------------------------------
// CTestAppAppUi::::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
//  This function is called by the EIKON framework just before it displays
//  a menu pane. Its default implementation is empty, and by overriding it,
//  the application can set the state of menu items dynamically according
//  to the state of application data.
// ------------------------------------------------------------------------------
//
void CTestAppAppUi::DynInitMenuPaneL(
    TInt aResourceId, CEikMenuPane* /*aMenuPane*/ )
    {
    switch( aResourceId )
        {
        case R_TESTAPP_MENU:
            {            
            break;
            }
        default:
            {
            break;
            }
        }
    }

// ----------------------------------------------------
// CTestAppAppUi::HandleKeyEventL(
//     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
// ----------------------------------------------------
//
TKeyResponse CTestAppAppUi::HandleKeyEventL(
    const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
    {
    return EKeyWasNotConsumed;
    }

// ----------------------------------------------------
// CTestAppAppUi::HandleCommandL(TInt aCommand)
// ----------------------------------------------------
//
void CTestAppAppUi::HandleCommandL(TInt aCommand)
    {
    switch ( aCommand )
        {
        case EAknSoftkeyExit:
        case EEikCmdExit:
            {
            Exit();
            break;
            }
        case ETest1Cmd:
            {
            // read settings
            TInt error( KErrNone );
            TRAP( error, ReadSettingsL( KIpsSosTestDefaultFile ) );
            if ( KErrNone != error )
                {
                if ( KErrNotFound == error )
                    {
                    ShowNoteL( KIpsSosTestFileNotFound );
                    }
                else
                    {
                    ShowNoteL( KIpsSosTestErrorInReading );
                    }
                return;
                }
            // write settings
            TRAP( error, WriteSettingsToWizardCenRepL() );
            if ( KErrNone != error )
                {
                ShowNoteL( KIpsSosTestErrorInWriting );
                }
            else
                {
                ShowNoteL( KIpsSosTestSettingsCreated );
                }
            break;
            }   
        case ETest2Cmd:
            {
            // query
            TInt queryValue( KErrNotFound );
            CAknNumberQueryDialog* dlg = CAknNumberQueryDialog::NewL( queryValue, CAknQueryDialog::ENoTone );
            dlg->PrepareLC( R_NUMBER_QUERY_DIALOG );
            dlg->SetPromptL( _L("Give init file id") );
            TInt ret = dlg->RunLD();
            TInt error( KErrNone );
            // read settings
            TRAP( error, ReadSettingsL( queryValue ) );
            if ( KErrNone != error )
                {
                if ( KErrNotFound == error )
                    {
                    ShowNoteL( KIpsSosTestFileNotFound );
                    }
                else
                    {
                    ShowNoteL( KIpsSosTestErrorInReading );
                    }
                return;
                }
            // write settings
            TRAP( error, WriteSettingsToWizardCenRepL() );
            if ( KErrNone != error )
                {
                ShowNoteL( KIpsSosTestErrorInWriting );
                return;
                }
            // launch plugin
            TRAP( error, LaunchPluginL() ); 
            if ( KErrNone != error )
                {
                ShowNoteL( KIpsSosTestErrorLaunching );
                }     
            break;
            }
        case ETest3Cmd:
            {
            TMsvId recent = RecentMsvId(); 
            if ( KErrNotFound != recent )  
                {
                iMailboxId = recent;
                // launch plugin
                TInt error( KErrNone );
                TRAP( error, LaunchPluginL() ); 
                if ( KErrNone != error )
                    {
                    ShowNoteL( KIpsSosTestErrorLaunching );
                    }  
                }
            else
                {
                ShowNoteL( KIpsSosTestRecentNotFound );
                }
            break;
            }
        
        default:
            User::Leave( KErrArgument );
            break;
        }
    }
    
// ----------------------------------------------------------
// CTestAppAppUi::SetRecentMsvIdL()
// ----------------------------------------------------------
//   
void CTestAppAppUi::SetRecentMsvIdL( TMsvId aMsvId )
    {
    // define integer-type property
    TInt err = RProperty::Define( KIpsSosTestPropertyCat, EIpsSosTestRecentMsvId, RProperty::EInt );
    if ( KErrAlreadyExists != err && KErrNone != err )
        {
        User::Leave( err );
        }
    // publish property using category and key
    err = RProperty::Set( KIpsSosTestPropertyCat, EIpsSosTestRecentMsvId, aMsvId );
    }

// ----------------------------------------------------------
// CTestAppAppUi::RecentMsvId()
// ----------------------------------------------------------
//    
TMsvId CTestAppAppUi::RecentMsvId(  )
    {
    TInt recent( KErrNotFound );
    // get property using category and key
    TInt err = RProperty::Get( KIpsSosTestPropertyCat, EIpsSosTestRecentMsvId, recent );
    return recent;
    }
    
    
// End of File