uifw/EikStd/srvuiinc/eikkeysoundserver.h
changeset 0 2f259fa3e83a
child 18 0aa5fbdfbc30
--- /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 <e32base.h>
+#include <mdaaudiosampleplayer.h>
+#include <mdaaudiotoneplayer.h>
+#include <mdaaudiosampleeditor.h>
+#include "eikkeysoundmap.h"
+#include "eikkeysound.h"
+#include <coecntrl.h>
+#include <cenrepnotifyhandler.h>
+#include "EikSrvUiConfig.hrh"
+
+#include <ataudioeventapi.h>
+#include <mateventcompleteobserver.h>
+
+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<CEikSoundInfo>* iSoundList;
+    CArrayFixFlat<TAknSoundID>* 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