appfw/apparchitecture/aplist/aplapplistitem.cpp
branchRCL_3
changeset 20 c2c61fdca848
parent 19 924385140d98
--- a/appfw/apparchitecture/aplist/aplapplistitem.cpp	Tue Aug 31 15:24:25 2010 +0300
+++ b/appfw/apparchitecture/aplist/aplapplistitem.cpp	Wed Sep 01 12:24:48 2010 +0100
@@ -25,9 +25,6 @@
 #include "aplappinforeader.h"
 #include <e32uid.h>
 
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-#include <usif/scr/appregentries.h>
-#endif
 
 // Delays in the pseudo idle object that builds the application list
 //
@@ -236,196 +233,43 @@
 // Class CApaAppData
 //
 
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-CApaAppData::CApaAppData(RFs& aFs)
-    :iCaption(NULL), iShortCaption(NULL), 
-    iFs(aFs),
-    iNonMbmIconFile(EFalse),
-    iApplicationLanguage(ELangNone), iIndexOfFirstOpenService(-1),
-    iShortCaptionFromResourceFile(NULL)
-    {
-    }
-EXPORT_C CApaAppData* CApaAppData::NewL(const Usif::CApplicationRegistrationData& aAppInfo, RFs& aFs, const Usif::RSoftwareComponentRegistry& aScrCon)
-    {
-    CApaAppData* self=new(ELeave) CApaAppData(aFs);
-    CleanupStack::PushL(self);
-    self->ConstructL(aAppInfo, aScrCon);
-    CleanupStack::Pop(self); // self
-    return self;
-    }
-
-void CApaAppData::ConstructL(const Usif::CApplicationRegistrationData& aAppInfo, const Usif::RSoftwareComponentRegistry& aScrCon)
-    {
-    iCapabilityBuf.FillZ(iCapabilityBuf.MaxLength());
-    iIcons = CApaAppIconArray::NewL();
-    iViewDataArray=new(ELeave) CArrayPtrFlat<CApaAppViewData>(1);
-    iOwnedFileArray=new(ELeave) CDesCArraySeg(1);
-    User::LeaveIfError(ReadApplicationInformationFromSCRL(aAppInfo, aScrCon));   
-    }
-
-//Initializes the CApaAppData object with information read from SCR. Leaves if any error occurs during initialization.
-
-TInt CApaAppData::ReadApplicationInformationFromSCRL(const Usif::CApplicationRegistrationData& aAppInfo, const Usif::RSoftwareComponentRegistry& aScrCon)
-    {
-    HBufC* caption = NULL;
-    HBufC* shortCaption = NULL;
-
-    CApaAppInfoReader* appInfoReader = NULL;
-    appInfoReader = CApaAppInfoReader::NewL(iFs, aAppInfo, aScrCon); 
-    CleanupStack::PushL(appInfoReader);
-    TBool readSuccessful=EFalse;
-    readSuccessful= appInfoReader->ReadL();
-    
-    iFullName=appInfoReader->AppBinaryFullName();
-    
-    iUidType = appInfoReader->AppBinaryUidType();
-
-    caption = appInfoReader->Caption();
-    shortCaption = appInfoReader->ShortCaption();
-
-    CApaAppIconArray* icons = appInfoReader->Icons();
-    if(icons)
-        {
-        delete iIcons;
-        iIcons = icons;
-        iIconLoader = appInfoReader->IconLoader();
-        }
-    else
-        {           
-        TRAPD(err, icons = CApaAppIconArray::NewL());
-        if(err == KErrNone)
-            {
-            delete iIcons;
-            iIcons = icons;
-            }
-        }
-        
-               
-    iOpaqueData = appInfoReader->OpaqueData();
-
-    if (readSuccessful)
-        {
-        appInfoReader->Capability(iCapabilityBuf);
-
-        iDefaultScreenNumber = appInfoReader->DefaultScreenNumber();
+EXPORT_C CApaAppData* CApaAppData::NewL(const TApaAppEntry& aAppEntry, RFs& aFs)
+	{
+	CApaAppData* self=new(ELeave) CApaAppData(aFs);
+	CleanupStack::PushL(self);
+	self->ConstructL(aAppEntry);
+	CleanupStack::Pop(); // self
+	return self;
+	}
 
-        delete iIconFileName;
-        iIconFileName = appInfoReader->IconFileName();
-        iNonMbmIconFile = appInfoReader->NonMbmIconFile();
-        iNumOfAppIcons = appInfoReader->NumOfAppIcons();
-        iApplicationLanguage = appInfoReader->AppLanguage();
-                
-        // views
-        iViewDataArray->ResetAndDestroy();
-        CArrayPtrFlat<CApaAppViewData>* viewDataArray = appInfoReader->Views();
-        if (viewDataArray)
-            {
-            delete iViewDataArray;
-            iViewDataArray = viewDataArray;
-            
-            if(!iIconLoader && ViewMbmIconsRequireLoading())
-                {
-                //if VIEW_DATA contains a MBM icon we need to initialize iIconLoader
-                iIconLoader = appInfoReader->IconLoader();
-                }
-            }
-
-            // owned files
-            iOwnedFileArray->Reset();
-            CDesCArray* const ownedFileArray = appInfoReader->OwnedFiles();
-            if (ownedFileArray)
-                {
-                delete iOwnedFileArray;
-                iOwnedFileArray = ownedFileArray;
-                }
-            
-            UpdateServiceArray(appInfoReader->ServiceArray(iIndexOfFirstOpenService));
-            }
-
-    CleanupStack::PopAndDestroy(appInfoReader);
-
-    if (!caption)
-        {
-        TParsePtrC parse (*iFullName);
-        caption = parse.Name().Alloc();
-        }
-
-    // Put the captions into place
-    if (caption)
-        {
-        if (!shortCaption)
-            {
-            shortCaption = caption->Alloc();
-            if (!shortCaption)
-                {
-                delete caption;
-                caption = NULL;
-                }
-            }
-
-        delete iCaption;
-        iCaption = caption;
-        delete iShortCaption;
-        iShortCaption = shortCaption;
-        }
-    
-    return caption ? KErrNone : KErrNoMemory;
-    }
-
-
-EXPORT_C TUid CApaAppData::NonNativeApplicationType() const
-/** @internalComponent */
-    {
-    if (iCapabilityBuf().iAttributes & TApaAppCapability::ENonNative)
-        return iUidType[1];
-    else
-        return TUid::Null();
-    }
-
-EXPORT_C TBool CApaAppData::IsLangChangePending()
-{
-    return iIsLangChangePending;
-}
-
-#else
 CApaAppData::CApaAppData(RFs& aFs)
