diff -r f5050f1da672 -r 04becd199f91 javauis/eswt_akn/eswtapifacade/src/swtbrowseractiveapdb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/eswt_akn/eswtapifacade/src/swtbrowseractiveapdb.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,206 @@ +/* +* Copyright (c) 2007 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: THIS FILE IS NOT INCLUDED INTO ECLIPSE CVS DELIVERY +* +*/ + + +#include +#include +#include +#include + + +#include "swtbrowseractiveapdb.h" + + + +class CSwtBrowserApDbObserver + : public CBase + , public MActiveApDbObserver +{ +public: + + CSwtBrowserApDbObserver(CSwtBrowserActiveApDb* aApDb); + + ~CSwtBrowserApDbObserver(); + // From MActiveApDbObserver + + /** + * From MActiveApDbObserver + * Handle database event (refresh cached AP list on change). + * + * @param aEvent Database-related event. + * @return void. + */ + void HandleApDbEventL(MActiveApDbObserver::TEvent aEvent); + + +private: + /* + * Pointer to avtive ap database + * Not own + */ + CSwtBrowserActiveApDb* iApDb; +}; + + +CSwtBrowserApDbObserver::CSwtBrowserApDbObserver(CSwtBrowserActiveApDb* aApDb) + : iApDb(aApDb) +{ + +} + +CSwtBrowserApDbObserver::~CSwtBrowserApDbObserver() +{ + +} + + +void CSwtBrowserApDbObserver::HandleApDbEventL( + MActiveApDbObserver::TEvent aEvent) +{ + iApDb->HandleApDbEventL(aEvent); +} + + + +EXPORT_C CSwtBrowserActiveApDb* CSwtBrowserActiveApDb::NewL() +{ + CSwtBrowserActiveApDb* activeAp = new(ELeave) CSwtBrowserActiveApDb(); + CleanupStack::PushL(activeAp); + activeAp->ConstructL(); + CleanupStack::Pop(activeAp); + return activeAp; +} + +CSwtBrowserActiveApDb::~CSwtBrowserActiveApDb() +{ + if (iDb) + { + iDb->RemoveObserver(iObserver); + } + delete iObserver; + delete iCachedApList; + delete iDb; +} + + +CSwtBrowserActiveApDb::CSwtBrowserActiveApDb(): iUpdatePending(EFalse) +{ +} + + +void CSwtBrowserActiveApDb::ConstructL() +{ + iDb = CActiveApDb::NewL(EDatabaseTypeIAP); + iObserver = new(ELeave) CSwtBrowserApDbObserver(this); + iDb->AddObserverL(iObserver); + iCachedApList = new(ELeave) CApListItemList(); + iDelayedRefresh = ETrue; +} + +void CSwtBrowserActiveApDb::HandleApDbEventL(const TInt aEvent) +{ + // Refreshing AP list when: + // 1. Database changed; + // 2. Database unlocked and there is a pending update + if (aEvent == MActiveApDbObserver::EDbChanged || + (aEvent == MActiveApDbObserver::EDbAvailable && iUpdatePending)) + { + // Reefresh cached AP list. + iDelayedRefresh = ETrue; + } +} + +EXPORT_C CActiveApDb& CSwtBrowserActiveApDb::ApDb() const +{ + return *iDb; +} + + +EXPORT_C CCommsDatabase& CSwtBrowserActiveApDb::CommsDb() const +{ + return *(iDb->Database()); +} + +EXPORT_C TUint32 CSwtBrowserActiveApDb::FirstAccessPointUidL() +{ + if (iDelayedRefresh) + { + GetAccessPointsL(); + iDelayedRefresh = EFalse; + } + + if (iCachedApList->Count() > 0) + { + return (*iCachedApList)[0]->Uid(); + } + else + { + return 0; + } +} + + +void CSwtBrowserActiveApDb::GetAccessPointsL() +{ + CApListItemList* apList = new(ELeave) CApListItemList(); + CleanupStack::PushL(apList); + TRAPD(err, DoGetAccessPointsL(*apList)); + switch (err) + { + case KErrNone: + { + // Got new data. + delete iCachedApList; + CleanupStack::Pop(apList); + iCachedApList = apList; + iUpdatePending = EFalse; + break; + } + + case KErrLocked: + case KErrAccessDenied: + case KErrPermissionDenied: + { + // Could not access database. Update now pending, old data remains. + CleanupStack::PopAndDestroy(apList); + iUpdatePending = ETrue; + break; + } + + default: + { + // Other error. Propagate. + User::Leave(err); + break; + } + } +} + + +void CSwtBrowserActiveApDb::DoGetAccessPointsL(CApListItemList& aList) const +{ + CApSelect* apSelect = CApSelect::NewLC + ( + *(iDb->Database()), + KEApIspTypeAll, + EApBearerTypeAll, + KEApSortNameAscending, + EIPv4 | EIPv6 + ); + apSelect->AllListItemDataL(aList); + CleanupStack::PopAndDestroy(apSelect); +}