diff -r 000000000000 -r 2f259fa3e83a psln/pslnengine/inc/PslnModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/psln/pslnengine/inc/PslnModel.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,760 @@ +/* +* Copyright (c) 2004-2006 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: Model class for Psln application. +* +*/ + + +#ifndef C_PSLNMODEL_H +#define C_PSLNMODEL_H + +#include +#include +#include +#include + +// Determines the type of skin list. +enum TPslnSkinNameType + { + // list name + EPslnSkinNameTypeList = 0, + // title name + EPslnSkinNameTypeTitle + }; + +// What kind of scren saver activation it is. +enum TPslnScreenSaverActivation + { + // Preview is activated. + EPslnScreenSaverPreviewActivation = 0, + // Preview is deactivated, and "real" screen saver is activated, + EPslnScreenSaverPreviewDeactivation, + // Real screen saver is activated straight away. + EPslnScreenSaverActivation + }; + +// Defines actions for a transtion effects +enum TPslnTransitionEffectAction + { + // Used only for enum range validation + EPslnTransitionEffectDummyFirst = -1, + + // -- begin of real values -- + + // Start theme preview transtion effect + EPslnTransitionEffectStartPreview, + // Start theme activation transtion effect + EPslnTransitionEffectStartThemeActivation, + // Stop the current transition effect + EPslnTransitionEffectStop, + + // -- end of real values -- + + // Used only for enum range validation + EPslnTransitionEffectDummyLast + }; + +class MAknsSkinChangeObserver; +class MPslnScreenSaverECOMObserver; +class CEikonEnv; +class CPslnSkinStore; +class CRepository; +class CPslnSkinEntry; +class CPslnSkinNameEntry; +class TAknsPkgID; +class CPslnWallpaperUtilsLoader; +class CPslnEcomListener; +class CPslnBrowserLaunchLoader; +class CCenRepNotifyHandler; + +// Maximum number of characters in Screen saver txt. +const TInt KPslnMaxLengthOfScreenSaverText = 15; + +// CLASS DEFINITIONS + +// Inner class for skin name entry. +class TPslnSkinNameEntry + { + public: + // Package ID. + TAknsPkgID iPid; + // Skin list name. + HBufC* iListName; + // Skin title name. + HBufC* iTitleName; + }; + +// Auxiliary class for screen saver info. +class CPslnScreenSaverInfo : public CBase + { + public: + + // Symbian OS two-phased constructor. + static CPslnScreenSaverInfo* NewL() + { + CPslnScreenSaverInfo* self = new (ELeave) CPslnScreenSaverInfo; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + }; + + // Destructor. + ~CPslnScreenSaverInfo() + { + delete iScreenSaverTxt; + iScreenSaverTxt = NULL; + delete iFileName; + iFileName = NULL; + } + private: + + // Symbian OS second phase constructor. + void ConstructL() + { + iScreenSaverTxt = HBufC::NewL( KPslnMaxLengthOfScreenSaverText ); + iFileName = HBufC::NewL( KMaxFileName ); + }; + + // C++ default constructor. + CPslnScreenSaverInfo() + { + iScreenSaverType = 1; // magic, default value + }; + + public: + // Filename for screensaver, if applicable. + HBufC* iFileName; + // Text, if any, shown in the screensaver. + HBufC* iScreenSaverTxt; + // Type of screen saver. + TInt iScreenSaverType; + }; + +/** +* CPslnModel is the model class of Psln app. +* It provides functions to get and set setting values. +*/ +NONSHARABLE_CLASS( CPslnModel ): + public CBase, + public MCenRepNotifyHandlerCallback + { + public: + + /** + * Two-phased constructor. + * @param aObserver observer for skin changes. + * @return new instance of CPslnModel. + */ + IMPORT_C static CPslnModel* NewL( MAknsSkinChangeObserver* aObserver ); + + /** + * Deprecated. + * @return NULL. + */ + IMPORT_C static CPslnModel* NewL(); + + /** + * Destructor + */ + IMPORT_C ~CPslnModel(); + + /** + * Deprecated. + */ + IMPORT_C TBool ActivateSkinL( const TDesC8& aPreviewType, + const TInt aActiveSkinIndex ); + + /** + * Activates screen saver as set by user. + * @param aItemIndex screensaver to activate. + * @param aActivationType screensaver activation type + * (activation/deactivation/preview). + * @return error code, or KErrNone on success. + */ + IMPORT_C TInt ActivateScreenSaver( + const TInt aItemIndex, + TPslnScreenSaverActivation aActivationType ); + + /** + * Disables skin notify changes. + * + * Creates and pushes internal class CPslnActivationGuard to the + * stack. When CPslnActivationGuard is constructed, SkinSrvSession's + * DisableSkinChangeNotify is called, and thus skin notify changes are + * disabled. When CPslnActivationGuard is popped from stack, + * SkinSrvSession's EnableSkinChangeNotify is called automatically and thus, + * skin notify changes are again active. + */ + IMPORT_C void GuardActivationLC(); + + /** + * Starts skin download. + */ + IMPORT_C void DownloadSkinL(); + + /** + * Sets Idle Wallpaper. + * @param aImagePath Path and filename of new wallpaper. + * @return error code, or KErrNone on success. + */ + IMPORT_C TInt SetBackgroundImagePath( const TDesC& aImagePath ); + + /** + * Invokes screensaver plugins PluginFunction for e.g. configuring + * the screensaver. + * @param aIndex screensaver index to use. + * @param aFunction screensaver function to call. + */ + IMPORT_C void InvokeSSPluginFunctionL( + TInt aIndex, + TScPluginCaps aFunction ); + + /** + * Updates skins from server, UI skins list, and screensaver array. + */ + IMPORT_C void PerformCompleteUpdateL(); + + /** + * Creates screen saver array. + */ + IMPORT_C void LoadScreensaverArrayL(); + + /** + * Gets the visible skin by its UI index. + * Ownership is not transferred. + * @param aIndex skin index. + * @return pointer to skin entry. + */ + IMPORT_C CPslnSkinEntry* VisibleSkin( const TInt aIndex ); + + /** + * Gets the name of the skin. + * @param aIndex skin index to use. + * @param aSkinName localized skin name. + * @param aType which skin name to fetch (list/title name). + */ + IMPORT_C void GetSkinNameByIndex( const TInt aIndex, TDes& aSkinName, + const TPslnSkinNameType aType ) const; + + /** + * Checks whether the current (or given) skin is active. + * @param aSkinIndex skin index to use. + * @return ETrue is given skin index is currently active skin. + */ + IMPORT_C TBool IsActiveSkinSelected ( + TInt aSkinIndex = KErrNotFound ) const; + + /** + * Deprecated since 5.0. + */ + IMPORT_C TAknSkinSrvSkinPackageLocation LocationOfSkin( const TInt aIndex ); + + /** + * Returns skin index of active skin. + * @return skin index of active skin. + */ + IMPORT_C TInt ActiveSkinIndex() const; + + /** + * Returns skin index of currently highlighted skin. + * @return skin index of highlighted skin. + */ + IMPORT_C TInt CurrentSelectedSkinIndex() const; + + /** + * Returns number of found skins. + * @return number of found skins. + */ + IMPORT_C TInt NumberOfSkins() const; + + /** + * Returns screensaver name array. + * @return screensaver name array. + */ + IMPORT_C const MDesC16Array& ScreensaverNames() const; + + /** + * Checks if selected screensaver has the requested capability + * @param aIndex index of screensaver in screensaver array. + * @param aCapability requested capability. + * @return ETrue if screensaver has the capability, EFalse otherwise. + */ + IMPORT_C TBool ScreensaverHasCapability( + const TInt aIndex, + const TScPluginCaps aCapability ) const; + + /** + * Returns protection type of skin. + * @param aIndex skin index to use. + * @return protection type of skin. + */ + IMPORT_C TAknsSkinSrvSkinProtectionType ProtectionOfSkin( + const TInt aIndex ); + + /** + * Checks if the skin can be activated. + * @param aItemIndex skin index to use. + * @return ETrue, if skin can be activated. + */ + IMPORT_C TBool IsValidForActivation( const TInt aItemIndex ); + + /** + * Checks if the skin can be previewed. + * @param aItemIndex skin index to use. + * @return ETrue, if skin can be previewed. + */ + IMPORT_C TBool IsValidForPreview( const TInt aItemIndex ); + + /** + * Checks if the skin support animated background. + * @param aItemIndex skin index to use. + * @return ETrue, if skin support animation background. + */ + IMPORT_C TBool IsSupportAnimBg( TInt aItemIndex ); + + /** + * Sets the given skin index as currently highlighted one. + * @param aCurrentSkinIndex skin index. + */ + IMPORT_C void SetCurrentSelectedSkinIndex( + const TInt aCurrentSkinIndex ); + + /** + * Deprecated. + */ + IMPORT_C TInt SetCurrentPropertyType( const TInt aProperty, + const TInt aCurItemIndex ); + + /** + * Gets currently active index of given property. + * @param aProperty property type - either wallpaper or screensaver. + * @return index of currently active property, or error code. + */ + IMPORT_C TInt CurrentPropertyIndex( const TInt aProperty ); + + /** + * Enables (or disables) notifications from ECOM framework. + * When ECOM state is changed, PslnModel will check that it's + * screensaver list is up to date. Changes in the list are + * indicated to observer class. + * @param aActive if ETrue, notifications are subscribed, otherwise + * subscription is terminated. + * @param aObserver observer for notifications. + */ + IMPORT_C void EnableScreenSaverNotifications( + const TBool& aActive, + MPslnScreenSaverECOMObserver& aObserver ); + + /** + * Deprecated. + */ + IMPORT_C TBool ActivateSkinL( + const TDesC8& aPreviewType, + const TInt aActiveSkinIndex, + const TBool& aActivateFromPreview ); + + /** + * Activates the entire skin. + * @since 3.2 + * @param aActiveSkinIndex skin index of active skin. + * @return ETrue, if skin activation is successful. + */ + IMPORT_C TBool ActivateSkinL( const TInt aActiveSkinIndex ); + + /** + * Gets currently active index of given property. + * This is leaving version of CurrentPropertyIndex (see above). + * @param aProperty property type - either wallpaper or screensaver. + * @return index of currently active property, or error code. + */ + IMPORT_C TInt CurrentPropertyIndexL( const TInt aProperty ); + + /** + * Sets transition effects enabled/disabled as given in the parameter. + * @param aEffectValue used as bitmask. Value of zero enables all effects, + * and value of KMaxTInt disables all effects. + * All other values are considered as invalid. + * @return KErrArgument if aEffectValue is not zero or KMaxTInt. + * Otherwise return value is what is given out by CRepository::Set(). + * + * @since 3.2 + */ + IMPORT_C TInt SetTransitionEffectsL( const TInt aEffectValue ); + + /** + * Gets current transition effect value. + * @return in error cases returns KErrNotFound, + * otherwise returns current repository value. + * + * @since 3.2 + */ + IMPORT_C TInt GetTransitionEffectStateL(); + + /** + * Checks if the screensaver is installed on memory card. + * @param aScreensaverIndex screensaver index + * @return ETrue, if screensaver is installed to the memory card. + * + * @since 3.2 + */ + IMPORT_C TBool IsScreenSaverOnMemoryCard( const TInt aIndex ) const; + + /** + * Sets a given property (wallpaper or screensaver) as active. + * @param aProperty property type - either wallpaper or screensaver. + * @param aCurItemIndex item index that is currently active. + * @return KErrNone always. + * + * @since 3.2 + */ + IMPORT_C void SetCurrentPropertyTypeL( const TInt aProperty, + const TInt aCurItemIndex ); + + /** + * Checks if a skin with given index is on memory card, + * @param aIndex skin index from application. + * @return ETrue if skin is on memory card, EFalse otherwise. + * + * @since 5.0 + */ + IMPORT_C TBool IsThemeOnMemoryCard( const TInt& aIndex ); + + /** + * Checks if a skin with given index is on mass drive, + * @param aIndex skin index from application. + * @return ETrue if skin is on memory card, EFalse otherwise. + * + * @since 5.0 + */ + IMPORT_C TBool IsThemeOnMassDrive( const TInt& aIndex ); + + /** + * Checks if the screensaver is installed on mass drive. + * @param aScreensaverIndex screensaver index + * @return ETrue, if screensaver is installed to the mass drive. + * + * @since 5.0 + */ + IMPORT_C TBool IsScreenSaverOnMassDrive( const TInt& aIndex ) const; + + /** + * Returns skin server session. + * @return skin server session. + * + * @since 3.2 + */ + IMPORT_C RAknsSrvSession SkinSrvSession() const; + + /** + * Starts or stops transition effects. + * + * @param aAction specifies actions for transition effects. + * The value can be one of the values defined in TPslnTransitionEffectAction. + * @since 3.2 + */ + IMPORT_C void TransEffect(TInt aAction) const; + + /** + * Set current screensaver to default screensaver. + */ + IMPORT_C void SetScreenSaverToDefault(); + + /** + * Set Animated Background state + * @param aValue specifies actions for animation background. + * 0 mean enable animation effect, KMaxTInt means disable all animation effect. + * @since 9.2 + */ + IMPORT_C TInt SetAnimBackground( TInt aValue ); + + /** + * Get Animated Background state. + * + * @return 0, if animation is enable; KMaxTInt if animation is disable. + * @since 9.2 + */ + IMPORT_C TInt AnimBackgroundState() const; + + + private: + + /** + * Gets the separately localized name of the skin, if any. + * @param aPID package ID to use. + * @param aSkinName localized skin name. + * @param aType which skin name to fetch (list/title name). + * @return ETrue, if localized skin name was found. + */ + TBool GetSeparatelyLocalizedSkinName( + const TAknsPkgID aPID, TDes& aSkinName, + const TPslnSkinNameType aType ) const; + + + /** + * Default C++ contructor + */ + CPslnModel(); + + /** + * Symbian default constructor + */ + void ConstructL( MAknsSkinChangeObserver* aObserver ); + + /** + * Loads the separately localized skin names resource. + */ + void LoadSkinNamesResourceL(); + + /** + * Finds screensavers from the given path and appends them to the + * screensaver list. + * @return ETrue if screensavers were found, EFalse otherwise. + */ + TBool FindAndAppendScreensaversL(); + + /** + * Updates the skin information from the server and + * the list of visible skins. + */ + void UpdateFromServerL(); + + /** + * Updates the list of visible skins. + */ + void UpdateVisibleSkinListL(); + + /** + * Activates skin that is currently selected. + */ + void SetActiveSkinL(); + + /** + * Launches query dialog for screensaver name. + * @return EFalse, if user cancelled the query. + */ + TBool QueryAndSetScreensaverTextL(); + + /* Gets full name of skin. */ + const TDesC& GetSkinFullName( const TInt aItemIndex ); + + /* Gets the name of the skin. */ + void GetSkinNameByPID( const TAknsPkgID aPID, TDes& aSkinName, + const TPslnSkinNameType aType ) const; + + /* Activates default skin. */ + void ActivateDefaultSkinL(); + + /* Gets default text for text screensaver. */ + void GetDefaultTextToScreensaverL( TDes& aDisplayText ); + + /* Gets wallpaper item index. */ + TInt GetWallPaperItemIndex(); + + /* Gets wallpaper item index. */ + TInt GetScreenSaverItemIndexL(); + + /* Find the aFileName in iScreensaverFilenameArr, and return the index */ + TInt GetScreenSaverIndexByFileName(const TDesC &aFileName) const; + + /* Get screen saver object type from index */ + TInt GetScreensaverTypeByIndex(TInt aIndex); + + /* Loads AknsWallpaperUtils to memory. */ + void LoadWallpaperUtilsL(); + + /* Strips file path information from screensaver UID. */ + TPtrC GetRealScreenSaverUid( const TInt aIndex ); + + /* Leaving version of ActivateScreenSaver. */ + void ActivateScreenSaverL( + const TInt aItemIndex, + TPslnScreenSaverActivation aActivationType ); + + /* Loads browser launcher dll to memory. */ + void LoadBrowserLaunchL(); + + /** + * Checks the status of the skin file. + * @param aIndex skin index from application. + * @return ETrue if skin file is exist and can be accessed. + * EFalse if an error occured or didn't exist. + */ + TBool SkinFileExist( const TInt& aIndex ); + + /** + * From MCenRepNotifyHandlerCallback. + */ + void HandleNotifyInt(TUint32 aId, TInt aNewValue); + + /* Gets transition effect value and initialize CenRep notify handler. */ + void InitTransitionEffectVauleL(); + + /* if KPslnSupportScreenSaverSelectionNone is supported return true, or false */ + TBool IsSupportScreenSaverNoneOption() const; + + private: // Data + + /* + * Skin store. + * Own. + */ + CPslnSkinStore* iSkinStore; + + /* + * Array of visible skins. + * Own. + */ + RPointerArray* iVisibleSkinArr; + + /* + * Skin server session. + */ + RAknsSrvSession iSkinSrvSession; + + /* + * CenRep object for skin keys. + * Own. + */ + CRepository* iSkinsRepository; + + /* + * CenRep object for screen saver keys. + * Own. + */ + CRepository* iScreenSaverRepository; + + /* + * CenRep object for themes application keys. + * Own. + */ + CRepository* iThemesAppRepository; + + /* + * Pointer to eikon environment. Stored to avoid repeated fetches. + * Not own. + */ + CEikonEnv* iEikEnv; + + /* + * Currently highlighted skin index. + */ + TInt iCurrentSkinIndex; + + /* + * Active skin index. + */ + TInt iActiveSkinIndex; + + /* + * Array of skin names. + */ + RArray iSkinNames; + + /* + * Array of screensaver filenames. + * Own. + */ + CDesC16ArrayFlat* iScreensaverFilenameArr; + + /* + * Array of screensaver names. + * Own. + */ + CDesC16ArrayFlat* iScreensaverNameArr; + + /* + * Array of screensaver capabilities. + */ + RArray iScreensaverCapsArr; + + /* + * Active screensaver information. + * Own. + */ + CPslnScreenSaverInfo* iScreenSaverInfo; + + /* + * A handle to a dynamically loadable DLL. + */ + RLibrary iWallpaperDll; + + /* + * Loads Wallpaper Utils DLL dynamically to memory. + * Allows use of the DLL through this pointer, but only for + * methods implemented within the wrapper. + * Own. + */ + CPslnWallpaperUtilsLoader* iWallpaperSetter; + + /** + * Listens to ECOM for screensaver plugin changes. + * Own. + */ + CPslnEcomListener* iScreenSaverListener; + + /* + * A handle to a dynamically loadable DLL. + */ + RLibrary iBrowserLaunchDll; + + /* + * Loads Wallpaper Utils DLL dynamically to memory. + * Allows use of the DLL through this pointer, but only for + * methods implemented within the wrapper. + * Own. + */ + CPslnBrowserLaunchLoader* iBrowserLauncher; + + /* + * Internal state of the class. + */ + enum TPslnModelState + { + // initial state + EPslnModelStateInitial = 0x00000000, + // wallpaper dll has been loaded + EPslnModelStateWallpaperDllLoaded = 0x00000001, + // has the default enable CR key for transition effects been read + EPslnModelStateTransitionEnableCRKeyRead = 0x00000002, + // is skin being previewed + EPslnModelStateSkinPreviewed = 0x00000004, + // browser launch dll has been loaded + EPslnModelStateBrowserLaunchDllLoaded = 0x00000008, + // localized skin names have been loaded + EPslnModelStateSkinNamesLoaded = 0x00000010 + }; + TBitFlags iInternalState; + + /** + * Default mask for enable transition effects. + */ + TInt iEffectsDefaultEnableMask; + + /** + * Transition effect setting value. + */ + TInt iTransitionEffectValue; + + /** + * A pointer to Central Repository notification handling. + * Used to monitor the change of KThemesTransitionEffects. + * Own. + */ + CCenRepNotifyHandler *iThemesAppCenRepNotifyHandler; + }; + +#endif // C_PSLNMODEL_H + +// End of File