photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp
branchRCL_3
changeset 25 191387a8b767
parent 22 2dac0fdba72b
child 30 a60acebbbd9d
--- 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 <data_caging_path_literals.hrh>        // for KDC_APP_RESOURCE_DIR
 #include <glxcollectionpluginimageviewer.hrh>
 #include <StringLoader.h>                       // String Loader
+#include <AknIconUtils.h>
+#include <e32math.h>
 
 //For animation Effects
 #include <akntranseffect.h>
@@ -72,6 +74,7 @@
 #include <glxnavigationalstate.h>
 #include <mpxcollectionpath.h>
 #include <glxcollectionpluginimageviewer.hrh>
+#include <glxuistd.h>
 #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);
     }
 	
 // ---------------------------------------------------------------------------