--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnui/vpnmanagementui/src/vpnuiloader.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,621 @@
+/*
+* Copyright (c) 2003 - 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: VPN management main view
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknnotewrappers.h> // for warning & information notes
+#include <AknWaitDialog.h>
+#include <cmmanagerext.h>
+#include <cmdestinationext.h>
+#include <cmpluginvpndef.h>
+#include <cmapplicationsettingsui.h>
+#include <commdb.h>
+#include <sysutil.h>
+#include <ErrorUI.h>
+#include <bautils.h>
+#include <vpnmanagementuirsc.rsg>
+#include "vpnuiloader.h"
+#include "vpnmanagementuiview.h"
+#include "vpnmanagementuipolicyview.h"
+#include "vpnmanagementuiserverview.h"
+#include "vpnmanagementuilogview.h"
+#include "vpnmanagementuiserversettingsview.h"
+#include "version.h"
+#include "vpnmanagementuiserversettingscontainer.h"
+
+#include "log_vpnmanagementui.h"
+
+// CONSTANTS
+
+
+using namespace CMManager;
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CVpnUiLoader::CVpnUiLoader()
+// Constructor with parent
+// ---------------------------------------------------------
+//
+CVpnUiLoader::CVpnUiLoader( CVpnManagementUiView* aUiView ):
+ iVpnManagementUiView(aUiView),
+ iResourceLoader(*iCoeEnv)
+ {
+ LOG_("CVpnUiLoader::CVpnUiLoader()");
+ ASSERT( aUiView );
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::~CVpnUiLoader()
+// Destructor
+// ---------------------------------------------------------
+//
+CVpnUiLoader::~CVpnUiLoader()
+ {
+ LOG_("CVpnUiLoader::~CVpnUiLoader()");
+ iVpnManagementUiView = NULL;
+
+ if ( iLogViewVisited == EFalse )
+ delete iVpnManagementUiLogView;
+
+ if ( iPolicyViewVisited == EFalse )
+ delete iVpnManagementUiPolicyView;
+
+ delete iVpnManagementUiParametersView;
+ delete iVpnManagementUiServerView;
+
+ if(iVersionInfoInNaviPane)
+ {
+ delete iVersionInfoInNaviPane;
+ }
+ delete iVpnApiWrapper;
+ delete iWaitDialog;
+ iResourceLoader.Close();
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader* CVpnUiLoader::NewL()
+// ---------------------------------------------------------
+//
+CVpnUiLoader* CVpnUiLoader::NewL(
+ const TRect& aRect, TUid aViewId,
+ CVpnManagementUiView* aUiView )
+ {
+ CVpnUiLoader* self = NewLC( aRect, aViewId, aUiView );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader* CVpnUiLoader::NewLC()
+// ---------------------------------------------------------
+//
+CVpnUiLoader* CVpnUiLoader::NewLC(
+ const TRect& aRect, TUid aViewId,
+ CVpnManagementUiView* aUiView )
+ {
+ CVpnUiLoader* self = new ( ELeave ) CVpnUiLoader( aUiView );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect, aViewId );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::ConstructL()
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::ConstructL( const TRect& aRect, TUid aViewId )
+ {
+ LOG_("CVpnUiLoader::ConstructL() - begin");
+
+ AddResourceFileL();
+ //Initialization
+ iBackFromServerDefinition = EFalse;
+ iNewServerDefinition = EFalse;
+ iPolicyUpdate = EFalse;
+
+ CEikStatusPane* statusPane = STATIC_CAST(
+ CAknAppUi*, iEikonEnv->EikAppUi())->StatusPane();
+
+ // Fetch pointer to the default navi pane control
+ iNaviPane = static_cast<CAknNavigationControlContainer*> (
+ statusPane->ControlL( TUid::Uid(EEikStatusPaneUidNavi) ) );
+
+ iPreviousAppViewId = aViewId;
+ CreateWindowL();
+
+ iVpnManagementUiPolicyView = CVpnManagementUiPolicyView::NewL(
+ aRect, *this);
+ iVpnManagementUiServerView = CVpnManagementUiServerView::NewL(
+ aRect, *this);
+ iVpnManagementUiLogView = CVpnManagementUiLogView::NewL( aRect, *this);
+ iVpnManagementUiParametersView = CServerSettingsView::NewL( aRect, *this);
+
+ SetRect(aRect);
+
+ LOG(Log::Printf(_L("CVpnUiLoader::ConstructL() - end\n")));
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::FocusChanged(TDrawNow aDrawNow)
+// Added here because FocusChanged need to be included
+// in every control derived from CCoeControl that can have listbox
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::FocusChanged(TDrawNow aDrawNow)
+ {
+ if (iListBox)
+ {
+ iListBox->SetFocus(IsFocused(), aDrawNow);
+ }
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::ChangeViewL(TInt aNewTab, TInt aSelectionIndex)
+// Called when the view tab is changed
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::ChangeViewL(TInt aNewTab, TInt aSelectionIndex)
+ {
+ LOG_1("CVpnUiLoader::ChangeViewL():%d", aNewTab);
+ switch (aNewTab)
+ {
+
+ case KChangeViewPrevious:
+ {
+ TVwsViewId currentViewId;
+ ((CAknViewAppUi*)iAvkonAppUi)->GetActiveViewId(currentViewId);
+
+ if(iPreviousViewId == currentViewId.iViewUid)
+ {
+ ((CAknViewAppUi*)iAvkonAppUi)->RegisterViewL(*iVpnManagementUiView);
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL( KVpnManagementPluginUid );
+ }
+ else
+ {
+ ((CAknViewAppUi*)iAvkonAppUi)->RegisterViewL(*iVpnManagementUiView);
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(
+ iPreviousViewId );
+ }
+ break;
+ }
+ case KChangeViewBack:
+ ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiPolicyViewId);
+ ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiLogViewId);
+ ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiParametersViewId);
+ ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiServerViewId);
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL( iGsViewId.iViewUid );
+ ReleaseResource(ETrue);
+ if(iObserver)
+ {
+ iObserver->UiComplete(KUirEventNone);
+ }
+ break;
+
+ case KChangeViewPolicy: //Policy view
+ {
+ // the current view is saved so we
+ // know where to come back
+ TVwsViewId localCurrentViewId;
+ ((CAknViewAppUi*)iAvkonAppUi)->GetActiveViewId(
+ localCurrentViewId );
+
+ iPreviousViewId = localCurrentViewId.iViewUid;
+ if ( iPolicyViewVisited == EFalse)
+ ((CAknViewAppUi*)iAvkonAppUi)->AddViewL(iVpnManagementUiPolicyView);
+ iPolicyViewVisited=ETrue;
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(
+ KVpnManagementUiPolicyViewId );
+ break;
+ }
+ case KChangeViewServer: //Policy server view
+ {
+ // the current view is saved so we
+ // know where to come back
+ TVwsViewId localCurrentViewId;
+ ((CAknViewAppUi*)iAvkonAppUi)->GetActiveViewId(
+ localCurrentViewId );
+
+ iPreviousViewId = localCurrentViewId.iViewUid;
+
+ ((CAknViewAppUi*)iAvkonAppUi)->AddViewL(iVpnManagementUiServerView);
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(
+ KVpnManagementUiServerViewId );
+ break;
+ }
+ case KChangeViewLog: //Log view
+ {
+ // the current view is saved so we
+ // know where to come back
+ TVwsViewId localCurrentViewId;
+ ((CAknViewAppUi*)iAvkonAppUi)->GetActiveViewId(
+ localCurrentViewId );
+
+ iPreviousViewId = localCurrentViewId.iViewUid;
+ if ( iLogViewVisited == EFalse)
+ ((CAknViewAppUi*)iAvkonAppUi)->AddViewL(iVpnManagementUiLogView);
+ iLogViewVisited=ETrue;
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(
+ KVpnManagementUiLogViewId );
+ break;
+ }
+
+ case KChangeViewSettings: //VPN policy server parameters view
+ {
+ // the current view is saved so that close settings
+ // knows where to come back
+ TVwsViewId localCurrentViewId;
+ ((CAknViewAppUi*)iAvkonAppUi)->GetActiveViewId(
+ localCurrentViewId );
+
+ iPreviousViewId = localCurrentViewId.iViewUid;
+ //Put selected server to CustomMessageId
+ ((CAknViewAppUi*)iAvkonAppUi)->AddViewL(iVpnManagementUiParametersView);
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(
+ KVpnManagementUiParametersViewId,
+ TUid::Uid( aSelectionIndex), KNullDesC8 );
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------
+// CVpnUiLoader::ActivateTitleL(TInt aCurrentTitle)
+// Activates the VPN policies, VPN policy servers and
+// VPN log views title
+// ----------------------------------------------------
+//
+void CVpnUiLoader::ActivateTitleL(TInt aCurrentTitle)
+ {
+ CEikStatusPane* sp = STATIC_CAST(
+ CAknAppUi*, iEikonEnv->EikAppUi())->StatusPane();
+ // Fetch pointer to the default title pane control
+ CAknTitlePane* title = STATIC_CAST(
+ CAknTitlePane*, sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)) );
+ TResourceReader reader;
+
+ if ( aCurrentTitle == KViewTitleManagementView )
+ {
+ iCoeEnv->CreateResourceReaderLC( reader, R_VPN_MANAGEMENT_TITLE );
+ }
+ if ( aCurrentTitle == KViewTitlePolicyView )
+ {
+ iCoeEnv->CreateResourceReaderLC( reader, R_VPN_POLICIES_TITLE );
+ }
+ if ( aCurrentTitle == KViewTitleServerView )
+ {
+ iCoeEnv->CreateResourceReaderLC( reader, R_VPN_POLICY_SERVERS_TITLE );
+ }
+ if ( aCurrentTitle == KViewTitleLogView )
+ {
+ iCoeEnv->CreateResourceReaderLC( reader, R_VPN_LOG_TITLE );
+ }
+
+ title->SetFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader
+ }
+
+void CVpnUiLoader::ActivateTitleL(TInt aCurrentTitle, TDes& aText)
+ {
+ CEikStatusPane* sp = STATIC_CAST(
+ CAknAppUi*, iEikonEnv->EikAppUi())->StatusPane();
+ // Fetch pointer to the default title pane control
+ CAknTitlePane* title = STATIC_CAST(
+ CAknTitlePane*, sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)) );
+
+ if ( aCurrentTitle == KViewTitleParametersView )
+ {
+ title->SetTextL(aText);
+ }
+ }
+// ----------------------------------------------------
+// CVpnUiLoader::ActivateNaviTextL()
+// Activates the VPN log view Navipane text (Version information)
+// ----------------------------------------------------
+//
+void CVpnUiLoader::ActivateNaviTextL()
+ {
+ // version information in navi pane text shown in VPN Log view
+ //TBuf<KVersionLine> version(KVersion);
+ HBufC* naviText = StringLoader::LoadLC(
+ R_VPN_NAVI_CLIENT_VERSION, KVersion/*version*/ );
+ TPtr naviDes=naviText->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(naviDes);
+ iVersionInfoInNaviPane = iNaviPane->CreateMessageLabelL(*naviText);
+ CleanupStack::PopAndDestroy(); //naviText
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::PushNaviPaneL
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::PushNaviPaneL()
+ {
+ iNaviPane->PushL( *iVersionInfoInNaviPane );
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::PopNaviPane
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::PopNaviPane()
+ {
+ if(iVersionInfoInNaviPane)
+ {
+ delete iVersionInfoInNaviPane; //A control is popped from stack
+ iVersionInfoInNaviPane = NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::PushDefaultNaviPaneL
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::PushDefaultNaviPaneL()
+ {
+ iNaviPane->PushDefaultL();
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::HandleControlEventL(
+// CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+// Cannot be changed to non-leaving function.
+// L-function is required by the class definition, even if empty.
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::HandleControlEventL(
+ CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+ {
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::OfferKeyEventL()
+// ---------------------------------------------------------
+//
+TKeyResponse CVpnUiLoader::OfferKeyEventL(
+ const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
+ {
+ // Listbox takes all event even if it doesn't use them
+ return EKeyWasNotConsumed;
+ }
+
+// ----------------------------------------------------------
+// AddResourceFileL()
+// ----------------------------------------------------------
+//
+void CVpnUiLoader::AddResourceFileL(TBool aKeepOpen)
+ {
+ if (!iKeepOpen)
+ {
+ iKeepOpen = aKeepOpen;
+ _LIT(KResourceFile, "\\resource\\vpnmanagementuirsc.rsc");
+ TFileName resourceFileName(KResourceFile);
+ TFileName dllName;
+ Dll::FileName(dllName);
+ TBuf<2> drive = dllName.Left(2);
+ resourceFileName.Insert(0, drive);
+
+ // To enable loading of e.g. vpnmanagementuirsc.r**
+ BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(), resourceFileName);
+ iResourceLoader.OpenL(resourceFileName);
+ LOG_("CVpnUiLoader::AddResourceFileL(");
+ }
+ }
+// ----------------------------------------------------------
+// ReleaseResource()
+// ----------------------------------------------------------
+//
+void CVpnUiLoader::ReleaseResource(TBool aForceClose)
+ {
+ if(!iKeepOpen || aForceClose)
+ {
+ LOG_("CVpnUiLoader::ReleaseResource()");
+ iKeepOpen = EFalse;
+ iResourceLoader.Close();
+ }
+ }
+// ---------------------------------------------------------
+// CVpnUiLoader::DialogDismissedL
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::DialogDismissedL( TInt /*aButtonId*/ )
+ {
+ // The UI is left in an inactive state if the progress dialog is cancelled
+ // very quickly. Thus, we ensure that the UI ends up in an active
+ // state by activating the view that should be active.
+ TVwsViewId activeViewId;
+ ((CAknViewAppUi*)iAvkonAppUi)->GetActiveViewId(activeViewId);
+ ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL(activeViewId.iViewUid);
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::ShowWaitNoteL
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::ShowWaitNoteL()
+ {
+ // Initialization (before the progress dialog is shown)
+ iTextToShow = EConnectingVia; // "Connecting via '%U'"
+ iWaitNoteStartTime.UniversalTime();
+
+ if ( iWaitDialog )
+ {
+ delete iWaitDialog;
+ iWaitDialog = NULL;
+ }
+ iWaitDialog = new ( ELeave ) CAknWaitDialog
+ ( REINTERPRET_CAST(CEikDialog**,&iWaitDialog),ETrue );
+ iWaitDialog->PrepareLC( R_VPN_WAIT_NOTE );
+ iWaitDialog->SetTone( CAknNoteDialog::ENoTone );
+ iWaitDialog->SetCallback( this );
+
+ SetTextL();
+
+ iWaitDialog->RunLD();
+ iWaitDialog->DrawNow();
+ }
+
+void CVpnUiLoader::DeleteWaitNoteL()
+ {
+ TInt error;
+ // Dismiss wait dialog
+ TRAP(error, iWaitDialog->ProcessFinishedL()); // deletes the wait dialog
+ if (error != KErrNone)
+ {
+ // on error destroy wait note by force.
+ delete iWaitDialog;
+ }
+ iWaitDialog = NULL;
+ }
+
+void CVpnUiLoader::SetTextL()
+ {
+ LOG(Log::Printf(_L("CVpnUiLoader::SetTextL()\n")));
+
+ TTime now;
+ now.UniversalTime();
+
+ TTimeIntervalSeconds secondsPassed;
+ now.SecondsFrom(iWaitNoteStartTime, secondsPassed);
+
+ if (secondsPassed.Int() < KSecondsToShowConnectingVia)
+ {
+ iTextToShow = EConnectingVia; //0
+ }
+ else
+ {
+ iTextToShow = EProcessingStepN; //1
+ iStateCodeToShow = 0;
+ }
+
+ if (iTextToShow == EConnectingVia)
+ {
+ HBufC* string = StringLoader::LoadLC( R_VPN_CONNECTING_VIA_AP, iSelectionName );
+ iWaitDialog->SetTextL( *string );
+ CleanupStack::PopAndDestroy( string );
+ }
+ else
+ {
+ HBufC* string = StringLoader::LoadLC( R_VPN_WAIT_POLICY_DL_PROCESSING, iStateCodeToShow );
+ iWaitDialog->SetTextL( *string );
+ CleanupStack::PopAndDestroy( string );
+ }
+ }
+
+
+void CVpnUiLoader::GetSelectionNameL( TDes& aText )
+ {
+ TCmSettingSelection selection = TCmSettingSelection();
+
+ //Reset update operation for Connecting via note
+ iPolicyUpdate = EFalse;
+
+ HBufC* name = NULL;
+ TInt err = KErrNone;
+ if ( selection.iResult == EDestination )
+ {
+ TRAP( err, (name = CServerSettingsContainer::GetDestinationNameL( selection.iId )));
+ }
+ else if ( selection.iResult == EConnectionMethod )
+ {
+ TRAP( err, (name = CServerSettingsContainer::GetConnectionMethodNameL( selection.iId )));
+ }
+
+ if ( name )
+ {
+ aText.Copy(*name);
+ }
+ delete name;
+ name = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CVpnUiLoader::FFSSpaceBelowCriticalLevelL
+// ---------------------------------------------------------
+//
+TBool CVpnUiLoader::FFSSpaceBelowCriticalLevelL
+ ( TBool aShowErrorNote, TInt aBytesToWrite /*=0*/ )
+ {
+ LOG_("CVpnUiLoader::FFSSpaceBelowCriticalLevelL() - begin");
+
+ TBool ret( EFalse );
+ if ( SysUtil::FFSSpaceBelowCriticalLevelL
+ ( &(CCoeEnv::Static()->FsSession()), aBytesToWrite ) )
+ {
+ ret = ETrue;
+ if ( aShowErrorNote )
+ {
+ CErrorUI* errorUi = CErrorUI::NewLC( *(CCoeEnv::Static()) );
+ errorUi->ShowGlobalErrorNoteL( KErrDiskFull );
+ CleanupStack::PopAndDestroy(); // errorUi
+ }
+ }
+
+ LOG( Log::Printf(_L("CVpnUiLoader::FFSSpaceBelowCriticalLevelL() - end\n")));
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::GetVpnManagementUiView()
+//
+// ---------------------------------------------------------
+//
+CAknView* CVpnUiLoader::GetVpnManagementUiView() const
+ {
+ return iVpnManagementUiView;
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::VpnApiWrapperL()
+// ---------------------------------------------------------
+//
+CVpnApiWrapper& CVpnUiLoader::VpnApiWrapperL()
+ {
+ LOG_("CVpnUiLoader::VpnApiWrapperL()");
+ if (!iVpnApiWrapper)
+ iVpnApiWrapper = CVpnApiWrapper::NewL();
+ return *iVpnApiWrapper;
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::GsViewId()
+// Called when the view tab is changed
+// ---------------------------------------------------------
+//
+TVwsViewId CVpnUiLoader::GSViewId() const
+ {
+ return iGsViewId;
+ }
+
+// ---------------------------------------------------------
+// CVpnUiLoader::SetGsViewId( TVwsViewId )
+// Called when the view tab is changed
+// ---------------------------------------------------------
+//
+void CVpnUiLoader::SetGSViewId( TVwsViewId aGsViewUid )
+ {
+ iGsViewId = aGsViewUid;
+ }
+
+// End of File