diff -r 2dac0fdba72b -r 191387a8b767 photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp --- a/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp Wed Apr 14 15:57:24 2010 +0300 +++ b/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp Tue Apr 27 16:37:53 2010 +0300 @@ -24,6 +24,8 @@ #include // for KDC_APP_RESOURCE_DIR #include #include // String Loader +#include +#include //For animation Effects #include @@ -72,6 +74,7 @@ #include #include #include +#include #include "glxfullscreenbusyicon.h" using namespace Alf; @@ -90,7 +93,7 @@ /** * Interval delay for the periodic timer, in microseconds */ -const TInt KPeriodicIntervalDelay = 100000; +const TInt KPeriodicIntervalDelay = 500000; //This constant is used to calculate the index of the item for which texture has to removed. //6 = 5(iterator value in forward or backward direction for fullscreen) + 1(focus index) @@ -98,6 +101,7 @@ //Constant which says maximum number of fullscreen textures that we have have at a time. //11 = (5(5 fullscreen texture backwards)+1(fucus index texture)+5(5 fullscreen texture forwards)) const TInt KFullScreenTextureOffset = 5; +const TInt KGlxDecodingThreshold = 3000000; // pixels _LIT( KTfxResourceActivateFullScreen, "z:\\resource\\effects\\photos_fullscreen_open.fxml" ); @@ -184,6 +188,9 @@ iDrmUtility = CGlxDRMUtility::InstanceL(); // Get object that stores the active media list registry iActiveMediaListRegistry = CGlxActiveMediaListRegistry::InstanceL(); + + iIsDialogLaunched = EFalse; + iIsMMCRemoved = EFalse; iMMCNotifier = CGlxMMCNotifier::NewL(*this); if(!iPeriodic) @@ -323,6 +330,9 @@ CleanupStack::PopAndDestroy( naviState ); CleanupStack::PopAndDestroy( navigationalState ); + iScrnSize = iUiUtility->DisplaySize(); + iGridIconSize = iUiUtility->GetGridIconSize(); + //Create hdmicontroller when it is only launched from fullscreen. //From filemanager show only clone mode. if( !iImgViewerMode ) @@ -690,8 +700,16 @@ iHdmiController->ActivateZoom(autoZoomOut); } - iZoomControl->ActivateL(GetInitialZoomLevel(),aStartMode, focus, + if (aStartMode == EZoomStartSlider) + { + iZoomControl->ActivateL(iSliderModel->PrimaryValue(),aStartMode, focus, item, apZoomFocus,iImgViewerMode); + } + else + { + iZoomControl->ActivateL(GetInitialZoomLevel(),aStartMode, focus, + item, apZoomFocus,iImgViewerMode); + } // Now to remove all textures other than the one we are focussing on. TInt count = iMediaList->Count(); while (count > 0) @@ -1027,7 +1045,7 @@ { HideUi(ETrue); } - TRAP_IGNORE(ShowDrmExpiaryNoteL()); + TRAP_IGNORE(ShowDrmExpiryNoteL()); return EEventConsumed; } case EVideoIconSelect: @@ -1093,7 +1111,12 @@ case EGlxCmdResetView: { HideUi(ETrue); + if (iIsDialogLaunched && iIsMMCRemoved) + { + ProcessCommandL(EAknSoftkeyExit); + } consumed = ETrue; + iIsDialogLaunched = EFalse; break; } case EGlxCmdFullScreenBack: @@ -1107,6 +1130,11 @@ consumed = ETrue; break; } + case EGlxCmdDialogLaunched: + { + iIsDialogLaunched = ETrue; + break; + } } return consumed; } @@ -1149,6 +1177,16 @@ TSize size; TUint8 initialZoomLevel; item.GetDimensions( size ); + if (KGlxDecodingThreshold < (size.iWidth * size.iHeight)) + { + TReal areaRatio = TReal(size.iWidth*size.iHeight)/KGlxDecodingThreshold ; + + TReal sideRatio; + Math::Sqrt(sideRatio, areaRatio); + + size.iHeight = size.iHeight / sideRatio ; + size.iWidth = size.iWidth / sideRatio ; + } TRect rect = AlfUtil::ScreenSize(); if( rect.Width()>= size.iWidth && rect.Height() >= size.iHeight) @@ -1264,39 +1302,52 @@ inline void CGlxFullScreenViewImp::CallPeriodicCallback() { TRACER("CGlxFullScreenViewImp::CallPeriodicCallback"); - TRAP_IGNORE(ShowDrmExpiaryNoteL()); + TRAP_IGNORE(ShowDrmExpiryNoteL()); } // --------------------------------------------------------------------------- // Shows expiry note / Consumes DRM rights for expired DRM files // --------------------------------------------------------------------------- // -void CGlxFullScreenViewImp::ShowDrmExpiaryNoteL() +void CGlxFullScreenViewImp::ShowDrmExpiryNoteL() { - TRACER("CGlxFullScreenViewImp::ShowDrmExpiaryNoteL"); + TRACER("CGlxFullScreenViewImp::ShowDrmExpiryNoteL"); if (iMediaList->Count() > 0) { const TGlxMedia& media = iMediaList->Item(iMediaList->FocusIndex()); TInt tnError = GlxErrorManager::HasAttributeErrorL( media.Properties(), KGlxMediaIdThumbnail); - GLX_LOG_INFO1("CGlxFullScreenViewImp::ShowDrmExpiaryNoteL()" + GLX_LOG_INFO1("CGlxFullScreenViewImp::ShowDrmExpiryNoteL()" " tnError=%d ", tnError); if (media.IsDrmProtected()) { - GLX_LOG_INFO("CGlxFullScreenViewImp::ShowDrmExpiaryNoteL()" + GLX_LOG_INFO("CGlxFullScreenViewImp::ShowDrmExpiryNoteL()" "- ConsumeDRMRightsL()"); + //Consume DRM Rights & cancel Periodic timer for DRM images + //only if Quality TN is available ConsumeDRMRightsL(media); } - - if (tnError == KErrNone) + else { - if (iPeriodic->IsActive()) + //Cancel the periodic timer if quality thumbnail is available + //and no error in fetching quality thumbnail. + TSize tnSize = iUiUtility->DisplaySize(); + TMPXAttribute qtyTnAttrib = TMPXAttribute(KGlxMediaIdThumbnail, + GlxFullThumbnailAttributeId(ETrue, tnSize.iWidth, + tnSize.iHeight)); + const CGlxThumbnailAttribute* qtyTn = media.ThumbnailAttribute( + qtyTnAttrib); + if (qtyTn && tnError == KErrNone) { - iPeriodic->Cancel(); + if (iPeriodic->IsActive()) + { + iPeriodic->Cancel(); + } } } - + + //check if any Error message is to be displayed TMPXGeneralCategory cat = media.Category(); TBool checkViewRights = (cat == EMPXImage); if (iDrmUtility->ItemRightsValidityCheckL(media.Uri(), @@ -1314,7 +1365,7 @@ if (naviState->Id() == TMPXItemId( KGlxCollectionPluginImageViewerImplementationUid)) { - GLX_LOG_INFO("CGlxFullScreenViewImp::ShowDrmExpiaryNoteL()" + GLX_LOG_INFO("CGlxFullScreenViewImp::ShowDrmExpiryNoteL()" "- ShowErrorNoteL()"); GlxGeneralUiUtilities::ShowErrorNoteL(tnError); } @@ -1476,7 +1527,7 @@ TGlxMedia item = iMediaList->Item(focusIndex); TInt error = GlxErrorManager::HasAttributeErrorL(item.Properties(), KGlxMediaIdThumbnail); - + GLX_LOG_INFO1("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - error=%d", error); // Item will be supported by HDMI ONLY if // it is not a video // and it has valid DRM Viewing rights @@ -1485,8 +1536,60 @@ && iDrmUtility->ItemRightsValidityCheckL(item.Uri(), ETrue) && (error == KErrNone) ) { - GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Setting the Image"); - iHdmiController->SetImageL(item.Uri()); + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Fetch FS thumbnail"); + TMPXAttribute fsTnAttrib = TMPXAttribute(KGlxMediaIdThumbnail, + GlxFullThumbnailAttributeId(ETrue, iScrnSize.iWidth, + iScrnSize.iHeight)); + const CGlxThumbnailAttribute* fsValue = item.ThumbnailAttribute( + fsTnAttrib); + if (fsValue) + { + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Setting FS Bitmap"); + CFbsBitmap* fsBitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(fsBitmap); + fsBitmap->Duplicate( fsValue->iBitmap->Handle()); + + GLX_LOG_INFO2("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - FS Bitmap Size width=%d, height=%d", + fsBitmap->SizeInPixels().iWidth, fsBitmap->SizeInPixels().iHeight); + iHdmiController->SetImageL(item.Uri(),fsBitmap); + CleanupStack::PopAndDestroy(fsBitmap); + } + else + { + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Fetch Grid thumbnail"); + TMPXAttribute gridTnAttrib = TMPXAttribute(KGlxMediaIdThumbnail, + GlxFullThumbnailAttributeId(ETrue, iGridIconSize.iWidth, + iGridIconSize.iHeight)); + const CGlxThumbnailAttribute* gridvalue = item.ThumbnailAttribute( + gridTnAttrib); + + if (gridvalue) + { + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Setting Grid Bitmap"); + CFbsBitmap* gridBitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(gridBitmap); + gridBitmap->Duplicate( gridvalue->iBitmap->Handle()); + + GLX_LOG_INFO2("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - gridBitmap Size width=%d, height=%d", + gridBitmap->SizeInPixels().iWidth, gridBitmap->SizeInPixels().iHeight); + iHdmiController->SetImageL(item.Uri(),gridBitmap); + CleanupStack::PopAndDestroy(gridBitmap); + } + else + { + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Setting Default Bitmap"); + TFileName resFile(KDC_APP_BITMAP_DIR); + resFile.Append(KGlxIconsFilename); + CFbsBitmap* defaultBitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(defaultBitmap); + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_image_notcreated); + GLX_LOG_INFO2("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Default Size width=%d, height=%d", + defaultBitmap->SizeInPixels().iWidth, defaultBitmap->SizeInPixels().iHeight); + iHdmiController->SetImageL(item.Uri(),defaultBitmap); + CleanupStack::PopAndDestroy(defaultBitmap); + } + } } else { @@ -1540,12 +1643,16 @@ void CGlxFullScreenViewImp::HandleMMCRemovalL() { TRACER("CGlxFullScreenViewImp::HandleMMCRemovalL()"); - if(iZoomControl && iZoomControl->Activated()) + iIsMMCRemoved = ETrue; + if(!iIsDialogLaunched) { - SetSliderLevel(); - DeactivateZoomControlL(); + if(iZoomControl && iZoomControl->Activated()) + { + SetSliderLevel(); + DeactivateZoomControlL(); + } + ProcessCommandL(EAknSoftkeyExit); } - ProcessCommandL(EAknSoftkeyExit); } // ---------------------------------------------------------------------------