profilesapplication/Profiles/GSProfilesPlugin/src/GSProfilesPlugin.cpp
branchRCL_3
changeset 19 cd54903d48da
equal deleted inserted replaced
18:b7fa36b488f8 19:cd54903d48da
       
     1 /*
       
     2 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  GSProfilesPlugin implementation.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // User includes
       
    20 #include    "GSProfilesPlugin.h"
       
    21 #include    <gsparentplugin.h>
       
    22 #include    <gscommon.hrh>
       
    23 #include    <gsprofilespluginrsc.rsg> // GUI Resource
       
    24 #include    <gsprofilesplugin.mbg>
       
    25 #include    <gsprivatepluginproviderids.h>
       
    26 #include    <ProfileEngineSDKCRKeys.h>
       
    27 #include    <hwrmvibrasdkcrkeys.h>
       
    28 
       
    29 // System includes
       
    30 #include    <apadoc.h>
       
    31 #include    <AknNullService.h>
       
    32 #include    <bautils.h>
       
    33 #include    <StringLoader.h>
       
    34 #include    <centralrepository.h>
       
    35 
       
    36 #include    <ProEngFactory.h>
       
    37 #include    <MProfileEngine.h>
       
    38 #include    <MProfile.h>
       
    39 #include    <MProfileTones.h>
       
    40 #include    <MProEngToneSettings.h>
       
    41 #include    <MProfileExtraSettings.h>
       
    42 #include    <MProfileFeedbackSettings.h>
       
    43 #include    <TProfileToneSettings.h>
       
    44 
       
    45 #include    <ProfileEng.hrh>
       
    46 #include    <ProfileEngineInternalCRKeys.h>
       
    47 
       
    48 // PSM client
       
    49 #include <psmclient.h>
       
    50 #include <psmsettings.h>
       
    51 #include <e32property.h>
       
    52 #include <MProfileEngineExtended.h>
       
    53 #include <MProfileExtended.h>
       
    54 #include <ProfileEnginePrivatePSKeys.h>
       
    55 
       
    56 
       
    57 // ========================= MEMBER FUNCTIONS ================================
       
    58 
       
    59 // ---------------------------------------------------------------------------
       
    60 // CGSProfilesPlugin::CGSProfilesPlugin
       
    61 //
       
    62 // ---------------------------------------------------------------------------
       
    63 //
       
    64 CGSProfilesPlugin::CGSProfilesPlugin()
       
    65     : iResources( *iCoeEnv ), iNullService(NULL)
       
    66     {
       
    67     }
       
    68 
       
    69 
       
    70 // ---------------------------------------------------------------------------
       
    71 // CGSProfilesPlugin::~CGSProfilesPlugin
       
    72 //
       
    73 // ---------------------------------------------------------------------------
       
    74 //
       
    75 CGSProfilesPlugin::~CGSProfilesPlugin()
       
    76     {
       
    77     iResources.Close();
       
    78 
       
    79     if ( iNullService )
       
    80         {
       
    81         delete iNullService;
       
    82         }
       
    83     }
       
    84 
       
    85 
       
    86 // ---------------------------------------------------------------------------
       
    87 // CGSProfilesPlugin::ConstructL
       
    88 //
       
    89 // ---------------------------------------------------------------------------
       
    90 //
       
    91 void CGSProfilesPlugin::ConstructL()
       
    92     {
       
    93     OpenLocalizedResourceFileL( KGSProfilesPluginResourceFileName, iResources );
       
    94     }
       
    95 
       
    96 
       
    97 // ---------------------------------------------------------------------------
       
    98 // CGSProfilesPlugin::NewL
       
    99 //
       
   100 // ---------------------------------------------------------------------------
       
   101 //
       
   102 CGSProfilesPlugin* CGSProfilesPlugin::NewL( TAny* /*aInitParams*/ )
       
   103     {
       
   104     CGSProfilesPlugin* self = new ( ELeave ) CGSProfilesPlugin();
       
   105     CleanupStack::PushL(self);
       
   106     self->ConstructL();
       
   107     CleanupStack::Pop(self);
       
   108     return self;
       
   109     }
       
   110 
       
   111 
       
   112 // -----------------------------------------------------------------------------
       
   113 // CGSProfilesPlugin::Id (from CGSPluginInterface)
       
   114 //
       
   115 // -----------------------------------------------------------------------------
       
   116 //
       
   117 TUid CGSProfilesPlugin::Id() const
       
   118     {
       
   119     return KGSProfilesPluginImplUID;
       
   120     }
       
   121 
       
   122 
       
   123 // -----------------------------------------------------------------------------
       
   124 // CGSProfilesPlugin::DoActivateL (from CGSPluginInterface)
       
   125 //
       
   126 // -----------------------------------------------------------------------------
       
   127 //
       
   128 void CGSProfilesPlugin::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
       
   129                                   TUid /*aCustomMessageId*/,
       
   130                                   const TDesC8& /*aCustomMessage*/ )
       
   131     {
       
   132     }
       
   133 
       
   134 
       
   135 // -----------------------------------------------------------------------------
       
   136 // CGSProfilesPlugin::DoDeactivate (from CGSPluginInterface)
       
   137 //
       
   138 // -----------------------------------------------------------------------------
       
   139 //
       
   140 void CGSProfilesPlugin::DoDeactivate()
       
   141     {
       
   142     }
       
   143 
       
   144 
       
   145 
       
   146 // -----------------------------------------------------------------------------
       
   147 // CGSProfilesPlugin::GetCaptionL (from CGSPluginInterface)
       
   148 //
       
   149 // -----------------------------------------------------------------------------
       
   150 //
       
   151 void CGSProfilesPlugin::GetCaptionL( TDes& aCaption ) const
       
   152     {
       
   153     HBufC* result = StringLoader::LoadL( R_GS_PROFILES_PLUGIN_CAPTION );
       
   154     
       
   155     if (result->Des().Length() < aCaption.MaxLength())
       
   156         {
       
   157         aCaption.Copy( *result );    
       
   158         }
       
   159     else
       
   160         {
       
   161         aCaption = KNullDesC;
       
   162         }
       
   163    
       
   164     delete result;
       
   165     }
       
   166 
       
   167 
       
   168 // -----------------------------------------------------------------------------
       
   169 // CGSProfilesPlugin::PluginProviderCategory (from CGSPluginInterface)
       
   170 //
       
   171 // -----------------------------------------------------------------------------
       
   172 //
       
   173 TInt CGSProfilesPlugin::PluginProviderCategory() const
       
   174     {
       
   175     return KGSPluginProviderInternal;
       
   176     }
       
   177 
       
   178 
       
   179 // -----------------------------------------------------------------------------
       
   180 // CGSProfilesPlugin::ItemType (from CGSPluginInterface)
       
   181 //
       
   182 // -----------------------------------------------------------------------------
       
   183 //
       
   184 TGSListboxItemTypes CGSProfilesPlugin::ItemType()
       
   185     {
       
   186     return EGSItemTypeSettingDialog;
       
   187     }
       
   188 
       
   189 
       
   190 // -----------------------------------------------------------------------------
       
   191 // CGSProfilesPlugin::GetValue (from CGSPluginInterface)
       
   192 //
       
   193 // -----------------------------------------------------------------------------
       
   194 //
       
   195 void CGSProfilesPlugin::GetValue( const TGSPluginValueKeys /*aKey*/,
       
   196                                       TDes& /*aValue*/ )
       
   197     {
       
   198     }
       
   199 
       
   200 
       
   201 // -----------------------------------------------------------------------------
       
   202 // CGSProfilesPlugin::HandleSelection (from CGSPluginInterface)
       
   203 //
       
   204 // -----------------------------------------------------------------------------
       
   205 //
       
   206 void CGSProfilesPlugin::HandleSelection(
       
   207     const TGSSelectionTypes /*aSelectionType*/ )
       
   208     {
       
   209     TRAP_IGNORE( LaunchProfilesAppL() );
       
   210     }
       
   211 
       
   212 // ---------------------------------------------------------------------------
       
   213 // CGSProfilesPlugin::CreateIconL (from CGSPluginInterface)
       
   214 //
       
   215 // ---------------------------------------------------------------------------
       
   216 //
       
   217 
       
   218 CGulIcon* CGSProfilesPlugin::CreateIconL( const TUid aIconType )
       
   219     {
       
   220     CGulIcon* icon;
       
   221     TParse* fp = new ( ELeave ) TParse();
       
   222     CleanupStack::PushL( fp );
       
   223     fp->Set( KGSProfilesPluginIconDirAndName, &KDC_BITMAP_DIR, NULL );
       
   224 
       
   225     if ( aIconType == KGSIconTypeLbxItem )
       
   226         {
       
   227         icon = AknsUtils::CreateGulIconL(
       
   228         AknsUtils::SkinInstance(),
       
   229         KAknsIIDQgnPropCpPersoProf,
       
   230         fp->FullName(),
       
   231         EMbmGsprofilespluginQgn_prop_cp_perso_prof,
       
   232         EMbmGsprofilespluginQgn_prop_cp_perso_prof_mask );
       
   233         }    
       
   234     else
       
   235         {
       
   236         icon = CGSPluginInterface::CreateIconL( aIconType );
       
   237         }
       
   238 
       
   239     CleanupStack::PopAndDestroy( fp );
       
   240 
       
   241     return icon;
       
   242     }
       
   243 
       
   244 
       
   245 // -----------------------------------------------------------------------------
       
   246 // CGSProfilesPlugin::OpenLocalizedResourceFileL
       
   247 //
       
   248 // -----------------------------------------------------------------------------
       
   249 //
       
   250 void CGSProfilesPlugin::OpenLocalizedResourceFileL(
       
   251     const TDesC& aResourceFileName,
       
   252     RConeResourceLoader& aResourceLoader )
       
   253     {
       
   254     RFs fsSession;
       
   255     User::LeaveIfError( fsSession.Connect() );
       
   256     CleanupClosePushL(fsSession);
       
   257 
       
   258     // Find the resource file:
       
   259     TParse parse;
       
   260     parse.Set( aResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL );
       
   261     TFileName fileName( parse.FullName() );
       
   262 
       
   263     // Get language of resource file:
       
   264     BaflUtils::NearestLanguageFile( fsSession, fileName );
       
   265 
       
   266     // Open resource file:
       
   267     aResourceLoader.OpenL( fileName );
       
   268 
       
   269     CleanupStack::PopAndDestroy(&fsSession);
       
   270     }
       
   271 
       
   272 
       
   273 // -----------------------------------------------------------------------------
       
   274 // CGSProfilesPlugin::LaunchProfilesAppL
       
   275 //
       
   276 // -----------------------------------------------------------------------------
       
   277 //
       
   278 void CGSProfilesPlugin::LaunchProfilesAppL()
       
   279     {
       
   280     // Get the correct application data
       
   281     RWsSession ws;
       
   282     User::LeaveIfError(ws.Connect());
       
   283     CleanupClosePushL(ws);
       
   284 
       
   285     // Find the task with uid
       
   286     TApaTaskList taskList(ws);
       
   287     TApaTask task = taskList.FindApp( KGsProfilesAppUid );
       
   288 
       
   289     if ( task.Exists() )
       
   290         {
       
   291         task.BringToForeground();
       
   292         }
       
   293     else
       
   294         {
       
   295         //Launch Profiles application as embedded
       
   296         TAppInfo app( KGsProfilesAppUid, KGSProfilesApp );
       
   297         iEmbedded=NULL;
       
   298         EmbedAppL( app );
       
   299         }
       
   300     CleanupStack::PopAndDestroy(&ws);
       
   301     }
       
   302 
       
   303 
       
   304 // -----------------------------------------------------------------------------
       
   305 // CGSProfilesPlugin::EmbedAppL
       
   306 //
       
   307 // -----------------------------------------------------------------------------
       
   308 //
       
   309 void CGSProfilesPlugin::EmbedAppL( const TAppInfo& aApp )
       
   310     {
       
   311     // Launch settings app
       
   312     if ( iNullService )
       
   313         {
       
   314         delete iNullService;
       
   315         iNullService = NULL;
       
   316         }
       
   317     iNullService = CAknNullService::NewL( aApp.iUid, this );
       
   318     }
       
   319 
       
   320 
       
   321 
       
   322 /******************************************************************************
       
   323  * class CPSMProfilesPlugin                  
       
   324  ******************************************************************************/
       
   325 
       
   326 
       
   327 //
       
   328 // config file goes to:
       
   329 // \epoc32\release\winscw\udeb\Z\private\2000B187 (emulator)
       
   330 // \epoc32\data\Z\private\2000B187  (image)
       
   331 //
       
   332 
       
   333 
       
   334 
       
   335 // ----------------------------------------------------------------------------------
       
   336 // CPSMProfilesPlugin::CPSMProfilesPlugin()
       
   337 // ----------------------------------------------------------------------------------
       
   338 //  
       
   339 CPSMProfilesPlugin::CPSMProfilesPlugin( TPsmPluginCTorParams& aInitParams ) :
       
   340     CPsmPluginBase( aInitParams )
       
   341 	{	
       
   342 	}
       
   343 
       
   344 // -----------------------------------------------------------------------------
       
   345 // CPSMProfilesPlugin::ConstructL(
       
   346 // Symbian 2nd phase constructor can leave.
       
   347 // -----------------------------------------------------------------------------
       
   348 //
       
   349 void CPSMProfilesPlugin::ConstructL()
       
   350     {
       
   351     }
       
   352     
       
   353 
       
   354 // ----------------------------------------------------------------------------------
       
   355 // CPSMProfilesPlugin::NewL() 
       
   356 // ----------------------------------------------------------------------------------
       
   357 //  
       
   358 CPSMProfilesPlugin* CPSMProfilesPlugin::NewL( TPsmPluginCTorParams& aInitParams )
       
   359 	{
       
   360 	CPSMProfilesPlugin* self = new ( ELeave ) CPSMProfilesPlugin( aInitParams );
       
   361 
       
   362 	CleanupStack::PushL( self );
       
   363     self->ConstructL();
       
   364     CleanupStack::Pop( self );
       
   365 
       
   366     return self;
       
   367 	}
       
   368 	
       
   369 
       
   370 // ----------------------------------------------------------------------------------
       
   371 // CPSMProfilesPlugin::~CPSMProfilesPlugin()
       
   372 // ----------------------------------------------------------------------------------
       
   373 //  
       
   374 CPSMProfilesPlugin::~CPSMProfilesPlugin()
       
   375 	{
       
   376 	}
       
   377 
       
   378 
       
   379 
       
   380 // ----------------------------------------------------------------------------------
       
   381 // CPSMProfilesPlugin::NotifyModeChange (from CPsmPluginBase)
       
   382 // ----------------------------------------------------------------------------------
       
   383 //  
       
   384 void CPSMProfilesPlugin::NotifyModeChange( const TInt aMode )
       
   385     {
       
   386     TInt ignoreError = KErrNone;
       
   387     
       
   388     TRAP( ignoreError, NotifyModeChangeL( aMode) );
       
   389     }
       
   390 
       
   391 
       
   392 // ----------------------------------------------------------------------------------
       
   393 // CPSMProfilesPlugin::NotifyModeChangeL()
       
   394 // ----------------------------------------------------------------------------------
       
   395 //  
       
   396 void CPSMProfilesPlugin::NotifyModeChangeL( const TInt aMode )
       
   397     {
       
   398     TPsmSettingItems set;
       
   399 
       
   400     if ( aMode == EPsmsrvModeNormal || aMode == EPsmsrvPartialMode )
       
   401         {
       
   402         GetActiveProfileSettingsL( set );
       
   403         }
       
   404     else if ( aMode == EPsmsrvModePowerSave )
       
   405         {
       
   406         GetPsmConfigSettingsL( set );
       
   407         }
       
   408     else
       
   409         {
       
   410         User::Leave( KErrUnknown );
       
   411         }
       
   412     
       
   413     CRepository* cenrep = CRepository::NewLC( KCRUidVibraCtrl );
       
   414     User::LeaveIfError( cenrep->Set( KVibraCtrlProfileVibraEnabled, 
       
   415     		set.iVibraAlert ) );
       
   416     User::LeaveIfError( cenrep->Set( KVibraCtrlProfileFeedbackEnabled, 
       
   417     		set.iTactileFeedback ) );
       
   418     CleanupStack::PopAndDestroy( cenrep );
       
   419     
       
   420     cenrep = CRepository::NewLC( KCRUidProfileEngine );
       
   421     User::LeaveIfError( cenrep->Set( KProEngActiveKeypadVolume, 
       
   422     		set.iKeypadVolume ) );
       
   423     User::LeaveIfError( cenrep->Set( KProEngActiveAudioFeedback, 
       
   424     		set.iAudioFeedback ) );
       
   425     User::LeaveIfError( cenrep->Set( KProEngActiveTactileFeedback, 
       
   426     		set.iTactileFeedback ) );
       
   427     CleanupStack::PopAndDestroy( cenrep );
       
   428 
       
   429     // Set up internal PSM PubSub key
       
   430     _LIT_SECURITY_POLICY_PASS( KProfileEngReadPolicy );
       
   431     const TSecurityPolicy KProfileEngWritePolicy( ECapabilityWriteDeviceData );
       
   432     TInt err = RProperty::Define( KPSUidProfileEngine, 
       
   433     		KProEngPsmChanged, RProperty::EInt,
       
   434     		KProfileEngReadPolicy, KProfileEngWritePolicy );
       
   435     if( err == KErrNone || err == KErrAlreadyExists )
       
   436         {
       
   437         RProperty::Set( KPSUidProfileEngine, KProEngPsmChanged, aMode );
       
   438 
       
   439         // Notify engine about power save mode change
       
   440         MProfileEngine* profileEngine = CreateProfileEngineL();
       
   441         CleanupReleasePushL( *profileEngine );
       
   442         TInt activeProfileId = profileEngine->ActiveProfileId();
       
   443         CleanupStack::PopAndDestroy( profileEngine );
       
   444 
       
   445         MProfileEngineExtended* engine = CreateProfileEngineExtendedL();
       
   446         CleanupReleasePushL( *engine );
       
   447         MProfileExtended* profile = engine->ProfileL( activeProfileId );
       
   448         CleanupReleasePushL( *profile );
       
   449         
       
   450         // CommitChangeL is needed so that an event will be created for profile
       
   451         // modification listeners.
       
   452         engine->CommitChangeL( *profile );
       
   453         
       
   454         CleanupStack::PopAndDestroy( profile );
       
   455         CleanupStack::PopAndDestroy( engine );
       
   456         }
       
   457 
       
   458     }
       
   459 
       
   460 
       
   461 // ----------------------------------------------------------------------------------
       
   462 // CPSMProfilesPlugin::GetActiveProfileSettingsL()
       
   463 // ----------------------------------------------------------------------------------
       
   464 //
       
   465 void CPSMProfilesPlugin::GetActiveProfileSettingsL( TPsmSettingItems& aSettings )
       
   466     {
       
   467     CRepository* repository = CRepository::NewLC( KCRUidProfileEngine );
       
   468     
       
   469     TInt activeProfile = KErrNotFound;
       
   470     User::LeaveIfError( repository->Get( KProEngActiveProfile, activeProfile ) );
       
   471         
       
   472     TInt num = ResolveKey( EProfileSettingIdVibra, activeProfile );
       
   473     User::LeaveIfError( repository->Get( num, aSettings.iVibraAlert ) );
       
   474     
       
   475     num = ResolveKey( EProfileSettingIdKeypadVolume, activeProfile );
       
   476     User::LeaveIfError( repository->Get( num, aSettings.iKeypadVolume ) );
       
   477     
       
   478     num = ResolveKey( EProfileSettingIdTactileFeedback, activeProfile );
       
   479     User::LeaveIfError( repository->Get( num, aSettings.iTactileFeedback ) );
       
   480 
       
   481     num = ResolveKey( EProfileSettingIdAudioFeedback, activeProfile );
       
   482     User::LeaveIfError( repository->Get( num, aSettings.iAudioFeedback ) );
       
   483 
       
   484     CleanupStack::PopAndDestroy( repository );
       
   485     
       
   486     return;
       
   487     }
       
   488 
       
   489 
       
   490 // ----------------------------------------------------------------------------------
       
   491 // CPSMProfilesPlugin::GetActiveProfileSettingsL()
       
   492 // ----------------------------------------------------------------------------------
       
   493 //
       
   494 /*
       
   495 void CPSMProfilesPlugin::GetActiveProfileSettings2L( TPsmSettingItems& aSettings )
       
   496     {
       
   497     MProfileEngine* profileEngine = CreateProfileEngineL();
       
   498     CleanupReleasePushL( *profileEngine );
       
   499     
       
   500     MProfile* activeProfile  = profileEngine->ActiveProfileLC();
       
   501     
       
   502     const MProfileTones& tones = activeProfile->ProfileTones();
       
   503     const TProfileToneSettings& ts = tones.ToneSettings();
       
   504     
       
   505     aSettings.iVibraAlert  = ts.iVibratingAlert;
       
   506     aSettings.iKeypadVolume = ts.iKeypadVolume;
       
   507     
       
   508     const MProfileExtraSettings& extra = activeProfile->ProfileExtraSettings();
       
   509     const MProfileFeedbackSettings& feedBack = extra.ProfileFeedbackSettings();
       
   510     aSettings.iTactileFeedback = feedBack.TactileFeedback();
       
   511     aSettings.iAudioFeedback = feedBack.AudioFeedback();
       
   512 
       
   513     CleanupStack::PopAndDestroy();  // profile
       
   514     CleanupStack::PopAndDestroy( profileEngine );
       
   515     }
       
   516 */
       
   517 
       
   518 // ----------------------------------------------------------------------------------
       
   519 // CPSMProfilesPlugin::GetPsmConfigSettingsL()
       
   520 // ----------------------------------------------------------------------------------
       
   521 //  
       
   522 void CPSMProfilesPlugin::GetPsmConfigSettingsL( TPsmSettingItems& aSettings )
       
   523     {
       
   524     RConfigInfoArray arr;
       
   525     CleanupClosePushL( arr );
       
   526    
       
   527     TPsmsrvConfigInfo info;
       
   528     info.iConfigId = EPsmPluginKeyVibra;
       
   529     info.iConfigType = EConfigTypeInt;
       
   530     info.iIntValue = KErrNotFound;
       
   531     User::LeaveIfError( arr.Append( info ) );
       
   532 
       
   533     info.iConfigId = EPsmPluginKeyKbdVolume;
       
   534     info.iConfigType = EConfigTypeInt;
       
   535     info.iIntValue = KErrNotFound;
       
   536     User::LeaveIfError( arr.Append( info ) );
       
   537 
       
   538     info.iConfigId = EPsmPluginTactileFeedback ;
       
   539     info.iConfigType = EConfigTypeInt;
       
   540     info.iIntValue = KErrNotFound;
       
   541     User::LeaveIfError( arr.Append( info ) );
       
   542 
       
   543     info.iConfigId = EPsmPluginAudioFeedback;
       
   544     info.iConfigType = EConfigTypeInt;
       
   545     info.iIntValue = KErrNotFound;
       
   546     User::LeaveIfError( arr.Append( info ) );
       
   547 
       
   548     iSettingsProvider.GetSettingsL( arr, KGSProfilesPluginUID.iUid );
       
   549         
       
   550     aSettings.iVibraAlert = arr[0].iIntValue;
       
   551     aSettings.iKeypadVolume = arr[1].iIntValue;
       
   552     aSettings.iTactileFeedback = arr[2].iIntValue;
       
   553     aSettings.iAudioFeedback = arr[3].iIntValue;
       
   554 
       
   555     CleanupStack::PopAndDestroy( &arr );
       
   556     }
       
   557 
       
   558 
       
   559 // -----------------------------------------------------------------------------
       
   560 // CPSMProfilesPlugin::ResolveKey
       
   561 //
       
   562 // -----------------------------------------------------------------------------
       
   563 //
       
   564 TUint32 CPSMProfilesPlugin::ResolveKey( TUint aPartialKey, TInt aProfileId )
       
   565     {
       
   566     const TInt KProfileIdShift = 24;
       
   567     
       
   568     return ( ( aProfileId << KProfileIdShift ) | aPartialKey );
       
   569     }
       
   570 
       
   571 
       
   572 // -----------------------------------------------------------------------------
       
   573 // CPSMProfilesPlugin::Panic
       
   574 //
       
   575 // -----------------------------------------------------------------------------
       
   576 //    
       
   577 void CPSMProfilesPlugin::Panic( TInt aReason )
       
   578     {
       
   579 	_LIT(KPanicCategory,"CPSMProfilesPlugin");
       
   580 	
       
   581 	User::Panic(KPanicCategory, aReason); 
       
   582     }
       
   583 
       
   584 
       
   585 
       
   586 
       
   587 // End of file