diff -r ae54820ef82c -r 245df5276b97 appinstall_plat/sifui_api/src/sifuiprivate.cpp --- a/appinstall_plat/sifui_api/src/sifuiprivate.cpp Tue Jul 06 14:23:31 2010 +0300 +++ b/appinstall_plat/sifui_api/src/sifuiprivate.cpp Wed Aug 18 09:55:45 2010 +0300 @@ -18,6 +18,8 @@ #include "sifuiprivate.h" // CSifUiPrivate #include "sifuicertificateinfo.h" // CSifUiCertificateInfo #include "sifuiappinfo.h" // CSifUiAppInfo +#include "sifuierrorinfo.h" // CSifUiErrorInfo +#include "sifuiinstallindicatordefinitions.h" // indicator type label and parameter names #include // CHbSymbianVariantMap #include // CHbDeviceNotificationDialogSymbian #include // CApaMaskedBitmap @@ -25,7 +27,7 @@ #include // RProperty const TInt KDriveLettersLen = 32; -const TInt KCertificateBufferGranularity = 1024; +const TInt KBufferGranularity = 1024; const TInt KProgFull = 100; // 100% const TUid KInstallIndicatorCategory = { 0x20022FC5 }; @@ -33,6 +35,19 @@ _LIT( KSifUiDefaultApplicationIcon, "qtg_large_application" ); +// TODO: replace with proper logging +#ifdef _DEBUG +#define FLOG(x) RDebug::Print(x); +#define FLOG_1(x,y) RDebug::Print(x, y); +#define FLOG_2(x,y,z) RDebug::Print(x, y, z); +#define FLOG_3(x,y,z,v) RDebug::Print(x, y, z, v); +#else +#define FLOG(x) +#define FLOG_1(x,y) +#define FLOG_2(x,y,z) +#define FLOG_3(x,y,z,v) +#endif + // ======== MEMBER FUNCTIONS ======== @@ -42,6 +57,8 @@ // CSifUiPrivate* CSifUiPrivate::NewL() { + FLOG( _L("CSifUiPrivate::NewL") ); + CSifUiPrivate* self = new( ELeave ) CSifUiPrivate(); CleanupStack::PushL( self ); self->ConstructL(); @@ -55,6 +72,8 @@ // CSifUiPrivate::~CSifUiPrivate() { + FLOG( _L("CSifUiPrivate::~CSifUiPrivate") ); + Cancel(); delete iWait; delete iDeviceDialog; @@ -66,22 +85,12 @@ } // --------------------------------------------------------------------------- -// CSifUiPrivate::ShowConfirmationL() +// CSifUiPrivate::ShowPreparingL() // --------------------------------------------------------------------------- // -TBool CSifUiPrivate::ShowConfirmationL( const CSifUiAppInfo& aAppInfo ) +void CSifUiPrivate::ShowPreparingL() { - ChangeNoteTypeL( ESifUiConfirmationQuery ); - - AddParamsAppInfoL( aAppInfo ); - if( iSelectableDrives ) - { - AddParamL( KSifUiMemorySelection, *iSelectableDrives ); - } - AddParamsCertificatesL(); - - UpdateDialogAndWaitForResponseL(); - return( iDialogReturnValue == KErrNone ); + // TODO: implement } // --------------------------------------------------------------------------- @@ -90,6 +99,8 @@ // void CSifUiPrivate::SetMemorySelectionL( const RArray& aDriveNumbers ) { + FLOG( _L("CSifUiPrivate::SetMemorySelectionL") ); + if( iSelectableDrives ) { delete iSelectableDrives; @@ -105,6 +116,8 @@ { TChar driveLetter; TInt err = RFs::DriveToChar( aDriveNumbers[ index ], driveLetter ); + FLOG_3( _L("CSifUiPrivate::SetMemorySelectionL, index %d, drive %d, err %d"), + index, aDriveNumbers[ index ], err ); if( !err ) { driveList.Append( driveLetter ); @@ -113,19 +126,7 @@ } iSelectableDrives = driveList.AllocL(); } - } - -// --------------------------------------------------------------------------- -// CSifUiPrivate::SelectedDrive() -// --------------------------------------------------------------------------- -// -TInt CSifUiPrivate::SelectedDrive( TInt& aDriveNumber ) - { - if( iSelectedDriveSet ) - { - return RFs::CharToDrive( iSelectedDrive, aDriveNumber ); - } - return KErrNotFound; + FLOG_1( _L("CSifUiPrivate::SetMemorySelectionL, iSelectableDrives=%S"), iSelectableDrives ); } // --------------------------------------------------------------------------- @@ -135,6 +136,8 @@ void CSifUiPrivate::SetCertificateInfoL( const RPointerArray& aCertificates ) { + FLOG( _L("CSifUiPrivate::SetCertificateInfoL") ); + if( iCertificateBuffer ) { delete iCertificateBuffer; @@ -142,7 +145,7 @@ } if( aCertificates.Count() ) { - iCertificateBuffer = CBufFlat::NewL( KCertificateBufferGranularity ); + iCertificateBuffer = CBufFlat::NewL( KBufferGranularity ); RBufWriteStream writeStream( *iCertificateBuffer ); CleanupClosePushL( writeStream ); @@ -158,17 +161,60 @@ } // --------------------------------------------------------------------------- +// CSifUiPrivate::ShowConfirmationL() +// --------------------------------------------------------------------------- +// +TBool CSifUiPrivate::ShowConfirmationL( const CSifUiAppInfo& aAppInfo ) + { + FLOG( _L("CSifUiPrivate::ShowConfirmationL") ); + + ChangeNoteTypeL( ESifUiConfirmationQuery ); + + AddParamsAppInfoL( aAppInfo ); + if( iSelectableDrives ) + { + AddParamL( KSifUiMemorySelection, *iSelectableDrives ); + } + AddParamsCertificatesL(); + + UpdateDialogAndWaitForResponseL(); + return( iDialogReturnValue == KErrNone ); + } + +// --------------------------------------------------------------------------- +// CSifUiPrivate::SelectedDrive() +// --------------------------------------------------------------------------- +// +TInt CSifUiPrivate::SelectedDrive( TInt& aDriveNumber ) + { + FLOG( _L("CSifUiPrivate::SelectedDrive") ); + + if( iSelectedDriveSet ) + { + TInt err = RFs::CharToDrive( iSelectedDrive, aDriveNumber ); + FLOG_2( _L("CSifUiPrivate::SelectedDrive, aDriveNumber=%d, err=%d"), aDriveNumber, err ); + return err; + } + FLOG( _L("CSifUiPrivate::SelectedDrive, KErrNotFound") ); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- // CSifUiPrivate::ShowProgressL() // --------------------------------------------------------------------------- // void CSifUiPrivate::ShowProgressL( const CSifUiAppInfo& aAppInfo, - TInt aProgressBarFinalValue ) + TInt aProgressBarFinalValue, CSifUi::TInstallingPhase aPhase ) { + FLOG( _L("CSifUiPrivate::ShowProgressL") ); + ChangeNoteTypeL( ESifUiProgressNote ); AddParamsAppInfoL( aAppInfo ); AddParamL( KSifUiProgressNoteFinalValue, aProgressBarFinalValue ); iProgressBarFinalValue = aProgressBarFinalValue; + AddParamL( KSifUiProgressNotePhase, aPhase ); + iInstallingPhase = aPhase; AddParamsHiddenButtonsL(); UpdateDialogOrIndicatorWithoutWaitingL(); @@ -180,6 +226,8 @@ // void CSifUiPrivate::IncreaseProgressBarValueL( TInt aNewValue ) { + FLOG_1( _L("CSifUiPrivate::IncreaseProgressBarValueL, aNewValue=%d"), aNewValue ); + ChangeNoteTypeL( ESifUiProgressNote ); AddParamL( KSifUiProgressNoteValue, aNewValue ); @@ -199,11 +247,48 @@ } // --------------------------------------------------------------------------- +// CSifUiPrivate::ShowCompleteL() +// --------------------------------------------------------------------------- +// +void CSifUiPrivate::ShowCompleteL() + { + FLOG( _L("CSifUiPrivate::ShowCompleteL") ); + + ChangeNoteTypeL( ESifUiCompleteNote ); + + AddParamsHiddenButtonsL(); + + CompleteDialogOrIndicatorAndWaitForResponseL( KErrNone ); + } + +// --------------------------------------------------------------------------- +// CSifUiPrivate::ShowFailedL() +// --------------------------------------------------------------------------- +// +void CSifUiPrivate::ShowFailedL( const CSifUiErrorInfo& aErrorInfo ) + { + FLOG_1( _L("CSifUiPrivate::ShowFailedL, aErrorCode=%d"), aErrorInfo.ErrorCode() ); + + ChangeNoteTypeL( ESifUiErrorNote ); + + AddParamL( KSifUiErrorCategory, aErrorInfo.ErrorCategory() ); + AddParamL( KSifUiErrorCode, aErrorInfo.ErrorCode() ); + AddParamL( KSifUiErrorCodeExtended, aErrorInfo.ExtendedErrorCode() ); + AddParamL( KSifUiErrorMessage, aErrorInfo.ErrorMessage() ); + AddParamL( KSifUiErrorDetails, aErrorInfo.ErrorMessageDetails() ); + AddParamsHiddenButtonsL(); + + CompleteDialogOrIndicatorAndWaitForResponseL( aErrorInfo.ErrorCode() ); + } + +// --------------------------------------------------------------------------- // CSifUiPrivate::SetButtonVisible() // --------------------------------------------------------------------------- // void CSifUiPrivate::SetButtonVisible( CSifUi::TOptionalButton aButton, TBool aIsVisible ) { + FLOG( _L("CSifUiPrivate::SetButtonVisible") ); + switch( aButton ) { case CSifUi::EHideProgressButton: @@ -224,35 +309,50 @@ } // --------------------------------------------------------------------------- -// CSifUiPrivate::ShowCompleteL() +// CSifUiPrivate::ShowGrantCapabilitiesL() // --------------------------------------------------------------------------- // -void CSifUiPrivate::ShowCompleteL() +TBool CSifUiPrivate::ShowGrantCapabilitiesL( const TCapabilitySet& aCapabilities ) { - ChangeNoteTypeL( ESifUiCompleteNote ); + CBufFlat* buffer = CBufFlat::NewL( KBufferGranularity ); + CleanupStack::PushL( buffer ); - AddParamsHiddenButtonsL(); + RBufWriteStream writeStream( *buffer ); + CleanupClosePushL( writeStream ); + TPckg capabilitySetPackage( aCapabilities ); + writeStream.WriteL( capabilitySetPackage ); + writeStream.CommitL(); + CleanupStack::PopAndDestroy( &writeStream ); - CompleteDialogOrIndicatorAndWaitForResponseL( KErrNone ); + AddParamBinaryL( KSifUiGrantCapabilities, *buffer ); + UpdateDialogAndWaitForResponseL(); + + CleanupStack::PopAndDestroy( buffer ); + return( iDialogReturnValue == KErrNone ); } // --------------------------------------------------------------------------- -// CSifUiPrivate::ShowFailedL() +// CSifUiPrivate::ShowSingleSelectionL() // --------------------------------------------------------------------------- // -void CSifUiPrivate::ShowFailedL( TInt aErrorCode, const TDesC& aErrorMessage, - const TDesC& aErrorDetails ) +TBool CSifUiPrivate::ShowSingleSelectionL( const TDesC& /*aTitle*/, + const MDesCArray& /*aSelectableItems*/, TInt& aSelectedIndex ) { - ChangeNoteTypeL( ESifUiErrorNote ); + // TODO: implement + aSelectedIndex = 0; + return ETrue; + } - AddParamL( KSifUiErrorCode, aErrorCode ); - AddParamL( KSifUiErrorMessage, aErrorMessage ); - if( aErrorDetails != KNullDesC ) - { - AddParamL( KSifUiErrorDetails, aErrorDetails ); - } - - CompleteDialogOrIndicatorAndWaitForResponseL( aErrorCode ); +// --------------------------------------------------------------------------- +// CSifUiPrivate::ShowMultiSelectionL() +// --------------------------------------------------------------------------- +// +TBool CSifUiPrivate::ShowMultiSelectionL( const TDesC& /*aTitle*/, + const MDesCArray& /*aSelectableItems*/, RArray& aSelectedIndexes ) + { + // TODO: implement + aSelectedIndexes.Reset(); + return ETrue; } // --------------------------------------------------------------------------- @@ -261,6 +361,8 @@ // void CSifUiPrivate::DoCancel() { + FLOG( _L("CSifUiPrivate::DoCancel") ); + if( iWait && iWait->IsStarted() && iWait->CanStopNow() ) { iWaitCompletionCode = KErrCancel; @@ -274,6 +376,8 @@ // void CSifUiPrivate::RunL() { + FLOG_1( _L("CSifUiPrivate::RunL, iStatus.Int()=%d"), iStatus.Int() ); + if( iWait ) { iWait->AsyncStop(); @@ -286,11 +390,14 @@ // void CSifUiPrivate::DataReceived( CHbSymbianVariantMap& aData ) { + FLOG( _L("CSifUiPrivate::DataReceived") ); + const CHbSymbianVariant* selectedDriveVariant = aData.Get( KSifUiSelectedMemory ); if( selectedDriveVariant ) { iSelectedDrive = *( selectedDriveVariant->Value() ); iSelectedDriveSet = ETrue; + FLOG_1( _L("CSifUiPrivate::DataReceived, iSelectedDrive=%d"), (TUint)iSelectedDrive ); } const CHbSymbianVariant* variant = aData.Get( KSifUiQueryReturnValue ); @@ -332,6 +439,8 @@ // void CSifUiPrivate::DeviceDialogClosed( TInt aCompletionCode ) { + FLOG_1( _L("CSifUiPrivate::DeviceDialogClosed, aCompletionCode=%d"), aCompletionCode ); + iIsDisplayingDialog = EFalse; WaitedResponseReceived( aCompletionCode ); } @@ -343,9 +452,12 @@ void CSifUiPrivate::IndicatorUserActivated( const TDesC& aType, CHbSymbianVariantMap& /*aData*/ ) { + FLOG( _L("CSifUiPrivate::IndicatorUserActivated") ); + if( aType == KSifUiInstallIndicatorType ) { CloseInstallIndicator(); + iIsFirstTimeToDisplay = ETrue; TRAP_IGNORE( DisplayDeviceDialogL() ); } } @@ -442,6 +554,20 @@ } // --------------------------------------------------------------------------- +// CSifUiPrivate::AddParamBinaryL() +// --------------------------------------------------------------------------- +// +void CSifUiPrivate::AddParamBinaryL( const TDesC& aKey, const CBufBase& aBinary ) + { + CHbSymbianVariant* variant = NULL; + const TPtrC8 ptr( const_cast( aBinary ).Ptr( 0 ).Ptr(), aBinary.Size() ); + variant = CHbSymbianVariant::NewL( &ptr, CHbSymbianVariant::EBinary ); + CleanupStack::PushL( variant ); + User::LeaveIfError( VariantMapL()->Add( aKey, variant ) ); + CleanupStack::Pop( variant ); + } + +// --------------------------------------------------------------------------- // CSifUiPrivate::AddParamsAppInfoL() // --------------------------------------------------------------------------- // @@ -449,9 +575,13 @@ { AddParamL( KSifUiApplicationName, aAppInfo.Name() ); const TVersion& version( aAppInfo.Version() ); - if( version.iBuild || version.iMajor || version.iMinor ) + if( version.iMajor || version.iMinor ) { - AddParamL( KSifUiApplicationVersion, version.Name() ); + TVersionName versionName; + versionName.AppendNum( version.iMajor ); + versionName.Append( TChar('.') ); + versionName.AppendNum( version.iMinor ); + AddParamL( KSifUiApplicationVersion, versionName ); } if( aAppInfo.Vendor().Length() ) { @@ -482,13 +612,7 @@ { if( iCertificateBuffer ) { - const TPtrC8 dataPtr( iCertificateBuffer->Ptr( 0 ).Ptr(), - iCertificateBuffer->Size() ); - CHbSymbianVariant* certificates = CHbSymbianVariant::NewL( &dataPtr, - CHbSymbianVariant::EBinary ); - CleanupStack::PushL( certificates ); - User::LeaveIfError( VariantMapL()->Add( KSifUiCertificates, certificates ) ); - CleanupStack::Pop( certificates ); + AddParamBinaryL( KSifUiCertificates, *iCertificateBuffer ); } } @@ -537,8 +661,17 @@ AddParamsAppInfoL( *iAppInfo ); } AddParamsCertificatesL(); + if( iProgressBarFinalValue ) + { + AddParamL( KSifUiProgressNoteFinalValue, iProgressBarFinalValue ); + } + if( iProgressBarCurrentValue ) + { + AddParamL( KSifUiProgressNoteValue, iProgressBarCurrentValue ); + } + AddParamL( KSifUiProgressNotePhase, iInstallingPhase ); + AddParamsHiddenButtonsL(); // TODO: AddParamsIconL(); - AddParamsHiddenButtonsL(); } // --------------------------------------------------------------------------- @@ -553,19 +686,7 @@ iIndicator->SetObserver( this ); } - if( iAppInfo && iAppInfo->Name().Length() ) - { - CHbSymbianVariant* param = NULL; - TPtrC appName = iAppInfo->Name(); - param = CHbSymbianVariant::NewL( &appName, CHbSymbianVariant::EDes ); - CleanupStack::PushL( param ); - iIndicator->Activate( KSifUiInstallIndicatorType, param ); - CleanupStack::PopAndDestroy( param ); - } - else - { - iIndicator->Activate( KSifUiInstallIndicatorType ); - } + UpdateInstallIndicatorProgressL(); } // --------------------------------------------------------------------------- @@ -574,15 +695,36 @@ // void CSifUiPrivate::UpdateInstallIndicatorProgressL() { + CHbSymbianVariantMap* parameters = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL( parameters ); + + CHbSymbianVariant* param = NULL; + + if( iAppInfo && iAppInfo->Name().Length() ) + { + TPtrC appName = iAppInfo->Name(); + param = CHbSymbianVariant::NewL( &appName, CHbSymbianVariant::EDes ); + parameters->Add( KSifUiInstallIndicatorAppName, param ); + } + if( iInstallingPhase ) + { + param = CHbSymbianVariant::NewL( &iInstallingPhase, CHbSymbianVariant::EInt ); + parameters->Add( KSifUiInstallIndicatorPhase, param ); + } if( iProgressBarFinalValue ) { - CHbSymbianVariant* param = NULL; TInt progressPercent = KProgFull * iProgressBarCurrentValue / iProgressBarFinalValue; param = CHbSymbianVariant::NewL( &progressPercent, CHbSymbianVariant::EInt ); - CleanupStack::PushL( param ); - iIndicator->Activate( KSifUiInstallIndicatorType, param ); - CleanupStack::PopAndDestroy( param ); + parameters->Add( KSifUiInstallIndicatorProgress, param ); } + + // TODO: should both install indicator and device dialog use the same variant map? + + param = CHbSymbianVariant::NewL( parameters, CHbSymbianVariant::EVariantMap ); + CleanupStack::Pop( parameters ); + CleanupStack::PushL( param ); + iIndicator->Activate( KSifUiInstallIndicatorType, param ); + CleanupStack::PopAndDestroy( param ); } // ---------------------------------------------------------------------------