--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/wlaninfosorting/src/wsfwlaninfosortingblacklist.cpp Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,451 @@
+/*
+* 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 CWsfWlanInfoSortingBlackList
+*
+*/
+
+
+
+// EXTERNAL INCLUDES
+#include <StringLoader.h>
+#include <aknselectionlist.h>
+#include <aknnotewrappers.h>
+#include <utf.h>
+
+// CLASS HEADER
+#include "wsfwlaninfosortingblacklist.h"
+
+// INTERNAL INCLUDES
+#include <wsfwlaninfosorting.rsg>
+#include "wsfwlaninfoarray.h"
+#include "wsfwlanssidselectiondlg2.h"
+#include "wsflogger.h"
+
+
+/**
+* SSID array granularity
+*/
+static const TInt KIntSsidArrayGranularity = 3;
+
+/**
+* SSID blacklist table name in DB
+*/
+_LIT( KBlackListTableName,"WIZARD_BLACKLIST");
+
+/**
+* SSID column name in blacklist table
+*/
+_LIT( KBlackListTableIdColumnName,"WIZARD_BLACKLIST_SSID");
+
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::NewLC
+// ----------------------------------------------------------------------------
+//
+CWsfWlanInfoSortingBlackList* CWsfWlanInfoSortingBlackList::NewLC(
+ RDbNamedDatabase& aDatabase )
+ {
+ CWsfWlanInfoSortingBlackList* thisPtr =
+ new (ELeave) CWsfWlanInfoSortingBlackList( aDatabase );
+ CleanupStack::PushL( thisPtr );
+ thisPtr->ConstructL();
+ return thisPtr;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::NewL
+// ----------------------------------------------------------------------------
+//
+CWsfWlanInfoSortingBlackList* CWsfWlanInfoSortingBlackList::NewL(
+ RDbNamedDatabase& aDatabase )
+ {
+ CWsfWlanInfoSortingBlackList* thisPtr = NewLC( aDatabase );
+ CleanupStack::Pop( thisPtr );
+ return thisPtr;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::CWsfWlanInfoSortingBlackList
+// ----------------------------------------------------------------------------
+//
+CWsfWlanInfoSortingBlackList::CWsfWlanInfoSortingBlackList(
+ RDbNamedDatabase& aDatabase ):
+ iDefsDb( &aDatabase )
+ {
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::~CWsfWlanInfoSortingBlackList
+// ----------------------------------------------------------------------------
+//
+CWsfWlanInfoSortingBlackList::~CWsfWlanInfoSortingBlackList()
+ {
+ // free the blacklist entries...
+ if ( iBlackListSsids )
+ {
+ iBlackListSsids->Reset();
+ }
+ delete iBlackListSsids;
+
+ iBlackListSsidTable.Close();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::ConstructL()
+ {
+ CheckTableL();
+ iBlackListSsids = new (ELeave) CDesC8ArrayFlat( KIntSsidArrayGranularity );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::BlackListItemCount
+// ----------------------------------------------------------------------------
+//
+TInt CWsfWlanInfoSortingBlackList::BlackListItemCount() const
+ {
+ return iBlackListSsids->Count();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::Compare
+// ----------------------------------------------------------------------------
+//
+TInt CWsfWlanInfoSortingBlackList::Compare( const TWsfWlanInfo& /*aInfoLeft*/,
+ const TWsfWlanInfo& /*aInfoRight*/ )
+ {
+ return 0;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::SetupOnRuleMatch
+// ----------------------------------------------------------------------------
+//
+TBool CWsfWlanInfoSortingBlackList::SetupOnRuleMatch( TWsfWlanInfo& aInfoLeft )
+ {
+ // look through the ssid array - and look for a match
+ TInt rulePosition( 0 );
+
+ if ( aInfoLeft.BlackListEntry() )
+ {
+ return ETrue;
+ }
+
+ if ( iBlackListSsids->FindIsq( aInfoLeft.iSsid, rulePosition ) == 0 )
+ {
+ // the rule matches....
+ aInfoLeft.SetBlackListEntry( ETrue );
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::MarkMatchedFilterL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::MarkMatchedFilterL(
+ TWsfWlanInfo& aFilterEntry )
+ {
+ aFilterEntry.SetBlackListEntry( ETrue );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::EditFilterDefsL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::EditFilterDefsL(
+ CWsfWlanInfoArray& aInfoArray )
+ {
+ LOG_ENTERFN( "CWsfWlanInfoSortingBlackList::EditFilterDefsL" );
+
+ // ok - lets map aInfoArray contents and iBlackListSsids and build our selves
+ // a list of blacklist entries and current non sorted entries...
+
+ // first loop through the aInfoArray and ...
+
+ // make 16 bit copy of the ssid array...
+ TInt arrayItemCount( iBlackListSsids->Count() + aInfoArray.Count() );
+ if ( !arrayItemCount )
+ {
+ // there's nothing to edit
+ // just return before showing edit dialog
+ return;
+ }
+
+ LOG_WRITE( "there are items to show" );
+ CDesCArrayFlat *arrayOfItems =
+ new (ELeave) CDesCArrayFlat( arrayItemCount );
+ CleanupStack::PushL( arrayOfItems );
+
+
+ // go through the ssid's in aInfoArray and append them to the array
+ TInt wlanArrayCount( aInfoArray.Count() );
+ TWsfWlanInfo* wlanInfo( NULL );
+ TWsfWlanInfo* connectedWlan( NULL );
+ for ( TInt loopCounter( 0 ); loopCounter < wlanArrayCount; ++loopCounter )
+ {
+ wlanInfo = aInfoArray.At( loopCounter );
+
+// formerly (custfav or hidden -> does not appear in the list):
+// if ( wlanInfo->BrandId() || wlanInfo->Hidden() )
+// instead now (connected -> does not appear in the list):
+ if ( wlanInfo->Connected() )
+ {
+ connectedWlan = wlanInfo;
+ continue;
+ }
+ HBufC* ssid = wlanInfo->GetSsidAsUnicodeLC();
+ arrayOfItems->AppendL( *ssid );
+ CleanupStack::PopAndDestroy( ssid );
+ }
+
+ // simple alphabetical sort
+ arrayOfItems->Sort();
+
+ LOG_WRITE( "items added, list sorted" );
+
+
+ // now insert the already selected items onto the top
+ CArrayFix<TInt> *selectedItems = new (ELeave) CArrayFixFlat<TInt>(
+ arrayItemCount );
+ CleanupStack::PushL( selectedItems );
+
+ HBufC* connectedSsid( NULL );
+ if ( connectedWlan )
+ {
+ connectedSsid = connectedWlan->GetSsidAsUnicodeLC();
+ }
+
+ TBool connectedBlacklisted( EFalse );
+
+ TInt blackListLength( iBlackListSsids->Count() );
+ TInt index( 0 );
+ for ( TInt loopCounter( 0 ); loopCounter < blackListLength; ++loopCounter )
+ {
+ HBufC* ssidUnicode = TWsfWlanInfo::GetSsidAsUnicodeLC(
+ iBlackListSsids->MdcaPoint( loopCounter ) );
+
+ if ( !connectedWlan || ssidUnicode->Compare( *connectedSsid ) )
+ {
+ // only add the ssid to the list if it is not connected right now
+ arrayOfItems->InsertL( index, *ssidUnicode );
+ // these are already selected
+ selectedItems->AppendL( index );
+ ++index;
+ }
+ else if ( connectedWlan && !ssidUnicode->Compare( *connectedSsid ) )
+ {
+ connectedBlacklisted = ETrue;
+ }
+
+
+ CleanupStack::PopAndDestroy( ssidUnicode );
+ }
+
+ if ( !arrayOfItems->Count() )
+ {
+ // there's nothing to edit
+ // just return before showing edit dialog
+ if ( connectedWlan )
+ {
+ CleanupStack::PopAndDestroy( connectedSsid );
+ }
+
+ CleanupStack::PopAndDestroy( selectedItems );
+ CleanupStack::PopAndDestroy( arrayOfItems );
+ return;
+ }
+
+ LOG_WRITE( "creating the dialog" );
+ CWsfWlanSsidSelectionDlg2* dlg = CWsfWlanSsidSelectionDlg2::NewL(
+ *arrayOfItems, *selectedItems );
+ dlg->PrepareLC( R_QTN_PREFERRED_FILTER_SELECTION_DIALOG2 );
+
+ LOG_WRITE( "launching the dialog" );
+ if ( dlg->RunLD() )
+ {
+ LOG_WRITE( "dialog closed" );
+ // go throught the list of selected items... and store them...
+ iBlackListSsids->Reset();
+
+ TInt selectedCount( selectedItems->Count() );
+
+ for ( TInt loopCounter( 0 ); loopCounter < selectedCount; ++loopCounter )
+ {
+ TPtrC ssid = arrayOfItems->MdcaPoint( selectedItems->At(
+ loopCounter ) );
+ HBufC8* ssidUtf8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(
+ ssid );
+ CleanupStack::PushL( ssidUtf8 );
+ iBlackListSsids->AppendL( *ssidUtf8 );
+ CleanupStack::PopAndDestroy( ssidUtf8 );
+ }
+
+ if ( connectedBlacklisted )
+ {
+ HBufC8* ssidUtf8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(
+ *connectedSsid );
+ CleanupStack::PushL( ssidUtf8 );
+ iBlackListSsids->AppendL( *ssidUtf8 );
+ CleanupStack::PopAndDestroy( ssidUtf8 );
+ }
+
+ iBlackListSsids->Sort();
+ SaveDefsL();
+ }
+
+ if ( connectedWlan )
+ {
+ CleanupStack::PopAndDestroy( connectedSsid );
+ }
+
+ CleanupStack::PopAndDestroy( selectedItems );
+ CleanupStack::PopAndDestroy( arrayOfItems );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::ReadFilterDefsL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::ReadFilterDefsL()
+ {
+ RestoreDefsL();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::SaveDefsL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::SaveDefsL()
+ {
+ LOG_ENTERFN( "CWsfWlanInfoSortingBlackList::SaveDefsL" );
+
+ // clear the db-table
+ if ( iBlackListSsidTable.FirstL() != EFalse )
+ {
+ do
+ {
+ iBlackListSsidTable.DeleteL();
+ }
+ while ( iBlackListSsidTable.NextL() );
+ }
+
+ // and add the iBlackListSsids contents there....
+ TInt ssidCount( iBlackListSsids->Count() );
+
+ if ( ssidCount )
+ {
+ // there are items
+ CDbColSet* colSet = iBlackListSsidTable.ColSetL();
+ CleanupStack::PushL( colSet );
+ TDbColNo ssidColumnNumber = colSet->ColNo(
+ KBlackListTableIdColumnName );
+
+ for ( TInt i( 0 ); i < ssidCount; ++i )
+ {
+ iBlackListSsidTable.InsertL();
+ iBlackListSsidTable.SetColL( ssidColumnNumber,
+ iBlackListSsids->MdcaPoint( i ) );
+ iBlackListSsidTable.PutL();
+ }
+ CleanupStack::PopAndDestroy( colSet );
+ }
+
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::RestoreDefsL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::RestoreDefsL()
+ {
+ LOG_ENTERFN( "CWsfWlanInfoSortingBlackList::RestoreDefsL" );
+ iBlackListSsids->Reset();
+ iBlackListSsidTable.Reset();
+ // go through the table and fill the ssid array...
+ if ( iBlackListSsidTable.FirstL() )
+ {
+ CDbColSet* colSet = iBlackListSsidTable.ColSetL();
+ CleanupStack::PushL( colSet );
+ TDbColNo ssidColumnNumber = colSet->ColNo(
+ KBlackListTableIdColumnName );
+ do
+ {
+ iBlackListSsidTable.GetL();
+ iBlackListSsids->AppendL( iBlackListSsidTable.ColDes8(
+ ssidColumnNumber ) );
+ }
+ while ( iBlackListSsidTable.NextL() );
+
+ CleanupStack::PopAndDestroy( colSet );
+ // sort the array...
+ iBlackListSsids->Sort();
+
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoSortingBlackList::CheckTableL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoSortingBlackList::CheckTableL()
+ {
+ LOG_ENTERFN( "CWsfWlanInfoSortingBlackList::CheckTableL" );
+
+ TInt tableStatus = iBlackListSsidTable.Open( *iDefsDb,
+ KBlackListTableName );
+ if ( tableStatus == KErrNotFound )
+ {
+ // the table does not exist... create it
+ CDbColSet *ssidTableColumnSet = CDbColSet::NewLC();
+
+ ssidTableColumnSet->AddL( TDbCol( KBlackListTableIdColumnName,
+ EDbColText8 ) );
+
+ iDefsDb->Begin();
+ User::LeaveIfError( iDefsDb->CreateTable( KBlackListTableName,
+ *ssidTableColumnSet ) );
+ iDefsDb->Commit();
+
+ CleanupStack::PopAndDestroy( ssidTableColumnSet );
+ }
+
+ if ( tableStatus != KErrNone )
+ {
+ User::LeaveIfError( iBlackListSsidTable.Open( *iDefsDb,
+ KBlackListTableName ) );
+ }
+ }
+
+
+
+