photosgallery/viewframework/commandhandlers/commandhandlerdrm/src/glxdrmiconmanager.cpp
changeset 0 4e91876724a2
child 18 bcb43dc84c44
equal deleted inserted replaced
-1:000000000000 0:4e91876724a2
       
     1 /*
       
     2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Manager of visual lists
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 /**
       
    22  * @internal reviewed 03/07/2007 by Rowland Cook
       
    23  */
       
    24 
       
    25 #include "glxdrmiconmanager.h"
       
    26 
       
    27 #include <data_caging_path_literals.hrh>
       
    28 #include <glxdrmutility.h>
       
    29 #include <glxuiutility.h>
       
    30 #include <glxicons.mbg> // icons
       
    31 #include <glxtracer.h>
       
    32 #include <glxlog.h>
       
    33 #include <glxtexturemanager.h>
       
    34 #include <glxuistd.h>
       
    35 #include <alf/alftexture.h>
       
    36 #include <alf/alfvisual.h>
       
    37 #include <mglxmedialist.h>
       
    38 #include <mglxvisuallist.h>
       
    39 #include <mpxmediadrmdefs.h>
       
    40 
       
    41 const TInt KGlxDrmIconSize = 16;
       
    42 const TInt KGlxDrmIconBorder = 0;
       
    43 
       
    44 // ---------------------------------------------------------------------------
       
    45 // 1st phase constructor
       
    46 // ---------------------------------------------------------------------------
       
    47 //
       
    48 EXPORT_C CGlxDrmIconManager* CGlxDrmIconManager::NewL( MGlxMediaList& aMediaList,
       
    49                                                 MGlxVisualList& aVisualList)
       
    50     {
       
    51     CGlxDrmIconManager* self = 
       
    52             new(ELeave)CGlxDrmIconManager(aMediaList, aVisualList);
       
    53     CleanupStack::PushL(self);
       
    54     self->ConstructL();
       
    55     CleanupStack::Pop(self);
       
    56     return self;
       
    57     }
       
    58 
       
    59 
       
    60 // ---------------------------------------------------------------------------
       
    61 // Destructor
       
    62 // ---------------------------------------------------------------------------
       
    63 //  
       
    64 EXPORT_C CGlxDrmIconManager::~CGlxDrmIconManager()
       
    65     {
       
    66     iMediaList.RemoveMediaListObserver(this);
       
    67     iVisualList.RemoveObserver(this);
       
    68     
       
    69     iThumbnailIcons.Close();
       
    70     
       
    71     if(iDRMUtility)
       
    72         {
       
    73         iDRMUtility->Close();
       
    74         }
       
    75     
       
    76     iValidDRMItems.Close();
       
    77     iInvalidDRMItems.Close();
       
    78     }
       
    79 
       
    80 // ---------------------------------------------------------------------------
       
    81 //  RemoveOverlayIcon
       
    82 // ---------------------------------------------------------------------------
       
    83 //  
       
    84 void CGlxDrmIconManager::RemoveOverlayIcon(TInt aIndex, 
       
    85                                                 TBool aInvalidIcon)
       
    86     {
       
    87     if(aInvalidIcon)
       
    88         {
       
    89         iVisualList.SetIconVisibility( aIndex,
       
    90                  *iDRMRightsExpiredTexture, EFalse );
       
    91         }
       
    92     else
       
    93         {
       
    94         iVisualList.SetIconVisibility( aIndex,
       
    95                  *iDRMSendForbidTexture, EFalse );
       
    96         }
       
    97         
       
    98     }
       
    99     
       
   100 // ---------------------------------------------------------------------------
       
   101 //  AddOverlayIconL
       
   102 // ---------------------------------------------------------------------------
       
   103 //    
       
   104 void CGlxDrmIconManager::AddOverlayIconsL()
       
   105     {
       
   106     TRACER("CGlxDrmIconManager::AddOverlayIconsL");
       
   107     TInt itemCount = iMediaList.Count();
       
   108     for(TInt i = 0; i < itemCount; i++)
       
   109         {
       
   110         CAlfVisual* vis = iVisualList.Visual(i);
       
   111         if(vis)
       
   112             {
       
   113             // recheck rights as status may have changed
       
   114             CheckDRMRightsL(vis, i);
       
   115             }
       
   116         }
       
   117     }
       
   118 
       
   119 // ---------------------------------------------------------------------------
       
   120 // HandleItemAddedL
       
   121 // ---------------------------------------------------------------------------
       
   122 //
       
   123 void CGlxDrmIconManager::HandleItemAddedL(TInt /*aStartIndex*/, 
       
   124                     TInt /*aEndIndex*/, MGlxMediaList* /*aList*/)
       
   125     {
       
   126     // No implementation
       
   127     }
       
   128 
       
   129 // ---------------------------------------------------------------------------
       
   130 // HandleMediaL
       
   131 // ---------------------------------------------------------------------------
       
   132 //
       
   133 void CGlxDrmIconManager::HandleMediaL(TInt /*aListIndex*/, 
       
   134                                             MGlxMediaList* /*aList*/)
       
   135     {
       
   136     // No implementation
       
   137     }
       
   138 
       
   139 // ---------------------------------------------------------------------------
       
   140 // void CGlxDrmIconManager::HandleItemRemovedL(TInt /*aStartIndex*/, 
       
   141 
       
   142 // ---------------------------------------------------------------------------
       
   143 //
       
   144 void CGlxDrmIconManager::HandleItemRemovedL(TInt /*aStartIndex*/, 
       
   145                         TInt /*aEndIndex*/, MGlxMediaList* /*aList*/)
       
   146     {
       
   147     // No implementation
       
   148     }
       
   149     
       
   150 // ---------------------------------------------------------------------------
       
   151 // HandleItemModifiedL
       
   152 // ---------------------------------------------------------------------------
       
   153 //
       
   154 void CGlxDrmIconManager::HandleItemModifiedL(
       
   155         const RArray<TInt>& /*aItemIndexes*/, MGlxMediaList* /*aList*/)
       
   156     {
       
   157     // No implementation
       
   158     }
       
   159    
       
   160 // ---------------------------------------------------------------------------
       
   161 // HandleAttributesAvailableL
       
   162 // ---------------------------------------------------------------------------
       
   163 //
       
   164 void CGlxDrmIconManager::HandleAttributesAvailableL(TInt aItemIndex,     
       
   165     const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* /*aList*/)
       
   166     {
       
   167     TIdentityRelation<TMPXAttribute> match(&TMPXAttribute::Match);
       
   168 	if (aAttributes.Find(KMPXMediaDrmProtected, match) != KErrNotFound) 
       
   169 		{	
       
   170 	    // check if we have DRM attributes
       
   171 	    CAlfVisual* vis = iVisualList.Visual(aItemIndex);
       
   172 	    if(vis)
       
   173 	    	{
       
   174 	    	CheckDRMRightsL(vis, aItemIndex, EFalse);
       
   175 	    	}
       
   176 		}
       
   177     }
       
   178         
       
   179 // ---------------------------------------------------------------------------
       
   180 // HandleFocusChangedL
       
   181 // ---------------------------------------------------------------------------
       
   182 //
       
   183 void CGlxDrmIconManager::HandleFocusChangedL(
       
   184         NGlxListDefs::TFocusChangeType /*aType*/, 
       
   185         TInt /*aNewIndex*/, TInt /*aOldIndex*/, MGlxMediaList* /*aList*/)
       
   186     {
       
   187     // No implementation
       
   188     }
       
   189 
       
   190 // ---------------------------------------------------------------------------
       
   191 // HandleItemSelectedL
       
   192 // ---------------------------------------------------------------------------
       
   193 //
       
   194 void CGlxDrmIconManager::HandleItemSelectedL(TInt /*aIndex*/, 
       
   195                         TBool /*aSelected*/, MGlxMediaList* /*aList*/)
       
   196     {
       
   197     // No implementation
       
   198     }
       
   199 
       
   200 // ---------------------------------------------------------------------------
       
   201 // HandleMessageL
       
   202 // ---------------------------------------------------------------------------
       
   203 //
       
   204 void CGlxDrmIconManager::HandleMessageL(const CMPXMessage& /*aMessage*/, 
       
   205                                                     MGlxMediaList* /*aList*/)
       
   206     {
       
   207     // No implementation
       
   208     }
       
   209 
       
   210 
       
   211 // ---------------------------------------------------------------------------
       
   212 // HandleFocusChangedL
       
   213 // ---------------------------------------------------------------------------
       
   214 //
       
   215 void CGlxDrmIconManager::HandleFocusChangedL( TInt /*aFocusIndex*/, 
       
   216     TReal32 /*aItemsPerSecond*/, MGlxVisualList* /*aList*/,
       
   217     NGlxListDefs::TFocusChangeType /*aType*/ )
       
   218     {
       
   219     // No implementation
       
   220     }
       
   221     
       
   222 // ---------------------------------------------------------------------------
       
   223 // HandleSizeChanged
       
   224 // ---------------------------------------------------------------------------
       
   225 //
       
   226 void CGlxDrmIconManager::HandleSizeChanged( const TSize& /*aSize*/, 
       
   227     MGlxVisualList* /*aList*/ )
       
   228     {
       
   229     // No implementation
       
   230     }
       
   231     
       
   232 // ---------------------------------------------------------------------------
       
   233 // HandleVisualRemoved
       
   234 // ---------------------------------------------------------------------------
       
   235 //
       
   236 void CGlxDrmIconManager::HandleVisualRemoved( 
       
   237     const CAlfVisual* /*aVisual*/,  MGlxVisualList* /*aList*/ )
       
   238     {
       
   239     // No implementation
       
   240     }
       
   241     
       
   242 // ---------------------------------------------------------------------------
       
   243 // HandleVisualAddedL
       
   244 // ---------------------------------------------------------------------------
       
   245 //
       
   246 void CGlxDrmIconManager::HandleVisualAddedL( CAlfVisual* aVisual, 
       
   247     TInt aIndex, MGlxVisualList* /*aList*/ )
       
   248     {
       
   249     if(aIndex >= 0 && aIndex < iMediaList.Count() )
       
   250         {
       
   251         CheckDRMRightsL(aVisual, aIndex);
       
   252         }
       
   253     }
       
   254 
       
   255 // ---------------------------------------------------------------------------
       
   256 // Constructor
       
   257 // ---------------------------------------------------------------------------
       
   258 //  
       
   259 CGlxDrmIconManager::CGlxDrmIconManager(MGlxMediaList& aMediaList, 
       
   260                                             MGlxVisualList& aVisualList)
       
   261     : CGlxIconManager(aMediaList, aVisualList)
       
   262     {
       
   263     // No implementation
       
   264     }
       
   265 
       
   266 // ---------------------------------------------------------------------------
       
   267 // 2nd phase construction
       
   268 // ---------------------------------------------------------------------------
       
   269 //  
       
   270 void CGlxDrmIconManager::ConstructL()
       
   271     {
       
   272     TRACER("CGlxDrmIconManager::ConstructL");
       
   273     BaseConstructL();
       
   274     
       
   275     TFileName mifFile( KDC_APP_BITMAP_DIR );
       
   276     mifFile.Append( KGlxIconsFilename );
       
   277        
       
   278     GLX_LOG_INFO("CGlxDrmIconManager::ConstructL create valid icon");   
       
   279     // ask texture manager to create DRM valid icon
       
   280     iDRMSendForbidTexture = &(iUiUtility->GlxTextureManager().
       
   281              CreateIconTextureL( EMbmGlxiconsQgn_prop_drm_rights_valid_super, 
       
   282                             mifFile, TSize( KGlxDrmIconSize, KGlxDrmIconSize ) ) );
       
   283     GLX_LOG_INFO("CGlxDrmIconManager::ConstructL create invalid icon");                            
       
   284     
       
   285     // ask texture manager to create DRM invalid icon                        
       
   286     iDRMRightsExpiredTexture = &(iUiUtility->GlxTextureManager().
       
   287              CreateIconTextureL( EMbmGlxiconsQgn_prop_drm_rights_exp_super, 
       
   288                             mifFile, TSize( KGlxDrmIconSize, KGlxDrmIconSize ) ) );
       
   289     
       
   290     
       
   291     
       
   292     // add as observers
       
   293     iMediaList.AddMediaListObserverL(this); 
       
   294     iVisualList.AddObserverL(this);
       
   295     
       
   296     GLX_LOG_INFO("CGlxDrmIconManager::ConstructL create DRM utility");
       
   297     iDRMUtility = CGlxDRMUtility::InstanceL();
       
   298     
       
   299     // check for any visual already present in list
       
   300     TInt itemCount = iMediaList.Count();
       
   301     for(TInt i = 0; i < itemCount; i++)
       
   302         {
       
   303         CAlfVisual* vis = iVisualList.Visual( i );
       
   304         if(vis)
       
   305             {
       
   306             CheckDRMRightsL(vis, i);
       
   307             }
       
   308         }
       
   309         
       
   310     }
       
   311 
       
   312 // ---------------------------------------------------------------------------
       
   313 // IconAlreadyAdded
       
   314 // ---------------------------------------------------------------------------
       
   315 //  
       
   316 TInt CGlxDrmIconManager::ThumbnailIconArrayPos(TIconInfo& aIconInfo)
       
   317     {
       
   318     // check if icon already generated
       
   319     TInt pos = KErrNotFound;
       
   320     TInt count = iThumbnailIcons.Count();
       
   321     for(TInt i=0; i<count; i++)
       
   322         {
       
   323         if((aIconInfo.bmpfile==iThumbnailIcons[i].bmpfile) &&
       
   324             (aIconInfo.bitmapId==iThumbnailIcons[i].bitmapId))
       
   325             {
       
   326             pos = i;
       
   327             break;
       
   328             }
       
   329         }
       
   330     return pos;
       
   331     }
       
   332     
       
   333 // ---------------------------------------------------------------------------
       
   334 // CheckDRMRightsL
       
   335 // ---------------------------------------------------------------------------
       
   336 //       
       
   337 void CGlxDrmIconManager::CheckDRMRightsL(CAlfVisual* /*aVisual*/,
       
   338                                     TInt aIndex, TBool aForceIcon)
       
   339     {
       
   340     TRACER("CGlxDrmIconManager::CheckDRMRightsL");
       
   341     const TGlxMedia&  item = iMediaList.Item(aIndex);
       
   342     TGlxMediaId id = item.Id();
       
   343     
       
   344     GLX_LOG_INFO1("CGlxDrmIconManager::CheckDRMRightsL item idx (%d)",aIndex);
       
   345     // Do not assume DRM protected by default. In default case add no icon.
       
   346     // So cannot use TGlxMedia::IsDrmProtected()
       
   347     TBool drm = EFalse;
       
   348     if(item.GetDrmProtected(drm) && drm)
       
   349         {
       
   350         const TDesC& uri = item.Uri();
       
   351         if(uri.Length() > 0)
       
   352             {
       
   353             TGlxVisualIcon iconType;        
       
   354             if(iDRMUtility->IsForwardLockedL(uri))
       
   355                 {
       
   356                 GLX_LOG_INFO("CGlxDrmIconManager::CheckDRMRightsL forward locked");
       
   357                 if(aForceIcon || !ShouldHaveIcon(id, iconType))
       
   358                     {
       
   359                     GLX_LOG_INFO("CGlxDrmIconManager::CheckDRMRightsL forward locked add icon");
       
   360                     AddValidIconL(id);
       
   361                     iVisualList.AddIconL( aIndex, *iDRMSendForbidTexture, 
       
   362                         NGlxIconMgrDefs::EGlxIconBottomRight, ETrue, EFalse, KGlxDrmIconBorder );
       
   363                         
       
   364                     iVisualList.SetIconVisibility( aIndex, *iDRMSendForbidTexture, ETrue );
       
   365                     }
       
   366                
       
   367                 }
       
   368             else 
       
   369                 {
       
   370                 
       
   371                 TMPXGeneralCategory  cat = item.Category();
       
   372                     
       
   373                 TBool checkViewRights = (cat==EMPXImage);
       
   374                 
       
   375                 if(iDRMUtility->CheckOpenRightsL(uri, checkViewRights))
       
   376                     {
       
   377                     GLX_LOG_INFO("CGlxDrmIconManager::CheckDRMRightsL valid rights");
       
   378                     if(aForceIcon ||!ShouldHaveIcon(id, iconType))
       
   379                         {
       
   380                         GLX_LOG_INFO("CGlxDrmIconManager::CheckDRMRightsL valid rights add icon");
       
   381                         AddValidIconL(id);
       
   382                         iVisualList.AddIconL( aIndex, *iDRMSendForbidTexture, 
       
   383                                             NGlxIconMgrDefs::EGlxIconBottomRight, 
       
   384                                             ETrue, EFalse, KGlxDrmIconBorder );
       
   385                                             
       
   386                         iVisualList.SetIconVisibility( aIndex, *iDRMSendForbidTexture, ETrue );
       
   387                         }
       
   388                     }
       
   389                  else
       
   390                     {
       
   391                     GLX_LOG_INFO("CGlxDrmIconManager::CheckDRMRightsL invalid rights");
       
   392                     
       
   393                     if(aForceIcon ||!ShouldHaveIcon(id, iconType))
       
   394                         {
       
   395                         iVisualList.RemoveIcon( aIndex, *iDRMSendForbidTexture );
       
   396                         GLX_LOG_INFO("CGlxDrmIconManager::CheckDRMRightsL add invalid icon");
       
   397                         AddInvalidIconL(id);
       
   398                         iVisualList.AddIconL( aIndex, *iDRMRightsExpiredTexture, 
       
   399                                             NGlxIconMgrDefs::EGlxIconBottomRight, 
       
   400                                                 ETrue, EFalse, KGlxDrmIconBorder );
       
   401                 
       
   402                         iVisualList.SetIconVisibility( aIndex, *iDRMRightsExpiredTexture, ETrue );                                                
       
   403                         }
       
   404                     }
       
   405                  }
       
   406             }
       
   407         }
       
   408     }
       
   409 
       
   410 // ---------------------------------------------------------------------------
       
   411 // AddValidIcon
       
   412 // ---------------------------------------------------------------------------
       
   413 //           
       
   414 void CGlxDrmIconManager::AddValidIconL(TGlxMediaId& aId)
       
   415     {
       
   416     TInt count = iValidDRMItems.Count();
       
   417     TBool present = EFalse;
       
   418     for(TInt i=0; i<count; i++)
       
   419         {
       
   420         if(iValidDRMItems[i]==aId)
       
   421             {
       
   422             present = ETrue;
       
   423             break;
       
   424             }
       
   425         }
       
   426     
       
   427     if(present == EFalse)
       
   428         {
       
   429         iValidDRMItems.AppendL(aId);
       
   430         }
       
   431     
       
   432     // remove from list of items with broken thumbnails
       
   433     // if necessary    
       
   434     count = iInvalidDRMItems.Count();
       
   435     for(TInt j=0;j<count;j++)
       
   436         {
       
   437         if(iInvalidDRMItems[j]==aId)
       
   438             {
       
   439             iInvalidDRMItems.Remove(j);
       
   440             break;
       
   441             }
       
   442         }
       
   443     }
       
   444 
       
   445 // ---------------------------------------------------------------------------
       
   446 // AddInvalidIcon
       
   447 // ---------------------------------------------------------------------------
       
   448 //          
       
   449 void CGlxDrmIconManager::AddInvalidIconL(TGlxMediaId& aId)
       
   450     {
       
   451     TInt count = iInvalidDRMItems.Count();
       
   452     TBool present = EFalse;
       
   453     for(TInt i=0; i<count; i++)
       
   454         {
       
   455         if(iInvalidDRMItems[i]==aId)
       
   456             {
       
   457             present = ETrue;
       
   458             break;
       
   459             }
       
   460         }
       
   461     
       
   462     if(present == EFalse)
       
   463         {
       
   464         iInvalidDRMItems.AppendL(aId);
       
   465         }
       
   466     
       
   467     // remove from list of items with broken thumbnails
       
   468     // if necessary    
       
   469     count = iValidDRMItems.Count();
       
   470     for(TInt j=0;j<count;j++)
       
   471         {
       
   472         if(iValidDRMItems[j]==aId)
       
   473             {
       
   474             iValidDRMItems.Remove(j);
       
   475             break;
       
   476             }
       
   477         }
       
   478     }
       
   479 
       
   480 // ---------------------------------------------------------------------------
       
   481 // ShouldHaveIcon
       
   482 // ---------------------------------------------------------------------------
       
   483 //       
       
   484 TBool CGlxDrmIconManager::ShouldHaveIcon(TGlxMediaId& aId, 
       
   485                                         TGlxVisualIcon& aType)
       
   486     {
       
   487     TBool hasIcon = EFalse;
       
   488     
       
   489     TInt count = iValidDRMItems.Count();
       
   490     for(TInt i=0; i<count; i++)
       
   491         {
       
   492         if(iValidDRMItems[i]==aId)
       
   493             {
       
   494             hasIcon = ETrue;
       
   495             aType = EDRMRightsValidIcon;
       
   496             break;
       
   497             }
       
   498         }
       
   499         
       
   500     if(hasIcon == EFalse)
       
   501         {
       
   502         count = iInvalidDRMItems.Count();
       
   503         for(TInt i=0; i<count; i++)
       
   504             {
       
   505             if(iInvalidDRMItems[i]==aId)
       
   506                 {
       
   507                 hasIcon = ETrue;
       
   508                 aType = EDRMRightsInvalidIcon;
       
   509                 break;
       
   510                 }
       
   511             }
       
   512         }
       
   513     return hasIcon;
       
   514     }