javamanager/javacaptain/extensionplugins/scrupdater/src/scrupdater.cpp
author hgs
Tue, 06 Jul 2010 20:36:19 +0300
changeset 49 35baca0e7a2e
permissions -rw-r--r--
v2.2.3_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     1
/*
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     3
* All rights reserved.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     8
*
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    11
*
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    12
* Contributors:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    13
*
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    14
* Description:  ScrUpdater is Java Captain Symbian plugin that updates
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    15
*               presence information of Java Applications in USIF SCR
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    16
*               when removable drive is added or removed to the device.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    17
*
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    18
*/
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    19
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    20
#include <apgcli.h>
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    21
#include <e32base.h>
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    22
#include <f32file.h>
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    23
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    24
#include "javaprocessconstants.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    25
#include "javasymbianoslayer.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    26
#include "javauids.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    27
#include "logger.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    28
#include "coreinterface.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    29
#include "booteventprovidermessages.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    30
#include "mmceventprovidermessages.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    31
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    32
#include "scrupdater.h"
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    33
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    34
using namespace Usif;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    35
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    36
_LIT(KMediaId, "Media-Id");
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    37
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    38
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    39
 * Return pointer to ExtensionPluginInterface implementation for this
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    40
 * extension dll
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    41
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    42
java::captain::ExtensionPluginInterface* getExtensionPlugin()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    43
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    44
    return new java::captain::ScrUpdater();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    45
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    46
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    47
namespace java  // codescanner::namespace
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    48
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    49
namespace captain  // codescanner::namespace
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    50
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    51
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    52
using java::fileutils::driveInfo;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    53
using java::fileutils::DriveListenerInterface;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    54
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    55
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    56
 * Empty contructor
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    57
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    58
ScrUpdater::ScrUpdater()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    59
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    60
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    61
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    62
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    63
 * Empty destructor
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    64
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    65
ScrUpdater::~ScrUpdater()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    66
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    67
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    68
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    69
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    70
 * Implement PluginInterface method
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    71
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    72
void ScrUpdater::startPlugin(CoreInterface* /* aCore */)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    73
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    74
    LOG(EJavaCaptain, EInfo, "ScrUpdater plugin started");
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    75
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    76
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    77
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    78
 * Implement PluginInterface method
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    79
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    80
void ScrUpdater::stopPlugin()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    81
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    82
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    83
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    84
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    85
 * Implement ExtensionPluginInterface method
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    86
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    87
EventConsumerInterface* ScrUpdater::getEventConsumer()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    88
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    89
    return this;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    90
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    91
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    92
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    93
 * Handle Java Captain events sent by Boot event provider or
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    94
 * MMC event provider.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    95
 *
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    96
 * Implement EventConsumerInterface method
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    97
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    98
void ScrUpdater::event(const std::string& aEventProvider,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
    99
                       java::comms::CommsMessage& aMsg)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   100
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   101
    if (aEventProvider == BOOT_EVENT_PROVIDER)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   102
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   103
        int bootType = NORMAL_BOOT_C;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   104
        getBootMessageParams(aMsg, bootType);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   105
        LOG1(
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   106
            EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   107
            EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   108
            "ScrUpdater::event() boot event received (type=%d)",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   109
            bootType);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   110
        switch (bootType)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   111
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   112
            case IAD_BOOT_C:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   113
            case FIRST_DEVICE_BOOT_C:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   114
            case NORMAL_BOOT_C:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   115
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   116
                // Update presence information
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   117
                TRAPD(err, initializeScrPresenceInfoL())
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   118
                if (KErrNone != err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   119
                {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   120
                    ELOG1(EJavaCaptain, "initializeScrPresenceInfoL: leaved (%d)", err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   121
                }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   122
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   123
            break;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   124
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   125
            default:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   126
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   127
                WLOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   128
                    "DriveListenerInterface: event() unknown boot event (type=%d)", bootType);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   129
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   130
            break;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   131
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   132
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   133
    else if (aEventProvider == MMC_EVENT_PROVIDER)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   134
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   135
        int operation = 0;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   136
        driveInfo di;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   137
        getMmcChangedMessageParams(aMsg, operation, di);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   138
        LOG1(
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   139
            EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   140
            EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   141
            "ScrUpdater::event() mmc event received (operation=%d)",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   142
            operation);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   143
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   144
        switch (operation)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   145
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   146
            case DriveListenerInterface::REMOVABLE_MEDIA_REMOVED_C:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   147
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   148
                // All Java applications in the removed drive are set
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   149
                // to 'not present' state
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   150
                TRAPD(err, removeScrPresencesL(&di));
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   151
                if (KErrNone != err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   152
                {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   153
                    ELOG1(EJavaCaptain, "removeScrPresencesL leaved (%d)", err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   154
                }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   155
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   156
            break;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   157
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   158
            case DriveListenerInterface::REMOVABLE_MEDIA_INSERTED_C:
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   159
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   160
                // Those Java applications in the drive to where the media
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   161
                // (e.g. memory card) was added are set to 'present' state
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   162
                // IF the media id is correct (in other words if the same
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   163
                // memory card that they have been installed to is added
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   164
                // to the drive).
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   165
                TRAPD(err, addScrPresencesL(&di));
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   166
                if (KErrNone != err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   167
                {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   168
                    ELOG1(EJavaCaptain, "addScrPresencesL leaved (%d)", err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   169
                }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   170
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   171
            break;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   172
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   173
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   174
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   175
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   176
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   177
 * Set the presence state of all Java applications installed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   178
 * to the removable drive specified in aInfo to not present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   179
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   180
void ScrUpdater::removeScrPresencesL(driveInfo *aInfo)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   181
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   182
    __UHEAP_MARK;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   183
    LOG1WSTR(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   184
        "removeScrPresencesL: driveInfo root path is %s", aInfo->iRootPath);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   185
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   186
    RSoftwareComponentRegistry *pScr = createScrL();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   187
    CleanupStack::PushL(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   188
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   189
    // Get ids of all Java components in scr
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   190
    RArray<TComponentId> componentIdList;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   191
    CleanupClosePushL(componentIdList);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   192
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   193
    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   194
    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   195
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   196
    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   197
    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   198
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   199
    // For each component check whether it has been installed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   200
    // to the removed drive
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   201
    TInt  nComponents = componentIdList.Count();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   202
    TUint removedDrive = (TUint)(aInfo->iRootPath[0]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   203
    // Now removedDrive contains the drive letter, convert it to drive number 0-25
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   204
    if ((removedDrive > 64) && (removedDrive < 91))  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   205
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   206
        // 'A' - 'Z'
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   207
        removedDrive -= 65;  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   208
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   209
    else if ((removedDrive > 96) && (removedDrive < 123))  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   210
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   211
        // 'a' - 'z'
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   212
        removedDrive -= 97;  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   213
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   214
    else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   215
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   216
        ELOG1WSTR(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   217
            "removeScrPresencesL: Unexpected root path in remove drive info %s",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   218
            aInfo->iRootPath);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   219
        CleanupStack::PopAndDestroy(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   220
        return;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   221
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   222
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   223
    LOG2(EJavaCaptain, EInfo, "Number of Java components is %d, removed drive is %d",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   224
        nComponents, removedDrive);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   225
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   226
    RArray<TApaAppUpdateInfo> removedApps;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   227
    CleanupClosePushL(removedApps);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   228
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   229
    for (TInt nInd = 0; nInd < nComponents; nInd++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   230
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   231
        CComponentEntry *pEntry = CComponentEntry::NewLC();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   232
        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   233
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   234
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   235
                "removeScrPresencesL: SCR GetComponentIdsL returned id %d "
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   236
                "but GetComponentL does not find it", componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   237
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   238
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   239
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   240
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   241
        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   242
        if (nInstalledDrives <= removedDrive)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   243
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   244
            // SCR InstalledDrives should be array of 26 elements (value 0 or 1)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   245
            ELOG2(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   246
                "removeScrPresencesL: The length of InstalledDrives array (%d) "
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   247
                "is smaller than removedDrive (%d)", nInstalledDrives, removedDrive);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   248
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   249
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   250
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   251
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   252
        LOG1(EJavaCaptain, EInfo, "Java component id %d", componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   253
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   254
        if (pEntry->InstalledDrives()[removedDrive])
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   255
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   256
            // This component has been installed to the drive
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   257
            // that has just been removed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   258
            pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   259
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   260
            LOG1(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   261
                "removeScrPresencesL: set component %d to not present",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   262
                componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   263
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   264
            // Gather the Uids of all applications that are no longer present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   265
            RArray<TUid> appsInComponent;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   266
            CleanupClosePushL(appsInComponent);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   267
            pScr->GetAppUidsForComponentL(
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   268
                componentIdList[nInd], appsInComponent);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   269
            for (TInt nInd2 = 0; nInd2 < appsInComponent.Count(); nInd2++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   270
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   271
                TApaAppUpdateInfo appInfo;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   272
                appInfo.iAppUid = appsInComponent[nInd2];
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   273
                appInfo.iAction = TApaAppUpdateInfo::EAppNotPresent;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   274
                removedApps.AppendL(appInfo);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   275
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   276
            CleanupStack::PopAndDestroy(&appsInComponent);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   277
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   278
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   279
        CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   280
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   281
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   282
    // Tell AppArc which applications are no longer present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   283
    if (removedApps.Count() > 0)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   284
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   285
        RApaLsSession apaSession;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   286
        TInt err = apaSession.Connect();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   287
        if (KErrNone != err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   288
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   289
            ELOG1(EJavaCaptain, "removeScrPresencesL: Error %d when connecting AppArc", err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   290
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   291
        else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   292
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   293
            CleanupClosePushL(apaSession);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   294
            apaSession.UpdateAppListL(removedApps);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   295
            CleanupStack::PopAndDestroy(); // closes apaSession
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   296
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   297
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   298
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   299
    CleanupStack::PopAndDestroy(); // Close removedApps
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   300
    CleanupStack::PopAndDestroy(); // Close componentIdList
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   301
    CleanupStack::PopAndDestroy(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   302
    __UHEAP_MARKEND;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   303
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   304
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   305
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   306
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   307
 * Set the presence state of all Java applications installed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   308
 * to the removable drive specified in aInfo to present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   309
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   310
void ScrUpdater::addScrPresencesL(driveInfo *aInfo)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   311
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   312
    __UHEAP_MARK;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   313
    LOG1WSTR(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   314
        "addScrPresencesL: driveInfo root path is %s", aInfo->iRootPath);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   315
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   316
    RSoftwareComponentRegistry *pScr = createScrL();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   317
    CleanupStack::PushL(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   318
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   319
    // Get ids of all Java components in scr
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   320
    RArray<TComponentId> componentIdList;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   321
    CleanupClosePushL(componentIdList);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   322
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   323
    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   324
    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   325
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   326
    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   327
    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   328
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   329
    // For each component check whether it has been installed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   330
    // to the added drive AND whether the media id is correct
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   331
    // (in other words if the actual memory card where the component
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   332
    // has been installed to is added to the drive).
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   333
    TInt  nComponents  = componentIdList.Count();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   334
    TUint addedMediaId = (TUint)(aInfo->iId);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   335
    TUint addedDrive   = (TUint)(aInfo->iRootPath[0]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   336
    // Now addedDrive contains the drive letter, convert it to drive number 0-25
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   337
    if ((addedDrive > 64) && (addedDrive < 91))  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   338
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   339
        // 'A' - 'Z'
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   340
        addedDrive -= 65;  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   341
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   342
    else if ((addedDrive > 96) && (addedDrive < 123))  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   343
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   344
        // 'a' - 'z'
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   345
        addedDrive -= 97;  // codescanner::magicnumbers
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   346
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   347
    else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   348
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   349
        ELOG1WSTR(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   350
            "addScrPresencesL: Unexpected root path in add drive info %s",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   351
            aInfo->iRootPath);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   352
        CleanupStack::PopAndDestroy(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   353
        return;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   354
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   355
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   356
    LOG2(EJavaCaptain, EInfo, "Number of Java components is %d, added drive is %d",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   357
        nComponents, addedDrive);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   358
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   359
    RArray<TApaAppUpdateInfo> addedApps;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   360
    CleanupClosePushL(addedApps);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   361
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   362
    for (TInt nInd = 0; nInd < nComponents; nInd++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   363
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   364
        CComponentEntry *pEntry = CComponentEntry::NewLC();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   365
        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   366
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   367
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   368
                "addScrPresencesL: SCR GetComponentIdsL returned id %d "
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   369
                "but GetComponentL does not find it", componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   370
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   371
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   372
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   373
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   374
        // When Java Installer registers Java app to SCR it stores also
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   375
        // the media id using SetComponentPropertyL(TComponentId aComponentId,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   376
        // _L("Media-Id"), TInt64 aValue);  (aValue is actually 32 bit int)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   377
        CIntPropertyEntry* pMediaIdProperty = (CIntPropertyEntry *)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   378
            pScr->GetComponentPropertyL(componentIdList[nInd], KMediaId);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   379
        if (NULL == pMediaIdProperty)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   380
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   381
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   382
                "addScrPresencesL: media_id property not found for component %d",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   383
                componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   384
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   385
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   386
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   387
        CleanupStack::PushL(pMediaIdProperty);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   388
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   389
        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   390
        if (nInstalledDrives <= addedDrive)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   391
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   392
            // SCR InstalledDrives should be array of 26 elements (value 0 or 1)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   393
            ELOG2(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   394
                "addScrPresencesL: The length of InstalledDrives array (%d) "
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   395
                "is smaller than addedDrive (%d)", nInstalledDrives, addedDrive);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   396
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   397
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   398
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   399
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   400
        LOG1(EJavaCaptain, EInfo, "Java component id %d", componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   401
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   402
        if (pEntry->InstalledDrives()[addedDrive])
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   403
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   404
            // This component has been installed to the drive
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   405
            // that has just been added.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   406
            // Now check whether the media id of the added media
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   407
            // is OK for this component.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   408
            if (addedMediaId == pMediaIdProperty->IntValue())
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   409
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   410
                pScr->SetIsComponentPresentL(componentIdList[nInd], ETrue);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   411
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   412
                LOG1(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   413
                    "addScrPresencesL: set component %d to present",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   414
                    componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   415
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   416
                // Gather the Uids of all 'new' applications that are now present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   417
                RArray<TUid> appsInComponent;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   418
                CleanupClosePushL(appsInComponent);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   419
                pScr->GetAppUidsForComponentL(
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   420
                    componentIdList[nInd], appsInComponent);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   421
                for (TInt nInd2 = 0; nInd2 < appsInComponent.Count(); nInd2++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   422
                {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   423
                    TApaAppUpdateInfo appInfo;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   424
                    appInfo.iAppUid = appsInComponent[nInd2];
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   425
                    appInfo.iAction = TApaAppUpdateInfo::EAppPresent;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   426
                    addedApps.AppendL(appInfo);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   427
                }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   428
                CleanupStack::PopAndDestroy(&appsInComponent);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   429
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   430
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   431
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   432
        CleanupStack::PopAndDestroy(pMediaIdProperty);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   433
        CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   434
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   435
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   436
    // Tell AppArc which 'new' applications are now present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   437
    if (addedApps.Count() > 0)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   438
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   439
        RApaLsSession apaSession;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   440
        TInt err = apaSession.Connect();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   441
        if (KErrNone != err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   442
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   443
            ELOG1(EJavaCaptain, "addScrPresencesL: Error %d when connecting AppArc", err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   444
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   445
        else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   446
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   447
            CleanupClosePushL(apaSession);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   448
            apaSession.UpdateAppListL(addedApps);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   449
            CleanupStack::PopAndDestroy(); // closes apaSession
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   450
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   451
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   452
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   453
    CleanupStack::PopAndDestroy(); // Close addedApps
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   454
    CleanupStack::PopAndDestroy(); // Close componentIdList
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   455
    CleanupStack::PopAndDestroy(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   456
    __UHEAP_MARKEND;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   457
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   458
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   459
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   460
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   461
 * Loop through all removable drives and get the media id of
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   462
 * the memory card or other removable media in the drive and update
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   463
 * presence information of all Java applications installed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   464
 * to removable drives accordingly.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   465
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   466
void ScrUpdater::initializeScrPresenceInfoL()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   467
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   468
    __UHEAP_MARK;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   469
    RFs fs;  // codescanner::rfs
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   470
    User::LeaveIfError(fs.Connect());
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   471
    CleanupClosePushL(fs);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   472
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   473
    // Which drives are present and what is the media id of
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   474
    // each removable volume
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   475
    TInt  err = KErrNone;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   476
    TInt  err2 = KErrNone;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   477
    TBool drivePresent[EDriveZ + 1];
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   478
    TUint driveMediaId[EDriveZ + 1];
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   479
    TVolumeInfo volumeInfo;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   480
    TDriveInfo  driveInfo;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   481
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   482
    for (TInt nInd = EDriveA; nInd < EDriveZ; nInd++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   483
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   484
        err = fs.Volume(volumeInfo, nInd);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   485
        if (KErrNone == err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   486
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   487
            drivePresent[nInd] = ETrue;  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   488
            driveMediaId[nInd] = volumeInfo.iUniqueID;  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   489
            // If the media is not removable, media id is not checked
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   490
            err2 = fs.Drive(driveInfo, nInd);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   491
            if (KErrNone != err2)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   492
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   493
                ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   494
                    "initializeScrPresenceInfoL: error (%d) when trying to get drive info",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   495
                    err2);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   496
                User::Leave(err2);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   497
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   498
            else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   499
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   500
                if (!(driveInfo.iDriveAtt & KDriveAttRemovable))
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   501
                {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   502
                    driveMediaId[nInd] = 0;  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   503
                }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   504
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   505
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   506
        else if (KErrNotReady == err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   507
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   508
            // no volume in this drive
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   509
            drivePresent[nInd] = EFalse;  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   510
            driveMediaId[nInd] = 0;  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   511
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   512
        else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   513
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   514
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   515
                "initializeScrPresenceInfoL: error (%d) when trying to get volume info",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   516
                err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   517
            User::Leave(err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   518
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   519
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   520
    CleanupStack::PopAndDestroy(); // close RFs
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   521
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   522
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   523
    RSoftwareComponentRegistry *pScr = createScrL();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   524
    CleanupStack::PushL(pScr);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   525
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   526
    // Get ids of all Java components in scr
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   527
    RArray<TComponentId> componentIdList;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   528
    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   529
    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   530
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   531
    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   532
    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   533
    CleanupClosePushL(componentIdList);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   534
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   535
    // For each component check whether the drive it has been installed
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   536
    // to is present AND whether the media id is correct
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   537
    TInt  nComponents  = componentIdList.Count();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   538
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   539
    LOG1(EJavaCaptain, EInfo, "initializeScrPresenceInfoL: Number of Java components is %d",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   540
        nComponents);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   541
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   542
    for (TInt nInd = 0; nInd < nComponents; nInd++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   543
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   544
        CComponentEntry *pEntry = CComponentEntry::NewLC();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   545
        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   546
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   547
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   548
                "initializeScrPresenceInfoL: SCR GetComponentIdsL returned id %d "
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   549
                "but GetComponentL does not find it", componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   550
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   551
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   552
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   553
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   554
        CIntPropertyEntry* pMediaIdProperty = (CIntPropertyEntry *)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   555
            pScr->GetComponentPropertyL(componentIdList[nInd], KMediaId);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   556
        if (NULL == pMediaIdProperty)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   557
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   558
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   559
                "initializeScrPresenceInfoL: media_id property not found for component %d",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   560
                componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   561
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   562
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   563
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   564
        CleanupStack::PushL(pMediaIdProperty);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   565
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   566
        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   567
        if (nInstalledDrives > (EDriveZ + 1))
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   568
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   569
            WLOG2(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   570
                "initializeScrPresenceInfoL: too big (%d) installed drives array for "
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   571
                "component %d", nInstalledDrives, componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   572
            nInstalledDrives = EDriveZ;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   573
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   574
        // When Java components are installed, only one installed drive
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   575
        // and corresponding media id are registered.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   576
        TInt installationDrive = -1;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   577
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   578
        for (TInt driveNumber = EDriveA; driveNumber < nInstalledDrives; driveNumber++)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   579
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   580
            if (pEntry->InstalledDrives()[driveNumber])
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   581
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   582
                installationDrive = driveNumber;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   583
                break;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   584
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   585
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   586
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   587
        if (installationDrive == -1)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   588
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   589
            ELOG1(EJavaCaptain,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   590
                "initializeScrPresenceInfoL: component (id %d) did not have installed drive info",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   591
                componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   592
            CleanupStack::PopAndDestroy(pMediaIdProperty);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   593
            CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   594
            continue;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   595
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   596
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   597
        if (drivePresent[installationDrive])  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   598
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   599
            // Check also the media id
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   600
            if (driveMediaId[installationDrive] == pMediaIdProperty->IntValue())  // codescanner::accessArrayElementWithoutCheck2
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   601
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   602
                LOG1(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   603
                    "initializeScrPresenceInfoL: set component %d to present",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   604
                    componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   605
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   606
                pScr->SetIsComponentPresentL(componentIdList[nInd], ETrue);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   607
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   608
            else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   609
            {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   610
                LOG1(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   611
                    "initializeScrPresenceInfoL: set component %d to NOT present",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   612
                    componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   613
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   614
                pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   615
            }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   616
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   617
        else
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   618
        {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   619
            LOG1(EJavaCaptain, EInfo,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   620
                "initializeScrPresenceInfoL: set component %d to NOT present",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   621
                componentIdList[nInd]);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   622
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   623
            // drive is not present -> Java component installed to that
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   624
            // drive is not present
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   625
            pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   626
        }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   627
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   628
        CleanupStack::PopAndDestroy(pMediaIdProperty);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   629
        CleanupStack::PopAndDestroy(pEntry);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   630
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   631
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   632
    CleanupStack::PopAndDestroy(); // Close componentIdList
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   633
    CleanupStack::PopAndDestroy(pScr); // Also closes RSoftwareComponentRegistry
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   634
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   635
    __UHEAP_MARKEND;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   636
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   637
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   638
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   639
/**
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   640
 * Creates an instance of RSoftwareComponentRegistry and connects to it.
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   641
 */
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   642
RSoftwareComponentRegistry *ScrUpdater::createScrL()
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   643
{
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   644
    RSoftwareComponentRegistry *pScr = new RSoftwareComponentRegistry;  // codescanner::nonleavenew
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   645
    if (NULL == pScr)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   646
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   647
        ELOG(EJavaInstaller,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   648
            "CreateScrL: Creating RSoftwareComponentRegistry failed");
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   649
        User::Leave(KErrGeneral);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   650
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   651
    TInt err = pScr->Connect();
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   652
    if (KErrNone != err)
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   653
    {
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   654
        ELOG1(EJavaInstaller,
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   655
            "CreateScrL: Connecting to RSoftwareComponentRegistry failed, error %d",
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   656
            err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   657
        delete pScr;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   658
        User::Leave(err);
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   659
    }
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   660
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   661
    return pScr;
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   662
}
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   663
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   664
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   665
} // namespace captain
35baca0e7a2e v2.2.3_1
hgs
parents:
diff changeset
   666
} // namespace java