vpnui/vpnmanagementui/src/vpnmanagementuipolicyview.cpp
changeset 0 33413c0669b9
child 38 9f4e37332ce5
equal deleted inserted replaced
-1:000000000000 0:33413c0669b9
       
     1 /*
       
     2 * Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   VPN Policy view
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include <aknmessagequerydialog.h>
       
    22 #include <aknnotewrappers.h>            // for warning & information notes
       
    23 #include <vpnmanagementuirsc.rsg>
       
    24 #include <cdblen.h>
       
    25 
       
    26 #include "vpnuiloader.h" 
       
    27 #include "vpnmanagementuipolicyview.h"
       
    28 #include "vpnmanagementuipolicycontainer.h"
       
    29 #include "vpnmanagementui.hrh"
       
    30 #ifdef __SERIES60_HELP
       
    31 #include    <hlplch.h>   // For HlpLauncher 
       
    32 #endif //__SERIES60_HELP
       
    33 
       
    34 /** MSK control Id. */
       
    35 const TInt KVpnMSKControlId = 3;
       
    36 
       
    37 // ================= MEMBER FUNCTIONS =======================
       
    38 
       
    39 // ---------------------------------------------------------
       
    40 // CVpnManagementUiPolicyView::CVpnManagementUiPolicyView
       
    41 // ---------------------------------------------------------
       
    42 //
       
    43 CVpnManagementUiPolicyView::CVpnManagementUiPolicyView( 
       
    44     CVpnUiLoader& aLoader ) : iLoader(aLoader)
       
    45     {
       
    46     }
       
    47 
       
    48 // ---------------------------------------------------------
       
    49 // CVpnManagementUiPolicyView::~CVpnManagementUiPolicyView()
       
    50 // Destructor
       
    51 // ---------------------------------------------------------
       
    52 //
       
    53 CVpnManagementUiPolicyView::~CVpnManagementUiPolicyView()
       
    54     {
       
    55     if ( iPolicyContainer )
       
    56         {
       
    57         AppUi()->RemoveFromViewStack(*this, iPolicyContainer);
       
    58         delete iPolicyContainer;
       
    59         }
       
    60     }
       
    61 
       
    62 // ---------------------------------------------------------
       
    63 // CVpnManagementUiPolicyView::NewL
       
    64 // ---------------------------------------------------------
       
    65 //
       
    66 CVpnManagementUiPolicyView* CVpnManagementUiPolicyView::NewL(
       
    67     const TRect& aRect, CVpnUiLoader& aLoader )
       
    68     {
       
    69     CVpnManagementUiPolicyView* self = NewLC( aRect, aLoader );
       
    70     CleanupStack::Pop( self );
       
    71     return self;
       
    72     }
       
    73 
       
    74 // ---------------------------------------------------------
       
    75 // CVpnManagementUiPolicyView::NewLC
       
    76 // ---------------------------------------------------------
       
    77 //
       
    78 CVpnManagementUiPolicyView* CVpnManagementUiPolicyView::NewLC(
       
    79     const TRect& /*aRect*/, CVpnUiLoader& aLoader )
       
    80     {
       
    81     CVpnManagementUiPolicyView* self = 
       
    82         new ( ELeave ) CVpnManagementUiPolicyView( aLoader );
       
    83     CleanupStack::PushL( self );
       
    84     self->ConstructL();
       
    85     return self;
       
    86     }
       
    87 
       
    88 // ---------------------------------------------------------
       
    89 // CVpnManagementUiPolicyView::ConstructL()
       
    90 // EPOC two-phased constructor
       
    91 // ---------------------------------------------------------
       
    92 //
       
    93 void CVpnManagementUiPolicyView::ConstructL() 
       
    94     {
       
    95     BaseConstructL( R_VPNUI_POLICIES_VIEW );
       
    96     }
       
    97 
       
    98 // ---------------------------------------------------------
       
    99 // CVpnManagementUiPolicyView::DynInitMenuPaneL(
       
   100 //      TInt aResourceId,CEikMenuPane* aMenuPane)
       
   101 // Updates Options list with correct items depending on 
       
   102 // whether the listbox is empty or if it has any marked items
       
   103 // ---------------------------------------------------------
       
   104 //
       
   105 void CVpnManagementUiPolicyView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
       
   106     {
       
   107     if ( aResourceId == R_VPNUI_POLICIES_VIEW_MENU )
       
   108         {
       
   109         TInt currentItem = iPolicyContainer->iListBox->CurrentItemIndex();
       
   110 
       
   111         // the policy list is empty  all except Install and Exit is dimmed
       
   112         if ( currentItem == -1 )
       
   113             {
       
   114             aMenuPane->SetItemDimmed( EVpnUiCmdPolicyDetails, ETrue );
       
   115             aMenuPane->SetItemDimmed( EVpnUiCmdDeletePolicy, ETrue );
       
   116             aMenuPane->SetItemDimmed( EVpnUiCmdUpdatePolicy, ETrue );
       
   117             // NSSM support is discontinued
       
   118             aMenuPane->SetItemDimmed( EVpnUiCmdInstallPolicies, ETrue );
       
   119             }
       
   120         // at least one policy is installed, 
       
   121         else 
       
   122             {
       
   123             aMenuPane->SetItemDimmed( EVpnUiCmdInstallPolicies, ETrue );
       
   124             // NSSM support is discontinued
       
   125             aMenuPane->SetItemDimmed( EVpnUiCmdUpdatePolicy, ETrue );
       
   126             }
       
   127         }
       
   128     }
       
   129 
       
   130 // ---------------------------------------------------------
       
   131 // CVpnManagementUiPolicyView::Id() const
       
   132 // Returns Authority view id
       
   133 // ---------------------------------------------------------
       
   134 //
       
   135 TUid CVpnManagementUiPolicyView::Id() const
       
   136     {
       
   137     return KVpnManagementUiPolicyViewId;
       
   138     }
       
   139 
       
   140 // ---------------------------------------------------------
       
   141 // CVpnManagementUiPolicyView::HandleCommandL(TInt aCommand)
       
   142 // Handles Softkey and Options list commands
       
   143 // ---------------------------------------------------------
       
   144 //
       
   145 void CVpnManagementUiPolicyView::HandleCommandL( TInt aCommand )
       
   146     {
       
   147     TBool ffsLow;
       
   148     switch ( aCommand )
       
   149         {
       
   150         case EAknSoftkeyBack:
       
   151             {
       
   152             iLoader.ChangeViewL( KChangeViewPrevious );
       
   153             break;
       
   154             }
       
   155         case EAknCmdExit:
       
   156             {
       
   157             ((CAknViewAppUi*)iAvkonAppUi)->HandleCommandL( EAknCmdExit );
       
   158             break;
       
   159             }
       
   160 
       
   161         case EVpnUiCmdPolicyDetails:
       
   162             {
       
   163             // Show details
       
   164             PolicyDetailsL(iPolicyContainer->iListBox->CurrentItemIndex());
       
   165             break;
       
   166             }
       
   167 
       
   168         case EVpnUiCmdInstallPolicies:
       
   169             {
       
   170             ffsLow = iLoader.FFSSpaceBelowCriticalLevelL( ETrue, 0 );
       
   171     		if(!ffsLow)
       
   172     			{
       
   173             	iPolicyContainer->InstallPoliciesL();
       
   174     			}
       
   175             break;
       
   176             }
       
   177         case EVpnUiCmdUpdatePolicy:
       
   178             {
       
   179             ffsLow = iLoader.FFSSpaceBelowCriticalLevelL( ETrue, 0 );
       
   180     		if(!ffsLow)
       
   181     			{
       
   182             	iCurrentPosition = iPolicyContainer->iListBox->CurrentItemIndex();
       
   183             	//Save policy index for Connecting via note
       
   184             	iLoader.iCurrentPolicyIndex = iCurrentPosition;
       
   185             	//Save update operation for Connecting via note
       
   186             	iLoader.iPolicyUpdate = ETrue;
       
   187 
       
   188             	TVpnPolicyInfo policyInfo;
       
   189             	policyInfo.iId = iLoader.VpnApiWrapperL().PolicyListL()->At(
       
   190             	    iCurrentPosition).iId;
       
   191             	iPolicyContainer->UpdatePolicyL(policyInfo.iId);
       
   192     			}
       
   193             break;
       
   194             }
       
   195 
       
   196         case EVpnUiCmdDeletePolicy:
       
   197             {
       
   198             //confirmation query
       
   199             HBufC* temp;
       
   200            
       
   201             TVpnPolicyName policyName;
       
   202             iCurrentPosition = iPolicyContainer->iListBox->CurrentItemIndex();
       
   203             iTopItem = iPolicyContainer->iListBox->TopItemIndex();
       
   204 
       
   205             if (NotAssociatedToIapL(iCurrentPosition, policyName))
       
   206                 {
       
   207                 temp = StringLoader::LoadLC( R_VPN_QUEST_DELETE_POLICY, policyName );
       
   208                 }
       
   209             else
       
   210                 {
       
   211                 temp = StringLoader::LoadLC( R_VPN_QUEST_DELETE_POLICY_ASSOCIATED );
       
   212                 }
       
   213             CAknQueryDialog* query = CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
       
   214             TInt retval = query->ExecuteLD( R_CONFIRMATION_QUERY, *temp );
       
   215             CleanupStack::PopAndDestroy();  // temp
       
   216             if ( retval )
       
   217                 {
       
   218                 //Delete policy
       
   219                 iLoader.VpnApiWrapperL().DeletePolicyL(iPolicyContainer->iListBox->CurrentItemIndex());
       
   220                 //Update listbox
       
   221                 iPolicyContainer->UpdateListBoxL(iCurrentPosition);
       
   222                 //Update iPolicyList
       
   223                 iLoader.VpnApiWrapperL().PolicyListL();
       
   224                 iCurrentPosition = iPolicyContainer->iListBox->CurrentItemIndex();
       
   225                 }
       
   226             break;
       
   227             }
       
   228 #ifdef __SERIES60_HELP
       
   229         case EAknCmdHelp: 
       
   230             {
       
   231             HlpLauncher::LaunchHelpApplicationL(
       
   232                 iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
       
   233             break;
       
   234             }
       
   235 #endif //__SERIES60_HELP
       
   236 
       
   237         default:
       
   238             {
       
   239             AppUi()->HandleCommandL( aCommand );
       
   240             break;
       
   241             }
       
   242         }
       
   243     }
       
   244 
       
   245 // ---------------------------------------------------------
       
   246 // CVpnManagementUiPolicyView::HandleClientRectChange()
       
   247 // ---------------------------------------------------------
       
   248 //
       
   249 void CVpnManagementUiPolicyView::HandleClientRectChange()
       
   250     {
       
   251     if ( iPolicyContainer )
       
   252         {
       
   253         iPolicyContainer->SetRect( ClientRect() );
       
   254         }
       
   255     }
       
   256 
       
   257 // ---------------------------------------------------------
       
   258 // CVpnManagementUiPolicyView::DoActivateL
       
   259 // Updates the view when opening it
       
   260 // ---------------------------------------------------------
       
   261 //
       
   262 void CVpnManagementUiPolicyView::DoActivateL(
       
   263     const TVwsViewId& /*aPrevViewId*/,
       
   264     TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
       
   265     {
       
   266     if ( iPolicyContainer )
       
   267         {
       
   268         ((CAknViewAppUi*)iAvkonAppUi)->RemoveFromViewStack( 
       
   269             *this, iPolicyContainer );
       
   270 		}
       
   271     iPolicyContainer = new (ELeave) CVpnManagementUiPolicyContainer( 
       
   272         *this, iLoader );
       
   273 
       
   274     iPolicyContainer->SetMopParent( this );
       
   275     iPolicyContainer->ConstructL( 
       
   276         ClientRect(), iCurrentPosition, iTopItem );
       
   277     iLoader.ActivateTitleL( KViewTitlePolicyView );
       
   278     iLoader.PushDefaultNaviPaneL();
       
   279     
       
   280     ((CAknViewAppUi*)iAvkonAppUi)->AddToStackL( *this, iPolicyContainer );
       
   281     iPolicyContainer->DrawListBoxL( iCurrentPosition, iTopItem );
       
   282  
       
   283  	SetMiddleSoftKeyL(EFalse);   
       
   284 	}
       
   285 
       
   286 void CVpnManagementUiPolicyView::SetMiddleSoftKeyL(TBool aDrawNow)
       
   287     {
       
   288     if (iPolicyContainer->iListItemCount > 0)
       
   289     	{ 
       
   290 		SetMiddleSoftKeyLabelL(R_MSK_VPN_DETAILS, EVpnUiCmdPolicyDetails);
       
   291     	}
       
   292     else
       
   293     	{
       
   294     	SetMiddleSoftKeyLabelL(R_MSK_INSTALL_VPN_POLICIES, EVpnUiCmdInstallPolicies);
       
   295     	}
       
   296 
       
   297     if (aDrawNow)
       
   298     	{
       
   299     	if (Cba())
       
   300     		Cba()->DrawNow();
       
   301     	}
       
   302 	}
       
   303     	
       
   304 
       
   305 void CVpnManagementUiPolicyView::SetMiddleSoftKeyLabelL(
       
   306     TInt aResourceId, TInt aCommandId)
       
   307     {
       
   308 	CEikButtonGroupContainer* cbaGroup = Cba();
       
   309 	if (cbaGroup)
       
   310     	{
       
   311 	    HBufC* text = HBufC::NewLC(KMaxLengthTextDetailsBody); 
       
   312 		ReadResourceL(*text, aResourceId);
       
   313 		cbaGroup->RemoveCommandFromStack(
       
   314 		    KVpnMSKControlId, EVpnUiCmdPolicyDetails);
       
   315 		cbaGroup->RemoveCommandFromStack(
       
   316 		    KVpnMSKControlId, EVpnUiCmdInstallPolicies);
       
   317 		cbaGroup->AddCommandToStackL(
       
   318 		    KVpnMSKControlId, aCommandId, text->Des());
       
   319 		CleanupStack::PopAndDestroy(text);
       
   320     	}
       
   321     }
       
   322 
       
   323 // ---------------------------------------------------------
       
   324 // CVpnManagementUiPolicyView::DoDeactivate()
       
   325 // Saves focus position when closing view
       
   326 // ---------------------------------------------------------
       
   327 //
       
   328 void CVpnManagementUiPolicyView::DoDeactivate()
       
   329     {
       
   330     if ( iPolicyContainer )
       
   331         {
       
   332         AppUi()->RemoveFromViewStack( *this, iPolicyContainer );
       
   333         
       
   334         delete iPolicyContainer;
       
   335         iPolicyContainer = NULL;
       
   336         }
       
   337     }
       
   338 
       
   339 // ---------------------------------------------------------
       
   340 // CVpnManagementUiPolicyView::Container()
       
   341 // Returns iPolicyContainer
       
   342 // ---------------------------------------------------------
       
   343 //
       
   344 CCoeControl* CVpnManagementUiPolicyView::Container()
       
   345     {
       
   346     return iPolicyContainer;
       
   347     }
       
   348 
       
   349 // ---------------------------------------------------------
       
   350 // CVpnManagementUiPolicyView::PolicyDetailsL()
       
   351 // Creates the whole of policy details view
       
   352 // Appends strings from both resources and VPN API to one
       
   353 // message body text and displays it.
       
   354 // ---------------------------------------------------------
       
   355 //
       
   356 void CVpnManagementUiPolicyView::PolicyDetailsL(TInt aIndex)
       
   357     {
       
   358     TVpnPolicyDetails policyDetails;
       
   359 
       
   360     iLoader.VpnApiWrapperL().GetPolicyDetailsL(aIndex,policyDetails);
       
   361     HBufC* message = HBufC::NewLC(KMaxLengthTextDetailsBody); 
       
   362 
       
   363     // Description:
       
   364     ReadResourceL(*message, R_VPN_DETAIL_POLICY_DESCRIPTION );
       
   365     message->Des().Append(KVpnManagementUiEnter);
       
   366     message->Des().Append(policyDetails.iDescription);
       
   367     message->Des().Append(KVpnManagementUiEnterTwice);
       
   368 
       
   369     // Policy status:
       
   370     ReadResourceL(*message, R_VPN_DETAIL_POLICY_STATUS );
       
   371     message->Des().Append(KVpnManagementUiEnter);
       
   372 
       
   373     if (policyDetails.iUsageStatus == EUsageStatusUnused)
       
   374         ReadResourceL(*message, R_VPN_DETAIL_POLICY_NOT_ASSOCIATED );
       
   375     else if (policyDetails.iUsageStatus == EUsageStatusAssignedToIap)
       
   376         ReadResourceL(*message, R_VPN_DETAIL_POLICY_ASSOCIATED );
       
   377     else if (policyDetails.iUsageStatus == EUsageStatusActive)
       
   378         ReadResourceL(*message, R_VPN_DETAIL_POLICY_ACTIVE );
       
   379 
       
   380     message->Des().Append(KVpnManagementUiEnterTwice);
       
   381 
       
   382     // Certificate status:
       
   383     ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS );
       
   384     message->Des().Append(KVpnManagementUiEnter);
       
   385 
       
   386     if (policyDetails.iPkiStatus == EPkiStatusReady)
       
   387         ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_OK );
       
   388     else if (policyDetails.iPkiStatus == EPkiStatusCertExpired)
       
   389         ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_EXPIRED );
       
   390     else if (policyDetails.iPkiStatus == EPkiStatusNoCert)
       
   391         ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_MISSING );
       
   392     else if (policyDetails.iPkiStatus == EPkiStatusCertNotValidYet)
       
   393         ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_NOT_YET_VALID );
       
   394 
       
   395     message->Des().Append(KVpnManagementUiEnterTwice);
       
   396 
       
   397     // Policy name:
       
   398     ReadResourceL(*message, R_VPN_DETAIL_POLICY_NAME );
       
   399     message->Des().Append(KVpnManagementUiEnter);
       
   400     message->Des().Append(policyDetails.iName);
       
   401     message->Des().Append(KVpnManagementUiEnterTwice);
       
   402     
       
   403     // Header for the message query dialog
       
   404 
       
   405 	CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*message);
       
   406 	dlg->PrepareLC(R_MESSAGE_QUERY_DETAILS_VIEW);
       
   407 	dlg->QueryHeading()->SetTextL(policyDetails.iName);
       
   408 	dlg->RunLD();
       
   409 
       
   410 	CleanupStack::PopAndDestroy(); // message
       
   411     }
       
   412 
       
   413 TBool CVpnManagementUiPolicyView::NotAssociatedToIapL(TInt aIndex, TVpnPolicyName& aPolicyName)
       
   414     {
       
   415     TVpnPolicyDetails policyDetails;
       
   416     iLoader.VpnApiWrapperL().GetPolicyDetailsL(aIndex,policyDetails);
       
   417     aPolicyName = policyDetails.iName;
       
   418     if (policyDetails.iUsageStatus == EUsageStatusUnused)
       
   419         return ETrue;
       
   420     else 
       
   421         return EFalse;
       
   422     }
       
   423 
       
   424 // ---------------------------------------------------------
       
   425 // CVpnManagementUiPolicyView::ReadResourceL
       
   426 // Reads text from resource
       
   427 // ---------------------------------------------------------
       
   428 //
       
   429 void CVpnManagementUiPolicyView::ReadResourceL(HBufC& aText, TInt aResource)
       
   430 	{
       
   431 	HBufC* text = StringLoader::LoadLC( aResource );
       
   432 	aText.Des().Append(text->Des());
       
   433 	CleanupStack::PopAndDestroy();  // text
       
   434 	}
       
   435 
       
   436 
       
   437 // End of File
       
   438