diff -r 792dfc98fb3b -r 8c55c525d5d7 camerauis/cameraapp/generic/src/camoneclickuploadutility.cpp --- a/camerauis/cameraapp/generic/src/camoneclickuploadutility.cpp Fri Mar 12 15:41:04 2010 +0200 +++ b/camerauis/cameraapp/generic/src/camoneclickuploadutility.cpp Mon Mar 15 12:39:00 2010 +0200 @@ -16,22 +16,35 @@ */ +#include +#include +#include + #include #include #include #include + #include "camoneclickuploadutility.h" #include "camlogging.h" #include "CamPanic.h" +#include "Cam.hrh" -const TUid KShareOnlineCrUid = { 0x2000BB53 }; +#include +#include "camutility.h" + +const TUid KShareOnlineCrUid = { 0x2002CC1F }; const TUint32 KShareCrApplicationVersion = 0x01010020; const TInt KCamShareOnlineVersionBufLen = 12; -const TVersion KShareOnlineMinimumVersion( 4, 3, 0 ); +const TVersion KShareOnlineMinimumVersion( 5, 0, 0 ); const TUid KOpenModeOneClick = { 2 }; const TUid KCmdGetOneClickToolTip = { 15 }; +const TUint32 KShareImageServiceIconFileName = 0x00000002; +const TUint32 KShareVideoServiceIconFileName = 0x00000003; +const TUint32 KShareCommonServiceIconFileName = 0x00000004; + // ======== MEMBER FUNCTIONS ======== @@ -92,6 +105,9 @@ { delete iAiwServiceHandler; delete iTooltip; + + if ( iDecoder ) + delete iDecoder; } @@ -274,3 +290,137 @@ iAiwServiceHandler = CAiwServiceHandler::NewL(); iAiwServiceHandler->AttachL( R_CAM_ONE_CLICK_UPLOAD_INTEREST ); } + +// --------------------------------------------------------------------------- +// Get the icon for Share AP item +// --------------------------------------------------------------------------- +// +void CCamOneClickUploadUtility::CurrentIconPathL( TCamCameraMode aMode, TDes& aPath ) + { + PRINT( _L("Camera => CCamOneClickUploadUtility::CurrentIconPathL") ); + TUint32 serviceIconId = KShareCommonServiceIconFileName; + + if ( ECamControllerVideo == aMode ) + { + serviceIconId = KShareVideoServiceIconFileName; + } + else // image + { + serviceIconId = KShareImageServiceIconFileName; + } + + CRepository* rep = CRepository::NewLC( KShareOnlineCrUid ); + User::LeaveIfError( rep->Get( serviceIconId, aPath ) ); + CleanupStack::PopAndDestroy( rep ); + PRINT1( _L("Camera <= CCamOneClickUploadUtility::CurrentIconPathL: %S"), &aPath ); + } + +// ----------------------------------------------------------------------------- +// CCamOneClickUploadUtility::UpdateUploadIcon +// ----------------------------------------------------------------------------- +// +void CCamOneClickUploadUtility::UpdateUploadIcon( CAknToolbar *aToolbar, + TCamCameraMode aMode ) + { + PRINT( _L("Camera => CCamOneClickUploadUtility::UpdateUploadIcon") ); + + TFileName currIcon; + CurrentIconPathL( aMode, currIcon ); + + // If the icons are different then load the icon + PRINT1( _L("Camera <> current icon: %S"), &iIconFileName ); + if ( currIcon.Compare(iIconFileName) != 0 ) + { + PRINT( _L("Camera <> Decoding icon") ); + iToolbar = aToolbar; + TRAPD( err, DecodeIconL( &currIcon ) ); + if (err) + { + PRINT1( _L("Camera <> CamOneClickUploadUtility - Icon decoding failed: %d"), err ); + } + } + else + { + if ( aToolbar && iIconImage ) + { + PRINT( _L("Camera <> Copying icon") ); + CAknButton* button = dynamic_cast( + aToolbar->ControlOrNull( ECamCmdOneClickUpload ) ); + CAknButtonState* state = button->State(); + + CGulIcon *icon = CGulIcon::NewL( iIconImage, iIconMask ); + state->SetIcon( icon ); + icon->SetBitmapsOwnedExternally( ETrue ); + + button->SetButtonFlags( KAknButtonNoFrame | KAknButtonPressedDownFrame ); + aToolbar->DrawNow(); + } + } + PRINT( _L("Camera <= CCamOneClickUploadUtility::UpdateUploadIcon") ); + } + +// ----------------------------------------------------------------------------- +// CCamOneClickUploadUtility::DecodeIconL() +// ----------------------------------------------------------------------------- +// +void CCamOneClickUploadUtility::DecodeIconL( TDesC* aPath ) + { + PRINT1( _L("Camera => CCamOneClickUploadUtility::DecodeIconL: %S"), aPath ); + + if ( !iDecoder ) + { + iDecoder = CCamImageDecoder::NewL( *this ); + } + iDecoder->StartIconConversionL( aPath ); + + // Mark the given file as the icon in use when decoding has started + iIconFileName.Copy( *aPath ); + + PRINT( _L("Camera <= CCamOneClickUploadUtility::DecodeIconL") ); + } + +// --------------------------------------------------------------------------- +// Image decoding complete notification +// --------------------------------------------------------------------------- +// +void CCamOneClickUploadUtility::ImageDecoded( TInt aStatus, const CFbsBitmap* aBitmap, const CFbsBitmap* aMask ) + { + PRINT( _L("Camera => CCamOneClickUploadUtility::ImageDecoded") ); + + if ( aStatus == KErrNone ) + { + delete iIconImage; + delete iIconMask; + + iIconImage = new (ELeave) CFbsBitmap; + iIconImage->Duplicate( aBitmap->Handle() ); + + if ( aMask ) + { + iIconMask = new (ELeave) CFbsBitmap; + iIconMask->Duplicate( aMask->Handle() ); + } + + if ( iToolbar ) + { + PRINT( _L("Displaying icon") ); + + CAknButton* uploadButton = + static_cast (iToolbar->ControlOrNull(ECamCmdOneClickUpload)); + CAknButtonState* currentState = uploadButton->State(); + + CGulIcon *icon = CGulIcon::NewL( iIconImage, iIconMask ); + icon->SetBitmapsOwnedExternally( ETrue ); + currentState->SetIcon( icon ); + + uploadButton->SetButtonFlags( KAknButtonNoFrame | KAknButtonPressedDownFrame ); + iToolbar->DrawNow(); + } + } + else + { + PRINT1( _L("Camera <> CCamOneClickUploadUtility::ImageDecoded - err:%d"), aStatus ); + } + + PRINT( _L("Camera <= CCamOneClickUploadUtility::ImageDecoded") ); + }