--- 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 <hb/hbcore/hbsymbianvariant.h> // CHbSymbianVariantMap
#include <hb/hbwidgets/hbdevicenotificationdialogsymbian.h> // CHbDeviceNotificationDialogSymbian
#include <apgicnfl.h> // CApaMaskedBitmap
@@ -25,7 +27,7 @@
#include <e32property.h> // 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<TInt>& 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<CSifUiCertificateInfo>& 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<TCapabilitySet> 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<TInt>& 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<TChar>() );
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<CBufBase&>( 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 );
}
// ---------------------------------------------------------------------------