diff -r f742655b05bf -r d38647835c2e voipplugins/accountcreationplugin/src/acpqueryview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/accountcreationplugin/src/acpqueryview.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,419 @@ +/* +* Copyright (c) 2007-2008 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: Implements CAcpQueryView methods +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "acpcontroller.h" +#include "acpqueryview.h" +#include "acpdialog.h" +#include "acpquerycontainer.h" +#include "acpproviderlistview.h" +#include "accountcreationpluginlogger.h" + + +// --------------------------------------------------------------------------- +// CAcpQueryView::CAcpQueryView +// --------------------------------------------------------------------------- +// +CAcpQueryView::CAcpQueryView( CAcpController& aController ) + : iController( aController ) + { + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::ConstructL +// --------------------------------------------------------------------------- +// +void CAcpQueryView::ConstructL() + { + ACPLOG( "CAcpQueryView::ConstructL begin" ); + + iEikEnv = CEikonEnv::Static(); + iUi = static_cast ( static_cast + ( iEikEnv->EikAppUi() ) ); + + BaseConstructL( R_ACP_QUERY_VIEW ); + + iDialog = CAcpDialog::NewL( *this ); + + ACPLOG( "CAcpQueryView::ConstructL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::NewL +// --------------------------------------------------------------------------- +// +CAcpQueryView* CAcpQueryView::NewL( CAcpController& aController ) + { + CAcpQueryView* self = CAcpQueryView::NewLC( aController ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::NewLC +// --------------------------------------------------------------------------- +// +CAcpQueryView* CAcpQueryView::NewLC( CAcpController& aController ) + { + CAcpQueryView* self = new ( ELeave ) CAcpQueryView( aController ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::~CAcpQueryView +// --------------------------------------------------------------------------- +// +CAcpQueryView::~CAcpQueryView() + { + ACPLOG( "CAcpQueryView::~CAcpQueryView begin" ); + + // Delete container when view is deactivated. + if ( iContainer && iUi ) + { + iUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + + delete iDialog; + + iEikEnv = NULL; + + ACPLOG( "CAcpQueryView::~CAcpQueryView end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::SetTitlePaneTextL +// For changing text to the title pane. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::SetTitlePaneTextL( const TDesC& aText ) const + { + // Get handle to title pane. + CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); + if ( statusPane ) + { + CAknTitlePane* titlePane = + static_cast ( statusPane->ControlL( + TUid::Uid( EEikStatusPaneUidTitle ) ) ); + if ( titlePane ) + { + titlePane->SetTextL( aText ); // Set text. + } + } + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::Id +// From CAknView. +// --------------------------------------------------------------------------- +// +TUid CAcpQueryView::Id() const + { + return KQueryViewId; + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::HandleCommandL +// From CEikAppUi. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::HandleCommandL( TInt aCommand ) + { + ACPLOG2( "CAcpQueryView::HandleCommandL: cmd=%d", aCommand ); + + switch ( aCommand ) + { + case EAknSoftkeyOk: + { + TInt index; // Indicates which provider to be activated + + TBuf username; // SIP username. + TBuf password; // SIP password. + // URL for activating current provider. + TBuf8 activationUrl; + + // Get current provider. + index = iController.ActiveIndex(); + + // Get username and password. + iContainer->GetContainerDataL( username, password ); + + // Get activation URL. + activationUrl.Copy( + iController.ProviderActivationUrlFromIndexL( index ) ); + + // Set username. + activationUrl.Append( KAmperSand ); + activationUrl.Append( KUsername ); + activationUrl.Append( KPlacing ); + activationUrl.Append( username ); + + // Set password. + activationUrl.Append( KAmperSand ); + activationUrl.Append( KPassword ); + activationUrl.Append( KPlacing ); + activationUrl.Append( password ); + + ACPLOG( "Launching browser"); + + // Instantiate the repository for disabling + // all security warnings and data saving form of the browser. + // Remember to restore the settings later on!! + CRepository* brRepository = CRepository::NewLC( KCRUidBrowser ); + + // Get original security warning setting. + brRepository->Get( KBrowserNGShowSecurityWarnings, iWarning ); + + // Get original data saving form setting. + brRepository->Get( KBrowserFormDataSaving, iDataSaving ); + + // Set security warning off. + brRepository->Set( KBrowserNGShowSecurityWarnings, 0 ); + + // Set data saving form off. + brRepository->Set( KBrowserFormDataSaving, 0 ); + + // Creates the application architecture server instance for + // getting new browser session. + // Remember to close the session before going out of scope. + RApaLsSession apaLsSession; + CleanupClosePushL( apaLsSession ); + + // Get current application list. + TApaTaskList taskList( iEikEnv->WsSession() ); + + // Get the browser session. + TApaTask browserTask = taskList.FindApp( KCRUidBrowser ); + + // Checks whether browser session exist or not. + if ( browserTask.Exists() ) + { + // Brings the session to the foreground. + browserTask.BringToForeground(); + // Get new buffer for sending the + // activation request to server. + HBufC8* param8 = HBufC8::NewLC( activationUrl.Length() ); + // Copy the activation URL. + param8->Des().Append( activationUrl ); + // Try to activate provider earlier selected + // by using the browser session. + // UID not used. + browserTask.SendMessage( TUid::Uid(0), *param8 ); + // Destroy the activation buffer. + CleanupStack::PopAndDestroy( param8 ); + } + else + { + // Browser instance does not exist but instance is needed + // for activating provider via OTA. + // Next connecting to the application architecture server + // and try to start a new browser instance with the + // activation address. + + TBuf activationUrl16; // The activation URL. + activationUrl16.Copy( activationUrl ); + + TThreadId threadId; // Browser instance's thread. + + // Check whether a handle number exist for the server. + if ( !apaLsSession.Handle() ) + { + // Connect to the server + User::LeaveIfError( apaLsSession.Connect() ); + } + + // Launch browser and send the activation request to the server. + User::LeaveIfError( + apaLsSession.StartDocument( activationUrl16, + KCRUidBrowser, threadId )); + } + + CleanupStack::PopAndDestroy( &apaLsSession ); + + // Activate provider list view. + iUi->ActivateLocalViewL( KProviderListViewId ); + } + break; + case EAknSoftkeySelect: + { + // Provisioning started. + HandleListBoxSelectionL(); + } + break; + case EAknSoftkeyCancel: + // Going back to the provider list view. + iUi->ActivateLocalViewL( KProviderListViewId ); + break; + case EEikCmdExit: + case EAknSoftkeyExit: + { + // Creates a repository to restore the settings earlier + // configured for browser. + CRepository* repository = CRepository::NewLC( KCRUidBrowser ); + // Restore the security warnings. + repository->Set( KBrowserNGShowSecurityWarnings, iWarning ); + // Restore the data saving form. + repository->Set( KBrowserFormDataSaving, iDataSaving ); + // Destroys the repository. + CleanupStack::PopAndDestroy( repository ); + // Exit the application. + iUi->HandleCommandL( aCommand ); + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::HandleListBoxEventL +// From MEikListBoxObserver. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::HandleListBoxEventL( CEikListBox* /*aListBox*/, + TListBoxEvent aEventType ) + { + switch ( aEventType ) + { + case EEventEnterKeyPressed: + case EEventItemDoubleClicked: + HandleListBoxSelectionL(); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::HandleListBoxSelectionL +// From MEikListBoxObserver. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::HandleListBoxSelectionL() + { + ACPLOG2( "CAcpQueryView::HandleListBoxSelectionL: %d", + iContainer->CurrentItemIndex() ); + + switch ( iContainer->CurrentItemIndex() ) + { + // Setting page item: Server username + case EAcpGenericUsername: + iContainer->ShowUsernameSettingPageL(); + break; + // Setting page item: Server password + case EAcpGenericPassword: + iContainer->ShowPwordSettingPageL(); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificView::DynInitMenuPaneL +// From MEikListBoxObserver. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::DynInitMenuPaneL( + TInt /*aResourceId*/, CEikMenuPane* /*aMenuPane*/ ) + { + ACPLOG( "CAcpQueryView::DynInitMenuPaneL begin" ); + ACPLOG( "CAcpQueryView::DynInitMenuPaneL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListView::DialogDismissed +// From MAcpDialogObserver. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::DialogDismissed( TInt /*aError*/ ) + { + iDialog->DestroyWaitNote(); + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::DoActivateL +// From CAknView. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + ACPLOG( "CAcpQueryView::DoActivateL begin" ); + + // Create container when view is activated. + if ( !iContainer ) + { + iContainer = CAcpQueryContainer::NewL( ClientRect() ); + iContainer->SetMopParent( this ); + iUi->AddToStackL( *this, iContainer ); + iContainer->ListBox()->SetListBoxObserver( this ); + } + + // Set provider specific name to title pane. + TInt index = iController.ActiveIndex(); + TBuf name = + iController.ProviderNameFromIndexL( index ); + + HBufC* caption = StringLoader::LoadLC( R_ACP_QUERY_TITLE_PANE_TEXT ); + name.Append( caption->Des() ); + + SetTitlePaneTextL( name ); + + ACPLOG( "set title pane" ); + + CleanupStack::PopAndDestroy( caption ); + + ACPLOG( "CAcpQueryView::DoActivateL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryView::DoDeactivate() +// From CAknView. +// --------------------------------------------------------------------------- +// +void CAcpQueryView::DoDeactivate() + { + ACPLOG( "CAcpQueryView::DoDeactivate begin" ); + + // Delete container when view is deactivated. + if ( iContainer ) + { + iUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + + ACPLOG( "CAcpQueryView::DoDeactivate end" ); + } + +// End of file.