applicationmanagement/server/src/AMAppHideUtil.cpp
changeset 0 3ce708148e4d
child 57 6757f1e2efd2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applicationmanagement/server/src/AMAppHideUtil.cpp	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 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: Implementation of applicationmanagement components
+ *
+ */
+
+#include "AMAppHideUtil.h"
+
+#include <centralrepository.h>
+#include <menu2internalcrkeys.h>
+
+#include "debug.h"
+
+using namespace NApplicationManagement;
+
+// The uid list delimiter
+static const TChar KUidDelimiter = ',';
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::CAMAppHideUtil()
+// -----------------------------------------------------------------------------
+CAMAppHideUtil::CAMAppHideUtil() :
+    iChanged(EFalse)
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::ConstructL()
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::ConstructL()
+    {
+    LoadUidsL();
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::~CAMAppHideUtil()
+// -----------------------------------------------------------------------------
+CAMAppHideUtil::~CAMAppHideUtil()
+    {
+    iHiddenUids.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::NewL()
+// -----------------------------------------------------------------------------
+CAMAppHideUtil* CAMAppHideUtil::NewL()
+    {
+    CAMAppHideUtil *me = new ( ELeave ) CAMAppHideUtil();
+    CleanupStack::PushL(me);
+    me->ConstructL();
+    CleanupStack::Pop(me);
+    return me;
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::AddUidL(const TUid& aUid )
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::AddUidL(const TUid& aUid, TBool aPersist /*= EFalse */)
+    {
+    TInt idx(iHiddenUids.Find(aUid));
+    if (idx == KErrNotFound)
+        {
+        TInt err(iHiddenUids.Append(aUid) );
+        if (err == KErrNone)
+            {
+            iChanged = ETrue;
+            if (aPersist)
+                {
+                PersistUidsL();
+                }
+            }
+        else
+            {
+            RDEBUG_2( "Failed to append uid to hidden list: %d", err );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::RemoveUidL( const TUid& aUid )
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::RemoveUidL(const TUid& aUid, TBool aPersist /*= EFalse */)
+    {
+    TInt idx(iHiddenUids.Find(aUid));
+    if (idx != KErrNotFound)
+        {
+        iHiddenUids.Remove(idx);
+        iChanged = ETrue;
+        if (aPersist)
+            {
+            PersistUidsL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::PersistUid( const TUid &aUid, TDes &aBuf, TBool aHasMore )
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::PersistUid(const TUid &aUid, TDes &aBuf, TBool aHasMore) const
+    {
+    aBuf.AppendNumFixedWidth(aUid.iUid, EHex, 8);
+    if (aHasMore)
+        {
+        aBuf.Append(KUidDelimiter);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::PersistUidsL()
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::PersistUidsL()
+    {
+    if (iChanged)
+        {
+        TBuf<NCentralRepositoryConstants::KMaxUnicodeStringLength> buf;
+        RDEBUG_2( "PersistUids: count %d", iHiddenUids.Count() );
+        for (TInt i(iHiddenUids.Count() - 1); i >= 0; --i)
+            {
+            RDEBUG_3( "PersistUids: cur %d %x", i,iHiddenUids[i].iUid );
+            PersistUid(iHiddenUids[i], buf, i > 0) ;
+            }
+        CRepository *rep = CRepository::NewLC(KCRUidMenu);
+        TInt err(rep->Set(KMenuHideApplication, buf) );
+        CleanupStack::PopAndDestroy(rep);
+        if (err != KErrNone)
+            {
+            RDEBUG_2( "PersistUids: ERROR failed to set key: %d", err );
+            User::Leave(err);
+            }
+        RDEBUG_2( "CAMAppHideUtil::PersistUidsL - Saved '%S'", &buf);
+        iChanged = EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::ParseUid( TLex &, TUid &aUid ) 
+// -----------------------------------------------------------------------------
+TInt CAMAppHideUtil::ParseUid(TLex &aLex, TUid &aUid) const
+    {
+    aUid = TUid::Null();
+    aLex.Mark();
+    while (aLex.Peek().IsHexDigit() )
+        {
+        aLex.Inc();
+        }
+    TPtrC uidToken = aLex.MarkedToken();
+    TLex uidLex(uidToken);
+    TInt err(uidLex.Val( (TUint32& )aUid.iUid, EHex) );
+    return err;
+    }
+
+// ------------------------------------------------------------------------------
+// CAMAppHideUtil::SkipDelim( TLex & )
+// -----------------------------------------------------------------------------
+TBool CAMAppHideUtil::SkipDelim(TLex &aLex) const
+    {
+    TBool ret(EFalse);
+    if (aLex.Peek() == KUidDelimiter)
+        {
+        aLex.Inc();
+        ret = ETrue;
+        }
+    return (ret );
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::LoadUidsL()
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::LoadUidsL()
+    {
+    CRepository *rep = CRepository::NewLC(KCRUidMenu);
+    TBuf<NCentralRepositoryConstants::KMaxUnicodeStringLength> buf;
+    TInt err(rep->Get(KMenuHideApplication, buf) );
+    CleanupStack::PopAndDestroy(rep);
+    if (err == KErrNone)
+        {
+        RDEBUG_2( "CAMAppHideUtil::LoadUidsL - Loading '%S'", &buf);
+        TLex lex(buf);
+        TUid aUid(TUid::Null());
+        do
+            {
+            err = ParseUid(lex, aUid) ;
+            }
+        while (err == KErrNone && iHiddenUids.Append(aUid) == KErrNone
+                && !lex.Eos() && SkipDelim(lex) );
+        }
+    RDEBUG_2( "CAMAppHideUtil::LoadUidsL-Loaded (last parsing status: %d)", err);
+    }
+
+// -----------------------------------------------------------------------------
+// CAMAppHideUtil::Reset()
+// -----------------------------------------------------------------------------
+void CAMAppHideUtil::Reset()
+    {
+    if (iHiddenUids.Count() > 0)
+        {
+        iChanged = ETrue;
+        }
+    iHiddenUids.Reset();
+    }
+
+// End of File