--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/aiplugin/src/wsfaimodel.cpp Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,681 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CWsfAiModel.
+*
+*/
+
+// EXTERNAL INCLUDES
+#include <badesca.h>
+#include <coemain.h>
+#include <StringLoader.h>
+#include <wsfaipluginrsc.rsg>
+
+// INTERNAL INCLUDES
+#include "wsfaimodel.h"
+#include "wsfwlaninfo.h"
+#include "wsfwlaninfoarray.h"
+#include "wsfaiplugincommon.h"
+#include "wsfwlaninfoarrayvisitor.h"
+#include "wsflogger.h"
+
+// MACROS
+#ifdef _DEBUG
+ _LIT( KModelPanic, "CWsfAiModel" );
+ #define _ASS_D( cond ) __ASSERT_DEBUG( (cond), \
+ User::Panic( KModelPanic, __LINE__) )
+#else
+ #define _ASS_D( cond ) {}
+#endif //_DEBUG
+
+// LOCAL DEFINITIONS
+const TInt KListBoxItemMaxLength = 128;
+const TUint KWLanListGranularity = 4;
+
+// List item format
+_LIT( KListItemFormat, "%d\t%S\t%d\t%d" );
+
+// List item format for "Other (unlisted)" item
+_LIT( KHiddenItemFormat, "\t%S" );
+
+
+// CONSTRUCTION AND DESTRUCTION
+// --------------------------------------------------------------------------
+// CWsfAiModel::NewL
+// --------------------------------------------------------------------------
+//
+CWsfAiModel* CWsfAiModel::NewL()
+ {
+ CWsfAiModel* self = CWsfAiModel::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::NewLC
+// --------------------------------------------------------------------------
+//
+CWsfAiModel* CWsfAiModel::NewLC()
+ {
+ CWsfAiModel* self = new( ELeave ) CWsfAiModel;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::~CWsfAiModel
+// --------------------------------------------------------------------------
+//
+CWsfAiModel::~CWsfAiModel()
+ {
+ delete iWlanInfoBranding;
+ delete iFormattedWlanList;
+ if ( iStatusRefreshing )
+ {
+ delete iStatusRefreshing;
+ }
+ if ( iStatusConnecting )
+ {
+ delete iStatusConnecting;
+ }
+ if ( iStatusScanningOff )
+ {
+ delete iStatusScanningOff;
+ }
+ if ( iManualSSIDInputting )
+ {
+ delete iManualSSIDInputting;
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::CWsfAiModel
+// --------------------------------------------------------------------------
+//
+CWsfAiModel::CWsfAiModel():
+ iCoeEnv( CCoeEnv::Static() ),
+ iScanning( EFalse ),
+ iConnected( EFalse ),
+ iRefreshIndex( iRefreshIcons.Count() - 1 ),
+ iConnectingIndex( iConnectingIcons.Count() - 1 )
+ {
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::ConstructL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::ConstructL()
+ {
+ iFormattedWlanList = new (ELeave) CDesCArrayFlat( KWLanListGranularity );
+ iWlanInfoBranding = CWsfWlanInfoArrayVisitor::NewL( ETrue );
+ iWlanInfoBranding->LoadFilterDefinitionsL();
+
+ iRefreshIcons[0] = EWlanOnIcon_0;
+ iRefreshIcons[1] = EWlanOnIcon_1;
+ iRefreshIcons[2] = EWlanOnIcon;
+ iRefreshIcons[3] = EWlanOnIcon_1;
+
+ iConnectingIcons[0] = EWlanOnIcon_0;
+ iConnectingIcons[1] = EWlanOnIcon_1;
+ iConnectingIcons[2] = EWlanOnIcon;
+ iConnectingIcons[3] = EWlanOnIcon_1;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatWlanListL
+// --------------------------------------------------------------------------
+//
+CDesCArrayFlat* CWsfAiModel::FormatWlanListL( CWsfWlanInfoArray* aWlanList, const TBool aUIPrioritySort )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatWlanListL" );
+ HBufC* item = HBufC::NewLC( KListBoxItemMaxLength );
+ TPtr ptr( item->Des() );
+ iFormattedWlanList->Reset();
+
+ // Function expects that items in list are already in proper order
+ iWlanInfoArray = aWlanList;
+
+ if ( iWlanInfoArray )
+ {
+ if ( aUIPrioritySort )
+ {
+ iWlanInfoArray->SetUIPrioritySort( ETrue );
+ iWlanInfoArray->SortArrayL( *iWlanInfoBranding );
+ // Sort Array with default sort
+ // this sets the highest UI priority networks on top
+ iWlanInfoArray->SortArrayL( );
+ iWlanInfoArray->SetUIPrioritySort( EFalse );
+ }
+ else
+ {
+ iWlanInfoArray->SortArrayL( *iWlanInfoBranding );
+ }
+
+ for (TInt i = 0; i < iWlanInfoArray->Count(); ++i )
+ {
+ TWsfWlanInfo* wlanInfo = iWlanInfoArray->At(i);
+
+ // Hidden WLAN item is appended later for unknown hidden networks
+ if ( !wlanInfo || ( wlanInfo->Hidden() && !wlanInfo->iIapId ) )
+ {
+ continue;
+ }
+
+ // known hidden wlans are also "visible"
+ ptr.Zero();
+ FormatWlanSingleLineL( *wlanInfo, ptr, EFalse );
+ iFormattedWlanList->AppendL( ptr );
+ }
+ }
+
+ // now add "Other (unlisted)..." for hidden networks (always visible)
+ // make up a dummy wlaninfo
+ TWsfWlanInfo dummy;
+
+ ptr.Zero();
+ FormatHiddenWlanItemL( dummy, ptr );
+ iFormattedWlanList->AppendL( ptr );
+
+ CleanupStack::PopAndDestroy ( item );
+ return iFormattedWlanList;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::GetWlanList
+// --------------------------------------------------------------------------
+//
+CDesCArrayFlat* CWsfAiModel::GetWlanList()
+ {
+ LOG_ENTERFN( "CWsfAiModel::GetWlanList" );
+ return iFormattedWlanList;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::GetInfoArray
+// --------------------------------------------------------------------------
+//
+CWsfWlanInfoArray* CWsfAiModel::GetInfoArray()
+ {
+ LOG_ENTERFN( "CWsfAiModel::GetInfoArray" );
+ return iWlanInfoArray;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatSingleLineWlanListL
+// --------------------------------------------------------------------------
+//
+CDesCArrayFlat* CWsfAiModel::FormatSingleLineWlanListL(
+ CWsfWlanInfoArray* aWlanList )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatSingleLineWlanListL" );
+ iWlanInfoArray = aWlanList;
+
+ if ( iWlanInfoArray )
+ {
+ iWlanInfoArray->SetUIPrioritySort( ETrue );
+ iWlanInfoArray->SortArrayL( *iWlanInfoBranding );
+
+ // Sort Array with default sort
+ // this sets the highest UI priority networks on top
+ iWlanInfoArray->SortArrayL();
+ iWlanInfoArray->SetUIPrioritySort( EFalse );
+ }
+
+ iFormattedWlanList->Reset();
+
+ HBufC* item = HBufC::NewLC( KListBoxItemMaxLength );
+ TPtr ptr( item->Des() );
+
+ if ( iConnected )
+ {
+ FormatConnectedL( ptr );
+ iFormattedWlanList->AppendL( ptr );
+ }
+ else if ( iConnecting )
+ {
+ FormatConnectingL();
+ }
+ else if ( !iScanning )
+ {
+ FormatStatusOffL( ptr );
+ iFormattedWlanList->AppendL( ptr );
+ }
+ // if there's wlans avail
+ else if ( iWlanInfoArray && iWlanInfoArray->Count() )
+ {
+ CheckWlansL( iWlanInfoArray, ptr );
+ iFormattedWlanList->AppendL( ptr );
+ }
+ else
+ {
+ // no wlans available
+ FormatNoWlansAvailableL( ptr );
+ iFormattedWlanList->AppendL( ptr );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ return iFormattedWlanList;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatRefreshingL
+// --------------------------------------------------------------------------
+//
+CDesCArrayFlat* CWsfAiModel::FormatRefreshingL()
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatRefreshingL" );
+ iFormattedWlanList->Reset();
+ HBufC* item = HBufC::NewLC( KListBoxItemMaxLength );
+ TPtr ptr( item->Des() );
+
+ if ( !iStatusRefreshing )
+ {
+ iStatusRefreshing = StringLoader::LoadL(
+ R_QTN_SNIFFER_PLUG_IN_REFRESHING );
+ }
+
+ ptr.Format( KListItemFormat, ScanningOn() ?
+ iRefreshIcons[ iRefreshIndex ]
+ : EWlanOffIcon,
+ iStatusRefreshing,
+ ETransparentIcon,
+ ETransparentIcon );
+
+ iFormattedWlanList->AppendL( ptr );
+ CleanupStack::PopAndDestroy ( item );
+
+ return iFormattedWlanList;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatConnecting
+// --------------------------------------------------------------------------
+//
+CDesCArrayFlat* CWsfAiModel::FormatConnectingL()
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatConnectingL" );
+ iFormattedWlanList->Reset();
+ HBufC* item = HBufC::NewLC( KListBoxItemMaxLength );
+ TPtr ptr( item->Des() );
+
+ if ( !iStatusConnecting )
+ {
+ iStatusConnecting = StringLoader::LoadL(
+ R_QTN_SNIFFER_PLUG_IN_CONNECTING );
+ }
+
+ ptr.Format( KListItemFormat, iConnectingIcons[ iConnectingIndex ],
+ iStatusConnecting,
+ ETransparentIcon,
+ ETransparentIcon );
+
+ iFormattedWlanList->AppendL( ptr );
+ CleanupStack::PopAndDestroy ( item );
+ return iFormattedWlanList;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::AppendBrandIconsL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::AppendBrandIconsL( CAknIconArray& aIconArray )
+ {
+ LOG_ENTERFN( "CWsfAiModel::AppendBrandIconsL" );
+ iWlanInfoBranding->AppendBrandingIconsL( aIconArray );
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatHiddenWlanItemL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::FormatHiddenWlanItemL( TWsfWlanInfo& /*aWlan*/,
+ TPtr& aItem )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatHiddenWlanItemL" );
+ if ( !iManualSSIDInputting )
+ {
+ iManualSSIDInputting = StringLoader::LoadL(
+ R_QTN_WLAN_MANUAL_SSID_INPUT );
+ }
+
+ // Only Hidden WLAN text is shown.
+ // No icons for this item
+ aItem.Format( KHiddenItemFormat, iManualSSIDInputting );
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatStatusOffL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::FormatStatusOffL( TPtr& aItem )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatStatusOffL" );
+ if ( !iStatusScanningOff )
+ {
+ iStatusScanningOff = StringLoader::LoadL(
+ R_QTN_SNIFFER_PLUG_IN_SCANNING_OFF );
+ }
+
+ aItem.Format( KListItemFormat,
+ EWlanOffIcon,
+ iStatusScanningOff,
+ ETransparentIcon,
+ ETransparentIcon );
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatNoWlansAvailableL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::FormatNoWlansAvailableL( TPtr& aItem )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatNoWlansAvailableL" );
+
+ if ( !iNoWLANsAvailable )
+ {
+ iNoWLANsAvailable = StringLoader::LoadL(
+ R_QTN_STATUS_NO_WLANS_AVAILABLE );
+ }
+
+ aItem.Format( KListItemFormat,
+ ScanningOn()? EWlanOnIcon: EWlanOffIcon,
+ iNoWLANsAvailable,
+ ETransparentIcon,
+ ETransparentIcon );
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatWlanSingleLineL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::FormatWlanSingleLineL( TWsfWlanInfo& aWlan,
+ TPtr& aItem,
+ TBool aSingleLine )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatWlanSingleLineL" );
+ //Ssid as primary text
+ HBufC* ssid( NULL );
+ HBufC* formatData( NULL );
+ TInt column1Icon( 0 );
+
+ if ( aWlan.iNetworkName.Length() ) // If there is IAP
+ {
+ ssid = aWlan.GetIapNameAsUnicodeLC();
+ }
+ else // If there no IAP
+ {
+ ssid = aWlan.GetSsidAsUnicodeLC();
+ }
+
+
+ column1Icon = ETransparentIcon;
+
+ if ( aSingleLine )
+ {
+ // AI single line mode
+ if ( aWlan.Connected() )
+ {
+ column1Icon = EConnectedNWIcon;
+ }
+ else if ( aWlan.Known() )
+ {
+ column1Icon = EWlanOnIcon;
+ }
+
+ // format ssid into string '<ssid>'
+ formatData = StringLoader::LoadLC( R_SSID, *ssid, iCoeEnv );
+ }
+ else
+ {
+ // Search wlans dialog multiline mode
+
+ if ( aWlan.BrandId() )
+ {
+ column1Icon = EWlanOffIcon + aWlan.BrandId();
+ }
+ else if ( aWlan.Connected() )
+ {
+ column1Icon = EConnectedNWIcon; // qgn_prop_wlan_bearer.svg
+ }
+ else if ( aWlan.Known() )
+ {
+ column1Icon = EKnownNWIcon; // qgn_prop_wlan_bearer.svg
+ }
+ }
+
+
+ // Signal strenght for column 4
+ // No signal icon is set by default in case is SingleLine mode off
+ TInt column3Icon = aSingleLine ? ETransparentIcon:
+ ENoSignalIcon; //qgn_transparent.svg
+ TInt column4Icon = ETransparentIcon;
+
+ if ( aWlan.Connected() || !aSingleLine )
+ {
+ // Column 3
+ // Show secure icon if network is secure.
+ // By default show transparant icon.
+ column4Icon = aWlan.Secure()? ESecureNetworkIcon: ETransparentIcon;
+
+ switch ( aWlan.SignalStrength() )
+ {
+ case EPoor:
+ {
+ //qgn_indi_wlan_signal_low_add.svg
+ column3Icon = EPoorSignal;
+ break;
+ }
+ case EAverage:
+ {
+ //qgn_indi_wlan_signal_med_add.svg
+ column3Icon = EAverageSignal;
+ break;
+ }
+ case EExcelent:
+ {
+ //qgn_indi_wlan_signal_good_add.svg
+ column3Icon = EExcelentSignal;
+ break;
+ }
+
+ case ENoSignal:
+ default:
+ {
+ //qgn_indi_wlan_signal_no_wlan.svg
+ column3Icon = ENoSignalIcon;
+ break;
+ }
+ }
+ }
+
+ if ( aSingleLine )
+ {
+ aItem.Format( KListItemFormat,
+ column1Icon,
+ formatData,
+ column3Icon,
+ column4Icon );
+ CleanupStack::PopAndDestroy( formatData );
+ }
+ else
+ {
+ aItem.Format( KListItemFormat,
+ column1Icon,
+ ssid,
+ column3Icon,
+ column4Icon );
+ }
+ CleanupStack::PopAndDestroy( ssid );
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatUnknownWlansSingleLineL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::FormatUnknownWlansSingleLineL(
+ const TBool aMultipleUnknownWlans,
+ TPtr& aItem )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatUnknownWlansSingleLineL" );
+ TInt unknownItemResource = aMultipleUnknownWlans ?
+ R_QTN_SNIFFER_PLUG_IN_UNKNOWN_SSIDS_FOUND :
+ R_QTN_SNIFFER_PLUG_IN_UNKNOWN_SSID_FOUND;
+
+ HBufC* unknownWlansStatusText = iCoeEnv->AllocReadResourceLC(
+ unknownItemResource );
+
+ aItem.Format( KListItemFormat, ScanningOn()? EWlanOnIcon: EWlanOffIcon,
+ unknownWlansStatusText,
+ ETransparentIcon,
+ ETransparentIcon );
+
+ CleanupStack::PopAndDestroy( unknownWlansStatusText );
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FindPreferredKnownWlan
+// --------------------------------------------------------------------------
+//
+TInt CWsfAiModel::FindPreferredKnownWlan( CWsfWlanInfoArray* aWlanList )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FindPreferredKnownWlan" );
+ _ASS_D( aWlanList );
+ _ASS_D( aWlanList->Count() );
+
+ TWsfWlanInfo *preferred = NULL;
+ TWsfWlanInfo *temp = NULL;
+ TInt loopIndex( 0 );
+ TInt preferredIndex( 0 );
+ //loop through the list and find Max signal strength amont know wlans...
+
+ preferred = aWlanList->At( loopIndex );
+ loopIndex++;
+
+ for ( ; loopIndex < aWlanList->Count(); ++loopIndex )
+ {
+ temp = aWlanList->At( loopIndex );
+ if ( !temp->Known() )
+ {
+ // not known net any more...
+ break;
+ }
+ // check the signal strength
+ if ( temp->SignalStrength() > preferred->SignalStrength() )
+ {
+ preferredIndex = loopIndex;
+ preferred = temp;
+ }
+ }
+ return preferredIndex;
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::CheckWlansL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::CheckWlansL( CWsfWlanInfoArray* aWlanList, TPtr& aItem )
+ {
+ LOG_ENTERFN( "CWsfAiModel::CheckWlansL" );
+ _ASS_D( aWlanList );
+ _ASS_D( aWlanList->Count() );
+ // first check the connected
+ // if there's connection... it is the first item in array
+
+ if ( aWlanList->At( 0 )->Known() )
+ {
+ FormatWlanSingleLineL( *aWlanList->At( 0 ), aItem, ETrue );
+ }
+ else
+ {
+ TBool multipleUnknownWlans = ( aWlanList->Count() > 1 );
+ FormatUnknownWlansSingleLineL( multipleUnknownWlans, aItem );
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::FormatConnectedL
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::FormatConnectedL( TPtr& aItem )
+ {
+ LOG_ENTERFN( "CWsfAiModel::FormatConnectedL" );
+ // Ssid as primary text
+ FormatWlanSingleLineL( iConnectedWlanInfo, aItem, ETrue );
+ }
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::InitializeRefreshAnimation
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::InitializeRefreshAnimation()
+ {
+ LOG_ENTERFN( "CWsfAiModel::InitializeRefreshAnimation" );
+ iRefreshIndex = 0;
+ }
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::InitializeRefreshAnimation
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::InitializeConnectingAnimation()
+ {
+ LOG_ENTERFN( "CWsfAiModel::InitializeConnectingAnimation" );
+ iConnectingIndex = 0;
+ }
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::AnimateRefresh
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::AnimateRefresh()
+ {
+ LOG_ENTERFN( "CWsfAiModel::AnimateRefresh" );
+ ++iRefreshIndex %= iRefreshIcons.Count();
+ }
+
+// --------------------------------------------------------------------------
+// CWsfAiModel::AnimateRefresh
+// --------------------------------------------------------------------------
+//
+void CWsfAiModel::AnimateConnecting()
+ {
+ LOG_ENTERFN( "CWsfAiModel::AnimateConnecting" );
+ ++iConnectingIndex %= iConnectingIcons.Count();
+ }
+
+
+
+// End of file
+