diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuicontactutil.cpp --- a/mmsharing/mmshui/src/musuicontactutil.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - - -#include "musuicontactutil.h" -#include "musuidefinitions.h" -#include "muslogger.h" -#include "musenguriparser.h" -#include "musuid.hrh" - -#include // Phonebook view resource -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiContactUtil::ShareViewFieldExistsL( CCoeEnv& aEnv, TInt aContactId ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::ShareViewFieldExistsL" ); - - TBool ret( EFalse ); - - RPbkViewResourceFile pbkResourceFile( aEnv ); - CleanupClosePushL( pbkResourceFile ); - pbkResourceFile.OpenL(); - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - CPbkContactItem* contactItem = NULL; - CleanupStack::PushL( contactItem ); - if ( aContactId > 0 ) - { - contactItem = pbkContactEngine->OpenContactL( aContactId ); - if ( contactItem->FindField( EPbkFieldIdShareView ) ) - { - MUS_LOG( "mus: [MUSUI ] EPbkFieldIdShareView found!!" ); - ret = ETrue; - } - else if ( contactItem->FindField( EPbkFieldIdSIPID ) ) - { - MUS_LOG( "mus: [MUSUI ] EPbkFieldIdSIPID found, NOT EPbkFieldIdShareView defined!!!" ); - ret = ETrue; - } - else - { - ret = EFalse; - } - } - else - { - ret = EFalse; - } - CleanupStack::PopAndDestroy( 3 ); // contactItem, pbkContactEngine, &pbkResourceFile - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::ShareViewFieldExistsL" ); - return ret; - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiContactUtil::CheckPbContactForVSAddressesL( CCoeEnv& aEnv, - const TDesC& aOriginator, - TInt aContactId) -{ - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::CheckPbContactForVSAddressesL" ); - - TBool sipAddrMatches(EFalse); - TBool shareViewAddrMatches(EFalse); - TBool ret(EFalse); - - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdSIPID, aOriginator, aContactId)) - { - sipAddrMatches=ETrue; - } - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdShareView, aOriginator, aContactId)) - { - shareViewAddrMatches=ETrue; - } - - if(aOriginator.Find(KMusPrefixSipUri) != KErrNotFound) - { - //pb field without sip:-prefix are checked. - HBufC * withoutPrefix; - withoutPrefix = HBufC::NewLC(aOriginator.Length()); - *withoutPrefix = aOriginator; - TPtr ptr = withoutPrefix->Des(); - ptr.Delete(0,KMusPrefixMaxLength); - - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdSIPID, *withoutPrefix, aContactId)) - { - sipAddrMatches=ETrue; - } - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdShareView, *withoutPrefix, aContactId)) - { - shareViewAddrMatches=ETrue; - } - - CleanupStack::PopAndDestroy(withoutPrefix); - } - - if(sipAddrMatches||shareViewAddrMatches) - { - ret=ETrue; - } - else - { - ret=EFalse; - } - - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::CheckPbContactForVSAddressesL" ); - return ret; -} -// ----------------------------------------------------------------------------- -// @function MatchTextWithPbFieldsL -// searches all contactId´s fieldIds of same type for a text -// returns ETrue if text is found from at least one of them. -// ----------------------------------------------------------------------------- -// -TBool MusUiContactUtil::MatchTextWithPbFieldsL( CCoeEnv& aEnv, - TPbkFieldId aFieldId, - const TDesC& aText, - TInt aContactId ) -{ - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::MatchTextWithPbFieldsL" ); - - TBool textMatch(EFalse); - - RPbkViewResourceFile pbkResourceFile(aEnv); - CleanupClosePushL( pbkResourceFile ); - pbkResourceFile.OpenL(); - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - CPbkContactItem* contactItem = NULL; - CleanupStack::PushL( contactItem ); - - if ( aContactId > 0 ) - { - contactItem = pbkContactEngine->OpenContactL( aContactId ); - - TInt index(0); - - while(index!=KErrNotFound) - { - TPbkContactItemField* contactItemField = - contactItem->FindField( aFieldId, index ); - - if( contactItemField ) - { - if( contactItemField->Text() == aText && !textMatch ) - { - textMatch=ETrue; - } - } - - if( index != KErrNotFound ) - { - index++; - } - } - - } - - CleanupStack::PopAndDestroy( 3 ); // contactItem, pbkContactEngine, &pbkResourceFile - - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::MatchTextWithPbFieldsL" ); - return textMatch; - -} -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiContactUtil::ActivateContactViewL( CCoeEnv& aEnv, - TContactItemId aId, - const TDesC& aTypedAddress, - const TDesC& aMusTelNumberValue ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::ActivateContactViewL" ); - RPbkViewResourceFile pbkResourceFile( aEnv ); - CleanupClosePushL( pbkResourceFile ); - pbkResourceFile.OpenL(); - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - - CPbkContactItem* contactItem = NULL; - CleanupStack::PushL( contactItem ); - - if ( aId > 0 ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::ActivateContactViewL\ - TContactItemId > 0 => Opening Existing Contact..." ); - contactItem = pbkContactEngine->OpenContactL( aId ); - EditContactL( *contactItem, - EFalse, - pbkContactEngine, - aTypedAddress, - aMusTelNumberValue, - aId ); - } - else - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::ActivateContactViewL\ - TContactItemId < 1 => Creating new Contact..." ); - contactItem = pbkContactEngine->CreateEmptyContactL(); - EditContactL( *contactItem, - ETrue, - pbkContactEngine, - aTypedAddress, - aMusTelNumberValue, - aId ); - } - - CleanupStack::PopAndDestroy( 3 ); // contactItem, pbkContactEngine, &pbkResourceFile - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::ActivateContactViewL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiContactUtil::EditContactL( CPbkContactItem& aContact, - TBool aNewOne, - CPbkContactEngine* aPbkContactEngine, - const TDesC& aTypedAddress, - const TDesC& aMusTelNumberValue, - TContactItemId aContactId ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::EditContactL" ); - - TMusEngUriParser parser( aTypedAddress ); - parser.ParseUriL(); - HBufC* uri = NULL; - CleanupStack::PushL( uri ); - - CContactTextField* addressField = NULL; - CleanupStack::PushL( addressField ); - - if ( parser.UriType() == TMusEngUriParser::ESip ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - parser.UriType() == TMusEngUriParser::ESip" ); - addressField = EditableContactFieldL( - aContact, - EPbkFieldIdShareView, - aPbkContactEngine ); - uri = parser.GetUri16L( ETrue ); - } - else if ( parser.UriType() == TMusEngUriParser::ETel ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - parser.UriType() == TMusEngUriParser::ETel" ); - addressField = EditableContactFieldL( - aContact, - EPbkFieldIdPhoneNumberMobile, - aPbkContactEngine ); - uri = parser.GetUri16L( EFalse ); - } - - if ( addressField ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - addressField OK" ); - addressField->SetTextL( *uri ); - } - - if ( ( aMusTelNumberValue.Length() > 0 ) && aContactId == KErrNotFound ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - !iPhoneNumberFieldFound" ); - CContactTextField* phoneNumberField = EditableContactFieldL( - aContact, - EPbkFieldIdPhoneNumberMobile, - aPbkContactEngine ); - if ( phoneNumberField ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - phoneNumberField OK" ); - phoneNumberField->SetTextL( aMusTelNumberValue ); - } - } - - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL: Creating dialog..." ); - - // Bring MuSh UI foreground - RWsSession wsSession; - User::LeaveIfError( wsSession.Connect() ); - CleanupClosePushL( wsSession ); - TApaTaskList taskList( wsSession ); - TUid appUid; - appUid.iUid = KMusUiUid; - TApaTask task = taskList.FindApp( appUid ); - task.BringToForeground(); - CleanupStack::PopAndDestroy( &wsSession ); - - // Launch pbk new entry editor dlg - CPbkContactEditorDlg* editorDlg = CPbkContactEditorDlg::NewL( - *aPbkContactEngine, - aContact, - aNewOne, - -1, // Move focus to the topmost field - ETrue ); - editorDlg->ResetWhenDestroyed( &editorDlg ); - editorDlg->HideExitCommand(); - editorDlg->ExecuteLD(); - - CleanupStack::Pop( 2 ); // uri, addressField - - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::EditContactL" ); - } - - -// ----------------------------------------------------------------------------- -// Get editable contact field. -// ----------------------------------------------------------------------------- -// -CContactTextField* MusUiContactUtil::EditableContactFieldL( - CPbkContactItem& aContact, - TInt aFieldId, - CPbkContactEngine* aPbkContactEngine ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::EditableContactFieldL" ); - - // Get fields info from pbk engine - const CPbkFieldsInfo& fieldsInfo = aPbkContactEngine->FieldsInfo(); - - // Try to get the SIP URI storage field for this contact - TPbkContactItemField* itemField = aContact.FindField( aFieldId ); - - if ( !itemField ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL: !itemField" ); - CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId ); - // Add field to this contact - if ( fieldInfo ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL\ - fieldInfo OK" ); - // Contact takes ownership of the field. - aContact.AddFieldL( *fieldInfo ); - itemField = aContact.FindField( aFieldId ); - return ( itemField ) ? itemField->TextStorage() : NULL; - } - else - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL\ - fieldInfo == NULL" ); - return NULL; - } - } - else - { - // Does not pass ownership. - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL\ - itemField OK" ); - return itemField->TextStorage(); - } - } - - -// end of file