diff -r 3f419852be07 -r 364021cecc90 smartinstaller/common/utils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/smartinstaller/common/utils.cpp Wed Jun 30 11:01:26 2010 +0530 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2010 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: +* Static utility methods +*/ + +#include +#include +#include +#include "utils.h" + +const TInt KCenRepBufferSize = 255; +const TText KStrComma = ','; +const TUint32 KMenuHideApplication = 0x00000008; + +// Ovi Store launcher UID +const TInt KUidOviStoreLauncher = 0x0; +// Ovi Store widget UID +const TInt KUidOviStoreWidget = 0x0; +// Ovi Store downloader UID +const TInt KUidOviStoreDownloader = 0x0; +// Ovi Store ASServer UID +const TInt KUidOviStoreASServer = 0x0; + +// ----------------------------------------------------------------------------- +// Check if Ovi Store client is running +// @return ETrue, if the process is running +// ----------------------------------------------------------------------------- +// +TBool CUtils::OviStoreRunning() + { + TBool running = EFalse; + RArray uids( 4 ); + uids.Append(KUidOviStoreLauncher); + uids.Append(KUidOviStoreWidget); + uids.Append(KUidOviStoreDownloader); + uids.Append(KUidOviStoreASServer); + if ( CUtils::AreProcessesRunning(uids) != KErrNotFound ) + { + running = ETrue; + } + uids.Close(); + return running; + } + +// ----------------------------------------------------------------------------- +// Checks if the process with given UID is running. +// @param aUid UID of the process +// @return ETrue, if the process is running +// ----------------------------------------------------------------------------- +// +TBool CUtils::IsProcessRunning(const TInt aUid) + { + RArray uids; + uids.Append(aUid); + const TBool ret = (AreProcessesRunning(uids) != KErrNotFound); + uids.Close(); + return ret; + } + +// ----------------------------------------------------------------------------- +// @param aUid UID of the process +// @return The index of the first matching UIDwithin the array. +// KErrNotFound, if no matching entry can be found. +// ----------------------------------------------------------------------------- +// +TInt CUtils::AreProcessesRunning(const RArray& aUids) + { + TInt ret = KErrNotFound; + TFileName res; + TFindProcess find; + //RDebug::Print(_L("Searching. 0x%08x"), &aUids) + + while (find.Next(res) == KErrNone) + { + RProcess ph; + ph.Open(res); + const TInt sid = ph.SecureId(); + //RDebug::Print(_L("Scanning process: '%S' (0x%08x)"), &res, sid); + + if ( (ret = aUids.Find(sid)) != KErrNotFound ) + { + //RDebug::Print(_L(" Found process: '%S' %d (0x%08x)"), &res, ret, aUids[ret]); + ph.Close(); + break; + } + ret = KErrNotFound; +/* + if (ph.SecureId() == aUid) + { + RDebug::Print(_L(" Found process: '%S'"), &res); + ph.Close(); + ret = ETrue; + break; + } +*/ + ph.Close(); + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// HideApplicationFromMenu() - Non-leaving version +// +// @param aUid UID of the application to hide/reveal from the menu +// @param aHidden Flag to indicate the application visibility. ETrue = Hide +// ----------------------------------------------------------------------------- +// +TInt CUtils::HideApplicationFromMenu(TInt aUid, TBool aHidden) + { + TRAPD( ret, HideApplicationFromMenuL(aUid, aHidden) ); + return ret; + } + +// ----------------------------------------------------------------------------- +// HideApplicationFromMenuL() +// +// @param aUid UID of the application to hide/reveal from the menu +// @param aHidden Flag to indicate the application visibility. ETrue = Hide +// ----------------------------------------------------------------------------- +// +void CUtils::HideApplicationFromMenuL(TInt aUid, TBool aHidden) + { + const TUid KCRUidMenu = { 0x0 }; + + TBuf keyContent; + TBool updated( EFalse ); + + CRepository* aAppShellRepository = CRepository::NewLC( KCRUidMenu ); + User::LeaveIfError(aAppShellRepository->Get( KMenuHideApplication, keyContent )); + + TBuf<8> MenuUid; + UIDText( MenuUid, aUid); + TInt offset = keyContent.FindC( MenuUid ); + if ( offset == KErrNotFound && aHidden ) + { + __ASSERT_ALWAYS( keyContent.Length() + 9 < KCenRepBufferSize, + User::Leave( KErrOverflow ) ); + if ( keyContent.Length() > 0 ) + keyContent.Append( KStrComma ); + keyContent.Append( MenuUid ); + updated = ETrue; + } + else if ( offset != KErrNotFound && !aHidden ) + { + if ( offset == 0 ) + { + keyContent.Delete( 0, Min( 9, keyContent.Length() ) ); + updated = ETrue; + } + else if ( keyContent[offset - 1] == KStrComma ) + { + keyContent.Delete( offset - 1, 9 ); + updated = ETrue; + } + else + User::Leave( KErrCorrupt ); + } + if ( updated ) + User::LeaveIfError(aAppShellRepository->Set( KMenuHideApplication, keyContent )); + + CleanupStack::PopAndDestroy(); // aAppShellRepository + } + +// ----------------------------------------------------------------------------- +// UIDText - Converts UID specified by aInt to string representation +// +// @param aUid Descriptor containing the string +// @param aInt Int representing the UID +// ----------------------------------------------------------------------------- +// +void CUtils::UIDText(TDes& aUid, TInt aInt) + { + TUidName uidName( TUid::Uid( aInt ).Name() ); + aUid.Copy( uidName.Mid( 1, KMaxUidName - 2 ) ); + aUid.UpperCase(); + }