messagingapp/msgsettings/msgsettingsmw/src/smssettingsprivate.cpp
changeset 23 238255e8b033
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msgsettingsmw/src/smssettingsprivate.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,397 @@
+/*
+ * Copyright (c) 2009 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:  This provides the messaging mw interface for sms 
+ *
+ */
+
+#include <commdb.h>
+#include <commdbconnpref.h>
+#include <msvapi.h>
+#include <msvstd.h>
+#include <msvuids.h>
+#include <csmsaccount.h>
+#include <smutset.h>
+#include "debugtraces.h"
+
+
+#include "smssettingsprivate.h"
+#include "msgsettingsutil.h"
+
+
+const TInt KUniSmsSCStringLength = 50;
+
+/**
+ * Message Server session event handler 
+ */
+class CObserver : public MMsvSessionObserver
+{
+public:
+    void HandleSessionEvent(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/,
+                            TAny* /*aArg2*/, TAny* /*aArg3*/)
+    {
+    }
+
+    void HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/,
+                             TAny* /*aArg2*/, TAny* /*aArg3*/)
+    {
+    }
+};
+
+//two phase constructor
+SmsSettingsPrivate* SmsSettingsPrivate::NewL()
+{
+    SmsSettingsPrivate* self = new (ELeave) SmsSettingsPrivate();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+//2nd phase constructor
+void SmsSettingsPrivate::ConstructL()
+{
+    createRepositoryL();
+}
+
+//---------------------------------------------------------------
+// SmsSettingsPrivate::SmsSettingsPrivate
+// @see header
+//---------------------------------------------------------------
+SmsSettingsPrivate::SmsSettingsPrivate()
+{
+    //do nothing
+}
+
+//---------------------------------------------------------------
+// SmsSettingsPrivate::~SmsSettingsPrivate
+// @see header
+//---------------------------------------------------------------
+SmsSettingsPrivate::~SmsSettingsPrivate()
+{
+    //do nothing
+}
+
+//---------------------------------------------------------------
+// SmsSettingsPrivate::createRepository
+// @see header
+//---------------------------------------------------------------
+void SmsSettingsPrivate::createRepositoryL()
+{
+    CObserver* pObserver = new (ELeave) CObserver();
+    CleanupStack::PushL(pObserver);
+
+    TMsvSelectionOrdering ordering;
+    CMsvSession* iMsvSession = CMsvSession::OpenSyncL(*pObserver);
+    CleanupStack::PushL(iMsvSession);
+    CMsvEntry* root = CMsvEntry::NewL(*iMsvSession,
+                                      KMsvRootIndexEntryId,
+                                      ordering);
+    CleanupStack::PushL(root);
+
+    //then do not create a new entry
+    TMsvId firstId;
+    TRAPD(err, TSmsUtilities::ServiceIdL(*root,firstId));
+    if (err == KErrNotFound)
+    {
+        TMsvEntry entry;
+        entry.iMtm = KUidMsgTypeSMS;
+        entry.iType = KUidMsvServiceEntry;
+        entry.SetReadOnly(EFalse);
+        entry.SetVisible(EFalse);
+        entry.iDate.UniversalTime();
+        entry.iDetails.Set(_L("Nokiatest"));
+
+        root->SetEntryL(KMsvRootIndexEntryId);
+        root->CreateL(entry);
+		}
+		
+        //create a dummy entry
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+    smsSettings->SetValidityPeriod(ESmsVPMaximum);
+    smsSettings->SetReplyQuoted(ETrue);
+    smsSettings->SetRejectDuplicate(ETrue);
+    smsSettings->SetDelivery(ESmsDeliveryImmediately);
+    smsSettings->SetDeliveryReport(EFalse);
+    smsSettings->SetReplyPath(EFalse);
+    smsSettings->SetMessageConversion((TSmsPIDConversion) 0);
+    smsSettings->SetCanConcatenate(ETrue);
+    smsSettings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet7Bit);
+    smsSettings->SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger);
+    smsSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisible);
+    smsSettings->SetSpecialMessageHandling(CSmsSettings::EMoveReportToInboxVisible);
+    smsSettings->SetSmsBearer((CSmsSettings::TMobileSmsBearer) 3);
+    smsSettings->SetCommDbAction(CSmsSettings::EStoreToCommDb);
+    smsSettings->SetSmsBearerAction(CSmsSettings::EStoreToCommDb);
+
+    smsAccount->SaveSettingsL(*smsSettings);
+
+    CleanupStack::PopAndDestroy(2);
+   	CleanupStack::PopAndDestroy(3);
+}
+
+void SmsSettingsPrivate::setDeliveryReport(TBool report)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+
+    smsSettings->SetDeliveryReport(report);
+
+    smsAccount->SaveSettingsL(*smsSettings);
+
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::setCharacterEncoding(TBool status)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+
+    if (status == EFalse)
+    {
+        smsSettings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet7Bit);
+    }
+    else
+    {
+        smsSettings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabetUCS2);
+    }
+
+    smsAccount->SaveSettingsL(*smsSettings);
+
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::settingsDeliverReportAndCharEncoding(
+                                                              TBool& report,
+                                                              TBool& statusEncoding)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+
+    report = smsSettings->DeliveryReport();
+
+    TSmsDataCodingScheme::TSmsAlphabet charSet = smsSettings->CharacterSet();
+
+    statusEncoding = ETrue;
+    if (charSet == TSmsDataCodingScheme::ESmsAlphabet7Bit)
+    {
+        statusEncoding = EFalse;
+    }
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::getAllSMSMessageCenter(
+                                                RPointerArray<HBufC>& accessPoints,
+                                                TInt &defaultIndex)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* settings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*settings);
+
+    //save the default index
+    defaultIndex = settings->DefaultServiceCenter();
+
+    int totalSMSc = settings->ServiceCenterCount();
+    for (int index = 0; index < totalSMSc; index++)
+    {
+        TPtrC16 name = settings->GetServiceCenter(index).Name();
+        HBufC* accessName = name.AllocL();
+        accessPoints.AppendL(accessName);
+    }
+
+    CleanupStack::PopAndDestroy(2);
+
+    return;
+}
+
+void SmsSettingsPrivate::setSMSMessageCenter(int index)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+    smsSettings->SetDefaultServiceCenter(index);
+    smsAccount->SaveSettingsL(*smsSettings);
+
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::editSMSServiceCentre(HBufC* address, HBufC* name,
+                                              TInt index)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+
+    TInt indexDefault = smsSettings->DefaultServiceCenter();
+    bool flag = false;
+    if (index == indexDefault)
+    {
+        flag = true;
+    }
+
+    //remove the service center
+    smsSettings->RemoveServiceCenter(index);
+    //add a new service center
+    smsSettings->AddServiceCenterL(name->Des(), address->Des());
+
+    if (flag == true)
+    {
+        smsSettings->SetDefaultServiceCenter(smsSettings->ServiceCenterCount()
+                - 1);
+    }
+    smsAccount->SaveSettingsL(*smsSettings);
+
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::addSmsMessageCenter(HBufC* address, HBufC* name)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+    smsSettings->AddServiceCenterL(name->Des(), address->Des());
+    smsAccount->SaveSettingsL(*smsSettings);
+
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::smsCenterNameAndNumber(int index,
+                                                HBufC** centerNumber,
+                                                HBufC** centerName)
+{
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+
+    TPtrC16 addr = smsSettings->GetServiceCenter(index).Address();
+    TPtrC16 name = smsSettings->GetServiceCenter(index).Name();
+
+    (*centerNumber) = addr.AllocL();
+    (*centerName) = name.AllocL();
+
+    CleanupStack::PopAndDestroy(2);
+}
+
+void SmsSettingsPrivate::setEmailGateway(HBufC* emailGateway)
+{
+#ifdef _DEBUG_TRACES_
+    qDebug() << "Enter SmsSettingsPrivate::setEmailGateway" << emailGateway;
+#endif
+
+    
+    TBuf<KUniSmsSCStringLength> emailGateWayNumber;
+    
+    MsgSettingsUtil::WriteEmailGatewayOverSmsSettingsL( 
+                             emailGateway->Des(),
+                             ETrue );
+    
+#ifdef _DEBUG_TRACES_
+    qDebug() << "Exit SmsSettingsPrivate::setEmailGateway";
+#endif
+
+    return;
+}
+
+void SmsSettingsPrivate::setEmailSeriveCenterNumber(HBufC* emailNumber)
+{
+#ifdef _DEBUG_TRACES_
+    qDebug() << "Enter SmsSettingsPrivate::setEmailSeriveCenterNumber"
+            << emailNumber;
+#endif
+
+    
+    MsgSettingsUtil::WriteEmailServiceNumberOverSmsSettingsL(emailNumber->Des(),
+                                                             ETrue );
+    
+#ifdef _DEBUG_TRACES_
+    qDebug() << "Enter SmsSettingsPrivate::setEmailSeriveCenterNumber";
+#endif
+
+    return;
+}
+
+void SmsSettingsPrivate::emailEmailGatewayAndServiceCenterNumber(
+                                                  HBufC** emailGateway,
+                                                  HBufC** serviceNumber)
+{
+#ifdef _DEBUG_TRACES_
+    qDebug()
+            << "Enter SmsSettingsPrivate::emailEmailGatewayAndServiceCenterNumber";
+#endif
+
+    CSmsAccount* smsAccount = CSmsAccount::NewLC();
+    CSmsSettings* smsSettings = CSmsSettings::NewLC();
+
+    smsAccount->LoadSettingsL(*smsSettings);
+
+    TBuf<KUniSmsSCStringLength> emailSmscNumber;
+    TBuf<KUniSmsSCStringLength> emailGateWayNumber;
+
+    TInt readResult = MsgSettingsUtil::ReadEmailOverSmsSettingsL(emailSmscNumber,
+                                               emailGateWayNumber);
+    if (KErrNone == readResult)
+    {
+        // In any otther case we need to show the conf pop-up window
+        if (emailSmscNumber == KNullDesC)
+        {
+            if (smsSettings->DefaultServiceCenter() > 0)
+            {
+                emailSmscNumber = smsSettings->GetServiceCenter(
+                             smsSettings->DefaultServiceCenter()).Address();
+            }
+            else
+            {
+                int totalSMSc = smsSettings->ServiceCenterCount();
+                if (totalSMSc > 0)
+                {
+                    emailSmscNumber
+                        = smsSettings->GetServiceCenter(0).Address();
+                }
+            }
+        }
+    }
+    
+    MsgSettingsUtil::WriteEmailServiceNumberOverSmsSettingsL(
+                                                             emailSmscNumber,
+                                                             ETrue);
+    
+    *emailGateway = emailGateWayNumber.AllocL();
+    *serviceNumber = emailSmscNumber.AllocL();
+    
+    CleanupStack::PopAndDestroy(2); //smssetting and smsaccount
+    
+#ifdef _DEBUG_TRACES_
+    qDebug()
+            << "Enter SmsSettingsPrivate::emailEmailGatewayAndServiceCenterNumber"
+            << serviceNumber << " " << emailGateway;
+#endif
+
+    
+}
+
+//eof