--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/camoneclickuploadutility.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Helper class for implementing one-click upload support
+*
+*/
+
+
+#include <AiwServiceHandler.h>
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+#include <centralrepository.h>
+
+#include "camoneclickuploadutility.h"
+#include "camlogging.h"
+#include "CamPanic.h"
+
+const TUid KShareOnlineCrUid = { 0x2000BB53 };
+const TUint32 KShareCrApplicationVersion = 0x01010020;
+const TInt KCamShareOnlineVersionBufLen = 12;
+const TVersion KShareOnlineMinimumVersion( 4, 3, 0 );
+const TUid KOpenModeOneClick = { 2 };
+const TUid KCmdGetOneClickToolTip = { 15 };
+
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CCamOneClickUploadUtility* CCamOneClickUploadUtility::NewL()
+ {
+ CCamOneClickUploadUtility* self =
+ new ( ELeave ) CCamOneClickUploadUtility();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamOneClickUploadUtility::CCamOneClickUploadUtility()
+ {
+ // No implementation needed
+ }
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CCamOneClickUploadUtility::ConstructL()
+ {
+ PRINT( _L( "Camera => CCamOneClickUploadUtility::ConstructL()" ) );
+#ifndef __WINSCW__
+ // iUploadSupported is zeroed by CBase constructor.
+ // If a leave occurs here, it is left as EFalse.
+ // If InitializeAiwL() succeeds, it is set to ETrue.
+ TRAP_IGNORE(
+ {
+ CheckVersionL();
+ InitializeAiwL();
+ iUploadSupported = ETrue;
+ } );
+#else
+ iUploadSupported = EFalse;
+#endif // __WINSCW__
+ PRINT1( _L( "Camera <> iUploadSupported = %d" ), iUploadSupported );
+ PRINT( _L( "Camera <= CCamOneClickUploadUtility::ConstructL()" ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CCamOneClickUploadUtility::~CCamOneClickUploadUtility()
+ {
+ delete iAiwServiceHandler;
+ delete iTooltip;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Check if one-click upload is supported
+// ---------------------------------------------------------------------------
+//
+TBool CCamOneClickUploadUtility::OneClickUploadSupported() const
+ {
+ return iUploadSupported;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Upload a file
+// ---------------------------------------------------------------------------
+//
+void CCamOneClickUploadUtility::UploadL( const TDesC& aFilename )
+ {
+ PRINT( _L( "Camera => CCamOneClickUploadUtility::UploadL(TDesC&)" ) );
+
+ CDesC16ArrayFlat* array = new ( ELeave ) CDesC16ArrayFlat( 1 );
+ CleanupStack::PushL( array );
+
+ array->AppendL( aFilename );
+
+ UploadL( *array );
+
+ CleanupStack::PopAndDestroy( array );
+
+ PRINT( _L( "Camera <= CCamOneClickUploadUtility::UploadL(TDesC&)" ) );
+ }
+
+// ---------------------------------------------------------------------------
+// Upload multiple files
+// ---------------------------------------------------------------------------
+//
+void CCamOneClickUploadUtility::UploadL( const MDesC16Array& aFilenames )
+ {
+ PRINT( _L( "Camera => CCamOneClickUploadUtility::UploadL(MDesC16Array&)" ) );
+
+ __ASSERT_ALWAYS( iAiwServiceHandler, CamPanic( ECamPanicNullPointer ) );
+
+ CAiwGenericParamList& paramList = iAiwServiceHandler->InParamListL();
+ paramList.Reset();
+
+ TAiwVariant openVariant( KOpenModeOneClick );
+ TAiwGenericParam openParam( EGenericParamModeActivation, openVariant );
+ paramList.AppendL( openParam );
+
+ for ( TInt i = 0; i < aFilenames.MdcaCount(); i++ )
+ {
+ TPtrC filename = aFilenames.MdcaPoint( i );
+ PRINT1( _L( "Camera <> adding file %S" ), &filename );
+ TAiwVariant variant( filename );
+ TAiwGenericParam param( EGenericParamFile, variant );
+ paramList.AppendL( param );
+ }
+
+ iAiwServiceHandler->ExecuteServiceCmdL(
+ KAiwCmdUpload,
+ paramList,
+ iAiwServiceHandler->OutParamListL() );
+
+ PRINT( _L( "Camera <= CCamOneClickUploadUtility::UploadL(MDesC16Array&)" ) );
+ }
+
+// ---------------------------------------------------------------------------
+// Get the tooltip text for one-click upload button.
+// ---------------------------------------------------------------------------
+//
+const TDesC& CCamOneClickUploadUtility::ButtonTooltipL()
+ {
+ __ASSERT_ALWAYS( iAiwServiceHandler, CamPanic( ECamPanicNullPointer ) );
+
+ CAiwGenericParamList& paramList = iAiwServiceHandler->InParamListL();
+ paramList.Reset();
+
+ TAiwVariant openVariant( KCmdGetOneClickToolTip );
+ TAiwGenericParam openParam( EGenericParamModeActivation, openVariant );
+ paramList.AppendL( openParam );
+
+ CAiwGenericParamList& outParamList = iAiwServiceHandler->OutParamListL();
+ outParamList.Reset();
+ iAiwServiceHandler->ExecuteServiceCmdL(
+ KAiwCmdUpload, paramList, outParamList );
+
+ TInt index = 0;
+ const TAiwGenericParam* res = outParamList.FindFirst(
+ index,
+ EGenericParamNoteItem,
+ EVariantTypeDesC );
+
+ if ( !res )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ delete iTooltip;
+ iTooltip = NULL;
+ iTooltip = res->Value().AsDes().AllocL();
+ return *iTooltip;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Check Share Online version
+// ---------------------------------------------------------------------------
+//
+void CCamOneClickUploadUtility::CheckVersionL()
+ {
+ PRINT( _L( "Camera => CCamOneClickUploadUtility::CheckVersionL()" ) );
+
+ CRepository* rep = CRepository::NewLC( KShareOnlineCrUid );
+ TBuf<KCamShareOnlineVersionBufLen> versionBuf;
+ User::LeaveIfError( rep->Get( KShareCrApplicationVersion, versionBuf ) );
+ TVersion version( 0, 0, 0 );
+ TLex lex( versionBuf );
+ User::LeaveIfError( lex.Val( version.iMajor ) );
+ if ( lex.Get() != TChar('.') )
+ {
+ User::Leave( KErrCorrupt );
+ }
+ User::LeaveIfError( lex.Val( version.iMinor ) );
+ if ( lex.Get() != TChar('.') )
+ {
+ User::Leave( KErrCorrupt );
+ }
+ User::LeaveIfError( lex.Val( version.iBuild ) );
+
+ PRINT3( _L( "Camera <> CCamOneClickUploadUtility::CheckVersionL() - share online %d.%d.%d" ), version.iMajor, version.iMinor, version.iBuild );
+
+ // Compare version number and leave if the detected
+ // version is less than KShareOnlineMinimumVersion.
+ if ( version.iMajor < KShareOnlineMinimumVersion.iMajor )
+ {
+ User::LeaveIfError( KErrNotSupported );
+ }
+ else if ( version.iMajor == KShareOnlineMinimumVersion.iMajor )
+ {
+ if ( version.iMinor < KShareOnlineMinimumVersion.iMinor )
+ {
+ User::LeaveIfError( KErrNotSupported );
+ }
+ else if ( version.iMinor == KShareOnlineMinimumVersion.iMinor )
+ {
+ if ( version.iBuild < KShareOnlineMinimumVersion.iBuild )
+ {
+ User::LeaveIfError( KErrNotSupported );
+ }
+ else
+ {
+ // Version is supported, fall through
+ }
+ }
+ else
+ {
+ // Version is supported, fall through
+ }
+ }
+ else
+ {
+ // Version is supported, fall through
+ }
+
+ CleanupStack::PopAndDestroy( rep );
+
+ PRINT( _L( "Camera <= CCamOneClickUploadUtility::CheckVersionL()" ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Initialize AIW framework
+// ---------------------------------------------------------------------------
+//
+void CCamOneClickUploadUtility::InitializeAiwL()
+ {
+ __ASSERT_DEBUG( !iAiwServiceHandler, CamPanic( ECamPanicResourceLeak ) );
+
+ iAiwServiceHandler = CAiwServiceHandler::NewL();
+ iAiwServiceHandler->AttachL( R_CAM_ONE_CLICK_UPLOAD_INTEREST );
+ }