mmserv/sts/sts/src/stssettingsmanager.cpp
author hgs
Fri, 03 Sep 2010 19:34:12 -0500
changeset 48 a493a607b5bf
parent 43 9894ed580e4a
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description:
hgs
parents:
diff changeset
    15
 * This file provides the implementation of System Tone Service used
hgs
parents:
diff changeset
    16
 * by the STS Server.
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
//  Include Files  
hgs
parents:
diff changeset
    19
#include "stssettingsmanager.h"
hgs
parents:
diff changeset
    20
#include <AudioPreference.h>
hgs
parents:
diff changeset
    21
#include <MProEngEngine.h>
hgs
parents:
diff changeset
    22
#include <MProEngNotifyHandler.h>
hgs
parents:
diff changeset
    23
#include <MProEngProfile.h>
hgs
parents:
diff changeset
    24
#include <MProEngTones.h>
hgs
parents:
diff changeset
    25
#include <MProEngToneSettings.h>
hgs
parents:
diff changeset
    26
#include <ProEngFactory.h>
hgs
parents:
diff changeset
    27
#include "stsplayersettings.h"
48
hgs
parents: 43
diff changeset
    28
#include <NokiaAudioPreference.h>
43
hgs
parents:
diff changeset
    29
_LIT(KDefaultFile,"z:\\data\\sounds\\digital\\clock.aac");
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// Data types
hgs
parents:
diff changeset
    32
/** The type of system tones that are supported by this API. */
hgs
parents:
diff changeset
    33
enum TSettingsType
hgs
parents:
diff changeset
    34
    {
hgs
parents:
diff changeset
    35
    EDefaultAlarm = 0,
hgs
parents:
diff changeset
    36
    EDefaultAlert,
hgs
parents:
diff changeset
    37
    EEmailAlert,
hgs
parents:
diff changeset
    38
    EIncomingCall,
hgs
parents:
diff changeset
    39
    EIncomingCall2,
hgs
parents:
diff changeset
    40
    EIncomingDataCall,
hgs
parents:
diff changeset
    41
    EMessageAlert,
hgs
parents:
diff changeset
    42
    EWarningBeep,
hgs
parents:
diff changeset
    43
    EENDMARKER
hgs
parents:
diff changeset
    44
    };
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
/*static*/CStsSettingsManager* CStsSettingsManager::Create()
hgs
parents:
diff changeset
    47
    {
hgs
parents:
diff changeset
    48
    CStsSettingsManager* self = new CStsSettingsManager();
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
    if (self != 0)
hgs
parents:
diff changeset
    51
        {
hgs
parents:
diff changeset
    52
        bool successful = self->Init();
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
        if (!successful)
hgs
parents:
diff changeset
    55
            {
hgs
parents:
diff changeset
    56
            delete self;
hgs
parents:
diff changeset
    57
            self = 0;
hgs
parents:
diff changeset
    58
            }
hgs
parents:
diff changeset
    59
        }
hgs
parents:
diff changeset
    60
    return self;
hgs
parents:
diff changeset
    61
    }
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
/*static*/void CStsSettingsManager::Delete(
hgs
parents:
diff changeset
    64
        CStsSettingsManager* aStsSettingsManager)
hgs
parents:
diff changeset
    65
    {
hgs
parents:
diff changeset
    66
    delete aStsSettingsManager;
hgs
parents:
diff changeset
    67
    }
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
CStsSettingsManager::CStsSettingsManager() :
hgs
parents:
diff changeset
    70
    iEngine(0), iNotifyHandler(0), iPlayerSettings(0)
hgs
parents:
diff changeset
    71
    {
hgs
parents:
diff changeset
    72
    }
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
bool CStsSettingsManager::Init()
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
    bool successful = false;
hgs
parents:
diff changeset
    77
    TRAPD( err, iEngine = ProEngFactory::NewEngineL() );
hgs
parents:
diff changeset
    78
    if (err == KErrNone)
hgs
parents:
diff changeset
    79
        {
hgs
parents:
diff changeset
    80
        TRAP( err, iNotifyHandler = ProEngFactory::NewNotifyHandlerL() );
hgs
parents:
diff changeset
    81
        }
hgs
parents:
diff changeset
    82
    if (err == KErrNone)
