# HG changeset patch # User hgs # Date 1283519879 -10800 # Node ID 5ebadcda06cb42025b6f9895edf656855b53dd18 # Parent 625f43ae93626235ee6fbc6985ede9e698771b95 201035_7 diff -r 625f43ae9362 -r 5ebadcda06cb atcommands/lccustomplugin/inc/lccustomplugin.h --- a/atcommands/lccustomplugin/inc/lccustomplugin.h Fri Aug 06 16:43:21 2010 +0300 +++ b/atcommands/lccustomplugin/inc/lccustomplugin.h Fri Sep 03 16:17:59 2010 +0300 @@ -140,7 +140,7 @@ * EReplyTypeUndefined. * @return None */ - virtual TInt CreateReplyAndComplete( TATExtensionReplyType aReplyType, + virtual void CreateReplyAndComplete( TATExtensionReplyType aReplyType, const TDesC8& aSrcBuffer=KNullDesC8, TInt aError=KErrNone ) = 0; @@ -379,7 +379,7 @@ * EReplyTypeUndefined. * @return None */ - TInt CreateReplyAndComplete( TATExtensionReplyType aReplyType, + void CreateReplyAndComplete( TATExtensionReplyType aReplyType, const TDesC8& aSrcBuffer=KNullDesC8, TInt aError=KErrNone ); diff -r 625f43ae9362 -r 5ebadcda06cb atcommands/lccustomplugin/src/lccustomplugin.cpp --- a/atcommands/lccustomplugin/src/lccustomplugin.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/atcommands/lccustomplugin/src/lccustomplugin.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -241,14 +241,18 @@ TRACE_FUNC_EXIT return KErrNotFound; } - aDstBuffer.Create( iReplyBuffer, partLength ); - iReplyBuffer.Delete( 0, partLength ); + aDstBuffer.Close(); + TInt err = aDstBuffer.Create( iReplyBuffer, partLength ); + if (!err) + { + iReplyBuffer.Delete( 0, partLength ); + } if ( iReplyBuffer.Length() == 0 ) { iReplyBuffer.Close(); } TRACE_FUNC_EXIT - return KErrNone; + return err; } // --------------------------------------------------------------------------- @@ -256,46 +260,40 @@ // request to ATEXT. Uses iReplyBuffer for reply storage. // --------------------------------------------------------------------------- // -TInt CLcCustomPlugin::CreateReplyAndComplete( TATExtensionReplyType aReplyType, +void CLcCustomPlugin::CreateReplyAndComplete( TATExtensionReplyType aReplyType, const TDesC8& aSrcBuffer, TInt aError ) { TRACE_FUNC_ENTRY iReplyBuffer.Close(); - if ( aError != KErrNone ) - { - HandleCommandCompleted( aError, EReplyTypeUndefined ); - iHcCmd = NULL; - iHcReply = NULL; - TRACE_FUNC_EXIT - return KErrNone; - } - if ( !iHcReply ) - { - TRACE_FUNC_EXIT - return KErrGeneral; - } - switch ( aReplyType ) - { - case EReplyTypeOther: - iReplyBuffer.Create( aSrcBuffer ); - break; - case EReplyTypeOk: - CreateOkOrErrorReply( iReplyBuffer, ETrue ); - break; - case EReplyTypeError: - CreateOkOrErrorReply( iReplyBuffer, EFalse ); - break; - default: - TRACE_FUNC_EXIT - return KErrGeneral; - } - CreatePartOfReply( *iHcReply ); - HandleCommandCompleted( KErrNone, aReplyType ); + ASSERT(iHcReply); + if ( !aError ) + { + switch ( aReplyType ) + { + case EReplyTypeOther: + aError = iReplyBuffer.Create( aSrcBuffer ); + break; + case EReplyTypeOk: + aError = CreateOkOrErrorReply( iReplyBuffer, ETrue ); + break; + case EReplyTypeError: + aError = CreateOkOrErrorReply( iReplyBuffer, EFalse ); + break; + default: + aError = KErrGeneral; + } + } + if ( !aError ) + { + aError = CreatePartOfReply( *iHcReply ); + } + iHcCmd = NULL; iHcReply = NULL; + + HandleCommandCompleted( aError, aError ? EReplyTypeUndefined : aReplyType ); TRACE_FUNC_EXIT - return KErrNone; } // --------------------------------------------------------------------------- diff -r 625f43ae9362 -r 5ebadcda06cb atcommands/modematplugin/group/modematplugin.mmp --- a/atcommands/modematplugin/group/modematplugin.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/atcommands/modematplugin/group/modematplugin.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -40,7 +40,7 @@ SYSTEMINCLUDE /epoc32/include/ecom -LIBRARY ECom.lib +LIBRARY ecom.lib LIBRARY euser.lib LIBRARY atextpluginbase.lib LIBRARY etelmm.lib diff -r 625f43ae9362 -r 5ebadcda06cb atcommands/modematplugin/inc/cmdpluginobserver.h --- a/atcommands/modematplugin/inc/cmdpluginobserver.h Fri Aug 06 16:43:21 2010 +0300 +++ b/atcommands/modematplugin/inc/cmdpluginobserver.h Fri Sep 03 16:17:59 2010 +0300 @@ -58,7 +58,7 @@ * EReplyTypeUndefined. * @return None */ - virtual TInt CreateReplyAndComplete( TATExtensionReplyType aReplyType, + virtual void CreateReplyAndComplete( TATExtensionReplyType aReplyType, const TDesC8& aSrcBuffer=KNullDesC8, TInt aError=KErrNone ) = 0; diff -r 625f43ae9362 -r 5ebadcda06cb atcommands/modematplugin/inc/modematplugin.h --- a/atcommands/modematplugin/inc/modematplugin.h Fri Aug 06 16:43:21 2010 +0300 +++ b/atcommands/modematplugin/inc/modematplugin.h Fri Sep 03 16:17:59 2010 +0300 @@ -270,7 +270,7 @@ * EReplyTypeUndefined. * @return None */ - TInt CreateReplyAndComplete( TATExtensionReplyType aReplyType, + void CreateReplyAndComplete( TATExtensionReplyType aReplyType, const TDesC8& aSrcBuffer=KNullDesC8, TInt aError=KErrNone ); diff -r 625f43ae9362 -r 5ebadcda06cb atcommands/modematplugin/src/modematplugin.cpp --- a/atcommands/modematplugin/src/modematplugin.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/atcommands/modematplugin/src/modematplugin.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -246,14 +246,18 @@ TRACE_FUNC_EXIT return KErrNotFound; } - aDstBuffer.Create( iReplyBuffer, partLength ); - iReplyBuffer.Delete( 0, partLength ); + aDstBuffer.Close(); + TInt err = aDstBuffer.Create( iReplyBuffer, partLength ); + if ( !err ) + { + iReplyBuffer.Delete( 0, partLength ); + } if ( iReplyBuffer.Length() == 0 ) { iReplyBuffer.Close(); } TRACE_FUNC_EXIT - return KErrNone; + return err; } // --------------------------------------------------------------------------- @@ -261,46 +265,40 @@ // request to ATEXT. Uses iReplyBuffer for reply storage. // --------------------------------------------------------------------------- // -TInt CModemAtPlugin::CreateReplyAndComplete( TATExtensionReplyType aReplyType, +void CModemAtPlugin::CreateReplyAndComplete( TATExtensionReplyType aReplyType, const TDesC8& aSrcBuffer, TInt aError ) { TRACE_FUNC_ENTRY iReplyBuffer.Close(); - if ( aError != KErrNone ) - { - HandleCommandCompleted( aError, EReplyTypeUndefined ); - iHcCmd = NULL; - iHcReply = NULL; - TRACE_FUNC_EXIT - return KErrNone; - } - if ( !iHcReply ) - { - TRACE_FUNC_EXIT - return KErrGeneral; - } - switch ( aReplyType ) + ASSERT(iHcReply); + if ( !aError ) { - case EReplyTypeOther: - iReplyBuffer.Create( aSrcBuffer ); - break; - case EReplyTypeOk: - CreateOkOrErrorReply( iReplyBuffer, ETrue ); - break; - case EReplyTypeError: - CreateOkOrErrorReply( iReplyBuffer, EFalse ); - break; - default: - TRACE_FUNC_EXIT - return KErrGeneral; + switch ( aReplyType ) + { + case EReplyTypeOther: + aError = iReplyBuffer.Create( aSrcBuffer ); + break; + case EReplyTypeOk: + aError = CreateOkOrErrorReply( iReplyBuffer, ETrue ); + break; + case EReplyTypeError: + aError = CreateOkOrErrorReply( iReplyBuffer, EFalse ); + break; + default: + TRACE_FUNC_EXIT + aError = KErrGeneral; + } } - CreatePartOfReply( *iHcReply ); - HandleCommandCompleted( KErrNone, aReplyType ); + + if ( !aError ) + { + aError = CreatePartOfReply( *iHcReply ); + } iHcCmd = NULL; iHcReply = NULL; + HandleCommandCompleted( aError, aError ? EReplyTypeUndefined : aReplyType ); TRACE_FUNC_EXIT - return KErrNone; } // --------------------------------------------------------------------------- diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btaudioman/group/btaudioman.mmp --- a/bluetoothengine/btaudioman/group/btaudioman.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btaudioman/group/btaudioman.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -52,7 +52,7 @@ SOURCE basrvaccfwconn.cpp USERINCLUDE ../inc -SYSTEMINCLUDE ../../inc ../../../inc +SYSTEMINCLUDE ../../inc MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib @@ -64,7 +64,7 @@ LIBRARY btmanclient.lib LIBRARY btengdevman.lib LIBRARY centralrepository.lib -LIBRARY AccPolicy.lib +LIBRARY accpolicy.lib #ifdef PRJ_USE_STUB LIBRARY sdpagent_stub.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btaudioman/group/btaudiomanclient.mmp --- a/bluetoothengine/btaudioman/group/btaudiomanclient.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btaudioman/group/btaudiomanclient.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -41,7 +41,7 @@ SOURCE BTAccInfoRequester.cpp USERINCLUDE ../inc -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE ../../inc /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btaudioman/src/basrvaccstateattach.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstateattach.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btaudioman/src/basrvaccstateattach.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -108,7 +108,8 @@ { Parent().AccMan().ListenAudioRequestL(); Parent().AccMan().PluginMan().AccInUse(); - Parent().ChangeStateL(CBasrvAccStateAttached::NewL(Parent(), !iConnecting)); + // we always show connect/disconnect notes regardless of the initiator + Parent().ChangeStateL(CBasrvAccStateAttached::NewL(Parent(), ETrue)); } else { diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btaudiostreamer/group/btaudiostreamer.mmp --- a/bluetoothengine/btaudiostreamer/group/btaudiostreamer.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btaudiostreamer/group/btaudiostreamer.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -30,11 +30,11 @@ SOURCE btaudiostreamsendersbc.cpp USERINCLUDE ../inc -SYSTEMINCLUDE ../../inc ../../../inc +SYSTEMINCLUDE ../../inc MW_LAYER_SYSTEMINCLUDE -LIBRARY EUSER.LIB // user library -LIBRARY ESOCK.LIB // socket services +LIBRARY euser.lib // user library +LIBRARY esock.lib // socket services LIBRARY rtp.lib // RTP implementation LIBRARY efsrv.lib // file server LIBRARY bluetooth.lib // TBTSockAddr diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btctrldcmoadapter/group/btctrldcmoadapter.mmp --- a/bluetoothengine/btctrldcmoadapter/group/btctrldcmoadapter.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btctrldcmoadapter/group/btctrldcmoadapter.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -27,6 +27,8 @@ MW_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets +SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore USERINCLUDE ../inc @@ -42,5 +44,7 @@ LIBRARY euser.lib LIBRARY ecom.lib LIBRARY efsrv.lib -LIBRARY commonengine.lib +LIBRARY CommonEngine.lib LIBRARY btfeatures.lib +LIBRARY HbCore.lib +LIBRARY HbWidgets.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btctrldcmoadapter/src/btctrldcmoadapter.cpp --- a/bluetoothengine/btctrldcmoadapter/src/btctrldcmoadapter.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btctrldcmoadapter/src/btctrldcmoadapter.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -17,20 +17,32 @@ * ============================================================================== */ -#include -#include #include -#include +#include #include #include "btctrldcmoadapter.h" + +// ---------------------------------------------------------------------- + +#ifndef DBG +#ifdef _DEBUG +#define DBG(a) a +#else +#define DBG(a) +#endif +#endif + +// ---------------------------------------------------------------------- + _LIT(KBluetoothDcmoPanicName, "BT DCMO Adapter"); _LIT( KBluetoothControlProperty, "Bluetooth" ); _LIT( KDisableBluetoothDescription, "Used to enable/disable the Bluetooth connectivity." ); // Description -_LIT( KRuntimeResourceFileName, "z:dcmo.rsc" ); +_LIT( KdcmoResourceFileName, "deviceupdates_" ); +_LIT( KdcmoResourceFilePath, "z:/resource/qt/translations/" ); TDCMOStatus CBluetoothCtrlDcmoAdapter::MapFeatureControlError(TInt aErrorCode) { @@ -234,22 +246,10 @@ void CBluetoothCtrlDcmoAdapter::GetLocalizedNameL(HBufC*& aLocName) { - TFileName* fileName = new(ELeave) TFileName; - CleanupStack::PushL(fileName); - TParse* parseObj = new(ELeave) TParse(); - CleanupStack::PushL(parseObj); - User::LeaveIfError(parseObj->Set(KRuntimeResourceFileName(), &KDC_RESOURCE_FILES_DIR, NULL)); - *fileName = parseObj->FullName(); - CleanupStack::PopAndDestroy(parseObj); - - CStringResourceReader* resReader = CStringResourceReader::NewL(*fileName); - CleanupStack::PushL(resReader); - - TPtrC buf; - buf.Set(resReader->ReadResourceString(R_DM_RUN_TIME_VAR_BLUETOOTH)); - aLocName = buf.AllocL() ; - - CleanupStack::PopAndDestroy(2,fileName); //resReader,fileName + TBool result = HbTextResolverSymbian::Init(KdcmoResourceFileName, KdcmoResourceFilePath ); + _LIT(KTextBluetooth, "txt_device_update_info_bluetooth"); + aLocName = HbTextResolverSymbian::LoadL(KTextBluetooth); + DBG(RDebug::Print(aLocName->Des())); } void CBluetoothCtrlDcmoAdapter::Panic(TBluetoothDcmoPanic aPanic) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bteng/data/backup_registration.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/bteng/data/backup_registration.xml Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,5 @@ + + + + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bteng/group/bld.inf --- a/bluetoothengine/bteng/group/bld.inf Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bteng/group/bld.inf Fri Sep 03 16:17:59 2010 +0300 @@ -40,6 +40,8 @@ ../data/btrfs.txt z:/resource/btrfs.txt +../data/backup_registration.xml z:/private/10005950/backup_registration.xml + PRJ_MMPFILES bteng.mmp diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bteng/group/btbearer.mmp --- a/bluetoothengine/bteng/group/btbearer.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bteng/group/btbearer.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -42,7 +42,6 @@ MW_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE ../../../inc SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore LIBRARY euser.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bteng/group/btpsmplugin.mmp --- a/bluetoothengine/bteng/group/btpsmplugin.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bteng/group/btpsmplugin.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -41,7 +41,6 @@ SYSTEMINCLUDE ../../inc //for private API headers (BluetoothEngine subsystem) -SYSTEMINCLUDE ../../../inc //for internal API headers (localconnectivity) SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bteng/rom/bteng.iby --- a/bluetoothengine/bteng/rom/bteng.iby Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bteng/rom/bteng.iby Fri Sep 03 16:17:59 2010 +0300 @@ -32,6 +32,7 @@ data=ZPRIVATE\10003A3F\APPS\bttoggle_reg.rsc Private\10003a3f\apps\bttoggle_reg.rsc data=DATAZ_\RESOURCE_FILES_DIR\btengsdp.rsc RESOURCE_FILES_DIR\btengsdp.rsc data=DATAZ_\RESOURCE_FILES_DIR\btrfs.txt RESOURCE_FILES_DIR\btrfs.txt +data=ZPRIVATE\10005950\backup_registration.xml private\10005950\backup_registration.xml ECOM_PLUGIN( btbearer.dll, btbearer.rsc ) ECOM_PLUGIN( btrfsplugin.dll, btrfsplugin.rsc ) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/bthidengplugin/group/bthidengplugin.mmp --- a/bluetoothengine/bthid/bthidengplugin/group/bthidengplugin.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/bthidengplugin/group/bthidengplugin.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -34,7 +34,6 @@ USERINCLUDE ../../bthidserver/inc MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../inc START RESOURCE ../data/2001E308.rss TARGET bthidengplugin.rsc diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/bthidkbdsettings/group/bthidkbdsettings.mmp --- a/bluetoothengine/bthid/bthidkbdsettings/group/bthidkbdsettings.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/bthidkbdsettings/group/bthidkbdsettings.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -53,7 +53,7 @@ #ifdef __SERIES60_HELP SYSTEMINCLUDE /epoc32/include/cshelp #endif -SYSTEMINCLUDE ../../../../inc ../../../inc +SYSTEMINCLUDE ../../../inc //***********ECOM resource definition****************** //--Ecom resource TARGET name must be same as DLL name, diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/bthidkbdsettings/group/bthidsettings.mmp --- a/bluetoothengine/bthid/bthidkbdsettings/group/bthidsettings.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/bthidkbdsettings/group/bthidsettings.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -34,7 +34,7 @@ MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../inc ../../../inc +SYSTEMINCLUDE ../../../inc LIBRARY euser.lib LIBRARY ecom.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/bthidserver/group/bthidserver.mmp --- a/bluetoothengine/bthid/bthidserver/group/bthidserver.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/bthidserver/group/bthidserver.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -34,7 +34,6 @@ USERINCLUDE ../../bthidkbdsettings/inc MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../inc SOURCEPATH ../../common/src SOURCE genericserver.cpp diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/keyboard/group/keyboard.mmp --- a/bluetoothengine/bthid/keyboard/group/keyboard.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/keyboard/group/keyboard.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -43,7 +43,6 @@ MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../inc SOURCEPATH ../data START RESOURCE hidkeyboard.rss diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/layouts/group/kbdlayout.mmp --- a/bluetoothengine/bthid/layouts/group/kbdlayout.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/layouts/group/kbdlayout.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -48,7 +48,6 @@ USERINCLUDE ../../common/inc MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../inc SOURCEPATH ../data START RESOURCE kbdlayout.rss diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/manager/group/layoutmgr.mmp --- a/bluetoothengine/bthid/manager/group/layoutmgr.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/manager/group/layoutmgr.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -46,7 +46,6 @@ MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../inc LIBRARY euser.lib LIBRARY ecom.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/bthid/mouse/hidmousedriver/group/mouse.mmp --- a/bluetoothengine/bthid/mouse/hidmousedriver/group/mouse.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/bthid/mouse/hidmousedriver/group/mouse.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,6 @@ MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE ../../../../../inc SOURCEPATH ../data START RESOURCE hidmouse.rss diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/group/ATCodec.mmp --- a/bluetoothengine/btmac/group/ATCodec.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/group/ATCodec.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -33,7 +33,7 @@ SOURCE atcparam.cpp USERINCLUDE ../inc/atcodec ../common -SYSTEMINCLUDE ../../inc ../../../inc +SYSTEMINCLUDE ../../inc MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/group/BTMAC.mmp --- a/bluetoothengine/btmac/group/BTMAC.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/group/BTMAC.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -54,7 +54,7 @@ SOURCE btmpagescanparametersmanager.cpp USERINCLUDE ../inc/btmac ../common -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE ../../inc /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE LIBRARY ecom.lib LIBRARY euser.lib @@ -69,10 +69,10 @@ LIBRARY bluetooth.lib LIBRARY BTMonoCmdHandler.lib #endif -LIBRARY atcodec.lib +LIBRARY ATCodec.lib LIBRARY btdevice.lib // BT Device -LIBRARY BAFL.lib // Des array +LIBRARY bafl.lib // Des array LIBRARY btengdiscovery.lib #ifdef PRJ_FILE_TRACE diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/group/BTMonoCmdHandler.mmp --- a/bluetoothengine/btmac/group/BTMonoCmdHandler.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/group/BTMonoCmdHandler.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -54,8 +54,7 @@ USERINCLUDE ../inc/btmonocmdhandler USERINCLUDE ../common -USERINCLUDE ../../inc -USERINCLUDE ../../../inc +USERINCLUDE ../../inc #ifdef NO101APPDEPFIXES APP_LAYER_SYSTEMINCLUDE @@ -76,7 +75,7 @@ #ifdef __PROTOCOL_CDMA LIBRARY etelcdma.lib #endif -LIBRARY BAFL.lib +LIBRARY bafl.lib LIBRARY btengdiscovery.lib #ifdef PRJ_FILE_TRACE LIBRARY flogger.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/group/btmonobearer.mmp --- a/bluetoothengine/btmac/group/btmonobearer.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/group/btmonobearer.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -38,7 +38,7 @@ SOURCE playercontrolistener.cpp USERINCLUDE ../inc/btmonobearer ../common -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE ../../inc /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/inc/btmac/btmrfcommsock.h --- a/bluetoothengine/btmac/inc/btmac/btmrfcommsock.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/inc/btmac/btmrfcommsock.h Fri Sep 03 16:17:59 2010 +0300 @@ -106,14 +106,6 @@ * @return the BD address */ const TBTDevAddr& Remote() const; - - /** - * Requests for master role - * - * @since S60 v3.1 - * @return the completion error code - */ - TInt RequestMasterRole(); /** * Activates the notification of baseband events diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/src/btmac/btmrfcommsock.cpp --- a/bluetoothengine/btmac/src/btmac/btmrfcommsock.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/src/btmac/btmrfcommsock.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -170,19 +170,6 @@ return iRemote; } -TInt CBtmRfcommSock::RequestMasterRole() - { - TRACE_FUNC - TRACE_ASSERT(iDataSocket, EBTPanicNullPointer) - TUint32 basebandState = 0; - TInt err = iDataSocket->PhysicalLinkState( basebandState ); - if (!err && (basebandState & ENotifySlave)) - { - err = iDataSocket->RequestMasterRole(); - } - return err; - } - TBool CBtmRfcommSock::IsInSniff() const { return iInSniff; @@ -244,7 +231,8 @@ if (aErr == KErrNone) { iInData.ReAllocL(256); - RequestMasterRole(); + // Previously a request to become piconet master was made here, for IOP reasons this + // was removed (as theoretically being a piconet master is not required for HFP/HSP AG). TInt err = iAda.Open(iServer, iRemote); TRACE_INFO((_L("ada.Open err %d"), err)) iDataSocket->ActivateBasebandEventNotifier(ENotifyAnyPowerMode | ENotifyAnyRole | @@ -275,7 +263,8 @@ if (aErr == KErrNone) { iInData.ReAllocL(256); - RequestMasterRole(); + // Previously a request to become piconet master was made here, for IOP reasons this + // was removed (as theoretically being a piconet master is not required for HFP/HSP AG). TInt err = iAda.Open(iServer, iRemote); TRACE_INFO((_L("ada.Open err %d"), err)) iDataSocket->ActivateBasebandEventNotifier(ENotifyAnyPowerMode | ENotifyAnyRole | diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/src/btmac/btmsaudio.cpp --- a/bluetoothengine/btmac/src/btmac/btmsaudio.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/src/btmac/btmsaudio.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-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" @@ -110,6 +110,13 @@ void CBtmsAudio::SyncLinkDisconnectCompleteL(TInt /*aErr*/) { + // Need to delete the socket _now_ as the destructor is called from an async + // callback and that is too late - the listener RSocket owned by iSco needs + // to be shut down before the ChangeStateL() call below because Entry actions + // in Ctrl/Sniffm open a new one. + delete iSco; + iSco = NULL; + CBtmsInuse* next; if (iRfcomm->IsInSniff()) next = CBtmsSniffm::NewL(Parent(), SwapStateRfcommSock(), NULL); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btmac/src/btmac/btmsyncsock.cpp --- a/bluetoothengine/btmac/src/btmac/btmsyncsock.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btmac/src/btmac/btmsyncsock.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-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" @@ -70,7 +70,7 @@ TRACE_FUNC_ENTRY iScoAcceptor = TScoAcceptor(this); iSco->SetNotifier(iScoAcceptor); - iSco->AcceptConnection(TBTSyncPackets(KScoPacketTypeSpec)); + User::LeaveIfError(iSco->AcceptConnection(TBTSyncPackets(KScoPacketTypeSpec))); if (aAllowEsco) { iESco_Acceptor = TScoAcceptor(this); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/btdevicedialogplugin.pro --- a/bluetoothengine/btnotif/btdevicedialogplugin/btdevicedialogplugin.pro Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/btdevicedialogplugin.pro Fri Sep 03 16:17:59 2010 +0300 @@ -36,7 +36,8 @@ inc/btdevicedialogplugintrace.h \ inc/btdevicedialogrecvquerywidget.h \ inc/btrecvprgrsdialogwidget.h \ - inc/btrecvcompleteddialogwidget.h + inc/btrecvcompleteddialogwidget.h \ + inc/btdeviceinfowidget.h SOURCES += src/btdevicedialogplugin.cpp \ @@ -48,7 +49,8 @@ src/btsenddialogwidget.cpp \ src/btdevicedialogrecvquerywidget.cpp \ src/btrecvprgrsdialogwidget.cpp \ - src/btrecvcompleteddialogwidget.cpp + src/btrecvcompleteddialogwidget.cpp \ + src/btdeviceinfowidget.cpp RESOURCES += btdevicedialogplugin.qrc @@ -64,7 +66,7 @@ -lxqserviceutil \ hblib.sources = Hb.dll - hblib.path = \sys\bin + hblib.path = /sys/bin hblib.depends = "(0xEEF9EA38), 1, 0, 0, {\"Hb\"}" pluginstub.sources = $${TARGET}.dll pluginstub.path = /resource/plugins/devicedialogs diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-device-search-dialog.docml --- a/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-device-search-dialog.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-device-search-dialog.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,25 +1,25 @@ - + - + - + - + - + - - + + @@ -29,36 +29,36 @@ - + - - + + - + - - + + - - - + + + - + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-more-devices-dialog.docml --- a/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-more-devices-dialog.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-more-devices-dialog.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,36 +1,36 @@ - + - + - + - + - - - + + + - + - - + + - + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-receive-auth-dialog.docml --- a/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-receive-auth-dialog.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-receive-auth-dialog.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,25 +1,25 @@ - + - + - - - + + + - - - - + + + + @@ -45,13 +45,13 @@ - + - - + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-receive-done-dialog.docml --- a/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-receive-done-dialog.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-receive-done-dialog.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,24 +1,24 @@ - + - + - - - + + + - - - + + + @@ -36,26 +36,26 @@ - - + + - + - - + + - - + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-recv-progress-dialog.docml --- a/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-recv-progress-dialog.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-recv-progress-dialog.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,24 +1,24 @@ - + - + - - - + + + - - - + + + @@ -36,16 +36,16 @@ - - + + - - + + @@ -57,22 +57,22 @@ - + - + - - - + + + - - + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-send-dialog.docml --- a/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-send-dialog.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/docml/bt-send-dialog.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,33 +1,33 @@ - + - + - - - + + + - - - - - + + + + + - + - + @@ -35,16 +35,16 @@ - - - - - - + + + + + + - - + + @@ -56,13 +56,13 @@ - + - - + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialoginputwidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialoginputwidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialoginputwidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -29,10 +29,8 @@ \class BtDeviceDialogInputWidget \brief Widget class with properties setting. - BtDeviceDialogInputWidget, inherited from HbInputDialog, - implements interface HbDeviceDialogInterface. The Q_Properties - here are interfaces for caller of HbDeviceDialog to configue - what to be shown in the widget. + BtDeviceDialogInputWidget, inherited from HbDeviceDialogInterface , + uses HbInputDialog. */ class BtDeviceDialogInputWidget : diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialognotifwidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialognotifwidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialognotifwidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -30,10 +30,8 @@ \class BtDeviceDialogNotifWidget \brief Widget class with properties setting. - BtDeviceDialogQueryWidget, inherited from HbNotificationDialog, - implements interface HbDeviceDialogInterface. The Q_Properties - here are interfaces for caller of HbDeviceDialog to configue - what to be shown in the widget. + BtDeviceDialogNotifWidget, inherited from HbDeviceDialogInterface, + uses HbNotificationDialog. */ class BtDeviceDialogNotifWidget : diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogplugin.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogplugin.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogplugin.h Fri Sep 03 16:17:59 2010 +0300 @@ -70,6 +70,7 @@ BtDeviceDialogPluginPrivate *d; HbTranslator* mDialogTranslator; HbTranslator* mViewTranslator; + HbTranslator* mCommonErrorsTranslator; }; #endif // BTDEVICEDIALOGPLUGIN_P_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogquerywidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogquerywidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogquerywidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -29,10 +29,8 @@ \class BtDeviceDialogQueryWidget \brief Widget class with properties setting. - BtDeviceDialogQueryWidget, inherited from HbMessageBox, - implements interface HbDeviceDialogInterface. The Q_Properties - here are interfaces for caller of HbDeviceDialog to configue - what to be shown in the widget. + BtDeviceDialogQueryWidget, inherited from HbDeviceDialogInterface, + implemented using HbMessageBox. */ class BtDeviceDialogQueryWidget : @@ -62,6 +60,7 @@ void processParam(const QVariantMap ¶meters); bool constructQueryDialog(const QVariantMap ¶meters); void resetProperties(); + QString& GetPasskeyEntryStatusString(int aStatus); private: Q_DISABLE_COPY(BtDeviceDialogQueryWidget) @@ -69,6 +68,9 @@ int mLastError; int mSendAction; bool mShowEventReceived; + QString mDisplayPasskeyStatus; + bool mSendPasskeyEntryCompletedAction; + int mDispPassKeyNumDigit; HbMessageBox *mMessageBox; }; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogrecvquerywidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogrecvquerywidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogrecvquerywidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -66,9 +66,9 @@ HbLabel *mDeviceName; HbLabel *mDeviceType; HbLabel *mDeviceIcon; - HbAction *mYes; - HbAction *mNo; - HbCheckBox *mCheckBox; + HbAction *mYesAction; + HbAction *mNoAction; + HbCheckBox *mAuthorizeUser; HbDialog *mDialog; Q_DISABLE_COPY(BTRecvQueryDialogWidget) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogutils.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogutils.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicedialogutils.h Fri Sep 03 16:17:59 2010 +0300 @@ -15,8 +15,8 @@ * */ -#ifndef BTDEVICESDIALOGUTILS_H -#define BTDEVICESDIALOGUTILS_H +#ifndef BTDEVICEDIALOGUTILS_H +#define BTDEVICEDIALOGUTILS_H #include #include @@ -57,4 +57,4 @@ } -#endif /*BTDEVICESDIALOGUTILS_H*/ +#endif /* BTDEVICEDIALOGUTILS_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdeviceinfowidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdeviceinfowidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2009 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: + * + */ + + +#ifndef BTDEVICEINFOWIDGET_H +#define BTDEVICEINFOWIDGET_H + +#include +#include +#include +#include + + +class BtDeviceInfoWidget : public QObject, public HbDeviceDialogInterface + { + Q_OBJECT + +public: + BtDeviceInfoWidget(const QVariantMap ¶meters); + ~BtDeviceInfoWidget(); + +public: // from HbDeviceDialogInterface + bool setDeviceDialogParameters(const QVariantMap ¶meters); + int deviceDialogError() const; + void closeDeviceDialog(bool byClient); + HbPopup *deviceDialogWidget() const; + QObject* signalSender() const; + +signals: + void deviceDialogClosed(); + void deviceDialogData(QVariantMap data); + +private: + bool constructDialog(const QVariantMap ¶meters); + +public slots: + void messageBoxClosed(HbAction *action); + void messageBoxClosed(int action); + +private: + HbMessageBox* mMessageBox; + int mLastError; + + Q_DISABLE_COPY(BtDeviceInfoWidget) + }; + +#endif /* BTDEVICEINFOWIDGET_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicesearchdialogwidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicesearchdialogwidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btdevicesearchdialogwidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -33,16 +33,6 @@ #include #include "btdevicedialogutils.h" - - -/*struct device - { - QString mDeviceName; - QString mDeviceType; - int mDeviceIdx; - };*/ - - class BTDeviceSearchDialogWidget : public QObject, public HbDeviceDialogInterface { @@ -61,10 +51,8 @@ public slots: void stopRetryClicked(); - void retryClicked(); void viewByClicked(); void deviceSelected(const QModelIndex& modelIndex); -// void viewByItemSelected(int index); void selectionDialogClosed(HbAction *action); void searchDialogClosed(); @@ -87,26 +75,15 @@ private: HbDocumentLoader *mLoader; - /** - * - * item model for content list view. - */ - QStandardItemModel* mContentItemModel; HbSelectionDialog *mQuery; -// QList mDeviceTypeList; QStringList mDevTypeList; -// QList mDeviceList; - HbListView* mListView; + HbListView* mDeviceList; HbLabel* mSearchLabel; HbLabel* mSearchIconLabel; HbLabel* mSearchDoneLabel; -// bool mViewByChosen; -// QList mDeviceLstOfType; -// int mDeviceLstIdx; int mSelectedDeviceType; -// int mDeviceDialogData; HbDialog *mSearchDevicesDialog; HbAction *mStopRetryAction; HbAction *mShowAction; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btmoredevicesdialogwidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btmoredevicesdialogwidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btmoredevicesdialogwidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -52,11 +52,6 @@ private: bool constructDialog(const QVariantMap ¶meters); - // void hideEvent(QHideEvent *event); - // void showEvent(QShowEvent *event); - QIcon icon(/*QString deviceType*/); - // void setMajorProperty( -// BtSendDataItem& qtdev, int prop, bool addto); signals: void deviceDialogClosed(); @@ -64,18 +59,10 @@ private: HbDocumentLoader *mLoader; - int mDeviceDialogData; - HbDialog *mMoreDeviceDialog; + HbDialog *mLastUsedDeviceDialog; HbAction *mMoreAction; HbAction *mCancelAction; - - /** - * - * item model for content list view. - */ - QStandardItemModel* mContentItemModel; - BtSendDataSource mData; Q_DISABLE_COPY(BTMoreDevicesDialogWidget) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/inc/btrecvcompleteddialogwidget.h --- a/bluetoothengine/btnotif/btdevicedialogplugin/inc/btrecvcompleteddialogwidget.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/inc/btrecvcompleteddialogwidget.h Fri Sep 03 16:17:59 2010 +0300 @@ -16,8 +16,8 @@ */ -#ifndef BTRECVCOMPLETEDDIALOGWIDGET_H_ -#define BTRECVCOMPLETEDDIALOGWIDGET_H_ +#ifndef BTRECVCOMPLETEDDIALOGWIDGET_H +#define BTRECVCOMPLETEDDIALOGWIDGET_H #include #include @@ -76,14 +76,15 @@ HbLabel *mFileName; HbLabel *mFileSize; HbLabel *mFileCount; - HbAction *mShow; - HbAction *mCancel; - HbDialog *mDialog; + HbAction *mShowAction; + HbAction *mCancelAction; + HbDialog *mReceiveCompleteDialog; int mFileSz; + bool mOpenConversationView; Q_DISABLE_COPY(BTRecvcompletedDialogWidget) }; -#endif /* BTRECVCOMPLETEDDIALOGWIDGET_H_ */ +#endif /* BTRECVCOMPLETEDDIALOGWIDGET_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialoginputwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialoginputwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialoginputwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -138,7 +138,7 @@ // Numeric value only mInputDialog->setInputMode(HbInputDialog::RealInput); title = QString(hbTrId("txt_bt_title_pairing_with_1")); - // todo: Fixe the multiline problem + // todo: Fix the multiline problem prompt = QString( hbTrId( "txt_bt_dialog_please_enter_the_passcode_for_1" ) ); } else { @@ -165,7 +165,7 @@ QRegExp(regExp, Qt::CaseInsensitive), validator ),""); mInputDialog->setValidator(validator); }else{ - // Minimum requirement is to have at least 1 digit + // Minimum requirement is to have at least 1 digit regExp = tr("^\\d{1,}$"); HbValidator* validator = new HbValidator(mInputDialog->lineEdit()); validator->addField( @@ -173,7 +173,7 @@ QRegExp(regExp, Qt::CaseInsensitive), validator ),""); mInputDialog->setValidator(validator); } - // replace % with the miniLength and device name + // replace % with the minimum length and device name int repls = prompt.count( QString( "%" ) ); if ( repls > 1 ) { prompt = prompt.arg( param.toString() ); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialognotifwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialognotifwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialognotifwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -23,6 +23,8 @@ #include #include "btdevicedialogpluginerrors.h" #include +#include + /*! class Constructor */ @@ -125,7 +127,7 @@ { TRACE_ENTRY QString keyStr, prompt,title; - QVariant classOfDevice; + QVariant classOfDevice, notifType; keyStr.setNum( TBluetoothDialogParams::EResource ); // Validate if the resource item exists. QVariantMap::const_iterator i = parameters.constFind( keyStr ); @@ -135,6 +137,8 @@ return; } HbIcon icon; + QString textStr; + QString devName; QVariant param = parameters.value( keyStr ); int key = param.toInt(); switch ( key ) { @@ -158,6 +162,87 @@ prompt = QString( hbTrId( "txt_bt_dpopinfo_is_now_hidden" ) ); mNotificationDialog->setIcon(HbIcon("qtg_large_bluetooth")); break; + case EGenericInfo: + { + notifType = parameters.value(QString::number( TBluetoothDeviceDialog::EAdditionalInt )); + int type = notifType.toInt(); + switch (notifType.toInt()) + { + case EBTConnected: + title = QString(hbTrId( "txt_bt_dpophead_connected" )); + prompt = QString( hbTrId( "txt_bt_dpopinfo_connected_to_1" ) ); + classOfDevice = parameters.value(QString::number( TBluetoothDeviceDialog::EDeviceClass )); + icon = getBadgedDeviceTypeIcon(classOfDevice.toInt()); + mNotificationDialog->setIcon(icon); + break; + case EBTClosed: + title = QString(hbTrId( "txt_bt_dpophead_disconnected" )); + prompt = QString( hbTrId( "txt_bt_dpopinfo_disconnected_from_1" ) ); + classOfDevice = parameters.value(QString::number( TBluetoothDeviceDialog::EDeviceClass )); + icon = getBadgedDeviceTypeIcon(classOfDevice.toInt()); + mNotificationDialog->setIcon(icon); + break; + case EBTDisconnected: + case EBTDeviceNotAvailable: + case EBTOfflineDisabled: + case EBTEnterSap: + case EBTSapOk: + case EBTSapFailed: + case EBTSapNoSim: + case EBTDeviceBusy: + case ECmdShowBtBatteryLow: + case ECmdShowBtBatteryCritical: + case EBTStayPowerOn: + break; + case EBTSwitchedOn: + title = QString(hbTrId("txt_bt_dpophead_bluetooth")); + prompt = QString(hbTrId("txt_bt_dpopinfo_is_now_on")); + icon = QString("qtg_large_bluetooth"); + mNotificationDialog->setIcon(icon); + break; + case EBTSwitchedOff: + title = QString(hbTrId("txt_bt_dpophead_bluetooth")); + prompt = QString(hbTrId("txt_bt_dpopinfo_is_now_off")); + icon = QString("qtg_large_bluetooth"); + mNotificationDialog->setIcon(icon); + break; + // not used anymore? + case EIRNotSupported: + case EBTVisibilityTimeout: + case EBTAudioAccessory: + case EBTAudioHandset: + default: + break; + } + break; + } + case EBluetoothTestMode: + title = QString(hbTrId("txt_bt_dpophead_bluetooth_test_mode")); + prompt = QString(hbTrId("txt_bt_dpopinfo_restart_to_exit")); + icon = QString("qtg_large_bluetooth"); + mNotificationDialog->setIcon(icon); + break; + + case ESendCompleted: + title = QString(hbTrId("txt_bt_dpophead_all_files_sent")); + textStr = QString(hbTrId("txt_bt_dpopinfo_sent_to_1")); + devName = QString(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); + prompt = QString(textStr.arg(devName)); + icon = getBadgedDeviceTypeIcon(parameters.value( + QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble()); + mNotificationDialog->setIcon(icon); + break; + + /*case ESendCancelled: + title = QString(hbTrId("txt_bt_dpophead_sending_cancelled")); + textStr = QString(hbTrId("txt_bt_dpopinfo_sent_to_1")); + devName = QString(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); + prompt = QString(textStr.arg(devName)); + icon = getBadgedDeviceTypeIcon(parameters.value(QString::number( + TBluetoothDeviceDialog::EDeviceClass)).toDouble()); + mNotificationDialog->setIcon(icon); + break;*/ + default: mLastError = ParameterError; break; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogplugin.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogplugin.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogplugin.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -32,12 +32,14 @@ #include "btsenddialogwidget.h" #include "btdevicedialogrecvquerywidget.h" #include "btrecvcompleteddialogwidget.h" +#include "btdeviceinfowidget.h" #include Q_EXPORT_PLUGIN2(btdevicedialogplugin, BtDeviceDialogPlugin) const char* BTDIALOG_TRANSLATION = "btdialogs"; -const char* BTVIEW_TRANSLATION = "btviews"; +const char* BTVIEW_TRANSLATION = "btviews"; +const char* COMMON_ERRORS_TRANSLATION = "common_errors"; // This plugin implements one device dialog type static const struct { @@ -65,7 +67,7 @@ BtDeviceDialogPlugin Constructor */ BtDeviceDialogPlugin::BtDeviceDialogPlugin(): - mDialogTranslator(0),mViewTranslator(0) + mDialogTranslator(0),mViewTranslator(0),mCommonErrorsTranslator(0) { d = new BtDeviceDialogPluginPrivate; } @@ -78,6 +80,7 @@ delete d; delete mDialogTranslator; delete mViewTranslator; + delete mCommonErrorsTranslator; } /*! @@ -114,6 +117,11 @@ { mViewTranslator = new HbTranslator(BTVIEW_TRANSLATION); } + if(!mCommonErrorsTranslator) + { + mCommonErrorsTranslator = new HbTranslator(COMMON_ERRORS_TRANSLATION); + } + // verify that requested dialog type is supported const int numTypes = sizeof(noteInfos) / sizeof(noteInfos[0]); for(i = 0; i < numTypes; i++) { @@ -233,6 +241,9 @@ case TBluetoothDialogParams::EReceiveDone: deviceDialog = new BTRecvcompletedDialogWidget(parameters); break; + case TBluetoothDialogParams::EInformationDialog: + deviceDialog = new BtDeviceInfoWidget(parameters); + break; default: d->mError = UnknownDeviceDialogError; break; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogquerywidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogquerywidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogquerywidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -23,6 +23,9 @@ #include #include #include "btdevicedialogpluginerrors.h" +#include + +const int MaxPasskeyLength = 6; /*! class Constructor @@ -111,6 +114,48 @@ TRACE_EXIT return true; } +/*! + Take parameter values and generate the input status string + */ +QString& BtDeviceDialogQueryWidget::GetPasskeyEntryStatusString(int aStatus) + { + switch(aStatus) + { + case EPasskeyDigitEntered : + mDispPassKeyNumDigit ++; // keep count of remote entry + if(mDisplayPasskeyStatus.length()< MaxPasskeyLength + 1) // + 1 space + { + if(mDisplayPasskeyStatus.length()== 3) + { + mDisplayPasskeyStatus.append(tr(" ")); // cosmetic + } + mDisplayPasskeyStatus.append(tr("*")); + } + break; + case EPasskeyDigitDeleted : + // passkey entry is limited to 6 digits + if((mDisplayPasskeyStatus.length()> 0 )&& (mDispPassKeyNumDigit < MaxPasskeyLength + 1)) + { + if(mDisplayPasskeyStatus.length() == 5) // cosmetic + { + mDisplayPasskeyStatus = mDisplayPasskeyStatus.left(mDisplayPasskeyStatus.length()-1); + } + mDisplayPasskeyStatus = mDisplayPasskeyStatus.left(mDisplayPasskeyStatus.length()-1); + // we only decrement if the string is not zero + mDispPassKeyNumDigit --; + } + break; + case EPasskeyCleared : + case EPasskeyEntryStarted : + case EPasskeyEntryCompleted : + default: + mDispPassKeyNumDigit = 0; + mDisplayPasskeyStatus.clear(); + mDisplayPasskeyStatus.append(tr("")); + break; + } + return mDisplayPasskeyStatus; + } /*! Take parameter values and generate relevant property of this widget @@ -119,7 +164,8 @@ { TRACE_ENTRY QString keyStr, prompt,title; - QVariant name,param,addval; + int status = -1; + QVariant name,param,addval,passkeyinputstatus; keyStr.setNum( TBluetoothDialogParams::EResource ); // Validate if the resource item exists. QVariantMap::const_iterator i = parameters.constFind( keyStr ); @@ -128,7 +174,10 @@ mLastError = UnknownDeviceDialogError; return; } - + // For passkey display the dialog may be terminated by + // a passkey entry completed event from the remote side + mSendPasskeyEntryCompletedAction = false; + param = parameters.value( keyStr ); int key = param.toInt(); switch ( key ) { @@ -164,11 +213,18 @@ // todo: Formating the prompt need to be discussed with UI designer // The passcode could be displayed on a separate row if it the label did support // the use of newline escape character. - prompt.append(tr("\n\n")); // insert 2 newlines for clarity + prompt.append(tr("\n")); // insert 1 newlines for clarity prompt.append(addval.toString()); if(key == EPasskeyDisplay) { - prompt.append("\n"); + prompt.append("\n"); + bool ret = false; + passkeyinputstatus = parameters.value( QString::number( TBluetoothDeviceDialog::EAdditionalInt )); + status = passkeyinputstatus.toInt(&ret); + if(ret) + { + prompt.append(GetPasskeyEntryStatusString(status)); + } } } } @@ -179,7 +235,14 @@ title = title.arg(name.toString()); mMessageBox->setHeadingWidget(new HbLabel(title)); mMessageBox->setIconVisible(false); - mMessageBox->setStandardButtons( HbMessageBox::Yes | HbMessageBox::No); + if(key == EPasskeyDisplay) + { + mMessageBox->setStandardButtons(HbMessageBox::Cancel); + } + else + { + mMessageBox->setStandardButtons( HbMessageBox::Yes | HbMessageBox::No); + } } else { @@ -193,6 +256,11 @@ } } mMessageBox->setText( prompt ); + if(status == EPasskeyEntryCompleted && key == EPasskeyDisplay) + { + mSendPasskeyEntryCompletedAction = true; + mMessageBox->close(); + } TRACE_EXIT } @@ -207,6 +275,7 @@ mMessageBox->setTimeout(HbDialog::NoTimeout); mMessageBox->setDismissPolicy(HbDialog::NoDismiss); mSendAction = true; + mDispPassKeyNumDigit = 0; TRACE_EXIT return; } @@ -214,19 +283,38 @@ void BtDeviceDialogQueryWidget::messageBoxClosed(HbAction* action) { + TRACE_ENTRY QVariantMap data; HbMessageBox *dlg=static_cast(sender()); - if(dlg->actions().first() == action) { - //Yes - data.insert( QString( "result" ), QVariant(true)); - } - else if(dlg->actions().at(1) == action) { + if(dlg->actions().first() == action) + { + if(dlg->actions().count() > 1) + { + data.insert( QString( "result" ), QVariant(true)); + } + else + { + // this is a passkey display dialog with a cancel button + data.insert( QString( "result" ), QVariant(false)); + } + } + else if(dlg->actions().count() > 1) + { + if(dlg->actions().at(1) == action) { //No data.insert( QString( "result" ), QVariant(false)); + } } - + if(mSendPasskeyEntryCompletedAction) + { + // complete successfully the dialog + // The BT stack will determine if pairing was ok + data.insert( QString( "result" ), QVariant(true)); + mSendPasskeyEntryCompletedAction = false; + } emit deviceDialogData(data); emit deviceDialogClosed(); mSendAction = false; + TRACE_EXIT } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogrecvquerywidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogrecvquerywidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicedialogrecvquerywidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -53,6 +53,7 @@ { Q_UNUSED(byClient); mDialog->close(); + emit deviceDialogClosed(); } HbPopup* BTRecvQueryDialogWidget::deviceDialogWidget() const @@ -73,8 +74,8 @@ mLoader->load(DOCML_BT_RECV_QUERY_DIALOG, &ok); if(ok) { - mDialog = qobject_cast(mLoader->findWidget("senddialog")); - mHeading = qobject_cast(mLoader->findWidget("heading")); + mDialog = qobject_cast(mLoader->findWidget("receiveAuthorizationDialog")); + mHeading = qobject_cast(mLoader->findWidget("receiveAuthorizationHeading")); mDeviceName = qobject_cast(mLoader->findWidget("deviceName")); mDeviceType = qobject_cast(mLoader->findWidget("deviceType")); @@ -87,10 +88,10 @@ mDeviceName->setPlainText(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); mDeviceType->setPlainText(getDeviceTypeString(classOfDevice)); - mYes = qobject_cast(mLoader->findObject("yesaction")); - mNo = qobject_cast(mLoader->findObject("noaction")); + mYesAction = qobject_cast(mLoader->findObject("yesAction")); + mNoAction = qobject_cast(mLoader->findObject("noAction")); - mCheckBox = qobject_cast(mLoader->findWidget("checkbox")); + mAuthorizeUser = qobject_cast(mLoader->findWidget("authorizeUser")); int dialogType = parameters.value(QString::number(TBluetoothDialogParams::EDialogTitle)).toInt(); switch(dialogType) @@ -103,17 +104,17 @@ case TBluetoothDialogParams::EReceiveFromPairedDevice: { mHeading->setPlainText(hbTrId("txt_bt_title_receive_messages_from_paired_device")); - mCheckBox->setCheckState(Qt::Checked); + mAuthorizeUser->setCheckState(Qt::Checked); }break; case TBluetoothDialogParams::EConnect: { mHeading->setPlainText(hbTrId("txt_bt_title_connect_to")); - mCheckBox->setCheckState(Qt::Checked); + mAuthorizeUser->setCheckState(Qt::Checked); }break; case TBluetoothDialogParams::EPairingRequest: mHeading->setPlainText(hbTrId("txt_bt_title_pair_with")); - mCheckBox->setCheckState(Qt::Checked); + mAuthorizeUser->setCheckState(Qt::Checked); break; default: break; @@ -126,9 +127,9 @@ mDialog->setDismissPolicy(HbPopup::NoDismiss); mDialog->setTimeout(HbPopup::NoTimeout); - connect(mYes, SIGNAL(triggered()), this, SLOT(yesClicked())); - connect(mNo, SIGNAL(triggered()), this, SLOT(noClicked())); - connect(mCheckBox, SIGNAL(clicked(bool)), this, SLOT(checkBoxStateChanged(bool))); + connect(mYesAction, SIGNAL(triggered()), this, SLOT(yesClicked())); + connect(mNoAction, SIGNAL(triggered()), this, SLOT(noClicked())); + connect(mAuthorizeUser, SIGNAL(clicked(bool)), this, SLOT(checkBoxStateChanged(bool))); return true; } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdeviceinfowidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdeviceinfowidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2009 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 "btdeviceinfowidget.h" +#include "bluetoothdevicedialogs.h" +#include "btdevicedialogpluginerrors.h" +#include + +const int timeOut = 30000; + +BtDeviceInfoWidget::BtDeviceInfoWidget(const QVariantMap ¶meters) +:mLastError(NoError) +{ + constructDialog(parameters); +} + +BtDeviceInfoWidget::~BtDeviceInfoWidget() +{ + +} + +bool BtDeviceInfoWidget::setDeviceDialogParameters(const QVariantMap ¶meters) +{ + Q_UNUSED(parameters); + return true; +} + +int BtDeviceInfoWidget::deviceDialogError() const +{ + return mLastError; +} + +void BtDeviceInfoWidget::closeDeviceDialog(bool byClient) +{ + Q_UNUSED(byClient); + mMessageBox->close(); + emit deviceDialogClosed(); +} + +HbPopup* BtDeviceInfoWidget::deviceDialogWidget() const +{ + return mMessageBox; +} + +QObject* BtDeviceInfoWidget::signalSender() const + { + return const_cast(this); + } + +bool BtDeviceInfoWidget::constructDialog(const QVariantMap ¶meters) +{ + QString keyStrDialogTitle, keyStrResource; + keyStrDialogTitle.setNum(TBluetoothDialogParams::EDialogTitle); + QVariantMap::const_iterator i = parameters.constFind(keyStrDialogTitle); + + keyStrResource.setNum(TBluetoothDialogParams::EResource); + QVariantMap::const_iterator j = parameters.constFind(keyStrResource); + + if(i != parameters.end()) + { + int dialogTitle = parameters.value(QString::number(TBluetoothDialogParams::EDialogTitle)).toInt(); + + switch(dialogTitle) + { + case TBluetoothDialogParams::EBTAddress: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); + QString textStr(hbTrId("txt_bt_info_bluetooth_device_address_1")); + QString deviceAddr(parameters.value(QString::number(TBluetoothDeviceDialog::ELocalAddress)).toString()); + mMessageBox->setText(textStr.arg(deviceAddr)); + HbIcon icon(QString("qtg_large_bluetooth")); + mMessageBox->setIcon(icon); + mMessageBox->setTimeout(timeOut); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + //TODO: Remove this piece of code if notifier is used in toggle + case TBluetoothDialogParams::EOfflineQuery: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + mMessageBox->setText(hbTrId("txt_bt_info_trun_bluetooth_on_ini_offline_mode")); + mMessageBox->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No); + HbIcon icon(QString("qtg_large_bluetooth")); + mMessageBox->setIcon(icon); + mMessageBox->setTimeout(timeOut); + connect(mMessageBox, SIGNAL(finished(int)), this, SLOT(messageBoxClosed(int))); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + case TBluetoothDialogParams::ERecvFailed: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); + QString textStr(hbTrId("txt_bt_dpophead_receiving_failed")); + QString devName(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); + mMessageBox->setText(textStr.arg(devName)); + int classOfDevice = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble(); + HbIcon icon = getBadgedDeviceTypeIcon(classOfDevice); + mMessageBox->setIcon(icon); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + case TBluetoothDialogParams::ESendFailed: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); + QString textStr(hbTrId("txt_bt_dpophead_sending_failed")); + QString devName(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); + mMessageBox->setText(textStr.arg(devName)); + int classOfDevice = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble(); + HbIcon icon = getBadgedDeviceTypeIcon(classOfDevice); + mMessageBox->setIcon(icon); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + case TBluetoothDialogParams::EMemoryFull: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeWarning); + QString textStr(hbTrId("txt_error_info_memory_full_delete_data")); + QString driveLetter(parameters.value(QString::number(TBluetoothDeviceDialog::EDriveLetter)).toChar()); + QString driveName(parameters.value(QString::number(TBluetoothDeviceDialog::EDriveName)).toString()); + mMessageBox->setText(textStr.arg(driveLetter).arg(driveName)); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + case TBluetoothDialogParams::EDriveNotFound: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeWarning); + mMessageBox->setText(hbTrId("txt_bt_info_file_not_fould_memory_card_has_been_r")); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + case TBluetoothDialogParams::EFileMoved: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeWarning); + mMessageBox->setText(hbTrId("txt_bt_info_file_not_fould_it_may_be_removed_or_d")); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + case TBluetoothDialogParams::EUnsupportedImages: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + QString textStr(parameters.value(QString::number(TBluetoothDeviceDialog::EAdditionalDesc)).toString()); + mMessageBox->setText(textStr); + mMessageBox->setStandardButtons(HbMessageBox::Continue| HbMessageBox::Cancel); + int classOfDevice = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble(); + HbIcon icon = getBadgedDeviceTypeIcon(classOfDevice); + mMessageBox->setIcon(icon); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + connect(mMessageBox, SIGNAL(finished(int)), this, SLOT(messageBoxClosed(int))); + }break; + + default: + mLastError = UnknownDeviceDialogError; + break; + } + } + + else if(j != parameters.end()) + { + int resourceType = parameters.value(QString::number(TBluetoothDialogParams::EResource)).toInt(); + + switch(resourceType) + { + case EIssueOfflineQuery: + { + mMessageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + mMessageBox->setText(hbTrId("txt_bt_info_trun_bluetooth_on_ini_offline_mode")); + mMessageBox->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No); + HbIcon icon(QString("qtg_large_bluetooth")); + mMessageBox->setIcon(icon); + mMessageBox->setTimeout(timeOut); + connect(mMessageBox, SIGNAL(finished(int)), this, SLOT(messageBoxClosed(int))); + connect(mMessageBox, SIGNAL(finished(HbAction*)), this, SLOT(messageBoxClosed(HbAction*))); + }break; + + default: + mLastError = UnknownDeviceDialogError; + break; + } + } + + else + { + mLastError = UnknownDeviceDialogError; + } + + if(!mLastError) + { + mMessageBox->setAttribute(Qt::WA_DeleteOnClose); + return true; + } + + return false; +} + +void BtDeviceInfoWidget::messageBoxClosed(HbAction *action) +{ + Q_UNUSED(action); + emit deviceDialogClosed(); +} + +void BtDeviceInfoWidget::messageBoxClosed(int action) + { + QVariantMap data; + if((action == HbMessageBox::Yes) || (action == HbMessageBox::Continue)) + { + data.insert(QString("actionResult"), QVariant(true)); + } + else if((action == HbMessageBox::No) || (action == HbMessageBox::Cancel)) + { + data.insert(QString("actionResult"), QVariant(false)); + } + emit deviceDialogData(data); + emit deviceDialogClosed(); + } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicesearchdialogwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicesearchdialogwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btdevicesearchdialogwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -38,14 +38,12 @@ #define LOC_SEARCH_DONE hbTrId("txt_bt_subhead_search_done") #define LOC_SEARCH_STOP hbTrId("txt_common_button_stop") #define LOC_SEARCH_RETRY hbTrId("txt_common_button_retry") +#define LOC_SHOW_DIALOG_TITLE hbTrId("txt_bt_title_show") BTDeviceSearchDialogWidget::BTDeviceSearchDialogWidget(const QVariantMap ¶meters) - { -// mDeviceLstIdx = 0; -// mViewByChosen = false; +{ mSelectedDeviceType = 0; - // mDeviceDialogData = 0; mLoader = 0; mContentItemModel = 0; mStopRetryFlag = 0; // Stop @@ -56,24 +54,22 @@ BtuiDevProperty::WearableDev | BtuiDevProperty::ImagingDev | BtuiDevProperty::HealthDev | BtuiDevProperty::UncategorizedDev); constructDialog(parameters); - } +} BTDeviceSearchDialogWidget::~BTDeviceSearchDialogWidget() - { +{ delete mLoader; delete mContentItemModel; - if ( mQuery ) { + if ( mQuery ) + { delete mQuery; } - - // delete mRbl; - // delete mViewByDialog; - } +} bool BTDeviceSearchDialogWidget::setDeviceDialogParameters(const QVariantMap ¶meters) +{ + if(parameters.keys().contains("Search Completed")) { - if(parameters.keys().at(0).compare("Search Completed")==0) - { mStopRetryFlag = 1; // Retry mSearchLabel->hide(); @@ -85,19 +81,20 @@ mSearchDoneLabel->setPlainText(LOC_SEARCH_DONE); mStopRetryAction->setText(LOC_SEARCH_RETRY); - } + } else - { - double cod = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble(); + { + int cod = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toInt(); int uiMajorDevice; int uiMinorDevice; BtuiDevProperty::mapDeiveType(uiMajorDevice, uiMinorDevice, cod); BtSendDataItem devData; - devData[NameAliasRole] = QVariant(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); - devData[ReadableBdaddrRole] = QVariant(parameters.value(QString::number(TBluetoothDialogParams::EAddress)).toString()); - devData[CoDRole] = QVariant(cod); + //TODO Need to create string constant for Name as enum EDeviceName is not working for this + devData[NameAliasRole] =parameters.value("Name").toString(); + devData[ReadableBdaddrRole] = parameters.value(QString::number(TBluetoothDeviceDialog::EAddress)); + devData[CoDRole] = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)); devData[DeviceTypeRole] = QVariant(uiMajorDevice); setMajorProperty(devData,BtuiDevProperty::Bonded, parameters.value("Bonded").toBool()); @@ -110,113 +107,96 @@ mData.append(devData); if(mSelectedDeviceType & devData[DeviceTypeRole].toInt()) - { + { QStandardItem* listitem = new QStandardItem(); QStringList info; info.append(devData[NameAliasRole].toString()); listitem->setData(info, Qt::DisplayRole); - HbIcon icon = getBadgedDeviceTypeIcon(devData[CoDRole].toDouble(), + HbIcon icon = getBadgedDeviceTypeIcon(devData[CoDRole].toInt(), devData[MajorPropertyRole].toInt(), BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight); listitem->setIcon(icon.qicon()); mContentItemModel->appendRow(listitem); mSelectedData.append(devData); - } } + } return true; - } +} int BTDeviceSearchDialogWidget::deviceDialogError() const - { +{ return 0; - } +} void BTDeviceSearchDialogWidget::closeDeviceDialog(bool byClient) - { +{ Q_UNUSED(byClient); mSearchDevicesDialog->close(); - //@ TODO to check below code is required which is written based on the documentation of closeDeviceDialog API - - /* QVariantMap val; - QVariant index(-1); - val.insert("selectedindex",index); - emit deviceDialogData(val); - emit deviceDialogClosed();*/ - } + if(!byClient) + { + QVariantMap val; + QVariant index(-1); + val.insert("selectedindex",index); + emit deviceDialogData(val); + } + emit deviceDialogClosed(); +} HbPopup* BTDeviceSearchDialogWidget::deviceDialogWidget() const - { +{ return mSearchDevicesDialog; - } +} QObject* BTDeviceSearchDialogWidget::signalSender() const - { +{ return const_cast(this); - } +} bool BTDeviceSearchDialogWidget::constructDialog(const QVariantMap ¶meters) - { +{ (void) parameters; bool ok = false; mLoader = new HbDocumentLoader(); mLoader->load(DOCML_BTDEV_SEARCH_DIALOG, &ok); if(ok) - { - mSearchDevicesDialog = qobject_cast(mLoader->findWidget("searchdialog")); - - /* HbLabel* heading = qobject_cast(mLoader->findWidget("heading")); - heading->setTextWrapping(Hb::TextWordWrap); - heading->setAlignment(Qt::AlignHCenter); - heading->setPlainText("Bluetooth - Found devices"); - setHeadingWidget(heading);*/ + { + mSearchDevicesDialog = qobject_cast(mLoader->findWidget("searchDialog")); mSearchLabel = qobject_cast(mLoader->findWidget("searchLabel")); mSearchLabel->setTextWrapping(Hb::TextWordWrap); mSearchLabel->setAlignment(Qt::AlignHCenter); mSearchLabel->setPlainText(LOC_SEARCHING_DEVICE); - mSearchIconLabel = qobject_cast(mLoader->findWidget("iconLabel")); - mSearchIconLabel->setIcon(QIcon(QString(":/icons/qtg_large_bluetooth.svg"))); + mSearchIconLabel = qobject_cast(mLoader->findWidget("searchIconLabel")); + mSearchIconLabel->setIcon(HbIcon("qtg_large_bluetooth")); mSearchDoneLabel = qobject_cast(mLoader->findWidget("searchDoneLabel")); mSearchDoneLabel->hide(); - - mSearchDevicesDialog->setFrameType(HbDialog::Strong); - mSearchDevicesDialog->setBackgroundFaded(false); - - // mViewByBtn = qobject_cast(mLoader->findWidget("viewby")); - // mStopRetryBtn = qobject_cast(mLoader->findWidget("stop")); - - mListView = qobject_cast(mLoader->findWidget("listView")); - mListView->setSelectionMode(HbAbstractItemView::SingleSelection); + mDeviceList = qobject_cast(mLoader->findWidget("deviceList")); + mDeviceList->setSelectionMode(HbAbstractItemView::SingleSelection); mContentItemModel = new QStandardItemModel(this); - mListView->setModel(mContentItemModel);//, prototype); + mDeviceList->setModel(mContentItemModel);//, prototype); - connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); - // connect(mStopRetryBtn, SIGNAL(clicked()), this, SLOT(stopRetryClicked())); - // connect(mViewByBtn, SIGNAL(clicked()), this, SLOT(viewByClicked())); + connect(mDeviceList, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); - mShowAction = static_cast( mLoader->findObject( "viewaction" ) ); - mShowAction->disconnect(mSearchDevicesDialog); + mShowAction = static_cast( mLoader->findObject( "viewByAction" ) ); + //if action is not disconnected the dialog will be closed when action is clicked + mShowAction->disconnect(mSearchDevicesDialog); - mStopRetryAction = static_cast( mLoader->findObject( "stopretryaction" ) ); - mStopRetryAction->disconnect(mSearchDevicesDialog); -// mCancelAction = static_cast( mLoader->findObject( "cancelaction" ) ); -// mCancelAction->disconnect(mSearchDevicesDialog); + mStopRetryAction = static_cast( mLoader->findObject( "stopRetryAction" ) ); + //if action is not disconnected the dialog will be closed when action is clicked + mStopRetryAction->disconnect(mSearchDevicesDialog); connect(mShowAction, SIGNAL(triggered()), this, SLOT(viewByClicked())); connect(mStopRetryAction, SIGNAL(triggered()), this, SLOT(stopRetryClicked())); connect(mSearchDevicesDialog, SIGNAL(aboutToClose()), this, SLOT(searchDialogClosed())); - -// QGraphicsWidget *widget = mLoader->findWidget(QString("container")); - //setContentWidget(widget); - } + } mSearchDevicesDialog->setBackgroundFaded(false); mSearchDevicesDialog->setDismissPolicy(HbPopup::NoDismiss); mSearchDevicesDialog->setTimeout(HbPopup::NoTimeout); @@ -228,26 +208,22 @@ << hbTrId("txt_bt_list_phones") << hbTrId("txt_bt_list_other_devices"); - /* mViewByDialog = new HbDialog(); - mRbl = new HbRadioButtonList(mViewByDialog); - connect(mRbl, SIGNAL(itemSelected(int)), this, SLOT(viewByItemSelected(int)));*/ - return true; - } +} void BTDeviceSearchDialogWidget::stopRetryClicked() - { +{ QVariantMap val; - if(mStopRetryFlag == 1)//mStopRetryAction->text().compare(LOC_SEARCH_RETRY)==0 - { + if(mStopRetryFlag == 1) + { mStopRetryFlag = 0; // Stop QVariant index("Retry"); val.insert("Retry",index); emit deviceDialogData(val); delete mContentItemModel; mContentItemModel = new QStandardItemModel(this); - mListView->setModel(mContentItemModel); + mDeviceList->setModel(mContentItemModel); mStopRetryAction->setText(LOC_SEARCH_STOP); mSearchLabel->setTextWrapping(Hb::TextWordWrap); @@ -260,9 +236,9 @@ mSearchIconLabel->show(); mSearchDoneLabel->hide(); - } + } else - { + { mStopRetryFlag = 1; //Retry mStopRetryAction->setText(LOC_SEARCH_RETRY); @@ -279,26 +255,13 @@ QVariant index("Stop"); val.insert("Stop",index); emit deviceDialogData(val); - } } - -void BTDeviceSearchDialogWidget::retryClicked() - { - QVariantMap val; - QVariant index("Retry"); - val.insert("Retry",index); - emit deviceDialogData(val); - delete mContentItemModel; - mContentItemModel = new QStandardItemModel(this); - mListView->setModel(mContentItemModel); - - - } +} void BTDeviceSearchDialogWidget::viewByClicked() +{ + if ( !mQuery ) { - - if ( !mQuery ) { mQuery = new HbSelectionDialog; mQuery->setStringItems(mDevTypeList, 0); mQuery->setSelectionMode(HbAbstractItemView::MultiSelection); @@ -312,90 +275,79 @@ // mQuery->setAttribute(Qt::WA_DeleteOnClose); // Set the heading for the dialog. - HbLabel *headingLabel = new HbLabel(hbTrId("txt_bt_title_show"), mQuery); + HbLabel *headingLabel = new HbLabel(LOC_SHOW_DIALOG_TITLE, mQuery); mQuery->setHeadingWidget(headingLabel); } mQuery->open(this,SLOT(selectionDialogClosed(HbAction*))); - - - } +} void BTDeviceSearchDialogWidget::searchDialogClosed() - { +{ QVariantMap val; QVariant index(-1); val.insert("selectedindex",index); emit deviceDialogData(val); emit deviceDialogClosed(); - } +} void BTDeviceSearchDialogWidget::selectionDialogClosed(HbAction* action) - { - Q_UNUSED(action); - - disconnect( mQuery ); +{ + disconnect( mQuery, 0, this, 0 ); int devTypesWanted = 0; - if (action == mQuery->actions().first()) { // user pressed "Ok" + if (action == mQuery->actions().first()) + { // user pressed "Ok" // Get selected items. QList selections; selections = mQuery->selectedItems(); - for (int i=0; i < selections.count(); i++) { - switch (selections.at(i).toInt()) { - case BtUiDevAudioDevice: - devTypesWanted |= BtuiDevProperty::AVDev; - break; - case BtUiDevComputer: - devTypesWanted |= BtuiDevProperty::Computer; - break; - case BtUiDevInputDevice: - devTypesWanted |= BtuiDevProperty::Peripheral; - break; - case BtUiDevPhone: - devTypesWanted |= BtuiDevProperty::Phone; - break; - case BtUiDevOtherDevice: - devTypesWanted |= (BtuiDevProperty::LANAccessDev | - BtuiDevProperty::Toy | - BtuiDevProperty::WearableDev | - BtuiDevProperty::ImagingDev | - BtuiDevProperty::HealthDev | - BtuiDevProperty::UncategorizedDev); - break; - default: - // should never get here - break; + for (int i=0; i < selections.count(); i++) + { + switch (selections.at(i).toInt()) + { + case BtUiDevAudioDevice: + devTypesWanted |= BtuiDevProperty::AVDev; + break; + case BtUiDevComputer: + devTypesWanted |= BtuiDevProperty::Computer; + break; + case BtUiDevInputDevice: + devTypesWanted |= BtuiDevProperty::Peripheral; + break; + case BtUiDevPhone: + devTypesWanted |= BtuiDevProperty::Phone; + break; + case BtUiDevOtherDevice: + devTypesWanted |= (BtuiDevProperty::LANAccessDev | + BtuiDevProperty::Toy | + BtuiDevProperty::WearableDev | + BtuiDevProperty::ImagingDev | + BtuiDevProperty::HealthDev | + BtuiDevProperty::UncategorizedDev); + break; + default: + // should never get here + break; } } } else - { + { devTypesWanted = mSelectedDeviceType; - } - - - - /* HbSelectionDialog *dlg = (HbSelectionDialog*)(sender()); - if(dlg->actions().first() == action) { + } - } - else if(dlg->actions().at(1) == action) { - }*/ - if((devTypesWanted != mSelectedDeviceType) &&(devTypesWanted !=0)) - { + { mSelectedDeviceType = devTypesWanted; -// mViewByChosen = true; delete mContentItemModel; mContentItemModel = new QStandardItemModel(this); - mListView->setModel(mContentItemModel); + mDeviceList->setModel(mContentItemModel); mSelectedData.clear(); for(int i=0;isetIcon(icon.qicon()); mContentItemModel->appendRow(listitem); mSelectedData.append(qtdev); - } } } } +} void BTDeviceSearchDialogWidget::deviceSelected(const QModelIndex& modelIndex) - { +{ int row = 0; - - /* if(mViewByChosen) - { - row = mDeviceLstOfType[modelIndex.row()].mDeviceIdx; - } + QVariantMap val; - else*/ - { - row = modelIndex.row(); - } - - QVariantMap val; -// QVariant index(row); -// val.insert("selectedindex",index); - + row = modelIndex.row(); const BtSendDataItem& qtdev = mSelectedData.at(row); val.insert("selectedindex",QVariant(row)); - val.insert("devicename",QVariant(qtdev[NameAliasRole])); - val.insert("deviceaddress",QVariant(qtdev[ReadableBdaddrRole])); - val.insert("deviceclass",QVariant(qtdev[CoDRole])); + val.insert("devicename",qtdev[NameAliasRole]); + val.insert("deviceaddress",qtdev[ReadableBdaddrRole]); + val.insert("deviceclass",qtdev[CoDRole]); emit deviceDialogData(val); -// mDeviceDialogData = 1;//flag is to say that device dialog data is emitted required when we cancel the dialog - //emit deviceDialogClosed(); - // this->close(); - } +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btmoredevicesdialogwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btmoredevicesdialogwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btmoredevicesdialogwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -32,8 +32,7 @@ BTMoreDevicesDialogWidget::BTMoreDevicesDialogWidget(const QVariantMap ¶meters) - { - mDeviceDialogData = 0; +{ mLoader = 0; mContentItemModel = 0; constructDialog(parameters); @@ -48,27 +47,28 @@ Q_UNUSED(badAlloc); // = UnknownDeviceDialogError; }*/ - } +} BTMoreDevicesDialogWidget::~BTMoreDevicesDialogWidget() - { +{ delete mLoader; delete mContentItemModel; - } +} bool BTMoreDevicesDialogWidget::setDeviceDialogParameters(const QVariantMap ¶meters) - { - double cod = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toDouble(); +{ + int cod = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)).toInt(); int uiMajorDevice; int uiMinorDevice; BtuiDevProperty::mapDeiveType(uiMajorDevice, uiMinorDevice, cod); if ((uiMajorDevice & BtuiDevProperty::Phone)||(uiMajorDevice & BtuiDevProperty::Computer) ) - { + { BtSendDataItem devData; - devData[NameAliasRole] = QVariant(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); - devData[ReadableBdaddrRole] = QVariant(parameters.value(QString::number(TBluetoothDialogParams::EAddress)).toString()); - devData[CoDRole] = QVariant(cod); + //todo Need to create string constant for name as enum EDeviceName has an issue + devData[NameAliasRole] = parameters.value("Name"); + devData[ReadableBdaddrRole] = parameters.value(QString::number(TBluetoothDeviceDialog::EAddress)); + devData[CoDRole] = parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceClass)); setMajorProperty(devData,BtuiDevProperty::Bonded, parameters.value("Bonded").toBool()); @@ -85,212 +85,111 @@ info.append(devData[NameAliasRole].toString()); listitem->setData(info, Qt::DisplayRole); - HbIcon icon = getBadgedDeviceTypeIcon(devData[CoDRole].toDouble(), + HbIcon icon = getBadgedDeviceTypeIcon(devData[CoDRole].toInt(), devData[MajorPropertyRole].toInt(), - BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight); + BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight); listitem->setIcon(icon.qicon()); - // listitem->setIcon(icon(parameters.value("deviceType").toString())); mContentItemModel->appendRow(listitem); - } + } return true; - } +} int BTMoreDevicesDialogWidget::deviceDialogError() const - { +{ return 0; - } +} void BTMoreDevicesDialogWidget::closeDeviceDialog(bool byClient) - { - Q_UNUSED(byClient); - // below code is required and written based on the documentation of closeDeviceDialog API - mMoreDeviceDialog->close(); - QVariantMap val; - QVariant index(-1); - val.insert("selectedindex",index); - emit deviceDialogData(val); - //below signal is emitted to make dialog server aware that our dialog is closed +{ + mLastUsedDeviceDialog->close(); + if(!byClient) + { + QVariantMap val; + QVariant index(-1); + val.insert("selectedindex",index); + emit deviceDialogData(val); + } emit deviceDialogClosed(); - } +} HbPopup* BTMoreDevicesDialogWidget::deviceDialogWidget() const - { - return mMoreDeviceDialog; - } +{ + return mLastUsedDeviceDialog; +} QObject* BTMoreDevicesDialogWidget::signalSender() const - { +{ return const_cast(this); - } +} -bool BTMoreDevicesDialogWidget::constructDialog(const QVariantMap &/*parameters*/) - { +bool BTMoreDevicesDialogWidget::constructDialog(const QVariantMap ¶meters) +{ + Q_UNUSED(parameters); mLoader = new HbDocumentLoader(); bool ok = false; mLoader->load(DOCML_BT_MORE_DEV_DIALOG, &ok); if(ok) - { - mMoreDeviceDialog = qobject_cast(mLoader->findWidget("lastuseddialog")); - mMoreDeviceDialog->setFrameType(HbDialog::Strong); - mMoreDeviceDialog->setBackgroundFaded(false); -/* HbLabel* label = qobject_cast(mLoader->findWidget("label")); - if(label) - { - label->setTextWrapping(Hb::TextWordWrap); - label->setPlainText("Send to:"); - } - this->setHeadingWidget(label);*/ - // HbPushButton* moreDevices = qobject_cast(mLoader->findWidget("moreDevices")); - // HbPushButton* cancel = qobject_cast(mLoader->findWidget("cancel")); + { + mLastUsedDeviceDialog = qobject_cast(mLoader->findWidget("lastUsedDevicesDialog")); + - HbListView* listView = qobject_cast(mLoader->findWidget("listView")); - listView->setSelectionMode(HbAbstractItemView::SingleSelection); + HbListView* deviceList = qobject_cast(mLoader->findWidget("deviceList")); + deviceList->setSelectionMode(HbAbstractItemView::SingleSelection); mContentItemModel = new QStandardItemModel(this); - listView->setModel(mContentItemModel);//, prototype); + deviceList->setModel(mContentItemModel); - // QList values = parameters.values(); + connect(deviceList, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); - /* for(int i=0;i < values.count();i++) - { - QStandardItem* listitem = new QStandardItem(); - // parameters. - // QString string = values.at(i).toString(); - - listitem->setData(values.at(i).toString(), Qt::DisplayRole); - // listitem->setData(QString("search"), Qt::DisplayRole); - //Todo - Insert icons based on the device class - QIcon icon(QString(":/qgn_prop_sml_bt.svg")); - listitem->setIcon(icon); + mMoreAction = static_cast( mLoader->findObject( "moreAction" ) ); + + mCancelAction = static_cast( mLoader->findObject( "cancelAction" ) ); - mContentItemModel->appendRow(listitem); - }*/ - - connect(listView, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); - // connect(moreDevices, SIGNAL(clicked()), this, SLOT(moreDevicesClicked())); - // connect(cancel, SIGNAL(clicked()), this, SLOT(cancelClicked())); - mMoreAction = static_cast( mLoader->findObject( "moreaction" ) ); - mMoreAction->disconnect(mMoreDeviceDialog); - - mCancelAction = static_cast( mLoader->findObject( "cancelaction" ) ); - mCancelAction->disconnect(mMoreDeviceDialog); -// QGraphicsWidget *widget = mLoader->findWidget(QString("container")); - // mMoreDeviceDialog->setContentWidget(widget); - - connect(mMoreAction, SIGNAL(triggered()), this, SLOT(moreDevicesClicked())); - connect(mCancelAction, SIGNAL(triggered()), this, SLOT(cancelClicked())); + connect(mMoreAction, SIGNAL(triggered()), this, SLOT(moreDevicesClicked())); + connect(mCancelAction, SIGNAL(triggered()), this, SLOT(cancelClicked())); - } + } + mLastUsedDeviceDialog->setBackgroundFaded(false); + mLastUsedDeviceDialog->setDismissPolicy(HbPopup::NoDismiss); + mLastUsedDeviceDialog->setTimeout(HbPopup::NoTimeout); + mLastUsedDeviceDialog->setAttribute(Qt::WA_DeleteOnClose); + return true; +} - mMoreDeviceDialog->setBackgroundFaded(false); - mMoreDeviceDialog->setDismissPolicy(HbPopup::NoDismiss); - mMoreDeviceDialog->setTimeout(HbPopup::NoTimeout); - mMoreDeviceDialog->setAttribute(Qt::WA_DeleteOnClose); - return true; - } - -/*void BTMoreDevicesDialogWidget::hideEvent(QHideEvent *event) - { - //HbDialog::hideEvent(event); - mMoreDeviceDialog->hideEvent(event); -// if(mDeviceDialogData == 0) - { - QVariantMap val; - QVariant index(-1); - val.insert("selectedindex",index); - emit deviceDialogData(val); - emit deviceDialogClosed(); - }*/ - // - // } - -/*void BTMoreDevicesDialogWidget::showEvent(QShowEvent *event) - { - //HbDialog::showEvent(event); - }*/ - void BTMoreDevicesDialogWidget::moreDevicesClicked() - { +{ QVariantMap val; QVariant index("MoreDevices"); val.insert("MoreDevices",index); emit deviceDialogData(val); - // mDeviceDialogData = 1;//flag is to say that device dialog data is emitted required when we cancel the dialog - // this->close(); - // TODO - } + emit deviceDialogClosed(); +} void BTMoreDevicesDialogWidget::cancelClicked() - { - // TODO - mMoreDeviceDialog->close(); +{ + mLastUsedDeviceDialog->close(); QVariantMap val; QVariant index(-1); val.insert("selectedindex",index); emit deviceDialogData(val); emit deviceDialogClosed(); - } +} void BTMoreDevicesDialogWidget::deviceSelected(const QModelIndex& modelIndex) - { +{ int row = modelIndex.row(); QVariantMap val; -// QVariant index(row); const BtSendDataItem& qtdev = mData.at(row); val.insert("selectedindex",QVariant(row)); val.insert("devicename",QVariant(qtdev[NameAliasRole])); val.insert("deviceaddress",QVariant(qtdev[ReadableBdaddrRole])); val.insert("deviceclass",QVariant(qtdev[CoDRole])); emit deviceDialogData(val); - // mDeviceDialogData = 1;//flag is to say that device dialog data is emitted required when we cancel the dialog - // this->close(); - - } - -QIcon BTMoreDevicesDialogWidget::icon(/*QString deviceType*/) - { - /* if(deviceType == "Audio") - { - return (QIcon(QString(":/qgn_prop_bt_audio.svg"))); - } - else if(deviceType == "Car-kit") - { - return (QIcon(QString(":/qgn_prop_bt_car_kit.svg"))); - } - else if(deviceType == "Computer") - { - return (QIcon(QString(":/qgn_prop_bt_computer.svg"))); - } - else if(deviceType == "Headset") - { - return (QIcon(QString(":/qgn_prop_bt_headset.svg"))); - } - else if(deviceType == "Keyboard") - { - return (QIcon(QString(":/qgn_prop_bt_keyboard.svg"))); - } - else if(deviceType == "Mouse") - { - return (QIcon(QString(":/qgn_prop_bt_mouse.svg"))); - } - else if(deviceType == "Phone") - { - return (QIcon(QString(":/qgn_prop_bt_phone.svg"))); - } - else if(deviceType == "Printer") - { - return (QIcon(QString(":/qgn_prop_bt_printer.svg"))); - } - else - { - return (QIcon(QString(":/qgn_prop_bt_unknown.svg"))); - }*/ - return QIcon(QString(":/icons/qtg_large_bluetooth.svg")); - } - +} + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btrecvcompleteddialogwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btrecvcompleteddialogwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btrecvcompleteddialogwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -15,10 +15,10 @@ * */ +#include "btrecvcompleteddialogwidget.h" #include #include #include -#include "btrecvcompleteddialogwidget.h" #include "bluetoothdevicedialogs.h" const char* DOCML_BT_RECV_CMPLTD_DIALOG = ":/docml/bt-receive-done-dialog.docml"; @@ -56,8 +56,9 @@ BTRecvcompletedDialogWidget::BTRecvcompletedDialogWidget(const QVariantMap ¶meters) +:mLoader(0), + mOpenConversationView(false) { - mLoader = 0; constructDialog(parameters); } @@ -72,6 +73,7 @@ bool BTRecvcompletedDialogWidget::setDeviceDialogParameters(const QVariantMap ¶meters) { + Q_UNUSED(parameters); return true; } @@ -83,12 +85,13 @@ void BTRecvcompletedDialogWidget::closeDeviceDialog(bool byClient) { Q_UNUSED(byClient); - mDialog->close(); + mReceiveCompleteDialog->close(); + emit deviceDialogClosed(); } HbPopup* BTRecvcompletedDialogWidget::deviceDialogWidget() const { - return mDialog; + return mReceiveCompleteDialog; } QObject* BTRecvcompletedDialogWidget::signalSender() const @@ -104,23 +107,23 @@ mLoader->load(DOCML_BT_RECV_CMPLTD_DIALOG, &ok); if(ok) { - mDialog = qobject_cast(mLoader->findWidget("recvCompleteddialog")); - mHeading = qobject_cast(mLoader->findWidget("heading")); + mReceiveCompleteDialog = qobject_cast(mLoader->findWidget("receiveCompleteDialog")); + mHeading = qobject_cast(mLoader->findWidget("receiveCompleteHeading")); mFileName = qobject_cast(mLoader->findWidget("fileName")); mFileSize = qobject_cast(mLoader->findWidget("fileSize")); - mFileCount = qobject_cast(mLoader->findWidget("fileCount_label")); + mFileCount = qobject_cast(mLoader->findWidget("fileCount")); mFileCount->setVisible(false); //TODO - set icon based on the file icon. - mShow = qobject_cast(mLoader->findObject("showaction")); - mCancel = qobject_cast(mLoader->findObject("cancelaction")); + mShowAction = qobject_cast(mLoader->findObject("showAction")); + mCancelAction = qobject_cast(mLoader->findObject("cancelAction")); QString headingStr(hbTrId("txt_bt_title_received_from_1")); QString senderName(parameters.value(QString::number(TBluetoothDeviceDialog::EDeviceName)).toString()); mHeading->setPlainText(headingStr.arg(senderName)); - mDialog->setHeadingWidget(mHeading); + mReceiveCompleteDialog->setHeadingWidget(mHeading); mFileName->setPlainText(parameters.value(QString::number(TBluetoothDeviceDialog::EReceivingFileName)).toString()); @@ -169,22 +172,31 @@ } } - mDialog->setBackgroundFaded(false); - mDialog->setDismissPolicy(HbPopup::NoDismiss); - mDialog->setTimeout(HbPopup::NoTimeout); + mReceiveCompleteDialog->setBackgroundFaded(false); + mReceiveCompleteDialog->setDismissPolicy(HbPopup::NoDismiss); + mReceiveCompleteDialog->setTimeout(HbPopup::NoTimeout); - connect(mShow, SIGNAL(triggered()), this, SLOT(showClicked())); - connect(mCancel, SIGNAL(triggered()), this, SLOT(cancelClicked())); + connect(mShowAction, SIGNAL(triggered()), this, SLOT(showClicked())); + connect(mCancelAction, SIGNAL(triggered()), this, SLOT(cancelClicked())); + + QVariantMap::const_iterator i = parameters.find("OpenCnvView"); + if(i != parameters.end()) + { + mOpenConversationView = (i.value().toBool() == true) ? true : false; + } return true; } void BTRecvcompletedDialogWidget::showClicked() { - CoversationViewServiceStarter* service = new CoversationViewServiceStarter(KBluetoothMsgsConversationId); - service->setAutoDelete(true); - - QThreadPool::globalInstance()->start(service); + if(mOpenConversationView) + { + CoversationViewServiceStarter* service = new CoversationViewServiceStarter(KBluetoothMsgsConversationId); + service->setAutoDelete(true); + + QThreadPool::globalInstance()->start(service); + } QVariantMap data; data.insert(QString("actionResult"), QVariant(TBluetoothDialogParams::EShow)); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btrecvprgrsdialogwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btrecvprgrsdialogwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btrecvprgrsdialogwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -54,6 +54,7 @@ { Q_UNUSED(byClient); mDialog->close(); + emit deviceDialogClosed(); } HbPopup* BTRecvPrgrsDialogWidget::deviceDialogWidget() const @@ -74,20 +75,20 @@ mLoader->load(DOCML_BT_RECV_PRGRS_DIALOG, &ok); if(ok) { - mDialog = qobject_cast(mLoader->findWidget("senddialog")); - mHeading = qobject_cast(mLoader->findWidget("heading")); + mDialog = qobject_cast(mLoader->findWidget("receiveProgressDialog")); + mHeading = qobject_cast(mLoader->findWidget("receiveProgressHeading")); mFileName = qobject_cast(mLoader->findWidget("fileName")); mFileSize = qobject_cast(mLoader->findWidget("fileSize")); - mFileCount = qobject_cast(mLoader->findWidget("fileCount_label")); + mFileCount = qobject_cast(mLoader->findWidget("fileCount")); mFileCount->setVisible(false); //TODO - set icon based on the file icon. - mHide = qobject_cast(mLoader->findObject("hideaction")); - mCancel = qobject_cast(mLoader->findObject("cancelaction")); + mHide = qobject_cast(mLoader->findObject("hideAction")); + mCancel = qobject_cast(mLoader->findObject("cancelAction")); - mProgressBar = qobject_cast(mLoader->findWidget("horizontalProgressBar")); + mProgressBar = qobject_cast(mLoader->findWidget("receiveProgressBar")); int dialogType = parameters.value(QString::number(TBluetoothDialogParams::EDialogTitle)).toInt(); switch(dialogType) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btdevicedialogplugin/src/btsenddialogwidget.cpp --- a/bluetoothengine/btnotif/btdevicedialogplugin/src/btsenddialogwidget.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btdevicedialogplugin/src/btsenddialogwidget.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -29,25 +29,25 @@ const char* DOCML_BT_SEND_DIALOG = ":/docml/bt-send-dialog.docml"; BTSendDialogWidget::BTSendDialogWidget(const QVariantMap ¶meters) - { +{ mLoader = 0; constructDialog(parameters); - } +} BTSendDialogWidget::~BTSendDialogWidget() - { +{ delete mLoader; /* if(mContentItemModel) { delete mContentItemModel; mContentItemModel = NULL; }*/ - } +} bool BTSendDialogWidget::setDeviceDialogParameters(const QVariantMap ¶meters) - { +{ if(mFileIndex != parameters.value("currentFileIdx").toString().toInt() ) - { + { mDialogHeading->setTextWrapping(Hb::TextWordWrap); mDialogHeading->setAlignment(Qt::AlignHCenter); //Todo - replace this with the actual text from parameters @@ -89,31 +89,31 @@ mProgressBar->setProgressValue(0); mProgressBar->setMaximum(parameters.value("fileSz").toInt()); mFileIndex = parameters.value("currentFileIdx").toString().toInt(); - } + } else - { + { mProgressBar->setProgressValue(parameters.value("progressValue").toInt()); - } + } return true; - } +} int BTSendDialogWidget::deviceDialogError() const - { +{ return 0; - } +} void BTSendDialogWidget::closeDeviceDialog(bool byClient) - { +{ Q_UNUSED(byClient); mSendDialog->close(); // below redundant call is required because of the api documentation. emit deviceDialogClosed(); - } +} HbPopup* BTSendDialogWidget::deviceDialogWidget() const - { +{ return mSendDialog; - } +} QObject *BTSendDialogWidget::signalSender() const { @@ -121,18 +121,18 @@ } bool BTSendDialogWidget::constructDialog(const QVariantMap&/*parameters*/) - { +{ mLoader = new HbDocumentLoader(); bool ok = false; mLoader->load(DOCML_BT_SEND_DIALOG, &ok); if(ok) - { - mSendDialog = qobject_cast(mLoader->findWidget("senddialog")); - mDialogHeading = qobject_cast(mLoader->findWidget("heading")); - mFileIconLabel = qobject_cast(mLoader->findWidget("fileiconlabel")); - mFileNameLabel = qobject_cast(mLoader->findWidget("filenamelabel")); - mFileSizeLabel = qobject_cast(mLoader->findWidget("filesizelabel")); + { + mSendDialog = qobject_cast(mLoader->findWidget("sendProgressDialog")); + mDialogHeading = qobject_cast(mLoader->findWidget("sendDialogHeading")); + mFileIconLabel = qobject_cast(mLoader->findWidget("fileIcon")); + mFileNameLabel = qobject_cast(mLoader->findWidget("fileName")); + mFileSizeLabel = qobject_cast(mLoader->findWidget("fileSize")); // mSendDialog->setHeadingWidget(mLabel); /* mListView = qobject_cast(mLoader->findWidget("listView")); if(mListView) @@ -141,7 +141,7 @@ mListView->setModel(mContentItemModel);//, prototype); }*/ - mProgressBar = qobject_cast(mLoader->findWidget("horizontalProgressBar")); + mProgressBar = qobject_cast(mLoader->findWidget("sendProgressBar")); // HbAction* hide = new HbAction("Hide"); // HbAction* cancel = new HbAction("Cancel"); @@ -151,23 +151,23 @@ // QGraphicsWidget *widget = mLoader->findWidget(QString("container")); // this->setContentWidget(widget); - } + } mSendDialog->setBackgroundFaded(false); mSendDialog->setDismissPolicy(HbPopup::NoDismiss); mSendDialog->setTimeout(HbPopup::NoTimeout); mSendDialog->setAttribute(Qt::WA_DeleteOnClose); - mHideAction = static_cast( mLoader->findObject( "hideaction" ) ); - mHideAction->disconnect(mSendDialog); + mHideAction = static_cast( mLoader->findObject( "hideAction" ) ); + mHideAction->disconnect(mSendDialog); // Todo: needed? - mCancelAction = static_cast( mLoader->findObject( "cancelaction" ) ); - mCancelAction->disconnect(mSendDialog); + mCancelAction = static_cast( mLoader->findObject( "cancelAction" ) ); + mCancelAction->disconnect(mSendDialog); // Todo: needed? connect(mCancelAction, SIGNAL(triggered()), this, SLOT(cancelClicked())); return true; - } +} /*void BTSendDialogWidget::hideEvent(QHideEvent *event) { @@ -188,10 +188,10 @@ }*/ void BTSendDialogWidget::cancelClicked() - { +{ mSendDialog->close(); emit deviceDialogClosed(); - } +} /*void BTSendDialogWidget::inputClosed(HbAction* action) { diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/bluetoothnotification.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/bluetoothnotification.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/bluetoothnotification.h Fri Sep 03 16:17:59 2010 +0300 @@ -21,6 +21,7 @@ #include #include +#include #include "bluetoothdevicedialogs.h" #include "btnotificationresult.h" #include "bluetoothtrace.h" @@ -34,7 +35,8 @@ * @since Symbian^4 */ NONSHARABLE_CLASS( CBluetoothNotification ) : public CBase, - public MHbDeviceDialogObserver + public MHbDeviceDialogObserver, + public MBtSimpleActiveObserver { @@ -101,6 +103,15 @@ inline void SetNotificationType( TBluetoothDialogParams::TBTDialogType aType, TBTDialogResourceId aResourceId ) { iType = aType; iResourceId = aResourceId; } + + /** + * Creates New Notification Data to be shown to the user + * + * @since Symbian^4 + * @return CHbSymbianVariantMap newly created notification data for the device dialog + */ + CHbSymbianVariantMap* CreateNotificationDataL(); + /** * Sets the data to be shown to the user. @@ -132,6 +143,15 @@ TInt Update( const TDesC& aData =KNullDesC ); /** + * Updates the data to be shown to the user. + * + * @since Symbian^4 + * @param ?arg1 ?description + * @return Error code + */ + TInt Update( TInt aData); + + /** * Show the notification, which means that it * is added to the queue. * @@ -150,6 +170,31 @@ */ TInt Close(); + /** + * Set a dialog shutdown timer. + * This is used by passkey input entry when incoming + * pairing failed since the phone is the only + * display. + * + * @since Symbian^4 + * @param a time after which the dialog is automatically closed. + */ + void SetCloseTimer(TInt aAfter); + + /** + * From MBtSimpleActiveObserver + */ + void RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus ); + + /** + * From MBtSimpleActiveObserver + */ + void CancelRequest( TInt aRequestId ); + + /** + * From MBtSimpleActiveObserver + */ + void HandleError( CBtSimpleActive* aActive, TInt aError ); private: @@ -174,6 +219,24 @@ * @param aData Additional integer data to be shown in the dialog. */ void SetDataL( TInt aType, TInt aData ); + + /** + * Update the data to be shown to the user, leaves on error. + * + * @since Symbian^4 + * @param aType Identifies the type of data parameter to be set. + * @param aData Additional descriptor data to be shown in the dialog. + */ + void UpdateDataL( TInt aType, const TDesC& aData ); + + /** + * Update the data to be shown to the user, leaves on error. + * + * @since Symbian^4 + * @param aType Identifies the type of data parameter to be set. + * @param aData Additional integer data to be shown in the dialog. + */ + void UpdateDataL( TInt aType, TInt aData ); /** * From MHbDeviceDialogObserver. @@ -243,6 +306,15 @@ */ CHbDeviceDialogSymbian *iDialog; + /** + * Active object helper for asynchronous operations. + * Own. + * Used by the closing dialog timer + */ + CBtSimpleActive* iActive; + + RTimer iClosingTimer; + BTUNITTESTHOOK }; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifbasepairinghandler.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifbasepairinghandler.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifbasepairinghandler.h Fri Sep 03 16:17:59 2010 +0300 @@ -23,6 +23,7 @@ #include #include #include +#include "bluetoothnotification.h" class CBTNotifSecurityManager; @@ -100,6 +101,16 @@ * @param aResult The result of the pairing */ void ShowPairingResultNoteL(TInt aResult); + + /** + * Set pairing cancelled by the user + */ + void PairingCancelledByUser(); + + /** + * Set device as trusted + */ + void SetTrusted(); protected: @@ -174,6 +185,22 @@ * Own. */ CBtSimpleActive* iActive; + + /** + * Pairing cancelled by user. + */ + TBool iPairingCancelledByUser; + + /** + * Did the user checks the trusted checkbox? + */ + TBool iTrustDevice; + + /** + * Pointer to a notification + */ + CBluetoothNotification* iNotification; + }; #endif /*BTNOTIFBASEPAIRINGHANDLER_H*/ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifdeviceselector.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifdeviceselector.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifdeviceselector.h Fri Sep 03 16:17:59 2010 +0300 @@ -5,7 +5,7 @@ * Description : Class for tracking Bluetooth settings, and also for * handling notes unrelated to specific connection. * -* Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright © 2009-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" @@ -89,7 +89,7 @@ /** * From MBTNotificationResult. * Handle an intermediate result from a user query. - * This ffunction is called if the user query passes information + * This function is called if the user query passes information * back before it has finished i.e. is dismissed. The final acceptance/ * denial of a query is passed back in MBRNotificationClosed. * @@ -162,11 +162,21 @@ void setMajorProperty(TInt aMajorProperty, TInt prop, TBool addto); - TBool isBonded( const CBTDevice &dev ); + TBool isBonded( const CBTDevice &dev ) const; CBtDevExtension* GetDeviceFromRepositoryL( const TBTDevAddr& addr ); void SendSelectedDeviceL( CHbSymbianVariantMap& aData ); + + void SortUsedDevicesL(); + + void RemoveUnWantedDevices(); + + void SendLastUsedDevicesL(); + + void SendPairedDevicesL(); + + void LoadDeviceDetailsL(const CBtDevExtension& aDevice); private: // data diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifgeninfonotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifgeninfonotifier.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,117 @@ +/* +* ============================================================================ +* Name : btnotifgeninfonotifier.h +* Part of : BTProximity / BTProximity +* Description : Class for the generic info notifier. +* +* Copyright © 2009-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: +* Nokia Corporation +* ============================================================================ +* Template version: 4.2 +*/ + +#ifndef BTNOTIFGENINFONOTIFIER_H +#define BTNOTIFGENINFONOTIFIER_H + + +#include "bluetoothnotification.h" +#include "btnotifserver.h" +#include +#include + +/** + * CBTNotifGenInfoNotifier for generic info notifier + * + * @since Symbian^4 + */ +NONSHARABLE_CLASS( CBTNotifGenInfoNotifier ) : + public CBase, + public MBTNotificationResult + { + +public: + + /** + * Two-phased constructor. + * @param aServer Pointer to our parent + */ + static CBTNotifGenInfoNotifier* NewL( CBTNotifServer* aServer ); + + /** + * Destructor. + */ + virtual ~CBTNotifGenInfoNotifier(); + + /** + * Processes a message from a notifier client related to settings. + * + * @since Symbian^4 + * @param aMessage The message containing the details of the client request. + */ + void HandleNotifierRequestL( const RMessage2& aMessage ); + +private: +// from base class MBTNotificationResult + + /** + * From MBTNotificationResult. + * Handle an intermediate result from a user query. + * This function is called if the user query passes information + * back before it has finished i.e. is dismissed. The final acceptance/ + * denial of a query is passed back in MBRNotificationClosed. + * + * @since Symbian^4 + * @param aData the returned data. The actual format + * is dependent on the actual notifier. + */ + virtual void MBRDataReceived( CHbSymbianVariantMap& aData ); + + /** + * From MBTNotificationResult. + * The notification is finished. The resulting data (e.g. user input or + * acceptance/denial of the query) is passed back here. + * + * @since Symbian^4 + * @param aErr KErrNone or one of the system-wide error codes. + * @param aData the returned data. The actual format + * is dependent on the actual notifier. + */ + virtual void MBRNotificationClosed( TInt aError, const TDesC8& aData ); + + // From MDevDiscoveryObserver + +private: + + CBTNotifGenInfoNotifier( CBTNotifServer* aServer ); + + void ConstructL(); + + void ShowNotificationL(const RMessage2& aMessage); + +private: // data + + /** + * Reference to our parent the server class. + * Not own. + */ + CBTNotifServer* iServer; + + /** + * Pointer to an outstanding user interaction. + * Not own. + */ + CBluetoothNotification* iNotification; + + }; + +#endif // BTNOTIFDEVICESELECTOR_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifincomingpairinghandler.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifincomingpairinghandler.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifincomingpairinghandler.h Fri Sep 03 16:17:59 2010 +0300 @@ -20,7 +20,7 @@ #define BTNOTIFINCOMINGPAIRINGHANDLER_H #include -#include "btnotifBasePairingHandler.h" +#include "btnotifbasepairinghandler.h" /** * Class CBTNotifIncomingPairingHandler diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifoutgoingpairinghandler.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifoutgoingpairinghandler.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifoutgoingpairinghandler.h Fri Sep 03 16:17:59 2010 +0300 @@ -275,6 +275,11 @@ * Number of pairing attempt */ TInt iPairingAttempt; + + /** + * Pairing failure dialog is not deleted when the handler is deleted + */ + TBool iDialogIsOrphan; }; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifpairnotifier.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifpairnotifier.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifpairnotifier.h Fri Sep 03 16:17:59 2010 +0300 @@ -72,10 +72,9 @@ * Update an outstanding request for this connection. * * @since Symbian^4 - * @param aUid The UID of the notifier for this update. - * @param aParams The updated parameters for this request from the client. + * @param aMessage. */ - void UpdatePairingNotifierL( TInt aUid, const TDesC8& aParams ); + void CBTNotifPairNotifier::UpdatePairingNotifierL( const RMessage2& aMessage); /** * Cancel an outstanding request for this connection. diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifpowernotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifpowernotifier.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,137 @@ +/* +* 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: Server class for handling commands from clients, and the +* central class in btnotif thread. +* +*/ + +#ifndef BTNOTIFPOWERNOTIFIER_H_ +#define BTNOTIFPOWERNOTIFIER_H_ + +#include "bluetoothnotification.h" +#include "btnotifserver.h" +#include +#include + + +/** + * CBTNotifPowerNotifier for BT power related notifications + * + * @since Symbian^4 + */ +NONSHARABLE_CLASS( CBTNotifPowerNotifier ) : + public CBase, + public MBTNotificationResult, + public MBTEngSettingsObserver + { + +public: + + /** + * Two-phased constructor. + * @param aServer Pointer to our parent + */ + static CBTNotifPowerNotifier* NewL( CBTNotifServer* aServer ); + + /** + * Destructor. + */ + virtual ~CBTNotifPowerNotifier(); + + /** + * Processes a message from a notifier client related to settings. + * + * @since Symbian^4 + * @param aMessage The message containing the details of the client request. + */ + void HandleNotifierRequestL( const RMessage2& aMessage ); + +private: +// from base class MBTNotificationResult + + /** + * From MBTNotificationResult. + * Handle an intermediate result from a user query. + * This function is called if the user query passes information + * back before it has finished i.e. is dismissed. The final acceptance/ + * denial of a query is passed back in MBRNotificationClosed. + * + * @since Symbian^4 + * @param aData the returned data. The actual format + * is dependent on the actual notifier. + */ + virtual void MBRDataReceived( CHbSymbianVariantMap& aData ); + + /** + * From MBTNotificationResult. + * The notification is finished. The resulting data (e.g. user input or + * acceptance/denial of the query) is passed back here. + * + * @since Symbian^4 + * @param aErr KErrNone or one of the system-wide error codes. + * @param aData the returned data. The actual format + * is dependent on the actual notifier. + */ + virtual void MBRNotificationClosed( TInt aError, const TDesC8& aData ); + + // From MDevDiscoveryObserver + +private: + + CBTNotifPowerNotifier( CBTNotifServer* aServer ); + + void ConstructL(); + + void ShowNotificationL(const RMessage2& aMessage); + +private: // From + void PowerStateChanged( TBTPowerStateValue aState ); + void VisibilityModeChanged( TBTVisibilityMode aState ); + +private: // data + + /** + * Reference to our parent the server class. + * Not own. + */ + CBTNotifServer* iServer; + + /** + * Pointer to an outstanding user interaction. + * Not own. + */ + CBluetoothNotification* iNotification; + + /** + * The client request. + */ + RMessage2 iNotifierMessage; + + /** + * Represents the choice made by the client, Yes/No + */ + TBool iTurnBTOn; + + /** + * Represents the response to the client of the power notifier. + */ + TPckgBuf iClientResponse; + + /** + * Owned object of CBTEngSettings to turn BT power on. + */ + CBTEngSettings* iBTEngSettings; + }; + +#endif /* BTNOTIFPOWERNOTIFIER_H_ */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifsecuritymanager.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifsecuritymanager.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifsecuritymanager.h Fri Sep 03 16:17:59 2010 +0300 @@ -162,6 +162,16 @@ */ void TrustDevice( const TBTDevAddr& aAddr ); + /** + * Trust a device via the registry + */ + void UnTrustDevice( const TBTDevAddr& aAddr ); + + /** + * Return the pairing handler + */ + CBTNotifBasePairingHandler* PairingHandler(); + private: // from base class MBtSimpleActiveObserver @@ -379,7 +389,7 @@ CBtSimpleActive* iAuthenResultActive; /** - * pairing hanlder at the time. + * pairing handler at the time. * Own. */ CBTNotifBasePairingHandler* iPairingHandler; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/inc/btnotifserver.h --- a/bluetoothengine/btnotif/btnotifsrv/inc/btnotifserver.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/inc/btnotifserver.h Fri Sep 03 16:17:59 2010 +0300 @@ -29,6 +29,8 @@ class CBTNotifSettingsTracker; class CBTNotificationManager; class CBTNotifDeviceSelector; +class CBTNotifGenInfoNotifier; +class CBTNotifPowerNotifier; class CBtDevRepository; class CbtnotifServerTest; // ToDo: shall be refactored under compile flag? @@ -145,6 +147,15 @@ CBtDevRepository& DevRepository(); CBTNotifDeviceSelector& DeviceSelectorL(); + + /** + * Returns a handle to the Generic info notifier. + * + * @since Symbian^4 + * @param Pointer to the Generic info notifier. + */ + inline CBTNotifGenInfoNotifier* GenericInfoNotifier() const + { return iGenInfoNotifier; } // from base class CPolicyServer @@ -159,7 +170,15 @@ * @return A pointer to the newly created server-side session object. */ virtual CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const; - + + /** + * Returns a handle to the BT poser notifier. + * @since Symbian^4 + * @return A pointer to the newly created server-side session object. + */ + inline CBTNotifPowerNotifier* BTPowerNotifier() const + { return iBTPowerNotifier; } + private: CBTNotifServer(); @@ -228,6 +247,11 @@ * Own. */ CBTNotifDeviceSelector* iDevSelector; + + /** + * Generic info notifier. + */ + CBTNotifGenInfoNotifier* iGenInfoNotifier; /** * Callback for asynchronous processing. @@ -246,6 +270,11 @@ */ TDeltaTimerEntry iShutdownTimerEntry; + /** + * BT power notifier + */ + CBTNotifPowerNotifier* iBTPowerNotifier; + BTUNITTESTHOOK }; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/bluetoothnotification.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/bluetoothnotification.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/bluetoothnotification.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -29,6 +29,11 @@ _LIT( KBTDevDialogResult, "result" ); _LIT( KBTDevDialogInput, "input" ); +enum TDialogState + { + EWaitingForClosing, + }; + // ======== MEMBER FUNCTIONS ======== // --------------------------------------------------------------------------- @@ -38,6 +43,7 @@ CBluetoothNotification::CBluetoothNotification( CBTNotificationManager* aManager ) : iManager( aManager ) { + iActive = NULL; } @@ -76,12 +82,38 @@ CBluetoothNotification::~CBluetoothNotification() { BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if(iActive) + { + if(iActive->IsActive()) + { + iActive->Cancel(); + } + delete iActive; + } + iClosingTimer.Close(); delete iDialog; delete iNotificationData; delete iReturnData; BOstraceFunctionExit1( DUMMY_DEVLIST, this ) } + +// --------------------------------------------------------------------------- +// Creates new notification data. +// --------------------------------------------------------------------------- +// +CHbSymbianVariantMap* CBluetoothNotification::CreateNotificationDataL() + { + if(iNotificationData!=NULL) + { + delete iNotificationData; + iNotificationData = NULL; + } + iNotificationData = CHbSymbianVariantMap::NewL(); + return iNotificationData; + } + + // --------------------------------------------------------------------------- // Sets the data to be shown to the user. // --------------------------------------------------------------------------- @@ -110,15 +142,30 @@ TInt CBluetoothNotification::Update( const TDesC& aData ) { BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); - (void) aData; - int ret = iDialog->Update( *iNotificationData ); - delete iNotificationData; - iNotificationData = NULL; - TRAP( ret, iNotificationData = CHbSymbianVariantMap::NewL() ); + TRAPD(ret,UpdateDataL( TBluetoothDeviceDialog::EDeviceName, aData )); + if(!ret) + { + int ret = iDialog->Update( *iNotificationData ); + } BOstraceFunctionExit1( DUMMY_DEVLIST, this ); return ret; } +// --------------------------------------------------------------------------- +// Updates the data to be shown to the user. +// --------------------------------------------------------------------------- +// +TInt CBluetoothNotification::Update( TInt aData ) + { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + TRAPD(ret,UpdateDataL( TBluetoothDeviceDialog::EAdditionalInt, aData )); + if(!ret) + { + ret = iDialog->Update( *iNotificationData ); + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); + return ret; + } // --------------------------------------------------------------------------- // Show the notification, which means that it is added to the queue. @@ -133,9 +180,6 @@ iReturnData = NULL; iReturnData = CHbSymbianVariantMap::NewL(); iDialog->Show( KBTDevDialogId(), *iNotificationData, this ); - delete iNotificationData; - iNotificationData = NULL; - iNotificationData = CHbSymbianVariantMap::NewL(); BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } @@ -205,12 +249,116 @@ BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } +// --------------------------------------------------------------------------- +// Sets the data to be shown to the user. +// --------------------------------------------------------------------------- +// +void CBluetoothNotification::SetDataL( TInt aType, TInt aData ) + { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aType ); + TBuf<6> key; + CHbSymbianVariant* value = NULL; + switch( aType ) + { + case TBluetoothDialogParams::EDialogType: + case TBluetoothDialogParams::EResource: + case TBluetoothDialogParams::EDialogTitle: + case TBluetoothDeviceDialog::EDeviceClass: + case TBluetoothDeviceDialog::EAdditionalInt: + key.Num(aType); + value = CHbSymbianVariant::NewL( (TAny*) &aData, CHbSymbianVariant::EInt ); + BtTraceBlock( + TBuf<32> buf; + switch (aType) { + case TBluetoothDialogParams::EDialogType: + buf = _L("EDialogType"); + break; + case TBluetoothDialogParams::EResource: + buf = _L("EResource"); + break; + case TBluetoothDeviceDialog::EDeviceClass: + buf = _L("EDeviceClass"); + break; + case TBluetoothDeviceDialog::EAdditionalInt: + buf = _L("EAdditionalInt"); + break; + } + TPtrC p(buf); + TInt *intPtr = (TInt *)value->Data(); + BOstraceExt2( TRACE_DEBUG, DUMMY_DEVLIST, "SetData [%S] = [%d]", &p, *intPtr); + ); + User::LeaveIfError(iNotificationData->Add( key, value )); // Takes ownership of value + break; + case TBluetoothDialogParams::EAddress: + case TBluetoothDeviceDialog::EDeviceName: + PanicServer( EBTNotifPanicBadArgument ); + break; + case TBluetoothDialogParams::ENoParams: + case TBluetoothDeviceDialog::ENoParams: + default: + break; + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); + } // --------------------------------------------------------------------------- // Sets the data to be shown to the user. // --------------------------------------------------------------------------- // -void CBluetoothNotification::SetDataL( TInt aType, TInt aData ) +void CBluetoothNotification::UpdateDataL( TInt aType, const TDesC& aData ) + { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aType ); + TBuf16<6> key; + CHbSymbianVariant* value = NULL; + switch( aType ) + { + case TBluetoothDialogParams::EAddress: + case TBluetoothDeviceDialog::EDeviceName: + case TBluetoothDeviceDialog::EAdditionalDesc: + case TBluetoothDialogParams::EDialogTitle: + key.Num(aType); + value = CHbSymbianVariant::NewL( (TAny*) &aData, CHbSymbianVariant::EDes ); + BtTraceBlock( + TBuf<32> buf; + switch (aType) { + case TBluetoothDialogParams::EAddress: + _LIT(KAddress,"EAddress"); + buf.Append(KAddress); + break; + case TBluetoothDeviceDialog::EDeviceName: + _LIT(KDeviceName,"EDeviceName"); + buf.Append(KDeviceName); + break; + case TBluetoothDeviceDialog::EAdditionalDesc: + _LIT(KAdditionalDesc,"EAdditionalDesc"); + buf.Append(KAdditionalDesc); + break; + } + TPtrC p(buf); + TPtrC16 *ptr = (TPtrC16 *)value->Data(); + BOstraceExt2( TRACE_DEBUG, DUMMY_DEVLIST, "SetData [%S] = [%S]", &p, ptr); + ); + User::LeaveIfError(iNotificationData->Delete( key)); + User::LeaveIfError(iNotificationData->Add( key, value )); // Takes ownership of value + break; + case TBluetoothDialogParams::EResource: + case TBluetoothDeviceDialog::EDeviceClass: + case TBluetoothDeviceDialog::EAdditionalInt: + PanicServer( EBTNotifPanicBadArgument ); + break; + case TBluetoothDialogParams::ENoParams: + case TBluetoothDeviceDialog::ENoParams: + default: + break; + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); + } + +// --------------------------------------------------------------------------- +// Sets the data to be shown to the user. +// --------------------------------------------------------------------------- +// +void CBluetoothNotification::UpdateDataL( TInt aType, TInt aData ) { BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aType ); TBuf<6> key; @@ -244,6 +392,7 @@ TInt *intPtr = (TInt *)value->Data(); BOstraceExt2( TRACE_DEBUG, DUMMY_DEVLIST, "SetData [%S] = [%d]", &p, *intPtr); ); + User::LeaveIfError(iNotificationData->Delete(key)); User::LeaveIfError(iNotificationData->Add( key, value )); // Takes ownership of value break; case TBluetoothDialogParams::EAddress: @@ -258,6 +407,7 @@ BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } + // --------------------------------------------------------------------------- // From class MHbDeviceDialogObserver. // Callback called when data is received from a device dialog. @@ -393,3 +543,47 @@ BOstraceFunctionExit0( DUMMY_DEVLIST ); } +// --------------------------------------------------------------------------- +// Activate a timer which will automatically close the dialog when expired. +// --------------------------------------------------------------------------- +// +void CBluetoothNotification::SetCloseTimer(TInt aAfter) + { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aAfter ); + TRAP_IGNORE(iActive = CBtSimpleActive::NewL(*this, EWaitingForClosing )); + User::LeaveIfError( iClosingTimer.CreateLocal() ); + iClosingTimer.After(iActive->iStatus, aAfter); + iActive->GoActive(); + } + +// --------------------------------------------------------------------------- +// From MBtSimpleActiveObserver +// --------------------------------------------------------------------------- +// +void CBluetoothNotification::RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus ) + { + (void)aActive; + (void)aStatus; + Close(); + } + +// --------------------------------------------------------------------------- +// From MBtSimpleActiveObserver +// --------------------------------------------------------------------------- +// +void CBluetoothNotification::CancelRequest( TInt aRequestId ) + { + (void)aRequestId; + // ignore + } + +// --------------------------------------------------------------------------- +// From MBtSimpleActiveObserver +// --------------------------------------------------------------------------- +// +void CBluetoothNotification::HandleError( CBtSimpleActive* aActive, TInt aError ) + { + (void)aActive; + (void)aError; + // ignore + } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifbasepairinghandler.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifbasepairinghandler.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifbasepairinghandler.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,9 @@ // void CBTNotifBasePairingHandler::BaseConstructL( ) { - iActive = CBtSimpleActive::NewL( *this, 0 ); + iActive = CBtSimpleActive::NewL( *this, 0 ); + iPairingCancelledByUser = EFalse; + iTrustDevice = EFalse; } // --------------------------------------------------------------------------- @@ -132,31 +134,59 @@ void CBTNotifBasePairingHandler::ShowPairingResultNoteL(TInt aResult) { BOstraceFunctionEntry0( DUMMY_DEVLIST ); - CBluetoothNotification* notification = + iNotification = iParent.ConnectionTracker().NotificationManager()->GetNotification(); - User::LeaveIfNull( notification ); // For OOM exception, leaves with KErrNoMemory + User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory TBTDialogResourceId resourceId = EPairingSuccess; if(KErrNone != aResult) { resourceId = EPairingFailureOk; + iNotification->SetNotificationType( TBluetoothDialogParams::EQuery, resourceId ); } - notification->SetNotificationType( TBluetoothDialogParams::ENote, resourceId ); + else + { + iNotification->SetNotificationType( TBluetoothDialogParams::ENote, resourceId ); + } + const CBtDevExtension* dev = iParent.BTDevRepository().Device(iAddr); if(dev) { - User::LeaveIfError(notification->SetData( TBluetoothDeviceDialog::EDeviceName, dev->Alias())); - User::LeaveIfError(notification->SetData( TBluetoothDeviceDialog::EDeviceClass, dev->Device().DeviceClass().DeviceClass())); + User::LeaveIfError(iNotification->SetData( TBluetoothDeviceDialog::EDeviceName, dev->Alias())); + User::LeaveIfError(iNotification->SetData( TBluetoothDeviceDialog::EDeviceClass, dev->Device().DeviceClass().DeviceClass())); } else { TBTDeviceName name; iAddr.GetReadable(name); - User::LeaveIfError(notification->SetData( TBluetoothDialogParams::EAddress, name )); - User::LeaveIfError(notification->SetData( TBluetoothDeviceDialog::EDeviceClass, 0)); // No device class + User::LeaveIfError(iNotification->SetData( TBluetoothDialogParams::EAddress, name )); + User::LeaveIfError(iNotification->SetData( TBluetoothDeviceDialog::EDeviceClass, 0)); // No device class } - iParent.ConnectionTracker().NotificationManager()->QueueNotificationL( notification); + iParent.ConnectionTracker().NotificationManager()->QueueNotificationL( iNotification); BOstraceFunctionExit0( DUMMY_DEVLIST ); } +// --------------------------------------------------------------------------- +// The notifier can call this function to inform the handler +// when the pairing is cancelled by the user. This is used +// to decide if a pairing fails dialog must be displayed or not +// --------------------------------------------------------------------------- +// +void CBTNotifBasePairingHandler::PairingCancelledByUser() + { + iPairingCancelledByUser = ETrue; + } + +// --------------------------------------------------------------------------- +// The notifier call this function whenever the trust checkbox is checked +// in the accept pairing dialog. +// This is needed because we want to trust the device only when pairing +// is successfull. +// --------------------------------------------------------------------------- +// +void CBTNotifBasePairingHandler::SetTrusted() + { + iTrustDevice = ETrue; + } + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -25,8 +25,10 @@ #include "btnotifserver.h" #include "btnotificationmanager.h" #include "btnotifclientserver.h" + // Key description length const TInt KMaxKeyDesCLength = 20; +const TInt KLastUsedDevices = 5; // ======== MEMBER FUNCTIONS ======== @@ -80,7 +82,6 @@ iDevices.ResetAndDestroy(); iDevices.Close(); delete iDiscoverer; - } // --------------------------------------------------------------------------- @@ -131,15 +132,14 @@ if(iServer.DevRepository().IsInitialized()) { iLoadDevices = ETrue; + iDevices.ResetAndDestroy(); if(iServer.DevRepository().AllDevices().Count()==0) { PrepareNotificationL(TBluetoothDialogParams::EDeviceSearch, ENoResource); - iDevices.ResetAndDestroy(); iDiscoverer->DiscoverDeviceL(); } else { - iDevices.ResetAndDestroy(); PrepareNotificationL(TBluetoothDialogParams::EMoreDevice, ENoResource); LoadUsedDevicesL(); } @@ -180,15 +180,10 @@ if ( !iMessage.IsNull() ) { - // TInt sel = val;// - TBluetoothDialogParams::EDialogExt; TBTDeviceResponseParamsPckg devParams; if ( val > -1 && val < iDevices.Count() ) { TRAP(err,SendSelectedDeviceL(aData)); - /* devParams().SetDeviceAddress( iDevices[val]->Addr() ); - devParams().SetDeviceClass(iDevices[val]->Device().DeviceClass()); - devParams().SetDeviceName(iDevices[val]->Alias()); - err = iMessage.Write( EBTNotifSrvReplySlot, devParams );*/ iNotification->RemoveObserver(); iNotification->Close(); // Also dequeues the notification from the queue. iNotification = NULL; @@ -241,11 +236,6 @@ void CBTNotifDeviceSelector::HandleNextDiscoveryResultL( const TInquirySockAddr& aAddr, const TDesC& aName ) { - // Todo: look for this device in repository before creating it. - TBuf addr; - - - CBtDevExtension* devext = GetDeviceFromRepositoryL(aAddr.BTAddr()); if(!devext) @@ -263,41 +253,7 @@ {// conditional check required as CAdvanceDevDiscoverer sends discovered devices at times // even after canceldiscovery is issued and notification is set to NULL // this causes EExcDataAbort - CHbSymbianVariantMap* map = iNotification->Data(); -/* TBuf keyStr; - CHbSymbianVariant* devEntry; - - keyStr.Num( TBluetoothDialogParams::EDialogExt + iDevices.Count() - 1 ); - devEntry = CHbSymbianVariant::NewL( (TAny*) &(devext->Alias()), - CHbSymbianVariant::EDes ); - map->Add( keyStr, devEntry );*/ - - User::LeaveIfError(iNotification->SetData(TBluetoothDeviceDialog::EDeviceName, - devext->Alias())); - - devext->Addr().GetReadable(addr); - User::LeaveIfError(iNotification->SetData(TBluetoothDialogParams::EAddress,addr)); - - TInt classOfDevice; - classOfDevice = devext->Device().DeviceClass().DeviceClass(); - User::LeaveIfError(iNotification->SetData(TBluetoothDeviceDialog::EDeviceClass,classOfDevice)); - - TBool status; - status = isBonded( devext->Device()); - - // setMajorProperty(majorProperty, _L("Bonded"), isBonded( devArray[i]->Device() )); - AddDataL(map,_L("Bonded"),&status,CHbSymbianVariant::EBool); - status = devext->Device().GlobalSecurity().Banned(); - AddDataL(map,_L("Blocked"),&status, - CHbSymbianVariant::EBool); - status = devext->Device().GlobalSecurity().NoAuthorise(); - AddDataL(map,_L("Trusted"),&status, - CHbSymbianVariant::EBool); - status = devext->ServiceConnectionStatus() == EBTEngConnected; - AddDataL(map,_L("Connected"),&status, - CHbSymbianVariant::EBool); - - iNotification->Update(); + LoadDeviceDetailsL(*devext); } } @@ -338,16 +294,15 @@ if(!iLoadDevices) { iLoadDevices = ETrue; + iDevices.ResetAndDestroy(); if(iServer.DevRepository().AllDevices().Count()==0) { - iDevices.ResetAndDestroy(); TRAP(err, { PrepareNotificationL(TBluetoothDialogParams::EDeviceSearch, ENoResource); iDiscoverer->DiscoverDeviceL(); } ); } else { - iDevices.ResetAndDestroy(); TRAP( err, {PrepareNotificationL( TBluetoothDialogParams::EMoreDevice, ENoResource); @@ -410,73 +365,120 @@ void CBTNotifDeviceSelector::LoadUsedDevicesL() { const RDevExtensionArray& devArray= iServer.DevRepository().AllDevices(); - TBuf addr; for(TInt i=0; i< devArray.Count(); i++ ) { - const TTime& usedTime = devArray[i]->Device().Used(); - TTime monthBack; - monthBack.HomeTime(); - monthBack -= TTimeIntervalDays(30); - if(usedTime >= monthBack) - { - iDevices.AppendL( devArray[i]->CopyL() ); - CHbSymbianVariantMap* map = iNotification->Data(); - // TBuf keyStr; - // CHbSymbianVariant* devEntry; + iDevices.AppendL( devArray[i]->CopyL() ); + } + SortUsedDevicesL(); + RemoveUnWantedDevices(); + SendLastUsedDevicesL(); + SendPairedDevicesL(); + + } + - // keyStr.Num( TBluetoothDialogParams::EDialogExt + iDevices.Count() - 1 ); -// devEntry = CHbSymbianVariant::NewL( (TAny*) &(devArray[i]->Alias()), - // CHbSymbianVariant::EDes ); - // map->Add( keyStr, devEntry, ); - User::LeaveIfError(iNotification->SetData(TBluetoothDeviceDialog::EDeviceName, - devArray[i]->Alias())); -// AddDataL(map,keyStr,&(devArray[i]->Alias()),CHbSymbianVariant::EDes); - devArray[i]->Addr().GetReadable(addr); - User::LeaveIfError(iNotification->SetData(TBluetoothDialogParams::EAddress,addr)); - addr.Zero(); - TInt classOfDevice; - classOfDevice = devArray[i]->Device().DeviceClass().DeviceClass(); - User::LeaveIfError(iNotification->SetData(TBluetoothDeviceDialog::EDeviceClass,classOfDevice)); - - TBool status; - status = isBonded( devArray[i]->Device()); - - // setMajorProperty(majorProperty, _L("Bonded"), isBonded( devArray[i]->Device() )); - AddDataL(map,_L("Bonded"),&status,CHbSymbianVariant::EBool); - status = devArray[i]->Device().GlobalSecurity().Banned(); - AddDataL(map,_L("Blocked"),&status, - CHbSymbianVariant::EBool); - status = devArray[i]->Device().GlobalSecurity().NoAuthorise(); - AddDataL(map,_L("Trusted"),&status, - CHbSymbianVariant::EBool); - status = devArray[i]->ServiceConnectionStatus() == EBTEngConnected; - AddDataL(map,_L("Connected"),&status, - CHbSymbianVariant::EBool); - // set blocked status: -/* setMajorProperty(majorProperty, BtuiDevProperty::Blocked, - devArray[i]->Device().GlobalSecurity().Banned() ); - // set trusted status: - setMajorProperty(majorProperty, BtuiDevProperty::Trusted, - devArray[i]->Device().GlobalSecurity().NoAuthorise() ); - // set connected status: - // EBTEngConnecting is an intermediate state between connected and not-connected, - // we do not treat it as connected: - setMajorProperty(majorProperty, BtuiDevProperty::Connected, devArray[i]->ServiceConnectionStatus() == EBTEngConnected); +void CBTNotifDeviceSelector::SortUsedDevicesL() + { + TInt count = iDevices.Count(); + for(TInt i=0;i<(count-1);i++) + { + for(TInt j=0;j<(count-(i+1));j++) + { + if(iDevices[j]->Device().Used().Int64() < iDevices[j+1]->Device().Used().Int64()) + { + CBtDevExtension* devextension = iDevices[j+1]; + iDevices.Remove(j+1); + iDevices.InsertL(devextension,j); + } + } + } + } + - */ - - // AddDataL(map,keyStr,&(devArray[i]->Alias()),CHbSymbianVariant::EDes); - iNotification->Update(); +void CBTNotifDeviceSelector::RemoveUnWantedDevices() + { + for(TInt i=(iDevices.Count()-1);i>-1;i--) + { + TInt classOfDevice = iDevices[i]->Device().DeviceClass().DeviceClass(); + TBTDeviceClass codClass = TBTDeviceClass( classOfDevice ); + TUint8 majorDevCls = codClass.MajorDeviceClass(); + if((majorDevCls ==EMajorDeviceComputer)|| (majorDevCls ==EMajorDevicePhone)) + { + } + else + { + CBtDevExtension* devextension = iDevices[i]; + iDevices.Remove(i); + delete devextension; + devextension = NULL; + iDevices.Compress(); } } } +void CBTNotifDeviceSelector::SendLastUsedDevicesL() + { + TInt Count = iDevices.Count(); + if(Count > KLastUsedDevices) + Count = KLastUsedDevices; + for(TInt i=0;i < Count;i++) + { + LoadDeviceDetailsL(*(iDevices[i])); + } + } +void CBTNotifDeviceSelector::SendPairedDevicesL() + { + TInt count = iDevices.Count(); + if(count > KLastUsedDevices) + { + for(TInt i = KLastUsedDevices; i< count; i++) + { + if(isBonded( iDevices[i]->Device())) + { + LoadDeviceDetailsL(*(iDevices[i])); + } + } + } + + } + +void CBTNotifDeviceSelector::LoadDeviceDetailsL(const CBtDevExtension& aDevice) + { + TBuf addr; + TUint32 classOfDevice; + TBool status; + + //TODO Need to create string constants Also try Enum value for device name rather + //than hadrdcoded string for key. It was not working previously + CHbSymbianVariantMap* map = iNotification->CreateNotificationDataL(); + AddDataL(map,_L("Name"),(TAny*) &(aDevice.Alias()),CHbSymbianVariant::EDes); + + aDevice.Addr().GetReadable(addr); + User::LeaveIfError(iNotification->SetData(TBluetoothDeviceDialog::EAddress,addr)); + + classOfDevice = aDevice.Device().DeviceClass().DeviceClass(); + User::LeaveIfError(iNotification->SetData(TBluetoothDeviceDialog::EDeviceClass,classOfDevice)); + + status = isBonded( aDevice.Device()); + AddDataL(map,_L("Bonded"),&status,CHbSymbianVariant::EBool); + + status = aDevice.Device().GlobalSecurity().Banned(); + AddDataL(map,_L("Blocked"),&status,CHbSymbianVariant::EBool); + + status = aDevice.Device().GlobalSecurity().NoAuthorise(); + AddDataL(map,_L("Trusted"),&status,CHbSymbianVariant::EBool); + + status = aDevice.ServiceConnectionStatus() == EBTEngConnected; + AddDataL(map,_L("Connected"),&status,CHbSymbianVariant::EBool); + iNotification->Update(); + } + /*! Tells if the given device is bonded. */ -TBool CBTNotifDeviceSelector::isBonded( const CBTDevice &dev ) +TBool CBTNotifDeviceSelector::isBonded( const CBTDevice &dev ) const { // todo: this has not addresses Just Works pairing mode yet. return dev.IsValidPaired() && dev.IsPaired() && @@ -512,20 +514,11 @@ return devArray[pos]->CopyL(); } return NULL; -/* addrSymbianToReadbleString( addrStr, addr ); - for (int i = 0; i < mData.count(); ++i ) { - if ( mData.at( i ).value( BtDeviceModel::ReadableBdaddrRole ) - == addrStr ) { - return i; - } - } - return -1;*/ } void CBTNotifDeviceSelector::SendSelectedDeviceL( CHbSymbianVariantMap& aData ) { - TInt err; TBTDeviceResponseParamsPckg devParams; TBTDevAddr address; User::LeaveIfError(address.SetReadable( diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifgeninfonotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifgeninfonotifier.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,220 @@ +/* +* 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 +#include +#include +#include +#include +#include "btnotifgeninfonotifier.h" + +#include "btnotifserver.h" +#include "btnotifclientserver.h" +#include "bluetoothnotification.h" +#include "btnotificationmanager.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ default constructor +// --------------------------------------------------------------------------- +// +CBTNotifGenInfoNotifier::CBTNotifGenInfoNotifier( CBTNotifServer* aServer ) +: iServer( aServer ) + { + } + + +// --------------------------------------------------------------------------- +// Symbian 2nd-phase constructor +// --------------------------------------------------------------------------- +// +void CBTNotifGenInfoNotifier::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// NewL. +// --------------------------------------------------------------------------- +// +CBTNotifGenInfoNotifier* CBTNotifGenInfoNotifier::NewL( CBTNotifServer* aServer ) + { + CBTNotifGenInfoNotifier* self = new( ELeave ) CBTNotifGenInfoNotifier( aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CBTNotifGenInfoNotifier::~CBTNotifGenInfoNotifier() + { + if( iNotification ) + { + // Clear the notification callback, we cannot receive them anymore. + iNotification->RemoveObserver(); + iNotification->Close(); // Also dequeues the notification from the queue. + iNotification = NULL; + } + } + +// --------------------------------------------------------------------------- +// Process a client message related to notifiers. +// --------------------------------------------------------------------------- +// +void CBTNotifGenInfoNotifier::HandleNotifierRequestL( const RMessage2& aMessage ) + { + BOstraceFunctionEntryExt ( DUMMY_LIST, this, aMessage.Function() ); + TInt opcode = aMessage.Function(); + TInt uid = aMessage.Int0(); + TInt err = KErrNone; + switch ( opcode ) + { + case EBTNotifCancelNotifier: + { + aMessage.Complete( err ); + break; + } + case EBTNotifUpdateNotifier: + { + aMessage.Complete( err ); + break; + } + case EBTNotifStartSyncNotifier: + { + TRAP(err,ShowNotificationL(aMessage)); + aMessage.Complete( err ); + break; + } + case EBTNotifStartAsyncNotifier: + { + TRAP(err,ShowNotificationL(aMessage)); + aMessage.Complete( err ); + break; + } + default: + { + aMessage.Complete( KErrNotSupported ); + } + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); + } + +// --------------------------------------------------------------------------- +// From class MBTNotificationResult. +// Handle a result from a user query. +// --------------------------------------------------------------------------- +// +void CBTNotifGenInfoNotifier::MBRDataReceived( CHbSymbianVariantMap& aData ) + { + (void) aData; + } + + +// --------------------------------------------------------------------------- +// From class MBTNotificationResult. +// The notification is finished. +// --------------------------------------------------------------------------- +// +void CBTNotifGenInfoNotifier::MBRNotificationClosed( TInt aError, const TDesC8& aData ) + { + (void) aError; + (void) aData; + iNotification->RemoveObserver(); + iNotification = NULL; + } + +// --------------------------------------------------------------------------- +// Get and configure a notification. +// --------------------------------------------------------------------------- +// +void CBTNotifGenInfoNotifier::ShowNotificationL(const RMessage2& aMessage ) + { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); + if(iNotification) + { + iNotification->RemoveObserver(); + iNotification = NULL; + } + iNotification = iServer->NotificationManager()->GetNotification(); + User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory + iNotification->SetObserver( this ); + iNotification->SetNotificationType( TBluetoothDialogParams::ENote, EGenericInfo ); + + // read the message parameters + RBuf8 params; + params.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) ); + aMessage.ReadL( EBTNotifSrvParamSlot, params ); + TBTGenericInfoNotifierParams notifparams; + TPckgC paramsPckg( notifparams ); + paramsPckg.Set( params ); + TInt notifType = paramsPckg().iMessageType; + + switch(notifType) + { + case EBTSwitchedOn: + case EBTSwitchedOff: + { + User::LeaveIfError(iNotification->SetData( TBluetoothDeviceDialog::EAdditionalInt, notifType)); + }break; + + default: + { + TBTDevAddr addr(paramsPckg().iRemoteAddr); + + // Get the device name + TInt err = KErrNone; + + const CBtDevExtension* dev = iServer->DevRepository().Device(addr); + if(dev) + { + if(0 != dev->Device().FriendlyName().Length()&& dev->Device().IsValidFriendlyName()) + { + // If we have a friendly name use it for the UI + err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceName, dev->Device().FriendlyName() ); + } + else + { + err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceName, dev->Alias() ); + } + if(!err) + { + err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceClass, dev->Device().DeviceClass().DeviceClass()); + } + } + else + { + TBTDeviceName name; + addr.GetReadable(name); + err = iNotification->SetData( TBluetoothDeviceDialog::EDeviceName, name); + } + if(!err) + { + err = iNotification->SetData( TBluetoothDeviceDialog::EAdditionalInt, notifType); + } + }break; + } + + iServer->NotificationManager()->QueueNotificationL( iNotification,CBTNotificationManager::EPriorityHigh ); + params.Close(); + BOstraceFunctionExit0( DUMMY_DEVLIST ); + } + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifincomingpairinghandler.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifincomingpairinghandler.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifincomingpairinghandler.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -22,6 +22,7 @@ #include "bluetoothtrace.h" const TInt KBTNotifWaitingForPairingOkDelay = 500000; // 0.5s +const TInt KBTNotif10SecondTimer = 10000000; enum TPairingStageId { @@ -156,6 +157,11 @@ { // Pair failure situation. SetPairResult( aResult ); + TRAPD(err , ShowPairingResultNoteL(KErrGeneral)); + if(!err && iNotification) + { + iNotification->SetCloseTimer(KBTNotif10SecondTimer); + } } BOstraceFunctionExit0( DUMMY_DEVLIST ); } @@ -175,6 +181,11 @@ iActivePairingOk->Cancel(); UnSetPairResult(); // we might have set it before (if the link went down) so we want to reset it. } + // If the user checked the trusted checkbox then we trust the device + if(iTrustDevice) + { + iParent.TrustDevice(iAddr); + } if (aDev.LinkKeyType() == ELinkKeyUnauthenticatedNonUpgradable && !iUserAwarePairing) { // If an application uses btengconnman API to connect a service of @@ -245,6 +256,11 @@ // it has been reset. But we need to have it set to an error as we are notifying // the "unable to pair" message. SetPairResult(KErrGeneral); + TRAPD(err , ShowPairingResultNoteL(KErrGeneral)); + if(!err && iNotification) + { + iNotification->SetCloseTimer(KBTNotif10SecondTimer); + } } iParent.RenewPairingHandler( NULL ); break; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifoutgoingpairinghandler.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifoutgoingpairinghandler.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifoutgoingpairinghandler.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -85,6 +85,7 @@ CBTNotifOutgoingPairingHandler::CBTNotifOutgoingPairingHandler( CBTNotifSecurityManager& aParent, const TBTDevAddr& aAddr) : CBTNotifBasePairingHandler( aParent, aAddr ) { + iDialogIsOrphan = EFalse; } // --------------------------------------------------------------------------- @@ -125,13 +126,18 @@ iBondingSession.Close(); iSocket.Close(); iTimer.Close(); - if( iNotification ) + if( iNotification && !iDialogIsOrphan) { // Clear the notification callback, we cannot receive them anymore. iNotification->RemoveObserver(); iNotification->Close(); // Also dequeues the notification from the queue. iNotification = NULL; } + if( iNotification && iDialogIsOrphan) + { + // Clear the notification callback, we cannot receive them anymore. + iNotification->RemoveObserver(); + } } // --------------------------------------------------------------------------- @@ -179,15 +185,8 @@ void CBTNotifOutgoingPairingHandler::CancelOutgoingPair() { BOstraceFunctionEntry0( DUMMY_DEVLIST ); + ShowPairingFailureDialog(); iParent.RenewPairingHandler( NULL ); - if( iNotification ) - { - // Cancel the user query - // This will also unregister us from the notification. - TInt err = iNotification->Close(); - NOTIF_NOTHANDLED( !err ) - iNotification = NULL; - } } @@ -207,7 +206,7 @@ { // if the pairing requires a stronger security level (indicated // by aMinPinLength), - // 0000 will not be supplied as it does not mmet the security + // 0000 will not be supplied as it does not meet the security // requirements const TUint8 KZeroPinValue = '0'; for (TInt i = 0; i < KDefaultHeadsetPinLength; ++i) @@ -229,14 +228,6 @@ { iParent.OutgoingPairCompleted( KErrCancel ); iParent.RenewPairingHandler( NULL ); - if( iNotification ) - { - // Cancel the user query - // This will also unregister us from the notification. - TInt err = iNotification->Close(); - NOTIF_NOTHANDLED( !err ) - iNotification = NULL; - } } } @@ -252,6 +243,9 @@ // if EPairingNotAllowed is recieved then any further pairing attempts will fail // so don't attampt to pair iPairMode = EBTOutgoingPairNone; + ShowPairingFailureDialog(); + iParent.OutgoingPairCompleted( aResult ); + iParent.RenewPairingHandler( NULL ); } } @@ -275,9 +269,15 @@ } iActive->Cancel(); SetPairResult( err ? err : KErrNone ); - if(err == KErrNone){ - TRAP_IGNORE(ShowPairingResultNoteL(err)); - } + if(err == KErrNone) + { + // Trust the device + if(iTrustDevice) + { + iParent.TrustDevice(iAddr); + } + TRAP_IGNORE(ShowPairingResultNoteL(err)); + } iParent.OutgoingPairCompleted( err ); iParent.RenewPairingHandler( NULL ); } @@ -292,7 +292,8 @@ CBtSimpleActive* aActive, TInt aStatus ) { BOstraceFunctionEntry0( DUMMY_DEVLIST ); - BOstraceExt3(TRACE_DEBUG,DUMMY_DEVLIST,"reqid %d, status: %d, pair mode %d ", aActive->RequestId(), aStatus, iPairMode); + BOstraceExt3(TRACE_DEBUG,DUMMY_DEVLIST,"reqid %d, status: %d, pair mode %d ", aActive->RequestId(), + aStatus, iPairMode); if( aActive->RequestId() == EDedicatedBonding && ( aStatus == KErrRemoteDeviceIndicatedNoBonding || ( aStatus && iPairMode != EBTOutgoingNoneHeadsetPairing && iPairMode != EBTOutgoingPairNone ) ) ) @@ -329,10 +330,10 @@ { SetPairResult( aStatus ); } - if ( aStatus ) + if ( aStatus <= KHCIErrorBase - EUnknownOpcode) { // retry pairing - if(aStatus && iPairingAttempt > 0) + if(iPairingAttempt > 0) { if(aActive->RequestId() == EGeneralBondingRetry && iPairMode == EBTOutgoingHeadsetManualPairing) { @@ -345,9 +346,17 @@ else { iPairingAttempt --; + iParent.OutgoingPairCompleted( aStatus ); ShowPairingFailureDialog(); + iParent.RenewPairingHandler( NULL ); } } + else + { + iParent.OutgoingPairCompleted( aStatus ); + ShowPairingFailureDialog(); + iParent.RenewPairingHandler( NULL ); + } } } @@ -394,14 +403,6 @@ (void) aActive; iParent.OutgoingPairCompleted( aError ); iParent.RenewPairingHandler( NULL ); - if( iNotification ) - { - // Cancel the user query - // This will also unregister us from the notification. - TInt err = iNotification->Close(); - NOTIF_NOTHANDLED( !err ) - iNotification = NULL; - } } // --------------------------------------------------------------------------- @@ -546,7 +547,11 @@ // void CBTNotifOutgoingPairingHandler::ShowPairingFailureDialog() { - PrepareNotificationL( TBluetoothDialogParams::EQuery, EPairingFailureOk ); + if(!iPairingCancelledByUser) + { + iDialogIsOrphan = ETrue; + PrepareNotificationL( TBluetoothDialogParams::EQuery, EPairingFailureOk ); + } } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifpairnotifier.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifpairnotifier.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifpairnotifier.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -26,6 +26,7 @@ #include "btnotificationmanager.h" #include "bluetoothnotification.h" #include "btnotifserver.h" +#include "btnotifbasepairinghandler.h" #include "bluetoothtrace.h" @@ -114,26 +115,30 @@ User::Leave(KErrServerBusy ); } - if(opCode == EBTNotifCancelNotifier){ + if(opCode == EBTNotifCancelNotifier) + { CancelPairingNotifierL(uid); aMessage.Complete(KErrNone); return; - } + } - // Store the parameters locally, we need them later again. - iParams.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) ); - aMessage.ReadL( EBTNotifSrvParamSlot, iParams ); - iNotifierMessage = aMessage; - - // Read the notifier parameters - ParseNotifierReqParamsL(); + if(opCode != EBTNotifUpdateNotifier) + { + // Store the parameters locally, we need them later again. + iParams.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) ); + aMessage.ReadL( EBTNotifSrvParamSlot, iParams ); + iNotifierMessage = aMessage; + // Read the notifier parameters + ParseNotifierReqParamsL(); + } - if(opCode ==EBTNotifUpdateNotifier ){ - UpdatePairingNotifierL(uid,iParams); + if(opCode ==EBTNotifUpdateNotifier ) + { + UpdatePairingNotifierL(aMessage); aMessage.Complete(KErrNone); return; - } - + } + const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote); if(dev) { @@ -182,8 +187,7 @@ } else { - TInt uid = iNotifierMessage.Int0(); - if(uid == KBTNumericComparisonNotifierUid.iUid) + if(uid == KBTNumericComparisonNotifierUid.iUid || uid == KBTPasskeyDisplayNotifierUid.iUid) { StartPairingUserInputL(); } @@ -220,23 +224,34 @@ // is currently being served. // --------------------------------------------------------------------------- // -void CBTNotifPairNotifier::UpdatePairingNotifierL( TInt aUid, const TDesC8& aParams ) +void CBTNotifPairNotifier::UpdatePairingNotifierL( const RMessage2& aMessage ) { BOstraceFunctionEntry0( DUMMY_DEVLIST ); - (void) aUid; + RBuf8 msgParams; + msgParams.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) ); + aMessage.ReadL( EBTNotifSrvParamSlot, msgParams ); TBTNotifierUpdateParams2 params; // Enough for reading the base class type parameter TPckgC paramsPckg( params ); - paramsPckg.Set( aParams ); + paramsPckg.Set( msgParams ); if( paramsPckg().Type() == TBTNotifierUpdateParams2::EPasskeyDisplay ) { // Paskey display update - keypress on remote device. + TBTPasskeyDisplayUpdateParams keyUpdate; + TPckgC keyUpdatePckg( keyUpdate ); + keyUpdatePckg.Set(msgParams); + THCIPasskeyEntryNotificationType keyType = keyUpdatePckg().KeypressNotification(); + if( iNotification ) + { + // Update the dialog + iNotification->Update(keyType); + } } else { // name update TBTDeviceNameUpdateParams nameUpdate; TPckgC nameUpdatePckg( nameUpdate ); - nameUpdatePckg.Set( aParams ); + nameUpdatePckg.Set( msgParams ); // The result means result of conversion to unicode if( !nameUpdatePckg().Result() ) { @@ -246,14 +261,17 @@ { if(0 != dev->Device().FriendlyName().Length()&& dev->Device().IsValidFriendlyName()) { - return; + iCurrentDeviceName = dev->Device().FriendlyName(); } - // We don't have a friendly name then use this name - iCurrentDeviceName = nameUpdatePckg().DeviceName(); - if(0 == iCurrentDeviceName.Length()) + else { - // The new name is empty then use the Alias - iCurrentDeviceName = dev->Alias(); + // We don't have a friendly name then use this name + iCurrentDeviceName = nameUpdatePckg().DeviceName(); + if(0 == iCurrentDeviceName.Length()) + { + // The new name is empty then use the Alias + iCurrentDeviceName = dev->Alias(); + } } } else @@ -274,6 +292,7 @@ } } } + msgParams.Close(); BOstraceFunctionExit0( DUMMY_DEVLIST ); } @@ -383,6 +402,7 @@ { // The returned data is the entered passkey. const CBtDevExtension* dev = iParent.BTDevRepository().Device(iRemote); + if(dev) { iParent.ConnectionTracker().UpdateBlockingHistoryL(&dev->Device(),aResult); @@ -393,7 +413,7 @@ userAcceptance() = aResult; resultData.Set( userAcceptance ); } - if( aResult ) + if( aResult ) { if( uid == KBTManPinNotifierUid.iUid || uid == KBTPinCodeEntryNotifierUid.iUid ) @@ -479,11 +499,10 @@ } if( iAcceptPairingResult ) { - // User accepted, continue to show pairing query. - // Trust the device - if(iCheckBoxState){ - iParent.TrustDevice(iRemote); - } + if(iCheckBoxState) + { + (iParent.PairingHandler())->SetTrusted(); + } StartPairingUserInputL(); } else @@ -621,6 +640,7 @@ paramsPckg.Set( iParams ); aLocallyInitiated = paramsPckg().LocallyInitiated(); aNumVal.Format( KPassKeyFormat, paramsPckg().NumericalValue() ); + aNumVal.Insert(3,_L(" ")); aAddr = paramsPckg().DeviceAddress(); iCurrentDeviceName = paramsPckg().DeviceName(); BOstraceFunctionExit0( DUMMY_DEVLIST ); @@ -681,6 +701,11 @@ result.Set( aData.Ptr(), result.Length() ); // Read the part containing the result // Set a pointer descriptor to capture the remaining data, if any. TPtrC8 dataPtr( aData.Mid( result.Length() ) ); + + if(!result()) + { + (iParent.PairingHandler())->PairingCancelledByUser(); + } if ( iState == EIncomingPairingAcceptconfirm ) { diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifpowernotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifpowernotifier.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,257 @@ +/* +* 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: Server class for handling commands from clients, and the +* central class in btnotif thread. +* +*/ + +#include +#include +#include +#include "btnotifpowernotifier.h" + +#include "btnotifserver.h" +#include "btnotifclientserver.h" +#include "bluetoothnotification.h" +#include "btnotificationmanager.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ default constructor +// --------------------------------------------------------------------------- +// +CBTNotifPowerNotifier::CBTNotifPowerNotifier( CBTNotifServer* aServer ) +: iServer( aServer ), iTurnBTOn(ETrue) + { + } + + +// --------------------------------------------------------------------------- +// Symbian 2nd-phase constructor +// --------------------------------------------------------------------------- +// +void CBTNotifPowerNotifier::ConstructL() + { + iBTEngSettings = CBTEngSettings::NewL(this); + } + +// --------------------------------------------------------------------------- +// NewL. +// --------------------------------------------------------------------------- +// +CBTNotifPowerNotifier* CBTNotifPowerNotifier::NewL( CBTNotifServer* aServer ) + { + CBTNotifPowerNotifier* self = new( ELeave ) CBTNotifPowerNotifier( aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CBTNotifPowerNotifier::~CBTNotifPowerNotifier() + { + if( iNotification ) + { + // Clear the notification callback, we cannot receive them anymore. + iNotification->RemoveObserver(); + iNotification->Close(); // Also dequeues the notification from the queue. + iNotification = NULL; + } + delete iBTEngSettings; + } + +// --------------------------------------------------------------------------- +// Process a client message related to notifiers. +// --------------------------------------------------------------------------- +// +void CBTNotifPowerNotifier::HandleNotifierRequestL( const RMessage2& aMessage ) + { + BOstraceFunctionEntryExt ( DUMMY_LIST, this, aMessage.Function() ); + TInt opcode = aMessage.Function(); + TInt uid = aMessage.Int0(); + TInt err = KErrNone; + switch ( opcode ) + { + case EBTNotifCancelNotifier: + { + aMessage.Complete( err ); + break; + } + case EBTNotifUpdateNotifier: + { + aMessage.Complete( err ); + break; + } + case EBTNotifStartSyncNotifier: + { + TRAP(err,ShowNotificationL(aMessage)); + if(err) + { + aMessage.Complete(err); + } + break; + } + case EBTNotifStartAsyncNotifier: + { + TRAP(err,ShowNotificationL(aMessage)); + if(err) + { + aMessage.Complete(err); + } + break; + } + default: + { + aMessage.Complete( KErrNotSupported ); + } + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); + } + +// --------------------------------------------------------------------------- +// From class MBTNotificationResult. +// Handle a result from a user query. +// --------------------------------------------------------------------------- +// +void CBTNotifPowerNotifier::MBRDataReceived( CHbSymbianVariantMap& aData ) + { + if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0) + { + iTurnBTOn = *(static_cast(aData.Get(_L("actionResult"))->Data())); + } + } + + +// --------------------------------------------------------------------------- +// From class MBTNotificationResult. +// The notification is finished. +// --------------------------------------------------------------------------- +// +void CBTNotifPowerNotifier::MBRNotificationClosed( TInt aError, const TDesC8& aData ) + { + (void) aError; + (void) aData; + + if(iTurnBTOn) + { + //Turn BT on. + iBTEngSettings->SetPowerState(EBTPowerOn); + } + + else if ( !iNotifierMessage.IsNull() ) + { + //User choose No. So, complete the request with out turning BT on. + iClientResponse() = EFalse; + iNotifierMessage.Write(EBTNotifSrvReplySlot, iClientResponse); + iNotifierMessage.Complete(KErrNone); + } + iNotification->RemoveObserver(); + iNotification = NULL; + } + +// --------------------------------------------------------------------------- +// Get and configure a notification. +// --------------------------------------------------------------------------- +// +void CBTNotifPowerNotifier::ShowNotificationL(const RMessage2& aMessage ) + { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); + + iNotifierMessage = aMessage; + + if(iNotification) + { + iNotification->RemoveObserver(); + iNotification = NULL; + } + iNotification = iServer->NotificationManager()->GetNotification(); + User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory + iNotification->SetObserver( this ); + //iNotification->SetNotificationType( TBluetoothDialogParams::ENote, EGenericInfo ); + + // read the message parameters + RBuf8 params; + params.CreateL( aMessage.GetDesLengthL( EBTNotifSrvParamSlot ) ); + aMessage.ReadL( EBTNotifSrvParamSlot, params ); + TBTGenericInfoNotifierParams notifparams; + TPckgC paramsPckg( notifparams ); + paramsPckg.Set( params ); + TInt notifType = paramsPckg().iMessageType; + + TCoreAppUIsNetworkConnectionAllowed offLineMode; + TBTEnabledInOfflineMode btEnabled; + iBTEngSettings->GetOfflineModeSettings(offLineMode, btEnabled); + + // Choose user interaction + // + if ( (btEnabled == EBTEnabledInOfflineMode) && + (offLineMode == ECoreAppUIsNetworkConnectionNotAllowed) ) + { + // Allowed to enable BT in offline mode and device is currently in offline mode. + // Launch the offline query notification dialog. + iNotification->SetNotificationType( TBluetoothDialogParams::EInformationDialog, EIssueOfflineQuery ); + iServer->NotificationManager()->QueueNotificationL( iNotification, CBTNotificationManager::EPriorityHigh ); + } + else if(offLineMode == ECoreAppUIsNetworkConnectionAllowed) + { + //Device not in offline mode, simply turn BT on. + iBTEngSettings->SetPowerState(EBTPowerOn); + } + else + { + //Return EFalse, indication that BT should not be switched on. + if(!iNotifierMessage.IsNull()) + { + iClientResponse() = EFalse; + iNotifierMessage.Write(EBTNotifSrvReplySlot, iClientResponse); + iNotifierMessage.Complete(KErrNone); + } + } + + params.Close(); + BOstraceFunctionExit0( DUMMY_DEVLIST ); + } + +void CBTNotifPowerNotifier::PowerStateChanged( TBTPowerStateValue aState ) + { + if(!iNotifierMessage.IsNull()) + { + if(aState == EBTPowerOn) + { + //Request to turn BT on was successful. + iClientResponse() = ETrue; + iNotifierMessage.Write(EBTNotifSrvReplySlot, iClientResponse); + iNotifierMessage.Complete(KErrNone); + } + else + { + //Request to turn BT on was not successful. + iClientResponse() = EFalse; + iNotifierMessage.Write(EBTNotifSrvReplySlot, iClientResponse); + iNotifierMessage.Complete(KErrNone); + } + } + } + +void CBTNotifPowerNotifier::VisibilityModeChanged( TBTVisibilityMode aState ) + { + (void) aState; + } + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifsecuritymanager.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifsecuritymanager.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifsecuritymanager.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -69,6 +69,7 @@ // void CBTNotifSecurityManager::ConstructL() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); // Connect to pairing server for authentication & simple pairing // results directly from the BT stack. // Pairing server doesn't exist if we run BT 2.0 stack: @@ -98,6 +99,7 @@ iPairNotifier = CBTNotifPairNotifier::NewL( *this ); iDevRepository.AddObserverL( this ); iServiceAuthorizer = CBTNotifServiceAuthorizer::NewL(*this); + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -122,6 +124,7 @@ // CBTNotifSecurityManager::~CBTNotifSecurityManager() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); delete iSSPResultActive; delete iAuthenResultActive; delete iPairNotifier; @@ -142,6 +145,7 @@ iMessage.Complete( KErrCancel ); } delete iServiceAuthorizer; + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -155,6 +159,7 @@ // void CBTNotifSecurityManager::SubscribeLocalAddress() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); // Check that we have the Bluetooth local address. If we don't then initialise anyway, but subscribe for an update. // This allows us to refresh our paired devices list to include updates made to the remote devices table of the // Bluetooth registry from a restore operation. We need to include these devices without mistaking them for new @@ -167,6 +172,7 @@ iPropertyLocalAddr.Subscribe( iLocalAddrActive->iStatus ); iLocalAddrActive->SetRequestId( ERegistryGetLocalAddress ); iLocalAddrActive->GoActive(); + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -202,8 +208,8 @@ // void CBTNotifSecurityManager::HandleBondingRequestL( const RMessage2& aMessage ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TInt opcode = aMessage.Function(); - TBTDevAddrPckgBuf addrPkg; switch( opcode ) { case EBTNotifPairDevice: @@ -236,6 +242,7 @@ User::Leave( KErrArgument ); } } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -244,6 +251,7 @@ // void CBTNotifSecurityManager::HandleNotifierRequestL( const RMessage2& aMessage ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); if(aMessage.Int0() == KBTManAuthNotifierUid.iUid) { iServiceAuthorizer->StartNotifierL( aMessage ); @@ -300,8 +308,10 @@ void CBTNotifSecurityManager::RenewPairingHandler( CBTNotifBasePairingHandler* aPairingHandler ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); delete iPairingHandler; iPairingHandler = aPairingHandler; + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -310,12 +320,14 @@ // void CBTNotifSecurityManager::OutgoingPairCompleted( TInt aErr ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); // the meaning of KHCIErrorBase equals KErrNone. Hide this specific BT stack // detail from clients: if ( !iMessage.IsNull() ) { iMessage.Complete( (aErr == KHCIErrorBase) ? KErrNone : aErr ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -324,11 +336,13 @@ // void CBTNotifSecurityManager::SessionClosed( CSession2* aSession ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); BOstrace1(TRACE_DEBUG,DUMMY_DEVLIST," session %x", aSession); if ( !iMessage.IsNull() && iMessage.Session() == aSession ) { iMessage.Complete( KErrCancel ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -337,6 +351,7 @@ // void CBTNotifSecurityManager::UnpairDevice( const TBTDevAddr& aAddr ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TIdentityRelation addrComp( CompareDeviceByAddress ); TBTNamelessDevice dev; dev.SetAddress( aAddr ); @@ -372,10 +387,12 @@ (void) UpdateRegDevice( dev ); } } + BOstraceFunctionExit0( DUMMY_DEVLIST); } void CBTNotifSecurityManager::BlockDevice( const TBTDevAddr& aAddr , TBool aBanned) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TIdentityRelation addrComp( CompareDeviceByAddress ); TBTNamelessDevice dev; dev.SetAddress( aAddr ); @@ -394,10 +411,12 @@ dev.SetGlobalSecurity(security); (void)UpdateRegDevice(dev); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } TInt CBTNotifSecurityManager::AddUiCookieJustWorksPaired( const TBTNamelessDevice& aDev ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TInt err( KErrNone ); // There might be UI cookies used by other applications, // we should not overwrite them. @@ -412,6 +431,7 @@ err = UpdateRegDevice( dev ); BOstrace1(TRACE_DEBUG,DUMMY_DEVLIST,"Outgoing Pairing write Ui cookie ret %d", err ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); return err; } @@ -421,11 +441,13 @@ // TInt CBTNotifSecurityManager::UpdateRegDevice( const TBTNamelessDevice& aDev ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TRequestStatus status( KRequestPending ); // update the device in registry synchronously iRegistry.ModifyDevice( aDev, status ); User::WaitForRequest( status ); BOstrace1(TRACE_DEBUG,DUMMY_DEVLIST,"UpdateRegDevice, ret %d", status.Int()); + BOstraceFunctionExit0( DUMMY_DEVLIST); return status.Int(); } @@ -437,6 +459,7 @@ void CBTNotifSecurityManager::GetPinCode( TBTPinCode& aPin, const TBTDevAddr& aAddr, TInt aMinPinLength ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); if ( iPairingHandler ) { iPairingHandler->GetPinCode( aPin, aAddr, aMinPinLength ); @@ -447,6 +470,7 @@ aPin.Zero(); aPin().iLength = 0; } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -455,12 +479,14 @@ // TBTEngConnectionStatus CBTNotifSecurityManager::ConnectStatus( const TBTDevAddr& aAddr ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); const CBtDevExtension* devExt = iDevRepository.Device(aAddr); TBTEngConnectionStatus status = EBTEngNotConnected; if ( devExt ) { status = devExt->ServiceConnectionStatus(); } + BOstraceFunctionExit0( DUMMY_DEVLIST); return status; } @@ -471,6 +497,7 @@ // void CBTNotifSecurityManager::RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); BOstraceExt2(TRACE_DEBUG,DUMMY_DEVLIST,"aId: %d, aStatus: %d", aActive->RequestId(), aStatus); // Check which request is completed. switch( aActive->RequestId() ) @@ -510,6 +537,7 @@ // Should not be possible, but no need for handling. break; } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -519,6 +547,7 @@ // void CBTNotifSecurityManager::CancelRequest( TInt aRequestId ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); switch ( aRequestId ) { case ESimplePairingResult: @@ -540,6 +569,7 @@ break; } } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -548,9 +578,11 @@ // void CBTNotifSecurityManager::HandleError( CBtSimpleActive* aActive, TInt aError ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); BOstraceExt2(TRACE_DEBUG,DUMMY_DEVLIST,"request id: %d, error: %d", aActive->RequestId(), aError); (void) aActive; (void) aError; + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -559,6 +591,7 @@ // void CBTNotifSecurityManager::RepositoryInitialized() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TRAPD(err, UpdatePairedDeviceListL() ); if ( !err && iPairingHandler ) { @@ -566,6 +599,7 @@ // pairing operation already. // todo: is some handling for above case needed? } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -574,6 +608,7 @@ // void CBTNotifSecurityManager::DeletedFromRegistry( const TBTDevAddr& aAddr ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); // We are only interested in the removal of a paired device. // thus check whether it is in our local paired list: TInt i = iPairedDevices.Find( aAddr, MatchDeviceAddress); @@ -581,6 +616,7 @@ { iPairedDevices.Remove( i ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -589,12 +625,14 @@ // void CBTNotifSecurityManager::AddedToRegistry( const CBtDevExtension& aDevice ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); // We are only interested in paired device. if ( CBtDevExtension::IsBonded( aDevice.Device().AsNamelessDevice() ) ) { TRAP_IGNORE( HandleRegistryBondingL( aDevice.Device().AsNamelessDevice() ) ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } @@ -605,18 +643,22 @@ void CBTNotifSecurityManager::ChangedInRegistry( const CBtDevExtension& aDevice, TUint aSimilarity ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); // We are only interested in paired device. // thus check whether it is in our local paired list: TInt i = iPairedDevices.Find( aDevice.Addr(), MatchDeviceAddress); TBool bonded = CBtDevExtension::IsBonded( aDevice.Device().AsNamelessDevice() ); if ( i == KErrNotFound ) { + BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,"Not found"); if ( bonded ) { + BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,"Not found but bonded"); TRAP_IGNORE( HandleRegistryBondingL( aDevice.Device().AsNamelessDevice() ) ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); return; } // Device was inregistry before, but we need to evaluate its bonding @@ -630,13 +672,17 @@ // no pairing or linkkey change. Nothing to do for pairing handling. // but we'd better update local copy just in case other data // of this device is needed by someone: + BOstrace0(TRACE_DEBUG,DUMMY_DEVLIST,"No pairing or link key change"); iPairedDevices[i] = aDevice.Device().AsNamelessDevice(); + BOstraceFunctionExit0( DUMMY_DEVLIST); return; } - if ( !CBtDevExtension::IsBonded( aDevice.Device().AsNamelessDevice() ) ) + if ( !bonded ) { // device is not user-bonded. + UnTrustDevice(iPairedDevices[i].Address()); iPairedDevices.Remove( i ); + BOstraceFunctionExit0( DUMMY_DEVLIST); return; } // it is a new paired device if its link-key has been upgraded @@ -647,6 +693,7 @@ HandleRegistryBondingL( aDevice.Device().AsNamelessDevice() ) ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -657,8 +704,10 @@ void CBTNotifSecurityManager::ServiceConnectionChanged( const CBtDevExtension& aDevice, TBool aConnected ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); (void) aDevice; (void) aConnected; + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -667,6 +716,7 @@ // TInt CBTNotifSecurityManager::SetPairObserver(const TBTDevAddr& aAddr, TBool aActivate) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); BOstrace1(TRACE_DEBUG,DUMMY_DEVLIST,"%d", aActivate); BtTraceBtAddr0(TRACE_DEBUG,DUMMY_DEVLIST, aAddr ); TInt err( KErrNone ); @@ -676,6 +726,7 @@ { iPairingHandler->StopPairHandling( aAddr ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); return err; } @@ -691,6 +742,7 @@ // let the handler decide what to do: err = iPairingHandler->ObserveIncomingPair( aAddr ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); return err; } @@ -700,6 +752,7 @@ // void CBTNotifSecurityManager::PairDeviceL( const TBTDevAddr& aAddr, TUint32 aCod ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); if ( !iPairingHandler) { // no existing pair handling, create one: @@ -707,6 +760,7 @@ } // let pair handler decide what to do: iPairingHandler->HandleOutgoingPairL( aAddr, aCod ); + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -716,6 +770,7 @@ // void CBTNotifSecurityManager::CancelSubscribePairingAuthenticate() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); if( iSSPResultActive ) { // Cancel listening Simple pairing result @@ -725,6 +780,7 @@ { iAuthenResultActive->Cancel(); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -734,11 +790,13 @@ // void CBTNotifSecurityManager::SubscribeSspPairingResult() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); if ( !iSSPResultActive->IsActive() ) { iPairingResult.SimplePairingResult( iSimplePairingRemote, iSSPResultActive->RequestStatus() ); iSSPResultActive->GoActive(); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -748,12 +806,14 @@ // void CBTNotifSecurityManager::SubscribeAuthenticateResult() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); if ( !iAuthenResultActive->IsActive() ) { // Subscribe authentication result (which requires pairing for unpaired devices) iAuthenResult.AuthenticationResult( iAuthenticateRemote, iAuthenResultActive->RequestStatus() ); iAuthenResultActive->GoActive(); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -762,6 +822,7 @@ // void CBTNotifSecurityManager::HandlePairingResultL( const TBTDevAddr& aAddr, TInt aResult ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); BOstrace1(TRACE_DEBUG,DUMMY_DEVLIST,"result %d", aResult); BtTraceBtAddr0(TRACE_DEBUG,DUMMY_DEVLIST, aAddr ); @@ -786,10 +847,12 @@ iPairingHandler = CBTNotifIncomingPairingHandler::NewL( *this, aAddr ); } } + if ( iPairingHandler ) { iPairingHandler->HandlePairServerResult( aAddr, aResult ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -798,6 +861,7 @@ // void CBTNotifSecurityManager::UpdatePairedDeviceListL() { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); iPairedDevices.Reset(); const RDevExtensionArray& alldevs = iDevRepository.AllDevices(); for ( TInt i = 0; i < alldevs.Count(); i++ ) @@ -807,6 +871,7 @@ iPairedDevices.AppendL( alldevs[i]->Device().AsNamelessDevice() ); } } + BOstraceFunctionExit0( DUMMY_DEVLIST); } // --------------------------------------------------------------------------- @@ -816,6 +881,7 @@ void CBTNotifSecurityManager::HandleRegistryBondingL( const TBTNamelessDevice& aNameless) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TInt err = iPairedDevices.Append( aNameless ); if ( !err && !iPairingHandler) { @@ -837,10 +903,12 @@ // let us try aborting pairing handling iPairingHandler->StopPairHandling( aNameless.Address() ); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } void CBTNotifSecurityManager::TrustDevice( const TBTDevAddr& aAddr ) { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); TIdentityRelation addrComp( CompareDeviceByAddress ); TBTNamelessDevice dev; dev.SetAddress( aAddr ); @@ -856,5 +924,32 @@ dev.SetGlobalSecurity(security); (void)UpdateRegDevice(dev); } + BOstraceFunctionExit0( DUMMY_DEVLIST); } +void CBTNotifSecurityManager::UnTrustDevice( const TBTDevAddr& aAddr ) + { + BOstraceFunctionEntry0( DUMMY_DEVLIST ); + TIdentityRelation addrComp( CompareDeviceByAddress ); + TBTNamelessDevice dev; + dev.SetAddress( aAddr ); + TRequestStatus status( KRequestPending ); + + iRegistry.GetDevice(dev,status); + User::WaitForRequest( status ); + if(status == KErrNone) + { + TBTDeviceSecurity security = dev.GlobalSecurity(); + security.SetNoAuthorise(EFalse); + dev.SetGlobalSecurity(security); + (void)UpdateRegDevice(dev); + } + BOstraceFunctionExit0( DUMMY_DEVLIST); + } + +CBTNotifBasePairingHandler* CBTNotifSecurityManager::PairingHandler() + { + return iPairingHandler; + } + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifserver.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifserver.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifserver.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -23,8 +23,10 @@ #include "btnotifsettingstracker.h" #include "btnotificationmanager.h" #include "btnotifdeviceselector.h" +#include "btnotifgeninfonotifier.h" #include "btnotifserversecpolicy.h" #include "btnotifclientserver.h" +#include "btnotifpowernotifier.h" /** Panic category */ _LIT( KBTNotifPanic, "BTNotif panic" ); @@ -121,6 +123,8 @@ iNotificationMgr = CBTNotificationManager::NewL( this ); iSettingsTracker = CBTNotifSettingsTracker::NewL( this ); iConnectionTracker = CBTNotifConnectionTracker::NewL( this ); + iGenInfoNotifier = CBTNotifGenInfoNotifier::NewL( this ); + iBTPowerNotifier = CBTNotifPowerNotifier::NewL( this ); iTimer = CDeltaTimer::NewL(CActive::EPriorityLow); TCallBack shutdownCb( ShutdownTimeout, this ); iShutdownTimerEntry.Set( shutdownCb ); @@ -160,6 +164,8 @@ delete iSettingsTracker; delete iConnectionTracker; delete iNotificationMgr; + delete iGenInfoNotifier; + delete iBTPowerNotifier; delete iAsyncCb; delete iTimer; delete iDevRep; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifserviceauthorizer.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifserviceauthorizer.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifserviceauthorizer.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -126,7 +126,7 @@ return; } - // User must namually authorize this request. + // User must manually authorize this request. // Get needed info for the dialog: iPairedDevice = (dev == NULL ) ? EFalse : dev->IsUserAwareBonded(); iDeviceClass = (dev == NULL ) ? 0 : dev->Device().DeviceClass().DeviceClass(); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifsrv/src/btnotifsession.cpp --- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifsession.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifsession.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -17,6 +17,7 @@ #include "btnotifsession.h" #include +#include #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS #include #endif @@ -24,6 +25,8 @@ #include "btnotifsettingstracker.h" #include "btnotifconnectiontracker.h" #include "btnotifdeviceselector.h" +#include "btnotifgeninfonotifier.h" +#include "btnotifpowernotifier.h" // ======== LOCAL FUNCTIONS ======== @@ -92,6 +95,8 @@ void CBTNotifSession::ServiceL( const RMessage2& aMessage ) { CBTNotifConnectionTracker* connTracker = Server()->ConnectionTracker(); + CBTNotifGenInfoNotifier* genInfoNotifier = Server()->GenericInfoNotifier(); + CBTNotifPowerNotifier* bTPowerNotifier = Server()->BTPowerNotifier(); TInt opCode = aMessage.Function(); TInt uid = aMessage.Int0(); TInt err( KErrNotReady ); @@ -136,6 +141,26 @@ aMessage.Complete( err ); } } + else + { + if(uid == KBTGenericInfoNotifierUid.iUid & NULL != genInfoNotifier) + { + TRAP(err,genInfoNotifier->HandleNotifierRequestL(aMessage)); + if(err) + { + aMessage.Complete(err); + } + } + + else if(uid == KPowerModeSettingNotifierUid.iUid && NULL != bTPowerNotifier) + { + TRAP(err, bTPowerNotifier->HandleNotifierRequestL(aMessage)); + if(err) + { + aMessage.Complete(err); + } + } + } } break; case EBTNotifPairDevice: diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/btnotifwrapper/src/btnotifwrapperproxy.cpp --- a/bluetoothengine/btnotif/btnotifwrapper/src/btnotifwrapperproxy.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/btnotifwrapper/src/btnotifwrapperproxy.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS #include #endif @@ -41,11 +42,11 @@ /** Channel for OBEX passkey notifiers */ //const TUid KBTObexAuthChannel = {0x00000603}; /** Channel for power mode query */ -//const TUid KBTPowerModeChannel = {0x00000605}; +const TUid KBTPowerModeChannel = {0x00000605}; /** Channel for query notifiers */ //const TUid KBTQueryChannel = {0x00000606}; /** Channel for power mode query */ -//const TUid KBTInfoChannel = {0x00000610}; +const TUid KBTInfoChannel = {0x00000610}; // ======== LOCAL FUNCTIONS ======== @@ -84,7 +85,10 @@ // KBTUserConfirmationNotifierUid for incoming JW dedicated bonding. CreateAndAppendNotifierLC( *notifiers, KDeviceSelectionNotifierUid, KBTDiscoveryChannel ); + + CreateAndAppendNotifierLC( *notifiers, KBTGenericInfoNotifierUid, KBTInfoChannel ); + CreateAndAppendNotifierLC( *notifiers, KPowerModeSettingNotifierUid, KBTPowerModeChannel ); /* * todo: * Other notifiers to be migrated: @@ -92,12 +96,8 @@ * existing stack notifiers: * CreateAndAppendNotifierL( aArray, KPbapAuthNotifierUid, KBTObexPINChannel ); * - * S60 SDK API: - * CreateAndAppendNotifierL( aArray, KPowerModeSettingNotifierUid, KBTPowerModeChannel ); - * * S60-defined platform: * CreateAndAppendNotifierL( aArray, KBTObexPasskeyQueryNotifierUid, KBTObexPINChannel ); - * CreateAndAppendNotifierL( aArray, KBTGenericInfoNotifierUid, KBTInfoChannel ); * CreateAndAppendNotifierL( aArray, KBTGenericQueryNotifierUid, KBTQueryChannel ); * * new (PAN-related): diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/group/btnotifsrv.mmp --- a/bluetoothengine/btnotif/group/btnotifsrv.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/group/btnotifsrv.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -37,7 +37,8 @@ SOURCE btnotifsettingstracker.cpp SOURCE btnotificationmanager.cpp SOURCE bluetoothnotification.cpp -SOURCE btnotifdeviceselector.cpp +SOURCE btnotifdeviceselector.cpp +SOURCE btnotifgeninfonotifier.cpp SOURCE btnotifpairnotifier.cpp SOURCE btnotifbasepairinghandler.cpp SOURCE btnotifincomingpairinghandler.cpp @@ -45,13 +46,13 @@ SOURCE btnotifsecuritymanager.cpp SOURCE btnotifserviceauthorizer.cpp SOURCE btnotifutil.cpp +SOURCE btnotifpowernotifier.cpp USERINCLUDE ../btnotifsrv/inc ../inc MW_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE ../../inc -SYSTEMINCLUDE ../../../inc LIBRARY euser.lib LIBRARY esock.lib @@ -64,7 +65,7 @@ LIBRARY btengdevman.lib LIBRARY btserviceutil.lib LIBRARY HbCore.lib -LIBRARY commonengine.lib +LIBRARY CommonEngine.lib LIBRARY flogger.lib LIBRARY charconv.lib diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btnotif/inc/bluetoothdevicedialogs.h --- a/bluetoothengine/btnotif/inc/bluetoothdevicedialogs.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btnotif/inc/bluetoothdevicedialogs.h Fri Sep 03 16:17:59 2010 +0300 @@ -43,6 +43,11 @@ EPairingFailureOk, EVisibilityTimeout, EUnpairedDevice, + EGenericInfo, + EBluetoothTestMode, + ESendCompleted, + ESendCancelled, + EIssueOfflineQuery, EUnusedResource // The last ID }; @@ -70,8 +75,8 @@ EGlobalNotif, EUserAuthorization, EReceiveProgress, - ETransferFailed, - EReceiveDone + EReceiveDone, + EInformationDialog }; /** Enumeration for the notification parameters data type to be configured. */ @@ -94,7 +99,13 @@ EPairingRequest, ERecvFailed, ESendFailed, - EReceiveCompleted + EReceiveCompleted, + EBTAddress, + EOfflineQuery, + EMemoryFull, + EFileMoved, + EDriveNotFound, + EUnsupportedImages }; enum TDialogActionType @@ -152,7 +163,10 @@ EAdditionalDesc, EReceivingFileName, EReceivingFileSize, - EReceivedFileCount + EReceivedFileCount, + ELocalAddress, + EDriveLetter, + EDriveName }; inline TBluetoothDeviceDialog(); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btpbap/group/btpbap.mmp --- a/bluetoothengine/btpbap/group/btpbap.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btpbap/group/btpbap.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -40,12 +40,11 @@ APP_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE ../../inc -SYSTEMINCLUDE ../../../inc SYSTEMINCLUDE /epoc32/include/ecom LIBRARY euser.lib // Kernel API -LIBRARY ECom.lib +LIBRARY ecom.lib LIBRARY pbapcli.lib LIBRARY bluetooth.lib DEBUGLIBRARY flogger.lib // File logging diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsac/btrcc/group/btrcc.mmp --- a/bluetoothengine/btsac/btrcc/group/btrcc.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btsac/btrcc/group/btrcc.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -39,14 +39,13 @@ SOURCE btrccLinker.cpp SOURCE btrccPlugin.cpp SOURCE btrccAbsoluteVolumeLevelController.cpp -SOURCE btrccplayerstarter.cpp SOURCE btrccBrowsingAdapter.cpp SOURCE btrccLegacyVolumeLevelController.cpp SOURCE btrccVolumeLevelControllerBase.cpp SOURCE btrccActive.cpp USERINCLUDE ../inc ../../common -SYSTEMINCLUDE ../../../inc ../../../../inc +SYSTEMINCLUDE ../../../inc SYSTEMINCLUDE /epoc32/include/ecom /epoc32/include/mmf/server MW_LAYER_SYSTEMINCLUDE @@ -54,7 +53,7 @@ TARGET btrcc.rsc END -LIBRARY ECom.lib // Symbian E-Com Plugin definitions and types +LIBRARY ecom.lib // Symbian E-Com Plugin definitions and types LIBRARY euser.lib // User library LIBRARY esock.lib // Socket services LIBRARY bluetooth.lib // Bluetooth type definitions diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsac/btrcc/inc/btrccLinker.h --- a/bluetoothengine/btsac/btrcc/inc/btrccLinker.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btsac/btrcc/inc/btrccLinker.h Fri Sep 03 16:17:59 2010 +0300 @@ -45,8 +45,6 @@ class CRemConInterfaceSelector; class CRemConCoreApiController; class CBTRCCVolumeLevelController; -class CRemConCoreApiTarget; -class CPlayerStarter; class CBTRCCBrowsingAdapter; // CLASS DECLARATION @@ -293,10 +291,6 @@ // For receiving the accessory battery status CRemConBatteryApiTarget *iRemConBatteryTgt; - - CRemConCoreApiTarget* iCoreTarget; // not own - - CPlayerStarter* iPlayerStarter; // owned // For handling the browsing commands. CBTRCCBrowsingAdapter *iBrowsingAdapter; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsac/btrcc/inc/btrccplayerstarter.h --- a/bluetoothengine/btsac/btrcc/inc/btrccplayerstarter.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* -* Copyright (c) 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: This class implements starting Music play -* -* -*/ - - -#ifndef BTRCCPLAYERSTATER_H -#define BTRCCPLAYERSTATER_H - -// INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CRemConCoreApiTarget; - -/** -* This class listens to AVRCP PLAY command by headset,if music player is not running -* when such a command is received, it will be launched and requested to start playing. -* */ -NONSHARABLE_CLASS(CPlayerStarter) : - public CActive, public MRemConCoreApiTargetObserver - { - -public: - - /** - * Two-phased constructor. - * - */ - static CPlayerStarter* NewL(); - - /** - * Set the reference for AVRCP Core API command receiving and - * responses to those command. - */ - void SetCoreTarget(CRemConCoreApiTarget& aTarget); - - /** - * Destructor. - */ - ~CPlayerStarter(); - -private: // From CActive - - /** - * Informs the observer that an accessory has created a control - * connection to our device. - * @param None. - * @return None. - */ - void RunL(); - - /** - * Handles a possible leave from RunL(). - * @param aError The leave code from RunL(). - * @return KErrNone. - */ - TInt RunError(TInt aError); - - /** - * Cancels the volume change operation. - * @param None. - * @return None. - */ - void DoCancel(); - - // from base class MRemConCoreApiTargetObserver - - /** - * From MRemConCoreApiTargetObserver - * A 'play' command has been received. - * - * @param aSpeed The playback speed. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoPlay( - TRemConCoreApiPlaybackSpeed aSpeed, - TRemConCoreApiButtonAction aButtonAct ); - - /** - * From MRemConCoreApiTargetObserver - * A command has been received. - * - * @param aOperationId The operation ID of the command. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoCommand( - TRemConCoreApiOperationId aOperationId, - TRemConCoreApiButtonAction aButtonAct ); - -private: - - /** - * C++ default constructor. - */ - CPlayerStarter(); - - /** - * Symbian 2nd phase constructor. - */ - void ConstructL(); - - /** - * Start music player if it is not running yet. - */ - void StartPlayIfNeeded(); - - /** - * Tells if MPX music player is running or not. - */ - TBool IsMusicPlayerRunning(); - - /** - * Tells if Video player is running or not. - */ - TBool IsVideoPlayerRunning(); - - /** - * Launch MPX player. - */ - void LaunchMusicPlayerL(); - -private: - enum TOpState - { - EIdle = 0, - ERespondPlayOk , // responding OK to play command is outstanding - ERespondPlayNok, // responding NOT OK to play command is outstanding - EPlayMusicTiming, // scheduling internal PLAY command to player - }; - -private: // Data - - CRemConCoreApiTarget* iCoreTarget; // not own - - RTimer iTimer; - - TOpState iState; - }; - -#endif // BTRCCACLLINKLISTENER_H - -// End of File diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsac/btrcc/src/btrccLinker.cpp --- a/bluetoothengine/btsac/btrcc/src/btrccLinker.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btsac/btrcc/src/btrccLinker.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -21,14 +21,12 @@ #include #include #include -#include #include #include #include "btaudioremconpskeys.h" #include "btrccLegacyVolumeLevelController.h" #include "btrccAbsoluteVolumeLevelController.h" #include "btrccLinker.h" -#include "btrccplayerstarter.h" #include "btrccBrowsingAdapter.h" #include "debug.h" #include @@ -122,10 +120,6 @@ // If volume control is not supported, we'll need another interface selector session for disconnecting. iInterfaceSelectorForDisconnectingTargetSession = CRemConInterfaceSelector::NewL(); } - - iPlayerStarter = CPlayerStarter::NewL(); - iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *iPlayerStarter); - iPlayerStarter->SetCoreTarget(*iCoreTarget); iRemConBatteryTgt = CRemConBatteryApiTarget::NewL(*iInterfaceSelector, *this); @@ -156,7 +150,6 @@ delete iAbsoluteVolController; delete iLegacyVolController; - delete iPlayerStarter; Cancel(); iStateArray.ResetAndDestroy(); iStateArray.Close(); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsac/btrcc/src/btrccplayerstarter.cpp --- a/bluetoothengine/btsac/btrcc/src/btrccplayerstarter.cpp Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,303 +0,0 @@ -/* -* Copyright (c) 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: This class launchs music player, then send play command -* to the player at 2 seconds timeout. -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include "btrccplayerstarter.h" -#include "btaudioremconpskeys.h" -#include "debug.h" - -// MODULE DATA STRUCTURES - -// mpx playeris name is mpx.exe in 5.0. -// it is musicplayer.exe in 3.2. -_LIT(KMpxPlayerExeName, "mpx.exe"); - -_LIT(KMpxPlayerSearchPatternBySID, "*102072c3*"); -_LIT(KVideoPlayerSearchPatternBySID, "*200159B2*"); - -static const TInt KPlayCmdToPlayerDelay = 6000000; // value will be tuned later - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CPlayerStarter::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CPlayerStarter* CPlayerStarter::NewL() - { - CPlayerStarter* self = new (ELeave) CPlayerStarter(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CPlayerStarter::SetCoreTarget(CRemConCoreApiTarget& aTarget) - { - iCoreTarget = &aTarget; - } - -// ----------------------------------------------------------------------------- -// CPlayerStarter::CPlayerStarter -// C++ constructor. -// ----------------------------------------------------------------------------- -// -CPlayerStarter::CPlayerStarter() - :CActive(EPriorityNormal) - { - CActiveScheduler::Add(this); - } - -// ----------------------------------------------------------------------------- -// CPlayerStarter::ConstructL -// Symbian 2nd phase constructor. -// ----------------------------------------------------------------------------- -// -void CPlayerStarter::ConstructL() - { - TRACE_FUNC - iTimer.CreateLocal(); - } - -// ----------------------------------------------------------------------------- -// Destructor. -// ----------------------------------------------------------------------------- -// -CPlayerStarter::~CPlayerStarter() - { - TRACE_FUNC - // Starting player is not finished yet, send play command. Just wish the player - // can receive it. - if (IsActive() && iState != ERespondPlayNok) - { - RProperty::Set(KBTAudioRemCon, KBTAudioPlayerControl, - EBTAudioResumePlayer); - } - Cancel(); - iTimer.Close(); - } - -// ----------------------------------------------------------------------------- -// CPlayerStarter::RunL -// ----------------------------------------------------------------------------- -// -void CPlayerStarter::RunL() - { - TRACE_INFO((_L("CPlayerStarter::RunL() state %d, status %d"), iState, iStatus.Int())); - if (iStatus != KErrNone) - { - iState = EIdle; - return; - } - switch (iState) - { - case ERespondPlayOk: - { - // Response OK has been sent to the remote device, start timer waiting - // for player's initialization. - iTimer.After(iStatus, KPlayCmdToPlayerDelay); - SetActive(); - iState = EPlayMusicTiming; - TRACE_INFO(_L("schedule PLAY command ...")); - break; - } - case EPlayMusicTiming: - { - // Player should have fully up and running. Send PLAY command to it - // through our internal Play API. - RProperty::Set(KBTAudioRemCon, KBTAudioPlayerControl, - EBTAudioResumePlayer); - TRACE_INFO(_L("PLAY command sent to btmonobearer")); - iState = EIdle; - break; - } - default: - { - iState = EIdle; - break; - } - } - } - -// ----------------------------------------------------------------------------- -// CPlayerStarter::RunError -// ----------------------------------------------------------------------------- -// -TInt CPlayerStarter::RunError(TInt aError) - { - TRACE_FUNC - (void) aError; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CPlayerStarter::DoCancel -// ----------------------------------------------------------------------------- -// -void CPlayerStarter::DoCancel() - { - TRACE_FUNC - switch (iState) - { - case ERespondPlayOk: - case ERespondPlayNok: - { - // This cancel won't cancel the response sending to the remote - // device. (RemCon FW's cancel mechanism is only completing client's request. - // the real operation in its server side won't be stopped.) - iCoreTarget->Cancel(); - break; - } - case EPlayMusicTiming: - { - iTimer.Cancel(); - break; - } - } - } -// --------------------------------------------------------------------------- -// A 'play' command has been received. -// --------------------------------------------------------------------------- -// -void CPlayerStarter::MrccatoPlay( - TRemConCoreApiPlaybackSpeed /* aSpeed */, - TRemConCoreApiButtonAction aButtonAct ) - { - TRACE_FUNC - if ( ( aButtonAct == ERemConCoreApiButtonClick ) || - ( aButtonAct == ERemConCoreApiButtonPress ) ) - { - StartPlayIfNeeded(); - } - } - -// --------------------------------------------------------------------------- -// A command has been received. -// --------------------------------------------------------------------------- -// -void CPlayerStarter::MrccatoCommand( - TRemConCoreApiOperationId aOperationId, - TRemConCoreApiButtonAction aButtonAct ) - { - TRACE_INFO((_L("CPlayerStarter::MrccatoCommand opId %d, button %d"), - aOperationId, aButtonAct)); - switch (aOperationId) - { - case ERemConCoreApiPlay: - { - if ( ( aButtonAct == ERemConCoreApiButtonClick ) || - ( aButtonAct == ERemConCoreApiButtonPress ) ) - { - StartPlayIfNeeded(); - } - break; - } - case ERemConCoreApiStop: - case ERemConCoreApiPause: - { - if ( ( aButtonAct == ERemConCoreApiButtonClick ) || - ( aButtonAct == ERemConCoreApiButtonPress ) ) - { - // if starting player is ongoing, possibly PLAY command has been scheduled - // need to abort it. - Cancel(); - } - break; - } - default: - { - break; - } - } - } - -// ----------------------------------------------------------------------------- -// CPlayerStarter::StartPlayIfNeeded -// ----------------------------------------------------------------------------- -// -void CPlayerStarter::StartPlayIfNeeded() - { - TRACE_FUNC - // unfinished business ongoing, eat the event. - if (IsActive()) - { - return; - } - if (!IsMusicPlayerRunning() && !IsVideoPlayerRunning()) - { - TRAPD(err, LaunchMusicPlayerL()); - // Send the response of play command to remote device - iCoreTarget->PlayResponse(iStatus, err); - SetActive(); - iState = (err) ? ERespondPlayNok : ERespondPlayOk; - } - } - -TBool CPlayerStarter::IsMusicPlayerRunning() - { - TRACE_FUNC - // Music player is running if we can find a thread whose name contains - // S60 Music Player's SID. - TFindThread findt(KMpxPlayerSearchPatternBySID); - TFullName result; - TBool running(EFalse); - if (!findt.Next(result)) - { - TRACE_INFO((_L("Thread '%S'is found"), &result)); - running = ETrue; - } - return running; - } - -TBool CPlayerStarter::IsVideoPlayerRunning() - { - TRACE_FUNC - // Video player is running if we can find a thread whose name contains - // Video Player's SID. - TFindThread findt(KVideoPlayerSearchPatternBySID); - TFullName result; - TBool running(EFalse); - if (!findt.Next(result)) - { - TRACE_INFO((_L("Thread '%S'is found"), &result)); - running = ETrue; - } - return running; - } - -void CPlayerStarter::LaunchMusicPlayerL() - { - RApaLsSession ls; - User::LeaveIfError(ls.Connect()); - CleanupClosePushL(ls); - CApaCommandLine* cmd = CApaCommandLine::NewL(); - CleanupStack::PushL(cmd); - cmd->SetExecutableNameL( KMpxPlayerExeName ); - cmd->SetCommandL( EApaCommandOpen ); - User::LeaveIfError(ls.StartApp( *cmd )); - CleanupStack::PopAndDestroy(2); // cmd, ls - } - - -// End of File diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsac/group/btsac.mmp --- a/bluetoothengine/btsac/group/btsac.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btsac/group/btsac.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -60,16 +60,16 @@ END USERINCLUDE ../inc ../common -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE ../../inc /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib // Kernel API includes symbian basic class and type definitions and error codes LIBRARY esock.lib // RSocketServ is used to open Gavdp LIBRARY bluetooth.lib // Bluetooth library is used to access bluetooth types and API's -LIBRARY bluetoothAV.lib // A2DP type definitions are needed to use Gavdp +LIBRARY bluetoothav.lib // A2DP type definitions are needed to use Gavdp LIBRARY gavdp.lib // Bluetooth Generic Audio/Video Distribution Profile (GAVDP) API -LIBRARY ECom.lib // Symbian E-Com Plugin definitions and types +LIBRARY ecom.lib // Symbian E-Com Plugin definitions and types LIBRARY sdpdatabase.lib // SDP registeration for Advanced Audio Distribution Profile (A2DP) LIBRARY btaudiostreamer.lib // Series 60 Bluetooth Audio Streamer component's API LIBRARY btengdiscovery.lib // Register A2DP SDP service record diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btsap/group/BTSap.mmp --- a/bluetoothengine/btsap/group/BTSap.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btsap/group/BTSap.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -85,7 +85,7 @@ #ifdef _DUMMY_CUSTOM_API LIBRARY DummyCustomAPI.lib // Dummy Custom API #else -LIBRARY CustomAPI.lib // Custom API +LIBRARY customapi.lib // Custom API #endif DEBUGLIBRARY flogger.lib // File logging diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpplugin.cpp --- a/bluetoothengine/btui/btcpplugin/btcpplugin.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpplugin.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,7 @@ QList BtCpPlugin::createSettingFormItemData(CpItemDataHelper &itemDataHelper) const { - return QList () << new BtCpUiSettingItem( + return QList () << new BtcpuiSettingItem( itemDataHelper); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpplugin.pro --- a/bluetoothengine/btui/btcpplugin/btcpplugin.pro Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpplugin.pro Fri Sep 03 16:17:59 2010 +0300 @@ -32,7 +32,7 @@ # Input HEADERS += btcpuidevicedetailsview.h\ - btcpuimainlistviewitem.h \ + btcpuimaingridviewitem.h \ btcpuisearchlistviewitem.h \ btcpplugin.h \ btcpuibaseview.h \ @@ -41,9 +41,11 @@ btcpuideviceview.h \ btcpuisettingitem.h \ btuiviewutil.h \ - btcpuidevicedetail.h + btcpuidevicedetail.h \ + btcpuiviewmgr.h + SOURCES += btcpuidevicedetailsview.cpp \ - btcpuimainlistviewitem.cpp \ + btcpuimaingridviewitem.cpp \ btcpuisearchlistviewitem.cpp \ btcpplugin.cpp \ btcpuibaseview.cpp \ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpplugin.qrc --- a/bluetoothengine/btui/btcpplugin/btcpplugin.qrc Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpplugin.qrc Fri Sep 03 16:17:59 2010 +0300 @@ -22,5 +22,9 @@ docml/bt-search-view.docml docml/bt-device-view.docml docml/bt-device-details-view.docml + docml/btcpuimaingridviewitem.css + docml/btcpuimaingridviewitem.widgetml + docml/btcpuisearchlistviewitem.css + docml/btcpuisearchlistviewitem.widgetml diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuibaseview.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuibaseview.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuibaseview.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -17,39 +17,281 @@ #include "btcpuibaseview.h" #include +#include +#include +#include "btcpuiviewmgr.h" +#include +#include +#include "btuidevtypemap.h" +#include +#include /*! This constructor constructs new setting and device models. */ -BtCpUiBaseView::BtCpUiBaseView(QGraphicsItem *parent ) - :CpBaseSettingView( 0 , parent ) +BtcpuiBaseView::BtcpuiBaseView(QGraphicsItem *parent) : + CpBaseSettingView(0, parent), mViewMgr(0), mDelegate(0), mPreviousView(0), + mBack(0), mQuery(0), mContextMenu(0), mBtuiModelSortFilter(0) { mSettingModel = new BtSettingModel(this); mDeviceModel = new BtDeviceModel(this); + initialise(); } /*! This constructor constructs models from the given setting and device models. - This implies the model impl and data structure is shared. + This implies the model impl and data structure are shared. */ -BtCpUiBaseView::BtCpUiBaseView( - BtSettingModel &settingModel, - BtDeviceModel &deviceModel, - QGraphicsItem *parent ) - :CpBaseSettingView( 0 , parent ) +BtcpuiBaseView::BtcpuiBaseView(BtSettingModel &settingModel, + BtDeviceModel &deviceModel, + QGraphicsItem *parent) : + CpBaseSettingView(0, parent), mViewMgr(0), mDelegate(0), mPreviousView(0), + mBack(0), mQuery(0), mContextMenu(0), mBtuiModelSortFilter(0) { mSettingModel = new BtSettingModel(settingModel, this); - mDeviceModel = new BtDeviceModel(deviceModel, this); + mDeviceModel = new BtDeviceModel(deviceModel, this); + initialise(); } /*! Destructor. */ -BtCpUiBaseView::~BtCpUiBaseView() +BtcpuiBaseView::~BtcpuiBaseView() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + delete mDelegate; + delete mQuery; + + if(mContextMenu) { + mContextMenu->clearActions(); + delete mContextMenu; + } + + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiBaseView::initialise() +{ + bool ret(false); + mMainWindow = hbInstance->allMainWindows().first(); + mContextMenu = new HbMenu(); + ret = connect(mContextMenu, SIGNAL(triggered(HbAction *)), this, SLOT(contextMenuTriggered(HbAction *))); + BTUI_ASSERT_X( ret, "bt-main-view", "Context Menu can't connect" ); +} + +void BtcpuiBaseView::setPreviousView(BtcpuiBaseView *view) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + mPreviousView = view; + // when a non-null previous view is set, it means this view is navigated from an existing + // view. And the back-action should navigate to the previous view. + if (mPreviousView) { + // Back action is created on demand. + if (!mBack) { + mBack = new HbAction(Hb::BackNaviAction, this); + BTUI_ASSERT_X(mBack, "BtcpuiBaseView::setPreviousView", "can't create back action"); + connect(mBack, SIGNAL(triggered()), this, SLOT(backToPreviousView())); + } + if (navigationAction() != mBack) { + setNavigationAction(mBack); + } + } + else { + setNavigationAction(0); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiBaseView::setViewMgr(BtcpuiViewMgr *mgr) { + mViewMgr = mgr; +} +void BtcpuiBaseView::backToPreviousView() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if ( mPreviousView ) { + viewMgr()->switchView(this, mPreviousView, QVariant(), true); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +BtSettingModel *BtcpuiBaseView::settingModel() +{ + return mSettingModel; +} + +BtDeviceModel *BtcpuiBaseView::deviceModel() +{ + return mDeviceModel; +} + +BtcpuiViewMgr *BtcpuiBaseView::viewMgr() +{ + return mViewMgr; +} + +bool BtcpuiBaseView::createDelegate(BtDelegate::EditorType type, + QObject *receiver, const char *member) +{ + bool ok(false); + if(!mDelegate) { + mDelegate = BtDelegateFactory::newDelegate(type, mSettingModel, mDeviceModel); + ok = connect(mDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + receiver, member); + BOstraceExt1(TRACE_DEBUG, DUMMY_DEVLIST, "BtcpuiBaseView::createDelegate signal connect %d", ok); + if (!ok) { + delete mDelegate; + mDelegate = 0; + } + } + BOstraceExt2(TRACE_DEBUG, DUMMY_DEVLIST, "BtcpuiBaseView::createDelegate: mDe: 0x%08X, ret %d", mDelegate, ok); + return ok; +} + +bool BtcpuiBaseView::createExecuteDelegate(BtDelegate::EditorType type, + QObject *receiver, const char *member, const QVariant ¶m) +{ + bool ok = createDelegate(type, receiver, member); + if (ok) { + mDelegate->exec(param); + } + return ok; } +void BtcpuiBaseView::viewByDeviceTypeDialog() +{ + if ( !mQuery ) { + mQuery = new HbSelectionDialog(); + QStringList devTypeList; + devTypeList << hbTrId("txt_bt_list_audio_devices") + << hbTrId("txt_bt_list_computers") + << hbTrId("txt_bt_list_input_devices") + << hbTrId("txt_bt_list_phones") + << hbTrId("txt_bt_list_other_devices"); + + mQuery->setStringItems(devTypeList, 0); + mQuery->setSelectionMode(HbAbstractItemView::MultiSelection); + + QList current; + current.append(QVariant(0)); + mQuery->setSelectedItems(current); + + // Set the heading for the dialog. + HbLabel *headingLabel = new HbLabel(hbTrId("txt_bt_title_show"), mQuery); + mQuery->setHeadingWidget(headingLabel); + } + mQuery->open(this,SLOT(viewByDialogClosed(HbAction*))); +} + +void BtcpuiBaseView::viewByDialogClosed(HbAction* action) +{ + Q_UNUSED(action) + //ReImpemented in derived classes. +} +int BtcpuiBaseView::selectedDeviceTypes(HbAction* action) +{ + int devTypesWanted = 0; + + disconnect( mQuery, 0, this, 0); // remove signal + if (action == mQuery->actions().first()) { // user pressed "Ok" + // Get selected items. + QList selections; + selections = mQuery->selectedItems(); + + for (int i=0; i < selections.count(); i++) { + switch (selections.at(i).toInt()) { + case BtUiDevAudioDevice: + devTypesWanted |= BtuiDevProperty::AVDev; + break; + case BtUiDevComputer: + devTypesWanted |= BtuiDevProperty::Computer; + break; + case BtUiDevInputDevice: + devTypesWanted |= BtuiDevProperty::Peripheral; + break; + case BtUiDevPhone: + devTypesWanted |= BtuiDevProperty::Phone; + break; + case BtUiDevOtherDevice: + devTypesWanted |= (BtuiDevProperty::LANAccessDev | + BtuiDevProperty::Toy | + BtuiDevProperty::WearableDev | + BtuiDevProperty::ImagingDev | + BtuiDevProperty::HealthDev | + BtuiDevProperty::UncategorizedDev); + break; + default: + // should never get here + BTUI_ASSERT_X(false, "BtcpuiSearchView::viewByDialogClosed()", + "wrong device type in viewBy dialog!"); + } + } + } + + return devTypesWanted; +} +void BtcpuiBaseView::deviceSelected(const QModelIndex& modelIndex) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BtcpuiBaseView *devView = viewMgr()->deviceView(); + // For navigating back to this view: + devView->setPreviousView( this ); + QModelIndex index = mBtuiModelSortFilter->mapToSource(modelIndex); + QVariant params; + params.setValue(index); + viewMgr()->switchView(this, devView, params, false); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiBaseView::createContextMenuActions(int majorRole) +{ + //Re-Implemented in derived classes. + Q_UNUSED(majorRole) +} + +void BtcpuiBaseView::take(BtAbstractDelegate *delegate) +{ + mDelegate = delegate; + if (mDelegate) { + disconnect(mDelegate, 0, 0, 0); + connect(mDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(handleDelegateCompleted(int))); + } +} + +void BtcpuiBaseView::contextMenuTriggered(HbAction *action) +{ + if(!(action->text().compare(hbTrId("txt_common_menu_open")))) { + deviceSelected(mLongPressedItem->modelIndex()); + } +} + +void BtcpuiBaseView::showContextMenu(HbAbstractViewItem *item, const QPointF &coords) +{ + mLongPressedItem = item; + mContextMenu->clearActions(); + + mContextMenu->addAction(hbTrId("txt_common_menu_open")); + + QModelIndex index = mBtuiModelSortFilter->mapToSource(mLongPressedItem->modelIndex()); + + int majorPropRole = (mDeviceModel->data(index,BtDeviceModel::MajorPropertyRole)).toInt(); + if (majorPropRole & BtuiDevProperty::Connectable ) { + createContextMenuActions(majorPropRole); + } + mContextMenu->setPreferredPos(coords); + mContextMenu->open(); +} + +void BtcpuiBaseView::handleDelegateCompleted(int error, BtAbstractDelegate* delegate) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error ); + Q_UNUSED(error); + delete mDelegate; + mDelegate = 0; + BOstraceFunctionExit0(DUMMY_DEVLIST); +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuibaseview.h --- a/bluetoothengine/btui/btcpplugin/btcpuibaseview.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuibaseview.h Fri Sep 03 16:17:59 2010 +0300 @@ -23,39 +23,87 @@ #include #include #include +#include +#include +#include +#include + +class BtcpuiViewMgr; +class HbSelectionDialog; +class BtAbstractDelegate; +class HbMainWindow; /*! \class BtUiBaseView \brief the class is the base class for all views in btapplication. */ -class BtCpUiBaseView : public CpBaseSettingView +class BtcpuiBaseView : public CpBaseSettingView { Q_OBJECT public: - virtual ~BtCpUiBaseView(); - virtual void activateView( const QVariant& value, bool fromBackButton ) = 0; - virtual void deactivateView() = 0; - virtual void switchToPreviousView() = 0; + virtual ~BtcpuiBaseView(); + + virtual void activateView( const QVariant& value, bool backNavi) = 0; + virtual void deactivateView() = 0; + virtual void setPreviousView(BtcpuiBaseView *view); + void setViewMgr(BtcpuiViewMgr *mgr); + virtual void take(BtAbstractDelegate *delegate); + +public slots: + + virtual void backToPreviousView(); + void viewByDeviceTypeDialog(); + virtual void viewByDialogClosed(HbAction* action); + void contextMenuTriggered(HbAction *action); + void deviceSelected(const QModelIndex& modelIndex); + void showContextMenu(HbAbstractViewItem *item, const QPointF &coords); + void handleDelegateCompleted(int error, BtAbstractDelegate* delegate); signals: protected: - explicit BtCpUiBaseView(QGraphicsItem *parent = 0); + explicit BtcpuiBaseView(QGraphicsItem *parent = 0); - explicit BtCpUiBaseView( - BtSettingModel &settingModel, + explicit BtcpuiBaseView(BtSettingModel &settingModel, BtDeviceModel &deviceModel, QGraphicsItem *parent = 0); - virtual void setSoftkeyBack() = 0; + void initialise(); + + BtSettingModel *settingModel(); + + BtDeviceModel *deviceModel(); + + BtcpuiViewMgr *viewMgr(); + + bool createDelegate(BtDelegate::EditorType type, + QObject *receiver, const char *member); + + bool createExecuteDelegate(BtDelegate::EditorType type, + QObject *receiver, const char *member, const QVariant ¶m); - BtSettingModel &getSettingModel(); - BtDeviceModel &getDeviceModel(); + int selectedDeviceTypes(HbAction* action); + virtual void createContextMenuActions(int majorRole); + protected: + + enum devTypeSelectionList { + BtUiDevAudioDevice = 0, + BtUiDevComputer, + BtUiDevInputDevice, + BtUiDevPhone, + BtUiDevOtherDevice + }; + + // The view manager from which the device view can be accessed. + // not owned. + BtcpuiViewMgr *mViewMgr; + + HbMainWindow *mMainWindow; // owned BtSettingModel *mSettingModel; @@ -63,10 +111,23 @@ // owned BtDeviceModel *mDeviceModel; - QGraphicsItem *mParent; - int mPreviousViewId; + //The run-time singleton delegate in a btui view + BtAbstractDelegate* mDelegate; + + // The view which this view is navigated from. + // We will navigate to previous view if the back action is activated. + BtcpuiBaseView *mPreviousView; - Q_DISABLE_COPY(BtCpUiBaseView) + // The back action of this view. + HbAction *mBack; + + HbSelectionDialog *mQuery; + + HbMenu* mContextMenu; + HbAbstractViewItem *mLongPressedItem; + + BtuiModelSortFilter* mBtuiModelSortFilter; + Q_DISABLE_COPY(BtcpuiBaseView) }; #endif // BTCPUIBASEVIEW_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuidevicedetail.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuidevicedetail.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuidevicedetail.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -32,12 +32,14 @@ BtCpUiDeviceDetail::~BtCpUiDeviceDetail() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); clearDeviceDetailList(); - delete mDeviceDetailView; + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceDetail::loadDeviceDetailPlugins(QString deviceAddress, QString deviceName) +void BtCpUiDeviceDetail::loadDeviceDetailPlugins(QString& deviceAddress, QString& deviceName) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QList interfaces; BtAbstractDevSetting *devSetting; @@ -48,7 +50,10 @@ for (i = interfaces.constBegin(); i != interfaces.constEnd(); ++i) { devSetting = 0; devSetting = (*i)->createDevSetting( deviceAddress ); + BtTraceQString1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", deviceAddress); if(devSetting) { + BOstrace0(TRACE_FLOW, DUMMY_DEVLIST, "Plug-in settings appended"); + //If settings are available add to list and connect to plugin signals. appendDeviceToList(devSetting); } } @@ -58,32 +63,38 @@ } createDeviceDetailsView(deviceName); + + //Notify any changes in settings availability to Device view. + //Based on this Device Settings button will be shown. notifyDeviceDetailStatus(); - + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::appendDeviceToList(BtAbstractDevSetting *devSetting) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); bool ret = false; BtDeviceDetails devicedetails; - devicedetails.mSetting = 0; - devicedetails.mSettingForm = 0; - devicedetails.mSettingAvailable = false; devicedetails.mSetting = devSetting; devicedetails.mSettingAvailable = devSetting->isSettingAvailable(); - devicedetails.mSettingForm = devSetting->getSettingWidget(); + devicedetails.mSettingForm = 0; + + if(devicedetails.mSettingAvailable) { + devicedetails.mSettingForm = devSetting->getSettingWidget(); + } mDeviceDetailList.append(devicedetails); ret = connect(devicedetails.mSetting, SIGNAL(settingAvailabilityChanged(BtAbstractDevSetting *, bool)), this, SLOT(handleSettingChange(BtAbstractDevSetting *, bool))); BTUI_ASSERT_X( ret, "BtCpUiDeviceDetail::appendDeviceToList", "connect settingAvailabilityChanged() failed"); - + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::handleSettingChange(BtAbstractDevSetting *setting, bool available) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, available ); QList::iterator i; for (i = mDeviceDetailList.begin(); i != mDeviceDetailList.end(); ++i) { @@ -92,28 +103,35 @@ if(available) { if(((*i).mSettingForm)) { //If item already exists, remove it first. + BOstrace0(TRACE_FLOW, DUMMY_DEVLIST, "Setting removed"); mDeviceDetailView->removeItem((*i).mSettingForm); } (*i).mSettingForm = setting->getSettingWidget(); + BOstrace0(TRACE_FLOW, DUMMY_DEVLIST, "Setting added"); //add widget mDeviceDetailView->addItem((*i).mSettingForm); } else { if((*i).mSettingForm) { + BOstrace0(TRACE_FLOW, DUMMY_DEVLIST, "Setting removed"); //remove widget mDeviceDetailView->removeItem((*i).mSettingForm); (*i).mSettingForm = 0; checkDeviceDetailSettings(); } } + //Notify any changes in settings availability to Device view. + //Based on this Device Settings button will be shown. notifyDeviceDetailStatus(); } } + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::checkDeviceDetailSettings() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QList::const_iterator i; bool devicedetail = false; @@ -129,10 +147,12 @@ mMainWindow->removeView(mDeviceDetailView); mMainWindow->setCurrentView( mPreviousView ); } + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::notifyDeviceDetailStatus() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QList::const_iterator i; bool devicedetail = false; @@ -143,31 +163,41 @@ } } emit deviceSettingsChanged(devicedetail); + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::clearDeviceDetailList() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QList::const_iterator i; for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) { if((*i).mSetting ) { - disconnect((*i).mSetting); delete (*i).mSetting; } } mDeviceDetailList.clear(); + + if(mDeviceDetailView) { + mDeviceDetailView->removeAllItems(); + delete mDeviceDetailView; + mDeviceDetailView = 0; + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceDetail::createDeviceDetailsView(QString deviceName) +void BtCpUiDeviceDetail::createDeviceDetailsView(QString& deviceName) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); bool ret = false; - //Launch Device Detail View. + //Launch Device Detail View, this view will be created once device view + //is launched and will be deleted when device view is closed. mDeviceDetailView = new BtCpUiDeviceDetailsView(); mDeviceDetailView->setDeviceName(deviceName); ret = connect(mDeviceDetailView, SIGNAL(aboutToClose()), this, SLOT(handleDeviceDetailViewClose())); - BTUI_ASSERT_X( ret, "BtCpUiDeviceDetail::loadDeviceDetailsView", "connect deviceDetailViewClosed() failed"); + BTUI_ASSERT_X( ret, "BtCpUiDeviceDetail::createDeviceDetailsView", "connect deviceDetailViewClosed() failed"); QList::const_iterator i; @@ -176,31 +206,39 @@ mDeviceDetailView->addItem((*i).mSettingForm); } } + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::loadDeviceDetailsView() { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); mPreviousView = mMainWindow->currentView(); mMainWindow->addView(mDeviceDetailView); + //aboutToForeground of plugin is called before launching + //device settings view. notifyViewStatusToPlugins(AboutToShow); mMainWindow->setCurrentView( mDeviceDetailView ); + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::handleDeviceDetailViewClose() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + //aboutToBackground of plugin is called before going + //back to device view. notifyViewStatusToPlugins(AboutToHide); mMainWindow->removeView(mDeviceDetailView); mMainWindow->setCurrentView( mPreviousView ); - + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::notifyViewStatusToPlugins(BtCpUiDeviceDetail::NotifyType type) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QList::const_iterator i; BtAbstractDevSetting *deviceSetting = 0; for (i = mDeviceDetailList.constBegin(); i != mDeviceDetailList.constEnd(); ++i) { @@ -219,12 +257,16 @@ } } } - + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetail::sendCloseEvent() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + //aboutToClose is called before going back from + //device view. notifyViewStatusToPlugins(AboutToClose); + BOstraceFunctionExit0(DUMMY_DEVLIST); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuidevicedetail.h --- a/bluetoothengine/btui/btcpplugin/btcpuidevicedetail.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuidevicedetail.h Fri Sep 03 16:17:59 2010 +0300 @@ -43,7 +43,7 @@ virtual ~BtCpUiDeviceDetail(); - void loadDeviceDetailPlugins(QString deviceAddress, QString deviceName); + void loadDeviceDetailPlugins(QString& deviceAddress, QString& deviceName); void loadDeviceDetailsView(); @@ -66,7 +66,7 @@ void appendDeviceToList(BtAbstractDevSetting *devSetting); void clearDeviceDetailList(); void notifyDeviceDetailStatus(); - void createDeviceDetailsView(QString deviceName); + void createDeviceDetailsView(QString& deviceName); void notifyViewStatusToPlugins(BtCpUiDeviceDetail::NotifyType type); void checkDeviceDetailSettings(); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuidevicedetailsview.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuidevicedetailsview.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuidevicedetailsview.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -33,7 +33,7 @@ { mSoftKeyBackAction = new HbAction(Hb::BackNaviAction, this); - BTUI_ASSERT_X(mSoftKeyBackAction, "BtCpUiBaseView::BtCpUiBaseView", "can't create back action"); + BTUI_ASSERT_X(mSoftKeyBackAction, "BtCpUiDeviceDetailsView::BtCpUiDeviceDetailsView", "can't create back action"); // Create view for the application. // Set the name for the view. The name should be same as the view's @@ -68,27 +68,49 @@ void BtCpUiDeviceDetailsView::setDeviceName(const QString &deviceName) { - //todo: use Localised string Id. + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + //todo: use Localised string Id,If Loc ID is used + //wrong string is displayed. Need to correct text map file. QString heading(hbTrId("%1 details")); if(mGroupBox) { mGroupBox->setHeading(heading.arg(deviceName)); } + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetailsView::addItem(HbDataForm *item) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if (item && mLayout) { mLayout->addItem(item); - } + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } void BtCpUiDeviceDetailsView::removeItem(HbDataForm *item) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if (item && mLayout) { //todo: with out this item is not removed from the view. item->setVisible(false); mLayout->removeItem(item); + delete item; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } +void BtCpUiDeviceDetailsView::removeAllItems() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if(mLayout) { + QGraphicsLayoutItem *item; + int count = mLayout->count(); + for(int i=count-1; i>=0; i--) { + item = mLayout->itemAt(i); + mLayout->removeItem(item); + delete item; + } + } + BOstraceFunctionExit0(DUMMY_DEVLIST); +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuidevicedetailsview.h --- a/bluetoothengine/btui/btcpplugin/btcpuidevicedetailsview.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuidevicedetailsview.h Fri Sep 03 16:17:59 2010 +0300 @@ -38,7 +38,7 @@ void setDeviceName(const QString &deviceName); void addItem(HbDataForm *item); void removeItem(HbDataForm *item); - + void removeAllItems(); protected: HbDocumentLoader *mLoader; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuideviceview.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuideviceview.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuideviceview.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -18,7 +18,7 @@ #include "btcpuideviceview.h" #include "btuiviewutil.h" #include -#include +#include #include #include #include @@ -34,35 +34,24 @@ #include #include #include -#include "btcpuimainview.h" #include #include -#include #include "btuiiconutil.h" #include "btuidevtypemap.h" - +#include "btqtconstants.h" #include "btcpuidevicedetail.h" +#include "btcpuiviewmgr.h" // docml to load const char* BTUI_DEVICEVIEW_DOCML = ":/docml/bt-device-view.docml"; - -BtCpUiDeviceView::BtCpUiDeviceView( - BtSettingModel &settingModel, +BtcpuiDeviceView::BtcpuiDeviceView(BtSettingModel &settingModel, BtDeviceModel &deviceModel, QGraphicsItem *parent) : - BtCpUiBaseView(settingModel,deviceModel,parent), - mPairedStatus(false), mConnectedStatus(false),mPreviousConnectedStatus(false), mTrustedStatus(false), - mBlockedStatus(false), mConnectable(false), mAbstractDelegate(0), mDeviceDetail(0) + BtcpuiBaseView(settingModel,deviceModel,parent), + mComboboxIndex(-1), mAbstractDelegate(0), mDeviceDetail(0) { - mDeviceIndex = QModelIndex();//is it needed to initialize mIndex??? - - mMainView = (BtCpUiMainView *) parent; - - mMainWindow = hbInstance->allMainWindows().first(); - - mSoftKeyBackAction = new HbAction(Hb::BackNaviAction, this); - BTUI_ASSERT_X(mSoftKeyBackAction, "BtCpUiBaseView::BtCpUiBaseView", "can't create back action"); + mDeviceIndex = QModelIndex(); // initialize to zero // read view info from docml file @@ -80,36 +69,17 @@ bool ret = false; - bool ok = false; - mLoader->load( BTUI_DEVICEVIEW_DOCML, &ok ); + mLoader->load( BTUI_DEVICEVIEW_DOCML, &ret ); // Exit if the file format is invalid - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file" ); - - mOrientation = mMainWindow->orientation(); - - if (mOrientation == Qt::Horizontal) { - mLoader->load(BTUI_DEVICEVIEW_DOCML, "landscape", &ok); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); - } - else { - mLoader->load(BTUI_DEVICEVIEW_DOCML, "portrait", &ok); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); - } - + BTUI_ASSERT_X( ret, "bt-device-view", "Invalid docml file" ); // listen for orientation changes ret = connect(mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(changeOrientation(Qt::Orientation))); BTUI_ASSERT_X( ret, "BtCpUiDeviceView::BtCpUiDeviceView()", "connect orientationChanged() failed"); - // assign automatically created widgets to local variables - /* - mGroupBox = 0; - mGroupBox = qobject_cast( mLoader->findWidget( "groupBox_deviceView" ) ); - BTUI_ASSERT_X( mGroupBox != 0, "bt-device-view", "Device groupbox not found" ); - */ + mDeviceIcon=0; - //can't use qobject_cast since HbIcon is not derived from QObject! mDeviceIcon = qobject_cast( mLoader->findWidget( "deviceIcon" ) ); BTUI_ASSERT_X( mDeviceIcon != 0, "bt-device-view", "Device Icon not found" ); @@ -127,174 +97,182 @@ BTUI_ASSERT_X( mDeviceStatus != 0, "bt-device-view", "Device status not found" ); - mConnectionCombobox = 0; - mConnectionCombobox = qobject_cast( mLoader->findWidget( "connectionCombobox" ) ); - BTUI_ASSERT_X( mConnectionCombobox != 0, "bt-device-view", "connection combobox not found" ); + mConnectionDataForm = 0; + mConnectionDataForm = qobject_cast( mLoader->findWidget( "connectionCombobox" ) ); + BTUI_ASSERT_X( mConnectionDataForm != 0, "bt-device-view", "connection combobox not found" ); - mConnectionComboboxModel = new HbDataFormModel(); + mConnectionComboboxModel = new HbDataFormModel( this ); mPair_Unpair=0; - mPair_Unpair = qobject_cast( mLoader->findWidget( "pushButton_0" ) ); + mPair_Unpair = qobject_cast( mLoader->findWidget( "devicePairUnpair" ) ); BTUI_ASSERT_X( mPair_Unpair != 0, "bt-device-view", "pair/unpair button not found" ); - ret = connect(mPair_Unpair, SIGNAL(clicked()), this, SLOT(pairUnpair())); - BTUI_ASSERT_X( ret, "BtCpUiDeviceView::BtCpUiDeviceView", "can't connect pair button" ); mConnect_Disconnect=0; - mConnect_Disconnect = qobject_cast( mLoader->findWidget( "pushButton_1" ) ); + mConnect_Disconnect = qobject_cast( mLoader->findWidget( "deviceConnectDisconnect" ) ); BTUI_ASSERT_X( mConnect_Disconnect != 0, "bt-device-view", "connect/disconnect button not found" ); - ret = connect(mConnect_Disconnect, SIGNAL(clicked()), this, SLOT(connectDisconnect())); - BTUI_ASSERT_X( ret, "BtCpUiDeviceView::BtCpUiDeviceView", "can't connect disconnect button" ); mDeviceSetting = 0; - mDeviceSetting = qobject_cast( mLoader->findWidget( "pushButton_2" ) ); + mDeviceSetting = qobject_cast( mLoader->findWidget( "deviceSettings" ) ); BTUI_ASSERT_X( mDeviceSetting != 0, "bt-device-view", "settings button not found" ); - - ret = connect(mDeviceSetting, SIGNAL(clicked()), this, SLOT(handleDeviceSetting())); - BTUI_ASSERT_X( ret, "Btui, BtCpUiDeviceView::BtCpUiDeviceView", "clicked() connect failed"); + BTUI_ASSERT_X( ret, "Btui, BtcpuiDeviceView::BtcpuiDeviceView", "clicked() connect failed"); setConnectionCombobox(); - } -BtCpUiDeviceView::~BtCpUiDeviceView() +BtcpuiDeviceView::~BtcpuiDeviceView() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); delete mLoader; // Also deletes all widgets that it constructed. - - delete mConnectionComboboxModel; - - setNavigationAction(0); - delete mSoftKeyBackAction; - if(mAbstractDelegate) - { - delete mAbstractDelegate; - mAbstractDelegate = 0; - } - + delete mAbstractDelegate; + unloadDeviceDetails(); + BOstraceFunctionExit0(DUMMY_DEVLIST); } - -void BtCpUiDeviceView::setSoftkeyBack() +void BtcpuiDeviceView::backToPreviousView() { - if (navigationAction() != mSoftKeyBackAction) { - setNavigationAction(mSoftKeyBackAction); - connect( mSoftKeyBackAction, SIGNAL(triggered()), this, SLOT(switchToPreviousView()) ); - } -} - -void BtCpUiDeviceView::switchToPreviousView() -{ - BTUI_ASSERT_X(mMainView, "BtCpUiSearchView::switchToPreviousView", "invalid mMainView"); - mMainView->switchToPreviousView(); - - if(mDeviceDetail) { - mDeviceDetail->sendCloseEvent(); - } + BtcpuiBaseView::backToPreviousView(); unloadDeviceDetails(); } -void BtCpUiDeviceView::loadDeviceDetails() +void BtcpuiDeviceView::loadDeviceDetails() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); bool ret(false); - - unloadDeviceDetails(); - + unloadDeviceDetails(); // ToDo: is it necessary to delete the device view every time there is a change? mDeviceDetail = new BtCpUiDeviceDetail(); - ret=connect(mDeviceDetail, SIGNAL(deviceSettingsChanged(bool)), this, SLOT(handleDeviceSettingsChange(bool))); - BTUI_ASSERT_X( ret, "Btui, BtCpUiDeviceView::loadDeviceDetails", "deviceSettingsChanged() connect failed"); + BTUI_ASSERT_X( ret, "Btui, BtcpuiDeviceView::loadDeviceDetails", "deviceSettingsChanged() connect failed"); - mDeviceDetail->loadDeviceDetailPlugins(mDeviceBdAddr.toString(), mDeviceName->text()); + QString btAddr = mDeviceBdAddr.toString(); + QString deviceName = mDeviceName->text(); + mDeviceDetail->loadDeviceDetailPlugins(btAddr, deviceName); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::unloadDeviceDetails() +void BtcpuiDeviceView::unloadDeviceDetails() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if(mDeviceDetail) { - disconnect(mDeviceDetail); + mDeviceDetail->sendCloseEvent(); delete mDeviceDetail; mDeviceDetail = 0; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::activateView( const QVariant& value, bool fromBackButton ) +void BtcpuiDeviceView::activateView( const QVariant& value, bool backNavi) { - - Q_UNUSED( fromBackButton ); - - mConnectedStatus = false; - setSoftkeyBack(); - - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + Q_UNUSED( backNavi ); + // get bluetooth address of device in question QModelIndex index = value.value(); mDeviceBdAddr = (mDeviceModel->data(index, BtDeviceModel::ReadableBdaddrRole)); + QModelIndex start = mDeviceModel->index(0,0); + QModelIndexList indexList = mDeviceModel->match(start,BtDeviceModel::ReadableBdaddrRole, mDeviceBdAddr); + mDeviceIndex = indexList.at(0); - //activate view is called when device is selected - //clearViewData(); + bool ret = false; + if (mMainWindow->orientation() == Qt::Horizontal) { + //mLoader->load(BTUI_DEVICEVIEW_DOCML, "landscape", &ret); + //BTUI_ASSERT_X( ret, "bt-device-view", "Invalid docml file: landscape section problem" ); + int majorRole = (mDeviceModel->data(mDeviceIndex,BtDeviceModel::MajorPropertyRole)).toInt(); + if (majorRole & BtuiDevProperty::Connectable ) { + mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape", &ret ); + BTUI_ASSERT_X( ret, "bt-device-view", "Invalid docml file: landscape section problem" ); + } + else{ + mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape2", &ret ); + BTUI_ASSERT_X( ret, "bt-device-view", "Invalid docml file: landscape2 section problem" ); + } + } + else { + mLoader->load(BTUI_DEVICEVIEW_DOCML, "portrait", &ret); + BTUI_ASSERT_X( ret, "bt-device-view", "Invalid docml file: portrait section problem" ); + + + } + updateDeviceData(); mDeviceSetting->setVisible(false); - - bool ret(false); + loadDeviceDetails(); + ret = false; ret=connect(mDeviceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(updateDeviceData())); BTUI_ASSERT_X( ret, "Btui, BtCpUiDeviceView::activateView", "dataChanged() connect failed"); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} +void BtcpuiDeviceView::deactivateView() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + disconnect(mDeviceModel, 0, this, 0); + unloadDeviceDetails(); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::handleDeviceSettingsChange(bool status) +void BtcpuiDeviceView::handleDeviceSettingsChange(bool status) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); mDeviceSetting->setVisible(status); + mDeviceSetting->setStretched(true); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::handleDeviceSetting() +void BtcpuiDeviceView::handleDeviceSetting() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if(mDeviceDetail) { mDeviceDetail->loadDeviceDetailsView(); } -} - -void BtCpUiDeviceView::deactivateView() -{ + BOstraceFunctionExit0(DUMMY_DEVLIST); } + // called due to real orientation change event coming from main window -void BtCpUiDeviceView::changeOrientation( Qt::Orientation orientation ) +void BtcpuiDeviceView::changeOrientation( Qt::Orientation orientation ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); bool ok = false; - mOrientation = orientation; + int majorRole = (mDeviceModel->data(mDeviceIndex,BtDeviceModel::MajorPropertyRole)).toInt(); if( orientation == Qt::Vertical ) { // load "portrait" section mLoader->load( BTUI_DEVICEVIEW_DOCML, "portrait", &ok ); BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: portrait section problem" ); } else { // load "landscape" section - mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape", &ok ); - BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); + //mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape", &ok ); + //BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); + if (majorRole & BtuiDevProperty::Connectable ) { + mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape", &ok ); + BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape section problem" ); + } + else{ + mLoader->load( BTUI_DEVICEVIEW_DOCML, "landscape2", &ok ); + BTUI_ASSERT_X( ok, "bt-device-view", "Invalid docml file: landscape2 section problem" ); + } } + setTextAndVisibilityOfButtons(majorRole); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::clearViewData() +void BtcpuiDeviceView::clearViewData() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); mDeviceIcon->clear(); mDeviceCategory->clear(); mDeviceStatus->clear(); - mConnectable = false; - /* - mPairedStatus = false; - mConnectedStatus = false; - mTrustedStatus = false; - mBlockedStatus = false; - - mConnectable = false; - */ + BOstraceFunctionExit0(DUMMY_DEVLIST); } - -void BtCpUiDeviceView::updateDeviceData() + +void BtcpuiDeviceView::updateDeviceData() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); clearViewData(); - //Get the QModelIndex of the device using the device BDAddres + //Get the QModelIndex of the device using the device BDAddress QModelIndex start = mDeviceModel->index(0,0); QModelIndexList indexList = mDeviceModel->match(start,BtDeviceModel::ReadableBdaddrRole, mDeviceBdAddr); mDeviceIndex = indexList.at(0); @@ -310,321 +288,391 @@ setDeviceCategory(cod, majorRole); setDeviceStatus(majorRole); - setTextAndVisibilityOfButtons(); + setTextAndVisibilityOfButtons(majorRole); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::setDeviceCategory(int cod,int majorRole) +void BtcpuiDeviceView::setDeviceCategory(int cod,int majorRole) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); mDeviceCategory->setPlainText( getDeviceTypeString( cod )); HbIcon icon = getBadgedDeviceTypeIcon(cod, majorRole, BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight ); mDeviceIcon->setIcon(icon); - - if (majorRole & BtuiDevProperty::Connectable ) { - mConnectable = true; - } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::setDeviceStatus(int majorRole) +void BtcpuiDeviceView::setDeviceStatus(int majorRole) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QString deviceStatus; - - updateStatusVariables(majorRole); // should we use bitmap instead?? - + // Avoid unnecessary actions: + // The device model has been modified and need to be reflected + // in the UI however if we don't disable the signal before the UI update + // the connectionPreferenceChanged function will be called and trigger + // unnecessary update of the model by the device view. + mConnectionDataForm->removeConnection(mCombobox, SIGNAL(currentIndexChanged (int)), + this, SLOT(connectionPreferenceChanged(int))); if (majorRole & BtuiDevProperty::Bonded && majorRole & BtuiDevProperty::Trusted && majorRole & BtuiDevProperty::Connected ) { mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired_trused_connected")); + mCombobox->setContentWidgetData("currentIndex", ConnectionAutomatic ); + mComboboxIndex = ConnectionAutomatic; } else if (majorRole & BtuiDevProperty::Bonded && majorRole & BtuiDevProperty::Connected ) { mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired_connected")); + mCombobox->setContentWidgetData("currentIndex", ConnectionAlwaysAsk ); + mComboboxIndex = ConnectionAlwaysAsk; } else if (majorRole & BtuiDevProperty::Bonded && majorRole & BtuiDevProperty::Trusted ) { mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired_trusted")); + mCombobox->setContentWidgetData("currentIndex", ConnectionAutomatic ); + mComboboxIndex = ConnectionAutomatic; + } + else if (majorRole & BtuiDevProperty::Connected && + majorRole & BtuiDevProperty::Trusted ) { + mDeviceStatus->setPlainText(hbTrId("Trusted, Connected")); // ToDo: missing textId! + mCombobox->setContentWidgetData("currentIndex", ConnectionAutomatic ); + mComboboxIndex = ConnectionAutomatic; + } + else if (majorRole & BtuiDevProperty::Trusted ) { + mDeviceStatus->setPlainText(hbTrId("Trusted")); // ToDo: missing textId! + mCombobox->setContentWidgetData("currentIndex", ConnectionAutomatic ); + mComboboxIndex = ConnectionAutomatic; } else if (majorRole & BtuiDevProperty::Bonded) { mDeviceStatus->setPlainText(hbTrId("txt_bt_info_paired")); + mCombobox->setContentWidgetData("currentIndex", ConnectionAlwaysAsk ); + mComboboxIndex = ConnectionAlwaysAsk; } else if (majorRole & BtuiDevProperty::Connected) { mDeviceStatus->setPlainText(hbTrId("txt_bt_info_connected")); + mCombobox->setContentWidgetData("currentIndex", ConnectionAlwaysAsk ); + mComboboxIndex = ConnectionAlwaysAsk; } else if (majorRole & BtuiDevProperty::Blocked) { mDeviceStatus->setPlainText(hbTrId("txt_bt_info_blocked")); + mCombobox->setContentWidgetData("currentIndex", ConnectionBlocked ); + mComboboxIndex = ConnectionBlocked; } else { - // device not paired, connected, trusted or blocked. is this ok? + // device not paired, connected, trusted or blocked. + mDeviceStatus->setPlainText(" "); + mCombobox->setContentWidgetData("currentIndex", ConnectionAlwaysAsk ); + mComboboxIndex = ConnectionAlwaysAsk; } - + mConnectionDataForm->addConnection(mCombobox, SIGNAL(currentIndexChanged (int)), + this, SLOT(connectionPreferenceChanged(int))); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::setConnectionCombobox(){ - +void BtcpuiDeviceView::setConnectionCombobox() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); //create a model class + mCombobox = mConnectionComboboxModel->appendDataFormItem( + HbDataFormModelItem::ComboBoxItem, hbTrId("txt_bt_setlabel_connection"), + mConnectionComboboxModel->invisibleRootItem()); - mConnectionComboboxModel->appendDataFormItem( - HbDataFormModelItem::ComboBoxItem, QString("Connection"), mConnectionComboboxModel->invisibleRootItem()); - + QStringList connList; + connList.append( hbTrId("txt_bt_setlabel_bluetooth_val_automatic") ); + connList.append( hbTrId("txt_bt_setlabel_bluetooth_val_always_ask") ); + connList.append( hbTrId("txt_bt_setlabel_bluetooth_val_blocked") ); + mCombobox->setContentWidgetData( "items", connList ); + //set the model to the view, once model and data class are created - mConnectionCombobox->setModel(mConnectionComboboxModel); - - - + mConnectionDataForm->setModel(mConnectionComboboxModel); + mConnectionDataForm->addConnection(mCombobox, SIGNAL(currentIndexChanged (int)), + this, SLOT(connectionPreferenceChanged(int))); + BOstraceFunctionExit0(DUMMY_DEVLIST); } - -/*! - * instead of using separate boolean variables we could use bitmap in single variable - */ -void BtCpUiDeviceView::updateStatusVariables(int majorRole) +void BtcpuiDeviceView::setTextAndVisibilityOfButtons(int majorProperty) { - mPreviousConnectedStatus = mConnectedStatus; + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + disconnect(mPair_Unpair, 0, 0, 0); + disconnect(mConnect_Disconnect, 0, 0, 0); - if (majorRole & BtuiDevProperty::Trusted ) { - mTrustedStatus = true; - } - else { - mTrustedStatus = false; + if (majorProperty & BtuiDevProperty::Blocked) { + mPair_Unpair->setVisible(false); + mConnect_Disconnect->setVisible(false); + mDeviceSetting->setVisible(false); + return; } - if (majorRole & BtuiDevProperty::Bonded) { - mPairedStatus = true; + bool ret; + mPair_Unpair->setVisible(true); + mPair_Unpair->setStretched(true); + if (majorProperty & BtuiDevProperty::Bonded) { + updateButton(mPair_Unpair, "qtg_mono_bt_unpair", hbTrId("txt_bt_button_unpair")); + ret = connect(mPair_Unpair, SIGNAL(clicked()), this, SLOT(unpairDevice())); + BTUI_ASSERT_X( ret, "BtcpuiDeviceView::BtcpuiDeviceView", "can't connect unpair button" ); } else { - mPairedStatus = false; + updateButton(mPair_Unpair, "qtg_mono_bt_pair", hbTrId("txt_bt_button_pair")); + ret = connect(mPair_Unpair, SIGNAL(clicked()), this, SLOT(pairDevice())); + BTUI_ASSERT_X( ret, "BtcpuiDeviceView::BtcpuiDeviceView", "can't connect pair button" ); } - if (majorRole & BtuiDevProperty::Connected) { - mConnectedStatus = true; - if (!mPreviousConnectedStatus){ - //Loading device detail plugins after successfull connection. - loadDeviceDetails(); + + if (majorProperty & BtuiDevProperty::Connectable ) { + mConnect_Disconnect->setVisible(true); + mConnect_Disconnect->setStretched(true); + if (majorProperty & BtuiDevProperty::Connected) { + updateButton(mConnect_Disconnect, "qtg_mono_speaker_off", hbTrId("txt_bt_button_disconnect")); + ret = connect(mConnect_Disconnect, SIGNAL(clicked()), this, SLOT(disconnectDevice())); + BTUI_ASSERT_X( ret, "BtcpuiDeviceView::BtcpuiDeviceView", "can't connect disconnect button" ); + } + else { + updateButton(mConnect_Disconnect, "qtg_mono_speaker", hbTrId("txt_bt_button_connect")); + ret = connect(mConnect_Disconnect, SIGNAL(clicked()), this, SLOT(connectDevice())); + BTUI_ASSERT_X( ret, "BtcpuiDeviceView::BtcpuiDeviceView", "can't connect connect button" ); } } else { - mConnectedStatus = false; - } - if (majorRole & BtuiDevProperty::Blocked) { - mBlockedStatus = true; - } - else { - mBlockedStatus = false; - } -} - -void BtCpUiDeviceView::setTextAndVisibilityOfButtons() -{ - mPair_Unpair->setStretched(true); - if (mPairedStatus) - { - HbIcon icon("qtg_mono_bt_unpair"); - icon.setIconName("qtg_mono_bt_unpair"); - mPair_Unpair->setIcon(icon); - mPair_Unpair->setText(hbTrId("txt_bt_button_unpair")); - - } - else - { - HbIcon icon("qtg_mono_bt_pair"); - icon.setIconName("qtg_mono_bt_pair"); - mPair_Unpair->setIcon(icon); - mPair_Unpair->setText(hbTrId("txt_bt_button_pair")); - } - - if (mConnectable) - { - mConnect_Disconnect->setVisible(true); - mConnect_Disconnect->setStretched(true); - if (mConnectedStatus) - { - HbIcon icon("qtg_mono_speaker_off"); - icon.setIconName("qtg_mono_speaker_off"); - mConnect_Disconnect->setIcon(icon); - mConnect_Disconnect->setText(hbTrId("txt_bt_button_disconnect")); - } - else - { - HbIcon icon("qtg_mono_speaker"); - icon.setIconName("qtg_mono_speaker"); - mConnect_Disconnect->setIcon(icon); - mConnect_Disconnect->setText(hbTrId("txt_bt_button_connect")); - } - - } - else - { //it is not possible to connect, set the button invisible mConnect_Disconnect->setVisible(false); } - + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiDeviceView::connectionPreferenceChanged(int index) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if ((index >= ConnectionAutomatic)&&(index != mComboboxIndex)) { + switch ( index ) + { + case ConnectionAutomatic: + setDeviceAuthorised(); + break; + case ConnectionAlwaysAsk: + setDeviceAlwaysAsk(); + break; + case ConnectionBlocked: + setDeviceBlocked(); + break; + default: + BTUI_ASSERT_X( 0, "BtCpUiDeviceView::connectionPreferenceChanged()", "wrong index" ); + } + } + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiDeviceView::setDeviceAuthorised() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (!mAbstractDelegate){ + //if there is no other delegate running + QListlist; + list.append(mDeviceBdAddr); + + if (mComboboxIndex != ConnectionAutomatic) { // transition: (always ask|blocked) --> automatic + // unblock the device + list.append(QVariant(BtAuthorize)); + } + else { + // do nothing, state is already correct + return; + } + mAbstractDelegate = BtDelegateFactory::newDelegate( + BtDelegate::TrustDevice, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(unpairDelegateCompleted(int)) ); + mAbstractDelegate->exec(QVariant(list)); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } - -void BtCpUiDeviceView::pairUnpair() +void BtcpuiDeviceView::setDeviceAlwaysAsk() { - if (mPairedStatus) - { - //if the device is paired, call unpairDevice() when the button is tabbed - unpairDevice(); - } - else - { - //if the device is unpaired, call pairDevice() when the button is tabbed - pairDevice(); - - } - - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (!mAbstractDelegate){ + //if there is no other delegate running + QListlist; + BtDelegate::EditorType type; + list.append(mDeviceBdAddr); + if (mComboboxIndex == ConnectionAutomatic) { // transition: automatic --> always ask + // unauthorize the device + list.append(QVariant(BtUnauthorize)); + type = BtDelegate::UntrustDevice; + } + else if (mComboboxIndex == ConnectionBlocked) { // transition: blocked --> always ask + // unblock the device + list.append(QVariant(BtUnblock)); + type = BtDelegate::UnblockDevice; + } + else { + // do nothing, state is already correct + return; + } + + mAbstractDelegate = BtDelegateFactory::newDelegate( + type, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(unpairDelegateCompleted(int)) ); + mAbstractDelegate->exec(QVariant(list)); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::connectDisconnect() +void BtcpuiDeviceView::setDeviceBlocked() { - if (mConnectedStatus) - { - //if the device is connected, call disconnectDevice() when the button is tabbed - disconnectDevice(); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + //simple version of the delegate + //TODO: disconnect after blocking + if (!mAbstractDelegate){ + //if there is no other delegate running + QList list; + list.append(mDeviceBdAddr); + + if ( mComboboxIndex == ConnectionAutomatic || + mComboboxIndex == ConnectionAlwaysAsk ) { // transition: automatic|always ask --> blocked + // to unauthorized the device + list.append(QVariant(BtBlock)); + } + else{ + // do nothing, state is already correct + return; + } + mAbstractDelegate = BtDelegateFactory::newDelegate( + BtDelegate::BlockDevice, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(unpairDelegateCompleted(int)) ); + mAbstractDelegate->exec(QVariant(list)); } - else - { - //if the device is disconnected, call connectDevice() when the button is tabbed - connectDevice(); - - } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::pairDevice() +void BtcpuiDeviceView::pairDevice() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if (!mAbstractDelegate)//if there is no other delegate running { QVariant params; params.setValue(mDeviceIndex); mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Pair, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(pairDelegateCompleted(int)) ); + BtDelegate::PairDevice, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, SLOT(pairDelegateCompleted(int)) ); mAbstractDelegate->exec(params); } - + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::pairDelegateCompleted(int status) +void BtcpuiDeviceView::pairDelegateCompleted(int status) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED(status); //TODO: handle the error here if (mAbstractDelegate) { - disconnect(mAbstractDelegate); delete mAbstractDelegate; mAbstractDelegate = 0; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::unpairDevice() +void BtcpuiDeviceView::unpairDevice() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if (!mAbstractDelegate)//if there is no other delegate running { - QVariant params; - params.setValue(mDeviceIndex); + QListlist; + list.append(mDeviceBdAddr); + list.append(QVariant(BtUnpair)); + mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Unpair, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(unpairDelegateCompleted(int)) ); - mAbstractDelegate->exec(params); + BtDelegate::UnpairDevice, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, + SLOT(unpairDelegateCompleted(int)) ); + mAbstractDelegate->exec(QVariant(list)); } - - + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::unpairDelegateCompleted(int status) +void BtcpuiDeviceView::unpairDelegateCompleted(int status) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED(status); //TODO: handle the error here if (mAbstractDelegate) { - disconnect(mAbstractDelegate); delete mAbstractDelegate; mAbstractDelegate = 0; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::connectDevice() +void BtcpuiDeviceView::connectDevice() { - - - if (!mAbstractDelegate)//if there is no other delegate running - { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + if (!mAbstractDelegate) { //if there is no other delegate running QVariant params; params.setValue(mDeviceIndex); mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Connect, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(connectDelegateCompleted(int)) ); + BtDelegate::ConnectService, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, SLOT(connectDelegateCompleted(int)) ); mAbstractDelegate->exec(params); } - - + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::connectDelegateCompleted(int status) +void BtcpuiDeviceView::connectDelegateCompleted(int status) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED(status); - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); + if (mAbstractDelegate) { delete mAbstractDelegate; mAbstractDelegate = 0; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::disconnectDevice() +void BtcpuiDeviceView::disconnectDevice() { - if (!mAbstractDelegate)//if there is no other delegate running - { - - - DisconnectOption discoOpt = ServiceLevel; - - QListlist; - QVariant paramFirst; - paramFirst.setValue(mDeviceIndex); - - QVariant paramSecond; - paramSecond.setValue((int)discoOpt); - - list.append(paramFirst); - list.append(paramSecond); - - QVariant params; - params.setValue(list); - - - //params.setValue(mDeviceIndex); - mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Disconnect, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(disconnectDelegateCompleted(int)) ); - mAbstractDelegate->exec(params); - } - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (!mAbstractDelegate) { //if there is no other delegate running + QListlist; + list.append(QVariant(ServiceLevel)); + list.append(mDeviceBdAddr); + + mAbstractDelegate = BtDelegateFactory::newDelegate( + BtDelegate::DisconnectService, mSettingModel, mDeviceModel); + // todo: check return value of connect + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, SLOT(disconnectDelegateCompleted(int)) ); + mAbstractDelegate->exec(QVariant(list)); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::disconnectDelegateCompleted(int status) +void BtcpuiDeviceView::disconnectDelegateCompleted(int status) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED(status); if (mAbstractDelegate) { - disconnect(mAbstractDelegate); delete mAbstractDelegate; mAbstractDelegate = 0; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::setPrevBtDeviceName() +void BtcpuiDeviceView::setPrevBtDeviceName() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QString deviceName = (mDeviceModel->data(mDeviceIndex, BtDeviceModel::NameAliasRole)).toString(); mDeviceName->setText(deviceName); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::changeBtDeviceName(){ - if (!mAbstractDelegate)//if there is no other delegate running - { +void BtcpuiDeviceView::changeBtDeviceName() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (!mAbstractDelegate){ + //if there is no other delegate running QListlist; QVariant index; @@ -640,33 +688,35 @@ params.setValue(list); mAbstractDelegate = BtDelegateFactory::newDelegate( - BtDelegate::RemoteDevName, mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int, QVariant)), this, SLOT(changeDevNameDelegateCompleted(int, QVariant)) ); + BtDelegate::ChangeDeviceFriendlyName, mSettingModel, mDeviceModel); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(changeDevNameDelegateCompleted(int, QVariant)) ); mAbstractDelegate->exec(params); } else { setPrevBtDeviceName(); } - + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiDeviceView::changeDevNameDelegateCompleted(int status, QVariant param) -{ - - - if(KErrNone == status) { - mDeviceName->setText(param.toString()); - } - else { +void BtcpuiDeviceView::changeDevNameDelegateCompleted(int status) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if(KErrNone != status) { setPrevBtDeviceName(); } - //TODO:Error handling has to be done. - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); + + if (mAbstractDelegate){ delete mAbstractDelegate; mAbstractDelegate = 0; - } - - + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } + +void BtcpuiDeviceView::updateButton(HbPushButton *button, const QString &iconName, const QString &text) +{ + HbIcon icon(iconName); + icon.setIconName(iconName); + button->setIcon(icon); + button->setText(text); +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuideviceview.h --- a/bluetoothengine/btui/btcpplugin/btcpuideviceview.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuideviceview.h Fri Sep 03 16:17:59 2010 +0300 @@ -18,7 +18,6 @@ #ifndef BTCPUIDEVICEVIEW_H #define BTCPUIDEVICEVIEW_H -#include #include #include #include "btcpuibaseview.h" @@ -32,97 +31,81 @@ class HbDataForm; class HbDataFormModel; -//class HbDataFormModelItem; +class HbDataFormModelItem; class CpSettingFormItemData; class BtAbstractDelegate; class BtCpUiDeviceDetail; -class BtCpUiDeviceView : public BtCpUiBaseView +class BtcpuiDeviceView : public BtcpuiBaseView { Q_OBJECT public: - explicit BtCpUiDeviceView( - BtSettingModel &settingModel, + explicit BtcpuiDeviceView(BtSettingModel &settingModel, BtDeviceModel &deviceModel, QGraphicsItem *parent = 0); - virtual ~BtCpUiDeviceView(); - virtual void activateView( const QVariant& value, bool fromBackButton ); + + virtual ~BtcpuiDeviceView(); + virtual void activateView( const QVariant& value, bool backNavi); virtual void deactivateView(); - virtual void setSoftkeyBack(); public slots: - virtual void switchToPreviousView(); + void backToPreviousView(); void changeOrientation( Qt::Orientation orientation ); void updateDeviceData(); void changeBtDeviceName(); - void pairUnpair(); - void connectDisconnect(); + void pairDevice(); + void unpairDevice(); + void connectDevice(); + void disconnectDevice(); void pairDelegateCompleted(int status); void unpairDelegateCompleted(int status); void connectDelegateCompleted(int status); void disconnectDelegateCompleted(int status); - void changeDevNameDelegateCompleted(int status, QVariant param); + void changeDevNameDelegateCompleted(int status); void handleDeviceSetting(); void handleDeviceSettingsChange(bool status); + void connectionPreferenceChanged(int index); private: + enum connectionSelection { + ConnectionAutomatic = 0, + ConnectionAlwaysAsk, + ConnectionBlocked + }; void clearViewData(); - void pairDevice(); - void unpairDevice(); - void connectDevice(); - void disconnectDevice(); void setDeviceCategory(int cod, int majorRole);//cod:class of device void setDeviceStatus(int majorRole); void setConnectionCombobox(); - void setTextAndVisibilityOfButtons(); - void updateStatusVariables(int majorRole); + void setTextAndVisibilityOfButtons(int majorProperty); void loadDeviceDetails(); void unloadDeviceDetails(); void setPrevBtDeviceName(); + void setDeviceAuthorised(); + void setDeviceAlwaysAsk(); + void setDeviceBlocked(); + void updateButton(HbPushButton *button, const QString &iconName, const QString &text); private: HbDocumentLoader *mLoader; - //HbGroupBox *mGroupBox; HbLabel *mDeviceIcon; HbLineEdit *mDeviceName; HbLabel *mDeviceCategory; HbLabel *mDeviceStatus; - HbDataForm *mConnectionCombobox; + HbDataForm *mConnectionDataForm; HbDataFormModel *mConnectionComboboxModel; + HbDataFormModelItem *mCombobox; HbPushButton *mPair_Unpair; HbPushButton *mConnect_Disconnect; HbPushButton *mDeviceSetting; - - // data structures for switching between views - bool mEventFilterInstalled; - int mAutoCmdId; - Qt::Orientation mOrientation; - - HbMainWindow* mMainWindow; - BtCpUiBaseView* mMainView; - //BtCpUiBaseView* mDeviceView; - HbAction *mSoftKeyBackAction; - QModelIndex mDeviceIndex; QVariant mDeviceBdAddr; - - //true -> device is paired; false -> device is unpaired - bool mPairedStatus; - - //true-> device is connected; false -> device is disconnected - bool mConnectedStatus; - bool mPreviousConnectedStatus; - bool mTrustedStatus; - bool mBlockedStatus; - //true -> device is connectable - //e.g. not possible to connect to a phone, but possible to connect to a headset - bool mConnectable; + int mComboboxIndex; BtAbstractDelegate* mAbstractDelegate; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuimaingridviewitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/btcpuimaingridviewitem.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2008-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: BTUISearchListViewItem implementation +* +*/ + + +#include "btcpuimaingridviewitem.h" +#include "btdevicemodel.h" +#include "btuiiconutil.h" +#include +#include +#include + +BtCpUiMainGridViewItem::BtCpUiMainGridViewItem(QGraphicsItem * parent) : + HbGridViewItem(parent) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + mDeviceNameLabel = 0; + mDevTypeIconLabel = 0; + mDevTypeTextLabel = 0; + mBtuiModelSortFilter = ((BtCpUiMainGridViewItem *)parent)->mBtuiModelSortFilter; + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +BtCpUiMainGridViewItem::~BtCpUiMainGridViewItem() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +/* + * This method is called by the HbListView when it needs a new + * view item element. + * + */ +HbAbstractViewItem * BtCpUiMainGridViewItem::createItem() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + HbAbstractViewItem *item = new BtCpUiMainGridViewItem(*this); + BOstraceFunctionExitExt(DUMMY_DEVLIST, this, item); + return item; +} + +/*! + UpdateChildItem updates the item graphics. + Screen elements are created once if not already done. This may increase the overall memory + consumption of the application, however, this is deemed inconsequential. There might be a small + performance improvement with current style. + */ +void BtCpUiMainGridViewItem::updateChildItems() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + QModelIndex index; + + // Get device name from model + if (mBtuiModelSortFilter) + index = mBtuiModelSortFilter->mapToSource(modelIndex()); + else + index = modelIndex(); + + // create new icon label if needed + if (!mDevTypeIconLabel) { + mDevTypeIconLabel = new HbLabel(this); + HbStyle::setItemName(mDevTypeIconLabel, "deviceIcon"); + } + + // create new label if needed + if (!mDeviceNameLabel) { + mDeviceNameLabel = new HbLabel(this); + HbStyle::setItemName(mDeviceNameLabel, "deviceName"); + } + + // create new label if needed + if (!mDevTypeTextLabel) { + mDevTypeTextLabel = new HbLabel(this); + HbStyle::setItemName(mDevTypeTextLabel, "deviceType"); + } + + QString data = index.data(Qt::DisplayRole).toString(); + int cod = (index.data(BtDeviceModel::CoDRole)).toInt(); + int majorProperty = (index.data(BtDeviceModel::MajorPropertyRole)).toInt(); + + mDeviceNameLabel->setPlainText(data); + mDevTypeTextLabel->setPlainText( getDeviceTypeString( cod )); + + HbIcon icon = + getBadgedDeviceTypeIcon( cod, majorProperty, + BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight ); + mDevTypeIconLabel->setIcon(icon); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + + +void BtCpUiMainGridViewItem::setModelSortFilter(BtuiModelSortFilter *filter) +{ + mBtuiModelSortFilter = filter; +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuimaingridviewitem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/btcpuimaingridviewitem.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2008-2009 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: device view item +* +*/ + + +#ifndef BTCPUIMAINGRIDVIEWITEM_H +#define BTCPUIMAINGRIDVIEWITEM_H + +//#include +#include +#include +#include +#include +#include "btuimodelsortfilter.h" + +class BtCpUiMainGridViewItem : public HbGridViewItem +{ + Q_OBJECT + +public: + BtCpUiMainGridViewItem(QGraphicsItem * parent = 0); + ~BtCpUiMainGridViewItem(); + + HbAbstractViewItem * createItem(); + void updateChildItems(); + + void setModelSortFilter(BtuiModelSortFilter *filter); + +private: + + HbLabel *mDevTypeIconLabel; + HbLabel *mDeviceNameLabel; + HbLabel *mDevTypeTextLabel; + BtuiModelSortFilter* mBtuiModelSortFilter; + +}; + +#endif /* BTCPUIMAINGRIDVIEWITEM_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuimainlistviewitem.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuimainlistviewitem.cpp Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -/* -* Copyright (c) 2008-2009 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: BTUISearchListViewItem implementation -* -*/ - - -#include "btcpuimainlistviewitem.h" -#include "btdevicemodel.h" -#include "btuiiconutil.h" -#include - -BtCpUiMainListViewItem::BtCpUiMainListViewItem(QGraphicsItem * parent) : - HbListViewItem(parent), mParent(parent) -{ - mDeviceNameLabel = 0; - mDevTypeIconLabel = 0; - mDevTypeTextLabel = 0; - mBtuiModelSortFilter = ((BtCpUiMainListViewItem *)parent)->mBtuiModelSortFilter; - - mRow = 0; -} - -BtCpUiMainListViewItem::~BtCpUiMainListViewItem() -{ -// delete mDeviceNameLabel; -// delete mDevTypeIconLabel; -// delete mDevTypeTextLabel; -} - -/* - * This method is called by the HbListView when it needs a new - * view item element. - * - */ -HbAbstractViewItem * BtCpUiMainListViewItem::createItem() -{ - return new BtCpUiMainListViewItem(*this); -} - -/*! - UpdateChildItem updates the item graphics. - Screen elements are created once if not already done. This may increase the overall memory - consumption of the application, however, this is deemed inconsequential. There might be a small - performance improvement with current style. - */ -void BtCpUiMainListViewItem::updateChildItems() -{ - QModelIndex index; - - // Get device name from model - if (mBtuiModelSortFilter) - index = mBtuiModelSortFilter->mapToSource(modelIndex()); - else - index = modelIndex(); - - // create new icon label if needed - if (!mDevTypeIconLabel) { - mDevTypeIconLabel = new HbLabel(); - mDevTypeIconLabel->setPreferredSize(53.5260, 53.5260); //8un x 8un - mDevTypeIconLabel->setMinimumWidth(53.5260); - } - // create new label if needed - if (!mDeviceNameLabel) { - mDeviceNameLabel = new HbLabel(); - mDeviceNameLabel->setPreferredSize(250, 26.763); - } - // create new label if needed - if (!mDevTypeTextLabel) { - mDevTypeTextLabel = new HbLabel(); - mDevTypeTextLabel->setPreferredSize(250, 26.763); - } - // create layout if needed - if ( !mRow ) { - // Still need to create the actual layout - mRow = new QGraphicsGridLayout(); - mRow->addItem(mDevTypeIconLabel,0,0,2,1); - mRow->addItem(mDeviceNameLabel,0,1,1,1); - mRow->addItem(mDevTypeTextLabel,1,1,1,1); - setLayout(mRow); - } - - QString data = index.data(Qt::DisplayRole).toString(); - int cod = (index.data(BtDeviceModel::CoDRole)).toInt(); - int majorProperty = (index.data(BtDeviceModel::MajorPropertyRole)).toInt(); - - // ToDo: remove clear() once Orbit bug is fixed - mDeviceNameLabel->clear(); - mDeviceNameLabel->setPlainText(data); - mDevTypeIconLabel->clear(); - mDevTypeTextLabel->clear(); - mDevTypeTextLabel->setPlainText( getDeviceTypeString( cod )); - HbIcon icon = - getBadgedDeviceTypeIcon( cod, majorProperty, - BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight ); - mDevTypeIconLabel->setIcon(icon); -} - - -void BtCpUiMainListViewItem::setModelSortFilter(BtuiModelSortFilter *filter) -{ - mBtuiModelSortFilter = filter; -} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuimainlistviewitem.h --- a/bluetoothengine/btui/btcpplugin/btcpuimainlistviewitem.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2008-2009 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: device view item -* -*/ - - -#ifndef BTCPUIMAINLISTVIEWITEM_H -#define BTCPUIMAINLISTVIEWITEM_H - -#include -#include -#include -#include -#include "btuimodelsortfilter.h" - -class BtCpUiMainListViewItem : public HbListViewItem -{ - Q_OBJECT - -public: - BtCpUiMainListViewItem(QGraphicsItem * parent = 0); - ~BtCpUiMainListViewItem(); - - HbAbstractViewItem * createItem(); - void updateChildItems(); - - void setModelSortFilter(BtuiModelSortFilter *filter); - -private: - QGraphicsItem *mParent; - HbLabel *mDevTypeIconLabel; - HbLabel *mDeviceNameLabel; - HbLabel *mDevTypeTextLabel; - BtuiModelSortFilter* mBtuiModelSortFilter; - - QGraphicsGridLayout *mRow; -}; - -#endif /* BTCPUIMAINLISTVIEWITEM_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuimainview.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuimainview.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuimainview.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: BtCpUiMainView implementation +* Description: BtcpuiMainView implementation * */ @@ -35,261 +35,182 @@ #include #include #include +#include +#include +#include +#include +#include "btqtconstants.h" +#include "btcpuimaingridviewitem.h" +#include "btuidevtypemap.h" +#include "btcpuiviewmgr.h" #include "btcpuisearchview.h" #include "btcpuideviceview.h" -#include -#include -#include -#include "btqtconstants.h" -#include "btcpuimainlistviewitem.h" -#include "btuidevtypemap.h" // docml to load const char* BTUI_MAINVIEW_DOCML = ":/docml/bt-main-view.docml"; /*! Constructs a new BtUiMainView using HBDocumentLoader. Docml (basically xml) file - has been generated using Application Designer. - + has been generated using Application Designer. */ -BtCpUiMainView::BtCpUiMainView( - BtSettingModel &settingModel, - BtDeviceModel &deviceModel, - QGraphicsItem *parent ) - : BtCpUiBaseView( settingModel, deviceModel, parent ), - mAbstractDelegate(0), mMainFilterModel(0) +BtcpuiMainView::BtcpuiMainView(QGraphicsItem *parent ) + : BtcpuiBaseView(parent), mSearchView(0), mDeviceView(0) { - bool ret(false); - - mMainWindow = hbInstance->allMainWindows().first(); - mMainView = this; - - // Create view for the application. - // Set the name for the view. The name should be same as the view's - // name in docml. - setObjectName("view"); - - mLoader = new HbDocumentLoader(); - // Pass the view to documentloader. Document loader uses this view - // when docml is parsed, instead of creating new view. - QObjectList objectList; - objectList.append(this); - mLoader->setObjectTree(objectList); - - bool ok = false; - mLoader->load( BTUI_MAINVIEW_DOCML, &ok ); - // Exit if the file format is invalid - BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file" ); - - mOrientation = mMainWindow->orientation(); - - if (mOrientation == Qt::Horizontal) { - mLoader->load(BTUI_MAINVIEW_DOCML, "landscape", &ok); - BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file: landscape section problem" ); - } - else { - mLoader->load(BTUI_MAINVIEW_DOCML, "portrait", &ok); - BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file: landscape section problem" ); - } - - mDeviceNameEdit=0; - mDeviceNameEdit = qobject_cast( mLoader->findWidget( "lineEdit" ) ); - BTUI_ASSERT_X( mDeviceNameEdit != 0, "bt-main-view", "Device Name not found" ); - ret = connect(mDeviceNameEdit, SIGNAL(editingFinished ()), this, SLOT(changeBtLocalName())); - - mPowerButton=0; - mPowerButton = qobject_cast( mLoader->findWidget( "pushButton" ) ); - BTUI_ASSERT_X( mPowerButton != 0, "bt-main-view", "power button not found" ); - ret = connect(mPowerButton, SIGNAL(clicked()), this, SLOT(changePowerState())); - BTUI_ASSERT_X( ret, "BtCpUiMainView::BtCpUiMainView", "can't connect power button" ); - - mVisibilityMode=0; - mVisibilityMode = qobject_cast( mLoader->findWidget( "combobox" ) ); - BTUI_ASSERT_X( mVisibilityMode != 0, "bt-main-view", "visibility combobox not found" ); - // add new item for temporary visibility - // NOTE: translation (at least default english) gives string "(p)Visible for 5 min", - // if setting 1 min --> "(s)Visible for 1 min", ie p=plural, s=singular, but these should - // not be shown to the user! - // ToDo: change this to use translation once it starts working - QString tempVis(hbTrId("txt_bt_setlabel_visibility_val_visible_for_l1_min", 5)); - //QString tempVis(hbTrId("Visible for 5 min")); - mVisibilityMode->addItem(tempVis, Qt::DisplayRole); - - mDeviceList=0; - mDeviceList = qobject_cast( mLoader->findWidget( "listView" ) ); - BTUI_ASSERT_X( mDeviceList != 0, "bt-main-view", "Device List (grid view) not found" ); - - ret = connect(mDeviceList, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); - BTUI_ASSERT_X( ret, "bt-search-view", "deviceSelected can't connect" ); - - // listen for orientation changes - ret = connect(mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), - this, SLOT(changeOrientation(Qt::Orientation))); - BTUI_ASSERT_X( ret, "BtCpUiMainView::BtCpUiMainView()", "connect orientationChanged() failed"); - - // load tool bar actions - HbAction *discoverAction = static_cast( mLoader->findObject( "discoverAction" ) ); - BTUI_ASSERT_X( discoverAction, "bt-main-view", "discover action missing" ); - ret = connect(discoverAction, SIGNAL(triggered()), this, SLOT(goToDiscoveryView())); - BTUI_ASSERT_X( ret, "bt-main-view", "discover action can't connect" ); - - // load tool bar actions - mAllAction = static_cast( mLoader->findObject( "allAction" ) ); - BTUI_ASSERT_X( mAllAction, "bt-main-view", "All action missing" ); - ret = connect(mAllAction, SIGNAL(triggered()), this, SLOT(allActionTriggered())); - BTUI_ASSERT_X( ret, "bt-main-view", "all action can't connect" ); - - // load tool bar actions - mPairAction = static_cast( mLoader->findObject( "pairedAction" ) ); - BTUI_ASSERT_X( mPairAction, "bt-main-view", "Pair action missing" ); - ret = connect(mPairAction, SIGNAL(triggered()), this, SLOT(pairActionTriggered())); - BTUI_ASSERT_X( ret, "bt-main-view", "pair action can't connect" ); - - mDataForm = qobject_cast( mLoader->findWidget( "dataForm" ) ); - BTUI_ASSERT_X( mDataForm != 0, "bt-main-view", "dataForm not found" ); - - - // load menu - HbMenu *optionsMenu = qobject_cast(mLoader->findWidget("viewMenu")); - BTUI_ASSERT_X( optionsMenu != 0, "bt-main-view", "Options menu not found" ); - this->setMenu(optionsMenu); - - HbMenu *menu = this->menu(); - mRemovePairedDevices = menu->addAction(hbTrId("txt_bt_opt_remove_paired_devices")); - - mSubMenu = new HbMenu(hbTrId("txt_bt_opt_remove")); - mSubMenu->addAction(hbTrId("txt_bt_opt_remove_sub_all_devices")); - mSubMenu->addAction(hbTrId("txt_bt_opt_remove_sub_paired_devices")); - mSubMenu->addAction(hbTrId("txt_bt_opt_remove_sub_blocked_devices")); - - // update display when setting data changed - ret = connect(mSettingModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(updateSettingItems(QModelIndex,QModelIndex))); - BTUI_ASSERT_X( ret, "BtCpUiMainView::BtCpUiMainView", "can't connect dataChanged" ); - - QModelIndex top = mSettingModel->index( BtSettingModel::LocalBtNameRow, 0 ); - QModelIndex bottom = mSettingModel->index( BtSettingModel::AllowedInOfflineRow, 0 ); - // update name, power and visibility rows - updateSettingItems( top, bottom ); - - //Handle Visibility Change User Interaction - ret = connect(mVisibilityMode, SIGNAL(currentIndexChanged (int)), - this, SLOT(visibilityChanged (int))); - // create other views - createViews(); - mCurrentView = this; - mCurrentViewId = MainView; - - mMainFilterModel = new BtuiModelSortFilter(this); - - mMainFilterModel->setSourceModel( mDeviceModel ); - mDeviceList->setModel(mMainFilterModel); - updateDeviceListFilter(BtuiPaired); - // List view item - BtCpUiMainListViewItem *prototype = new BtCpUiMainListViewItem(mDeviceList); - prototype->setModelSortFilter(mMainFilterModel); - mDeviceList->setItemPrototype(prototype); - + loadDocument(); + setViewMgr(this); } /*! - Destructs the BtCpUiMainView. + Constructs a new BtUiMainView using HBDocumentLoader. Docml (basically xml) file + has been generated using Application Designer. */ -BtCpUiMainView::~BtCpUiMainView() +BtcpuiMainView::BtcpuiMainView(BtSettingModel &settingModel, + BtDeviceModel &deviceModel, + QGraphicsItem *parent ) + : BtcpuiBaseView(settingModel, deviceModel, parent ), mSearchView(0), mDeviceView(0) { + loadDocument(); + setViewMgr(this); +} + +/*! + Destructs the BtcpuiMainView. + */ +BtcpuiMainView::~BtcpuiMainView() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + delete mSearchView; + delete mDeviceView; delete mLoader; // Also deletes all widgets that it constructed. - mMainWindow->removeView(mSearchView); - mMainWindow->removeView(mDeviceView); - if (mAbstractDelegate) { - delete mAbstractDelegate; - } - + HbStyleLoader::unregisterFilePath(":/docml/btcpuimaingridviewitem.widgetml"); + HbStyleLoader::unregisterFilePath(":/docml/btcpuimaingridviewitem.css"); + BOstraceFunctionExit0(DUMMY_DEVLIST); } /*! from base class, initialize the view */ -void BtCpUiMainView::activateView(const QVariant& value, bool fromBackButton ) +void BtcpuiMainView::activateView(const QVariant& value, bool backNavi) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED(value); - Q_UNUSED(fromBackButton); - - //Reset the device list when returning to the view, as it may have been invalidated by the device view - mMainFilterModel->setSourceModel( mDeviceModel ); - mDeviceList->setModel(mMainFilterModel); + Q_UNUSED(backNavi); + QModelIndex top = mSettingModel->index( BtSettingModel::LocalBtNameRow, 0 ); + QModelIndex bottom = mSettingModel->index( BtSettingModel::AllowedInOfflineRow, 0 ); + // update name, power and visibility rows + updateSettingItems( top, bottom ); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -/*! +/*! From base class. Handle resource before the current view is deactivated. */ -void BtCpUiMainView::deactivateView() +void BtcpuiMainView::deactivateView() { - -} - -void BtCpUiMainView::goToDiscoveryView() -{ - changeView( SearchView, false ); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::goToDeviceView(const QModelIndex& modelIndex) +void BtcpuiMainView::launchDeviceDiscovery() { - //the QModelIndex of the selected device should be given as parameter here - QVariant params; - params.setValue(modelIndex); - changeView( DeviceView, false, params ); -} - -Qt::Orientation BtCpUiMainView::orientation() -{ - return mOrientation; + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + // Construct the search view if it does not exist yet. + (void) searchView(); + bool ok = createDelegate(BtDelegate::Inquiry, + this, SLOT(handleDelegateCompleted(int,BtAbstractDelegate*))); + if (ok) { + // Connect to the signal from BtDelegateInquiry for switching to + // search view when BT inquiry operation is really started. + ok = connect(mDelegate, SIGNAL(beginUiEditMode()), this, SLOT(goToSearchView())); + BTUI_ASSERT_X( ok, "BtcpuiMainView", "launchDeviceDiscovery() can't connect" ); + } + if (ok) { + mDelegate->exec(QVariant()); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::changeBtLocalName() +void BtcpuiMainView::goToSearchView() { - //Error handling has to be done. - if (!mAbstractDelegate) { - mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::DeviceName, - mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int,QVariant)), this, SLOT(btNameDelegateCompleted(int,QVariant)) ); - mAbstractDelegate->exec(mDeviceNameEdit->text ()); - } - else { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BtcpuiBaseView *search = searchView(); + // For navigating back to this view + search->setPreviousView( this ); + search->take(mDelegate); + mDelegate = 0; + switchView(this, search, QVariant(), false); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::changeBtLocalName() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + bool ok = createExecuteDelegate(BtDelegate::ChangeLocalName, + this, SLOT(btNameDelegateCompleted(int)), mDeviceNameEdit->text()); + if (!ok) { setPrevBtLocalName(); } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::setPrevBtLocalName() +void BtcpuiMainView::setPrevBtLocalName() { - //ToDo: Should we notify user this as Error...? - //HbNotificationDialog::launchDialog(hbTrId("Error")); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QModelIndex index = mSettingModel->index( BtSettingModel::LocalBtNameRow,0 ); mDeviceNameEdit->setText( mSettingModel->data( index,BtSettingModel::settingDisplayRole).toString() ); + BOstraceFunctionExit0(DUMMY_DEVLIST); } - -void BtCpUiMainView::btNameDelegateCompleted(int status, QVariant param) +void BtcpuiMainView::btNameDelegateCompleted(int status) { - if(KErrNone == status) { - mDeviceNameEdit->setText(param.toString()); - } - else { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if(KErrNone != status) { setPrevBtLocalName(); } - //Error handling has to be done. - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } - + handleDelegateCompleted(status, mDelegate); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::visibilityChanged (int index) +void BtcpuiMainView::removeRegistryDevices(BtDelegate::EditorType type) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + if (type != BtDelegate::RemoveBlockedDevices) { + //Before removing devices from the list call disconnect delegate + //to disconnect all active connections, this is done if all/paired + //devices are removed. + QList list; + list.append(QVariant( AllOngoingConnections )); + + (void) createExecuteDelegate(BtDelegate::DisconnectAllConnections, + this, SLOT(disconnectAllDelegateCompleted(int)), list); + } + else { + //In case of Blocked devices, just remove devices from list. + (void) createExecuteDelegate(type, + this, SLOT(handleDelegateCompleted(int,BtAbstractDelegate*)), type); + } + + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::disconnectAllDelegateCompleted(int status) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + handleDelegateCompleted(status, mDelegate); + + //Remove Device list from registry after disconnect is done. + (void) createExecuteDelegate(mRemoveDevDelegateType, + this, SLOT(handleDelegateCompleted(int,BtAbstractDelegate*)), mRemoveDevDelegateType); + + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::changeVisibility(int index) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QList list; VisibilityMode mode = indexToVisibilityMode(index); @@ -298,57 +219,240 @@ //Right now hardcoded to 5 Mins. list.append(QVariant(5)); } + bool ok = createExecuteDelegate(BtDelegate::ChangeVisibility, + this, SLOT(visibilityDelegateCompleted(int)), list); //Error handling has to be done. - if ( !mAbstractDelegate ) { - mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::Visibility, - mSettingModel, mDeviceModel); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(visibilityDelegateCompleted(int)) ); - mAbstractDelegate->exec(list); - } - else { + if ( !ok ) { setPrevVisibilityMode(); } - + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::setPrevVisibilityMode() +void BtcpuiMainView::setPrevVisibilityMode() { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QModelIndex index = mSettingModel->index( BtSettingModel::VisibilityRow, 0 ); mVisibilityMode->setCurrentIndex ( visibilityModeToIndex((VisibilityMode) mSettingModel->data(index,BtSettingModel::SettingValueRole).toInt()) ); - + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::allActionTriggered() +void BtcpuiMainView::allActionTriggered() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + updateDeviceListFilter(BtuiAll); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::pairActionTriggered() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + updateDeviceListFilter(BtuiPaired); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::aboutToShowOptionsMenu() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + updateOptionsMenu(); + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::updateOptionsMenu() { - HbMenu *menu = this->menu(); - menu->removeAction(mRemovePairedDevices); - mRemoveDevices = menu->addMenu( mSubMenu ); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + if(mPairAction->isEnabled()) { + //All Toolbar Action is active + mRemovePairedDevices->setVisible(false); + + int devCount = mDeviceModel->deviceCount(BtuiDevProperty::InRegistry); + bool visibility = false; + + HbAction *subMenuAction = static_cast (mLoader->findObject( + "showAction")); - updateDeviceListFilter(BtuiAll); + if(!devCount) { + //No Registry devices then return. + mSubMenu->menuAction()->setVisible(false); + subMenuAction->setVisible(false); + return; + } + + visibility = true; + mSubMenu->menuAction()->setVisible(visibility); + subMenuAction->setVisible(visibility); + + subMenuAction = static_cast (mLoader->findObject( + "removeAllAction")); + subMenuAction->setVisible(visibility); + + devCount = mDeviceModel->deviceCount(BtuiDevProperty::Bonded); + + visibility = false; + if(devCount) { + visibility = true; + } + subMenuAction = static_cast (mLoader->findObject( + "removePairedAction")); + subMenuAction->setVisible(visibility); + + devCount = mDeviceModel->deviceCount(BtuiDevProperty::Blocked); + + visibility = false; + if(devCount) { + visibility = true; + } + subMenuAction = static_cast (mLoader->findObject( + "removeBlockedAction")); + subMenuAction->setVisible(visibility); + + } + else { + //Pair Toolbar Action is active + mSubMenu->menuAction()->setVisible(false); + + int devCount = mDeviceModel->deviceCount(BtuiDevProperty::Bonded); + bool visibility = false; + + HbAction *subMenuAction = static_cast (mLoader->findObject( + "showAction")); + + if(devCount) { + visibility = true; + } + mRemovePairedDevices->setVisible(visibility); + subMenuAction->setVisible(visibility); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::pairActionTriggered() +void BtcpuiMainView::menuActionTriggered(HbAction *action) { - HbMenu *menu = this->menu(); - menu->removeAction(mRemoveDevices); - mRemovePairedDevices = menu->addAction(hbTrId("txt_bt_opt_remove_paired_devices")); - updateDeviceListFilter(BtuiPaired); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + if(!(action->text().compare(hbTrId("txt_bt_opt_advanced_settings")))) { + //Advance Settings is not implemented yet. + return; + } + + if(!(action->text().compare(hbTrId("txt_bt_opt_show")))) { + viewByDeviceTypeDialog(); + } + else { + QString dialogtext; + + if(!(action->text().compare(hbTrId("txt_bt_opt_remove_sub_all_devices")))) { + mRemoveDevDelegateType = BtDelegate::RemoveAllRegistryDevices; + dialogtext = hbTrId("txt_bt_info_delete_all_devices_some_devices_may_b"); + } + else if(!(action->text().compare(hbTrId("txt_bt_opt_remove_sub_blocked_devices")))) { + mRemoveDevDelegateType = BtDelegate::RemoveBlockedDevices; + dialogtext = hbTrId("txt_bt_info_delete_all_blocked_devices"); + } + else { + mRemoveDevDelegateType = BtDelegate::RemovePairedDevices; + dialogtext = hbTrId("txt_bt_info_delete_all_paired_devices_some_device"); + } + + HbMessageBox* dialog = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + dialog->setText(dialogtext); + dialog->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No); + dialog->setAttribute(Qt::WA_DeleteOnClose); + + dialog->open(this,SLOT(onRemoveQuestionDialogClosed(int))); + + } + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +void BtcpuiMainView::onRemoveQuestionDialogClosed(int action) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + if (action == HbMessageBox::Yes) { + removeRegistryDevices(mRemoveDevDelegateType); + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::updateDeviceListFilter(BtCpUiMainView::filterType filter) +/*! + Callback for HbSelectionDialog closing + ReImplemented Slot from Base class + + */ +void BtcpuiMainView::viewByDialogClosed(HbAction* action) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + + int devTypesWanted = 0; + + devTypesWanted = selectedDeviceTypes(action); + + if (devTypesWanted) { + mBtuiModelSortFilter->clearDeviceMajorFilters(); + if(mAllAction->isEnabled()) { + mBtuiModelSortFilter->addDeviceMajorFilter( + BtuiDevProperty::InRegistry | BtuiDevProperty::Bonded, + BtuiModelSortFilter::AtLeastMatch); + } + else { + mBtuiModelSortFilter->addDeviceMajorFilter( + BtuiDevProperty::InRegistry, + BtuiModelSortFilter::AtLeastMatch); + } + mBtuiModelSortFilter->addDeviceMajorFilter(devTypesWanted, + BtuiModelSortFilter::RoughMatch); // device can be any one of selected ones + } + BOstraceFunctionExit0(DUMMY_DEVLIST); +} + +BtcpuiBaseView *BtcpuiMainView::searchView() { - mMainFilterModel->clearDeviceMajorFilters(); + if (!mSearchView) { + mSearchView = new BtcpuiSearchView(*mSettingModel, *mDeviceModel); + mSearchView->setViewMgr(this); + mMainWindow->addView(mSearchView); + } + return mSearchView; +} + +BtcpuiBaseView *BtcpuiMainView::deviceView() +{ + if (!mDeviceView) { + mDeviceView = new BtcpuiDeviceView(*mSettingModel, *mDeviceModel); + mDeviceView->setViewMgr(this); + mMainWindow->addView(mDeviceView); + } + return mDeviceView; +} + +void BtcpuiMainView::switchView( + BtcpuiBaseView *from, BtcpuiBaseView *destination, + const QVariant &init, bool backNavi) +{ + BTUI_ASSERT_X( from && destination, "BtcpuiSettingItem::switchView", "null view" ); + from->deactivateView(); + mMainWindow->setCurrentView( destination ); + destination->activateView( init, backNavi); +} + +void BtcpuiMainView::updateDeviceListFilter(BtcpuiMainView::filterType filter) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + mBtuiModelSortFilter->clearDeviceMajorFilters(); switch (filter) { case BtuiAll: mDataForm->setHeading(hbTrId("txt_bt_subhead_bluetooth_all_devices")); mPairAction->setEnabled(true); mAllAction->setEnabled(false); - mMainFilterModel->addDeviceMajorFilter( + mBtuiModelSortFilter->addDeviceMajorFilter( BtuiDevProperty::InRegistry, BtuiModelSortFilter::AtLeastMatch); @@ -357,56 +461,62 @@ mDataForm->setHeading(hbTrId("txt_bt_subhead_bluetooth_paired_devices")); mPairAction->setEnabled(false); mAllAction->setEnabled(true); - mMainFilterModel->addDeviceMajorFilter( + mBtuiModelSortFilter->addDeviceMajorFilter( BtuiDevProperty::InRegistry | BtuiDevProperty::Bonded, BtuiModelSortFilter::AtLeastMatch); break; } + BOstraceFunctionExit0(DUMMY_DEVLIST); } - -void BtCpUiMainView::visibilityDelegateCompleted(int status) +void BtcpuiMainView::visibilityDelegateCompleted(int status) { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); //This should be mapped to Qt error if(KErrNone != status) { setPrevVisibilityMode(); } - - //Error handling has to be done. - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; - } - + handleDelegateCompleted(status, mDelegate); + BOstraceFunctionExit0(DUMMY_DEVLIST); } // called due to real orientation change event coming from main window -void BtCpUiMainView::changeOrientation( Qt::Orientation orientation ) +void BtcpuiMainView::changeOrientation( Qt::Orientation orientation ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); bool ok = false; mOrientation = orientation; if( orientation == Qt::Vertical ) { // load "portrait" section mLoader->load( BTUI_MAINVIEW_DOCML, "portrait", &ok ); BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file: portrait section problem" ); + + mDeviceList->setColumnCount(1); + mDeviceList->setRowCount(4); + mDeviceList->setScrollDirections(Qt::Vertical); + mDeviceList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded ); } else { // load "landscape" section mLoader->load( BTUI_MAINVIEW_DOCML, "landscape", &ok ); BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file: landscape section problem" ); + + mDeviceList->setRowCount(1); + mDeviceList->setColumnCount(6); + mDeviceList->setScrollDirections(Qt::Horizontal); + mDeviceList->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded ); } + BOstraceFunctionExit0(DUMMY_DEVLIST); } /*! Slot for receiving notification of local setting changes from the model. Identify the setting changed and update the corresponding UI item. */ -void BtCpUiMainView::updateSettingItems(const QModelIndex &topLeft, const QModelIndex &bottomRight) +void BtcpuiMainView::updateSettingItems(const QModelIndex &topLeft, const QModelIndex &bottomRight) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); bool val(false); // update only the part of the view specified by the model's row(s) @@ -436,19 +546,21 @@ mSettingModel->data(index,BtSettingModel::SettingValueRole).toInt()) ); break; } - } + } + BOstraceFunctionExit0(DUMMY_DEVLIST); } /*! Slot for receiving notification for user interaction on power state. Manually update model data since HbPushButton is not linked to model directly. */ -void BtCpUiMainView::changePowerState() +void BtcpuiMainView::changePowerState() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); QModelIndex index = mSettingModel->index(BtSettingModel::PowerStateRow, 0); PowerStateQtValue powerState = (PowerStateQtValue)mSettingModel->data(index, Qt::EditRole).toInt(); BTUI_ASSERT_X(((powerState == BtPowerOn) || (powerState == BtPowerOff)), - "BtCpUiMainView::changePowerState()", "incorrect qt power state"); + "BtcpuiMainView::changePowerState()", "incorrect qt power state"); if (powerState == BtPowerOff) { powerState = BtPowerOn; @@ -456,34 +568,167 @@ else { powerState = BtPowerOff; } - - if (!mAbstractDelegate)//if there is no other delegate running - { - mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::ManagePower, - mSettingModel, mDeviceModel ); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(powerDelegateCompleted(int)) ); - mAbstractDelegate->exec(QVariant((int)powerState)); - } - + (void) createExecuteDelegate(BtDelegate::ManagePower, + this, SLOT(handleDelegateCompleted(int,BtAbstractDelegate*)), + QVariant((int)powerState)); + BOstraceFunctionExit0(DUMMY_DEVLIST); } -void BtCpUiMainView::powerDelegateCompleted(int status) +void BtcpuiMainView::loadDocument() { - Q_UNUSED(status); - //ToDo: Error handling here - if (mAbstractDelegate) - { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; + bool ret(false); + // Create view for the application. + // Set the name for the view. The name should be same as the view's + // name in docml. + setObjectName("bt_main_view"); + + mLoader = new HbDocumentLoader(); + // Pass the view to documentloader. Document loader uses this view + // when docml is parsed, instead of creating new view. + QObjectList objectList; + objectList.append(this); + mLoader->setObjectTree(objectList); + + bool ok = false; + mLoader->load( BTUI_MAINVIEW_DOCML, &ok ); + // Exit if the file format is invalid + BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file" ); + + mDeviceList=0; + mDeviceList = qobject_cast( mLoader->findWidget( "deviceList" ) ); + BTUI_ASSERT_X( mDeviceList != 0, "bt-main-view", "Device List (grid view) not found" ); + + ret = connect(mDeviceList, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); + BTUI_ASSERT_X( ret, "bt-main-view", "deviceSelected can't connect" ); + + ret = connect(mDeviceList, + SIGNAL(longPressed(HbAbstractViewItem*, QPointF)), this, + SLOT(showContextMenu(HbAbstractViewItem*, QPointF))); + BTUI_ASSERT_X( ret, "bt-main-view", "deviceSelected can't connect" ); + + mOrientation = mMainWindow->orientation(); + + mDeviceList->setSwapDimensionsOnOrientationChange(false); + + if (mOrientation == Qt::Horizontal) { + mLoader->load(BTUI_MAINVIEW_DOCML, "landscape", &ok); + BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file: landscape section problem" ); + mDeviceList->setRowCount(1); + mDeviceList->setColumnCount(6); + mDeviceList->setScrollDirections(Qt::Horizontal); + mDeviceList->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded ); + } + else { + mLoader->load(BTUI_MAINVIEW_DOCML, "portrait", &ok); + BTUI_ASSERT_X( ok, "bt-main-view", "Invalid docml file: landscape section problem" ); + mDeviceList->setColumnCount(1); + mDeviceList->setRowCount(4); + mDeviceList->setScrollDirections(Qt::Vertical); + mDeviceList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded ); } - //BTUI_ASSERT_X( status, "bt-main-view", "error in delegate complete" ); + + mDeviceNameEdit=0; + mDeviceNameEdit = qobject_cast( mLoader->findWidget( "deviceNameEdit" ) ); + BTUI_ASSERT_X( mDeviceNameEdit != 0, "bt-main-view", "Device Name not found" ); + ret = connect(mDeviceNameEdit, SIGNAL(editingFinished ()), this, SLOT(changeBtLocalName())); + + mPowerButton=0; + mPowerButton = qobject_cast( mLoader->findWidget( "toggleBluetoothPower" ) ); + BTUI_ASSERT_X( mPowerButton != 0, "bt-main-view", "power button not found" ); + ret = connect(mPowerButton, SIGNAL(clicked()), this, SLOT(changePowerState())); + BTUI_ASSERT_X( ret, "BtcpuiMainView::BtcpuiMainView", "can't connect power button" ); + + mVisibilityMode=0; + mVisibilityMode = qobject_cast( mLoader->findWidget( "visibilityMode" ) ); + BTUI_ASSERT_X( mVisibilityMode != 0, "bt-main-view", "visibility combobox not found" ); + // add new item for temporary visibility + // NOTE: translation (at least default english) gives string "(p)Visible for 5 min", + // if setting 1 min --> "(s)Visible for 1 min", ie p=plural, s=singular, but these should + // not be shown to the user! + // ToDo: change this to use translation once it starts working + QString tempVis(hbTrId("txt_bt_setlabel_visibility_val_visible_for_l1_min", 5)); + //QString tempVis(hbTrId("Visible for 5 min")); + mVisibilityMode->addItem(tempVis, Qt::DisplayRole); + + // listen for orientation changes + ret = connect(mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), + this, SLOT(changeOrientation(Qt::Orientation))); + BTUI_ASSERT_X( ret, "BtcpuiMainView::BtcpuiMainView()", "connect orientationChanged() failed"); + + // load tool bar actions + HbAction *discoverAction = static_cast( mLoader->findObject( "discoverAction" ) ); + BTUI_ASSERT_X( discoverAction, "bt-main-view", "discover action missing" ); + ret = connect(discoverAction, SIGNAL(triggered()), this, SLOT(launchDeviceDiscovery())); + BTUI_ASSERT_X( ret, "bt-main-view", "discover action can't connect" ); + + // load tool bar actions + mAllAction = static_cast( mLoader->findObject( "allAction" ) ); + BTUI_ASSERT_X( mAllAction, "bt-main-view", "All action missing" ); + ret = connect(mAllAction, SIGNAL(triggered()), this, SLOT(allActionTriggered())); + BTUI_ASSERT_X( ret, "bt-main-view", "all action can't connect" ); + + // load tool bar actions + mPairAction = static_cast( mLoader->findObject( "pairedAction" ) ); + BTUI_ASSERT_X( mPairAction, "bt-main-view", "Pair action missing" ); + ret = connect(mPairAction, SIGNAL(triggered()), this, SLOT(pairActionTriggered())); + BTUI_ASSERT_X( ret, "bt-main-view", "pair action can't connect" ); + + mDataForm = qobject_cast( mLoader->findWidget( "bluetoothHeading" ) ); + BTUI_ASSERT_X( mDataForm != 0, "bt-main-view", "dataForm not found" ); + + + // load menu + HbMenu *optionsMenu = qobject_cast(mLoader->findWidget("viewMenu")); + BTUI_ASSERT_X( optionsMenu != 0, "bt-main-view", "Options menu not found" ); + ret = connect(optionsMenu, SIGNAL(triggered(HbAction *)), this, SLOT(menuActionTriggered(HbAction *))); + BTUI_ASSERT_X( ret, "bt-main-view", "Menu can't connect" ); + + ret = connect(optionsMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowOptionsMenu())); + BTUI_ASSERT_X( ret, "bt-main-view", "Menu aboutToShow() can't connect" ); + + mSubMenu = qobject_cast(mLoader->findWidget("removeSubMenu")); + BTUI_ASSERT_X( optionsMenu != 0, "bt-main-view", "Options Sub menu not found" ); + + mRemovePairedDevices = static_cast( mLoader->findObject( "viewRemovePairedAction" ) ); + + // update display when setting data changed + ret = connect(mSettingModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), + this, SLOT(updateSettingItems(QModelIndex,QModelIndex))); + BTUI_ASSERT_X( ret, "BtcpuiMainView::BtcpuiMainView", "can't connect dataChanged" ); + + QModelIndex top = mSettingModel->index( BtSettingModel::LocalBtNameRow, 0 ); + QModelIndex bottom = mSettingModel->index( BtSettingModel::AllowedInOfflineRow, 0 ); + // update name, power and visibility rows + updateSettingItems( top, bottom ); + + //Handle Visibility Change User Interaction + ret = connect(mVisibilityMode, SIGNAL(currentIndexChanged (int)), + this, SLOT(changeVisibility(int))); + + bool regStatus(false); + regStatus = HbStyleLoader::registerFilePath(":/docml/btcpuimaingridviewitem.widgetml"); + BTUI_ASSERT_X( regStatus, "BtcpuiMainView::BtcpuiMainView", "registerFilePath Widgetml Failed" ); + regStatus = HbStyleLoader::registerFilePath(":/docml/btcpuimaingridviewitem.css"); + BTUI_ASSERT_X( regStatus, "BtcpuiMainView::BtcpuiMainView", "registerFilePath CSS Failed" ); + + mBtuiModelSortFilter = new BtuiModelSortFilter(this); + + mBtuiModelSortFilter->setSourceModel( mDeviceModel ); + mDeviceList->setModel(mBtuiModelSortFilter); + mDeviceList->setLayoutName("portrait"); + updateDeviceListFilter(BtuiPaired); + + mSubMenu->menuAction()->setVisible(false); + // Grid view item + BtCpUiMainGridViewItem *prototype = new BtCpUiMainGridViewItem(mDeviceList); + prototype->setModelSortFilter(mBtuiModelSortFilter); + mDeviceList->setItemPrototype(prototype); } /*! * Mapping from visibility mode UI row to VisibilityMode */ -VisibilityMode BtCpUiMainView::indexToVisibilityMode(int index) +VisibilityMode BtcpuiMainView::indexToVisibilityMode(int index) { VisibilityMode mode = BtVisibilityUnknown; switch(index) { @@ -497,7 +742,7 @@ mode = BtTemporary; break; default: - BTUI_ASSERT_X(false, "BtCpUiMainView::indexToVisibilityMode", "invalid mode"); + BTUI_ASSERT_X(false, "BtcpuiMainView::indexToVisibilityMode", "invalid mode"); } return mode; } @@ -505,7 +750,7 @@ /*! * Mapping from VisibilityMode to visibility mode UI row */ -int BtCpUiMainView::visibilityModeToIndex(VisibilityMode mode) +int BtcpuiMainView::visibilityModeToIndex(VisibilityMode mode) { int uiRow = UiRowBtUnknown; switch(mode) { @@ -519,106 +764,17 @@ uiRow = UiRowBtTemporary; break; default: - BTUI_ASSERT_X(false, "BtCpUiMainView::visibilityModeToIndex", "invalid mode"); + BTUI_ASSERT_X(false, "BtcpuiMainView::visibilityModeToIndex", "invalid mode"); } return uiRow; } - - -/*! - Create views(main view, device view and search view). - Add them to MainWindow. All views are long-lived and are deleted only when exiting the application - (or when main view is deleted). - */ -void BtCpUiMainView::createViews() -{ - Qt::Orientation orientation = mMainWindow->orientation(); - // Create other views - mSearchView = new BtCpUiSearchView( *mSettingModel, *mDeviceModel, this ); - mMainWindow->addView(mSearchView); - - mDeviceView = new BtCpUiDeviceView( *mSettingModel, *mDeviceModel, this ); - mMainWindow->addView(mDeviceView); - - mCurrentView = this; - mCurrentViewId = MainView; - - - // QList stores the previous view ids for each view. - for( int i=0; i < LastView; i++ ) { - mPreviousViewIds.append( 0 ); - } -} - -/*! - Switch between the views. - Parameter "value" is optional except for GadgetView, - which needs the QModelIndex of device - */ -void BtCpUiMainView::changeView(int targetViewId, bool fromBackButton, - const QVariant& value ) -{ - mCurrentView->deactivateView(); - - // update the previous view Id in QList - // If launching the target view from back softkey, - // the previous viewId of target view should not be changed. - // Otherwise, loop happens between two views. - if(!fromBackButton) { - // normal case: return to previous view - mPreviousViewIds[ targetViewId ] = mCurrentViewId; +void BtcpuiMainView::createContextMenuActions(int majorRole) +{ + if (majorRole & BtuiDevProperty::Connected) { + mContextMenu->addAction(hbTrId("txt_bt_menu_disconnect")); } - - // set the new current view - mCurrentView = idToView(targetViewId); - mCurrentViewId = targetViewId; - mMainWindow->setCurrentView( mCurrentView ); - - // do preparation or some actions when new view is activated - mCurrentView->activateView( value, fromBackButton ); -} - - -void BtCpUiMainView::deviceSelected(const QModelIndex& modelIndex) -{ - QModelIndex index = mMainFilterModel->mapToSource(modelIndex); - - QVariant params; - params.setValue(index); - - changeView( DeviceView, false, params ); + else { + mContextMenu->addAction(hbTrId("txt_bt_menu_connect")); + } } - -BtCpUiBaseView * BtCpUiMainView::idToView(int targetViewId) -{ - switch (targetViewId) { - case MainView: - return mMainView; - case SearchView: - return mSearchView; - case DeviceView: - return mDeviceView; - default : - BTUI_ASSERT_X(false, "BtCpUiMainView::idToView", "invalid view id"); - } - return 0; -} - -void BtCpUiMainView::setSoftkeyBack() -{ - // not needed in main view -} - -/*! - Jump to previous view. This function is used when back button is pressed. - semantics slightly different than in other views, since this is called by other - views when a view switch is needed - */ -void BtCpUiMainView::switchToPreviousView() -{ - BTUI_ASSERT_X( (mCurrentViewId >= 0) && (mCurrentViewId < LastView), - "BtCpUiMainView::switchToPreviousView", "invalid view id"); - changeView( mPreviousViewIds[mCurrentViewId], true ); -} - diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuimainview.h --- a/bluetoothengine/btui/btcpplugin/btcpuimainview.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuimainview.h Fri Sep 03 16:17:59 2010 +0300 @@ -20,7 +20,8 @@ #include "btcpuibaseview.h" #include -#include +#include +#include "btcpuiviewmgr.h" class HbLabel; class HbLineEdit; @@ -34,48 +35,60 @@ class HbGroupBox; class HbDataForm; -class BtCpUiMainView : public BtCpUiBaseView +class BtcpuiMainView : public BtcpuiBaseView, public BtcpuiViewMgr { Q_OBJECT public: - explicit BtCpUiMainView( - BtSettingModel &settingModel, + + explicit BtcpuiMainView(QGraphicsItem *parent = 0 ); + + explicit BtcpuiMainView(BtSettingModel &settingModel, BtDeviceModel &deviceModel, QGraphicsItem *parent = 0 ); - ~BtCpUiMainView(); - // from view manager - void createViews(); + + ~BtcpuiMainView(); - Qt::Orientation orientation(); - - // from base class BtCpUiBaseView - virtual void setSoftkeyBack(); - virtual void activateView( const QVariant& value, bool fromBackButton ); + // from base class BtcpuiBaseView + virtual void activateView( const QVariant& value, bool backNavi); + virtual void deactivateView(); + virtual void createContextMenuActions(int majorRole); + public slots: void changeOrientation( Qt::Orientation orientation ); void changePowerState(); - void visibilityChanged (int index); + void changeVisibility(int index); void changeBtLocalName(); void updateSettingItems(const QModelIndex &topLeft, const QModelIndex &bottomRight); - void deviceSelected(const QModelIndex& modelIndex); - void goToDiscoveryView(); - void goToDeviceView(const QModelIndex& modelIndex); - virtual void switchToPreviousView(); + + void launchDeviceDiscovery(); + + void goToSearchView(); //from delegate classes - void powerDelegateCompleted(int status); void visibilityDelegateCompleted(int status); - void btNameDelegateCompleted(int status, QVariant param); + void btNameDelegateCompleted(int status); void allActionTriggered(); - void pairActionTriggered(); + void pairActionTriggered(); + void menuActionTriggered(HbAction *action); + virtual void viewByDialogClosed(HbAction* action); + + void disconnectAllDelegateCompleted(int status); + void onRemoveQuestionDialogClosed(int action); + void aboutToShowOptionsMenu(); -private slots: - void changeView(int targetViewId, bool fromBackButton, const QVariant& value = 0 ); - + // returns the search view instance. + BtcpuiBaseView *searchView(); + + // From BtcpuiViewMgr + BtcpuiBaseView *deviceView(); + + void switchView(BtcpuiBaseView *from, BtcpuiBaseView *destination, + const QVariant &init, bool backNavi); + private: enum filterType { BtuiAll = 0, @@ -83,45 +96,44 @@ }; private: + + void loadDocument(); + VisibilityMode indexToVisibilityMode(int index); int visibilityModeToIndex(VisibilityMode mode); - BtCpUiBaseView * idToView(int targetViewId); //Functions to set the Previous Local settings in case of error void setPrevBtLocalName(); void setPrevVisibilityMode(); + void removeRegistryDevices(BtDelegate::EditorType type); - void updateDeviceListFilter(BtCpUiMainView::filterType filter); + void updateDeviceListFilter(BtcpuiMainView::filterType filter); + + void updateOptionsMenu(); private: + // search view. Owned + BtcpuiBaseView *mSearchView; + // device view. Owned. + BtcpuiBaseView *mDeviceView; + HbDocumentLoader *mLoader; HbLineEdit *mDeviceNameEdit; HbPushButton *mPowerButton; HbComboBox *mVisibilityMode; - HbListView *mDeviceList; + HbGridView *mDeviceList; Qt::Orientation mOrientation; - // from view manager - HbMainWindow* mMainWindow; - BtCpUiBaseView* mMainView; - BtCpUiBaseView* mDeviceView; - BtCpUiBaseView* mSearchView; - BtCpUiBaseView* mCurrentView; - int mCurrentViewId; - QList mPreviousViewIds; - - //poiter to abstract delegate, and it is instantiated at runtime - BtAbstractDelegate* mAbstractDelegate; - BtuiModelSortFilter *mMainFilterModel; - HbAction *mAllAction; HbAction *mPairAction; HbDataForm *mDataForm; HbAction* mRemovePairedDevices; HbAction* mRemoveDevices; HbMenu* mSubMenu; + BtDelegate::EditorType mRemoveDevDelegateType; + }; #endif // BTCPUIMAINVIEW_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuisearchlistviewitem.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuisearchlistviewitem.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuisearchlistviewitem.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -20,23 +20,21 @@ #include "btdevicemodel.h" #include "btuiiconutil.h" #include +#include BtCpUiSearchListViewItem::BtCpUiSearchListViewItem(QGraphicsItem * parent) : - HbListViewItem(parent), mParent(parent) + HbListViewItem(parent) { mDeviceNameLabel = 0; mDevTypeIconLabel = 0; - mDevTypeTextLabel = 0; + mBtuiModelSortFilter = ((BtCpUiSearchListViewItem *)parent)->mBtuiModelSortFilter; - - mRow = 0; + } BtCpUiSearchListViewItem::~BtCpUiSearchListViewItem() { -// delete mDeviceNameLabel; -// delete mDevTypeIconLabel; -// delete mDevTypeTextLabel; + } /* @@ -68,40 +66,21 @@ // create new icon label if needed if (!mDevTypeIconLabel) { - mDevTypeIconLabel = new HbLabel(); - mDevTypeIconLabel->setPreferredSize(53.5260, 53.5260); //8un x 8un - mDevTypeIconLabel->setMinimumWidth(53.5260); + mDevTypeIconLabel = new HbLabel(this); + HbStyle::setItemName(mDevTypeIconLabel, "btDeviceIcon"); } // create new label if needed if (!mDeviceNameLabel) { - mDeviceNameLabel = new HbLabel(); - mDeviceNameLabel->setPreferredSize(250, 26.763); - } - // create new label if needed - if (!mDevTypeTextLabel) { - mDevTypeTextLabel = new HbLabel(); - mDevTypeTextLabel->setPreferredSize(250, 26.763); - } - // create layout if needed - if ( !mRow ) { - // Still need to create the actual layout - mRow = new QGraphicsGridLayout(); - mRow->addItem(mDevTypeIconLabel,0,0,2,1); - mRow->addItem(mDeviceNameLabel,0,1,1,1); - mRow->addItem(mDevTypeTextLabel,1,1,1,1); - setLayout(mRow); + mDeviceNameLabel = new HbLabel(this); + HbStyle::setItemName(mDeviceNameLabel, "btDeviceName"); } QString data = index.data(Qt::DisplayRole).toString(); int cod = (index.data(BtDeviceModel::CoDRole)).toInt(); int majorProperty = (index.data(BtDeviceModel::MajorPropertyRole)).toInt(); - // ToDo: remove clear() once Orbit bug is fixed - mDeviceNameLabel->clear(); mDeviceNameLabel->setPlainText(data); - mDevTypeIconLabel->clear(); - mDevTypeTextLabel->clear(); - mDevTypeTextLabel->setPlainText( getDeviceTypeString( cod )); + HbIcon icon = getBadgedDeviceTypeIcon(cod, majorProperty, BtuiBottomLeft | BtuiBottomRight | BtuiTopLeft | BtuiTopRight ); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuisearchlistviewitem.h --- a/bluetoothengine/btui/btcpplugin/btcpuisearchlistviewitem.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuisearchlistviewitem.h Fri Sep 03 16:17:59 2010 +0300 @@ -39,13 +39,12 @@ void setModelSortFilter(BtuiModelSortFilter *filter); private: - QGraphicsItem *mParent; + HbLabel *mDevTypeIconLabel; HbLabel *mDeviceNameLabel; - HbLabel *mDevTypeTextLabel; + BtuiModelSortFilter* mBtuiModelSortFilter; - QGraphicsGridLayout *mRow; }; #endif /* BTCPUISEARCHLISTVIEWITEM_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuisearchview.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuisearchview.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuisearchview.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -16,8 +16,9 @@ */ #include "btcpuisearchview.h" -#include "btuiviewutil.h" +#include #include +#include #include #include #include @@ -31,41 +32,30 @@ #include #include #include -#include "btcpuimainview.h" -#include "btdelegatefactory.h" #include "btabstractdelegate.h" #include "btcpuisearchlistviewitem.h" #include "btuidevtypemap.h" - +#include "btuimodelsortfilter.h" +#include "btuiviewutil.h" +#include "btcpuiviewmgr.h" // docml to load const char* BTUI_SEARCHVIEW_DOCML = ":/docml/bt-search-view.docml"; -BtCpUiSearchView::BtCpUiSearchView( - BtSettingModel &settingModel, +BtcpuiSearchView::BtcpuiSearchView(BtSettingModel &settingModel, BtDeviceModel &deviceModel, QGraphicsItem *parent) : - BtCpUiBaseView(settingModel,deviceModel, parent), mAbstractDelegate(0), mBtuiModelSortFilter(0) + BtcpuiBaseView(settingModel,deviceModel, parent) { bool ret(false); - - mQuery = 0; - mLoader = 0; - mSoftKeyBackAction = 0; - - mMainView = (BtCpUiMainView *) parent; - mMainWindow = hbInstance->allMainWindows().first(); - - mSoftKeyBackAction = new HbAction(Hb::BackNaviAction, this); - BTUI_ASSERT_X(mSoftKeyBackAction, "BtCpUiSearchView::BtCpUiSearchView", "can't create back action"); - + // Create view for the application. // Set the name for the view. The name should be same as the view's // name in docml. setObjectName("bt_search_view"); mLoader = new HbDocumentLoader(); - BTUI_ASSERT_X( mLoader != 0, "BtCpUiSearchView::BtCpUiSearchView", "can't create mLoader" ); + BTUI_ASSERT_X( mLoader != 0, "BtcpuiSearchView::BtcpuiSearchView", "can't create mLoader" ); // Pass the view to documentloader. Document loader uses this view // when docml is parsed, instead of creating new view. QObjectList objectList; @@ -86,77 +76,79 @@ mDeviceIcon=0; // can't use qobject_cast since HbIcon is not derived from QObject! - mDeviceIcon = qobject_cast( mLoader->findWidget( "icon" ) ); - BTUI_ASSERT_X( mDeviceIcon != 0, "BtCpUiSearchView::BtCpUiSearchView", "Device Icon not found" ); + mDeviceIcon = qobject_cast( mLoader->findWidget( "searchIcon" ) ); + BTUI_ASSERT_X( mDeviceIcon != 0, "BtcpuiSearchView::BtcpuiSearchView", "Device Icon not found" ); mDataForm=0; - mDataForm = qobject_cast( mLoader->findWidget( "dataForm" ) ); - BTUI_ASSERT_X( mDataForm != 0, "BtCpUiSearchView::BtCpUiSearchView", "dataForm not found" ); + mDataForm = qobject_cast( mLoader->findWidget( "searchHeading" ) ); + BTUI_ASSERT_X( mDataForm != 0, "BtcpuiSearchView::BtcpuiSearchView", "dataForm not found" ); mDataForm->setHeading(hbTrId("txt_bt_subhead_bluetooth_found_devices")); mLabelSearching=0; - mLabelSearching = qobject_cast( mLoader->findWidget( "label_searching" ) ); - BTUI_ASSERT_X( mLabelSearching != 0, "BtCpUiSearchView::BtCpUiSearchView", "Searching not found" ); + mLabelSearching = qobject_cast( mLoader->findWidget( "searchStatus" ) ); + BTUI_ASSERT_X( mLabelSearching != 0, "BtcpuiSearchView::BtcpuiSearchView", "Searching not found" ); mLabelSearching->setPlainText(hbTrId("txt_bt_subhead_searching")); mDeviceList=0; mDeviceList = qobject_cast( mLoader->findWidget( "deviceList" ) ); - BTUI_ASSERT_X( mDeviceList != 0, "BtCpUiSearchView::BtCpUiSearchView", "Device List not found" ); + BTUI_ASSERT_X( mDeviceList != 0, "BtcpuiSearchView::BtcpuiSearchView", "Device List not found" ); - + ret = connect(mDeviceList, + SIGNAL(longPressed(HbAbstractViewItem*, QPointF)), this, + SLOT(showContextMenu(HbAbstractViewItem*, QPointF))); + BTUI_ASSERT_X( ret, "bt-search-view", "deviceSelected can't connect" ); + mDeviceList->setSelectionMode( HbAbstractItemView::SingleSelection ); // read landscape orientation section from docml file if needed mOrientation = mMainWindow->orientation(); if (mOrientation == Qt::Horizontal) { - mLoader->load(BTUI_SEARCHVIEW_DOCML, "landscape_ui", &ok); - BTUI_ASSERT_X( ok, "BtCpUiSearchView::BtCpUiSearchView", "Invalid docml file: landscape section problem" ); + mLoader->load(BTUI_SEARCHVIEW_DOCML, "landscape", &ok); + BTUI_ASSERT_X( ok, "BtcpuiSearchView::BtcpuiSearchView", "Invalid docml file: landscape section problem" ); } else { - mLoader->load(BTUI_SEARCHVIEW_DOCML, "portrait_ui", &ok); - BTUI_ASSERT_X( ok, "BtCpUiSearchView::BtCpUiSearchView", "Invalid docml file: portrait section problem" ); + mLoader->load(BTUI_SEARCHVIEW_DOCML, "portrait", &ok); + BTUI_ASSERT_X( ok, "BtcpuiSearchView::BtcpuiSearchView", "Invalid docml file: portrait section problem" ); } // listen for orientation changes ret = connect(mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(changeOrientation(Qt::Orientation))); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView()", "connect orientationChanged() failed"); + BTUI_ASSERT_X( ret, "BtcpuiSearchView::BtcpuiSearchView()", "connect orientationChanged() failed"); // load tool bar actions mViewBy = static_cast( mLoader->findObject( "viewByAction" ) ); - BTUI_ASSERT_X( mViewBy, "BtCpUiSearchView::BtCpUiSearchView", "view by action missing" ); + BTUI_ASSERT_X( mViewBy, "BtcpuiSearchView::BtcpuiSearchView", "view by action missing" ); ret = connect(mViewBy, SIGNAL(triggered()), this, SLOT(viewByDeviceTypeDialog())); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView", "viewByAction can't connect" ); + BTUI_ASSERT_X( ret, "BtcpuiSearchView::BtcpuiSearchView", "viewByAction can't connect" ); mStop = static_cast( mLoader->findObject( "stopAction" ) ); - BTUI_ASSERT_X( mStop, "BtCpUiSearchView::BtCpUiSearchView", "stopAction missing" ); + BTUI_ASSERT_X( mStop, "BtcpuiSearchView::BtcpuiSearchView", "stopAction missing" ); ret = connect(mStop, SIGNAL(triggered()), this, SLOT(stopSearching())); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView", "stopAction can't connect" ); + BTUI_ASSERT_X( ret, "BtcpuiSearchView::BtcpuiSearchView", "stopAction can't connect" ); mStop->setEnabled(true); mRetry = static_cast( mLoader->findObject( "retryAction" ) ); - BTUI_ASSERT_X( mRetry, "BtCpUiSearchView::BtCpUiSearchView", "retryAction missing" ); + BTUI_ASSERT_X( mRetry, "BtcpuiSearchView::BtcpuiSearchView", "retryAction missing" ); ret = connect(mRetry, SIGNAL(triggered()), this, SLOT(retrySearch())); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView", "retryAction can't connect" ); + BTUI_ASSERT_X( ret, "BtcpuiSearchView::BtcpuiSearchView", "retryAction can't connect" ); // Disable for initial search mRetry->setEnabled(false); // load menu HbMenu *optionsMenu = qobject_cast(mLoader->findWidget("viewMenu")); - BTUI_ASSERT_X( optionsMenu != 0, "BtCpUiSearchView::BtCpUiSearchView", "Options menu not found" ); + BTUI_ASSERT_X( optionsMenu != 0, "BtcpuiSearchView::BtcpuiSearchView", "Options menu not found" ); this->setMenu(optionsMenu); ret = connect(mDeviceList, SIGNAL(activated(QModelIndex)), this, SLOT(deviceSelected(QModelIndex))); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView", "deviceSelected can't connect" ); + BTUI_ASSERT_X( ret, "BtcpuiSearchView::BtcpuiSearchView", "deviceSelected can't connect" ); - // initialize device type list for "view by" option - // Note: this list needs to be in the same order as enum devTypeSelectionList - mDevTypeList << hbTrId("txt_bt_list_audio_devices") - << hbTrId("txt_bt_list_computers") - << hbTrId("txt_bt_list_input_devices") - << hbTrId("txt_bt_list_phones") - << hbTrId("txt_bt_list_other_devices"); - + bool regStatus(false); + regStatus = HbStyleLoader::registerFilePath(":/docml/btcpuisearchlistviewitem.widgetml"); + BTUI_ASSERT_X( regStatus, "BtcpuiSearchView::BtcpuiSearchView", "registerFilePath Widgetml Failed" ); + regStatus = HbStyleLoader::registerFilePath(":/docml/btcpuisearchlistviewitem.css"); + BTUI_ASSERT_X( regStatus, "BtcpuiSearchView::BtcpuiSearchView", "registerFilePath CSS Failed" ); + // initialize sort model & create // inquiry delegate // Sort is set to dynamic sort filter = true in the class, will sort automatically @@ -165,6 +157,7 @@ mBtuiModelSortFilter->addDeviceMajorFilter( BtuiDevProperty::InRange, BtuiModelSortFilter::AtLeastMatch); mDeviceList->setModel(mBtuiModelSortFilter); + mDeviceList->setLayoutName("custom-list"); // add sort order to show devices in the order they are found mBtuiModelSortFilter->setSortRole(BtDeviceModel::SeqNumRole); // Sort according to the first column (and the only column) in the listview - sorted according SeqNumRole @@ -173,34 +166,17 @@ BtCpUiSearchListViewItem *prototype = new BtCpUiSearchListViewItem(mDeviceList); prototype->setModelSortFilter(mBtuiModelSortFilter); mDeviceList->setItemPrototype(prototype); - - // Create the inquiry delegate. - mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::Inquiry, mSettingModel, mDeviceModel ); - - } -BtCpUiSearchView::~BtCpUiSearchView() +BtcpuiSearchView::~BtcpuiSearchView() { delete mLoader; // Also deletes all widgets that it constructed. - - setNavigationAction(0); - disconnect( mSoftKeyBackAction ); - delete mSoftKeyBackAction; - - if(mAbstractDelegate) { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - } - if(mBtuiModelSortFilter) { - delete mBtuiModelSortFilter; - } - if ( mQuery ) { - delete mQuery; - } + delete mBtuiModelSortFilter; + HbStyleLoader::unregisterFilePath(":/docml/btcpuisearchlistviewitem.widgetml"); + HbStyleLoader::unregisterFilePath(":/docml/btcpuisearchlistviewitem.css"); } -void BtCpUiSearchView::changeOrientation( Qt::Orientation orientation ) +void BtcpuiSearchView::changeOrientation( Qt::Orientation orientation ) { // ToDo: this does not handle redrawing list view items differently for portrait/landscape bool ok = false; @@ -208,181 +184,119 @@ if( orientation == Qt::Vertical ) { // load "portrait" section - mLoader->load( BTUI_SEARCHVIEW_DOCML, "portrait_ui", &ok ); - BTUI_ASSERT_X( ok, "BtCpUiSearchView::changeOrientation", "Invalid docml file: portrait section problem" ); + mLoader->load( BTUI_SEARCHVIEW_DOCML, "portrait", &ok ); + BTUI_ASSERT_X( ok, "BtcpuiSearchView::changeOrientation", "Invalid docml file: portrait section problem" ); } else { // load "landscape" section - mLoader->load( BTUI_SEARCHVIEW_DOCML, "landscape_ui", &ok ); - BTUI_ASSERT_X( ok, "BtCpUiSearchView::changeOrientation", "Invalid docml file: landscape section problem" ); + mLoader->load( BTUI_SEARCHVIEW_DOCML, "landscape", &ok ); + BTUI_ASSERT_X( ok, "BtcpuiSearchView::changeOrientation", "Invalid docml file: landscape section problem" ); } } - -void BtCpUiSearchView::viewByDeviceTypeDialog() -{ - if ( !mQuery ) { - mQuery = new HbSelectionDialog; - mQuery->setStringItems(mDevTypeList, 0); - mQuery->setSelectionMode(HbAbstractItemView::MultiSelection); - - QList current; - current.append(QVariant(0)); - mQuery->setSelectedItems(current); - - // Set the heading for the dialog. - HbLabel *headingLabel = new HbLabel(hbTrId("txt_bt_title_show"), mQuery); - mQuery->setHeadingWidget(headingLabel); - } - mQuery->open(this,SLOT(viewByDialogClosed(HbAction*))); -} /*! Callback for HbSelectionDialog closing + ReImplemented Slot from Base class */ -void BtCpUiSearchView::viewByDialogClosed(HbAction* action) +void BtcpuiSearchView::viewByDialogClosed(HbAction* action) +{ + int devTypesWanted = 0; + + devTypesWanted = selectedDeviceTypes(action); + + if (devTypesWanted) { + mBtuiModelSortFilter->clearDeviceMajorFilters(); + mBtuiModelSortFilter->addDeviceMajorFilter(BtuiDevProperty::InRange, + BtuiModelSortFilter::AtLeastMatch); // device must be in range + mBtuiModelSortFilter->addDeviceMajorFilter(devTypesWanted, + BtuiModelSortFilter::RoughMatch); // device can be any one of selected ones + } +} + +void BtcpuiSearchView::stopSearching() { - disconnect( mQuery ); // remove slot - if (action == mQuery->actions().first()) { // user pressed "Ok" - // Get selected items. - QList selections; - selections = mQuery->selectedItems(); - - int devTypesWanted = 0; - - for (int i=0; i < selections.count(); i++) { - switch (selections.at(i).toInt()) { - case BtUiDevAudioDevice: - devTypesWanted |= BtuiDevProperty::AVDev; - break; - case BtUiDevComputer: - devTypesWanted |= BtuiDevProperty::Computer; - break; - case BtUiDevInputDevice: - devTypesWanted |= BtuiDevProperty::Peripheral; - break; - case BtUiDevPhone: - devTypesWanted |= BtuiDevProperty::Phone; - break; - case BtUiDevOtherDevice: - devTypesWanted |= (BtuiDevProperty::LANAccessDev | - BtuiDevProperty::Toy | - BtuiDevProperty::WearableDev | - BtuiDevProperty::ImagingDev | - BtuiDevProperty::HealthDev | - BtuiDevProperty::UncategorizedDev); - break; - default: - // should never get here - BTUI_ASSERT_X(false, "BtCpUiSearchView::viewByDialogClosed()", - "wrong device type in viewBy dialog!"); - } - } - if (devTypesWanted) { - mBtuiModelSortFilter->clearDeviceMajorFilters(); - mBtuiModelSortFilter->addDeviceMajorFilter(BtuiDevProperty::InRange, - BtuiModelSortFilter::AtLeastMatch); // device must be in range - mBtuiModelSortFilter->addDeviceMajorFilter(devTypesWanted, - BtuiModelSortFilter::RoughMatch); // device can be any one of selected ones + // Stop searching + if (mDelegate) { + mDelegate->cancel(); + // update the states of view items + deviceSearchCompleted(KErrNone); + } +} + +void BtcpuiSearchView::take(BtAbstractDelegate *delegate) +{ + mDelegate = delegate; + if (mDelegate) { + disconnect(mDelegate, 0, 0, 0); + if (mDelegate->supportedEditorTypes() & BtDelegate::Inquiry) { + connect(mDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(deviceSearchCompleted(int))); + } else { + connect(mDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(handleDelegateCompleted(int))); } } } -void BtCpUiSearchView::stopSearching() +void BtcpuiSearchView::startSearchDelegate() { - // Stop searching - - // Stop search delegate - mAbstractDelegate->cancel(); - // reset view - deviceSearchCompleted(KErrNone); + (void) createExecuteDelegate(BtDelegate::Inquiry, + this, SLOT(deviceSearchCompleted(int)), QVariant()); } -void BtCpUiSearchView::startSearchDelegate () -{ - bool ret = false; - - // Connect to the signal from the BtDelegateInquiry for completion of the search request - ret = connect(mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(searchDelegateCompleted(int))); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView", "searchDelegateCompleted can't connect" ); - - // Connect to the signal from the BtuiModel when the search has been completed. - ret = connect(mDeviceModel, SIGNAL(deviceSearchCompleted(int)), this, SLOT(deviceSearchCompleted(int))); - BTUI_ASSERT_X( ret, "BtCpUiSearchView::BtCpUiSearchView", "deviceSearchCompleted can't connect" ); - - mAbstractDelegate->exec(QVariant()); -} - -void BtCpUiSearchView::retrySearch() +void BtcpuiSearchView::retrySearch() { // Retry search - // Change label and buttons to reflect status mLabelSearching->setPlainText(hbTrId("txt_bt_subhead_searching")); mRetry->setEnabled(false); mStop->setEnabled(true); // Make use of the delegate and start the search. - startSearchDelegate (); -} - -void BtCpUiSearchView::setSoftkeyBack() -{ - if (navigationAction() != mSoftKeyBackAction) { - setNavigationAction(mSoftKeyBackAction); - connect( mSoftKeyBackAction, SIGNAL(triggered()), this, SLOT(switchToPreviousView()) ); - } + startSearchDelegate(); } -void BtCpUiSearchView::switchToPreviousView() -{ - BTUI_ASSERT_X(mMainView, "BtCpUiSearchView::switchToPreviousView", "invalid mMainView"); - mMainView->switchToPreviousView(); -} - -void BtCpUiSearchView::activateView( const QVariant& value, bool fromBackButton ) +void BtcpuiSearchView::activateView( const QVariant& value, bool backNavi) { Q_UNUSED(value); - + if (!backNavi) { + retrySearch(); + } + // ToDo: consider whether orientation should be updated here rather than when orientation really changes; // advantage: if orientation changes temporarily in another view, but returns to previous setting before // search is reactived, there is no processing overhead - - setSoftkeyBack(); - - if ( !fromBackButton ) { - // Sets the label and toolbar buttons - retrySearch(); - } } -void BtCpUiSearchView::deactivateView() +void BtcpuiSearchView::deactivateView() { - mAbstractDelegate->cancel(); // Stop searching when leaving view - deviceSearchCompleted(KErrNone); // reset view + stopSearching(); } - -void BtCpUiSearchView::searchDelegateCompleted(int error) +void BtcpuiSearchView::deviceSearchCompleted(int error) { Q_UNUSED(error); - -} - -void BtCpUiSearchView::deviceSearchCompleted(int error) -{ - //TODO - handle error. - Q_UNUSED(error); - mLabelSearching->setPlainText(hbTrId("txt_bt_subhead_search_done")); mRetry->setEnabled(true); mStop->setEnabled(false); - - // disconnect signals - disconnect(mAbstractDelegate); - disconnect(mDeviceModel); + handleDelegateCompleted(error, mDelegate); } -void BtCpUiSearchView::deviceSelected(const QModelIndex& modelIndex) +void BtcpuiSearchView::createContextMenuActions(int majorRole) { - QModelIndex index = mBtuiModelSortFilter->mapToSource(modelIndex); - static_cast(mMainView)->goToDeviceView(index); + if (majorRole & BtuiDevProperty::Connected) { + if(majorRole & BtuiDevProperty::AVDev) { + mContextMenu->addAction(hbTrId("txt_bt_menu_disconnect_audio")); + } + else { + mContextMenu->addAction(hbTrId("txt_bt_menu_disconnect")); + } + } + else { + if(majorRole & BtuiDevProperty::AVDev) { + mContextMenu->addAction(hbTrId("txt_bt_menu_connect_audio")); + } + else { + mContextMenu->addAction(hbTrId("txt_bt_menu_connect")); + } + } } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuisearchview.h --- a/bluetoothengine/btui/btcpplugin/btcpuisearchview.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuisearchview.h Fri Sep 03 16:17:59 2010 +0300 @@ -18,11 +18,7 @@ #ifndef BTCPUISEARCHVIEW_H #define BTCPUISEARCHVIEW_H -#include -#include -#include #include "btcpuibaseview.h" -#include "btuimodelsortfilter.h" class HbLabel; class HbPushButton; @@ -30,68 +26,46 @@ class HbDocumentLoader; class HbListView; class BtAbstractDelegate; -class HbSelectionDialog; class HbGroupBox; class HbDataForm; -class BtCpUiSearchView : public BtCpUiBaseView +class BtcpuiSearchView : public BtcpuiBaseView { Q_OBJECT public: - explicit BtCpUiSearchView( - BtSettingModel &settingModel, + explicit BtcpuiSearchView(BtSettingModel &settingModel, BtDeviceModel &deviceModel, QGraphicsItem *parent = 0); - virtual ~BtCpUiSearchView(); - virtual void activateView( const QVariant& value, bool fromBackButton ); + virtual ~BtcpuiSearchView(); + virtual void activateView( const QVariant& value, bool backNavi); virtual void deactivateView(); - virtual void setSoftkeyBack(); - + virtual void createContextMenuActions(int majorRole); public slots: - virtual void switchToPreviousView(); void changeOrientation( Qt::Orientation orientation ); void stopSearching(); void retrySearch(); - void viewByDeviceTypeDialog(); - void viewByDialogClosed(HbAction* action); - void searchDelegateCompleted(int error); + virtual void viewByDialogClosed(HbAction* action); void deviceSearchCompleted(int error); - void deviceSelected(const QModelIndex& modelIndex); - + private: + virtual void take(BtAbstractDelegate *delegate); void startSearchDelegate(); private: - enum devTypeSelectionList { - BtUiDevAudioDevice = 0, - BtUiDevComputer, - BtUiDevInputDevice, - BtUiDevPhone, - BtUiDevOtherDevice - }; -private: HbDocumentLoader *mLoader; HbLabel *mDeviceIcon; HbDataForm *mDataForm; HbLabel *mLabelSearching; HbListView *mDeviceList; - QStringList mDevTypeList; - HbSelectionDialog *mQuery; Qt::Orientation mOrientation; - - HbMainWindow* mMainWindow; - BtCpUiBaseView* mMainView; - HbAction * mSoftKeyBackAction; - HbAction* mViewBy; - HbAction* mStop; - HbAction* mRetry; - //pointer to abstract delegate, and it is instantiated at runtime - BtAbstractDelegate* mAbstractDelegate; - BtuiModelSortFilter* mBtuiModelSortFilter; + HbAction* mViewBy; + HbAction* mStop; + HbAction* mRetry; + }; #endif// BTCPUISEARCHVIEW_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuisettingitem.cpp --- a/bluetoothengine/btui/btcpplugin/btcpuisettingitem.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuisettingitem.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -18,70 +18,64 @@ #include "btcpuisettingitem.h" #include #include - +#include +#include #include #include +#include +#include "btcpuimainview.h" -BtCpUiSettingItem::BtCpUiSettingItem(CpItemDataHelper &itemDataHelper) : - CpSettingFormEntryItemData(itemDataHelper) +BtcpuiSettingItem::BtcpuiSettingItem(CpItemDataHelper &itemDataHelper) : + CpSettingFormEntryItemData(itemDataHelper), mMainView(0) { bool ret(false); loadTranslators(); mSettingModel = new BtSettingModel(this); mDeviceModel = new BtDeviceModel(this); - + mMainWindow = hbInstance->allMainWindows().first(); ret = connect(mSettingModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(handleDataChanged(QModelIndex,QModelIndex))); - BTUI_ASSERT_X( ret, "BtCpUiSettingItem::BtCpUiSettingItem", "can't connect dataChanged" ); + BTUI_ASSERT_X( ret, "BtcpuiSettingItem::BtcpuiSettingItem", "can't connect dataChanged" ); this->setDescription(hbTrId("txt_cp_dblist_bluetooth")); updateStatus(); } -BtCpUiSettingItem::~BtCpUiSettingItem() +BtcpuiSettingItem::~BtcpuiSettingItem() { + delete mMainView; delete mViewTranslator; delete mDialogTranslator; } -void BtCpUiSettingItem::loadTranslators() +void BtcpuiSettingItem::onLaunchView() { - mViewTranslator = new HbTranslator("btviews"); - mDialogTranslator = new HbTranslator("btdialogs"); + // Main view will be launched when the user clicked the Bluetooth setting item in CP. + + // We need to save the pointer of the view from which the main view is launched, + // for navigating back to CP when the main view is closed. + mCpView = mMainWindow->currentView(); + mMainView = new BtcpuiMainView(*mSettingModel, *mDeviceModel); + mMainWindow->addView(mMainView); + connect(mMainView, SIGNAL(aboutToClose()), this, SLOT(handleCloseMainView())); + mMainWindow->setCurrentView(mMainView); } -void BtCpUiSettingItem::onLaunchView() +void BtcpuiSettingItem::handleCloseMainView() { - - mMainWindow = hbInstance->allMainWindows().first(); - - mBtMainView = new BtCpUiMainView(*mSettingModel, *mDeviceModel); - - mCpView = mMainWindow->currentView(); - - mMainWindow->addView(mBtMainView); - mMainWindow->setCurrentView(mBtMainView); - - connect(mBtMainView, SIGNAL(aboutToClose()), this, SLOT(handleCloseView())); - -} - -void BtCpUiSettingItem::handleCloseView() -{ - mBtMainView->deactivateView(); + if (mMainView) { + mMainWindow->removeView(mMainView); + delete mMainView; + mMainView = 0; + } mMainWindow->setCurrentView(mCpView); - - mMainWindow->removeView(mBtMainView); - delete mBtMainView; - mBtMainView = 0; - } /*! Slot for receiving notification of local setting changes from the model. Identify the setting changed and update the corresponding UI item. */ -void BtCpUiSettingItem::handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) +void BtcpuiSettingItem::handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { // update only the part of the view specified by the model's row(s) for (int i=topLeft.row(); i <= bottomRight.row(); i++) { @@ -96,7 +90,12 @@ } } -void BtCpUiSettingItem::updateStatus() +CpBaseSettingView *BtcpuiSettingItem::createSettingView() const +{ + return 0; +} + +void BtcpuiSettingItem::updateStatus() { QString btStatusText; HbIcon btStatusIcon; @@ -121,7 +120,7 @@ btStatusIcon.setIconName("qtg_large_bluetooth"); break; default: - BTUI_ASSERT_X(false, "BtCpUiSettingItem::updateStatus", "invalid visibility mode"); + BTUI_ASSERT_X(false, "BtcpuiSettingItem::updateStatus", "invalid visibility mode"); } } else { @@ -129,12 +128,14 @@ btStatusText = hbTrId("txt_cp_dblist_bluetooth_val_off"); btStatusIcon.setIconName("qtg_large_bluetooth_off"); } - this->setDescription(btStatusText); this->setEntryItemIcon(btStatusIcon); } -CpBaseSettingView *BtCpUiSettingItem::createSettingView() const + +void BtcpuiSettingItem::loadTranslators() { - return 0; + mViewTranslator = new HbTranslator("btviews"); + mDialogTranslator = new HbTranslator("btdialogs"); } + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuisettingitem.h --- a/bluetoothengine/btui/btcpplugin/btcpuisettingitem.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/btcpuisettingitem.h Fri Sep 03 16:17:59 2010 +0300 @@ -19,31 +19,40 @@ #define BTCPUISETTINGITEM_H #include -#include -#include + -#include "btcpuimainview.h" - +class BtSettingModel; +class BtDeviceModel; +class BtcpuiBaseView; class HbTranslator; +class HbMainWindow; +class HbView; -class BtCpUiSettingItem : public CpSettingFormEntryItemData +class BtcpuiSettingItem : public CpSettingFormEntryItemData { Q_OBJECT public: - explicit BtCpUiSettingItem(CpItemDataHelper &itemDataHelper); - virtual ~BtCpUiSettingItem(); + explicit BtcpuiSettingItem(CpItemDataHelper &itemDataHelper); + virtual ~BtcpuiSettingItem(); + private slots: void onLaunchView(); - void handleCloseView(); + void handleCloseMainView(); void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); + +private: + // From CpSettingFormEntryItemData + virtual CpBaseSettingView *createSettingView() const; + private: - virtual CpBaseSettingView *createSettingView() const; + void updateStatus(); void loadTranslators(); + private: HbMainWindow* mMainWindow; - BtCpUiMainView *mBtMainView; + BtcpuiBaseView *mMainView; //Owns this model. BtSettingModel *mSettingModel; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/btcpuiviewmgr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/btcpuiviewmgr.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,45 @@ +/* + * 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: + * + */ + +#ifndef BTCPUIVIEWMGR_H +#define BTCPUIVIEWMGR_H + +#include + +class BtcpuiBaseView; +class BtAbstractDelegate; + +/*! + \class BtcpuiViewMgr + \brief the view management interface of Bluetooth CP plugin + */ +class BtcpuiViewMgr +{ + +public: + + /*! + * Gets the device view instance. + */ + virtual BtcpuiBaseView *deviceView() = 0; + + virtual void switchView(BtcpuiBaseView *from, BtcpuiBaseView *destination, + const QVariant &init, bool backNavi) = 0; + +}; + +#endif // BTCPUIVIEWMGR_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/bt-device-details-view.docml --- a/bluetoothengine/btui/btcpplugin/docml/bt-device-details-view.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/docml/bt-device-details-view.docml Fri Sep 03 16:17:59 2010 +0300 @@ -1,6 +1,6 @@ - + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/bt-device-view.docml --- a/bluetoothengine/btui/btcpplugin/docml/bt-device-view.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/docml/bt-device-view.docml Fri Sep 03 16:17:59 2010 +0300 @@ -5,7 +5,7 @@ - + @@ -44,35 +44,29 @@ - - + - - - + - - - + - - - - + + + - + - + @@ -80,18 +74,18 @@ - - - + + + - - - - - - + + + + + + @@ -100,46 +94,77 @@
+ + + + - - - - - - - - - - - - - + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + - - - + + + - + - + @@ -147,24 +172,93 @@ - - - + + + + + + + + + - + - - - - - - + + + + + + +
- +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/bt-main-view.docml --- a/bluetoothengine/btui/btcpplugin/docml/bt-main-view.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/docml/bt-main-view.docml Fri Sep 03 16:17:59 2010 +0300 @@ -12,28 +12,40 @@
- - + + + + + + + + - - + + + + + - - + + + + + - - + + - - + + @@ -41,13 +53,13 @@ - + - + @@ -56,7 +68,7 @@ - + @@ -66,109 +78,114 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - + + + - - + + - - + + + + + + + + +
- + - + - - - + + + - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + +
- + - + - + - + - - - - - - - - - + + + + + + + + +
@@ -177,6 +194,6 @@ - + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/bt-search-view.docml --- a/bluetoothengine/btui/btcpplugin/docml/bt-search-view.docml Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btcpplugin/docml/bt-search-view.docml Fri Sep 03 16:17:59 2010 +0300 @@ -19,7 +19,7 @@ - + @@ -27,35 +27,34 @@ - + - + - - + - + - - - - - - - - - - + + + + + + + + + + @@ -80,41 +79,48 @@ +
+ + + + + + + + + + + + + + + +
- - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +
- + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/btcpuimaingridviewitem.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/docml/btcpuimaingridviewitem.css Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,50 @@ +BtCpUiMainGridViewItem:portrait + { + layout:portrait; + } + +BtCpUiMainGridViewItem:landscape + { + layout:landscape; + } + +BtCpUiMainGridViewItem::deviceIcon + { + top: -0un; + left: -var(hb-param-margin-gene-left); + fixed-height: 10.0un; + fixed-width: 8.0un; + } + +BtCpUiMainGridViewItem::deviceIcon:landscape + { + top: -0un; + left: -var(hb-param-margin-gene-left); + fixed-height: 10.0un; + fixed-width: 20.0un; + } + +BtCpUiMainGridViewItem::deviceName + { + top: -1un; + text-height: var(hb-param-text-height-primary); + fixed-width: 40.0un; + } + +BtCpUiMainGridViewItem::deviceName:landscape + { + text-height: var(hb-param-text-height-secondary); + fixed-width: 12.0un; + } + +BtCpUiMainGridViewItem::deviceType + { + text-height: var(hb-param-text-height-secondary); + fixed-width: 40.0un; + } + +BtCpUiMainGridViewItem::deviceType:landscape + { + fixed-width: 0un; + } + \ No newline at end of file diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/btcpuimaingridviewitem.widgetml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/docml/btcpuimaingridviewitem.widgetml Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/btcpuisearchlistviewitem.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/docml/btcpuisearchlistviewitem.css Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,20 @@ +BtCpUiSearchListViewItem + { + layout:custom-list; + } + +BtCpUiSearchListViewItem::btDeviceIcon + { + top:-var(hb-param-margin-gene-top); + left: -var(hb-param-margin-gene-left); + fixed-width: var(hb-param-graphic-size-primary-large); + fixed-height: var(hb-param-graphic-size-primary-large); + + } + +BtCpUiSearchListViewItem::btDeviceName + { + top: -2.0un; + text-height: var(hb-param-text-height-primary); + fixed-width: 40.0un; + } \ No newline at end of file diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btcpplugin/docml/btcpuisearchlistviewitem.widgetml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btcpplugin/docml/btcpuisearchlistviewitem.widgetml Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btabstractdelegate.cpp --- a/bluetoothengine/btui/btuidelegate/btabstractdelegate.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btabstractdelegate.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -15,19 +15,20 @@ * */ - #include "btabstractdelegate.h" #include "btqtconstants.h" - #include #include +#include +#include /*! Constructor. */ BtAbstractDelegate::BtAbstractDelegate( BtSettingModel *settingModel, BtDeviceModel *deviceModel, QObject *parent ) - : QObject( parent ), mSettingModel(settingModel),mDeviceModel(deviceModel) + : QObject( parent ), mSettingModel(settingModel), mDeviceModel(deviceModel), + mExecuting(false) { } @@ -38,28 +39,50 @@ { } -BtSettingModel *BtAbstractDelegate::getSettingModel() +bool BtAbstractDelegate::isExecuting() +{ + return mExecuting; +} + +BtSettingModel *BtAbstractDelegate::settingModel() { return mSettingModel; } -BtDeviceModel *BtAbstractDelegate::getDeviceModel() +BtDeviceModel *BtAbstractDelegate::deviceModel() { return mDeviceModel; } void BtAbstractDelegate::cancel() { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit0( DUMMY_DEVLIST ); } bool BtAbstractDelegate::isBtPowerOn() { - QModelIndex powerIndex = getSettingModel()->index(BtSettingModel::PowerStateRow, 0); - PowerStateQtValue powerState = (PowerStateQtValue)getSettingModel()->data(powerIndex, BtSettingModel::SettingValueRole).toInt(); - - return (BtPowerOn == powerState); + TBTPowerStateValue state(EBTPowerOff); + CBTEngSettings *settings(0); + TRAP_IGNORE(settings = CBTEngSettings::NewL()); + if (settings) { + // error on function call is treated as BT OFF + (void) settings->GetPowerState(state); + delete settings; + } + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, state); + return (EBTPowerOn == state); } +void BtAbstractDelegate::completeDelegateExecution(int error) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error); + setExecuting(false); + emit delegateCompleted(error, this); + BOstraceFunctionExit0( DUMMY_DEVLIST ); +} - +void BtAbstractDelegate::setExecuting(bool status) +{ + mExecuting = status; +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btabstractdelegate.h --- a/bluetoothengine/btui/btuidelegate/btabstractdelegate.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +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: -* -*/ - -#ifndef BTABSTRACTDELEGATE_H -#define BTABSTRACTDELEGATE_H - -#include -#include -#include - -class BtSettingModel; -class BtDeviceModel; - -#ifdef BUILD_BTUIDELEGATE -#define BTUIDELEGATE_IMEXPORT Q_DECL_EXPORT -#else -#define BTUIDELEGATE_IMEXPORT Q_DECL_IMPORT -#endif - - -/*! - \class BtAbstractDelegate - \brief the base class for handling user requests from BT application. - - - \\sa btuidelegate - */ -class BTUIDELEGATE_IMEXPORT BtAbstractDelegate : public QObject -{ - Q_OBJECT - -public: - explicit BtAbstractDelegate( BtSettingModel* settingModel, - BtDeviceModel* deviceModel, QObject *parent = 0 ); - - virtual ~BtAbstractDelegate(); - - virtual void exec( const QVariant ¶ms ) = 0; - - virtual void cancel(); - -signals: - void commandCompleted(int status, QVariant params = QVariant() ); - -protected: - - BtSettingModel *getSettingModel(); - BtDeviceModel *getDeviceModel(); - - bool isBtPowerOn(); - -public slots: - -private: - - // pointer to models. do not own. - BtSettingModel *mSettingModel; - BtDeviceModel *mDeviceModel; - - Q_DISABLE_COPY(BtAbstractDelegate) - -}; - -Q_DECLARE_METATYPE(QModelIndex) - -#endif // BTABSTRACTDELEGATE_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateconnect.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegateconnect.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegateconnect.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -36,12 +36,24 @@ BtAbstractDelegate(settingModel, deviceModel, parent), mBtengConnMan(0), mAbstractDelegate(0), mActiveHandling(false) { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } BtDelegateConnect::~BtDelegateConnect() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); delete mBtengConnMan; + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} + +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateConnect::supportedEditorTypes() const +{ + return BtDelegate::ConnectService; } /*! @@ -50,16 +62,20 @@ */ void BtDelegateConnect::exec( const QVariant ¶ms ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if ( mActiveHandling ) { - emit commandCompleted( KErrAlreadyExists ); + emit delegateCompleted( KErrAlreadyExists, this ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); return; } mIndex = params.value(); mActiveHandling = true; // save needed values from model mDeviceName = (mIndex.data(BtDeviceModel::NameAliasRole)).toString(); + BtTraceQString1( TRACE_DEBUG, DUMMY_DEVLIST, "device name=", mDeviceName); QString addrStr = (mIndex.data(BtDeviceModel::ReadableBdaddrRole)).toString(); addrReadbleStringToSymbian( addrStr, mAddr ); + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", mAddr ); mCod = (mIndex.data(BtDeviceModel::CoDRole)).toInt(); mMajorProperty = (mIndex.data(BtDeviceModel::MajorPropertyRole)).toInt(); @@ -69,8 +85,8 @@ if (!mAbstractDelegate) //if there is no other delegate running { mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::ManagePower, - getSettingModel(), getDeviceModel() ); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(powerDelegateCompleted(int)) ); + settingModel(), deviceModel() ); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, SLOT(powerDelegateCompleted(int)) ); mAbstractDelegate->exec(QVariant(BtPowerOn)); } } @@ -78,6 +94,7 @@ // power is already on exec_connect(); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -85,9 +102,9 @@ */ void BtDelegateConnect::powerDelegateCompleted(int status) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, status ); if (mAbstractDelegate) { - disconnect(mAbstractDelegate); delete mAbstractDelegate; mAbstractDelegate = 0; } @@ -99,6 +116,7 @@ // error emitCommandComplete(status); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -106,6 +124,7 @@ */ void BtDelegateConnect::exec_connect() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int error = KErrNone; if ( ! mBtengConnMan ){ @@ -120,6 +139,7 @@ if( error ) { emitCommandComplete(error); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -128,24 +148,31 @@ void BtDelegateConnect::ConnectComplete( TBTDevAddr& aAddr, TInt aErr, RBTDevAddrArray* aConflicts ) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr ); + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", aAddr ); // It is possible that another audio device has just connected to phone when we are // connecting to this audio device. Or a device is connected while this command // is idle. No handling for these cases. if ( mAddr != aAddr || !mActiveHandling ) { + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); return; } + QModelIndex conflictDevIndex; // conflict could occur as well if another audio device is already connected // since currently we don't support multiple audio device connections. if ( aErr && aConflicts && aConflicts->Count() ) { // get the display name of the device that is // causing the conflict - QString conflictDevAddr; - addrSymbianToReadbleString(conflictDevAddr, (*aConflicts)[0] ); - QModelIndex start = getDeviceModel()->index(0,0); - QModelIndexList indexList = getDeviceModel()->match(start, BtDeviceModel::ReadableBdaddrRole, conflictDevAddr); + + addrSymbianToReadbleString(mConflictDevAddr, (*aConflicts)[0] ); + QModelIndex start = deviceModel()->index(0,0); + QModelIndexList indexList = deviceModel()->match(start, BtDeviceModel::ReadableBdaddrRole, + QVariant(mConflictDevAddr)); + // ToDo: change assert to normal error handling; + // is it possible that device is not in model or registry? BTUI_ASSERT_X(indexList.count(), "BtDelegateConnect::ConnectComplete()", "device missing from model!"); - mConflictDevIndex = indexList.at(0); + conflictDevIndex = indexList.at(0); // check if conflict device is being used in a call // Note: actually only checking if *any* audio device is involved in a call, not necessarily the @@ -157,19 +184,20 @@ } else { // no call, check if user wants to disconnect conflict device - QString conflictDevName = (mConflictDevIndex.data(BtDeviceModel::NameAliasRole)).toString(); + QString conflictDevName = (conflictDevIndex.data(BtDeviceModel::NameAliasRole)).toString(); QString questionText(hbTrId("txt_bt_info_to_connect_1_2_needs_to_be_disconnec") .arg(mDeviceName).arg(conflictDevName)); HbMessageBox::question( questionText, this, SLOT(handleUserAnswer(int)), - HbMessageBox::Continue | HbMessageBox::Cancel ); + HbMessageBox::Continue | HbMessageBox::Cancel ); } } else { // command is finished emitCommandComplete(aErr); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -177,27 +205,27 @@ */ void BtDelegateConnect::handleUserAnswer( int answer ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if( answer == HbMessageBox::Continue ) { // Continue, ie. disconnect conflict device and then try reconnecting again if (!mAbstractDelegate) //if there is no other delegate running { QListlist; - QVariant paramFirst; - paramFirst.setValue(mConflictDevIndex); - QVariant paramSecond(ServiceLevel); - list.append(paramFirst); + QVariant paramSecond; + paramSecond.setValue(mConflictDevAddr); + list.append(QVariant(ServiceLevel)); list.append(paramSecond); - QVariant paramsList(list); - mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::Disconnect, - getSettingModel(), getDeviceModel() ); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(disconnectDelegateCompleted(int)) ); - mAbstractDelegate->exec(paramsList); + mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::DisconnectService, + settingModel(), deviceModel() ); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, SLOT(disconnectDelegateCompleted(int)) ); + mAbstractDelegate->exec(QVariant(list)); } } else { // Cancel connect operation emitCommandComplete(KErrCancel); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -205,15 +233,19 @@ */ bool BtDelegateConnect::callOngoing() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); // ToDo: check if there exists Qt PS key for ongoing call int callState; + bool retVal; int err = RProperty::Get(KPSUidCtsyCallInformation, KCTsyCallState, callState); if (!err && (callState == EPSCTsyCallStateNone || callState == EPSCTsyCallStateUninitialized)) { - return false; + retVal = false; } else { - return true; + retVal = true; } + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, retVal ); + return retVal; } /*! @@ -221,9 +253,9 @@ */ void BtDelegateConnect::disconnectDelegateCompleted(int status) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if (mAbstractDelegate) { - disconnect(mAbstractDelegate); delete mAbstractDelegate; mAbstractDelegate = 0; } @@ -235,6 +267,7 @@ // disconnect failed, abort emitCommandComplete( status ); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -242,8 +275,11 @@ */ void BtDelegateConnect::DisconnectComplete( TBTDevAddr& aAddr, TInt aErr ) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr ); + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", aAddr ); Q_UNUSED(aAddr); Q_UNUSED(aErr); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -252,9 +288,11 @@ */ void BtDelegateConnect::cancel() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); if ( mBtengConnMan ) { mBtengConnMan->CancelConnect(mAddr); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -263,26 +301,15 @@ */ void BtDelegateConnect::emitCommandComplete(int error) { - if ( error == KErrNone ) { - // success, show indicator with connection status - - HbIcon icon = getBadgedDeviceTypeIcon( mCod, mMajorProperty, BtuiNoCorners); - QString str(hbTrId("txt_bt_dpopinfo_connected_to_1")); - HbNotificationDialog::launchDialog( icon, hbTrId("txt_bt_dpophead_connected"), - str.arg(mDeviceName) ); - } - else if ( error == KErrCancel ) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error ); + if ( error == KErrCancel ) { // no user note, return success since cancel operation completed successfully error = KErrNone; } - else { - // failure to connect, show user note - QString err(hbTrId("txt_bt_info_unable_to_connect_with_bluetooth")); - HbMessageBox::warning(err.arg(mDeviceName)); - } mActiveHandling = false; - emit commandCompleted(error); + emit delegateCompleted(error, this); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, error ); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateconnect.h --- a/bluetoothengine/btui/btuidelegate/btdelegateconnect.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegateconnect.h Fri Sep 03 16:17:59 2010 +0300 @@ -41,6 +41,9 @@ QObject *parent = 0 ); virtual ~BtDelegateConnect(); + + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); virtual void cancel(); @@ -65,7 +68,7 @@ private: QModelIndex mIndex; - QModelIndex mConflictDevIndex; + QString mConflictDevAddr; CBTEngConnMan *mBtengConnMan; QString mDeviceName; int mMajorProperty; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateconsts.h --- a/bluetoothengine/btui/btuidelegate/btdelegateconsts.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +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: -* -*/ - -#ifndef BTDELEGATECONSTS_H -#define BTDELEGATECONSTS_H - -#include - -namespace BtDelegate - { - enum Command - { - Undefined, - ManagePower, - DeviceName, - Visibility, - Inquiry, - Connect, - Pair, - Disconnect, - Unpair, - RemoteDevName - }; - } - -#endif // BTDELEGATECONSTS_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedevname.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatedevname.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedevname.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -34,6 +34,15 @@ } /*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateDevName::supportedEditorTypes() const +{ + return BtDelegate::ChangeLocalName; +} + +/*! Validate the bluetooth device name given by the user: Extra spaces (' ', '\n', '\t' and '\r') from the beginning, middle and the end of the name are always removed; @@ -70,7 +79,7 @@ btName.Close(); } - emit commandCompleted(error, btDevName); + emit delegateCompleted(error, this); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedevname.h --- a/bluetoothengine/btui/btuidelegate/btdelegatedevname.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedevname.h Fri Sep 03 16:17:59 2010 +0300 @@ -37,6 +37,8 @@ virtual ~BtDelegateDevName(); + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); public slots: diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedevremove.cpp --- /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 +#include +#include +#include +#include "btqtconstants.h" +#include "btuiutil.h" +#include + +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 ); +} + + + + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedevremove.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedevremove.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,77 @@ +/* +* 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: +* +*/ + +#ifndef BTDELEGATEDEVREMOVE_H +#define BTDELEGATEDEVREMOVE_H + +#include +#include +#include "btabstractdelegate.h" + +class BtuiModel; + +/*! + \class BtDelegateDevRemove + \brief This class will remove the specific device from the registry. + */ +class BtDelegateDevRemove : public BtAbstractDelegate, + public MBTEngDevManObserver +{ + Q_OBJECT + +public: + explicit BtDelegateDevRemove( + BtSettingModel* settingModel, + BtDeviceModel* deviceModel, + QObject *parent = 0 ); + + virtual ~BtDelegateDevRemove(); + + int supportedEditorTypes() const; + + virtual void exec( const QVariant ¶ms ); + + virtual void cancel(); + +private: + +public slots: + +protected: + //From MBTEngDevManObserver + virtual void HandleDevManComplete( TInt aErr ); + virtual void HandleGetDevicesComplete( TInt aErr, CBTDeviceArray* aDeviceArray ); + + void emitCommandComplete(int error); + + int removeBlockedDevice(); + bool isBlockedDeviceExists(); + +private: + + CBTEngDevMan *mBtEngDevMan; + + QModelIndexList mBlockedindexList; + + bool mOngoingBlockExec; + + Q_DISABLE_COPY(BtDelegateDevRemove) + +}; + + +#endif /* BTDELEGATEDEVREMOVE_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -21,129 +21,308 @@ #include #include #include +#include "btqtconstants.h" +#include "btuiutil.h" +#include +#include BtDelegateDevSecurity::BtDelegateDevSecurity( BtSettingModel* settingModel, BtDeviceModel* deviceModel, QObject *parent) : - BtAbstractDelegate(settingModel, deviceModel, parent), mBtEngDevMan(0), mBtengConnMan(0), mDisconnectDelegate(0) + BtAbstractDelegate(settingModel, deviceModel, parent), mBtEngDevMan(0), + mDisconnectDelegate(0), mBtEngAddr(0), mRegDevArray(0), mOperation(0), + mDevice(0),mNewDev(0), mActiveHandling(false),mAddingBlockedDev(false) { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + mRegDevArray = new CBTDeviceArray(1); + BTUI_ASSERT_X( mRegDevArray, "BtDelegateDevSecurity::BtDelegateDevSecurity()", + "can't allocate regdevarray"); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } BtDelegateDevSecurity::~BtDelegateDevSecurity() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); delete mBtEngDevMan; - delete mBtengConnMan; delete mDisconnectDelegate; + delete mRegDevArray; + delete mNewDev; + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateDevSecurity::supportedEditorTypes() const +{ + return BtDelegate::UnpairDevice + | BtDelegate::BlockDevice + | BtDelegate::UnblockDevice + | BtDelegate::TrustDevice + | BtDelegate::UntrustDevice; +} + +/*! + * performs operations on remote device: unpair, authorize/unauthorize, block/unblock + * params of type QList: + * 1) remote device address (QString) + * 2) DeviceSecurityService operation + */ void BtDelegateDevSecurity::exec( const QVariant ¶ms ) { - int error = KErrNone; - QModelIndex index = params.value(); - - QString strBtAddr = getDeviceModel()->data(index, - BtDeviceModel::ReadableBdaddrRole).toString(); - - mdeviceName = getDeviceModel()->data(index,BtDeviceModel::NameAliasRole).toString(); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + // check if in use already + if ( mActiveHandling ) { + emit delegateCompleted(KErrInUse, this); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrInUse ); + return; + } + mActiveHandling = true; - TBTDevAddr symaddr; - TBuf buffer(strBtAddr.utf16()); - symaddr.SetReadable( buffer ); + // check parameters + QList paramList = params.value< QList >(); + if (paramList.count() != 2) { + // wrong parameters + emitCommandComplete( KErrArgument ); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrArgument ); + return; + } - // Disconnect if paired device was connected - if ( ! mBtengConnMan ){ - TRAP( error, mBtengConnMan = CBTEngConnMan::NewL(this) ); + int error = 0; + TRAP( error, { + if( !mBtEngDevMan) { + mBtEngDevMan = CBTEngDevMan::NewL( this ); + } + }); + if (error) { + emitCommandComplete( KErrNoMemory ); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrNoMemory ); + return; } - TBTEngConnectionStatus connstatus; - if ( !error && mBtengConnMan->IsConnected(symaddr, connstatus ) == KErrNone) { - if ( connstatus == EBTEngConnected) { - if (! mDisconnectDelegate){ - mDisconnectDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Disconnect, getSettingModel(), getDeviceModel()); - connect( mDisconnectDelegate, SIGNAL(commandCompleted(int)), this, SLOT(disconnectDelegateCompleted(int)) ); - - } - QListlist; - QVariant paramFirst; - paramFirst.setValue(index); - QVariant paramSecond; - DisconnectOption discoOpt = ServiceLevel; - paramSecond.setValue((int)discoOpt); - list.append(paramFirst); - list.append(paramSecond); - QVariant paramsList; - paramsList.setValue(list); - mDisconnectDelegate->exec(paramsList); + + mStrBtAddr = paramList.at(0).value(); // device to operate on + mOperation = paramList.at(1).toInt(); // operation + + addrReadbleStringToSymbian( mStrBtAddr, mBtEngAddr ); + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", mBtEngAddr ); + + + // get device from registry since it is needed for all operations + mSearchPattern.FindAddress( mBtEngAddr ); + mRegDevArray->ResetAndDestroy(); + mBtEngDevMan->GetDevices(mSearchPattern, mRegDevArray); // callback is HandleGetDevicesComplete() + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} + + +void BtDelegateDevSecurity::unpair() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + int error = KErrNone; + + // unpair first since malicious device might try to connect/pair again + // immediately after disconnecting + mDevice->SetPaired(EFalse); + mDevice->DeleteLinkKey(); + + // untrust the device also + TBTDeviceSecurity security = mDevice->GlobalSecurity(); + security.SetNoAuthorise( EFalse ); + mDevice->SetGlobalSecurity( security ); + + error = mBtEngDevMan->ModifyDevice( *mDevice ); // see callback for possible disconnect + + if ( error ) { + emitCommandComplete(error); + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} + +void BtDelegateDevSecurity::authorizeOrBlock() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceExt1( TRACE_NORMAL, DUMMY_DEVLIST, "operation (Unpair|Block|Unblock|Authorize|Unauthorize)=%d", + mOperation); + int error = KErrNone; + + TBTDeviceSecurity security = mDevice->GlobalSecurity(); + switch ( mOperation ) { + case BtAuthorize: + security.SetNoAuthorise( ETrue ); // set trust status to true + security.SetBanned( EFalse ); + break; + case BtUnauthorize: + security.SetNoAuthorise( EFalse ); + break; + case BtUnblock: + security.SetBanned( EFalse ); + break; + case BtBlock: + security.SetBanned( ETrue ); + security.SetNoAuthorise( EFalse ); // set trust status to false + break; + } + + mDevice->SetGlobalSecurity( security ); + if ( (mOperation == BtBlock) || (mOperation == BtUnblock) ) { + // deleting link key for executing unblock is safe as no + // link key shall exist if the device has been blocked. + mDevice->DeleteLinkKey(); + if ( mOperation == BtBlock ) { + mDevice->SetPaired(EFalse); } } - - // Set device as unpaired - CBTDevice *symBtDevice = 0; - TRAP( error, { - symBtDevice = CBTDevice::NewL( symaddr ); - if( !mBtEngDevMan) { - mBtEngDevMan = CBTEngDevMan::NewL( this ); - } - }); - - if ( !error ) { - symBtDevice->SetPaired(EFalse); - // deleting link key for executing unpair is safe as no - // link key shall exist if the device has been unpaired. - symBtDevice->DeleteLinkKey(); - error = mBtEngDevMan->ModifyDevice( *symBtDevice ); - } - delete symBtDevice; + error = mBtEngDevMan->ModifyDevice( *mDevice ); if ( error ) { emitCommandComplete(error); } + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, error ); } void BtDelegateDevSecurity::cancel() { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if ( mActiveHandling ) { + mAddingBlockedDev = false; + emitCommandComplete(KErrNone); + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } void BtDelegateDevSecurity::disconnectDelegateCompleted( int err ) { - Q_UNUSED(err); + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); + if (mDisconnectDelegate) { + delete mDisconnectDelegate; + mDisconnectDelegate = 0; + } + emitCommandComplete(err); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} + +void BtDelegateDevSecurity::HandleDevManComplete( TInt err ) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); + + if ( !mActiveHandling ) { + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); + return; + } + if ( !err ) { + if ( mAddingBlockedDev ) { + // blocked a device which was not in the registry originally + mAddingBlockedDev = false; + delete mNewDev; + mNewDev = 0; + } + else if ( mOperation == BtBlock || mOperation == BtUnpair) { + // disconnect after blocking/unpairing if device is connected; + // disconnect done after block/unpair, instead of before, to prevent a malicious device + // from reconnecting/"re-pairing" + CBTEngConnMan *connMan(0); + TRAP( err, connMan = CBTEngConnMan::NewL() ); + TBTEngConnectionStatus connstatus(EBTEngNotConnected); + if (!err) { + err = connMan->IsConnected(mBtEngAddr, connstatus ); + delete connMan; + } + if ( !err && connstatus == EBTEngConnected ) { + if (! mDisconnectDelegate){ + mDisconnectDelegate = BtDelegateFactory::newDelegate( + BtDelegate::DisconnectService, settingModel(), deviceModel()); + connect( mDisconnectDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, + SLOT(disconnectDelegateCompleted(int)) ); + } + QListlist; + list.append(QVariant(ServiceLevel)); + list.append(QVariant(mStrBtAddr)); + mDisconnectDelegate->exec(QVariant(list)); // see callback for continuation + return; + } + } + } + emitCommandComplete(err); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDevSecurity::HandleDevManComplete( TInt aErr ) +void BtDelegateDevSecurity::HandleGetDevicesComplete( TInt err, CBTDeviceArray* aDeviceArray ) { - emitCommandComplete(aErr); -} - -void BtDelegateDevSecurity::HandleGetDevicesComplete( TInt aErr, CBTDeviceArray* aDeviceArray ) -{ - Q_UNUSED(aErr); - Q_UNUSED(aDeviceArray); + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); + + if ( mActiveHandling ) { + if ( !err && aDeviceArray->Count() ) { + mDevice = aDeviceArray->At( 0 ); + switch ( mOperation ) { + case BtUnpair: + unpair(); + break; + case BtAuthorize: + case BtUnauthorize: + case BtUnblock: + case BtBlock: + authorizeOrBlock(); + break; + default: + // wrong parameter + emitCommandComplete( KErrArgument ); + } + } + else if ( err == KErrNotFound && mOperation == BtBlock) { // device not in registry, need to add it + mAddingBlockedDev = true; + TRAP( err, { + mNewDev = CBTDevice::NewL( mBtEngAddr ); + }); + if ( !err ) { + // get needed info about device from model, e.g. name, cod + QString btStringAddr; + addrSymbianToReadbleString(btStringAddr, mBtEngAddr); + QModelIndex start = deviceModel()->index(0,0); + QModelIndexList indexList = deviceModel()->match(start, + BtDeviceModel::ReadableBdaddrRole, btStringAddr); + // ToDo: can we be sure that device will always be found in the model? + QModelIndex index = indexList.at(0); + QString devName = deviceModel()->data(index,BtDeviceModel::NameAliasRole).toString(); + BtTraceQString1( TRACE_DEBUG, DUMMY_DEVLIST, "device name=", devName); + TBuf buf( devName.utf16() ); + TRAP( err, mNewDev->SetDeviceNameL( BTDeviceNameConverter::ToUTF8L( buf ) )); + if( !err ) { + int cod = (index.data(BtDeviceModel::CoDRole)).toInt(); + mNewDev->SetDeviceClass(cod); + TBTDeviceSecurity security = mNewDev->GlobalSecurity(); + security.SetBanned( ETrue ); + security.SetNoAuthorise( EFalse ); // set trust status to false + mNewDev->SetGlobalSecurity( security ); + mNewDev->DeleteLinkKey(); + mNewDev->SetPaired(EFalse); + err = mBtEngDevMan->AddDevice( *mNewDev ); // see callback HandleDevManComplete() + } + } + } + if (err) { + mAddingBlockedDev = false; + emitCommandComplete( err ); + } + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } void BtDelegateDevSecurity::emitCommandComplete(int error) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, error ); // no dialogs here since stack provides "unpaired to %1" dialog // and failures are not reported - - emit commandCompleted(error); -} - -void BtDelegateDevSecurity::ConnectComplete( TBTDevAddr& aAddr, TInt aErr, - RBTDevAddrArray* aConflicts ) -{ - Q_UNUSED(aAddr); - Q_UNUSED(aErr); - Q_UNUSED(aConflicts); -} - -void BtDelegateDevSecurity::DisconnectComplete( TBTDevAddr& aAddr, TInt aErr ) -{ - Q_UNUSED(aAddr); - Q_UNUSED(aErr); + mActiveHandling = false; + mAddingBlockedDev = false; + if ( mNewDev ) { + delete mNewDev; + mNewDev = 0; + } + emit delegateCompleted(error, this); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.h --- a/bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedevsecurity.h Fri Sep 03 16:17:59 2010 +0300 @@ -19,7 +19,6 @@ #define BTDELEGATEDEVSECURITY_H #include -#include #include #include "btabstractdelegate.h" @@ -30,7 +29,7 @@ \brief the base class for Unpairing Bluetooth Connection. */ class BtDelegateDevSecurity : public BtAbstractDelegate, - public MBTEngDevManObserver, public MBTEngConnObserver + public MBTEngDevManObserver { Q_OBJECT @@ -42,6 +41,8 @@ virtual ~BtDelegateDevSecurity(); + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); virtual void cancel(); @@ -53,20 +54,27 @@ //From MBTEngDevManObserver virtual void HandleDevManComplete( TInt aErr ); virtual void HandleGetDevicesComplete( TInt aErr, CBTDeviceArray* aDeviceArray ); - //From MBTEngConnObserver - virtual void ConnectComplete( TBTDevAddr& aAddr, TInt aErr, - RBTDevAddrArray* aConflicts ); - virtual void DisconnectComplete( TBTDevAddr& aAddr, TInt aErr ); void emitCommandComplete(int error); + +private: + void unpair(); + void authorizeOrBlock(); private: CBTEngDevMan *mBtEngDevMan; - QString mdeviceName; - CBTEngConnMan *mBtengConnMan; BtAbstractDelegate* mDisconnectDelegate; - + TBTDevAddr mBtEngAddr; // Symbian BT address for target device + QString mStrBtAddr; // QT BT address for target device + TBTRegistrySearch mSearchPattern; + CBTDeviceArray *mRegDevArray; + int mOperation; + CBTDevice *mDevice; + CBTDevice *mNewDev; + int mActiveHandling; + QModelIndex mIndex; + bool mAddingBlockedDev; Q_DISABLE_COPY(BtDelegateDevSecurity) }; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedisconnect.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatedisconnect.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedisconnect.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -22,134 +22,175 @@ #include #include #include +#include BtDelegateDisconnect::BtDelegateDisconnect( BtSettingModel* settingModel, BtDeviceModel* deviceModel, QObject *parent) : BtAbstractDelegate(settingModel, deviceModel, parent), mBtengConnMan(0), mPhyLinks(0), - mMajorRole(0), mActiveHandling(false), mAddrArrayIndex(0), mDisconOpt(DisconUnknown) + mActiveHandling(false), mAddrArrayIndex(0), mDisconOpt(DisconUnknown) { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } BtDelegateDisconnect::~BtDelegateDisconnect() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); delete mBtengConnMan; delete mPhyLinks; mSocketServ.Close(); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} + + +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateDisconnect::supportedEditorTypes() const +{ + return BtDelegate::DisconnectService + | BtDelegate::DisconnectAllConnections; } +/*! + * disconnects remote device(s) from local device + * params of type QList: + * 1) DisconnectOption (either ServiceLevel, PhysicalLink or AllOngoingConnections) + * 2) remote device address (QString, not needed for AllOngoingConnections) + */ void BtDelegateDisconnect::exec( const QVariant ¶ms ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int err; + + // check if in use already + if ( mActiveHandling ) { + emit delegateCompleted(KErrInUse, this); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrInUse); + return; + } + + // check parameters + QList paramList = params.value< QList >(); + if (!((paramList.count() == 1) || (paramList.count() == 2))) { + // wrong parameter count + emit delegateCompleted( KErrArgument, this ); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrArgument ); + return; + } + + // create btengconnman if ( ! mBtengConnMan ){ TRAP( err, mBtengConnMan = CBTEngConnMan::NewL(this) ); } - if(err) { - emit commandCompleted(err); + if( err ) { + emit delegateCompleted(err, this); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, err ); return; } - if (params.canConvert()){ - mDisconOpt = (DisconnectOption)params.toInt(); - mActiveHandling = true; - - if (mDisconOpt == AllOngoingConnections){ - err = mBtengConnMan->GetConnectedAddresses(mDevAddrArray); - disconnectAllConnections_service(); + + mDisconOpt = (DisconnectOption)paramList.at(0).toInt(); // DisconnectOption + + if ( (mDisconOpt == ServiceLevel) || (mDisconOpt == PhysicalLink) ) { + // check 2nd parameter is ok + if ((paramList.count() != 2) || !paramList.at(1).canConvert()) { + emit delegateCompleted( KErrArgument, this ); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrArgument ); + return; } - if(err) { - emit commandCompleted(err); - } - } - else{ - QList paramList = params.value< QList >(); - QVariant indexVariant = paramList.at(0); - QModelIndex index = indexVariant.value(); - QVariant optionVariant = paramList.at(1); - mDisconOpt = (DisconnectOption)optionVariant.toInt(); - int error = KErrNone; + QString strBtAddr = paramList.at(1).toString(); // remote device to operate on + BtTraceQString1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", strBtAddr); + addrReadbleStringToSymbian( strBtAddr, mBtEngAddr ); mActiveHandling = true; - mDeviceName = getDeviceModel()->data(index,BtDeviceModel::NameAliasRole).toString(); - mMajorRole = (index.data(BtDeviceModel::MajorPropertyRole)).toInt(); - - QString strBtAddr = getDeviceModel()->data(index,BtDeviceModel::ReadableBdaddrRole).toString(); - - // todo: address converting should be simplified. check other delegates for example. - - TPtrC ptrName(reinterpret_cast(strBtAddr.constData())); - - RBuf16 btName; - error = btName.Create(ptrName.Length()); + + if (mDisconOpt == ServiceLevel){ + disconnectServiceLevel(); + } + else if (mDisconOpt == PhysicalLink){ + disconnectPhysicalLink(); + } + } + else if ( mDisconOpt == AllOngoingConnections ) { + err = mBtengConnMan->GetConnectedAddresses(mDevAddrArray); + //Added this condition because GetConnectedAddresses returns 0 even if no addresses + //are returned. + if(err || !(mDevAddrArray.Count())) { + emit delegateCompleted(err, this); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, err ); + return; + } - if(error == KErrNone) { - btName.Copy(ptrName); - mBtEngAddr.SetReadable(btName); - if (mDisconOpt == ServiceLevel){ - disconnectSeviceLevel(); - } - else if (mDisconOpt == PhysicalLink){ - disconnectPhysicalLink(); - } - } - btName.Close(); + mActiveHandling = true; - if(error) { - emit commandCompleted(error); - } - } + disconnectAllConnections_service(); + } + else { + BTUI_ASSERT_X( 0, "BtDelegateDisconnect::exec()", "incorrect parameter" ); + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::disconnectAllConnections_service(){ +void BtDelegateDisconnect::disconnectAllConnections_service() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + QString btStringAddr; + addrSymbianToReadbleString( btStringAddr, mDevAddrArray[mAddrArrayIndex] ); + QModelIndex start = deviceModel()->index(0,0); + QModelIndexList indexList = deviceModel()->match(start,BtDeviceModel::ReadableBdaddrRole, btStringAddr); + // ToDo: what happens if device not found from the model? error handling needed! + QModelIndex index = indexList.at(0); - TBuf addrBuf; - mDevAddrArray[mAddrArrayIndex].GetReadable(addrBuf); - QString btStringAddr= QString::fromUtf16( addrBuf.Ptr(), addrBuf.Length()); - QModelIndex start = getDeviceModel()->index(0,0); - QModelIndexList indexList = getDeviceModel()->match(start,BtDeviceModel::ReadableBdaddrRole, btStringAddr); - QModelIndex index = indexList.at(0); - - mDeviceName = getDeviceModel()->data(index,BtDeviceModel::NameAliasRole).toString(); - mBtEngAddr = mDevAddrArray[mAddrArrayIndex]; - mMajorRole = (index.data(BtDeviceModel::MajorPropertyRole)).toInt(); - - disconnectSeviceLevel(); + mBtEngAddr = mDevAddrArray[mAddrArrayIndex]; + + disconnectServiceLevel(); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::disconnectAllConnections_physical(){ +void BtDelegateDisconnect::disconnectAllConnections_physical() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + QString btStringAddr; + addrSymbianToReadbleString( btStringAddr, mDevAddrArray[mAddrArrayIndex] ); + QModelIndex start = deviceModel()->index(0,0); + QModelIndexList indexList = deviceModel()->match(start,BtDeviceModel::ReadableBdaddrRole, btStringAddr); + // ToDo: what happens if device not found from the model? error handling needed! + QModelIndex index = indexList.at(0); - TBuf addrBuf; - mDevAddrArray[mAddrArrayIndex].GetReadable(addrBuf); - QString btStringAddr= QString::fromUtf16( addrBuf.Ptr(), addrBuf.Length()); - QModelIndex start = getDeviceModel()->index(0,0); - QModelIndexList indexList = getDeviceModel()->match(start,BtDeviceModel::ReadableBdaddrRole, btStringAddr); - QModelIndex index = indexList.at(0); - - mDeviceName = getDeviceModel()->data(index,BtDeviceModel::NameAliasRole).toString(); - mBtEngAddr = mDevAddrArray[mAddrArrayIndex]; - - disconnectPhysicalLink(); - + mBtEngAddr = mDevAddrArray[mAddrArrayIndex]; + + disconnectPhysicalLink(); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::disconnectSeviceLevel(){ + +void BtDelegateDisconnect::disconnectServiceLevel() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int err; TBTEngConnectionStatus connStatus = EBTEngNotConnected; + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "calling btengconnman->isConnected() with device addr=", mBtEngAddr ); err = mBtengConnMan->IsConnected(mBtEngAddr, connStatus); - if (connStatus == EBTEngConnected){ - err = mBtengConnMan->Disconnect(mBtEngAddr, EBTDiscGraceful); + BOstraceExt2( TRACE_DEBUG, DUMMY_DEVLIST, "isConnected() ret = %d, conn status (0/2) = %d", err, connStatus); + + //if ( !err && (connStatus == EBTEngConnected) ) { + // asynchronous call, see callback DisconnectComplete() + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "btengconnman->Disconnect() with param device addr=", mBtEngAddr ); + err = mBtengConnMan->Disconnect(mBtEngAddr, EBTDiscGraceful); + BOstraceExt1( TRACE_DEBUG, DUMMY_DEVLIST, "Disconnect() ret = %d", err); + //} + if (err) { + // handle error + disconnectServiceLevelCompleted(err); } - if(err) { - if (mDisconOpt == AllOngoingConnections){ - disconnectServiceLevelCompleted(err); - } - else{ - emit commandCompleted(err); - } - } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::disconnectPhysicalLink(){ +void BtDelegateDisconnect::disconnectPhysicalLink() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int err; if ( !mSocketServ.Handle() ) { err = mSocketServ.Connect(); @@ -157,126 +198,138 @@ if ( !err && !mPhyLinks ) { TRAP( err, mPhyLinks = CBluetoothPhysicalLinks::NewL( *this, mSocketServ ) ); - Q_CHECK_PTR( mPhyLinks ); - } - err = mPhyLinks->Disconnect( mBtEngAddr ); - if(err) { - if (mDisconOpt == AllOngoingConnections){ - disconnectPhysicalLinkCompleted(err); - } - else{ - emit commandCompleted(err); + if (err) { + disconnectPhysicalLinkCompleted(err); // handle error } } - + // ToDo: consider using DisconnectAll() + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "phy->Disconnect() with param device addr=", mBtEngAddr ); + err = mPhyLinks->Disconnect( mBtEngAddr ); // async call, see callback HandleDisconnectCompleteL() + BOstraceExt1( TRACE_DEBUG, DUMMY_DEVLIST, "Phy Disconnect() ret = %d", err); + if (err) { + disconnectPhysicalLinkCompleted(err); // handle error + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::disconnectServiceLevelCompleted(int err){ +void BtDelegateDisconnect::disconnectServiceLevelCompleted(int err) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); if (mDisconOpt == ServiceLevel){ mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(err, this); } else if (mDisconOpt == AllOngoingConnections){ if (err){ mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(err, this); } else{ mAddrArrayIndex++; - if ( mAddrArrayIndex < mDevAddrArray.Count()){ - disconnectAllConnections_service(); + if ( mAddrArrayIndex < mDevAddrArray.Count()) { + disconnectAllConnections_service(); // recursive call } - else{ + else { mDevAddrArray.Reset(); + mAddrArrayIndex = 0; err = mBtengConnMan->GetConnectedAddresses(mDevAddrArray); if(err) { - emit commandCompleted(err); + mActiveHandling = false; + emit delegateCompleted(err, this); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, err ); return; } - mAddrArrayIndex = 0; - //connect( mDisconnectDelegate, SIGNAL(commandCompleted(int)), this, SLOT(disconnectPhysicalLinkCompleted(int)) ); disconnectAllConnections_physical(); } } } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::disconnectPhysicalLinkCompleted(int err){ +void BtDelegateDisconnect::disconnectPhysicalLinkCompleted(int err) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); if (mDisconOpt == PhysicalLink){ - //emitCommandComplete(err); mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(err, this); } - else if (mDisconOpt == AllOngoingConnections){ - if (err){ + else if (mDisconOpt == AllOngoingConnections) { + if (err) { mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(err, this); } else{ mAddrArrayIndex++; - if ( mAddrArrayIndex < mDevAddrArray.Count()){ - disconnectAllConnections_physical(); + if ( mAddrArrayIndex < mDevAddrArray.Count()) { + disconnectAllConnections_physical(); // recursive call } - else{ - //TODO: check if there is still ongoing connection from BTEngVonnMan. and close them again if there is any new + else { // DONE! + //TODO: check if there is still ongoing connection from BTEngConnMan. and close them again if there is any new mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(KErrNone, this); } } - } - + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } + void BtDelegateDisconnect::ConnectComplete( TBTDevAddr& aAddr, TInt aErr, RBTDevAddrArray* aConflicts ) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr ); + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", aAddr ); Q_UNUSED(aAddr); Q_UNUSED(aConflicts); Q_UNUSED(aErr); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } void BtDelegateDisconnect::DisconnectComplete( TBTDevAddr& aAddr, TInt aErr ) { - if ( mBtEngAddr != aAddr || !mActiveHandling ) { + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr ); + BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", aAddr ); + if ( mBtEngAddr != aAddr || !mActiveHandling ) { + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); return; } - DisplayCommandCompleteNotif(aErr); - disconnectServiceLevelCompleted(aErr); + disconnectServiceLevelCompleted(aErr); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } void BtDelegateDisconnect::cancel() { - + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::HandleCreateConnectionCompleteL( TInt err ){ +void BtDelegateDisconnect::HandleCreateConnectionCompleteL( TInt err ) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); Q_UNUSED( err ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::HandleDisconnectCompleteL( TInt err ){ - if ( !mActiveHandling ) { +// callback for CBluetoothPhysicalLinks::Disconnect() +void BtDelegateDisconnect::HandleDisconnectCompleteL( TInt err ) +{ + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); + if ( !mActiveHandling ) { + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); return; } disconnectPhysicalLinkCompleted(err); - -} - -void BtDelegateDisconnect::HandleDisconnectAllCompleteL( TInt err ){ - Q_UNUSED( err ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegateDisconnect::DisplayCommandCompleteNotif(int error) +// callback for CBluetoothPhysicalLinks::DisconnectAll() +void BtDelegateDisconnect::HandleDisconnectAllCompleteL( TInt err ) { - - if(error == KErrNone) { - // success, show indicator with connection status - HbIcon icon = getBadgedDeviceTypeIcon( mCod, mMajorRole, 0 ); // no badging required, only icon - QString str( hbTrId("txt_bt_dpopinfo_disconnected_from_1") ); - HbNotificationDialog::launchDialog( icon, hbTrId("txt_bt_dpophead_disconnected"), - str.arg(mDeviceName) ); - } - + BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err ); + Q_UNUSED( err ); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } + + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatedisconnect.h --- a/bluetoothengine/btui/btuidelegate/btdelegatedisconnect.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatedisconnect.h Fri Sep 03 16:17:59 2010 +0300 @@ -41,11 +41,11 @@ virtual ~BtDelegateDisconnect(); + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); virtual void cancel(); - - protected: //From MBTEngConnObserver @@ -68,7 +68,7 @@ void disconnectAllConnections_physical(); - void disconnectSeviceLevel(); + void disconnectServiceLevel(); void disconnectPhysicalLink(); @@ -79,22 +79,15 @@ private: - CBTEngConnMan *mBtengConnMan; - CBluetoothPhysicalLinks *mPhyLinks; - int mMajorRole; bool mActiveHandling; - int mAddrArrayIndex; DisconnectOption mDisconOpt; RBTDevAddrArray mDevAddrArray; TBTDevAddr mBtEngAddr; - - QString mDeviceName; - int mCod; RSocketServ mSocketServ; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatefactory.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatefactory.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatefactory.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -28,35 +28,45 @@ #include "btdelegatepair.h" #include "btdelegatedisconnect.h" #include "btdelegatedevsecurity.h" +#include "btdelegatedevremove.h" /*! Constructor. */ -BtAbstractDelegate * BtDelegateFactory::newDelegate( - BtDelegate::Command cmd, +BtAbstractDelegate *BtDelegateFactory::newDelegate( + BtDelegate::EditorType editor, BtSettingModel* settingModel, BtDeviceModel* deviceModel, QObject *parent ) { - switch ( cmd ) { + switch ( editor ) { case BtDelegate::ManagePower: return new BtDelegatePower( settingModel, deviceModel, parent ); - case BtDelegate::DeviceName: + case BtDelegate::ChangeLocalName: return new BtDelegateDevName( parent ); - case BtDelegate::Visibility: + case BtDelegate::ChangeVisibility: return new BtDelegateVisibility( parent ); case BtDelegate::Inquiry: return new BtDelegateInquiry( settingModel, deviceModel, parent ); - case BtDelegate::Connect: + case BtDelegate::ConnectService: return new BtDelegateConnect( settingModel, deviceModel, parent ); - case BtDelegate::Pair: + case BtDelegate::DisconnectService: + case BtDelegate::DisconnectAllConnections: + return new BtDelegateDisconnect( settingModel, deviceModel, parent ); + case BtDelegate::PairDevice: return new BtDelegatePair( settingModel, deviceModel, parent ); - case BtDelegate::Disconnect: - return new BtDelegateDisconnect( settingModel, deviceModel, parent ); - case BtDelegate::Unpair: + case BtDelegate::UnpairDevice: + case BtDelegate::BlockDevice: + case BtDelegate::UnblockDevice: + case BtDelegate::TrustDevice: + case BtDelegate::UntrustDevice: return new BtDelegateDevSecurity( settingModel, deviceModel, parent ); - case BtDelegate::RemoteDevName: + case BtDelegate::ChangeDeviceFriendlyName: return new BtDelegateRemoteDevName( settingModel, deviceModel, parent ); + case BtDelegate::RemoveAllRegistryDevices: + case BtDelegate::RemovePairedDevices: + case BtDelegate::RemoveBlockedDevices: + return new BtDelegateDevRemove( settingModel, deviceModel, parent ); } return 0; } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatefactory.h --- a/bluetoothengine/btui/btuidelegate/btdelegatefactory.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +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: -* -*/ - -#ifndef BTDELEGATEFACTORY_H -#define BTDELEGATEFACTORY_H - -#include -#include "btdelegateconsts.h" - -class BtAbstractDelegate; -class BtSettingModel; -class BtDeviceModel; - -#ifdef BUILD_BTUIDELEGATE -#define BTUIDELEGATE_IMEXPORT Q_DECL_EXPORT -#else -#define BTUIDELEGATE_IMEXPORT Q_DECL_IMPORT -#endif - -/*! - \class BtDelegateFactory - \brief the base class for creating concrete delegate instances - - \\sa btuidelegate - */ -class BTUIDELEGATE_IMEXPORT BtDelegateFactory -{ - -public: - static BtAbstractDelegate *newDelegate( - BtDelegate::Command cmd, - BtSettingModel* settingModel, - BtDeviceModel* deviceModel, - QObject *parent = 0 ); - -}; - -#endif // BTDELEGATEFACTORY_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateinquiry.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegateinquiry.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegateinquiry.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -14,73 +14,114 @@ * Description: * */ - - #include "btdelegateinquiry.h" -#include "btdelegatefactory.h" +#include "btdelegatepower.h" #include "btqtconstants.h" - #include #include #include - BtDelegateInquiry::BtDelegateInquiry( BtSettingModel* settingModel, BtDeviceModel* deviceModel, QObject* parent ) :BtAbstractDelegate( settingModel, deviceModel, parent ) { - mAbstractDelegate = NULL; + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BOstraceFunctionExit0( DUMMY_DEVLIST ); } BtDelegateInquiry::~BtDelegateInquiry() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (isExecuting()) { + deviceModel()->cancelSearchDevice(); + } + BOstraceFunctionExit0( DUMMY_DEVLIST ); +} +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateInquiry::supportedEditorTypes() const +{ + return BtDelegate::Inquiry; } void BtDelegateInquiry::exec( const QVariant& params ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED(params); + BTUI_ASSERT_X(!isExecuting(), "BtDelegateInquiry::exec", "operation ongoing!"); + bool ok(false); - if(isBtPowerOn()) { - exec_inquiry(); - } - else { - //If Bt Power is off, switch it on and then perform pairing. - //todo: Do we ask for user confirmation here..? - if (!mAbstractDelegate) { - mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::ManagePower, - getSettingModel(), getDeviceModel() ); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(powerDelegateCompleted(int)) ); - mAbstractDelegate->exec(QVariant(BtPowerOn)); + setExecuting(true); + // Inquiry needs BT to be on. + if(!isBtPowerOn()) { + mPowerDelegate = new BtDelegatePower(settingModel(), deviceModel(), this); + ok = connect( + mPowerDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(handleManagePowerCompleted(int))); + if (ok ) { + mPowerDelegate->exec(QVariant(BtPowerOn)); } + } else { + // No power management is required. Start inquiry immediately + ok = startInquiry(); } -} - -void BtDelegateInquiry::powerDelegateCompleted(int error) -{ - if (mAbstractDelegate) { - disconnect(mAbstractDelegate); - delete mAbstractDelegate; - mAbstractDelegate = 0; + if (!ok) { + completeDelegateExecution(KErrGeneral); } - if ( error == KErrNone ) { - exec_inquiry(); - } - else { - // error - emit commandCompleted(error); - } -} - -void BtDelegateInquiry::exec_inquiry() -{ - bool err = getDeviceModel()->searchDevice(); - - emit commandCompleted(err); // in case of error, passing original error back + BOstraceFunctionExit0( DUMMY_DEVLIST ); } void BtDelegateInquiry::cancel() { - getDeviceModel()->cancelSearchDevice(); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (isExecuting()) { + deviceModel()->cancelSearchDevice(); + setExecuting(false); + } + BOstraceFunctionExit0( DUMMY_DEVLIST ); +} + +void BtDelegateInquiry::handleManagePowerCompleted(int error) +{ + if (isExecuting()) { + delete mPowerDelegate; + bool ok = (error == KErrNone); + if (ok) { + ok = startInquiry(); + } + if (!ok) { + completeDelegateExecution(KErrGeneral); + } + } + BOstraceFunctionExit0( DUMMY_DEVLIST ); } + +void BtDelegateInquiry::handleSearchCompleted(int error) +{ + completeDelegateExecution(error? KErrGeneral : KErrNone); + BOstraceFunctionExit0( DUMMY_DEVLIST ); +} + +bool BtDelegateInquiry::startInquiry() +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + // Make sure this connects the signal only once: + disconnect(deviceModel(), 0, this, 0); + bool ok = connect(deviceModel(), SIGNAL(deviceSearchCompleted(int)), + this, SLOT(handleSearchCompleted(int))); + if (ok ) { + ok = deviceModel()->searchDevice(); + } + if (ok) { + // Inform the client that inquiry really starts now. With + // this signal, the client can thus prepare for showing inquiry results: + emit beginUiEditMode(); + } + BOstraceFunctionExit0( DUMMY_DEVLIST ); + return ok; +} + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateinquiry.h --- a/bluetoothengine/btui/btuidelegate/btdelegateinquiry.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegateinquiry.h Fri Sep 03 16:17:59 2010 +0300 @@ -38,19 +38,21 @@ virtual ~BtDelegateInquiry(); + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); virtual void cancel(); public slots: - void powerDelegateCompleted(int error); + void handleManagePowerCompleted(int error); + void handleSearchCompleted(int error); private: - void exec_inquiry(); + bool startInquiry(); private: - BtAbstractDelegate* mAbstractDelegate; - + BtAbstractDelegate *mPowerDelegate; }; #endif /* BTDELEGATEINQUIRY_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatepair.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatepair.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatepair.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -47,6 +47,15 @@ delete mLoader; } +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegatePair::supportedEditorTypes() const +{ + return BtDelegate::PairDevice; +} + void BtDelegatePair::exec( const QVariant ¶ms ) { @@ -60,8 +69,8 @@ //todo: Do we ask for user confirmation here..? if (!mAbstractDelegate) { mAbstractDelegate = BtDelegateFactory::newDelegate(BtDelegate::ManagePower, - getSettingModel(), getDeviceModel() ); - connect( mAbstractDelegate, SIGNAL(commandCompleted(int)), this, SLOT(powerDelegateCompleted(int)) ); + settingModel(), deviceModel() ); + connect( mAbstractDelegate, SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), this, SLOT(powerDelegateCompleted(int)) ); mAbstractDelegate->exec(QVariant(BtPowerOn)); } } @@ -71,7 +80,6 @@ void BtDelegatePair::powerDelegateCompleted(int error) { if (mAbstractDelegate) { - disconnect(mAbstractDelegate); delete mAbstractDelegate; mAbstractDelegate = 0; } @@ -87,10 +95,10 @@ void BtDelegatePair::exec_pair() { int error = KErrNone; - mdeviceName = getDeviceModel()->data(deviceIndex,BtDeviceModel::NameAliasRole).toString(); + mdeviceName = deviceModel()->data(deviceIndex,BtDeviceModel::NameAliasRole).toString(); - QString strBtAddr = getDeviceModel()->data(deviceIndex,BtDeviceModel::ReadableBdaddrRole).toString(); - int cod = getDeviceModel()->data(deviceIndex,BtDeviceModel::CoDRole).toInt(); + QString strBtAddr = deviceModel()->data(deviceIndex,BtDeviceModel::ReadableBdaddrRole).toString(); + int cod = deviceModel()->data(deviceIndex,BtDeviceModel::CoDRole).toInt(); if ( ! mBtengConnMan ){ TRAP( error, mBtengConnMan = CBTEngConnMan::NewL(this) ); @@ -166,7 +174,7 @@ void BtDelegatePair::emitCommandComplete(int error) { - emit commandCompleted(error); + emit delegateCompleted(error, this); } void BtDelegatePair::cancel() diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatepair.h --- a/bluetoothengine/btui/btuidelegate/btdelegatepair.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatepair.h Fri Sep 03 16:17:59 2010 +0300 @@ -41,6 +41,8 @@ BtDeviceModel* deviceModel, QObject *parent = 0 ); virtual ~BtDelegatePair(); + + int supportedEditorTypes() const; virtual void exec( const QVariant ¶ms ); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatepower.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatepower.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatepower.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -18,7 +18,7 @@ #include "btdelegatepower.h" #include "btqtconstants.h" -#include +#include #include #include #include @@ -35,9 +35,10 @@ : BtAbstractDelegate( settingModel, deviceModel, parent ), mDisconnectDelegate(0) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); TRAP_IGNORE( mBtengSettings = CBTEngSettings::NewL(this) ); Q_CHECK_PTR( mBtengSettings ); - mActiveHandling = false; + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -45,8 +46,18 @@ */ BtDelegatePower::~BtDelegatePower() { - delete mDisconnectDelegate; + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); delete mBtengSettings; + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} + +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegatePower::supportedEditorTypes() const +{ + return BtDelegate::ManagePower; } /*! @@ -55,216 +66,153 @@ */ void BtDelegatePower::exec( const QVariant &powerState ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + BTUI_ASSERT_X(!isExecuting(), "BtDelegatePower::exec", "operation ongoing!"); + mReqPowerState = BtEngPowerState((PowerStateQtValue)powerState.toInt()); BTUI_ASSERT_X( (mReqPowerState == EBTPowerOff) || (mReqPowerState == EBTPowerOn), "BtDelegatePower::exec()", "wrong power state value" ); // get current power status TBTPowerStateValue curPowerState(EBTPowerOff); - mBtengSettings->GetPowerState( curPowerState ); - - // verify requested power is not the same as current status - if ( mReqPowerState == curPowerState ) { - // no need to do anything - emit commandCompleted( KErrNone ); - return; - } + int err = mBtengSettings->GetPowerState( curPowerState ); - // perform power on/off operation - if ( mReqPowerState == EBTPowerOff ){ - switchBTOff(); + if (!err && mReqPowerState != curPowerState) { + setExecuting(true); + // perform power on/off operation + if ( mReqPowerState == EBTPowerOff ){ + switchBTOff(); + } + else if ( mReqPowerState == EBTPowerOn ) { + switchBTOn(); + } + } else { + // no need to do anything + completeDelegateExecution(err); } - else if ( mReqPowerState == EBTPowerOn ) { - switchBTOn(); - } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } - - void BtDelegatePower::switchBTOn() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int err = 0; - + //check if device is in OFFLINE mode first bool btEnabledInOffline = false; if (checkOfflineMode(btEnabledInOffline)){ // offline mode is active if (btEnabledInOffline){ // BT is allowed to be enabled in offline mode, show query. HbMessageBox::question( hbTrId("txt_bt_info_trun_bluetooth_on_ini_offline_mode" ),this, - SLOT(btOnQuestionClose(int)), HbMessageBox::Yes | HbMessageBox::No ); - - } - else{ + SLOT(btOnQuestionClose(int)), HbMessageBox::Yes | HbMessageBox::No ); + } else { //if BT is not allowed to be enabled in offline mode, show message and complete HbMessageBox::warning( hbTrId("txt_bt_info_bluetooth_not_allowed_to_be_turned_on" ),this, SLOT(btOnWarningClose())); } - } else { // offline mode is not active - mActiveHandling = true; err = mBtengSettings->SetPowerState(EBTPowerOn); - } - + } if ( err ) { - //TODO: handle the error here - emit commandCompleted(KErrGeneral); + completeDelegateExecution(err); } - + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } void BtDelegatePower::btOnQuestionClose(int action) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int err = 0; - if(action == HbMessageBox::Yes) - { + if(action == HbMessageBox::Yes) { //user chooses "yes" for using BT in offline - mActiveHandling = true; err = mBtengSettings->SetPowerState(EBTPowerOn); + } else { + err = KErrCancel; } - else - { - //if user chooses "NO", emits the signal - emit commandCompleted(KErrNone); - - } if ( err ) { - //TODO: handle the error here - emit commandCompleted(KErrGeneral); + completeDelegateExecution(err); } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } void BtDelegatePower::btOnWarningClose() { - emit commandCompleted(KErrNone); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + completeDelegateExecution(KErrPermissionDenied); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } - - void BtDelegatePower::switchBTOff() { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); int err = 0; - CBTEngConnMan *btengConnMan = 0; - TRAP(err, btengConnMan = CBTEngConnMan::NewL(this)); - Q_CHECK_PTR( btengConnMan ); + CBTEngConnMan *btengConnMan(0); + TRAP(err, btengConnMan = CBTEngConnMan::NewL()); RBTDevAddrArray devAddrArray; - err = btengConnMan->GetConnectedAddresses(devAddrArray); - if ( err != KErrNone) { - //TODO: handle the error here - emit commandCompleted(err); - return; + if (!err) { + err = btengConnMan->GetConnectedAddresses(devAddrArray); } - int count = devAddrArray.Count(); + if (!err && devAddrArray.Count()) { + disconnectConnections(); + } else if ( !err ) { + err = mBtengSettings->SetPowerState(EBTPowerOff); + } devAddrArray.Close(); delete btengConnMan; - if( count> 0 ){ - mActiveHandling = true; - disconnectOngoingConnections(); + + if (err) { + completeDelegateExecution(err); } - else{ - mActiveHandling = true; - err = mBtengSettings->SetPowerState(EBTPowerOff); - - if ( err ) { - //TODO: handle the error here - emit commandCompleted(KErrGeneral); - } - - } -} -/* -void BtDelegatePower::btOffDialogClose(HbAction *action) -{ - HbMessageBox *dlg = static_cast(sender()); - if(action == dlg->actions().at(0)) - { - //user chooses "yes" for closing active connection before power off - mActiveHandling = true; - disconnectOngoingConnections(); - } - else - { - //if user chooses "NO", emits the signal - emit commandCompleted(KErrNone); - - } - -} -*/ -void BtDelegatePower::disconnectOngoingConnections(){ - if (! mDisconnectDelegate){ - mDisconnectDelegate = BtDelegateFactory::newDelegate( - BtDelegate::Disconnect, getSettingModel(), getDeviceModel()); - connect( mDisconnectDelegate, SIGNAL(commandCompleted(int)), this, SLOT(disconnectDelegateCompleted(int)) ); - - - DisconnectOption discoOpt = AllOngoingConnections; - QVariant param; - param.setValue((int)discoOpt); - mDisconnectDelegate->exec(param); - } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } -void BtDelegatePower::disconnectDelegateCompleted(int err) +void BtDelegatePower::disconnectConnections() { - Q_UNUSED( err ); - //TODO: handle the return error here - - int error = mBtengSettings->SetPowerState(EBTPowerOff); - if ( error ) { - //TODO: handle the error here - emit commandCompleted(KErrGeneral); + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + if (! mDisconnectDelegate) { + mDisconnectDelegate = new BtDelegateDisconnect( + settingModel(), deviceModel(), this); + (void) connect(mDisconnectDelegate, + SIGNAL(delegateCompleted(int,BtAbstractDelegate*)), + this, SLOT(disconnectCompleted(int,BtAbstractDelegate*))); } - - + QList list; + list.append(QVariant( AllOngoingConnections )); + mDisconnectDelegate->exec(QVariant(list)); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } +void BtDelegatePower::disconnectCompleted(int err, BtAbstractDelegate *delegate) +{ + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); + // We will turn off power even an error was returned from disconnection. + Q_UNUSED(delegate); + err = mBtengSettings->SetPowerState(EBTPowerOff); + if ( err ) { + completeDelegateExecution(err); + } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); +} void BtDelegatePower::PowerStateChanged( TBTPowerStateValue aPowerState ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); // It is possible that others change power: no handling for these cases. - if ( !mActiveHandling ) { - return; + if ( isExecuting() ) { + int err = ( mReqPowerState == aPowerState ) ? KErrNone : KErrGeneral; + completeDelegateExecution(err); } - mActiveHandling = false; - - if ( mReqPowerState == aPowerState ) { - // power state changed successfully - emit commandCompleted( KErrNone ); - } - else { - // the actual power state is not the same as we requested, - // command failed: - // ToDo: show error note? - emit commandCompleted( KErrGeneral ); - } + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } //Method derived from MBTEngSettingsObserver, no need to be implemented here void BtDelegatePower::VisibilityModeChanged( TBTVisibilityMode aState ) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); Q_UNUSED( aState ); -} - -void BtDelegatePower::ConnectComplete( TBTDevAddr& aAddr, TInt aErr, - RBTDevAddrArray* aConflicts ) -{ - Q_UNUSED(aAddr); - Q_UNUSED(aErr); - Q_UNUSED(aConflicts); - /* - if ( mBtEngAddr != aAddr ) { // callback coming for some other device - return; - } - emitCommandComplete(aErr); - */ -} - -void BtDelegatePower::DisconnectComplete( TBTDevAddr& aAddr, TInt aErr ) -{ - Q_UNUSED(aAddr); - Q_UNUSED(aErr); + BOstraceFunctionExit1( DUMMY_DEVLIST, this ); } /*! @@ -273,12 +221,14 @@ */ bool BtDelegatePower::checkOfflineMode(bool& btEnabledInOffline) { + BOstraceFunctionEntry1( DUMMY_DEVLIST, this ); TCoreAppUIsNetworkConnectionAllowed offLineMode; TBTEnabledInOfflineMode btEnabled; mBtengSettings->GetOfflineModeSettings(offLineMode, btEnabled); btEnabledInOffline = (btEnabled == EBTEnabledInOfflineMode); + BOstraceFunctionExitExt( DUMMY_DEVLIST, this, offLineMode == ECoreAppUIsNetworkConnectionNotAllowed); return (offLineMode == ECoreAppUIsNetworkConnectionNotAllowed); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatepower.h --- a/bluetoothengine/btui/btuidelegate/btdelegatepower.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatepower.h Fri Sep 03 16:17:59 2010 +0300 @@ -32,8 +32,7 @@ \\sa btuidelegate */ -class BtDelegatePower : public BtAbstractDelegate, public MBTEngSettingsObserver, - public MBTEngConnObserver +class BtDelegatePower : public BtAbstractDelegate, public MBTEngSettingsObserver { Q_OBJECT @@ -43,29 +42,23 @@ BtDeviceModel* deviceModel, QObject *parent = 0 ); virtual ~BtDelegatePower(); - + + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); //from MBTEngSettingsObserver - virtual void PowerStateChanged( TBTPowerStateValue aState ); + virtual void PowerStateChanged( TBTPowerStateValue state ); - virtual void VisibilityModeChanged( TBTVisibilityMode aState ); + virtual void VisibilityModeChanged( TBTVisibilityMode state ); public slots: void btOnQuestionClose(int action); void btOnWarningClose(); - void disconnectDelegateCompleted(int err); - - -protected: - //From MBTEngConnObserver - virtual void ConnectComplete( TBTDevAddr& aAddr, TInt aErr, - RBTDevAddrArray* aConflicts ); - virtual void DisconnectComplete( TBTDevAddr& aAddr, TInt aErr ); - + void disconnectCompleted(int err, BtAbstractDelegate *delegate); private: void switchBTOn(); @@ -74,17 +67,13 @@ bool checkOfflineMode(bool& btEnabledInOffline); - void disconnectOngoingConnections(); + void disconnectConnections(); - private: CBTEngSettings* mBtengSettings; - bool mActiveHandling; - TBTPowerStateValue mReqPowerState; - + TBTPowerStateValue mReqPowerState; BtAbstractDelegate* mDisconnectDelegate; - - + private: Q_DISABLE_COPY(BtDelegatePower) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateremotedevname.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegateremotedevname.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegateremotedevname.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -41,6 +41,15 @@ } /*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateRemoteDevName::supportedEditorTypes() const +{ + return BtDelegate::ChangeDeviceFriendlyName; +} + +/*! Validate the bluetooth device name given by the user: Extra spaces (' ', '\n', '\t' and '\r') from the beginning, middle and the end of the name are always removed; @@ -72,18 +81,11 @@ QString btRemoteDevName = nameVariant.toString(); if (!validateName(btRemoteDevName)){ - emit commandCompleted(KErrBadName); + emit delegateCompleted(KErrBadName, this); return; } mNewName = btRemoteDevName; - /* - QModelIndex start = getDeviceModel()->index(0,0); - QModelIndexList indexList = getDeviceModel()->match(start,BtDeviceModel::NameAliasRole, mNewName); - if (indexList.size() > 1){ - emit commandCompleted(KErrBadName, mNewName); - return; - } - */ + int error = KErrNone; TPtrC ptrName(reinterpret_cast(btRemoteDevName.constData())); @@ -94,11 +96,11 @@ mSymName.Copy(ptrName); } else{ - emit commandCompleted(error,mNewName); + emit delegateCompleted(error,this); return; } - QString strBtAddr = getDeviceModel()->data(index, + QString strBtAddr = deviceModel()->data(index, BtDeviceModel::ReadableBdaddrRole).toString(); TBuf buffer(strBtAddr.utf16()); @@ -106,13 +108,13 @@ error = mBtRegServ.Connect(); if ( error != KErrNone && error != KErrAlreadyExists) { - emit commandCompleted(error,mNewName); + emit delegateCompleted(error,this); return; } error = mBtRegistry.Open( mBtRegServ ) ; if ( error != KErrNone && error != KErrAlreadyExists) { - emit commandCompleted(error,mNewName); + emit delegateCompleted(error,this); return; } mRegistryOpened = true; @@ -122,14 +124,14 @@ TRAP(error, mRegistryActive = CBtSimpleActive::NewL( *this, requestId)); if(error!=KErrNone) { - emit commandCompleted(KErrGeneral); + emit delegateCompleted(KErrGeneral, this); return; } } //first check if this device is already in the registry - int majorRole = (getDeviceModel()->data(index,BtDeviceModel::MajorPropertyRole)).toInt(); - int cod = (getDeviceModel()->data(index,BtDeviceModel::CoDRole)).toInt(); + int majorRole = (deviceModel()->data(index,BtDeviceModel::MajorPropertyRole)).toInt(); + int cod = (deviceModel()->data(index,BtDeviceModel::CoDRole)).toInt(); if (!(majorRole & BtuiDevProperty::InRegistry)) { CBTDevice *symBtDevice; TRAP( error, { @@ -151,7 +153,7 @@ }); } if ( error != KErrNone ) { - emit commandCompleted(error,mNewName); + emit delegateCompleted(error,this); } } @@ -159,7 +161,7 @@ void BtDelegateRemoteDevName::RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus ){ if(aStatus != KErrNone){ - emit commandCompleted(aStatus, mNewName); + emit delegateCompleted(aStatus, this); return; } int error = KErrNone; @@ -171,11 +173,11 @@ mRegistryActive->GoActive(); }); if(error != KErrNone){ - emit commandCompleted(error, mNewName); + emit delegateCompleted(error, this); } } else if ( aActive->RequestId() == ModifyFriendlyName ){ - emit commandCompleted(error, mNewName); + emit delegateCompleted(error, this); } } @@ -183,7 +185,7 @@ void BtDelegateRemoteDevName::CancelRequest( TInt aRequestId ){ if ( aRequestId == 1 ){ mBtRegistry.CancelRequest(mRegistryActive->RequestStatus()); - emit commandCompleted(KErrCancel, mNewName); + emit delegateCompleted(KErrCancel, this); } } @@ -192,5 +194,5 @@ //TODO: handle the error here Q_UNUSED( aActive ); Q_UNUSED( aError ); - emit commandCompleted(KErrGeneral,mNewName); + emit delegateCompleted(KErrGeneral,this); } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegateremotedevname.h --- a/bluetoothengine/btui/btuidelegate/btdelegateremotedevname.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegateremotedevname.h Fri Sep 03 16:17:59 2010 +0300 @@ -47,6 +47,8 @@ virtual ~BtDelegateRemoteDevName(); + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); // from MBtSimpleActiveObserver diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatevisibility.cpp --- a/bluetoothengine/btui/btuidelegate/btdelegatevisibility.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatevisibility.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -44,6 +44,17 @@ { delete mBtengSettings; } + + +/*! + Returns the supported editor types. + \return the sum of supported editor types + */ +int BtDelegateVisibility::supportedEditorTypes() const +{ + return BtDelegate::ChangeVisibility; +} + /*! * executes visibility delegate functionality, ie. calls CBTEngSettings to set the visibility mode; * when operation completes, emits commandCompleted signal @@ -56,7 +67,7 @@ if (mActiveHandling) { // complete command with error - emit commandCompleted(KErrInUse); + emit delegateCompleted(KErrInUse, this); return; } mActiveHandling = true; @@ -71,12 +82,12 @@ err = mBtengSettings->GetVisibilityMode( visibilityMode ); if (err) { mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(err, this); return; } if (visibilityMode == mOperation) { mActiveHandling = false; - emit commandCompleted(KErrNone); + emit delegateCompleted(KErrNone, this); return; } @@ -101,7 +112,7 @@ if (err) { // complete command with error mActiveHandling = false; - emit commandCompleted(err); + emit delegateCompleted(err, this); } } @@ -122,10 +133,10 @@ //Error handling has to be done, if value is not set properly. mActiveHandling = false; if (mOperation == aState) { - emit commandCompleted(KErrNone); + emit delegateCompleted(KErrNone, this); } else { - emit commandCompleted(KErrUnknown); + emit delegateCompleted(KErrUnknown, this); } } } diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btdelegatevisibility.h --- a/bluetoothengine/btui/btuidelegate/btdelegatevisibility.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btdelegatevisibility.h Fri Sep 03 16:17:59 2010 +0300 @@ -39,10 +39,10 @@ virtual ~BtDelegateVisibility(); + int supportedEditorTypes() const; + virtual void exec( const QVariant ¶ms ); - - public slots: private: diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/btuidelegate.pro --- a/bluetoothengine/btui/btuidelegate/btuidelegate.pro Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/btuidelegate.pro Fri Sep 03 16:17:59 2010 +0300 @@ -26,10 +26,10 @@ CONFIG += qt \ hb \ dll -HEADERS += btdelegateconsts.h \ - btdelegatepower.h \ - btdelegatefactory.h \ - btabstractdelegate.h \ + +HEADERS += btdelegatepower.h \ + ../inc/btdelegatefactory.h \ + ../inc/btabstractdelegate.h \ btdelegatevisibility.h \ btdelegatedevname.h \ btdelegateinquiry.h \ @@ -37,7 +37,8 @@ btdelegatepair.h \ btdelegatedisconnect.h \ btdelegatedevsecurity.h \ - btdelegateremotedevname.h + btdelegateremotedevname.h \ + btdelegatedevremove.h SOURCES += btdelegatepower.cpp \ btdelegatefactory.cpp \ @@ -49,16 +50,14 @@ btdelegatepair.cpp \ btdelegatedisconnect.cpp \ btdelegatedevsecurity.cpp \ - btdelegateremotedevname.cpp + btdelegateremotedevname.cpp \ + btdelegatedevremove.cpp defFilePath = . symbian: { SYMBIAN_PLATFORMS = WINSCW \ ARMV5 - BLD_INF_RULES.prj_exports += "btdelegatefactory.h |../inc/btdelegatefactory.h" - BLD_INF_RULES.prj_exports += "btabstractdelegate.h |../inc/btabstractdelegate.h" - BLD_INF_RULES.prj_exports += "btdelegateconsts.h |../inc/btdelegateconsts.h" TARGET.EPOCALLOWDLLDATA = 1 TARGET.UID3 = 0xEE02434F TARGET.CAPABILITY = CAP_GENERAL_DLL diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/bwins/btuidelegateu.def --- a/bluetoothengine/btui/btuidelegate/bwins/btuidelegateu.def Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/bwins/btuidelegateu.def Fri Sep 03 16:17:59 2010 +0300 @@ -1,20 +1,25 @@ EXPORTS ?qt_metacall@BtAbstractDelegate@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1 NONAME ; int BtAbstractDelegate::qt_metacall(enum QMetaObject::Call, int, void * *) - ??1BtAbstractDelegate@@UAE@XZ @ 2 NONAME ; BtAbstractDelegate::~BtAbstractDelegate(void) - ?metaObject@BtAbstractDelegate@@UBEPBUQMetaObject@@XZ @ 3 NONAME ; struct QMetaObject const * BtAbstractDelegate::metaObject(void) const - ?tr@BtAbstractDelegate@@SA?AVQString@@PBD0H@Z @ 4 NONAME ; class QString BtAbstractDelegate::tr(char const *, char const *, int) - ?newDelegate@BtDelegateFactory@@SAPAVBtAbstractDelegate@@W4Command@BtDelegate@@PAVBtSettingModel@@PAVBtDeviceModel@@PAVQObject@@@Z @ 5 NONAME ; class BtAbstractDelegate * BtDelegateFactory::newDelegate(enum BtDelegate::Command, class BtSettingModel *, class BtDeviceModel *, class QObject *) - ?tr@BtAbstractDelegate@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString BtAbstractDelegate::tr(char const *, char const *) - ?qt_metacast@BtAbstractDelegate@@UAEPAXPBD@Z @ 7 NONAME ; void * BtAbstractDelegate::qt_metacast(char const *) - ?getStaticMetaObject@BtAbstractDelegate@@SAABUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const & BtAbstractDelegate::getStaticMetaObject(void) - ??0BtAbstractDelegate@@QAE@PAVBtSettingModel@@PAVBtDeviceModel@@PAVQObject@@@Z @ 9 NONAME ; BtAbstractDelegate::BtAbstractDelegate(class BtSettingModel *, class BtDeviceModel *, class QObject *) - ?staticMetaObject@BtAbstractDelegate@@2UQMetaObject@@B @ 10 NONAME ; struct QMetaObject const BtAbstractDelegate::staticMetaObject - ??_EBtAbstractDelegate@@UAE@I@Z @ 11 NONAME ; BtAbstractDelegate::~BtAbstractDelegate(unsigned int) - ?commandCompleted@BtAbstractDelegate@@IAEXHVQVariant@@@Z @ 12 NONAME ; void BtAbstractDelegate::commandCompleted(int, class QVariant) - ?cancel@BtAbstractDelegate@@UAEXXZ @ 13 NONAME ; void BtAbstractDelegate::cancel(void) - ?trUtf8@BtAbstractDelegate@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString BtAbstractDelegate::trUtf8(char const *, char const *) - ?getSettingModel@BtAbstractDelegate@@IAEPAVBtSettingModel@@XZ @ 15 NONAME ; class BtSettingModel * BtAbstractDelegate::getSettingModel(void) - ?getDeviceModel@BtAbstractDelegate@@IAEPAVBtDeviceModel@@XZ @ 16 NONAME ; class BtDeviceModel * BtAbstractDelegate::getDeviceModel(void) - ?trUtf8@BtAbstractDelegate@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString BtAbstractDelegate::trUtf8(char const *, char const *, int) - ?isBtPowerOn@BtAbstractDelegate@@IAE_NXZ @ 18 NONAME ; bool BtAbstractDelegate::isBtPowerOn(void) + ?beginUiEditMode@BtAbstractDelegate@@IAEXXZ @ 2 NONAME ; void BtAbstractDelegate::beginUiEditMode(void) + ?delegateCompleted@BtAbstractDelegate@@IAEXHPAV1@@Z @ 3 NONAME ; void BtAbstractDelegate::delegateCompleted(int, class BtAbstractDelegate *) + ?settingModel@BtAbstractDelegate@@IAEPAVBtSettingModel@@XZ @ 4 NONAME ; class BtSettingModel * BtAbstractDelegate::settingModel(void) + ??1BtAbstractDelegate@@UAE@XZ @ 5 NONAME ; BtAbstractDelegate::~BtAbstractDelegate(void) + ?metaObject@BtAbstractDelegate@@UBEPBUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const * BtAbstractDelegate::metaObject(void) const + ?deviceModel@BtAbstractDelegate@@IAEPAVBtDeviceModel@@XZ @ 7 NONAME ; class BtDeviceModel * BtAbstractDelegate::deviceModel(void) + ?tr@BtAbstractDelegate@@SA?AVQString@@PBD0H@Z @ 8 NONAME ; class QString BtAbstractDelegate::tr(char const *, char const *, int) + ?tr@BtAbstractDelegate@@SA?AVQString@@PBD0@Z @ 9 NONAME ; class QString BtAbstractDelegate::tr(char const *, char const *) + ?qt_metacast@BtAbstractDelegate@@UAEPAXPBD@Z @ 10 NONAME ; void * BtAbstractDelegate::qt_metacast(char const *) + ?getStaticMetaObject@BtAbstractDelegate@@SAABUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const & BtAbstractDelegate::getStaticMetaObject(void) + ??0BtAbstractDelegate@@QAE@PAVBtSettingModel@@PAVBtDeviceModel@@PAVQObject@@@Z @ 12 NONAME ; BtAbstractDelegate::BtAbstractDelegate(class BtSettingModel *, class BtDeviceModel *, class QObject *) + ?staticMetaObject@BtAbstractDelegate@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const BtAbstractDelegate::staticMetaObject + ?newDelegate@BtDelegateFactory@@SAPAVBtAbstractDelegate@@W4EditorType@BtDelegate@@PAVBtSettingModel@@PAVBtDeviceModel@@PAVQObject@@@Z @ 14 NONAME ; class BtAbstractDelegate * BtDelegateFactory::newDelegate(enum BtDelegate::EditorType, class BtSettingModel *, class BtDeviceModel *, class QObject *) + ?endUiEditMode@BtAbstractDelegate@@IAEXXZ @ 15 NONAME ; void BtAbstractDelegate::endUiEditMode(void) + ??_EBtAbstractDelegate@@UAE@I@Z @ 16 NONAME ; BtAbstractDelegate::~BtAbstractDelegate(unsigned int) + ?isExecuting@BtAbstractDelegate@@QAE_NXZ @ 17 NONAME ; bool BtAbstractDelegate::isExecuting(void) + ?setExecuting@BtAbstractDelegate@@IAEX_N@Z @ 18 NONAME ; void BtAbstractDelegate::setExecuting(bool) + ?isBtPowerOn@BtAbstractDelegate@@IAE_NXZ @ 19 NONAME ; bool BtAbstractDelegate::isBtPowerOn(void) + ?completeDelegateExecution@BtAbstractDelegate@@IAEXH@Z @ 20 NONAME ; void BtAbstractDelegate::completeDelegateExecution(int) + ?cancel@BtAbstractDelegate@@UAEXXZ @ 21 NONAME ; void BtAbstractDelegate::cancel(void) + ?trUtf8@BtAbstractDelegate@@SA?AVQString@@PBD0@Z @ 22 NONAME ; class QString BtAbstractDelegate::trUtf8(char const *, char const *) + ?trUtf8@BtAbstractDelegate@@SA?AVQString@@PBD0H@Z @ 23 NONAME ; class QString BtAbstractDelegate::trUtf8(char const *, char const *, int) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuidelegate/eabi/btuidelegateu.def --- a/bluetoothengine/btui/btuidelegate/eabi/btuidelegateu.def Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuidelegate/eabi/btuidelegateu.def Fri Sep 03 16:17:59 2010 +0300 @@ -1,19 +1,24 @@ EXPORTS - _ZN17BtDelegateFactory11newDelegateEN10BtDelegate7CommandEP14BtSettingModelP13BtDeviceModelP7QObject @ 1 NONAME - _ZN18BtAbstractDelegate11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME - _ZN18BtAbstractDelegate11qt_metacastEPKc @ 3 NONAME - _ZN18BtAbstractDelegate14getDeviceModelEv @ 4 NONAME - _ZN18BtAbstractDelegate15getSettingModelEv @ 5 NONAME - _ZN18BtAbstractDelegate16commandCompletedEi8QVariant @ 6 NONAME - _ZN18BtAbstractDelegate16staticMetaObjectE @ 7 NONAME DATA 16 - _ZN18BtAbstractDelegate19getStaticMetaObjectEv @ 8 NONAME - _ZN18BtAbstractDelegate6cancelEv @ 9 NONAME - _ZN18BtAbstractDelegateC2EP14BtSettingModelP13BtDeviceModelP7QObject @ 10 NONAME - _ZN18BtAbstractDelegateD0Ev @ 11 NONAME - _ZN18BtAbstractDelegateD1Ev @ 12 NONAME - _ZN18BtAbstractDelegateD2Ev @ 13 NONAME - _ZNK18BtAbstractDelegate10metaObjectEv @ 14 NONAME - _ZTI18BtAbstractDelegate @ 15 NONAME - _ZTV18BtAbstractDelegate @ 16 NONAME - _ZN18BtAbstractDelegate11isBtPowerOnEv @ 17 NONAME + _ZN17BtDelegateFactory11newDelegateEN10BtDelegate10EditorTypeEP14BtSettingModelP13BtDeviceModelP7QObject @ 1 NONAME + _ZN18BtAbstractDelegate11deviceModelEv @ 2 NONAME + _ZN18BtAbstractDelegate11isBtPowerOnEv @ 3 NONAME + _ZN18BtAbstractDelegate11isExecutingEv @ 4 NONAME + _ZN18BtAbstractDelegate11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME + _ZN18BtAbstractDelegate11qt_metacastEPKc @ 6 NONAME + _ZN18BtAbstractDelegate12setExecutingEb @ 7 NONAME + _ZN18BtAbstractDelegate12settingModelEv @ 8 NONAME + _ZN18BtAbstractDelegate13endUiEditModeEv @ 9 NONAME + _ZN18BtAbstractDelegate15beginUiEditModeEv @ 10 NONAME + _ZN18BtAbstractDelegate16staticMetaObjectE @ 11 NONAME DATA 16 + _ZN18BtAbstractDelegate17delegateCompletedEiPS_ @ 12 NONAME + _ZN18BtAbstractDelegate19getStaticMetaObjectEv @ 13 NONAME + _ZN18BtAbstractDelegate25completeDelegateExecutionEi @ 14 NONAME + _ZN18BtAbstractDelegate6cancelEv @ 15 NONAME + _ZN18BtAbstractDelegateC2EP14BtSettingModelP13BtDeviceModelP7QObject @ 16 NONAME + _ZN18BtAbstractDelegateD0Ev @ 17 NONAME + _ZN18BtAbstractDelegateD1Ev @ 18 NONAME + _ZN18BtAbstractDelegateD2Ev @ 19 NONAME + _ZNK18BtAbstractDelegate10metaObjectEv @ 20 NONAME + _ZTI18BtAbstractDelegate @ 21 NONAME + _ZTV18BtAbstractDelegate @ 22 NONAME diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuimodel/btdevicemodel.cpp --- a/bluetoothengine/btui/btuimodel/btdevicemodel.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuimodel/btdevicemodel.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -18,6 +18,7 @@ #include #include "btdevicemodel_p.h" #include "bluetoothuitrace.h" +#include "btuidevtypemap.h" /*! This Constructor creates new instances of model data structure. @@ -128,6 +129,53 @@ return d.data()->itemData( index.row(), index.column() ); } +/*! + \Reimplemented just to match the model based on major property + */ +QModelIndexList BtDeviceModel::match(const QModelIndex & start, int role, + const QVariant & value, int hits, Qt::MatchFlags flags ) const +{ + DevDataRole propRole = (DevDataRole)role; + if(BtDeviceModel::MajorPropertyRole == propRole) { + BtuiDevProperty::DevMajorProperty propValue = (BtuiDevProperty::DevMajorProperty)value.toInt(); + QModelIndexList indexList; + int count = rowCount(); + if (count && (start.row() < count)) { + for(int row = start.row(); row < count; row++) { + QModelIndex modelIndex = index(row,0); + int majorPropRole = data(modelIndex,BtDeviceModel::MajorPropertyRole).toInt(); + if (majorPropRole & propValue) { + indexList.append(modelIndex); + } + } + } + return indexList; + } + + return QAbstractItemModel::match(start, role, value, hits, flags); +} + + +/*! + Returns device count of devices having majorProperty. + */ +int BtDeviceModel::deviceCount(int majorProperty) +{ + int deviceCount = 0; + int count = rowCount(); + BtuiDevProperty::DevMajorProperty propValue = (BtuiDevProperty::DevMajorProperty)majorProperty; + + for(int row = 0; row < count; row++) { + QModelIndex modelIndex = index(row,0); + int majorPropRole = data(modelIndex,BtDeviceModel::MajorPropertyRole).toInt(); + if (majorPropRole & propValue) { + deviceCount++; + } + } + + return deviceCount; +} + /*! emits dataChanged signal. diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuimodel/btdevicemodel_p.cpp --- a/bluetoothengine/btui/btuimodel/btdevicemodel_p.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuimodel/btdevicemodel_p.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -158,7 +158,7 @@ if(isDeviceInRange(qtdev)) { if(isDeviceInRegistry(qtdev)) { // we cannot remove this device as it is in registry. - // remove it in-range property. + // remove its in-range property. setMajorProperty(mData[i], BtuiDevProperty::InRange, false); updateRssi(mData[i], RssiInvalid); updateSeqNum(mData[i], -1); @@ -278,7 +278,6 @@ const TInquirySockAddr& inqAddr, const TDesC& name ) { int pos = indexOf( inqAddr.BTAddr() ); - const CBtDevExtension* dev = mDeviceRepo->Device( inqAddr.BTAddr() ); //RssiRole int rssi( RssiInvalid ); // initialize to an invalid value. @@ -419,9 +418,6 @@ // device type is mapped according to CoD: BtuiDevProperty::mapDeiveType(majorDeviceType, minorDeviceType, cod); - - - qtdev[BtDeviceModel::MajorPropertyRole] = QVariant( qtdev[BtDeviceModel::MajorPropertyRole].toInt() | majorDeviceType ); qtdev[BtDeviceModel::MinorPropertyRole] = QVariant( minorDeviceType ); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuimodel/btsettingmodel_p.cpp --- a/bluetoothengine/btui/btuimodel/btsettingmodel_p.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuimodel/btsettingmodel_p.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -15,7 +15,6 @@ * */ - #include "btsettingmodel_p.h" #include #include @@ -33,7 +32,7 @@ { int err( 0 ); if (!err ) { - err = mLocalDeviceKey.Attach( KPropertyUidBluetoothCategory, + err = mLocalDeviceKey.Attach( KPropertyUidBluetoothCategory, KPropertyKeyBluetoothGetRegistryTableChange ); } @@ -56,17 +55,15 @@ mLocalDeviceKey.Subscribe( mLocalDeviceWatcher->RequestStatus() ); mLocalDeviceWatcher->GoActive(); - // Get the device name - TBTDeviceName deviceName; - (void) mBtengSetting->GetLocalName( deviceName ); - updateDeviceName( QString::fromUtf16( deviceName.Ptr(), deviceName.Length() ) ); + // At initialization, we do not need to handle the return value + (void) updateLocalDeviceName(); - // Get the power setting. + // Initialize the power setting. TBTPowerStateValue power( EBTPowerOff ); (void) mBtengSetting->GetPowerState( power ); setPowerSetting( power ); - // Get the visibility mode + // Initialize the visibility mode TBTVisibilityMode visibilityMode( EBTVisibilityModeNoScans ); (void) mBtengSetting->GetVisibilityMode( visibilityMode ); setVisibilityMode( visibilityMode ); @@ -180,7 +177,15 @@ if ( active->RequestId() == KLocalDeviceNameWatcher ) { mLocalDeviceKey.Subscribe( mLocalDeviceWatcher->RequestStatus() ); mLocalDeviceWatcher->GoActive(); - updateDeviceName( QString() ); + // Refresh local name of this model only when the local device table is changed. + TInt changedTable; + TInt err = mLocalDeviceKey.Get( changedTable ); + if( !err && changedTable == KRegistryChangeLocalTable ) { + bool updated = updateLocalDeviceName(); + if (updated) { + emit settingDataChanged( BtSettingModel::LocalBtNameRow, this ); + } + } } } @@ -193,6 +198,9 @@ } } +/*! + AO's RunL() cannot leave in Qt applications. No handling. + */ void BtSettingModelPrivate::HandleError( CBtSimpleActive* active, TInt error ) { Q_UNUSED( active ); Q_UNUSED( error ); @@ -200,28 +208,20 @@ /*! Update local Bluetooth device name in the data store. - @param name the latest Bluetooth name. + \return true if the local name is really updated in this model; false, otherwise. */ -void BtSettingModelPrivate::updateDeviceName( const QString &name ) +bool BtSettingModelPrivate::updateLocalDeviceName() { - // To-do: the data structure initialization is not impled yet in the model - BtuiModelDataItem& item = - mData[ BtSettingModel::LocalBtNameRow ]; - - bool setByUser = !name.isEmpty(); - - // The additional parameter is the flag indicating whether the - // Bluetooth name has been set by the user. - // The flag is set to true if the name has been set. - // item[ BtSettingModel::SettingValueParamRole ] = QVariant( setByUser ); - - QString resolvedName( name ); - if ( resolvedName.isEmpty() ) { - // We get the default name as suggestion for the user to set. - getNameFromRegistry( resolvedName ); + QString nameInReg; + getNameFromRegistry( nameInReg ); + QString currentName = mData.at(BtSettingModel::LocalBtNameRow).value( + BtSettingModel::settingDisplayRole).toString(); + if ( nameInReg != currentName ) { + mData[BtSettingModel::LocalBtNameRow][BtSettingModel::settingDisplayRole] = QVariant(nameInReg); + mData[BtSettingModel::LocalBtNameRow][BtSettingModel::SettingValueRole] = QVariant(nameInReg); + return true; } - item[ BtSettingModel::settingDisplayRole ] = QVariant( resolvedName ); - item[ BtSettingModel::SettingValueRole ] = QVariant( resolvedName ); + return false; } /*! @@ -229,17 +229,12 @@ */ void BtSettingModelPrivate::setPowerSetting( TBTPowerStateValue state ) { - BtuiModelDataItem& item = - mData[ BtSettingModel::PowerStateRow ]; - - item[ BtSettingModel::SettingValueRole ] = QVariant( QtPowerMode(state) ); + mData[BtSettingModel::PowerStateRow][BtSettingModel::SettingValueRole] = QVariant(QtPowerMode(state)); } void BtSettingModelPrivate::setVisibilityMode( TBTVisibilityMode state ) { - BtuiModelDataItem& item = mData[ BtSettingModel::VisibilityRow ]; - - item [ BtSettingModel::SettingValueRole ] = QVariant( QtVisibilityMode(state) ); + mData[BtSettingModel::VisibilityRow][BtSettingModel::SettingValueRole] = QVariant(QtVisibilityMode(state)); } /*! diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuimodel/btsettingmodel_p.h --- a/bluetoothengine/btui/btuimodel/btsettingmodel_p.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuimodel/btsettingmodel_p.h Fri Sep 03 16:17:59 2010 +0300 @@ -78,7 +78,8 @@ private: void setVisibilityMode( TBTVisibilityMode state ); - void updateDeviceName( const QString &name ); + + bool updateLocalDeviceName(); void setPowerSetting( TBTPowerStateValue state ); diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuimodel/bwins/btuimodelu.def --- a/bluetoothengine/btui/btuimodel/bwins/btuimodelu.def Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuimodel/bwins/btuimodelu.def Fri Sep 03 16:17:59 2010 +0300 @@ -72,4 +72,6 @@ ?data@BtDeviceModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 71 NONAME ; class QVariant BtDeviceModel::data(class QModelIndex const &, int) const ?connectModelSignals@BtDeviceModel@@AAEXXZ @ 72 NONAME ; void BtDeviceModel::connectModelSignals(void) ?connectModelSignals@BtSettingModel@@AAEXXZ @ 73 NONAME ; void BtSettingModel::connectModelSignals(void) + ?match@BtDeviceModel@@UBE?AV?$QList@VQModelIndex@@@@ABVQModelIndex@@HABVQVariant@@HV?$QFlags@W4MatchFlag@Qt@@@@@Z @ 74 NONAME ; class QList BtDeviceModel::match(class QModelIndex const &, int, class QVariant const &, int, class QFlags) const + ?deviceCount@BtDeviceModel@@QAEHH@Z @ 75 NONAME ; int BtDeviceModel::deviceCount(int) diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/btuimodel/eabi/btuimodelu.def --- a/bluetoothengine/btui/btuimodel/eabi/btuimodelu.def Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/btuimodel/eabi/btuimodelu.def Fri Sep 03 16:17:59 2010 +0300 @@ -74,4 +74,6 @@ _ZTV19BtuiModelSortFilter @ 73 NONAME _ZN14BtSettingModel19connectModelSignalsEv @ 74 NONAME _ZN13BtDeviceModel19connectModelSignalsEv @ 75 NONAME + _ZNK13BtDeviceModel5matchERK11QModelIndexiRK8QVarianti6QFlagsIN2Qt9MatchFlagEE @ 76 NONAME + _ZN13BtDeviceModel11deviceCountEi @ 77 NONAME diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/inc/btabstractdelegate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/inc/btabstractdelegate.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,136 @@ +/* +* 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: +* +*/ + +#ifndef BTABSTRACTDELEGATE_H +#define BTABSTRACTDELEGATE_H + +#include +#include +#include +#include + +class BtSettingModel; +class BtDeviceModel; + +#ifdef BUILD_BTUIDELEGATE +#define BTUIDELEGATE_IMEXPORT Q_DECL_EXPORT +#else +#define BTUIDELEGATE_IMEXPORT Q_DECL_IMPORT +#endif + + +/*! + \class BtAbstractDelegate + \brief the base class for handling user requests from BT application. + + + \\sa btuidelegate + */ +class BTUIDELEGATE_IMEXPORT BtAbstractDelegate : public QObject +{ + Q_OBJECT + +public: + explicit BtAbstractDelegate( BtSettingModel* settingModel, + BtDeviceModel* deviceModel, QObject *parent = 0 ); + + virtual ~BtAbstractDelegate(); + + /*! + * Tells whether this is executing an operation. + */ + bool isExecuting(); + + /*! + * Returns the sum of supported editor types + */ + virtual int supportedEditorTypes() const = 0; + + /*! + * Execute an operation, e.g., powering BT. + * \param params the parameters which is specific per + * delegate. + */ + virtual void exec( const QVariant ¶ms ) = 0; + + /*! + * Cancels an ongoing operation upon receiving the cancelling + * request from end user. + */ + virtual void cancel(); + +signals: + + /*! + * Signal for informing the relevant party that Ui Edit mode + * for the current operation should be activated. + */ + void beginUiEditMode(); + + /*! + * Signal for informing the relevant party that Ui Edit mode + * for the current operation should be deactivated. + */ + void endUiEditMode(); + + /*! + * Signal for informing that this delegate has completed the operation. + * \param error the result of the operation - 0 if the operation + * was successful; some error code, otherwise. + */ + void delegateCompleted(int error, BtAbstractDelegate *delegate); + +protected: + + /*! + * access to setting model. + */ + BtSettingModel *settingModel(); + + /*! + * access to device model. + */ + BtDeviceModel *deviceModel(); + + /*! + * Tells whether BT is on. + * \return true if BT is on; false otherwise + */ + bool isBtPowerOn(); + + void completeDelegateExecution(int error); + + void setExecuting(bool executing); + +public slots: + +private: + + // pointer to models. do not own. + BtSettingModel *mSettingModel; + + BtDeviceModel *mDeviceModel; + + bool mExecuting; + + Q_DISABLE_COPY(BtAbstractDelegate) + +}; + +Q_DECLARE_METATYPE(QModelIndex) + +#endif // BTABSTRACTDELEGATE_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/inc/btdelegateconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/inc/btdelegateconsts.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,48 @@ +/* +* 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: +* +*/ + +#ifndef BTDELEGATECONSTS_H +#define BTDELEGATECONSTS_H + +#include + +namespace BtDelegate + { + enum EditorType + { + InvalidEditor = 0x000000, // invalid editor type + ManagePower = 0x000001, + ChangeLocalName = 0x000002, + ChangeVisibility = 0x000004, + Inquiry = 0x000008, + ConnectService = 0x000010, + DisconnectService = 0x000020, + DisconnectAllConnections = 0x000040, + PairDevice = 0x000080, + UnpairDevice = 0x000100, + BlockDevice = 0x000200, + UnblockDevice = 0x000400, + TrustDevice = 0x000800, + UntrustDevice = 0x001000, + ChangeDeviceFriendlyName = 0x002000, + RemoveAllRegistryDevices = 0x004000, + RemovePairedDevices = 0x008000, + RemoveBlockedDevices = 0x010000, + }; + } + +#endif // BTDELEGATECONSTS_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/inc/btdelegatefactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/inc/btdelegatefactory.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ + +#ifndef BTDELEGATEFACTORY_H +#define BTDELEGATEFACTORY_H + +#include +#include "btdelegateconsts.h" + +class BtAbstractDelegate; +class BtSettingModel; +class BtDeviceModel; + +#ifdef BUILD_BTUIDELEGATE +#define BTUIDELEGATE_IMEXPORT Q_DECL_EXPORT +#else +#define BTUIDELEGATE_IMEXPORT Q_DECL_IMPORT +#endif + +/*! + \class BtDelegateFactory + \brief the base class for creating concrete delegate instances + + \\sa btuidelegate + */ +class BTUIDELEGATE_IMEXPORT BtDelegateFactory +{ + +public: + static BtAbstractDelegate *newDelegate( + BtDelegate::EditorType editor, + BtSettingModel* settingModel, + BtDeviceModel* deviceModel, + QObject *parent = 0 ); + +}; + +#endif // BTDELEGATEFACTORY_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/inc/btdevicemodel.h --- a/bluetoothengine/btui/inc/btdevicemodel.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/inc/btdevicemodel.h Fri Sep 03 16:17:59 2010 +0300 @@ -86,6 +86,8 @@ void removeTransientDevices(); + int deviceCount(int majorProperty); + // from QAbstractItemModel virtual QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const; @@ -99,6 +101,10 @@ virtual QMap itemData( const QModelIndex & index ) const; + virtual QModelIndexList match(const QModelIndex & start, int role, + const QVariant & value, int hits = 1, Qt::MatchFlags flags = + Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchWrap)) const; + signals: void deviceSearchCompleted(int error); @@ -120,7 +126,7 @@ private: void connectModelSignals(); - + private: QSharedPointer d; }; diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/inc/btqtconstants.h --- a/bluetoothengine/btui/inc/btqtconstants.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/inc/btqtconstants.h Fri Sep 03 16:17:59 2010 +0300 @@ -39,6 +39,15 @@ BtPowerUnknown // only for error situations }; +enum DeviceSecurityService { + BtUnpair = 0, + BtBlock, + BtUnblock, + BtAuthorize, + BtUnauthorize, + ServiceUnknown +}; + enum DisconnectOption { ServiceLevel = 0, PhysicalLink, diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btui/inc/traceconfig.h --- a/bluetoothengine/btui/inc/traceconfig.h Fri Aug 06 16:43:21 2010 +0300 +++ b/bluetoothengine/btui/inc/traceconfig.h Fri Sep 03 16:17:59 2010 +0300 @@ -66,7 +66,7 @@ * Tracing media configuration */ #ifdef BLUETOOTHTRACE_ENABLED - #ifdef __WINS__ + #if 0 //#ifdef__WINS__ #define BLUETOOTHTRACE_MEDIA_FILE #else // RDEBUG is used for tracing output before we migrate to OST tracing. diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/btxqservice.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/btxqservice.pro Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,62 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = btxqservice +CONFIG += hb \ + service +MOC_DIR = moc +OBJECTS_DIR = obj +symbian: + { + TARGET.UID3 = 0xA89FB238 + TARGET.CAPABILITY = ALL -TCB +} +LIBS += -lhbcore \ + -lxqservice \ + -lxqserviceutil \ + -lbluetooth \ + -lbtengsettings \ + -lxqutils +SERVICE.FILE = xml/btxqservice_conf.xml + +SERVICE.OPTIONS = embeddable \ + hidden + +libFiles.path = "!:\sys\bin" +DEPLOYMENT += libFiles + +HEADERS += inc/btxqaddrservice.h \ + inc/btxqpowerservice.h \ + inc/btxqdutservice.h \ + inc/btxqsspdebugservice.h + +SOURCES += src/btxqaddrservice.cpp \ + src/main.cpp \ + src/btxqpowerservice.cpp \ + src/btxqdutservice.cpp \ + src/btxqsspdebugservice.cpp + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ + ../inc \ + /epoc32/include/platform/mw/btservices + +BLD_INF_RULES.prj_exports += \ + "$${LITERAL_HASH}include " \ + "inc/btxqserviceapi.h MW_LAYER_PLATFORM_EXPORT_PATH(btxqserviceapi.h)" \ + "rom/btxqservice.iby CORE_MW_LAYER_IBY_EXPORT_PATH(btxqservice.iby)" + + \ No newline at end of file diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/inc/btxqaddrservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/inc/btxqaddrservice.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,47 @@ +/* + * 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: + * + */ + + +#ifndef BTXQADDRSERVICE_H +#define BTXQADDRSERVICE_H + +#include + +class HbDeviceDialog; + + +class BtxqAddrService : public XQServiceProvider +{ + Q_OBJECT + +public: + BtxqAddrService( QObject *parent = 0 ); + ~BtxqAddrService(); + +public slots: + void showBTAddr(); + +public slots: + void handleshowBTAddrCompleted(); + +private: + HbDeviceDialog* mDialog; + int mCurrentRequestIndex; + int mError; +}; + +#endif // BTXQADDRSERVICE_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/inc/btxqdutservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/inc/btxqdutservice.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2009 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: + * + */ + + +#ifndef BTXQDUTSERVICE_H +#define BTXQDUTSERVICE_H + +#include + +class HbDeviceDialog; + + +class BtxqDutService : public XQServiceProvider +{ + Q_OBJECT + +public: + BtxqDutService( QObject *parent = 0 ); + ~BtxqDutService(); + +public slots: + void activateDeviceTestMode(); + +public slots: + void dutModeActivated(); + +private: + HbDeviceDialog* mNotificationDialog; + int mCurrentRequestIndex; + int mError; +}; + +#endif /* BTXQDUTSERVICE_H */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/inc/btxqpowerservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/inc/btxqpowerservice.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,61 @@ +/* + * 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: + * + */ + + +#ifndef BTXQPOWERSERVICE_H +#define BTXQPOWERSERVICE_H + +#include +#include +#include + +class HbDeviceDialog; + + +class BtxqPowerService: public XQServiceProvider, public MBTEngSettingsObserver + { + Q_OBJECT + +public: + BtxqPowerService(QObject *parent = 0); + ~BtxqPowerService(); + +public slots: + void togglePower(); + void handleDialogClosed(); + void handleDataReceived(QVariantMap data); + +private: + void changeBtPowerMode(TBTPowerStateValue aNewPowerState); + bool checkOfflineMode(); + void showBTStatusNotification(TBool powerState); + void showOfflineDialog(); + +private: // from MBTEngSettingsObserver + void PowerStateChanged( TBTPowerStateValue aState ); + void VisibilityModeChanged( TBTVisibilityMode aState ); + +private: + //CBtToggleDi* mBtToggle; + CBTEngSettings* mSettings; + int mCurrentRequestIndex; + HbDeviceDialog* mNotificationDialog; + HbDeviceDialog* mOfflineDialog; + bool mOfflineQueryShown; + }; + +#endif diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/inc/btxqserviceapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/inc/btxqserviceapi.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,96 @@ +/* + * 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: Bluetooth-services APIs through Qt Service Framework + * + */ + +#ifndef BTXQSERVICEAPI_H +#define BTXQSERVICEAPI_H + +#include + +/*! + todo: this API may need to move to plat_ API folder of its destination package. + */ + +/*! + The Bluetooth service name. + */ +static const QString BluetoothServiceName("btxqservice"); + +/*! + The interface of showing the local Bluetooth device address in a dialog + */ +static const QString BluetoothInterfaceShowLocalAddress("com.nokia.symbian.IShowLocalDeviceAddress"); + +/*! + The operation used for showing the local Bluetooth device address in a dialog + */ +static const QString BluetoothShowLocalAddress("showBTAddr()"); + +/*! + The full service name of showing the local Bluetooth device address in a dialog + */ +static const QString BluetoothServiceShowLocalAddress = + BluetoothServiceName + "." + BluetoothInterfaceShowLocalAddress; + +/*! + The interface of toggling Bluetooth power + */ +static const QString BluetoothInterfaceTogglePower("com.nokia.symbian.ITogglePower"); + +/*! + The operation used for toggling the Bluetooth power + */ +static const QString BluetoothTogglePower("togglePower()"); + +/*! + The full service name of toggling Bluetooth power + */ +static const QString BluetoothServiceTogglePower = + BluetoothServiceName + "." + BluetoothInterfaceTogglePower; + +/*! + The interface of activating Bluetooth device test mode (DUT mode) + */ +static const QString BluetoothInterfaceActivateDutMode("com.nokia.symbian.IActivateDutMode"); + +/*! + The operation used for activating the Bluetooth device test mode (DUT mode) + */ +static const QString ActivateDutMode("activateDeviceTestMode()"); + +/*! + The full service name of activating Bluetooth device test mode (DUT mode) + */ +static const QString BluetoothServiceActivateDutMode = + BluetoothServiceName + "." + BluetoothInterfaceActivateDutMode; + +/*! + The interface of toggling Bluetooth SSP debug mode + */ +static const QString BluetoothInterfaceToggleSspDebugMode("com.nokia.symbian.IToggleSspDebugMode"); + +/*! + The operation used for toggling the Bluetooth SSP debug mode + */ +static const QString ToggleSspDebugMode("toggleSspDebugMode()"); + +/*! + The full service name of toggling Bluetooth SSP debug mode + */ +static const QString BluetoothServiceToggleSspDebugMode = + BluetoothServiceName + "." + BluetoothInterfaceToggleSspDebugMode; + +#endif // BTXQSERVICEAPI_H diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/inc/btxqsspdebugservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/inc/btxqsspdebugservice.h Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2009 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: + * + */ + + +#ifndef BTXQSSPDEBUGSERVICE_H_ +#define BTXQSSPDEBUGSERVICE_H_ + +#include + + +class BtxqSspDebugService : public XQServiceProvider +{ + Q_OBJECT + +public: + BtxqSspDebugService( QObject *parent = 0 ); + ~BtxqSspDebugService(); + +public slots: + void toggleSspDebugMode(); + +private: + int mCurrentRequestIndex; + int mError; +}; + +#endif /* BTXQSSPDEBUGSERVICE_H_ */ diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/rom/btxqservice.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/rom/btxqservice.iby Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,25 @@ +/* + * 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: + * + */ + + +#ifndef BTXQSERVICE_IBY +#define BTXQSERVICE_IBY + +file=ABI_DIR\UREL\btxqservice.exe SHARED_LIB_DIR\btxqservice.exe +data=DATAZ_\resource\apps\btxqservice.rsc resource\apps\btxqservice.rsc +data=DATAZ_\private\10003a3f\import\apps\btxqservice_reg.rsc private\10003a3f\import\apps\btxqservice_reg.rsc +#endif \ No newline at end of file diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/rom/btxqservice.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/rom/btxqservice.pkg Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,36 @@ +; +; 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: +; +; + + +; Language +&EN + +; SIS header: name, uid, version +#{"btxqservice"},(0xE219A7EC),1,0,0 + +; Localised Vendor name +%{"Nokia, Qt Software"} + +; Unique Vendor name +:"Nokia, Qt Software" + +; Executable and default resource files +"/epoc32/release/armv5/urel/btxqservice.exe" - "!:\sys\bin\btxqservice.exe" +"/epoc32/data/z/resource/apps/btxqservice.rsc" - "!:\resource\apps\btxqservice.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/btxqservice_reg.rsc" - "!:\private\10003a3f\import\apps\btxqservice_reg.rsc" + +; Manual PKG post-rules from PRO files diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/src/btxqaddrservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/src/btxqaddrservice.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,86 @@ +/* + * 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 "btxqaddrservice.h" +#include +#include +#include +#include +#include +#include +#include + +const QString deviceDialogType = "com.nokia.hb.btdevicedialog/1.0"; + + +BtxqAddrService::BtxqAddrService(QObject* parent) +: XQServiceProvider(BluetoothServiceShowLocalAddress, parent), mDialog(0), +mCurrentRequestIndex(0), +mError(0) +{ + publishAll(); + connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit())); +} + +BtxqAddrService::~BtxqAddrService() +{ + delete mDialog; +} + +void BtxqAddrService::showBTAddr() +{ + mCurrentRequestIndex = setCurrentRequestAsync(); + + TBuf btAddr; + TPckgBuf aDevAddrPckg; + // Get the local device's Bluetooth address + TInt err = RProperty::Get(KUidSystemCategory, + KPropertyKeyBluetoothGetLocalDeviceAddress, aDevAddrPckg); + + aDevAddrPckg().GetReadable(btAddr, KNullDesC, _L(":"), KNullDesC); + btAddr.UpperCase(); + + mError = err; + + // Prepare and show the dialog. + if(!mDialog) + { + mDialog = new HbDeviceDialog(); + } + + connect(mDialog, SIGNAL(deviceDialogClosed()), this, SLOT(handleshowBTAddrCompleted())); + QVariantMap parameters; + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogType), + QString::number(TBluetoothDialogParams::EInformationDialog)); + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogTitle), + QString::number(TBluetoothDialogParams::EBTAddress)); + + parameters.insert(QString::number(TBluetoothDeviceDialog::ELocalAddress), + XQConversions::s60DescToQString(btAddr)); + + mDialog->show(deviceDialogType, parameters); +} + +void BtxqAddrService::handleshowBTAddrCompleted() +{ + // The dialog has been closed. + // Complete the service request. + QVariant retVal(mError); + completeRequest(mCurrentRequestIndex, retVal); +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/src/btxqdutservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/src/btxqdutservice.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2009 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 "btxqdutservice.h" +#include +#include +#include +#include +#include +#include + +const QString deviceDialogType = "com.nokia.hb.btdevicedialog/1.0"; + + +BtxqDutService::BtxqDutService(QObject* parent) +: XQServiceProvider(BluetoothServiceActivateDutMode,parent), mNotificationDialog(0), + mCurrentRequestIndex(0), + mError(0) +{ + publishAll(); + connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit())); +} + +BtxqDutService::~BtxqDutService() +{ + delete mNotificationDialog; +} + +void BtxqDutService::activateDeviceTestMode() +{ + mCurrentRequestIndex = setCurrentRequestAsync(); + + TInt currentDUTModeStatus( EBTDutOff ); + + // Get current status of BT loopback + TInt err = RProperty::Get( KPSUidBluetoothDutMode, KBTDutEnabled, + currentDUTModeStatus ); + + // If the DUT mode is not already activated, activate it. + if ( currentDUTModeStatus == EBTDutOff && err == KErrNone ) + { + err = RProperty::Set( KPSUidBluetoothDutMode, + KBTDutEnabled, + EBTDutOn ); + } + + mError = err; + + if(!mError) + { + // Prepare and show the dialog. + if(!mNotificationDialog) + { + mNotificationDialog = new HbDeviceDialog(); + } + + connect(mNotificationDialog, SIGNAL(deviceDialogClosed()), this, SLOT(dutModeActivated())); + QVariantMap parameters; + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogType), + QString::number(TBluetoothDialogParams::EGlobalNotif)); + + parameters.insert(QString::number(TBluetoothDialogParams::EResource), + QString::number(EBluetoothTestMode)); + + mNotificationDialog->show(deviceDialogType, parameters); + } + else + { + // If there is an error in activating the DUT mode, complete the service request with error code. + dutModeActivated(); + } +} + +void BtxqDutService::dutModeActivated() +{ + // Completes the service request. + QVariant retVal(mError); + completeRequest(mCurrentRequestIndex, retVal); +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/src/btxqpowerservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/src/btxqpowerservice.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2009 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 "btxqpowerservice.h" +#include +#include +#include +#include +#include + +const QString deviceDialogType = "com.nokia.hb.btdevicedialog/1.0"; + + +BtxqPowerService::BtxqPowerService(QObject *parent) +: XQServiceProvider(BluetoothServiceTogglePower, parent), +mSettings(0), mCurrentRequestIndex(0), mNotificationDialog(0), +mOfflineDialog(0), mOfflineQueryShown(false) +{ + publishAll(); + connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit())); +} + +BtxqPowerService::~BtxqPowerService() +{ + delete mSettings; + delete mNotificationDialog; + delete mOfflineDialog; +} + +void BtxqPowerService::togglePower() +{ + mCurrentRequestIndex = setCurrentRequestAsync(); + + TRAPD(err, mSettings = CBTEngSettings::NewL(this)); + if(err < 0) + { + // Error creating CBTEngSettings. Complete the service request with error. + QVariant retVal(err); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + // Get the current power state. + TBTPowerStateValue state; + err = mSettings->GetPowerState(state); + if(err < 0) + { + // Error getting the current power state. Complete the service request with error. + QVariant retVal(err); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + if (EBTPowerOff == state) + { + // Bluetooth is currently turned off. + bool isInOffline = checkOfflineMode(); + + if (isInOffline) + { + // Device is in offline mode. + // Ask user if he/she wants Bluetooth to be turned on in offline mode. + showOfflineDialog(); + } + + else + { + // Device is not in offline mode. + // Turn Bluetooth on. + changeBtPowerMode(EBTPowerOn); + } + } + + else + { + // Bluetooth is currently turned on. + // Switch Bluetooth on. + changeBtPowerMode(EBTPowerOff); + } +} + +void BtxqPowerService::changeBtPowerMode(TBTPowerStateValue aNewPowerState) +{ + // Set the new Bluetooth power state. + TInt error = mSettings->SetPowerState(aNewPowerState); + if(error != KErrNone) + { + // Error setting the new Bluetooth power state. + // Complete the service request with error. + QVariant retVal(error); + completeRequest(mCurrentRequestIndex, retVal); + } +} + +bool BtxqPowerService::checkOfflineMode() +{ + // Check if the device is in offline mode. + TCoreAppUIsNetworkConnectionAllowed offline = ECoreAppUIsNetworkConnectionAllowed; + TBTEnabledInOfflineMode enabledInOffline; + mSettings->GetOfflineModeSettings(offline, enabledInOffline); + + //todo: Check if activation of Bluetooth is allowed in offline mode. + return !offline; +} + +void BtxqPowerService::showBTStatusNotification(TBool powerState) +{ + // Prepare new power state notification dialog. + if(!mNotificationDialog) + { + mNotificationDialog = new HbDeviceDialog(); + } + + connect(mNotificationDialog, SIGNAL(deviceDialogClosed()), this, SLOT(handleDialogClosed())); + QVariantMap parameters; + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogType), + QString::number(TBluetoothDialogParams::EGlobalNotif)); + + parameters.insert(QString::number(TBluetoothDialogParams::EResource), + QString::number(EGenericInfo)); + + if(powerState) + { + // Show dialog with power on notification. + parameters.insert(QString::number(TBluetoothDeviceDialog::EAdditionalInt), + QString::number(EBTSwitchedOn)); + } + else + { + // Show dialog with power off notification. + parameters.insert(QString::number(TBluetoothDeviceDialog::EAdditionalInt), + QString::number(EBTSwitchedOff)); + } + + mNotificationDialog->show(deviceDialogType, parameters); +} + +void BtxqPowerService::showOfflineDialog() +{ + // Prepare and show the offline query dialog. + if(!mOfflineDialog) + { + mOfflineDialog = new HbDeviceDialog(); + } + + connect(mOfflineDialog, SIGNAL(dataReceived(QVariantMap)), + this, SLOT(handleDataReceived(QVariantMap))); + connect(mOfflineDialog, SIGNAL(deviceDialogClosed()), + this, SLOT(handleDialogClosed())); + + QVariantMap parameters; + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogType), + QString::number(TBluetoothDialogParams::EInformationDialog)); + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogTitle), + QString::number(TBluetoothDialogParams::EOfflineQuery)); + + mOfflineQueryShown = true; + mOfflineDialog->show(deviceDialogType, parameters); +} + +void BtxqPowerService::handleDialogClosed() +{ + // Handle the dialog closed. + if(mOfflineQueryShown) + { + mOfflineDialog->cancel(); + mOfflineQueryShown = false; + changeBtPowerMode(EBTPowerOn); + } + else + { + QVariant retVal(0); + completeRequest(mCurrentRequestIndex, retVal); + } +} + +void BtxqPowerService::handleDataReceived(QVariantMap data) +{ + // Handle the user selection in the dialog. + mOfflineDialog->cancel(); + if(data.value(QString("actionResult")).toBool()) + { + changeBtPowerMode(EBTPowerOn); + } + else + { + QVariant retVal(0); + completeRequest(mCurrentRequestIndex, retVal); + } +} + +void BtxqPowerService::PowerStateChanged( TBTPowerStateValue aState ) +{ + // Call-back from CBTEngSettings confirming the power change to the new power state. + (aState == EBTPowerOn) ? showBTStatusNotification(true) : showBTStatusNotification(false); +} + +void BtxqPowerService::VisibilityModeChanged( TBTVisibilityMode aState ) +{ + // This call-back is not used. + (void) aState; +} + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/src/btxqsspdebugservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/src/btxqsspdebugservice.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2009 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 "btxqsspdebugservice.h" +#include +#include +#include +#include + + +BtxqSspDebugService::BtxqSspDebugService(QObject* parent) +: XQServiceProvider(BluetoothServiceToggleSspDebugMode,parent), + mCurrentRequestIndex(0), + mError(0) +{ + publishAll(); + connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit())); +} + +BtxqSspDebugService::~BtxqSspDebugService() +{ + +} + +void BtxqSspDebugService::toggleSspDebugMode() +{ + mCurrentRequestIndex = setCurrentRequestAsync(); + + TInt sspDebugMode( EBTSspDebugModeOff ); + + // Get current status + TInt err = RProperty::Get( KPSUidBluetoothDutMode, KBTSspDebugmode, + sspDebugMode ); + + if ( !err ) + { + if( sspDebugMode == EBTDutOff ) + { + // The Ssp debug mode is turned off, turn it on. + err = RProperty::Set( KPSUidBluetoothDutMode, + KBTSspDebugmode, + EBTSspDebugModeOn ); + } + else + { + // The Ssp debug mode is turned on, turn it off. + err = RProperty::Set( KPSUidBluetoothDutMode, + KBTSspDebugmode, + EBTSspDebugModeOff ); + } + } + + mError = err; + + // Complete the service request with error code, if any. + QVariant retVal(mError); + completeRequest(mCurrentRequestIndex, retVal); +} diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/src/main.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2009 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 +#include "btxqaddrservice.h" +#include "btxqpowerservice.h" +#include "btxqdutservice.h" +#include "btxqsspdebugservice.h" + + +int main(int argc, char **argv) +{ + QCoreApplication a( argc, argv ); + + BtxqAddrService* btAddrService = new BtxqAddrService(); + BtxqPowerService* btToggleService = new BtxqPowerService(); + BtxqDutService* btDutService = new BtxqDutService(); + BtxqSspDebugService* btSspDebugService = new BtxqSspDebugService(); + + int retVal = a.exec(); + + delete btSspDebugService; + delete btDutService; + delete btToggleService; + delete btAddrService; + + return retVal; +} + diff -r 625f43ae9362 -r 5ebadcda06cb bluetoothengine/btxqservice/xml/btxqservice_conf.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btxqservice/xml/btxqservice_conf.xml Fri Sep 03 16:17:59 2010 +0300 @@ -0,0 +1,16 @@ + + + BT XQ services + + Display the local Bluetooth device address + + + Toggle BT power state + + + Activates the Device test mode (DUT) + + + Toggle the Bluetooth SSP debug mode + + \ No newline at end of file diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/inc/BTServiceParameterList.h --- a/btobexprofiles/inc/BTServiceParameterList.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,239 +0,0 @@ -/* -* Copyright (c) 2002 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: Parameter list -* -*/ - - -#ifndef BT_SERVICE_PARAMETER_LIST_H -#define BT_SERVICE_PARAMETER_LIST_H - -// INCLUDES -#include -#include // CDesCArray -#include - -// CONSTANTS - -// DATA TYPES - -struct TBTSUXhtmlParam - { - TDesC* iFileName; - CDesCArray* iRefObjectList; - }; - -struct TBTSUImageParam - { - RFile iFile; - TDesC* iDisplayName; - TDesC8* iMimeType; - TSize iPixelSize; - TInt iFileSize; - TBool iSend; - - }; - - -// CLASS DECLARATION - -/** -* A class holding paths to different types of files. -* -* In case of an XHTML file the list collects paths -* to objects referenced in the file. -* -* In case of an image the list resolves the MIME types and -* displayable names of the images. -* -* @lib BtServiceUtils.lib -* @since Series 60 2.6 -*/ -class CBTServiceParameterList : public CBase - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - IMPORT_C static CBTServiceParameterList* NewL(); - IMPORT_C static CBTServiceParameterList* NewLC(); - - /** - * Destructor. - */ - virtual ~CBTServiceParameterList(); - - public: // New functions - - /** - * Adds an xhtml file path to the list. - * @since Series 60 2.6 - * @param aFilePath A full path and file name. - * @return None. - */ - IMPORT_C void AddXhtmlL( const TDesC& aFilePath ); - - /** - * Adds an image file path to the list. - * @since Series 60 2.6 - * @param aFilePath A full path and file name. - * @return None. - */ - IMPORT_C void AddImageL( const TDesC& aFilePath ); - - /** - * Adds an image file path to the list. - * @since Series 60 2.6 - * @param aFile file handle to be send. - * @return None. - */ - IMPORT_C void AddImageL( RFile aFile ); - - /** - * Adds an object file path to the list. - * @since Series 60 2.6 - * @param aFilePath A full path and file name. - * @return None. - */ - IMPORT_C void AddObjectL( const TDesC& aFilePath ); - - /** - * Adds an object file path to the list. - * @since Series 60 2.6 - * @param aFile file handle to be send . - * @return None. - */ - IMPORT_C void AddObjectL( RFile aFile ); - - public: // New functions (not exported) - - /** - * Return the number of xhtml file paths in the list. - * @return The count. - */ - TInt XhtmlCount() const; - - /** - * Return the number of image file paths in the list. - * @return The count. - */ - TInt ImageCount() const; - - /** - * Return the number of object file paths in the list. - * @return The count. - */ - TInt ObjectCount() const; - - /** - * Returns a copy of an element of the list from the given index. - * @param aIndex The index. - * @return The element. - */ - TBTSUXhtmlParam XhtmlAt( TInt aIndex ) const; - - /** - * Returns a copy of an element of the list from the given index. - * @param aIndex The index. - * @return The element. - */ - TBTSUImageParam ImageAtL( TInt aIndex ) const; - - /** - * Returns a copy of an element of the list from the given index. - * @param aIndex The index. - * @return The element. - */ - RFile& ObjectAtL( TInt aIndex ); - - /** - * Checks whether the list has any xhtml-files with referenced objects. - * @return A boolean according to result. - */ - TBool HasAnyReferencedObjects() const; - - /** - * Return the size of objects in the list. - * @return The count. - */ - TInt ObjectListSizeL() const; - - /** - * Return the size of images in the list. - * @return The count. - */ - - TInt ImageListSize() const; - - /** - * Remove image from list. - * @param aIndex The index. - * @return None. - */ - void RemoveImageL(TInt aIndex); - - /** - * Return count of removed image - * @return The count of removed images. - */ - TInt RemovedImageCount(); - - /** - * Reset image filehandle - * @param aIndex The index. - * @return None. - */ - void ResetImageHandleL(TInt aIndex); - - /** - * Reset object filehandle - * @param aIndex The index. - * @return None. - */ - void ResetObjectHandleL(TInt aIndex); - - - /** - * Reset image filehandle - * @param aIndex The index. - * @return None. - */ - void MarkAsSendL(TInt aIndex); - - - private: - - /** - * C++ default constructor. - */ - CBTServiceParameterList(); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - private: // Data - - RArray iXhtmlList; - RArray iImageList; - RArray iObjectList; - RFs iFileSession; - TInt iRemovedImageCount; - }; - -#endif // BT_SERVICE_PARAMETER_LIST_H - -// End of File diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/inc/btserviceapi.h --- a/btobexprofiles/inc/btserviceapi.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* Copyright (c) 2002 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: API for sending services -* -*/ - - - -#ifndef BT_SERVICE_API_H -#define BT_SERVICE_API_H - -// INCLUDES -#include "BTServiceParameterList.h" - -// CONSTANTS - -// DATA TYPES - -enum TBTServiceType - { - EBTSendingService, - EBTPrintingService, - EBTObjectPushService // use this if support for only OPP is wanted - }; - -// FORWARD DECLARATIONS -class CBTServiceStarter; - -// CLASS DECLARATION - -/** -* An API for starting Bluetooth services. -* -* @lib BtServiceUtils.lib -* @since Series 60 2.6 -*/ -class CBTServiceAPI : public CBase - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - IMPORT_C static CBTServiceAPI* NewL(); - - /** - * Destructor. - */ - virtual ~CBTServiceAPI(); - - public: // New functions - - /** - * Starts the given service. - * Returns when service is started. - * @since Series 60 2.6 - * @param aService The service to be started. - * @param aList Parameters for the service. - * @return None. - */ - IMPORT_C void StartServiceL( TBTServiceType aService, - CBTServiceParameterList* aList ); - - /** - * Starts the given service. - * Returns when service is completed. - * @since Series 60 2.6 - * @param aService The service to be started. - * @param aList Parameters for the service. - * @return None. - */ - IMPORT_C void StartSynchronousServiceL( TBTServiceType aService, - CBTServiceParameterList* aList ); - private: - - /** - * C++ default constructor. - */ - CBTServiceAPI(); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - private: // Data - - CBTServiceStarter* iStarter; - CActiveSchedulerWait iSyncWaiter; - }; - -#endif // BT_SERVICE_API_H - -// End of File diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/inc/obexutilsdialog.h --- a/btobexprofiles/inc/obexutilsdialog.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,271 +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: -* -*/ - - -#ifndef COBEXUTILSDIALOG_H -#define COBEXUTILSDIALOG_H - -#include - -#include -#include -#include -#include - -class CObexUtilsDialogTimer; - -enum TButtonId - { - ECancelButton = -1, - EYesButton, - ENoButton - }; -/** -* An observer interface for asking progress status of an operation using -* a progress dialog. -*/ -NONSHARABLE_CLASS( MObexUtilsProgressObserver ) - { - public: - - /** - * Returns the progress status of the operation. - * @since 2.6 - * @return A progress value relative to final value. - */ - virtual TInt GetProgressStatus() = 0; - }; - -// CLASS DECLARATION - -/** -* An observer interface for informing about dialog events. -*/ -NONSHARABLE_CLASS( MObexUtilsDialogObserver ) - { - public: - - /** - * Informs the observer that a dialog has been dismissed. - * @since 2.6 - * todo check whether the parameter is required - * @param aButtonId The button that was used to dismiss the dialog. - */ - virtual void DialogDismissed(TInt aButtonId) = 0; //TInt aButtonId - }; - - -// CLASS DECLARATION - -/** -* A class for launching and managing dialogs. -*/ -NONSHARABLE_CLASS( CObexUtilsDialog ) : public CBase, - public MHbDeviceProgressDialogObserver, - public MHbDeviceDialogObserver, - public MHbDeviceMessageBoxObserver - { - public:// Constructors and destructor - - /** - * Two-phased constructor. - */ - IMPORT_C static CObexUtilsDialog* NewL( - MObexUtilsDialogObserver* aObserverPtr ); - - IMPORT_C static CObexUtilsDialog* NewLC( - MObexUtilsDialogObserver* aObserverPtr ); - - /** - * Destructor. - */ - virtual ~CObexUtilsDialog(); - - public: // New functions - - - /** - * Launches a progress dialog. - * @param aObserverPtr A pointer to progress observer. A NULL pointer if - the progress dialog is updated manually. - * @param aFileCount Total number of files to be sent. - * @param aDeviceName Device Name to which files to be sent. - * @param aTimeoutValue A value telling how often should the dialog be - updated. Relevant only if observer is given. - */ - IMPORT_C void LaunchProgressDialogL( - MObexUtilsProgressObserver* aObserverPtr, TInt aFileCount, - const TDesC& aDeviceName, TInt aTimeoutValue ); - - /** - * Updates the progress dialog with new file information when multiples files are sent. - * @param aFileSize Size of the file to be sent - * @param aFileIndex Index of the file to be sent - * @param aFileName Name of the file to be sent. - */ - IMPORT_C void UpdateProgressNoteL( TInt aFileSize,TInt aFileIndex, const TDesC& aFileName ); - - /** - * Launches a wait dialog. - * @param aDisplayText Text that needs to be displayed. - */ - IMPORT_C void LaunchWaitDialogL( const TDesC& aDisplayText ); - - /** - * Cancels a wait dialog if one exists. - * @since 2.6 - * @return None. - */ - IMPORT_C void CancelWaitDialog(); - - /** - * Cancels a wait progress dialog if one exists. - * @since 2.6 - * @return None. - */ - IMPORT_C void CancelProgressDialog(); - - /** - * Updates a progress dialog with the latest progress value - * @param aValue A progress value relative to final value. - * @return None - */ - IMPORT_C void UpdateProgressDialogL( TInt aProgressValue ); - - /** - * Show a query note - * @param aConfirmText text for the note. - * @return None - */ - IMPORT_C void LaunchQueryDialogL( const TDesC& aConfirmText ); - - /** - * Shows an error note. - * @param aTextId A resource id for the note. - * @return None. - */ - IMPORT_C void ShowErrorNoteL( const TDesC& aErrorText ); - - /** - * Shows an information note. - * @param aTextId A resource id for the note. - * @return None. - */ - IMPORT_C void ShowInformationNoteL( const TDesC& aInfoText ); - - public: // New functions (not exported) - - /** - * Updates the progress dialog. - * @return None. - */ - void UpdateProgressDialog(); - - private: // Functions from base classes - - /** - * From MHbDeviceProgressDialogObserver called when dialog is closed by pressing the "cancel" button - * @param aDialog Pointer to dialog that was cancelled. - * @return None. - */ - void ProgressDialogCancelled(const CHbDeviceProgressDialogSymbian* aDialog); - - /** - * From MHbDeviceProgressDialogObserver called when a device progress dialog is has closed - * @param aDialog Pointer to dialog instance that has closed. - * @return None. - */ - void ProgressDialogClosed(const CHbDeviceProgressDialogSymbian* aDialog ) ; - - /** - * From MHbDeviceDialogObserver called when data is received from a device dialog - * @param aDialog Pointer to dialog instance that has closed. - * @return None. - */ - void DataReceived(CHbSymbianVariantMap& aData); - - /** - * From MHbDeviceDialogObserver called when a device dialog is closed - * @param aData contains data from the dialog plugin. - * @return None. - */ - void DeviceDialogClosed(TInt aCompletionCode); - - /** - * from base class MHbDeviceMessageBoxObserver - * @param aMessageBox Pointer to dialog instance that has closed. - * @param aButton the id of the button the user pressed - */ - void MessageBoxClosed(const CHbDeviceMessageBoxSymbian *aMessageBox, - CHbDeviceMessageBoxSymbian::TButtonId aButton); - - private: - - /** - * C++ default constructor. - */ - CObexUtilsDialog( MObexUtilsDialogObserver* aObserverPtr ); - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(); - - /** - * Add a data item into the given CHbSymbianVariantMap. - * @param aMap the instance to which the data item will be added. - * @param aKey the key of the data item. - * @param aData the value of the data item - * @param aDataType the data-type of the data item - */ - void AddDataL(CHbSymbianVariantMap* aMap, const TDesC& aKey, - const TAny* aData, CHbSymbianVariant::TType aDataType); - - /** - * Creates and shows a message box. - * @param aType the type of the message box to create. - * @param aText the text to be shown in the message box - * @param aObserver the observer that receives the events from the - * message box - * @param aTimeout the timeout value of the message box - */ - CHbDeviceMessageBoxSymbian* CreateAndShowMessageBoxL( - CHbDeviceMessageBoxSymbian::TType aType, - const TDesC& aText, - MHbDeviceMessageBoxObserver* aObserver, - TInt aTimeout ); - - private: // Data - - CHbDeviceDialogSymbian *iProgressDialog; - CHbDeviceProgressDialogSymbian* iWaitDialog; - CHbDeviceMessageBoxSymbian* iMessageBox; - - CObexUtilsDialogTimer* iObexDialogTimer; - TInt iFileIndex; - TInt iFileCount; - RBuf iDeviceName; - - // Not Owned - // - MObexUtilsProgressObserver* iProgressObserverPtr; - MObexUtilsDialogObserver* iDialogObserverPtr; - }; - -#endif // COBEXUTILSDIALOG_H - -// End of File diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/inc/obexutilspropertynotifier.h --- a/btobexprofiles/inc/obexutilspropertynotifier.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/* -* Copyright (c) 2004 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: Declares disk status watcher class for ObexUtils. -* -*/ - - - -#ifndef _OBEXUTILSPROPERTYNOTIFIER_H -#define _OBEXUTILSPROPERTYNOTIFIER_H - -// INCLUDES -#include -#include -#include - -// CLASS DECLARATION - - /** - Type of memory property check, - @param ECheckPhoneMemory, phone memory is checked, default value if not mentioned explicitly. - @param ECheckMMCMemory, MMC memory is checked. - */ - -enum TMemoryPropertyCheckType - { - ECheckPhoneMemory, - ECheckMMCMemory - }; - - /** - A callback interface for informing content change of disk status. Client must derive - from this class and implement HandleNotifyL() method. When disk space will cross warning - level or critical level this method will be call back. - */ - -NONSHARABLE_CLASS( MObexUtilsPropertyNotifyHandler ) - { - public: - /** - * Callback method for disk status change - * @param aUid UID identifying a shared data file where notify came from. - * @param aKey keyword of which value was changed - */ - virtual void HandleNotifyL( TMemoryPropertyCheckType aCheckType ) =0; - }; - -NONSHARABLE_CLASS( CObexUtilsPropertyNotifier ) : public CActive - { -public: // NewL, Constructors and destructor - - /* - * Two-phased constructor. - * @param aHandler -Pointer to the MObexUtilsPropertyNotifyHandler derived class - * @param aCheckType -Constant defining type of memory checking to be done (phone/MMC) - * @return CObexUtilsPropertyNotifier* -Initialized object. - */ - - IMPORT_C static CObexUtilsPropertyNotifier* NewL( - MObexUtilsPropertyNotifyHandler* aHandler, - TMemoryPropertyCheckType aCheckType=ECheckPhoneMemory ); - - /** - * Destructor. - */ - - virtual ~CObexUtilsPropertyNotifier(); -private: // Functions from base classes - - /** - * Constructor. - * @param aHandler -Pointer to the MObexUtilsPropertyNotifyHandler derived class - * @param aCheckType -Constant defining type of memory checking to be done (phone/MMC) - */ - - CObexUtilsPropertyNotifier( - MObexUtilsPropertyNotifyHandler* aHandler, - TMemoryPropertyCheckType aCheckType ); - - void ConstructL(); - - /** - Subscribes to a property and sets active - */ - void Subscribe(); - - /** - * From CActive Gets called when CActive::Cancel is called, - * cancels disk status watching. - * - * @param None. - * @return None. - */ - - void DoCancel(); - - /** - * From CActive Gets called when content of disk status is changed, - * calls MObexUtilsPropertyNotifyHandler::HandleNotify. - * - * @param None. - * @return None. - */ - - void RunL(); - -private: - // Reference to observer - MObexUtilsPropertyNotifyHandler* iHandler; - // Type of memory check (phone/MMC) - TMemoryPropertyCheckType iCheckType; - // Database handle - RProperty iProperty; - }; - -#endif // _OBEXUTILSPROPERTYNOTIFIER_H diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/bip/group/obexservicebip.mmp --- a/btobexprofiles/obexreceiveservices/bip/group/obexservicebip.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/bip/group/obexservicebip.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,7 @@ USERINCLUDE ../inc -SYSTEMINCLUDE ../../../inc ../../../../inc +SYSTEMINCLUDE ../../../obexserviceman/utils/inc MW_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/bip/inc/BIPController.h --- a/btobexprofiles/obexreceiveservices/bip/inc/BIPController.h Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/bip/inc/BIPController.h Fri Sep 03 16:17:59 2010 +0300 @@ -30,7 +30,6 @@ #include #include #include "btengdevman.h" -#include #include #include @@ -58,8 +57,7 @@ * The main controller for Basic Imaging Profile. */ NONSHARABLE_CLASS (CBIPController): public CSrcsInterface, public MObexServerNotify, - public MObexUtilsPropertyNotifyHandler, - public MObexUtilsDialogObserver, + public MObexUtilsPropertyNotifyHandler, public MBTEngDevManObserver, public MHbDeviceDialogObserver { @@ -94,9 +92,6 @@ private: // from MBTEngDevManObserver void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray); -private: //from MObexUtilsDialogObserver - void DialogDismissed(TInt aButtonId); - private: CBIPController(); void ConstructL(); @@ -118,6 +113,11 @@ TBool IsBackupRunning(); TBool ProcessExists( const TSecureId& aSecureId ); + void LaunchFailureDialogL(); + void LaunchMemoryFullDialogL(TInt aDrive); + void AddParamL(const TInt aKey, const TAny* aValue, + CHbSymbianVariant::TType aValueType, CHbSymbianVariantMap& aVariantMap); + private: void DataReceived(CHbSymbianVariantMap& aData); void DeviceDialogClosed(TInt aCompletionCode); @@ -161,13 +161,14 @@ TBTDeviceName iRemoteDeviceName; TFileName iReceivingFileName; TFileName iCenRepFolder; - CObexUtilsDialog* iDialog; CHbDeviceDialogSymbian* iProgressDialog; TBool iDialogActive; TInt iFileCount; + CHbDeviceDialogSymbian* iFailureDialog; TBool iReceivingFailed; CHbDeviceDialogSymbian* iRecvDoneDialog; TBool iShowRecvCompleteDialog; + CHbDeviceDialogSymbian* iMemoryFullDailog; }; _LIT(KBipPanicCategory, "BIP"); diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp --- a/btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -34,15 +34,14 @@ #include #include "debug.h" #include -#include // CONSTANTS _LIT8(KBipCapabilityType, "x-bt/img-capabilities\0"); const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3 const TInt KBufferSize = 0x10000; // 64 kB _LIT( KBTDevDialogId, "com.nokia.hb.btdevicedialog/1.0" ); -_LIT(KLocFileName, "btdialogs_"); -_LIT(KPath, "z:/resource/qt/translations/"); +const TInt KMaxDisplayFileName = 20; +const TInt KMinStringSize = 11; // ================= MEMBER FUNCTIONS ======================= @@ -78,12 +77,6 @@ iResultArray = new(ELeave) CBTDeviceArray(1); // Get default folder from CenRep TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine, KLCReceiveFolder, iCenRepFolder); - iDialog = CObexUtilsDialog::NewL(this); - TBool ok = HbTextResolverSymbian::Init(KLocFileName, KPath); - if (!ok) - { - User::Leave( KErrNotFound ); - } TRACE_FUNC_EXIT } @@ -108,9 +101,12 @@ delete iResultArray; } iFs.Close(); - delete iDialog; + delete iProgressDialog; + delete iFailureDialog; delete iRecvDoneDialog; + delete iMemoryFullDailog; + TRACE_FUNC_EXIT } @@ -144,17 +140,16 @@ iShowRecvCompleteDialog = EFalse; if( iBTTransferState == ETransferPut || (!aAbort && iBTTransferState == ETransferPutDiskError) ) { + CancelTransfer(); + + TRAP_IGNORE( + LaunchFailureDialogL(); + ); + if(iBTObject) { iBTObject->Reset(); } - CancelTransfer(); - - TRAP_IGNORE( - HBufC* note = HbTextResolverSymbian::LoadLC(_L("txt_bt_dpophead_receiving_failed")); - iDialog->ShowErrorNoteL(note->Des()); - CleanupStack::PopAndDestroy(note); - ); } delete iBuf; iBuf = NULL; @@ -253,6 +248,20 @@ TRACE_FUNC if(!iReceivingFailed && iShowRecvCompleteDialog) { + TFileName shortname; + if ( iReceivingFileName.Length() > KMaxDisplayFileName ) + { + // Filename is too long, + // We make it shorter. Hiding the chars in the middle part of filename. + shortname = iReceivingFileName.Mid(0,KMaxDisplayFileName/2); + shortname.Append(_L("...")); + shortname.Append(iReceivingFileName.Mid(iReceivingFileName.Length() - KMaxDisplayFileName/2, KMaxDisplayFileName/2)); + } + else + { + shortname.Copy(iReceivingFileName); + } + //Launch recevice completed dialog. iRecvDoneDialog = CHbDeviceDialogSymbian::NewL(); iRecvDoneDialog->SetObserver(this); @@ -261,46 +270,28 @@ CleanupStack::PushL(variantMap); TInt dialogIdx = TBluetoothDialogParams::EReceiveDone; - CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), - CHbSymbianVariant::EInt ); - CleanupStack::PushL(dialogType); - TBuf16<6> dialogTypeKey; - dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); - User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); - CleanupStack::Pop(dialogType); + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(deviceName); - TBuf16<6> deviceNameKey; - deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); - User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); - CleanupStack::Pop(deviceName); + AddParamL(TBluetoothDeviceDialog::EDeviceName, (TAny*) &iRemoteDeviceName, + CHbSymbianVariant::EDes, *variantMap); + + AddParamL(TBluetoothDeviceDialog::EReceivingFileName, (TAny*) &shortname, + CHbSymbianVariant::EDes, *variantMap); - CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(fileName); - TBuf16<6> fileNameKey; - fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); - User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); - CleanupStack::Pop(fileName); + AddParamL(TBluetoothDeviceDialog::EReceivingFileSize, (TAny*) &iTotalSizeByte, + CHbSymbianVariant::EInt, *variantMap); + + AddParamL(TBluetoothDeviceDialog::EReceivedFileCount, (TAny*) &iFileCount, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileSz); - TBuf16<6> fileSzKey; - fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); - User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); - CleanupStack::Pop(fileSz); - - CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileCnt); - TBuf16<6> fileCntKey; - fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); - User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); - CleanupStack::Pop(fileCnt); - + TBuf key(_L("OpenCnvView")); + TBool option = ETrue; + CHbSymbianVariant* value = CHbSymbianVariant::NewL( (TAny*) &option, CHbSymbianVariant::EBool ); + CleanupStack::PushL(value); + variantMap->Add(key, value); + CleanupStack::Pop(value); + iRecvDoneDialog->Show( KBTDevDialogId(), *variantMap, this ); CleanupStack::PopAndDestroy(variantMap); @@ -383,8 +374,9 @@ { //TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); //todo: Need to use Localized string. - _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); - TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); + //_LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); + //TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); + LaunchMemoryFullDialogL(iDrive); return KErrDiskFull; } @@ -592,9 +584,10 @@ { //TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); //todo: Need to use Localized string. - _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); - TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); - + //_LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); + //TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); + + LaunchMemoryFullDialogL(iDrive); User::Leave(KErrGeneral); } @@ -831,6 +824,20 @@ { if(iReceivingFileName.Length() > 0) { + TFileName shortname; + if ( iReceivingFileName.Length() > KMaxDisplayFileName ) + { + // Filename is too long, + // We make it shorter. Hiding the chars in the middle part of filename. + shortname = iReceivingFileName.Mid(0,KMaxDisplayFileName/2); + shortname.Append(_L("...")); + shortname.Append(iReceivingFileName.Mid(iReceivingFileName.Length() - KMaxDisplayFileName/2, KMaxDisplayFileName/2)); + } + else + { + shortname.Copy(iReceivingFileName); + } + iProgressDialog = CHbDeviceDialogSymbian::NewL(); iProgressDialog->SetObserver(this); @@ -838,46 +845,21 @@ CleanupStack::PushL(variantMap); TInt dialogIdx = TBluetoothDialogParams::EReceiveProgress; - CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), - CHbSymbianVariant::EInt ); - CleanupStack::PushL(dialogType); - TBuf16<6> dialogTypeKey; - dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); - User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); - CleanupStack::Pop(dialogType); + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(deviceName); - TBuf16<6> deviceNameKey; - deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); - User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); - CleanupStack::Pop(deviceName); + AddParamL(TBluetoothDeviceDialog::EDeviceName, (TAny*) &iRemoteDeviceName, + CHbSymbianVariant::EDes, *variantMap); - CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(fileName); - TBuf16<6> fileNameKey; - fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); - User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); - CleanupStack::Pop(fileName); + AddParamL(TBluetoothDeviceDialog::EReceivingFileName, (TAny*) &shortname, + CHbSymbianVariant::EDes, *variantMap); - CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileSz); - TBuf16<6> fileSzKey; - fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); - User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); - CleanupStack::Pop(fileSz); + AddParamL(TBluetoothDeviceDialog::EReceivingFileSize, (TAny*) &iTotalSizeByte, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileCnt); - TBuf16<6> fileCntKey; - fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); - User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); - CleanupStack::Pop(fileCnt); - + AddParamL(TBluetoothDeviceDialog::EReceivedFileCount, (TAny*) &iFileCount, + CHbSymbianVariant::EInt, *variantMap); + iDialogActive = ETrue; iProgressDialog->Show( KBTDevDialogId(), *variantMap, this ); CleanupStack::PopAndDestroy(variantMap); @@ -911,7 +893,7 @@ CleanupStack::PushL(progress); User::LeaveIfError(variantMap->Add(_L("progress"), progress)); CleanupStack::Pop(progress); - + iProgressDialog->Update(*variantMap); CleanupStack::PopAndDestroy(variantMap); } @@ -1054,11 +1036,6 @@ return EFalse; } - void CBIPController::DialogDismissed(TInt aButtonId) - { - (void) aButtonId; - } - void CBIPController::DataReceived(CHbSymbianVariantMap& aData) { if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0) @@ -1086,6 +1063,8 @@ delete iRecvDoneDialog; iRecvDoneDialog = NULL; }break; + default: + break; } } } @@ -1095,7 +1074,94 @@ (void) aCompletionCode; } + void CBIPController::LaunchFailureDialogL() + { + if(iFailureDialog) + { + iFailureDialog->Cancel(); + delete iFailureDialog; + iFailureDialog = NULL; + } + + iFailureDialog = CHbDeviceDialogSymbian::NewL(); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt dialogIdx = TBluetoothDialogParams::EInformationDialog; + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); + + AddParamL(TBluetoothDeviceDialog::EDeviceName, (TAny*) &iRemoteDeviceName, + CHbSymbianVariant::EDes, *variantMap); + + TInt dialogTitleIdx = TBluetoothDialogParams::ERecvFailed; + AddParamL(TBluetoothDialogParams::EDialogTitle, (TAny*) &dialogTitleIdx, + CHbSymbianVariant::EInt, *variantMap); + + TUint32 deviceClass = iResultArray->At(0)->DeviceClass().DeviceClass(); + AddParamL(TBluetoothDeviceDialog::EDeviceClass, (TAny*) &deviceClass, + CHbSymbianVariant::EInt, *variantMap); + + iFailureDialog->Show( KBTDevDialogId(), *variantMap ); + CleanupStack::PopAndDestroy(variantMap); + + iReceivingFailed = EFalse; + } -//////////////////////////// Global part //////////////////////////// + void CBIPController::LaunchMemoryFullDialogL(TInt aDrive) + { + if(iMemoryFullDailog) + { + iMemoryFullDailog->Cancel(); + delete iMemoryFullDailog; + iMemoryFullDailog = NULL; + } + + iMemoryFullDailog = CHbDeviceDialogSymbian::NewL(); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt dialogIdx = TBluetoothDialogParams::EInformationDialog; + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); + + TInt dialogTitleIdx = TBluetoothDialogParams::EMemoryFull; + AddParamL(TBluetoothDialogParams::EDialogTitle, (TAny*) &dialogTitleIdx, + CHbSymbianVariant::EInt, *variantMap); + + TChar driveLetter; + iFs.DriveToChar(aDrive, driveLetter); + AddParamL(TBluetoothDeviceDialog::EDriveLetter, (TAny*) &driveLetter, + CHbSymbianVariant::EChar, *variantMap); + + TVolumeInfo volumeInfo; + iFs.Volume(volumeInfo, aDrive); + AddParamL(TBluetoothDeviceDialog::EDriveName, (TAny*) &(volumeInfo.iName), + CHbSymbianVariant::EDes, *variantMap); + + iMemoryFullDailog->Show( KBTDevDialogId(), *variantMap ); + CleanupStack::PopAndDestroy(variantMap); + } + + void CBIPController::AddParamL(const TInt aKey, const TAny* aValue, + CHbSymbianVariant::TType aValueType, CHbSymbianVariantMap& aVariantMap) + { + //Prepare the key + TBuf key; + key.Num(aKey); + + //Prepare the value + CHbSymbianVariant* value = CHbSymbianVariant::NewL( aValue, aValueType ); + CleanupStack::PushL(value); + + //add the key-value pair to the variant map + User::LeaveIfError(aVariantMap.Add(key, value)); + + CleanupStack::Pop(value); + } + + //////////////////////////// Global part //////////////////////////// // End of File diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/btmsgviewer/btmsgviewer.pro --- a/btobexprofiles/obexreceiveservices/btmsgviewer/btmsgviewer.pro Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/btmsgviewer.pro Fri Sep 03 16:17:59 2010 +0300 @@ -38,12 +38,16 @@ libFiles.sources = xqservice.dll SERVICE.OPTIONS = embeddable \ hidden -libFiles.path = "!:\sys\bin" +libFiles.path = "!:/sys/bin" DEPLOYMENT += libFiles HEADERS += ./inc/btmsgviewer.h \ ./inc/btmsgviewerutils.h SOURCES += ./src/btmsgviewer.cpp \ ./src/main.cpp \ ./src/btmsgviewerutils.cpp +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ + ../inc \ + /epoc32/include/platform/mw/btservices + BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " \ "./rom/btmsgviewer.iby CORE_APP_LAYER_IBY_EXPORT_PATH(btmsgviewer.iby)" diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/btmsgviewer/inc/btmsgviewer.h --- a/btobexprofiles/obexreceiveservices/btmsgviewer/inc/btmsgviewer.h Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/inc/btmsgviewer.h Fri Sep 03 16:17:59 2010 +0300 @@ -25,6 +25,8 @@ #include "btmsgviewerutils.h" +class HbDeviceDialog; + class BTMsgViewer : public XQServiceProvider { @@ -36,14 +38,20 @@ public slots: void displaymsg(int messageId); + +private slots: + void handledialogClosed(); private: - bool isError(int aError); + bool isError(int err); QString copyVCardToTemp(const QString& filepath); void deleteVCardFromTemp(const QString& filepath); - + void launchErrordDialog(int dialogTitle); + private: int mCurrentRequestIndex; + HbDeviceDialog* mDialog; + int mError; }; #endif // BTMSGVIEWER_H diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/btmsgviewer/inc/btmsgviewerutils.h --- a/btobexprofiles/obexreceiveservices/btmsgviewer/inc/btmsgviewerutils.h Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/inc/btmsgviewerutils.h Fri Sep 03 16:17:59 2010 +0300 @@ -19,6 +19,8 @@ #define BTMSGVIEWERUTILS_H_ #include +#include +#include class CBtMsgViewerUtils: public CBase, public MMsvSessionObserver @@ -26,7 +28,7 @@ public: static CBtMsgViewerUtils* NewL(); ~CBtMsgViewerUtils(); - HBufC* GetMessagePath(TInt aMessageId, TInt aError); + HBufC* GetMessagePath(TInt aMessageId, TInt& aError); HBufC8* GetMimeType(); private: // From MMsvSessionObserver @@ -35,6 +37,7 @@ private: void GetMessagePathL(TPtr aMsgPath, const TInt aMessageId); void StoreMessageMimeTypeL(TPtr aMsgPath); + void LaunchFailureDialogL(TInt aDialogTitle); private: CBtMsgViewerUtils(); diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.cpp --- a/btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -25,20 +25,25 @@ #include #include #include +#include const QString KMimeTypeVCard("text/X-vCard"); +const QString deviceDialogType = "com.nokia.hb.btdevicedialog/1.0"; BTMsgViewer::BTMsgViewer(QObject* parent) -: XQServiceProvider("com.nokia.services.btmsgdispservices.displaymsg", parent), mCurrentRequestIndex(0) +: XQServiceProvider("com.nokia.services.btmsgdispservices.displaymsg", parent), + mCurrentRequestIndex(0), + mDialog(0), + mError(0) { publishAll(); - connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit())); + connect(this, SIGNAL(clientDisconnected()), qApp, SLOT(quit())); } -BTMsgViewer::~BTMsgViewer () +BTMsgViewer::~BTMsgViewer() { - + delete mDialog; } void BTMsgViewer::displaymsg( int messageId ) @@ -46,28 +51,39 @@ mCurrentRequestIndex = setCurrentRequestAsync(); CBtMsgViewerUtils* btViewerUtils = 0; - TRAPD(error, btViewerUtils = CBtMsgViewerUtils::NewL()); - if(isError(error)) + TRAP(mError, btViewerUtils = CBtMsgViewerUtils::NewL()); + if(isError(mError)) { if(btViewerUtils) delete btViewerUtils; - QVariant retVal(error); + QVariant retVal(mError); completeRequest(mCurrentRequestIndex, retVal); return; } HBufC* fileName = 0; - fileName = btViewerUtils->GetMessagePath(messageId, error); - if(isError(error)) + fileName = btViewerUtils->GetMessagePath(messageId, mError); + if( isError(mError)) { if(fileName) delete fileName; delete btViewerUtils; - - QVariant retVal(error); - completeRequest(mCurrentRequestIndex, retVal); + + if(mError == KErrNotFound || mError == KErrPathNotFound) + { + launchErrordDialog(TBluetoothDialogParams::EFileMoved); + } + else if(mError == KErrNotReady) + { + launchErrordDialog(TBluetoothDialogParams::EDriveNotFound); + } + else + { + QVariant retVal(mError); + completeRequest(mCurrentRequestIndex, retVal); + } return; } @@ -78,7 +94,7 @@ if(mimeType == KMimeTypeVCard) { - int error = KErrGeneral; + mError = KErrGeneral; /*todo: copyVCardToTemp() has to be removed when phonebook updates it's capabilites to access messages from private folder*/ @@ -98,11 +114,11 @@ bool res = request->send(retValue); if (!res) { - error = request->lastError(); + mError = request->lastError(); } else { - error = retValue.toInt(); + mError = retValue.toInt(); } delete request; @@ -112,7 +128,7 @@ access messages from private folder*/ deleteVCardFromTemp(newfilepath); - QVariant retVal(error); + QVariant retVal(mError); completeRequest(mCurrentRequestIndex, retVal); return; } @@ -157,7 +173,7 @@ args << qVariantFromValue(sf); request->setArguments(args); - int err = KErrNone; + int err = 0; bool res = request->send(); if (!res) { @@ -173,9 +189,9 @@ return; } -bool BTMsgViewer::isError(int aError) +bool BTMsgViewer::isError(int err) { - return ((aError < KErrNone)?true:false); + return ((err < 0)?true:false); } QString BTMsgViewer::copyVCardToTemp(const QString& filepath) @@ -193,3 +209,28 @@ { QFile::remove(filepath); } + +void BTMsgViewer::launchErrordDialog(int dialogTitle) +{ + if(!mDialog) + { + mDialog = new HbDeviceDialog(); + } + + connect(mDialog, SIGNAL(deviceDialogClosed()), this, SLOT(handledialogClosed())); + QVariantMap parameters; + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogType), + QString::number(TBluetoothDialogParams::EInformationDialog)); + + parameters.insert(QString::number(TBluetoothDialogParams::EDialogTitle), + QString::number(dialogTitle)); + + mDialog->show(deviceDialogType, parameters); +} + +void BTMsgViewer::handledialogClosed() +{ + QVariant retVal(mError); + completeRequest(mCurrentRequestIndex, retVal); +} diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewerutils.cpp --- a/btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewerutils.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewerutils.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -17,9 +17,17 @@ #include #include +#include +#include +#include +#include +#include #include "btmsgviewerutils.h" const TInt32 KUidMsgTypeBtTInt32 = 0x10009ED5; +#define KBioUidValue 0x10001262 +const TUid KBioUidValueUid = +{KBioUidValue}; CBtMsgViewerUtils* CBtMsgViewerUtils::NewL() @@ -47,10 +55,11 @@ { delete iMsvSession; } + delete iMimeType; } -HBufC* CBtMsgViewerUtils::GetMessagePath(TInt aMessageId, TInt aError) +HBufC* CBtMsgViewerUtils::GetMessagePath(TInt aMessageId, TInt& aError) { HBufC* fileName = NULL; TRAP(aError, fileName = HBufC::NewL(KMaxPath)); @@ -63,45 +72,104 @@ return fileName; } -void CBtMsgViewerUtils::GetMessagePathL(TPtr aMsgPath, const TInt aMessageId) +void CBtMsgViewerUtils::GetMessagePathL(TPtr aMsgPath, const TInt aMessageId ) { CMsvEntry* messageEntry = iMsvSession->GetEntryL(aMessageId); - CleanupStack::PushL(messageEntry); //1st push + CleanupStack::PushL(messageEntry); TMsvEntry entry = messageEntry->Entry(); if(entry.MtmData1() == KUidMsgTypeBtTInt32) { CMsvStore* store = messageEntry->ReadStoreL(); - CleanupStack::PushL(store); //2nd push - - //get file handle for the attachment & the complete path of the file + CleanupStack::PushL(store); + + TInt attachmentCount = store->AttachmentManagerL().AttachmentCount(); RFile attachmentFile; - attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0); - CleanupClosePushL(attachmentFile); //3rd push - User::LeaveIfError(attachmentFile.FullName(aMsgPath)); - CleanupStack::PopAndDestroy(&attachmentFile); - StoreMessageMimeTypeL(aMsgPath); - - //mark attachment as Read - TMsvEntry attachEntry = messageEntry->Entry(); - attachEntry.SetUnread(EFalse); - messageEntry->ChangeL(attachEntry); - + if(attachmentCount != 0) + { + //get file handle for the attachment & the complete path of the file + attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0); + CleanupClosePushL(attachmentFile); + User::LeaveIfError(attachmentFile.FullName(aMsgPath)); + CleanupStack::PopAndDestroy(&attachmentFile); + StoreMessageMimeTypeL(aMsgPath); + + //mark attachment as Read + TMsvEntry attachEntry = messageEntry->Entry(); + attachEntry.SetUnread(EFalse); + messageEntry->ChangeL(attachEntry); + } + else + { + CClientMtmRegistry* mtmReg = CClientMtmRegistry::NewL(*iMsvSession); + CleanupStack::PushL(mtmReg); //1st Push + + CBIOClientMtm* bioClientMtm = (CBIOClientMtm*) mtmReg->NewMtmL(KBioUidValueUid); + CleanupStack::PushL(bioClientMtm); //2nd Push + + bioClientMtm->SwitchCurrentEntryL(aMessageId); + + CMsvEntry* attachmentEntry = CMsvEntry::NewL(bioClientMtm->Session(), + aMessageId, + TMsvSelectionOrdering()); + CleanupStack::PushL(attachmentEntry); //3rd Push + + bioClientMtm->LoadMessageL(); + + CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(selection); //4th Push + + selection->AppendL(aMessageId); + + TBuf8<1> aParameter; + CMsvOperationActiveSchedulerWait* wait = CMsvOperationActiveSchedulerWait::NewLC(); + //5th Push + + CMsvOperation* operation = bioClientMtm->InvokeAsyncFunctionL(KBiosMtmParse, *selection, + aParameter, wait->iStatus); + + wait->Start(); + + CMsvStore* store = attachmentEntry->ReadStoreL(); + CleanupStack::PushL(store); //6th Push + MMsvAttachmentManager& attachMan = store->AttachmentManagerL(); + + attachmentFile = attachMan.GetAttachmentFileL(0); + CleanupClosePushL(attachmentFile); //7th Push + User::LeaveIfError(attachmentFile.FullName(aMsgPath)); + CleanupStack::PopAndDestroy(&attachmentFile); + StoreMessageMimeTypeL(aMsgPath); + + //mark attachment as Read + TMsvEntry attachEntry = attachmentEntry->Entry(); + attachEntry.SetUnread(EFalse); + attachmentEntry->ChangeL(attachEntry); + + delete operation; + CleanupStack::PopAndDestroy(6); + } CleanupStack::PopAndDestroy(store); - CleanupStack::PopAndDestroy(messageEntry); } else { CMsvEntry* attachmentEntry = iMsvSession->GetEntryL((*messageEntry)[0].Id()); - CleanupStack::PushL(attachmentEntry); //2nd push + CleanupStack::PushL(attachmentEntry); //1st push CMsvStore* store = attachmentEntry->ReadStoreL(); - CleanupStack::PushL(store); //3rd push + CleanupStack::PushL(store); //2nd push + + TBuf attachmentName(store->AttachmentManagerL().GetAttachmentInfoL(0)->AttachmentName()); + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + TEntry entry; + User::LeaveIfError(fs.Entry(attachmentName, entry)); + CleanupStack::PopAndDestroy(&fs); //get file handle for the attachment & the complete path of the file RFile attachmentFile; attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0); - CleanupClosePushL(attachmentFile); + CleanupClosePushL(attachmentFile); //3rd Push User::LeaveIfError(attachmentFile.FullName(aMsgPath)); CleanupStack::PopAndDestroy(&attachmentFile); StoreMessageMimeTypeL(aMsgPath); @@ -113,8 +181,8 @@ CleanupStack::PopAndDestroy(store); CleanupStack::PopAndDestroy(attachmentEntry); - CleanupStack::PopAndDestroy(messageEntry); } + CleanupStack::PopAndDestroy(messageEntry); } void CBtMsgViewerUtils::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/btmsgviewer/src/main.cpp --- a/btobexprofiles/obexreceiveservices/btmsgviewer/src/main.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/src/main.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -25,7 +25,7 @@ { HbApplication a( argc, argv ); - BTMsgViewer* btmsgviewer = new BTMsgViewer(); + QPointer btmsgviewer = new BTMsgViewer(); int retVal = a.exec(); delete btmsgviewer; diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/mtmuibluetooth/group/btmtmui.mmp --- a/btobexprofiles/obexreceiveservices/mtmuibluetooth/group/btmtmui.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/mtmuibluetooth/group/btmtmui.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -37,7 +37,8 @@ SOURCEPATH ../src USERINCLUDE ../inc -SYSTEMINCLUDE ../../../inc ../../../../inc +SYSTEMINCLUDE ../../../obexserviceman/utils/inc + SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/mtmuiinfrared/group/irmtmui.mmp --- a/btobexprofiles/obexreceiveservices/mtmuiinfrared/group/irmtmui.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/mtmuiinfrared/group/irmtmui.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -37,7 +37,6 @@ SOURCEPATH ../src USERINCLUDE ../inc -SYSTEMINCLUDE ../../../inc ../../../../inc MW_LAYER_SYSTEMINCLUDE SOURCE irmtmui.cpp diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/opp/group/obexserviceopp.mmp --- a/btobexprofiles/obexreceiveservices/opp/group/obexserviceopp.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/opp/group/obexserviceopp.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -36,7 +36,8 @@ USERINCLUDE ../inc -SYSTEMINCLUDE ../../../inc ../../../../inc /epoc32/include/ecom +SYSTEMINCLUDE ../../../obexserviceman/utils/inc +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/opp/inc/oppcontroller.h --- a/btobexprofiles/obexreceiveservices/opp/inc/oppcontroller.h Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/opp/inc/oppcontroller.h Fri Sep 03 16:17:59 2010 +0300 @@ -32,7 +32,6 @@ #include -#include #include #include @@ -58,7 +57,6 @@ */ class COPPController : public CSrcsInterface, public MObexServerNotify, public MObexUtilsPropertyNotifyHandler, - public MObexUtilsDialogObserver, public MBTEngDevManObserver, public MHbDeviceDialogObserver { @@ -93,9 +91,6 @@ private: // from MBTEngDevManObserver void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray); -private: //from MObexUtilsDialogObserver - void DialogDismissed(TInt aButtonId); - private: COPPController(); void ConstructL(); @@ -114,6 +109,11 @@ TBool IsBackupRunning(); TBool ProcessExists( const TSecureId& aSecureId ); + void LaunchFailureDialogL(); + void LaunchMemoryFullDialogL(TInt aDrive); + void AddParamL(const TInt aKey, const TAny* aValue, + CHbSymbianVariant::TType aValueType, CHbSymbianVariantMap& aVariantMap); + private: void DataReceived(CHbSymbianVariantMap& aData); void DeviceDialogClosed(TInt aCompletionCode); @@ -153,13 +153,14 @@ CBTEngDevMan* iDevMan; CBTDeviceArray* iResultArray; TBTDeviceName iRemoteDeviceName; - CObexUtilsDialog* iDialog; CHbDeviceDialogSymbian* iProgressDialog; TBool iDialogActive; TInt iFileCount; + CHbDeviceDialogSymbian* iFailureDialog; TBool iReceivingFailed; CHbDeviceDialogSymbian* iRecvDoneDialog; TBool iShowRecvCompleteDialog; + CHbDeviceDialogSymbian* iMemoryFullDailog; }; #endif // OPPCONTROLLER_H diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexreceiveservices/opp/src/oppcontroller.cpp --- a/btobexprofiles/obexreceiveservices/opp/src/oppcontroller.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/opp/src/oppcontroller.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -30,15 +30,14 @@ #include #include #include -#include // CONSTANTS const TInt KBufferSize = 0x10000; // 64 kB const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3 _LIT( KBTDevDialogId, "com.nokia.hb.btdevicedialog/1.0" ); -_LIT(KLocFileName, "btdialogs_"); -_LIT(KPath, "z:/resource/qt/translations/"); +const TInt KMaxDisplayFileName = 20; +const TInt KMinStringSize = 11; // ================= MEMBER FUNCTIONS ======================= @@ -69,12 +68,6 @@ TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine, KLCReceiveFolder, iCenRepFolder); - iDialog = CObexUtilsDialog::NewL(this); - TBool ok = HbTextResolverSymbian::Init(KLocFileName, KPath); - if (!ok) - { - User::Leave( KErrNotFound ); - } } COPPController::~COPPController() @@ -91,9 +84,11 @@ delete iResultArray; } iFs.Close(); - delete iDialog; + delete iProgressDialog; + delete iFailureDialog; delete iRecvDoneDialog; + delete iMemoryFullDailog; } // --------------------------------------------------------- @@ -122,25 +117,21 @@ TRACE_ERROR((_L( "[oppreceiveservice] COPPController:HandleError" ))); iReceivingFailed = ETrue; iShowRecvCompleteDialog = EFalse; - if( iObexTransferState == ETransferPut || iObexTransferState == ETransferPutDiskError ) + if( iObexTransferState == ETransferPut || (!aAbort && iObexTransferState == ETransferPutDiskError) ) { + CancelTransfer(); + if(iMediaType == ESrcsMediaBT) + { + TRAP_IGNORE( + LaunchFailureDialogL(); + ); + } + TRACE_ASSERT(iMediaType != ESrcsMediaIrDA, KErrNotSupported) + if(iObexObject) { iObexObject->Reset(); } - CancelTransfer(); - if(!aAbort) - { - if(iMediaType == ESrcsMediaBT) - { - TRAP_IGNORE( - HBufC* note = HbTextResolverSymbian::LoadLC(_L("txt_bt_dpophead_receiving_failed")); - iDialog->ShowErrorNoteL(note->Des()); - CleanupStack::PopAndDestroy(note); - ); - } - TRACE_ASSERT(iMediaType != ESrcsMediaIrDA, KErrNotSupported) - } } delete iBuf; iBuf = NULL; @@ -224,54 +215,50 @@ TRACE_FUNC if(!iReceivingFailed && iShowRecvCompleteDialog) { + TFileName shortname; + if ( iReceivingFileName.Length() > KMaxDisplayFileName ) + { + // Filename is too long, + // We make it shorter. Hiding the chars in the middle part of filename. + shortname = iReceivingFileName.Mid(0,KMaxDisplayFileName/2); + shortname.Append(_L("...")); + shortname.Append(iReceivingFileName.Mid(iReceivingFileName.Length() - KMaxDisplayFileName/2, KMaxDisplayFileName/2)); + } + else + { + shortname.Copy(iReceivingFileName); + } + //Launch recevice completed dialog. iRecvDoneDialog = CHbDeviceDialogSymbian::NewL(); iRecvDoneDialog->SetObserver(this); CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); CleanupStack::PushL(variantMap); - + TInt dialogIdx = TBluetoothDialogParams::EReceiveDone; - CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), - CHbSymbianVariant::EInt ); - CleanupStack::PushL(dialogType); - TBuf16<6> dialogTypeKey; - dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); - User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); - CleanupStack::Pop(dialogType); + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(deviceName); - TBuf16<6> deviceNameKey; - deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); - User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); - CleanupStack::Pop(deviceName); + AddParamL(TBluetoothDeviceDialog::EDeviceName, (TAny*) &iRemoteDeviceName, + CHbSymbianVariant::EDes, *variantMap); + + AddParamL(TBluetoothDeviceDialog::EReceivingFileName, (TAny*) &shortname, + CHbSymbianVariant::EDes, *variantMap); - CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(fileName); - TBuf16<6> fileNameKey; - fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); - User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); - CleanupStack::Pop(fileName); + AddParamL(TBluetoothDeviceDialog::EReceivingFileSize, (TAny*) &iTotalSizeByte, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileSz); - TBuf16<6> fileSzKey; - fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); - User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); - CleanupStack::Pop(fileSz); - - CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileCnt); - TBuf16<6> fileCntKey; - fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); - User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); - CleanupStack::Pop(fileCnt); - + AddParamL(TBluetoothDeviceDialog::EReceivedFileCount, (TAny*) &iFileCount, + CHbSymbianVariant::EInt, *variantMap); + + TBuf key(_L("OpenCnvView")); + TBool option = ETrue; + CHbSymbianVariant* value = CHbSymbianVariant::NewL( (TAny*) &option, CHbSymbianVariant::EBool ); + CleanupStack::PushL(value); + variantMap->Add(key, value); + CleanupStack::Pop(value); + iRecvDoneDialog->Show( KBTDevDialogId(), *variantMap, this ); CleanupStack::PopAndDestroy(variantMap); iShowRecvCompleteDialog = EFalse; @@ -349,11 +336,8 @@ } if(!capacity) { - //TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); - //todo: Need to use Localized string. - _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); - TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); - + LaunchMemoryFullDialogL(iDrive); + return KErrDiskFull; } } @@ -517,10 +501,7 @@ // if (SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, 0, iDrive )) { - //TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); - //todo: Need to use Localized string. - _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); - TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); + LaunchMemoryFullDialogL(iDrive); User::Leave(KErrGeneral); } @@ -786,53 +767,42 @@ { if(iReceivingFileName.Length() > 0) { + TFileName shortname; + if ( iReceivingFileName.Length() > KMaxDisplayFileName ) + { + // Filename is too long, + // We make it shorter. Hiding the chars in the middle part of filename. + shortname = iReceivingFileName.Mid(0,KMaxDisplayFileName/2); + shortname.Append(_L("...")); + shortname.Append(iReceivingFileName.Mid(iReceivingFileName.Length() - KMaxDisplayFileName/2, KMaxDisplayFileName/2)); + } + else + { + shortname.Copy(iReceivingFileName); + } + iProgressDialog = CHbDeviceDialogSymbian::NewL(); iProgressDialog->SetObserver(this); CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); CleanupStack::PushL(variantMap); - + TInt dialogIdx = TBluetoothDialogParams::EReceiveProgress; - CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), - CHbSymbianVariant::EInt ); - CleanupStack::PushL(dialogType); - TBuf16<6> dialogTypeKey; - dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); - User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); - CleanupStack::Pop(dialogType); + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(deviceName); - TBuf16<6> deviceNameKey; - deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); - User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); - CleanupStack::Pop(deviceName); + AddParamL(TBluetoothDeviceDialog::EDeviceName, (TAny*) &iRemoteDeviceName, + CHbSymbianVariant::EDes, *variantMap); - CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), - CHbSymbianVariant::EDes ); - CleanupStack::PushL(fileName); - TBuf16<6> fileNameKey; - fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); - User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); - CleanupStack::Pop(fileName); + AddParamL(TBluetoothDeviceDialog::EReceivingFileName, (TAny*) &shortname, + CHbSymbianVariant::EDes, *variantMap); - CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileSz); - TBuf16<6> fileSzKey; - fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); - User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); - CleanupStack::Pop(fileSz); + AddParamL(TBluetoothDeviceDialog::EReceivingFileSize, (TAny*) &iTotalSizeByte, + CHbSymbianVariant::EInt, *variantMap); - CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, - CHbSymbianVariant::EInt ); - CleanupStack::PushL(fileCnt); - TBuf16<6> fileCntKey; - fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); - User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); - CleanupStack::Pop(fileCnt); - + AddParamL(TBluetoothDeviceDialog::EReceivedFileCount, (TAny*) &iFileCount, + CHbSymbianVariant::EInt, *variantMap); + iDialogActive = ETrue; iProgressDialog->Show( KBTDevDialogId(), *variantMap, this ); CleanupStack::PopAndDestroy(variantMap); @@ -1019,11 +989,6 @@ return EFalse; } - void COPPController::DialogDismissed(TInt aButtonId) - { - (void) aButtonId; - } - void COPPController::DataReceived(CHbSymbianVariantMap& aData) { if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0) @@ -1051,6 +1016,8 @@ delete iRecvDoneDialog; iRecvDoneDialog = NULL; }break; + default: + break; } } } @@ -1059,7 +1026,95 @@ { (void) aCompletionCode; } + + void COPPController::LaunchFailureDialogL() + { + if(iFailureDialog) + { + iFailureDialog->Cancel(); + delete iFailureDialog; + iFailureDialog = NULL; + } -//////////////////////////// Global part //////////////////////////// + iFailureDialog = CHbDeviceDialogSymbian::NewL(); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt dialogIdx = TBluetoothDialogParams::EInformationDialog; + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); + + AddParamL(TBluetoothDeviceDialog::EDeviceName, (TAny*) &iRemoteDeviceName, + CHbSymbianVariant::EDes, *variantMap); + + TInt dialogTitleIdx = TBluetoothDialogParams::ERecvFailed; + AddParamL(TBluetoothDialogParams::EDialogTitle, (TAny*) &dialogTitleIdx, + CHbSymbianVariant::EInt, *variantMap); + + TUint32 deviceClass = iResultArray->At(0)->DeviceClass().DeviceClass(); + AddParamL(TBluetoothDeviceDialog::EDeviceClass, (TAny*) &deviceClass, + CHbSymbianVariant::EInt, *variantMap); + + iFailureDialog->Show( KBTDevDialogId(), *variantMap ); + CleanupStack::PopAndDestroy(variantMap); + + iReceivingFailed = EFalse; + } + + void COPPController::LaunchMemoryFullDialogL(TInt aDrive) + { + if(iMemoryFullDailog) + { + iMemoryFullDailog->Cancel(); + delete iMemoryFullDailog; + iMemoryFullDailog = NULL; + } + + iMemoryFullDailog = CHbDeviceDialogSymbian::NewL(); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + TInt dialogIdx = TBluetoothDialogParams::EInformationDialog; + AddParamL(TBluetoothDialogParams::EDialogType, (TAny*) &dialogIdx, + CHbSymbianVariant::EInt, *variantMap); + + TInt dialogTitleIdx = TBluetoothDialogParams::EMemoryFull; + AddParamL(TBluetoothDialogParams::EDialogTitle, (TAny*) &dialogTitleIdx, + CHbSymbianVariant::EInt, *variantMap); + + TChar driveLetter; + iFs.DriveToChar(aDrive, driveLetter); + AddParamL(TBluetoothDeviceDialog::EDriveLetter, (TAny*) &driveLetter, + CHbSymbianVariant::EChar, *variantMap); + + TVolumeInfo volumeInfo; + iFs.Volume(volumeInfo, aDrive); + AddParamL(TBluetoothDeviceDialog::EDriveName, (TAny*) &(volumeInfo.iName), + CHbSymbianVariant::EDes, *variantMap); + + iMemoryFullDailog->Show( KBTDevDialogId(), *variantMap ); + CleanupStack::PopAndDestroy(variantMap); + } + + void COPPController::AddParamL(const TInt aKey, const TAny* aValue, + CHbSymbianVariant::TType aValueType, CHbSymbianVariantMap& aVariantMap) + { + //Prepare the key + TBuf key; + key.Num(aKey); + + //Prepare the value + CHbSymbianVariant* value = CHbSymbianVariant::NewL( aValue, aValueType ); + CleanupStack::PushL(value); + + //add the key-value pair to the variant map + User::LeaveIfError(aVariantMap.Add(key, value)); + + CleanupStack::Pop(value); + } + + //////////////////////////// Global part //////////////////////////// + // End of File diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/group/bld.inf --- a/btobexprofiles/obexsendservices/group/bld.inf Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/group/bld.inf Fri Sep 03 16:17:59 2010 +0300 @@ -23,8 +23,7 @@ PRJ_EXPORTS -../obexservicesendutils/inc/BTServiceAPI.h |../../inc/btserviceapi.h -../obexservicesendutils/inc/BTServiceParameterList.h |../../inc/BTServiceParameterList.h + ../rom/obexservicesendutils.iby CORE_MW_LAYER_IBY_EXPORT_PATH(obexservicesendutils.iby) PRJ_MMPFILES diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/group/sendutils.mmp --- a/btobexprofiles/obexsendservices/group/sendutils.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/group/sendutils.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -49,7 +49,8 @@ SOURCE BTSController.cpp USERINCLUDE ../obexservicesendutils/inc -SYSTEMINCLUDE ../../inc /epoc32/include/libc +SYSTEMINCLUDE ../../obexserviceman/utils/inc +SYSTEMINCLUDE /epoc32/include/libc SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets MW_LAYER_SYSTEMINCLUDE diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexhighway/obexhighway.pro --- a/btobexprofiles/obexsendservices/obexhighway/obexhighway.pro Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexhighway/obexhighway.pro Fri Sep 03 16:17:59 2010 +0300 @@ -32,7 +32,7 @@ src/btsendserviceprovider.cpp -INCLUDEPATH += . ../../inc +INCLUDEPATH += . ../obexservicesendutils/inc SERVICE.FILE = xml/obexhighway_conf.xml SERVICE.OPTIONS = embeddable \ diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexhighway/src/btsendserviceprovider.cpp --- a/btobexprofiles/obexsendservices/obexhighway/src/btsendserviceprovider.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexhighway/src/btsendserviceprovider.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -17,7 +17,7 @@ #include "btsendserviceprovider.h" -#include +#include #include "btsssendlisthandler.h" #include // For Enterprise security settings #include // For Enterprise security notifier diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexhighway/src/btsssendlisthandler.cpp --- a/btobexprofiles/obexsendservices/obexhighway/src/btsssendlisthandler.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexhighway/src/btsssendlisthandler.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -19,7 +19,7 @@ #include "btsssendlisthandler.h" -#include "BTServiceParameterList.h" +#include #include diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexhighway/xml/obexhighway_conf.xml --- a/btobexprofiles/obexsendservices/obexhighway/xml/obexhighway_conf.xml Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexhighway/xml/obexhighway_conf.xml Fri Sep 03 16:17:59 2010 +0300 @@ -1,14 +1,14 @@ - + obexhighway No path BT Send Service - com.nokia.symbian.IFileShare - 1.0 - Send interface - Via Bluetooth - bluetooth - txt_send_via_bluetooth + com.nokia.symbian.IFileShare + 1.0 + Send interface + share + txt_share_dblist_bluetooth + qtg_large_bluetooth \ No newline at end of file diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceStarter.h --- a/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceStarter.h Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexservicesendutils/inc/BTServiceStarter.h Fri Sep 03 16:17:59 2010 +0300 @@ -115,7 +115,8 @@ public MObexUtilsDialogObserver, public MObexUtilsProgressObserver, public MBTEngSdpResultReceiver, - public MBTEngSettingsObserver + public MBTEngSettingsObserver, + public MHbDeviceDialogObserver { public: // Constructors and destructor @@ -393,7 +394,7 @@ * @param aReason Error value * @return None. */ - void ShowErrorNote( TInt aReason ) const; + void ShowErrorNote( TInt aReason ); /** * Cancel progress note @@ -428,6 +429,30 @@ */ void TurnBTPowerOnL( const TBTPowerStateValue aState ); + /** + * Shows appropriate result of the send request using the BTDeviceDialogPlugin + * The dialog shown will be of discreet notifcation type + * @param aDialogTitle The notification dialog title + */ + void ShowSendCompleteNoteL( const TInt aDialogTitle ); + + /** + * Shows appropriate result of the send request using the BTDeviceDialogPlugin + * The dialog shown will be of message box type + * @param aDialogTitle The notification dialog title + * */ + void ShowErrorMessageL( const TInt aDialogTitle, + const TDesC& aConfirmText = KNullDesC); + + + void AddDataL(CHbSymbianVariantMap* aMap, const TInt aKey, + const TAny* aData, CHbSymbianVariant::TType aDataType); + + private: // From MHbDeviceDialogObserver + void DataReceived(CHbSymbianVariantMap& aData); + + void DeviceDialogClosed(TInt aCompletionCode); + private: // Data definitions enum TBTServiceStarterState @@ -474,7 +499,10 @@ TBool iTriedBIP; TBool iTriedOPP; CBTServiceDelayedDestroyer* iDelayedDestroyer; - TBool iLocalisationInit; + CHbDeviceDialogSymbian* iNotificationDialog; + RBuf iRemoteDeviceName; + TUint32 iRemoteDeviceClass; + TBool iShowDialogNote; }; #endif // BT_SERVICE_CONTROLLER_H diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBIPController.cpp --- a/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBIPController.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTSBIPController.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -49,6 +49,9 @@ const TInt KBTSUMaxPathLenght=256; const TInt KBTSUMaxPrivatePathLenght=20; +_LIT(KLocFileName, "btdialogs_"); +_LIT(KPath, "z:/resource/qt/translations/"); + _LIT(KBTNotSendSomeText,"txt_bt_info_receiving_device_does_not_support_all"); _LIT(KBTNotSendOneText,"txt_bt_info_receiving_device_does_not_support_this"); @@ -297,7 +300,7 @@ RBuf filename; filename.CreateL(KMaxFileName); CleanupClosePushL(filename); - imageparam.iFile.Name(filename); + User::LeaveIfError(imageparam.iFile.Name(filename)); iObserverPtr->UpdateProgressNoteL(imageparam.iFileSize,iFileIndex,filename); CleanupStack::PopAndDestroy(&filename); @@ -632,6 +635,7 @@ delete remoteCapabilityList; CleanupStack::PopAndDestroy( xmlParser ); + HbTextResolverSymbian::Init(KLocFileName, KPath); if(!allSupported && iListPtr->ImageCount() > 1) { HBufC* sendText = HbTextResolverSymbian::LoadLC(KBTNotSendSomeText); diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceClient.cpp --- a/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceClient.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceClient.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -25,9 +25,9 @@ #include "BTConnectionTimer.h" #include "BTSUDebug.h" -const TUint16 KMtuSizeReceiv = 0xFFFF; // 64kB - 1 (65535) -const TUint16 KMtuSizeTrans = 0x8000; // 32kB -const TInt KBufferSize = 0x8000; // 32kB +const TUint16 KMtuSizeReceiv = 0xFFFF; // 64kB - 1 (65535) +const TUint16 KMtuSizeTrans = 0x7200; // 29kB +const TInt KBufferSize = 0x7200; // 29kB const TInt KBTConnectionTimeout = 20 * 1000 * 1000; // 20 seconds const TInt KBTAbortTimeout = 2 * 1000 * 1000; // 2 seconds diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceStarter.cpp --- a/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceStarter.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceStarter.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -27,7 +27,7 @@ #include #include #include -#include +#include // CONSTANTS @@ -41,18 +41,11 @@ const TUid KUidMsgTypeBt = {0x10009ED5}; //todo need to find a suitable header to include. This is from obexutilslayer.h -const TInt KMaxDesCLength = 256; +const TInt KMinStringSize = 10; -//_LIT(KSendingDialog,"com.nokia.hb.btdevicedialog/1.0"); -_LIT(KLocFileName, "btdialogs_"); -_LIT(KPath, "z:/resource/qt/translations/"); - -_LIT(KFilesSentText, "txt_bt_dpophead_all_files_sent");//All files sent -_LIT(KDeviceText,"txt_bt_dpopinfo_sent_to_1"); -//_LIT(KNotConnectedText,"txt_bt_info_unable_to_connect_with_bluetooth"); -_LIT(KSendingFailedText,"txt_bt_dpophead_sending_failed"); +_LIT( KBTDevDialogId, "com.nokia.hb.btdevicedialog/1.0" ); // ============================ MEMBER FUNCTIONS =============================== @@ -73,7 +66,8 @@ iUserCancel(EFalse), iFeatureManagerInitialized(EFalse), iTriedBIP(EFalse), - iTriedOPP(EFalse) + iTriedOPP(EFalse), + iShowDialogNote(EFalse) { CActiveScheduler::Add( this ); } @@ -91,7 +85,6 @@ iDelayedDestroyer = CBTServiceDelayedDestroyer::NewL(CActive::EPriorityStandard); FeatureManager::InitializeLibL(); iFeatureManagerInitialized = ETrue; - iLocalisationInit = HbTextResolverSymbian::Init(KLocFileName, KPath); FLOG(_L("[BTSU]\t CBTServiceStarter::ConstructL() completed")); } @@ -127,6 +120,7 @@ delete iBTEngDiscovery; delete iDialog; delete iDelayedDestroyer; + iRemoteDeviceName.Close(); if(iWaiter && iWaiter->IsStarted() ) { @@ -139,6 +133,11 @@ FeatureManager::UnInitializeLib(); } + if (iNotificationDialog) + { + iNotificationDialog->Cancel(); + delete iNotificationDialog; + } FLOG(_L("[BTSU]\t CBTServiceStarter::Destructor() completed")); } @@ -448,6 +447,7 @@ } else { + iShowDialogNote = ETrue; //todo need to do the localisation here _LIT(KConnectText, "Connecting..."); iDialog->LaunchWaitDialogL(KConnectText); @@ -490,20 +490,20 @@ if ( !iProgressDialogActive ) { + iShowDialogNote = ETrue; // todo need to change the last parameter because we are now using the textmap id which is a string // whether we replace it with that or remove the parameter is to be decided iMessageServerIndex = TObexUtilsMessageHandler::CreateOutboxEntryL( KUidMsgTypeBt, 0 ); - deviceName.CreateL(KMaxDesCLength); if ( iDevice->IsValidFriendlyName() ) { - deviceName.Copy( iDevice->FriendlyName() ); + deviceName.CreateL( iDevice->FriendlyName() ); } else { - deviceName.Copy( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())); + deviceName.CreateL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())); } iDialog->LaunchProgressDialogL( this, aFileCount, deviceName, KBTProgressInterval ); @@ -550,6 +550,20 @@ { // this condition is hit for the progress dialog and connecting dialog cancel FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDissmissed(), cancelled by user")); iUserCancel=ETrue; + iShowDialogNote = EFalse; +/* if ( iDevice->IsValidFriendlyName() ) + { + TRAP_IGNORE(iRemoteDeviceName.CreateL( iDevice->FriendlyName()) ); + } + else + { + TRAP_IGNORE( iRemoteDeviceName.CreateL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()))); + } + + iRemoteDeviceClass = iDevice->DeviceClass().DeviceClass(); + + TRAP_IGNORE( ShowSendCompleteNoteL(ESendCancelled) );*/ + if ( iController ) { iController->Abort(); @@ -563,6 +577,7 @@ { // user abortion // + iShowDialogNote = EFalse; iUserCancel = ETrue; StopTransfer( KErrCancel ); CancelWaitNote(); @@ -578,33 +593,35 @@ // CBTServiceStarter::ShowErrorNote // ----------------------------------------------------------------------------- // -void CBTServiceStarter::ShowErrorNote( TInt aReason ) const +void CBTServiceStarter::ShowErrorNote( TInt aReason ) { FLOG(_L("[BTSU]\t CBTServiceStarter::ShowErrorNote()")); - TBuf buf; - TPtrC sendTextMapId; - if ( iDevice->IsValidFriendlyName() ) { - buf.Copy( iDevice->FriendlyName() ); + iRemoteDeviceName.CreateL( iDevice->FriendlyName() ); } else { - TRAP_IGNORE( buf.Copy( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()))); + TRAP_IGNORE( iRemoteDeviceName.CreateL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()))); } + iRemoteDeviceClass = iDevice->DeviceClass().DeviceClass(); switch ( aReason ) { case EBTSNoError: { - sendTextMapId.Set(KFilesSentText()); + TRAP_IGNORE( ShowSendCompleteNoteL(ESendCompleted) ); break; } case EBTSConnectingFailed: case EBTSGettingFailed: case EBTSPuttingFailed: + { + TRAP_IGNORE( ShowErrorMessageL(TBluetoothDialogParams::ESendFailed) ); + break; + } case EBTSNoSuitableProfiles: //todo below three enums are not valid and it is not being used at anywhere do we need to have it @@ -612,27 +629,8 @@ // case EBTSBIPOneNotSend: // case EBTSBIPNoneSend: default: - { - sendTextMapId.Set(KSendingFailedText()); break; - } } - - - if(iLocalisationInit) - { - TRAP_IGNORE( - HBufC* sendText = HbTextResolverSymbian::LoadLC(sendTextMapId); - HBufC* deviceName = HbTextResolverSymbian::LoadLC(KDeviceText,buf); - CHbDeviceNotificationDialogSymbian::NotificationL(KNullDesC, deviceName->Des(), sendText->Des()); - CleanupStack::PopAndDestroy( deviceName ); - CleanupStack::PopAndDestroy( sendText ); - ); - } - else - { - TRAP_IGNORE(CHbDeviceNotificationDialogSymbian::NotificationL(KNullDesC, KDeviceText(), sendTextMapId)); - } FLOG(_L("[BTSU]\t CBTServiceStarter::ShowErrorNote() completed")); } @@ -644,7 +642,9 @@ // void CBTServiceStarter::LaunchConfirmationQuery(const TDesC& aConfirmText) { - TRAP_IGNORE(iDialog->LaunchQueryDialogL(aConfirmText )); + TInt dialogTitle = TBluetoothDialogParams::EUnsupportedImages; + iRemoteDeviceClass = iDevice->DeviceClass().DeviceClass(); + ShowErrorMessageL(dialogTitle,aConfirmText); } // ----------------------------------------------------------------------------- @@ -695,7 +695,7 @@ // Reset states // iServiceStarted = EFalse; - if ( iWaiter && iWaiter->IsStarted() ) + if (( iWaiter && iWaiter->IsStarted() )&&(!iShowDialogNote)) { iWaiter->AsyncStop(); } @@ -1053,6 +1053,109 @@ return KErrNone; } +void CBTServiceStarter::ShowSendCompleteNoteL(const TInt aDialogTitle) + { + iNotificationDialog = CHbDeviceDialogSymbian::NewL(); + iNotificationDialog->SetObserver(this); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt dialogIdx = TBluetoothDialogParams::EGlobalNotif; + AddDataL(variantMap,TBluetoothDialogParams::EDialogType,&dialogIdx,CHbSymbianVariant::EInt); + + + AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceName,&iRemoteDeviceName, + CHbSymbianVariant::EDes); + + AddDataL(variantMap,TBluetoothDialogParams::EResource,&aDialogTitle, + CHbSymbianVariant::EInt); + + AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceClass,&iRemoteDeviceClass, + CHbSymbianVariant::EInt); + + iNotificationDialog->Show( KBTDevDialogId(), *variantMap, this ); + CleanupStack::PopAndDestroy(variantMap); + } + +void CBTServiceStarter::ShowErrorMessageL(const TInt aDialogTitle, + const TDesC& aConfirmText) + { + iNotificationDialog = CHbDeviceDialogSymbian::NewL(); + iNotificationDialog->SetObserver(this); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt dialogIdx = TBluetoothDialogParams::EInformationDialog; + AddDataL(variantMap,TBluetoothDialogParams::EDialogType,&dialogIdx,CHbSymbianVariant::EInt); + + if(aDialogTitle == TBluetoothDialogParams::EUnsupportedImages ) + { + AddDataL(variantMap,TBluetoothDeviceDialog::EAdditionalDesc,&aConfirmText, + CHbSymbianVariant::EDes); + } + else + { + AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceName,&iRemoteDeviceName, + CHbSymbianVariant::EDes); + } + + AddDataL(variantMap,TBluetoothDialogParams::EDialogTitle,&aDialogTitle, + CHbSymbianVariant::EInt); + + AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceClass,&iRemoteDeviceClass, + CHbSymbianVariant::EInt); + + iNotificationDialog->Show( KBTDevDialogId(), *variantMap, this ); + CleanupStack::PopAndDestroy(variantMap); + } + +void CBTServiceStarter::AddDataL(CHbSymbianVariantMap* aMap, const TInt aKey, + const TAny* aData, CHbSymbianVariant::TType aDataType) + { + TBuf key; + key.Num(aKey); + + CHbSymbianVariant* value = CHbSymbianVariant::NewL(aData, aDataType); + CleanupStack::PushL( value ); + User::LeaveIfError( aMap->Add( key, value ) ); // aMap takes the ownership of value + CleanupStack::Pop( value ); + } +void CBTServiceStarter::DataReceived(CHbSymbianVariantMap& aData) + { + if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult"))==KErrNone) + { + TBool val = *(static_cast(aData.Get(_L("actionResult"))->Data())); + if(val) + { + DialogDismissed(EYesButton); + } + else + { + DialogDismissed(ENoButton); + } + if(iNotificationDialog) + { + delete iNotificationDialog; + iNotificationDialog = NULL; + } + } + } +void CBTServiceStarter::DeviceDialogClosed(TInt aCompletionCode) + { + (void) aCompletionCode; + if(iNotificationDialog) + { + delete iNotificationDialog; + iNotificationDialog = NULL; + } + if ( iWaiter && iWaiter->IsStarted() ) + { + iWaiter->AsyncStop(); + } + } + diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/group/obexserviceman.mmp --- a/btobexprofiles/obexserviceman/group/obexserviceman.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/group/obexserviceman.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -43,7 +43,7 @@ USERINCLUDE ../obexservicemanserver/inc -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/group/obexservicemanclient.mmp --- a/btobexprofiles/obexserviceman/group/obexservicemanclient.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/group/obexservicemanclient.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,7 @@ SOURCE ObexSMRequester.cpp USERINCLUDE ../obexservicemanclient/inc -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/group/obexusbapi.mmp --- a/btobexprofiles/obexserviceman/group/obexusbapi.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/group/obexusbapi.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -35,7 +35,7 @@ SOURCE usbclientwrapper.cpp USERINCLUDE ../obexservicemanclient/inc -SYSTEMINCLUDE ../../inc ../../../inc /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/obexservicemanclient/inc/obexsmclient.h --- a/btobexprofiles/obexserviceman/obexservicemanclient/inc/obexsmclient.h Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/obexservicemanclient/inc/obexsmclient.h Fri Sep 03 16:17:59 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include #include -#include "usbobex.h" +#include /// server name _LIT(KSrcsName,"obexserviceman"); diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/obexservicemanclient/inc/usbobex.h --- a/btobexprofiles/obexserviceman/obexservicemanclient/inc/usbobex.h Fri Aug 06 16:43:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* Copyright (c) 2006-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: USB obexservicemanager client definition -* -*/ - - -#ifndef USBOBEX_H -#define USBOBEX_H - -#include - - -class CUSBClientWrapper; - - -/** -* Transportation string definition -*/ -_LIT8(KSrcsTransportBT,"OBEX/BT"); -_LIT8(KSrcsTransportUSB,"OBEX/USB"); -_LIT8(KSrcsTransportIrDA,"OBEX/IrDA"); - - -/** - * obexservicemanager client for usb. - * @lib obexusbapi.lib - * @since S60 v3.2 - */ -class CObexUSB : public CBase - { -public: - - /** - * Two-phased constructor. - */ - IMPORT_C static CObexUSB* NewL(); - - /** - * Destructor. - */ - ~CObexUSB(); - - /** - * Turn USB services on or off - * - * @since S60 v3.2 - * @param aUSBStatus the requested USB service status - * @param aStatus the Request status - * @return None - */ - IMPORT_C void ManageUSBServices( TBool aUSBStatus, TRequestStatus &aStatus ); - - /** - * Cancel managment request and turn services off - * @since S60 v3.2 - * - */ - IMPORT_C void CancelManageUSBServices(); - -private: - - CObexUSB(); - void ConstructL(); - -private: //data - - /** - * Obexserviceman client wrapper - */ - CUSBClientWrapper* iUSBWrapper; - }; -#endif // USBOBEX_H diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/obexservicemanclient/src/usbobex.cpp --- a/btobexprofiles/obexserviceman/obexservicemanclient/src/usbobex.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/obexservicemanclient/src/usbobex.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -16,7 +16,7 @@ */ -#include "usbobex.h" +#include #include "debug.h" #include "obexsmclient.h" #include "usbclientwrapper.h" diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/plugins/group/obexservicemanbt.mmp --- a/btobexprofiles/obexserviceman/plugins/group/obexservicemanbt.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/plugins/group/obexservicemanbt.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,7 @@ END USERINCLUDE ../inc/bt ../../obexservicemanserver/inc ../../utils/inc -SYSTEMINCLUDE ../../../inc ../../../../inc /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib // Base library diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/plugins/group/obexservicemanir.mmp --- a/btobexprofiles/obexserviceman/plugins/group/obexservicemanir.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/plugins/group/obexservicemanir.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -38,7 +38,7 @@ END USERINCLUDE ../inc/ir ../../obexservicemanserver/inc ../../utils/inc -SYSTEMINCLUDE ../../../inc ../../../../inc /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib // Base library diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/plugins/group/obexservicemanusb.mmp --- a/btobexprofiles/obexserviceman/plugins/group/obexservicemanusb.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/plugins/group/obexservicemanusb.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -39,7 +39,7 @@ END USERINCLUDE ../inc/usb ../../obexservicemanserver/inc ../../utils/inc ../../inc -SYSTEMINCLUDE ../../../inc ../../../../inc /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/ecom MW_LAYER_SYSTEMINCLUDE diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/rom/obex.iby --- a/btobexprofiles/obexserviceman/rom/obex.iby Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/rom/obex.iby Fri Sep 03 16:17:59 2010 +0300 @@ -35,7 +35,7 @@ //file=ABI_DIR\BUILD_DIR\msgth.dll System\libs\msgth.dll -#ifdef SYMBIAN_EXCLUDE_INFRARED +#ifndef __IRDA REM Messaging infrared MTM is not included in this ROM, because it depends on excluded INFRARED #else //IR MTM Client @@ -46,10 +46,10 @@ //IR MTM Resources -#endif // SYMBIAN_EXCLUDE_INFRARED +#endif // __IRDA -#ifdef SYMBIAN_EXCLUDE_BLUETOOTH +#ifndef __BT REM Messaging Bluetooth MTM is not included in this ROM, because it depends on excluded BLUETOOTH #else //BT MTM Client @@ -60,7 +60,7 @@ //BT MTM Resources -#endif // SYMBIAN_EXCLUDE_BLUETOOTH +#endif // __BT //Test Harness Executable diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/utils/group/bld.inf --- a/btobexprofiles/obexserviceman/utils/group/bld.inf Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/utils/group/bld.inf Fri Sep 03 16:17:59 2010 +0300 @@ -31,6 +31,8 @@ // once the localisation files are avaialble and in place in epoc32 ../loc/btdialogs_en_GB.qm /epoc32/data/z/resource/qt/translations/btdialogs_en_GB.qm +../loc/btdialogs_en_GB.qm /epoc32/release/winscw/urel/z/resource/qt/translations/btdialogs_en_GB.qm +../loc/btdialogs_en_GB.qm /epoc32/release/winscw/udeb/z/resource/qt/translations/btdialogs_en_GB.qm PRJ_MMPFILES obexutils.mmp diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/utils/group/obexutils.mmp --- a/btobexprofiles/obexserviceman/utils/group/obexutils.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/utils/group/obexutils.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -42,7 +42,6 @@ SOURCE vMessageHandler.cpp #endif -SYSTEMINCLUDE ../../../inc ../../../../inc SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore #ifdef NO101APPDEPFIXES @@ -70,7 +69,7 @@ LIBRARY platformenv.lib LIBRARY mpxcollectionhelper.lib LIBRARY mpxplaybackutility.lib -LIBRARY hbcore.lib +LIBRARY HbCore.lib LIBRARY HbWidgets.lib #ifdef __BT_SAP diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/utils/src/obexutilsdialog.cpp --- a/btobexprofiles/obexserviceman/utils/src/obexutilsdialog.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/utils/src/obexutilsdialog.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -22,7 +22,6 @@ #include "obexutilsdebug.h" #include #include -#include _LIT(KSendingDialog, "com.nokia.hb.btdevicedialog/1.0"); _LIT(KCurrentFileIndex,"currentFileIdx" ); @@ -33,15 +32,11 @@ _LIT(KFileSize,"fileSz"); _LIT(KProgressValue,"progressValue"); -_LIT(KSendingCancelledText, "txt_bt_dpophead_sending_cancelled"); -_LIT(KDeviceText,"txt_bt_dpopinfo_sent_to_1"); const TInt KMaxDescriptionLength = 256; const TInt KMinStringSize = 10; -const TInt KMinFileSize = 1024; +const TInt KMaxDisplayFileName = 20; -_LIT(KLocFileName, "btdialogs_"); -_LIT(KPath, "z:/resource/qt/translations/"); // ============================ MEMBER FUNCTIONS =============================== @@ -174,24 +169,54 @@ AddDataL( map, *key, &iDeviceName, CHbSymbianVariant::EDes ); key->Des().Copy(KFileName()); - AddDataL( map, *key, &aFileName, CHbSymbianVariant::EDes ); + TFileName shortname; + if ( aFileName.Length() > KMaxDisplayFileName ) + { + // Filename is too long, + // We make it shorter. Hiding the chars in the middle part of filename. + shortname = aFileName.Mid(0,KMaxDisplayFileName/2); + shortname.Append(_L("...")); + shortname.Append(aFileName.Mid(aFileName.Length() - KMaxDisplayFileName/2, KMaxDisplayFileName/2)); + } + else + { + shortname.Copy(aFileName); + } + + AddDataL( map, *key, &shortname, CHbSymbianVariant::EDes ); // todo: localiation is needed for code below: HBufC* value = HBufC::NewL(KMaxDescriptionLength); CleanupStack::PushL(value); key->Des().Copy(KFileSizeTxt()); value->Des().Zero(); - if(aFileSize < KMinFileSize) + + //Format the file size into a more readable format + if ( aFileSize >> 20 ) // size in MB + { + TReal32 sizeInMB = 0; + sizeInMB = ((TReal32)aFileSize ) / (1024*1024); + value->Des().AppendNum(sizeInMB); + //TODO - check for localization + value->Des().Append(_L(" Mb")); + } + + else if( aFileSize >> 10 ) // size in KB + { + TInt64 sizeInKB = 0; + sizeInKB = aFileSize >> 10; + value->Des().AppendNum(sizeInKB); + //TODO - check for localization + value->Des().Append(_L(" Kb")); + } + + else // size is unknown or less than 1K { value->Des().AppendNum(aFileSize); value->Des().Append(_L(" Bytes")); } - else - { - TInt filesize = aFileSize/KMinFileSize; - value->Des().AppendNum(filesize); - value->Des().Append(_L(" KB")); - } + + AddDataL( map, *key, value, CHbSymbianVariant::EDes ); CleanupStack::PopAndDestroy( value ); @@ -415,32 +440,14 @@ FLOG(_L("[BTSU]\t CObexUtilsDialog::DeviceDialogClosed()")); (void) aCompletionCode; + if ( iDialogObserverPtr ) + { + iDialogObserverPtr->DialogDismissed(ECancelButton); + } delete iObexDialogTimer; iObexDialogTimer = NULL; delete iProgressDialog; iProgressDialog = NULL; - - TBool ok = HbTextResolverSymbian::Init(KLocFileName, KPath); - if(ok) - { - TRAP_IGNORE( - HBufC* deviceName = HbTextResolverSymbian::LoadLC(KDeviceText,iDeviceName); - HBufC* sendText = HbTextResolverSymbian::LoadLC(KSendingCancelledText); - CHbDeviceNotificationDialogSymbian::NotificationL( - KNullDesC, deviceName->Des(), sendText->Des()); - CleanupStack::PopAndDestroy( sendText ); - CleanupStack::PopAndDestroy( deviceName ); - ); - } - else - { - CHbDeviceNotificationDialogSymbian::NotificationL( - KNullDesC, KDeviceText(), KSendingCancelledText()); - } - if ( iDialogObserverPtr ) - { - iDialogObserverPtr->DialogDismissed(ECancelButton); - } } void CObexUtilsDialog::AddDataL(CHbSymbianVariantMap* aMap, const TDesC& aKey, @@ -464,6 +471,8 @@ messageBox->SetTextL(aText); messageBox->SetObserver(aObserver); messageBox->SetTimeout(aTimeout); + messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::EAcceptButton,_L("Continue")); + messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::ERejectButton,_L("Cancel")); messageBox->ShowL(); CleanupStack::Pop(messageBox); return messageBox; diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/utils/src/obexutilsentryhandler.cpp --- a/btobexprofiles/obexserviceman/utils/src/obexutilsentryhandler.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/utils/src/obexutilsentryhandler.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -17,11 +17,9 @@ - +#include "obexutilsentryhandler.h" #include #include - -#include "obexutilsentryhandler.h" #include "obexutilsdebug.h" diff -r 625f43ae9362 -r 5ebadcda06cb btobexprofiles/obexserviceman/utils/src/updatemusiccollection.cpp --- a/btobexprofiles/obexserviceman/utils/src/updatemusiccollection.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/btobexprofiles/obexserviceman/utils/src/updatemusiccollection.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -16,11 +16,9 @@ */ - +#include "updatemusiccollection.h" //#include #include - -#include "updatemusiccollection.h" #include "obexutilsdebug.h" //#include diff -r 625f43ae9362 -r 5ebadcda06cb btservices.pro --- a/btservices.pro Fri Aug 06 16:43:21 2010 +0300 +++ b/btservices.pro Fri Sep 03 16:17:59 2010 +0300 @@ -23,7 +23,8 @@ bluetoothengine/btnotif/btdevicedialogplugin \ bluetoothengine/btindicator \ btobexprofiles/obexsendservices/obexhighway \ - btobexprofiles/obexreceiveservices/btmsgviewer \ + btobexprofiles/obexreceiveservices/btmsgviewer \ + bluetoothengine/btxqservice \ CONFIG += ordered diff -r 625f43ae9362 -r 5ebadcda06cb cbsatplugin/atmisccmdplugin/group/atmisccmdplugin.mmp --- a/cbsatplugin/atmisccmdplugin/group/atmisccmdplugin.mmp Fri Aug 06 16:43:21 2010 +0300 +++ b/cbsatplugin/atmisccmdplugin/group/atmisccmdplugin.mmp Fri Sep 03 16:17:59 2010 +0300 @@ -41,8 +41,8 @@ SOURCE cbsettinghandler.cpp SOURCE cpwdcommandhandler.cpp SOURCE cpincommandhandler.cpp -SOURCE cusdcommandhandler.cpp -SOURCE cnumcommandhandler.cpp +SOURCE cusdcommandhandler.cpp +SOURCE cnumcommandhandler.cpp SOURCE cfuncommandhandler.cpp SOURCE cbccommandhandler.cpp SOURCE ussdreadmessageimpl.cpp @@ -54,11 +54,11 @@ SOURCE cgmrcommandhandler.cpp SOURCE cmgwcommandhandler.cpp SOURCE cgmicommandhandler.cpp -SOURCE cmgdcommandhandler.cpp -SOURCE telephonywrapper.cpp -SOURCE cgmmcommandhandler.cpp -SOURCE scpbrcommandhandler.cpp -SOURCE scpbwcommandhandler.cpp +SOURCE cmgdcommandhandler.cpp +SOURCE telephonywrapper.cpp +SOURCE cgmmcommandhandler.cpp +SOURCE scpbrcommandhandler.cpp +SOURCE scpbwcommandhandler.cpp #endif USERINCLUDE ../inc @@ -84,7 +84,7 @@ LIBRARY hash.lib LIBRARY ProfileEng.lib -LIBRARY StarterClient.lib +LIBRARY starterclient.lib LIBRARY etel3rdparty.lib LIBRARY sysutil.lib @@ -96,3 +96,4 @@ DEBUGLIBRARY flogger.lib // End of File + diff -r 625f43ae9362 -r 5ebadcda06cb cbsatplugin/atmisccmdplugin/src/atcommandparser.cpp --- a/cbsatplugin/atmisccmdplugin/src/atcommandparser.cpp Fri Aug 06 16:43:21 2010 +0300 +++ b/cbsatplugin/atmisccmdplugin/src/atcommandparser.cpp Fri Sep 03 16:17:59 2010 +0300 @@ -258,8 +258,8 @@ if(!iCmd.Eos()) { chr = iCmd.Peek(); - while(!iCmd.Eos() && chr != ',' && !chr.IsSpace() && !chr.IsControl()) - {// Stop at any of those chars: comma, space or control + while(!iCmd.Eos() && chr != ',' && !chr.IsControl()) + {// Stop at any comma or control character iCmd.Inc(); chr = iCmd.Peek(); } @@ -268,7 +268,23 @@ // Extract the token at this point TPtrC8 retVal = iCmd.MarkedToken(); - // Skip the first delimiter and any further space and control chars + //ignore all space characters at the end + if(retVal.Length() > 1) + { + TInt pos = retVal.Length() - 1; + for ( ; pos >= 0; pos-- ) + { + const TChar ch( retVal[pos] ); + if( !ch.IsSpace() ) + { + break; + } + } + retVal.Set( retVal.Mid( 0, pos + 1 ) ); + } + + + // Skip comma, space and control chars do { iCmd.Inc(); @@ -316,8 +332,21 @@ } else { - TLex8 lex(param); - retVal = lex.Val(aValue); + //check if param contains only digits - TLex doesn't do that + for(TInt pos = param.Length() - 1; pos >= 0; pos--) + { + if(( param[pos] < '0' ) || ( param[pos] > '9' )) + { + retVal = KErrArgument; + break; + } + } + + if(retVal == KErrNone) + { + TLex8 lex(param); + retVal = lex.Val(aValue); + } } TRACE_FUNC_EXIT return retVal; diff -r 625f43ae9362 -r 5ebadcda06cb package_definition.xml --- a/package_definition.xml Fri Aug 06 16:43:21 2010 +0300 +++ b/package_definition.xml Fri Sep 03 16:17:59 2010 +0300 @@ -1,56 +1,188 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +