mmserv/sts/sts/src/stssettingsmanager.cpp
changeset 43 9894ed580e4a
child 48 a493a607b5bf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/sts/sts/src/stssettingsmanager.cpp	Tue Aug 24 03:16:41 2010 -0500
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2010 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:
+ * This file provides the implementation of System Tone Service used
+ * by the STS Server.
+ */
+//  Include Files  
+#include "stssettingsmanager.h"
+#include <AudioPreference.h>
+#include <MProEngEngine.h>
+#include <MProEngNotifyHandler.h>
+#include <MProEngProfile.h>
+#include <MProEngTones.h>
+#include <MProEngToneSettings.h>
+#include <ProEngFactory.h>
+#include "stsplayersettings.h"
+_LIT(KDefaultFile,"z:\\data\\sounds\\digital\\clock.aac");
+
+// Data types
+/** The type of system tones that are supported by this API. */
+enum TSettingsType
+    {
+    EDefaultAlarm = 0,
+    EDefaultAlert,
+    EEmailAlert,
+    EIncomingCall,
+    EIncomingCall2,
+    EIncomingDataCall,
+    EMessageAlert,
+    EWarningBeep,
+    EENDMARKER
+    };
+
+/*static*/CStsSettingsManager* CStsSettingsManager::Create()
+    {
+    CStsSettingsManager* self = new CStsSettingsManager();
+
+    if (self != 0)
+        {
+        bool successful = self->Init();
+
+        if (!successful)
+            {
+            delete self;
+            self = 0;
+            }
+        }
+    return self;
+    }
+
+/*static*/void CStsSettingsManager::Delete(
+        CStsSettingsManager* aStsSettingsManager)
+    {
+    delete aStsSettingsManager;
+    }
+
+CStsSettingsManager::CStsSettingsManager() :
+    iEngine(0), iNotifyHandler(0), iPlayerSettings(0)
+    {
+    }
+
+bool CStsSettingsManager::Init()
+    {
+    bool successful = false;
+    TRAPD( err, iEngine = ProEngFactory::NewEngineL() );
+    if (err == KErrNone)
+        {
+        TRAP( err, iNotifyHandler = ProEngFactory::NewNotifyHandlerL() );
+        }
+    if (err == KErrNone)
+        {
+        TRAP( err, iNotifyHandler->RequestProfileActivationNotificationsL(*this) );
+        }
+    if (err == KErrNone)
+        {
+        TRAP( err, iNotifyHandler->RequestActiveProfileNotificationsL(*this) );
+        }
+    if (err == KErrNone)
+        {
+        iPlayerSettings = new CStsPlayerSettings[EENDMARKER];
+        if (iPlayerSettings != 0)
+            {
+            successful = LoadActiveProfileSettings();
+            }
+        }
+    return successful;
+    }
+
+CStsSettingsManager::~CStsSettingsManager()
+    {
+    if (iEngine != 0)
+        {
+        iEngine->Release();
+        }
+    if (iNotifyHandler != 0)
+        {
+        iNotifyHandler->CancelAll();
+        delete iNotifyHandler;
+        }
+    delete[] iPlayerSettings;
+    }
+
+CStsSettingsManager::MPlayerSettings& CStsSettingsManager::GetPlayerSettings(
+        CSystemToneService::TAlarmType aAlarm)
+    {
+    MPlayerSettings* result;
+    switch (aAlarm)
+        {
+        case CSystemToneService::EIncomingCall:
+            {
+            result = &iPlayerSettings[EIncomingCall];
+            break;
+            }
+        case CSystemToneService::EIncomingCallLine2:
+            {
+            result = &iPlayerSettings[EIncomingCall2];
+            break;
+            }
+        case CSystemToneService::EIncomingDataCall:
+            {
+            result = &iPlayerSettings[EIncomingDataCall];
+            break;
+            }
+        default:
+            {
+            result = &iPlayerSettings[EDefaultAlarm];
+            break;
+            }
+        }
+    return *result;
+    }
+
+CStsSettingsManager::MPlayerSettings& CStsSettingsManager::GetPlayerSettings(
+        CSystemToneService::TToneType aTone)
+    {
+    MPlayerSettings* result;
+    switch (aTone)
+        {
+        case CSystemToneService::EEmailAlert:
+            {
+            result = &iPlayerSettings[EEmailAlert];
+            break;
+            }
+        case CSystemToneService::ESmsAlert:
+        case CSystemToneService::EMmsAlert:
+        case CSystemToneService::EChatAlert:
+            {
+            result = &iPlayerSettings[EMessageAlert];
+            break;
+            }
+        case CSystemToneService::EWarningBeep:
+            {
+            result = &iPlayerSettings[EWarningBeep];
+            break;
+            }
+        default:
+            {
+            result = &iPlayerSettings[EDefaultAlert];
+            break;
+            }
+        }
+    return *result;
+    }
+
+void CStsSettingsManager::GetAudioPriorityPref(
+        CSystemToneService::TAlarmType aAlarm, TUint& aPriority,
+        TUint& aPreference)
+    {
+    switch (aAlarm)
+        {
+        case CSystemToneService::EIncomingCall:
+        case CSystemToneService::EIncomingCallLine2:
+            {
+            aPriority = KAudioPriorityRingingTone;
+            aPreference = KAudioPrefIncomingCall;
+            break;
+            }
+        case CSystemToneService::EIncomingDataCall:
+            {
+            aPriority = KAudioPriorityRealOnePlayer;
+            aPreference = KAudioPrefIncomingDataCall;
+            break;
+            }
+        default:
+            {
+            aPriority = KAudioPriorityAlarm;
+            aPreference = KAudioPrefAlarmClock;
+            break;
+            }
+        }
+    }
+
+void CStsSettingsManager::GetAudioPriorityPref(
+        CSystemToneService::TToneType aTone, TUint& aPriority,
+        TUint& aPreference)
+    {
+    switch (aTone)
+        {
+        case CSystemToneService::EEmailAlert:
+        case CSystemToneService::ESmsAlert:
+        case CSystemToneService::EMmsAlert:
+        case CSystemToneService::EChatAlert:
+            {
+            aPriority = KAudioPriorityRecvMsg;
+            aPreference = KAudioPrefNewSMS;
+            break;
+            }
+        case CSystemToneService::EWarningBeep:
+            {
+            aPriority = KAudioPriorityWarningTone;
+            aPreference = KAudioPrefWarning;
+            break;
+            }
+        default:
+            {
+            aPriority = KAudioPriorityWarningTone;
+            aPreference = KAudioPrefDefaultTone;
+            break;
+            }
+        }
+    }
+
+bool CStsSettingsManager::LoadActiveProfileSettings()
+    {
+    bool successful = false;
+    MProEngProfile* profile = 0;
+    TRAPD( err, profile = iEngine->ActiveProfileL() );
+
+    if (err == KErrNone)
+        {
+        MProEngTones& tones = profile->ProfileTones();
+        MProEngToneSettings& settings = profile->ToneSettings();
+        int volume = 50;
+        if (profile->IsSilent())
+            {
+            volume = 0;
+            }
+        int warningVolume = 0;
+        if (settings.WarningAndGameTones())
+            {
+            warningVolume = 50;
+            }
+
+        iPlayerSettings[EDefaultAlarm].SetFileName(KDefaultFile);
+        iPlayerSettings[EDefaultAlert].SetFileName(KDefaultFile);
+        iPlayerSettings[EEmailAlert].SetFileName(tones.EmailAlertTone());
+        iPlayerSettings[EIncomingCall].SetFileName(tones.RingingTone1());
+        iPlayerSettings[EIncomingCall2].SetFileName(tones.RingingTone2());
+        iPlayerSettings[EIncomingDataCall].SetFileName(
+                tones.VideoCallRingingTone());
+        iPlayerSettings[EMessageAlert].SetFileName(tones.MessageAlertTone());
+        iPlayerSettings[EWarningBeep].SetFileName(KDefaultFile);
+
+        iPlayerSettings[EDefaultAlarm].SetNumberOfRepeats(5);
+        iPlayerSettings[EDefaultAlert].SetNumberOfRepeats(0);
+        iPlayerSettings[EEmailAlert].SetNumberOfRepeats(0);
+        iPlayerSettings[EIncomingCall].SetNumberOfRepeats(100);
+        iPlayerSettings[EIncomingCall2].SetNumberOfRepeats(100);
+        iPlayerSettings[EIncomingDataCall].SetNumberOfRepeats(100);
+        iPlayerSettings[EMessageAlert].SetNumberOfRepeats(0);
+        iPlayerSettings[EWarningBeep].SetNumberOfRepeats(0);
+
+        iPlayerSettings[EDefaultAlarm].SetRepeatDelay(1000);
+        iPlayerSettings[EDefaultAlert].SetRepeatDelay(0);
+        iPlayerSettings[EEmailAlert].SetRepeatDelay(0);
+        iPlayerSettings[EIncomingCall].SetRepeatDelay(1000);
+        iPlayerSettings[EIncomingCall2].SetRepeatDelay(1000);
+        iPlayerSettings[EIncomingDataCall].SetRepeatDelay(1000);
+        iPlayerSettings[EMessageAlert].SetRepeatDelay(0);
+        iPlayerSettings[EWarningBeep].SetRepeatDelay(0);
+
+        iPlayerSettings[EDefaultAlarm].SetVolumePercentage(volume);
+        iPlayerSettings[EDefaultAlert].SetVolumePercentage(volume);
+        iPlayerSettings[EEmailAlert].SetVolumePercentage(volume);
+        iPlayerSettings[EIncomingCall].SetVolumePercentage(volume);
+        iPlayerSettings[EIncomingCall2].SetVolumePercentage(volume);
+        iPlayerSettings[EIncomingDataCall].SetVolumePercentage(volume);
+        iPlayerSettings[EMessageAlert].SetVolumePercentage(volume);
+        iPlayerSettings[EWarningBeep].SetVolumePercentage(warningVolume);
+
+        iPlayerSettings[EDefaultAlarm].SetVolumeRamp(1000000);
+        iPlayerSettings[EDefaultAlert].SetVolumeRamp(1000);
+        iPlayerSettings[EEmailAlert].SetVolumeRamp(1000);
+        iPlayerSettings[EIncomingCall].SetVolumeRamp(1000000);
+        iPlayerSettings[EIncomingCall2].SetVolumeRamp(1000000);
+        iPlayerSettings[EIncomingDataCall].SetVolumeRamp(1000000);
+        iPlayerSettings[EMessageAlert].SetVolumeRamp(1000);
+        iPlayerSettings[EWarningBeep].SetVolumeRamp(1000);
+
+        profile->Release();
+        successful = true;
+        }
+    return successful;
+    }
+
+void CStsSettingsManager::HandleActiveProfileModifiedL()
+    {
+    bool successful = LoadActiveProfileSettings();
+    if (!successful)
+        {
+        //TODO: Log error
+        }
+    }
+
+void CStsSettingsManager::HandleProfileActivatedL(TInt /*aProfileId*/)
+    {
+    bool successful = LoadActiveProfileSettings();
+    if (!successful)
+        {
+        //TODO: Log error
+        }
+    }