diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -20,8 +20,10 @@ #include "xnwallpaperview.h" #include "xnwallpapercontainer.h" #include "xnuiengine.h" -#include "xneditor.h" +#include "xnappuiadapter.h" +#include "xnviewadapter.h" #include "xnbackgroundmanager.h" +#include // SYSTEM INCLUDE FILES #include @@ -29,6 +31,9 @@ #include #include #include +#include +#include +#include _LIT8( KMulti, "multi" ); const TInt KFileArrayGranularity = 6; @@ -51,6 +56,7 @@ void CXnWallpaperView::ConstructL() { BaseConstructL(); + iTimer = CPeriodic::NewL( CActive::EPriorityIdle ); } // ----------------------------------------------------------------------------- @@ -77,6 +83,7 @@ delete iContainer; iContainer = NULL; } + delete iTimer; } // ----------------------------------------------------------------------------- @@ -97,7 +104,8 @@ TUid /*aCustomMessageId*/, const TDesC8& aCustomMessage ) { - iAvkonAppUi->StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ); + iAvkonAppUi->StatusPane()->SwitchLayoutL( + R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); iAvkonAppUi->StatusPane()->DrawNow(); if ( !iContainer ) { @@ -107,31 +115,22 @@ iContainer->DrawNow(); } - CDesCArrayFlat* files = - new (ELeave) CDesCArrayFlat( KFileArrayGranularity ); - CleanupStack::PushL( files ); - TBool selected = EFalse; + iData.iAppUid = aPrevViewId.iAppUid; + iData.iViewUid = aPrevViewId.iViewUid; + iData.iMultiple = EFalse; + iData.iTimer = iTimer; - TBool multiple=EFalse; if( aCustomMessage == KMulti ) { - multiple = ETrue; + iData.iMultiple = ETrue; } - TRAPD( err, selected = MGFetch::RunL( *files, EImageFile, multiple ) ); - if ( err == KErrNone && - selected && - files->MdcaCount() > 0 ) + + // Run image selection dialog asynchronously + if ( iTimer->IsActive() ) { - // set wallpaper. - if( files->MdcaCount() == 1 ) - { - iEngine.Editor()->BgManager().AddWallpaperL( files->MdcaPoint( 0 ) ); - } + iTimer->Cancel(); } - CleanupStack::PopAndDestroy( files ); - - iAvkonAppUi->ActivateViewL( aPrevViewId ); - + iTimer->Start( 0, 1000, TCallBack( TimerCallbackL, &iData ) ); } // ----------------------------------------------------------------------------- @@ -148,4 +147,54 @@ } } +// ----------------------------------------------------------------------------- +// CXnWallpaperView::TimerCallback +// ----------------------------------------------------------------------------- +// +TInt CXnWallpaperView::TimerCallbackL(TAny *aPtr) + { + TInt errAddWallpaper = KErrNone; + + TXnWallpaperViewData* data = reinterpret_cast( aPtr ); + data->iTimer->Cancel(); + + CDesCArrayFlat* files = + new (ELeave) CDesCArrayFlat( KFileArrayGranularity ); + CleanupStack::PushL( files ); + TBool selected = EFalse; + + TRAPD( err, selected = MGFetch::RunL( *files, EImageFile, data->iMultiple ) ); + if ( err == KErrNone && + selected && + files->MdcaCount() > 0 ) + { + // set wallpaper. + if( files->MdcaCount() == 1 ) + { + CXnAppUiAdapter* appui = static_cast< CXnAppUiAdapter* >( iAvkonAppUi ); + CXnBackgroundManager& bgManager = appui->ViewAdapter().BgManager(); + errAddWallpaper = bgManager.AddWallpaperL( files->MdcaPoint( 0 ) ); + } + } + CleanupStack::PopAndDestroy( files ); + + if( errAddWallpaper == KErrCACorruptContent ) + { + //load message text + HBufC* msg = StringLoader::LoadLC( R_QTN_HS_CORRUPTED_IMAGE_NOTE ); + //ensure that dialog will not disappear immediatelly - by const. param + CAknErrorNote* dialog = new (ELeave) CAknErrorNote( true ); + CleanupStack::PushL( dialog ); + //show dialog to user and destroy it + dialog->ExecuteLD( *msg ); + CleanupStack::Pop( dialog ); + CleanupStack::PopAndDestroy( msg ); + } + + iAvkonAppUi->ActivateViewL( TVwsViewId( data->iAppUid, data->iViewUid ) ); + + return EFalse; + } + + // End of File