diff -r 000000000000 -r 72b543305e3a mobilemessaging/smum/src/SmumUtil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/smum/src/SmumUtil.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,283 @@ +/* +* Copyright (c) 2002 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: +* Finds default name for Service Centre and adds ordinal +* number in the end if it is needed. +* +*/ + + + +// INCLUDE FILES +#include // CCoeEnv::Static() +#include // resource identifiers +#include // CStringResourceReader +#include // StringLoader +#include // CAknInformationNote + +#include // CSmsSettings +#include "SmumUtil.h" // SmumUtil +#include "SmumLogging.h" +#include +#include +#include "smsui.pan" // Panic codes +#include +#include // CRepository +#include // Keys + +// CONSTANTS +_LIT(KFmtSpec, "%S(%02d)"); +_LIT(KSmumResourceFileName, "smum.rsc"); +const TInt KTestStringLength = 100; + +// ---------------------------------------------------- +// FindDefaultNameL +// Finds default name for Service Centre and adds ordinal +// number in the end if it is needed. +// ---------------------------------------------------- +EXPORT_C void SmumUtil::FindDefaultNameForSCL( + TDes& aName, + TBool aNameIsForSCentreFromSIM, + CDesCArrayFlat* aSCNamesList) + { + // Parse the filename + TFileName myFileName; + TParse tp; + tp.Set( KSmumResourceFileName, &KDC_MTM_RESOURCE_DIR, NULL ); + myFileName.Copy( tp.FullName() ); + + // Initialise string resource reader + CStringResourceReader* reader = CStringResourceReader::NewLC( myFileName ); + + // Load default name without ordinals + HBufC* buf = reader->ReadResourceString( aNameIsForSCentreFromSIM ? + R_QTN_MCE_SETTINGS_SIM_CENTRE : R_QTN_MCE_SETTINGS_SMS_SC_D_NAME ).AllocLC(); + + + TInt nameMaxLength = aName.MaxLength(); + if ( nameMaxLength < buf->Length()) + { + User::Leave(KErrOverflow); + } + aName.Append(buf->Des()); + + if (aSCNamesList) + { + // Launched from CSmsServiceCentresDialog, so we need + // to check the list and use ordinals if needed + const TInt lBoxCount = aSCNamesList->Count(); + TInt defOrdinal = 0; + TBool nameAlreadyInUse = EFalse; + TBool canExit = EFalse; + + if (lBoxCount) + { + while (!canExit) + { + // tried name already in use, let's increase ordinal + if (nameAlreadyInUse) + { + TBuf testBuf; + testBuf.Format( KFmtSpec, buf, defOrdinal ); + if ( nameMaxLength < testBuf.Length() ) + { + User::Leave( KErrOverflow ); + } + aName.Format( KFmtSpec, buf, defOrdinal ); + AknTextUtils::LanguageSpecificNumberConversion( aName ); + nameAlreadyInUse = EFalse; + } + // do we already have this name? + for ( TInt loop = 0; loop < lBoxCount && !nameAlreadyInUse; loop++ ) + { + // yes + if ( KErrNotFound != aName.Match((*aSCNamesList)[loop]) ) + { + nameAlreadyInUse = ETrue; + defOrdinal++; + } + // no, let's use it + else if ( loop == lBoxCount-1 ) + { + canExit = ETrue; + } + } + } + } + } + CleanupStack::PopAndDestroy( 2 ); // buf, reader + } + +// ---------------------------------------------------- +// SmumUtil::::ShowInformationNoteL +// +// ---------------------------------------------------- +void SmumUtil::ShowInformationNoteL( TInt aResource ) + { + CCoeEnv* coeEnv = CEikonEnv::Static(); + __ASSERT_DEBUG( coeEnv, Panic( ESmumUtilNullPointer ) ); + if ( !coeEnv ) + { + User::Leave( KErrGeneral ); + } + HBufC* text = StringLoader::LoadLC( aResource, coeEnv ); + CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *text ); + CleanupStack::PopAndDestroy(); // text + } + +// ---------------------------------------------------------------------------- +// SmumUtil::CheckVariationFlagsL() +// Function to check and set variation according to +// flags set in Central Repository +// ---------------------------------------------------------------------------- +TInt SmumUtil::CheckVariationFlagsL( const TUid aUid, const TUint32 aKey ) + { + TInt flags = KErrNotFound; + // Create storage + CRepository* storage = CRepository::NewLC( aUid ); + TInt error = storage->Get( aKey, flags ); + // Leave on error + User::LeaveIfError( error ); + CleanupStack::PopAndDestroy(); // storage + return flags; + } + +// ---------------------------------------------------- +// SmumUtil::ReadEmailOverSmsSettingsL +// ---------------------------------------------------- +// +EXPORT_C TInt SmumUtil::ReadEmailOverSmsSettingsL( + TDes& aSmsc, + TDes& aDestinationAddress, + TBool& aModifiable ) + { + SMUMLOGGER_ENTERFN("SmumUtil::ReadEmailOverSmsSettingsL") + // Create storage + CRepository* storage = CRepository::NewLC( KCRUidSmum ); + storage->Get( KSumEmailSC, aSmsc ); + SMUMLOGGER_WRITE_FORMAT( + "ReadEmailOverSmsSettingsL - SmsC: %s", aSmsc.Ptr() ) + storage->Get( KSumEmailGateway, aDestinationAddress ); + SMUMLOGGER_WRITE_FORMAT( + "ReadEmailOverSmsSettingsL - Gateway: %s", aDestinationAddress.Ptr() ) + storage->Get( KSumEmailModifiable, aModifiable ); + SMUMLOGGER_WRITE_FORMAT("ReadEmailOverSmsSettingsL - Modifiable: %d", aModifiable) + CleanupStack::PopAndDestroy(); // storage + SMUMLOGGER_LEAVEFN("SmumUtil::ReadEmailOverSmsSettingsL") + return KErrNone; + } + +// ---------------------------------------------------- +// SmumUtil::WriteEmailOverSmsSettingsL +// ---------------------------------------------------- +// +EXPORT_C TInt SmumUtil::WriteEmailOverSmsSettingsL( + const TDes& aSmsc, + const TDes& aDestinationAddress, + const TBool& aModifiable ) + { + SMUMLOGGER_ENTERFN("SmumUtil::WriteEmailOverSmsSettingsL") + // Create storage + CRepository* storage = CRepository::NewLC( KCRUidSmum ); + storage->Set( KSumEmailSC, aSmsc ); + SMUMLOGGER_WRITE_FORMAT( + "WriteEmailOverSmsSettingsL - SmsC: %s", aSmsc.Ptr() ) + storage->Set( KSumEmailGateway, aDestinationAddress ); + SMUMLOGGER_WRITE_FORMAT( + "WriteEmailOverSmsSettingsL - Gateway: %s", aDestinationAddress.Ptr() ) + storage->Set( KSumEmailModifiable, aModifiable ); + SMUMLOGGER_WRITE_FORMAT("WriteEmailOverSmsSettingsL - Modifiable: #%d", aModifiable) + CleanupStack::PopAndDestroy(); // storage + SMUMLOGGER_LEAVEFN("SmumUtil::WriteEmailOverSmsSettingsL") + return KErrNone; + } + +// ---------------------------------------------------- +// SmumUtil::CheckEmailOverSmsSupportL +// +// ---------------------------------------------------- +EXPORT_C TBool SmumUtil::CheckEmailOverSmsSupportL() + { + SMUMLOGGER_ENTERFN("SmumUtil::CheckEmailOverSmsSupportL") + TBool emailSupported( EFalse ); + TInt tmpInt( KErrNotFound ); + tmpInt = CheckVariationFlagsL( KCRUidMuiuVariation, KMuiuSmsFeatures ); + if ( tmpInt & KSmsFeatureIdEmailOverSms ) + { // Feature is supported by S60 local variation + SMUMLOGGER_WRITE_FORMAT( + "CheckEmailOverSmsSupportL - KSmsFeatureIdEmailOverSms :%d", + tmpInt ) + // Now we must check if the feature is supported by + // Value Added Services, (U)SIM bit + emailSupported = ReadEmailSupportFromVASL(); + SMUMLOGGER_WRITE_FORMAT( + "CheckEmailOverSmsSupportL - ReadEmailSupportFromVASL returned :%d", + emailSupported ) + } + SMUMLOGGER_WRITE_FORMAT( + "CheckEmailOverSmsSupportL - EmailOverSmsSupport :%d", + emailSupported ) + SMUMLOGGER_LEAVEFN("SmumUtil::CheckEmailOverSmsSupportL") + return emailSupported; + } + +// --------------------------------------------------------------------------- +// SmumUtil::ReadEmailSupportFromVASL +// +// --------------------------------------------------------------------------- +TBool SmumUtil::ReadEmailSupportFromVASL() + { + SMUMLOGGER_ENTERFN("CSmumMainSettingsDialogGSM::ReadEmailSupportFromVASL") + TBool featureSupport( EFalse ); + RCustomerServiceProfileCache* cspProfile = + new (ELeave) RCustomerServiceProfileCache; + __ASSERT_DEBUG( cspProfile, Panic( ESmsuNullPointer ) ); + TInt error = cspProfile->Open(); + if( KErrNone == error ) + { + // Get tele services flags from CSP + RMobilePhone::TCspValueAdded params; + // If not supported (-5) or any other error + // we assume all settings are supported + error = cspProfile->CspCPHSValueAddedServices( params ); + if ( KErrNone == error ) + { + SMUMLOGGER_WRITE_FORMAT( + "ReadEmailSupportFromVASL - RMobilePhone::TCspTeleservices #%d", params ) + if( 0 != ( params&RMobilePhone::KCspSMMOEmail ) ) + { + SMUMLOGGER_WRITE( + "ReadEmailSupportFromVASL - KCspSMMOEmail supported" ) + featureSupport = ETrue; + } + } + else + { + SMUMLOGGER_WRITE_FORMAT( + "ReadEmailSupportFromVASL - cspProfile->CspTeleServices() #%d", error ) + } + cspProfile->Close(); + } + else + { + SMUMLOGGER_WRITE_FORMAT( + "ReadEmailSupportFromVASL - cspProfile->Open() #%d", error ) + } + delete cspProfile; + SMUMLOGGER_LEAVEFN("CSmumMainSettingsDialogGSM::ReadEmailSupportFromVASL") + return featureSupport; + } + +// End of File