--- /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();
+ }