Revision: 201017 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:35:05 +0300
branchRCL_3
changeset 24 c45d4fe2ff0a
parent 19 22c3c67e5001
child 26 0a9e01492035
Revision: 201017 Kit: 201019
accesspointcontrol/apcontrollistplugin/src/apcontrollistplugin.cpp
bearermanagement/S60MCPR/inc/s60mcpractivities.h
bearermanagement/S60MCPR/inc/s60mcprstates.h
bearermanagement/S60MCPR/src/s60mcpractivities.cpp
bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp
bearermanagement/S60MCPR/src/s60mcprstates.cpp
bearermanagement/mpm/src/mpmiapselection.cpp
cmmanager/cmmgr/Framework/Inc/cmdlg.h
cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp
cmmanager/cmmgr/Framework/Src/cmdlg.cpp
cmmanager/cmmgr/Framework/Src/cmpbasesettingsdlg.cpp
cmmanager/cmmgr/Framework/Src/uncatdlg.cpp
cmmanager/cmmgr/Plugins/cmpluginpacketdata/inc/cmppacketdatasettingsdlg.h
cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlg.cpp
cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlgadv.cpp
cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpvpnsettingsdlg.cpp
cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp
cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgadv.cpp
cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv4.cpp
cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv6.cpp
connectionmonitoring/connmon/connectionmonitor/src/ConnMonBearerGPRS.cpp
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/data/ConnUiUtilsNotif.rss
connectionutilities/ConnectionDialogs/DisconnectDlg/inc/ConnectionModel.h
connectionutilities/ConnectionDialogs/DisconnectDlg/src/ConnectionModel.cpp
ipcm_plat/bearer_settings_plugin_api/inc/cmpbasesettingsdlg.h
--- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistplugin.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/accesspointcontrol/apcontrollistplugin/src/apcontrollistplugin.cpp	Tue May 11 16:35:05 2010 +0300
@@ -193,24 +193,24 @@
             iContainer = NULL;
             User::Leave( error );
             }
+            
+        AppUi()->AddToViewStackL( *this, iContainer );
+        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
         
-	    if (!iAPIWrapper)  
-		    {
-	    	iAPIWrapper = new( ELeave ) CAPControlListAPIWrapper(*this);
-	    	iAPIWrapper->ConstructL();
-	    	}
-	    if (!iChangeNotifier)  
-		    {
-	    	iChangeNotifier = new( ELeave ) CAPControlListCapsChange(*this);
+        if (!iAPIWrapper)  
+            {
+            iAPIWrapper = new( ELeave ) CAPControlListAPIWrapper(*this);
+            iAPIWrapper->ConstructL();
+            }
+        if (!iChangeNotifier)  
+            {
+            iChangeNotifier = new( ELeave ) CAPControlListCapsChange(*this);
             iChangeNotifier->NotifyCapsChange();
-	    	}
+            }
 	    				
-		    ShowInfoNoteL(R_QTN_ACL_WAIT_READING_SIM);
-    	  iAPIWrapper->ReadData();  
+        ShowInfoNoteL(R_QTN_ACL_WAIT_READING_SIM);
+        iAPIWrapper->ReadData();  
         iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
-    	  		
-	    
-        AppUi()->AddToViewStackL( *this, iContainer );
         }
     CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::DoActivateL" ) ) );
     }
--- a/bearermanagement/S60MCPR/inc/s60mcpractivities.h	Tue Apr 27 17:03:25 2010 +0300
+++ b/bearermanagement/S60MCPR/inc/s60mcpractivities.h	Tue May 11 16:35:05 2010 +0300
@@ -608,22 +608,7 @@
                               NetStateMachine::MStateFork, 
                               TContext )
     virtual TInt TransitionTag();
