--- a/javamanager/javabackup/midp2backup_usif/src.s60/javascrbackuputil.cpp Wed Sep 15 12:05:25 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1014 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CScrBackupUtil
-*
-*/
-
-#include "javascrbackuputil.h"
-#include "midp2backupdataids.h"
-
-#include "logger.h"
-#include "javasymbianoslayer.h" // for CleanupResetAndDestroyPushL
-
-#include <scs/nullstream.h>
-#include <e32cmn.h>
-#include <apaid.h> //for TApaAppCapability::ENonNative
-#include <e32def.h>
-
-using namespace java::backup;
-using namespace Usif;
-
-// Properties registered to SCR.
-_LIT(KMIDletName, "MIDlet-Name");
-_LIT(KUid, "Uid");
-_LIT(KMediaId, "Media-Id");
-_LIT(KMIDletInfoURL, "MIDlet-Info-URL");
-_LIT(KMIDletDescription, "MIDlet-Description");
-_LIT(KDownloadURL, "Download-URL");
-_LIT(KSettingsPlugin, "SettingsName");
-_LIT(KMIDletDeletionConformation, "MIDlet-Delete-Confirm");
-
-_LIT(KDomainCategory,"Domain-Category");
-
-
-CScrBackupUtil* CScrBackupUtil::NewL()
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: NewL()");
-
- CScrBackupUtil *self = CScrBackupUtil::NewLC();
-
- CleanupStack::Pop(self);
-
- LOG(EBackup,EInfo," <--- CScrBackupUtil: NewL()");
- return self;
- }
-
-
-CScrBackupUtil* CScrBackupUtil::NewLC()
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: NewLC");
- CScrBackupUtil *self = new(ELeave) CScrBackupUtil();
- CleanupStack::PushL(self);
- self->ConstructL();
- LOG(EBackup,EInfo," <--- CScrBackupUtil: NewLC");
- return self;
- }
-
-CScrBackupUtil::CScrBackupUtil():iPtrToWriteBuffer(NULL,0)
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: CScrBackupUtil");
- LOG(EBackup,EInfo," <--- CScrBackupUtil: CScrBackupUtil");
- }
-
-
-void CScrBackupUtil::ConstructL()
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: ConstructL ");
-
- //will be incremented as and when needed
- iRemainingInfo = HBufC8::NewL(4096);//TODO :need to change it to the total size of the the attribute
- //iPtrToWriteBuffer = ((const_cast<TUint8*>(iRemainingInfo->Ptr())));// need to do this coz when fun end and goes to fetch next 4096 bytes i lose it
- iPtrToWriteBuffer.Set(iRemainingInfo->Des());
- iIsFristCall = ETrue;
-
- iState = EIsFetchCompleteInfo;
- iIsToWriteInStream = ETrue;
- LOG(EBackup,EInfo," <--- CScrBackupUtil: ConstructL()");
- }
-void CScrBackupUtil::ConnectScrL()
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: ConnectScrL()");
- iScr = new RSoftwareComponentRegistry();
- if (NULL == iScr)
- {
- ELOG(EBackup,"Creating RSoftwareComponentRegistry failed");
- User::Leave(KErrGeneral);
- }
-
- TInt err = iScr->Connect();
- if (KErrNone != err)
- {
- ELOG1(EBackup,"Connecting to RSoftwareComponentRegistry failed, error %d",err);
- //TODO need to see can we afford leaving here ;)
- User::Leave(err);
- }
- LOG(EBackup,EInfo," <--- CScrBackupUtil: ConnectScrL()");
- }
-void CScrBackupUtil::ExtractUidAndComponentIdL(RArray<Usif::TComponentId>& componentIds,RArray<TInt>& uids,TInt& ComponentsCount)
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: ExtractUidAndComponentId()");
- CComponentFilter* filter;
- CPropertyEntry* property;
- filter = CComponentFilter::NewLC();
- //Set the filter for software type Usif::KSoftwareTypeJava and ftech the Ids
- filter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
- TRAPD(error,iScr->GetComponentIdsL(componentIds,filter));
- if(error)
- {
- ELOG(EBackup,"Failed to get the components ID");
- }
- CleanupStack::PopAndDestroy(filter);
- // fetch the no. of component from the given RArray
- ComponentsCount = componentIds.Count();
- // No use of Component Ids as such as they are used by SCR internally
- //so exctracted the UID of of each component
- for(TInt i = 0 ;i < ComponentsCount ; i++)
- {
-
- property = iScr->GetComponentPropertyL(componentIds.operator [](i),KUid());
- if (property->PropertyType() == CPropertyEntry::EIntProperty)
- {
- TInt uid = ((CIntPropertyEntry*)property)->IntValue();
- uids.AppendL(uid);
-
- }
- else
- {
- //Error
- }
-
- delete property;
- property = NULL;
-
- }
- LOG(EBackup,EInfo," <--- CScrBackupUtil: ExtractUidAndComponentId()");
- }
-void CScrBackupUtil::BackupScrDataL(RDesWriteStream& aStream, TBool& aBackupNotFinished, TInt& aBufferSpaceLeft)
- {
- LOG(EBackup,EInfo," ---> CScrBackupUtil: BackupScrDataL()");
-
- iBufferSpaceLeft = aBufferSpaceLeft ;
-
- if(iIsFristCall)
- {
-
- // to get no. of components need to keep a flag that its called only once
- ConnectScrL();
-
- ExtractUidAndComponentIdL(iComponentIds,iUids,iNumberOfComponents);
-
- //write the no. of components so that it will help us in restoration time
- aStream.WriteInt32L(iNumberOfComponents);
- iBufferSpaceLeft -= sizeof(TInt32);
-
- //all the ids of the midlets that are to be backedup and the size of the rarray with holds the Ids
- TPckgBuf<RArray<TInt> > ids(iUids);
- TInt size = ComputeSizeL(ids);
- aStream.WriteInt32L(size);
- iBufferSpaceLeft -= sizeof(TInt32);
-
- aStream.WriteL(ids);
-
- iBufferSpaceLeft = iBufferSpaceLeft - size;
-
- iIsFristCall = EFalse;
- }
-
- for( i ; i < iComponentIds.Count() ;)
- {
- if(iState == EIsFetchCompleteInfo)
- {
-
- TInt at = iComponentIds.operator[](i);
-
- //Temp stream in which all attributes are backed up
- RDesWriteStream writeStream;
- writeStream.Open(iPtrToWriteBuffer);
-
- GetComponentInfoL(at,writeStream);
-
- writeStream.CommitL();
- iLengthOfString = iPtrToWriteBuffer.Length();
-
- iWriteToStream = ETrue;
-
- // write the size, Used while restoring
- aStream.WriteInt32L(iLengthOfString);
- iBufferSpaceLeft = iBufferSpaceLeft - sizeof(TInt);
-
-
- }
- if(iState == EIsWriteCompleteInfo)
- {
-
- //writing the remaining information into the new buffer
- if(iBufferToWriteNextTime)
- {
- aStream.WriteL(iPtrToWriteBuffer,iRemainingBuffer);
- aStream.CommitL();
- LOG(EBackup, EInfo, "attributes written fully in the stream fetching for next component");
-
- iBufferSpaceLeft = iBufferSpaceLeft - iRemainingBuffer;
-
- iBufferToWriteNextTime = EFalse;
- iState = EIsFetchCompleteInfo;
-
- iLengthOfString = 0; // to maintain the loop
-
- iWriteToStream = EFalse;
- i++;
- }
- // if the whole string cannot be writen, write part of it
- if (iLengthOfString > iBufferSpaceLeft && !iBufferToWriteNextTime)
- {
-
- iRemainingBuffer = iLengthOfString - iBufferSpaceLeft;
-
- aStream.WriteL(iPtrToWriteBuffer,iBufferSpaceLeft);
- aStream.CommitL();
-
- iBufferToWriteNextTime = ETrue;
- break;
- }
- // else write the complete string
- else if(iWriteToStream)
- { aStream.WriteL(iPtrToWriteBuffer,iLengthOfString);
-
- aStream.CommitL();
- iBufferSpaceLeft = iBufferSpaceLeft - iLengthOfString;
- iState = EIsFetchCompleteInfo;
- iLengthOfString = 0; // to maintain the loop
- i++;
- }
-
- }
- }
- // making it false to backup next component next time
- if(i >= iComponentIds.Count())
- aBackupNotFinished = EFalse;
-
- }
-
-template <typename T>
-TInt CScrBackupUtil::ComputeSizeL(const T &aObject)
- {
- LOG(EBackup,EInfo," ---> computeSize() ");
- TInt size(0);
- RNullWriteStream nullstream;
- CleanupClosePushL(nullstream);
- nullstream << aObject;
- nullstream.CommitL();
- size = nullstream.BytesWritten();
-
- CleanupStack::PopAndDestroy(&nullstream);
- LOG(EBackup,EInfo," <--- computeSize() ");
- return size;
-
-
- }
-void CScrBackupUtil::GetComponentInfoL(TComponentId aComponentId ,RDesWriteStream& aStream )
- {
-
- LOG(EBackup,EInfo," ---> GetComponentInfo() ");
-
- TInt j = 0 ;
- CPropertyEntry* property;
- CComponentEntry* entries = CComponentEntry::NewL();
- CleanupStack::PushL(entries);
- TLanguage language =KNonLocalized;
-
- TBool result = iScr->GetComponentL(aComponentId,*entries,language);
- entries->ExternalizeL(aStream);
-
- CleanupStack::PopAndDestroy(entries);
- TBool isComponentPresent = iScr->IsComponentPresentL(aComponentId);
- aStream.WriteInt8L(isComponentPresent);
-
-
- // Localizable Component info
- RPointerArray<CLocalizableComponentInfo> localizableComponentInfo;
- iScr->GetComponentLocalizedInfoL(aComponentId,localizableComponentInfo);
- aStream.WriteInt32L(localizableComponentInfo.Count());
-
-
- for(j ; j < localizableComponentInfo.Count(); j++)
- {
- (localizableComponentInfo.operator [](j))->ExternalizeL(aStream);
-
- }
-
- // Properties
- // extracted the UID
- property = iScr->GetComponentPropertyL(aComponentId,KUid());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
- else
- {
- // need to return or have to proceed
- }
- // Exctracted Domain - Category
- property = iScr->GetComponentPropertyL(aComponentId,KDomainCategory());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
- delete property;
- property = NULL;
- }
- // Exctracted Media ID
- property = iScr->GetComponentPropertyL(aComponentId,KMediaId());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
- // Exctracted Setings plugin name
- property = iScr->GetComponentPropertyL(aComponentId,KSettingsPlugin());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
-
- // Optional Properties
- // extracted info URL
- property = iScr->GetComponentPropertyL(aComponentId,KMIDletInfoURL());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
- else // as its optional property so could be NULL
- {
- aStream.WriteInt8L(NULL);
- }
-
- // extracted midlet description
- property = iScr->GetComponentPropertyL(aComponentId,KMIDletDescription());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
- else // as its optional property so could be NULL
- {
- aStream.WriteInt8L(NULL);
- }
- // extracted midlet DeletionConformation
- property = iScr->GetComponentPropertyL(aComponentId,KMIDletDeletionConformation());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
- else // as its optional property so could be NULL
- {
- aStream.WriteInt8L(NULL);
- }
- //extracted midlet DN URL
- property = iScr->GetComponentPropertyL(aComponentId,KDownloadURL());
- if (NULL != property)
- {
- property->ExternalizeL(aStream);
-
-
- delete property;
- property = NULL;
- }
- else // as its optional property so could be NULL
- {
- aStream.WriteInt8L(NULL);
- }
-
-
- // backing up files corresponds to component
- RSoftwareComponentRegistryFilesList fileList;
- CleanupClosePushL(fileList);
- TInt count = iScr->GetComponentFilesCountL(aComponentId);
- TInt k = 0;
- RPointerArray<HBufC> files;
- fileList.OpenListL(*iScr,aComponentId);
- fileList.NextFileSetL(count,files);
- aStream.WriteInt32L(files.Count());
- CleanupStack::PopAndDestroy(&fileList);//filelist
-
- for( k ; k < files.Count(); k++)
- {
- HBufC* temp = files.operator [](k);
- aStream.WriteInt32L(temp->Length());
- aStream.WriteL(temp->Des());
- }
-
-
- RArray<TUid> noOfApps;
- HBufC* appIcon;
- TAppRegInfo appInfo;
- iScr->GetAppUidsForComponentL(aComponentId,noOfApps);
- RRegistrationInfoForApplication regInfoIcon;
- CleanupClosePushL(regInfoIcon);
- RApplicationRegistrationInfo regInfoCaption;
- CleanupClosePushL(regInfoCaption);
-
-
- //backing up the no. of apps
- aStream.WriteInt32L(noOfApps.Count());
-
-
- for(j = 0 ; j < noOfApps.Count(); j++ )
- {
- regInfoIcon.OpenL(*iScr,noOfApps.operator [](j));
- regInfoCaption.OpenL(*iScr);
-
- //check if language is imp to give as an argument\
- // Language extracted
- TLanguage language = regInfoIcon.ApplicationLanguageL();
- // Language backed up
- aStream.WriteInt32L(language);
-
- // AppUID extracted
- TUid appUid = noOfApps[j];
- // AppUID backed up
- aStream.WriteInt32L(appUid.iUid);
-
- //App caption extracted
- regInfoCaption.GetAppInfoL(appUid,appInfo,language);
- TAppCaption caption = appInfo.Caption();
- caption.Trim();// would give the acctual size of content
- //App caption backed up
- aStream.WriteL(caption);
-
- //AppIcon path extracted
- regInfoIcon.GetAppIconL(appIcon);
- //AppIcon path backed up
- aStream.WriteL(appIcon->Des());
-
-
- //need to backup no. of icons to needed for registrating application
- TInt noOfIcons = regInfoIcon.NumberOfOwnDefinedIconsL();
- aStream.WriteInt32L(noOfIcons);
- }
- CleanupStack::PopAndDestroy();//regInfoIcon
- CleanupStack::PopAndDestroy();//regInfoCaption
- //regInfoIcon.Close();
- //regInfoCaption.Close();
-
- iState = EIsWriteCompleteInfo;
-
- LOG(EBackup,EInfo," <--- GetComponentInfo() ");
-
- }
-void CScrBackupUtil::RestoreScrDataL(RDesReadStream& aStream, TInt& aRestoreState, TInt& aBufferSpaceLeft)
- {
- LOG(EBackup,EInfo," ---> RestoreScrDataL() ");
- if(iIsFristCall)
- {
- ConnectScrL();
- TInt j = 0;
- TInt presentComponentsCount;
- RArray<Usif::TComponentId> presentComponentsIds;
- iBufferSpaceLeft = aBufferSpaceLeft;
- //aStream.r
- //reading components count
- iNumberOfComponents = aStream.ReadInt32L();
- iBufferSpaceLeft = iBufferSpaceLeft - sizeof(TInt32);
-
- //reading the size of the TPckgBuf<RArray<TComponentId>>
- TInt size = aStream.ReadInt32L();
- iBufferSpaceLeft = iBufferSpaceLeft - sizeof(TInt32);
-
- //reading TPckgBuf<RArray<TComponentId>>
- HBufC* temp = HBufC::NewLC(aStream , size);
-
- TPckgBuf<RArray<TInt> > ids;
- //extracting RArray from TPckgBuf<RArray<TUids>>
- ids.Append(temp->Des());
- CleanupStack::PopAndDestroy(temp);
- iUids = ids.operator ()();// populated iUids
- iBufferSpaceLeft = iBufferSpaceLeft - size;
- iNumberOfComponents = iUids.Count();
-
-
- ExtractUidAndComponentIdL(presentComponentsIds,iPresentUids,presentComponentsCount);
-
- // calculating the midlets to be deleted from SCR
- for(j ; j <= iNumberOfComponents ; j++ )
- {
- TInt id = NULL;
- TInt index = 0;
- id = iUids.operator [](j);
- index = iPresentUids.Find(iUids.operator [](j));
- if(index != NULL)
- {
- presentComponentsIds.Remove(index);// removeing the app that is present in SCr and backed up too
- iPresentUids.Remove(index);// TODO : check if right component Id is removed
- }
- }
-
-
- iPresentUids.Compress(); // need to see if this works
- presentComponentsIds.Compress();// contains the uids that has to be deleted
- //Updated the count
- presentComponentsCount = iPresentUids.Count();
- for(j = 0 ; j <= presentComponentsCount ; j++ )
- {
- TRAPD(err ,iScr->DeleteApplicationEntriesL(presentComponentsIds.operator [](j)));
- if (KErrNone == err)
- {
- iScr->DeleteComponentL(presentComponentsIds.operator [](j));
- }
-
- }
-
-
- }
- RDesReadStream readStream;
- readStream.Open(iPtrToWriteBuffer);
- for( i ; i < iComponentIds.Count() ;)
- {
- if(iState == EIsFetchCompleteInfo)
- {
- TUid uid ;
- uid.iUid = iUids.operator [](i);
- SetDataInScrL(uid,readStream);
- i++;
- }
- if(iState == EIsWriteCompleteInfo)
- {
- RDesReadStream readStream;
- readStream.Open(iPtrToWriteBuffer);
- iLengthOfString = aStream.ReadInt32L();
-
-
- //Reading the remaining information into the new buffer
- if(iBufferToWriteNextTime)
- {
- //appened it in the remaing
- HBufC* remainingBuff = HBufC::NewL(iRemainingBuffer);
- TPtr ptr(remainingBuff->Des());
- aStream.ReadL(ptr,iRemainingBuffer);
- iPtrToWriteBuffer.Append(ptr);
- iState = EIsFetchCompleteInfo;
- iLengthOfString = 0; // to maintain the loop
- iWriteToStream = EFalse;
-
-
- }
- if (iLengthOfString > iBufferSpaceLeft && !iBufferToWriteNextTime)
- {
- iRemainingBuffer = iLengthOfString - iBufferSpaceLeft;
- aStream.ReadL(iPtrToWriteBuffer,iBufferSpaceLeft);
- iBufferToWriteNextTime = ETrue;
- break ;
- }
- // Read the complete string
- else if(iWriteToStream)
- {
- aStream.ReadL(iPtrToWriteBuffer,iLengthOfString);
- iBufferSpaceLeft = iBufferSpaceLeft - iLengthOfString;
- iState = EIsFetchCompleteInfo;
- iLengthOfString = 0; // to maintain the loop
-
- }
-
- }
- }
- //take care of restorestate
- // SCR restore is over; Set state to EAppArc
- if(i >= iComponentIds.Count())
- {
- aRestoreState = EAppArc;
- aBufferSpaceLeft = iBufferSpaceLeft;// need to to this coz of last iteration
- }
-
- LOG(EBackup,EInfo," <--- RestoreScrDataL() ");
- }
-void CScrBackupUtil::SetDataInScrL(TUid aUid , RDesReadStream& aStream)
- {
- LOG(EBackup,EInfo," ---> SetDataInScrL() ");
- TInt tempSize = NULL;
- TInt j = 0;
- tempSize = aStream.ReadInt32L();
- CComponentEntry* entries;
- entries = CComponentEntry::NewL();
- CleanupStack::PushL( entries);
- entries->InternalizeL(aStream);
-
-
- TBool isComponentPresent = aStream.ReadInt8L();
-
- // Localizable Component info
- RPointerArray<CLocalizableComponentInfo> localizableComponentInfoArray; // Not owned by me nee to delete in last
- TInt temp = aStream.ReadInt32L();
- for(j ; j <= temp; j++)
- {
- CLocalizableComponentInfo* componentinfo = CLocalizableComponentInfo::NewL(aStream);
- localizableComponentInfoArray.Append(componentinfo);
- }
-
- // now need to set all the properties
- // extracted the UID
- CIntPropertyEntry* property;
- property = (CIntPropertyEntry*)CPropertyEntry::NewL(aStream);
- TInt64 id = property->Int64Value();
- delete property;
-
- //extracted midlet Domain-Catogary
- CLocalizablePropertyEntry* propertyString;
- propertyString =(CLocalizablePropertyEntry*) CPropertyEntry::NewL(aStream);
- HBufC* domainCategory = (propertyString->StrValue()).Alloc();
- delete propertyString;
-
- // Exctracted Media ID
- property = (CIntPropertyEntry*)CPropertyEntry::NewL(aStream);
- TInt64 mediaID = property->Int64Value();
- delete property;
-
- //extracted midlet SettingsValue
- propertyString =(CLocalizablePropertyEntry*) CPropertyEntry::NewL(aStream);
- HBufC* SettingsValue = (propertyString->StrValue()).Alloc();
- delete propertyString;
-
- // Optional Properties
- // extracted info URL
- propertyString = propertyString = (CLocalizablePropertyEntry*)CPropertyEntry::NewL(aStream);
- HBufC* url = (propertyString->StrValue()).Alloc();
- delete propertyString;
-
-
- // extracted midlet description
- propertyString = (CLocalizablePropertyEntry*)CPropertyEntry::NewL(aStream);
- HBufC* midletDescription = (propertyString->StrValue()).Alloc();
- delete propertyString;
-
- // midlet deletion conformation has to be here
- CBinaryPropertyEntry* propertyBinary = (CBinaryPropertyEntry*)CPropertyEntry::NewL(aStream);
- HBufC8* midletDeletionConformation = (propertyBinary->BinaryValue()).Alloc();
- delete propertyBinary;
-
- //extracted midlet DN URL
- propertyString =(CLocalizablePropertyEntry*) CPropertyEntry::NewL(aStream);
- HBufC* dnUrl = (propertyString->StrValue()).Alloc();
- delete propertyString;
-
- //Extracting no. of files registered with a component
- //1st the no. of files
- RPointerArray<HBufC> componentFilesArray;
-
- TInt fileCount = aStream.ReadInt32L();
- //now the files
- for(TInt k = 0 ; k < fileCount ; k++)
- {
- TInt size = aStream.ReadInt32L();
- HBufC* componentFile = HBufC::NewL(aStream,size);
- CleanupStack::PushL( componentFile);
- componentFilesArray.AppendL(componentFile);
- CleanupStack::Pop( componentFile);
- }
-
- //Extracting no. of apps with a component
- TInt noOfApps = aStream.ReadInt32L();
- RPointerArray<CAppInfo> appinfoArray;
- for(j = 0 ; j < noOfApps ; j++ )
- {
- CAppInfo* appinfo = CAppInfo::NewL();
- CleanupStack::PushL( appinfo);// i will not own it after using has to be destroyed
- TLanguage language;
- language = (TLanguage)(aStream.ReadInt32L());
- TUid uid;
- uid.Uid(aStream.ReadInt32L());
-
- TAppCaption caption ;
- aStream.ReadL(caption);
- HBufC* appIcon ;
- TPtr temp(appIcon->Des());
- aStream.ReadL(temp);
- TInt noOfIcons = aStream.ReadInt32L();
-
- appinfo->Set(language,uid,caption,temp,noOfIcons);// TODO: check if it works
- appinfoArray.Append(appinfo);
-
-
-
- }
-
-
- TInt index = iPresentUids.Find(aUid.iUid);
- if(index != NULL)
- { CComponentEntry* entry = CComponentEntry::NewLC();
- TUid uid ;
- uid.Uid(iPresentUids.operator [](index));
- TComponentId componentId = iScr->GetComponentIdForAppL(uid);
- iScr->GetComponentL(componentId,*entry);
- HBufC* versionPresent = entry->Version().AllocLC();
- CleanupStack::PopAndDestroy(entry);
- HBufC* versionBackUpComponent = entries->Version().AllocLC();
- if((versionPresent->CompareC(versionBackUpComponent->Des())))//check version
- {
- //ignore Write a log statement as the midlet is same no need to do any thing :)
- }
- else
- {
- // delete it and thn register it
- TRAPD(err ,iScr->DeleteApplicationEntriesL(componentId));
- if (KErrNone == err)
- {
- iScr->DeleteComponentL(componentId);
- }
- // call register
- TComponentId newComponentId = RegisterComponentL(*entries,uid,url->Des(),midletDescription->Des(),midletDeletionConformation->Des(),dnUrl->Des(),mediaID,domainCategory->Des(),SettingsValue->Des(),componentFilesArray,isComponentPresent,localizableComponentInfoArray);
- for(j=0; j < appinfoArray.Count() ; j++)
- {
- CAppInfo* appInfo = appinfoArray.operator [](j);
-
- RegisterApplicationL(newComponentId,appInfo->GetAppUid(),appInfo->GetCaption(),appInfo->GetAppIcon()->Des(),appInfo->NoOfIcons(),appInfo->GetLanguage());
- CleanupStack::PopAndDestroy(appInfo);
- }
- }
- CleanupStack::PopAndDestroy(versionPresent);
- CleanupStack::PopAndDestroy(versionBackUpComponent);
- }
- else
- {
- //just go register it as its not there in the phone
- TComponentId newComponentId = RegisterComponentL(*entries,aUid,url->Des(),midletDescription->Des(),midletDeletionConformation->Des(),dnUrl->Des(),mediaID,domainCategory->Des(),SettingsValue->Des(),componentFilesArray,isComponentPresent,localizableComponentInfoArray);
- for(j=0; j < appinfoArray.Count() ; j++)
- {
- CAppInfo* appInfo = appinfoArray.operator [](j);
-
- RegisterApplicationL(newComponentId,appInfo->GetAppUid(),appInfo->GetCaption(),appInfo->GetAppIcon()->Des(),appInfo->NoOfIcons(),appInfo->GetLanguage());
- CleanupStack::PopAndDestroy(appInfo);
- }
- }
-
- //CleanupStack::Pop();//componentFilesArray
- CleanupStack::PopAndDestroy( entries);
-
- LOG(EBackup,EInfo," <--- SetDataInScrL() ");
- }
-
-
-TComponentId CScrBackupUtil::RegisterComponentL(CComponentEntry& aEntry ,TUid aUid,TPtr aMidletInfoUrl,
- TPtr aMidletDescription,TPtr8 aMidletDeletionConformation, TPtr aDownloadUrl,TInt64 aMediaId,TPtr aDomainCatogary , TPtr aSettingValue,
- RPointerArray<HBufC>& aComponentFilesArray, TBool aIsComponentPresent,RPointerArray<CLocalizableComponentInfo>& aLocalizableComponentInfoArray)
-{
- LOG(EBackup,EInfo," ---> RegisterComponentL() ");
- HBufC* globalId =( aEntry.GlobalId()).AllocLC();
-
- TComponentId componentId = iScr->AddComponentL(aLocalizableComponentInfoArray,Usif::KSoftwareTypeJava,globalId);
-
-
-
- iScr->SetComponentVersionL(componentId, aEntry.Version());
- //LOG1(EJavaInstaller, EInfo, "RegisterComponentL: version set %s",*version);
-
- iScr->SetIsComponentRemovableL(componentId, aEntry.IsRemovable());
-
-
- iScr->SetIsComponentDrmProtectedL(componentId, aEntry.IsDrmProtected());
-
-
- iScr->SetIsComponentKnownRevokedL(componentId,aEntry.IsKnownRevoked());
-
-
- iScr->SetIsComponentOriginVerifiedL(componentId, aEntry.IsOriginVerified());
-
-
- iScr->SetComponentSizeL(componentId, aEntry.ComponentSize());
-
-
- iScr->SetScomoStateL(componentId,aEntry.ScomoState());
-
-
- iScr->SetIsComponentPresentL(componentId,aIsComponentPresent);
-
-
-
- iScr->SetComponentPropertyL(componentId,KUid(), aUid.iUid);
-
-
- iScr->SetComponentPropertyL(componentId,KMIDletInfoURL(),aMidletInfoUrl);
-
- iScr->SetComponentPropertyL(componentId, KMIDletDescription(), aMidletDescription);
-
- iScr->SetComponentPropertyL(componentId,KMIDletDeletionConformation(),aMidletDeletionConformation);
-
- iScr->SetComponentPropertyL(componentId, KDownloadURL(), aDownloadUrl);
-
- iScr->SetComponentPropertyL(componentId,KDomainCategory(),aDomainCatogary);
-
- iScr->SetComponentPropertyL(componentId, KMediaId(), aMediaId);
-
-
- iScr->SetComponentPropertyL(componentId, KSettingsPlugin(), aSettingValue);
-
-
- CleanupStack::PopAndDestroy(globalId);
-
- TInt fileCount = aComponentFilesArray.Count();
- for (TInt i = 0; i < fileCount; i++)
- {
- HBufC *componentFile = aComponentFilesArray.operator [](i);
- iScr->RegisterComponentFileL(componentId, *componentFile);
- CleanupStack::PopAndDestroy(componentFile);
- }
- LOG(EBackup,EInfo," <--- RegisterComponentL() ");
- return componentId;
-}
-
-void CScrBackupUtil::RegisterApplicationL(TInt aComponentId, TUid aAppUid,
- TAppCaption aAppName, TDesC aIconFilename, TInt aNumberOfIcons,
- TLanguage aLanguages)
- {
- LOG(EBackup,EInfo," ---> RegisterApplicationL() ");
- TFileName appName;
- RPointerArray<HBufC> ownedFileArray; // codescanner::resourcenotoncleanupstack
- RPointerArray<Usif::CServiceInfo> serviceArray; // codescanner::resourcenotoncleanupstack
- RPointerArray<Usif::CPropertyEntry> appPropertiesArray; // codescanner::resourcenotoncleanupstack
- RPointerArray<Usif::CAppViewData> viewDataList; // codescanner::resourcenotoncleanupstack
-
- RPointerArray<Usif::COpaqueData> opaqueDataArray;
- CleanupResetAndDestroyPushL(opaqueDataArray);
- // Write application Uid to opaque data (needed by MIDlet launcher).
- TBuf8<4> opaqueDataBuf; // Opaque data will contain one signed 32-bit int.
- RDesWriteStream writeStream(opaqueDataBuf);
- writeStream.WriteInt32L(aAppUid.iUid);
- writeStream.CommitL();
-
-
-
- COpaqueData *opaqueData = COpaqueData::NewLC(opaqueDataBuf, KUnspecifiedLocale);
- opaqueDataArray.AppendL(opaqueData);
- CleanupStack::Pop(opaqueData);
-
- RPointerArray<Usif::CLocalizableAppInfo> localizableAppInfoList;
- CleanupResetAndDestroyPushL(localizableAppInfoList);
- // Add non-localized application name (caption) and icon.
-
- CCaptionAndIconInfo *captionAndIconInfo = CCaptionAndIconInfo::NewLC(aAppName,aIconFilename,aNumberOfIcons);
-
- CLocalizableAppInfo *locAppInfo = CLocalizableAppInfo::NewLC(/*aShortCaption=*/ KNullDesC,KNonLocalized,
- /*aGroupName=*/ KNullDesC,captionAndIconInfo,viewDataList);
- localizableAppInfoList.AppendL(locAppInfo);
-
- CleanupStack::Pop(locAppInfo);
- CleanupStack::Pop(captionAndIconInfo);
-
- CCaptionAndIconInfo *tmpCaptionAndIconInfo =CCaptionAndIconInfo::NewLC(aAppName,/*aIconFileName=*/ KNullDesC,/*aNumOfAppIcons=*/ 0);
- CLocalizableAppInfo *tmpLocAppInfo = CLocalizableAppInfo::NewLC(/*aShortCaption=*/ KNullDesC,aLanguages,/*aGroupName=*/ KNullDesC,
- tmpCaptionAndIconInfo,/*aViewDataList=*/ viewDataList);
- localizableAppInfoList.AppendL(tmpLocAppInfo);
-
- CleanupStack::Pop(tmpLocAppInfo);
- CleanupStack::Pop(tmpCaptionAndIconInfo);
-
-
-
- // Create application registration data objects.
- TApplicationCharacteristics appCharacteristics;
- appCharacteristics.iAttributes = TApaAppCapability::ENonNative;
- appCharacteristics.iEmbeddability = TApplicationCharacteristics::ENotEmbeddable;
- appCharacteristics.iSupportsNewFile = EFalse;
- appCharacteristics.iAppIsHidden = EFalse;
- appCharacteristics.iLaunchInBackground = EFalse;
-
- CApplicationRegistrationData *appRegData =
- CApplicationRegistrationData::NewLC(ownedFileArray, serviceArray,localizableAppInfoList,appPropertiesArray,opaqueDataArray,
- /*aAppUid=*/ aAppUid, /*aAppFile=*/ appName,/*aCharacteristics=*/ appCharacteristics,/*aDefaultScreenNumber=*/ 0);
-
- LOG(EJavaInstaller, EInfo,"RegisterApplicationL : Called AddApplicationEntryL >>>>>>>>>>>> ");
- iScr->AddApplicationEntryL(aComponentId, *appRegData);
- CleanupStack::PopAndDestroy(appRegData);
-
-
- CleanupStack::Pop(&localizableAppInfoList); // deleted in appRegData destructor
- CleanupStack::Pop(&opaqueDataArray); // deleted in appRegData destructor
-
- LOG(EBackup,EInfo," <--- RegisterApplicationL() ");
- }
-
-CScrBackupUtil::~CScrBackupUtil()
- {
- LOG(EBackup,EInfo," ---> ~CScrBackupUtil() ");
-
- if(iScr)
- {
- iScr->Close();
- delete iScr;
- iScr = NULL;
- }
- if(iRemainingInfo)
- {
- delete iRemainingInfo;
- iRemainingInfo = NULL;
- }
-
- LOG(EBackup,EInfo," <--- ~CScrBackupUtil() ");
- }
-
-CAppInfo* CAppInfo::NewL()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:NewL()");
- CAppInfo *self = CAppInfo::NewLC();
- CleanupStack::Pop(self);
- LOG(EBackup,EInfo," <--- CAppInfo:NewL()");
- return self;
- }
-
-
-CAppInfo* CAppInfo::NewLC()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:NewLC");
- CAppInfo *self = new(ELeave) CAppInfo();
- CleanupStack::PushL(self);
- self->ConstructL();
- LOG(EBackup,EInfo," <---CAppInfo:NewLC");
- return self;
- }
-CAppInfo::CAppInfo()
- {
-
- }
-void CAppInfo::ConstructL()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:ConstructL ");
-
-
-
- LOG(EBackup,EInfo," <--- CAppInfo:ConstructL()");
- }
-CAppInfo::~CAppInfo()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:~CAppInfo() ");
- if(iAppIcon)
- {
- delete iAppIcon;
- }
- LOG(EBackup,EInfo," <--- CAppInfo:~CAppInfo() ");
- }
-
-void CAppInfo::Set(TLanguage language,TUid appUid,Usif::TAppCaption caption,TDesC& appIcon,TInt aNoOfIcons)
- {
- LOG(EBackup,EInfo," ---> CAppInfo:Set() ");
- iLanguage = language;
- iAppUid = appUid;
- iCaption = caption;
- iAppIcon->Des().Copy(appIcon);
- iNoOfIcons = aNoOfIcons;
- LOG(EBackup,EInfo," <--- CAppInfo:Set() ");
-
- }
-TLanguage CAppInfo::GetLanguage()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:GetLanguage() ");
- LOG(EBackup,EInfo," <--- CAppInfo:GetLanguage() ");
- return iLanguage;
- }
-TUid CAppInfo::GetAppUid()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:GetAppUid() ");
- LOG(EBackup,EInfo," <--- CAppInfo:GetAppUid() ");
- return iAppUid;
- }
-Usif::TAppCaption CAppInfo::GetCaption()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:GetCaption() ");
- LOG(EBackup,EInfo," <--- CAppInfo:GetCaption() ");
- return iCaption;
-
- }
-HBufC* CAppInfo::GetAppIcon()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:GetAppIcon() ");
- LOG(EBackup,EInfo," <--- CAppInfo:GetAppIcon() ");
- return iAppIcon;
-
- }
-
-TInt CAppInfo::NoOfIcons()
- {
- LOG(EBackup,EInfo," ---> CAppInfo:NoOfIcons() ");
- LOG(EBackup,EInfo," <--- CAppInfo:NoOfIcons() ");
- return iNoOfIcons;
- }