/*
* Copyright (c) 2002-2007 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: A vpbk field type list that contains sim supported types
*
*/
// INCLUDE FILES
#include "CSupportedFieldTypes.h"
#include "CFieldTypeMappings.h"
#include <TVPbkSimStoreProperty.h>
namespace VPbkSimStore {
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::CSupportedFieldTypes
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CSupportedFieldTypes::CSupportedFieldTypes()
{
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSupportedFieldTypes::ConstructL(
const CFieldTypeMappings& aFieldTypeMappings,
TVPbkGsmStoreProperty& aSimStoreProperty )
{
// SIM supports always the name field
const MVPbkFieldType* vpbkType = aFieldTypeMappings.Match( EVPbkSimName );
iSupportedTypes.AppendL( vpbkType );
// SIM supports always one number field
vpbkType = aFieldTypeMappings.Match( EVPbkSimGsmNumber );
iSupportedTypes.AppendL( vpbkType );
// USIM can support additional numbers
if ( aSimStoreProperty.iCaps & VPbkSimStoreImpl::KAdditionalNumUsed )
{
vpbkType = aFieldTypeMappings.Match( EVPbkSimAdditionalNumber );
// Check if the VPbk type is different than the type for
// already added EVPbkSimGsmNumber
if ( iSupportedTypes.Find( vpbkType ) == KErrNotFound )
{
iSupportedTypes.AppendL( vpbkType );
}
}
if ( aSimStoreProperty.iCaps & VPbkSimStoreImpl::KSecondNameUsed )
{
// Second name field of the USIM is used for nick name in
// non-Japanese variants
vpbkType = aFieldTypeMappings.Match( EVPbkSimNickName );
iSupportedTypes.AppendL( vpbkType );
}
if ( aSimStoreProperty.iCaps & VPbkSimStoreImpl::KEmailAddressUsed )
{
vpbkType = aFieldTypeMappings.Match( EVPbkSimEMailAddress );
iSupportedTypes.AppendL( vpbkType );
}
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSupportedFieldTypes* CSupportedFieldTypes::NewL(
const CFieldTypeMappings& aFieldTypeMappings,
TVPbkGsmStoreProperty& aSimStoreProperty )
{
CSupportedFieldTypes* self = new( ELeave ) CSupportedFieldTypes;
CleanupStack::PushL( self );
self->ConstructL( aFieldTypeMappings, aSimStoreProperty );
CleanupStack::Pop( self );
return self;
}
// Destructor
CSupportedFieldTypes::~CSupportedFieldTypes()
{
iSupportedTypes.Close();
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::FieldTypeCount
// -----------------------------------------------------------------------------
//
TInt CSupportedFieldTypes::FieldTypeCount() const
{
return iSupportedTypes.Count();
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::FieldTypeAt
// -----------------------------------------------------------------------------
//
const MVPbkFieldType& CSupportedFieldTypes::FieldTypeAt( TInt aIndex ) const
{
return *iSupportedTypes[aIndex];
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::FieldTypeAt
// -----------------------------------------------------------------------------
//
TBool CSupportedFieldTypes::ContainsSame(
const MVPbkFieldType& aFieldType ) const
{
TInt count = iSupportedTypes.Count();
for ( TInt i = 0; i < count; ++i )
{
if ( iSupportedTypes[i] == &aFieldType )
{
return ETrue;
}
}
return EFalse;
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::FieldTypeAt
// -----------------------------------------------------------------------------
//
TInt CSupportedFieldTypes::MaxMatchPriority() const
{
// SIM contacts have max 1 versit property
const TInt simTypeMaxPriority = 1;
return simTypeMaxPriority;
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::FindMatch
// -----------------------------------------------------------------------------
//
const MVPbkFieldType* CSupportedFieldTypes::FindMatch(
const TVPbkFieldVersitProperty& aMatchProperty,
TInt aMatchPriority ) const
{
TInt count = iSupportedTypes.Count();
for ( TInt i = 0; i < count; ++i )
{
if ( iSupportedTypes[i]->Matches( aMatchProperty, aMatchPriority ) )
{
return iSupportedTypes[i];
}
}
return NULL;
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::FindMatch
// -----------------------------------------------------------------------------
//
const MVPbkFieldType* CSupportedFieldTypes::FindMatch(
TVPbkNonVersitFieldType aNonVersitType ) const
{
TInt count = iSupportedTypes.Count();
for ( TInt i = 0; i < count; ++i )
{
if ( iSupportedTypes[i]->NonVersitType() == aNonVersitType )
{
return iSupportedTypes[i];
}
}
return NULL;
}
// -----------------------------------------------------------------------------
// CSupportedFieldTypes::Find
// -----------------------------------------------------------------------------
//
const MVPbkFieldType* CSupportedFieldTypes::Find(
TInt aFieldTypeResId) const
{
const MVPbkFieldType* fieldType = NULL;
for (TInt i = 0; i < iSupportedTypes.Count(); ++i)
{
if (iSupportedTypes[i]->FieldTypeResId() == aFieldTypeResId)
{
fieldType = iSupportedTypes[i];
break;
}
}
return fieldType;
}
} // namespace VPbkSimStore
// End of File