--- /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 <coemain.h> // CCoeEnv::Static()
+#include <SMUM.rsg> // resource identifiers
+#include <stringresourcereader.h> // CStringResourceReader
+#include <StringLoader.h> // StringLoader
+#include <aknnotewrappers.h> // CAknInformationNote
+
+#include <smutset.h> // CSmsSettings
+#include "SmumUtil.h" // SmumUtil
+#include "SmumLogging.h"
+#include <messagingvariant.hrh>
+#include <RCustomerServiceProfileCache.h>
+#include "smsui.pan" // Panic codes
+#include <data_caging_path_literals.hrh>
+#include <centralrepository.h> // CRepository
+#include <messaginginternalcrkeys.h> // 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<KTestStringLength> 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