-    DECLARE_SMELEMENT_FOOTER( TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel )
-
-    /**
-     * FORK/DECISION: 
-     * 1. Inform that the migration complete or go to error
-     * 2. Error
-     * @return
-     */
-    DECLARE_SMELEMENT_HEADER( TInformMigrationCompletedOrError, 
-                              MeshMachine::TStateFork<TContext>, 
-                              NetStateMachine::MStateFork, 
-                              TContext )
-    virtual TInt TransitionTag();
-    DECLARE_SMELEMENT_FOOTER( TInformMigrationCompletedOrError )
-
-        
+    DECLARE_SMELEMENT_FOOTER( TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel )   
     
     /**
      * Class that is responsible for managing mobility on MCPR side.
@@ -802,21 +787,6 @@
                                       CS60MobilityActivity::TContext )
             virtual TInt TransitionTag();
             DECLARE_SMELEMENT_FOOTER( TNoTagOrApplicationRejectedMigrationOrCancel )
-
-            /**
-             * FORK/DECISION: 
-             * 1. Proceed to reconnection
-             * 2. Re-establish connection to the same IAP, inform data client that migration is complete
-             * 3. Error
-             * @return
-             */
-            DECLARE_SMELEMENT_HEADER( TNoTagOrRequestReConnectToCurrentSPOrErrorTag, 
-                                      MeshMachine::TStateFork<TContext>, 
-                                      NetStateMachine::MStateFork, 
-                                      TContext )
-            virtual TInt TransitionTag();
-            DECLARE_SMELEMENT_FOOTER( TNoTagOrRequestReConnectToCurrentSPOrErrorTag )
-            
             
             /**
              * Mutex protected TRANSITION.
--- a/bearermanagement/S60MCPR/inc/s60mcprstates.h	Tue Apr 27 17:03:25 2010 +0300
+++ b/bearermanagement/S60MCPR/inc/s60mcprstates.h	Tue May 11 16:35:05 2010 +0300
@@ -106,17 +106,6 @@
                               TContext )
     virtual void DoL();
     DECLARE_SMELEMENT_FOOTER( TRequestReConnect )
-
-    /**
-     * TRANSITION/ACTION: Starts ReConnect -activity to current service provider
-     */
-    DECLARE_SMELEMENT_HEADER( TRequestReConnectToCurrentSP, 
-                              MeshMachine::TStateTransition<TContext>, 
-                              NetStateMachine::MStateTransition, 
-                              TContext )
-    virtual void DoL();
-    DECLARE_SMELEMENT_FOOTER( TRequestReConnectToCurrentSP )
-    
     
     /**
      * TRANSITION/ACTION: Requests Policy Server to process the error.
--- a/bearermanagement/S60MCPR/src/s60mcpractivities.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/bearermanagement/S60MCPR/src/s60mcpractivities.cpp	Tue May 11 16:35:05 2010 +0300
@@ -294,22 +294,17 @@
     NODEACTIVITY_ENTRY( KNoTag, 
                         MCprStates::TSelectNextLayer,
                         MCprStates::TAwaitingSelectNextLayerCompleted, // Ok. Error is fatal.
-                        CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag )              
+                        MeshMachine::TNoTagOrErrorTag )       
                         
     // For the moment it is sufficient to use the re-connect activity, in the future we may want to
     // customise the behavior, for example start the new layer before rebinding it, etc.
     NODEACTIVITY_ENTRY( KNoTag, 
                         S60MCprStates::TRequestReConnect,
                         MCprStates::TAwaitingReConnectCompleteOrError,  // Ok. Error is fatal.
-                        S60MCprMobilityActivity::TInformMigrationCompletedOrError ) //Own error handling MPM must be informed when error happens.
+                        MeshMachine::TNoTagOrErrorTag ) //Own error handling MPM must be informed when error happens.
 
-    NODEACTIVITY_ENTRY( S60MCprStates::KRequestReConnectToCurrentSP,
-                        S60MCprStates::TRequestReConnectToCurrentSP,
-                        MCprStates::TAwaitingReConnectCompleteOrError,
-                        S60MCprMobilityActivity::TInformMigrationCompletedOrError )
-                        
     // If the migration was acepted we loop again waiting for a new, preferred one
-    NODEACTIVITY_ENTRY( S60MCprStates::KInformMigrationCompleted, 
+    NODEACTIVITY_ENTRY( KNoTag, 
                         CS60MobilityActivity::TInformMigrationCompleted, 
                         S60MCprMobilityActivity::TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel,
                         S60MCprMobilityActivity::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected )
--- a/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp	Tue May 11 16:35:05 2010 +0300
@@ -198,24 +198,6 @@
         // else cancel
         return KCancelTag | NetStateMachine::EForward;
         }
-
-    // -----------------------------------------------------------------------------
-    // S60MCprMobilityActivity::TInformMigrationCompletedOrError::TransitionTag
-    // -----------------------------------------------------------------------------
-    //
-    DEFINE_SMELEMENT( TInformMigrationCompletedOrError, NetStateMachine::MStateFork, TContext )
-    TBool TInformMigrationCompletedOrError::TransitionTag()
-        {    
-        // Error notification falls into the error -case.
-        if ( iContext.iNodeActivity->Error() ) 
-            {   
-            return MeshMachine::KErrorTag | NetStateMachine::EForward;
-            }
-        else
-            {
-            return S60MCprStates::KInformMigrationCompleted;
-            }
-        }
         
     // -----------------------------------------------------------------------------
     // S60MCprMobilityActivity::TStartMobilityHandshakeBackwardsOrError::TransitionTag
@@ -695,36 +677,6 @@
         }
 
     // -----------------------------------------------------------------------------
-    // CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::DoL
-    // -----------------------------------------------------------------------------
-    //
-    DEFINE_SMELEMENT( CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag, 
-                      NetStateMachine::MStateFork, CS60MobilityActivity::TContext )
-    TInt CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::TransitionTag()
-        {
-        CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node();
-        RMetaServiceProviderInterface* sp = (RMetaServiceProviderInterface*)node.ServiceProvider();
-
-        if ( iContext.iNodeActivity->Error() )
-            {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
-            return MeshMachine::KErrorTag | NetStateMachine::EForward;
-            }
-            // Check whether we're bound to a provider for the given IAP ID already
-        else if (sp && sp->ProviderInfo().APId() == node.PolicyPrefs().IapId())
-            {
-            // Restart the whole layer
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() Re-establishment",(TInt*)&iContext.Node());
-            return S60MCprStates::KRequestReConnectToCurrentSP | NetStateMachine::EForward;
-            }
-        else
-            {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KNoTag",(TInt*)&iContext.Node())
-            return MeshMachine::KNoTag | NetStateMachine::EForward;
-            }
-        }    
-    
-    // -----------------------------------------------------------------------------
     // CS60MobilityActivity::ClearHandshakingFlag
     // -----------------------------------------------------------------------------
     //
--- a/bearermanagement/S60MCPR/src/s60mcprstates.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/bearermanagement/S60MCPR/src/s60mcprstates.cpp	Tue May 11 16:35:05 2010 +0300
@@ -129,7 +129,6 @@
         iContext.Node().GetClientIter<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EServProvider));
     
     RMetaServiceProviderInterface* itf = NULL;
-    //RNodeInterface* itf = NULL;
     
     for ( itf = (RMetaServiceProviderInterface*)iter++;
              ( itf != NULL && ( stoppingSP == NULL || startingSP == NULL ) );
@@ -155,13 +154,13 @@
             //
             }
         }
-    // One must be started since this is already a reconnection
-    if ( stoppingSP==NULL )
+    
+    if ( stoppingSP == NULL )
         { 
-        // Indication of a serious problem.
-        S60MCPRLOGSTRING1("S60MCPR<%x>::TRequestReConnect::DoL() - started service provider not found.",(TInt*)&iContext.Node())
-        ASSERT( EFalse );
-        User::Leave( KErrCorrupt );  // codescanner::leave
+        // If the above loop did not select a stoppingSP, the only reasonable chance is that
+        // this is one of the rare cases where reconnection is done to the same service provider.
+        S60MCPRLOGSTRING1("S60MCPR<%x>::TRequestReConnect::DoL() - reconnection to same service provider",(TInt*)&iContext.Node())
+        stoppingSP = startingSP;
         }
 
     //If there is no other Service Provider to try, return KErrNotFound
@@ -180,28 +179,7 @@
                                                                 startingSP->RecipientId()).CRef() );
     }
 
-// -----------------------------------------------------------------------------
-// TRequestReConnectToCurrentSP::DoL
-// -----------------------------------------------------------------------------
-//
-DEFINE_SMELEMENT( TRequestReConnectToCurrentSP, NetStateMachine::MStateTransition, TContext )
-void TRequestReConnectToCurrentSP::DoL() // codescanner::leave
-    {
-    __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KS60MCprPanic, KPanicNoActivity));
-    S60MCPRLOGSTRING1("S60MCPR<%x>::TRequestReConnectToCurrentSP::DoL()",(TInt*)&iContext.Node())
-    RNodeInterface* currentSP = iContext.Node().ServiceProvider();
 
-    // There MUST be a service provider
-    __ASSERT_DEBUG( currentSP != NULL, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
-    
-    // Diagnostic - there must be a data client or we cannot be here
-    __ASSERT_DEBUG(iContext.Node().GetFirstClient<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EData)),
-                   User::Panic(KS60MCprPanic, KPanicNoDataClient));    
-    
-    iContext.iNodeActivity->PostRequestTo( iContext.NodeId(),
-                                           TCFMcpr::TReConnect( currentSP->RecipientId(), 
-                                                                currentSP->RecipientId()).CRef() );
-    }
 // -----------------------------------------------------------------------------
 // TProcessError::DoL
 // -----------------------------------------------------------------------------
--- a/bearermanagement/mpm/src/mpmiapselection.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/bearermanagement/mpm/src/mpmiapselection.cpp	Tue May 11 16:35:05 2010 +0300
@@ -122,6 +122,11 @@
             snap )
         iChooseIapPref.SetSnapId( snap );
         iChooseIapPref.SetIapId( 0 );
+        if ( iChooseIapPref.ConnType() == TMpmConnPref::EConnTypeImplicit )
+            {
+            // No Connection selection dialog on reselection.
+            iChooseIapPref.SetConnType( TMpmConnPref::EConnTypeExplicit );
+            }
         }
     else if ( iap ) 
         {      
@@ -129,6 +134,11 @@
                 iap )
         iChooseIapPref.SetIapId( iap );
         iChooseIapPref.SetSnapId( 0 );
+        if ( iChooseIapPref.ConnType() == TMpmConnPref::EConnTypeImplicit )
+            {
+            // No Connection selection dialog on reselection.
+            iChooseIapPref.SetConnType( TMpmConnPref::EConnTypeExplicit );
+            }
         }
 
     MPMLOGSTRING3( "CMPMIapSelection::ChooseIapL: IapID: %i SnapId: %i",
@@ -343,7 +353,8 @@
         // KErrGprsOfflineMode should be returned instead of KErrNone.
         // 
         
-        if ( !iapTypeLanOrWlan && iSession->MyServer().IsPhoneOffline() )
+        if ( !iapTypeLanOrWlan && ( iSession->MyServer().IsPhoneOffline() ||                 
+             iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown ) )
             {
             ChooseIapComplete( KErrGprsOfflineMode, &iChooseIapPref );
             }
@@ -514,7 +525,8 @@
         {
         ChooseIapComplete( KErrGprsServicesNotAllowed, NULL );
         }
-    else if ( !iapTypeLanOrWlan && iSession->MyServer().IsPhoneOffline() )
+    else if ( !iapTypeLanOrWlan && ( iSession->MyServer().IsPhoneOffline() ||                 
+               iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown ) )
         {
         // In case offline mode is enabled, only LAN or WLAN is allowed.
         // If some other bearer has been requested, then error code 
@@ -968,7 +980,8 @@
                                    iapTypeLanOrWlan,
                                    *iSession );
                                    
-    if ( !iapTypeLanOrWlan && iSession->MyServer().IsPhoneOffline() )
+    if ( !iapTypeLanOrWlan && ( iSession->MyServer().IsPhoneOffline() ||            
+            iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown ) )
         {
         MPMLOGSTRING2( "CMPMIapSelection::CompleteImplicitConnectionL: Completing with code = %i",
                 KErrGprsOfflineMode )
--- a/cmmanager/cmmgr/Framework/Inc/cmdlg.h	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Framework/Inc/cmdlg.h	Tue May 11 16:35:05 2010 +0300
@@ -226,6 +226,11 @@
          */
         TInt GetInsertIndexL( TInt aCount, TUint32 aPriority );
         
