smartinstaller/common/utils.cpp
branchADM
changeset 48 364021cecc90
--- /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 <e32std.h>
+#include <e32debug.h>
+#include <centralrepository.h>
+#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<TInt> 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<TInt> 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<TInt>& 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<KCenRepBufferSize> 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();
+	}