menucontentsrv/srvsrc/mcsdrmhandler.cpp
branchRCL_3
changeset 130 67f2ed48ad91
parent 122 6cadd6867c17
equal deleted inserted replaced
122:6cadd6867c17 130:67f2ed48ad91
     9 * Initial Contributors:
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:  Used for receive SIM Application name, icon or
    14 * Description:  Used for receive SIM Application name, icon or 
    15 *                visibility information.
    15 *                visibility information.
    16 *
    16 *
    17 */
    17 */
    18 
    18 
    19 
    19 
    39 // CMcsDrmHandler::NewL
    39 // CMcsDrmHandler::NewL
    40 // Two-phased constructor.
    40 // Two-phased constructor.
    41 // -----------------------------------------------------------------------------
    41 // -----------------------------------------------------------------------------
    42 //
    42 //
    43 
    43 
    44 CMcsDrmHandler* CMcsDrmHandler::NewL(
    44 CMcsDrmHandler* CMcsDrmHandler::NewL( 
    45     CMenuSrvEng& aSrvEng,
    45     CMenuSrvEng& aSrvEng,
    46     CMenuSrvEngUtils& aUtils,
    46     CMenuSrvEngUtils& aUtils,
    47     CMcsCacheHandler& aCacheHandler )
    47     CMcsCacheHandler& aCacheHandler )
    48     {
    48     {
    49     CMcsDrmHandler* self = new( ELeave )
    49     CMcsDrmHandler* self = new( ELeave ) 
    50             CMcsDrmHandler( aSrvEng, aUtils, aCacheHandler );
    50             CMcsDrmHandler( aSrvEng, aUtils, aCacheHandler );
    51     CleanupStack::PushL( self );
    51     CleanupStack::PushL( self );
    52     self->ConstructL();
    52     self->ConstructL();
    53     CleanupStack::Pop( self );
    53     CleanupStack::Pop( self );
    54     return self;
    54     return self;
    55     }
    55     }
    56 
    56 
    57 // -----------------------------------------------------------------------------
    57 // -----------------------------------------------------------------------------    
    58 // Destructor
    58 // Destructor
    59 // -----------------------------------------------------------------------------
    59 // -----------------------------------------------------------------------------
    60 CMcsDrmHandler::~CMcsDrmHandler()
    60 CMcsDrmHandler::~CMcsDrmHandler()
    61     {
    61     {
    62     delete iInstallNotifier;
    62     delete iInstallNotifier;
    68 // CMcsDrmHandler::CMcsDrmHandler
    68 // CMcsDrmHandler::CMcsDrmHandler
    69 // C++ default constructor can NOT contain any code, that
    69 // C++ default constructor can NOT contain any code, that
    70 // might leave.
    70 // might leave.
    71 // -----------------------------------------------------------------------------
    71 // -----------------------------------------------------------------------------
    72 //
    72 //
    73 CMcsDrmHandler::CMcsDrmHandler(
    73 CMcsDrmHandler::CMcsDrmHandler( 
    74     CMenuSrvEng& aSrvEng,
    74     CMenuSrvEng& aSrvEng,
    75     CMenuSrvEngUtils& aUtils,
    75     CMenuSrvEngUtils& aUtils,
    76     CMcsCacheHandler& aCacheHandler ):
    76     CMcsCacheHandler& aCacheHandler ): 
    77     iObserversManager( aUtils ), iSrvEng( aSrvEng ),
    77     iObserversManager( aUtils ), iSrvEng( aSrvEng ),
    78     iUtils( aUtils ), iCacheHandler( aCacheHandler )
    78     iUtils( aUtils ), iCacheHandler( aCacheHandler )
    79     {
    79     {
    80     }
    80     }
    81 
    81 
    85 // -----------------------------------------------------------------------------
    85 // -----------------------------------------------------------------------------
    86 //
    86 //
    87 void CMcsDrmHandler::ConstructL()
    87 void CMcsDrmHandler::ConstructL()
    88     {
    88     {
    89     iScanner = CMcsDrmScanner::NewL( *this, iSrvEng, iUtils );
    89     iScanner = CMcsDrmScanner::NewL( *this, iSrvEng, iUtils );
    90   iInstallNotifier = CMcsInstallNotifier::NewL(
    90 	iInstallNotifier = CMcsInstallNotifier::NewL(*this, KPSUidJavaLatestInstallation);
    91           *this, CMcsInstallNotifier::EJavaInstallNotification );
    91 
    92 
    92     }
    93     }
    93 
    94 
    94 // -----------------------------------------------------------------------------
    95 // -----------------------------------------------------------------------------
    95 // -----------------------------------------------------------------------------
    96 // -----------------------------------------------------------------------------
    96 //    
    97 //
       
    98 TInt CMcsDrmHandler::AppFolderIdL( TUid aUid )
    97 TInt CMcsDrmHandler::AppFolderIdL( TUid aUid )
    99     {
    98     {
   100     RArray<TMenuItem> mcsItems;
    99     RArray<TMenuItem> mcsItems; 
   101     CleanupClosePushL( mcsItems );
   100     CleanupClosePushL( mcsItems );
   102 
   101     
   103     TInt root;
   102     TInt root;
   104     iSrvEng.Engine().RootFolderL( root );
   103     iSrvEng.Engine().RootFolderL( root );
   105     TMenuSrvTypeAttrFilter appFilter;
   104     TMenuSrvTypeAttrFilter appFilter;
   106     appFilter.SetType( KMenuTypeApp() );
   105     appFilter.SetType( KMenuTypeApp() );   
   107 
   106     
   108     TBuf<KUidChars> uidString;
   107     TBuf<KUidChars> uidString;
   109     MenuSrvUtil::UidToStringL( aUid.iUid, uidString, 0, EHex );
   108     MenuSrvUtil::UidToStringL( aUid.iUid, uidString, 0, EHex );
   110 
   109     
   111     appFilter.SetAttr( KMenuAttrUid(), uidString );
   110     appFilter.SetAttr( KMenuAttrUid(), uidString );
   112     iSrvEng.Engine().GetItemsL( mcsItems, root, &appFilter, ETrue );
   111     iSrvEng.Engine().GetItemsL( mcsItems, root, &appFilter, ETrue );
   113 
   112     
   114     TInt folderId = KErrNotFound;
   113     TInt folderId = KErrNotFound;
   115     if (mcsItems.Count())
   114     if (mcsItems.Count())
   116         {
   115         {
   117         folderId = mcsItems[0].Parent();
   116         folderId = mcsItems[0].Parent();
   118         iCacheHandler.HandleRemoveAttribute(mcsItems[0].Id(), KMenuAttrDrmProtection);
   117         iCacheHandler.HandleRemoveAttribute(mcsItems[0].Id(), KMenuAttrDrmProtection);
   119         }
   118         }
   120 
   119     
   121     CleanupStack::PopAndDestroy( &mcsItems );
   120     CleanupStack::PopAndDestroy( &mcsItems );
   122     return folderId;
   121     return folderId;
   123     }
   122     }
   124 
   123 
   125 // -----------------------------------------------------------------------------
   124 // -----------------------------------------------------------------------------
   126 // -----------------------------------------------------------------------------
   125 // -----------------------------------------------------------------------------
   127 //
   126 //     
   128 void CMcsDrmHandler::HandleDrmEvent( TUid aUid )
   127 void CMcsDrmHandler::HandleDrmEvent( TUid aUid )
   129     {
   128     {
   130     TRAP_IGNORE(
   129     TRAP_IGNORE(
   131         iSrvEng.Engine().AppendNotifyL( AppFolderIdL( aUid ),
   130     		iSrvEng.Engine().AppendNotifyL( AppFolderIdL( aUid ), 
   132             RMenuNotifier::EItemAttributeChanged );
   131     				RMenuNotifier::EItemAttributeChanged );
   133         iScanner->RemoveObserverAndScanL( aUid );
   132     		iScanner->RemoveObserverAndScanL( aUid );
   134         );
   133 				);
   135     }
   134     }
   136 
   135 
   137 // -----------------------------------------------------------------------------
   136 // -----------------------------------------------------------------------------
   138 // -----------------------------------------------------------------------------
   137 // -----------------------------------------------------------------------------
   139 //
   138 //     
   140 void CMcsDrmHandler::HandleDrmAppEvent()
   139 void CMcsDrmHandler::HandleDrmAppEvent()
   141     {
   140     {
   142     TRAP_IGNORE( AddRemoveObserversL(
   141     TRAP_IGNORE( AddRemoveObserversL(
   143         iScanner->DrmProtectedAppArray() ) );
   142         iScanner->DrmProtectedAppArray() ) );     
   144     }
   143     }
   145 
   144 
   146 // -----------------------------------------------------------------------------
   145 // -----------------------------------------------------------------------------
   147 // -----------------------------------------------------------------------------
   146 // -----------------------------------------------------------------------------
   148 //
   147 //     
   149 void CMcsDrmHandler::AddRemoveObserversL(
   148 void CMcsDrmHandler::AddRemoveObserversL( 
   150         const RArray<TUid>& aDrmProtectedArray )
   149 	const RArray<TUid>& aDrmProtectedArray )
   151     {
   150     {
   152     iObserversManager.RemoveMissingObservers( aDrmProtectedArray );
   151     iObserversManager.RemoveMissingObservers( aDrmProtectedArray );    
   153     iObserversManager.CreateObserversL( aDrmProtectedArray, *this );
   152     iObserversManager.CreateObserversL( aDrmProtectedArray, *this );
   154     }
   153     }    
   155 
   154 
   156 // -----------------------------------------------------------------------------
   155 // -----------------------------------------------------------------------------
   157 // -----------------------------------------------------------------------------
   156 // -----------------------------------------------------------------------------
   158 //
   157 //        
   159 void CMcsDrmHandler::EngineEvents( TInt /*aFolder*/, TInt aEvents )
   158 void CMcsDrmHandler::EngineEvents( TInt /*aFolder*/, TInt aEvents )
   160     {
   159     {
   161     if ( aEvents & RMenuNotifier::EItemsAddedRemoved )
   160     if ( aEvents & RMenuNotifier::EItemsAddedRemoved )
   162         {
   161         {
   163         iScanner->Scan();
   162         iScanner->Scan();
   164         }
   163         }    
   165     }
   164     }
   166 
   165 
   167 // ---------------------------------------------------------
   166 // ---------------------------------------------------------
   168 //
   167 // CMcsDrmHandler::HandleInstallNotifyL
   169 // ---------------------------------------------------------
   168 // ---------------------------------------------------------
   170 //
   169 //
   171 void CMcsDrmHandler::HandleInstallNotifyL( TUid aPackageUid,
   170 void CMcsDrmHandler::HandleInstallNotifyL( TInt aPackageUid )
   172     CMcsInstallNotifier::TNotificationType /*aNotificationType*/ )
   171 	{
   173     {
   172 	RArray<TUid> uids;
   174     if( aPackageUid != TUid::Null() )
   173 	CleanupClosePushL( uids );
   175         {
   174 
   176         if( ( iScanner->DrmExpiredAppArray() ).Find( aPackageUid )
   175 	Java::CJavaRegistry* javaRegistry;
   177                 != KErrNotFound )
   176 	javaRegistry = Java::CJavaRegistry::NewLC();
   178             {
   177 
   179             HandleDrmEvent( aPackageUid );
   178 	Java::CJavaRegistryEntry* regEntry = 
   180             }
   179 		javaRegistry->RegistryEntryL( TUid::Uid(aPackageUid) );
   181         else
   180 
   182             {
   181 	if( regEntry )
   183             iObserversManager.RefreshObserverL(
   182 		{
   184                     iScanner->DrmProtectedAppArray(), aPackageUid, *this );
   183 	CleanupStack::PushL( regEntry );
   185             }
   184 
   186         }
   185 	Java::TJavaRegistryEntryType entryType = regEntry->Type();
   187     else
   186 	
   188         {
   187 	if ( ( entryType >= Java::EGeneralPackage ) && 
   189         for( TInt i = 0; i < iScanner->DrmProtectedAppArray().Count(); i++ )
   188 			(entryType < Java::EGeneralApplication) )
   190             {
   189 		{
   191             iObserversManager.RefreshObserverL(
   190 		//package entry
   192                     iScanner->DrmProtectedAppArray(),
   191 		Java::CJavaRegistryPackageEntry* regPackageEntry = 
   193                     iScanner->DrmProtectedAppArray()[i], *this );
   192 					static_cast<Java::CJavaRegistryPackageEntry*>( regEntry );
   194             }
   193 			regPackageEntry->GetEmbeddedEntries( uids );
   195         for( TInt i = 0; i < iScanner->DrmExpiredAppArray().Count(); i++ )
   194 			}
   196             {
   195 		else 
   197             HandleDrmEvent( iScanner->DrmExpiredAppArray()[i] );
   196 			{
   198             }
   197 			//application entry
   199         }
   198 			uids.AppendL( regEntry->Uid() );
   200     }
   199 			}
   201 
   200 		
   202 
   201 		CleanupStack::PopAndDestroy( regEntry );
   203 //  End of File
   202 	    for ( TInt i = 0; i< uids.Count(); i++ )
       
   203 	        {
       
   204 	        if ( ( iScanner->DrmExpiredAppArray()).Find(uids[i]) != KErrNotFound )
       
   205 	            {
       
   206 	            HandleDrmEvent( uids[i] );
       
   207 	            }
       
   208 	        else
       
   209 	            {
       
   210 	            iObserversManager.RefreshObserverL( iScanner->DrmProtectedAppArray(), 
       
   211 	                    uids[i], *this );
       
   212 	            }
       
   213 	        }
       
   214 		}
       
   215 	else
       
   216 	    {
       
   217 	    for ( TInt i = 0; i< iScanner->DrmProtectedAppArray().Count(); i++ )
       
   218 	        {
       
   219             iObserversManager.RefreshObserverL( iScanner->DrmProtectedAppArray(), 
       
   220         		   iScanner->DrmProtectedAppArray()[i], *this );
       
   221 	        }
       
   222 	    for ( TInt i = 0; i< iScanner->DrmExpiredAppArray().Count(); i++ )
       
   223 	        {
       
   224 	        HandleDrmEvent( iScanner->DrmExpiredAppArray()[i] );
       
   225 	        }	    
       
   226 	    }
       
   227 	
       
   228 	
       
   229 	CleanupStack::PopAndDestroy( javaRegistry );
       
   230 	CleanupStack::PopAndDestroy( &uids );
       
   231     }
       
   232 
       
   233 
       
   234 //  End of File