+        /**
+         * Check if plugin exits exceptionally
+         */
+        TBool IsExceptionExitL();
+        
     protected:
         CCmListboxModel*    iModel;
         TUint32             iHighlight;
@@ -264,6 +269,11 @@
         TBool               iBackduringProcessing;
         CDestDlg*           iDestDlg;
         
+        /**
+         * Indicate if exiting from plugin normally or exceptionally
+         */
+        TBool                iPluginExitExceptionally;
+        
     protected:
         // This is nescessary becaue in case of not supported CMs the data base 
         // and the lisbox content is different.(The listbox doesn' show the
--- a/cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp	Tue May 11 16:35:05 2010 +0300
@@ -1065,12 +1065,11 @@
     CleanupStack::PushL( connMethod );// 2           
     connMethod->IncrementRefCounter();    
     item->iPlugin = connMethod;
-        
-    CleanupStack::PushL( item->iPlugin ); // 3         
+
     // create the new record
     item->iDNRecord = iCmMgr.SNAPRecordL( 0 );
 
-    CleanupStack::PushL( item->iDNRecord ); // 4
+    CleanupStack::PushL( item->iDNRecord ); // 3
     
     // if the destination is protection level 1, the connection method must be protected
     if ( ProtectionLevel() == EProtLevel1 )
