applicationmanagement/server/src/AMAppHideUtil.cpp
changeset 0 3ce708148e4d
child 57 6757f1e2efd2
equal deleted inserted replaced
-1:000000000000 0:3ce708148e4d
       
     1 /*
       
     2  * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description: Implementation of applicationmanagement components
       
    15  *
       
    16  */
       
    17 
       
    18 #include "AMAppHideUtil.h"
       
    19 
       
    20 #include <centralrepository.h>
       
    21 #include <menu2internalcrkeys.h>
       
    22 
       
    23 #include "debug.h"
       
    24 
       
    25 using namespace NApplicationManagement;
       
    26 
       
    27 // The uid list delimiter
       
    28 static const TChar KUidDelimiter = ',';
       
    29 
       
    30 // -----------------------------------------------------------------------------
       
    31 // CAMAppHideUtil::CAMAppHideUtil()
       
    32 // -----------------------------------------------------------------------------
       
    33 CAMAppHideUtil::CAMAppHideUtil() :
       
    34     iChanged(EFalse)
       
    35     {
       
    36 
       
    37     }
       
    38 
       
    39 // -----------------------------------------------------------------------------
       
    40 // CAMAppHideUtil::ConstructL()
       
    41 // -----------------------------------------------------------------------------
       
    42 void CAMAppHideUtil::ConstructL()
       
    43     {
       
    44     LoadUidsL();
       
    45     }
       
    46 
       
    47 // -----------------------------------------------------------------------------
       
    48 // CAMAppHideUtil::~CAMAppHideUtil()
       
    49 // -----------------------------------------------------------------------------
       
    50 CAMAppHideUtil::~CAMAppHideUtil()
       
    51     {
       
    52     iHiddenUids.Close();
       
    53     }
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // CAMAppHideUtil::NewL()
       
    57 // -----------------------------------------------------------------------------
       
    58 CAMAppHideUtil* CAMAppHideUtil::NewL()
       
    59     {
       
    60     CAMAppHideUtil *me = new ( ELeave ) CAMAppHideUtil();
       
    61     CleanupStack::PushL(me);
       
    62     me->ConstructL();
       
    63     CleanupStack::Pop(me);
       
    64     return me;
       
    65     }
       
    66 
       
    67 // -----------------------------------------------------------------------------
       
    68 // CAMAppHideUtil::AddUidL(const TUid& aUid )
       
    69 // -----------------------------------------------------------------------------
       
    70 void CAMAppHideUtil::AddUidL(const TUid& aUid, TBool aPersist /*= EFalse */)
       
    71     {
       
    72     TInt idx(iHiddenUids.Find(aUid));
       
    73     if (idx == KErrNotFound)
       
    74         {
       
    75         TInt err(iHiddenUids.Append(aUid) );
       
    76         if (err == KErrNone)
       
    77             {
       
    78             iChanged = ETrue;
       
    79             if (aPersist)
       
    80                 {
       
    81                 PersistUidsL();
       
    82                 }
       
    83             }
       
    84         else
       
    85             {
       
    86             RDEBUG_2( "Failed to append uid to hidden list: %d", err );
       
    87             }
       
    88         }
       
    89     }
       
    90 
       
    91 // -----------------------------------------------------------------------------
       
    92 // CAMAppHideUtil::RemoveUidL( const TUid& aUid )
       
    93 // -----------------------------------------------------------------------------
       
    94 void CAMAppHideUtil::RemoveUidL(const TUid& aUid, TBool aPersist /*= EFalse */)
       
    95     {
       
    96     TInt idx(iHiddenUids.Find(aUid));
       
    97     if (idx != KErrNotFound)
       
    98         {
       
    99         iHiddenUids.Remove(idx);
       
   100         iChanged = ETrue;
       
   101         if (aPersist)
       
   102             {
       
   103             PersistUidsL();
       
   104             }
       
   105         }
       
   106     }
       
   107 
       
   108 // -----------------------------------------------------------------------------
       
   109 // CAMAppHideUtil::PersistUid( const TUid &aUid, TDes &aBuf, TBool aHasMore )
       
   110 // -----------------------------------------------------------------------------
       
   111 void CAMAppHideUtil::PersistUid(const TUid &aUid, TDes &aBuf, TBool aHasMore) const
       
   112     {
       
   113     aBuf.AppendNumFixedWidth(aUid.iUid, EHex, 8);
       
   114     if (aHasMore)
       
   115         {
       
   116         aBuf.Append(KUidDelimiter);
       
   117         }
       
   118     }
       
   119 
       
   120 // -----------------------------------------------------------------------------
       
   121 // CAMAppHideUtil::PersistUidsL()
       
   122 // -----------------------------------------------------------------------------
       
   123 void CAMAppHideUtil::PersistUidsL()
       
   124     {
       
   125     if (iChanged)
       
   126         {
       
   127         TBuf<NCentralRepositoryConstants::KMaxUnicodeStringLength> buf;
       
   128         RDEBUG_2( "PersistUids: count %d", iHiddenUids.Count() );
       
   129         for (TInt i(iHiddenUids.Count() - 1); i >= 0; --i)
       
   130             {
       
   131             RDEBUG_3( "PersistUids: cur %d %x", i,iHiddenUids[i].iUid );
       
   132             PersistUid(iHiddenUids[i], buf, i > 0) ;
       
   133             }
       
   134         CRepository *rep = CRepository::NewLC(KCRUidMenu);
       
   135         TInt err(rep->Set(KMenuHideApplication, buf) );
       
   136         CleanupStack::PopAndDestroy(rep);
       
   137         if (err != KErrNone)
       
   138             {
       
   139             RDEBUG_2( "PersistUids: ERROR failed to set key: %d", err );
       
   140             User::Leave(err);
       
   141             }
       
   142         RDEBUG_2( "CAMAppHideUtil::PersistUidsL - Saved '%S'", &buf);
       
   143         iChanged = EFalse;
       
   144         }
       
   145     }
       
   146 
       
   147 // -----------------------------------------------------------------------------
       
   148 // CAMAppHideUtil::ParseUid( TLex &, TUid &aUid ) 
       
   149 // -----------------------------------------------------------------------------
       
   150 TInt CAMAppHideUtil::ParseUid(TLex &aLex, TUid &aUid) const
       
   151     {
       
   152     aUid = TUid::Null();
       
   153     aLex.Mark();
       
   154     while (aLex.Peek().IsHexDigit() )
       
   155         {
       
   156         aLex.Inc();
       
   157         }
       
   158     TPtrC uidToken = aLex.MarkedToken();
       
   159     TLex uidLex(uidToken);
       
   160     TInt err(uidLex.Val( (TUint32& )aUid.iUid, EHex) );
       
   161     return err;
       
   162     }
       
   163 
       
   164 // ------------------------------------------------------------------------------
       
   165 // CAMAppHideUtil::SkipDelim( TLex & )
       
   166 // -----------------------------------------------------------------------------
       
   167 TBool CAMAppHideUtil::SkipDelim(TLex &aLex) const
       
   168     {
       
   169     TBool ret(EFalse);
       
   170     if (aLex.Peek() == KUidDelimiter)
       
   171         {
       
   172         aLex.Inc();
       
   173         ret = ETrue;
       
   174         }
       
   175     return (ret );
       
   176     }
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // CAMAppHideUtil::LoadUidsL()
       
   180 // -----------------------------------------------------------------------------
       
   181 void CAMAppHideUtil::LoadUidsL()
       
   182     {
       
   183     CRepository *rep = CRepository::NewLC(KCRUidMenu);
       
   184     TBuf<NCentralRepositoryConstants::KMaxUnicodeStringLength> buf;
       
   185     TInt err(rep->Get(KMenuHideApplication, buf) );
       
   186     CleanupStack::PopAndDestroy(rep);
       
   187     if (err == KErrNone)
       
   188         {
       
   189         RDEBUG_2( "CAMAppHideUtil::LoadUidsL - Loading '%S'", &buf);
       
   190         TLex lex(buf);
       
   191         TUid aUid(TUid::Null());
       
   192         do
       
   193             {
       
   194             err = ParseUid(lex, aUid) ;
       
   195             }
       
   196         while (err == KErrNone && iHiddenUids.Append(aUid) == KErrNone
       
   197                 && !lex.Eos() && SkipDelim(lex) );
       
   198         }
       
   199     RDEBUG_2( "CAMAppHideUtil::LoadUidsL-Loaded (last parsing status: %d)", err);
       
   200     }
       
   201 
       
   202 // -----------------------------------------------------------------------------
       
   203 // CAMAppHideUtil::Reset()
       
   204 // -----------------------------------------------------------------------------
       
   205 void CAMAppHideUtil::Reset()
       
   206     {
       
   207     if (iHiddenUids.Count() > 0)
       
   208         {
       
   209         iChanged = ETrue;
       
   210         }
       
   211     iHiddenUids.Reset();
       
   212     }
       
   213 
       
   214 // End of File