diff -r 000000000000 -r 79c6a41cd166 menucontentsrv/srvsrc/mcsdrmhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menucontentsrv/srvsrc/mcsdrmhandler.cpp Thu Dec 17 08:54:17 2009 +0200 @@ -0,0 +1,234 @@ +/* +* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Used for receive SIM Application name, icon or +* visibility information. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include "mcsdrmhandler.h" +#include "mcsdrmscanner.h" +#include "mcsmenunotifier.h" +#include "menueng.h" +#include "menusrveng.h" +#include "menusrvengutils.h" +#include "mcscachehandler.h" +#include "mcsdef.h" + + +// ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CMcsDrmHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// + +CMcsDrmHandler* CMcsDrmHandler::NewL( + CMenuSrvEng& aSrvEng, + CMenuSrvEngUtils& aUtils, + CMcsCacheHandler& aCacheHandler ) + { + CMcsDrmHandler* self = new( ELeave ) + CMcsDrmHandler( aSrvEng, aUtils, aCacheHandler ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +CMcsDrmHandler::~CMcsDrmHandler() + { + delete iInstallNotifier; + delete iScanner; + iObserversManager.Close(); + } + +// ----------------------------------------------------------------------------- +// CMcsDrmHandler::CMcsDrmHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMcsDrmHandler::CMcsDrmHandler( + CMenuSrvEng& aSrvEng, + CMenuSrvEngUtils& aUtils, + CMcsCacheHandler& aCacheHandler ): + iObserversManager( aUtils ), iSrvEng( aSrvEng ), + iUtils( aUtils ), iCacheHandler( aCacheHandler ) + { + } + +// ----------------------------------------------------------------------------- +// CMcsDrmHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMcsDrmHandler::ConstructL() + { + iScanner = CMcsDrmScanner::NewL( *this, iSrvEng, iUtils ); + iInstallNotifier = CMcsInstallNotifier::NewL(*this, KPSUidJavaLatestInstallation); + + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +TInt CMcsDrmHandler::AppFolderIdL( TUid aUid ) + { + RArray mcsItems; + CleanupClosePushL( mcsItems ); + + TInt root; + iSrvEng.Engine().RootFolderL( root ); + TMenuSrvTypeAttrFilter appFilter; + appFilter.SetType( KMenuTypeApp() ); + + TBuf 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 ); + ); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CMcsDrmHandler::HandleDrmAppEvent() + { + TRAP_IGNORE( AddRemoveObserversL( + iScanner->DrmProtectedAppArray() ) ); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CMcsDrmHandler::AddRemoveObserversL( + const RArray& 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( TInt aPackageUid ) + { + RArray 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( 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