wlanutilities/wlansettingsui/src/wlansettingsuimodel.cpp
branchRCL_3
changeset 25 f28ada11abbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansettingsui/src/wlansettingsuimodel.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*      Implementation of class TWlanSettingsUiModel.   
+*      
+*
+*/
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <wlanmgmtclient.h>
+#include <internetconnectivitycrkeys.h>
+#include <wlancontainer.h>
+#include "wlansettingsuimodel.h"
+#include "wlansettingsuipanic.h"
+
+#include <psmtypes.h>
+#include <psmsrvdomaincrkeys.h>
+#include <wlandevicesettingsinternalcrkeys.h>
+#include <featmgr.h>
+#include <mpmconnectscreenid.h>
+
+// CONSTANTS
+
+const TInt KWlanSettingsUiSecondsInMinute = 60;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::NewL
+// ---------------------------------------------------------
+//
+CWlanSettingsUiModel* CWlanSettingsUiModel::NewL
+    (
+    CMDBSession* aSession,
+    CWlanMgmtClient* aWlanMgmtClient,
+    CRepository* aRepository
+    )
+    {
+    CWlanSettingsUiModel* self = new( ELeave ) 
+         CWlanSettingsUiModel(aSession, 
+                              aWlanMgmtClient,
+                              aRepository);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::CWlanSettingsUiModel
+// ---------------------------------------------------------
+//
+CWlanSettingsUiModel::CWlanSettingsUiModel
+    (
+    CMDBSession* aSession,
+    CWlanMgmtClient* aWlanMgmtClient,
+    CRepository* aRepository
+    )
+: iShowWlanAvail( KWlanSettingsUiDefaultShowWlanAvail ),
+  iScanNetworks( KWlanSettingsUiDefaultScanNetwork ),
+  iPowerSaving( KWlanSettingsUiDefaultPowerSaving ),
+  iPsmMode( EFalse ),
+  iSession( aSession ),
+  iWlanMgmtClient( aWlanMgmtClient ),
+  iRepository( aRepository ),
+  iPsmSupported( EFalse )
+    {
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::ConstructL
+// ---------------------------------------------------------
+//
+void CWlanSettingsUiModel::ConstructL()
+    {
+    FeatureManager::InitializeLibL();
+    // Set the member variable to indicate if full/partial PSM is on.
+    // This value stays the same for the whole WLAN Settings session,
+    // i.e. we ignore any mode changes during the session.
+    CheckPsmModeL();
+    }
+
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::~CWlanSettingsUiModel()
+// ---------------------------------------------------------
+//
+CWlanSettingsUiModel::~CWlanSettingsUiModel()
+    {
+     FeatureManager::UnInitializeLib();  
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::LoadSettingsL
+// ---------------------------------------------------------
+//
+void CWlanSettingsUiModel::LoadSettingsL()
+    {
+    TBool ownTransaction( EFalse );
+    if( !iSession->IsInTransaction() )
+        {
+        ownTransaction = ETrue;
+        iSession->OpenTransactionL();
+        }
+    TMDBElementId tableId = 0;
+    
+    tableId = CCDWlanDeviceSettingsRecord::TableIdL( *iSession );
+        
+    CCDWlanDeviceSettingsRecord* record = new( ELeave )
+            CCDWlanDeviceSettingsRecord( tableId );         
+    CleanupStack::PushL( record );
+    
+    record->iWlanDeviceSettingsType = KWlanUserSettings; 
+    
+    if( record->FindL( *iSession ) )
+        {
+        record->LoadL( *iSession );
+        }
+
+    // Read scan interval
+
+    iScanNetworks = record->iBgScanInterval;
+    FixScanNetworks( record->iSavedBgScanInterval );
+ 
+    iPowerSaving = record->iWlanPowerMode;
+    CleanupStack::PopAndDestroy( record ); 
+    
+    if ( ownTransaction )
+        {
+        iSession->CommitTransactionL();
+          // Rollback operation.
+        }
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::SaveSettingsL
+// ---------------------------------------------------------
+//
+void CWlanSettingsUiModel::SaveSettingsL()
+    {
+    TBool ownTransaction( EFalse );
+    if( !iSession->IsInTransaction() )
+        {
+        ownTransaction = ETrue;
+        iSession->OpenTransactionL();
+        }
+    TMDBElementId tableId = 0;
+    tableId = CCDWlanDeviceSettingsRecord::TableIdL( *iSession );
+        
+    CCDWlanDeviceSettingsRecord* record = new( ELeave )
+            CCDWlanDeviceSettingsRecord( tableId );         
+    
+    CleanupStack::PushL( record );
+    
+    record->iWlanDeviceSettingsType = KWlanUserSettings; 
+    
+    if( record->FindL( *iSession ) )
+        {
+        record->LoadL( *iSession );
+        }
+    
+    if ( iShowWlanAvail )
+        {
+        record->iBgScanInterval = iScanNetworks;
+        }
+    else
+        {
+        record->iBgScanInterval = KWlanSettingsUiScanNetworkNever;
+        
+        // Do not change the saved interval value if in full or partial PSM Mode.
+        // We want to preserve the previous user-selected value in memory, not the
+        // forced PSM mode value (automatic).
+        if ( !PsmModeOn() )
+            {
+            record->iSavedBgScanInterval = iScanNetworks;
+            }
+        }
+
+    record->iWlanPowerMode = iPowerSaving;
+    
+    // Whenever settings are modified, iUseDefaultSettings must be set to false.
+    record->iUseDefaultSettings = EFalse;
+
+    record->ModifyL( *iSession );
+        
+    CleanupStack::PopAndDestroy( record );        
+    if ( ownTransaction )
+        {
+        iSession->CommitTransactionL();
+        }
+
+#ifndef __WINS__
+    // Notifying WLAN Engine about changes in settings
+    iWlanMgmtClient->NotifyChangedSettings();
+#endif
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::FixScanNetworks
+// ---------------------------------------------------------
+//
+void CWlanSettingsUiModel::FixScanNetworks( TUint aSavedScanInterval )
+    {    
+    if ( iScanNetworks == KWlanSettingsUiScanNetworkNever )
+        {
+        iShowWlanAvail = EFalse;
+  
+        if( aSavedScanInterval == KWlanSettingsUiScanNetworkNever
+            || iPsmMode )
+            {
+            iScanNetworks = KWlanSettingsUiDefaultScanNetwork;
+            }
+        else
+            {
+            iScanNetworks = FixScanInterval( aSavedScanInterval );
+            }
+        }   
+             
+    else
+        {
+        iShowWlanAvail = ETrue;
+        iScanNetworks = FixScanInterval( iScanNetworks );
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::FixScanInterval
+// ---------------------------------------------------------
+//
+TUint CWlanSettingsUiModel::FixScanInterval( TUint aScanInterval )
+    {
+    if( aScanInterval <=
+        ( EWlanSettingsUiScanNetworkMax * KWlanSettingsUiSecondsInMinute ) )
+        {
+        // Return only full minutes
+        return aScanInterval -
+            ( aScanInterval % KWlanSettingsUiSecondsInMinute );
+        }
+    else
+        {
+        return KWlanSettingsUiScanNetworkAuto;
+        }
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::CheckPsmModeL
+// ---------------------------------------------------------
+//
+void CWlanSettingsUiModel::CheckPsmModeL()
+    {		
+    iPsmSupported = FeatureManager::FeatureSupported( KFeatureIdPowerSave ); 
+    if( iPsmSupported )   
+    {       	   
+    TPsmsrvMode mode( EPsmsrvModeNormal );
+
+    CRepository* cenrep = NULL;
+
+    TRAP_IGNORE( cenrep = CRepository::NewL( KCRUidPowerSaveMode ) );
+    
+  	  if ( cenrep )
+    	    {
+      	  TInt crValue(0);
+        	cenrep->Get( KPsmCurrentMode, crValue );
+        	mode = static_cast<TPsmsrvMode>( crValue );
+        	if ( mode == EPsmsrvModePowerSave || mode == EPsmsrvPartialMode )
+                {
+                iPsmMode = ETrue;
+                }
+        	else 
+        	    {
+        	    iPsmMode = EFalse;
+        	    }
+        	
+         delete cenrep;
+       	 cenrep = NULL;                    
+        }
+      }  
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::ScanNetworks
+// ---------------------------------------------------------
+//              
+TUint CWlanSettingsUiModel::ScanNetworks()
+    {
+    if ( iScanNetworks == KWlanSettingsUiScanNetworkAuto )
+        {
+        return iScanNetworks;   
+        }
+    else
+        {
+        // Return scan time in minutes
+        return ( iScanNetworks / KWlanSettingsUiSecondsInMinute );
+        }
+    }
+
+// ---------------------------------------------------------
+// CWlanSettingsUiModel::SetScanNetworks
+// ---------------------------------------------------------
+//        
+void CWlanSettingsUiModel::SetScanNetworks( TUint aScanNetworks )
+    {
+    if ( aScanNetworks == KWlanSettingsUiScanNetworkAuto )
+        {
+        iScanNetworks = aScanNetworks;
+        }
+    else
+        {
+        // Scan time stored in seconds
+        iScanNetworks = aScanNetworks * KWlanSettingsUiSecondsInMinute;
+        }
+    }