contentstorage/casrv/caappscanner/src/casrvappscanner.cpp
author hgs
Tue, 23 Mar 2010 23:42:03 +0200
changeset 87 9d806967057c
parent 85 7feec50967db
child 89 1e87eb3b400f
permissions -rw-r--r--
201007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
* All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
*
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
*
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
* Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
*
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
* Description: casrvappscanner.cpp
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
*
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
*/
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
#include <e32property.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include <bautils.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    20
#include <swi/sisregistrysession.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include <swi/sisregistryentry.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include <swi/sisregistrypackage.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "cadef.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
#include "casrvappscanner.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
#include "cautils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
#include "casrvmmchistory.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
#include "pathinfo.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
#include "casrvengutils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
#include "cainnerquery.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
#include "caarraycleanup.inl"
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
#include "castorageproxy.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
// ==================== LOCAL FUNCTIONS ====================
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
/**
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
 * Identity function to search in an array of CCaInnerEntry.
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
 * Identity is the ID.
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
 * @param aLeft Search term.
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
 * @param aRight Array item.
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
 * @return ETrue if ID-s match.
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
LOCAL_C TBool IdMatch( const CCaInnerEntry& aLeft,
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
        const CCaInnerEntry& aRight )
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
    return aLeft.GetId() == aRight.GetId();
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
/**
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
 * Identity function to search in an array of CCaInnerEntry.
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
 * Identity is the ID.
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
 * @param aLeft Search term.
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
 * @param aRight Array item.
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
 * @return ETrue if ID-s match.
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
LOCAL_C TBool UidMatch( const CCaInnerEntry& aLeft,
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
        const CCaInnerEntry& aRight )
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
    return aLeft.GetUid() == aRight.GetUid();
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
// ==================== MEMBER FUNCTIONS ====================
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
// CCaSrvAppScanner::NewL
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
CCaSrvAppScanner* CCaSrvAppScanner::NewL( CCaStorageProxy& aCaStorageProxy,
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
        CCaSrvEngUtils& aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
    CCaSrvAppScanner* scanner = new ( ELeave ) CCaSrvAppScanner(
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
            aCaStorageProxy, aUtils );
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
    CleanupStack::PushL( scanner );
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
    scanner->ConstructL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
    CleanupStack::Pop( scanner );
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
    return scanner;
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
// CCaSrvAppScanner::~CCaSrvAppScanner
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
CCaSrvAppScanner::~CCaSrvAppScanner()
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
    Cancel();
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
    iApaLsSession.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
    iInstalledPackages.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
    delete iInstallNotifier;
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
    delete iNotifier;
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
    delete iMmcHistory;
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
    iFs.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
// CCaSrvAppScanner::CCaSrvAppScanner
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
CCaSrvAppScanner::CCaSrvAppScanner( CCaStorageProxy& aCaStorageProxy,
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
        CCaSrvEngUtils& aUtils ) :
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
    CActive( CActive::EPriorityStandard ),
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
    iCaStorageProxy( aCaStorageProxy ), iSrvEngUtils( aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
    CActiveScheduler::Add( this );
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
// CCaSrvAppScanner::ConstructL
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
void CCaSrvAppScanner::ConstructL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
    User::LeaveIfError( iFs.Connect() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
    TFileName path;
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
    User::LeaveIfError( iFs.PrivatePath( path ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
    TUint attribute;
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
    if( iFs.Att( path, attribute) == KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
        TInt mdRes = iFs.MkDirAll( path );
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
        if ( mdRes != KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
            User::Leave( mdRes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
    iMmcHistory = new (ELeave) CCaSrvMmcHistory();
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
    iMmcHistory->LoadL( iFs, KCaMmcHistoryFname() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
    // The notifier has its own session to apparc, instead of taking
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
    // it as argument... :(
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
    iNotifier = CApaAppListNotifier::NewL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
            this, CActive::EPriorityStandard );
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
    iInstallNotifier = CCaInstallNotifier::NewL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
            *this, CCaInstallNotifier::ESisInstallNotification );
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
    User::LeaveIfError( iApaLsSession.Connect() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
    User::LeaveIfError( iApaLsSession.GetAllApps() ); // This is async.
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
    iApaLsSession.RegisterListPopulationCompleteObserver( iStatus );
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
    iCollectionDownloadId = 0;
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
    SetActive();
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
// CCaSrvAppScanner::RunL
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
void CCaSrvAppScanner::RunL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
    User::LeaveIfError( iStatus.Int() ); // Handle errors in RunL.
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
    // AppArc app scan complete, we have the app list.
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
    UpdateApplicationEntriesL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
    InstallationNotifyL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
// CCaSrvAppScanner::DoCancel
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
void CCaSrvAppScanner::DoCancel()
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
    iApaLsSession.CancelListPopulationCompleteObserver();
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
// CCaSrvAppScanner::RunError
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
TInt CCaSrvAppScanner::RunError( TInt /*aError*/)
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
    // Ignore the error (what else could we do?).
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
    // When next AppArc update occurs, we will run again.
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
    return KErrNone;
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   174
// CCaSrvAppScanner::UpdateApplicationItemL
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   176
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
void CCaSrvAppScanner::UpdateApplicationEntryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
        RPointerArray<CCaInnerEntry>& aCaEntries,
