diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlansniffer/mainapplication/src/wsfmainview.cpp --- a/wlanutilities/wlansniffer/mainapplication/src/wsfmainview.cpp Thu Aug 19 10:59:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,551 +0,0 @@ -/* -* 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 CWsfMainView. -* -*/ - -//External Includes -#include -#include -#include -#include -#include -#include -#include - -//Internal Includes -#include "wsfdocument.h" -#include "wsfwlaninfoarrayvisitor.h" -#include "wsfwlaninfoarray.h" -#include "wsfmainview.h" -#include "wsfmainviewmodel.h" -#include "wsfmainviewcontainer.h" -#include "wsfmainapplication.hrh" -#include "wsfactivewaiter.h" -#include "wsfappui.h" -#include "wsfmodel.h" - -#include "wsflogger.h" - - -// Standard construction sequence - -// --------------------------------------------------------------------------- -// CWsfMainView::NewL -// --------------------------------------------------------------------------- -// -CWsfMainView* CWsfMainView::NewL( TBool aIsEmbedded ) - { - LOG_ENTERFN( "CWsfMainView::NewL" ); - CWsfMainView* self = CWsfMainView::NewLC( aIsEmbedded ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::NewLC -// --------------------------------------------------------------------------- -// -CWsfMainView* CWsfMainView::NewLC( TBool aIsEmbedded ) - { - LOG_ENTERFN( "CWsfMainView::NewLC" ); - CWsfMainView* self = new ( ELeave ) CWsfMainView; - CleanupStack::PushL( self ); - self->ConstructL( aIsEmbedded ); - return self; - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::CWsfMainView -// --------------------------------------------------------------------------- -// -CWsfMainView::CWsfMainView(): iBrowserIapId( KErrNotFound ) - { - // no implementation required - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::~CWsfMainView -// --------------------------------------------------------------------------- -// -CWsfMainView::~CWsfMainView() - { - LOG_ENTERFN( "CWsfMainView::~CWsfMainView" ); - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - - delete iContainer; - delete iModel; - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::ConstructL -// --------------------------------------------------------------------------- -// -void CWsfMainView::ConstructL( TBool aIsEmbedded ) - { - LOG_ENTERFN( "CWsfMainView::ConstructL" ); - TInt actView( NULL ); - - if ( aIsEmbedded ) // started from CP - { - actView = R_SNIFFER_CP_MAINVIEW; - } - else - { - actView = R_SNIFFER_MAINVIEW; - } - - BaseConstructL( actView ); - iModel = CWsfMainViewModel::NewL(); - iController.SetModel( iModel ); - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::Id -// --------------------------------------------------------------------------- -// -TUid CWsfMainView::Id() const - { - return TUid::Uid( EMainViewId ); - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::HandleCommandL -// --------------------------------------------------------------------------- -// -void CWsfMainView::HandleCommandL( TInt aCommand ) - { - switch ( aCommand ) - { - case EAknSoftkeyOk: - { - break; - } - case EAknSoftkeyBack: - { - AppUi()->HandleCommandL( EAknCmdExit ); - break; - } - case EAknSoftkeyContextOptions: - { - LOG_WRITE( "CWsfMainView::HandleCommandL, Options" ); - MenuBar()->SetMenuTitleResourceId( R_SNIFFER_CONTEXT_MENUBAR ); - MenuBar()->SetMenuType( CEikMenuBar::EMenuContext ); - MenuBar()->TryDisplayMenuBarL(); - MenuBar()->SetMenuTitleResourceId( R_SNIFFER_MENUBAR ); - MenuBar()->SetMenuType( CEikMenuBar::EMenuOptions ); - break; - } - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::DoActivateL -// --------------------------------------------------------------------------- -// -void CWsfMainView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/) - { - LOG_ENTERFN( "CWsfMainView::DoActivateL" ); - if ( !iContainer ) - { - iContainer = CWsfMainViewContainer::NewL( ClientRect(), this ); - // set icons array to list - iContainer->SetMopParent( this ); - iContainer->SetPartner( iController ); - iContainer->ListBox()->SetListBoxObserver( this ); - AppUi()->AddToViewStackL( *this, iContainer ); - iController.SetContainer( iContainer ); - } - - iContainer->MakeVisible( ETrue ); - iController.RefreshL(); - MenuBar()->SetContextMenuTitleResourceId( R_SNIFFER_CONTEXT_MENUBAR ); - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::DoDeactivate -// --------------------------------------------------------------------------- -// -void CWsfMainView::DoDeactivate() - { - LOG_ENTERFN( "CWsfMainView::DoDeactivate" ); - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - iController.SetContainer( NULL ); - delete iContainer; - iContainer = NULL; - } - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::Controller -// --------------------------------------------------------------------------- -// -MWsfMainViewControllerIf& CWsfMainView::Controller() - { - return iController; - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::DynInitMenuPaneL -// --------------------------------------------------------------------------- -// -void CWsfMainView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - LOG_ENTERFN( "CWsfMainView::DynInitMenuPaneL" ); - LOG_WRITEF( "resource id = %d", aResourceId ); - iController.UpdateSelectedItemL(); - - if ( aResourceId == R_SNIFFER_MENU ) - { - LOG_WRITE( "CWsfMainView::DynInitMenuPaneL, R_SNIFFER_MENU" ); - const CWsfDocument* doc = static_cast( - AppUi()->Document() ); - TBool blacklistEmpty( !doc->WlanInfoBranding().BlackListItemCount() ); - TWsfWlanInfo *selectedItem = iController.SelectedItem(); - CWsfWlanInfoArray *infoArray = iModel->GetInfoArray(); - - TBool connecting( doc->Model().IsConnecting() ); - - if ( !selectedItem ) - { - // no real items available, but hidden item is present - aMenuPane->SetItemDimmed( ESnifferCmdStartBrowsing, EFalse ); - aMenuPane->SetItemDimmed( ESnifferCmdContinueBrowsing, ETrue ); - aMenuPane->SetItemDimmed( ESnifferCmdConnect, EFalse ); - aMenuPane->SetItemDimmed( ESnifferCmdDisconnect, ETrue ); - aMenuPane->SetItemDimmed( ESnifferCmdRefresh, connecting ); - - // dim filtering if connecting or there are no WLAN networks - // in coverage or there is only one network which is connected, - // and the filtering list does not contain any networks marked - // to be filtered out. - aMenuPane->SetItemDimmed( ESnifferCmdFilterWlans, - connecting || - !infoArray || - ( blacklistEmpty && - ( !infoArray->Count() || - ( infoArray->Count() == 1 && - (*infoArray)[0]->Connected() ) ) ) ); - aMenuPane->SetItemDimmed( ESnifferCmdDetails, ETrue ); - aMenuPane->SetItemDimmed( ESnifferCmdSettings, connecting ); - return; - } - - TBool connected( selectedItem->Connected() ); - TBool connectedAndUsed( EFalse ); - if ( connected && iBrowserIapId == selectedItem->iIapId ) - { - connectedAndUsed = ETrue; - } - TBool known( selectedItem->Known() ); - - TBool selectedItemConnecting ( - selectedItem->ConnectionStatus() == EConnecting ); - - LOG_WRITEF( "connectedAndUsed = %d", connectedAndUsed ); - LOG_WRITEF( "connected = %d", connected ); - LOG_WRITEF( "known = %d", known ); - LOG_WRITEF( "selectedItemConnecting = %d", selectedItemConnecting ); - LOG_WRITEF( "connecting = %d", connecting ); - - aMenuPane->SetItemDimmed( ESnifferCmdStartBrowsing, - connectedAndUsed || selectedItemConnecting ); - aMenuPane->SetItemDimmed( ESnifferCmdContinueBrowsing, - !connectedAndUsed || selectedItemConnecting ); - - aMenuPane->SetItemDimmed( ESnifferCmdConnect, - connected || selectedItemConnecting ); - - aMenuPane->SetItemDimmed( ESnifferCmdDisconnect, - !connected && !selectedItemConnecting); - - aMenuPane->SetItemDimmed( ESnifferCmdRefresh, connecting ); - - // dim filtering if connecting or there are no WLAN networks - // in coverage or there is only one network which is connected, - // and the filtering list does not contain any networks marked - // to be filtered out. - aMenuPane->SetItemDimmed( ESnifferCmdFilterWlans, - connecting || - !infoArray || - ( blacklistEmpty && - ( !infoArray->Count() || - ( infoArray->Count() == 1 && - (*infoArray)[0]->Connected() ) ) ) ); - - aMenuPane->SetItemDimmed( ESnifferCmdDetails, - connecting || - selectedItem->Hidden() && !known ); - aMenuPane->SetItemDimmed( ESnifferCmdSettings, connecting ); - } - else if ( aResourceId == R_SNIFFER_CONTEXT_MENU ) - { - LOG_WRITE( "CWsfMainView::DynInitMenuPaneL, R_SNIFFER_CONTEXT_MENU" ); - TWsfWlanInfo *selectedItem = iController.SelectedItem(); - - // there must be always at least one item: "Other (unlisted)..." - TBool connectedAndUsed( EFalse ); - TBool connected( EFalse ); - TBool known( EFalse ); - TBool hidden( ETrue ); - - const CWsfDocument* doc = static_cast( - AppUi()->Document() ); - - TBool connecting( doc->Model().IsConnecting() ); - TBool selectedItemConnecting( EFalse ); - - - if ( selectedItem ) - { - // workaround: even if the model reports no elements, we know that - // the hidden item must always be there - connected = selectedItem->Connected(); - if ( connected && iBrowserIapId == selectedItem->iIapId ) - { - connectedAndUsed = ETrue; - } - known = selectedItem->Known(); - hidden = selectedItem->Hidden(); - selectedItemConnecting = - ( selectedItem->ConnectionStatus() == EConnecting ); - } - - LOG_WRITEF( "connectedAndUsed = %d", connectedAndUsed ); - LOG_WRITEF( "connected = %d", connected ); - LOG_WRITEF( "known = %d", known ); - LOG_WRITEF( "selectedItemConnecting = %d", selectedItemConnecting ); - LOG_WRITEF( "connecting = %d", connecting ); - - - aMenuPane->SetItemDimmed( ESnifferCmdStartBrowsing, - connectedAndUsed || selectedItemConnecting ); - aMenuPane->SetItemDimmed( ESnifferCmdContinueBrowsing, - !connectedAndUsed || selectedItemConnecting ); - - aMenuPane->SetItemDimmed( ESnifferCmdConnect, - connected || selectedItemConnecting ); - aMenuPane->SetItemDimmed( ESnifferCmdDisconnect, - !connected && !selectedItemConnecting ); - aMenuPane->SetItemDimmed( ESnifferCmdDetails, - connecting || hidden && !known ); - } - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::HandleListBoxEventL -// --------------------------------------------------------------------------- -// -void CWsfMainView::HandleListBoxEventL( CEikListBox* /*aListBox*/, - TListBoxEvent aEventType ) - { - LOG_ENTERFN( "CWsfMainView::HandleListBoxEventL" ); - LOG_WRITEF( "aEventType = %d", aEventType ); - switch ( aEventType ) - { - case EEventEnterKeyPressed: - case EEventItemSingleClicked: - { - HandleCommandL( EAknSoftkeyContextOptions ); - } - break; - default: - break; - } - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::SelectionKeyPressed -// --------------------------------------------------------------------------- -// -void CWsfMainView::SelectionKeyPressed() - { - iSelectionKey = ETrue; - } - -// --------------------------------------------------------------------------- -// CWsfMainView::UpdateBrowserUsageInfoL -// --------------------------------------------------------------------------- -// -void CWsfMainView::UpdateBrowserUsageInfoL() - { - LOG_ENTERFN( "CWsfMainView::UpdateBrowserUsageInfoL" ); - iBrowserIapId = BrowserIapIdL(); - } - - -// --------------------------------------------------------------------------- -// CWsfMainView::BrowserIapIdL -// --------------------------------------------------------------------------- -// -TInt CWsfMainView::BrowserIapIdL() - { - LOG_ENTERFN( "CWsfMainView::BrowserIapIdL" ); - - const TInt KBrowserUid = 0x10008D39; - TUid id( TUid::Uid( KBrowserUid ) ); - - // Check if the Browser application is already running. - TApaTaskList taskList( iEikonEnv->WsSession() ); - TApaTask task = taskList.FindApp( id ); - TInt browserIapId( KErrNotFound ); - -#ifndef __WINS__ - - if ( task.Exists() ) - { - LOG_WRITE( "The Browser is running." ); - // The Browser is already running. - TWsfWlanInfo* firstItem = NULL; - - CWsfWlanInfoArray *infoArray = iModel->GetInfoArray(); - if ( infoArray ) - { - firstItem = infoArray->At( 0 ); - } - - TBool connected( EFalse ); - if( firstItem ) - { - // first item always holds the connected network - connected = firstItem->Connected(); - } - LOG_WRITEF("Selected network Connected? %d", connected); - - if ( connected ) - { - RConnectionMonitor connectionMonitor; - connectionMonitor.ConnectL(); - CleanupClosePushL( connectionMonitor ); - // We have to check if the Browser using the selected - // connection. - // We have get the connectiond ID first. - CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); - CleanupStack::PushL( waiter ); - - // first call, need to get the connection parameters - TUint connectionCount( 0 ); - - connectionMonitor.GetConnectionCount( connectionCount, - waiter->iStatus ); - waiter->WaitForRequest(); - - // find the connection with WLAN bearer - // that will be the selected WLAN - TUint connectionId( 0 ); - for ( TUint i = 1; i <= connectionCount; ++i ) - { - TUint tmpConnectionId( 0 ); - TUint subConnectionCount( 0 ); - TConnMonBearerType bearerType( EBearerUnknown ); - - connectionMonitor.GetConnectionInfo( i, - tmpConnectionId, - subConnectionCount ); - connectionMonitor.GetIntAttribute( tmpConnectionId, - 0, - KBearer, - ( TInt& )bearerType, - waiter->iStatus ); - waiter->WaitForRequest(); - if( bearerType == EBearerWLAN ) - { - connectionId = tmpConnectionId; - break; - } - } - // Now we have the connectiond ID. - LOG_WRITEF( "connectionId: %d", connectionId ); - - TConnMonClientEnumBuf clientBuf; - - connectionMonitor.GetPckgAttribute( connectionId, - 0, - KClientInfo, - clientBuf, - waiter->iStatus ); - waiter->WaitForRequest(); - TInt count( 0 ); - if ( !waiter->iStatus.Int() ) - { - count = clientBuf().iCount; - } - - RApaLsSession appSess; - TApaAppInfo appInfo; - - // The connection could be shared by several applications - User::LeaveIfError( appSess.Connect() ); - // No need for CleanupClosePushL(appSess) cause nothing leaves. - - for ( TInt i = 0; i < count; i++ ) - { - appInfo.iCaption.Zero(); - TInt result = appSess.GetAppInfo( appInfo, - clientBuf().iUid[i] ); - - LOG_WRITEF( "result: %d", result ); - LOG_WRITEF( "iClientInfo.iUid[i].iUid: %x", - clientBuf().iUid[i].iUid ); - - if ( clientBuf().iUid[i].iUid == KBrowserUid ) - { - browserIapId = firstItem->iIapId; - } - } - appSess.Close(); - - CleanupStack::PopAndDestroy( waiter ); - CleanupStack::PopAndDestroy( &connectionMonitor ); - } - } - else - { - LOG_WRITE( "No Browser running." ); - } - -#endif // __WINS__ - - LOG_WRITEF( "browserIapId: %d", browserIapId ); - return browserIapId; - } - - - -// End of file