appfw/apparchitecture/apgrfx/APGCLI.CPP
branchRCL_3
changeset 62 924385140d98
parent 0 2e3d3ce01487
child 63 c2c61fdca848
child 69 dcd4152cfe55
--- a/appfw/apparchitecture/apgrfx/APGCLI.CPP	Thu Aug 19 10:05:08 2010 +0300
+++ b/appfw/apparchitecture/apgrfx/APGCLI.CPP	Tue Aug 31 15:24:25 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1997-2010 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"
@@ -17,6 +17,10 @@
 #include "../apserv/APSCLSV.H"
 #include "../apserv/apsserv.h"
 
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#include "../apgrfx/apgcommonutils.h"
+#endif
+
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 #if !defined(__APA_INTERNAL_H__)
 #include "apainternal.h"
@@ -1547,25 +1551,41 @@
 /** @publishedPartner */
 EXPORT_C void RApaLsSession::RegisterNonNativeApplicationTypeL(TUid aApplicationType, const TDesC& aNativeExecutable)
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK    
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServRegisterNonNativeApplicationType, TIpcArgs(aApplicationType.iUid, &aNativeExecutable)));
+#else
+	(void)aApplicationType; //to make compiler happy
+	(void)aNativeExecutable; 
+    User::Leave(KErrNotSupported);	
+#endif	
 	} //lint !e1762 Suppress member function could be made const
 
 /** @publishedPartner */
 EXPORT_C void RApaLsSession::DeregisterNonNativeApplicationTypeL(TUid aApplicationType)
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK    
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServDeregisterNonNativeApplicationType, TIpcArgs(aApplicationType.iUid)));
+#else
+	(void)aApplicationType;	//to make compiler happy
+    User::Leave(KErrNotSupported); 
+#endif	
 	} //lint !e1762 Suppress member function could be made const
 	
 /** @publishedPartner */
 EXPORT_C void RApaLsSession::PrepareNonNativeApplicationsUpdatesL()
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK    
 	TIpcArgs ipcArgs(0, 0, 0, 0);
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServPrepareNonNativeApplicationsUpdates, ipcArgs));
+#else
+    User::Leave(KErrNotSupported);
+#endif
 	} //lint !e1762 Suppress member function could be made const
 
 /** @publishedPartner */
 EXPORT_C void RApaLsSession::RegisterNonNativeApplicationL(TUid aApplicationType, const TDriveUnit& aDrive, CApaRegistrationResourceFileWriter& aRegistrationResourceFile, CApaLocalisableResourceFileWriter* aLocalisableResourceFile, const RFile* aIconFile)
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK      
 	TIpcArgs ipcArgs(0, 0, 0, 0);
 	RBuf8 ipcParameter0;
 	CleanupClosePushL(ipcParameter0);
@@ -1616,12 +1636,26 @@
 
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServRegisterNonNativeApplication, ipcArgs));
 	CleanupStack::PopAndDestroy(2, &ipcParameter0);
+#else
+	(void) aApplicationType; //to make compiler happy
+	(void) aDrive;
+	(void) aRegistrationResourceFile;
+	(void) aRegistrationResourceFile;
+	(void) aLocalisableResourceFile;
+	(void) aIconFile;	
+    User::Leave(KErrNotSupported);  
+#endif	
 	} //lint !e1762 Suppress member function could be made const
 
 /** @publishedPartner */
 EXPORT_C void RApaLsSession::DeregisterNonNativeApplicationL(TUid aApplication)
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServDeregisterNonNativeApplication, TIpcArgs(aApplication.iUid)));
+#else
+	(void) aApplication;
+    User::Leave(KErrNotSupported);  	
+#endif
 	} //lint !e1762 Suppress member function could be made const
 	
 /**
@@ -1635,8 +1669,12 @@
 
 EXPORT_C void RApaLsSession::CommitNonNativeApplicationsUpdatesL()
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK      
 	TIpcArgs ipcArgs(EFalse, 0, 0, 0);
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServCommitNonNativeApplications, ipcArgs));
+#else
+    User::Leave(KErrNotSupported);
+#endif	
 	} //lint !e1762 Suppress member function could be made const
 	
 
@@ -1653,8 +1691,12 @@
 
 EXPORT_C void RApaLsSession::ForceCommitNonNativeApplicationsUpdatesL()
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK      
 	TIpcArgs ipcArgs(ETrue, 0, 0, 0);
 	User::LeaveIfError(SendReceiveWithReconnect(EAppListServCommitNonNativeApplications, ipcArgs));
+#else
+    User::Leave(KErrNotSupported);  	
+#endif
 	}
 
 /** 
@@ -1668,8 +1710,12 @@
 */
 EXPORT_C TInt RApaLsSession::RollbackNonNativeApplicationsUpdates()
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK      
 	TIpcArgs ipcArgs(0, 0, 0, 0);
 	return SendReceiveWithReconnect(EAppListServRollbackNonNativeApplications, ipcArgs);
