# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1266613158 -7200 # Node ID 6a29d5ad0713924ed2d31da7c5d63f11d43f3d9c # Parent 0b192a3a05a41332fea1d70e7c6ea8f5d4ffb854 Revision: 201003 Kit: 201007 diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothappprofiles/avrcp/remconbeareravrcp/inc/bulkbearer.h --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/bulkbearer.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/bulkbearer.h Fri Feb 19 22:59:18 2010 +0200 @@ -46,6 +46,7 @@ void MrcciNewCommand(CAvrcpCommand& aCommand,const TRemConClientId& aClientId); TUint MrcciNewTransactionId(); + void MrcciCommandExpired(TUint aTransactionId); TInt MrcbciSetAddressedClient(const TRemConAddress& aAddr, const TRemConClientId& aClient); void MrcbciRemoveAddressing(const TRemConAddress& aAddr); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothappprofiles/avrcp/remconbeareravrcp/inc/controlbearer.h --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/controlbearer.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/controlbearer.h Fri Feb 19 22:59:18 2010 +0200 @@ -59,6 +59,8 @@ void MrccciNewNotifyResponse(CControlCommand& aCommand); TUint MrcciNewTransactionId(); + void MrcciCommandExpired(TUint aTransactionId); + void MrccciSetAddressedClient(const TRemConClientId& aClient); private: // MRemConBearerInterfaceV3 functions called from RemCon diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothappprofiles/avrcp/remconbeareravrcp/inc/remconcommandinterface.h --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/remconcommandinterface.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/remconcommandinterface.h Fri Feb 19 22:59:18 2010 +0200 @@ -31,6 +31,7 @@ virtual void MrcciNewCommand(CAvrcpCommand& aCommand, const TRemConClientId& aClientId) = 0; virtual TUint MrcciNewTransactionId() = 0; + virtual void MrcciCommandExpired(TUint aTransactionId) = 0; }; NONSHARABLE_CLASS(MRemConBulkCommandInterface) : public MRemConCommandInterface diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothappprofiles/avrcp/remconbeareravrcp/src/bulkbearer.cpp --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/src/bulkbearer.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothappprofiles/avrcp/remconbeareravrcp/src/bulkbearer.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -201,6 +201,12 @@ return iObserver->NewTransactionId(); } +void CAvrcpBulkBearer::MrcciCommandExpired(TUint aTransactionId) + { + LOG_FUNC + iObserver->CommandExpired(aTransactionId); + } + TInt CAvrcpBulkBearer::MrcbciSetAddressedClient(const TRemConAddress& aAddr, const TRemConClientId& aClient) { LOG_FUNC diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothappprofiles/avrcp/remconbeareravrcp/src/playerstatewatcher.cpp --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/src/playerstatewatcher.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothappprofiles/avrcp/remconbeareravrcp/src/playerstatewatcher.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -40,6 +40,9 @@ CInternalCommand* command = *iCommands.Find(aClientId); __ASSERT_DEBUG(command, AVRCP_PANIC(ENotWatchingPlayer)); + TUint transId = command->RemConCommandId(); + iCommandInterface.MrcciCommandExpired(transId); + iCommands.Remove(aClientId); command->DecrementUsers(); } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothappprofiles/avrcp/remconbeareravrcp/src/remconbeareravrcp.cpp --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/src/remconbeareravrcp.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothappprofiles/avrcp/remconbeareravrcp/src/remconbeareravrcp.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -858,10 +858,15 @@ return Observer().NewTransactionId(); } +void CRemConBearerAvrcp::MrcciCommandExpired(TUint aTransactionId) + { + LOG_FUNC + Observer().CommandExpired(aTransactionId); + } + void CRemConBearerAvrcp::MrccciSetAddressedClient(const TRemConClientId& aClientId) { LOG_FUNC - Observer().SetRemoteAddressedClient(TUid::Uid(KRemConBearerAvrcpImplementationUid), aClientId); } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/btaccpanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btaudioman/btaccpanic.h Fri Feb 19 22:59:18 2010 +0200 @@ -0,0 +1,41 @@ +/* +* 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: Declares authorisation notifier class. +* +*/ + +#ifndef BTACCPANIC_H +#define BTACCPANIC_H + +_LIT(KBtAccPanicName, "BtAcc Panic"); + +enum TBtAccPanic + { + ENoShutdownTimer = 0, + }; + +template +struct TBtAccPanicCodeTypeChecker + { + inline static void Check(XAny) { } + }; + +#define BTACC_PANIC(CODE) \ + TBtAccPanicCodeTypeChecker::Check(CODE), \ + User::Panic(KBtAccPanicName, CODE) + + +#endif // BTACCPANIC_H + + diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/data/10208970.rss --- a/bluetoothengine/btaudioman/data/10208970.rss Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/data/10208970.rss Fri Feb 19 22:59:18 2010 +0200 @@ -37,7 +37,7 @@ { implementation_uid = 0x1020897C; version_no = 1; - display_name = "0x1020897B"; + display_name = "0x10208970"; default_data = KACCESSORYPLUGINAPIMAINSERVICE; opaque_data = "Heap=0x1000|Stack=0x1000"; rom_only = 1; @@ -46,7 +46,7 @@ { implementation_uid = 0x1020897D; version_no = 1; - display_name = "0x1020897B"; + display_name = "0x10208970"; default_data = KACCESSORYPLUGINAPIHANDLER; opaque_data = ""; rom_only = 1; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/group/btaudioman.mmp --- a/bluetoothengine/btaudioman/group/btaudioman.mmp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/group/btaudioman.mmp Fri Feb 19 22:59:18 2010 +0200 @@ -49,8 +49,6 @@ SOURCE BTAccSession.cpp SOURCE basrvpowercontrolagent.cpp SOURCE basrvrvc.cpp -SOURCE BTAccSession_accfw_var.cpp -SOURCE basrvaccman_accfw_var.cpp SOURCE basrvaccfwconn.cpp USERINCLUDE ../inc diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/BTAccClient.h --- a/bluetoothengine/btaudioman/inc/BTAccClient.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/BTAccClient.h Fri Feb 19 22:59:18 2010 +0200 @@ -93,34 +93,6 @@ */ void GetInfoOfConnectedAcc(TPckg& aInfoPckg, TRequestStatus& aStatus ); - - /** - * Transfer audio to phone - * @param None - * @return TInt indicating the success of call. - */ - TInt AudioToPhone(); - - /** - * Routes the audio paths from the phone to the accessory from which they - * have been earlier on moved to the phone with the audio to phone - * operation. In practice also reconnects to the accessory. - * @param aStatus When the request completes contains the - * success status of the operation. - * @return None. - */ - void AudioToAccessory( TRequestStatus& aStatus ); - - /** - * Cancels the audio to accessory operation. - * Note that if this request is made after the point when it is not - * possible to cancel the actual operation any more, the audio paths - * might still be routed to the accessory again. - * @param TRequestStatus status to be cancelled. - * @return None. - */ - void CancelAudioToAccessory(); - public: // Functions from base classes /** diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/BTAccClientSrv.h --- a/bluetoothengine/btaudioman/inc/BTAccClientSrv.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/BTAccClientSrv.h Fri Feb 19 22:59:18 2010 +0200 @@ -47,9 +47,6 @@ EBTAccSrvCancelNotifyConnectionStatus, EBTAccSrvConnectionStatus, EBTAccSrvGetInfoOfConnectedAcc, - EBTAccSrvAudioToPhone, - EBTAccSrvAudioToAccessory, - EBTAccSrvCancelAudioToAccessory, EBTAccSrvInvalidIpc, }; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/BTAccServer.h --- a/bluetoothengine/btaudioman/inc/BTAccServer.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/BTAccServer.h Fri Feb 19 22:59:18 2010 +0200 @@ -49,7 +49,7 @@ void StartShutdownTimerIfNoSessions(); - void ClientOpened(CBTAccSession& aSession); + void ClientOpenedL(CBTAccSession& aSession); void ClientClosed(CBTAccSession& aSession); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/BTAccSession.h --- a/bluetoothengine/btaudioman/inc/BTAccSession.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/BTAccSession.h Fri Feb 19 22:59:18 2010 +0200 @@ -58,13 +58,6 @@ void NotifyClientNewProfile(TInt aProfile, const TBTDevAddr& aAddr); void NotifyClientNoProfile(TInt aProfile, const TBTDevAddr& aAddr); - - // For DosServer version only - void AudioToPhone(const RMessage2& aMessage); - void AudioToAccessory(const RMessage2& aMessage); - void CancelAudioToAccessory(); - void AudioToPhoneComplete(); - void AudioToAccessoryComplete(TInt aErr); private: /** @@ -114,10 +107,6 @@ */ CBTAccSession(CBasrvAccMan& aAccMan); - void HandleAudio4DosRequest(const RMessage2 &aMessage); - - void DestructVariant(); - void UpdateProfileStatusCache(const TProfileStatus& aStatus); private: // Data diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/basrvaccman.h --- a/bluetoothengine/btaudioman/inc/basrvaccman.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/basrvaccman.h Fri Feb 19 22:59:18 2010 +0200 @@ -16,7 +16,7 @@ * Name : basrvaccman.h * Part of : BTEng / Bluetooth Accessory Server * Description : -* Version : %version: 3.1.4.1.2.2.11 % +* Version : %version: 3.1.4.1.2.2.13 % * */ @@ -100,10 +100,6 @@ TBTEngConnectionStatus ConnectionStatus4Client(const TBTDevAddr& aAddr) const; - // For DosServer version only - void AudioToPhone(CBasrvAudio4Dos& aAudio4Dos); - void AudioToAccessory(CBasrvAudio4Dos& aAudio4Dos); - TBool IsAvrcpVolCTSupported(); TBool IsAbsoluteVolumeSupported(const TBTDevAddr& aAddr); TBool DisconnectIfAudioOpenFails(); @@ -153,6 +149,9 @@ */ void CancelRequest(CBasrvActive& aActive); +private: + void DoShowNoteL(TBTGenericInfoNoteType aNote, const TBTDevAddr& aAddr); + protected: /** * Default constructor @@ -164,8 +163,6 @@ void HandleNewAudioRequestL(); void DoAudioRequestL(); - - void DestructVariant(); TInt FindAcc(const TBTDevAddr& aRemote) const; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/basrvaccstate.h --- a/bluetoothengine/btaudioman/inc/basrvaccstate.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/basrvaccstate.h Fri Feb 19 22:59:18 2010 +0200 @@ -132,7 +132,7 @@ /** * Default constructor */ - CBasrvAccState(CBasrvAcc& aParent, TRequestStatus* aRequest); + CBasrvAccState(CBasrvAcc& aParent); /** * Gets the owner of the state machine @@ -142,24 +142,6 @@ */ CBasrvAcc& Parent(); - /** - * Completes the pending request in this state with specified error code - * and then zero the pointer. - * - * @since S60 v3.1 - * @param aErr the completion error code - */ - void CompleteStateRequest(TInt aErr); - - /** - * Completes the give pending request with specified error code.. - * - * @since S60 v3.1 - * @param aRequest the request to be completed - * @param aErr the completion error code - */ - void CompleteRequest(TRequestStatus* aRequest, TInt aErr); - void StatePrint(const TDesC& aStateName); TAccInfo& AccInfo(); @@ -173,12 +155,6 @@ protected: CBasrvAcc& iParent; - - /** - * Possible to be NULL. - * The async request performed in this state if it is not NULL. - */ - TRequestStatus* iRequest; }; #endif // C_BTASRVACCSTATE_H diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/btaccpanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btaudioman/inc/btaccpanic.h Fri Feb 19 22:59:18 2010 +0200 @@ -0,0 +1,41 @@ +/* +* 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: Declares authorisation notifier class. +* +*/ + +#ifndef BTACCPANIC_H +#define BTACCPANIC_H + +_LIT(KBtAccPanicName, "BtAcc Panic"); + +enum TBtAccPanic + { + ENoShutdownTimer = 0, + EMaxNumberOfConflictsExceeded = 1, + }; + +template +struct TBtAccPanicCodeTypeChecker + { + inline static void Check(XAny) { } + }; + +#define BTACC_PANIC(CODE) \ + TBtAccPanicCodeTypeChecker::Check(CODE), \ + User::Panic(KBtAccPanicName, CODE) + + +#endif // BTACCPANIC_H + diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/btaudiomanplugin.h --- a/bluetoothengine/btaudioman/inc/btaudiomanplugin.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/btaudiomanplugin.h Fri Feb 19 22:59:18 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-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" @@ -171,7 +171,10 @@ void ConstructL(); - TInt HandleAsyncRequest(const TBTDevAddr& aAddr, TInt aRequestId); + TInt PrepareAsyncRequest(const TBTDevAddr& aAddr, TInt aRequestId); + + void NotifyConnectionStatus(); + TInt ReconnectIfNeccessary(); void ReportProfileConnectionEvents(const TBTDevAddr& aAddr, const TInt aProfiles, TBool aConnected); @@ -187,6 +190,7 @@ CBasrvActive* iActive4ProfileStatus; TProfileStatus iProfileStatus; TProfileStatusPckg iProfileStatusPckg; + TInt iNotifyConnectionStatusFailure; }; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/debug.h --- a/bluetoothengine/btaudioman/inc/debug.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/debug.h Fri Feb 19 22:59:18 2010 +0200 @@ -22,6 +22,11 @@ #include #include "debugconfig.h" +enum TPanic + { + EInvalidNullState = 1, + }; + #ifdef PRJ_ENABLE_TRACE #ifdef PRJ_FILE_TRACE diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/inc/debugconfig.h --- a/bluetoothengine/btaudioman/inc/debugconfig.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/inc/debugconfig.h Fri Feb 19 22:59:18 2010 +0200 @@ -38,11 +38,12 @@ _LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]"); _LIT8(KFuncExitFormat8, "<%S"); -_LIT(KPanicCategory, "BTAccServer"); _LIT8(KPanicPrefix8, "PANIC code "); _LIT8(KLeavePrefix8, "LEAVE code "); #endif +_LIT(KPanicCategory, "BTAccServer"); // need it also for release + const TInt KMaxLogLineLength = 512; #define KPRINTERROR 0x00000001 // Tracing level: error diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/BTAccClient.cpp --- a/bluetoothengine/btaudioman/src/BTAccClient.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/BTAccClient.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -164,32 +164,5 @@ SendReceive(EBTAccSrvGetInfoOfConnectedAcc, TIpcArgs(&aInfoPckg), aStatus); } -// --------------------------------------------------------- -// AudioToPhone -// Dos Related functionality only. -// --------------------------------------------------------- -// -TInt RBTAccClient::AudioToPhone() - { - TRACE_FUNC - return SendReceive(EBTAccSrvAudioToPhone); - } - -// --------------------------------------------------------- -// AudioToAccessory -// Dos Related functionality only. -// --------------------------------------------------------- -// -void RBTAccClient::AudioToAccessory( TRequestStatus& aStatus ) - { - TRACE_FUNC - SendReceive(EBTAccSrvAudioToAccessory, aStatus); - } - -void RBTAccClient::CancelAudioToAccessory() - { - SendReceive(EBTAccSrvCancelAudioToAccessory); - } - // End of File diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/BTAccServer.cpp --- a/bluetoothengine/btaudioman/src/BTAccServer.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/BTAccServer.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -30,6 +30,7 @@ #include "btmanclient.h" // TBTDevAddrPckgBug #include "basrvaccman.h" #include "BTAccInfo.h" +#include "btaccpanic.h" /** PubSub key read and write policies */ _LIT_SECURITY_POLICY_C1( KBTEngPSKeyReadPolicy, @@ -78,33 +79,25 @@ } void CBTAccServer::StartShutdownTimerIfNoSessions() - { - if (iSessions.Count() == 0 && (!iTimer || !iTimer->IsActive())) - { - if (!iTimer) - { - TRAP_IGNORE(iTimer = CPeriodic::NewL(CActive::EPriorityStandard)); - } - - if (iTimer) - { - iTimer->Start(KShutdownDelay, 0, TCallBack(CBTAccServer::TimerFired, this)); - } - - TRACE_FUNC - } - } + { + TRACE_FUNC + __ASSERT_DEBUG(iTimer, BTACC_PANIC(ENoShutdownTimer)); + if (iSessions.Count() == 0 && !iTimer->IsActive()) + { + iTimer->Start(KShutdownDelay, 0, TCallBack(CBTAccServer::TimerFired, this)); + } + } -void CBTAccServer::ClientOpened(CBTAccSession& aSession) - { - TRACE_FUNC - - //cancel the timer to prevent the server from shutting down +void CBTAccServer::ClientOpenedL(CBTAccSession& aSession) + { + TRACE_FUNC + + //add the session to the array of sessions + iSessions.AppendL(&aSession); + + //cancel the timer to prevent the server from shutting down CancelShutdownTimer(); - - //add the session to the array of sessions - (void)iSessions.Append(&aSession); - } + } void CBTAccServer::ClientClosed(CBTAccSession& aSession) { @@ -148,8 +141,9 @@ void CBTAccServer::ConstructL() { iAccMan = CBasrvAccMan::NewL(); - iAccMan->LoadServicesL(); - + + iTimer = CPeriodic::NewL(CActive::EPriorityStandard); + User::LeaveIfError(RProperty::Define(KPSUidBluetoothEnginePrivateCategory, KBTHfpATCommand, RProperty::EByteArray, KBTEngPSKeyReadPolicy, @@ -162,8 +156,7 @@ void CBTAccServer::CancelShutdownTimer() { - delete iTimer; - iTimer = NULL; + iTimer->Cancel(); } TInt CBTAccServer::TimerFired(TAny* /*aThis*/) diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/BTAccSession.cpp --- a/bluetoothengine/btaudioman/src/BTAccSession.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/BTAccSession.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -27,6 +27,7 @@ #include "BTAccServer.h" #include "basrvaccman.h" #include "BTAccInfo.h" +#include "btaccpanic.h" typedef TPckgBuf TBTDevAddrPckgBuf; @@ -64,7 +65,6 @@ iNotifyProfileMsg.Complete(KErrAbort); } iProfileStatusCache.Close(); - DestructVariant(); //clear the accessory managers pointer to this session if it has one iAccMan.ClearProfileNotifySession(*this); @@ -78,7 +78,7 @@ TRACE_FUNC //use CreateL instead of NewSessionL when using Server() to ensure the //session has been created correctly and Server() returns a valid pointer - Server().ClientOpened(*this); + Server().ClientOpenedL(*this); } void CBTAccSession::ConnectCompleted(TInt aErr, TInt aProfile, const RArray* aConflicts) @@ -89,10 +89,24 @@ TRACE_INFO((_L("CBTAccSession::ConnectCompleted err %d"), aErr)) if (aConflicts) { - TBuf8 buf; + if (aErr == KErrNone) + { + //we need to error so the client knows there are conflicts which need handling + aErr = KErrGeneral; + } + + const TInt KMaxNumberOfConflicts = 2; + + TBuf8 buf; TInt count = aConflicts->Count(); + __ASSERT_DEBUG(count <= KMaxNumberOfConflicts, BTACC_PANIC(EMaxNumberOfConflictsExceeded)); + for (TInt i = 0; i < count; i++) { + if(i >= KMaxNumberOfConflicts) + { + break; //prevent descriptor overflow + } buf.Append((*aConflicts)[i].Des()); } @@ -101,10 +115,10 @@ iConnectMsg.Write(1, buf); } } - else if (!aErr) + else if (aErr == KErrNone) { TPckgBuf buf(aProfile); - iConnectMsg.Write(1, buf); + aErr = iConnectMsg.Write(1, buf); } iConnectMsg.Complete(aErr); } @@ -116,10 +130,10 @@ if (iDisconnectMsg.Handle()) { TRACE_FUNC - if (!aErr) + if (aErr == KErrNone) { TPckgBuf buf(aProfile); - iDisconnectMsg.Write(1, buf); + aErr = iDisconnectMsg.Write(1, buf); } iDisconnectMsg.Complete(aErr); } @@ -451,13 +465,6 @@ GetInfoOfConnectedAcc(aMessage); break; } - case EBTAccSrvAudioToPhone: - case EBTAccSrvAudioToAccessory: - case EBTAccSrvCancelAudioToAccessory: - { - HandleAudio4DosRequest(aMessage); - break; - } default: { PanicClient(aMessage, EBTAccBadRequest); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/BTAccSession_accfw_var.cpp --- a/bluetoothengine/btaudioman/src/BTAccSession_accfw_var.cpp Tue Feb 02 00:20:42 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +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: Variants for Dos Server version -* -* -*/ - - -// INCLUDE FILES -#include "BTAccSession.h" -#include "debug.h" - -void CBTAccSession::HandleAudio4DosRequest(const RMessage2 &aMessage) - { - aMessage.Complete(KErrNotSupported); - } - -void CBTAccSession::DestructVariant() - { - } - -// End of File diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvacc.cpp --- a/bluetoothengine/btaudioman/src/basrvacc.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvacc.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -107,30 +107,35 @@ void CBasrvAcc::AccOpenedAudio(TProfiles aProfile) { TRACE_FUNC + __ASSERT_ALWAYS(iState, User::Panic(KPanicCategory, EInvalidNullState)); iState->AccOpenedAudio(aProfile); } void CBasrvAcc::AccClosedAudio(TProfiles aProfile) { TRACE_FUNC + __ASSERT_ALWAYS(iState, User::Panic(KPanicCategory, EInvalidNullState)); iState->AccClosedAudio(aProfile); } void CBasrvAcc::AccessoryDisconnectedL(TProfiles aProfile) { TRACE_FUNC + __ASSERT_ALWAYS(iState, User::Panic(KPanicCategory, EInvalidNullState)); iState->AccessoryDisconnectedL(aProfile); } void CBasrvAcc::OpenAudioL(TAccAudioType aType) { TRACE_FUNC + __ASSERT_ALWAYS(iState, User::Panic(KPanicCategory, EInvalidNullState)); iState->OpenAudioL(aType); } void CBasrvAcc::CloseAudioL(TAccAudioType aType) { TRACE_FUNC + __ASSERT_ALWAYS(iState, User::Panic(KPanicCategory, EInvalidNullState)); iState->CloseAudioL(aType); } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccman.cpp --- a/bluetoothengine/btaudioman/src/basrvaccman.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccman.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -12,13 +12,14 @@ * Contributors: * * Description: Implementation of an accessory management. -* Version : %version: 14.1.8 % +* Version : %version: 14.1.10 % * */ // INCLUDE FILES #include +#include #include "basrvaccman.h" #include "BTAccSession.h" #include "BTAccClientSrv.h" @@ -44,6 +45,28 @@ return self; } +void CBasrvAccMan::ConstructL() + { + iAsyncHandlingActive = + CBasrvActive::NewL(*this, CActive::EPriorityStandard, KAsyncHandlingRequest); + + CRepository* cenrep = NULL; + TRAP_IGNORE(cenrep = CRepository::NewL(KCRUidBluetoothEngine)); + TInt avrcpVol = EBTAvrcpVolCTNotSupported; + TInt autoDisconnect = EBTDisconnectIfAudioOpenFails; + if (cenrep) + { + cenrep->Get(KBTAvrcpVolCTLV, avrcpVol); + cenrep->Get(KBTDisconnectIfAudioOpenFailsLV, autoDisconnect); + delete cenrep; + } + iAvrcpVolCTSupported = (avrcpVol == EBTAvrcpVolCTSupported); + iDisconnectIfAudioOpenFails = (autoDisconnect == EBTDisconnectIfAudioOpenFails); + TRACE_INFO((_L("[AVRCP_Vol_CT] %d [DisconnectIfAudioOpenFails] %d"), + iAvrcpVolCTSupported, iDisconnectIfAudioOpenFails)) + LoadServicesL(); + } + CBasrvAccMan::~CBasrvAccMan() { delete iOpenListener; @@ -77,7 +100,6 @@ iNotifierArray.ResetAndDestroy(); iNotifierArray.Close(); iClientRequests.Close(); - DestructVariant(); TRACE_FUNC } @@ -152,7 +174,14 @@ request.iRequest = EBTAccSrvDisconnectAccessory; request.iAddr = aAddr; iClientRequests.AppendL(request); + + //remove the last item from the RArray if a leave occurs later + TCleanupItem cleanupItem(CleanupLastItemFromClientRequestsArray, &iClientRequests); + CleanupStack::PushL(cleanupItem); + iAccs[idx]->DisconnectL(); + + CleanupStack::Pop(&iClientRequests); } else { @@ -416,14 +445,23 @@ void CBasrvAccMan::ShowNote(TBTGenericInfoNoteType aNote, const TBTDevAddr& aAddr) { TRACE_INFO((_L("CBasrvAccMan::ShowNote %d"), aNote)) - TRAPD(err, iNotifierArray.Append(CBasrvActiveNotifier::NewL(*this, CActive::EPriorityStandard, KShowNoteRequest, aAddr, aNote))); - if (err) + TRAPD(err, DoShowNoteL(aNote, aAddr)); + if (err != KErrNone) { TRACE_ERROR((_L("could not construct active notifer object"))) return; } } +void CBasrvAccMan::DoShowNoteL(TBTGenericInfoNoteType aNote, const TBTDevAddr& aAddr) + { + CBasrvActiveNotifier* activeNotifier = CBasrvActiveNotifier::NewL(*this, CActive::EPriorityStandard, KShowNoteRequest, aAddr, aNote); + + CleanupStack::PushL(activeNotifier); + iNotifierArray.AppendL(activeNotifier); + CleanupStack::Pop(activeNotifier); + } + void CBasrvAccMan::FilterProfileSupport(TAccInfo& aInfo) { TInt pluginbit = iPluginMan->AvailablePlugins(); @@ -729,8 +767,6 @@ case KAsyncHandlingRequest: { DoAudioRequestL(); - delete iAsyncHandlingActive; - iAsyncHandlingActive = NULL; break; } default: @@ -760,7 +796,7 @@ void CBasrvAccMan::DoAudioRequestL() { TRACE_FUNC - if (iAudioRequests.Count() && !iAudioRequests[0].iOngoing && (!iAsyncHandlingActive || !iAsyncHandlingActive->IsActive())) + if (iAudioRequests.Count() && !iAudioRequests[0].iOngoing && !iAsyncHandlingActive->IsActive()) { iAudioRequests[0].iOngoing = ETrue; TInt err = KErrNotFound; @@ -827,7 +863,7 @@ req.iReqType = ERejectAudioOpenedByAcc; req.iOngoing = EFalse; TInt idx = 0; - if (iAudioRequests.Count() && iAudioRequests[0].iOngoing) + if (iAudioRequests.Count() && iAudioRequests[0].iOngoing && !iAsyncHandlingActive->IsActive()) { idx = 1; } @@ -839,18 +875,12 @@ Trace(_L("[Audio Request buf] 2(Reject) %d at '%S', to index %d"), iCloseType, &buf, idx); }); - if (!err && !iAsyncHandlingActive && !iAudioRequests[0].iOngoing) + if ((err == KErrNone) && !iAudioRequests[0].iOngoing) { - // Start rejection asynchronously - iAsyncHandlingActive = - CBasrvActive::New(*this, CActive::EPriorityStandard, KAsyncHandlingRequest); - if (iAsyncHandlingActive) - { - iAsyncHandlingActive->iStatus = KRequestPending; - TRequestStatus* sta = &(iAsyncHandlingActive->iStatus); - User::RequestComplete(sta, KErrNone); - iAsyncHandlingActive->GoActive(); - } + iAsyncHandlingActive->iStatus = KRequestPending; + TRequestStatus* sta = &(iAsyncHandlingActive->iStatus); + User::RequestComplete(sta, KErrNone); + iAsyncHandlingActive->GoActive(); } } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstate.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstate.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstate.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -27,7 +27,6 @@ CBasrvAccState::~CBasrvAccState() { - CompleteStateRequest(KErrAbort); } CBasrvAccState* CBasrvAccState::ErrorOnEntry(TInt /*aReason*/) @@ -102,8 +101,8 @@ TRACE_FUNC } -CBasrvAccState::CBasrvAccState(CBasrvAcc& aParent, TRequestStatus* aRequest) - : iParent(aParent), iRequest(aRequest) +CBasrvAccState::CBasrvAccState(CBasrvAcc& aParent) + : iParent(aParent) { } @@ -112,25 +111,6 @@ return iParent; } -void CBasrvAccState::CompleteStateRequest(TInt aErr) - { - if (iRequest) - { - User::RequestComplete(iRequest, aErr); - TRACE_INFO((_L("Request 0x%08X completed with %d"), iRequest, aErr)) - iRequest = NULL; - } - } - -void CBasrvAccState::CompleteRequest(TRequestStatus* aStatus, TInt aErr) - { - if (aStatus) - { - User::RequestComplete(aStatus, aErr); - TRACE_INFO((_L("Request 0x%08X completed with %d"), aStatus, aErr)) - } - } - void CBasrvAccState::StatePrint(const TDesC& aStateName) { TRACE_INFO_SEG( diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstateattach.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstateattach.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstateattach.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -126,7 +126,7 @@ } CBasrvAccStateAttach::CBasrvAccStateAttach(CBasrvAcc& aParent, TBool aConnecting) - : CBasrvAccState(aParent, NULL), iConnecting(aConnecting) + : CBasrvAccState(aParent), iConnecting(aConnecting) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstateattached.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstateattached.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstateattached.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: Implementation of Connected state. -* Version : %version: 20 % +* Version : %version: 21 % * */ @@ -385,7 +385,7 @@ } CBasrvAccStateAttached::CBasrvAccStateAttached(CBasrvAcc& aParent, TBool aShowNote) - : CBasrvAccState(aParent, NULL), iShowNote(aShowNote) + : CBasrvAccState(aParent), iShowNote(aShowNote) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstateconnect.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstateconnect.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstateconnect.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -105,7 +105,7 @@ } CBasrvAccStateConnect::CBasrvAccStateConnect(CBasrvAcc& aParent) - : CBasrvAccState(aParent, NULL) + : CBasrvAccState(aParent) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstatedetach.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstatedetach.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstatedetach.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -112,7 +112,7 @@ } CBasrvAccStateDetach::CBasrvAccStateDetach(CBasrvAcc& aParent) - : CBasrvAccState(aParent, NULL) + : CBasrvAccState(aParent) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstatedisconnect.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstatedisconnect.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstatedisconnect.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -81,7 +81,7 @@ } CBasrvAccStateDisconnect::CBasrvAccStateDisconnect(CBasrvAcc& aParent, TInt aConnErr) - : CBasrvAccState(aParent, NULL), iConnErr(aConnErr) + : CBasrvAccState(aParent), iConnErr(aConnErr) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvaccstatequery.cpp --- a/bluetoothengine/btaudioman/src/basrvaccstatequery.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvaccstatequery.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -192,7 +192,7 @@ } CBasrvAccStateQuery::CBasrvAccStateQuery(CBasrvAcc& aParent, TBool aConnectingRequest) - : CBasrvAccState(aParent, NULL), iConnecting(aConnectingRequest) + : CBasrvAccState(aParent), iConnecting(aConnectingRequest) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/basrvsdpquery.cpp --- a/bluetoothengine/btaudioman/src/basrvsdpquery.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/basrvsdpquery.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -67,23 +67,23 @@ SF.iAttrValue = 0; SF.iUUID = KAudioSinkUUID; SF.iAttrID = KSdpAttrIdSupportedFeatures; - iServiceAttrs.Append(SF); // Advanced Audio Distribution Profile - BT Stereo Audio + iServiceAttrs.AppendL(SF); // Advanced Audio Distribution Profile - BT Stereo Audio SF.iUUID = 0x111e; // HFP SF.iAttrID = KSdpAttrIdSupportedFeatures; - iServiceAttrs.Append(SF); // BT Handsfree Profile - BT Mono Audio + iServiceAttrs.AppendL(SF); // BT Handsfree Profile - BT Mono Audio SF.iUUID = 0x1108; // HSP SF.iAttrID = 0x0302; // Atti id of remote volume control - iServiceAttrs.Append(SF); // BT Headset Profile - BT Mono Audio + iServiceAttrs.AppendL(SF); // BT Headset Profile - BT Mono Audio SF.iUUID = KAVRemoteControlTargetUUID; SF.iAttrID = KSdpAttrIdSupportedFeatures; - iServiceAttrs.Append(SF); // Audio Video Remote Control Profile + iServiceAttrs.AppendL(SF); // Audio Video Remote Control Profile SF.iUUID = KAVRemoteControlTargetUUID; SF.iAttrID = KSdpAttrIdBluetoothProfileDescriptorList; - iServiceAttrs.Append(SF); // Audio Video Remote Control Profile, to find out avrcp 1.4 support + iServiceAttrs.AppendL(SF); // Audio Video Remote Control Profile, to find out avrcp 1.4 support /***************************************************** @@ -100,7 +100,7 @@ TUUID serviceUuid = TUUID((0x00005555),(0x00001000),(0x80000002),(0xEE000001)); // model number SF.iUUID = serviceUuid; SF.iAttrID = 0x0300; // Attri id of device model number - iServiceAttrs.Append(SF); + iServiceAttrs.AppendL(SF); iCursor = 0; iTolerateSdpError = aTolerateSdpError; iSdpAgent = CSdpAgent::NewL(*this, iAddr); @@ -134,13 +134,19 @@ { case ECreateView: { + // if we're called with iResponse != NULL we're leaking memory. + __ASSERT_ALWAYS(!iResponse, User::Invariant()); + iResponse = NULL; if (aActive.iStatus > KErrNone) { - iResponse = CBTRegistryResponse::NewL(iReg); - aActive.SetRequestId(EGetResponse); - iResponse->Start(aActive.iStatus); - aActive.GoActive(); + TRAP_IGNORE( iResponse = CBTRegistryResponse::NewL(iReg) ); + if (iResponse) + { + aActive.SetRequestId(EGetResponse); + iResponse->Start(aActive.iStatus); + aActive.GoActive(); + } } else { @@ -172,15 +178,21 @@ void CBasrvSdpQuery::QueryCompleteL(TInt aErr) { iSdpAgent->Cancel(); + delete iSdpAgent; iSdpAgent = NULL; + delete iSdpSearchPattern; iSdpSearchPattern = NULL; + TBTDeviceClass cod = TBTDeviceClass(); if ( iResponse && iResponse->Results().Count() > 0 ) { cod = (iResponse->Results())[0]->DeviceClass(); } + delete iResponse; + iResponse = NULL; + if (!aErr) { TAccInfo info; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btaudioman/src/btaudiomanplugin.cpp --- a/bluetoothengine/btaudioman/src/btaudiomanplugin.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btaudioman/src/btaudiomanplugin.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-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,23 +70,27 @@ TInt CBtAudioManPlugin::Connect( const TBTDevAddr& aAddr ) { TRACE_FUNC - return HandleAsyncRequest(aAddr, ERequestConnect); + TInt err = PrepareAsyncRequest(aAddr, ERequestConnect); + if(!err) + { + iDiagnostic.Zero(); + iClient.ConnectToAccessory(iActive4ClientReq->iStatus, iBTDevAddrPckgBuf, iDiagnostic); + iActive4ClientReq->GoActive(); + } + return err; } void CBtAudioManPlugin::CancelConnect( const TBTDevAddr& aAddr ) { if (iBTDevAddrPckgBuf() == aAddr && - iActive4ClientReq && iActive4ClientReq->IsActive() && iActive4ClientReq->RequestId() == ERequestConnect ) { TRACE_INFO(_L("CBtAudioManPlugin::CancelConnect KErrCancel")) - delete iActive4ClientReq; - iActive4ClientReq = NULL; + iActive4ClientReq->Cancel(); if (iObserver) { - iObserver->ConnectComplete(iBTDevAddrPckgBuf(), - EBTProfileHFP, KErrCancel); + iObserver->ConnectComplete(aAddr, EBTProfileHFP, KErrCancel); } } else @@ -94,8 +98,7 @@ TRACE_INFO(_L("CBtAudioManPlugin::CancelConnect KErrNotFound")) if (iObserver) { - iObserver->ConnectComplete(aAddr , - EBTProfileHFP, KErrNotFound); + iObserver->ConnectComplete(aAddr, EBTProfileHFP, KErrNotFound); } } @@ -107,8 +110,21 @@ if (aAddr == TBTDevAddr()) { req = ERequestDisconnectAll; - } - return HandleAsyncRequest(aAddr, req); + } + TInt err = PrepareAsyncRequest(aAddr, req); + if (!err) + { + if (req == ERequestDisconnect) + { + iClient.DisconnectAccessory(iActive4ClientReq->iStatus, iBTDevAddrPckgBuf, iDiagnostic); + } + else // if (req == ERequestDisconnectAll) + { + iClient.DisconnectAllGracefully(iActive4ClientReq->iStatus); + } + iActive4ClientReq->GoActive(); + } + return err; } void CBtAudioManPlugin::GetConnections( RBTDevAddrArray& aAddrArray, TBTProfile aConnectedProfile ) @@ -207,22 +223,45 @@ void CBtAudioManPlugin::RequestCompletedL(CBasrvActive& aActive) { TRACE_FUNC + TInt result = aActive.iStatus.Int(); switch (aActive.RequestId()) { case ENotifyProfileStatusChange: { - if (aActive.iStatus == KErrNone && iObserver) + // Notify any observer if one is present, and we got valid data (i.e. no error) + if (result == KErrNone && iObserver) + { + ReportProfileConnectionEvents(iProfileStatus.iAddr, iProfileStatus.iProfiles, iProfileStatus.iConnected); + } + // Handle resubscribing for future notifications + static const TInt KMaxFailedNotifyConnectionStatusAttempts = 3; + if (result == KErrNone) + { + iNotifyConnectionStatusFailure = 0; // reset failure count + NotifyConnectionStatus(); + } + else if (result != KErrServerTerminated && iNotifyConnectionStatusFailure < KMaxFailedNotifyConnectionStatusAttempts) { - ReportProfileConnectionEvents(iProfileStatus.iAddr, iProfileStatus.iProfiles, - iProfileStatus.iConnected); - iClient.NotifyConnectionStatus(iProfileStatusPckg, aActive.iStatus); - aActive.GoActive(); + TRACE_ERROR((_L8("Connection Status Notification failed (transiently): %d"), result)) + ++iNotifyConnectionStatusFailure; + NotifyConnectionStatus(); + } + else + { + // The server has died unexpectedly, or we've failed a number of times in succession so we cannot re-subscribe. + // The lack of state here makes it diffcult to know how to report (handle?) this. However, we are in + // no worse situation than before, plus the issue is now logged. + TRACE_ERROR((_L8("Connection Status Notification failed (terminally): %d"), result)) + iClient.Close(); // clean the handle, this might kill outstanding disconnect/connect requests + // but it looks like the server is hosed anyway... + // In keeping with the existing logic we don't attempt to re-start the server. That will only happen when an + // active request is made. } break; } case ERequestConnect: { - if (iActive4ClientReq->iStatus.Int() != KErrNone) // might have conflicts, decode iDiagnostic + if (result != KErrNone) // might have conflicts, decode iDiagnostic { if (iDiagnostic.Length() >= KBTDevAddrSize) { @@ -238,14 +277,12 @@ TRACE_INFO((_L8("conflict <%S>"), &myPtr)) ptr.Set(ptr.Mid(KBTDevAddrSize)); } - iObserver->ConnectComplete(iBTDevAddrPckgBuf(), - EBTProfileHFP, iActive4ClientReq->iStatus.Int(), &array); + iObserver->ConnectComplete(iBTDevAddrPckgBuf(), EBTProfileHFP, result, &array); CleanupStack::PopAndDestroy(&array); } else { - iObserver->ConnectComplete(iBTDevAddrPckgBuf(), - EBTProfileHFP, iActive4ClientReq->iStatus.Int()); + iObserver->ConnectComplete(iBTDevAddrPckgBuf(), EBTProfileHFP, result); } } else @@ -258,16 +295,13 @@ } ReportProfileConnectionEvents(iBTDevAddrPckgBuf(), profile, ETrue); } - delete iActive4ClientReq; - iActive4ClientReq = NULL; break; } case ERequestDisconnect: { - if (iActive4ClientReq->iStatus.Int() != KErrNone) + if (result != KErrNone) { - iObserver->DisconnectComplete(iBTDevAddrPckgBuf(), - EBTProfileHFP, iActive4ClientReq->iStatus.Int()); + iObserver->DisconnectComplete(iBTDevAddrPckgBuf(), EBTProfileHFP, result); } else { @@ -278,27 +312,24 @@ pckg.Copy(iDiagnostic.Mid(0, sizeof(TInt))); } ReportProfileConnectionEvents(iBTDevAddrPckgBuf(), profile, EFalse); - } - delete iActive4ClientReq; - iActive4ClientReq = NULL; + } break; } case ERequestDisconnectAll: { - iObserver->DisconnectComplete(iBTDevAddrPckgBuf(), - EBTProfileHFP, iActive4ClientReq->iStatus.Int()); - break; + iObserver->DisconnectComplete(iBTDevAddrPckgBuf(), EBTProfileHFP, result); + break; } } } void CBtAudioManPlugin::CancelRequest(CBasrvActive& aActive) { - if (aActive.RequestId() == ENotifyProfileStatusChange ) + if (aActive.RequestId() == ENotifyProfileStatusChange) { iClient.CancelNotifyConnectionStatus(); } - else if (aActive.RequestId() == ERequestConnect ) + else if (aActive.RequestId() == ERequestConnect) { iClient.CancelConnectToAccessory(); } @@ -312,51 +343,49 @@ void CBtAudioManPlugin::ConstructL() { LEAVE_IF_ERROR(iClient.Connect()); + // Create the handler for profile notifications iActive4ProfileStatus = CBasrvActive::NewL(*this, CActive::EPriorityStandard, ENotifyProfileStatusChange); + NotifyConnectionStatus(); + // Create the handler for active requests (connect, disconnect, etc.) + iActive4ClientReq = CBasrvActive::New(*this, CActive::EPriorityStandard, ERequestConnect); + } + +void CBtAudioManPlugin::NotifyConnectionStatus() + { iClient.NotifyConnectionStatus(iProfileStatusPckg, iActive4ProfileStatus->iStatus); iActive4ProfileStatus->GoActive(); } -TInt CBtAudioManPlugin::HandleAsyncRequest(const TBTDevAddr& aAddr, TInt aRequestId) +TInt CBtAudioManPlugin::ReconnectIfNeccessary() { TInt err = KErrNone; - if (! iClient.Handle() ) + if (iClient.Handle() == KNullHandle) { + TRACE_INFO((_L8("Handle to Audio Man Server is not valid, connecting again..."))) err = iClient.Connect(); + TRACE_INFO((_L8("... reconnection result = %d"), err)) + if(!err) + { + // Now reconnected, we should start status notifications again... + NotifyConnectionStatus(); + } } - if ( err ) + return err; + } + +TInt CBtAudioManPlugin::PrepareAsyncRequest(const TBTDevAddr& aAddr, TInt aRequestId) + { + TInt err = KErrNone; + err = ReconnectIfNeccessary(); + if (!err && iActive4ClientReq->IsActive()) { - return err; - } - if ( iActive4ClientReq ) - { + // I would normally expect KErrInUse, so as to distinguish this failure from running out of message slots err = KErrServerBusy; } if (!err) { - iActive4ClientReq = CBasrvActive::New(*this, CActive::EPriorityStandard, aRequestId); - if (iActive4ClientReq) - { - iBTDevAddrPckgBuf() = aAddr; - if (aRequestId == ERequestConnect) - { - iDiagnostic.Zero(); - iClient.ConnectToAccessory(iActive4ClientReq->iStatus, iBTDevAddrPckgBuf, iDiagnostic); - } - else if (aRequestId == ERequestDisconnect) - { - iClient.DisconnectAccessory(iActive4ClientReq->iStatus, iBTDevAddrPckgBuf, iDiagnostic); - } - else // if (aRequestId == ERequestDisconnectAll) - { - iClient.DisconnectAllGracefully(iActive4ClientReq->iStatus); - } - iActive4ClientReq->GoActive(); - } - else - { - err = KErrNoMemory; - } + iBTDevAddrPckgBuf() = aAddr; + iActive4ClientReq->SetRequestId(aRequestId); } return err; } @@ -365,7 +394,7 @@ { TRACE_FUNC TRACE_INFO((_L("status %d profiles 0x%04X"), aConnected, aProfiles)) - TBTEngConnectionStatus status = IsConnected(aAddr); + TBTEngConnectionStatus status = IsConnected(aAddr); if (iObserver) { if (aConnected) @@ -385,21 +414,21 @@ } else { - if( status != EBTEngConnected ) - { - if (aProfiles & EHFP) - { - iObserver->DisconnectComplete(aAddr, EBTProfileHFP, KErrNone); - } - if (aProfiles & EHSP) - { - iObserver->DisconnectComplete(aAddr, EBTProfileHSP, KErrNone); - } - if (aProfiles & EStereo) - { - iObserver->DisconnectComplete(aAddr, EBTProfileA2DP, KErrNone); - } - } + if (status != EBTEngConnected) + { + if (aProfiles & EHFP) + { + iObserver->DisconnectComplete(aAddr, EBTProfileHFP, KErrNone); + } + if (aProfiles & EHSP) + { + iObserver->DisconnectComplete(aAddr, EBTProfileHSP, KErrNone); + } + if (aProfiles & EStereo) + { + iObserver->DisconnectComplete(aAddr, EBTProfileA2DP, KErrNone); + } + } } } } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/bteng/btfeatures/btfeatures.cpp --- a/bluetoothengine/bteng/btfeatures/btfeatures.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/bteng/btfeatures/btfeatures.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -17,8 +17,8 @@ #include -#include -#include +#include +#include /** Device supports bluetooth data profiles disabled. diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/bthid/mouse/Sesame_client/data/cursormask.bmp Binary file bluetoothengine/bthid/mouse/Sesame_client/data/cursormask.bmp has changed diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btmac/BWINS/BTMonoCmdHandlerU.DEF --- a/bluetoothengine/btmac/BWINS/BTMonoCmdHandlerU.DEF Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btmac/BWINS/BTMonoCmdHandlerU.DEF Fri Feb 19 22:59:18 2010 +0200 @@ -1,10 +1,10 @@ EXPORTS - ??1CBtmcHandlerApi@@UAE@XZ @ 1 NONAME ; CBtmcHandlerApi::~CBtmcHandlerApi(void) + ?NewL@CBtmcHandlerApi@@SAPAV1@AAVMBtmcObserver@@W4TBtmcProfileId@@ABVTDesC8@@H@Z @ 1 NONAME ; class CBtmcHandlerApi * CBtmcHandlerApi::NewL(class MBtmcObserver &, enum TBtmcProfileId, class TDesC8 const &, int) ?HandleNrecCompletedL@CBtmcHandlerApi@@QAEXH@Z @ 2 NONAME ; void CBtmcHandlerApi::HandleNrecCompletedL(int) - ?HandleProtocolDataL@CBtmcHandlerApi@@QAEXABVTDesC8@@@Z @ 3 NONAME ; void CBtmcHandlerApi::HandleProtocolDataL(class TDesC8 const &) - ?NewL@CBtmcHandlerApi@@SAPAV1@AAVMBtmcObserver@@W4TBtmcProfileId@@ABVTDesC8@@H@Z @ 4 NONAME ; class CBtmcHandlerApi * CBtmcHandlerApi::NewL(class MBtmcObserver &, enum TBtmcProfileId, class TDesC8 const &, int) - ?ActivateRemoteVolumeControl@CBtmcHandlerApi@@QAEXXZ @ 5 NONAME ; void CBtmcHandlerApi::ActivateRemoteVolumeControl(void) - ?DeActivateRemoteVolumeControl@CBtmcHandlerApi@@QAEXXZ @ 6 NONAME ; void CBtmcHandlerApi::DeActivateRemoteVolumeControl(void) - ?GetRemoteSupportedFeature@CBtmcHandlerApi@@QAEHXZ @ 7 NONAME ; int CBtmcHandlerApi::GetRemoteSupportedFeature(void) - ?SetHspRvcSupported@CBtmcHandlerApi@@QAEXH@Z @ 8 NONAME ; void CBtmcHandlerApi::SetHspRvcSupported(int) + ?ActivateRemoteVolumeControl@CBtmcHandlerApi@@QAEXXZ @ 3 NONAME ; void CBtmcHandlerApi::ActivateRemoteVolumeControl(void) + ?GetRemoteSupportedFeature@CBtmcHandlerApi@@QAEHXZ @ 4 NONAME ; int CBtmcHandlerApi::GetRemoteSupportedFeature(void) + ?SetHspRvcSupported@CBtmcHandlerApi@@QAEXH@Z @ 5 NONAME ; void CBtmcHandlerApi::SetHspRvcSupported(int) + ?HandleProtocolDataL@CBtmcHandlerApi@@QAEXABVTDesC8@@@Z @ 6 NONAME ; void CBtmcHandlerApi::HandleProtocolDataL(class TDesC8 const &) + ?DeActivateRemoteVolumeControl@CBtmcHandlerApi@@QAEXXZ @ 7 NONAME ; void CBtmcHandlerApi::DeActivateRemoteVolumeControl(void) + ??1CBtmcHandlerApi@@UAE@XZ @ 8 NONAME ; CBtmcHandlerApi::~CBtmcHandlerApi(void) diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btmac/eabi/BTMonoCmdHandleru.DEF --- a/bluetoothengine/btmac/eabi/BTMonoCmdHandleru.DEF Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btmac/eabi/BTMonoCmdHandleru.DEF Fri Feb 19 22:59:18 2010 +0200 @@ -1,12 +1,12 @@ EXPORTS - _ZN15CBtmcHandlerApi19HandleProtocolDataLERK6TDesC8 @ 1 NONAME - _ZN15CBtmcHandlerApi20HandleNrecCompletedLEi @ 2 NONAME - _ZN15CBtmcHandlerApi4NewLER13MBtmcObserver14TBtmcProfileIdRK6TDesC8i @ 3 NONAME - _ZN15CBtmcHandlerApiD0Ev @ 4 NONAME - _ZN15CBtmcHandlerApiD1Ev @ 5 NONAME - _ZN15CBtmcHandlerApiD2Ev @ 6 NONAME - _ZN15CBtmcHandlerApi27ActivateRemoteVolumeControlEv @ 7 NONAME - _ZN15CBtmcHandlerApi29DeActivateRemoteVolumeControlEv @ 8 NONAME - _ZN15CBtmcHandlerApi25GetRemoteSupportedFeatureEv @ 9 NONAME - _ZN15CBtmcHandlerApi18SetHspRvcSupportedEi @ 10 NONAME + _ZN15CBtmcHandlerApi18SetHspRvcSupportedEi @ 1 NONAME + _ZN15CBtmcHandlerApi19HandleProtocolDataLERK6TDesC8 @ 2 NONAME + _ZN15CBtmcHandlerApi20HandleNrecCompletedLEi @ 3 NONAME + _ZN15CBtmcHandlerApi25GetRemoteSupportedFeatureEv @ 4 NONAME + _ZN15CBtmcHandlerApi27ActivateRemoteVolumeControlEv @ 5 NONAME + _ZN15CBtmcHandlerApi29DeActivateRemoteVolumeControlEv @ 6 NONAME + _ZN15CBtmcHandlerApi4NewLER13MBtmcObserver14TBtmcProfileIdRK6TDesC8i @ 7 NONAME + _ZN15CBtmcHandlerApiD0Ev @ 8 NONAME + _ZN15CBtmcHandlerApiD1Ev @ 9 NONAME + _ZN15CBtmcHandlerApiD2Ev @ 10 NONAME diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btmac/inc/btmonocmdhandler/btmcnumber.h --- a/bluetoothengine/btmac/inc/btmonocmdhandler/btmcnumber.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btmac/inc/btmonocmdhandler/btmcnumber.h Fri Feb 19 22:59:18 2010 +0200 @@ -34,6 +34,18 @@ { public: + /** CBtmcNumber states. + */ + enum BtmcNumberState + { + /** Not valid */ + EStateNull = 0, + /** Getting the MSISDN - getting store info*/ + EStateGettingMsisdnStoreInfo = 1, + /** Getting the MSISDN - getting store entry*/ + EStateGettingMsisdnStoreEntry = 2, + }; + /** * Two-phased constructor. */ @@ -76,6 +88,14 @@ TInt aServiceId); void ConstructL(); + /** + * Gets MSISDN store info to check how many numbers are stored on SIM + */ + void GetMsisdnStoreInfo(); + /** + * Gets single MSISDN store entry + */ + void GetMsisdnStoreEntry(); private: CBtmcProtocol& iProtocol; @@ -84,7 +104,21 @@ RMobileONStore iStore; RMobileONStore::TMobileONEntryV1 iEntry; RMobileONStore::TMobileONEntryV1Pckg iPckg; + RMobileONStore::TMobileONStoreInfoV1Pckg iOnStoreInfoPckg; + RMobileONStore::TMobileONStoreInfoV1 iOnStoreInfo; + /** + * Defines current CBtmcNumber state + */ + BtmcNumberState iState; + /** + * Index which is used to get MSISDN entries + */ + TInt iUsedEntriesCount; + /** + * Count of correct numbers returned by MSISDN + */ + TInt iCorrectNumbersCount; }; -#endif \ No newline at end of file +#endif diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btmac/src/BTMonoCmdHandler/btmcnumber.cpp --- a/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcnumber.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcnumber.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -57,10 +57,33 @@ void CBtmcNumber::GoActive() { TRACE_ASSERT(!IsActive(), KErrGeneral); - iEntry.iIndex = 1; + GetMsisdnStoreInfo(); + TRACE_FUNC + } + +// ------------------------------------------------------------------------------- +// CBtmcNumber::GetMsisdnStoreInfo +// ------------------------------------------------------------------------------- +void CBtmcNumber::GetMsisdnStoreInfo() + { + TRACE_FUNC_ENTRY + iState = EStateGettingMsisdnStoreInfo; + iStore.GetInfo(iStatus, iOnStoreInfoPckg); + SetActive(); + TRACE_FUNC_EXIT + } + +// ------------------------------------------------------------------------------- +// CBtmcNumber::GetMsisdnStoreEntry +// ------------------------------------------------------------------------------- +void CBtmcNumber::GetMsisdnStoreEntry() + { + TRACE_FUNC_ENTRY + iState = EStateGettingMsisdnStoreEntry; + iEntry.iIndex = iUsedEntriesCount++; iStore.Read(iStatus, iPckg); SetActive(); - TRACE_FUNC + TRACE_FUNC_EXIT } // ------------------------------------------------------------------------------- @@ -70,56 +93,104 @@ { TRACE_FUNC_ENTRY - RATResultPtrArray resarr; - ATObjArrayCleanupResetAndDestroyPushL(resarr); - CATResult* okerr = NULL; - if (iStatus == KErrNone) + switch (iState) { - TBuf8 nameBuf; - nameBuf.Copy(iEntry.iNumber.iTelNumber); - - TRACE_INFO((_L8("ao status %d, phonebook returned %S"), iStatus.Int(), &nameBuf)) - RATParamArray params; - CleanupClosePushL(params); - LEAVE_IF_ERROR(params.Append(TATParam())) - LEAVE_IF_ERROR(params.Append(TATParam(nameBuf, EATDQStringParam))) - - TBTMonoATPhoneNumberType numType; - if (nameBuf.Length() == 0) + case EStateGettingMsisdnStoreEntry: { - numType = EBTMonoATPhoneNumberUnavailable; - } - else if(nameBuf.Locate('+') == 0) - { - numType = EBTMonoATPhoneNumberInternational; + if (iStatus == KErrNone) + { + if(iEntry.iNumber.iTelNumber.Length() == 0) + { + GetMsisdnStoreEntry(); + break; + } + + iCorrectNumbersCount++; + + RATResultPtrArray resarr; + ATObjArrayCleanupResetAndDestroyPushL(resarr); + + TBuf8 telnumberBuf; + telnumberBuf.Copy(iEntry.iNumber.iTelNumber); + + TRACE_INFO((_L8("ao status %d, phonebook returned %S"), iStatus.Int(), &telnumberBuf)) + RATParamArray params; + CleanupClosePushL(params); + LEAVE_IF_ERROR(params.Append(TATParam())) + LEAVE_IF_ERROR(params.Append(TATParam(telnumberBuf, EATDQStringParam))) + + TBTMonoATPhoneNumberType numType; + if(telnumberBuf.Locate('+') == 0) + { + numType = EBTMonoATPhoneNumberInternational; + } + else + { + numType = EBTMonoATPhoneNumberNational; + } + LEAVE_IF_ERROR(params.Append(TATParam(numType))) + LEAVE_IF_ERROR(params.Append(TATParam())) + LEAVE_IF_ERROR(params.Append(TATParam(4))) + CATResult* code = CATResult::NewL(EATCNUM, EATActionResult, ¶ms); + CleanupStack::PushL(code); + resarr.AppendL(code); + CleanupStack::Pop(code); + CleanupStack::PopAndDestroy(¶ms); + + if(iCorrectNumbersCount == iOnStoreInfo.iUsedEntries) + { + CATResult* okerr = CATResult::NewL(EATOK); + CleanupStack::PushL(okerr); + resarr.AppendL(okerr); + CleanupStack::Pop(okerr); + iProtocol.SendResponseL(resarr); + CleanupStack::PopAndDestroy(&resarr); + Observer().RequestCompletedL(*this, iStatus.Int()); + } + else + { + iProtocol.SendResponseL(resarr); + CleanupStack::PopAndDestroy(&resarr); + GetMsisdnStoreEntry(); + } + } + else + { + CATResult* okerr = CATResult::NewL(EATERROR); + CleanupStack::PushL(okerr); + iProtocol.SendResponseL(*okerr); + CleanupStack::PopAndDestroy(okerr); + Observer().RequestCompletedL(*this, iStatus.Int()); + } + + break; } - else + case EStateGettingMsisdnStoreInfo: { - numType = EBTMonoATPhoneNumberNational; + if(iStatus==KErrNone && iOnStoreInfo.iUsedEntries>0 && + (iOnStoreInfo.iCaps & RMobilePhoneStore::KCapsIndividualEntry)) + { + GetMsisdnStoreEntry(); + } + else + { + CATResult* okerr = CATResult::NewL(EATOK); + CleanupStack::PushL(okerr); + iProtocol.SendResponseL(*okerr); + CleanupStack::PopAndDestroy(okerr); + Observer().RequestCompletedL(*this, iStatus.Int()); + } + break; } - LEAVE_IF_ERROR(params.Append(TATParam(numType))) - LEAVE_IF_ERROR(params.Append(TATParam())) - LEAVE_IF_ERROR(params.Append(TATParam(4))) - CATResult* code = CATResult::NewL(EATCNUM, EATActionResult, ¶ms); - CleanupStack::PushL(code); - resarr.AppendL(code); - CleanupStack::Pop(code); - CleanupStack::PopAndDestroy(¶ms); - okerr = CATResult::NewL(EATOK); + + default: + break; } - else - { - okerr = CATResult::NewL(EATERROR); - } - CleanupStack::PushL(okerr); - resarr.AppendL(okerr); - CleanupStack::Pop(okerr); - iProtocol.SendResponseL(resarr); - CleanupStack::PopAndDestroy(&resarr); - Observer().RequestCompletedL(*this, iStatus.Int()); + TRACE_FUNC_EXIT } + // ------------------------------------------------------------------------------- // CBtmcNumber::DoCancel // ------------------------------------------------------------------------------- @@ -147,7 +218,8 @@ CBtmcProtocol& aProtocol, CActive::TPriority aPriority, TInt aServiceId) - : CBtmcActive(aObserver, aPriority, aServiceId), iProtocol(aProtocol), iPckg(iEntry) + : CBtmcActive(aObserver, aPriority, aServiceId), iProtocol(aProtocol), iPckg(iEntry), + iOnStoreInfoPckg(iOnStoreInfo), iState(EStateNull), iUsedEntriesCount(1), iCorrectNumbersCount(0) { } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btmac/src/btmac/btmrfcommsock.cpp --- a/bluetoothengine/btmac/src/btmac/btmrfcommsock.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btmac/src/btmac/btmrfcommsock.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -229,16 +229,20 @@ { TRACE_FUNC_ENTRY TRACE_INFO((_L("err %d"), aErr)) - + + if (aErr == KErrNone) + { + TBTSockAddr sockAddr; + iDataSocket->RemoteName(sockAddr); + iRemote = sockAddr.BTAddr(); + } + // Process the connect complete before issuing a receive request to ensure that // we are ready to process the data when it is received. iObserver->RfcommConnectCompletedL(aErr); - if (!aErr) + if (aErr == KErrNone) { - TBTSockAddr sockAddr; - iDataSocket->RemoteName(sockAddr); - iRemote = sockAddr.BTAddr(); iInData.ReAllocL(256); RequestMasterRole(); TInt err = iAda.Open(iServer, iRemote); @@ -256,17 +260,20 @@ { TRACE_FUNC_ENTRY - iRemoteHasConnected = ETrue; + if (aErr == KErrNone) + { + iRemoteHasConnected = ETrue; + TBTSockAddr sockAddr; + iDataSocket->RemoteName(sockAddr); + iRemote = sockAddr.BTAddr(); + } // Process the accept complete before issuing a receive request to ensure that // we are ready to process the data when it is received. iObserver->RfcommAcceptCompletedL(aErr, iService); - if (!aErr) + if (aErr == KErrNone) { - TBTSockAddr sockAddr; - iDataSocket->RemoteName(sockAddr); - iRemote = sockAddr.BTAddr(); iInData.ReAllocL(256); RequestMasterRole(); TInt err = iAda.Open(iServer, iRemote); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/ecom/BtnotifWrapper.cpp --- a/bluetoothengine/btnotif/ecom/BtnotifWrapper.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/ecom/BtnotifWrapper.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -78,64 +78,101 @@ KBTInquiryPriority, _L("BTNotif.dll"), KMaxSynchReplyBufLength); - + + CleanupStack::PushL( master ); subjects->AppendL( master ); - - // Notifiers using masters session - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTManAuthNotifierUid, - KBTAuthorisationChannel, - KBTAuthorisationPriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTPinCodeEntryNotifierUid, - KBTAuthenticationChannel, - KBTAuthenticationPriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTObexPasskeyQueryNotifierUid, - KBTObexPINChannel, - KBTObexPinPriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KPowerModeSettingNotifierUid, - KBTPowerModeChannel, - KBTPowerModePriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTGenericInfoNotifierUid, - KBTGenericInfoNotifierUid, - KBTGenericInfoNotifierPriority)); + CleanupStack::Pop( master ); + + // Notifiers using masters session + CAknNotifierWrapperLight* notif = NULL; + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTManAuthNotifierUid, + KBTAuthorisationChannel, + KBTAuthorisationPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTPinCodeEntryNotifierUid, + KBTAuthenticationChannel, + KBTAuthenticationPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTObexPasskeyQueryNotifierUid, + KBTObexPINChannel, + KBTObexPinPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KPowerModeSettingNotifierUid, + KBTPowerModeChannel, + KBTPowerModePriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTGenericInfoNotifierUid, + KBTGenericInfoNotifierUid, + KBTGenericInfoNotifierPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTGenericQueryNotifierUid, - KBTGenericQueryNotifierUid, - KBTGenericQueryNotifierPriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KPbapAuthNotifierUid, - KBTObexPINChannel, - KBTObexPinPriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTPairedDeviceSettingNotifierUid, - KBTPairedDeviceSettingChannel, - KBTPairedDeviceSettingPriority)); + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTGenericQueryNotifierUid, + KBTGenericQueryNotifierUid, + KBTGenericQueryNotifierPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KPbapAuthNotifierUid, + KBTObexPINChannel, + KBTObexPinPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTPairedDeviceSettingNotifierUid, + KBTPairedDeviceSettingChannel, + KBTPairedDeviceSettingPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTNumericComparisonNotifierUid, - KBTNumericComparisonNotifierUid, - KBTNumericComparisonPriority)); - - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTPasskeyDisplayNotifierUid, - KBTPasskeyDisplayNotifierUid, - KBTPasskeyEntryNotifierPriority)); + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTNumericComparisonNotifierUid, + KBTNumericComparisonNotifierUid, + KBTNumericComparisonPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); - subjects->AppendL(new (ELeave) CAknNotifierWrapperLight(*master, - KBTEnterpriseItSecurityInfoNotifierUid, - KBTEnterpriseItSecurityInfoNotifierUid, - KBTEnterpriseItSecurityInfoNotifierPriority)); + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTPasskeyDisplayNotifierUid, + KBTPasskeyDisplayNotifierUid, + KBTPasskeyEntryNotifierPriority); + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); + + notif = new (ELeave) CAknNotifierWrapperLight(*master, + KBTEnterpriseItSecurityInfoNotifierUid, + KBTEnterpriseItSecurityInfoNotifierUid, + KBTEnterpriseItSecurityInfoNotifierPriority); + + CleanupStack::PushL( notif ); + subjects->AppendL( notif ); + CleanupStack::Pop( notif ); CleanupStack::Pop(); // array cleanup return(subjects); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/BTNGenericInfoNotifier.h --- a/bluetoothengine/btnotif/inc/BTNGenericInfoNotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/BTNGenericInfoNotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -93,7 +93,7 @@ void ShowNoteAndCompleteL(); private: - HBufC* iQueryMessage; + RBuf iQueryMessage; TInt iMessageResourceId; TSecondaryDisplayBTnotifDialogs iSecondaryDisplayCommand; }; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/BTNGenericQueryNotifier.h --- a/bluetoothengine/btnotif/inc/BTNGenericQueryNotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/BTNGenericQueryNotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -95,14 +95,14 @@ private: - HBufC* iQueryMessage; - HBufC* iQueryHeader; + RBuf iQueryMessage; + HBufC* iQueryHeader; HBufC* iName; TInt iMessageResourceId; TSecondaryDisplayBTnotifDialogs iSecondaryDisplayCommand; TBool iIsMessageQuery; - TBool iIsNameQuery; + TBool iIsNameQuery; }; #endif diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnotifier.h --- a/bluetoothengine/btnotif/inc/btnotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -295,6 +295,7 @@ CBTEngSettings* iBTEngSettings; private: CBTEngDevMan* iDevMan; // for BT registry manipulation + TBool iIsCoverUI; }; diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnotifuiutil.h --- a/bluetoothengine/btnotif/inc/btnotifuiutil.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnotifuiutil.h Fri Feb 19 22:59:18 2010 +0200 @@ -21,7 +21,7 @@ #include #include #include -#include +#include // CONSTANTS // Literals for resource and bitmap files ( drive, directory, filename(s) ) diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnpaireddevsettnotifier.h --- a/bluetoothengine/btnotif/inc/btnpaireddevsettnotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnpaireddevsettnotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -83,11 +83,6 @@ private: /** - * Leave function called by non-leave btengdevman callback function HandleGetDevicesComplete(). - *@param aErr. Passed by caller. - */ - - /** * Parse the data out of the message that is sent by the client of the notifier. * @param aBuffer A package buffer containing received parameters. * @return None. diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnpairnotifier.h --- a/bluetoothengine/btnotif/inc/btnpairnotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnpairnotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -84,8 +84,9 @@ /** * Generate prompt based on subclass's own needs. + * @param aRBuf the descriptor to which the prompt will be loaded. */ - virtual HBufC* GenerateQueryPromoptLC(); + virtual void GenerateQueryPromptL( RBuf& aRBuf ); private: /** diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnpinnotifier.h --- a/bluetoothengine/btnotif/inc/btnpinnotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnpinnotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -72,8 +72,9 @@ /** * From CBTNPairNotifierBase * Generate prompt in Pin query dialog. + * @param aRBuf the descriptor to which the prompt will be loaded. */ - HBufC* GenerateQueryPromoptLC(); + void GenerateQueryPromptL(RBuf& aRBuf); private: diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnssppasskeyentrynotifier.h --- a/bluetoothengine/btnotif/inc/btnssppasskeyentrynotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnssppasskeyentrynotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -77,10 +77,9 @@ /** * Generate prompt for passkey entry query. - * @param None. - * @return None. + * @param aRBuf the descriptor to which the prompt will be loaded. */ - HBufC* GenerateQueryPromoptLC(); + void GenerateQueryPromptL( RBuf& aRBuf ); private: diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/inc/btnumcmpnotifier.h --- a/bluetoothengine/btnotif/inc/btnumcmpnotifier.h Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/inc/btnumcmpnotifier.h Fri Feb 19 22:59:18 2010 +0200 @@ -75,10 +75,9 @@ /** * From CBTNPairNotifierBase - * @param None. - * @return None. + * @param aRBuf the descriptor to which the prompt will be loaded. */ - HBufC* GenerateQueryPromoptLC(); + void GenerateQueryPromptL( RBuf& aRBuf ); private: diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNAuthNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNAuthNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNAuthNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -17,7 +17,6 @@ // INCLUDE FILES -#include // Localisation stringloader #include // Own resources #include "btnauthnotifier.h" // Own class definition #include "btNotifDebug.h" // Debugging macros @@ -39,6 +38,7 @@ #include #include // The bt hrh info is needed, for help launching #endif +#include #include "btnotifnameutils.h" @@ -120,30 +120,31 @@ { User::Leave(KErrInUse); } - else if ( AutoLockOnL() ) + + iMessage = aMessage; + iReplySlot = aReplySlot; + + if ( AutoLockOnL() ) { // The phone is locked, access denied. // Write results back to caller and complete message. - CompleteMessage(EFalse, KErrNone); + CompleteMessage(EFalse, KErrNone); return; } - TBTAuthorisationParams param; - TPckgC pckg(param); - pckg.Set(aBuffer); + TBTAuthorisationParams param; + TPckgC pckg(param); + pckg.Set(aBuffer); - iServiceUid = pckg().iUid.iUid; // Pick up service uid from message - iBTAddr = pckg().iBDAddr; - if ( OtherOutgoPairing( iBTAddr ) ) + iServiceUid = pckg().iUid.iUid; // Pick up service uid from message + iBTAddr = pckg().iBDAddr; + if ( OtherOutgoPairing( iBTAddr ) ) { // We won't allow connection request from another device during outgoing pairing: FLOG(_L("[BTNOTIF]\t CBTAuthNotifier: outgoing pair in progress, reject request from other device")); CompleteMessage(KErrCancel); return; - } - - iMessage = aMessage; - iReplySlot = aReplySlot; + } // create iDevice so that the name won't be lost if the device does // not exist in registry. @@ -201,9 +202,12 @@ if ( !iDevice->IsValidFriendlyName() && iDevice->IsValidDeviceName()) { // Create new prompt string with new device name - HBufC* stringholder = StringLoader::LoadL( iStrResourceId, BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())); - CleanupStack::PushL( stringholder ); - iNotifUiUtil->UpdateQueryDlgL( *stringholder ); + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, iStrResourceId, + BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()), 0 ); + iNotifUiUtil->UpdateQueryDlgL( stringholder ); iNotifUiUtil->UpdateCoverUiL( iDevice->DeviceName() ); CleanupStack::PopAndDestroy(); // stringholder } @@ -500,8 +504,11 @@ TBTDeviceName tempDeviceName; BtNotifNameUtils::GetDeviceDisplayName(tempDeviceName, iDevice); - HBufC* stringholder = StringLoader::LoadLC( iStrResourceId, tempDeviceName); - TInt keypress = iNotifUiUtil->ShowQueryL( *stringholder, R_BT_AUTHORISATION_QUERY, + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, iStrResourceId, tempDeviceName, 0); + TInt keypress = iNotifUiUtil->ShowQueryL( stringholder, R_BT_AUTHORISATION_QUERY, iCoverUiDlgId, tempDeviceName, CAknQueryDialog::EConfirmationTone ); CleanupStack::PopAndDestroy(); // stringholder // If this notifier is cancelled by the caller, no need to perform the rest operation: diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNGenericInfoNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNGenericInfoNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNGenericInfoNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -24,6 +24,7 @@ #include "btNotifDebug.h" // Debugging macros #include #include +#include #include "btnotifnameutils.h" // ================= MEMBER FUNCTIONS ======================= @@ -59,7 +60,7 @@ CBTGenericInfoNotifier::~CBTGenericInfoNotifier() { Cancel(); // Free own resources - delete iQueryMessage; + iQueryMessage.Close(); } // ---------------------------------------------------------- @@ -203,13 +204,20 @@ User::Leave(KErrNotFound); } - // if the logic string contains substitute indicator "%U", replace it with device name: - iQueryMessage = StringLoader::LoadL( iMessageResourceId); - _LIT(PU,"%U"); - if( iQueryMessage->Find(PU) != KErrNotFound) + // if the logic string contains substitute indicator "%U", replace it with device name: + HBufC* buf = StringLoader::LoadL( iMessageResourceId); + iQueryMessage.Assign( buf ); + + TInt keyLen; + TInt pos = BluetoothUiUtil::GetStringSubstringKeyPos( + iQueryMessage, 0, keyLen ); + if( pos > KErrNotFound) { iBTAddr = TBTDevAddr( bPckg().iRemoteAddr ); - iDevice = CBTDevice::NewL(iBTAddr); + if( !iDevice ) + { + iDevice = CBTDevice::NewL(iBTAddr); + } GetDeviceFromRegL( iBTAddr ); } else @@ -225,7 +233,7 @@ // void CBTGenericInfoNotifier::ShowNoteAndCompleteL() { - iNotifUiUtil->ShowInfoNoteL( *iQueryMessage, iSecondaryDisplayCommand ); + iNotifUiUtil->ShowInfoNoteL( iQueryMessage, iSecondaryDisplayCommand ); CompleteMessage(KErrNone); FLOG(_L("[BTNOTIF]\t CBTGenericInfoNotifier::ShowNoteAndComplete() complete")); } @@ -234,12 +242,11 @@ { FLOG(_L("[BTNOTIF]\t CBTGenericInfoNotifier::HandleGetDeviceCompleted()")); - delete iQueryMessage; - iQueryMessage=NULL; - TBTDeviceName name; BtNotifNameUtils::GetDeviceDisplayName(name, iDevice); - iQueryMessage = StringLoader::LoadL( iMessageResourceId, name); + iQueryMessage.Zero(); + BluetoothUiUtil::LoadResourceAndSubstringL( + iQueryMessage, iMessageResourceId, name, 0); ShowNoteAndCompleteL(); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNGenericQueryNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNGenericQueryNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNGenericQueryNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -23,6 +23,7 @@ #include #include // Own resources #include +#include #include "BTNGenericQueryNotifier.h" // Own class definition #include "btNotifDebug.h" // Debugging macros @@ -65,7 +66,7 @@ { Cancel(); // Free own resources delete iName; - delete iQueryMessage; + iQueryMessage.Close(); delete iQueryHeader; } @@ -226,14 +227,15 @@ } // if the logic string contains substitute indicator "%U", replace it with device name: - // - iQueryMessage = StringLoader::LoadL( iMessageResourceId); - _LIT(PU,"%U"); - if( iQueryMessage->Find(PU) != KErrNotFound) + // + HBufC* buf = StringLoader::LoadL( iMessageResourceId); + iQueryMessage.Assign( buf ); + + TInt keyLen; + TInt pos = BluetoothUiUtil::GetStringSubstringKeyPos( + iQueryMessage, 0, keyLen ); + if( pos > KErrNotFound) { - delete iQueryMessage; - iQueryMessage=NULL; - //if no device name provided, default name will be used: if( !bPckg().iNameExists ) iName=StringLoader::LoadL(R_BT_DIALOG_DEF_NAME); @@ -242,7 +244,8 @@ iName=HBufC::NewL(bPckg().iName.Length() ); iName->Des().Copy(bPckg().iName); } - iQueryMessage = StringLoader::LoadL( iMessageResourceId,*iName); + BluetoothUiUtil::LoadResourceAndSubstringL( + iQueryMessage, iMessageResourceId, *iName, 0); } else { @@ -258,18 +261,16 @@ TPtrC8 CBTGenericQueryNotifier::UpdateL(const TDesC8& aBuffer) { FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::UpdateL")); - delete iQueryMessage; - iQueryMessage = NULL; ProcessParamBufferL(aBuffer); if( !iNotifUiUtil->IsQueryReleased() ) { if(iIsMessageQuery ) { - iNotifUiUtil->UpdateMessageQueryDlgL(*iQueryMessage); + iNotifUiUtil->UpdateMessageQueryDlgL(iQueryMessage); } else { - iNotifUiUtil->UpdateQueryDlgL(*iQueryMessage); + iNotifUiUtil->UpdateQueryDlgL(iQueryMessage); } } FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::UpdateL complete")); @@ -325,12 +326,12 @@ if( iIsMessageQuery ) { - keypress = iNotifUiUtil->ShowMessageQueryL(*iQueryMessage, *iQueryHeader, + keypress = iNotifUiUtil->ShowMessageQueryL(iQueryMessage, *iQueryHeader, R_BT_GENERIC_MESSAGE_QUERY, CAknQueryDialog::EConfirmationTone ); } else { - keypress = iNotifUiUtil->ShowQueryL( *iQueryMessage, R_BT_GENERIC_QUERY, + keypress = iNotifUiUtil->ShowQueryL( iQueryMessage, R_BT_GENERIC_QUERY, iSecondaryDisplayCommand, name, CAknQueryDialog::EConfirmationTone ); } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNInqUI.cpp --- a/bluetoothengine/btnotif/src/BTNInqUI.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNInqUI.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -22,7 +22,6 @@ #include #include #include -#include // Localisation stringloader #include // For WLAN state checking #include #include @@ -33,6 +32,7 @@ #include // Borrow WLan signal strenth bar to show RSSI #include #include +#include #include "btninqui.h" // Own class definition #include "btNotifDebug.h" // Debugging macros #include "btnotifnameutils.h" @@ -1047,21 +1047,14 @@ TInt CBTInqUI::QueryUnblockDeviceL(CBTDevice* aDevice) { FLOG(_L("[BTNOTIF]\t CBTInqUI::QueryUnblockDeviceL()")); - - HBufC* stringholder = NULL; - - if (aDevice->IsValidFriendlyName()) - { - stringholder = StringLoader::LoadLC(R_BT_UNBLOCK_DEVICE, aDevice->FriendlyName()); - } - else - { - stringholder = StringLoader::LoadLC(R_BT_UNBLOCK_DEVICE, BTDeviceNameConverter::ToUnicodeL(aDevice->DeviceName())); - } - - TBTDeviceName name(KNullDesC); + RBuf stringholder; + stringholder.CleanupClosePushL(); + TBTDeviceName name; + BtNotifNameUtils::GetDeviceDisplayName( name, aDevice ); + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, R_BT_UNBLOCK_DEVICE, name, 0 ); TInt keypress(0); - keypress = iUiUtil->ShowQueryL( *stringholder, R_BT_UNBLOCK_QUERY, + keypress = iUiUtil->ShowQueryL( stringholder, R_BT_UNBLOCK_QUERY, ECmdBTnotifUnavailable, name, CAknQueryDialog::EConfirmationTone ); CleanupStack::PopAndDestroy(); // stringholder FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::QueryUnblockDeviceL() keypress= %d"),keypress)); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNObexPinNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNObexPinNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNObexPinNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -84,17 +84,18 @@ { User::Leave(KErrInUse); } - else if ( AutoLockOnL() ) + + iMessage = aMessage; + iReplySlot = aReplySlot; + + if ( AutoLockOnL() ) { // The phone is locked, access denied. // CompleteMessage(KErrCancel); return; } - - iMessage = aMessage; - iReplySlot = aReplySlot; - + ShowNoteCompleteMessageL(); FLOG(_L("[BTNOTIF]\t CBTObexPinNotifier::GetParamsL() completed")); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNPBAPPinNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNPBAPPinNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNPBAPPinNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -92,16 +92,17 @@ { User::Leave(KErrInUse); } - else if ( AutoLockOnL() ) + + iMessage = aMessage; + iReplySlot = aReplySlot; + + if ( AutoLockOnL() ) { // The phone is locked, access denied. // CompleteMessage(KErrCancel); return; } - - iMessage = aMessage; - iReplySlot = aReplySlot; ShowNoteCompleteMessageL(); diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNPinNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNPinNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNPinNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -24,6 +24,7 @@ #include #include #include // Own resources +#include #include "btnotif.hrh" // Own resource header #include "btnpinnotifier.h" // Own class definition #include "btNotifDebug.h" // Debugging macros @@ -167,11 +168,12 @@ FOREVER { TBuf tempResultBuffer; - - HBufC* prompt = GenerateQueryPromoptLC(); // prompt still in stack. - TInt keypress = iNotifUiUtil->ShowTextInputQueryL(tempResultBuffer, *prompt, R_BT_ENTER_PASSKEY_QUERY, + RBuf prompt; + prompt.CleanupClosePushL(); + GenerateQueryPromptL( prompt ); + TInt keypress = iNotifUiUtil->ShowTextInputQueryL(tempResultBuffer, prompt, R_BT_ENTER_PASSKEY_QUERY, ECmdShowBtOpenCoverNote, CAknQueryDialog::EConfirmationTone ); - CleanupStack::PopAndDestroy( prompt ); + CleanupStack::PopAndDestroy( &prompt ); if( keypress ) // OK pressed { @@ -248,35 +250,32 @@ } // ---------------------------------------------------------- -// CBTPinNotifier::GenerateQueryPromoptLC +// CBTPinNotifier::GenerateQueryPromptL // ---------------------------------------------------------- -HBufC* CBTPinNotifier::GenerateQueryPromoptLC() +void CBTPinNotifier::GenerateQueryPromptL( RBuf& aRBuf ) { - FLOG(_L("[BTNOTIF]\t CBTPinNotifier::GenerateQueryPromoptLC() >>")); - HBufC* prompt = NULL; - + FLOG(_L("[BTNOTIF]\t CBTPinNotifier::GenerateQueryPromptLC() >>")); TBTDeviceName devName; - BtNotifNameUtils::GetDeviceDisplayName( devName, iDevice ); + BtNotifNameUtils::GetDeviceDisplayName( devName, iDevice ); if (iPasskeyLength > 0) //Minimum length passkey is defined { - CDesCArray* stringArray = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL( stringArray ); - CArrayFix* indexArray = new(ELeave) CArrayFixFlat(1); - CleanupStack::PushL( indexArray ); + BluetoothUiUtil::LoadResourceAndSubstringL( + aRBuf, R_BT_MIN_PASSKEY_PROMPT, devName, 1 ); - stringArray->AppendL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()) ); - indexArray->AppendL( iPasskeyLength); - prompt = StringLoader::LoadL( R_BT_MIN_PASSKEY_PROMPT, *stringArray, *indexArray ); - - CleanupStack::PopAndDestroy( indexArray ); - CleanupStack::PopAndDestroy( stringArray ); - CleanupStack::PushL( prompt ); + RBuf tmpBuf; + tmpBuf.CleanupClosePushL(); + tmpBuf.Swap( aRBuf ); + aRBuf.ReAllocL( aRBuf.MaxLength() + sizeof(TUint)); + aRBuf.Zero(); + // Passkey length should be localized, hope StringLoader can make it: + StringLoader::Format( aRBuf, tmpBuf, 0, iPasskeyLength ); + CleanupStack::PopAndDestroy( &tmpBuf ); } else { - prompt = StringLoader::LoadLC( R_BT_PASSKEY_PROMPT, devName ); + BluetoothUiUtil::LoadResourceAndSubstringL( + aRBuf, R_BT_PASSKEY_PROMPT, devName, 0 ); } - FLOG(_L("[BTNOTIF]\t CBTPinNotifier::GenerateQueryPromoptLC() <<")); - return prompt; + FLOG(_L("[BTNOTIF]\t CBTPinNotifier::GenerateQueryPromptLC() <<")); } // End of File diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/BTNotifier.cpp --- a/bluetoothengine/btnotif/src/BTNotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/BTNotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -31,7 +31,7 @@ #include // Own resources #include // Feature Manager API #include // CnvUtfConverter - +#include #include "btnotifier.h" // Own class definition #include "btNotifDebug.h" // Debugging macros #include "btnotiflock.h" @@ -85,14 +85,14 @@ { // Sets up TLS, must be done before FeatureManager is used. FeatureManager::InitializeLibL(); - TBool isCoverUI = ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) ) + iIsCoverUI = ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) ) ? ETrue : EFalse; // Frees the TLS. Must be done after FeatureManager is used. FeatureManager::UnInitializeLib(); iBTEngSettings = CBTEngSettings::NewL(); iDevMan = CBTEngDevMan::NewL( this ); - iNotifUiUtil = CBTNotifUIUtil::NewL( isCoverUI ); + iNotifUiUtil = CBTNotifUIUtil::NewL( iIsCoverUI ); } // ---------------------------------------------------------- @@ -145,6 +145,11 @@ // void CBTNotifierBase::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage) { + if( !iNotifUiUtil ) + { + iNotifUiUtil = CBTNotifUIUtil::NewL( iIsCoverUI ); + } + TRAPD(err, GetParamsL(aBuffer, aReplySlot, aMessage)); if (err) { @@ -423,6 +428,10 @@ TBTRegistrySearch mySearch; mySearch.FindAddress( aAddr ); iDeviceArray = new (ELeave) CBTDeviceArray(1); + if( !iDevMan ) + { + iDevMan = CBTEngDevMan::NewL( this ); + } TInt err = iDevMan->GetDevices( mySearch, iDeviceArray ); if(err) { @@ -449,12 +458,14 @@ TInt resId = IsUserAwarePaired( iDevice->AsNamelessDevice() ) ? R_BT_BLOCK_PAIRED_DEVICE_NOHELP : R_BT_BLOCK_DEVICE_NOHELP; - HBufC* stringHolder = StringLoader::LoadLC( resId, bName ); + RBuf stringholder; + stringholder.CleanupClosePushL(); + BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, resId, bName, 0 ); - TInt keypress = iNotifUiUtil->ShowMessageQueryL( *stringHolder, *header, + TInt keypress = iNotifUiUtil->ShowMessageQueryL( stringholder, *header, R_BT_GENERIC_MESSAGE_QUERY, CAknQueryDialog::EConfirmationTone ); - CleanupStack::PopAndDestroy(stringHolder); + CleanupStack::PopAndDestroy(&stringholder); CleanupStack::PopAndDestroy(header); if( keypress )// user replied "Yes" @@ -479,6 +490,10 @@ iDevice->DeleteLinkKey(); iBTRegistryQueryState = ESetDeviceBlocked; + if( !iDevMan ) + { + iDevMan = CBTEngDevMan::NewL( this ); + } TInt devManErr = iDevMan->ModifyDevice( *iDevice ); // if error, complete message, otherwise waiting for devman callback @@ -496,6 +511,10 @@ iDevice->SetGlobalSecurity(sec); iBTRegistryQueryState = ESetDeviceAuthorizeState; + if( !iDevMan ) + { + iDevMan = CBTEngDevMan::NewL( this ); + } TInt devManErr = iDevMan->ModifyDevice( *iDevice ); // if error, complete message, otherwise waiting for devman callback diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/btnenterpriseitsecurityinfonotifier.cpp --- a/bluetoothengine/btnotif/src/btnenterpriseitsecurityinfonotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/btnenterpriseitsecurityinfonotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -18,7 +18,7 @@ // INCLUDE FILES #include // Own resources #include "btnenterpriseitsecurityinfonotifier.h" // Own class definition -#include "BTNotifDebug.h" // Debugging macros +#include "btNotifDebug.h" // Debugging macros #include #include #include diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/btnotifuiutil.cpp --- a/bluetoothengine/btnotif/src/btnotifuiutil.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/btnotifuiutil.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -17,12 +17,12 @@ #include // BAFL utils (for language file) #include "btnotifuiutil.h" -#include "BTNotifDebug.h" // Debugging macros -#include // Localisation stringloader -#include // Information note +#include "btNotifDebug.h" // Debugging macros +#include // Localisation stringloader +#include // Information note #include // for the blocking query -#include // CoverUI -#include // Backlight control +#include // CoverUI +#include // Backlight control #include // Application Key enable/disable CBTNotifUIUtil* CBTNotifUIUtil::NewL( TBool aCoverDisplayEnabled ) diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/btnpaireddevsettnotifier.cpp --- a/bluetoothengine/btnotif/src/btnpaireddevsettnotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/btnpaireddevsettnotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -18,22 +18,22 @@ // INCLUDE FILES -#include // Localisation stringloader #include // Own resources #include +#include #include "btnotiflock.h" -#include "btnpaireddevsettNotifier.h" // Own class definition -#include "BTNotifDebug.h" // Debugging macros +#include "btnpaireddevsettnotifier.h" // Own class definition +#include "btNotifDebug.h" // Debugging macros #include #include "btnotifnameutils.h" -#include +#include #include -#include // CoverUI +#include // CoverUI #ifdef __SERIES60_HELP -#include +#include #include // The bt hrh info is needed, for help launching #endif @@ -127,26 +127,23 @@ TBTDeviceName name; BtNotifNameUtils::GetDeviceDisplayName(name, iDevice); + RBuf stringholder; + stringholder.CleanupClosePushL(); + // 1. Show pairing status note FTRACE(FPrint(_L("[BTNOTIF]\t CBTPairedDevSettNotifier iPairingStatus: %d"), iPairingStatus)); TInt resourceId = ProcessPairingErrorCode( iPairingStatus ); - HBufC* stringholder = StringLoader::LoadLC( resourceId ); - _LIT(PU,"%U"); - if( stringholder->Find(PU) != KErrNotFound) - { - CleanupStack::PopAndDestroy( stringholder ); - stringholder = StringLoader::LoadLC( resourceId, name ); - } - + BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, resourceId, name, 0 ); + if (!iPairingStatus) { - iNotifUiUtil->ShowConfirmationNoteL( ETrue, *stringholder, iSecondaryDisplayCommand, name ); + iNotifUiUtil->ShowConfirmationNoteL( ETrue, stringholder, iSecondaryDisplayCommand, name ); } else { - iNotifUiUtil->ShowErrorNoteL( ETrue, *stringholder, iSecondaryDisplayCommand, name ); + iNotifUiUtil->ShowErrorNoteL( ETrue, stringholder, iSecondaryDisplayCommand, name ); } - CleanupStack::PopAndDestroy( stringholder ); // stringholder + CleanupStack::PopAndDestroy( &stringholder ); if( iPairingStatus || (iDevice && iDevice->GlobalSecurity().Banned() ) ) { diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/btnpairnotifier.cpp --- a/bluetoothengine/btnotif/src/btnpairnotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/btnpairnotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -22,10 +22,10 @@ #include // new file introduced by xSymbian #endif -#include // Localisation stringloader #include // Unicode character conversion utilities #include #include // Own resources +#include #include "btnpairnotifier.h" #include "btNotifDebug.h" #include "btnotifnameutils.h" @@ -80,16 +80,17 @@ { User::Leave(KErrInUse); } - else if ( AutoLockOnL() ) + + iMessage = (RMessage2)aMessage; + iReplySlot = aReplySlot; + + if ( AutoLockOnL() ) { // The phone is locked, access denied. // CompleteMessage(KErrCancel); - return; } - iMessage = (RMessage2)aMessage; - iReplySlot = aReplySlot; } // ---------------------------------------------------------- @@ -127,9 +128,11 @@ // and user has not given a alias for device. if( !iNotifUiUtil->IsQueryReleased() && !iDevice->IsValidFriendlyName() ) { - HBufC* prompt = GenerateQueryPromoptLC(); - iNotifUiUtil->UpdateQueryDlgL( *prompt ); - CleanupStack::PopAndDestroy( prompt ); + RBuf prompt; + prompt.CleanupClosePushL(); + GenerateQueryPromptL( prompt ); + iNotifUiUtil->UpdateQueryDlgL( prompt ); + CleanupStack::PopAndDestroy( &prompt ); } } @@ -203,13 +206,16 @@ TBTDeviceName devName; BtNotifNameUtils::GetDeviceDisplayName( devName, iDevice ); - HBufC* prompt = StringLoader::LoadLC( R_BT_ACCEPT_PAIRING_REQUEST, devName ); + RBuf prompt; + prompt.CleanupClosePushL(); + BluetoothUiUtil::LoadResourceAndSubstringL( + prompt, R_BT_ACCEPT_PAIRING_REQUEST, devName, 0 ); - TBTDeviceName nameCoverUi( KNullDesC ); + devName.Zero(); // Show query for use to accept/reject incoming pairing request - TInt keypress = iNotifUiUtil->ShowQueryL( *prompt, R_BT_GENERIC_QUERY, - ECmdBTnotifUnavailable, nameCoverUi, CAknQueryDialog::EConfirmationTone ); - CleanupStack::PopAndDestroy( prompt ); + TInt keypress = iNotifUiUtil->ShowQueryL( prompt, R_BT_GENERIC_QUERY, + ECmdBTnotifUnavailable, devName, CAknQueryDialog::EConfirmationTone ); + CleanupStack::PopAndDestroy( &prompt ); if( iMessage.IsNull() ) // cancelled by the stack { @@ -236,11 +242,12 @@ } // ---------------------------------------------------------- -// CBTNPairNotifierBase::GenerateQueryPromoptLC +// CBTNPairNotifierBase::GenerateQueryPromptL // To be implemented in derived classes. // ---------------------------------------------------------- // -HBufC* CBTNPairNotifierBase::GenerateQueryPromoptLC() +void CBTNPairNotifierBase::GenerateQueryPromptL( RBuf& aRBuf ) { - return NULL; + FLOG(_L("[BTNOTIF]\t CBTNPairNotifierBase::GenerateQueryPromptL WARNING ")); + (void) aRBuf; } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/btnssppasskeyentrynotifier.cpp --- a/bluetoothengine/btnotif/src/btnssppasskeyentrynotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/btnssppasskeyentrynotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -31,7 +31,7 @@ #endif #include // Own resources #include - +#include #include "btnotif.hrh" // Own resource header #include "btnssppasskeyentrynotifier.h" // Own class definition #include "btNotifDebug.h" // Debugging macros @@ -184,9 +184,11 @@ } if ( !iNotifUiUtil->IsQueryReleased() ) { - HBufC* update = GenerateQueryPromoptLC(); - iNotifUiUtil->UpdateQueryDlgL( *update ); - CleanupStack::PopAndDestroy( update ); + RBuf prompt; + prompt.CleanupClosePushL(); + GenerateQueryPromptL( prompt ); + iNotifUiUtil->UpdateQueryDlgL( prompt ); + CleanupStack::PopAndDestroy( &prompt ); } FLOG(_L("[BTNOTIF]\t CBTSSPPasskeyEntryNotifier::UpdateL() completed")); @@ -226,11 +228,14 @@ iBuf.Zero(); iBuf.Append(iPasskey); iBuf.Append(_L(" ")); - HBufC* prompt = GenerateQueryPromoptLC(); - TInt answer = iNotifUiUtil->ShowQueryL( *prompt, R_BT_PASSKEY_QUERY, + RBuf prompt; + prompt.CleanupClosePushL(); + GenerateQueryPromptL( prompt ); + + TInt answer = iNotifUiUtil->ShowQueryL( prompt, R_BT_PASSKEY_QUERY, ECmdBTnotifUnavailable, nameCoverUi ); - CleanupStack::PopAndDestroy( prompt ); + CleanupStack::PopAndDestroy( &prompt ); if( iAnswer ) // user pressed entry key from remote keyboard. { @@ -260,23 +265,18 @@ } // ---------------------------------------------------------- -// CBTSSPPasskeyEntryNotifier::GenerateQueryPromoptLC +// CBTSSPPasskeyEntryNotifier::GenerateQueryPromptL // ---------------------------------------------------------- // -HBufC* CBTSSPPasskeyEntryNotifier::GenerateQueryPromoptLC() +void CBTSSPPasskeyEntryNotifier::GenerateQueryPromptL( RBuf& aRBuf ) { - FLOG(_L("[BTNOTIF]\t CBTSSPPasskeyEntryNotifier::GenerateQueryPromoptLC()")); + FLOG(_L("[BTNOTIF]\t CBTSSPPasskeyEntryNotifier::GenerateQueryPromptL()")); TBTDeviceName devName; BtNotifNameUtils::GetDeviceDisplayName(devName, iDevice); - - CPtrCArray* subsPrompt = new (ELeave) CPtrCArray(2); - CleanupStack::PushL( subsPrompt ); - subsPrompt->AppendL( devName ); - subsPrompt->AppendL( iBuf ); - HBufC* prompt = StringLoader::LoadL( R_BT_SSP_PASSKEY_ENTRY , *subsPrompt ); - CleanupStack::PopAndDestroy( subsPrompt ); - CleanupStack::PushL( prompt ); - FLOG(_L("[BTNOTIF]\t CBTSSPPasskeyEntryNotifier::GenerateQueryPromoptLC() << ")); - return prompt; + BluetoothUiUtil::LoadResourceAndSubstringL( + aRBuf, R_BT_SSP_PASSKEY_ENTRY, devName, 0 ); + BluetoothUiUtil::AddSubstringL( aRBuf, iBuf, 1 ); + FLOG(_L("[BTNOTIF]\t CBTSSPPasskeyEntryNotifier::GenerateQueryPromptL() << ")); + } // End of File diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btnotif/src/btnumcmpnotifier.cpp --- a/bluetoothengine/btnotif/src/btnumcmpnotifier.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btnotif/src/btnumcmpnotifier.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -33,6 +33,7 @@ #include #include #include +#include #include "btnotifnameutils.h" #ifdef __SERIES60_HELP @@ -154,9 +155,11 @@ // For outgoing pairing request or accepted incoming pairing request, // ask user to compare the pincodes in two devices. TBTDeviceName nameCoverUi( KNullDesC ); - HBufC* prompt = GenerateQueryPromoptLC(); - TInt answer = iNotifUiUtil->ShowQueryL( *prompt, R_BT_GENERIC_QUERY, ECmdShowBtOpenCoverNote, nameCoverUi ); - CleanupStack::PopAndDestroy( prompt ); + RBuf prompt; + prompt.CleanupClosePushL(); + GenerateQueryPromptL( prompt ); + TInt answer = iNotifUiUtil->ShowQueryL( prompt, R_BT_GENERIC_QUERY, ECmdShowBtOpenCoverNote, nameCoverUi ); + CleanupStack::PopAndDestroy( &prompt ); if( answer ) { @@ -187,20 +190,18 @@ } // ---------------------------------------------------------- -// CBTNumCmpNotifier::GenerateQueryPromoptLC +// CBTNumCmpNotifier::GenerateQueryPromptL // Generate prompt for Numeric Comparison query and return. // ---------------------------------------------------------- // -HBufC* CBTNumCmpNotifier::GenerateQueryPromoptLC() +void CBTNumCmpNotifier::GenerateQueryPromptL( RBuf& aRBuf ) { - FLOG(_L("[BTNOTIF]\t CBTNumCmpNotifier::GenerateQueryPromoptLC()")); + FLOG(_L("[BTNOTIF]\t CBTNumCmpNotifier::GenerateQueryPromptL()")); TBTDeviceName devName; BtNotifNameUtils::GetDeviceDisplayName( devName, iDevice ); - - CPtrCArray* subs = new (ELeave) CPtrCArray(2); - CleanupStack::PushL( subs ); TBuf shortName; + TPtrC namePtr; // Cut the name and put ellipsis in the middle if necessary // By example "SampleSymbianDevice" after this operation will be shown in // the dialog as "Sam...ice"(for 7 chars device name limit) @@ -215,18 +216,20 @@ //adding only end of the name to the final string shortName.Append( devName.Right( shortName.MaxLength() - shortName.Length() ) ); - subs->AppendL( shortName ); + namePtr.Set( shortName ); } else { - subs->AppendL( devName ); + namePtr.Set( devName ); } - subs->AppendL( iPasskeyToShow ); - HBufC* prompt = StringLoader::LoadL( R_BT_SSP_PASSKEY_COMPARISON_PROMPT, *subs ); - CleanupStack::PopAndDestroy( subs ); - CleanupStack::PushL( prompt ); - FLOG(_L("[BTNOTIF]\t CBTNumCmpNotifier::GenerateQueryPromoptLC() <<")); - return prompt; + + BluetoothUiUtil::LoadResourceAndSubstringL( + aRBuf, R_BT_SSP_PASSKEY_COMPARISON_PROMPT, namePtr, 0 ); + // Numeric comparison key shall not be localized either, use our own + // string loading: + BluetoothUiUtil::AddSubstringL( aRBuf, iPasskeyToShow, 1); + FLOG(_L("[BTNOTIF]\t CBTNumCmpNotifier::GenerateQueryPromptL() <<")); + } // End of File diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/Ecom/group/bld.inf --- a/bluetoothengine/btui/Ecom/group/bld.inf Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btui/Ecom/group/bld.inf Fri Feb 19 22:59:18 2010 +0200 @@ -20,10 +20,8 @@ PRJ_PLATFORMS - PRJ_EXPORTS - PRJ_MMPFILES ./BtuiPlugin.mmp diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/Ecom/inc/bluetoothuiutil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/Ecom/inc/bluetoothuiutil.h Fri Feb 19 22:59:18 2010 +0200 @@ -0,0 +1,92 @@ +/* +* 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: This provides utility for loading a BT device name without +* localised to a string to be shown in GUI. +* +*/ +#include + +class BluetoothUiUtil + { +public: + +/* + * Gets the starting position of a key whose pattern matches + * '%'{(0)*|} where 0 and is the decimal value + * of the specified position and is the symbol of the key, + * either 'U' or 'N'. + * + * For example, if the specified position of a number key + * is 0, both "%N" and "%0N" match, + * but "%1N" doesn't. If the position n is greater than 0, + * only "%N" matches. + * @param aDes the descriptor where a key parameter will be searched. + * @param aKey the specified key, 'U' or 'N' + * @param aKeyPos the position of the key. position starts from 0. + * @param aKeyLength the length of the key at return if the key exists. + * @return the start position of the key in aDes. KErrNotFound if the key + * is not available. + */ +inline static TInt GetSubstringKeyPos( const TDes& aDes, const TDesC& aKey, + TInt aKeyPos, TInt& aKeyLength ); + +/* + * Gets the starting position of a string key whose pattern matches + * '%'{(0)*|}'U' where 0 and is the decimal value + * of the specified position. + * + * For example, if the specified position is 0, both "%U" and "%0U" match, + * but "%1U" doesn't. If the position n is greater than 0, + * only "%U" matches. + * @param aDes the descriptor in which a string key will be searched. + * @param aKeyPos the position of the string key. position starts from 0. + * @param aKeyLength the length of the string key at return if the key exists. + * @return the start position of the string key in aDes. KErrNotFound if the key + * is not available. + */ +inline static TInt GetStringSubstringKeyPos( const TDes& aDes, TInt aKeyPos, TInt& aKeyLength ); + +/* + * Add a substring to the specified RBuf descriptor. + * ( Replace "%U" at the specified position withe the given string. + * @param aBuf the RBuf descriptor in which a "%U" will be replaced. + * @param aSub the substring that will replace a "%U". + * @param aSubPos the position of the "%U" to be replaced. Position starts from 0. + */ +inline static void AddSubstringL( RBuf& aBuf, const TDesC& aSub, TInt aSubPos); + +/* + * Load a string specified by the given resource ID, + * remove substrings that match "[" and ends with "]" and finally + * replace the "%U" or "%U" at the specified position with the + * given substring. + * + * This function is intended for adding a Bluetooth device name to a UI + * string but without localizing this name. + * + * (Using StringLoader will get the device name localized in some variants. + * This is a workaround to tackle the unwanted localization.) + * + * @param aBuf the RBuf descriptor in which a "%U" will be replaced. + * @param aSub the substring that will replace a "%U". + * @param aSubPos the position of the "%U" to be replaced. Position starts from 0. + */ +inline static void LoadResourceAndSubstringL(RBuf& aBuf, + TInt aResourceId, const TDesC& aSub, TInt aSubPos ); + }; + +#include "bluetoothuiutil.inl" + +// End of File + diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/Ecom/inc/bluetoothuiutil.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/Ecom/inc/bluetoothuiutil.inl Fri Feb 19 22:59:18 2010 +0200 @@ -0,0 +1,103 @@ +/* +* 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: This provides utility for loading a BT device name without +* localised to a string to be shown in GUI. +* +*/ + +inline TInt BluetoothUiUtil::GetSubstringKeyPos( + const TDes& aDes, const TDesC& aKey, + TInt aKeyPos, TInt& aKeyLength ) + { + ASSERT( aKeyPos > KErrNotFound ); + _LIT(KPercentSymbol, "%" ); + // 32 would be to fit any key substring in practice: + TBuf<32> key; + TInt pos( KErrNotFound ); + // if the specified position is 0, check if "%" (%U or %N) exists. + if ( aKeyPos == 0 ) + { + key.Copy( KPercentSymbol ); + key.Append(aKey); + pos = aDes.Find( key ); + } + // Either the key is not found, or aKeyPos is not 0. + if ( pos == KErrNotFound ) + { + key.Copy( KPercentSymbol ); + key.AppendNum( aKeyPos ); + key.Append( aKey ); + pos = aDes.Find( key ); + } + if ( pos > KErrNotFound ) + { + aKeyLength = key.Length(); + } + return pos; + } + +inline TInt BluetoothUiUtil::GetStringSubstringKeyPos( + const TDes& aDes, TInt aKeyPos, TInt& aKeyLength ) + { + _LIT(KStringKeyword,"U"); + TPtrC ptr( KStringKeyword ); + return GetSubstringKeyPos(aDes, ptr, aKeyPos, aKeyLength ); + } + +inline void BluetoothUiUtil::AddSubstringL( + RBuf& aBuf, const TDesC& aSub, TInt aSubPos) + { + // Find the position of the specified "%U" or %[0-9]U in aBuf. + TInt keyLength; + TInt pos = GetStringSubstringKeyPos( aBuf, aSubPos, keyLength ); + if ( pos == KErrNotFound ) + { + User::Leave( pos ); + } + // Enlarge the max length of aBuf if needed: + TInt reqedLen = aBuf.Length() - keyLength + aSub.Length(); + if ( aBuf.MaxLength() < reqedLen ) + { + aBuf.ReAllocL( reqedLen ); + } + aBuf.Replace( pos, keyLength, aSub ); + } + +inline void BluetoothUiUtil::LoadResourceAndSubstringL(RBuf& aBuf, + TInt aResourceId, const TDesC& aSub, TInt aSubPos ) + { + HBufC* string = StringLoader::LoadL( aResourceId ); + aBuf.Assign( string ); + // Logical loc strings may contain redundant "[]" for some reason. + // This sub-string should be removed in our ad hoc parameter loading method. + _LIT( KLeftSquareBracket,"[" ); + _LIT( KRightSquareBracket,"]" ); + while ( 1 ) + { + TInt lpos = aBuf.Find( KLeftSquareBracket ); + TInt rpos = aBuf.Find( KRightSquareBracket ); + if ( lpos > KErrNotFound && rpos > KErrNotFound && ( rpos > lpos ) ) + { + aBuf.Delete(lpos, rpos - lpos + 1 ); + continue; + } + // No sub-strings that match "[" and ends with "]". Done + break; + } + // Add the substring to this string loaded from resource: + AddSubstringL( aBuf, aSub, aSubPos ); + } + +// End of File + diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp --- a/bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -36,7 +36,9 @@ #include #include // Tab icon for General Setting +#include #include "BTUIMainView.h" // base View. + // --------------------------------------------------------- // CBTUIBlockedDevicesView::ConstructL // Symbian 2nd phase constructor can leave. @@ -177,12 +179,16 @@ TBTDevice device; device.iIndex = bItemIndex; iModel->GetDevice(device); - + + RBuf s; + CleanupClosePushL( s ); + BluetoothUiUtil::LoadResourceAndSubstringL( + s, R_BT_WARN_ERASE_BLOCKED, device.iName, 0); + CAknQueryDialog* dialog = CAknQueryDialog::NewL(CAknQueryDialog::EConfirmationTone); - HBufC* s = StringLoader::LoadLC(R_BT_WARN_ERASE_BLOCKED,device.iName); - TInt keypress = dialog->ExecuteLD(R_BT_GENERIC_QUERY, *s); + TInt keypress = dialog->ExecuteLD(R_BT_GENERIC_QUERY, s); - CleanupStack::PopAndDestroy(s); + CleanupStack::PopAndDestroy(&s); if(keypress) // User has accepted the dialog { diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/Ecom/src/BTUIPairedDevicesView.cpp --- a/bluetoothengine/btui/Ecom/src/BTUIPairedDevicesView.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btui/Ecom/src/BTUIPairedDevicesView.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -48,8 +48,10 @@ #include #include // Tab icon for General Setting +#include #include "BTUIMainView.h" // base View. + const TInt KAutoConnect2ndTry = 1; const TUint32 SetExcludePairedDeviceMask = 0x800000; @@ -620,20 +622,15 @@ device.iIndex = index; iModel->GetDevice(device); - HBufC* stringholder = NULL; + RBuf stringholder; + CleanupClosePushL( stringholder ); TInt tmp=EStatusBtuiConnected|EStatusPhysicallyConnected; // Choose confirmation phrase - // - if ( device.iStatus & tmp ) - { - stringholder = StringLoader::LoadLC(R_BT_WARN_ERASE_CONNECTED, - device.iName); - } - else - { - stringholder = StringLoader::LoadLC(R_BT_WARN_ERASE, device.iName ); - } + TInt resourceId = ( device.iStatus & tmp ) ? R_BT_WARN_ERASE_CONNECTED : + R_BT_WARN_ERASE; + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, resourceId, device.iName, 0 ); // Create confirmation query // @@ -653,9 +650,9 @@ covercl->BufStream().CommitL(); // no more data to send so commit buf } } - TInt keypress = dlg->ExecuteLD(R_BT_WARN_ERASE_QUERY, *stringholder); + TInt keypress = dlg->ExecuteLD(R_BT_WARN_ERASE_QUERY, stringholder); - CleanupStack::PopAndDestroy(stringholder); // stringholder + CleanupStack::PopAndDestroy(&stringholder); // stringholder if(keypress) // User has accepted the dialog { @@ -772,19 +769,23 @@ HBufC* header= iCoeEnv->AllocReadResourceLC(R_BT_OPTION_BLOCK_DEVICE_HEADER); - HBufC* stringHolder = NULL; + RBuf stringHolder; + CleanupClosePushL( stringHolder ); + TInt resouseId; if (device.iStatus & (EStatusBtuiConnected|EStatusPhysicallyConnected) ) - stringHolder = StringLoader::LoadLC( - (iHelpEnabled? R_BT_OPTION_BLOCK_CONNECTED_PAIRED_DEVICES_HELP: - R_BT_OPTION_BLOCK_CONNECTED_PAIRED_DEVICES_NOHELP ), - device.iName); + { + resouseId = iHelpEnabled? R_BT_OPTION_BLOCK_PAIRED_DEVICE_HELP : + R_BT_OPTION_BLOCK_PAIRED_DEVICE_NOHELP; + } else - stringHolder = StringLoader::LoadLC( - (iHelpEnabled?R_BT_OPTION_BLOCK_PAIRED_DEVICE_HELP:R_BT_OPTION_BLOCK_PAIRED_DEVICE_NOHELP), - device.iName); + { + resouseId = iHelpEnabled ? R_BT_OPTION_BLOCK_PAIRED_DEVICE_HELP : + R_BT_OPTION_BLOCK_PAIRED_DEVICE_NOHELP; + } + BluetoothUiUtil::LoadResourceAndSubstringL( + stringHolder, resouseId, device.iName, 0 ); - - CAknMessageQueryDialog *queryDialog = CAknMessageQueryDialog::NewL (*stringHolder, + CAknMessageQueryDialog *queryDialog = CAknMessageQueryDialog::NewL (stringHolder, CAknQueryDialog::EConfirmationTone); queryDialog->PrepareLC(R_BT_MESSAGE_QUERY); @@ -816,7 +817,7 @@ keypress = queryDialog->RunLD(); } - CleanupStack::PopAndDestroy(stringHolder); + CleanupStack::PopAndDestroy(&stringHolder); CleanupStack::PopAndDestroy(header); if(keypress) @@ -978,11 +979,14 @@ TSecondaryDisplayBtuiDialogs aSec,const TDesC& aDevName) { TRAPD(err, - HBufC* stringholder = StringLoader::LoadLC(aNoteTextResource , aDevName ); + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, aNoteTextResource, aDevName, 0 ); aWaitDialog = new (ELeave) CAknWaitDialog( reinterpret_cast(&aWaitDialog), ETrue); aWaitDialog->PrepareLC(aNoteResource); - aWaitDialog->SetTextL(*stringholder); + aWaitDialog->SetTextL(stringholder); if(iCoverDisplayEnabled) { @@ -998,7 +1002,7 @@ aWaitDialog->SetCallback(this); // for capturing Cancel keypress aWaitDialog->RunLD(); - CleanupStack::PopAndDestroy(stringholder); // stringholder + CleanupStack::PopAndDestroy(&stringholder); // stringholder ); // if the above functions leaves the iWaitNote is deleted, but // not set to NULL. This will cause a problem, when @@ -1068,8 +1072,11 @@ iDisconnectQueryDevice = device;//remember device related with query dialog // Create confirmation query - HBufC* stringholder = StringLoader::LoadLC(R_BT_DISCONNECT_FROM, device.iName); - if (!iDisconnectQueryDlg) + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, R_BT_DISCONNECT_FROM, device.iName, 0 ); + if ( !iDisconnectQueryDlg ) { iDisconnectQueryDlg = CAknQueryDialog::NewL(); } @@ -1086,9 +1093,9 @@ } } - TInt keypress = iDisconnectQueryDlg->ExecuteLD(R_BT_DISCONNECT_FROM_QUERY, *stringholder); + TInt keypress = iDisconnectQueryDlg->ExecuteLD(R_BT_DISCONNECT_FROM_QUERY, stringholder); - CleanupStack::PopAndDestroy(stringholder); // stringholder + CleanupStack::PopAndDestroy(&stringholder); // stringholder iDisconnectQueryDlg = NULL; if(keypress) // User has accepted the dialog @@ -1189,22 +1196,22 @@ break; case KErrAlreadyExists: // connection exists allready { - HBufC* stringholder = NULL; + RBuf stringholder; + CleanupClosePushL( stringholder ); if(aConflictingDeviceNames && aConflictingDeviceNames->Count()> 0) { if(aConflictingDeviceNames->Count() == 1) { - stringholder=StringLoader::LoadLC(R_BT_DISCONNECT_FIRST_PROMPT, - *(*aConflictingDeviceNames)[0],iCoeEnv ); + BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, + R_BT_DISCONNECT_FIRST_PROMPT, + *(*aConflictingDeviceNames)[0], 0 ); } else { - CPtrC16Array* aa=new(ELeave) CPtrC16Array(1+1); - aa->InsertL(0, *(*aConflictingDeviceNames)[0] ); - aa->InsertL(1, *(*aConflictingDeviceNames)[1] ); - stringholder=StringLoader::LoadLC(R_BT_DISCONNECT_FIRST_STEREO_PROMPT , - *aa,iCoeEnv); - delete(aa); + BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, + R_BT_DISCONNECT_FIRST_STEREO_PROMPT, + *(*aConflictingDeviceNames)[0], 0 ); + BluetoothUiUtil::AddSubstringL( stringholder, *(*aConflictingDeviceNames)[1], 1 ); } TRACE_INFO(_L("KErrAllreadyExists")) } @@ -1235,8 +1242,8 @@ } } - note->ExecuteLD(*stringholder); - CleanupStack::PopAndDestroy(stringholder); + note->ExecuteLD(stringholder); + CleanupStack::PopAndDestroy(&stringholder); } break; case KErrServerBusy: @@ -1261,68 +1268,28 @@ // CAknInformationNote* notePtr = new (ELeave) CAknInformationNote(); - HBufC* stringHolder = NULL; + RBuf stringHolder; + CleanupClosePushL( stringHolder ); + + BluetoothUiUtil::LoadResourceAndSubstringL( stringHolder, + R_BT_CONF_CONNECTED_PROMPT, aDevice.iName, 0 ); - if (!FeatureManager::FeatureSupported(KFeatureIdAccessoryFw)) - { - if (CallOnGoing()) - { - stringHolder = StringLoader::LoadLC(R_BT_AUDIOS_ACCESSORY_PROMPT); // qtn_bt_audio_accessory "Audio routed to BT handsfree" - - if(iCoverDisplayEnabled) - { - CleanupStack::PushL(notePtr); - notePtr->PublishDialogL(ECmdBtuiShowBtAudioAccessory, KUidCoverUiCategoryBtui); // initializes cover support - CleanupStack::Pop(notePtr); - } - - notePtr->ExecuteLD(*stringHolder); - } - else - { - TRACE_INFO(_L("No call ongoing. Connected to")) - stringHolder = StringLoader::LoadLC(R_BT_CONF_CONNECTED_PROMPT, aDevice.iName); // "Connected to %U" - - if(iCoverDisplayEnabled) - { - CleanupStack::PushL(notePtr); - notePtr->PublishDialogL(ECmdBtuiShowBtConfConnected, KUidCoverUiCategoryBtui); // initializes cover support - CleanupStack::Pop(notePtr); + if(iCoverDisplayEnabled) + { + CleanupStack::PushL(notePtr); + notePtr->PublishDialogL(ECmdBtuiShowBtConfConnected, KUidCoverUiCategoryBtui); // initializes cover support + CleanupStack::Pop(notePtr); - CAknMediatorFacade* covercl = AknMediatorFacade(notePtr); // uses MOP, so control provided - if (covercl) // returns null if __COVER_DISPLAY is not defined - { - covercl->BufStream() << BTDeviceNameConverter::ToUTF8L(aDevice.iName); - covercl->BufStream().CommitL(); // no more data to send so commit buf - } - } - - notePtr->ExecuteLD(*stringHolder); - } - } - else - { - TRACE_INFO(_L("AccFW Supported. Connected to")) - stringHolder = StringLoader::LoadLC(R_BT_CONF_CONNECTED_PROMPT, aDevice.iName); + CAknMediatorFacade* covercl = AknMediatorFacade(notePtr); // uses MOP, so control provided + if (covercl) // returns null if __COVER_DISPLAY is not defined + { + covercl->BufStream() << BTDeviceNameConverter::ToUTF8L(aDevice.iName); + covercl->BufStream().CommitL(); // no more data to send so commit buf + } + } - if(iCoverDisplayEnabled) - { - CleanupStack::PushL(notePtr); - notePtr->PublishDialogL(ECmdBtuiShowBtConfConnected, KUidCoverUiCategoryBtui); // initializes cover support - CleanupStack::Pop(notePtr); - - CAknMediatorFacade* covercl = AknMediatorFacade(notePtr); // uses MOP, so control provided - if (covercl) // returns null if __COVER_DISPLAY is not defined - { - covercl->BufStream() << BTDeviceNameConverter::ToUTF8L(aDevice.iName); - covercl->BufStream().CommitL(); // no more data to send so commit buf - } - } - - notePtr->ExecuteLD(*stringHolder); - } - - CleanupStack::PopAndDestroy(stringHolder); + notePtr->ExecuteLD(stringHolder); + CleanupStack::PopAndDestroy(&stringHolder); } TRAP_IGNORE(LaunchSettingViewL();) @@ -1330,13 +1297,17 @@ case KErrNotSupported: { - TRACE_INFO(_L("error = KErrNotSupported")) - + TRACE_INFO(_L("error = KErrNotSupported")) + + RBuf stringHolder; + CleanupClosePushL( stringHolder ); + + BluetoothUiUtil::LoadResourceAndSubstringL( stringHolder, + R_BT_DEVICE_NOT_SUPPORTED, aDevice.iName, 0 ); // create note // CAknInformationNote* note = new (ELeave) CAknInformationNote(); - HBufC* stringHolder = StringLoader::LoadLC(R_BT_DEVICE_NOT_SUPPORTED,aDevice.iName); if(iCoverDisplayEnabled) { @@ -1351,8 +1322,8 @@ covercl->BufStream().CommitL(); // no more data to send so commit buf } } - note->ExecuteLD(*stringHolder); - CleanupStack::PopAndDestroy(stringHolder); + note->ExecuteLD(stringHolder); + CleanupStack::PopAndDestroy(&stringHolder); } break; @@ -1613,14 +1584,17 @@ } TRACE_FUNC_EXIT } + + // ------------------------------------------------------ // CBTUIPairedDevicesView::ShowDisconnecNote // ------------------------------------------------------ void CBTUIPairedDevicesView::ShowDisconnecNoteL(TBTDevice *aDevice) { - HBufC* stringholder = StringLoader::LoadLC( - R_BT_DISCONNECT_FIRST_PROMPT, aDevice->iName); - + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( + stringholder, R_BT_DISCONNECT_FIRST_PROMPT, aDevice->iName, 0 ); // Launch a waiting confirmation note // CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote(ETrue); @@ -1639,9 +1613,9 @@ CleanupStack::Pop(note); } - note->ExecuteLD(*stringholder); + note->ExecuteLD(stringholder); - CleanupStack::PopAndDestroy(stringholder); // stringholder + CleanupStack::PopAndDestroy(&stringholder); // stringholder } diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/Ecom/src/BTUISap.cpp --- a/bluetoothengine/btui/Ecom/src/BTUISap.cpp Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btui/Ecom/src/BTUISap.cpp Fri Feb 19 22:59:18 2010 +0200 @@ -18,7 +18,6 @@ #include #include -#include // localisation stringloader #include // Compiled resource ids #include #include @@ -29,13 +28,13 @@ #include #include // For EnterpriseEnablementL() #include - +#include +#include #include "btdevmodel.h" #include "debug.h" #include "BTUIMainView.h" -#include // ---------------------------------------------------- // CBTUIMainView::SetSapStatusL // ---------------------------------------------------- @@ -72,26 +71,28 @@ { // Create confirmation query - HBufC* stringholder = StringLoader::LoadLC( R_BT_DISCONNECT_FROM, connectedSap ); + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, + R_BT_DISCONNECT_FROM, connectedSap, 0 ); CAknQueryDialog* dlg = CAknQueryDialog::NewL(); if(iCoverDisplayEnabled) { CleanupStack::PushL(dlg); dlg->PublishDialogL(ECmdShowDisconnectQuery, KUidCoverUiCategoryBtui); // initializes cover support - CleanupStack::Pop(dlg); - CAknMediatorFacade* covercl = AknMediatorFacade(dlg); // uses MOP, so control provided if (covercl) // returns null if __COVER_DISPLAY is not defined { covercl->BufStream() << BTDeviceNameConverter::ToUTF8L(connectedSap);// takes copy so consts are ok too covercl->BufStream().CommitL(); // no more data to send so commit buf - } + } + CleanupStack::Pop(dlg); } - TInt keypress = dlg->ExecuteLD( R_BT_DISCONNECT_FROM_QUERY, *stringholder ); + TInt keypress = dlg->ExecuteLD( R_BT_DISCONNECT_FROM_QUERY, stringholder ); - CleanupStack::PopAndDestroy(stringholder); // stringholder + CleanupStack::PopAndDestroy(&stringholder); // stringholder if( keypress ) // User has accepted the dialog { diff -r 0b192a3a05a4 -r 6a29d5ad0713 bluetoothengine/btui/group/bld.inf --- a/bluetoothengine/btui/group/bld.inf Tue Feb 02 00:20:42 2010 +0200 +++ b/bluetoothengine/btui/group/bld.inf Fri Feb 19 22:59:18 2010 +0200 @@ -28,6 +28,8 @@ ../rom/BtuiResources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(BtuiResources.iby) ../inc/BtuiPluginInterface.h |../../inc/BtuiPluginInterface.h ../inc/BtuiPluginInterface.inl |../../inc/BtuiPluginInterface.inl +../Ecom/inc/bluetoothuiutil.h |../../inc/bluetoothuiutil.h +../Ecom/inc/bluetoothuiutil.inl |../../inc/bluetoothuiutil.inl // Help exports #include "../help/group/bld.inf"