mmserv/sts/sts/src/sts.cpp
changeset 47 c2e43643db4c
parent 42 1fa3fb47b1e3
child 52 4ce423f34688
equal deleted inserted replaced
42:1fa3fb47b1e3 47:c2e43643db4c
    13  *
    13  *
    14  * Description:
    14  * Description:
    15  * This file provides the implementation of System Tone Service used
    15  * This file provides the implementation of System Tone Service used
    16  * by the STS Server.
    16  * by the STS Server.
    17  */
    17  */
    18 
    18 //  Include Files  
    19 #include "sts.h"
    19 #include "sts.h"
    20 #include <AudioPreference.h>
    20 #include "stssettingsmanager.h"
    21 #include <MProEngEngine.h>
       
    22 #include <MProEngProfile.h>
       
    23 #include <MProEngTones.h>
       
    24 #include <MProEngToneSettings.h>
       
    25 #include <ProEngFactory.h>
       
    26 
       
    27 _LIT(KDefaultFile,"z:\\data\\sounds\\digital\\clock.aac");
       
    28 
       
    29 
    21 
    30 class CSts::CPlayerNode
    22 class CSts::CPlayerNode
    31     {
    23     {
    32 public:
    24 public:
    33     CPlayerNode(CStsPlayer* aPlayer);
    25     CPlayerNode(CStsPlayer* aPlayer);
    73     }
    65     }
    74 
    66 
    75 /*static*/CSts* CSts::Create()
    67 /*static*/CSts* CSts::Create()
    76     {
    68     {
    77     CSts* self = new CSts();
    69     CSts* self = new CSts();
    78      
    70 
    79     if (self != 0)
    71     if (self != 0)
    80         {
    72         {
    81         bool successful = self->Init();
    73         bool successful = self->Init();
    82        
    74 
    83         if(successful)
    75         if (!successful)
    84         {	
    76             {
    85         	TRAPD( err ,self->LoadActiveProfileSettingsL());
       
    86         	if( (err != KErrNone ) && (!successful))
       
    87            {
       
    88             delete self;
    77             delete self;
    89             self = 0;
    78             self = 0;
    90            }
    79             }
    91         }
    80         }
    92       }
       
    93     return self;
    81     return self;
    94     }
    82     }
    95 
    83 
    96 /*static*/void CSts::Delete(CSts* aSts)
    84 /*static*/void CSts::Delete(CSts* aSts)
    97     {
    85     {
    98     delete aSts;
    86     delete aSts;
    99     }
    87     }
   100 
    88 
   101 CSts::CSts() :
    89 CSts::CSts() :
   102     iNextContext(1)
    90     iNextContext(1), iSettingsManager(0)
   103     {
    91     {
   104     }
    92     }
   105 
    93 
   106 bool CSts::Init()
    94 bool CSts::Init()
   107     {
    95     {
   108     iEngine =  ProEngFactory::NewEngineL();
    96     bool successful = false;
   109     return true;
    97     iSettingsManager = CStsSettingsManager::Create();
       
    98     if (iSettingsManager != 0)
       
    99         {
       
   100         successful = true;
       
   101         }
       
   102     return successful;
   110     }
   103     }
   111 
   104 
   112 CSts::~CSts()
   105 CSts::~CSts()
   113     {
   106     {
   114     CleanUpPlayers();
   107     CleanUpPlayers();
   115     if (iProfile)
   108     CStsSettingsManager::Delete(iSettingsManager);
   116         {
   109     }
   117         iProfile->Release();
       
   118         }
       
   119     	if (iEngine)
       
   120         {
       
   121         iEngine->Release();
       
   122         }
       
   123         
       
   124     }
       
   125 
       
   126 
       
   127 void CSts::LoadActiveProfileSettingsL()
       
   128 	{
       
   129 		if(!iEngine)
       
   130 		   	{
       
   131 		   		iEngine =  ProEngFactory::NewEngineL();
       
   132         	}
       
   133 		
       
   134         if (iEngine)
       
   135             iProfile = iEngine->ActiveProfileL();
       
   136 	    
       
   137 	    if (iProfile)
       
   138 	        {
       
   139              MProEngToneSettings& settings  = iProfile->ToneSettings();
       
   140              iWarningToneEnabled = settings.WarningAndGameTones();
       
   141 	        }
       
   142       
       
   143   }
       
   144 
   110 
   145 void CSts::PlayTone(CSystemToneService::TToneType aTone)
   111 void CSts::PlayTone(CSystemToneService::TToneType aTone)
   146     {
   112     {
   147     if(iProfile)
   113     CStsPlayer* player = CStsPlayer::Create(*this, *iSettingsManager,
   148     
   114             iNextContext, aTone);
   149     {
       
   150     	MProEngTones&         tones = iProfile->ProfileTones();
       
   151 		
       
   152 			switch (aTone)
       
   153 				{
       
   154 				case CSystemToneService::EEmailAlert:
       
   155 					{
       
   156 				    	iFileName.Set(tones.EmailAlertTone());
       
   157 				    	iAudioPreference = KAudioPrefNewSMS;
       
   158 				    	iAudioPriority = KAudioPriorityRecvMsg ;
       
   159 				    	break;
       
   160 				    }
       
   161 				case CSystemToneService::ESmsAlert:
       
   162 					{
       
   163 				    	iFileName.Set(tones.MessageAlertTone());
       
   164 				    	iAudioPreference = KAudioPrefNewSMS;
       
   165 				    	iAudioPriority = KAudioPriorityRecvMsg;
       
   166 				    	break; 
       
   167 				    }
       
   168 				case CSystemToneService::EMmsAlert:
       
   169 					{
       
   170 				    	iFileName.Set(tones.MessageAlertTone());
       
   171 				    	iAudioPreference = KAudioPrefNewSMS;
       
   172 				    	iAudioPriority = KAudioPriorityRecvMsg;
       
   173 				    	break;
       
   174 				  	}
       
   175 				case CSystemToneService::EChatAlert:
       
   176 					{
       
   177 				    	iFileName.Set(tones.MessageAlertTone());
       
   178 				    	iAudioPreference = KAudioPrefNewSMS ;
       
   179 				    	iAudioPriority = KAudioPriorityRecvMsg;
       
   180 				    	break;
       
   181 				    } 
       
   182 				case CSystemToneService::EWarningBeep:
       
   183 				    {
       
   184 				    	iAudioPreference = KAudioPrefWarning;
       
   185 				    	iAudioPriority =  KAudioPriorityWarningTone ;
       
   186 				    	if (iWarningToneEnabled)
       
   187 				      	  iFileName.Set(KDefaultFile);
       
   188 				    	else
       
   189 				      	  iVolume = 0;
       
   190 				    
       
   191 				    	break;
       
   192 				    }
       
   193 				default:
       
   194 					{
       
   195 					  	iFileName.Set(KDefaultFile);
       
   196 					  	iAudioPreference = KAudioPrefDefaultTone;
       
   197 				        iAudioPriority = KAudioPriorityWarningTone ;
       
   198 				      break;
       
   199 				    }
       
   200 				}
       
   201 			}
       
   202 			
       
   203 		else
       
   204 		{			 
       
   205 				 iFileName.Set(KDefaultFile);
       
   206 				 iAudioPreference = KAudioPrefDefaultTone;
       
   207 				 iAudioPriority = KAudioPriorityWarningTone ;
       
   208 		}
       
   209 		
       
   210 		
       
   211     CStsPlayer* player = CStsPlayer::CreateTonePlayer(*this, aTone,
       
   212             iNextContext, iFileName, iVolume, 
       
   213             iAudioPreference, iAudioPriority);
       
   214     if (player != 0)
   115     if (player != 0)
   215         {
   116         {
   216         iPlayerMap[iNextContext] = new CPlayerNode(player);
   117         iPlayerMap[iNextContext] = new CPlayerNode(player);
   217         iNextContext++;
   118         iNextContext++;
   218         if (iNextContext == 0)
   119         if (iNextContext == 0)
   226     }
   127     }
   227 
   128 
   228 void CSts::PlayAlarm(CSystemToneService::TAlarmType aAlarm,
   129 void CSts::PlayAlarm(CSystemToneService::TAlarmType aAlarm,
   229         unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver)
   130         unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver)
   230     {
   131     {
   231     
   132     CStsPlayer* player = CStsPlayer::Create(*this, *iSettingsManager,
   232     if(iProfile)
   133             iNextContext, aAlarm);
   233     
       
   234    		 {
       
   235     		MProEngTones&         tones = iProfile->ProfileTones();
       
   236 		 
       
   237 		 	switch (aAlarm)
       
   238         	{
       
   239         	case CSystemToneService::EIncomingCall:
       
   240         		{
       
   241             		iFileName.Set(tones.RingingTone1());
       
   242             		iAudioPreference = KAudioPrefIncomingCall ;
       
   243 					iAudioPriority = KAudioPriorityRingingTone ;
       
   244             		break;
       
   245             	}
       
   246        		case CSystemToneService::EIncomingCallLine2:
       
   247        			{
       
   248             		iFileName.Set(tones.RingingTone2());
       
   249             		iAudioPreference = KAudioPrefIncomingCall;
       
   250 					iAudioPriority = KAudioPriorityRingingTone ;
       
   251             		break;  
       
   252             	}
       
   253             case CSystemToneService::EIncomingDataCall:
       
   254             	{
       
   255             		iFileName.Set(tones.VideoCallRingingTone());
       
   256             		iAudioPreference = KAudioPrefIncomingDataCall;
       
   257 		    		iAudioPriority = KAudioPriorityRealOnePlayer;
       
   258             		break;
       
   259             	}
       
   260         	default:
       
   261         		{
       
   262         			iFileName.Set(KDefaultFile);
       
   263         			iAudioPreference = KAudioPrefAlarmClock  ;
       
   264 					iAudioPriority = KAudioPriorityAlarm;
       
   265 					break;
       
   266             	}
       
   267        		}
       
   268       	}
       
   269       else
       
   270 		{		
       
   271 			     iFileName.Set(KDefaultFile);	 
       
   272 				 iAudioPreference = KAudioPrefDefaultTone;
       
   273 				 iAudioPriority = KAudioPriorityWarningTone ;
       
   274 				 
       
   275 		}  
       
   276     	
       
   277     CStsPlayer* player = CStsPlayer::CreateAlarmPlayer(*this, aAlarm,
       
   278              iNextContext, iFileName, iVolume, 
       
   279              iAudioPreference, iAudioPriority);
       
   280     if (player != 0)
   134     if (player != 0)
   281         {
   135         {
   282         iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver);
   136         iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver);
   283         aAlarmContext = iNextContext;
   137         aAlarmContext = iNextContext;
   284         iNextContext++;
   138         iNextContext++;
   291         //TODO: Add trace here
   145         //TODO: Add trace here
   292         aAlarmContext = 0;
   146         aAlarmContext = 0;
   293         }
   147         }
   294     }
   148     }
   295 
   149 
   296 void CSts::StopAlarm(unsigned int aAlarmContext)
   150 void CSts::PlayAlarm(CSystemToneService::TToneType aTone,
   297     {
       
   298     CPlayerNode* node = iPlayerMap[aAlarmContext];
       
   299     iPlayerMap.erase(aAlarmContext);
       
   300     if (node)
       
   301         {
       
   302         node->Player()->Stop();
       
   303         delete node;
       
   304         }
       
   305     else
       
   306         {
       
   307         //TODO: Add trace here
       
   308         }
       
   309     }
       
   310 
       
   311 
       
   312 void CSts::PlayToneStop(CSystemToneService::TToneType aTone,
       
   313         unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver)
   151         unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver)
   314     {
   152     {
   315     
   153     CStsPlayer* player = CStsPlayer::Create(*this, *iSettingsManager,
   316     if(iProfile)
   154             iNextContext, aTone);
   317     
       
   318     {
       
   319     	MProEngTones&         tones = iProfile->ProfileTones();
       
   320 		
       
   321 			switch (aTone)
       
   322 				{
       
   323 				case CSystemToneService::EEmailAlert:
       
   324 					{
       
   325 				    	iFileName.Set(tones.EmailAlertTone());
       
   326 				    	iAudioPreference = KAudioPrefNewSMS;
       
   327 				    	iAudioPriority = KAudioPriorityRecvMsg ;
       
   328 				    	break;
       
   329 				    }
       
   330 				case CSystemToneService::ESmsAlert:
       
   331 					{
       
   332 				    	iFileName.Set(tones.MessageAlertTone());
       
   333 				    	iAudioPreference = KAudioPrefNewSMS;
       
   334 				    	iAudioPriority = KAudioPriorityRecvMsg;
       
   335 				    	break; 
       
   336 				    }
       
   337 				case CSystemToneService::EMmsAlert:
       
   338 					{
       
   339 				    	iFileName.Set(tones.MessageAlertTone());
       
   340 				    	iAudioPreference = KAudioPrefNewSMS;
       
   341 				    	iAudioPriority = KAudioPriorityRecvMsg;
       
   342 				    	break;
       
   343 				  	}
       
   344 				case CSystemToneService::EChatAlert:
       
   345 					{
       
   346 				    	iFileName.Set(tones.MessageAlertTone());
       
   347 				    	iAudioPreference = KAudioPrefNewSMS ;
       
   348 				    	iAudioPriority = KAudioPriorityRecvMsg;
       
   349 				    	break;
       
   350 				    } 
       
   351 				case CSystemToneService::EWarningBeep:
       
   352 				    {
       
   353 				    	iAudioPreference = KAudioPrefWarning;
       
   354 				    	iAudioPriority =  KAudioPriorityWarningTone ;
       
   355 				    	if (iWarningToneEnabled)
       
   356 				      	  iFileName.Set(KDefaultFile);
       
   357 				    	else
       
   358 				      	  iVolume = 0;
       
   359 				    
       
   360 				    	break;
       
   361 				    }
       
   362 				default:
       
   363 					{
       
   364 					  	iFileName.Set(KDefaultFile);
       
   365 					  	iAudioPreference = KAudioPrefDefaultTone;
       
   366 				        iAudioPriority = KAudioPriorityWarningTone ;
       
   367 				      break;
       
   368 				    }
       
   369 				}
       
   370 			}
       
   371 			
       
   372 		else
       
   373 		{			 
       
   374 				 iFileName.Set(KDefaultFile);
       
   375 				 iAudioPreference = KAudioPrefDefaultTone;
       
   376 				 iAudioPriority = KAudioPriorityWarningTone ;
       
   377 		}
       
   378     	
       
   379     CStsPlayer* player = CStsPlayer::CreateTonePlayer(*this, aTone,
       
   380              iNextContext, iFileName, iVolume, 
       
   381              iAudioPreference, iAudioPriority);
       
   382     if (player != 0)
   155     if (player != 0)
   383         {
   156         {
   384         iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver);
   157         iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver);
   385         aAlarmContext = iNextContext;
   158         aAlarmContext = iNextContext;
   386         iNextContext++;
   159         iNextContext++;
   393         //TODO: Add trace here
   166         //TODO: Add trace here
   394         aAlarmContext = 0;
   167         aAlarmContext = 0;
   395         }
   168         }
   396     }
   169     }
   397 
   170 
   398 
   171 void CSts::StopAlarm(unsigned int aAlarmContext)
       
   172     {
       
   173     CPlayerNode* node = iPlayerMap[aAlarmContext];
       
   174     iPlayerMap.erase(aAlarmContext);
       
   175     if (node)
       
   176         {
       
   177         node->Player()->Stop();
       
   178         delete node;
       
   179         }
       
   180     else
       
   181         {
       
   182         //TODO: Add trace here
       
   183         }
       
   184     }
   399 
   185 
   400 void CSts::CleanUpPlayers()
   186 void CSts::CleanUpPlayers()
   401     {
   187     {
   402         while (!iPlayerMap.empty())
   188     while (!iPlayerMap.empty())
   403             {
   189         {
   404             //TODO: Add trace here
   190         //TODO: Add trace here
   405             StopAlarm(iPlayerMap.begin()->first);
   191         StopAlarm(iPlayerMap.begin()->first);
   406             }
   192         }
   407     }
   193     }
   408 
   194 
   409 void CSts::PlayComplete(unsigned int aContext)
   195 void CSts::PlayComplete(unsigned int aContext)
   410     {
   196     {
   411     CPlayerNode* node = iPlayerMap[aContext];
   197     CPlayerNode* node = iPlayerMap[aContext];