--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/btuidelegate/btdelegatedevremove.cpp Fri Sep 03 16:17:59 2010 +0300
@@ -0,0 +1,195 @@
+/*
+* 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:
+*
+*/
+#include "btdelegatedevremove.h"
+#include "btqtconstants.h"
+#include "btuiutil.h"
+#include "btuidevtypemap.h"
+#include <QModelIndex>
+#include <btsettingmodel.h>
+#include <btdevicemodel.h>
+#include <btdelegatefactory.h>
+#include "btqtconstants.h"
+#include "btuiutil.h"
+#include <bluetoothuitrace.h>
+
+BtDelegateDevRemove::BtDelegateDevRemove(BtSettingModel* settingModel,
+ BtDeviceModel* deviceModel, QObject *parent) :
+ BtAbstractDelegate(settingModel, deviceModel, parent), mBtEngDevMan(0),
+ mOngoingBlockExec(false)
+{
+ BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+}
+
+BtDelegateDevRemove::~BtDelegateDevRemove()
+{
+ BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
+ if (mBtEngDevMan) {
+ delete mBtEngDevMan;
+ }
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+}
+
+
+/*!
+ Returns the supported editor types.
+ \return the sum of supported editor types
+ */
+int BtDelegateDevRemove::supportedEditorTypes() const
+{
+ return BtDelegate::RemoveAllRegistryDevices
+ | BtDelegate::RemovePairedDevices
+ | BtDelegate::RemoveBlockedDevices;
+}
+
+/*!
+ * Performs device deletion operation from registry based on
+ * params passed.
+ * params of type int holds the value of type DeviceRemovalType enum
+ */
+void BtDelegateDevRemove::exec( const QVariant ¶ms )
+{
+ BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
+
+ int error = 0;
+
+ if( !mBtEngDevMan) {
+ TRAP( error, (mBtEngDevMan = CBTEngDevMan::NewL( this )));
+ if (error) {
+ emitCommandComplete( KErrNoMemory );
+ BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrNoMemory );
+ return;
+ }
+ }
+ BtDelegate::EditorType editor = (BtDelegate::EditorType) params.toInt();
+ TBTRegistrySearch searchPattern;
+ switch(editor) {
+ case BtDelegate::RemoveAllRegistryDevices:
+ searchPattern.FindAll();
+ error = mBtEngDevMan->DeleteDevices(searchPattern);
+ break;
+ case BtDelegate::RemovePairedDevices:
+ searchPattern.FindBonded();
+ error = mBtEngDevMan->DeleteDevices(searchPattern);
+ break;
+ case BtDelegate::RemoveBlockedDevices:
+ mOngoingBlockExec = true;
+ if(isBlockedDeviceExists()) {
+ error = removeBlockedDevice();
+ }
+ else {
+ //No Blocked Device exists return success.
+ emitCommandComplete(0);
+ }
+ break;
+ default:
+ // error
+ BTUI_ASSERT_X(false, "BtDelegateDevRemove::exec", "Invalid Parameter");
+ }
+ if (error) {
+ // complete command with error
+ emitCommandComplete(error);
+ }
+
+
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+}
+
+int BtDelegateDevRemove::removeBlockedDevice()
+{
+ //todo:This is temporary solution, TBTRegistrySearch should support
+ //fecthing blocked devices.
+ int error = 0;
+
+ QModelIndex index = mBlockedindexList.at(0);
+ TBTDevAddr btDeviceAddr;
+ QString addrStr = (index.data(BtDeviceModel::ReadableBdaddrRole)).toString();
+ addrReadbleStringToSymbian( addrStr, btDeviceAddr );
+ TBTRegistrySearch searchPattern;
+
+ searchPattern.FindAddress(btDeviceAddr);
+ error = mBtEngDevMan->DeleteDevices(searchPattern);
+
+ return error;
+}
+
+bool BtDelegateDevRemove::isBlockedDeviceExists()
+{
+ QModelIndex start = deviceModel()->index(0,0);
+ mBlockedindexList.clear();
+ mBlockedindexList = deviceModel()->match(start,
+ BtDeviceModel::MajorPropertyRole, BtuiDevProperty::Blocked,
+ Qt::MatchContains);
+ if(mBlockedindexList.count()) {
+ return true;
+ }
+ return false;
+}
+
+void BtDelegateDevRemove::cancel()
+{
+ BOstraceFunctionEntry1( DUMMY_DEVLIST, this );
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+}
+
+void BtDelegateDevRemove::HandleDevManComplete( TInt aErr )
+{
+ BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr );
+
+ if(mOngoingBlockExec) {
+ //In this case aErr is not checked, as device removal is not
+ //updated immediately in the model. This causes unnecessary
+ //function calls as it is repeated until model is updated with
+ //blocked devices.
+ if(isBlockedDeviceExists()) {
+ int error = 0;
+ error = removeBlockedDevice();
+ if(error) {
+ emitCommandComplete(error);
+ mOngoingBlockExec = false;
+ }
+ return;
+ }
+ else {
+ mOngoingBlockExec = false;
+ }
+ }
+ emitCommandComplete(aErr);
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+
+}
+
+void BtDelegateDevRemove::HandleGetDevicesComplete( TInt aErr, CBTDeviceArray* aDeviceArray )
+{
+ BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr );
+ Q_UNUSED(aErr);
+ Q_UNUSED(aDeviceArray);
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+}
+
+void BtDelegateDevRemove::emitCommandComplete(int error)
+{
+ BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error );
+
+ emit delegateCompleted(error, this);
+ BOstraceFunctionExit1( DUMMY_DEVLIST, this );
+}
+
+
+
+
+