diff -r 84a16765cd86 -r 98b66e4fb0be appinstall_plat/sifui_api/src/sifui.cpp --- /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 // CHbDeviceDialog +#include // CHbSymbianVariantMap +#include // Swi::CAppInfo +#include // 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& 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(); + 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& /*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 ); + } + } +