@@ -1081,7 +1080,7 @@
     TInt index = AddToArrayL( item );
     index = index - KCmInitIndex; //the array contains one initial item, so subtract KCmInitIndex from the index to get cm index!
     
-    CleanupStack::Pop( 4, item ); // item, connMethod, iDNRecord, iPlugin
+    CleanupStack::Pop( 3, item ); // item, connMethod, iDNRecord
     
     return index;
     }
--- a/cmmanager/cmmgr/Framework/Src/cmdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Framework/Src/cmdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -112,6 +112,7 @@
     , iExitduringProcessing( EFalse )
     , iBackduringProcessing( EFalse )
     , iDestDlg( aDestDlg )
+    , iPluginExitExceptionally( EFalse )
     {
     }
     
@@ -136,7 +137,7 @@
         // set old text back, if we have it...
         if ( iOldTitleText )
             {
-            if ( iExitReason == KDialogUserBack )
+            if ( iExitReason == KDialogUserBack || iPluginExitExceptionally  )
                 {
                 TRAP_IGNORE( iTitlePane->SetTextL( *iOldTitleText ) );
                 }
@@ -482,6 +483,11 @@
                     {
                     retVal = ETrue;
                     } 
+                
+                if ( iPluginExitExceptionally )
+                    {
+                    retVal = ETrue;
+                    }
                 }
             break;
             }
@@ -1141,11 +1147,6 @@
         CleanupStack::PopAndDestroy( dest );
         HandleListboxDataChangeL();                             
         }
-    else
-        {
-        CleanupStack::PopAndDestroy( &destArray );
-        User::Leave( KErrCancel );
-        }
 
     CleanupStack::PopAndDestroy( &destArray );
     }
@@ -1226,6 +1227,7 @@
         iCmDestinationImpl->UpdateL();                            
 
         HandleListboxDataChangeL();
+        iListbox->HandleItemRemovalL();
         }
 
     CleanupStack::PopAndDestroy( &destArray );
@@ -1275,7 +1277,15 @@
             TInt ret = cm->RunSettingsL();
             if ( ret == KDialogUserExit )
                 {
-                TryExitL( KDialogUserExit );
+                if( IsExceptionExitL() )
+                    {
+                    iPluginExitExceptionally = ETrue;
+                    TryExitL( KDialogUserBack );
+                    }
+                else
+                    {
+                    TryExitL( KDialogUserExit );
+                    }
                 }
             else
                 {
@@ -1675,7 +1685,6 @@
         if ( selected >= 0 )
             {
             iListbox->ScrollToMakeItemVisible( selected);
-            iListbox->SetCurrentItemIndexAndDraw( selected );            
             }
         }
     }
@@ -2003,3 +2012,24 @@
     // Update list box
     HandleListboxDataChangeL();
     }
+
+// --------------------------------------------------------------------------
+// CCmDlg::IsExceptionExitL
+// --------------------------------------------------------------------------
+//
+TBool CCmDlg::IsExceptionExitL()
+    {
+    TBool retV( EFalse );
+ 
+    if (iCmDestinationImpl)
+        {
+        // If the destination that is currently working on disappears
+        // with some reason then go back to parent view
+        if( !iCmManager->DestinationStillExistedL( iCmDestinationImpl ) )
+            {
+            retV = ETrue;
+            }
+        }
+    
+    return retV;
+    }
--- a/cmmanager/cmmgr/Framework/Src/cmpbasesettingsdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Framework/Src/cmpbasesettingsdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -553,10 +553,10 @@
             {
             
             if ( iIsPossibleToSaveSetting && iHasSettingChanged )
-            {
+                {
                 iCmPluginBaseEng.UpdateL();
                 iHasSettingChanged = EFalse;
-            }
+                }
             retval = ETrue;
             break;
             }
