skins/AknSkins/srvinc/AknsSrv.h
changeset 0 05e9090e2422
child 54 08459e712984
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/srvinc/AknsSrv.h	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,598 @@
+/*
+* Copyright (c) 2002-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:  Skin server core class.
+*
+*/
+
+
+#ifndef AKNSSRV_H
+#define AKNSSRV_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <fbs.h>
+
+#include <w32std.h>
+
+#include "AknsSrvSettings.h"
+#include <AknsItemID.h>
+#include <AknsPkgID.h>
+#include "AknsSrvItemDef.h"
+#include "AknsSrvSession.h"
+#include <AknsSrvSkinInformationPkg.h>
+#include "AknsSrvChunkMaintainer.h"
+#include "AknsSrvBitmapRenderer.h"
+#include "AknsSrvBitmapStore.h"
+#include "aknssrvinstallobserver.h"
+#include "aknssrvwallpapertimer.h"
+
+#include "AknsSrvWallpaperCache.h"
+
+#include "tfxconfigparser.h"
+// CONSTANTS
+// File extension for dynamic link library.
+_LIT(KDllPostFix,".DLL");
+// File extension for skin binary file.
+_LIT(KSKNPostFix,"\\*.SKN");
+
+// Empty string.
+_LIT( KAknsSkinSrvEmptyString, "" );
+
+const TUint KAknSkinSrvMajorVersionNumber=0;
+const TUint KAknSkinSrvMinorVersionNumber=1;
+const TUint KAknSkinSrvBuildVersionNumber=1;
+
+// Needed for creating server thread.
+const TUint KDefaultHeapSize=160*1024;
+
+_LIT(KAknSkinSrvName,"!AknSkinServer");
+_LIT(KAknSkinSrvExe,"Z:\\System\\Programs\\AknSkinSrv.exe");
+_LIT(KAknSkinSrvLibName,"AknSkinSrv.dll");
+
+// Minimum amount of RAM needed to activate skin.
+const TInt KAknSkinSrvFreeRAMNeeded = 2000000;
+
+// Amount of time to wait when ini-file has changed, so that 
+// writing is finished.
+const TInt KAknSkinSrvWaitForWriteToEnd = 1000000;
+
+class MTransitionServerController;
+class MTransitionServer;
+
+// DATA TYPES
+
+/**
+* Opcodes used in message passing between client and server.
+*/
+enum TAknSkinSrvRequest
+    {
+    EAknSkinSrvEnableNotifySkinChange   = 0,
+    EAknSkinSrvDisableNotifySkinChange  = 1,
+    EAknSkinSrvSetAllItemDefSets        = 2,
+    EAknSkinSrvSetItemDefSet            = 3,
+    EAknSkinSrvClientError              = 4,
+    EAknSkinSrvSetNotifyHandler         = 5,
+    EAknSkinSrvNextEvent                = 6,
+    EAknSkinSrvCancel                   = 7,
+    EAknSkinSrvSetIdleWallPaper         = 8,
+    EAknSkinSrvSetPinboardWallPaper     = 9,
+    EAknSkinSrvStoreScalableGfx         = 10,
+    EAknSkinSrvClearScalableGfx         = 11,
+    EAknSkinSrvAckNotification          = 12,
+    EAknSkinSrvOpenBitmapFile           = 13,
+    EAknSkinSrvDeleteSkin               = 14,
+    EAknSkinSrvCopySkin                 = 15,
+    EAknSkinSrvOpenIniFile              = 16,
+    EAknSkinSrvCopySoundFile            = 17,
+    EAknSkinSrvEnumeratePackages        = 18,
+    EAknSkinSrvReceivePackages          = 19,
+    EAknSkinSrvStoreMorphingScalableGfx = 20,
+    EAknSkinSrvDecodeWallpaperImage     = 21,
+    EAknSkinSrvFreeDecodedWallpaper     = 22,
+    EAknSkinSrvFreeLayoutBitmaps        = 23,
+    EAknSkinSrvOpenImageInifile         = 24,
+    EAknSkinSrvSetSlideSetWP            = 25,
+    EAknSkinSrvCheckIconConfiguration   = 26,
+    EAknSkinSrvStopSSIniFileObserver    = 27,
+    EAknSkinSrvCacheWallpaperImage      = 28,
+    };
+
+enum TAknsSkinSrvMergeType
+    {
+    EAknsSkinSrvNone = 0,
+    EAknsSkinSrvSkin = 2,
+    EAknsSkinSrvIdleWp = 4,
+    EAknsSkinSrvPinbWp = 8,
+    };
+
+struct TAknsSrvLayoutInfo
+    {
+    TInt iLayoutType;
+    TSize iLayoutSize;
+    };
+
+
+// FUNCTION PROTOTYPES
+
+/**
+* Function to start the server thread/process.
+*/
+GLREF_C TInt StartServer();
+
+#ifdef __WINS__
+
+/**
+* Thread function for WINS builds.
+*/
+GLREF_C TInt ThreadFunction( TAny* aThreadParams );
+
+#endif // __WINS__
+
+// FORWARD DECLARATIONS
+
+class CAknsSrvExclusionList;
+class CDRMHelper;
+class CAknsSrvBitmapStore;
+class CAknsSrvActiveDataOwner;
+class CAknsSrvIconConfigMap;
+
+
+// CLASS DECLARATIONS
+
+
+/**
+* Server implementation class.
+*
+*/
+NONSHARABLE_CLASS(CAknsSrv) : public CServer2,
+                              public MAknsSrvSettingObserver,
+                              public MAknsSrvMorphingListener,
+                              public MAknsSrvFileObserver,
+                              public MAknsSrvWallpaperListener
+    {
+    public:
+
+        /**
+        * Static constructor.
+        *
+        * @return Newly created server object.
+        */
+        static CAknsSrv* New( TBool& aStartFailed );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CAknsSrv();
+
+    public:
+
+        /**
+        * Creates a new session.
+        *
+        * @since 2.0
+        *
+        * @param aVersion Skin server version.
+        *
+        * @return Newly created session object.
+        */
+        CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage) const;
+
+        /**
+        * Server bootstrap code.
+        *
+        * @since 2.0
+        *
+        *
+        */
+        IMPORT_C static TInt ThreadStart();
+
+    public: // From MAknsSrvSettingObserver
+
+        void NotifyBackupOperationEnd();
+        void NotifyLayoutChange(TBool aClearScalable);
+        void NofifySkinChange();
+        void NotifyIdleBackgroundChange();
+        void NotifyDRMChange();
+        void NotifyDRMChangeL();
+        void NotifyUSBAttach();
+        void NotifyUSBRemoval();
+        void NotifySlideSetTimeoutChange();
+        void NotifySlideSetTypeChange();
+        void NotifyWallpaperTypeChange();
+        // Notify screensaver state change.
+        void NotifyScreenSaverChange();
+
+        void NotifyTransitionFxChange();
+        void StartTransitionSrvL(TBool aSkipSrvStart = EFalse);
+        void StopTransitionSrv();
+        void NotifyDriveChange( const TInt& aDrive, const TBool& aMediaNotPresent );
+        void NotifyBackupOperationBegin();
+        void NotifyAnimBackgroundChange();
+
+    public:
+        void MorhphingEventTimeout();
+        void NewSkinPackagesInstalled();
+        void WallpaperLost();
+        // Observer interface - slide set ini-file has been changed.
+        void SlideSetModifiedL();
+    public: // New functions
+
+        /**
+        * Disables the skin notification mechanism.
+        *
+        * @since 2.0
+        *
+        */
+        void DisableSkinChangeNotify();
+
+        /**
+        * Enables the skin notification mechanism
+        *
+        * @since 2.0
+        */
+        void EnableSkinChangeNotify();
+
+        void BroadcastUpdate();
+        /**
+        * Merges skin content and notifies all the sessions.
+        *
+        * @since 2.7
+        */
+        TInt MergeAndBroadcast();
+
+        /**
+        * Notifies change of the given type to all sessions.
+        *
+        * @param aType Type of the notification.
+        *
+        * @return Number of sessions that will process the notification.
+        *
+        * @since 2.5
+        */
+        TInt ForceNotifySessions(
+            const TAknsSkinChangeHandlerNotification aType,
+            TBool aCountNotifications = EFalse);
+
+        /**
+        * Skin content setter function.
+        *
+        * @since 2.0
+        *
+        * @param aPID Package ID of the skin that will be used for all the item
+        *   types.
+        */
+        void SetActiveSkinContent(const TAknsPkgID aPID);
+
+        /**
+        * Prepares merged skin content based on active definition sets.
+        *
+        * @since 2.0
+        */
+        void PrepareMergedSkinContentL();
+
+        /**
+        * Prepares merged skin content based on active definition sets
+        * without being semaphore-safe.
+        *
+        * @since 2.8
+        */
+        void PrepareMergedSkinContentUnprotectedL();
+
+        /**
+        * Handles the client error condition.
+        */
+        void HandleClientError(TInt aErrorCode);
+
+        /**
+        *
+        */
+        void SetWallpaperL(const TDesC& aFilename,
+            const TAknsItemID& aIID, TBool aIsSlide = EFalse);
+
+        /**
+        *
+        * @since 2.8
+        */
+        void StoreScalableGraphicsL( const TAknsItemID& aIID,
+            const TInt aType, const TSize& aSize, TInt aBmpHandle, TInt aMskHandle, TBool aMorphing);
+
+        /**
+        *
+        * @since 2.8
+        */
+        void ClearScalableGraphics();
+
+        /**
+        * Marks the given notification acknowledged.
+        *
+        * @param aType Type of the notification.
+        *
+        * @since 2.7
+        */
+        void AcknowledgeNotification( const TInt aType );
+
+        void OpenBitmapFileL( const RMessage2 aMessage );
+        void OpenIniFileL( const RMessage2 aMessage);
+        void CopySoundFileL( const RMessage2 aMessage);
+        void EnumeratePackages( const RMessage2 aMessage );
+        void EnumeratePackagesL( const RMessage2 aMessage );
+        void ReceivePackages( const RMessage2 aMessage );
+        void DecodeWallpaperImageL( const RMessage2 aMessage);
+        void FreeDecodedWallpaper( const RMessage2 aMessage );
+        void CacheWallpaperImageL( const RMessage2 aMessage);
+
+        /**
+        * Opens ini-file for slideset.
+        *
+        * @since 3.2
+        */
+        void OpenImageInifileL(const RMessage2 aMessage);
+
+        TBool CheckImageL(const TDesC& aFilename, TBool& aIsProtected );
+
+        /**
+        *
+        */
+        void SetSlidesetWallpaperL();
+
+        /**
+        *
+        */
+        void WallpaperTimerTimeoutL( TBool aForceChange = EFalse );
+
+        /**
+        *
+        */
+        void StopSlidesetIniFileObserver();
+
+        /**
+        *
+        */
+        void FreeLayoutBitmaps( const RMessage2 aMessage);
+
+        /**
+        * Checks if the application UID has repository based configuration for its icons.
+        * 
+        * @since 3.2
+        */
+        TInt CheckIconConfiguration( const RMessage2 aMessage );
+
+    private:
+
+        /**
+        * Default C++ constructor
+        */
+        CAknsSrv();
+
+        /**
+        * The actual skin merge function.
+        */
+        void DoMergeSkinL( const TAknsPkgID aSkinPID,
+            const TAknsPkgID aLocationPID,
+            const TAknsItemDefClass aClass, const TBool aClearTable,
+            const TBool aAHOverrideSkin );
+
+        /**
+        * Restores default shared data settings
+        */
+        void RestoreDefaultSDSettings(TBool aExcludeWP = EFalse);
+
+        void RestoreDefaultSkin();
+        void RestoreDefaultIdleWP();
+
+        void CheckAndCreateDRMHelper();
+        void RemoveAutomatedWallpaper(const TAknsItemID aIID, const TDesC8& aContentUri);
+        void RemoveAutomatedContent();
+
+        /**
+        * Loads TfxSrv srv / srv controller objects if available
+        */
+        TBool LoadTfxSrvPluginL();
+        void GetTransitionNameL( TFileName& aName, TAknsPkgID aPkgId );
+        void CloseTfxServerConnection();
+
+        /**
+        * Sets default skin active.
+        */
+        void SetDefaultSkinActive();
+
+        /**
+        * Reads slide set filenames from a file to a member variable.
+        */
+        void ReadSlideSetImageFilesL();
+
+        /**
+        * Returns the pointer to slide set timer.
+        * If timer is not created, creates it first.
+        */
+        CAknsSrvWallpaperTimer* WallpaperTimerL();
+
+        /**
+        * Sets the slide set timer active.
+        */
+        void SetSlideSetTimerActiveL();
+        
+        /**
+        * Load max image size from CenRep.
+        */
+        void InitMaxImageSizeL();
+
+
+        /**
+        * Backup current skin name and active default skin.
+        */
+        void BackupAndActiveDefaultSkin();
+
+        /**
+        * Reactive backup skin.
+        */
+        void RestoreOldSkin();
+
+        /**
+        * Check if the slideset wallpaper can change.
+        */
+        TBool CanChangeSlidesetWallpaperL();
+        
+        /**
+        * Load slideset enable application uid.
+        */
+        void InitSlidesetEnableAppUid();
+        
+		/**
+        * Check if active skin support animation background
+        */
+        TBool ActiveSkinAnimBgSupportL();
+        
+		/**
+        * Get animation background parameter of active skin, 
+		* Owner Transfered
+        */
+        HBufC* ActiveSkinAnimBgParamL();
+        
+        /**
+        * Start animation background if possible
+        */
+        void StartAnimBackgroundL();   
+
+    private: // Data
+
+        CAknsSrvSettings* iSettings;
+
+        TBool iNotifyEnabled;
+        TBool iContentChanged;
+        TInt iOutstandingChangeEvents;
+
+        RFbsSession iFbsSession;
+        RFs iFsSession;
+
+        TInt iSkinCount;
+        CAknsSrvSkinInformationPkg* iSkinInfoPkgs;
+
+        CAknsSrvChunkMaintainer* iChunkMaintainer;
+
+        CAknsSrvExclusionList* iExclusionList;
+
+        CDRMHelper* iDrmHelper;
+        HBufC8* iSkinContentUri;
+        HBufC8* iIdleWPContentUri;
+        HBufC8* iSkinContentUri2;
+        HBufC8* iIdleWPContentUri2;
+        HBufC* iWPFilename;
+        TAknsPkgID iOldSkin;
+
+        CBaBackupSessionWrapper* iBackupSession;
+
+        // Active skin in on removable drive.
+        TBool iSkinOnRemovableDrive;
+
+        // Current wallpaper on removable drive.
+        TBool iWPOnRemovableDrive;
+
+        // USB cable has been attached.
+        TBool iUSBAttached;
+
+        CAknsSrvBitmapStore* iBitmapStore;
+        TAknsSkinSrvMergeType iMergeType;
+        TBool iBootFinished;
+
+        CArrayPtrFlat<TAknsSrvSkinInfoPkg>* iPackageArray;
+
+        CAknsSrvFileObserver* iInstallObserver;
+        CAknsSrvFileObserver* iWallpaperObserver;
+
+        RFile iSknFile;
+
+        /*
+        *  Timer for slideset.
+        *  Own.
+        */
+        CAknsSrvWallpaperTimer* iWallpaperTimer;
+
+        /*
+        * Index of currently active wallpaper in slideset.
+        */
+        TInt iCurrentSlide;
+
+        /* 
+        *  Array of filenames forming the slideset.
+        *  Own.
+        */
+        CDesCArray* iSlideSetNameArray;
+        
+        /* 
+        * Type of wallpaper (none/image/slideset).
+        */
+        TInt iWallpaperType;
+
+        /**
+        * Observes for slide set wallpaper ini-file changes.
+        * Own.
+        */
+        CAknsSrvFileObserver* iSlideSetObserver;
+
+        // For transition effects
+
+        // using tfxsrv via plugin interface
+        MTransitionServerController* iTFXServerCtrl;
+        MTransitionServer* iTFXServer;
+
+        // for destroying ecom implementation
+        TUid iSrvControllerEComDtorUID;
+        TUid iSrvEComDtorUID;
+
+        RWsSession iWsSession;
+
+        /* Observes for backup state and controls active data owner
+        *  for skin server backup/restore.
+        *  Own.
+        */
+        CAknsSrvActiveDataOwner* iBackupNotifier;
+
+        /**
+        * Drive ID of removable drive, where active skin is located.
+        */
+        TInt iDriveIdOfRemovableDrive;
+        
+        /**
+        * Wallpaper max size. 
+        */
+        TSize iMaxWallpaperSize;
+
+        /* Contains indication if certain application icon is configured
+        * using cenrep. Then skinned icon should not be used.
+        * Icon configuration is language based.
+        * Own.
+        */
+        CAknsSrvIconConfigMap* iIconConfigMap;
+        
+        /**
+        * Slidesetwallpaper-enable application whitelist
+        */
+        RArray<TInt> iSlidesetEnableAppUidArray;
+        
+        /**
+        * WallpaperCache
+        */
+        CAknsSrvWallpaperCache* iWallpaperCache;
+        
+        TBool iSetSlideSet;
+        
+    };
+
+
+#endif // AKNSSRV_H
+
+// End of File
+