--- /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