ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h
changeset 0 ba25891c3a9e
child 9 51c0f5edf5ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,474 @@
+/*
+* Copyright (c) 2006-2008 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:   Declaration of CNcdInstallationService
+*
+*/
+
+
+#ifndef C_NCD_INSTALLATION_SERVICE_IMPL_H
+#define C_NCD_INSTALLATION_SERVICE_IMPL_H
+
+#include <e32base.h>
+#include <AknServerApp.h>
+#include <AknsSrvClient.h>
+#include <swi/sisregistrysession.h>
+#include <swi/sisregistryentry.h>
+#include <apgcli.h>
+#include <centralrepository.h>
+#include <SWInstApi.h>
+#include <WidgetRegistryClient.h>
+
+#include "ncdinstallationservice.h"
+#include "ncditempurpose.h"
+#include "ncdasyncoperationobserver.h"
+#include "ncdasyncsilentinstallobserver.h"
+
+
+/**
+ * New Java registry API was introduced in 3.2. We start using it 
+ * from 5.0 onwards because it seems that some 3.2 devices don't support
+ * it entirely
+ */
+#if defined( __SERIES60_30__ ) || defined( __SERIES60_31__ ) || defined ( __S60_32__ )
+    #define USE_OLD_JAVA_API
+    class MJavaRegistrySuiteEntry;
+    class MJavaRegistry;
+#else
+    namespace Java
+        {
+        class CJavaRegistry;
+        }
+#endif
+
+
+class CDocumentHandler;
+
+class MNcdInstallationServiceObserver;
+class TCatalogsVersion;
+class CNcdActiveOperationObserver;
+class CNcdSilentInstallActiveObserver;
+
+
+/**
+ *
+ */
+class CNcdInstallationService : public CBase,
+                                public MNcdInstallationService,
+                                public MAknServerAppExitObserver,
+                                public MNcdAsyncOperationObserver,
+                                public MNcdAsyncSilentInstallObserver
+    {
+public: // Construction & destruction
+    
+    /**
+     * Constructor.
+     * @return CNcdInstallationService* Installation service.
+     */
+    static CNcdInstallationService* NewL();
+    
+    /**
+     * Constructor.
+     * @return CNcdInstallationService* Installation service.
+     */
+    static CNcdInstallationService* NewLC();
+    
+    /**
+     * Destructor.
+     */
+    ~CNcdInstallationService();
+    
+private: // Construction
+
+    /**
+     * Constructor.
+     */
+    CNcdInstallationService();
+    
+    /**
+     * Constructor.
+     */
+    void ConstructL();
+    
+public: // From MNcdInstallationService
+
+    /**
+     * @see MNcdInstallationService::InstallL
+     */
+    void InstallL( const TDesC& aFileName,
+                   const TDesC& aMimeType,
+                   const TNcdItemPurpose& aPurpose );
+
+    /**
+     * @see MNcdInstallationService::InstallL
+     */
+    void InstallL( RFile& aFile,
+                   const TDesC& aMimeType,
+                   const TNcdItemPurpose& aPurpose );
+
+    /**
+     * @see MNcdInstallationService::InstallJavaL
+     */
+    void InstallJavaL( const TDesC& aFileName,
+                       const TDesC& aMimeType,
+                       const TDesC8& aDescriptorData );
+
+    
+    /**
+     * @see MNcdInstallationService::InstallJavaL
+     */
+    void InstallJavaL( RFile& aFile,
+                       const TDesC& aMimeType,
+                       const TDesC8& aDescriptorData );
+    
+    /**
+     * @see MNcdInstallationService::SilentInstallL
+     */
+    void SilentInstallL( RFile& aFile,
+                         const TDesC& aMimeType,
+                         const TNcdItemPurpose& aPurpose,
+                         const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+    
+    /**
+     * @see MNcdInstallationService::SilentInstallJavaL
+     */
+    void SilentInstallJavaL( RFile& aFile,
+                             const TDesC& aMimeType,
+                             const TDesC8& aDescriptorData,
+                             const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+    
+    /**
+     * @see MNcdInstallationService::MNcdCancelSilentInstall
+     */
+    void CancelSilentInstall( HBufC*& aFileName,
+                              TUid& aAppUid,
+                              TInt& aError );
+
+                   
+    /**
+     * @see MNcdInstallationService::SetObserver
+     */
+    void SetObserver( MNcdInstallationServiceObserver& aObserver );
+
+    /**
+     * @see MNcdInstallationService::ApplicationVersion
+     */
+    TInt ApplicationVersion( const TUid& aUid, TCatalogsVersion& aVersion );
+
+    /**
+     * @see MNcdInstallationService::IsApplicationInstalledL
+     */
+    TBool IsApplicationInstalledL( const TUid& aUid );
+
+
+    /**
+     * @see MNcdInstallationService::IsApplicationInstalledL
+     */
+    TNcdApplicationStatus IsApplicationInstalledL( 
+        const TUid& aUid, const TCatalogsVersion& aVersion );
+    
+    /**
+     * @see MNcdInstallationService::SidFromSisRegistryL
+     */
+    TUid SidFromSisRegistryL( const TUid& aUid );
+
+    /**
+     * @see MNcdInstallationService::AppendRightsL
+     */
+    void AppendRightsL(
+        const TDesC8& aRightsObject,
+        const TDataType& aMimeType );
+
+
+    /**
+     * @see MNcdInstallationService::PackageUidFromSisL()
+     */    
+    TUid PackageUidFromSisL( RFile& aFile ) const;
+
+
+    /**
+     * @see MNcdInstallationService::IsThemeInstalled()
+     */
+    TBool IsThemeInstalledL( const TDesC& aThemeName );
+
+
+    /**
+     * @see MNcdInstallationService::DeleteFile()
+     */
+    TInt DeleteFile( const TDesC& aFilename );
+    
+    
+    /**
+     * @see MNcdInstallationService::FileServerSession()
+     */
+    RFs& FileServerSession(); 
+
+
+    /**
+     * @see MNcdInstallationService::WriteJadL()
+     */
+    HBufC* WriteJadL( const TDesC& aJarFileName, const TDesC8& aJad  );
+
+    
+    /**
+     * @see MNcdInstallationService::DocumentHandler()
+     */
+    CDocumentHandler& DocumentHandler();
+    
+public: // From MNcdAsyncOperationObserver
+
+
+    /**
+     * This callback function is called when the async operation
+     * has been completed. So this will call NotifyObserverL then.
+     * 
+     * @see MNcdAsyncOperationObserver
+     */
+    virtual void AsyncOperationComplete( TInt aError );
+
+
+public: // From MNcdAsyncSilentInstallObserver
+
+
+    /**
+     * This callback function is called when the silent installation
+     * has been completed. So this will call NotifyObserverL then.
+     * 
+     * @see MNcdAsyncSilentInstallObserver
+     */
+    virtual void AsyncSilentInstallComplete( TInt aError );
+    
+        
+public: // New methods
+
+    
+    // Used to notify the observer after application installation
+    void NotifyObserverL(); 
+
+
+    // Recognizes the data from the file itself
+    HBufC* RecognizeDataL( const TDesC& aFileName );
+        
+    // Recognizes the data from the file itself
+    HBufC* RecognizeDataL( RFile& aFile );
+
+private: // From MAknServerAppExitObserver
+
+    /**
+     * This function is called after application installer has finished.
+     * @see MApaServerAppExitObserver::HandleServerAppExit
+     */
+    void HandleServerAppExit( TInt aReason );
+
+   
+private: // new methods
+
+    // Updates the list of installed themes
+    void UpdateInstalledThemesL();
+    
+    // Returns the name of the theme that was installed last
+    const TDesC& LatestThemeL();
+    
+    // Create a RApaLsSession
+    void ConnectApaLsL();
+
+
+    /**
+     * @see MNcdInstallationService::InstallL
+     * @param aSilentInstallOptionsPckg If NULL, then installation is done normally.
+     * If not NULL, then the installation is done silently by using the given 
+     * options. Ownership is not transferred.
+     */
+    void InstallL( RFile& aFile,
+                   const TDesC& aMimeType,
+                   const TNcdItemPurpose& aPurpose,
+                   const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+
+    /**
+     * @see MNcdInstallationService::InstallJavaL
+     * @param aSilentInstallOptionsPckg If NULL, then installation is done normally.
+     * If not NULL, then the installation is done silently by using the given 
+     * options. Ownership is not transferred.
+     */
+    void InstallJavaL( RFile& aFile,
+                       const TDesC& aMimeType,
+                       const TDesC8& aDescriptorData,
+                       const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+
+    
+    void InstallWidgetL( 
+        RFile& aFile,
+        const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+        
+
+    // Sets correct values for member variables after installation has finished
+    // or if it has been cancelled.
+    void InstallationFinishedSetup( TInt aReason );
+
+
+    // Used when the silent install is cancelled. This function
+    // handles situations when the installation was finished even though
+    // cancellation was requested. Reference parameters are used to pass
+    // information about the installed application and about the possible
+    // error.
+    void HandleSilentInstallSuccessAfterCancelL( HBufC*& aFileName,
+                                                 TUid& aAppUid,
+                                                 TInt& aError );
+    
+   
+    void SisRegistryEntryLC( 
+        Swi::RSisRegistryEntry& aEntry, const TUid& aUid );
+
+    TBool JavaAppExistsL( const TUid& aUid );
+
+    /**
+     * Initializes installer
+     */
+    void InitializeInstallerL();
+    
+    /**
+     * Cancels normal SIS/JAR installation
+     */
+    void CancelInstall();
+    
+    
+    /**
+     * Creates a list of applications that are in ROM
+     * 
+     * @note ROM apps that have a stub-SIS are ignored
+     */
+    void InitializeRomApplicationListL();
+    
+    
+    /**
+     * Get a list of installed Midlet UIDS
+     * 
+     * @param aUids Emptry array where UIDs are added
+     */
+    void MidletUidsL( RArray<TUid>& aUids );
+    
+    
+    /**
+     * Checks if the UID is found in the ROM UID list
+     * 
+     * @param aUid 
+     * @return ETrue if UID was found in the ROM UID list
+     */
+    TBool IsRomApplication( const TUid& aUid ) const;
+    
+    
+    /**
+     * Gets the UID of the latest installed midlet by using the 
+     * Java installer's P&S key
+     * 
+     * @param aJavaRegistry Java registry
+     * @return Midlet UID
+     */
+#ifdef USE_OLD_JAVA_API
+    TUid LatestMidletUidL( MJavaRegistry& aJavaRegistry ) const;
+#else    
+    TUid LatestMidletUidL( Java::CJavaRegistry& aJavaRegistry ) const;
+#endif
+    
+    static TBool MatchJava( const TDesC& aMime );
+    
+    TUid InstalledMidletUidL();
+    
+    void PopulateInstalledWidgetUidsL();
+    
+    TUid InstalledWidgetUidL();
+    
+    HBufC* InstalledWidgetNameLC();
+    
+    static TBool MatchWidget( RFile& aFile, const TDesC& aMime );
+    
+    void HandleInstalledWidgetL();
+    
+    TBool WidgetExistsL( const TUid& aUid );
+    
+private:
+    
+    enum TInstallType
+        {
+        ESisInstall,
+        EFileInstall,        
+        EJavaInstall,
+        EWidgetInstall
+        };
+
+
+private: // Data
+
+    TBool iBusy;
+    CDocumentHandler* iDocHandler;
+    MNcdInstallationServiceObserver* iObserver;
+    // Registry session 
+    Swi::RSisRegistrySession iRegistrySession;
+    CAsyncCallBack* iInstallationCompleteCallback;
+    TUid iAppUid;
+    TUid iPackageUid;
+    TUid iThemePackageUid;
+    TNcdItemPurpose iPurpose;
+
+    // File session 
+    RFs iFs;
+    
+    TInstallType iInstallType;
+    
+    // Java handling
+
+    // When installing java with JAD, the JAD path is stored here
+    HBufC* iJadFileName;
+    
+#ifdef USE_OLD_JAVA_API    
+    // For comparing installed midlet uids to find out the uid for the newly 
+    // installed java app.
+    RArray<TUid> iMIDletUids;
+#endif
+
+    // Theme handling
+    // Server session
+    RAknsSrvSession iAknsSrv;
+    // Array of skin information packages
+    CArrayPtr<CAknsSrvSkinInformationPkg>* iThemes;
+    // Name of the theme
+    HBufC* iThemeName;
+    // Package ID
+    TAknsPkgID iPID;
+    
+    TInt iInstallError;
+    
+    HBufC* iRecognizedMime;
+    
+    RApaLsSession iApaLs;
+    
+    // For silent installation
+    // Observer
+    CNcdSilentInstallActiveObserver* iSilentInstallActiveObserver;
+    
+    CNcdActiveOperationObserver* iInstallStatusObserver;
+
+    SwiUI::RSWInstLauncher iInstaller;
+        
+    // ROM application UIDS
+    RArray<TUid> iRomUids; 
+    
+    // needed for cancelling install correctly
+    SwiUI::TServerRequest iCancelCode;  
+    
+    
+    RWidgetRegistryClientSession iWidgetRegistry;    
+    RWidgetInfoArray iInstalledWidgets;    
+    };
+
+#endif // C_NCD_INSTALLATION_SERVICE_IMPL_H