diff -r f9e827349359 -r b023a8d2866a photosgallery/imgvwr/src/glxivwrappui.cpp --- a/photosgallery/imgvwr/src/glxivwrappui.cpp Mon Jun 21 15:40:32 2010 +0300 +++ b/photosgallery/imgvwr/src/glxivwrappui.cpp Thu Jul 15 18:39:01 2010 +0300 @@ -11,7 +11,7 @@ * * Contributors: * - * Description: AppUi class + * Description: Image Viewer AppUi class * */ @@ -19,42 +19,26 @@ #include "glxivwrappui.h" +#include "glxivwrdocument.h" -#include -#include -#include -#include +#include +#include +#include #include -#include -#include -#include #include -#include -#include -#include - +#include #include -#include -#include -#include #include -#include #include -#include -#include #include #include #include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include + + //constants const TInt KGlxFullThumbnailCount = 1 ; // 1 visible thumnail @@ -67,6 +51,10 @@ const TInt KGlxMemoryForOOMFwk = 1048576 ; // 1 MB const TInt KGlxThumbNailRepresentation = 4; // Thumbnail Representation; Could be 3 also +// UID for the application, +// this should correspond to the uid defined in the mmp file +static const TUid KUidGlxIvwrApp = {0x200104E7}; + // ----------------------------------------------------------------------------- // Constructor // ----------------------------------------------------------------------------- @@ -85,11 +73,10 @@ // Enable Avkon skins. BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible ); + // Create navigational state iNavigationalState = CGlxNavigationalState::InstanceL(); - iNavigationalState->AddObserverL( *this ); - iNavigationalState->SetBackExitStatus(EFalse); // Get an instance of view utility @@ -98,7 +85,9 @@ iUiUtility = CGlxUiUtility::UtilityL(); // Always start in default orientation iUiUtility->SetAppOrientationL(EGlxOrientationDefault); + ReserveMemoryL(EEntryTypeStartUp); + // publish zoom context, no zoom keys for now NGlxZoomStatePublisher::PublishStateL( EFalse ); } @@ -134,8 +123,8 @@ void CGlxIVwrAppUi::HandleCommandL(TInt aCommand) { TRACER("void CGlxIVwrAppUi::HandleCommandL(TInt aCommand)"); - GLX_LOG_INFO1("PHOTOS LOGS: void CGlxIVwrAppUi::HandleCommandL(TInt aCommand = %d)",aCommand ); - switch(aCommand) + GLX_LOG_INFO1("void CGlxIVwrAppUi::HandleCommandL(aCommand=%d)", aCommand ); + switch (aCommand) { case EEikCmdExit: { @@ -151,7 +140,9 @@ break; case EAknSoftkeyBack: + { iNavigationalState->ActivatePreviousViewL(); + } break; default: @@ -166,7 +157,7 @@ TBool CGlxIVwrAppUi::ProcessCommandParametersL(TApaCommand /*aCommand*/, TFileName& /*aDocumentName*/, const TDesC8& /*aTail*/) { - TRACER("TBool CGlxIVwrAppUi::ProcessCommandParametersL(TApaCommand /*aCommand*/,TFileName& /*aDocumentName*/, const TDesC8& aTail)"); + TRACER("TBool CGlxIVwrAppUi::ProcessCommandParametersL()"); // Bring the application to foreground, if not already if (0 != iEikonEnv->RootWin().OrdinalPosition()) @@ -189,46 +180,47 @@ CMPXCollectionPath* naviState = iNavigationalState->StateLC(); // Case: Open photos in grid, go to filemanager via menu and open any image - if (naviState->Id() != TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid)) + if (naviState->Id() != TMPXItemId( + KGlxCollectionPluginImageViewerImplementationUid)) { /* * This thread chk is added for EDDG-7UUC53. In this scenario we get EPathChanged from MPX. * That initiates a viewnavigational change from CGlxNavigationalStateImp HandleCollectionMessageL() * In these types of scenarios we don't want a view switch. So ignoring the event. */ - TApaTaskList taskList( iCoeEnv->WsSession() ); - TApaTask task = taskList.FindApp( TUid::Uid( KGlxGalleryApplicationUid ) ); + TApaTaskList taskList(iCoeEnv->WsSession()); + TApaTask task = taskList.FindApp(KUidGlxIvwrApp); TApaTask taskForeGround = taskList.FindByPos(0); // get fopreground app - if ( task.Exists() && task.ThreadId() != taskForeGround.ThreadId() ) + if (task.Exists() && task.ThreadId() != taskForeGround.ThreadId()) { GLX_LOG_INFO("CGlxIVwrAppUi ::HandleNavigationalStateChanged: Return "); return; } } - CleanupStack::PopAndDestroy( naviState ); + CleanupStack::PopAndDestroy(naviState); - if ( TUid::Null() != iStartupViewUid ) + if (TUid::Null() != iStartupViewUid) { - GLX_LOG_INFO("CGlxAppUi::HandleNavigationalStateChanged: Activating startup view"); + GLX_LOG_INFO("CGlxIVwrAppUi::HandleNavigationalStateChanged:Activating startup view"); // Activate startup view - iViewUtility->ActivateViewL( iStartupViewUid, NULL ); + iViewUtility->ActivateViewL(iStartupViewUid, NULL); iStartupViewUid = TUid::Null(); } else { - GLX_LOG_INFO("CGlxAppUi::HandleNavigationalStateChanged: Activating view"); + GLX_LOG_INFO("CGlxIVwrAppUi::HandleNavigationalStateChanged:Activating view"); // get ids for scoring a view - RArray< TUid > scoringIds; - CleanupClosePushL( scoringIds ); - GetViewScoringIdsL( scoringIds ); + RArray scoringIds; + CleanupClosePushL(scoringIds); + GetViewScoringIdsL(scoringIds); - GLX_LOG_INFO1( "CGlxIVwrAppUi::HandleNavigationalStateChanged: Uid count %d", scoringIds.Count()); + GLX_LOG_INFO1("CGlxIVwrAppUi::HandleNavigationalStateChanged:Uid count %d", scoringIds.Count()); // let view utility to select the best view based on scoring ids - iViewUtility->ActivateViewL( scoringIds, NULL ); + iViewUtility->ActivateViewL(scoringIds, NULL); - CleanupStack::PopAndDestroy( &scoringIds ); + CleanupStack::PopAndDestroy(&scoringIds); } } @@ -237,119 +229,106 @@ // --------------------------------------------------------------------------- // void CGlxIVwrAppUi::GetViewScoringIdsL( RArray& aIds ) const -{ -TRACER("void CGlxIVwrAppUi::GetViewScoringIdsL( RArray& aIds ) const"); + { + TRACER("void CGlxIVwrAppUi::GetViewScoringIdsL()"); CleanupClosePushL(aIds); -aIds.Reset(); // For maintenance safety + aIds.Reset(); // For maintenance safety -// get current navigational state -CMPXCollectionPath* naviState = iNavigationalState->StateLC(); + // get current navigational state + CMPXCollectionPath* naviState = iNavigationalState->StateLC(); -// no if check in needed here ,it makes the aapui aware of the list view depth -// to be removed.added by gopa -if ( naviState->Levels() >= 1) - { + // no if check in needed here ,it makes the aapui aware of the list view depth + // to be removed.added by gopa + if (naviState->Levels() >= 1) + { if (iNavigationalState->ViewingMode() == NGlxNavigationalState::EBrowse) - { - // For image viewer collection, goto view mode + { + // For image viewer collection, goto view mode if (naviState->Id() == TMPXItemId( KGlxCollectionPluginImageViewerImplementationUid)) - { - aIds.AppendL( TUid::Uid( KGlxViewingModeView ) ); + { + aIds.AppendL(TUid::Uid(KGlxViewingModeView)); + } + else + { + aIds.AppendL(TUid::Uid(KGlxViewingModeBrowse)); + } } else { - aIds.AppendL( TUid::Uid( KGlxViewingModeBrowse ) ); + aIds.AppendL(TUid::Uid(KGlxViewingModeView)); } - } - else + } + + if (TUid::Null() != GetViewScoringIdForCollectionPlugin(*naviState)) { - aIds.AppendL( TUid::Uid( KGlxViewingModeView ) ); - } - } + // add scoring id for collection plugin + aIds.AppendL(GetViewScoringIdForCollectionPlugin(*naviState)); + } -if( TUid::Null() != GetViewScoringIdForCollectionPlugin( *naviState ) ) - { - // add scoring id for collection plugin - aIds.AppendL( GetViewScoringIdForCollectionPlugin( *naviState ) ); + if (TUid::Null() != ViewScoringIdForNaviStateDepth(*naviState)) + { + // add scoring id for depth in the ui hierarchy + aIds.AppendL(ViewScoringIdForNaviStateDepth(*naviState)); + } + + CleanupStack::PopAndDestroy(naviState); + CleanupStack::Pop(&aIds); } -if( TUid::Null() != ViewScoringIdForNaviStateDepth( *naviState ) ) - { - // add scoring id for depth in the ui hierarchy - aIds.AppendL( ViewScoringIdForNaviStateDepth( *naviState ) ); - } - -CleanupStack::PopAndDestroy( naviState ); - CleanupStack::Pop(&aIds); -} -// --------------------------------------------------------------------------- -// Handles the foreground events -// --------------------------------------------------------------------------- -// -void CGlxIVwrAppUi::HandleForegroundEventL( TBool aForeground ) - { - TRACER("void CGlxIVwrAppUi::HandleForegroundEventL( TBool aForeground )"); - - // first let base class handle it so that we dont break anything - CAknViewAppUi::HandleForegroundEventL( aForeground ); - - } // --------------------------------------------------------------------------- // Return scoring id for collection plugin // --------------------------------------------------------------------------- // -TUid CGlxIVwrAppUi::GetViewScoringIdForCollectionPlugin( const CMPXCollectionPath& aNaviState ) const -{ -TRACER("TUid CGlxIVwrAppUi::GetViewScoringIdForCollectionPluginL( const CMPXCollectionPath& aNaviState ) const"); +TUid CGlxIVwrAppUi::GetViewScoringIdForCollectionPlugin( + const CMPXCollectionPath& aNaviState) const + { + TRACER("TUid CGlxIVwrAppUi::GetViewScoringIdForCollectionPluginL()"); -GLX_LOG_INFO1( "CGlxIVwrAppUi::GetViewScoringIdForCollectionPluginL: Depth %d", aNaviState.Levels() ); -// score view based on collection plugin if not on root level -if ( aNaviState.Levels() ) - { - return TUid::Uid( aNaviState.Id( 0 ) ); + GLX_LOG_INFO1( "CGlxIVwrAppUi::GetViewScoringIdForCollectionPluginL:Depth %d", aNaviState.Levels() ); + // score view based on collection plugin if not on root level + if (aNaviState.Levels()) + { + return TUid::Uid(aNaviState.Id(0)); + } + // return null as id to be ignored in scoring + return TUid::Null(); } -// return null as id to be ignored in scoring -return TUid::Null(); -} // --------------------------------------------------------------------------- // Return scoring id for depth // --------------------------------------------------------------------------- // -TUid CGlxIVwrAppUi::ViewScoringIdForNaviStateDepth( const CMPXCollectionPath& aNaviState ) const -{ -TRACER("TUid CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL( const CMPXCollectionPath& aNaviState ) const"); -GLX_LOG_INFO1( "CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL: Level %d", aNaviState.Levels() ); - -switch ( aNaviState.Levels() ) +TUid CGlxIVwrAppUi::ViewScoringIdForNaviStateDepth( + const CMPXCollectionPath& aNaviState) const { - case 0: + TRACER("TUid CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL()"); + GLX_LOG_INFO1( "CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL: Level %d",aNaviState.Levels() ); - GLX_LOG_INFO1( "CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL: \ - Depth case 0 %x", TUid::Uid( KGlxDepthOne ) ); - return TUid::Uid( KGlxDepthOne ); + switch (aNaviState.Levels()) + { + case 0: - case 1: + GLX_LOG_INFO1( "CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL:Depth case 0 %x", TUid::Uid( KGlxDepthOne ) ); + return TUid::Uid(KGlxDepthOne); + + case 1: - GLX_LOG_INFO1( "CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL: \ - Depth case 1 %x", TUid::Uid( KGlxDepthTwo ) ); - return TUid::Uid( KGlxDepthTwo ); + GLX_LOG_INFO1( "CGlxIVwrAppUi::ViewScoringIdForNaviStateDepthL:Depth case 1 %x", TUid::Uid( KGlxDepthTwo ) ); + return TUid::Uid(KGlxDepthTwo); - - case 2: + case 2: - GLX_LOG_INFO1( "CGlxIVwrAppUi::GetViewScoringIdForUiHieararchyDepthL: \ - Depth case 2 %x", TUid::Uid( KGlxDepthThree ) ); - return TUid::Uid( KGlxDepthThree ); + GLX_LOG_INFO1( "CGlxIVwrAppUi::GetViewScoringIdForUiHieararchyDepthL:Depth case 2 %x", TUid::Uid( KGlxDepthThree ) ); + return TUid::Uid(KGlxDepthThree); - default: - GLX_LOG_WARNING( "CGlxIVwrAppUi::GetViewScoringIdsL: Navigational state deeper than supported" ); - // return null as an id to be ignored in scoring - return TUid::Null(); + default: + GLX_LOG_WARNING( "CGlxIVwrAppUi::GetViewScoringIdsL:Navigational state deeper than supported" ); + // return null as an id to be ignored in scoring + return TUid::Null(); + } } -} // --------------------------------------------------------------------------- // HandleOpenFileL @@ -369,11 +348,10 @@ // OOMRequestFreeMemoryL // --------------------------------------------------------------------------- // -TInt CGlxIVwrAppUi::OOMRequestFreeMemoryL( TInt aBytesRequested) +TInt CGlxIVwrAppUi::OOMRequestFreeMemoryL(TInt aBytesRequested) { - TRACER("TInt CGlxIVwrAppUi::OOMRequestFreeMemoryL( TInt aBytesRequested)"); - GLX_LOG_INFO1("CGlxIVwrAppUi::OOMRequestFreeMemoryL() aBytesRequested=%d", - aBytesRequested); + TRACER("TInt CGlxIVwrAppUi::OOMRequestFreeMemoryL(TInt aBytesRequested)"); + GLX_LOG_INFO1("CGlxIVwrAppUi::OOMRequestFreeMemoryL() aBytesRequested=%d",aBytesRequested); ROomMonitorSession oomMonitor; User::LeaveIfError( oomMonitor.Connect() ); @@ -402,8 +380,7 @@ TInt memoryLeft = 0; TInt error = KErrNone ; HAL::Get( HALData::EMemoryRAMFree, memoryLeft ); - GLX_LOG_INFO2("CGlxIVwrAppUi::ReserveMemoryL() - aCriticalMemoryRequired=%d, memoryLeft=%d", - aCriticalMemoryRequired, memoryLeft); + GLX_LOG_INFO2("CGlxIVwrAppUi::ReserveMemoryL() - aCriticalMemoryRequired=%d, memoryLeft=%d", aCriticalMemoryRequired, memoryLeft); if ( aCriticalMemoryRequired > memoryLeft ) { // Request for critical memory required @@ -428,17 +405,16 @@ // For Framework to work and to do the on-the-fly decoding // for the just captured picture = KGlxMemoryForOOMFwk + KGlxMaxMemoryToDecodeCapturedPicture // For FullScreen to Work Number of Thumbnail(s) * Width * Height * Representation - criticalRamMemory = KGlxMemoryForOOMFwk + KGlxMaxMemoryToDecodeCapturedPicture + - (KGlxFullThumbnailCount * - displaySize.iWidth * displaySize.iHeight * - KGlxThumbNailRepresentation ); - - GLX_LOG_INFO1("CGlxIVwrAppUi::RamRequiredInBytesL(EEntryTypeStartUp): criticalRamMemory=%d", - criticalRamMemory); + criticalRamMemory = KGlxMemoryForOOMFwk + + KGlxMaxMemoryToDecodeCapturedPicture + + (KGlxFullThumbnailCount * displaySize.iWidth + * displaySize.iHeight * KGlxThumbNailRepresentation); + + GLX_LOG_INFO1("CGlxIVwrAppUi::RamRequiredInBytesL(EEntryTypeStartUp):criticalRamMemory=%d", criticalRamMemory); } else { - GLX_LOG_INFO("CGlxIVwrAppUi::RamRequiredInBytesL(): Photos Already Running"); + GLX_LOG_INFO("CGlxIVwrAppUi::RamRequiredInBytesL():Viewer Already Running"); } return criticalRamMemory; @@ -457,7 +433,7 @@ if (KErrNoMemory == error) { - GLX_LOG_INFO("CGlxIVwrAppUi::ReserveMemoryL(): LEAVE with KErrNoMemory "); + GLX_LOG_INFO("CGlxIVwrAppUi::ReserveMemoryL():LEAVE with KErrNoMemory"); User::Leave(KErrNoMemory); } } @@ -467,8 +443,8 @@ // // --------------------------------------------------------------------------- // - -void CGlxIVwrAppUi::HandleApplicationSpecificEventL(TInt aEventType, const TWsEvent& aWsEvent) +void CGlxIVwrAppUi::HandleApplicationSpecificEventL(TInt aEventType, + const TWsEvent& aWsEvent) { TRACER("CGlxIVwrAppUi::HandleApplicationSpecificEventL"); CAknViewAppUi::HandleApplicationSpecificEventL(aEventType,aWsEvent); @@ -484,8 +460,46 @@ // void CGlxIVwrAppUi::CloseImgVwr() { - TRACER("CGlxNsAppUi::CloseImgVwr()"); + TRACER("CGlxIVwrAppUi::CloseImgVwr()"); iUiUtility->SetViewNavigationDirection(EGlxNavigationBackwards); iUiUtility->SetExitingState(ETrue); } +// ---------------------------------------------------------------------------- +// CGlxIVwrAppUi::OpenFileL +// This is called by framework when application is already open in background +// and user open other file in eg. File Browse. +// New file to been shown is passed via aFileName. +// ---------------------------------------------------------------------------- +// +void CGlxIVwrAppUi::OpenFileL(const TDesC& aFileName) + { + TRACER("CGlxIVwrAppUi::OpenFileL()"); + GLX_LOG_URI("CGlxIVwrAppUi::OpenFileL(%S)", &aFileName); + + // File changed. Open new file with documents OpenFileL method. + Document()->OpenFileL(EFalse, aFileName, iEikonEnv->FsSession()); + + GLX_DEBUG1("CGlxIVwrAppUi::OpenFileL() *** File Changed *** "); + MGlxCache* cacheManager = MGlxCache::InstanceL(); + CleanupClosePushL(*cacheManager); + + CMPXCollectionPath* path = CMPXCollectionPath::NewL(); + CleanupStack::PushL(path); + path->AppendL(KGlxCollectionPluginImageViewerImplementationUid); + + MGlxMediaList* mediaList = MGlxMediaList::InstanceL(*path); + CleanupClosePushL(*mediaList); + + if (mediaList->Count() > 0) + { + GLX_DEBUG1("CGlxIVwrAppUi::OpenFileL() - Cleanup & Refresh Media!"); + cacheManager->ForceCleanupMedia(mediaList->IdSpaceId(0), + mediaList->Item(0).Id()); + cacheManager->RefreshL(); + } + + CleanupStack::PopAndDestroy(mediaList); + CleanupStack::PopAndDestroy(path); + CleanupStack::PopAndDestroy(cacheManager); + }