appinstall_plat/sifui_api/src/sifui.cpp
changeset 25 98b66e4fb0be
child 29 26b6f0522fd8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifui.cpp	Fri Apr 16 15:05:20 2010 +0300
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2010 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:  Implementation of RSifUiCli class.
+*
+*/
+
+#include "sifui.h"                              // CSifUi
+#include "sifuidefs.h"                          // SIF UI device dialog parameters
+#include <hb/hbcore/hbsymbiandevicedialog.h>    // CHbDeviceDialog
+#include <hb/hbcore/hbsymbianvariant.h>         // CHbSymbianVariantMap
+#include <swi/msisuihandlers.h>                 // Swi::CAppInfo
+#include <apgicnfl.h>                           // CApaMaskedBitmap
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUi::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUi* CSifUi::NewLC()
+    {
+    CSifUi* self = new( ELeave ) CSifUi();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUi* CSifUi::NewL()
+    {
+    CSifUi* self = CSifUi::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::~CSifUi()
+// ---------------------------------------------------------------------------
+//
+CSifUi::~CSifUi()
+    {
+    Cancel();
+    delete iWait;
+    delete iDeviceDialog;
+    delete iVariantMap;
+    delete iBitmap;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::SetMode()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::SetMode( TMode aMode )
+    {
+    iMode = aMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::Mode()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUi::TMode CSifUi::Mode()
+    {
+    return iMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowConfirmationL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::ShowConfirmationL( const Swi::CAppInfo& aAppInfo,
+        TInt aAppSize, const CApaMaskedBitmap* aAppIcon,
+        const RPointerArray<Swi::CCertificateInfo>& aCertificates )
+    {
+    ChangeNoteTypeL( ESifUiConfirmationQuery );
+
+    AddParamsAppInfoAndSizeL( aAppInfo, aAppSize );
+    if( aAppIcon )
+        {
+        AddParamsIconL( aAppIcon );
+        }
+    if( aCertificates.Count() )
+        {
+        AddParamsCertificatesL( aCertificates );
+        }
+
+    // TODO: send drive list for drive selection, get selected drive
+    AddParamL( KSifUiMemorySelection, ETrue );
+
+    DisplayDeviceDialogL();
+    User::LeaveIfError( WaitForResponse() );
+    return( iReturnValue == KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowProgressL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowProgressL( const Swi::CAppInfo& aAppInfo,
+        TInt aAppSize, TInt aProgressBarFinalValue )
+    {
+    ChangeNoteTypeL( ESifUiProgressNote );
+
+    AddParamsAppInfoAndSizeL( aAppInfo, aAppSize );
+    AddParamL( KSifUiProgressNoteFinalValue, aProgressBarFinalValue );
+
+    DisplayDeviceDialogL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::IncreaseProgressBarValueL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::IncreaseProgressBarValueL( TInt aNewValue )
+    {
+    ChangeNoteTypeL( ESifUiProgressNote );
+
+    AddParamL( KSifUiProgressNoteValue, aNewValue );
+
+    DisplayDeviceDialogL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowCompleteL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowCompleteL()
+    {
+    ChangeNoteTypeL( ESifUiCompleteNote );
+    DisplayDeviceDialogL();
+    User::LeaveIfError( WaitForResponse() );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ShowFailedL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::ShowFailedL( TInt aErrorCode )
+    {
+    ChangeNoteTypeL( ESifUiErrorNote );
+
+    AddParamL( KSifUiErrorCode, aErrorCode );
+
+    DisplayDeviceDialogL();
+    User::LeaveIfError( WaitForResponse() );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::DoCancel()
+    {
+    if( iWait && iWait->IsStarted() && iWait->CanStopNow() )
+        {
+        iCompletionCode = KErrCancel;
+        iWait->AsyncStop();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::RunL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::RunL()
+    {
+    if( iWait )
+        {
+        iWait->AsyncStop();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::DataReceived()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::DataReceived( CHbSymbianVariantMap& aData )
+    {
+    const CHbSymbianVariant* acceptedVariant = aData.Get( KSifUiQueryAccepted );
+    if( acceptedVariant )
+        {
+        TBool* acceptedValue = acceptedVariant->Value<TBool>();
+        if( acceptedValue && *acceptedValue )
+            {
+            iReturnValue = KErrNone;
+            }
+        else
+            {
+            iReturnValue = KErrCancel;
+            }
+        ResponseReceived( KErrNone );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::DeviceDialogClosed()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::DeviceDialogClosed( TInt aCompletionCode )
+    {
+    iIsDisplayingDialog = EFalse;
+    ResponseReceived( aCompletionCode );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::CSifUi()
+// ---------------------------------------------------------------------------
+//
+CSifUi::CSifUi() : CActive( CActive::EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::ConstructL()
+    {
+    iWait = new( ELeave ) CActiveSchedulerWait;
+    // iDeviceDialog is allocated later, first call of DisplayDeviceDialogL()
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ClearParamsL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::ClearParamsL()
+    {
+    if( iVariantMap )
+        {
+        delete iVariantMap;
+        iVariantMap = NULL;
+        }
+    iVariantMap = CHbSymbianVariantMap::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ChangeNoteTypeL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::ChangeNoteTypeL( TInt aType )
+    {
+    ClearParamsL();
+    AddParamL( KSifUiDialogType, aType );
+    AddParamL( KSifUiDialogMode, iMode );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::AddParamL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::AddParamL( const TDesC& aKey, TInt aValue )
+    {
+    CHbSymbianVariant* variant = NULL;
+    variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EInt );
+    iVariantMap->Add( aKey, variant );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::AddParamL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::AddParamL( const TDesC& aKey, const TDesC& aValue )
+    {
+    CHbSymbianVariant* variant = NULL;
+    variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EDes );
+    iVariantMap->Add( aKey, variant );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::AddParamsAppInfoAndSizeL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::AddParamsAppInfoAndSizeL( const Swi::CAppInfo& aAppInfo, TInt aAppSize )
+    {
+    AddParamL( KSifUiApplicationName, aAppInfo.AppName() );
+    const TVersion& version( aAppInfo.AppVersion() );
+    if( version.iBuild || version.iMajor || version.iMinor )
+        {
+        AddParamL( KSifUiApplicationVersion, version.Name() );
+        }
+    if( aAppInfo.AppVendor().Length() )
+        {
+        AddParamL( KSifUiApplicationDetails, aAppInfo.AppVendor() );
+        }
+    if( aAppSize > 0 )
+        {
+        AddParamL( KSifUiApplicationSize, aAppSize );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::AddParamsIconL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::AddParamsIconL( const CApaMaskedBitmap* aIcon )
+    {
+    if( aIcon )
+        {
+        if( iBitmap )
+            {
+            delete iBitmap;
+            iBitmap = NULL;
+            }
+        iBitmap = CApaMaskedBitmap::NewL( aIcon );
+
+        CHbSymbianVariant* variant = NULL;
+        TInt bitmapHandle = iBitmap->Handle();
+        variant = CHbSymbianVariant::NewL( &bitmapHandle, CHbSymbianVariant::EInt );
+        iVariantMap->Add( KSifUiApplicationIconHandle, variant );
+        TInt bitmapMaskHandle = iBitmap->Mask()->Handle();
+        variant = CHbSymbianVariant::NewL( &bitmapMaskHandle, CHbSymbianVariant::EInt );
+        iVariantMap->Add( KSifUiApplicationIconMaskHandle, variant );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::AddParamsCertificatesL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::AddParamsCertificatesL( const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
+    {
+    // TODO: implement
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::DisplayDeviceDialogL()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::DisplayDeviceDialogL()
+    {
+    if( iDeviceDialog && iIsDisplayingDialog )
+        {
+        iDeviceDialog->Update( *iVariantMap );
+        }
+    else
+        {
+        if( !iDeviceDialog )
+            {
+            iDeviceDialog = CHbDeviceDialog::NewL();
+            }
+        iDeviceDialog->Show( KSifUiDeviceDialog, *iVariantMap, this );
+        iIsDisplayingDialog = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::WaitForResponse()
+// ---------------------------------------------------------------------------
+//
+TInt CSifUi::WaitForResponse()
+    {
+    iCompletionCode = KErrInUse;
+    iReturnValue = KErrUnknown;
+    if( !IsActive() && iWait && !iWait->IsStarted() )
+        {
+        iStatus = KRequestPending;
+        SetActive();
+        iWait->Start();
+        }
+    return iCompletionCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::ResponseReceived()
+// ---------------------------------------------------------------------------
+//
+void CSifUi::ResponseReceived( TInt aCompletionCode )
+    {
+    if( IsActive() )
+        {
+        iCompletionCode = aCompletionCode;
+        TRequestStatus* status( &iStatus );
+        User::RequestComplete( status, KErrNone );
+        }
+    }
+