-    :iCaption(NULL), iShortCaption(NULL), 
-    iIsPresent(CApaAppData::EIsPresent), iFs(aFs),
-    iNonMbmIconFile(EFalse),
-    iApplicationLanguage(ELangNone), iIndexOfFirstOpenService(-1),
-    iNonNativeApplicationType(TUid::Null()),
-    iShortCaptionFromResourceFile(NULL)
-    {
-    }
-
-EXPORT_C CApaAppData* CApaAppData::NewL(const TApaAppEntry& aAppEntry, RFs& aFs)
-    {
-    CApaAppData* self=new(ELeave) CApaAppData(aFs);
-    CleanupStack::PushL(self);
-    self->ConstructL(aAppEntry);
-    CleanupStack::Pop(); // self
-    return self;
-    }
+	:iCaption(NULL), iShortCaption(NULL), 
+	iIsPresent(CApaAppData::EIsPresent), iFs(aFs),
+	iNonMbmIconFile(EFalse),
+	iApplicationLanguage(ELangNone), iIndexOfFirstOpenService(-1),
+	iNonNativeApplicationType(TUid::Null()),
+	iShortCaptionFromResourceFile(NULL)
+	{
+	}
 
 void CApaAppData::ConstructL(const TApaAppEntry& aAppEntry)
-    {
-    iUidType = aAppEntry.iUidType; // if the 2nd UID is KUidAppRegistrationFile, iUidType will be updated in ReadApplicationInformationFromResourceFiles() to reflect the TUidType for the application binary
+	{
+	iUidType = aAppEntry.iUidType; // if the 2nd UID is KUidAppRegistrationFile, iUidType will be updated in ReadApplicationInformationFromResourceFiles() to reflect the TUidType for the application binary
+	if (ApaUtils::TypeUidIsForRegistrationFile(aAppEntry.iUidType))
+		{
+		iRegistrationFile = aAppEntry.iFullName.AllocL();
+		}
+	else
+		{
+		iFullName = aAppEntry.iFullName.AllocL();
+		}
 
-    if (ApaUtils::TypeUidIsForRegistrationFile(aAppEntry.iUidType))
-        {
-        iRegistrationFile = aAppEntry.iFullName.AllocL();
-        }
-    else
-        {
-        iFullName = aAppEntry.iFullName.AllocL();
-        }
-    
-    iCapabilityBuf.FillZ(iCapabilityBuf.MaxLength());
-    iIcons = CApaAppIconArray::NewL();
-    iViewDataArray=new(ELeave) CArrayPtrFlat<CApaAppViewData>(1);
-    iOwnedFileArray=new(ELeave) CDesCArraySeg(1);
-    User::LeaveIfError(ReadApplicationInformationFromResourceFiles());    
-    }
+	iCapabilityBuf.FillZ(iCapabilityBuf.MaxLength());
+	iIcons = CApaAppIconArray::NewL();
+	iViewDataArray=new(ELeave) CArrayPtrFlat<CApaAppViewData>(1);
+	iOwnedFileArray=new(ELeave) CDesCArraySeg(1);
+	User::LeaveIfError(ReadApplicationInformationFromResourceFiles());
+	}
 
 // Return a standard error code
 // The value returned only reflect the caption status
