diff -r 19bd632b5100 -r b72428996822 btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp --- a/btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp Fri May 28 17:03:06 2010 +0300 +++ b/btobexprofiles/obexreceiveservices/bip/src/BIPController.cpp Mon Jul 12 18:51:05 2010 +0300 @@ -17,35 +17,33 @@ // INCLUDE FILES -#include // AVKON components #include "BIPController.h" #include "BIPCapabilityHandler.h" #include "BIPImageHandler.h" #include -#include // Series 60 localisation stringloader #include -#include -#include -#include -#include #include #include #include -#include #include #include #include #include #include #include "debug.h" +#include +#include // CONSTANTS _LIT8(KBipCapabilityType, "x-bt/img-capabilities\0"); - +const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3 +const TInt KBufferSize = 0x10000; // 64 kB +_LIT( KBTDevDialogId, "com.nokia.hb.btdevicedialog/1.0" ); +_LIT(KLocFileName, "btdialogs_"); +_LIT(KPath, "z:/resource/qt/translations/"); -const TInt KBufferSize = 0x10000; // 64 kB // ================= MEMBER FUNCTIONS ======================= @@ -80,6 +78,12 @@ iResultArray = new(ELeave) CBTDeviceArray(1); // Get default folder from CenRep TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine, KLCReceiveFolder, iCenRepFolder); + iDialog = CObexUtilsDialog::NewL(this); + TBool ok = HbTextResolverSymbian::Init(KLocFileName, KPath); + if (!ok) + { + User::Leave( KErrNotFound ); + } TRACE_FUNC_EXIT } @@ -96,8 +100,6 @@ delete iLowMemoryActiveCDrive; delete iLowMemoryActiveMMC; delete iBuf; - delete iProgressDialog; - delete iWaitDialog; delete iBTObject; delete iDevMan; if (iResultArray) @@ -106,6 +108,8 @@ delete iResultArray; } iFs.Close(); + delete iDialog; + delete iProgressDialog; TRACE_FUNC_EXIT } @@ -143,8 +147,13 @@ iBTObject->Reset(); } CancelTransfer(); - TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL( R_BT_FAILED_TO_RECEIVE)); - } + + TRAP_IGNORE( + HBufC* note = HbTextResolverSymbian::LoadLC(_L("txt_bt_dpophead_receiving_failed")); + iDialog->ShowErrorNoteL(note->Des()); + CleanupStack::PopAndDestroy(note); + ); + } delete iBuf; iBuf = NULL; @@ -197,10 +206,13 @@ // ObexConnectIndication() // --------------------------------------------------------- // -TInt CBIPController::ObexConnectIndication( const TObexConnectInfo& /*aRemoteInfo*/, const TDesC8& /*aInfo*/ ) +TInt CBIPController::ObexConnectIndication( const TObexConnectInfo& aRemoteInfo, const TDesC8& aInfo ) { TRACE_FUNC + (void) aRemoteInfo; + (void) aInfo; + // Get remote device socket address and bluetooth name // Remote bluetooth name will be displayed in the new message in inbox. // @@ -223,9 +235,10 @@ // ObexDisconnectIndication() // --------------------------------------------------------- // -void CBIPController::ObexDisconnectIndication(const TDesC8& /*aInfo*/) +void CBIPController::ObexDisconnectIndication(const TDesC8& aInfo) { TRACE_FUNC + (void) aInfo; } // --------------------------------------------------------- @@ -241,6 +254,7 @@ iBTObject = NULL; TRAP_IGNORE(TObexUtilsMessageHandler::RemoveTemporaryRFileL (iFullPathFilename)); iFs.Close(); + iFileCount = 0; } // --------------------------------------------------------- @@ -256,7 +270,7 @@ // Checking if backup is running now - if backup process is active, then we // need to cancel transfer - otherwise phone will freeze during receiving // data - if ( TObexUtilsUiLayer::IsBackupRunning() ) + if ( IsBackupRunning() ) { TRACE_INFO ( _L ("Backup in progress! Canceling incoming transfer.")); iBTTransferState = ETransferPutInitError; @@ -308,7 +322,11 @@ } if(!capacity) { - TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); + //TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); + //todo: Need to use Localized string. + _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); + TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); + return KErrDiskFull; } } @@ -326,7 +344,11 @@ // Now we need to either create (in the first instance) or update the dialog on the UI. if(ReceivingIndicatorActive()) { - UpdateReceivingIndicator(); + TRAPD(err, UpdateReceivingIndicatorL()); + if(err < KErrNone) + { + return err; + } } else if(!iNoteDisplayed) { @@ -358,6 +380,7 @@ retVal = HandlePutCompleteIndication(); iBTTransferState = ETransferIdle; CloseReceivingIndicator(); + iFileCount++; } TRACE_FUNC_EXIT return retVal; @@ -420,12 +443,15 @@ // SetPathIndication() // --------------------------------------------------------- // -TInt CBIPController::SetPathIndication( const CObex::TSetPathInfo& /*aPathInfo*/, - const TDesC8& /*aInfo*/) +TInt CBIPController::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, + const TDesC8& aInfo) { TRACE_FUNC // SetPath is not implemented in BIP - so following IrOBEX guidance, return // the Forbidden response code. + (void) aPathInfo; + (void) aInfo; + return KErrIrObexRespForbidden; } @@ -504,7 +530,11 @@ // if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, 0, iDrive)) { - TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); + //TRAP_IGNORE(TObexUtilsUiLayer::ShowGlobalConfirmationQueryL(R_OUT_OF_MEMORY)); + //todo: Need to use Localized string. + _LIT(KText, "Not enough memory to execute operation. Delete some documents and try again."); + TRAP_IGNORE(iDialog->ShowErrorNoteL(KText)); + User::Leave(KErrGeneral); } @@ -739,57 +769,91 @@ if(iTotalSizeByte > 0) { - iProgressDialog = CGlobalProgressDialog::NewL(this); if(iReceivingFileName.Length() > 0) { - iProgressDialog->ShowProgressDialogNameSizeL(iReceivingFileName, iTotalSizeByte); + iProgressDialog = CHbDeviceDialogSymbian::NewL(); + iProgressDialog->SetObserver(this); + + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt dialogIdx = TBluetoothDialogParams::EReceiveProgress; + CHbSymbianVariant* dialogType = CHbSymbianVariant::NewL( (TAny*) &(dialogIdx), + CHbSymbianVariant::EInt ); + CleanupStack::PushL(dialogType); + TBuf16<6> dialogTypeKey; + dialogTypeKey.Num(TBluetoothDialogParams::EDialogType); + User::LeaveIfError(variantMap->Add(dialogTypeKey, dialogType)); + CleanupStack::Pop(dialogType); + + CHbSymbianVariant* deviceName = CHbSymbianVariant::NewL( (TAny*) (&iRemoteDeviceName), + CHbSymbianVariant::EDes ); + CleanupStack::PushL(deviceName); + TBuf16<6> deviceNameKey; + deviceNameKey.Num(TBluetoothDeviceDialog::EDeviceName); + User::LeaveIfError(variantMap->Add(deviceNameKey, deviceName)); + CleanupStack::Pop(deviceName); + + CHbSymbianVariant* fileName = CHbSymbianVariant::NewL( (TAny*) (&iReceivingFileName), + CHbSymbianVariant::EDes ); + CleanupStack::PushL(fileName); + TBuf16<6> fileNameKey; + fileNameKey.Num(TBluetoothDeviceDialog::EReceivingFileName); + User::LeaveIfError(variantMap->Add(fileNameKey, fileName)); + CleanupStack::Pop(fileName); + + CHbSymbianVariant* fileSz = CHbSymbianVariant::NewL( (TAny*) &iTotalSizeByte, + CHbSymbianVariant::EInt ); + CleanupStack::PushL(fileSz); + TBuf16<6> fileSzKey; + fileSzKey.Num(TBluetoothDeviceDialog::EReceivingFileSize); + User::LeaveIfError(variantMap->Add(fileSzKey, fileSz)); + CleanupStack::Pop(fileSz); + + CHbSymbianVariant* fileCnt = CHbSymbianVariant::NewL( (TAny*) &iFileCount, + CHbSymbianVariant::EInt ); + CleanupStack::PushL(fileCnt); + TBuf16<6> fileCntKey; + fileCntKey.Num(TBluetoothDeviceDialog::EReceivedFileCount); + User::LeaveIfError(variantMap->Add(fileCntKey, fileCnt)); + CleanupStack::Pop(fileCnt); + + iDialogActive = ETrue; + iProgressDialog->Show( KBTDevDialogId(), *variantMap, this ); + CleanupStack::PopAndDestroy(variantMap); } else { - iProgressDialog->ShowProgressDialogL(R_BT_RECEIVING_DATA); + // TODO + iDialogActive = ETrue; } } else { - iWaitDialog = CGlobalDialog::NewL(this); - iWaitDialog->ShowNoteDialogL(R_BT_RECEIVING_DATA, ETrue); + iDialogActive = ETrue; + /* + * TODO - The functionality provided by CGlobalDialog will be removed + * TODO - and this will be provided by CGlobalProgressDialog. + */ + } } -void CBIPController::UpdateReceivingIndicator() +void CBIPController::UpdateReceivingIndicatorL() { if(iProgressDialog) { - iProgressDialog->UpdateProgressDialog(iBTObject->BytesReceived(), iTotalSizeByte); - } - // else we are using a wait note, so no "need" to update - } - -void CBIPController::HandleGlobalProgressDialogL( TInt aSoftkey ) - { - TRACE_FUNC - - if(aSoftkey == EAknSoftkeyCancel) - { - CancelTransfer(); - } - else if(aSoftkey == EAknSoftkeyHide) - { - CloseReceivingIndicator(EFalse); // Don't reset state as only hiding - } - } - -void CBIPController::HandleGlobalNoteDialogL( TInt aSoftkey ) - { - TRACE_FUNC - - if( aSoftkey == EAknSoftkeyCancel ) - { - CancelTransfer(); - } - else if( aSoftkey == EAknSoftkeyHide) - { - CloseReceivingIndicator(EFalse); // Don't reset state as only hiding + CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + + TInt bytesReceived = iBTObject->BytesReceived(); + CHbSymbianVariant* progress = CHbSymbianVariant::NewL( (TAny*) &bytesReceived, CHbSymbianVariant::EInt ); + CleanupStack::PushL(progress); + User::LeaveIfError(variantMap->Add(_L("progress"), progress)); + CleanupStack::Pop(progress); + + iProgressDialog->Update(*variantMap); + CleanupStack::PopAndDestroy(variantMap); } } @@ -802,16 +866,11 @@ } if(iProgressDialog) { - iProgressDialog->ProcessFinished(); + iProgressDialog->Cancel(); + iDialogActive = EFalse; delete iProgressDialog; iProgressDialog = NULL; } - if(iWaitDialog) - { - iWaitDialog->ProcessFinished(); - delete iWaitDialog; - iWaitDialog = NULL; - } } // --------------------------------------------------------- @@ -869,8 +928,10 @@ // ---------------------------------------------------------- // // - void CBIPController::HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* /*aDeviceArray*/) + void CBIPController::HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray) { + (void) aDeviceArray; + if ( aErr == KErrNone ) { if ( iResultArray->Count()) @@ -890,6 +951,78 @@ } } + TBool CBIPController::IsBackupRunning() + { + const TUint32 KFileManagerBkupStatus = 0x00000001; + + TInt status = EFileManagerBkupStatusUnset; + TBool retValue = EFalse; + TInt err = RProperty::Get( TUid::Uid(KFileManagerUID3), KFileManagerBkupStatus, + status ); + if ( err == KErrNone ) + { + if ( status == EFileManagerBkupStatusBackup || + status == EFileManagerBkupStatusRestore ) + { + TSecureId fileManagerSecureId( KFileManagerUID3 ); + //only returning ETrue if backup process is still active + retValue = ProcessExists( fileManagerSecureId ); + } + } + + return retValue; + } + + TBool CBIPController::ProcessExists( const TSecureId& aSecureId ) + { + _LIT( KFindPattern, "*" ); + TFindProcess finder(KFindPattern); + TFullName processName; + while( finder.Next( processName ) == KErrNone ) + { + RProcess process; + if ( process.Open( processName ) == KErrNone ) + { + TSecureId processId( process.SecureId() ); + process.Close(); + if( processId == aSecureId ) + { + return ETrue; + } + } + } + return EFalse; + } + + void CBIPController::DialogDismissed(TInt aButtonId) + { + (void) aButtonId; + } + + void CBIPController::DataReceived(CHbSymbianVariantMap& aData) + { + if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult")) == 0) + { + TInt val = *(static_cast(aData.Get(_L("actionResult"))->Data())); + if(!val) + { + //Cancel has been clicked + CancelTransfer(); + } + else + { + //Hide has been clicked + CloseReceivingIndicator(EFalse); + } + } + } + + void CBIPController::DeviceDialogClosed(TInt aCompletionCode) + { + (void) aCompletionCode; + } + + //////////////////////////// Global part //////////////////////////// // End of File