mobilemessaging/smum/src/SmumUtil.cpp
changeset 0 72b543305e3a
--- /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