hgs
parents:
diff changeset
    83
        {
hgs
parents:
diff changeset
    84
        TRAP( err, iNotifyHandler->RequestProfileActivationNotificationsL(*this) );
hgs
parents:
diff changeset
    85
        }
hgs
parents:
diff changeset
    86
    if (err == KErrNone)
hgs
parents:
diff changeset
    87
        {
hgs
parents:
diff changeset
    88
        TRAP( err, iNotifyHandler->RequestActiveProfileNotificationsL(*this) );
hgs
parents:
diff changeset
    89
        }
hgs
parents:
diff changeset
    90
    if (err == KErrNone)
hgs
parents:
diff changeset
    91
        {
hgs
parents:
diff changeset
    92
        iPlayerSettings = new CStsPlayerSettings[EENDMARKER];
hgs
parents:
diff changeset
    93
        if (iPlayerSettings != 0)
hgs
parents:
diff changeset
    94
            {
hgs
parents:
diff changeset
    95
            successful = LoadActiveProfileSettings();
hgs
parents:
diff changeset
    96
            }
hgs
parents:
diff changeset
    97
        }
hgs
parents:
diff changeset
    98
    return successful;
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
CStsSettingsManager::~CStsSettingsManager()
hgs
parents:
diff changeset
   102
    {
hgs
parents:
diff changeset
   103
    if (iEngine != 0)
hgs
parents:
diff changeset
   104
        {
hgs
parents:
diff changeset
   105
        iEngine->Release();
hgs
parents:
diff changeset
   106
        }
hgs
parents:
diff changeset
   107
    if (iNotifyHandler != 0)
hgs
parents:
diff changeset
   108
        {
hgs
parents:
diff changeset
   109
        iNotifyHandler->CancelAll();
hgs
parents:
diff changeset
   110
        delete iNotifyHandler;
hgs
parents:
diff changeset
   111
        }
hgs
parents:
diff changeset
   112
    delete[] iPlayerSettings;
hgs
parents:
diff changeset
   113
    }
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
CStsSettingsManager::MPlayerSettings& CStsSettingsManager::GetPlayerSettings(
hgs
parents:
diff changeset
   116
        CSystemToneService::TAlarmType aAlarm)
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
    MPlayerSettings* result;
hgs
parents:
diff changeset
   119
    switch (aAlarm)
hgs
parents:
diff changeset
   120
        {
hgs
parents:
diff changeset
   121
        case CSystemToneService::EIncomingCall:
hgs
parents:
diff changeset
   122
            {
hgs
parents:
diff changeset
   123
            result = &iPlayerSettings[EIncomingCall];
hgs
parents:
diff changeset
   124
            break;
hgs
parents:
diff changeset
   125
            }
hgs
parents:
diff changeset
   126
        case CSystemToneService::EIncomingCallLine2:
hgs
parents:
diff changeset
   127
            {
hgs
parents:
diff changeset
   128
            result = &iPlayerSettings[EIncomingCall2];
hgs
parents:
diff changeset
   129
            break;
hgs
parents:
diff changeset
   130
            }
hgs
parents:
diff changeset
   131
        case CSystemToneService::EIncomingDataCall:
hgs
parents:
diff changeset
   132
            {
hgs
parents:
diff changeset
   133
            result = &iPlayerSettings[EIncomingDataCall];
hgs
parents:
diff changeset
   134
            break;
hgs
parents:
diff changeset
   135
            }
hgs
parents:
diff changeset
   136
        default:
hgs
parents:
diff changeset
   137
            {
hgs
parents:
diff changeset
   138
            result = &iPlayerSettings[EDefaultAlarm];
hgs
parents:
diff changeset
   139
            break;
hgs
parents:
diff changeset
   140
            }
hgs
parents:
diff changeset
   141
        }
hgs
parents:
diff changeset
   142
    return *result;
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
CStsSettingsManager::MPlayerSettings& CStsSettingsManager::GetPlayerSettings(
hgs
parents:
diff changeset
   146
        CSystemToneService::TToneType aTone)
