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