+#else
+    return KErrNotSupported;    
+#endif
 	} //lint !e1762 Suppress member function could be made const
 
 /**
@@ -1724,6 +1770,7 @@
 */
 EXPORT_C TInt RApaLsSession::ForceRegistration(const RPointerArray<TDesC>& aRegFiles)
 	{
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK     
 	CBufFlat* buffer = 0;
 	TRAPD(err, buffer = CreateRegFilesBufferL(aRegFiles));
 	if (err)
@@ -1733,6 +1780,10 @@
 	const TInt returnValue=SendReceiveWithReconnect(EAppListServForceRegistration,TIpcArgs(&ptr));
 	delete buffer;
 	return returnValue;
+#else
+	(void) aRegFiles;
+    return KErrNotSupported;	
+#endif	
 	} //lint !e1762 Suppress member function could be made const
 	
 	
@@ -1840,7 +1891,7 @@
 	SendReceive(ECancelNotifyOnDataMappingChange,TIpcArgs());
 	} //lint !e1762 Suppress member function could be made const
 
-
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
 CBufFlat* RApaLsSession::CreateRegFilesBufferL(const RPointerArray<TDesC>& aRegFiles)
 	{
 	// Serialize the array
@@ -1873,3 +1924,211 @@
 	CleanupStack::Pop(buffer);
 	return buffer;
 	}
