applicationmanagement/server/src/AMPreInstallApp.cpp
author hgs
Fri, 15 Oct 2010 11:39:02 +0530
changeset 67 fdbfe0a95492
parent 62 03849bd79877
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     1
/*
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies). 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     8
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    11
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    12
 * Contributors:
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    13
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    14
 * Description: Implementation of applicationmanagement components
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    15
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    16
 */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    17
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    18
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    19
#include <pathinfo.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    20
#include <driveinfo.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    21
#include <apmstd.h>  //for KMaxDataTypeLength
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    22
#include <sisregistrysession.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    23
#include <sisregistrypackage.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    24
#include <e32cmn.h> 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    25
#include <utf.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    26
#include <sisregistryentry.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    27
#include <caf/caf.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    28
#include <apgcli.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    29
#include <SWInstDefs.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    30
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    31
#include "AMPreInstallApp.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    32
#include "debug.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    33
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    34
using namespace NApplicationManagement;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    35
CAMPreInstallApp* CAMPreInstallApp::NewL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    36
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    37
    CAMPreInstallApp* self = CAMPreInstallApp::NewLC();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    38
    CleanupStack::Pop(self);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    39
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    40
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    41
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    42
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    43
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    44
CAMPreInstallApp* CAMPreInstallApp::NewLC()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    45
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    46
    CAMPreInstallApp *self = new (ELeave) CAMPreInstallApp();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    47
    CleanupStack::PushL(self);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    48
    self->ConstructL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    49
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    50
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    51
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    52
CAMPreInstallApp::CAMPreInstallApp()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    53
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    54
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    55
CAMPreInstallApp::~CAMPreInstallApp()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    56
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    57
    delete iStorage;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    58
    iFs.Close();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    59
    #ifdef RD_MULTIPLE_DRIVE        
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    60
 		  delete iInstallDocPathArray;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    61
    #endif    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    62
    iPreInstalledAppParams.ResetAndDestroy();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    63
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    64
void CAMPreInstallApp::ConstructL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    65
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    66
    iStorage = CDeliveryComponentStorage::NewL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    67
    User::LeaveIfError(iFs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    68
    TPtrC mmcDrive(TParsePtrC( PathInfo::MemoryCardRootPath() ).Drive());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    69
      iPreInstallPath.Append(mmcDrive);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    70
      iPreInstallPath.Append(KPreInstallPath);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    71
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    72
void CAMPreInstallApp::GetPreInstalledAppsL(RPointerArray<
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    73
        TPreInstalledAppParams> &aPreInstalledAppParams)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    74
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    75
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    76
    MakeAllInstallPathsL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    77
    ListPreInstalledAppL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    78
    aPreInstalledAppParams = iPreInstalledAppParams;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    79
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    80
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    81
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    82
void CAMPreInstallApp::ListPreInstalledAppL(const TDesC& installDocPath)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    83
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    84
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    85
    RDEBUG("Clist_PreInstallAppUi: ListPreInstalledApp: <<<<");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    86
    CDir* dir= NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    87
    TInt err = iFs.GetDir(installDocPath, KEntryAttNormal, ESortByName, dir);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    88
   // _LIT(KInstallpath,"C:\\private\\10202dce\\");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    89
    //TInt err = iFs.GetDir(KInstallpath, KEntryAttNormal, ESortByName, dir);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    90
    RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: err in getting dir list : %d",err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    91
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    92
    if (err==KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    93
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    94
        CleanupStack::PushL(dir);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    95
        RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: no of dir's : %d",dir->Count());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    96
        for (TInt i(0); i < dir->Count(); i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    97
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    98
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    99
	    RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: <<<< dir entry %d", i);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   100
            TEntry entry;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   101
            entry = (*dir)[i];
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   102
            HBufC* pathAndName = HBufC::NewLC(installDocPath.Length()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   103
                    + entry.iName.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   104
            TPtr ptrPathAndName = pathAndName->Des();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   105
            ptrPathAndName.Append(installDocPath);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   106
            ptrPathAndName.Append(entry.iName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   107
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   108
            HBufC* mimeType = HBufC::NewLC(KMaxDataTypeLength);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   109
            //Recognize     
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   110
            if (!RecognizeL(*pathAndName, mimeType))
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   111
                {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   112
                CleanupStack::PopAndDestroy(mimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   113
                CleanupStack::PopAndDestroy(pathAndName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   114
                continue;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   115
                }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   116
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   117
#ifdef RD_MULTIPLE_DRIVE
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   118
            if (TParsePtrC(installDocPath).Path().CompareF(KPreInstallPath)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   119
                    == 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   120
#else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   121
            if (installDocPath.CompareF(iPreInstallPath) == 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   122
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   123
                {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   124
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   125
		RDEBUG("Clist_PreInstallAppUi: ListPreInstalledApp: <<<< Entered installDocPath.CompareF(iPreInstallPath)");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   126
                Swi::RSisRegistrySession regSession;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   127
                CleanupClosePushL(regSession);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   128
                User::LeaveIfError(regSession.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   129
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   130
                RArray<TUid> uids;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   131
                CleanupClosePushL(uids);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   132
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   133
                regSession.InstalledUidsL(uids);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   134
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   135
                RFile temp;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   136
                User::LeaveIfError(temp.Open(iFs, *pathAndName,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   137
                        EFileShareReadersOnly | EFileRead) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   138
                CleanupClosePushL(temp);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   139
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   140
                TUid appUid;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   141
                TInt uidLen = sizeof(TInt32);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   142
                TInt seekLen = sizeof(TInt32) + sizeof(TInt32);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   143
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   144
                User::LeaveIfError(temp.Seek(ESeekStart, seekLen));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   145
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   146
                TPckg<TInt32> uid1(appUid.iUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   147
                User::LeaveIfError(temp.Read(uid1, uidLen));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   148
                if (uid1.Length() != uidLen)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   149
                    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   150
                    User::Leave(KErrUnderflow);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   151
                    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   152
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   153
                //checking whether this is installed or not
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   154
                TBool installed = regSession.IsInstalledL(appUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   155
                Swi::RSisRegistryEntry registryEntry;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   156
                TInt regEntryError = registryEntry.Open(regSession, appUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   157
		RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: RegEntryError : %d",regEntryError);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   158
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   159
		//User::LeaveIfError(regEntryError);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   160
		if (regEntryError == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   161
		    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   162
                CleanupClosePushL(registryEntry);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   163
                TBool isPreInstalled = registryEntry.PreInstalledL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   164
               // TBool isPreInstalled = ETrue;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   165
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   166
                RDEBUG_4("Clist_PreInstallAppUi: ListPreInstalledApp: UID is : '0x%X', installed:, preinstalled %d  %d",appUid,installed,isPreInstalled);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   167
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   168
                for (TInt i(0); isPreInstalled && i < uids.Count(); i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   169
                    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   170
                    if (appUid == uids[i])
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   171
                        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   172
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   173
			RDEBUG("Clist_PreInstallAppUi: appUid == uids[i]");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   174
                        Swi::CSisRegistryPackage* sisRegistry = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   175
                        TRAPD( err, sisRegistry = regSession.SidToPackageL( uids[i] ) ) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   176
                        //User::LeaveIfError(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   177
			if(err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   178
			{
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   179
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   180
			RDEBUG("Clist_PreInstallAppUi: err == KErrNone");
67
hgs
parents: 62
diff changeset
   181
												CleanupStack::PushL(sisRegistry); 
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   182
                        TPreInstalledAppParams *params =
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   183
                                new (ELeave) TPreInstalledAppParams;
67
hgs
parents: 62
diff changeset
   184
                        CleanupStack::PushL(params);   
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   185
                        params->iPreInstalledAppame.Copy(sisRegistry->Name());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   186
                        params->iPreInstalledAppVendorName.Copy(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   187
                                sisRegistry->Vendor());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   188
                        params->iPreInstalledAppUid = sisRegistry->Uid();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   189
                        params->iMimeType.Copy(*mimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   190
                        //Get version
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   191
                        TVersion version = registryEntry.VersionL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   192
                        TBuf8<KVersionLength> pkgDes;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   193
                        pkgDes.AppendNum(version.iMajor);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   194
                        pkgDes.Append(KLiteralPeriod);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   195
                        pkgDes.AppendNum(version.iMinor);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   196
                        params->iVersion.Copy(pkgDes);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   197
62
hgs
parents: 47
diff changeset
   198
                        iPreInstalledAppParams.AppendL(params);
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   199
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   200
                        RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: Installed App UID is : '0x%X'",appUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   201
                        RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: Installed App Name is: %S",&(sisRegistry->Name()));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   202
                        RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: Installed App Vendor is: %S",&(sisRegistry->Vendor()));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   203
                        RDEBUG_2("Clist_PreInstallAppUi: ListPreInstalledApp: Installed App UID is : '0x%X'",sisRegistry->Uid());
67
hgs
parents: 62
diff changeset
   204
                        CleanupStack::PopAndDestroy(params);
hgs
parents: 62
diff changeset
   205
                        CleanupStack::PopAndDestroy(sisRegistry);
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   206
			}
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   207
                        continue;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   208
                        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   209
                    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   210
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   211
                CleanupStack::PopAndDestroy(&registryEntry);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   212
		    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   213
                CleanupStack::PopAndDestroy(&temp);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   214
                CleanupStack::PopAndDestroy(&uids);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   215
                CleanupStack::PopAndDestroy(&regSession);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   216
                CleanupStack::PopAndDestroy(mimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   217
                CleanupStack::PopAndDestroy(pathAndName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   218
                }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   219
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   220
         CleanupStack::PopAndDestroy(dir);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   221
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   222
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   223
void CAMPreInstallApp::ListPreInstalledAppL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   224
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   225
    iPreInstalledAppParams.Reset();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   226
#ifdef RD_MULTIPLE_DRIVE
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   227
    TInt count = iInstallDocPathArray->Count();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   228
    for ( TInt index(0); index < count; index++ )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   229
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   230
        if ( (*iInstallDocPathArray)[index].Length()> 0 )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   231
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   232
            ListPreInstalledAppL( (*iInstallDocPathArray)[index] );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   233
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   234
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   235
#else   
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   236
    if (iPreInstallDocumentPath.Length() > 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   237
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   238
        ListPreInstalledAppL(iPreInstallDocumentPath);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   239
        //_LIT(KInstallpath,"C:\\private\\10202dce\\");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   240
        //ListPreInstalledAppL(KInstallpath);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   241
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   242
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   243
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   244
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   245
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   246
TBool CAMPreInstallApp::RecognizeL(TDesC& aPathAndName, HBufC* aMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   247
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   248
    TBool IsOK(ETrue);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   249
    ContentAccess::CContent* pkgContent = ContentAccess::CContent::NewLC(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   250
            aPathAndName, ContentAccess::EContentShareReadWrite);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   251
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   252
    TPtr mimePtr(aMimeType->Des());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   253
    pkgContent->GetStringAttribute(ContentAccess::EMimeType, mimePtr);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   254
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   255
    HBufC8* tmpMime8 = HBufC8::NewLC(aMimeType->Length());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   256
    tmpMime8->Des().Copy(*aMimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   257
    TPtr8 mimePtr8(tmpMime8->Des());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   258
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   259
    if ((mimePtr8 != SwiUI::KSisxMimeType) && (mimePtr8
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   260
            != SwiUI::KSisMimeType) && (mimePtr8 != SwiUI::KPipMimeType))
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   261
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   262
        IsOK = EFalse;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   263
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   264
    CleanupStack::PopAndDestroy(tmpMime8);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   265
    CleanupStack::PopAndDestroy(pkgContent);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   266
    return IsOK;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   267
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   268
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   269
void CAMPreInstallApp::MakeAllInstallPathsL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   270
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   271
#ifdef RD_MULTIPLE_DRIVE        
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   272
    iInstallDocPathArray = new (ELeave) CDesCArrayFlat( 2 );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   273
    TDriveList driveList;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   274
    TInt driveCount = 0;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   275
    //User::LeaveIfError(iFs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   276
    User::LeaveIfError( DriveInfo::GetUserVisibleDrives(iFs, driveList,driveCount));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   277
    TUint driveStatus = 0;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   278
    for (TInt index(0); index < KMaxDrives; index++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   279
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   280
        if (driveList[index])
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   281
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   282
            User::LeaveIfError( DriveInfo::GetDriveStatus(iFs, index,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   283
                    driveStatus));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   284
            TFileName path;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   285
            TDriveUnit driveUnit(index);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   286
            if ( !(driveStatus & DriveInfo::EDriveRemote ))
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   287
                {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   288
                if (driveStatus & DriveInfo::EDriveRemovable)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   289
                    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   290
                    path.Zero();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   291
                    path.Append(driveUnit.Name() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   292
                    path.Append(KPreInstallPath);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   293
                    iInstallDocPathArray->AppendL(path);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   294
                    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   295
                }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   296
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   297
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   298
    //iFs.Close();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   299
#else   
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   300
    TPtrC mmcDrive(TParsePtrC( PathInfo::MemoryCardRootPath() ).Drive());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   301
    iPreInstallDocumentPath.Append(mmcDrive);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   302
    iPreInstallDocumentPath.Append(KPreInstallPath);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   303
#endif //RD_MULTIPLE_DRIVE 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   304
    }