--- a/menucontentsrv/srvsrc/mcsdrmhandler.cpp Wed Sep 15 12:32:36 2010 +0300
+++ b/menucontentsrv/srvsrc/mcsdrmhandler.cpp Wed Oct 13 14:53:46 2010 +0300
@@ -11,7 +11,7 @@
*
* Contributors:
*
-* Description: Used for receive SIM Application name, icon or
+* Description: Used for receive SIM Application name, icon or
* visibility information.
*
*/
@@ -41,12 +41,12 @@
// -----------------------------------------------------------------------------
//
-CMcsDrmHandler* CMcsDrmHandler::NewL(
+CMcsDrmHandler* CMcsDrmHandler::NewL(
CMenuSrvEng& aSrvEng,
CMenuSrvEngUtils& aUtils,
CMcsCacheHandler& aCacheHandler )
{
- CMcsDrmHandler* self = new( ELeave )
+ CMcsDrmHandler* self = new( ELeave )
CMcsDrmHandler( aSrvEng, aUtils, aCacheHandler );
CleanupStack::PushL( self );
self->ConstructL();
@@ -54,7 +54,7 @@
return self;
}
-// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
// Destructor
// -----------------------------------------------------------------------------
CMcsDrmHandler::~CMcsDrmHandler()
@@ -70,10 +70,10 @@
// might leave.
// -----------------------------------------------------------------------------
//
-CMcsDrmHandler::CMcsDrmHandler(
+CMcsDrmHandler::CMcsDrmHandler(
CMenuSrvEng& aSrvEng,
CMenuSrvEngUtils& aUtils,
- CMcsCacheHandler& aCacheHandler ):
+ CMcsCacheHandler& aCacheHandler ):
iObserversManager( aUtils ), iSrvEng( aSrvEng ),
iUtils( aUtils ), iCacheHandler( aCacheHandler )
{
@@ -87,117 +87,148 @@
void CMcsDrmHandler::ConstructL()
{
iScanner = CMcsDrmScanner::NewL( *this, iSrvEng, iUtils );
- iInstallNotifier = CMcsInstallNotifier::NewL(
- *this, CMcsInstallNotifier::EJavaInstallNotification );
+ iInstallNotifier = CMcsInstallNotifier::NewL(*this, KPSUidJavaLatestInstallation);
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
-//
+//
TInt CMcsDrmHandler::AppFolderIdL( TUid aUid )
{
- RArray<TMenuItem> mcsItems;
+ RArray<TMenuItem> mcsItems;
CleanupClosePushL( mcsItems );
-
+
TInt root;
iSrvEng.Engine().RootFolderL( root );
TMenuSrvTypeAttrFilter appFilter;
- appFilter.SetType( KMenuTypeApp() );
-
+ appFilter.SetType( KMenuTypeApp() );
+
TBuf<KUidChars> uidString;
MenuSrvUtil::UidToStringL( aUid.iUid, uidString, 0, EHex );
-
+
appFilter.SetAttr( KMenuAttrUid(), uidString );
iSrvEng.Engine().GetItemsL( mcsItems, root, &appFilter, ETrue );
-
+
TInt folderId = KErrNotFound;
if (mcsItems.Count())
{
folderId = mcsItems[0].Parent();
iCacheHandler.HandleRemoveAttribute(mcsItems[0].Id(), KMenuAttrDrmProtection);
}
-
+
CleanupStack::PopAndDestroy( &mcsItems );
return folderId;
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
-//
+//
void CMcsDrmHandler::HandleDrmEvent( TUid aUid )
{
TRAP_IGNORE(
- iSrvEng.Engine().AppendNotifyL( AppFolderIdL( aUid ),
- RMenuNotifier::EItemAttributeChanged );
- iScanner->RemoveObserverAndScanL( aUid );
- );
+ iSrvEng.Engine().AppendNotifyL( AppFolderIdL( aUid ),
+ RMenuNotifier::EItemAttributeChanged );
+ iScanner->RemoveObserverAndScanL( aUid );
+ );
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
-//
+//
void CMcsDrmHandler::HandleDrmAppEvent()
{
TRAP_IGNORE( AddRemoveObserversL(
- iScanner->DrmProtectedAppArray() ) );
+ iScanner->DrmProtectedAppArray() ) );
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
-//
-void CMcsDrmHandler::AddRemoveObserversL(
- const RArray<TUid>& aDrmProtectedArray )
+//
+void CMcsDrmHandler::AddRemoveObserversL(
+ const RArray<TUid>& aDrmProtectedArray )
{
- iObserversManager.RemoveMissingObservers( aDrmProtectedArray );
+ iObserversManager.RemoveMissingObservers( aDrmProtectedArray );
iObserversManager.CreateObserversL( aDrmProtectedArray, *this );
- }
+ }
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
-//
+//
void CMcsDrmHandler::EngineEvents( TInt /*aFolder*/, TInt aEvents )
{
if ( aEvents & RMenuNotifier::EItemsAddedRemoved )
{
iScanner->Scan();
- }
+ }
}
// ---------------------------------------------------------
-//
+// CMcsDrmHandler::HandleInstallNotifyL
// ---------------------------------------------------------
//
-void CMcsDrmHandler::HandleInstallNotifyL( TUid aPackageUid,
- CMcsInstallNotifier::TNotificationType /*aNotificationType*/ )
- {
- if( aPackageUid != TUid::Null() )
- {
- if( ( iScanner->DrmExpiredAppArray() ).Find( aPackageUid )
- != KErrNotFound )
- {
- HandleDrmEvent( aPackageUid );
- }
- else
- {
- iObserversManager.RefreshObserverL(
- iScanner->DrmProtectedAppArray(), aPackageUid, *this );
- }
- }
- else
- {
- for( TInt i = 0; i < iScanner->DrmProtectedAppArray().Count(); i++ )
- {
- iObserversManager.RefreshObserverL(
- iScanner->DrmProtectedAppArray(),
- iScanner->DrmProtectedAppArray()[i], *this );
- }
- for( TInt i = 0; i < iScanner->DrmExpiredAppArray().Count(); i++ )
- {
- HandleDrmEvent( iScanner->DrmExpiredAppArray()[i] );
- }
- }
+void CMcsDrmHandler::HandleInstallNotifyL( TInt aPackageUid )
+ {
+ RArray<TUid> uids;
+ CleanupClosePushL( uids );
+
+ Java::CJavaRegistry* javaRegistry;
+ javaRegistry = Java::CJavaRegistry::NewLC();
+
+ Java::CJavaRegistryEntry* regEntry =
+ javaRegistry->RegistryEntryL( TUid::Uid(aPackageUid) );
+
+ if( regEntry )
+ {
+ CleanupStack::PushL( regEntry );
+
+ Java::TJavaRegistryEntryType entryType = regEntry->Type();
+
+ if ( ( entryType >= Java::EGeneralPackage ) &&
+ (entryType < Java::EGeneralApplication) )
+ {
+ //package entry
+ Java::CJavaRegistryPackageEntry* regPackageEntry =
+ static_cast<Java::CJavaRegistryPackageEntry*>( regEntry );
+ regPackageEntry->GetEmbeddedEntries( uids );
+ }
+ else
+ {
+ //application entry
+ uids.AppendL( regEntry->Uid() );
+ }
+
+ CleanupStack::PopAndDestroy( regEntry );
+ for ( TInt i = 0; i< uids.Count(); i++ )
+ {
+ if ( ( iScanner->DrmExpiredAppArray()).Find(uids[i]) != KErrNotFound )
+ {
+ HandleDrmEvent( uids[i] );
+ }
+ else
+ {
+ iObserversManager.RefreshObserverL( iScanner->DrmProtectedAppArray(),
+ uids[i], *this );
+ }
+ }
+ }
+ else
+ {
+ for ( TInt i = 0; i< iScanner->DrmProtectedAppArray().Count(); i++ )
+ {
+ iObserversManager.RefreshObserverL( iScanner->DrmProtectedAppArray(),
+ iScanner->DrmProtectedAppArray()[i], *this );
+ }
+ for ( TInt i = 0; i< iScanner->DrmExpiredAppArray().Count(); i++ )
+ {
+ HandleDrmEvent( iScanner->DrmExpiredAppArray()[i] );
+ }
+ }
+
+
+ CleanupStack::PopAndDestroy( javaRegistry );
+ CleanupStack::PopAndDestroy( &uids );
}
-// End of File
+// End of File