diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/srvuiinc/eikkeysoundserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/srvuiinc/eikkeysoundserver.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 2002-2007 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: EikSrv keysound server. +* +*/ + +#ifndef __EIKKEYSOUNDSERVER_H__ +#define __EIKKEYSOUNDSERVER_H__ + +#include +#include +#include +#include +#include "eikkeysoundmap.h" +#include "eikkeysound.h" +#include +#include +#include "EikSrvUiConfig.hrh" + +#include +#include + +class CATAudioEventAPI; +class CEikSoundInfo; +class CAknToneSoundInfo; +class CAknFileSoundInfo; +class CAknSequenceSoundInfo; +class TAknSoundID; +class CAknEikAudioToneObserver; + +// For debugging purposes. Traces for EikKeySoundServer are enabled or disabled. +#if defined(_DEBUG) && defined(EIKKSS_ENABLE_TRACES) + #define LOGTEXT(AAA) RDebug::Print(AAA) + #define LOGTEXT1(AAA,BBB) RDebug::Print(AAA,BBB) + #define LOGTEXT2(AAA,BBB,CCC) RDebug::Print(AAA,BBB,CCC) + #define LOGTEXT3(AAA,BBB,CCC,DDD) RDebug::Print(AAA,BBB,CCC,DDD) +#else + #define LOGTEXT(AAA) + #define LOGTEXT1(AAA,BBB) + #define LOGTEXT2(AAA,BBB,CCC) + #define LOGTEXT3(AAA,BBB,CCC,DDD) +#endif + +// Anim Dll capture control. +class CAknAnimKeySoundControl : public CCoeControl + { +public: + CAknAnimKeySoundControl(); + void ConstructL(RWindowGroup* aParent); + }; + + +// Anim Dll Interface. +NONSHARABLE_CLASS(RAknAnimKeySound) : public RAnim + { +public: + RAknAnimKeySound(RAnimDll &aAnimDll); + void ConstructL(RWindowGroup* aParent); + void Close(); +private: + CAknAnimKeySoundControl* iKeySoundControl; + }; + + +// Storage for a single sound. Base class. +NONSHARABLE_CLASS(CEikSoundInfo) : public CBase + { +public: + enum TVolumeSetting + { + EKeypadVolumeOff = 0, + EKeypadVolumeQuiet, + EKeypadVolumeMedium, + EKeypadVolumeLoud, + ESoundVolume0 = EKeypadVolumeOff, + ESoundVolume1 = EKeypadVolumeOff + 1, + ESoundVolume2 = EKeypadVolumeOff + 2, + ESoundVolume3 = EKeypadVolumeOff + 3, + ESoundVolume4 = EKeypadVolumeOff + 4, + ESoundVolume5 = EKeypadVolumeOff + 5, + ESoundVolume6 = EKeypadVolumeOff + 6, + ESoundVolume7 = EKeypadVolumeOff + 7, + ESoundVolume8 = EKeypadVolumeOff + 8, + ESoundVolume9 = EKeypadVolumeOff + 9 + }; +public: + CEikSoundInfo(TInt aPriority, TInt aPreference); + virtual ~CEikSoundInfo(); + virtual void PlayL() = 0; + virtual void Stop() = 0; + virtual void SetVolume(TVolumeSetting aVolume) = 0; + TInt Preference(); + TVolumeSetting Volume(); + virtual void DoPlay() = 0; +protected: + TInt iPriority; + TInt iPreference; + TVolumeSetting iVolume; + }; + + +// Key sound server +NONSHARABLE_CLASS(CEikKeySoundServer) : + public CServer2, + public MCenRepNotifyHandlerCallback, + public MATEventCompleteObserver + { +public: + static TInt LaunchServer(TThreadId& aThreadId); + static CEikKeySoundServer* NewLC(); + ~CEikKeySoundServer(); + + // Methods called from session + void InitL(const RMessage2& aMessage); + void PlaySid(TInt aSid, TBool aPlaySelf); + void StopSid(TInt aSid); + void SetVolumeForPreferenceType(TInt aPreference, CEikSoundInfo::TVolumeSetting aVolume); + + void SetDisabledScanCode( TInt aScanCode ); + TInt DisabledScanCode(); + + // From MCenRepNotifyHandlerCallback + void HandleNotifyInt(TUint32 aId, TInt aNewValue); + + inline TBool ContextLocked() + { + return iContextLocked; + } + inline void SetContextLocked(TBool aLock) + { + iContextLocked = aLock; + } + + //Method for AT Audio Server callback + void Complete( TInt aError, TAudioThemeEvent aEvent); +private: + CEikKeySoundServer(); + void ConstructL(); + // from CServer2 + virtual CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + +public: + TBool iInit; + CArrayPtrFlat* iSoundList; + CArrayFixFlat* iSidList; + CEikKeySoundMap* iDefaultSoundMap; + CEikKeySoundStack* iCurrentSoundStack; + CEikSoundInfo::TVolumeSetting iKeypadVolume; + CCenRepNotifyHandler* iProfilesNotifyHandler; + CRepository* iProfilesRepository; + TBool iContextLocked; + + TInt iDisabledScanCode; + + CCenRepNotifyHandler *iWarningToneEnableHandler; + TInt iWarningToneEnabled; + + CATAudioEventAPI* iATSoundServerAPI; + }; + + +// Key sound session +NONSHARABLE_CLASS(CEikKeySoundSession) : public CSession2 + { +public: + static CEikKeySoundSession* NewL(CEikKeySoundServer* aServer); + ~CEikKeySoundSession(); + void DispatchMessageL(const RMessage2& aMessage); + // from CShareableSession + virtual void ServiceL(const RMessage2& aMessage); +private: + CEikKeySoundSession(CEikKeySoundServer* aServer); + void ConstructL(); + void AddSoundIdBufferL(const RMessage2& aMessage); + void RemoveSids(TInt aUid); + void AddToneSidL(const TAknSoundID& aSoundID, CAknToneSoundInfo* aSoundInfo); + void AddFileSidL(const TAknSoundID& aSoundID, CAknFileSoundInfo* aSoundInfo, + const TDesC& aFileName); + void AddSequenceSidL(const TAknSoundID& aSoundID, CAknSequenceSoundInfo* aSoundInfo); + void PushContextL(const RMessage2& aMessage); + void PopContext(); +private: + CEikKeySoundServer* iServer; + CEikKeySoundStack* iSoundStack; + TInt iClientUid; + TBool iOwnsDefaultSounds; + TBool iHasLockedContext; + }; + + +// Specialized base class for synthetized sounds (tones and sequences). +NONSHARABLE_CLASS(CAknSynthSoundInfo) : public CEikSoundInfo + { +public: + CAknSynthSoundInfo(TInt aPriority, TInt aPreference); + virtual ~CAknSynthSoundInfo(); + void InitL(); + virtual void PlayL(); + virtual void Stop(); + virtual void SetVolume(TVolumeSetting aVolume); + virtual void DoPlay(); +private: + virtual void Prepare(); + void DoSetVolume(CMdaAudioToneUtility* aTonePlayer); +protected: + CAknEikAudioToneObserver* iToneObserver; + CMdaAudioToneUtility* iTonePlayer; + TBool iPlayedStatically; + }; + + +// Tone sound info. +NONSHARABLE_CLASS(CAknToneSoundInfo) : public CAknSynthSoundInfo + { +public: + CAknToneSoundInfo(TInt aPriority, TInt aPreference); + virtual ~CAknToneSoundInfo(); +private: + virtual void Prepare(); +public: + TInt iFrequency; + TTimeIntervalMicroSeconds iMs; + }; + + +// Sequence sound info. +NONSHARABLE_CLASS(CAknSequenceSoundInfo) : public CAknSynthSoundInfo + { +public: + CAknSequenceSoundInfo(TInt aPriority, TInt aPreference); + virtual ~CAknSequenceSoundInfo(); + void ReadSequenceL(RReadStream& aStream); +private: + virtual void Prepare(); +public: + HBufC8* iSequence; + }; + + +// File sound info. +NONSHARABLE_CLASS(CAknFileSoundInfo) : + public CEikSoundInfo, + public MMdaAudioPlayerCallback, + public MMdaObjectStateChangeObserver + { +public: + CAknFileSoundInfo(TInt aPriority, TInt aPreference); + virtual ~CAknFileSoundInfo(); + void InitL(const TDesC& aFileName, CMdaServer* aMdaServer); + virtual void PlayL(); + virtual void Stop(); + virtual void SetVolume(TVolumeSetting aVolume); + // From MMdaAudioPlayerCallback + virtual void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration); + virtual void MapcPlayComplete(TInt aError); + virtual void DoPlay(); +private: + void LoadAudioDataL(RFs& aFs, const TDesC& aFileName, TDes8& aDes); + void DoSetVolume(CMdaAudioPlayerUtility* aAudioPlayer); + + // From MMdaObjectStateChangeObserver + virtual void MoscoStateChangeEvent(CBase* aObject, TInt aPreviousState, TInt aCurrentState, + TInt aErrorCode); +public: + CMdaAudioPlayerUtility* iAudioPlayer; + HBufC8* iAudioData; +private: + TBool iPlaying; + TBool iPrepared; + CMdaServer* iMdaServer; + }; + + +class TAknSoundID + { +public: + TInt iAppUid; + TUint iSid; + CEikSoundInfo* iSoundInfo; // reference only + }; + + +class TAknSoundMessageInfo + { +public: + TInt iSid; + TUint8 iFile; + TInt iFrequency; + TInt iMs; + }; + +#endif