--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/obexreceiveservices/mtmuibluetooth/src/btmtmui.cpp Wed Sep 01 12:20:40 2010 +0100
@@ -0,0 +1,780 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* CBtMtmUi class
+*
+*/
+
+
+// INCLUDE FILES
+#include "btmtmui.h"
+#include "btmtmuidebug.h"
+
+//#include <obexmtmuilayer.h>
+#include <MuiuMsvProgressReporterOperation.h>
+#include <btcmtm.h>
+#include <mtmuidef.hrh>
+#include <mtclreg.h>
+#include <obexutilsuilayer.h>
+#include <Obexutils.rsg>
+#include <msvuids.h>
+#include <msvids.h>
+#include <obexconstants.h>
+
+
+// CONSTANTS
+const TInt KBtMtmUiToFromFieldBuffer = 80;
+const TInt KBtMtmUiConnectionTimeout = 20000000;
+const TInt KBtMtmUiConnectionPutTimeout = 0;
+const TInt KBtMtmUiObexPort = 1;
+const TInt KBtMtmUiAddressMaxLength = 3;
+
+// ENUMS
+enum TBtMtmAsyncCmds
+ {
+ EBtMtmCmdSend
+ };
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CBtMtmUi::CBtMtmUi( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll )
+ : CBaseMtmUi( aBaseMtm, aRegisteredMtmDll )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: CBtMtmUi\t" ) );
+ }
+
+// Two-phased constructor.
+CBtMtmUi* CBtMtmUi::NewL( CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: NewL\t" ) );
+ CBtMtmUi* self = new( ELeave ) CBtMtmUi( aBaseMtm, aRegisteredMtmDll );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// Destructor
+CBtMtmUi::~CBtMtmUi()
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: ~CBtMtmUi\t" ) );
+ delete iClientRegistry;
+ }
+
+// Symbian OS default constructor can leave.
+void CBtMtmUi::ConstructL()
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: ConstructL\t" ) );
+ CBaseMtmUi::ConstructL();
+ }
+
+// ---------------------------------------------------------
+// GetResourceFileName(...)
+// return progress status.
+// ---------------------------------------------------------
+//
+void CBtMtmUi::GetResourceFileName( TFileName& aFileName ) const
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetResourceFileName\t" ) );
+ aFileName = KObexUtilsFileDrive;
+ aFileName += KDC_RESOURCE_FILES_DIR;
+ aFileName += KObexUtilsResourceFileName;
+ }
+
+// ---------------------------------------------------------
+// QueryCapability(TUid aCapability, TInt& aResponse)
+// return capability of mtm.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::QueryCapability(TUid aCapability, TInt& aResponse)
+ {
+ // Querying of menu availablility is done in syni.
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: QueryCapability\t" ) );
+ if( aCapability.iUid == KUidMsvMtmUiQueryCanPrintMsgValue )
+ {
+ aResponse = ETrue;
+ return KErrNone;
+ }
+ return CBaseMtmUi::QueryCapability( aCapability, aResponse );
+ }
+
+// ---------------------------------------------------------
+// InvokeSyncFunctionL(...)
+// Invoke sync -function from BaseMTM.
+// ---------------------------------------------------------
+//
+void CBtMtmUi::InvokeSyncFunctionL( TInt aFunctionId,
+ const CMsvEntrySelection& aSelection,
+ TDes8& aParameter )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: InvokeSyncFunctionL\t" ) );
+ CBaseMtmUi::InvokeSyncFunctionL( aFunctionId, aSelection, aParameter );
+ }
+
+
+// ---------------------------------------------------------
+// CreateL(...)
+// Entry creation forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CreateL( const TMsvEntry& /*aEntry*/,
+ CMsvEntry& /*aParent*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: CreateL\t" ) );
+ // Entries created through utility functions.
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// OpenL(TRequestStatus& aStatus)
+// handles opening entry.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::OpenL( TRequestStatus& aStatus )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: OpenL\t" ) );
+ const TMsvEntry& context = iBaseMtm.Entry().Entry();
+ const TUid type( context.iType );
+ if( ( type == KUidMsvMessageEntry ) &&
+ ( ( context.Parent() == KMsvSentEntryIdValue )
+ ||( context.Parent() == KMsvGlobalInBoxIndexEntryIdValue ) ) )
+ {
+ // Message is in the sent folder, so can't be edited
+ return ViewL( aStatus );
+ }
+ return EditL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// OpenL(...)
+// handles opening entry using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::OpenL( TRequestStatus& aStatus,
+ const CMsvEntrySelection& aSelection )
+ {
+ iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+ return OpenL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// CloseL(TRequestStatus& aStatus)
+// Closes entry.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CloseL( TRequestStatus& aStatus )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: CloseL\t" ) );
+ CMsvCompletedOperation* op = CMsvCompletedOperation::NewL( Session(),
+ Type(),
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ aStatus);
+ return op;
+ }
+
+// ---------------------------------------------------------
+// CloseL(TRequestStatus& aStatus)
+// Closes entry using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CloseL(
+ TRequestStatus& aStatus,
+ const CMsvEntrySelection& aSelection)
+ {
+ iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+ return CloseL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// EditL(...)
+// Handles message sending using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::EditL( TRequestStatus& aStatus, const CMsvEntrySelection& aSelection )
+ {
+ FLOG( _L( "[BtMtmUi] CBtMtmUi: EditL 1 \t" ) );
+ iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+ return EditL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// EditL(TRequestStatus& aStatus)
+// Handles message sending over Bluetooth.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::EditL( TRequestStatus& aStatus )
+ {
+ FLOG( _L( "[BtMtmUi] CBtMtmUi: EditL 2 \t" ) );
+ TInt resourceId;
+ TInt retVal=0;
+ switch( iBaseMtm.Entry().Entry().iType.iUid )
+ {
+ case KUidMsvMessageEntryValue:
+ {
+ if( iBaseMtm.Entry().Entry().Parent() != KMsvDraftEntryId &&
+ iBaseMtm.Entry().Entry().Parent() != KMsvGlobalOutBoxIndexEntryId )
+ {
+ // Edit/"use" entries in the Inbox
+ return LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() );
+ }
+ else
+ {
+ HBufC* password = HBufC::NewL(1);
+ CleanupStack::PushL( password ); // 1st push
+ BaseMtm().LoadMessageL();
+
+ TBTDevAddr address;
+
+ CBtClientMtm::SBtcCmdSendParams sendparams;
+ sendparams.iTimeouts.iConnectTimeout = KBtMtmUiConnectionTimeout;
+ sendparams.iTimeouts.iPutTimeout = KBtMtmUiConnectionPutTimeout;
+ sendparams.iRemoteObexPort = KBtMtmUiObexPort;
+ sendparams.iConnectPassword = password;
+
+ iDiscovery = CBTEngDiscovery::NewL(this);
+ CBTDevice* iDevice = CBTDevice::NewL( );
+
+
+ if ( iDiscovery->SearchRemoteDevice( iDevice ) == KErrNone )
+ {
+ iWaiter.Start();
+
+ if ( iState ==KErrNone)
+ {
+ address = iDevice->BDAddr();
+ FLOG( _L( "[BtMtmUi] CBtMtmUi:SearchRemoteChannelL \t" ) );
+ retVal = iDiscovery->RemoteProtocolChannelQuery(address, TUUID(KBTSdpObjectPush));
+ if(retVal == KErrNone)
+ {
+ iWaiter.Start();
+ }
+ }
+ if ( retVal != KErrNone ||iState != KErrNone )
+ {
+ resourceId = R_BT_DEV_NOT_AVAIL;
+ TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+ CleanupStack::PopAndDestroy(3); // BtDevice, BtConnection, password
+ return CMsvCompletedOperation::NewL(
+ Session(),
+ Type(),
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ aStatus );
+ }
+ sendparams.iRemoteObexPort = iClientChannel;
+
+ TPtrC8 ptr8 = address.Des();
+ TBuf16<KBtMtmUiAddressMaxLength> convertedaddress16;//48 bits
+ // Bt address conversion
+ TInt i;
+ for( i=0; i<3; i++ )
+ {
+ TUint16 word = ptr8[( i*2 )+1];
+ word = ( TUint16 )( word << 8 );
+ word = ( TUint16 )( word + ptr8[i*2] );
+ convertedaddress16.Append( &word, 1 );
+ }
+
+ BaseMtm().AddAddresseeL( convertedaddress16 );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(3); // BtDevice, BTConnection, password
+ FLOG( _L( "[BTMTMUI] CBtMtmUi:CMsvCompletedOperation NewL\t" ) );
+ return CMsvCompletedOperation::NewL(
+ Session(),
+ Type(),
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ aStatus );
+ }
+
+ CMsvEntrySelection* sel = new( ELeave ) CMsvEntrySelection();
+ CleanupStack::PushL( sel ); // 4th push
+ sel->AppendL( BaseMtm().Entry().EntryId() );
+
+ CMsvOperationWait* waiter = CMsvOperationWait::NewLC(); // 5th push
+
+ TBuf<KBtMtmUiToFromFieldBuffer> toFrom;
+ resourceId = R_BT_SEND_OUTBOX_SENDING;
+ TObexUtilsUiLayer::ReadResourceL( toFrom, resourceId );
+
+ BaseMtm().SaveMessageL();
+
+ TMsvEntry newTEntry( iBaseMtm.Entry().Entry() );
+ newTEntry.iDetails.Set( toFrom );
+ newTEntry.SetVisible( ETrue );
+ newTEntry.SetInPreparation( ETrue );
+
+ iBaseMtm.Entry().ChangeL( newTEntry );
+
+ CMsvEntry* entry =
+ BaseMtm().Session().GetEntryL( KMsvDraftEntryId );
+
+ CleanupStack::PushL( entry ); // 6th push
+
+ CMsvOperation* moveOp = entry->MoveL(
+ *sel,
+ KMsvGlobalOutBoxIndexEntryId,
+ waiter->iStatus );
+
+ CleanupStack::PopAndDestroy( entry );
+
+ waiter->Start();
+ CActiveScheduler::Start();
+ delete moveOp;
+
+ CMsvProgressReporterOperation* reporter
+ = CMsvProgressReporterOperation::NewL( Session(), aStatus );
+ CleanupStack::PushL( reporter ); // 6th push
+
+ TPckgBuf<CBtClientMtm::SBtcCmdSendParams> paramBuf( sendparams );
+
+ CMsvOperation* op = BaseMtm().InvokeAsyncFunctionL(
+ EBtMtmCmdSend,
+ *sel,
+ paramBuf,
+ reporter->RequestStatus() );
+
+ // ownership of op transfered to reporter
+ reporter->SetOperationL( op );
+
+ aStatus = KRequestPending;
+
+ CleanupStack::Pop( reporter );
+ CleanupStack::PopAndDestroy(3); // waiter, sel, password
+ return reporter;
+ }
+ }
+ case KUidMsvServiceEntryValue:
+ case KUidMsvAttachmentEntryValue:
+ case KUidMsvFolderEntryValue:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ CMsvCompletedOperation* op = CMsvCompletedOperation::NewL(
+ Session(),
+ Type(),
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ aStatus );
+ aStatus = KRequestPending;
+ return op;
+ }
+
+// ---------------------------------------------------------
+// ViewL(TRequestStatus& aStatus)
+// Handles viewing of received object.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ViewL( TRequestStatus& aStatus )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: ViewL\t" ) );
+ return LaunchEditorApplicationL( aStatus, iBaseMtm.Entry().Session() );
+ }
+
+// ---------------------------------------------------------
+// ViewL(...)
+// Handles viewing of received object using selection.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ViewL( TRequestStatus& aStatus,
+ const CMsvEntrySelection& aSelection )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: ViewL 1\t" ) );
+ iBaseMtm.Entry().SetEntryL( aSelection.At(0) );
+ return ViewL( aStatus );
+ }
+
+// ---------------------------------------------------------
+// CopyFromL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CopyFromL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aTargetId*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// MoveFromL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::MoveFromL( const CMsvEntrySelection& /*aSelection*/,
+ TMsvId /*aTargetId*/,
+ TRequestStatus& /*aStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// MoveToL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::MoveToL( const CMsvEntrySelection& /*aSelection*/,
+ TRequestStatus& /*aStatus*/)
+ {
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CopyToL(...)
+// Not supported.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CopyToL( const CMsvEntrySelection& /*aSelection*/,
+ TRequestStatus& /*aStatus*/)
+ {
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// DisplayProgressSummary(const TDesC8& aProgress) const
+// calls leaving DisplayProgressSummaryL -function and
+// traps the error.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::DisplayProgressSummary( const TDesC8& aProgress ) const
+ {
+ TInt retVal = KErrNone;
+ TRAP( retVal, retVal = DisplayProgressSummaryL( aProgress ) );
+ return retVal;
+ }
+
+// ---------------------------------------------------------
+// DisplayProgressSummary(const TDesC8& aProgress) const
+// calls leaving DisplayProgressSummaryL -function and
+// traps the error.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::DisplayProgressSummaryL( const TDesC8& aProgress ) const
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL\t" ) );
+ TInt resourceId;
+ if( ( !aProgress.Length() ) || ( aProgress.Size() == sizeof( TMsvLocalOperationProgress ) ) )
+ {
+ // Probably a CMsvCompletedOperation
+ return KErrCancel;
+ }
+ TPckgBuf<TObexMtmProgress> paramPack;
+ paramPack.Copy( aProgress );
+ TObexMtmProgress& progress = paramPack();
+
+ const TObexMtmProgress::TSendState progressType = progress.iSendState;
+ const TInt error = progress.iError;
+ if ( error == KErrInUse )
+ {
+ resourceId = R_BT_DEV_NOT_AVAIL;
+ TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+ return KErrNone;
+ }
+
+ switch( progressType )
+ {
+ case TObexMtmProgress::EDisconnected:
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: EDisconnected\t" ) );
+ // Allowed to send again.
+ resourceId = R_BT_DATA_SENT;
+ TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+ break;
+ }
+ case TObexMtmProgress::ESendError:
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: ESendError\t" ) );
+ if( error == KErrIrObexClientNoDevicesFound )
+ {
+ resourceId = R_BT_DEV_NOT_AVAIL;
+ TObexUtilsUiLayer::ShowInformationNoteL( resourceId );
+ }
+ else
+ {
+ resourceId = R_BT_FAILED_TO_SEND;
+ TObexUtilsUiLayer::ShowErrorNoteL( resourceId );
+ }
+ break;
+ }
+ case TObexMtmProgress::ESendComplete:
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: ESendComplete\t" ) );
+ break;
+ }
+ case TObexMtmProgress::EInitialise:
+ case TObexMtmProgress::EConnect:
+ case TObexMtmProgress::EConnectAttemptComplete:
+ case TObexMtmProgress::ESendObject:
+ case TObexMtmProgress::ESendNextObject:
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: ESendObject\t" ) );
+ return KErrCancel;
+ }
+ case TObexMtmProgress::EUserCancelled:
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: EUserCancelled\t" ) );
+ return KErrCancel;
+ }
+ default:
+ {
+ FTRACE( FPrint(_L( "[CBtMtmUi] CBtMtmUi:DisplayProgressSummaryL: Default\t %d" ), progressType ) );
+ return KErrCancel;
+ }
+ }
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------
+// GetProgress(...)
+// return progress status.
+// ---------------------------------------------------------
+//
+TInt CBtMtmUi::GetProgress( const TDesC8& aProgress,
+ TBuf<EProgressStringMaxLen>& aReturnString,
+ TInt& aTotalEntryCount,
+ TInt& aEntriesDone,
+ TInt& aCurrentEntrySize,
+ TInt& aCurrentBytesTrans ) const
+ {
+ TInt resourceId;
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetProgress\t" ) );
+ TPckgBuf<TObexMtmProgress> paramPack;
+ paramPack.Copy( aProgress );
+ TObexMtmProgress& progress = paramPack();
+ const TObexMtmProgress::TSendState progressType = progress.iSendState;
+ aTotalEntryCount = progress.iTotalEntryCount;
+ aEntriesDone = progress.iEntriesDone;
+ aCurrentEntrySize = progress.iCurrentEntrySize;
+ aCurrentBytesTrans = progress.iCurrentBytesTrans;
+
+ if( aTotalEntryCount > 1 ) // This is for progress bar multisending
+ {
+ aCurrentEntrySize = 0;
+ }
+
+ switch( progressType )
+ {
+ case TObexMtmProgress::ENullOp:
+ case TObexMtmProgress::ESendError:
+ {
+ aReturnString = KNullDesC;
+ break;
+ }
+ case TObexMtmProgress::EInitialise:
+ case TObexMtmProgress::EConnect:
+ case TObexMtmProgress::EConnectAttemptComplete:
+ {
+ resourceId = R_BT_CONNECTING;
+ TRAPD( retVal, TObexUtilsUiLayer::ReadResourceL( aReturnString, resourceId ) );
+ retVal=retVal; //avoid warning
+ // Leave causes progress note to be empty. Not fatal
+ break;
+ }
+ case TObexMtmProgress::ESendObject:
+ case TObexMtmProgress::ESendNextObject:
+ case TObexMtmProgress::ESendComplete:
+ {
+ resourceId = R_BT_SENDING_DATA;
+ TRAPD( retVal, TObexUtilsUiLayer::ReadResourceL( aReturnString, resourceId ) );
+ // Leave causes progress note to be empty. Not fatal
+ retVal=retVal; //avoid warning
+ break;
+ }
+ case TObexMtmProgress::EDisconnected:
+ {
+ break;
+ }
+ default:
+ {
+ return KErrCancel;
+ }
+ }
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetProgress Done\t" ) );
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// LaunchEditorApplicationL(...)
+// Launch viewer for selected object. The first is object's
+// recognition(document handler).
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::LaunchEditorApplicationL( TRequestStatus& aStatus,
+ CMsvSession& aSession)
+ {
+ FLOG( _L( "[CommonMtmUi] CBtMtmUi: LaunchEditorApplicationL\t" ) );
+ CMsvEntry* message;
+ message = &iBaseMtm.Entry();
+ return TObexUtilsUiLayer::LaunchEditorApplicationOperationL( aSession, message, aStatus );
+ }
+
+// ---------------------------------------------------------
+// GetClientMtmLC(TUid aMtmType)
+// Handles MTM registration.
+// ---------------------------------------------------------
+//
+CBaseMtm* CBtMtmUi::GetClientMtmLC( TUid aMtmType )
+ {
+ FLOG( _L( "[CBtMtmUi] CBtMtmUi: GetClientMtmLC\t" ) );
+ if( !iClientRegistry )
+ {
+ iClientRegistry = CClientMtmRegistry::NewL( Session() );
+ }
+ CBaseMtm* mtm = iClientRegistry->NewMtmL( aMtmType );
+ CleanupStack::PushL( mtm );
+ return mtm;
+ }
+
+// ---------------------------------------------------------
+// DeleteFromL(TUid aMtmType)
+// passes entry selection to Base for deletion.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::DeleteFromL( const CMsvEntrySelection& aSelection,
+ TRequestStatus& aStatus )
+ {
+ return CBaseMtmUi::DeleteFromL( aSelection, aStatus );
+ }
+
+// ---------------------------------------------------------
+// DeleteServiceL(...)
+// has no service, just complete it.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::DeleteServiceL( const TMsvEntry& /*aService*/,
+ TRequestStatus& aStatus)
+ {
+ return CMsvCompletedOperation::NewL(
+ Session(),
+ Type(),
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ aStatus);
+ }
+
+// ---------------------------------------------------------
+// ReplyL(...)
+// Reply is forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ReplyL( TMsvId /*aDestination*/,
+ TMsvPartList /*aPartlist*/,
+ TRequestStatus& /*aCompletionStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// ForwardL(...)
+// Forward is forbidden.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::ForwardL( TMsvId /*aDestination*/,
+ TMsvPartList /*aPartList*/,
+ TRequestStatus& /*aCompletionStatus*/ )
+ {
+ User::Leave( KErrNotSupported );
+ // Return value is needed for removing compilation errors
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CancelL(...)
+// No MS way of sending a message from the outbox, so no need to cancel.
+// Just complete it.
+// ---------------------------------------------------------
+//
+CMsvOperation* CBtMtmUi::CancelL( TRequestStatus& aStatus,
+ const CMsvEntrySelection& /*aSelection*/)
+ {
+ return CMsvCompletedOperation::NewL(
+ Session(),
+ Type(),
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ aStatus,
+ KErrNone);
+ }
+
+// -----------------------------------------------------------------------------
+// CBtMtmUi::ServiceSearchComplete
+// -----------------------------------------------------------------------------
+//
+void CBtMtmUi::ServiceSearchComplete( const RSdpRecHandleArray& /*aResult*/,
+ TUint /*aTotalRecordsCount*/, TInt /*aErr */)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBtMtmUi::AttributeSearchComplete(
+// -----------------------------------------------------------------------------
+//
+void CBtMtmUi::AttributeSearchComplete( TSdpServRecordHandle /*aHandle*/,
+ const RSdpResultArray& aAttr,
+ TInt aErr )
+ {
+ iState=aErr;
+ if (aErr==KErrNone)
+ {
+ RSdpResultArray results=aAttr;
+ iDiscovery->ParseRfcommChannel(results,iClientChannel);
+ }
+ iWaiter.AsyncStop();
+ }
+// -----------------------------------------------------------------------------
+// CBtMtmUi::ServiceAttributeSearchComplete
+// -----------------------------------------------------------------------------
+//
+void CBtMtmUi::ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/,
+ const RSdpResultArray& /*aAttr*/,
+ TInt /*aErr*/ )
+ {
+ }
+// -----------------------------------------------------------------------------
+// CBtMtmUi::DeviceSearchComplete
+// -----------------------------------------------------------------------------
+//
+void CBtMtmUi::DeviceSearchComplete( CBTDevice* /*aDevice*/, TInt aErr )
+ {
+ iState=aErr;
+ iWaiter.AsyncStop();
+ }
+
+// End of File