camerauis/cameraapp/generic/src/camoneclickuploadutility.cpp
changeset 0 1ddebce53859
child 12 8c55c525d5d7
--- /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 );
+    }