@@ -437,330 +281,172 @@
 // 2. Be very careful in this method, because it can be called on a newly constructed object,
 //    or on an existing object, so don't assume member data pointers will be NULL
 TInt CApaAppData::ReadApplicationInformationFromResourceFiles()
-    {
-    HBufC* caption = NULL;
-    HBufC* shortCaption = NULL;
-
-    iTimeStamp = TTime(0); // cannot init in constructor because this function can be called on an existing CApaAppData object
+	{
+	HBufC* caption = NULL;
+	HBufC* shortCaption = NULL;
 
-    if(iRegistrationFile)
-        {
-        CApaAppInfoReader* appInfoReader = NULL;
-        TRAP_IGNORE(appInfoReader = CApaAppInfoReader::NewL(iFs, *iRegistrationFile, iUidType[2])); 
-        if (!appInfoReader)
-            {
-            if (!iFullName)
-                {
-                // assume that if iFullName is NULL, this method has been called as part
-                // of constructing a new app data object. The CApaAppInfoReader derived object
-                // could not be created, therefore we have no way to determine the full filename
-                // of the app binary, so give up
-                return KErrNoMemory;
-                }
-            }
-        else
-            {
-            TBool readSuccessful=EFalse;
-            TRAP_IGNORE(readSuccessful= appInfoReader->ReadL());
+	iTimeStamp = TTime(0); // cannot init in constructor because this function can be called on an existing CApaAppData object
 
-            HBufC* const appBinaryFullName = appInfoReader->AppBinaryFullName();
-            if (appBinaryFullName)
-                {
-                delete iFullName;
-                iFullName = appBinaryFullName;
-                }
-                
-            if (!iFullName)
-                {
-                delete appInfoReader;
-                return KErrNoMemory;
-                }
-                
-            // if this object has just been constructed, iUidType is currently the TUidType
-            // of the registration file, it should be the TUidType of the app binary file
-            TUidType uidType = appInfoReader->AppBinaryUidType();
-            if (uidType[1].iUid != KNullUid.iUid)
-                iUidType = uidType;
-
-            // must get captions regardless of value of readSuccessful,
-            // because the V1 reader might have read captions
-            // this is done to maintain behavioural compatibility with V1
-            caption = appInfoReader->Caption();
-            shortCaption = appInfoReader->ShortCaption();
-
-            CApaAppIconArray* icons = appInfoReader->Icons();
-            if(icons)
-                {
-                delete iIcons;
-                iIcons = icons;
-                iIconLoader = appInfoReader->IconLoader();
-                }
-            else
-                {           
-                TRAPD(err, icons = CApaAppIconArray::NewL());
-                if(err == KErrNone)
-                    {
-                    delete iIcons;
-                    iIcons = icons;
-                    }
-                }
-                
-            iTimeStamp = appInfoReader->TimeStamp();
-            delete iLocalisableResourceFileName;
-            iLocalisableResourceFileName = appInfoReader->LocalisableResourceFileName();
-            iLocalisableResourceFileTimeStamp = appInfoReader->LocalisableResourceFileTimeStamp();
+	if(iRegistrationFile)
+		{
+		CApaAppInfoReader* appInfoReader = NULL;
+		TRAP_IGNORE(appInfoReader = CApaAppInfoReader::NewL(iFs, *iRegistrationFile, iUidType[2]));	
+		if (!appInfoReader)
+			{
+			if (!iFullName)
+				{
+				// assume that if iFullName is NULL, this method has been called as part
+				// of constructing a new app data object. The CApaAppInfoReader derived object
+				// could not be created, therefore we have no way to determine the full filename
+				// of the app binary, so give up
+				return KErrNoMemory;
+				}
+			}
+		else
+			{
+			TBool readSuccessful=EFalse;
+			TRAP_IGNORE(readSuccessful= appInfoReader->ReadL());
 
-            const TBool isNonNativeApp = 
-                (TParsePtrC(*iRegistrationFile).Path().CompareF(KLitPathForNonNativeResourceAndIconFiles) == 0);
-                
-            if (isNonNativeApp)
-                {
-                // In the case of a non-native app, the resource file has been prefixed with a
-                // TCheckedUid, the second of whose UIDs is the non-native application type uid.
-                TEntry entry;
-                const TInt error=iFs.Entry(*iRegistrationFile, entry);
-                if (error!=KErrNone)
-                    {
-                    delete appInfoReader;
-                    return error;
-                    }
-                    
-                __ASSERT_DEBUG(entry.iType[0].iUid==KUidPrefixedNonNativeRegistrationResourceFile, Panic(EPanicUnexpectedUid));
-                iNonNativeApplicationType=entry.iType[1];
-                }
-
-            delete iOpaqueData;
-            iOpaqueData = appInfoReader->OpaqueData();
-
-            if (readSuccessful)
-                {
-                appInfoReader->Capability(iCapabilityBuf);
-
-                iDefaultScreenNumber = appInfoReader->DefaultScreenNumber();
+			HBufC* const appBinaryFullName = appInfoReader->AppBinaryFullName();
+			if (appBinaryFullName)
+				{
+				delete iFullName;
+				iFullName = appBinaryFullName;
+				}
+				
+			if (!iFullName)
+				{
+				delete appInfoReader;
+				return KErrNoMemory;
+				}
+				
+			// if this object has just been constructed, iUidType is currently the TUidType
+			// of the registration file, it should be the TUidType of the app binary file
+			TUidType uidType = appInfoReader->AppBinaryUidType();
+			if (uidType[1].iUid != KNullUid.iUid)
+				iUidType = uidType;
 
-                delete iIconFileName;
-                iIconFileName = appInfoReader->IconFileName();
-                iIconFileTimeStamp = appInfoReader->IconFileTimeStamp();
-                iNonMbmIconFile = appInfoReader->NonMbmIconFile();
-                iNumOfAppIcons = appInfoReader->NumOfAppIcons();
-                iApplicationLanguage = appInfoReader->AppLanguage();
-                        
-                // views
-                iViewDataArray->ResetAndDestroy();
-                CArrayPtrFlat<CApaAppViewData>* viewDataArray = appInfoReader->Views();
-                if (viewDataArray)
-                    {
-                    delete iViewDataArray;
-                    iViewDataArray = viewDataArray;
-                    
-                    if(!iIconLoader && ViewMbmIconsRequireLoading())
-                        {
-                        //if VIEW_DATA contains a MBM icon we need to initialize iIconLoader
-                        iIconLoader = appInfoReader->IconLoader();
-                        }
-                    }
+			// must get captions regardless of value of readSuccessful,
+			// because the V1 reader might have read captions
+			// this is done to maintain behavioural compatibility with V1
+			caption = appInfoReader->Caption();
+			shortCaption = appInfoReader->ShortCaption();
 
-                // owned files
-                iOwnedFileArray->Reset();
-                CDesCArray* const ownedFileArray = appInfoReader->OwnedFiles();
-                if (ownedFileArray)
-                    {
-                    delete iOwnedFileArray;
-                    iOwnedFileArray = ownedFileArray;
-                    }
-                
-                UpdateServiceArray(appInfoReader->ServiceArray(iIndexOfFirstOpenService));
-                }
-
-            delete appInfoReader;
-            }
-        }
-        
-    if (!caption)
-        {
-        TParsePtrC parse (*iFullName);
-        caption = parse.Name().Alloc();
-        }
-
-    // Put the captions into place
-    if (caption)
-        {
-        if (!shortCaption)
-            {
-            shortCaption = caption->Alloc();
-            if (!shortCaption)
-                {
-                delete caption;
-                caption = NULL;
-                }
-            }
+			CApaAppIconArray* icons = appInfoReader->Icons();
+			if(icons)
+				{
+				delete iIcons;
+				iIcons = icons;
+				iIconLoader = appInfoReader->IconLoader();
+				}
+			else
+				{			
+				TRAPD(err, icons = CApaAppIconArray::NewL());
+				if(err == KErrNone)
+					{
+					delete iIcons;
+					iIcons = icons;
+					}
+				}
+				
+			iTimeStamp = appInfoReader->TimeStamp();
+			delete iLocalisableResourceFileName;
+			iLocalisableResourceFileName = appInfoReader->LocalisableResourceFileName();
+			iLocalisableResourceFileTimeStamp = appInfoReader->LocalisableResourceFileTimeStamp();
 
-        delete iCaption;
-        iCaption = caption;
-        delete iShortCaption;
-        iShortCaption = shortCaption;
-        }
-
-    return caption ? KErrNone : KErrNoMemory;
-    }
-
-
-/** Returns true if app info was provided by a registration file
-
-@return true if app info was provided by a registration file
-*/
-EXPORT_C TBool CApaAppData::RegistrationFileUsed() const
-    {
-    return iRegistrationFile != NULL;
-    }
-
-/** Returns the full filename of the registration resource file
+			const TBool isNonNativeApp = 
+				(TParsePtrC(*iRegistrationFile).Path().CompareF(KLitPathForNonNativeResourceAndIconFiles) == 0);
+				
+			if (isNonNativeApp)
+				{
+				// In the case of a non-native app, the resource file has been prefixed with a
+				// TCheckedUid, the second of whose UIDs is the non-native application type uid.
+				TEntry entry;
+				const TInt error=iFs.Entry(*iRegistrationFile, entry);
+				if (error!=KErrNone)
+					{
+					delete appInfoReader;
+					return error;
+					}
+					
+				__ASSERT_DEBUG(entry.iType[0].iUid==KUidPrefixedNonNativeRegistrationResourceFile, Panic(EPanicUnexpectedUid));
+				iNonNativeApplicationType=entry.iType[1];
+				}
 
-@return The full path and filename of the registration resource file.
-@internalTechnology
-*/
-EXPORT_C TPtrC CApaAppData::RegistrationFileName() const
-    {
-    if (iRegistrationFile)
-        {
-        return *iRegistrationFile;
-        }
-    else
-        {
-        return TPtrC(KNullDesC);
-        }
-    }
-
-
-/** Returns the full filename of the localisable resource file
+			delete iOpaqueData;
+			iOpaqueData = appInfoReader->OpaqueData();
 
-@return The full path and filename of the localisable resource file.
-@internalTechnology
-*/
-EXPORT_C TPtrC CApaAppData::LocalisableResourceFileName() const
-    {
-    if (iLocalisableResourceFileName)
-        {
-        return *iLocalisableResourceFileName;
-        }
-    else
-        {
-        return TPtrC(KNullDesC);
-        }
-    }
+			if (readSuccessful)
+				{
+				appInfoReader->Capability(iCapabilityBuf);
 
-
-TBool CApaAppData::Update()
-// returns true if changes were made to the cached data
-    {
-    __APA_PROFILE_START(17);
-    TBool changed=EFalse;
+				iDefaultScreenNumber = appInfoReader->DefaultScreenNumber();
 
-    // Get app info file entry
-    TEntry entry;
-    TInt ret;
-    if (iRegistrationFile != NULL)
-        {
-        ret = iFs.Entry(*iRegistrationFile, entry);
-        if (ret==KErrNone && entry.iModified!=iTimeStamp)
-            {
-            // assume registration file may have changed
-            changed = ETrue;
-            }
-        else
-            {
-            if (iLocalisableResourceFileName)
-                {
-                // see if localisable resource information might have changed
-                TParse parse;
-                ret = parse.SetNoWild(KAppResourceFileExtension, iLocalisableResourceFileName, NULL);
-                if (ret == KErrNone)
-                    {
-                    TFileName resourceFileName(parse.FullName());
-                    TLanguage language;
-                    BaflUtils::NearestLanguageFileV2(iFs, resourceFileName, language);
-                    (void)language;
-                    if (resourceFileName.CompareF(*iLocalisableResourceFileName)!=0)
-                        {
-                        changed = ETrue;
-                        }
-                    else
-                        {
-                        ret = iFs.Entry(*iLocalisableResourceFileName, entry);
-                        if ((ret==KErrNotFound && iLocalisableResourceFileTimeStamp!=TTime(0)) ||
-                            (ret==KErrNone && entry.iModified!=iLocalisableResourceFileTimeStamp))
-                            {
-                            changed = ETrue;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    if (changed)
-        {
-        // re-read data
-        // Ignore result, nothing we can do in case failure
-        // and the old values should be preserved
-        const TInt ignore = ReadApplicationInformationFromResourceFiles();
-        } //lint !e529 Symbol 'ignore' not subsequently referenced
-        
-    else 
-        {
-        if (iIconFileName)
-            {
-            ret = iFs.Entry(*iIconFileName, entry);
-            // See if the icon file has been "modified"
-            // It could have been replaced with a differnt version, deleted or added 
-            // if the icon file specified in the resource was missing
-            if ((ret==KErrNotFound && iIconFileTimeStamp!=TTime(0)) ||
-                    (ret==KErrNone && entry.iModified!=iIconFileTimeStamp))
-                    {
-                    // Assume the icon file has changed
-                    iIconFileTimeStamp = entry.iModified;
-                    changed = ETrue;
-                    }
-            }
-        }
+				delete iIconFileName;
+				iIconFileName = appInfoReader->IconFileName();
+				iIconFileTimeStamp = appInfoReader->IconFileTimeStamp();
+				iNonMbmIconFile = appInfoReader->NonMbmIconFile();
+				iNumOfAppIcons = appInfoReader->NumOfAppIcons();
+				iApplicationLanguage = appInfoReader->AppLanguage();
+						
+				// views
+				iViewDataArray->ResetAndDestroy();
+				CArrayPtrFlat<CApaAppViewData>* viewDataArray = appInfoReader->Views();
+				if (viewDataArray)
+					{
+					delete iViewDataArray;
+					iViewDataArray = viewDataArray;
+					
+					if(!iIconLoader && ViewMbmIconsRequireLoading())
+					    {
+					    //if VIEW_DATA contains a MBM icon we need to initialize iIconLoader
+					    iIconLoader = appInfoReader->IconLoader();
+					    }
+					}
 
-    __APA_PROFILE_END(17);
-    return changed;
-    }
+				// owned files
+				iOwnedFileArray->Reset();
+				CDesCArray* const ownedFileArray = appInfoReader->OwnedFiles();
+				if (ownedFileArray)
+					{
+					delete iOwnedFileArray;
+					iOwnedFileArray = ownedFileArray;
+					}
+				
+				UpdateServiceArray(appInfoReader->ServiceArray(iIndexOfFirstOpenService));
+				}
 
-EXPORT_C TBool CApaAppData::IsPending() const
-/* Returns true if the app info is not yet updated by the current scan. */
-    {
-    return (iIsPresent==CApaAppData::EPresentPendingUpdate 
-        || iIsPresent==CApaAppData::ENotPresentPendingUpdate);
-    }
-
-EXPORT_C TUid CApaAppData::NonNativeApplicationType() const
-/** @internalComponent */
-    {
-    return iNonNativeApplicationType;
-    }
+			delete appInfoReader;
+			}
+		}
+		
+	if (!caption)
+		{
+		TParsePtrC parse (*iFullName);
+		caption = parse.Name().Alloc();
+		}
 
-void CApaAppData::SetAppPending()
-    {
-    if (iIsPresent == CApaAppData::ENotPresent 
-        || iIsPresent == CApaAppData::ENotPresentPendingUpdate)
-        {
-        iIsPresent = CApaAppData::ENotPresentPendingUpdate;
-        }
-    else
-        {
-        iIsPresent = CApaAppData::EPresentPendingUpdate;
-        }
-    }
-#endif
+	// Put the captions into place
+	if (caption)
+		{
+		if (!shortCaption)
+			{
+			shortCaption = caption->Alloc();
+			if (!shortCaption)
+				{
+				delete caption;
+				caption = NULL;
+				}
+			}
 
-EXPORT_C TApaAppEntry CApaAppData::AppEntry() const
-/** Constructs an application entry based on this object.
+		delete iCaption;
+		iCaption = caption;
+		delete iShortCaption;
+		iShortCaption = shortCaption;
+		}
 
-@return The application entry. */
-    {
-    return TApaAppEntry(iUidType,*iFullName);
-    }
+	return caption ? KErrNone : KErrNoMemory;
+	}
 
 EXPORT_C CApaAppData::~CApaAppData()
 // Just delete components, NOT iNext (next CApaAppData in the list).
@@ -779,20 +465,17 @@
 		}
 	delete iOwnedFileArray;
 	delete iIconFileName;
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
 	delete iLocalisableResourceFileName;
-    delete iRegistrationFile;	
-#endif	
 	if (iServiceArray)
 		{
 		CleanupServiceArray(iServiceArray);
 		iServiceArray = NULL;
 		}
 	delete iOpaqueData;
+	delete iRegistrationFile;
 	iNext = NULL;
 	}
 
-
 void CApaAppData::UpdateServiceArray(CArrayFixFlat<TApaAppServiceInfo>* aNewServiceArray)
 	{
 	// clear out any existing service info
@@ -893,6 +576,14 @@
 	return iIcons->IconSizesL();
 	}
 
+EXPORT_C TApaAppEntry CApaAppData::AppEntry() const
+/** Constructs an application entry based on this object.
+
+@return The application entry. */
+	{
+	return TApaAppEntry(iUidType,*iFullName);
+	}
+
 
 EXPORT_C void CApaAppData::Capability(TDes8& aCapabilityBuf)const
 /** Gets the application's capabilities.
@@ -923,6 +614,82 @@
 	return iOwnedFileArray;
 	}
 
+TBool CApaAppData::Update()
+// returns true if changes were made to the cached data
+	{
+	__APA_PROFILE_START(17);
+	TBool changed=EFalse;
+
+	// Get app info file entry
+	TEntry entry;
+	TInt ret;
+	if (iRegistrationFile != NULL)
+		{
+		ret = iFs.Entry(*iRegistrationFile, entry);
+		if (ret==KErrNone && entry.iModified!=iTimeStamp)
+			{
+			// assume registration file may have changed
+			changed = ETrue;
+			}
+		else
+			{
+			if (iLocalisableResourceFileName)
+				{
+				// see if localisable resource information might have changed
+				TParse parse;
+				ret = parse.SetNoWild(KAppResourceFileExtension, iLocalisableResourceFileName, NULL);
+				if (ret == KErrNone)
+					{
+					TFileName resourceFileName(parse.FullName());
+					TLanguage language;
+					BaflUtils::NearestLanguageFileV2(iFs, resourceFileName, language);
+					(void)language;
+					if (resourceFileName.CompareF(*iLocalisableResourceFileName)!=0)
+						{
+						changed = ETrue;
+						}
+					else
+						{
+						ret = iFs.Entry(*iLocalisableResourceFileName, entry);
+						if ((ret==KErrNotFound && iLocalisableResourceFileTimeStamp!=TTime(0)) ||
+							(ret==KErrNone && entry.iModified!=iLocalisableResourceFileTimeStamp))
+							{
+							changed = ETrue;
+							}
+						}
+					}
+				}
+			}
+		}
+	if (changed)
+		{
+		// re-read data
+		// Ignore result, nothing we can do in case failure
+		// and the old values should be preserved
+		const TInt ignore = ReadApplicationInformationFromResourceFiles();
+		} //lint !e529 Symbol 'ignore' not subsequently referenced
+		
+	else 
+		{
+		if (iIconFileName)
+			{
+			ret = iFs.Entry(*iIconFileName, entry);
+			// See if the icon file has been "modified"
+			// It could have been replaced with a differnt version, deleted or added 
+			// if the icon file specified in the resource was missing
+			if ((ret==KErrNotFound && iIconFileTimeStamp!=TTime(0)) ||
+					(ret==KErrNone && entry.iModified!=iIconFileTimeStamp))
+					{
+					// Assume the icon file has changed
+					iIconFileTimeStamp = entry.iModified;
+					changed = ETrue;
+					}
+			}
+		}
+
+	__APA_PROFILE_END(17);
+	return changed;
+	}
 
 EXPORT_C TDataTypePriority CApaAppData::DataType(const TDataType& aDataType) const
 // returns the priority of the data type
@@ -952,6 +719,12 @@
 	}
 
 
+EXPORT_C TBool CApaAppData::IsPending() const
+/* Returns true if the app info is not yet updated by the current scan. */
+	{
+	return (iIsPresent==CApaAppData::EPresentPendingUpdate 
+		|| iIsPresent==CApaAppData::ENotPresentPendingUpdate);
+	}
 
 EXPORT_C TBool CApaAppData::CanUseScreenMode(TInt aScreenMode)
 /** Tests whether the specified screen mode is valid for any of 
@@ -1002,6 +775,51 @@
 	return iDefaultScreenNumber;
 	}
 
+/** Returns true if app info was provided by a registration file
+
+@return true if app info was provided by a registration file
+*/
+EXPORT_C TBool CApaAppData::RegistrationFileUsed() const
+	{
+	return iRegistrationFile != NULL;
+	}
+
+/** Returns the full filename of the registration resource file
+
+@return The full path and filename of the registration resource file.
+@internalTechnology
+*/
+EXPORT_C TPtrC CApaAppData::RegistrationFileName() const
+	{
+	if (iRegistrationFile)
+		{
+		return *iRegistrationFile;
+		}
+	else
+		{
+		return TPtrC(KNullDesC);
+		}
+	}
+
+
+/** Returns the full filename of the localisable resource file
+
+@return The full path and filename of the localisable resource file.
+@internalTechnology
+*/
+EXPORT_C TPtrC CApaAppData::LocalisableResourceFileName() const
+	{
+	if (iLocalisableResourceFileName)
+		{
+		return *iLocalisableResourceFileName;
+		}
+	else
+		{
+		return TPtrC(KNullDesC);
+		}
+	}
+
+
 /** Returns the non-native application opaque data
 
 @return The non-native application opaque data.
@@ -1019,6 +837,11 @@
 		}
 	}
 
+EXPORT_C TUid CApaAppData::NonNativeApplicationType() const
+/** @internalComponent */
+	{
+	return iNonNativeApplicationType;
+	}
 
 /** Returns the full filename of the file containing application icons
 
@@ -1168,9 +991,7 @@
 	 	iIconFileNameFromResourceFile = iIconFileName;
 	 	iIconFileName = NULL;
 	 	iNonMbmIconFileFromResourceFile = iNonMbmIconFile;
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	 	
 	 	iIconFileTimeStampFromResourceFile = iIconFileTimeStamp;
-#endif	 	
 		}
 		
 	iNonMbmIconFile = !CApaAppInfoReader::FileIsMbmWithGenericExtensionL(aFileName);
@@ -1204,19 +1025,29 @@
 		}
 	}
 
+void CApaAppData::SetAppPending()
+	{
+	if (iIsPresent == CApaAppData::ENotPresent 
+		|| iIsPresent == CApaAppData::ENotPresentPendingUpdate)
+		{
+		iIsPresent = CApaAppData::ENotPresentPendingUpdate;
+		}
+	else
+		{
+		iIsPresent = CApaAppData::EPresentPendingUpdate;
+		}
+	}
+
 void CApaAppData::InternalizeL(RReadStream& aReadStream)
 /** Internalizes the appdata from the AppsList.bin file */
 	{
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK    
 	TUint highTime = aReadStream.ReadUint32L();
 	TUint lowTime = aReadStream.ReadUint32L();
 	iTimeStamp = TTime(MAKE_TINT64(highTime, lowTime));
-	
+
 	highTime = aReadStream.ReadUint32L();
 	lowTime = aReadStream.ReadUint32L();
 	iIconFileTimeStamp = TTime(MAKE_TINT64(highTime, lowTime));
-#endif
-	
 	iCaption = HBufC::NewL(aReadStream, KMaxFileName);	// Caption
 	iShortCaption = HBufC::NewL(aReadStream, KMaxFileName);	// Shortcaption
 	iFullName = HBufC::NewL(aReadStream, KMaxFileName);		// Filename of application binary
@@ -1230,9 +1061,7 @@
 	iUidType = TUidType(uid1, uid2, uid3);	// Application UID
 	
 	aReadStream >> iCapabilityBuf;
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 	
 	iRegistrationFile = HBufC::NewL(aReadStream, KMaxFileName);	// Registration Filename
-#endif	
 	iDefaultScreenNumber = aReadStream.ReadUint32L();	// Default Screen number
 	iNumOfAppIcons = aReadStream.ReadInt32L();	// No. of icons
 	iNonMbmIconFile = aReadStream.ReadUint32L();
@@ -1263,7 +1092,6 @@
 		TRAP_IGNORE(iIcons = CApaAppIconArray::NewDefaultIconsL()); // Creates and Loads Default Icons.
 		}
 
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
 	HBufC* localisableResourceFileName = HBufC::NewL(aReadStream, KMaxFileName);	// Registration Filename
 	if (*localisableResourceFileName != KNullDesC)
 		iLocalisableResourceFileName = localisableResourceFileName;
@@ -1273,13 +1101,10 @@
 	highTime = aReadStream.ReadUint32L();
 	lowTime = aReadStream.ReadUint32L();
 	iLocalisableResourceFileTimeStamp = TTime(MAKE_TINT64(highTime, lowTime));	// Localisable file timestamp
-#endif
-	
+
 	iApplicationLanguage = (TLanguage)aReadStream.ReadInt32L();	// Application Language
 	iIndexOfFirstOpenService = aReadStream.ReadUint32L();		// Index of first open service
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 	
 	iNonNativeApplicationType.iUid = aReadStream.ReadUint32L();
-#endif
 
 	HBufC8* opaqueData = HBufC8::NewL(aReadStream, KMaxFileName);	// Opaque Data
 	if (*opaqueData != KNullDesC8)
@@ -1378,7 +1203,6 @@
 
 void CApaAppData::ExternalizeL(RWriteStream& aWriteStream) const
 	{
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK     
 	aWriteStream.WriteUint32L(I64HIGH(iTimeStamp.Int64()));
 	aWriteStream.WriteUint32L(I64LOW(iTimeStamp.Int64()));
 
@@ -1392,7 +1216,6 @@
 		aWriteStream.WriteUint32L(I64HIGH(iIconFileTimeStamp.Int64()));
 		aWriteStream.WriteUint32L(I64LOW(iIconFileTimeStamp.Int64()));
 		}
-#endif	
 	
 	if (iCaptionFromResourceFile) // Caption present in the resource file would be externalized if the one in applist has dynamically changed
 		{
@@ -1415,9 +1238,7 @@
 		aWriteStream << iUidType[i];	// Uid Type
 
 	aWriteStream << iCapabilityBuf;
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 	
 	aWriteStream << RegistrationFileName();	// Registration filename
-#endif	
 	aWriteStream.WriteUint32L(iDefaultScreenNumber);	// Default screen number
 
 	if (iIconFileNameFromResourceFile)
@@ -1432,20 +1253,17 @@
 		aWriteStream.WriteUint32L(iNonMbmIconFile);
 		aWriteStream << IconFileName();
 		}
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+
 	aWriteStream << LocalisableResourceFileName();
 
 	aWriteStream.WriteUint32L(I64HIGH(iLocalisableResourceFileTimeStamp.Int64()));
 	aWriteStream.WriteUint32L(I64LOW(iLocalisableResourceFileTimeStamp.Int64()));
-#endif	
 
 	aWriteStream.WriteInt32L(iApplicationLanguage);
 
 	aWriteStream.WriteUint32L(iIndexOfFirstOpenService);
 
-#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
 	aWriteStream.WriteUint32L(iNonNativeApplicationType.iUid);
-#endif
 
 	aWriteStream << OpaqueData();