--- a/cmmanager/cmmgr/Framework/Src/uncatdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Framework/Src/uncatdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -291,6 +291,7 @@
                     case KErrNone:
                         {
                         HandleListboxDataChangeL();
+                        iListbox->HandleItemRemovalL();
 
                         if ( !iListbox->Model()->NumberOfItems() )
                             {
--- a/cmmanager/cmmgr/Plugins/cmpluginpacketdata/inc/cmppacketdatasettingsdlg.h	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginpacketdata/inc/cmppacketdatasettingsdlg.h	Tue May 11 16:35:05 2010 +0300
@@ -83,7 +83,7 @@
         *
         * @since S60 3.2
         */
-        virtual void RunAdvancedSettingsL();        
+        virtual void RunAdvancedSettingsL();
         
     public: // from class MCmCommsDatWatcher
         
--- a/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -96,6 +96,9 @@
 
 TInt CmPluginPacketDataSettingsDlg::ConstructAndRunLD( )
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
     CleanupStack::PushL( this );
     LoadResourceL( KPluginPacketDataResDirAndFileName );
     CleanupStack::Pop( this );
@@ -290,6 +293,13 @@
     {
     LOGGER_ENTERFN( "CmPluginPacketDataSettingsDlg::ProcessCommandL" );
 
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+    
     if ( MenuShowing() )
         {
         HideMenu();
@@ -323,6 +333,29 @@
 //
 TBool CmPluginPacketDataSettingsDlg::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+
     TBool retval( EFalse );
     
     switch ( aButtonId )
@@ -362,6 +395,11 @@
 //
 void CmPluginPacketDataSettingsDlg::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
 
@@ -369,53 +407,24 @@
         {
         if( !cmMgr.DestinationStillExistedL( parentDest ) )
             {
-            cmMgr.WatcherUnRegister();
-            // If parent destination diappears with some reason 
-            // then the view must exit back to main view for it
-            // may be danger if going back to parent view
             iExitReason = KDialogUserExit;
-            TryExitL( iExitReason );
+            iCanEditingContinue = EFalse;
             
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
         
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            cmMgr.WatcherUnRegister();
-            // In this case, the view can go back to the parent view
-            TryExitL( iExitReason );
-            
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;            
-            }
-        
-        // We may have to go back to parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-        
+        // We may have to go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
+
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
-    else
+    else // Legacy
         {
-        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
-            {
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-        
-        // We may have to go back to parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        // We may have to go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
         }
     }
 
@@ -433,7 +442,13 @@
 // --------------------------------------------------------------------------
 //
 void CmPluginPacketDataSettingsDlg::HandleCommsDatChangeL()
-    {    
+    {
+    if ( iCanEditingContinue )
+        {
+        // Set iCanEditingContinue to False so that exit fromn this view without update editings
+        iCanEditingContinue = EFalse;
+        }
+    
     if( iNotifyFromSon == KCmNotifiedIapIsNotInThisDestination || 
             iNotifyFromSon == KCmNotifiedIapDisappear )
         {
--- a/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlgadv.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlgadv.cpp	Tue May 11 16:35:05 2010 +0300
@@ -96,6 +96,9 @@
 //
 TInt CmPluginPacketDataSettingsDlgAdv::ConstructAndRunLD()
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     cmMgr.WatcherRegisterL( this );
     
@@ -313,11 +316,18 @@
 //
 void CmPluginPacketDataSettingsDlgAdv::ProcessCommandL( TInt aCommandId )
     {
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+
     if ( MenuShowing() )
         {
         HideMenu();
         }
-
+    
     switch ( aCommandId )
         {
         case EPluginBaseCmdExit:
@@ -360,6 +370,29 @@
 //
 TBool CmPluginPacketDataSettingsDlgAdv::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+    
     TBool retval( EFalse );
     switch ( aButtonId )
         {
@@ -368,7 +401,11 @@
             {
             CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
             cmMgr.WatcherUnRegister();
+            
+            iExitReason = KDialogUserBack;
+            retval = ETrue;
             }
+            break;
         default:
             {
             retval = CmPluginBaseSettingsDlgAdv::OkToExitL( aButtonId );
@@ -414,6 +451,11 @@
 //
 void CmPluginPacketDataSettingsDlgAdv::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
 
@@ -426,68 +468,31 @@
                 iParent->NotifyParentView( KCmNotifiedDestinationDisappear );
                 }
             
-            cmMgr.WatcherUnRegister();
-            // If parent destination is deleted by somebody then the dialog must exit back to main view
+            iCanEditingContinue = EFalse;
             iExitReason = KDialogUserExit;
-            TryExitL( iExitReason );
-            
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;
-            }
-        
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapIsNotInThisDestination );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
             
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
-        
-        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-        
+        iCanEditingContinue = EFalse;
+
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
-    else
+    else // Legacy
         {
-        if( !cmMgr.IapStillExistedL(iCmPluginBaseEng) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapDisappear );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-        
-        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        iCanEditingContinue = EFalse;
         }
     }
--- a/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpvpnsettingsdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpvpnsettingsdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -77,6 +77,10 @@
 TInt CmPluginVpnSettingsDlg::ConstructAndRunLD( )
     {
     LOGGER_ENTERFN( "CmPluginVpnSettingsDlg::ConstructAndRunLD" );
+    
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
     CleanupStack::PushL( this );
     LoadResourceL( KPluginVPNResDirAndFileName );
     
@@ -365,11 +369,18 @@
 //
 void CmPluginVpnSettingsDlg::ProcessCommandL( TInt aCommandId )
     {
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+
     if ( MenuShowing() )
         {
         HideMenu();
         }
-
+    
     switch ( aCommandId )
         {
         case EAknSoftkeyOk:
@@ -472,6 +483,29 @@
 //
 TBool CmPluginVpnSettingsDlg::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+    
     // Translate the button presses into commands for the appui & current
     // view to handle
     TBool retval( EFalse );
@@ -556,6 +590,11 @@
 //
 void CmPluginVpnSettingsDlg::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
 
@@ -563,52 +602,26 @@
         {
         if( !cmMgr.DestinationStillExistedL( parentDest ) )
             {
-            cmMgr.WatcherUnRegister();
             // If parent destination diappears with some reason 
             // then the view must exit back to main view for it
             // may be danger if going back to parent view
             iExitReason = KDialogUserExit;
-            TryExitL( iExitReason );
-            
+            iCanEditingContinue = EFalse;
+
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
         
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            cmMgr.WatcherUnRegister();
-            // In this case, the view can go back to the parent view
-            TryExitL( iExitReason );
-            
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;            
-            }
-        
-        // We may have to go back to parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-        
+        // We may have to go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
+
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
-    else
+    else // Legacy
         {
-        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
-            {
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-        
-        // We may have to go back to parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        // We may have to go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
         }
     }
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -118,7 +118,12 @@
 //
 TInt CmPluginWlanSettingsDlg::ConstructAndRunLD( )
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
+    CleanupStack::PushL( this );
     LoadResourceL( KPluginWlanResDirAndFileName );
+    CleanupStack::Pop( this );
     
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     cmMgr.WatcherRegisterL( this );
@@ -769,6 +774,29 @@
 //
 TBool CmPluginWlanSettingsDlg::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+    
     // Translate the button presses into commands for the appui & current
     // view to handle
     TBool retval( EFalse );
@@ -817,11 +845,18 @@
 //
 void CmPluginWlanSettingsDlg::ProcessCommandL( TInt aCommandId )
     {
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+
     if ( MenuShowing() )
         {
         HideMenu();
         }
-
+    
     switch ( aCommandId )
         {
         case EPluginBaseCmdExit:
@@ -873,6 +908,11 @@
 //
 void CmPluginWlanSettingsDlg::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
 
@@ -880,51 +920,25 @@
         {
         if( !cmMgr.DestinationStillExistedL( parentDest ) )
             {
-            cmMgr.WatcherUnRegister();
             // If parent destination is deleted by somebody then the dialog must exit back to main view
             iExitReason = KDialogUserExit;
-            TryExitL( iExitReason );
-            
+            iCanEditingContinue = EFalse;
+
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
         
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;            
-            }
+        // We may have to go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
 
-        // We may have to go back to parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-                
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
-    else
+    else // Legacy
         {
-        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
-            {
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-            
-        // We may have to go back to parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        // We may have to go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
         }
     }
 
@@ -943,7 +957,11 @@
 //
 void CmPluginWlanSettingsDlg::HandleCommsDatChangeL()
     {
-    //CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
+    if ( iCanEditingContinue )
+        {
+        // Set iCanEditingContinue to False so that exit fromn this view without update editings
+        iCanEditingContinue = EFalse;
+        }
     
     if( iNotifyFromAdv == KCmNotifiedIapIsNotInThisDestination || 
             iNotifyFromAdv == KCmNotifiedIapDisappear )
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgadv.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgadv.cpp	Tue May 11 16:35:05 2010 +0300
@@ -69,6 +69,9 @@
 //
 TInt CmPluginWlanSettingsDlgAdv::ConstructAndRunLD( )
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     cmMgr.WatcherRegisterL( this );
     
@@ -398,11 +401,18 @@
 //
 void CmPluginWlanSettingsDlgAdv:: ProcessCommandL( TInt aCommandId )
     {
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+    
     if ( MenuShowing() )
         {
         HideMenu();
         }
-
+    
     switch ( aCommandId )
         {
         case EPluginBaseCmdExit:
@@ -474,6 +484,29 @@
 //
 TBool CmPluginWlanSettingsDlgAdv::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+
     // Translate the button presses into commands for the appui & current
     // view to handle
     TBool retval( EFalse );
@@ -521,6 +554,11 @@
 //
 void CmPluginWlanSettingsDlgAdv::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
 
@@ -533,69 +571,33 @@
                 iParent->NotifyParentView( KCmNotifiedDestinationDisappear );
                 }
             
-            cmMgr.WatcherUnRegister();
             // If parent destination is deleted by somebody then the dialog must exit back to main view
             iExitReason = KDialogUserExit;
-            TryExitL( iExitReason );
-            
+            iCanEditingContinue = EFalse;
+
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
         
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapIsNotInThisDestination );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;            
-            }
-        
-        // We may have to notify parent view to go back to its parent view even though this is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-        
+        iCanEditingContinue = EFalse;
+
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
-    else
+    else // Legacy
         {
-        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapDisappear );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-        
-        // We may have to notify parent view to go back to its parent view even though this is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        iCanEditingContinue = EFalse;
         }
     }
 
@@ -618,7 +620,13 @@
 // --------------------------------------------------------------------------
 //
 void CmPluginWlanSettingsDlgAdv::HandleCommsDatChangeL()
-    {    
+    {
+    if ( iCanEditingContinue )
+        {
+        // Set iCanEditingContinue to False so that exit fromn this view without update editings
+        iCanEditingContinue = EFalse;
+        }
+    
     if( iNotifyFromIp == KCmNotifiedIapIsNotInThisDestination || 
             iNotifyFromIp == KCmNotifiedIapDisappear )
         {
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv4.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv4.cpp	Tue May 11 16:35:05 2010 +0300
@@ -69,6 +69,9 @@
 //
 TInt CmPluginWlanSettingsDlgIpv4::ConstructAndRunLD()
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     cmMgr.WatcherRegisterL( this );
     
@@ -157,10 +160,18 @@
 //
 void CmPluginWlanSettingsDlgIpv4::ProcessCommandL( TInt aCommandId )
     {
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+
     if ( MenuShowing() )
         {
         HideMenu();
         }
+    
     switch ( aCommandId )
         {
         case EPluginBaseCmdExit:
@@ -196,6 +207,29 @@
 //
 TBool CmPluginWlanSettingsDlgIpv4::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+    
     TBool retval( EFalse );
     
     switch ( aButtonId )
@@ -315,6 +349,11 @@
 //
 void CmPluginWlanSettingsDlgIpv4::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
     
@@ -327,68 +366,32 @@
                 iParent->NotifyParentView( KCmNotifiedDestinationDisappear );
                 }
             
-            cmMgr.WatcherUnRegister();
             // If parent destination is deleted by somebody then the dialog must exit back to main view
             iExitReason = KDialogUserExit;
-            TryExitL( iExitReason );
-                
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;
-            }
-            
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapIsNotInThisDestination );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            
+            iCanEditingContinue = EFalse;
+     
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
         
-        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-            
+        iCanEditingContinue = EFalse;
+
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
-    else
+    else // Legacy
         {
-        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
-            {
-            if( iParent )
-            {
-            iParent->NotifyParentView( KCmNotifiedIapDisappear );
-            }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-        
-        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        iCanEditingContinue = EFalse;
         }
     }
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv6.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv6.cpp	Tue May 11 16:35:05 2010 +0300
@@ -84,6 +84,9 @@
 //
 TInt CmPluginWlanSettingsDlgIpv6::ConstructAndRunLD()
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     cmMgr.WatcherRegisterL( this );
     
@@ -190,11 +193,18 @@
 //
 void CmPluginWlanSettingsDlgIpv6:: ProcessCommandL( TInt aCommandId )
     {
+    if ( !iCanEditingContinue )
+        {
+        // We have to block all editing activity if database changed by
+        // other application
+        return;
+        }
+    
     if ( MenuShowing() )
         {
         HideMenu();
         }
-
+    
     switch ( aCommandId )
         {
         case EPluginBaseCmdExit:
@@ -231,6 +241,29 @@
 //
 TBool CmPluginWlanSettingsDlgIpv6::OkToExitL( TInt aButtonId )
     {
+    // Database has been changed by other application so exit from this view
+    // without update editings to database
+    if ( !iCanEditingContinue )
+        {
+        if ( iExitReason == KDialogUserExit )
+            {
+            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
+            
+            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
+            TInt exitValue = KDialogUserExit;
+            iExitReason = KDialogUserBack;
+            // If destination has been deleted by other application
+            // then we may have to exit from Cmmgr
+            TryExitL( exitValue );
+            return EFalse;
+            }
+        else
+            {
+            // Exit from this view here to avoid possible update to databse
+            return ETrue;
+            }
+        }
+
     TBool retval( EFalse );
     
     switch ( aButtonId )
@@ -241,7 +274,11 @@
             {
             CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
             cmMgr.WatcherUnRegister();
-            } // Continue to call base setting dialog view
+            
+            iExitReason = KDialogUserBack;
+            retval = ETrue;
+            }
+            break;
         default:
             {
             retval = CmPluginBaseSettingsDlgIp::OkToExitL( aButtonId );
@@ -266,6 +303,11 @@
 //
 void CmPluginWlanSettingsDlgIpv6::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
     
@@ -278,68 +320,32 @@
                 iParent->NotifyParentView( KCmNotifiedDestinationDisappear );
                 }
             
-            // cmMgr.WatcherUnRegister();
             // If parent destination is deleted by somebody then the dialog must exit back to main view
-            iExitReason = KDialogUserExit; // cmMgr.WatcherUnRegister will be done in function OkToExitL in this case
-            TryExitL( iExitReason );
-                
+            iExitReason = KDialogUserExit; 
+            iCanEditingContinue = EFalse;
+
             cmMgr.RemoveDestFromPool( parentDest );
             delete parentDest;
             return;
             }
-            
-        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapIsNotInThisDestination );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            
-            cmMgr.RemoveDestFromPool( parentDest );
-            delete parentDest;
-            return;
-            }
-        
-        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
-        
+        iCanEditingContinue = EFalse;
+
         cmMgr.RemoveDestFromPool( parentDest );
         delete parentDest;
         }
     else
         {
-        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
-            {
-            if( iParent )
-                {
-                iParent->NotifyParentView( KCmNotifiedIapDisappear );
-                }
-            
-            cmMgr.WatcherUnRegister();
-            // In this case, the dialog can go back to the parent view
-            TryExitL( iExitReason );
-            return;
-            }
-        
-        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
-        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
-        // after this call when some Iap is deleted.
+        // We may have to go back to parent view if database is changed by other application
         if( iParent )
             {
             iParent->NotifyParentView( KCmNotifiedIapDisappear );
             }
-        cmMgr.WatcherUnRegister();
-        TryExitL( iExitReason );
+        iCanEditingContinue = EFalse;
         }
     }
--- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonBearerGPRS.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonBearerGPRS.cpp	Tue May 11 16:35:05 2010 +0300
@@ -60,13 +60,14 @@
             {
             switch ( mode )
                 {
-                case RMobilePhone::ENetworkModeGsm:
-                case RMobilePhone::ENetworkModeUnknown: // Emulator default
+                case RMobilePhone::ENetworkModeGsm:                
                     err = iConnMonIAP->GetBearerSupportInfo( EBearerIdGPRS, byCell, byPhone );
                     break;
                 case RMobilePhone::ENetworkModeWcdma:
                     err = iConnMonIAP->GetBearerSupportInfo( EBearerIdWCDMA, byCell, byPhone );
                     break;
+                case RMobilePhone::ENetworkModeUnknown: // Emulator default
+                    break;
                 default:
                     LOGEXITFN1("TConnMonBearerGPRS::GetAvailability()", err)
                     return err; // Return silently, report not available
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/data/ConnUiUtilsNotif.rss	Tue Apr 27 17:03:25 2010 +0300
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/data/ConnUiUtilsNotif.rss	Tue May 11 16:35:05 2010 +0300
@@ -83,32 +83,30 @@
     }    
 
 RESOURCE DIALOG r_easy_wep_wpa_dlg
-	{
+    {
     flags = EEikDialogFlagNotifyEsc | EEikDialogFlagCbaButtons | 
-            EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
-            EEikDialogFlagVirtualInput;
-	buttons=R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+            EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar;
+    buttons=R_AVKON_SOFTKEYS_OK_CANCEL__OK;
     items=
-		{
-		DLG_LINE
-			{
-			type=EAknCtQuery;
-			id=EGeneralQuery;
-			control= AVKON_DATA_QUERY
-				{ 
-				layout=EDataLayout;
+        {
+        DLG_LINE
+            {
+            type=EAknCtQuery;
+            id=EGeneralQuery;
+            control= AVKON_DATA_QUERY
+                { 
+                layout=EDataLayout;
                 control = EDWIN
                     {
                     avkon_flags = EAknEditorFlagLatinInputModesOnly;
                     default_case = EAknEditorLowerCase;
-					default_input_mode = EAknEditorTextInputMode;
+                    default_input_mode = EAknEditorTextInputMode;
                     allowed_input_modes = EAknEditorAllInputModes;
                     };
-				};
-			}
-		};
-
-	}
+                };
+             }
+        };
+    }
 
 RESOURCE TBUF r_info_no_networks_found
     { 
--- a/connectionutilities/ConnectionDialogs/DisconnectDlg/inc/ConnectionModel.h	Tue Apr 27 17:03:25 2010 +0300
+++ b/connectionutilities/ConnectionDialogs/DisconnectDlg/inc/ConnectionModel.h	Tue May 11 16:35:05 2010 +0300
@@ -75,13 +75,6 @@
         */
         void InitConnectionArrayL();
 
-        /**
-        * It is called when RConnectionMonitor has sent its event after ending
-        * connection
-        * @return -
-        */
-        void SelectedConnectionClosedL();
-
 
     public:
 
--- a/connectionutilities/ConnectionDialogs/DisconnectDlg/src/ConnectionModel.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/connectionutilities/ConnectionDialogs/DisconnectDlg/src/ConnectionModel.cpp	Tue May 11 16:35:05 2010 +0300
@@ -308,8 +308,12 @@
         {
         // notifier will finish, so cancel all other notifications
         iMonitor.CancelNotifications();     
-        SelectedConnectionClosedL();
-        
+
+        // Bring back the 3s delay to avoid possible problems.
+        // (GPRS Detach and Attach overlapping, when only 1 context allowed,
+        // causing 15s delay.)
+        User::After( CAknNoteDialog::ELongTimeout );
+
         iDisconnectDialogUi->CompleteL( KErrNone );
         }
     else if( iDisconnectDialogUi  && 
@@ -348,21 +352,6 @@
 
 
 // ---------------------------------------------------------
-// CConnectionModel::SelectedConnectionClosedL
-// ---------------------------------------------------------
-//
-void CConnectionModel::SelectedConnectionClosedL()
-    {
-    CLOG_ENTERFN("CConnectionModel::SelectedConnectionClosedL");    
-    
-    // the connection is succesfully closed
-    CConnectionInfo* info = iConnArray->At( iClosingConnectionIndex );
-
-    CLOG_LEAVEFN("CConnectionModel::SelectedConnectionClosedL");    
-    }
-
-
-// ---------------------------------------------------------
 // CDisconnectDlgDialog::InfoNoteL
 // ---------------------------------------------------------
 //
--- a/ipcm_plat/bearer_settings_plugin_api/inc/cmpbasesettingsdlg.h	Tue Apr 27 17:03:25 2010 +0300
+++ b/ipcm_plat/bearer_settings_plugin_api/inc/cmpbasesettingsdlg.h	Tue May 11 16:35:05 2010 +0300
@@ -399,6 +399,10 @@
         // A flag to indicate if setting has been changed by user
         TBool                   iHasSettingChanged;
         
+        // A flag to indicate if edited IAP can be continued
+        // IAP may be possible to be modified or deleted by other application
+        TBool                   iCanEditingContinue;
+        
     };
 
 #endif // CMPLUGINBASE_SETTINGS_DLG_H