profilesservices/ProfileEngine/EngSrc/CProfileEngineImpl.h
changeset 0 8c5d936e5675
child 8 f62c3a3d66b8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/ProfileEngine/EngSrc/CProfileEngineImpl.h	Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,416 @@
+/*
+* Copyright (c) 2002 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:  Profile engine implementation.
+*
+*/
+
+
+
+#ifndef __CPROFILEENGINEIMPL_H__
+#define __CPROFILEENGINEIMPL_H__
+
+//  INCLUDES
+#include <e32property.h>
+#include <f32file.h>            // RFs
+#include <Profile.hrh>          // TProfileRingingVolume 
+#include "MProfileEngineExtended.h" // MProfileEngineExtended
+#include "MProfileExtended.h" // MProfileExtended
+
+// FORWARD DECLARATIONS
+class CProfileNameImpl;
+class CProfileImpl;
+class CProfilesNamesArrayImpl;
+class DRMCommon;
+class MProfilesLocalFeatures;
+class CRepository;
+class TResourceReader;
+class CProfileTiming;
+
+// CLASS DECLARATION
+
+/**
+*  Profile engine implementation.
+*
+*  @lib ProfileEng
+*  @since 2.0
+*/
+NONSHARABLE_CLASS(CProfileEngineImpl) : public CBase,
+                           public MProfileEngineExtended
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CProfileEngineImpl* NewL();
+
+        /**
+        * Two-phased constructor.
+        */
+        static CProfileEngineImpl* NewLC();
+
+        /**
+        * Two-phased constructor.
+        * @param aFs An open file server session. Ownership is NOT transferred.
+        */
+        static CProfileEngineImpl* NewL( RFs* aFs );
+
+        /**
+        * Two-phased constructor.
+        * @param aFs An open file server session. Ownership is NOT transferred.
+        */
+        static CProfileEngineImpl* NewLC( RFs* aFs );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CProfileEngineImpl();
+
+    public: // Functions from base classes
+
+        /**
+        * From MProfileEngine.
+        */
+        virtual void Release();
+
+        /**
+        * From MProfileEngine.
+        */
+        virtual MProfile* ActiveProfileLC();
+
+        /**
+        * From MProfileEngine.
+        */
+        virtual MProfile* ActiveProfileL();
+
+        /**
+        * From MProfileEngine.
+        */
+        virtual TInt ActiveProfileId();
+
+        /**
+        * From MProfileEngine.
+        */
+        virtual void SetActiveProfileL( TInt aId );
+
+        /**
+        * From MProfileEngine.
+        */
+        virtual MProfilesNamesArray* ProfilesNamesArrayLC();
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual MProfileExtended* ProfileLC( TInt aId );
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual MProfileExtended* ProfileL( TInt aId );
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual void CommitChangeL( MProfileExtended& aProfile );
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual void SendPresenceSettingsL(
+            const MProfilePresence& aPresence );
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual TInt DeleteProfileL( TInt aId );
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual MProfileExtended* CreateProfileL();
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        virtual TBool IsDefaultProfile( TInt aId );
+
+        /**
+        * From MProfileEngine.
+        */
+        void SetTempRingingVolumeL( TProfileRingingVolume aVolume );
+
+        /**
+        * From MProfileEngine.
+        */
+        TProfileRingingVolume TempRingingVolumeL() const;
+
+        /**
+        * From MProfileEngine.
+        */
+        void SetTempMediaVolumeL( TProfileRingingVolume aVolume );
+
+        /**
+        * From MProfileEngine.
+        */
+        TProfileRingingVolume TempMediaVolumeL() const;
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        MProfilesLocalFeatures& LocalFeatures();
+
+        /**
+        * From MProfileEngine.
+        */
+        TBool IsFeatureSupported( TProfileFeatureId aFeatureId ) const;
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        void GetProfileUtilityObject( TProfileUtilityObjectType aType, TAny*& aImpl );
+
+        /**
+        * From MProfileEngine.
+        */
+        TBool IsActiveProfileTimedL();
+
+        /**
+        * From MProfileEngineExtended.
+        */
+        void SetActiveProfileTimedL( TInt aId, TTime aTime );
+
+    protected:  // New functions
+
+        /**
+        * Reads the resource with the given id from Profiles Engine resource
+        * file.
+        * @param aResourceId the id of the resource to be read
+        * @param aReader the resource reader object in which the buffer
+        * containing the resource is set
+        */
+        void ReadResourceInBufferLC( TInt aResourceId,
+                                     TResourceReader& aReader );
+
+        /**
+        * Read default profiles names from resource.
+        */
+        void ReadProfilesNamesFromResourceL();
+
+        /**
+        * Write profile settings to Central Repository.
+        * @since 2.8
+        * @param aProfile Profile
+        */
+        void WriteProfileL( MProfileExtended& aProfile );
+
+        /**
+        * Send an event indicating that a setting in the active profile was
+        * modified through Publish & Subscribe.
+        * @param aPSKey the P&S key which value should be changed
+        * @since 3.0
+        */
+        void PublishChangeL( TUint32 aPSKey );
+
+        /**
+        * Update Active Profile settings in Central Repository.
+        * @since 2.8
+        * @param aProfile Profile
+        * @param aSetId sets the id of the active profile to Central Repository
+        * only if this is ETrue
+        */
+        void UpdateActiveProfileSettingsL( MProfile& aProfile,
+                                           TBool aSetId = EFalse );
+
+        /**
+         * Updates the alert for groups shared data value.
+         * @since 2.6
+         * @param aProfile settings containing the new alert for groups.
+         */
+        void UpdateContactGroupsValueL( MProfile& aProfile );
+            
+        /**
+        * Get profile settings.
+        * @since 2.0
+        * @param aId Profile ID
+        * @return Profile instance
+        */
+        CProfileImpl* GetProfileL( TInt aId );
+
+        /**
+        * Read profiles names.
+        * @since 2.0
+        * @param aProfilePath Profile path where profiles readed
+        * @param aProfilesNames Profile names array
+        */
+        void ReadProfilesNamesL( CProfilesNamesArrayImpl* aProfilesNames );
+
+        /**
+        * Read new profile default name from resource.
+        * @param aResourceId resource id containing the profile name or
+        *        short name.
+        * @param aProfileName Buffer for default profile name.
+        * @since 2.1
+        */
+        void ReadNewProfileNameFromResourceL( TInt aResourceId,
+                                              TDes& aProfileName );
+
+        /**
+         * Helper function for setting the active profile. Wraps several
+         * leaving calls inside.
+         * @since 2.5
+         * @param aId the id of the profile to be set as active profile.
+         * @param aTime the time when the new profile should be deactivated
+         */
+        void DoSetActiveProfileL( TInt aId, TTime* aTime = NULL );
+
+        /**
+         * Helper method for SetTempRingingVolumeL() and SetTempMediaVolumeL()
+         * to set the needed volume value to Central Repository.
+         * @since 2.8
+         * @param aCenRep the central repository object to write the new
+         *        temporary volume
+         * @param aCenRepKey the key to the volume value in CentralRepository
+         * @param aVolume the new value to be set for the volume
+         */
+        void SetTempVolumeL( CRepository& aCenRep, TUint32 aCenRepKey,
+                             TProfileRingingVolume aVolume );
+
+        /**
+         * Helper method for TempRingingVolumeL() and TempMediaVolumeL() to
+         * get the needed volume value from Central Repository.
+         * @since 2.6
+         * @param aCenRep reference to the CenRep instance containing the data
+         * @param aCenRepKey the key to the volume value in Central Repository
+         */
+        TProfileRingingVolume TempVolumeL( CRepository& aCenRep,
+                                           TUint32 aCenRepKey ) const;
+
+        /**
+         * Helper method for SetTempMediaVolumeL() and SetTempRingingVolumeL()
+         * to check and leave with KErrAccessDenied if the corresponding
+         * setting item is read-only.
+         * @since 2.8
+         * @param aFlag the flag corresponding to the setting item to be
+         * checked for modifiability.
+         */
+        void LeaveIfReadOnlyL( TProfileFlags aFlag );
+
+        /**
+         * Helper method to check whether a client-given profile ID belongs to
+         * an existing profile.
+         * @since 3.0
+         * @param aId profile ID to check
+         * @return KErrNotFound if a profile with the given ID is not found,
+         *         KErrNone otherwise.
+         */
+
+        TInt CheckProfileIdL( TInt aId );
+
+        /**
+         * Creates the Publish & Subscribe keys needed for notifying about
+         * active profile changes if the keys aren't already created.
+         * @since 3.1
+         */
+        void CreatePubSubKeysIfNeededL();
+
+        /**
+         * Reads names of user-created profiles.
+         * @param aProfilesNames Profiles Names Array to be updated with the
+         *        user-created Profile Names.
+         * @param aNameTemplate CProfileNameImpl to be reused when reading name
+         *        data from Profiles Central Repository.
+         * @since 3.1
+         */
+        void ReadDynamicProfilesNamesL( CProfilesNamesArrayImpl* aProfilesNames,
+                                        CProfileNameImpl& aNameTemplate );
+
+        /**
+         * Reads both the normal and short versions of the name of a new profile
+         * from the resources.
+         * @return Pointer to CProfileNameImpl wrapping the normal and short
+         *         names of a new profile.
+         * @since 3.1
+         */
+        CProfileNameImpl* ReadNewProfileNameFromResourceLC();
+
+        /**
+         * Sets the localized name for a dynamic (= user-created) profile.
+         * @param aProfile the profile object into which the localized name
+         *        should be set.
+         * @since 3.1
+         */
+        void SetLocalizedNameForDynamicProfileL( CProfileImpl& aProfile );
+             
+    private:
+        TBool PowerSaveMode();
+        TBool PowerSaveModeL();
+        
+    private:
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( RFs* aFs );
+
+        /**
+        * Common part used by both ConstructL() methods above.
+        */
+        void CommonConstructL();
+
+    private:    // Data
+        // Own: resource file name is stored here (to avoid stack overflow)
+        TFileName iFileName;
+
+        // Own or Ref: File server session
+        RFs* iFs;
+
+        // Indicates whether the file server session is owned or not
+        TBool iFsOwned;
+
+        // Own: Central Repository handle for Profiles repository
+        CRepository* iCenRep;
+
+        // Own: Central Repository handle for VibraCntrl repository
+        CRepository* iVibraCenRep;
+
+        // Own: Publish & Subscribe client:
+        RProperty iProperty;
+
+        // Own: Localised profile names
+        CProfilesNamesArrayImpl* iProfileLocalisedNames;
+
+        // Own: Handle to a mutex
+        RMutex iMutex;
+
+        // Not owned: Locally variated features of Profiles:
+        MProfilesLocalFeatures* iFeatures;
+
+        // Indicates whether the Publish & Subscribe keys has been created:
+        TBool iPubSubKeysCreated;
+
+        // Own: functionality for timing of profiles
+        CProfileTiming* iProfileTiming;
+
+        // Supported features
+        TBool iSideVolumeKeys;
+    };
+
+#endif      //  __CPROFILEENGINEIMPL_H__
+
+// End of File