wlanutilities/wlanwizard/src/wlanwizardpagescanning.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 24 63be7eb3fc78
--- a/wlanutilities/wlanwizard/src/wlanwizardpagescanning.cpp	Tue Aug 31 16:18:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,511 +0,0 @@
-/*
-* Copyright (c) 2010 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: 
-* WLAN Wizard Page: Scan processing.
-*/
-
-// System includes
-#include <HbParameterLengthLimiter>
-#include <HbMainWindow>
-#include <HbDocumentLoader>
-#include <HbWidget>
-#include <HbLabel>
-#include <HbProgressBar>
-#include <cmmanagerdefines_shim.h>
-#include <wlanqtutils.h>
-#include <wlanqtutilsap.h>
-
-// User includes
-#include "wlanwizard_p.h"
-#include "wlanwizardpagescanning.h"
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "wlanwizardpagescanningTraces.h"
-#endif
-
-// Local constants
-
-/*!
- * Constructor method for the scanning view object.
- * @param [in] parent pointer to parent object.
- */
-WlanWizardPageScanning::WlanWizardPageScanning(WlanWizardPrivate* parent) :
-    WlanWizardPageInternal(parent),
-    mWidget(NULL),
-    mLabel(NULL),
-    mLoader(NULL),
-    mNextPageId(WlanWizardPage::PageNone),
-    mScanResultsAvailable(false),
-    mScanStatus(WlanQtUtils::ScanStatusOk)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_ENTRY );
-    WlanQtUtils* utils = mWizard->wlanQtUtils();
-
-    // Connect normal scan completion signal from wlanQtUtils to result
-    // handler. Connect here instead of initializePage, since this signal may
-    // need to be caught event if the window is not active.
-    bool ok = connect(
-        utils,
-        SIGNAL(wlanScanApReady(int)),
-        this,
-        SLOT(wlanScanResultPreCheck(int)));
-    
-    Q_ASSERT(ok);
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_EXIT );
-}
-
-/*!
- * Destructor. Loader widget is deleted.
- * All document widgets are deleted by wlanwizard_p destructor.
- */
-WlanWizardPageScanning::~WlanWizardPageScanning()
-{
-    OstTraceFunctionEntry0( DUP1_WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_ENTRY );
-    delete mLoader;
-    OstTraceFunctionExit0( DUP1_WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_EXIT );
-}
-
-/*!
- * Page initialization. If view is already loaded, does nothing. Inherited from
- * WlanWizardPage.
- * @return pointer to widget "occ_add_wlan_06".
- */
-HbWidget* WlanWizardPageScanning::initializePage()
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_INITIALIZEPAGE_ENTRY );
-    OstTrace0(
-        TRACE_NORMAL,
-        WLANWIZARDPAGESCANNING_INITIALIZEPAGE,
-        "WlanWizardPageScanning::initializePage");
-
-    // Next page id is reset with each initialization.    
-    mNextPageId = WlanWizardPage::PageNone;
-
-    if (mWidget == NULL) {
-        mLoader = new HbDocumentLoader(mWizard->mainWindow());
-
-        bool ok;
-
-        mLoader->load(":/docml/occ_add_wlan_06.docml", &ok);
-        Q_ASSERT(ok);
-
-        // Initialize orientation
-        loadDocmlSection(mWizard->mainWindow()->orientation());
-
-        // Load widgets
-        mWidget = qobject_cast<HbWidget*> (mLoader->findWidget(
-            "occ_add_wlan_06"));
-        Q_ASSERT(mWidget != NULL);
-
-        mLabel = qobject_cast<HbLabel*> (mLoader->findWidget("dialog"));
-        Q_ASSERT(mLabel != NULL);
-
-        WlanQtUtils* utils = mWizard->wlanQtUtils();
-
-        // Connect orientation signal from the main window to orientation
-        // loader.
-        ok = connect(
-            mWizard->mainWindow(),
-            SIGNAL(orientationChanged(Qt::Orientation)),
-            this,
-            SLOT(loadDocmlSection(Qt::Orientation)));
-        Q_ASSERT(ok);
-
-        // Connect direct scan completion signal from wlanQtUtils to result
-        // handler.
-        ok = connect(
-            utils,
-            SIGNAL(wlanScanDirectReady(int)),
-            this,
-            SLOT(wlanScanDirectReady(int)));
-        Q_ASSERT(ok);
-    }
-
-    mLabel->setPlainText(HbParameterLengthLimiter(
-        "txt_occ_dialog_searching").arg(mWizard->configuration(
-            WlanWizardPrivate::ConfSsid).toString()));
-
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_INITIALIZEPAGE_EXIT );
-    return mWidget;
-}
-
-/*!
- * Sends the user to the next page.
- * @param [out] removeFromStack is always true: this page is removed from the 
- * stacked widget after "Next" button is pressed.
- * @return the id value of the next page.
- */
-int WlanWizardPageScanning::nextId(bool &removeFromStack) const
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_NEXTID_ENTRY );
-    removeFromStack = true;
-
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_NEXTID_EXIT );
-    return mNextPageId;
-}
-
-/*!
- * This function reimplements WlanWizardPage::previousTriggered. When going
- * back from scanning view, the ongoing scan operation is also stopped. Since
- * there is no need to react to following the acknowledgement signal from
- * wlanQtUtils, the corresponding handler slots are disconnected before the
- * opration and immediately connected again.
- * @return one step backwards value.
- */
-int WlanWizardPageScanning::previousTriggered()
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_PREVIOUSTRIGGERED_ENTRY );
-    disconnect(this, SLOT(wlanScanDirectReady(int)));
-    disconnect(this, SLOT(wlanScanResultPreCheck(int)));
-    
-    WlanQtUtils* utils = mWizard->wlanQtUtils();
-    
-    utils->stopWlanScan();
-
-    bool ok = connect(
-        utils,
-        SIGNAL(wlanScanApReady(int)),
-        this,
-        SLOT(wlanScanResultPreCheck(int)));
-    Q_ASSERT(ok);
-    
-    ok = connect(
-        utils,
-        SIGNAL(wlanScanDirectReady(int)),
-        this,
-        SLOT(wlanScanDirectReady(int)));
-    Q_ASSERT(ok);
-    
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_PREVIOUSTRIGGERED_EXIT );
-    return OneStepBackwards;
-    
-}
-
-/*!
- * This method is overrides the default implementation from WlanWizardPage.
- * It indicates whether the Next-button should be enabled or not. It also resets
- * the ConfProcessSettings-configuration to false - meaning that if no scan
- * results are available, no iap is created.
- * @return always false - the scanning proceeds to next window
- * automatically or not at all.
- */
-bool WlanWizardPageScanning::showPage()
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_SHOWPAGE_ENTRY );
-    mWizard->setConfiguration(WlanWizardHelper::ConfProcessSettings, false);
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_SHOWPAGE_EXIT );
-    return false;
-}
-
-/*!
- * Reimplements the default function in WlanWizardPage. Indicates to the
- * framework that startOperation() function must be executed.
- * @return true
- * @see WlanWizardPage
- */
-bool WlanWizardPageScanning::requiresStartOperation()
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_REQUIRESSTARTOPERATION_ENTRY );
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_REQUIRESSTARTOPERATION_EXIT );
-    return true;
-}
-
-/*!
- * Wlan scan is performed as a "post-initialization" which is executed in a
- * separate scheduler loop. If scan results are available, starts reading them.
- */
-void WlanWizardPageScanning::startOperation()
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_STARTOPERATION_ENTRY );
-    OstTrace0( TRACE_NORMAL, WLANWIZARDPAGESCANNING_STARTOPERATION,
-        "WlanWizardPageScanning::startOperation - start AP scan if results"
-        " are available." );
-
-    if (mScanResultsAvailable) {
-        mScanResultsAvailable = false;
-        wlanScanApReady();
-    }
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_STARTOPERATION_EXIT );
-}
-
-/*!
- * Loads the document orientation information from occ_add_wlan_06.docml
- * This is called each time phone orientation changes.
- * @param [in] orientation indicates whether the phone is in portrait or
- * landscape mode.
- */
-void WlanWizardPageScanning::loadDocmlSection(Qt::Orientation orientation)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_LOADDOCMLSECTION_ENTRY );
-    OstTrace1( TRACE_NORMAL, WLANWIZARDPAGESCANNING_LOADDOCML,
-        "WlanWizardPageScanning::loadDocml - orientation ;orientation=%x",
-        ( TUint )( orientation ) );
-
-    WlanWizardPageInternal::loadDocmlSection(
-        mLoader,
-        orientation,
-        ":/docml/occ_add_wlan_06.docml", 
-        "portrait_section",
-        "landscape_section");
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_LOADDOCMLSECTION_EXIT );
-}
-
-/*!
- * Checks whether the view is active. If it is, execute wlanScanApReady. If
- * not, set mScanResultsAvailable to true.
- * @param [in] scanStatus indicates whether the scan was succesful, cancelled of
- * failed. The argument is saved to a member variable.
- */
-void WlanWizardPageScanning::wlanScanResultPreCheck(int scanStatus)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK_ENTRY );
-    mScanStatus = scanStatus;
-    
-    if (!mWidget) {
-        OstTrace1( TRACE_BORDER, WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK,
-            "WlanWizardPageScanning::wlanScanResultPreCheck no widget;this=%x",
-            this );
-
-        mScanResultsAvailable = true;
-    } else {
-        if (mWizard->isCurrentPage(mWidget)) {
-            OstTrace0( TRACE_BORDER,
-                DUP1_WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK,
-                "WlanWizardPageScanning::wlanScanResultPreCheck go to results");
-
-            wlanScanApReady();
-        } else {
-            OstTrace0( TRACE_BORDER,
-                DUP2_WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK,
-                "WlanWizardPageScanning::wlanScanResultPreCheck"
-                " not current widget" );
-
-            mScanResultsAvailable = true;
-        }
-    }
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK_EXIT );
-}
-
-/*!
- * Processes the direct scan results.
- * @param [in] scanStatus indicates whether the scan was succesful, canceled or
- * failed. In case the scan was not succesful, always proceed to manual wizard.
- */
-void WlanWizardPageScanning::wlanScanDirectReady(int scanStatus)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_WLANSCANDIRECTREADY_ENTRY );
-    OstTrace0( TRACE_NORMAL, WLANWIZARDPAGESCANNING_WLANSCANDIRECTREADY,
-        "WlanWizardPageScanning::wlanScanDirectReady" );
-
-    WlanQtUtils* utils = mWizard->wlanQtUtils();
-
-    Q_ASSERT(utils);
-
-    QList<WlanScanResult> filteredResults;
-
-    if (scanStatus == WlanQtUtils::ScanStatusOk) {
-        QList<QSharedPointer<WlanQtUtilsAp> > directScanResults;
-        // Read the directed scan results from Qt Utils
-        utils->availableWlanAps(directScanResults);
-
-        // Identify open and hidden networks.
-        getFinalScanResults(directScanResults, mWlanApList, filteredResults);
-    }
-
-    // Process the scan results. If scan status is not ok, feed an empty
-    // result table to the selection function.
-    selectNextPageActions(filteredResults);
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_WLANSCANDIRECTREADY_EXIT );
-}
-
-/*!
- * All wlan channels have been scanned for public networks. After processing the
- * results a direct scan is initiated. This function also checks whether the
- * scan was succesful, canceled or failed. In case the scan was not succesful,
- * always proceed to manual wizard.
- */
-void WlanWizardPageScanning::wlanScanApReady()
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_WLANSCANAPREADY_ENTRY );
-    OstTrace0( TRACE_NORMAL, WLANWIZARDPAGESCANNING_WLANSCANAPREADY,
-        "WlanWizardPageScanning::wlanScanApReady" );
-
-    if (mScanStatus == WlanQtUtils::ScanStatusOk) {
-        WlanQtUtils* utils = mWizard->wlanQtUtils();
-        Q_ASSERT(utils);
-
-        QList<QSharedPointer<WlanQtUtilsAp> > openScanResults;
-
-        // Fetch the list of scan results.
-        utils->availableWlanAps(openScanResults);
-
-        // The name of the network that we are looking for.
-        QString ssid =
-            mWizard->configuration(WlanWizardPrivate::ConfSsid).toString();
-
-        // Store matching scan results.
-        getSsidMatchList(ssid, openScanResults);
-
-        // Next directed scan.
-        utils->scanWlanDirect(ssid);
-    }
-    else {
-        mWizard->clearConfiguration(WlanWizardHelper::ConfAvailableNetworkOptions);
-        mNextPageId = WlanWizardPageInternal::PageNetworkMode;
-        mWizard->nextPage();
-    }
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_WLANSCANAPREADY_EXIT );
-}
-
-/*!
- * This function stores all the APs that match ssid parameter to mWlanApList
- * member list.
- * @param [in] ssid is the name of the network we are interested in.
- * @param [in] matchList is the list of all APs that were revealed in the scan.
- */
-void WlanWizardPageScanning::getSsidMatchList(
-    QString ssid,
-    const QList<QSharedPointer<WlanQtUtilsAp> > &matchList)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_GETSSIDMATCHLIST_ENTRY );
-    mWlanApList.clear();
-    QSharedPointer<WlanQtUtilsAp> item;
-
-    for (int i = 0; i < matchList.size(); i++) {
-        item = matchList.at(i);
-        if (item->value(WlanQtUtilsAp::ConfIdSsid).toString() == ssid) {
-            mWlanApList.append(item);
-        }
-    }
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_GETSSIDMATCHLIST_EXIT );
-}
-
-/*
- * Find out which of the direct scan results are open networks by comparing
- * result to open scan results. Return finalResults.
- * @param [in] directScanResults are the results of a directed scan.
- * @param [in] openScanResults are the results of a scan inquiring any APs.
- * @param [out] finalResults is a list of APs with visibility flag included.
- */
-void WlanWizardPageScanning::getFinalScanResults(
-    const QList<QSharedPointer<WlanQtUtilsAp> > &directScanResults,
-    const QList<QSharedPointer<WlanQtUtilsAp> > &openScanResults,
-    QList<WlanScanResult> &finalResults)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_GETFINALSCANRESULTS_ENTRY );
-    finalResults.clear();
-
-    // The key assumption of this algorithm is that both direct and public scan
-    // reveal the same set of AP:s with the exception of hidden AP:s.
-    // In other words: Direct scan result set is the whole set with each AP 
-    // marked as hidden by default. If an AP has been revealed also by public
-    // scan, it is changed to visible.
-    for (int i = 0; i < directScanResults.size(); i++) {
-        WlanScanResult resultItem;
-
-        resultItem.scanResult = directScanResults.at(i);
-        
-        // Initialize as hidden.
-        resultItem.networkHidden = true;
-         
-        for (int j = 0; j < openScanResults.size(); j++) {
-            if (WlanQtUtilsAp::compare(
-                openScanResults.at(j).data(), 
-                directScanResults.at(i).data()) == 0) {
-                // Mark open, if a public scan revealed the same AP
-                resultItem.networkHidden = false;
-            }
-        }
-
-        finalResults.append(resultItem);
-    }
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_GETFINALSCANRESULTS_EXIT );
-}
-
-/*!
- * This function processes the scan results in case multiple results were
- * acquired with matching SSIDs.
- * @param [in] finalResults is the list of APs revealed by the last scans.
- * @return the identifier of the next page.
- */
-int WlanWizardPageScanning::processMultipleScanResults(
-    const QList<WlanScanResult> &finalResults)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_PROCESSMULTIPLESCANRESULTS_ENTRY );
-    WlanWizardScanList networkOptions;
-    int nextPage;
-
-    // Build the list of results to be placed in the configuration.
-    networkOptions.build(finalResults);
-    
-    QVariant tmp;
-    tmp.setValue(networkOptions);
-
-    mWizard->setConfiguration(
-        WlanWizardHelper::ConfAvailableNetworkOptions, tmp);
-
-    if (networkOptions.wpsSelected()) {
-        // In case all available network mode options support wps, go directly
-        // to wps-wizard.
-        nextPage = WlanWizardPageInternal::PageWpsStart;
-    } else if (networkOptions.netModes() > SingleResult) {
-        // If there are more than one network mode choices, go to manual selection
-        // of network mode.
-        nextPage = WlanWizardPageInternal::PageNetworkMode;
-    } else {
-        // if only a single network mode option is available, the mode query
-        // may be skipped and the next page is set to security mode query.
-        WlanNetworkSetting setting = networkOptions.getNetModes().at(0);
-        mWizard->setConfiguration(WlanWizardHelper::ConfNetworkMode, setting.mode);
-        mWizard->setConfiguration(WlanWizardHelper::ConfWlanScanSSID, setting.hidden);
-        mWizard->setConfiguration(WlanWizardHelper::ConfWpsSupported, setting.wpsSupported);
-        nextPage = WlanWizardPageInternal::PageNetworkSecurity;
-    }
-    
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_PROCESSMULTIPLESCANRESULTS_EXIT );
-    return nextPage;
-}
-
-/*!
- * This function decides what to do with the scan results.
- * @param [in] finalResults is the list of APs revealed by the last scans.
- */
-void WlanWizardPageScanning::selectNextPageActions(
-    const QList<WlanScanResult> &finalResults)
-{
-    OstTraceFunctionEntry0( WLANWIZARDPAGESCANNING_SELECTNEXTPAGEACTIONS_ENTRY );
-    mWizard->clearConfiguration(WlanWizardHelper::ConfAvailableNetworkOptions);
-    
-    if (finalResults.isEmpty()) {
-        // In case of no results at all were found.
-        mNextPageId = WlanWizardPageInternal::PageNetworkMode;
-    } else if (finalResults.size() == SingleResult) {
-        // In case there is only a single result.
-        WlanScanResult item = finalResults.first();
-        mNextPageId = mWizard->getNextPageId(
-            item.scanResult->value(WlanQtUtilsAp::ConfIdSsid).toString(),
-            item.scanResult->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt(),
-            item.scanResult->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt(),
-            item.scanResult->value(WlanQtUtilsAp::ConfIdWpaPskUse).toBool(),
-            item.networkHidden,
-            item.scanResult->value(WlanQtUtilsAp::ConfIdWpsSupported).toBool());
-    } else {
-        // In case more than one result is available.
-        mWizard->setConfiguration(WlanWizardHelper::ConfProcessSettings, true);
-        mNextPageId = processMultipleScanResults(finalResults);
-    }
-
-    mWizard->nextPage();
-    OstTraceFunctionExit0( WLANWIZARDPAGESCANNING_SELECTNEXTPAGEACTIONS_EXIT );
-}