hgs
parents:
diff changeset
   147
    {
hgs
parents:
diff changeset
   148
    MPlayerSettings* result;
hgs
parents:
diff changeset
   149
    switch (aTone)
hgs
parents:
diff changeset
   150
        {
hgs
parents:
diff changeset
   151
        case CSystemToneService::EEmailAlert:
hgs
parents:
diff changeset
   152
            {
hgs
parents:
diff changeset
   153
            result = &iPlayerSettings[EEmailAlert];
hgs
parents:
diff changeset
   154
            break;
hgs
parents:
diff changeset
   155
            }
hgs
parents:
diff changeset
   156
        case CSystemToneService::ESmsAlert:
hgs
parents:
diff changeset
   157
        case CSystemToneService::EMmsAlert:
hgs
parents:
diff changeset
   158
        case CSystemToneService::EChatAlert:
hgs
parents:
diff changeset
   159
            {
hgs
parents:
diff changeset
   160
            result = &iPlayerSettings[EMessageAlert];
hgs
parents:
diff changeset
   161
            break;
hgs
parents:
diff changeset
   162
            }
hgs
parents:
diff changeset
   163
        case CSystemToneService::EWarningBeep:
hgs
parents:
diff changeset
   164
            {
hgs
parents:
diff changeset
   165
            result = &iPlayerSettings[EWarningBeep];
hgs
parents:
diff changeset
   166
            break;
hgs
parents:
diff changeset
   167
            }
hgs
parents:
diff changeset
   168
        default:
hgs
parents:
diff changeset
   169
            {
hgs
parents:
diff changeset
   170
            result = &iPlayerSettings[EDefaultAlert];
hgs
parents:
diff changeset
   171
            break;
hgs
parents:
diff changeset
   172
            }
hgs
parents:
diff changeset
   173
        }
hgs
parents:
diff changeset
   174
    return *result;
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
void CStsSettingsManager::GetAudioPriorityPref(
hgs
parents:
diff changeset
   178
        CSystemToneService::TAlarmType aAlarm, TUint& aPriority,
hgs
parents:
diff changeset
   179
        TUint& aPreference)
hgs
parents:
diff changeset
   180
    {
hgs
parents:
diff changeset
   181
    switch (aAlarm)
hgs
parents:
diff changeset
   182
        {
hgs
parents:
diff changeset
   183
        case CSystemToneService::EIncomingCall:
hgs
parents:
diff changeset
   184
        case CSystemToneService::EIncomingCallLine2:
hgs
parents:
diff changeset
   185
            {
hgs
parents:
diff changeset
   186
            aPriority = KAudioPriorityRingingTone;
hgs
parents:
diff changeset
   187
            aPreference = KAudioPrefIncomingCall;
hgs
parents:
diff changeset
   188
            break;
hgs
parents:
diff changeset
   189
            }
hgs
parents:
diff changeset
   190
        case CSystemToneService::EIncomingDataCall:
hgs
parents:
diff changeset
   191
            {
hgs
parents:
diff changeset
   192
            aPriority = KAudioPriorityRealOnePlayer;
hgs
parents:
diff changeset
   193
            aPreference = KAudioPrefIncomingDataCall;
hgs
parents:
diff changeset
   194
            break;
hgs
parents:
diff changeset
   195
            }
hgs
parents:
diff changeset
   196
        default:
hgs
parents:
diff changeset
   197
            {
hgs
parents:
diff changeset
   198
            aPriority = KAudioPriorityAlarm;
hgs
parents:
diff changeset
   199
            aPreference = KAudioPrefAlarmClock;
hgs
parents:
diff changeset
   200
            break;
hgs
parents:
diff changeset
   201
            }
hgs
parents:
diff changeset
   202
        }
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
void CStsSettingsManager::GetAudioPriorityPref(
hgs
parents:
diff changeset
   206
        CSystemToneService::TToneType aTone, TUint& aPriority,
hgs
parents:
diff changeset
   207
        TUint& aPreference)
hgs
parents:
diff changeset
   208
    {
hgs
parents:
diff changeset
   209
    switch (aTone)
hgs
parents:
diff changeset
   210
        {
hgs
parents:
diff changeset
   211
        case CSystemToneService::EEmailAlert:
hgs
parents:
diff changeset
   212
        case CSystemToneService::ESmsAlert:
hgs
parents:
diff changeset
   213
        case CSystemToneService::EMmsAlert:
hgs
parents:
diff changeset
   214
        case CSystemToneService::EChatAlert:
hgs
parents:
diff changeset
   215
            {
hgs
parents:
diff changeset
   216
            aPriority = KAudioPriorityRecvMsg;
hgs
parents:
diff changeset
   217
            aPreference = KAudioPrefNewSMS;
hgs
parents:
diff changeset
   218
            break;
hgs
parents:
diff changeset
   219
            }
48
hgs
parents: 43
diff changeset
   220
        case CSystemToneService::EErrorBeep:
hgs
parents: 43
diff changeset
   221
            {
hgs
parents: 43
diff changeset
   222
            aPriority = KAudioPriorityHighLevel;
hgs
parents: 43
diff changeset
   223
            aPreference = KAudioPrefError;
hgs
parents: 43
diff changeset
   224
            break;
hgs
parents: 43
diff changeset
   225
            }
43
hgs
parents:
diff changeset
   226
        case CSystemToneService::EWarningBeep:
hgs
parents:
diff changeset
   227
            {
hgs
parents:
diff changeset
   228
            aPriority = KAudioPriorityWarningTone;
hgs
parents:
diff changeset
   229
            aPreference = KAudioPrefWarning;
hgs
parents:
diff changeset
   230
            break;
hgs
parents:
diff changeset
   231
            }
hgs
parents:
diff changeset
   232
        default:
hgs
parents:
diff changeset
   233
            {
hgs
parents:
diff changeset
   234
            aPriority = KAudioPriorityWarningTone;
hgs
parents:
diff changeset
   235
            aPreference = KAudioPrefDefaultTone;
hgs
parents:
diff changeset
   236
            break;
hgs
parents:
diff changeset
   237
            }
hgs
parents:
diff changeset
   238
        }
hgs
parents:
diff changeset
   239
    }
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
bool CStsSettingsManager::LoadActiveProfileSettings()
hgs
parents:
diff changeset
   242
    {
hgs
parents:
diff changeset
   243
    bool successful = false;
hgs
parents:
diff changeset
   244
    MProEngProfile* profile = 0;
hgs
parents:
diff changeset
   245
    TRAPD( err, profile = iEngine->ActiveProfileL() );
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
    if (err == KErrNone)
hgs
parents:
diff changeset
   248
        {
hgs
parents:
diff changeset
   249
        MProEngTones& tones = profile->ProfileTones();
hgs
parents:
diff changeset
   250
        MProEngToneSettings& settings = profile->ToneSettings();
hgs
parents:
diff changeset
   251
        int volume = 50;
hgs
parents:
diff changeset
   252
        if (profile->IsSilent())
hgs
parents:
diff changeset
   253
            {
hgs
parents:
diff changeset
   254
            volume = 0;
hgs
parents:
diff changeset
   255
            }
hgs
parents:
diff changeset
   256
        int warningVolume = 0;
hgs
parents:
diff changeset
   257
        if (settings.WarningAndGameTones())
hgs
parents:
diff changeset
   258
            {
hgs
parents:
diff changeset
   259
            warningVolume = 50;
hgs
parents:
diff changeset
   260
            }
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
        iPlayerSettings[EDefaultAlarm].SetFileName(KDefaultFile);
hgs
parents:
diff changeset
   263
        iPlayerSettings[EDefaultAlert].SetFileName(KDefaultFile);
hgs
parents:
diff changeset
   264
        iPlayerSettings[EEmailAlert].SetFileName(tones.EmailAlertTone());
hgs
parents:
diff changeset
   265
        iPlayerSettings[EIncomingCall].SetFileName(tones.RingingTone1());
hgs
parents:
diff changeset
   266
        iPlayerSettings[EIncomingCall2].SetFileName(tones.RingingTone2());
hgs
parents:
diff changeset
   267
        iPlayerSettings[EIncomingDataCall].SetFileName(
hgs
parents:
diff changeset
   268
                tones.VideoCallRingingTone());
hgs
parents:
diff changeset
   269
        iPlayerSettings[EMessageAlert].SetFileName(tones.MessageAlertTone());
hgs
parents:
diff changeset
   270
        iPlayerSettings[EWarningBeep].SetFileName(KDefaultFile);
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
        iPlayerSettings[EDefaultAlarm].SetNumberOfRepeats(5);
hgs
parents:
diff changeset
   273
        iPlayerSettings[EDefaultAlert].SetNumberOfRepeats(0);
hgs
parents:
diff changeset
   274
        iPlayerSettings[EEmailAlert].SetNumberOfRepeats(0);
hgs
parents:
diff changeset
   275
        iPlayerSettings[EIncomingCall].SetNumberOfRepeats(100);
hgs
parents:
diff changeset
   276
        iPlayerSettings[EIncomingCall2].SetNumberOfRepeats(100);
hgs
parents:
diff changeset
   277
        iPlayerSettings[EIncomingDataCall].SetNumberOfRepeats(100);
hgs
parents:
diff changeset
   278
        iPlayerSettings[EMessageAlert].SetNumberOfRepeats(0);
hgs
parents:
diff changeset
   279
        iPlayerSettings[EWarningBeep].SetNumberOfRepeats(0);
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
        iPlayerSettings[EDefaultAlarm].SetRepeatDelay(1000);
hgs
parents:
diff changeset
   282
        iPlayerSettings[EDefaultAlert].SetRepeatDelay(0);
hgs
parents:
diff changeset
   283
        iPlayerSettings[EEmailAlert].SetRepeatDelay(0);
hgs
parents:
diff changeset
   284
        iPlayerSettings[EIncomingCall].SetRepeatDelay(1000);
hgs
parents:
diff changeset
   285
        iPlayerSettings[EIncomingCall2].SetRepeatDelay(1000);
hgs
parents:
diff changeset
   286
        iPlayerSettings[EIncomingDataCall].SetRepeatDelay(1000);
hgs
parents:
diff changeset
   287
        iPlayerSettings[EMessageAlert].SetRepeatDelay(0);
hgs
parents:
diff changeset
   288
        iPlayerSettings[EWarningBeep].SetRepeatDelay(0);
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
        iPlayerSettings[EDefaultAlarm].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   291
        iPlayerSettings[EDefaultAlert].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   292
        iPlayerSettings[EEmailAlert].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   293
        iPlayerSettings[EIncomingCall].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   294
        iPlayerSettings[EIncomingCall2].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   295
        iPlayerSettings[EIncomingDataCall].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   296
        iPlayerSettings[EMessageAlert].SetVolumePercentage(volume);
hgs
parents:
diff changeset
   297
        iPlayerSettings[EWarningBeep].SetVolumePercentage(warningVolume);
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
        iPlayerSettings[EDefaultAlarm].SetVolumeRamp(1000000);
hgs
parents:
diff changeset
   300
        iPlayerSettings[EDefaultAlert].SetVolumeRamp(1000);
hgs
parents:
diff changeset
   301
        iPlayerSettings[EEmailAlert].SetVolumeRamp(1000);
hgs
parents:
diff changeset
   302
        iPlayerSettings[EIncomingCall].SetVolumeRamp(1000000);
hgs
parents:
diff changeset
   303
        iPlayerSettings[EIncomingCall2].SetVolumeRamp(1000000);
hgs
parents:
diff changeset
   304
        iPlayerSettings[EIncomingDataCall].SetVolumeRamp(1000000);
hgs
parents:
diff changeset
   305
        iPlayerSettings[EMessageAlert].SetVolumeRamp(1000);
hgs
parents:
diff changeset
   306
        iPlayerSettings[EWarningBeep].SetVolumeRamp(1000);
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
        profile->Release();
hgs
parents:
diff changeset
   309
        successful = true;
hgs
parents:
diff changeset
   310
        }
hgs
parents:
diff changeset
   311
    return successful;
hgs
parents:
diff changeset
   312
    }
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
void CStsSettingsManager::HandleActiveProfileModifiedL()
hgs
parents:
diff changeset
   315
    {
hgs
parents:
diff changeset
   316
    bool successful = LoadActiveProfileSettings();
hgs
parents:
diff changeset
   317
    if (!successful)
hgs
parents:
diff changeset
   318
        {
hgs
parents:
diff changeset
   319
        //TODO: Log error
hgs
parents:
diff changeset
   320
        }
hgs
parents:
diff changeset
   321
    }
hgs
parents:
diff changeset
   322
hgs
parents:
diff changeset
   323
void CStsSettingsManager::HandleProfileActivatedL(TInt /*aProfileId*/)
hgs
parents:
diff changeset
   324
    {
hgs
parents:
diff changeset
   325
    bool successful = LoadActiveProfileSettings();
hgs
parents:
diff changeset
   326
    if (!successful)
hgs
parents:
diff changeset
   327
        {
hgs
parents:
diff changeset
   328
        //TODO: Log error
hgs
parents:
diff changeset
   329
        }
hgs
parents:
diff changeset
   330
    }