7feec50967db 201003_02
hgs
parents:
diff changeset
   179
        const TCaAppAtributes& aApaItem, TUint aMmcId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
    TInt appuid = aApaItem.GetUid();
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
    RPointerArray<CCaInnerEntry> resultArray;
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
    CleanupResetAndDestroyPushL( resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
    GetCaAppEntriesL( appuid, resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
    // This app is not in the storage, add it now.
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
    // We don't add hidden items, there are too many of them!
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
    // do not display Menu app
87
hgs
parents: 85
diff changeset
   189
    if( !resultArray.Count() )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   191
        AddAppEntryL( appuid, aMmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   192
        }//if
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
87
hgs
parents: 85
diff changeset
   194
    // "removable", "missing" and "visible"  flags update
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
    for( TInt j = 0; j < resultArray.Count(); j++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   197
        //we need to handle first run of appscanner,
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
        //there might be some incorrect data in content xml file
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
        //if this will have impact on performance we may run this methods only at start up
7feec50967db 201003_02
hgs
parents:
diff changeset
   200
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
        UpdateAppEntryL( resultArray[j], aMmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   202
        TInt index = aCaEntries.Find( resultArray[j],
7feec50967db 201003_02
hgs
parents:
diff changeset
   203
                TIdentityRelation<CCaInnerEntry>( IdMatch ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   204
        if( index != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   205
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   206
            delete aCaEntries[index];
7feec50967db 201003_02
hgs
parents:
diff changeset
   207
            aCaEntries.Remove( index );
7feec50967db 201003_02
hgs
parents:
diff changeset
   208
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   209
        }//for
7feec50967db 201003_02
hgs
parents:
diff changeset
   210
    CleanupStack::PopAndDestroy( &resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   211
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   212
7feec50967db 201003_02
hgs
parents:
diff changeset
   213
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   214
// CCaSrvAppScanner::UpdateAppEntryL
7feec50967db 201003_02
hgs
parents:
diff changeset
   215
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   216
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   217
void CCaSrvAppScanner::UpdateAppEntryL( CCaInnerEntry* aEntry, TUint aMmcId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   218
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   219
    TBool toUpdate = HandleMmcAttrUpdateL( aEntry, aMmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   220
    toUpdate = HandleHiddenFlagUpdateL( aEntry ) || toUpdate;
7feec50967db 201003_02
hgs
parents:
diff changeset
   221
    toUpdate = HandleMissingFlagUpdate( aEntry ) || toUpdate;
7feec50967db 201003_02
hgs
parents:
diff changeset
   222
    toUpdate = HandleLockDeleteFlagUpdateL( aEntry ) || toUpdate;
7feec50967db 201003_02
hgs
parents:
diff changeset
   223
    toUpdate = SetApaAppInfoL( aEntry ) || toUpdate;
7feec50967db 201003_02
hgs
parents:
diff changeset
   224
       
7feec50967db 201003_02
hgs
parents:
diff changeset
   225
    if( iInstalledPackages.Find( aEntry->GetUid() ) != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   226
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   227
        AddEntryToDownloadedCollectionL( aEntry->GetId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   228
        toUpdate = HandleUsedFlagUpdateL( aEntry ) || toUpdate;
7feec50967db 201003_02
hgs
parents:
diff changeset
   229
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   230
    if( toUpdate )
7feec50967db 201003_02
hgs
parents:
diff changeset
   231
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   232
        //update app in storage
7feec50967db 201003_02
hgs
parents:
diff changeset
   233
        iCaStorageProxy.AddL( aEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   234
        RemoveFromInstalledPackages( aEntry->GetUid() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   235
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   236
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   237
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   238
// CCaSrvAppScanner::HandleHiddenFlagUpdateL
7feec50967db 201003_02
hgs
parents:
diff changeset
   239
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   240
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   241
TBool CCaSrvAppScanner::HandleHiddenFlagUpdateL( CCaInnerEntry* aItem )
7feec50967db 201003_02
hgs
parents:
diff changeset
   242
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   243
    TBool toChange( EFalse );
7feec50967db 201003_02
hgs
parents:
diff changeset
   244
    TBool itemHidden = ( 0 == ( aItem->GetFlags() & EVisible ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   245
    if( itemHidden )
7feec50967db 201003_02
hgs
parents:
diff changeset
   246
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   247
        aItem->SetFlags( aItem->GetFlags() | EVisible );
7feec50967db 201003_02
hgs
parents:
diff changeset
   248
        toChange = ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   249
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   250
    return toChange;
7feec50967db 201003_02
hgs
parents:
diff changeset
   251
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   252
7feec50967db 201003_02
hgs
parents:
diff changeset
   253
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   254
// CCaSrvAppScanner::HandleUsedFlagUpdateL
7feec50967db 201003_02
hgs
parents:
diff changeset
   255
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   256
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   257
TBool CCaSrvAppScanner::HandleUsedFlagUpdateL( CCaInnerEntry* aItem )
7feec50967db 201003_02
hgs
parents:
diff changeset
   258
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   259
    if( aItem->GetFlags() & EUsed )
7feec50967db 201003_02
hgs
parents:
diff changeset
   260
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   261
        aItem->SetFlags( aItem->GetFlags() & ~EUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
   262
        return ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   263
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   264
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   265
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   266
        return EFalse;
7feec50967db 201003_02
hgs
parents:
diff changeset
   267
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   268
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   269
7feec50967db 201003_02
hgs
parents:
diff changeset
   270
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   271
// CCaSrvAppScanner::HandleMmcAttrUpdateL
7feec50967db 201003_02
hgs
parents:
diff changeset
   272
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   273
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   274
TBool CCaSrvAppScanner::HandleMmcAttrUpdateL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   275
        CCaInnerEntry* aItem, TUint aMmcId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   276
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   277
    TBool toUpdate( ETrue );
7feec50967db 201003_02
hgs
parents:
diff changeset
   278
    if( IsInMmc( TUid::Uid( aItem->GetUid() ) ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   279
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   280
        //app is instaled on mmc - KCaAttrMmcId attribute update
7feec50967db 201003_02
hgs
parents:
diff changeset
   281
        TBuf<KUidChars> uidString;
7feec50967db 201003_02
hgs
parents:
diff changeset
   282
        uidString.Format( KHexFormat, aMmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   283
        aItem->AddAttributeL( KCaAttrMmcId, uidString );
7feec50967db 201003_02
hgs
parents:
diff changeset
   284
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   285
    else if ( IsInMassStorage( TUid::Uid( aItem->GetUid() ) ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   286
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   287
        //its app installed on mass storage, we need to leave it
7feec50967db 201003_02
hgs
parents:
diff changeset
   288
        //in case of connecting usb in mass storage mode
7feec50967db 201003_02
hgs
parents:
diff changeset
   289
        aItem->AddAttributeL( KCaAttrMmcId, KCaMassStorage );
7feec50967db 201003_02
hgs
parents:
diff changeset
   290
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   291
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   292
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   293
        RBuf attrVal;
7feec50967db 201003_02
hgs
parents:
diff changeset
   294
        attrVal.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   295
        attrVal.CreateL( KCaMaxAttrValueLen );
7feec50967db 201003_02
hgs
parents:
diff changeset
   296
        if( aItem->FindAttribute( KCaAttrMmcId, attrVal ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   297
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   298
            aItem->RemoveAttributeL( KCaAttrMmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   299
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   300
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   301
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   302
            toUpdate = EFalse;
7feec50967db 201003_02
hgs
parents:
diff changeset
   303
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   304
        CleanupStack::PopAndDestroy( &attrVal );
7feec50967db 201003_02
hgs
parents:
diff changeset
   305
        //its installed on c: drive - remove attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   306
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   307
    return toUpdate;
7feec50967db 201003_02
hgs
parents:
diff changeset
   308
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   309
7feec50967db 201003_02
hgs
parents:
diff changeset
   310
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   311
// CCaSrvAppScanner::UpdateApplicationItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   312
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   313
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   314
void CCaSrvAppScanner::InstallationNotifyL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   315
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   316
    for( TInt i = iInstalledPackages.Count() - 1; i >= 0; i-- )
7feec50967db 201003_02
hgs
parents:
diff changeset
   317
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   318
        NotifyL( iInstalledPackages[i] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   319
        iInstalledPackages.Remove( i );
7feec50967db 201003_02
hgs
parents:
diff changeset
   320
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   321
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   322
7feec50967db 201003_02
hgs
parents:
diff changeset
   323
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   324
// CCaSrvAppScanner::UpdateApplicationItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   325
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   326
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   327
void CCaSrvAppScanner::UpdateApplicationEntriesL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   328
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   329
    TUint currentMmcId = UpdateMmcHistoryL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   330
    // get all Content arsenal enties with type application
7feec50967db 201003_02
hgs
parents:
diff changeset
   331
    RPointerArray<CCaInnerEntry> resultArray;
7feec50967db 201003_02
hgs
parents:
diff changeset
   332
    CleanupResetAndDestroyPushL( resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   333
    GetCaAppEntriesL( resultArray );
87
hgs
parents: 85
diff changeset
   334
    HandleHsAppEntryL( resultArray );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   335
    RemoveSatAppL( resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   336
7feec50967db 201003_02
hgs
parents:
diff changeset
   337
    RArray<TCaAppAtributes> apaItems;
7feec50967db 201003_02
hgs
parents:
diff changeset
   338
    CleanupClosePushL( apaItems );
7feec50967db 201003_02
hgs
parents:
diff changeset
   339
    GetApaItemsL( apaItems );
87
hgs
parents: 85
diff changeset
   340
    RemoveApp( apaItems, KSatUid.iUid );
hgs
parents: 85
diff changeset
   341
    RemoveApp( apaItems, KHsAppUid.iUid );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   342
7feec50967db 201003_02
hgs
parents:
diff changeset
   343
    //for every item in apaAndCrItems array
7feec50967db 201003_02
hgs
parents:
diff changeset
   344
    for( TInt i = 0; i < apaItems.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   345
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   346
            // if there was leave for any item we ignore it
7feec50967db 201003_02
hgs
parents:
diff changeset
   347
            // and proceed to the next one
7feec50967db 201003_02
hgs
parents:
diff changeset
   348
            TRAP_IGNORE(UpdateApplicationEntryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   349
                            resultArray, apaItems[i], currentMmcId));
7feec50967db 201003_02
hgs
parents:
diff changeset
   350
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   351
    // Here the big list cwith items that refer to missing apps.
7feec50967db 201003_02
hgs
parents:
diff changeset
   352
    HandleMissingItemsL( resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   353
    CleanupStack::PopAndDestroy( &apaItems );
7feec50967db 201003_02
hgs
parents:
diff changeset
   354
    CleanupStack::PopAndDestroy( &resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   355
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   356
7feec50967db 201003_02
hgs
parents:
diff changeset
   357
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   358
// CCaSrvAppScanner::HandleLockDeleteFlagUpdateL
7feec50967db 201003_02
hgs
parents:
diff changeset
   359
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   360
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   361
TBool CCaSrvAppScanner::HandleLockDeleteFlagUpdateL( CCaInnerEntry* aItem )
7feec50967db 201003_02
hgs
parents:
diff changeset
   362
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   363
    TBool toChange( EFalse );
7feec50967db 201003_02
hgs
parents:
diff changeset
   364
    TBool isVisible = ( ( aItem->GetFlags() & EVisible ) != 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   365
    if( isVisible && IsInRom( aItem->GetUid() ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   366
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   367
        if( ( aItem->GetFlags() & ERemovable ) != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   368
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   369
            aItem->SetFlags( aItem->GetFlags() & ~ERemovable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   370
            toChange = ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   371
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   372
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   373
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   374
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   375
        if( ( aItem->GetFlags() & ERemovable ) == 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   376
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   377
            aItem->SetFlags( aItem->GetFlags() | ERemovable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   378
            toChange = ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   379
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   380
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   381
    return toChange;
7feec50967db 201003_02
hgs
parents:
diff changeset
   382
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   383
7feec50967db 201003_02
hgs
parents:
diff changeset
   384
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   385
// CCaSrvAppScanner::HandleMissingFlagUpdateL
7feec50967db 201003_02
hgs
parents:
diff changeset
   386
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   387
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   388
TBool CCaSrvAppScanner::HandleMissingFlagUpdate( CCaInnerEntry* aItem )
7feec50967db 201003_02
hgs
parents:
diff changeset
   389
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   390
    if( aItem->GetFlags() & EMissing )
7feec50967db 201003_02
hgs
parents:
diff changeset
   391
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   392
        //application found so we unset "missing" flag
7feec50967db 201003_02
hgs
parents:
diff changeset
   393
        aItem->SetFlags( aItem->GetFlags() & ~EMissing );
7feec50967db 201003_02
hgs
parents:
diff changeset
   394
        return ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   395
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   396
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   397
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   398
        return EFalse;
7feec50967db 201003_02
hgs
parents:
diff changeset
   399
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   400
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   401
7feec50967db 201003_02
hgs
parents:
diff changeset
   402
// ---------------------------------------------------------
87
hgs
parents: 85
diff changeset
   403
// CCaSrvAppScanner::RemoveApp
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   404
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   405
//
87
hgs
parents: 85
diff changeset
   406
void CCaSrvAppScanner::RemoveApp( RArray<TCaAppAtributes>& aArray, TInt32 aUid )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   407
    {
87
hgs
parents: 85
diff changeset
   408
    TCaAppAtributes app( aUid );
hgs
parents: 85
diff changeset
   409
    TInt id = aArray.Find( app, TCaAppAtributes::MatchItems );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   410
    if( id != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   411
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   412
        aArray.Remove( id );
7feec50967db 201003_02
hgs
parents:
diff changeset
   413
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   414
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   415
7feec50967db 201003_02
hgs
parents:
diff changeset
   416
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   417
// CCaSrvAppScanner::RemoveSatApp
7feec50967db 201003_02
hgs
parents:
diff changeset
   418
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   419
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   420
void CCaSrvAppScanner::RemoveSatAppL( RPointerArray<CCaInnerEntry>& aArray )
7feec50967db 201003_02
hgs
parents:
diff changeset
   421
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   422
    CCaInnerEntry* sat = CCaInnerEntry::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   423
    sat->SetUid( KSatUid.iUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   424
    TInt index = aArray.Find(
7feec50967db 201003_02
hgs
parents:
diff changeset
   425
            sat, TIdentityRelation<CCaInnerEntry>( UidMatch ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   426
    if ( index != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   427
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   428
        delete aArray[index];
7feec50967db 201003_02
hgs
parents:
diff changeset
   429
        aArray.Remove( index );
7feec50967db 201003_02
hgs
parents:
diff changeset
   430
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   431
    delete sat;
7feec50967db 201003_02
hgs
parents:
diff changeset
   432
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   433
7feec50967db 201003_02
hgs
parents:
diff changeset
   434
// ---------------------------------------------------------
87
hgs
parents: 85
diff changeset
   435
// CCaSrvAppScanner::HandleHsAppEntryL
hgs
parents: 85
diff changeset
   436
// ---------------------------------------------------------
hgs
parents: 85
diff changeset
   437
//
hgs
parents: 85
diff changeset
   438
void CCaSrvAppScanner::HandleHsAppEntryL( RPointerArray<CCaInnerEntry>& aArray )
hgs
parents: 85
diff changeset
   439
    {
hgs
parents: 85
diff changeset
   440
    CCaInnerEntry* appEntry = CCaInnerEntry::NewLC();
hgs
parents: 85
diff changeset
   441
    appEntry->SetUid( KHsAppUid.iUid );
hgs
parents: 85
diff changeset
   442
    TInt index = aArray.Find(
hgs
parents: 85
diff changeset
   443
            appEntry, TIdentityRelation<CCaInnerEntry>( UidMatch ) );
hgs
parents: 85
diff changeset
   444
    
hgs
parents: 85
diff changeset
   445
    if ( index != KErrNotFound )
hgs
parents: 85
diff changeset
   446
        { // hs app already in storage - ensure it is hidden and remove from resultArray
hgs
parents: 85
diff changeset
   447
        if ( ( aArray[index]->GetFlags() & EVisible ) != 0 )
hgs
parents: 85
diff changeset
   448
            {
hgs
parents: 85
diff changeset
   449
            aArray[index]->SetFlags( aArray[index]->GetFlags() & ~EVisible);
hgs
parents: 85
diff changeset
   450
            iCaStorageProxy.AddL( aArray[index] );
hgs
parents: 85
diff changeset
   451
            }        
hgs
parents: 85
diff changeset
   452
        delete aArray[index];
hgs
parents: 85
diff changeset
   453
        aArray.Remove( index );        
hgs
parents: 85
diff changeset
   454
        }
hgs
parents: 85
diff changeset
   455
    else
hgs
parents: 85
diff changeset
   456
        { // if not found add as not visible to the storage
hgs
parents: 85
diff changeset
   457
        appEntry->SetEntryTypeNameL( KCaTypeApp );
hgs
parents: 85
diff changeset
   458
        appEntry->SetFlags( 0 ); 
hgs
parents: 85
diff changeset
   459
        appEntry->SetRole( EItemEntryRole );
hgs
parents: 85
diff changeset
   460
        SetApaAppInfoL( appEntry );
hgs
parents: 85
diff changeset
   461
        iCaStorageProxy.AddL( appEntry );
hgs
parents: 85
diff changeset
   462
        }
hgs
parents: 85
diff changeset
   463
    CleanupStack::PopAndDestroy( appEntry );
hgs
parents: 85
diff changeset
   464
    }
hgs
parents: 85
diff changeset
   465
hgs
parents: 85
diff changeset
   466
hgs
parents: 85
diff changeset
   467
// ---------------------------------------------------------
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   468
// CCaSrvAppScanner::GetApaItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   469
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   470
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   471
void CCaSrvAppScanner::GetApaItemsL( RArray<TCaAppAtributes>& aArray )
7feec50967db 201003_02
hgs
parents:
diff changeset
   472
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   473
    TApaAppInfo appInfo;
7feec50967db 201003_02
hgs
parents:
diff changeset
   474
    TApaAppCapabilityBuf appCap;
7feec50967db 201003_02
hgs
parents:
diff changeset
   475
7feec50967db 201003_02
hgs
parents:
diff changeset
   476
    User::LeaveIfError( iApaLsSession.GetAllApps( 0 ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   477
    // for every application get uid, hidden and missing attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   478
    // and add to aArray.
7feec50967db 201003_02
hgs
parents:
diff changeset
   479
    while( KErrNone == iApaLsSession.GetNextApp( appInfo ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   480
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   481
        User::LeaveIfError( iApaLsSession.GetAppCapability(
7feec50967db 201003_02
hgs
parents:
diff changeset
   482
                appCap, appInfo.iUid ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   483
        // "Hidden" status according to AppArc.
7feec50967db 201003_02
hgs
parents:
diff changeset
   484
        if( !appCap().iAppIsHidden )
7feec50967db 201003_02
hgs
parents:
diff changeset
   485
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   486
            TCaAppAtributes appAtributes( appInfo.iUid.iUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   487
            aArray.AppendL( appAtributes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   488
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   489
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   490
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   491
7feec50967db 201003_02
hgs
parents:
diff changeset
   492
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   493
// CCaSrvAppScanner::GetMcsItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   494
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   495
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   496
void CCaSrvAppScanner::GetCaAppEntriesL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   497
        RPointerArray<CCaInnerEntry>& aArray )
7feec50967db 201003_02
hgs
parents:
diff changeset
   498
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   499
    CCaInnerQuery* allAppQuery = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   500
    CDesC16ArrayFlat* appType = new ( ELeave ) CDesC16ArrayFlat( 1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   501
    CleanupStack::PushL( appType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   502
    appType->AppendL( KCaTypeApp );
7feec50967db 201003_02
hgs
parents:
diff changeset
   503
    allAppQuery->SetEntryTypeNames( appType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   504
    CleanupStack::Pop( appType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   505
    iCaStorageProxy.GetEntriesL( allAppQuery, aArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   506
    CleanupStack::PopAndDestroy( allAppQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   507
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   508
7feec50967db 201003_02
hgs
parents:
diff changeset
   509
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   510
// CCaSrvAppScanner::GetMcsItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   511
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   512
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   513
TInt CCaSrvAppScanner::GetCollectionDownloadIdL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   514
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   515
    if( iCollectionDownloadId == 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   516
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   517
        RPointerArray<CCaInnerEntry> resultArray;
7feec50967db 201003_02
hgs
parents:
diff changeset
   518
        CleanupResetAndDestroyPushL( resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   519
        CCaInnerQuery* allAppQuery = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   520
        CDesC16ArrayFlat* appType = new ( ELeave ) CDesC16ArrayFlat( 1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   521
        CleanupStack::PushL( appType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   522
        appType->AppendL( KCaTypeCollectionDownload );
7feec50967db 201003_02
hgs
parents:
diff changeset
   523
        allAppQuery->SetEntryTypeNames( appType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   524
        CleanupStack::Pop( appType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   525
        iCaStorageProxy.GetEntriesL( allAppQuery, resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   526
        CleanupStack::PopAndDestroy( allAppQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   527
        if( resultArray.Count() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   528
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   529
            iCollectionDownloadId = resultArray[0]->GetId();
7feec50967db 201003_02
hgs
parents:
diff changeset
   530
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   531
        CleanupStack::PopAndDestroy( &resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   532
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   533
    return iCollectionDownloadId;
7feec50967db 201003_02
hgs
parents:
diff changeset
   534
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   535
7feec50967db 201003_02
hgs
parents:
diff changeset
   536
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   537
// CCaSrvAppScanner::GetMcsItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   538
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   539
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   540
void CCaSrvAppScanner::GetCaAppEntriesL( TInt aUid,
7feec50967db 201003_02
hgs
parents:
diff changeset
   541
        RPointerArray<CCaInnerEntry>& aArray )
7feec50967db 201003_02
hgs
parents:
diff changeset
   542
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   543
    CCaInnerQuery* allAppQuery = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   544
    allAppQuery->SetUid( aUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   545
    iCaStorageProxy.GetEntriesL( allAppQuery, aArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   546
    CleanupStack::PopAndDestroy( allAppQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   547
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   548
7feec50967db 201003_02
hgs
parents:
diff changeset
   549
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   550
// CCaSrvAppScanner::HandleAppListEvent
7feec50967db 201003_02
hgs
parents:
diff changeset
   551
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   552
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   553
void CCaSrvAppScanner::HandleAppListEvent( TInt /*aEvent*/)
7feec50967db 201003_02
hgs
parents:
diff changeset
   554
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   555
    // We only have one event, EAppListChanged.
7feec50967db 201003_02
hgs
parents:
diff changeset
   556
    // Call back RunL async, to requeue and initiate rescan.
7feec50967db 201003_02
hgs
parents:
diff changeset
   557
    if( !IsActive() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   558
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   559
        ScheduleScan();
7feec50967db 201003_02
hgs
parents:
diff changeset
   560
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   561
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   562
7feec50967db 201003_02
hgs
parents:
diff changeset
   563
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   564
// CCaSrvAppScanner::HandleInstallNotifyL
7feec50967db 201003_02
hgs
parents:
diff changeset
   565
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   566
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   567
void CCaSrvAppScanner::HandleInstallNotifyL( TInt aUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   568
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   569
    NotifyL( aUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   570
    RArray<TUid> uids;
7feec50967db 201003_02
hgs
parents:
diff changeset
   571
    CleanupClosePushL( uids );
7feec50967db 201003_02
hgs
parents:
diff changeset
   572
7feec50967db 201003_02
hgs
parents:
diff changeset
   573
    Swi::RSisRegistrySession iSisRegSession;
7feec50967db 201003_02
hgs
parents:
diff changeset
   574
    User::LeaveIfError( iSisRegSession.Connect() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   575
    CleanupClosePushL( iSisRegSession );
7feec50967db 201003_02
hgs
parents:
diff changeset
   576
7feec50967db 201003_02
hgs
parents:
diff changeset
   577
    // Open sis package entry related to aUid
7feec50967db 201003_02
hgs
parents:
diff changeset
   578
    Swi::RSisRegistryEntry packageEntry;
7feec50967db 201003_02
hgs
parents:
diff changeset
   579
    if( KErrNone
7feec50967db 201003_02
hgs
parents:
diff changeset
   580
            == packageEntry.Open( iSisRegSession, TUid::Uid( aUid ) ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   581
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   582
        CleanupClosePushL( packageEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   583
7feec50967db 201003_02
hgs
parents:
diff changeset
   584
        // Get packageEntry's embedded sis'
7feec50967db 201003_02
hgs
parents:
diff changeset
   585
        RPointerArray<Swi::CSisRegistryPackage> embedded;
7feec50967db 201003_02
hgs
parents:
diff changeset
   586
        CleanupClosePushL( embedded );
7feec50967db 201003_02
hgs
parents:
diff changeset
   587
        packageEntry.EmbeddedPackagesL( embedded );
7feec50967db 201003_02
hgs
parents:
diff changeset
   588
        if( embedded.Count() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   589
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   590
            // For each embadded sis we notify storage - recursive call
7feec50967db 201003_02
hgs
parents:
diff changeset
   591
            for( TInt i = 0; i < embedded.Count(); ++i )
7feec50967db 201003_02
hgs
parents:
diff changeset
   592
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   593
                HandleInstallNotifyL( embedded[i]->Uid().iUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   594
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   595
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   596
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   597
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   598
            // There are no embaddes sis', so we can notify storage
7feec50967db 201003_02
hgs
parents:
diff changeset
   599
            // of changes in apps included in packageEntry
7feec50967db 201003_02
hgs
parents:
diff changeset
   600
            NotifyL( packageEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   601
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   602
        embedded.ResetAndDestroy();
7feec50967db 201003_02
hgs
parents:
diff changeset
   603
        CleanupStack::PopAndDestroy( &embedded );
7feec50967db 201003_02
hgs
parents:
diff changeset
   604
        CleanupStack::PopAndDestroy( &packageEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   605
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   606
    CleanupStack::PopAndDestroy( &iSisRegSession );
7feec50967db 201003_02
hgs
parents:
diff changeset
   607
    CleanupStack::PopAndDestroy( &uids );
7feec50967db 201003_02
hgs
parents:
diff changeset
   608
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   609
7feec50967db 201003_02
hgs
parents:
diff changeset
   610
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   611
// CCaSrvAppScanner::NotifyL
7feec50967db 201003_02
hgs
parents:
diff changeset
   612
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   613
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   614
void CCaSrvAppScanner::NotifyL( Swi::RSisRegistryEntry & aPackageEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   615
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   616
    // Get sids ( == uids of exetucables included in aPackageEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   617
    RArray<TUid> sids;
7feec50967db 201003_02
hgs
parents:
diff changeset
   618
    CleanupClosePushL( sids );
7feec50967db 201003_02
hgs
parents:
diff changeset
   619
    aPackageEntry.SidsL( sids );
7feec50967db 201003_02
hgs
parents:
diff changeset
   620
    if( sids.Count() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   621
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   622
        // For each sid we notify storage
7feec50967db 201003_02
hgs
parents:
diff changeset
   623
        for( TInt i = 0; i < sids.Count(); ++i )
7feec50967db 201003_02
hgs
parents:
diff changeset
   624
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   625
            iInstalledPackages.Append( sids[i].iUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   626
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   627
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   628
    CleanupStack::PopAndDestroy( &sids );
7feec50967db 201003_02
hgs
parents:
diff changeset
   629
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   630
7feec50967db 201003_02
hgs
parents:
diff changeset
   631
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   632
// CCaSrvAppScanner::NotifyL
7feec50967db 201003_02
hgs
parents:
diff changeset
   633
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   634
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   635
void CCaSrvAppScanner::NotifyL( TInt aAppUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   636
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   637
    // Get entries for given aAppUid
7feec50967db 201003_02
hgs
parents:
diff changeset
   638
    RPointerArray<CCaInnerEntry> resultArray;
7feec50967db 201003_02
hgs
parents:
diff changeset
   639
    CleanupResetAndDestroyPushL( resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   640
    GetCaAppEntriesL( aAppUid, resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   641
    if( resultArray.Count() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   642
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   643
        iCaStorageProxy.AddL( resultArray[0] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   644
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   645
    CleanupStack::PopAndDestroy( &resultArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   646
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   647
7feec50967db 201003_02
hgs
parents:
diff changeset
   648
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   649
// CCaSrvAppScanner::AddEntryToDownloadedCollectionL
7feec50967db 201003_02
hgs
parents:
diff changeset
   650
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   651
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   652
void CCaSrvAppScanner::AddEntryToDownloadedCollectionL( TInt aEntryId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   653
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   654
    TCaOperationParams params = { TCaOperationParams::EPrepend, GetCollectionDownloadIdL(), 0 // not used
7feec50967db 201003_02
hgs
parents:
diff changeset
   655
    		};
7feec50967db 201003_02
hgs
parents:
diff changeset
   656
7feec50967db 201003_02
hgs
parents:
diff changeset
   657
    RArray<TInt> entryIds;
7feec50967db 201003_02
hgs
parents:
diff changeset
   658
    CleanupClosePushL( entryIds );
7feec50967db 201003_02
hgs
parents:
diff changeset
   659
    entryIds.AppendL( aEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   660
    iCaStorageProxy.OrganizeL( entryIds, params );
7feec50967db 201003_02
hgs
parents:
diff changeset
   661
7feec50967db 201003_02
hgs
parents:
diff changeset
   662
    CleanupStack::PopAndDestroy( &entryIds );
7feec50967db 201003_02
hgs
parents:
diff changeset
   663
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   664
7feec50967db 201003_02
hgs
parents:
diff changeset
   665
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   666
// CCaSrvAppScanner::RemoveToDownloadedCollectionL
7feec50967db 201003_02
hgs
parents:
diff changeset
   667
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   668
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   669
void CCaSrvAppScanner::RemoveEntryFromDownloadedL( TInt aEntryId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   670
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   671
    TCaOperationParams params = { TCaOperationParams::ERemove, GetCollectionDownloadIdL(), 0 // not used
7feec50967db 201003_02
hgs
parents:
diff changeset
   672
    		};
7feec50967db 201003_02
hgs
parents:
diff changeset
   673
7feec50967db 201003_02
hgs
parents:
diff changeset
   674
    RArray<TInt> entryIds;
7feec50967db 201003_02
hgs
parents:
diff changeset
   675
    CleanupClosePushL( entryIds );
7feec50967db 201003_02
hgs
parents:
diff changeset
   676
    entryIds.AppendL( aEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   677
    iCaStorageProxy.OrganizeL( entryIds, params );
7feec50967db 201003_02
hgs
parents:
diff changeset
   678
7feec50967db 201003_02
hgs
parents:
diff changeset
   679
    CleanupStack::PopAndDestroy( &entryIds );
7feec50967db 201003_02
hgs
parents:
diff changeset
   680
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   681
7feec50967db 201003_02
hgs
parents:
diff changeset
   682
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   683
// CCaSrvAppScanner::ScheduleScan
7feec50967db 201003_02
hgs
parents:
diff changeset
   684
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   685
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   686
void CCaSrvAppScanner::ScheduleScan()
7feec50967db 201003_02
hgs
parents:
diff changeset
   687
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   688
    if( !IsActive() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   689
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   690
        TRequestStatus* ownStatus = &iStatus;
7feec50967db 201003_02
hgs
parents:
diff changeset
   691
        *ownStatus = KRequestPending;
7feec50967db 201003_02
hgs
parents:
diff changeset
   692
        SetActive();
7feec50967db 201003_02
hgs
parents:
diff changeset
   693
        User::RequestComplete( ownStatus, KErrNone );
7feec50967db 201003_02
hgs
parents:
diff changeset
   694
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   695
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   696
7feec50967db 201003_02
hgs
parents:
diff changeset
   697
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   698
// CCaSrvAppScanner::AddAppItemL
7feec50967db 201003_02
hgs
parents:
diff changeset
   699
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   700
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   701
void CCaSrvAppScanner::AddAppEntryL( TUint aUid, TUint aCurrentMmcId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   702
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   703
    // Now add the app entry.
7feec50967db 201003_02
hgs
parents:
diff changeset
   704
    CCaInnerEntry* appEntry = CCaInnerEntry::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   705
7feec50967db 201003_02
hgs
parents:
diff changeset
   706
    appEntry->SetEntryTypeNameL( KCaTypeApp );
7feec50967db 201003_02
hgs
parents:
diff changeset
   707
    appEntry->SetUid( aUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   708
    appEntry->SetFlags( EVisible );
7feec50967db 201003_02
hgs
parents:
diff changeset
   709
    appEntry->SetRole( EItemEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   710
7feec50967db 201003_02
hgs
parents:
diff changeset
   711
    SetApaAppInfoL( appEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   712
    HandleLockDeleteFlagUpdateL( appEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   713
    HandleMmcAttrUpdateL( appEntry, aCurrentMmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   714
7feec50967db 201003_02
hgs
parents:
diff changeset
   715
    iCaStorageProxy.AddL( appEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   716
    if( iInstalledPackages.Find( aUid ) != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   717
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   718
        AddEntryToDownloadedCollectionL( appEntry->GetId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   719
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   720
    RemoveFromInstalledPackages( aUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   721
7feec50967db 201003_02
hgs
parents:
diff changeset
   722
    CleanupStack::PopAndDestroy( appEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   723
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   724
7feec50967db 201003_02
hgs
parents:
diff changeset
   725
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   726
// CCaSrvAppScanner::RemoveFromInstalledPackages
7feec50967db 201003_02
hgs
parents:
diff changeset
   727
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   728
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   729
void CCaSrvAppScanner::RemoveFromInstalledPackages( TUint aUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   730
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   731
    TInt appIndex = iInstalledPackages.Find( aUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   732
    if( appIndex != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   733
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   734
        iInstalledPackages.Remove( appIndex );
7feec50967db 201003_02
hgs
parents:
diff changeset
   735
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   736
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   737
7feec50967db 201003_02
hgs
parents:
diff changeset
   738
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   739
// CCaSrvAppScanner::IsMidletL
7feec50967db 201003_02
hgs
parents:
diff changeset
   740
// Checks if given app is midlet by reading the apptype uid (2nd uid)
7feec50967db 201003_02
hgs
parents:
diff changeset
   741
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   742
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   743
TBool CCaSrvAppScanner::SetApaAppInfoL( CCaInnerEntry* aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   744
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   745
    TBool changed( EFalse );
7feec50967db 201003_02
hgs
parents:
diff changeset
   746
    TApaAppInfo info;
7feec50967db 201003_02
hgs
parents:
diff changeset
   747
    if( KErrNone == iSrvEngUtils.GetAppInfo( *aEntry, info ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   748
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   749
        RBuf attrVal;
7feec50967db 201003_02
hgs
parents:
diff changeset
   750
        attrVal.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   751
        attrVal.CreateL( KCaMaxAttrValueLen );
7feec50967db 201003_02
hgs
parents:
diff changeset
   752
        aEntry->FindAttribute( KCaAttrLongName, attrVal );
7feec50967db 201003_02
hgs
parents:
diff changeset
   753
        if( attrVal.Compare( info.iCaption ) != KErrNone
7feec50967db 201003_02
hgs
parents:
diff changeset
   754
                || aEntry->GetText().Compare( info.iShortCaption )
7feec50967db 201003_02
hgs
parents:
diff changeset
   755
                        != KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   756
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   757
            aEntry->SetTextL( info.iShortCaption );
7feec50967db 201003_02
hgs
parents:
diff changeset
   758
            aEntry->AddAttributeL( KCaAttrLongName, info.iCaption );
7feec50967db 201003_02
hgs
parents:
diff changeset
   759
            changed = ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   760
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   761
        CleanupStack::PopAndDestroy( &attrVal );
7feec50967db 201003_02
hgs
parents:
diff changeset
   762
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   763
    return changed;
7feec50967db 201003_02
hgs
parents:
diff changeset
   764
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   765
7feec50967db 201003_02
hgs
parents:
diff changeset
   766
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   767
// CCaSrvAppScanner::HandleMissingItemsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   768
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   769
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   770
void CCaSrvAppScanner::HandleMissingItemsL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   771
        RPointerArray<CCaInnerEntry>& aCaEntries )
7feec50967db 201003_02
hgs
parents:
diff changeset
   772
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   773
    for( TInt i = 0; i < aCaEntries.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   774
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   775
        const TInt id = aCaEntries[i]->GetId();
7feec50967db 201003_02
hgs
parents:
diff changeset
   776
        TUint mmcId = 0;
7feec50967db 201003_02
hgs
parents:
diff changeset
   777
        RBuf attrVal;
7feec50967db 201003_02
hgs
parents:
diff changeset
   778
        attrVal.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   779
        attrVal.CreateL( KCaMaxAttrValueLen );
7feec50967db 201003_02
hgs
parents:
diff changeset
   780
        if( aCaEntries[i]->FindAttribute( KCaAttrMmcId(), attrVal ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   781
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   782
            MenuUtils::GetTUint( attrVal, mmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   783
            if( mmcId && KErrNotFound != iMmcHistory->Find( mmcId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   784
                    && mmcId != CurrentMmcId() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   785
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   786
                // This item is on an MMC which is currently in the MMC history.
7feec50967db 201003_02
hgs
parents:
diff changeset
   787
                // Set it "missing" but keep it.
7feec50967db 201003_02
hgs
parents:
diff changeset
   788
                AddObjectFlagL( aCaEntries[i], EMissing );
7feec50967db 201003_02
hgs
parents:
diff changeset
   789
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   790
            else if ( attrVal == KCaMassStorage()
7feec50967db 201003_02
hgs
parents:
diff changeset
   791
                    && IsDriveInUse( DriveInfo::EDefaultMassStorage ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   792
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   793
                AddObjectFlagL( aCaEntries[i], EMissing );
7feec50967db 201003_02
hgs
parents:
diff changeset
   794
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   795
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   796
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   797
                RemoveAppL( aCaEntries[i] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   798
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   799
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   800
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   801
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   802
            RemoveAppL( aCaEntries[i] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   803
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   804
        CleanupStack::PopAndDestroy( &attrVal );
7feec50967db 201003_02
hgs
parents:
diff changeset
   805
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   806
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   807
7feec50967db 201003_02
hgs
parents:
diff changeset
   808
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   809
// CCaSrvAppScanner::RemoveAppL
7feec50967db 201003_02
hgs
parents:
diff changeset
   810
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   811
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   812
void CCaSrvAppScanner::RemoveAppL( CCaInnerEntry* aAppEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   813
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   814
    RArray<TInt> idsToRemove;
7feec50967db 201003_02
hgs
parents:
diff changeset
   815
    CleanupClosePushL( idsToRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   816
    idsToRemove.AppendL( aAppEntry->GetId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   817
    iCaStorageProxy.RemoveL( idsToRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   818
    CleanupStack::PopAndDestroy( &idsToRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   819
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   820
7feec50967db 201003_02
hgs
parents:
diff changeset
   821
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   822
// CCaSrvAppScanner::AddObjectFlagL
7feec50967db 201003_02
hgs
parents:
diff changeset
   823
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   824
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   825
void CCaSrvAppScanner::AddObjectFlagL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   826
        CCaInnerEntry* aEntry, const TInt& aFlags )
7feec50967db 201003_02
hgs
parents:
diff changeset
   827
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   828
    TBool itemFlagPresent = ( 0 != ( aEntry->GetFlags() & aFlags ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   829
    if( !itemFlagPresent )
7feec50967db 201003_02
hgs
parents:
diff changeset
   830
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   831
        aEntry->SetFlags( aEntry->GetFlags() | aFlags );
7feec50967db 201003_02
hgs
parents:
diff changeset
   832
        iCaStorageProxy.AddL( aEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   833
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   834
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   835
7feec50967db 201003_02
hgs
parents:
diff changeset
   836
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   837
// CCaSrvAppScanner::UpdateMmcHistoryL
7feec50967db 201003_02
hgs
parents:
diff changeset
   838
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   839
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   840
TUint CCaSrvAppScanner::UpdateMmcHistoryL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   841
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   842
    TUint mmcId = CurrentMmcId();
7feec50967db 201003_02
hgs
parents:
diff changeset
   843
    if( mmcId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   844
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   845
        iMmcHistory->InsertL( mmcId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   846
        iMmcHistory->SaveL( iFs, KCaMmcHistoryFname() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   847
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   848
    return mmcId;
7feec50967db 201003_02
hgs
parents:
diff changeset
   849
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   850
7feec50967db 201003_02
hgs
parents:
diff changeset
   851
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   852
// CCaSrvAppScanner::CurrentMmcId
7feec50967db 201003_02
hgs
parents:
diff changeset
   853
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   854
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   855
TUint CCaSrvAppScanner::CurrentMmcId() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   856
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   857
    // Get mmc id. Errors are ignored.
7feec50967db 201003_02
hgs
parents:
diff changeset
   858
    TUint mmcId = 0;
7feec50967db 201003_02
hgs
parents:
diff changeset
   859
    TInt mmcDrive;
7feec50967db 201003_02
hgs
parents:
diff changeset
   860
    TInt err;
7feec50967db 201003_02
hgs
parents:
diff changeset
   861
    err = DriveInfo::GetDefaultDrive(
7feec50967db 201003_02
hgs
parents:
diff changeset
   862
            DriveInfo::EDefaultRemovableMassStorage, mmcDrive );
7feec50967db 201003_02
hgs
parents:
diff changeset
   863
    if( !err )
7feec50967db 201003_02
hgs
parents:
diff changeset
   864
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   865
        TVolumeInfo volumeInfo;
7feec50967db 201003_02
hgs
parents:
diff changeset
   866
        err = iFs.Volume( volumeInfo, mmcDrive );
7feec50967db 201003_02
hgs
parents:
diff changeset
   867
        if( !err )
7feec50967db 201003_02
hgs
parents:
diff changeset
   868
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   869
            mmcId = volumeInfo.iUniqueID;
7feec50967db 201003_02
hgs
parents:
diff changeset
   870
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   871
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   872
    return mmcId;
7feec50967db 201003_02
hgs
parents:
diff changeset
   873
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   874
7feec50967db 201003_02
hgs
parents:
diff changeset
   875
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   876
// CCaSrvAppScanner::IsFileInDrive
7feec50967db 201003_02
hgs
parents:
diff changeset
   877
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   878
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   879
TBool CCaSrvAppScanner::IsFileInDrive(
7feec50967db 201003_02
hgs
parents:
diff changeset
   880
        const TDesC& aFileName,
7feec50967db 201003_02
hgs
parents:
diff changeset
   881
        const DriveInfo::TDefaultDrives& aDefaultDrive ) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   882
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   883
        if ( aFileName.Length() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   884
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   885
            TInt mmcDrive;
7feec50967db 201003_02
hgs
parents:
diff changeset
   886
        TInt err = DriveInfo::GetDefaultDrive( aDefaultDrive, mmcDrive );
7feec50967db 201003_02
hgs
parents:
diff changeset
   887
        if( !err )
7feec50967db 201003_02
hgs
parents:
diff changeset
   888
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   889
            TInt fileDrive;
7feec50967db 201003_02
hgs
parents:
diff changeset
   890
            err = RFs::CharToDrive( aFileName[0], fileDrive );
7feec50967db 201003_02
hgs
parents:
diff changeset
   891
            if( !err && fileDrive == mmcDrive )
7feec50967db 201003_02
hgs
parents:
diff changeset
   892
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   893
                return ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   894
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   895
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   896
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   897
    return EFalse;
7feec50967db 201003_02
hgs
parents:
diff changeset
   898
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   899
7feec50967db 201003_02
hgs
parents:
diff changeset
   900
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   901
// CCaSrvAppScanner::IsAppInDrive
7feec50967db 201003_02
hgs
parents:
diff changeset
   902
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   903
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   904
TBool CCaSrvAppScanner::IsAppInDrive(
7feec50967db 201003_02
hgs
parents:
diff changeset
   905
        const TUid aUid,
7feec50967db 201003_02
hgs
parents:
diff changeset
   906
        const DriveInfo::TDefaultDrives& aDefaultDrive ) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   907
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   908
    TBool ret( EFalse );
7feec50967db 201003_02
hgs
parents:
diff changeset
   909
    TApaAppInfo info;
7feec50967db 201003_02
hgs
parents:
diff changeset
   910
    TInt err = iApaLsSession.GetAppInfo( info, aUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   911
    if( !err && IsFileInDrive( info.iFullName, aDefaultDrive ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   912
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   913
        ret = ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   914
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   915
    return ret;
7feec50967db 201003_02
hgs
parents:
diff changeset
   916
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   917
7feec50967db 201003_02
hgs
parents:
diff changeset
   918
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   919
// CCaSrvAppScanner::IsInMmc
7feec50967db 201003_02
hgs
parents:
diff changeset
   920
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   921
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   922
TBool CCaSrvAppScanner::IsInMmc( const TUid aUid ) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   923
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   924
    return IsAppInDrive( aUid, DriveInfo::EDefaultRemovableMassStorage );
7feec50967db 201003_02
hgs
parents:
diff changeset
   925
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   926
7feec50967db 201003_02
hgs
parents:
diff changeset
   927
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   928
// CCaSrvAppScanner::IsInMassStorage
7feec50967db 201003_02
hgs
parents:
diff changeset
   929
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   930
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   931
TBool CCaSrvAppScanner::IsInMassStorage( const TUid aUid ) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   932
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   933
    return IsAppInDrive( aUid, DriveInfo::EDefaultMassStorage );
7feec50967db 201003_02
hgs
parents:
diff changeset
   934
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   935
7feec50967db 201003_02
hgs
parents:
diff changeset
   936
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   937
// CCaSrvAppScanner::IsInRom
7feec50967db 201003_02
hgs
parents:
diff changeset
   938
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   939
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   940
TBool CCaSrvAppScanner::IsInRom( TInt aUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   941
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   942
    return IsAppInDrive( TUid::Uid( aUid ), DriveInfo::EDefaultRom );
7feec50967db 201003_02
hgs
parents:
diff changeset
   943
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   944
7feec50967db 201003_02
hgs
parents:
diff changeset
   945
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   946
// CCaSrvAppScanner::IsDriveInUse
7feec50967db 201003_02
hgs
parents:
diff changeset
   947
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   948
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   949
TBool CCaSrvAppScanner::IsDriveInUse(
7feec50967db 201003_02
hgs
parents:
diff changeset
   950
        const DriveInfo::TDefaultDrives& aDefaultDrive )
7feec50967db 201003_02
hgs
parents:
diff changeset
   951
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   952
    TBool inUse( EFalse );
7feec50967db 201003_02
hgs
parents:
diff changeset
   953
    TInt drive;
7feec50967db 201003_02
hgs
parents:
diff changeset
   954
7feec50967db 201003_02
hgs
parents:
diff changeset
   955
    TInt err = DriveInfo::GetDefaultDrive( aDefaultDrive, drive );
7feec50967db 201003_02
hgs
parents:
diff changeset
   956
    if( err == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   957
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   958
        TUint status;
7feec50967db 201003_02
hgs
parents:
diff changeset
   959
        err = DriveInfo::GetDriveStatus( iFs, drive, status );
7feec50967db 201003_02
hgs
parents:
diff changeset
   960
        if( err == KErrNone && ( status & DriveInfo::EDriveInUse ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   961
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   962
            inUse = ETrue;
7feec50967db 201003_02
hgs
parents:
diff changeset
   963
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   964
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   965
7feec50967db 201003_02
hgs
parents:
diff changeset
   966
    return inUse;
7feec50967db 201003_02
hgs
parents:
diff changeset
   967
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   968
7feec50967db 201003_02
hgs
parents:
diff changeset
   969
// ==================== MEMBER FUNCTIONS ====================
7feec50967db 201003_02
hgs
parents:
diff changeset
   970
7feec50967db 201003_02
hgs
parents:
diff changeset
   971
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   972
// TAppAtributes::TAppAtributes
7feec50967db 201003_02
hgs
parents:
diff changeset
   973
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   974
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   975
TCaAppAtributes::TCaAppAtributes( TUint aUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   976
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   977
    iUid = aUid;
7feec50967db 201003_02
hgs
parents:
diff changeset
   978
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   979
7feec50967db 201003_02
hgs
parents:
diff changeset
   980
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   981
// TAppAtributes::GetUid
7feec50967db 201003_02
hgs
parents:
diff changeset
   982
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   983
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   984
TUint TCaAppAtributes::GetUid() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   985
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   986
    return iUid;
7feec50967db 201003_02
hgs
parents:
diff changeset
   987
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   988
7feec50967db 201003_02
hgs
parents:
diff changeset
   989
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   990
// TAppAtributes::MatchItems
7feec50967db 201003_02
hgs
parents:
diff changeset
   991
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   992
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   993
TBool TCaAppAtributes::MatchItems( const TCaAppAtributes& item1,
7feec50967db 201003_02
hgs
parents:
diff changeset
   994
        const TCaAppAtributes& item2 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   995
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   996
    return item1.GetUid() == item2.GetUid();
7feec50967db 201003_02
hgs
parents:
diff changeset
   997
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   998