--- a/presencesettingsui/src/psuigspluginmodel.cpp Tue Apr 27 17:03:39 2010 +0300
+++ b/presencesettingsui/src/psuigspluginmodel.cpp Tue May 11 16:35:18 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-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"
@@ -27,6 +27,10 @@
#include <StringLoader.h>
#include <psuigspluginrsc.rsg>
#include <XdmSettingsApi.h>
+#include <spentry.h>
+#include <spproperty.h>
+#include <spsettings.h>
+
#include "psuigspluginmodel.h"
// ========================= MEMBER FUNCTIONS ================================
@@ -71,6 +75,7 @@
void CPSUIGSPluginModel::ConstructL()
{
RetrieveSettingsL();
+ ReadSipArrayFromEngineL();
iVisibleSettingName = HBufC::NewL(
KPresSetNameMaxLength + 2 );// max chars + KColumnListSeparator
}
@@ -244,10 +249,12 @@
__ASSERT_DEBUG( aToBeDeleted < iPSIdArray.Count() ,
User::Panic( KPSUIGSPluginPanicCategory, KErrOverflow ));
PresSettingsApi::RemoveSetL( iPSIdArray[ aToBeDeleted ]);
+ CleanServiceProviderSettingsDataL( iPSIdArray[ aToBeDeleted ] );
}
else
{// is id
PresSettingsApi::RemoveSetL( aToBeDeleted );
+ CleanServiceProviderSettingsDataL( aToBeDeleted );
}
RefreshPSArraysL();
}
@@ -318,6 +325,94 @@
}
// ---------------------------------------------------------------------------
+// CPSUIGSPluginModel::CleanServiceProviderSettingsDataL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//
+void CPSUIGSPluginModel::CleanServiceProviderSettingsDataL( TInt aPresenceId )
+ {
+ CSPSettings* spSettings = CSPSettings::NewLC();
+
+ RArray<TUint> serviceIds;
+ CleanupClosePushL( serviceIds );
+ spSettings->FindServiceIdsL( serviceIds );
+
+ for ( TInt i( 0 ) ; i < serviceIds.Count() ; i++ )
+ {
+ CSPEntry* spEntry = CSPEntry::NewLC();
+ CSPProperty* property1 = CSPProperty::NewLC();
+
+ TInt err = spSettings->FindPropertyL(
+ serviceIds[ i ],
+ ESubPropertyPresenceSettingsId,
+ *property1 );
+
+ if ( KErrNone == err )
+ {
+ User::LeaveIfError(
+ spSettings->FindEntryL( serviceIds[ i ], *spEntry ) );
+
+ TInt presenceId( 0 );
+ User::LeaveIfError( property1->GetValue( presenceId ) );
+
+ if ( presenceId == aPresenceId )
+ {
+ // Delete all presence related properties from services which
+ // has this presence id (ESubPropertyPresenceSettingsId).
+ RPropertyNameArray propertyNameArray;
+ CleanupClosePushL( propertyNameArray );
+ RPropertyNameArray propertyNameArrayToBeDeleted;
+ CleanupClosePushL( propertyNameArrayToBeDeleted );
+
+ // presence properties to be removed if found
+ propertyNameArray.Append( EPropertyPCSPluginId );
+ propertyNameArray.Append( EPropertyPresenceSubServicePluginId );
+ propertyNameArray.Append( ESubPropertyPresenceSettingsId );
+ propertyNameArray.Append( ESubPropertyPresencePreferredSNAPId );
+ propertyNameArray.Append( ESubPropertyPresencePreferredIAPId );
+ propertyNameArray.Append( ESubPropertyPresencePresentityIDFieldType );
+ propertyNameArray.Append( ESubPropertyPresenceLaunchMethod );
+ propertyNameArray.Append( ESubPropertyPresenceLaunchUid );
+ propertyNameArray.Append( ESubPropertyPresenceAddrScheme );
+ propertyNameArray.Append( ESubPropertyPresenceEnabled );
+ propertyNameArray.Append( ESubPropertyPresenceRequestPreference );
+
+ for ( TInt j( 0 ) ; j < propertyNameArray.Count() ; j++ )
+ {
+ CSPProperty* property2 = CSPProperty::NewLC();
+
+ TInt err = spSettings->FindPropertyL(
+ serviceIds[ i ],
+ propertyNameArray[ j ],
+ *property2 );
+
+ // if property found add to be deleted array
+ if ( !err )
+ {
+ propertyNameArrayToBeDeleted.Append(
+ propertyNameArray[ j ] );
+ }
+
+ CleanupStack::PopAndDestroy( property2 );
+ }
+
+ spSettings->DeleteServicePropertiesL(
+ serviceIds[ i ], propertyNameArrayToBeDeleted );
+
+ CleanupStack::PopAndDestroy( &propertyNameArrayToBeDeleted );
+ CleanupStack::PopAndDestroy( &propertyNameArray );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( property1 );
+ CleanupStack::PopAndDestroy( spEntry );
+ }
+
+ CleanupStack::PopAndDestroy( &serviceIds );
+ CleanupStack::PopAndDestroy( spSettings );
+ }
+
+// ---------------------------------------------------------------------------
// CPSUIGSPluginModel::MdcaCount()
// See header for details.
// ---------------------------------------------------------------------------
@@ -591,6 +686,32 @@
}
return HBufC::NewL( 0 );// name not found
}
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginModel::IsSipProfileRegisteredL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//
+TBool CPSUIGSPluginModel::IsSipProfileRegisteredL( TInt aIndex )
+ {
+ TBool registered( EFalse );
+ TInt sipProfileId = SipProfileId( aIndex );
+ const TInt arrayCount = iSIPProfiles->Count();
+
+ for ( TInt i = 0; i < arrayCount; i++ )
+ {
+ TUint32 tempValue;
+ iSIPProfiles->At( i )->GetParameter( KSIPProfileId, tempValue );
+
+ if ( tempValue == sipProfileId )
+ {
+ iSIPProfiles->At( i )->GetParameter(
+ KSIPProfileRegistered, registered );
+ }
+ }
+
+ return registered;
+ }
// ---------------------------------------------------------------------------
// CPSUIGSPluginModel::ReadSipArrayFromEngineL()