+#endif
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+/* This function is only for use by Installers.
+
+Installers can provide the information about installed, uninstaleld and upgraded applications using this function.
+The function takes list of TApaAppUpdateInfo objects. TApaAppUpdateInfo object contains the application uid and
+corresponding action done on that application like installed, uninstalled and upgraded.
+
+Apparc updates the application list based on the information provided in the list. 
+
+UpdateAppListL initiates applist update. It will not wait till the applist update completed.
+
+@param aAppUpdateInfo List of TApaAppUpdateInfo objects, which contains application uid and corresponding action information 
+					  like installed, uninstalled and changed.
+@return A standard error code.
+@publishedAll
+@released
+*/
+
+EXPORT_C TInt RApaLsSession::UpdateAppListL(RArray<TApaAppUpdateInfo>& aAppUpdateInfo)
+    {
+    //Create a buffer with the application UID and corresponding action information.
+    CBufFlat* buffer = 0;
+    TRAPD(err, buffer = CreateAppUpdateInfoBufferL(aAppUpdateInfo));
+    if (err)
+        return err;
+    
+    TPtr8 ptr = buffer->Ptr(0);
+    const TInt returnValue=SendReceiveWithReconnect(EAppListServUpdateAppList,TIpcArgs(&ptr));
+    delete buffer;
+    return returnValue;
+    }
+
+
+/**
+This function is only for use by Software Install.
+
+ForceRegistration allows Software Install to provide a list of application information that need to be 
+included in apparc's application list even if they have not been marked as installed in the SISRegistry. 
+The force registered applications will be removed from application list once Software Install notifies
+the end of the installation by calling UpdateApplist.
+
+
+@param aAppsData The list of application information needs to be added to application list. Apparc don't take the 
+				 ownership of this array.
+@return A standard error code.
+@publishedAll
+@released
+*/
+
+EXPORT_C TInt RApaLsSession::ForceRegistration(const RPointerArray<Usif::CApplicationRegistrationData>& aForceRegAppsInfo)
+{
+    //If there are no applications to update, just return.
+    if(aForceRegAppsInfo.Count()==0)
+        return(KErrNone);
+    
+    //Create a buffer with the application uid and corresponding action information.
+    CBufFlat* buffer = 0;
+    TRAPD(err, buffer = CreateForceRegAppInfoBufferL(aForceRegAppsInfo));
+    if (err)
+        return err;
+    
+    TPtr8 ptr = buffer->Ptr(0);
+    const TInt returnValue=SendReceiveWithReconnect(EAppListServForceRegistration,TIpcArgs(&ptr));
+    delete buffer;
+    return returnValue;
+}
+
+
+/*
+ * Creates a buffer for applications uids and action information. 
+ */
+CBufFlat* RApaLsSession::CreateAppUpdateInfoBufferL(RArray<TApaAppUpdateInfo>& aAppUpdateInfo)
+    {
+    TInt count=aAppUpdateInfo.Count();
+    TInt requiredBufferSize=sizeof(TInt32)+(count*sizeof(TApaAppUpdateInfo)); //Size of count + size of TApaAppUpdateInfo objects
+
+    CBufFlat* const buffer = CBufFlat::NewL(requiredBufferSize);
+    CleanupStack::PushL(buffer);
+    buffer->ExpandL(0,requiredBufferSize);
+    RBufWriteStream writeStream;
+    writeStream.Open(*buffer);
+    CleanupClosePushL(writeStream);
+    
+	//Write number of TApaAppUpdateInfo objects to stream.
+    writeStream.WriteUint32L(count);
+
+    for(TInt index=0;index<count;index++)
+        {
+		//Write one application information at a time
+        writeStream<<aAppUpdateInfo[index];
+        }
+
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy(&writeStream);
+    CleanupStack::Pop(buffer);
+    
+    return buffer;
+    }
+	
+
+/* Creates buffer for force registered application information array*/
+
+CBufFlat* RApaLsSession::CreateForceRegAppInfoBufferL(const RPointerArray<Usif::CApplicationRegistrationData>& aForceRegAppsInfo)
+    {
+    TInt count=aForceRegAppsInfo.Count();
+    TInt requiredBufferSize=sizeof(TInt32); //For count
+    
+    for(TInt index=0; index<count; index++)
+        {
+        //Get each application information size and add it to required size.
+        requiredBufferSize += GetObjectSizeL(aForceRegAppsInfo[index]);
+        }
+
+    CBufFlat* const buffer = CBufFlat::NewL(requiredBufferSize);
+    CleanupStack::PushL(buffer);
+    buffer->ExpandL(0,requiredBufferSize);
+    
+    RBufWriteStream writeStream;
+    writeStream.Open(*buffer);
+    CleanupClosePushL(writeStream);
+    
+    //Write count to stream.
+    writeStream.WriteUint32L(count);
+
+    for(TInt index=0;index<count;index++)
+        {
+        //Write one applciation information at a time to stream.
+        writeStream<<*aForceRegAppsInfo[index];
+        }
+
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy(&writeStream);
+    CleanupStack::Pop(buffer);
+    
+    return buffer;    
+    }
+
+
+
+/* 
+Provides updated application information after apparc notifies application list change. It provides list of TApaAppUpdateInfo
+objects which contains the information about updated application UID and the action, i.e installed, uninstalled and changed.
+
+The function returns empty list if the application list is changed due to initial application list creation or because of phone 
+language change. During that time the list of changed applications can be large.
+
+This function should be called only after the client receives the applist notification from AppArc registered through SetNotify(). Otherwise the 
+return values are unpredictable.
+
+@param aUpdatedAppsInfo On return, provides the list of TApaAppUpdateInfo objects, which contains changed application uids and 
+                        corresponding action information like installed, uninstalled and changed. If this list is empty, then 
+                        the applist is updated because of initial applist creation or because of phone language change. In that 
+                        case use GetAllApps and GetNextApp APIs to retrieve the complete applist information.
+                           
+@return A standard error code.
+@publishedAll
+@released
+*/
+
+EXPORT_C TInt RApaLsSession::UpdatedAppsInfoL(RArray<TApaAppUpdateInfo>& aUpdatedAppsInfo)
+    {
+    const TInt KDefaultUpdateAppEntries=10;
+  
+    //Create a buffer with default size
+    TInt sizeRequired=(KDefaultUpdateAppEntries * sizeof(TApaAppUpdateInfo)) + 2;
+    CBufFlat* buffer=CBufFlat::NewL(sizeRequired);
+    CleanupStack::PushL(buffer);
+    buffer->ExpandL(0, sizeRequired);
+    TPtr8 ptr = buffer->Ptr(0); 
+
+    TPckgBuf<TInt> pckg(sizeRequired);
+    
+    //pass the buffer and size of the buffer.
+    TInt returnValue=SendReceiveWithReconnect(EAppListUpdatedAppsInfo,TIpcArgs(&ptr, &pckg));
+    
+    //If the size of the buffer is not enough expand it to required size and pass it again.
+    if(returnValue==KErrOverflow)
+        {
+        buffer->ExpandL(0, sizeRequired);
+        returnValue=SendReceiveWithReconnect(EAppListUpdatedAppsInfo,TIpcArgs(&ptr, &pckg));
+        }
+    
+    if(returnValue==KErrNone)
+        {
+        RBufReadStream readStream;
+        readStream.Open(*buffer);
+        
+        //Read count from the stream
+        TInt count=readStream.ReadUint32L();
+    
+        //Read updated applications information and add it to array 
+        for(TInt index=0; index<count; index++)
+            {
+            TApaAppUpdateInfo appUpdateInfo;
+            readStream>>appUpdateInfo;
+            aUpdatedAppsInfo.AppendL(appUpdateInfo);
+            }
+        }
+    
+    CleanupStack::PopAndDestroy(buffer);
+    return returnValue;
+    }
+
+#endif
+